public static function getOrderShippingCost($cartObject) { $cartData = BalticodeDpdData::getCartProductsWeight($cartObject); $totalCartWeight = array_sum($cartData['weight']); //Order is to heavy if ($totalCartWeight > self::$maxWeight) { return false; } $cartProductDimensions = BalticodeDpdData::getCartProductsDimensions($cartObject); $cartHeight = max($cartProductDimensions['height']); $cartWidth = max($cartProductDimensions['width']); $cartDepth = max($cartProductDimensions['depth']); $cartScope = ($cartHeight + $cartWidth) * 2 + $cartDepth; //Order is to Big if (max($cartHeight, $cartWidth, $cartDepth) > self::$maxLength || $cartScope > self::$maxScope) { return false; } if (Configuration::get(DynamicParcelDistribution::CONST_PREFIX . 'PICKUP_FREE_SHIPPING')) { //Enabled free shipping? if (BalticodeDpdData::getOrderPriceToral($cartObject) >= (double) Configuration::get(DynamicParcelDistribution::CONST_PREFIX . 'PICKUP_FREE_FROM')) { return (double) 0.0; } } return Configuration::get(DynamicParcelDistribution::CONST_PREFIX . 'PICKUP_PRICE'); }
public function getDeliveryTimeAvailable($deliveryShippinCity) { $deliverySettings = Configuration::get(self::CONST_PREFIX . 'DELIVERY_TIME') === false ? array_values(BalticodeDpdData::fliparrayList(unserialize(self::$defaultValues['DELIVERY_TIME']))) : array_values(unserialize(Configuration::get(self::CONST_PREFIX . 'DELIVERY_TIME'))); if ($deliverySettings === false) { //Not set any times return self::$delivery_time; } $line = BalticodeDpdData::recursiveArraySearch(trim(Tools::strtolower($deliveryShippinCity)), $this->arrayChangeValueCase($deliverySettings)); if ($line !== false) { self::$delivery_time = array_intersect_key(self::$delivery_time, array_flip($deliverySettings[$line]['time'])); } else { self::$delivery_time = array(); } return $this; }
public static function getRestrictionCost(cart $cartObject) { $address = new Address($cartObject->id_address_delivery); $restrictions = self::getRestrictions($address->id_country); $cartData = BalticodeDpdData::getCartProductsWeight($cartObject); $totalCartWeight = array_sum($cartData['weight']); $cartProductsDimensions = BalticodeDpdData::getCartProductsDimensions($cartObject); //leave only for this country foreach ($restrictions as $key => $carrier_package_size_option) { $restrictions[$key]['base_price'] = (double) $carrier_package_size_option['base_price']; //String to float $restrictions[$key]['free_from_price'] = (double) $carrier_package_size_option['free_from_price']; //String to float $dimension = explode('X', Tools::strtoupper($carrier_package_size_option['dimensions'])); array_filter($dimension); if (count($dimension) !== 3) { //If wrong parsing skip this line continue; } $restrictions[$key]['height'] = trim($dimension[0]); $restrictions[$key]['width'] = trim($dimension[1]); $restrictions[$key]['depth'] = trim($dimension[2]); //Current restriction is for this country? if not, unset current option if (BalticodeDpdData::recursiveArraySearch($address->id_country, $carrier_package_size_option) === false) { unset($restrictions[$key]); } } $correctRestriction = array(); foreach ($restrictions as $currentRestriction) { if ((double) $currentRestriction['weight'] < (double) $totalCartWeight) { //This currentRestriction is smaller that we have, so we test it allowed to overweight. if ($currentRestriction['overweight_price'] > -1) { //Overweight is allowed? if ((double) $currentRestriction['height'] < (double) max($cartProductsDimensions['height']) || (double) $currentRestriction['width'] < (double) max($cartProductsDimensions['width']) || (double) $currentRestriction['depth'] < (double) max($cartProductsDimensions['depth'])) { //if this restriction is to smaller that we want) if ((double) $currentRestriction['oversized_price'] > -1) { //Oversize is allowed $correctRestriction = $currentRestriction; } else { return false; //oversize is not available } } else { $correctRestriction = $currentRestriction; } } continue; //Stop foreach we do not need smaller restrictions } else { if ((double) $currentRestriction['height'] < (double) max($cartProductsDimensions['height']) || (double) $currentRestriction['width'] < (double) max($cartProductsDimensions['width']) || (double) $currentRestriction['depth'] < (double) max($cartProductsDimensions['depth'])) { //if this restriction is to big that we want if ((double) $currentRestriction['oversized_price'] > -1) { //Oversize is allowed? $correctRestriction = $currentRestriction; } else { return false; //oversize is not available } } else { if ((double) $currentRestriction['height'] >= (double) max($cartProductsDimensions['height']) || (double) $currentRestriction['width'] >= (double) max($cartProductsDimensions['width']) || (double) $currentRestriction['depth'] >= (double) max($cartProductsDimensions['depth'])) { //if this restriction is to big that we want $correctRestriction = $currentRestriction; } } } } //We no not found any restriction by this cart so this method is not available... return false if (!count($correctRestriction)) { return false; } //Now we have one restriction, from where need get price if ($correctRestriction['free_from_price'] >= 0) { //If free shipping is allowed if (BalticodeDpdData::getOrderPriceToral($cartObject) >= $correctRestriction['free_from_price']) { return (double) 0.0; //Return free shipping } } $currentPrice = (double) $correctRestriction['base_price']; //Apply base price //Do we have overweight? if ((double) $currentRestriction['weight'] < (double) $totalCartWeight) { if ($currentRestriction['overweight_price'] > 0) { //Test again we accept overweight? $currentPrice += (double) $currentRestriction['overweight_price']; //Plus overweight price } } //Do we have oversize? if ((double) $currentRestriction['height'] < (double) max($cartProductsDimensions['height']) || (double) $currentRestriction['width'] < (double) max($cartProductsDimensions['width']) || (double) $currentRestriction['depth'] < (double) max($cartProductsDimensions['depth'])) { //if this restriction is to smaller that we want if ($currentRestriction['oversized_price'] > 0) { //Test again we accept oversize? $currentPrice += (double) $currentRestriction['oversized_price']; //Plus oversize price } } return $currentPrice; //Return final price }