Files
wyczarujprezent.pl/modules/thecheckout/views/js/parsers/dpdfrance.js
2024-10-28 22:14:22 +01:00

177 lines
6.2 KiB
JavaScript

/**
* NOTICE OF LICENSE
*
* This source file is subject to the Software License Agreement
* that is bundled with this package in the file LICENSE.txt.
*
* @author Peter Sliacky (Zelarg)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
/* Compatibility check with dpdfrance v6.1.3, on 31.3.2023 */
/* (!) README
dpdfrance requires logged-in user (multiple places, getCurrentRelaisDatasSearchAndRelaisList(), checkAjaxAuthValidity(), so make following changes:
1/ In checkout module configuration, enable 'Show "Save" button in Personal Info'
2/ In modules/dpdfrance/dpdfrance.php, add to hookDisplayAfterCarrier method condition, like this:
public function hookDisplayAfterCarrier(array $params)
{
// Break if customer ID is not yet set
if (!$this->context->customer->id) {
return;
}
...
*/
checkoutShippingParser.dpdfrance = {
init_once: function (elements) {
if (debug_js_controller) {
console.info('[thecheckout-dpdfrance.js] init_once()');
}
if (elements && elements.length) {
$(elements[0]).append(' \
<script> \
$(document).ready( \
checkoutShippingParser.dpdfrance.on_ready \
); \
</script> \
');
}
},
on_ready: function() {
if (typeof dpdFranceDisplayMethodBlock !== 'function') {
return;
}
dpdFranceDisplayMethodBlock();
/**
* Handle relay points behavior on click and register relau points delivery address
*/
$('#dpdfrance_relais_point_table').on('click', 'tr.dpdfrance_lignepr', function(event) {
dpdFranceRegisterPudo($(this).data("relayId"));
event.preventDefault();
});
/**
* [ALL DELIVERY OPTIONS] EVENT LISTENER
* If the delivery option has changed
*/
document.querySelectorAll("input[name*='delivery_option[']").forEach(function(element) {
element.addEventListener("change", function() {
uncheckAllDeliveryOptions();
element.setAttribute('checked', 'checked');
dpdFranceDisplayMethodBlock();
});
});
/**
* PREDICT
*/
let predictBlock = document.querySelector('#div_dpdfrance_predict_block');
if (predictBlock) {
/**
* Validate the format of the phone number, if empty return empty value else display number and error message
*/
let gsmNumbersFormatValidation = new RegExp(/^[\+]?[(]?[0-9]{0,3}[)]?[-\s\.]?[0-9]{0,3}[-\s\.]?[0-9]+$/,'im');
let gsmBasicFormatValidation = new RegExp(/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,8}$/,'im');
// let selectedAddressId = $("article.address-item.selected").attr('id').replace('id-address-delivery-address-', '');
let selectedAddressId = 0;
let customerAddresses = Object.keys(prestashop.customer.addresses);
if (customerAddresses && customerAddresses.length) {
selectedAddressId = customerAddresses[0];
}
let predictGsmButton = $("#dpdfrance_predict_gsm_button");
let predictError = $("#dpdfrance_predict_error");
let gsmFormatError = false;
let gsmDeliveryMobilePhone = '' // dpdfranceGetGsmFromSelectedAddress(selectedAddressId);
dpdfrance_checkGSM(document.querySelector("input#input_dpdfrance_predict_gsm_dest"));
// if (gsmDeliveryMobilePhone && gsmDeliveryMobilePhone !== false) {
// gsmDeliveryMobilePhone = gsmDeliveryMobilePhone.replace(/\s+/g, '');
// if (gsmNumbersFormatValidation.test(gsmDeliveryMobilePhone)) {
// if (!gsmBasicFormatValidation.test(gsmDeliveryMobilePhone)) {
// gsmFormatError = true;
// } else {
// /**
// * The validation process continues only if the shipping method is predict
// */
// let gsmShippingMethod = $("input[name*='delivery_option[']:checked");
// //Check if the selected input element exist
// if (gsmShippingMethod.length === 0) {
// console.log("Veuillez sélectionner une methode de livraison");
// } else {
// let gsmShippingMethodValue = gsmShippingMethod.val().slice(0, -1);
// if (gsmShippingMethodValue === dpdfrancePredictCarrierId) {
// dpdfrance_checkGSM(gsmDeliveryMobilePhone);
// }
// }
// }
// } else {
// gsmFormatError = true;
// }
// } else {
// gsmFormatError = true;
// gsmDeliveryMobilePhone = '';
// }
/**
* Display error message if gsm number is incorrect
*/
if (gsmFormatError) {
predictGsmButton.css('background-color', '#424143');
predictGsmButton.html('>');
predictError.show();
//Prevent disabling the order button if the gsm number is not provided when not using the predict carrier
let predictBlockDisplay = $("#div_dpdfrance_predict_block").css('display');
if (predictBlockDisplay !== 'none') {
dpdFranceHandleOrderButtonStatus(false);
}
}
/**
* ? Assign phone number to Predict block input phone number
*/
// document.querySelector("input[name='dpdfrance_predict_gsm_dest']").value = gsmDeliveryMobilePhone;
/**
* If click on confirm address, assign phone number to predict input field
* TODO: not working perfectly
*/
// document.querySelector('button[name="confirm-addresses"]').addEventListener('click', ()=>{
// document.querySelector("input[name='dpdfrance_predict_gsm_dest']").value = gsmDeliveryMobilePhone;
// }
// );
/**
* [PREDICT] EVENT LISTENER
* On the key press in the Predict block phone number input field, check the phone number
*/
$('body').on('keyup', "input#input_dpdfrance_predict_gsm_dest", function() {
dpdfrance_checkGSM($(this).get(0));
});
// document.querySelector("input#input_dpdfrance_predict_gsm_dest").addEventListener('keyup', ()=>{
// dpdfrance_checkGSM();
// }
// );
}
},
delivery_option: function (element) {
if (debug_js_controller) {
console.info('[thecheckout-dpdfrance.js] delivery_option()');
}
},
extra_content: function (element) {
}
}