public function initContent()
 {
     $array_carrier = array();
     $carriers = Carrier::getCarriers($this->context->language->id, true, false, false, null, Carrier::PS_CARRIERS_AND_CARRIER_MODULES_NEED_RANGE);
     foreach ($carriers as $key => $carrier) {
         if ($carrier['is_free']) {
             unset($carriers[$key]);
         } else {
             $array_carrier[] = $carrier['id_carrier'];
         }
     }
     $id_carrier = (int) Tools::getValue('id_carrier');
     if (count($carriers) && isset($array_carrier[0])) {
         if (!$id_carrier) {
             $id_carrier = (int) $array_carrier[0];
         }
         $carrierSelected = new Carrier((int) $id_carrier);
     } else {
         $carrierSelected = new Carrier((int) $id_carrier);
     }
     $currency = $this->context->currency;
     $rangeObj = $carrierSelected->getRangeObject();
     $rangeTable = $carrierSelected->getRangeTable();
     $suffix = $carrierSelected->getRangeSuffix();
     $rangeIdentifier = 'id_' . $rangeTable;
     $ranges = $rangeObj->getRanges($id_carrier);
     $delivery = Carrier::getDeliveryPriceByRanges($rangeTable, $id_carrier);
     $deliveryArray = array();
     foreach ($delivery as $deliv) {
         $deliveryArray[$deliv['id_zone']][$deliv['id_carrier']][$deliv[$rangeIdentifier]] = $deliv['price'];
     }
     $this->context->smarty->assign(array('zones' => $carrierSelected->getZones(), 'carriers' => $carriers, 'ranges' => $ranges, 'currency' => $currency, 'deliveryArray' => $deliveryArray, 'carrierSelected' => $carrierSelected, 'id_carrier' => $id_carrier, 'suffix' => $suffix, 'rangeIdentifier' => $rangeIdentifier, 'action_fees' => self::$currentIndex . '&token=' . $this->token));
     parent::initContent();
 }
 /**
  * @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>';
    }
 public static function install()
 {
     $id_carrier = (int) Configuration::get(DpdPolandConfiguration::CARRIER_STANDARD_ID);
     $carrier = self::getCarrierByReference((int) $id_carrier);
     if ($id_carrier && Validate::isLoadedObject($carrier)) {
         if (!$carrier->deleted) {
             return true;
         } else {
             $carrier->deleted = 0;
             return (bool) $carrier->save();
         }
     }
     $carrier_standard = new DpdPolandCarrierStandardService();
     $carrier = new Carrier();
     $carrier->name = $carrier_standard->module_instance->l('DPD domestic shipment - Standard', self::FILENAME);
     $carrier->active = 1;
     $carrier->is_free = 0;
     $carrier->shipping_handling = 1;
     $carrier->shipping_external = 1;
     $carrier->shipping_method = 1;
     $carrier->max_width = 0;
     $carrier->max_height = 0;
     $carrier->max_depth = 0;
     $carrier->max_weight = 0;
     $carrier->grade = 0;
     $carrier->is_module = 1;
     $carrier->need_range = 1;
     $carrier->range_behavior = 1;
     $carrier->external_module_name = $carrier_standard->module_instance->name;
     $carrier->url = _DPDPOLAND_TRACKING_URL_;
     $delay = array();
     foreach (Language::getLanguages(false) as $language) {
         $delay[$language['id_lang']] = $carrier_standard->module_instance->l('DPD domestic shipment - Standard', self::FILENAME);
     }
     $carrier->delay = $delay;
     if (!$carrier->save()) {
         return false;
     }
     $dpdpoland_carrier = new DpdPolandCarrier();
     $dpdpoland_carrier->id_carrier = (int) $carrier->id;
     $dpdpoland_carrier->id_reference = (int) $carrier->id;
     if (!$dpdpoland_carrier->save()) {
         return false;
     }
     if (!copy(_DPDPOLAND_IMG_DIR_ . DpdPolandCarrierStandardService::IMG_DIR . '/' . _DPDPOLAND_STANDARD_ID_ . '.' . DpdPolandCarrierStandardService::IMG_EXTENTION, _PS_SHIP_IMG_DIR_ . '/' . (int) $carrier->id . '.jpg')) {
         return false;
     }
     $range_obj = $carrier->getRangeObject();
     $range_obj->id_carrier = (int) $carrier->id;
     $range_obj->delimiter1 = 0;
     $range_obj->delimiter2 = 1;
     if (!$range_obj->save()) {
         return false;
     }
     if (!self::assignCustomerGroupsForCarrier($carrier)) {
         return false;
     }
     if (!Configuration::updateValue(DpdPolandConfiguration::CARRIER_STANDARD_ID, (int) $carrier->id)) {
         return false;
     }
     return true;
 }