$this->id, 'reference' => $this->reference, 'reference_contract' => (int) $this->type, 'type' => (int) $this->type, 'status' => (int) $this->status, 'company_module' => new CompanyModuleResource($this->companyModule), '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()), $this->mergeWhen($this->relationLoaded('parcels'), [ 'origin_warehouse_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){ return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereDoesntHave('containers', function($query) { return $query->whereHas('transports', function($query){ return $query->whereHas('schedules', function($query){ return $query->where('etd', '<', Carbon::now()); }); }); }); })->get()), 'in_transit_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){ return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereHas('containers', function($query) { return $query->whereHas('transports', function($query){ return $query->where('status', '=', ApprovalStatus::APPROVED)->whereHas('schedules', function($query){ return $query->where('etd', '<', Carbon::now()); }); }); }); })->get()), 'destination_warehouse_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){ return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereHas('containers', function($query) { return $query->whereHas('transports', function($query){ return $query->where('type', '=', TransportType::SEA)->where('status', '=', ApprovalStatus::COMPLETED)->whereHas('schedules', function($query){ return $query->where('etd', '<', Carbon::now()); }); }); })->whereDoesntHave('transports', function($query){ return $query->where('type', '=', TransportType::LAND)->where('status', '=', ApprovalStatus::APPROVED)->whereHas('schedules', function($query){ return $query->where('etd', '<', Carbon::now()); }); }); })->get()), 'delivered_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){ return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereHas('containers', function($query) { return $query->whereHas('transports', function($query){ return $query->where('type', '=', TransportType::SEA)->where('status', '=', ApprovalStatus::COMPLETED)->whereHas('schedules', function($query){ return $query->where('etd', '<', Carbon::now()); }); }); })->whereHas('transports', function($query){ return $query->where('type', '=', TransportType::LAND)->where('status', '=', ApprovalStatus::APPROVED)->whereHas('schedules', function($query){ return $query->where('etd', '<', Carbon::now()); }); }); })->get()), 'parcels' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){ return $query->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST); })->get()), ]), 'created_at' => $this->created_at->format('d-m-Y') ]; } catch (\Exception $exception){ $this->id; } } }