mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/portal.git
synced 2026-08-23 14:34:19 +00:00
optimise order queries
This commit is contained in:
@@ -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()),
|
||||
];
|
||||
}),
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user