From aae9f160e6615235bfc4d9601821203db28a6c67 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Sun, 17 Oct 2021 17:55:16 +0800 Subject: [PATCH] simplify order resource --- app/Http/Resources/OrderResource.php | 30 +++++++--------- app/Models/Order.php | 51 ++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 17 deletions(-) diff --git a/app/Http/Resources/OrderResource.php b/app/Http/Resources/OrderResource.php index 27dfe4da..06e31b6f 100644 --- a/app/Http/Resources/OrderResource.php +++ b/app/Http/Resources/OrderResource.php @@ -29,24 +29,20 @@ class OrderResource extends JsonResource 'warehouse' => new CompanyModuleResource($this->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee), 'address' => new AddressResource($this->addresses()->where('status', '=', ApprovalStatus::APPROVED)->first()), 'address_change_request' => new AddressResource($this->addressesPendingVerification()->first()), - 'parcels' => $this->whenLoaded('packingLists', function(){ + 'parcels' => $this->whenLoaded('packingLists', function() { return [ - 'origin_warehouse_packages' => PackageResource::collection($this->parcels()->shippingList()->whereDoesntHave('shippingSchedules', function($schedule){ - return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); - })->get()), - 'in_transit_packages' => PackageResource::collection($this->parcels()->shippingList()->Shipping()->whereHas('shippingSchedules', function($schedule){ - return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); - })->whereDoesntHave('container', function($container){ - return $container->where('containers.status', ApprovalStatus::COMPLETED); - })->get()), - 'destination_warehouse_packages' => PackageResource::collection($this->parcels()->shippingList()->whereHas('container', function($container){ - return $container->where('containers.status', ApprovalStatus::COMPLETED); - })->whereDoesntHave('deliverySchedules', function($schedule){ - return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); - })->get()), - 'delivered_packages' => PackageResource::collection($this->parcels()->shippingList()->whereHas('deliverySchedules', function($schedule){ - return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); - })->get()), + 'origin_warehouse_packages' => PackageResource::collection( + $this->originWarehousePackages()->get() + ), + 'in_transit_packages' => PackageResource::collection( + $this->inTransitPackages()->get() + ), + 'destination_warehouse_packages' => PackageResource::collection( + $this->destinationWarehousePackages()->get() + ), + 'delivered_packages' => PackageResource::collection( + $this->deliveredPackages()->get() + ), 'received_packages' => PackageResource::collection($this->parcels()->warehouseReceiveList()->get()), ]; }), diff --git a/app/Models/Order.php b/app/Models/Order.php index 9d3099a5..6e71747a 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -88,4 +88,55 @@ class Order extends AbstractModel implements Addressable, Packable { return $this->addresses()->where('status','=',ApprovalStatus::APPROVED); } + + public function originWarehousePackages() + { + return $this->parcels()->shippingList() + ->whereDoesntHave('shippingSchedules', + function($schedule) { + return $schedule->dispatched() + ->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); + } + ); + } + + public function inTransitPackages() + { + return $this->parcels()->shippingList()->Shipping() + ->whereHas('shippingSchedules', + function($schedule) { + return $schedule->dispatched() + ->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); + } + ) + ->whereDoesntHave('container', function($container) { + return $container->where('containers.status', ApprovalStatus::COMPLETED); + } + ); + } + + public function destinationWarehousePackages() + { + return $this->parcels()->shippingList() + ->whereHas('container', + function($container) { + return $container->where('containers.status', ApprovalStatus::COMPLETED); + } + ) + ->whereDoesntHave('deliverySchedules', + function($schedule) { + return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); + } + ); + } + + public function deliveredPackages() + { + return $this->parcels()->shippingList() + ->whereHas('deliverySchedules', + function($schedule) { + return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); + } + ); + } }