get(); $directions = ShipmentDirection::cases(); $types = ShipmentType::cases(); return view('orders.create', compact('countries', 'directions', 'types')); } public function store(Request $request) { $validator = Validator::make($request->all(), [ 'direction' => ['required', 'in:export,import'], 'type' => ['required', 'in:DOC_NORMAL,DOC_ECONOMY,PARCEL'], 'from_country_id' => ['required', 'exists:countries,id'], 'to_country_id' => ['required', 'exists:countries,id'], 'forwarder' => ['nullable', 'string', 'max:255'], 'weight' => ['required', 'numeric', 'min:0.1'], 'volumetric_weight' => ['nullable', 'numeric', 'min:0'], 'dimensions' => ['nullable', 'string', 'max:255'], 'sender_name' => ['required', 'string', 'max:255'], 'sender_company' => ['nullable', 'string', 'max:255'], 'sender_phone' => ['required', 'string', 'max:50'], 'sender_email' => ['nullable', 'email', 'max:255'], 'sender_address' => ['required', 'string', 'max:500'], 'sender_city' => ['required', 'string', 'max:255'], 'sender_zip' => ['nullable', 'string', 'max:20'], 'sender_id_number' => ['nullable', 'string', 'max:50'], 'receiver_name' => ['required', 'string', 'max:255'], 'receiver_company' => ['nullable', 'string', 'max:255'], 'receiver_phone' => ['required', 'string', 'max:50'], 'receiver_email' => ['nullable', 'email', 'max:255'], 'receiver_address' => ['required', 'string', 'max:500'], 'receiver_city' => ['required', 'string', 'max:255'], 'receiver_zip' => ['nullable', 'string', 'max:20'], 'receiver_id_number' => ['nullable', 'string', 'max:50'], 'items' => ['required', 'array', 'min:1', 'max:9'], 'items.*.description' => ['required', 'string', 'max:500'], 'items.*.hs_code' => ['required', 'string', 'max:50'], 'items.*.quantity' => ['required', 'numeric', 'min:1'], 'items.*.unit_price' => ['required', 'numeric', 'min:0'], 'items.*.total_usd' => ['required', 'numeric', 'min:0'], ]); $data = $validator->validated(); $shipment = Shipment::create([ 'awb_no' => 'IFNEX-' . strtoupper(uniqid()), 'direction' => $data['direction'], 'type' => $data['type'], 'from_country_id' => $data['from_country_id'], 'to_country_id' => $data['to_country_id'], 'forwarder' => $data['forwarder'] ?? null, 'weight' => $data['weight'], 'volumetric_weight' => $data['volumetric_weight'] ?? $data['weight'], 'chargeable_weight' => max($data['weight'], $data['volumetric_weight'] ?? $data['weight']), 'dimensions' => $data['dimensions'] ?? null, 'sender_name' => $data['sender_name'], 'sender_company' => $data['sender_company'] ?? null, 'sender_phone' => $data['sender_phone'], 'sender_email' => $data['sender_email'] ?? null, 'sender_address' => $data['sender_address'], 'sender_city' => $data['sender_city'], 'sender_zip' => $data['sender_zip'] ?? null, 'sender_id_number' => $data['sender_id_number'] ?? null, 'receiver_name' => $data['receiver_name'], 'receiver_company' => $data['receiver_company'] ?? null, 'receiver_phone' => $data['receiver_phone'], 'receiver_email' => $data['receiver_email'] ?? null, 'receiver_address' => $data['receiver_address'], 'receiver_city' => $data['receiver_city'], 'receiver_zip' => $data['receiver_zip'] ?? null, 'receiver_id_number' => $data['receiver_id_number'] ?? null, 'status' => 'processed', ]); foreach ($data['items'] as $index => $item) { $shipment->items()->create([ 'row_number' => $index + 1, 'description' => $item['description'], 'hs_code' => $item['hs_code'], 'quantity' => $item['quantity'], 'unit_price' => $item['unit_price'], 'total_usd' => $item['total_usd'], ]); } return redirect()->route('orders.success', $shipment)->with('success', 'سفارش شما با موفقیت ثبت شد.'); } public function success(Shipment $shipment) { return view('orders.success', compact('shipment')); } }