Edit File: CartOrderTrait.php
<?php namespace App\Traits; use App\Models\ProductAddon; use App\Models\Provider; trait CartOrderTrait { use SettingsTrait; public function calculateCartSummation($userCartItems) { $totalSum = 0; $addonsPrices = 0; foreach ($userCartItems as $cartItem) { // get addons price $addonsPrices = isset($cartItem->product_addons) ? ProductAddon::whereIn('id', $cartItem->product_addons)->sum('price') : 0; /* - When product has price after discount then use it, otherwise use product price, - When product has addons then use addons price, then calculate with product price. */ $productPrice = ($cartItem->product->price_after_discount ?? $cartItem->product->price) + $addonsPrices; $quantity = $cartItem->quantity; $subtotal = $productPrice * $quantity; $totalSum += $subtotal; } return $totalSum; } public function providerMinumumOrderAmount($providerId, $orderAmount) { $minimumOrderAmountForProvider = Provider::where('id', $providerId)->firstOrFail()->minimum_order; return $orderAmount >= $minimumOrderAmountForProvider; } public function calculateDeliveryPrice($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371) { $latFrom = deg2rad($latitudeFrom); $lonFrom = deg2rad($longitudeFrom); $latTo = deg2rad($latitudeTo); $lonTo = deg2rad($longitudeTo); // Haversine formula $latDelta = $latTo - $latFrom; $lonDelta = $lonTo - $lonFrom; $a = sin($latDelta / 2) * sin($latDelta / 2) + cos($latFrom) * cos($latTo) * sin($lonDelta / 2) * sin($lonDelta / 2); $c = 2 * atan2(sqrt($a), sqrt(1 - $a)); // Distance in kilometers return $earthRadius * $c; } }
Back to File Manager