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 bdd7d652..401da1db 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -89,6 +89,57 @@ 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]); + } + ); + } + /** * @return morphMany */