bootstrap = true; $this->className = 'AdminInpostshipMass'; parent::__construct(); $this->debug = Configuration::get('INPOSTSHIP_DEBUG'); $this->debug_shop = Configuration::get('INPOSTSHIP_DEBUG_SHOP'); if ($this->debug_shop == 1) { @ini_set('display_errors', 'on'); @error_reporting(E_ALL | E_STRICT); } $this->shipx = new ShipX(Configuration::get('INPOSTSHIP_API_KEY'), (bool)Configuration::get('INPOSTSHIP_SANDBOX'), $this->debug); } private function isActiveModule() { $shop = new Shop((int)$this->context->shop->id); $auth = new AuthDS($this->nameModule, $shop->getBaseURL()); return (int)$auth->checkLicence(); } public function initPageHeaderToolbar() { parent::initPageHeaderToolbar(); } public function initHeader() { parent::initHeader(); } public function display() { if ($this->isActiveModule()) { $tpl = 'mass-list.tpl'; } else { $tpl = 'nolic.tpl'; } $this->context->smarty->assign(array( 'content' => $this->context->smarty->fetch($this->getTemplatePath().$tpl) )); parent::display(); } public function setMedia($isNewTheme = false) { parent::setMedia($isNewTheme); $this->addJS(_PS_MODULE_DIR_ . $this->nameModule.'/views/js/mass.js'); } public function initContent() { parent::initContent(); if ($this->isActiveModule()) { $shop = new Shop((int)$this->context->shop->id); // $this->addJqueryUI('ui.tooltip'); // $this->addJqueryUI('ui.popover'); // $this->addJqueryUI('ui.datepicker'); $this->addCSS(__DIR__ . '/../../assets/css/phelp.css'); // $this->addCSS('//min.gitcdn.xyz/repo/wintercounter/Protip/master/protip.min.css'); /* mass */ $new_pack_list = InpostPack::getNewPack(); if (!empty($new_pack_list)) { foreach ($new_pack_list as &$new) { $order = Db::getInstance()->getRow('SELECT `id_order`, `reference` FROM `'._DB_PREFIX_.'orders` WHERE `id_cart` = '.$new['id_cart']); $orderShop = new Order($order['id_order']); $orderProducts = $orderShop->getProducts(); $productList = ''; if (!empty($orderProducts)) { foreach ($orderProducts as $orderProduct) { $pro = new Product($orderProduct['id_product'], false, $this->context->cookie->id_lang); $img = $this->context->link->getImageLink($pro->link_rewrite, $orderProduct['image']->id, 'home_default'); $productList = '
ZdjęcieNazwa produktuIndeksIlość
'.$orderProduct['product_name'].''.$orderProduct['reference'].''.$orderProduct['product_quantity'].'
'; } } // dump($orderProducts);die; $new['order_id'] = $order['id_order']; $new['order_reference'] = $orderShop->reference; $carrier = new Carrier((int)$new['id_carrier']); $cref = $carrier->id; $c1 = unserialize(Configuration::get('INPOSTSHIP_CARRIER_1')); $c1i = Configuration::get('INPOSTSHIP_INSTALL_CARRIER_1'); $c2 = unserialize(Configuration::get('INPOSTSHIP_CARRIER_2')); $c2i = Configuration::get('INPOSTSHIP_INSTALL_CARRIER_2'); $c3 = unserialize(Configuration::get('INPOSTSHIP_CARRIER_3')); $c3i = Configuration::get('INPOSTSHIP_INSTALL_CARRIER_3'); $c4 = unserialize(Configuration::get('INPOSTSHIP_CARRIER_4')); $c4i = Configuration::get('INPOSTSHIP_INSTALL_CARRIER_4'); $c5 = (array)unserialize(Configuration::get('INPOSTSHIP_CARRIER_5')); $c6 = (array)unserialize(Configuration::get('INPOSTSHIP_CARRIER_6')); $service = 0; $c_type = 0; if ($c1i == 1) { if (in_array($cref, $c1)) { $service = 1; } } if ($c2i == 1) { if (in_array($cref, $c2)) { $service = 1; $c_type = 1; } } if ($c3i == 1) { if (in_array($cref, $c3)) { $service = 2; } } if ($c4i == 1) { if (in_array($cref, $c4)) { $service = 2; $c_type = 1; } } if (in_array($cref, $c5)) { $service = 5; } if (in_array($cref, $c6)) { $service = 6; $c_type = 1; } $new['service'] = $service; $new['c_type'] = $c_type; $new['cod_type'] = $c_type; $new['cod_total'] = number_format($orderShop->total_paid, 2, '.', ''); $new['productList'] = $productList; } } /* end mass */ $ssl = 'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://'; /* prestahelp API - do not remove! */ $module = Module::getInstanceByName('inpostship'); $mversion = $module->version; $auth = new AuthDS('inpostship', $shop->getBaseURL()); $chlogInfo = $auth->getChangelog(); $chlogInfoOther = $auth->getChangelogOther(); $currentVersion = $auth->getCurrentModuleVersion(); $banersHtml = AuthDS::getBanersHtml(); $phelpTop = __DIR__ . '/../../views/templates/admin/phelp-top.tpl'; $phelpBtm = __DIR__ . '/../../views/templates/admin/phelp-bottom.tpl'; $moduleAssets = $ssl . $this->context->shop->domain . $this->context->shop->physical_uri . 'modules/inpostship/assets/'; $lastestVersion = $currentVersion['version'] == $mversion ? true : false; $updateLink = 'https://modules.prestahelp.com/moduly/inpostship/inpostship' . $currentVersion['version'] . '.zip'; $indexLink = 'https://modules.prestahelp.com/moduly/inpostship/'; $licence = $auth->getLicence(); /* prestahelp API - do not remove! */ $sendingMethods = $this->shipx->getSendingMethods(); $scv = false; if (Configuration::get('INPOSTSHIP_SHOW_COD_VALUE') == 1) { $scv = true; } if ($c2i == 1 || $c4i == 1 || !empty($c6)) { if ($cref == $c2 || $cref == $c4 || $cref == $c6) { $scv = true; } } $this->context->smarty->assign(array( 'package_list' => $new_pack_list, 'packtype' => $this->shipx->locker, 'sendingMethods' => $sendingMethods['result']->items, 'insurance' => $this->shipx->insurance, 'packtype_default' => Configuration::get('INPOSTSHIP_PACK_SIZE'), 'dispatch' => Configuration::get('INPOSTSHIP_DISPATCH'), 'ipi' => Configuration::get('INPOSTSHIP_PACKAGE_INSURANCE'), 'banersHtml' => $banersHtml, 'phelpTop' => $phelpTop, 'phelpBtm' => $phelpBtm, 'chlogInfo' => $chlogInfo, 'chlogInfoOther' => $chlogInfoOther, 'moduleAssets' => $moduleAssets, 'lastestVersion' => $lastestVersion, 'updateLink' => $updateLink, 'indexLink' => $indexLink, 'moduleName' => $module->displayName, 'moduleNameInfo' => $module->name, 'moduleVersion' => $mversion, 'currentModuleVersion' => $currentVersion['version'], 'updated_date' => date('d-m-Y', strtotime($licence['licence']->date_expire_update)), 'licence_update' => $licence['licence']->licence_update, 'support_date' =>date('d-m-Y', strtotime($licence['licence']->date_expire_support)), 'licence_date' => date('d-m-Y', strtotime($licence['licence']->date_expire)), 'activeted' => $licence, 'licence' => $licence['licence'], 'scv' => $scv, )); } } public function postProcess() { parent::postProcess(); if (Tools::getIsset('submitGenerateLabels')) { $packs = Tools::getValue('pack', array()); if (!empty($packs)) { $pack_list = $this->preparePack($packs); $package_list = array(); if (!empty($pack_list)) { foreach ($pack_list as $item) { $package_list[] = $this->getPackInfo($item); } } if (!empty($package_list)) { $id_packs = array(); $org_id = (int)Configuration::get('INPOSTSHIP_API_ORGANIZATION'); $inpostapi = new ShipX(Configuration::get('INPOSTSHIP_API_KEY'), (bool)Configuration::get('INPOSTSHIP_SANDBOX'), false); foreach ($package_list as $pl) { $sizes = array(); if (InpostPack::setInpostPackage((int)$pl['id_order'], $pl['custom_attrib']['target_point'], '', $pl['packtype'], $pl['custom_attrib']['sending_method'], $pl['custom_attrib']['dropoff_point'], $pl['insurance']['amount'], $pl['cods']['amount'], $sizes)) { $id_pack = Db::getInstance()->Insert_ID(); $packPrepare = $inpostapi->shipment((int)$org_id, $pl['receiver'], $pl['sender'], $pl['parcels'], $pl['custom_attrib'], $pl['cods'], $pl['insurance'], $pl['additional_services'], $pl['reference'], $pl['service'], false, $pl['weekPack']); if (empty($packPrepare['error'])) { InpostPack::updateInpostShipped((int)$id_pack, $packPrepare['result']->status, $packPrepare['result']->id); $id_packcode = $packPrepare['result']->id; sleep(5); $offer = $inpostapi->getShipments($id_packcode, (int)$org_id); if (empty($offer['error'])) { $oferta = $offer['result']->selected_offer; if (!empty($oferta)) { InpostPack::updateInpostOffer((int)$id_pack, $offer['result']->status, $oferta->id); } $status = $offer['result']->status; $tracking_number = $offer['result']->tracking_number; if (!empty($tracking_number)) { $module = Module::getInstanceByName($this->name); $subject = $this->l('Order tracking e-mail'); InpostPack::updateInpostBuy((int)$id_pack, (int)$pl['id_order'], (int)$this->context->employee->id, $status, $tracking_number, $subject, $module); InpostPack::updateCreatedCart($pl['id_cart']); $id_packs[] = $id_packcode; } } } else { dump($packPrepare);die; } } } if (!empty($id_packs)) { // generowanie etykiet $format = Configuration::get('INPOSTSHIP_PRINT_FORMAT'); $file_name = 'etykiety-'.(date('Y-m-d-H-i-s')); $content = $this->shipx->getMultiLabels((int)Configuration::get('INPOSTSHIP_API_ORGANIZATION'), $id_packs, Configuration::get('INPOSTSHIP_PRINT_TYPE'), $format); $contents = $this->GetHeaders($content); if (!empty($contents['file_type'])) { switch ($contents['file_type']) { case 'zip':case 'zip; filename*': $file = time() . '-' . $contents['file']; $dir = __DIR__ . '/../../files/' . $file; file_put_contents($dir, $contents['http_code']); $size = filesize($dir); header('Pragma: public'); header('Expires: 0'); header('Cache-Control: public'); header('Content-Type: application/zip'); header('Content-Transfer-Encoding: Binary'); header('Content-Length: ' . $size); header('Content-Disposition: attachment; filename="' . basename($contents['file']) . '"'); ob_end_flush(); @readfile($dir); exit(); break; case 'pdf':case 'pdf; filename*': $dir = __DIR__ . '/../../files/' . $contents['file']; file_put_contents($dir, $contents['http_code']); $size = filesize($dir); header('Content-Type: application/pdf'); header('Content-Length: ' . $size); header('Content-Disposition: attachment; filename="' . basename($contents['file']) . '"'); ob_end_flush(); @readfile($dir); exit(); break; case 'epl': $dir = __DIR__ . '/../../files/' . $contents['file']; file_put_contents($dir, $contents['http_code']); $size = filesize($dir); header('Content-Type: application/octet-stream'); header('Content-Length: ' . $size); header('Content-Disposition: attachment; filename="' . basename($contents['file']) . '"'); ob_end_flush(); @readfile($dir); exit(); break; } } } } } else { $this->context->smarty->assign(array( 'errors' => 'Brak wybranych przesyłek!' )); } } } private function GetHeaders($response) { $headers = []; $xx = explode("\r\n\r\n", $response); foreach($xx as $i => $line) { if($i == 1) { $headers['http_code'] = $line; } else { $xxx2 = nl2br($line); $xxx = explode('
', $xxx2); if (!empty($xxx)) { foreach ($xxx as $x) { $hd = explode(':', $x); if (count($hd) > 1) { $headers[trim($hd[0])] = $hd[1]; if (trim($hd[0]) == 'Content-Disposition') { $file2 = explode('=', $hd[1]); $file = str_replace('"', '', $file2[1]); $headers['file'] = $file; $ext2 = explode('.', $file); $ext = $ext2[1]; switch ($ext2[1]) { case 'zip': $ext = 'zip'; break; case 'pdf': $ext = 'pdf'; break; } $headers['file_type'] = $ext; } } else { $headers['file'] = ''; $headers['file_type'] = ''; } } } $headers['head'] = $line; } } return $headers; } private function preparePack($packs) { $return = array(); if (!empty($packs)) { foreach ($packs['id_cart'] as $item) { $return[$item] = array(); $return[$item]['id_cart'] = $item; } foreach ($packs['packtype'] as $key => $pack) { if (isset($return[$key])) { $return[$key]['packtype'] = $pack[0]; } } foreach ($packs['sendtype'] as $key => $pack) { if (isset($return[$key])) { $return[$key]['sendtype'] = $pack[0]; } } foreach ($packs['ins'] as $key => $pack) { if (isset($return[$key])) { $return[$key]['ins'] = $pack[0]; } } if (isset($packs['pww'])) { foreach ($return as $key => $item) { if (isset($return[$key])) { if (isset($packs['pww'][$key])) { $return[$key]['pww'] = 1; } else { $return[$key]['pww'] = 0; } } } } else { foreach ($return as $key => $item) { if (isset($return[$key])) { $return[$key]['pww'] = 0; } } } } return $return; } private function getPackInfo($pack) { $info = array(); if (!empty($pack)) { $packInpost = InpostPack::getInpostShipCart((int)$pack['id_cart']); $id_order = $this->getIdOrderByIdCart((int)$pack['id_cart']); $order = new Order((int)$id_order); $cod = (int)$packInpost['cod']; $cods = array(); if ($cod == 1) { $cods['amount'] = $order->total_paid; $cods['currency'] = 'PLN'; } $pww = $pack['pww']; $carrier = new Carrier((int)$packInpost['id_carrier'], (int)$this->context->cookie->id_lang); $cref = $carrier->id_reference; $c1 = unserialize(Configuration::get('INPOSTSHIP_CARRIER_1')); $c1i = Configuration::get('INPOSTSHIP_INSTALL_CARRIER_1'); $c2 = unserialize(Configuration::get('INPOSTSHIP_CARRIER_2')); $c2i = Configuration::get('INPOSTSHIP_INSTALL_CARRIER_2'); $c3 = unserialize(Configuration::get('INPOSTSHIP_CARRIER_3')); $c3i = Configuration::get('INPOSTSHIP_INSTALL_CARRIER_3'); $c4 = unserialize(Configuration::get('INPOSTSHIP_CARRIER_4')); $c4i = Configuration::get('INPOSTSHIP_INSTALL_CARRIER_4'); $c5 = unserialize(Configuration::get('INPOSTSHIP_CARRIER_5')); $c6 = unserialize(Configuration::get('INPOSTSHIP_CARRIER_6')); $srv = 0; $c_type = 0; if ($c1i == 1) { if (in_array($cref, $c1)) { $service = 1; } } if ($c2i == 1) { if (in_array($cref, $c2)) { $service = 1; $c_type = 1; } } if ($c3i == 1) { if (in_array($cref, $c3)) { $service = 2; } } if ($c4i == 1) { if (in_array($cref, $c4)) { $service = 2; $c_type = 1; } } if (in_array($cref, $c5)) { $service = 5; } if (in_array($cref, $c6)) { $service = 6; $c_type = 1; } switch ($srv) { case 1:$service = 'inpost_locker_standard';break; // InPost Paczkomaty 24 case 2:$service = 'inpost_courier_standard';break; // Kurier InPost case 3:$service = 'inpost_locker_standard';break; // Allegro case 4:$service = 'inpost_locker_standard';break; case 5:$service = 'inpost_locker_standard';$pww = 1;break; // InPost Paczkomaty 24 Paczka w weekend case 6:$service = 'inpost_locker_standard';$pww = 1;break; // InPost Paczkomaty 24 Paczka w weekend default:$service = 'inpost_locker_standard';break; } $custom_attrib['target_point'] = $packInpost['receiver_machine']; $custom_attrib['sending_method'] = $pack['sendtype']; if ($custom_attrib['sending_method'] == 'parcel_locker') { $custom_attrib['dropoff_point'] = Configuration::get('INPOSTSHIP_SENDER_MACHINE'); } else if ($custom_attrib['sending_method'] == 'pop') { $custom_attrib['dropoff_point'] = Configuration::get('INPOSTSHIP_SENDER_MACHINE_POP'); } $insurance = array(); if ($pack['ins']) { $insurance['amount'] = $pack['ins']; $insurance['currency'] = 'PLN'; } $identity = $order->reference; $ident = Configuration::get('INPOSTSHIP_ORDER_NUMBER'); if ($ident == 1) { $identity = $order->id; } $parcels = array(); $pcount = 0; $parcels[$pcount]['id'] = $pack['packtype'] . ' package'; $parcels[$pcount]['template'] = $pack['packtype']; $parcels[$pcount]['weight'] = 2; $parcels[$pcount]['info'] = $pack['packtype']; $parcels[$pcount]["tracking_number"] = null; $parcels[$pcount]["is_non_standard"] = false; $address_delivery = new Address((int)$order->id_address_delivery); $customer = new Customer((int)$order->id_customer); $x13allegro = Configuration::get('INPOSTSHIP_INTEGRATION_X13ALLEGRO'); $receiver = array(); if ($x13allegro && ($service == 4 || $service == 5)) { $x13orderInfo = Db::getInstance()->getRow('SELECT * FROM `'._DB_PREFIX_.'xallegro_order` WHERE `id_order` = '.(int)$order->id); if (!empty($x13orderInfo)) { $x13oinfo = json_decode($x13orderInfo['checkout_form_content']); $rec_mach = $x13oinfo->delivery->pickupPoint->id; $address = $x13oinfo->delivery->address; $receiver['first_name'] = Tools::stripslashes($address->firstName); $receiver['last_name'] = $address->lastName; $postcode = null;//$address->zipCode; $street = str_replace('ul. ', '', $address->street); $street = str_replace(',', '', $street); $match = InpostTools::split_street($street); if (!InpostValidate::isPolandPostCode($postcode)) { $postcode = InpostTools::setPolandPostCode($postcode); } $city = $address->city; $login = ' '.$x13oinfo->buyer->login; if (!empty($rec_mach)) { $custom_attrib['target_point'] = $rec_mach; } } } else { $postcode = $address_delivery->postcode; $match = InpostTools::split_street(trim($address_delivery->address1.' '.$address_delivery->address2)); if (!InpostValidate::isPolandPostCode($postcode)) { $postcode = InpostTools::setPolandPostCode($postcode); } $city = $address_delivery->city; } $receiver['first_name'] = Tools::stripslashes($address_delivery->firstname); $receiver['last_name'] = $address_delivery->lastname; $receiver['email'] = $customer->email; $receiver['phone'] = InpostValidate::reValidPhone($address_delivery->phone); $receiver['address'] = array( 'street' => $match['street'], 'building_number' => $match['numberAll'], 'city' => $city, 'post_code' => $postcode, 'country_code' => 'PL' ); $sender = array(); $sender['first_name'] = Configuration::get('INPOSTSHIP_SENDER_FIRSTNAME'); $sender['last_name'] = Configuration::get('INPOSTSHIP_SENDER_LASTNAME'); $sender['company_name'] = Configuration::get('INPOSTSHIP_SENDER_COMPANY_NAME'); $sender['phone'] = Configuration::get('INPOSTSHIP_SENDER_PHONE'); $sender['email'] = Configuration::get('INPOSTSHIP_SENDER_EMAIL'); $sender['address'] = array( 'street' => Configuration::get('INPOSTSHIP_SENDER_STREET'), 'building_number' => Configuration::get('INPOSTSHIP_SENDER_BUILDING_NR'), 'city' => Configuration::get('INPOSTSHIP_SENDER_CITY'), 'post_code' => Configuration::get('INPOSTSHIP_SENDER_POSTCODE'), 'country_code' => 'PL' ); if (strlen($identity) < 3) { $identity = '00'.$identity; } $info['packtype'] = $pack['packtype']; $info['service'] = $service; $info['custom_attrib'] = $custom_attrib; $info['weekPack'] = $pww; $info['reference'] = $identity; $info['additional_services'] = array(); $info['insurance'] = $insurance; $info['cods'] = $cods; $info['receiver'] = $receiver; $info['sender'] = $sender; $info['parcels'] = $parcels; $info['id_order'] = $id_order; $info['id_cart'] = $pack['id_cart']; } return $info; } private function getIdOrderByIdCart($id_cart) { if ($id_cart > 0) { return (int)Db::getInstance()->getValue('SELECT `id_order` FROM `'._DB_PREFIX_.'orders` WHERE `id_cart` = '.(int)$id_cart); } return null; } }