public function savePackageFromPost() { $id_current_order = (int) Tools::getValue('id_order'); $current_session_type = Tools::getValue('dpdpoland_SessionType'); $id_method = (int) $this->getMethodBySessionType($current_session_type); if (!$this->validateAddressForPackageSession((int) Tools::getValue('dpdpoland_id_address_delivery'), (int) $id_method)) { self::$errors[] = $this->l('Your develivery address is not compatible with the selected shipping method.') . ' ' . $this->l('DPD Poland Domestic is available only if develivery address is Poland.') . ' ' . $this->l('DPD Internationl shipping method is available only if delivery address is not Poland.'); return false; } $address_delivery = new Address((int) Tools::getValue('dpdpoland_id_address_delivery')); $address_validation_errors = $address_delivery->validateFields(false, true); if ($address_validation_errors !== true) { self::$errors[] = $this->l('Client address is not valid:') . ' ' . $address_validation_errors . '. ' . $this->l('Please update your client address with required fields.'); return false; } $address_delivery->id = 0; $address_delivery->deleted = 1; if (!$address_delivery->save()) { self::$errors[] = $this->l('Could not save client address'); return false; } $configuration = new DpdPolandConfiguration(); $address_sender = new Address(); $id_country = Country::getByIso('PL'); $country = new Country($id_country, $this->context->language->id); $address_sender->id_country = Country::getByIso(self::POLAND_ISO_CODE); $address_sender->company = $configuration->company_name; $address_sender->firstname = $configuration->name_surname; $address_sender->lastname = $configuration->name_surname; $address_sender->address1 = $configuration->address; $address_sender->address2 = $country->name; $address_sender->postcode = self::convertPostcode($configuration->postcode); $address_sender->city = $configuration->city; $address_sender->other = $configuration->email; $address_sender->phone = $configuration->phone; $address_sender->alias = $this->l('Sender address'); $address_sender->deleted = 1; $address_sender->vat_number = $address_delivery->vat_number; $address_sender->phone_mobile = $address_delivery->phone_mobile; $address_sender->dni = $address_delivery->dni; $address_validation_errors = $address_sender->validateFields(false, true); if ($address_validation_errors !== true) { self::$errors[] = $this->l('Sender address is not valid') . ' ' . $address_validation_errors; return false; } if (!$address_sender->save()) { self::$errors[] = $this->l('Could savesave sender address'); return false; } $additional_info = Tools::getValue('additional_info'); $package = new DpdPolandPackage(); $package->id_order = $id_current_order; $package->sessionType = Tools::getValue('dpdpoland_SessionType'); $package->payerNumber = Tools::getValue('dpdpoland_PayerNumber'); $package->id_address_delivery = (int) $address_delivery->id; $package->id_address_sender = (int) $address_sender->id; $package->additional_info = $additional_info; $package->ref1 = Tools::getValue('dpdpoland_ref1'); $package->ref2 = Tools::getValue('dpdpoland_ref2'); if ($package->sessionType == 'domestic_with_cod') { $package->cod_amount = (double) Tools::getValue('dpdpoland_COD_amount'); } if ($declaredValue_amount = Tools::getValue('dpdpoland_DeclaredValue_amount')) { $package->declaredValue_amount = (double) $declaredValue_amount; } foreach (Tools::getValue('parcels') as $parcel) { $package->addParcel($parcel, $additional_info); } if (!($result = $package->create())) { self::$errors = DpdPolandPackageWS::$errors; return false; } elseif (!$this->saveParcelsIntoPackage($package->id_package_ws, Tools::getValue('parcels'), $result['Parcels'], Tools::getValue('dpdpoland_products'))) { return false; } $waybill = isset($result['Parcels']['Parcel']['Waybill']) ? $result['Parcels']['Parcel']['Waybill'] : $result['Parcels']['Parcel'][0]['Waybill']; if (!$this->addTrackingNumber($id_current_order, $waybill)) { return false; } return $package->id_package_ws; }