From dc4fabbf369b97b2fab1eb7f8278a46ff9c2c2a2 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Tue, 20 Sep 2022 02:30:26 +0800 Subject: [PATCH] export parcel summary --- .../Exports/Services/ExportsParcel.php | 28 ++++ .../Exports/Sheets/ContainersSheet.php | 103 ++++++++++++++ .../Exports/Sheets/PackingListsSheet.php | 128 ++++++++++++++++++ .../Exports/ExportArrivedParcelController.php | 8 ++ routes/web.php | 1 + 5 files changed, 268 insertions(+) create mode 100644 app/Classes/Modules/Exports/Services/ExportsParcel.php create mode 100644 app/Classes/Modules/Exports/Sheets/ContainersSheet.php create mode 100644 app/Classes/Modules/Exports/Sheets/PackingListsSheet.php diff --git a/app/Classes/Modules/Exports/Services/ExportsParcel.php b/app/Classes/Modules/Exports/Services/ExportsParcel.php new file mode 100644 index 00000000..d3827bd1 --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsParcel.php @@ -0,0 +1,28 @@ +transports()->where('status', ApprovalStatus::APPROVED)->first(); + $currentSchedule = $transport ? $transport->schedules()->where('status', ApprovalStatus::APPROVED)->first() : null; + $scheduleHistory = $transport ? $transport->schedules()->where('status', ApprovalStatus::EXPIRED)->get() : null; + + $status = 'Loaded'; + + if($currentSchedule) { + if(Carbon::parse($currentSchedule->etd) >= Carbon::today()){ + $status = 'Shipping'; + } + + if(Carbon::parse($currentSchedule->eta) >= Carbon::today()){ + $status = 'Arrived?'; + } + + if($transport->drop_date){ + $status = 'Pending deliveries'; + } + + if(!$container->packinglists()->whereDoesntHave('transports')){ + $status = 'Complete'; + } + } + + return [ + $container->reference, + $container->loading_date, + $currentSchedule ? $currentSchedule->etd : null, + $currentSchedule ? $currentSchedule->eta : null, + $scheduleHistory ? count($scheduleHistory) : 0, + $transport ? $transport->drop_date : null, + $status, + $container->packages()->sum('quantity'), + $container->packages()->sum(DB::raw('(width/100) * (height/100) * (length/100) * quantity')), + + ]; + } + + /** + * @return string + */ + public function title(): string + { + return 'Containers'; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Exports/Sheets/PackingListsSheet.php b/app/Classes/Modules/Exports/Sheets/PackingListsSheet.php new file mode 100644 index 00000000..0634bfe2 --- /dev/null +++ b/app/Classes/Modules/Exports/Sheets/PackingListsSheet.php @@ -0,0 +1,128 @@ +whereIn('type', [PackingListType::WAREHOUSE_RECEIVE_LIST, PackingListType::SHIPPING_PACKING_LIST])->get(); + return $packingLists->filter(function ($packingList) { + + if($packingList->type === PackingListType::SHIPPING_PACKING_LIST){ + $warehouseArrival = PackingList::where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->where('reference', $packingList->reference)->get(); + return $warehouseArrival ? true : false; + } + + return false; + }); + } + + /** + * @param $packingList + * @return array + */ + public function map($packingList): array + { + + $warehouseArrivalList = $packingList; + $shippingList = PackingList::where('type', PackingListType::SHIPPING_PACKING_LIST)->where('reference', $packingList->reference)->get(); + + if($packingList->type === PackingListType::SHIPPING_PACKING_LIST) { + $warehouseArrivalList = null; + $shippingList = $packingList; + + } + + $arrivalTransport = null; + if($warehouseArrivalList){ + $arrivalTransport = $warehouseArrivalList->transports()->first(); + } + + $order = null; + if($packingList->owner instanceof Order){ + $order = $packingList->owner; + } + + $cbm = $packingList->packages->where('type', '!=', PackageType::OVER_WEIGHT)->sum(function($package) { + return ($package->width / 100) * ($package->height / 100) *($package->length / 100) * ($package->quantity); + }); + + $overWeight = $packingList->packages->where('type', PackageType::OVER_WEIGHT)->sum(function($package) { + return ($package->width / 100) * ($package->height / 100) *($package->length / 100) * ($package->quantity); + }); + + $container = $shippingList ? $shippingList->container : null; + + $delivery = $shippingList ? $shippingList->transport : null; + + return [ + $arrivalTransport ? $arrivalTransport->drop_date : null, + $order ? $order->reference : 'Unclaimed', + $order ? $order->companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference : 'Unclaimed', + $packingList->reference, + $packingList->packages()->sum('quantity'), + $cbm, + $overWeight, + $cbm + $overWeight, + $container ? $container->reference : null, + $delivery ? $delivery->drop_date : null, + strlen($packingList->reference) > 8 ? 'YD' : 'VT', + $order ? $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee : null, + ]; + + } + + /** + * @return string + */ + public function title(): string + { + return 'Packing Lists'; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Exports/ExportArrivedParcelController.php b/app/Http/Controllers/Exports/ExportArrivedParcelController.php index 1d67a5c0..6c726c52 100644 --- a/app/Http/Controllers/Exports/ExportArrivedParcelController.php +++ b/app/Http/Controllers/Exports/ExportArrivedParcelController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Exports; use App\Classes\Modules\Exports\Services\ExportsArrivedParcel; +use App\Classes\Modules\Exports\Services\ExportsParcel; use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; @@ -26,4 +27,11 @@ class ExportArrivedParcelController ob_end_clean(); return $response; } + + public function summary(Request $request) { + $exportsParcelsSummary = new ExportsParcel($request); + $response = $exportsParcelsSummary->download('parcel-summary.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); + ob_end_clean(); + return $response; + } } diff --git a/routes/web.php b/routes/web.php index e53d5a52..a81c8629 100644 --- a/routes/web.php +++ b/routes/web.php @@ -303,6 +303,7 @@ Route::get('/export/packing-list/{id}', 'Exports\ExportContainerPackingListContr Route::get('/export/pending-arrangement-delivery-list', 'Exports\ExportPendingArrangementPackingListController@export')->name('packaging_list.pending_arrangement.export'); Route::get('/export/on-hold-packing-list', 'Exports\ExportPendingArrangementPackingListController@onHold')->name('packaging_list.on_hold.export'); Route::get('/export/arrived-parcel', 'Exports\ExportArrivedParcelController@export')->name('packing_list.arrived_parcel.export'); +Route::get('/export/parcel-summary', 'Exports\ExportArrivedParcelController@summary'); Route::get('/settings', function () { return view('pages.settings');