diff --git a/adm/tabs/AdminShipping.php b/adm/tabs/AdminShipping.php index 6ebdb6da..cda10fda 100755 --- a/adm/tabs/AdminShipping.php +++ b/adm/tabs/AdminShipping.php @@ -1,6 +1,6 @@ tabAccess['edit'] === '1') { - if (($id_carrier = (int)(Tools::getValue('id_carrier'))) AND $id_carrier == ($id_carrier2 = (int)(Tools::getValue('id_carrier2')))) + /* @Override Antadis */ + if (Tools::isSubmit('submitFeesImportCSV')) { - $carrier = new Carrier($id_carrier); - if (Validate::isLoadedObject($carrier)) - { - /* Get configuration values */ - $shipping_method = $carrier->getShippingMethod(); - $rangeTable = $carrier->getRangeTable(); - - $carrier->deleteDeliveryPrice($rangeTable); + $this->processFeesImportCsv(); + if (!count($this->_delivery_prices)){ + $this->_errors[] = Tools::displayError('Les données du fichier ne correspondent pas au transporteur.'); + return; + } + } elseif(Tools::isSubmit('exportFeesImportCSV')) { + $this->processFeesExportCsv(); + /* @End Override Antadis */ + } else { - /* Build prices list */ - $priceList = ''; - foreach ($_POST AS $key => $value) - if (strstr($key, 'fees_')) - { - $tmpArray = explode('_', $key); - $priceList .= '('.($shipping_method == Carrier::SHIPPING_METHOD_PRICE ? (int)($tmpArray[2]) : 'NULL').', - '.($shipping_method == Carrier::SHIPPING_METHOD_WEIGHT ? (int)($tmpArray[2]) : 'NULL').', '.(int)$carrier->id.', - '.(int)$tmpArray[1].', '.number_format(abs(preg_replace("#,#", '.', $value)), 6, '.', '').'),'; - unset($tmpArray); - } - $priceList = rtrim($priceList, ','); - /* Update delivery prices */ - $carrier->addDeliveryPrice($priceList); - Tools::redirectAdmin($currentIndex.'&conf=6'.'&token='.$this->token); + if (($id_carrier = (int)(Tools::getValue('id_carrier'))) AND $id_carrier == ($id_carrier2 = (int)(Tools::getValue('id_carrier2')))) + { + $carrier = new Carrier($id_carrier); + if (Validate::isLoadedObject($carrier)) + { + /* Get configuration values */ + $shipping_method = $carrier->getShippingMethod(); + $rangeTable = $carrier->getRangeTable(); + + $carrier->deleteDeliveryPrice($rangeTable); + + /* Build prices list */ + $priceList = ''; + foreach ($_POST AS $key => $value) + if (strstr($key, 'fees_')) + { + $tmpArray = explode('_', $key); + $priceList .= '('.($shipping_method == Carrier::SHIPPING_METHOD_PRICE ? (int)($tmpArray[2]) : 'NULL').', + '.($shipping_method == Carrier::SHIPPING_METHOD_WEIGHT ? (int)($tmpArray[2]) : 'NULL').', '.(int)$carrier->id.', + '.(int)$tmpArray[1].', '.number_format(abs(preg_replace("#,#", '.', $value)), 6, '.', '').'),'; + unset($tmpArray); + } + $priceList = rtrim($priceList, ','); + /* Update delivery prices */ + $carrier->addDeliveryPrice($priceList); + Tools::redirectAdmin($currentIndex.'&conf=6'.'&token='.$this->token); + } + else + $this->_errors[] = Tools::displayError('An error occurred while updating fees (cannot load carrier object).'); + } + elseif (isset($id_carrier2)) + { + $_POST['id_carrier'] = $id_carrier2; } else $this->_errors[] = Tools::displayError('An error occurred while updating fees (cannot load carrier object).'); } - elseif (isset($id_carrier2)) - { - $_POST['id_carrier'] = $id_carrier2; - } - else - $this->_errors[] = Tools::displayError('An error occurred while updating fees (cannot load carrier object).'); } else $this->_errors[] = Tools::displayError('You do not have permission to edit here.'); } } + public function processFeesExportCsv(){ + $id_carrier = Tools::getValue('id_carrier2'); + $carrier = new Carrier((int) $id_carrier); + $rangeObj = $carrier->getRangeObject(); + $ranges = $rangeObj->getRanges($id_carrier); + $delivery = Carrier::getDeliveryPriceByRanges('range_weight', $id_carrier); + header('Pragma: public'); + header('Expires: 0'); + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); + header('Content-Description: File Transfer'); + header('Content-Type: application/csv; charset=utf-8'); + header('Content-Disposition: attachment; filename=export_insurances.csv;'); + header('Content-Transfer-Encoding: binary'); + $headers = array('id_zone'); + foreach ($ranges as $range) + { + $headers[] = $range['delimiter1'] . 'kg ' . $this->l('to') . ' ' . $range['delimiter2'] . 'kg'; + } + $range_prices = array(); + foreach ($delivery as $price) + { + if (!isset($range_prices[$price['id_zone']])) + { + $range_prices[$price['id_zone']] = array(); + } + $range_prices[$price['id_zone']][$price['id_range_weight']] = $price; + } + ob_clean(); + $f = fopen('php://output', 'w'); + fputcsv($f, $headers, ';', '"'); + foreach ($range_prices as $id_zone => $prices) + { + $row_data = array($id_zone); + foreach ($ranges as $range) { + if (isset($prices[$range['id_range_weight']])) + { + $row_data[] = (float) $prices[$range['id_range_weight']]['price']; + } + else + { + $row_data[] = 0.00; + } + } + fputcsv($f, $row_data, ';', '"'); + } + fclose($f); + exit; + } + + public function processFeesImportCsv(){ + if (!isset($_FILES['feesImportCsvFile']) || !$_FILES['feesImportCsvFile']['tmp_name']){ + $this->_errors[] = Tools::displayError('No file.'); + return false; + } + $id_carrier = Tools::getValue('id_carrier2'); + $carrier = new Carrier((int) $id_carrier); + $rangeObj = $carrier->getRangeObject(); + $ranges = $rangeObj->getRanges($id_carrier); + $zones = $carrier->getZones(); + $filename = dirname(__FILE__) . '/../' . uniqid() . '_' . Tools::encrypt($id_carrier) . '.csv'; + if (!move_uploaded_file( + $_FILES['feesImportCsvFile']['tmp_name'], + $filename + )) { + $this->_errors[] = Tools::displayError('Erreur lors du téléchargement du fichier'); + return false; + } + $i = 0; + $this->_delivery_prices = array(); + $handle = fopen($filename, 'r'); + while(($delivery_info = fgetcsv($handle, 0, ';') ) !== FALSE) + { + $i++; + if ($i <= 1) + continue; + if (!isset($delivery_info[0]) || !Validate::isUnsignedId($delivery_info[0])) + continue; + if (count($ranges) +1 != count($delivery_info)) + continue; + $_id_zone = $delivery_info[0]; + $this->_delivery_prices[$_id_zone] = array(); + unset($delivery_info[0]); + foreach ($delivery_info as $price) + $this->_delivery_prices[$_id_zone][] = $price; + } + if (file_exists($filename)) + unlink($filename); + return $this->_delivery_prices; + } + public function display() { $this->displayFormHandling(); @@ -146,7 +250,7 @@ class AdminShipping extends AdminTab unset($confKeys['PS_SHIPPING_METHOD']); echo ' -