/home/techb158/immovalet.com/platform/plugins/ecommerce/src/Services
NameSizeModeActions
ProductAttributes/-0755rm
Products/-0755rm
HandleApplyCouponService.php158950644editdlrm
HandleApplyPromotionsService.php55670644editdlrm
HandleRemoveCouponService.php16910644editdlrm
HandleShippingFeeService.php85230644editdlrm
StoreCurrenciesService.php16450644editdlrm
StoreProductTagService.php17560644editdlrm
Edit: /home/techb158/immovalet.com/platform/plugins/ecommerce/src/Services/HandleShippingFeeService.php (8523B)
shippingRepository = $shippingRepository; $this->addressRepository = $addressRepository; $this->shippingRuleRepository = $shippingRuleRepository; $this->productRepository = $productRepository; $this->storeLocatorRepository = $storeLocatorRepository; $this->shippings = []; $this->shippingRules = []; } /** * @param array $data * @param null $method * @param null $option * @return array */ public function execute(array $data, $method = null, $option = null) { if (!empty($method)) { return $this->getShippingFee($data, $method, $option); } $result = []; $default = $this->getShippingFee($data, 'default', $option); if ($default) { $result['default'] = $default; } return $result; } /** * @param array $data * @param string $method * @param string $option * @return array */ protected function getShippingFee(array $data, $method, $option = null) { $weight = Arr::get($data, 'weight', 0.1); $weight = $weight ?: 0.1; $orderTotal = Arr::get($data, 'order_total', 0); $country = Arr::get($data, 'country'); $result = []; switch ($method) { case 'default': $methodKey = "$method-$country"; if (Arr::has($this->shippings, $methodKey)) { $shipping = Arr::get($this->shippings, $methodKey); } else { $shipping = $this->shippingRepository ->getModel() ->where('country', $country) ->first(); Arr::set($this->shippings, $methodKey, $shipping); } if (!empty($shipping)) { $result = $this->calculateDefaultFeeByAddress( $shipping, $weight, $orderTotal, Arr::get($data, 'city'), $option ); } if (empty($result)) { if ($this->shippingDefault) { $default = $this->shippingDefault; } else { $default = $this->shippingRepository ->getModel() ->whereNull('country') ->first(); $this->shippingDefault = $default; } $result = $this->calculateDefaultFeeByAddress( $default, $weight, $orderTotal, Arr::get($data, 'city'), $option ); } break; } return $result; } /** * @param string $address * @param int $weight * @param int $orderTotal * @param string $city * @param null $option * @return array */ protected function calculateDefaultFeeByAddress($address, $weight, $orderTotal, $city, $option = null) { $weight = ecommerce_convert_weight($weight); $result = []; if ($address) { $ruleKey = "rule-option-$option"; if (Arr::has($this->shippingRules, $ruleKey)) { $rule = Arr::get($this->shippingRules, $ruleKey); } else { $rule = $this->shippingRuleRepository->findById($option, ['items']); Arr::set($this->shippingRules, $ruleKey, $rule); } if ($rule) { $ruleDetail = $rule ->items ->where('city', $city) ->where('is_enabled', 1) ->first(); if ($ruleDetail) { $result[] = [ 'name' => $rule->name, 'price' => $rule->price + $ruleDetail->adjustment_price, ]; } else { $result[] = [ 'name' => $rule->name, 'price' => $rule->price, ]; } } else { $rules = $this->shippingRuleRepository ->getModel() ->where(function (Builder $query) use ($orderTotal, $address) { $query ->where('shipping_id', $address->id) ->where('type', 'base_on_price') ->where('from', '<=', $orderTotal) ->where(function (Builder $sub) use ($orderTotal) { $sub ->whereNull('to') ->orWhere('to', '<=', 0) ->orWhere('to', '>=', $orderTotal); }); }) ->orWhere(function (Builder $query) use ($weight, $address) { $query ->where('shipping_id', $address->id) ->where('type', 'base_on_weight') ->where('from', '<=', $weight) ->where(function (Builder $sub) use ($weight) { $sub ->whereNull('to') ->orWhere('to', '<=', 0) ->orWhere('to', '>=', $weight); }); }) ->with(['items']) ->get(); foreach ($rules as $rule) { /** * @var ShippingRule $rule */ $ruleDetail = $rule ->items ->where('city', $city) ->where('is_enabled', 1) ->first(); if ($ruleDetail) { $result[$rule->id] = [ 'name' => $rule->name, 'price' => $rule->price + $ruleDetail->adjustment_price, ]; } else { $result[$rule->id] = [ 'name' => $rule->name, 'price' => $rule->price, ]; } } } } return $result; } }