From 5d8d57e399fc2a3ce682d463b9008fd2ab7cd662 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sat, 21 Sep 2024 13:15:05 +0800 Subject: [PATCH] Laravel Vapor - Code refactoring --- .../FetchOrderPackagesLogic.php | 4 +- .../Resources/OrderPackagesBaseResource.php | 99 +++++++++++++++++++ app/Http/Resources/OrderPackagesResource.php | 61 ------------ app/Http/Resources/PackageBaseResource.php | 12 ++- .../Resources/PackingListBase2Resource.php | 43 -------- .../Resources/PackingListBaseResource.php | 17 +++- 6 files changed, 123 insertions(+), 113 deletions(-) create mode 100644 app/Http/Resources/OrderPackagesBaseResource.php delete mode 100644 app/Http/Resources/OrderPackagesResource.php delete mode 100644 app/Http/Resources/PackingListBase2Resource.php diff --git a/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php b/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php index 51221f5d..f53c4f74 100644 --- a/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php +++ b/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php @@ -6,7 +6,7 @@ namespace App\Classes\Modules\Orders\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; use App\Classes\Modules\Orders\Services\FetchesOrder; use App\Classes\Modules\Orders\Standards\Rules\CanFetchOrder; -use App\Http\Resources\OrderPackagesResource; +use App\Http\Resources\OrderPackagesBaseResource; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -53,7 +53,7 @@ class FetchOrderPackagesLogic extends AbstractControllerLogic $query = $this->fetchesOrder->execute(['reference' => $request->route('id'), 'with_packing_lists' => true]); - return $this->resourceResponse(new OrderPackagesResource($query)); + return $this->resourceResponse(new OrderPackagesBaseResource($query)); } diff --git a/app/Http/Resources/OrderPackagesBaseResource.php b/app/Http/Resources/OrderPackagesBaseResource.php new file mode 100644 index 00000000..099901d4 --- /dev/null +++ b/app/Http/Resources/OrderPackagesBaseResource.php @@ -0,0 +1,99 @@ +id; + + $origin_warehouse_packages = $this->originWarehousePackages()->get(); + foreach ($origin_warehouse_packages as $item) { + $item['include_shipping_transaction'] = false; + $item['include_suspended_invoice'] = false; + $item['include_packages'] = true; + $item['include_receive_packing_list'] = true; + $item['include_order_in_packages'] = true; + } + + $in_transit_packages = $this->inTransitPackages()->get(); + foreach ($in_transit_packages as $item) { + $item['include_shipping_transaction'] = false; + $item['include_suspended_invoice'] = false; + $item['include_packages'] = true; + $item['include_receive_packing_list'] = true; + $item['include_order_in_packages'] = true; + } + + $destination_warehouse_packages = $this->destinationWarehousePackages()->get(); + foreach ($destination_warehouse_packages as $item) { + $item['include_shipping_transaction'] = false; + $item['include_suspended_invoice'] = false; + $item['include_packages'] = true; + $item['include_receive_packing_list'] = true; + $item['include_order_in_packages'] = true; + } + + $delivered_packages = $this->deliveredPackages()->get(); + foreach ($delivered_packages as $item) { + $item['include_shipping_transaction'] = false; + $item['include_suspended_invoice'] = false; + $item['include_packages'] = true; + $item['include_receive_packing_list'] = true; + $item['include_order_in_packages'] = true; + } + + $received_packages = $this->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->whereHas('packages')->get(); + foreach ($received_packages as $item) { + $item['include_shipping_transaction'] = false; + $item['include_suspended_invoice'] = false; + $item['include_packages'] = true; + $item['include_receive_packing_list'] = true; + $item['include_order_in_packages'] = true; + } + + + return [ + 'id' => $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()), + 'parcels' => $this->whenLoaded('packingLists', function() use ($origin_warehouse_packages, $in_transit_packages, $destination_warehouse_packages, $delivered_packages, $received_packages) { + return [ + 'origin_warehouse_packages' => PackingListBaseResource::collection($origin_warehouse_packages), + 'in_transit_packages' => PackingListBaseResource::collection($in_transit_packages), + 'destination_warehouse_packages' => PackingListBaseResource::collection($destination_warehouse_packages), + 'delivered_packages' => PackingListBaseResource::collection($delivered_packages), + 'received_packages' => PackingListBaseResource::collection($received_packages), + ]; + }), + // 'invoices' => $this->whenLoaded('packingLists', function() use ($orderId) { + // return TransactionResource::collection($this->transactions()->whereNotIn('transactions.status', [0, 1])->where('transactions.type', TransactionType::SHIPPING_INVOICE)->get()); + // }), + //'remarks' => RemarkResource::collection($this->remarks), + 'created_at' => $this->created_at->format('d-m-Y') + ]; + + } +} diff --git a/app/Http/Resources/OrderPackagesResource.php b/app/Http/Resources/OrderPackagesResource.php deleted file mode 100644 index 2b414815..00000000 --- a/app/Http/Resources/OrderPackagesResource.php +++ /dev/null @@ -1,61 +0,0 @@ -id; - - return [ - 'id' => $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()), - 'parcels' => $this->whenLoaded('packingLists', function() { - return [ - 'origin_warehouse_packages' => PackingListBase2Resource::collection( - $this->originWarehousePackages()->get() - ), - 'in_transit_packages' => PackingListBase2Resource::collection( - $this->inTransitPackages()->get() - ), - 'destination_warehouse_packages' => PackingListBase2Resource::collection( - $this->destinationWarehousePackages()->get() - ), - 'delivered_packages' => PackingListBase2Resource::collection( - $this->deliveredPackages()->get() - ), - 'received_packages' => PackingListBase2Resource::collection($this->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->whereHas('packages')->get()), - ]; - }), - // 'invoices' => $this->whenLoaded('packingLists', function() use ($orderId) { - // return TransactionResource::collection($this->transactions()->whereNotIn('transactions.status', [0, 1])->where('transactions.type', TransactionType::SHIPPING_INVOICE)->get()); - // }), - //'remarks' => RemarkResource::collection($this->remarks), - 'created_at' => $this->created_at->format('d-m-Y') - ]; - - } -} diff --git a/app/Http/Resources/PackageBaseResource.php b/app/Http/Resources/PackageBaseResource.php index 19e4a159..5b1d14ff 100644 --- a/app/Http/Resources/PackageBaseResource.php +++ b/app/Http/Resources/PackageBaseResource.php @@ -16,7 +16,7 @@ class PackageBaseResource extends JsonResource */ public function toArray($request) { - return [ + $data = [ 'id' => $this->id, 'type' => $this->type, 'description' => $this->description, @@ -28,11 +28,15 @@ class PackageBaseResource extends JsonResource 'cbm' => (($this->width / 100) * ($this->height / 100) * ($this->length / 100)) * $this->quantity, 'reference' => $this->packingList->reference, 'status' => $this->status, - // $this->mergeWhen($originalPackingList->owner instanceof Order, [ - // 'order' => New OrderResource($originalPackingList->owner) - // ]), // 'container' => new ContainerResource($originalPackingList->containers()->first()), // 'transport' => new TransportResource($originalPackingList->transports()->first()) ]; + + if($this->include_order) { + $originalPackingList = $this->packingList->owner instanceof PackingList ? $this->packingList->owner : $this->packingList; + $data['order'] = new OrderResource($originalPackingList->owner); + } + + return $data; } } diff --git a/app/Http/Resources/PackingListBase2Resource.php b/app/Http/Resources/PackingListBase2Resource.php deleted file mode 100644 index ef7defd4..00000000 --- a/app/Http/Resources/PackingListBase2Resource.php +++ /dev/null @@ -1,43 +0,0 @@ -user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); - $packages = !$this->packingLists()->exists() || $exceptionUsers ? $this->packages : $this->packingLists->first()->packages; - - return [ - 'id' => $this->id, - 'claimant_id' => $this->claimant_id, - 'reference' => $this->reference, - 'status' => $this->status, - 'transport' => new TransportResource($this->transports()->first()), - 'type' => $this->type, - 'receive_packing_list' => $this->when($this->type === PackingListType::SHIPPING_PACKING_LIST, new PackingListResource(PackingList::where('reference', $this->reference)->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->first())), - 'packages' => PackageResource::collection($packages), - $this->mergeWhen($this->owner instanceof Order, [ - 'order' => New OrderResource($this->owner) - ]), - //'shipping_transaction' => new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first()), - //'suspended_invoice' => new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->first()), - // 'suspended_invoices' => TransactionResource::collection($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->get()), - ]; - } -} diff --git a/app/Http/Resources/PackingListBaseResource.php b/app/Http/Resources/PackingListBaseResource.php index 862bff62..f41905fe 100644 --- a/app/Http/Resources/PackingListBaseResource.php +++ b/app/Http/Resources/PackingListBaseResource.php @@ -25,12 +25,15 @@ class PackingListBaseResource extends JsonResource $receive_packing_list = null; if($this->include_packages){ $packages = !$this->packingLists()->exists() || $exceptionUsers ? $this->packages : $this->packingLists->first()->packages; + foreach ($packages as $item) { + $item['include_order'] = $this->include_order_in_packages; + } } if($this->include_receive_packing_list){ $receive_packing_list = $this->when($this->type === PackingListType::SHIPPING_PACKING_LIST, new PackingListResource(PackingList::where('reference', $this->reference)->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->first())); } - return [ + $data = [ 'id' => $this->id, 'claimant_id' => $this->claimant_id, 'reference' => $this->reference, @@ -43,9 +46,17 @@ class PackingListBaseResource extends JsonResource $this->mergeWhen($this->owner instanceof Order, [ 'order' => New OrderResource($this->owner) ]), - 'shipping_transaction' => new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first()), - 'suspended_invoice' => new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->first()), // 'suspended_invoices' => TransactionResource::collection($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->get()), ]; + + if($this->include_shipping_transaction){ + $data['shipping_transaction'] = new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first()); + } + if($this->include_suspended_invoice){ + $data['suspended_invoice'] = new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->first()); + } + + return $data; + } }