export_zone; } else { // واردات: زون واردات کشور مبدأ مد نظر است $country = Country::find($data['origin_country_id']); $zone = $country->import_zone; } // 4. پیدا کردن ردیف تعرفه مناسب // منطق: باید نزدیک‌ترین وزنی که بزرگتر مساوی وزن ماست رو پیدا کنیم (مثلاً اگر 1.2 کیلو است، ردیف 1.5 را می‌گیرد) $rateRecord = ShippingRate::where('direction', $data['direction']) ->where('type', $data['type']) ->where('weight', '>=', $chargeableWeight) ->orderBy('weight', 'asc') ->first(); // اگر وزن بالای 30 کیلو باشد یا رکوردی پیدا نشود (Spot Rate) if (!$rateRecord) { return [ 'status' => 'error', 'message' => 'برای این وزن نرخ ثبت نشده است (نیاز به استعلام نرخ ویژه / Spot Rate).', 'chargeable_weight' => $chargeableWeight, 'volumetric_weight' => $dimensions, ]; } // 5. استخراج قیمت پایه بر اساس زون (مثلاً ستون zone_3) $zoneColumn = "zone_{$zone}"; $basePriceDirham = $rateRecord->$zoneColumn; // 6. دریافت نرخ ارز و ضریب سود از تنظیمات $settings = SystemSetting::first(); $dirhamRate = $settings->dirham_rate; // نرخ درهم به ریال $profitPercent = $settings->profit_percent; // مثلاً 1.25 // 7. اجرای فرمول نهایی (دقیقاً مطابق اکسل) $netDirham = $basePriceDirham * $profitPercent; $netRial = $netDirham * $dirhamRate; return [ 'status' => 'success', 'volumetric_weight' => round($dimensions, 3), 'chargeable_weight' => round($chargeableWeight, 2), 'zone' => $zone, 'base_price_dirham' => $basePriceDirham, 'net_dirham' => round($netDirham, 2), 'net_rial' => round($netRial), ]; } }