public function postProcess()
 {
     /* Shipping fees */
     if (Tools::isSubmit('submitFees' . $this->table)) {
         if ($this->tabAccess['edit'] === '1') {
             if (($id_carrier = (int) Tools::getValue('id_carrier')) && $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);
                     $currentList = Carrier::getDeliveryPriceByRanges($rangeTable, $id_carrier);
                     /* Build prices list */
                     $priceList = array();
                     foreach ($_POST as $key => $value) {
                         if (strstr($key, 'fees_')) {
                             $tmpArray = explode('_', $key);
                             $price = number_format(abs(str_replace(',', '.', $value)), 6, '.', '');
                             $current = 0;
                             foreach ($currentList as $item) {
                                 if ($item['id_zone'] == $tmpArray[1] && $item['id_' . $rangeTable] == $tmpArray[2]) {
                                     $current = $item;
                                 }
                             }
                             if ($current && $price == $current['price']) {
                                 continue;
                             }
                             $priceList[] = array('id_range_price' => $shipping_method == Carrier::SHIPPING_METHOD_PRICE ? (int) $tmpArray[2] : null, 'id_range_weight' => $shipping_method == Carrier::SHIPPING_METHOD_WEIGHT ? (int) $tmpArray[2] : null, 'id_carrier' => (int) $carrier->id, 'id_zone' => (int) $tmpArray[1], 'price' => $price);
                         }
                     }
                     /* Update delivery prices */
                     $carrier->addDeliveryPrice($priceList);
                     Tools::redirectAdmin(self::$currentIndex . '&conf=6&id_carrier=' . $carrier->id . '&token=' . $this->token);
                 } else {
                     $this->errors[] = Tools::displayError('An error occurred while attempting to update fees (cannot load carrier object).');
                 }
             } elseif (isset($id_carrier2)) {
                 $_POST['id_carrier'] = $id_carrier2;
             } else {
                 $this->errors[] = Tools::displayError('An error occurred while attempting to update fees (cannot load carrier object).');
             }
         } else {
             $this->errors[] = Tools::displayError('You do not have permission to edit this.');
         }
     } else {
         return parent::postProcess();
     }
 }
 /**
  * @param Carrier $carrier
  * @param array   $tpl_vars
  * @param array   $fields_value
  */
 protected function getTplRangesVarsAndValues($carrier, &$tpl_vars, &$fields_value)
 {
     $tpl_vars['zones'] = Zone::getZones(false);
     $carrier_zones = $carrier->getZones();
     $carrier_zones_ids = array();
     if (is_array($carrier_zones)) {
         foreach ($carrier_zones as $carrier_zone) {
             $carrier_zones_ids[] = $carrier_zone['id_zone'];
         }
     }
     $range_table = $carrier->getRangeTable();
     $shipping_method = $carrier->getShippingMethod();
     $zones = Zone::getZones(false);
     foreach ($zones as $zone) {
         $fields_value['zones'][$zone['id_zone']] = Tools::getValue('zone_' . $zone['id_zone'], in_array($zone['id_zone'], $carrier_zones_ids));
     }
     if ($shipping_method == Carrier::SHIPPING_METHOD_FREE) {
         $range_obj = $carrier->getRangeObject($carrier->shipping_method);
         $price_by_range = array();
     } else {
         $range_obj = $carrier->getRangeObject();
         $price_by_range = Carrier::getDeliveryPriceByRanges($range_table, (int) $carrier->id);
     }
     foreach ($price_by_range as $price) {
         $tpl_vars['price_by_range'][$price['id_' . $range_table]][$price['id_zone']] = $price['price'];
     }
     $tmp_range = $range_obj->getRanges((int) $carrier->id);
     $tpl_vars['ranges'] = array();
     if ($shipping_method != Carrier::SHIPPING_METHOD_FREE) {
         foreach ($tmp_range as $id => $range) {
             $tpl_vars['ranges'][$range['id_' . $range_table]] = $range;
             $tpl_vars['ranges'][$range['id_' . $range_table]]['id_range'] = $range['id_' . $range_table];
         }
     }
     // init blank range
     if (!count($tpl_vars['ranges'])) {
         $tpl_vars['ranges'][] = array('id_range' => 0, 'delimiter1' => 0, 'delimiter2' => 0);
     }
 }
    public function displayFormFees()
    {
        global $currentIndex;
        $carrierArray = array();
        $id_carrier = Tools::getValue('id_carrier');
        $carriers = Carrier::getCarriers((int) Configuration::get('PS_LANG_DEFAULT'), true, false, false, NULL, Carrier::PS_CARRIERS_AND_CARRIER_MODULES_NEED_RANGE);
        foreach ($carriers as $carrier) {
            if (!$carrier['is_free']) {
                $carrierArray[] = array('id' => $carrier['id_carrier'], 'display' => '<option value="' . (int) $carrier['id_carrier'] . '"' . ($carrier['id_carrier'] == $id_carrier ? ' selected="selected"' : '') . '>' . $carrier['name'] . '</option>');
            }
        }
        if (count($carrierArray)) {
            if (!$id_carrier) {
                $id_carrier = (int) $carrierArray[0]['id'];
            }
            $carrierSelected = new Carrier($id_carrier);
        }
        echo '<br /><br />
		<h2>' . $this->l('Fees by carrier, geographical zone, and ranges') . '</h2>
		<form action="' . $currentIndex . '&token=' . $this->token . '" id="fees" name="fees" method="post">
			<fieldset>
				<legend><img src="../img/admin/delivery.gif" />' . $this->l('Fees') . '</legend>';
        if (!count($carrierArray)) {
            echo $this->l('You only have free carriers, there is no need to configure your delivery prices.');
        } else {
            echo '<b>' . $this->l('Carrier:') . ' </b>
				<select name="id_carrier2" onchange="document.fees.submit();">';
            foreach ($carrierArray as $carrierOption) {
                echo $carrierOption['display'];
            }
            echo '
				</select><br />
				<table class="table space" cellpadding="0" cellspacing="0">
					<tr>
						<th>' . $this->l('Zone / Range') . '</th>';
            $currency = new Currency(Configuration::get('PS_CURRENCY_DEFAULT'));
            $rangeObj = $carrierSelected->getRangeObject();
            $rangeTable = $carrierSelected->getRangeTable();
            $suffix = $carrierSelected->getRangeSuffix();
            $rangeIdentifier = 'id_' . $rangeTable;
            $ranges = $rangeObj->getRanges($id_carrier);
            $delivery = Carrier::getDeliveryPriceByRanges($rangeTable, $id_carrier);
            foreach ($delivery as $deliv) {
                $deliveryArray[$deliv['id_zone']][$deliv['id_carrier']][$deliv[$rangeIdentifier]] = $deliv['price'];
            }
            if (!$carrierSelected->is_free) {
                foreach ($ranges as $range) {
                    echo '<th style="font-size: 11px;">' . (double) $range['delimiter1'] . $suffix . ' ' . $this->l('to') . ' ' . (double) $range['delimiter2'] . $suffix . '</th>';
                }
            }
            echo '</tr>';
            $zones = $carrierSelected->getZones();
            if (sizeof($ranges) && !$carrierSelected->is_free) {
                if (sizeof($zones) > 1) {
                    echo '
					<tr>
						<th style="height: 30px;">' . $this->l('All') . '</th>';
                    foreach ($ranges as $range) {
                        echo '<td class="center">' . $currency->getSign('left') . '<input type="text" id="fees_all_' . $range[$rangeIdentifier] . '" onchange="this.value = this.value.replace(/,/g, \'.\');" onkeyup="if ((event.keyCode||event.which) != 9){ spreadFees(' . $range[$rangeIdentifier] . ') }" style="width: 45px;" />' . $currency->getSign('right') . '</td>';
                    }
                    echo '</tr>';
                }
                foreach ($zones as $zone) {
                    echo '
					<tr>
						<th style="height: 30px;">' . $zone['name'] . '</th>';
                    foreach ($ranges as $range) {
                        if (isset($deliveryArray[$zone['id_zone']][$id_carrier][$range[$rangeIdentifier]])) {
                            $price = $deliveryArray[$zone['id_zone']][$id_carrier][$range[$rangeIdentifier]];
                        } else {
                            $price = '0.00';
                        }
                        echo '<td class="center">' . $currency->getSign('left') . '<input type="text" class="fees_' . $range[$rangeIdentifier] . '" onchange="this.value = this.value.replace(/,/g, \'.\');" name="fees_' . $zone['id_zone'] . '_' . $range[$rangeIdentifier] . '" onkeyup="clearAllFees(' . $range[$rangeIdentifier] . ')" value="' . $price . '" style="width: 45px;" />' . $currency->getSign('right') . '</td>';
                    }
                    echo '
					</tr>';
                }
            }
            echo '<tr>
					<td colspan="' . (sizeof($ranges) + 1) . '" class="center" style="border-bottom: none; height: 40px;">
						<input type="hidden" name="submitFees' . $this->table . '" value="1" />';
            if (sizeof($ranges) && !$carrierSelected->is_free) {
                echo '	<input type="submit" value="' . $this->l('   Save   ') . '" class="button" />';
            } elseif ($carrierSelected->is_free) {
                echo $this->l('This is a free carrier');
            } else {
                echo $this->l('No ranges set for this carrier');
            }
            echo '
					</td>
				</tr>';
            echo '
			</table>
			<p>' . $this->l('Prices do not include tax.') . '</p>';
        }
        echo '
			</fieldset>
			<input type="hidden" name="id_carrier" value="' . $id_carrier . '" />
		</form>';
    }
Esempio n. 4
0
    public function displayFormFees()
    {
        global $currentIndex;
        echo '<br /><br />
		<h2>' . $this->l('Fees by carrier, geographical zone, and ranges') . '</h2>
		<form action="' . $currentIndex . '&token=' . $this->token . '" id="fees" name="fees" method="post" class="width2">
			<fieldset>
				<legend><img src="../img/admin/delivery.gif" />' . $this->l('Fees') . '</legend>
				<b>' . $this->l('Carrier:') . ' </b>
				<select name="id_carrier2" onchange="document.fees.submit();">';
        $carriers = Carrier::getCarriers(intval(Configuration::get('PS_LANG_DEFAULT')));
        $id_carrier = Tools::getValue('id_carrier') ? intval(Tools::getValue('id_carrier')) : intval($carriers[0]['id_carrier']);
        $carrierSelected = new Carrier($id_carrier);
        foreach ($carriers as $carrier) {
            echo '<option value="' . intval($carrier['id_carrier']) . '"' . ($carrier['id_carrier'] == $id_carrier ? ' selected="selected"' : '') . '>' . $carrier['name'] . '</option>';
        }
        echo '
				</select><br />
				<table class="table space" cellpadding="0" cellspacing="0">
					<tr>
						<th>' . $this->l('Zone / Range') . '</th>';
        $shipping_method = intval(Configuration::get('PS_SHIPPING_METHOD'));
        $currency = new Currency(Configuration::get('PS_CURRENCY_DEFAULT'));
        $rangeObj = $shipping_method ? new RangeWeight() : new RangePrice();
        $rangeTable = $shipping_method ? 'range_weight' : 'range_price';
        $rangeIdentifier = 'id_' . $rangeTable;
        $ranges = $rangeObj->getRanges($id_carrier);
        $suffix = $shipping_method ? Configuration::get('PS_WEIGHT_UNIT') : $currency->sign;
        $delivery = Carrier::getDeliveryPriceByRanges($rangeTable);
        foreach ($delivery as $deliv) {
            $deliveryArray[$deliv['id_zone']][$deliv['id_carrier']][$deliv[$rangeIdentifier]] = $deliv['price'];
        }
        foreach ($ranges as $range) {
            echo '<th style="font-size: 11px;">' . floatval($range['delimiter1']) . $suffix . ' ' . $this->l('to') . ' ' . floatval($range['delimiter2']) . $suffix . '</th>';
        }
        echo '</tr>';
        $zones = Zone::getZones(true);
        if (sizeof($ranges)) {
            foreach ($zones as $zone) {
                if (!$carrierSelected->getZone($zone['id_zone'])) {
                    continue;
                }
                echo '
						<tr>
							<th style="height: 30px;">' . $zone['name'] . '</th>';
                foreach ($ranges as $range) {
                    if (isset($deliveryArray[$zone['id_zone']][$id_carrier][$range[$rangeIdentifier]])) {
                        $price = $deliveryArray[$zone['id_zone']][$id_carrier][$range[$rangeIdentifier]];
                    } else {
                        $price = '0.00';
                    }
                    echo '<td class="center">' . $currency->getSign('left') . '<input type="text" name="fees_' . $zone['id_zone'] . '_' . $range[$rangeIdentifier] . '" value="' . $price . '" style="width: 45px;" />' . $currency->getSign('right') . '</td>';
                }
                echo '
						</tr>';
            }
        }
        echo '
					<tr>
						<td colspan="' . (sizeof($ranges) + 1) . '" class="center" style="border-bottom: none; height: 40px;">
							<input type="hidden" name="submitFees' . $this->table . '" value="1" />
					';
        if (sizeof($ranges)) {
            echo '	<input type="submit" value="' . $this->l('   Save   ') . '" class="button" />';
        } else {
            echo $this->l('No ranges set for this carrier');
        }
        echo '
						</td>
					</tr>';
        echo '
				</table>
				<p>' . $this->l('Prices are tax excluded.') . '</p>
			</fieldset>
			<input type="hidden" name="id_carrier" value="' . $id_carrier . '" />
		</form>';
    }