Add new payment and shipping parsers for various integrations

- Implemented Google Pay parser in bongooglepay.js
- Added Buckaroo 3 payment parser in buckaroo3.js
- Introduced DataTrans CW Mastercard parser in datatranscw.js
- Created DataTrans CW Credit Card parser in datatranscw_creditcard.js
- Developed DHL Assistant shipping parser in dhlassistant.js
- Added Estimated Delivery parser in estimateddelivery.js
- Implemented Floapay payment parser in floapay.js
- Created FS Pickup at Store shipping parser in fspickupatstore.js
- Developed Generic Iframe parser in generic_iframe_parser.js
- Added Geodis Officiel shipping parser in geodisofficiel.js
- Implemented Glob Kurier module shipping parser in globkuriermodule.js
- Created Latvija Post Express Pickup Terminal parser in latvijaspastsexpresspastspostterminalslv.js
- Developed LP Shipping parser in lpshipping.js
- Added Mijora Venipak parser in mijoravenipak.js
- Implemented Apple Pay parser in pm_applepay.js
- Created Przelewy24 payment parser in przelewy24.js
- Developed Pshugls shipping parser in pshugls.js
- Added Redsys Insite payment parser in redsysinsite.js
- Implemented Tpay payment parser in tpay.js
- Updated third-party integration documentation for FedEx DotCom
This commit is contained in:
2025-08-04 23:10:27 +02:00
parent 037a6c5551
commit d39433f0d4
125 changed files with 4986 additions and 1772 deletions

View File

@@ -14,33 +14,36 @@
{* necessary here, core's checkout.js script looks for #checkout element and binds handlers only then - setUpCheckout() *}
{*<div id="checkout" class="fool-js-confirmation-controllers"></div>*}
<script>
var debug_js_controller = '{$debugJsController}';
var static_token = '{$static_token}';
var config_default_payment_method = '{$tc_config->default_payment_method}';
var config_show_i_am_business = '{$tc_config->show_i_am_business}';
var config_show_i_am_private = '{$tc_config->show_i_am_private}';
var config_show_i_am_business_delivery = '{$tc_config->show_i_am_business_delivery}';
var config_show_i_am_private_delivery = '{$tc_config->show_i_am_private_delivery}';
var config_force_customer_to_choose_country = '{$tc_config->force_customer_to_choose_country}';
var config_blocks_update_loader = '{$tc_config->blocks_update_loader}';
var config_refresh_minicart = (true == '{$tc_config->refresh_minicart}');
var config_postcode_remove_spaces = (true == '{$tc_config->postcode_remove_spaces}');
var config_separate_payment = (true == '{$tc_config->separate_payment}');
var separate_payment_key = '{$separatePaymentKeyName}';
var isEmptyCart = '{$isEmptyCart}';
var tcModuleBaseUrl = '{$urls.base_url}/modules/thecheckout';
var forceRefreshShipping = '{$forceRefreshShipping}';
var sendcloud_script = '{$sendcloud_script}';
var debug_js_controller = '{$debugJsController|escape:'javascript':'UTF-8'}';
var static_token = '{$static_token|escape:'javascript':'UTF-8'}';
var config_default_payment_method = '{$z_tc_config->default_payment_method|escape:'javascript':'UTF-8'}';
var config_show_i_am_business = '{$z_tc_config->show_i_am_business|escape:'javascript':'UTF-8'}';
var config_show_i_am_private = '{$z_tc_config->show_i_am_private|escape:'javascript':'UTF-8'}';
var config_show_i_am_business_delivery = '{$z_tc_config->show_i_am_business_delivery|escape:'javascript':'UTF-8'}';
var config_show_i_am_private_delivery = '{$z_tc_config->show_i_am_private_delivery|escape:'javascript':'UTF-8'}';
var config_force_customer_to_choose_country = '{$z_tc_config->force_customer_to_choose_country|escape:'javascript':'UTF-8'}';
var config_blocks_update_loader = '{$z_tc_config->blocks_update_loader|escape:'javascript':'UTF-8'}';
var config_refresh_minicart = (true == '{$z_tc_config->refresh_minicart|escape:'javascript':'UTF-8'}');
var config_postcode_remove_spaces = (true == '{$z_tc_config->postcode_remove_spaces|escape:'javascript':'UTF-8'}');
var config_separate_payment = (true == '{$z_tc_config->separate_payment|escape:'javascript':'UTF-8'}');
var config_use_other_for_business_private = (true == '{$z_tc_config->use_other_field_for_business_private|escape:'javascript':'UTF-8'}');
var separate_payment_key = '{$separatePaymentKeyName|escape:'javascript':'UTF-8'}';
var isEmptyCart = '{$isEmptyCart|escape:'javascript':'UTF-8'}';
var tcModuleBaseUrl = '{$urls.base_url|escape:'javascript':'UTF-8'}/modules/thecheckout';
var forceRefreshShipping = '{$forceRefreshShipping|escape:'javascript':'UTF-8'}';
var sendcloud_script = '{$sendcloud_script|escape:'javascript':'UTF-8'}';
var i18_requiredField = "{l s='Required field' d='Shop.Forms.Errors'}";
var i18_fixErrorBelow = "{l s='Please fix the error below.' d='Shop.Notifications.Error'}";
var i18_sdiLength = "{l s='Inserire il codice SDI di sette cifre. Inserire sette volte zero (0000000) se non si possiede un codice SDI' mod='thecheckout'}";
var i18_popupPaymentNotice = "{l s='Payment popup will appear once the form is confirmed' mod='thecheckout'}";
var i18_validationError = "{l s='Validation error' mod='thecheckout'}";
var i18_business = "{l s='business' mod='thecheckout'}";
var i18_private = "{l s='private' mod='thecheckout'}";
var installedModules = [];
{foreach $installedModules as $moduleName=>$moduleState}
installedModules['{$moduleName}'] = '{$moduleState}';
installedModules['{$moduleName|escape:'javascript':'UTF-8'}'] = '{$moduleState|escape:'javascript':'UTF-8'}';
{/foreach}
var tcAmazonPaySessionId = '{$tc_amazonPaySessionId|default:""}';
var tcAmazonPaySessionId = '{$tc_amazonPaySessionId|default:""|escape:'javascript':'UTF-8'}';
</script>
<style>
@@ -60,26 +63,26 @@
{/literal}
{/if}
{if !$tc_config->offer_second_address}{literal}
{if !$z_tc_config->offer_second_address}{literal}
.second-address {
display: none;
}
{/literal}{/if}
{if !$tc_config->show_block_reassurance}{literal}
{if !$z_tc_config->show_block_reassurance}{literal}
#block-reassurance {
display: none;
}
{/literal}{/if}
{if !$tc_config->show_order_message}{literal}
{if !$z_tc_config->show_order_message}{literal}
#thecheckout-order-message {
display: none;
}
{/literal}{/if}
{if !$tc_config->using_material_icons}{literal}
{if !$z_tc_config->using_material_icons}{literal}
span.custom-radio input[type=radio] {
opacity: 1;
}
@@ -108,7 +111,7 @@
{/literal}{/if}
{*
{if $tc_config->show_i_am_business}{literal}
{if $z_tc_config->show_i_am_business}{literal}
#thecheckout-address-invoice .form-group.business-field {
order: -1; /* Put business field in front if we have this checkbox */
}
@@ -117,12 +120,12 @@
*}
/* BEGIN Custom CSS styles from config page */
{$tc_config->custom_css nofilter}
{$z_tc_config->custom_css nofilter}
/* END Custom CSS styles from config page */
</style>
<script>
/* BEGIN Custom JS code from config page */
{$tc_config->custom_js nofilter}
{$z_tc_config->custom_js nofilter}
/* END Custom JS code from config page */
</script>
{*<div id="checkout">*}
@@ -132,7 +135,7 @@
{*{debug}*}
<div id="empty-cart-notice">
<h1>{l s='Cart is empty' d='Shop.Notifications.Error'}</h1>
<a class="label" href="{$urls.pages.index}">
<a class="label" href="{$urls.pages.index|escape:'javascript':'UTF-8'}">
<span class="laquo">«</span>{l s='Continue shopping' d='Shop.Theme.Actions'}
</a>
</div>
@@ -148,8 +151,8 @@
<div class="blocks checkout-area-{$k++}{if $data.size<=35} width-below-35pct{/if}{if $data.size<=50} width-below-50pct{/if}{if $data.size<=70} width-below-70pct{/if}" style="flex-basis: {$data.size}%; min-width: {$data.size}%;">{foreach $sub_block as $checkout_block}
{foreach $checkout_block as $blockName=>$classes}
{if !in_array($blockName, $excludeBlocks)}
<div class="tc-block-placeholder thecheckout-{$blockName}"></div>
<div class="checkout-block{if $blockName|in_array:['login-form','account','address-invoice','address-delivery','shipping','payment']} main-block{/if} {$classes}" id="thecheckout-{$blockName}">
<div class="tc-block-placeholder thecheckout-{$blockName|escape:'javascript':'UTF-8'}"></div>
<div class="checkout-block{if $blockName|in_array:['login-form','account','address-invoice','address-delivery','shipping','payment']} main-block{/if} {$classes|escape:'javascript':'UTF-8'}" id="thecheckout-{$blockName|escape:'javascript':'UTF-8'}">
<div class="inner-area">
{if "cart-summary" == $blockName}
{*cart-summary block loaded via Ajax, display dummy container only*}
@@ -198,11 +201,12 @@
<div class="popup-header">
<div class="popup-close-icon"></div>
<div class="popup-shop-info">
<div class="popup-shop-logo"><img src="{$shop.logo}"></div>
<div class="popup-shop-name">{$shop.name}</div>
<div class="popup-shop-logo"><img src="{$shop.logo|escape:'javascript':'UTF-8'}"></div>
<div class="popup-shop-name">{$shop.name|escape:'htmlall':'UTF-8'}</div>
</div>
</div>
<div class="popup-body">
<iframe class="popup-embed"></iframe>
<div class="popup-payment-form"></div>
<div class="popup-payment-button">
{include file='module:thecheckout/views/templates/front/_partials/payment-confirmation-button.tpl'}
@@ -217,39 +221,39 @@
{include file='module:thecheckout/views/templates/front/blocks/confirm.tpl'}
{/if}
{if "html-box-1" == $blockName}
{$tc_config->html_box_1 nofilter}
{$z_tc_config->html_box_1 nofilter}
{/if}
{if "html-box-2" == $blockName}
{$tc_config->html_box_2 nofilter}
{$z_tc_config->html_box_2 nofilter}
{/if}
{if "html-box-3" == $blockName}
{$tc_config->html_box_3 nofilter}
{$z_tc_config->html_box_3 nofilter}
{/if}
{if "html-box-4" == $blockName}
{$tc_config->html_box_4 nofilter}
{$z_tc_config->html_box_4 nofilter}
{/if}
{if "required-checkbox-1" == $blockName && isset($separateModuleFields['thecheckout_required-checkbox-1'])}
<form class="account-fields module-account-fields {$blockName}">
<form class="account-fields module-account-fields {$blockName|escape:'javascript':'UTF-8'}">
{include file='module:thecheckout/views/templates/front/_partials/checkout-form-fields.tpl' field=$separateModuleFields['thecheckout_required-checkbox-1']}
</form>
{/if}
{if "required-checkbox-2" == $blockName && isset($separateModuleFields['thecheckout_required-checkbox-2'])}
<form class="account-fields module-account-fields {$blockName}">
<form class="account-fields module-account-fields {$blockName|escape:'javascript':'UTF-8'}">
{include file='module:thecheckout/views/templates/front/_partials/checkout-form-fields.tpl' field=$separateModuleFields['thecheckout_required-checkbox-2']}
</form>
{/if}
{if "newsletter" == $blockName && isset($separateModuleFields['ps_emailsubscription_newsletter'])}
<form class="account-fields module-account-fields {$blockName}">
<form class="account-fields module-account-fields {$blockName|escape:'javascript':'UTF-8'}">
{include file='module:thecheckout/views/templates/front/_partials/checkout-form-fields.tpl' field=$separateModuleFields['ps_emailsubscription_newsletter']}
</form>
{/if}
{if "psgdpr" == $blockName && isset($separateModuleFields['psgdpr_psgdpr'])}
<form class="account-fields module-account-fields {$blockName}">
<form class="account-fields module-account-fields {$blockName|escape:'javascript':'UTF-8'}">
{include file='module:thecheckout/views/templates/front/_partials/checkout-form-fields.tpl' field=$separateModuleFields['psgdpr_psgdpr']}
</form>
{/if}
{if "data-privacy" == $blockName && isset($separateModuleFields['ps_dataprivacy_customer_privacy'])}
<form class="account-fields module-account-fields {$blockName}">
<form class="account-fields module-account-fields {$blockName|escape:'javascript':'UTF-8'}">
{include file='module:thecheckout/views/templates/front/_partials/checkout-form-fields.tpl' field=$separateModuleFields['ps_dataprivacy_customer_privacy']}
</form>
{/if}
@@ -260,11 +264,11 @@
{/foreach}</div>
{elseif "size" === $key} {*intentionally empty*}
{else}
{if 0 === $key|strpos:'flex-split'}
<div class="{$key} checkout-area-{$k++}" style="flex-basis: {$data.size}%">
{if 0 === strpos($key,'flex-split')}
<div class="{$key|escape:'javascript':'UTF-8'} checkout-area-{$k++}" style="flex-basis: {$data.size}%">
{/if}
{blockContainer data=$sub_block}
{if 0 === $key|strpos:'flex-split'}
{if 0 === strpos($key,'flex-split')}
</div>
{/if}
@@ -273,30 +277,30 @@
{/foreach}
{/function}
{function step}
{if $tc_config->step_label_{$stepId}|trim}
{if $z_tc_config->step_label_{$stepId|escape:'javascript':'UTF-8'}|trim}
{* {assign number_of_steps $stepId scope='root'}*}
<div class="checkout-step-btn" data-step-id="{$stepId}">{$tc_config->step_label_{$stepId}}</div>
{assign var=blocksArr value=","|explode:$tc_config->step_blocks_{$stepId}}
{* Blocks: {$tc_config->step_blocks_{$stepId}}*}
<div class="checkout-step-btn" data-step-id="{$stepId|escape:'javascript':'UTF-8'}">{$z_tc_config->step_label_{$stepId|escape:'javascript':'UTF-8'}|escape:'javascript':'UTF-8'}</div>
{assign var=blocksArr value=","|explode:$z_tc_config->step_blocks_{$stepId|escape:'javascript':'UTF-8'}}
{* Blocks: {$z_tc_config->step_blocks_{$stepId}}*}
{* Blocks array: {$blocksArr|print_r}*}
<script type="text/javascript">
tc_steps.push(
{literal} {
{/literal}
step: {$stepId},
blocks: '{$tc_config->step_blocks_{$stepId}}',
validation: () => ({if isset($tc_config->step_validation_{$stepId}) && $tc_config->step_validation_{$stepId}|trim}{$tc_config->step_validation_{$stepId} nofilter}{else}true{/if}),
errorMsg: '{$tc_config->step_validation_error_{$stepId}}',
step: {$stepId|escape:'javascript':'UTF-8'},
blocks: '{$z_tc_config->step_blocks_{$stepId|escape:'javascript':'UTF-8'}|escape:'javascript':'UTF-8'}',
validation: () => ({if isset($z_tc_config->step_validation_{$stepId}) && $z_tc_config->step_validation_{$stepId}|trim}{$z_tc_config->step_validation_{$stepId|escape:'javascript':'UTF-8'} nofilter}{else}true{/if}),
errorMsg: '{$z_tc_config->step_validation_error_{$stepId|escape:'javascript':'UTF-8'}|escape:'javascript':'UTF-8'}',
{literal} }
{/literal}
);
</script>
<style>
{assign var=blocksSelector value=''}
{foreach ","|explode:$tc_config->step_blocks_{$stepId} as $blockName}
{assign var=blocksSelector value="{$blocksSelector}:not(#thecheckout-{$blockName|trim})"}
{foreach ","|explode:$z_tc_config->step_blocks_{$stepId} as $blockName}
{assign var=blocksSelector value="{$blocksSelector|escape:'javascript':'UTF-8'}:not(#thecheckout-{$blockName|trim|escape:'javascript':'UTF-8'})"}
{/foreach}
.checkout-step-{$stepId} .checkout-block{$blocksSelector} {literal} {
.checkout-step-{$stepId|escape:'javascript':'UTF-8'} .checkout-block{$blocksSelector|escape:'javascript':'UTF-8'} {literal} {
{/literal}
visibility: hidden;
position: absolute;
@@ -309,7 +313,7 @@
{/if}
{/function}
{function steps}
{if $tc_config->checkout_steps}
{if $z_tc_config->checkout_steps}
<script type="text/javascript">
var tc_steps = [];
</script>
@@ -322,7 +326,7 @@
{/if}
{/function}
{function steps_prev_next}
{if $tc_config->checkout_steps}
{if $z_tc_config->checkout_steps}
<div class="prev-next-container">
<button class="btn step-back back" type="button">
{l s='Back' mod='thecheckout'}
@@ -382,4 +386,14 @@
</div>
<div id="tc-container-mobile"></div>
{steps_prev_next}
<div class="modal fade" id="modal">
<div class="modal-dialog" role="document">
<div class="modal-content">
<button type="button" class="close" data-bs-dismiss="modal" data-dismiss="modal" aria-label="{l s='Close' d='Shop.Theme.Global'}">
<span aria-hidden="true">&times;</span>
</button>
<div class="js-modal-content"></div>
</div>
</div>
</div>
{/block}