true, ]; public function postProcess() { if (!Validate::isLoadedObject($this->context->cart)) { $this->errors[] = $this->module->l('Shopping cart does not exist', self::TRANSLATION_SOURCE); } elseif (!$carrierData = $this->getCarrierData()) { $this->errors[] = $this->module->l('Selected carrier is not InPost Parcel Lockers', self::TRANSLATION_SOURCE); } else { switch (Tools::getValue('action')) { case 'updateTargetLocker': $this->ajaxProcessUpdateTargetPoint($carrierData); break; case 'updateReceiverDetails': $this->ajaxProcessUpdateReceiverDetails($carrierData); break; case 'updateChoice': $this->ajaxProcessUpdateChoice($carrierData); break; } } $this->ajaxResponse(); } protected function ajaxProcessUpdateTargetPoint(array $carrierData) { $updater = $this->getUpdater($carrierData) ->setTargetPoint($this->getLockerFromPost($carrierData['id_carrier'])) ->saveChoice($this->context->cart->id); if ($updater->hasErrors()) { $this->errors = $updater->getErrors(); } } protected function ajaxProcessUpdateReceiverDetails(array $carrierData) { $updater = $this->getUpdater($carrierData) ->setEmail(Tools::getValue('inpost_email')) ->setPhone(Tools::getValue('inpost_phone')) ->saveChoice($this->context->cart->id); if ($updater->hasErrors()) { $this->errors = $updater->getErrors(); } } protected function ajaxProcessUpdateChoice(array $carrierData) { $updater = $this->getUpdater($carrierData) ->setEmail(Tools::getValue('inpost_email')) ->setPhone(Tools::getValue('inpost_phone')); if ($carrierData['lockerService']) { $updater->setTargetPoint($this->getLockerFromPost($carrierData['id_carrier'])); } $updater->saveChoice($this->context->cart->id); if ($updater->hasErrors()) { $this->errors = $updater->getErrors(); } } protected function getCarrierData() { $deliveryOption = $this->context->cart->getDeliveryOption(); $carrierIds = explode(',', trim($deliveryOption[$this->context->cart->id_address_delivery], ',')); foreach ($carrierIds as $carrierId) { if ($carrierData = InPostCarrierModel::getDataByCarrierId($carrierId)) { return $carrierData; } } return null; } protected function getUpdater(array $carrierData) { /** @var CartChoiceUpdater $updater */ $updater = $this->module->getService('inpost.shipping.updater.cart_choice'); return $updater ->setCartChoice(new InPostCartChoiceModel($this->context->cart->id)) ->setCarrierData($carrierData); } protected function getLockerFromPost($id_carrier) { $locker = Tools::getValue('inpost_locker'); return isset($locker[$id_carrier]) ? $locker[$id_carrier] : null; } protected function ajaxResponse() { if (!empty($this->errors)) { $this->response = [ 'success' => false, 'errors' => $this->errors, ]; } header('Content-type: application/json'); $this->ajaxDie(json_encode($this->response)); } }