diff --git a/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php b/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php index 487f3861..a993330d 100644 --- a/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php +++ b/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php @@ -6,13 +6,13 @@ 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\OrderPackagesBaseResource; +use App\Http\Resources\OrderPackagesDeprecatedResource; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; /** * @deprecated This class is deprecated and should not be used. - * Use `FetchOrderPackagesV2Logic` instead or write a new one based on FetchOrderPackagesV2Logic + * Use `FetchOrderPackagesReceivedV2Logic` instead or write a new one based on FetchOrderPackagesReceivedV2Logic */ class FetchOrderPackagesLogic extends AbstractControllerLogic { @@ -74,7 +74,7 @@ class FetchOrderPackagesLogic extends AbstractControllerLogic $query->include_packages_received = $filters['include_packages_received']; } - return $this->resourceResponse(new OrderPackagesBaseResource($query)); + return $this->resourceResponse(new OrderPackagesDeprecatedResource($query)); } diff --git a/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesReceivedV2Logic.php b/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesReceivedV2Logic.php new file mode 100644 index 00000000..31354627 --- /dev/null +++ b/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesReceivedV2Logic.php @@ -0,0 +1,59 @@ + 'Retrieved Order Packages Received', + 'message' => 'You have successfully retrieved an order packages' + ]; + } + + /** @var CanFetchOrder */ + private $canFetchOrder; + + /** @var FetchesOrder */ + private $fetchesOrder; + + /** + * FetchOrderPackagesReceivedV2Logic constructor. + * @param CanFetchOrder $canFetchOrder + * @param FetchesOrder $fetchesOrder + */ + public function __construct(CanFetchOrder $canFetchOrder, FetchesOrder $fetchesOrder) + { + $this->canFetchOrder = $canFetchOrder; + $this->fetchesOrder = $fetchesOrder; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + $this->canFetchOrder->passes(); + + $query = $this->fetchesOrder->execute(['reference' => $request->route('id'), 'with_packing_lists' => true]); + + //Can refer FetchOrderPackagesLogic for different type of OrderPackages Resources + return $this->resourceResponse(new OrderPackagesReceivedResource($query)); + } + +} diff --git a/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesV2Logic.php b/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesV2Logic.php index 61c8f6b4..2db06783 100644 --- a/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesV2Logic.php +++ b/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesV2Logic.php @@ -6,10 +6,11 @@ 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\OrderPackagesReceivedResource; +use App\Http\Resources\OrderPackagesResource; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; + class FetchOrderPackagesV2Logic extends AbstractControllerLogic { @@ -49,11 +50,7 @@ class FetchOrderPackagesV2Logic extends AbstractControllerLogic public function logic(Request $request) : JsonResponse { $this->canFetchOrder->passes(); - $query = $this->fetchesOrder->execute(['reference' => $request->route('id'), 'with_packing_lists' => true]); - - //Can refer FetchOrderPackagesLogic for different type of OrderPackages Resources - return $this->resourceResponse(new OrderPackagesReceivedResource($query)); + return $this->resourceResponse(new OrderPackagesResource($query)); } - } diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php index 70c02729..8c3ae829 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php @@ -6,7 +6,6 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; use App\Classes\Modules\PackingLists\Services\ListsPackingLists; use App\Classes\Modules\PackingLists\Standards\Rules\CanListPackingLists; -use App\Http\Resources\PackingListBaseResource; use App\Http\Resources\PackingListResource; use ErrorException; use Illuminate\Http\JsonResponse; @@ -52,56 +51,7 @@ class ListPackingListsLogic extends AbstractControllerLogic public function logic(Request $request) : JsonResponse { $this->canListPackingLists->passes(); - $query = $this->listsPackingLists->execute($this->listsPackingLists->deserializeFilters($request->input('filters'))); - - // if($request->input('storages')){ - // Log::info("ListPackingListsLogic storages B"); - // foreach ($query->items() as $item) { - // $item['storages'] = $request->input('storages'); - // } - // return $this->collectionResponse(PackingListWithStorageResource::collection($query)); - // } - - $filters = json_decode($request->input('filters'), true); - Log::info('ListPackingListsLogic storages A with Filters:' . json_encode($filters)); - - $useNew = false; - foreach ($query->items() as $item) { - //from middleware - if($request->input('storages')){ - $item['storages'] = $request->input('storages'); - } - - //from front end component - if(isset($filters['include_packages'])){ - //'include_packages' filter is an attempt to reduce the request-response time to only load basic information unless explicitly indicated to be included - $item['include_packages'] = $filters['include_packages']; - $useNew = true; - } - - if(isset($filters['include_receive_packing_list'])){ - //'include_receive_packing_list' filter is an attempt to reduce the request-response time to only load basic information unless explicitly indicated to be included - $item['include_receive_packing_list'] = $filters['include_receive_packing_list']; - $useNew = true; - } - - if(isset($filters['include_shipping_transaction'])){ - $item['include_shipping_transaction'] = $filters['include_shipping_transaction']; - $useNew = true; - } - - if(isset($filters['include_suspended_invoice'])){ - $item['include_suspended_invoice'] = $filters['include_suspended_invoice']; - $useNew = true; - } - } - - if($useNew){ - return $this->collectionResponse(PackingListBaseResource::collection($query)); - } - - //Fallback return $this->collectionResponse(PackingListResource::collection($query)); } } diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsPaidInvoiceLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsPaidInvoiceLogic.php new file mode 100644 index 00000000..77ec0c54 --- /dev/null +++ b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsPaidInvoiceLogic.php @@ -0,0 +1,63 @@ + '(Paid Invoice) Retrieved PackingLists', + 'message' => 'You have successfully retrieved a list of PackingLists' + ]; + } + + /** @var CanListPackingLists */ + private $canListPackingLists; + + /** @var ListsPackingLists */ + private $listsPackingLists; + + /** + * ListPackingListsPaidInvoiceLogic constructor. + * @param CanListPackingLists $canListPackingLists + * @param ListsPackingLists $listsPackingLists + */ + public function __construct(CanListPackingLists $canListPackingLists, ListsPackingLists $listsPackingLists) + { + $this->canListPackingLists = $canListPackingLists; + $this->listsPackingLists = $listsPackingLists; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + $this->canListPackingLists->passes(); + $query = $this->listsPackingLists->execute($this->listsPackingLists->deserializeFilters($request->input('filters'))); + foreach ($query->items() as $item) { + //from middleware + if($request->input('storages')){ + $item['storages'] = $request->input('storages'); + } + } + return $this->collectionResponse(PackingListPaidInvoiceResource::collection($query)); + } +} diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsPendingApprovalLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsPendingApprovalLogic.php new file mode 100644 index 00000000..d93ca7d5 --- /dev/null +++ b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsPendingApprovalLogic.php @@ -0,0 +1,57 @@ + '(Pending Approval) Retrieved PackingLists', + 'message' => 'You have successfully retrieved a list of PackingLists' + ]; + } + + /** @var CanListPackingLists */ + private $canListPackingLists; + + /** @var ListsPackingLists */ + private $listsPackingLists; + + /** + * ListPackingListsPendingApprovalLogic constructor. + * @param CanListPackingLists $canListPackingLists + * @param ListsPackingLists $listsPackingLists + */ + public function __construct(CanListPackingLists $canListPackingLists, ListsPackingLists $listsPackingLists) + { + $this->canListPackingLists = $canListPackingLists; + $this->listsPackingLists = $listsPackingLists; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + $this->canListPackingLists->passes(); + $query = $this->listsPackingLists->execute($this->listsPackingLists->deserializeFilters($request->input('filters'))); + return $this->collectionResponse(PackingListPendingApprovalResource::collection($query)); + } +} diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsPendingInvoiceLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsPendingInvoiceLogic.php new file mode 100644 index 00000000..b8c4bc54 --- /dev/null +++ b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsPendingInvoiceLogic.php @@ -0,0 +1,57 @@ + '(Pending Invoice) Retrieved PackingLists', + 'message' => 'You have successfully retrieved a list of PackingLists' + ]; + } + + /** @var CanListPackingLists */ + private $canListPackingLists; + + /** @var ListsPackingLists */ + private $listsPackingLists; + + /** + * ListPackingListsPendingInvoiceLogic constructor. + * @param CanListPackingLists $canListPackingLists + * @param ListsPackingLists $listsPackingLists + */ + public function __construct(CanListPackingLists $canListPackingLists, ListsPackingLists $listsPackingLists) + { + $this->canListPackingLists = $canListPackingLists; + $this->listsPackingLists = $listsPackingLists; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + $this->canListPackingLists->passes(); + $query = $this->listsPackingLists->execute($this->listsPackingLists->deserializeFilters($request->input('filters'))); + return $this->collectionResponse(PackingListPendingInvoiceResource::collection($query)); + } +} diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsPendingPaymentLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsPendingPaymentLogic.php new file mode 100644 index 00000000..87384704 --- /dev/null +++ b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsPendingPaymentLogic.php @@ -0,0 +1,64 @@ + '(Pending Payment) Retrieved PackingLists', + 'message' => 'You have successfully retrieved a list of PackingLists' + ]; + } + + /** @var CanListPackingLists */ + private $canListPackingLists; + + /** @var ListsPackingLists */ + private $listsPackingLists; + + /** + * ListPackingListsPendingPaymentLogic constructor. + * @param CanListPackingLists $canListPackingLists + * @param ListsPackingLists $listsPackingLists + */ + public function __construct(CanListPackingLists $canListPackingLists, ListsPackingLists $listsPackingLists) + { + $this->canListPackingLists = $canListPackingLists; + $this->listsPackingLists = $listsPackingLists; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + $this->canListPackingLists->passes(); + + $query = $this->listsPackingLists->execute($this->listsPackingLists->deserializeFilters($request->input('filters'))); + foreach ($query->items() as $item) { + //from middleware + if($request->input('storages')){ + $item['storages'] = $request->input('storages'); + } + } + return $this->collectionResponse(PackingListPendingPaymentResource::collection($query)); + } +} diff --git a/app/Http/Controllers/Orders/FetchOrderPackagesV2Controller.php b/app/Http/Controllers/Orders/FetchOrderPackagesV2Controller.php index 03452b37..44b9f519 100644 --- a/app/Http/Controllers/Orders/FetchOrderPackagesV2Controller.php +++ b/app/Http/Controllers/Orders/FetchOrderPackagesV2Controller.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Orders; +use App\Classes\Modules\Orders\ControllersLogic\FetchOrderPackagesReceivedV2Logic; use App\Classes\Modules\Orders\ControllersLogic\FetchOrderPackagesV2Logic; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -10,7 +11,17 @@ class FetchOrderPackagesV2Controller { /** * @param Request $request - * @param FetchOrderLogic $logic + * @param FetchOrderPackagesReceivedV2Logic $logic + * @return JsonResponse + */ + public function fetchReceived(Request $request, FetchOrderPackagesReceivedV2Logic $logic): JsonResponse + { + return $logic->execute($request); + } + + /** + * @param Request $request + * @param FetchOrderPackagesV2Logic $logic * @return JsonResponse */ public function fetch(Request $request, FetchOrderPackagesV2Logic $logic): JsonResponse diff --git a/app/Http/Controllers/PackingLists/ListPackingListsController.php b/app/Http/Controllers/PackingLists/ListPackingListsController.php index 6e63b476..e6b5e3f8 100644 --- a/app/Http/Controllers/PackingLists/ListPackingListsController.php +++ b/app/Http/Controllers/PackingLists/ListPackingListsController.php @@ -4,6 +4,10 @@ namespace App\Http\Controllers\PackingLists; use App\Classes\Modules\PackingLists\ControllersLogic\ListPackingListsLogic; use App\Classes\Modules\PackingLists\ControllersLogic\ListPackingListsForWarehouseLogic; +use App\Classes\Modules\PackingLists\ControllersLogic\ListPackingListsPendingInvoiceLogic; +use App\Classes\Modules\PackingLists\ControllersLogic\ListPackingListsPendingApprovalLogic; +use App\Classes\Modules\PackingLists\ControllersLogic\ListPackingListsPendingPaymentLogic; +use App\Classes\Modules\PackingLists\ControllersLogic\ListPackingListsPaidInvoiceLogic; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -27,4 +31,39 @@ class ListPackingListsController return $logic->execute($request); } + /** + * @param Request $request + * @param ListPackingListsPendingInvoiceLogic $logic + * @return JsonResponse + */ + public function pendingInvoiceList(Request $request, ListPackingListsPendingInvoiceLogic $logic): JsonResponse { + return $logic->execute($request); + } + + /** + * @param Request $request + * @param ListPackingListsPendingApprovalLogic $logic + * @return JsonResponse + */ + public function pendingApprovalList(Request $request, ListPackingListsPendingApprovalLogic $logic): JsonResponse { + return $logic->execute($request); + } + + /** + * @param Request $request + * @param ListPackingListsPendingPaymentLogic $logic + * @return JsonResponse + */ + public function pendingPaymentList(Request $request, ListPackingListsPendingPaymentLogic $logic): JsonResponse { + return $logic->execute($request); + } + + /** + * @param Request $request + * @param ListPackingListsPaidInvoiceLogic $logic + * @return JsonResponse + */ + public function paidInvoiceList(Request $request, ListPackingListsPaidInvoiceLogic $logic): JsonResponse { + return $logic->execute($request); + } } diff --git a/app/Http/Resources/ContainerBaseResource.php b/app/Http/Resources/ContainerBaseResource.php index 6a719102..486a3dc1 100644 --- a/app/Http/Resources/ContainerBaseResource.php +++ b/app/Http/Resources/ContainerBaseResource.php @@ -42,17 +42,6 @@ class ContainerBaseResource extends JsonResource protected function getSortedPackingLists() { $sortedPackingLists = $this->packingLists()->get()->sortBy(fn ($packingList) => $packingList->owner->company_module_id); - foreach ($sortedPackingLists as $item) { - $item['include_shipping_transaction'] = false; - $item['include_suspended_invoice'] = false; - $item['include_packages'] = true; - $item['include_receive_packing_list'] = false; - $item['include_base_only_in_receive_packing_list'] = true; - $item['include_order_in_packages'] = false; - $item['include_transport_in_packages'] = false; - $item['include_container_in_packages'] = false; - $item['include_packing_list_reference_in_packages'] = false; - } - return $this->whenLoaded('packingLists', PackingListBaseResource::collection($sortedPackingLists)); + return $this->whenLoaded('packingLists', PackingListForContainerBaseResource::collection($sortedPackingLists)); } } diff --git a/app/Http/Resources/ListPackingListDetailsJobResource.php b/app/Http/Resources/ListPackingListDetailsJobResource.php index a7616ff8..a81bb902 100644 --- a/app/Http/Resources/ListPackingListDetailsJobResource.php +++ b/app/Http/Resources/ListPackingListDetailsJobResource.php @@ -37,7 +37,7 @@ class ListPackingListDetailsJobResource extends JsonResource // 'order' => New OrderResource($this->owner) // ]), 'container' => new ContainerResource($this->containers->first()), - 'packages' => PackageBaseResource::collection($packages), + 'packages' => PackageDeprecatedResource::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()), diff --git a/app/Http/Resources/ListPackingListJobResource.php b/app/Http/Resources/ListPackingListJobResource.php index ca1143ba..571bcfb2 100644 --- a/app/Http/Resources/ListPackingListJobResource.php +++ b/app/Http/Resources/ListPackingListJobResource.php @@ -37,7 +37,7 @@ class ListPackingListJobResource extends JsonResource // 'order' => New OrderResource($this->owner) // ]), 'container' => new ContainerResource($this->containers->first()), - 'packages' => PackageBaseResource::collection($packages), + 'packages' => PackageDeprecatedResource::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()), diff --git a/app/Http/Resources/ListPackingListJobWithStorageResource.php b/app/Http/Resources/ListPackingListJobWithStorageResource.php index 0d221825..ec16e4c4 100644 --- a/app/Http/Resources/ListPackingListJobWithStorageResource.php +++ b/app/Http/Resources/ListPackingListJobWithStorageResource.php @@ -45,7 +45,7 @@ class ListPackingListJobWithStorageResource extends JsonResource // 'order' => New OrderResource($this->owner) // ]), 'container' => new ContainerResource($this->containers->first()), - 'packages' => PackageBaseResource::collection($packages), + 'packages' => PackageDeprecatedResource::collection($packages), $this->mergeWhen($this->owner instanceof Order, [ 'order' => New OrderResource($this->owner) ]), 'shipping_transaction' => count($storages) == 0 ? new TransactionWithStorageResource($shippingTransaction): null, 'storages' => $storages, diff --git a/app/Http/Resources/OrderPackagesBaseResource.php b/app/Http/Resources/OrderPackagesDeprecatedResource.php similarity index 92% rename from app/Http/Resources/OrderPackagesBaseResource.php rename to app/Http/Resources/OrderPackagesDeprecatedResource.php index c31177e6..f520be44 100644 --- a/app/Http/Resources/OrderPackagesBaseResource.php +++ b/app/Http/Resources/OrderPackagesDeprecatedResource.php @@ -15,7 +15,7 @@ use Illuminate\Http\Resources\Json\JsonResource; * @deprecated This class is deprecated and should not be used. * Use `OrderPackagesReceivedResource` instead or write a new one based on OrderPackagesReceivedResource */ -class OrderPackagesBaseResource extends JsonResource +class OrderPackagesDeprecatedResource extends JsonResource { /** * Transform the resource into an array. @@ -106,19 +106,19 @@ class OrderPackagesBaseResource extends JsonResource 'parcels' => $this->whenLoaded('packingLists', function() use ($origin_warehouse_packages, $in_transit_packages, $destination_warehouse_packages, $delivered_packages, $received_packages) { return [ $this->mergeWhen($this->include_packages_origin_warehouse, [ - 'origin_warehouse_packages' => PackingListBaseResource::collection($origin_warehouse_packages) + 'origin_warehouse_packages' => PackingListDeprecatedResource::collection($origin_warehouse_packages) ]), $this->mergeWhen($this->include_packages_in_transit, [ - 'in_transit_packages' => PackingListBaseResource::collection($in_transit_packages) + 'in_transit_packages' => PackingListDeprecatedResource::collection($in_transit_packages) ]), $this->mergeWhen($this->include_packages_destination_warehouse, [ - 'destination_warehouse_packages' => PackingListBaseResource::collection($destination_warehouse_packages) + 'destination_warehouse_packages' => PackingListDeprecatedResource::collection($destination_warehouse_packages) ]), $this->mergeWhen($this->include_packages_delivery, [ - 'delivered_packages' => PackingListBaseResource::collection($delivered_packages) + 'delivered_packages' => PackingListDeprecatedResource::collection($delivered_packages) ]), $this->mergeWhen($this->include_packages_received, [ - 'received_packages' => PackingListBaseResource::collection($received_packages) + 'received_packages' => PackingListDeprecatedResource::collection($received_packages) ]), ]; }), diff --git a/app/Http/Resources/OrderPackagesReceivedResource.php b/app/Http/Resources/OrderPackagesReceivedResource.php index c68d803b..500fbb10 100644 --- a/app/Http/Resources/OrderPackagesReceivedResource.php +++ b/app/Http/Resources/OrderPackagesReceivedResource.php @@ -5,7 +5,7 @@ namespace App\Http\Resources; use App\Classes\ValueObjects\Constants\PackingListType; use Illuminate\Http\Resources\Json\JsonResource; -//Originally from OrderPackagesBaseResource +//Originally from OrderPackagesDeprecatedResource class OrderPackagesReceivedResource extends JsonResource { /** diff --git a/app/Http/Resources/OrderPackagesResource.php b/app/Http/Resources/OrderPackagesResource.php new file mode 100644 index 00000000..b0e4498f --- /dev/null +++ b/app/Http/Resources/OrderPackagesResource.php @@ -0,0 +1,44 @@ +originWarehousePackages()->get(); + $in_transit_packages = $this->inTransitPackages()->get(); + $destination_warehouse_packages = $this->destinationWarehousePackages()->get(); + $delivered_packages = $this->deliveredPackages()->get(); + $received_packages = $this->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->whereHas('packages')->get(); + + return [ + 'id' => $this->id, + 'reference' => $this->reference, + 'reference_contract' => (int) $this->type, + 'type' => (int) $this->type, + 'status' => (int) $this->status, + 'parcels' => $this->whenLoaded('packingLists', function() use ($origin_warehouse_packages, $in_transit_packages, $destination_warehouse_packages, $delivered_packages, $received_packages) { + return [ + 'origin_warehouse_packages' => PackingListForPackagesResource::collection($origin_warehouse_packages), + 'in_transit_packages' => PackingListForPackagesResource::collection($in_transit_packages), + 'destination_warehouse_packages' => PackingListForPackagesResource::collection($destination_warehouse_packages), + 'delivered_packages' => PackingListForPackagesResource::collection($delivered_packages), + 'received_packages' => PackingListForPackagesResource::collection($received_packages), + ]; + }), + 'created_at' => $this->created_at->format('d-m-Y') + ]; + + } +} diff --git a/app/Http/Resources/PackageBaseResource.php b/app/Http/Resources/PackageBaseResource.php index bf9b2f7d..1cf8052b 100644 --- a/app/Http/Resources/PackageBaseResource.php +++ b/app/Http/Resources/PackageBaseResource.php @@ -2,10 +2,7 @@ namespace App\Http\Resources; -use App\Classes\ValueObjects\Constants\RoleTypes; -use App\Models\PackingList; use Illuminate\Http\Resources\Json\JsonResource; -use Illuminate\Support\Facades\Crypt; class PackageBaseResource extends JsonResource { @@ -17,10 +14,6 @@ class PackageBaseResource extends JsonResource */ public function toArray($request) { - // $exceptionUsers = in_array(Auth()->user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); - $userType = Auth() && Auth()->user() ? Auth()->user()->type : RoleTypes::USER; - $exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); - $data = [ 'id' => $this->id, 'type' => $this->type, @@ -32,29 +25,7 @@ class PackageBaseResource extends JsonResource 'quantity' => $this->quantity, 'cbm' => (($this->width / 100) * ($this->height / 100) * ($this->length / 100)) * $this->quantity, 'status' => $this->status, - // 'container' => new ContainerResource($originalPackingList->containers()->first()), - // 'transport' => new TransportResource($originalPackingList->transports()->first()) ]; - - if($this->include_order || $this->include_transport || $this->include_container) { - $originalPackingList = $this->packingList->owner instanceof PackingList ? $this->packingList->owner : $this->packingList; - if($this->include_order) { - $data['order'] = new OrderResource($originalPackingList->owner); - } - if($this->include_transport) { - $data['transport'] = new TransportResource($originalPackingList->transports()->first()); - } - if($this->include_container) { - $data['container'] = new ContainerResource($originalPackingList->containers()->first()); - } - } - - if($this->include_packing_list_reference){ - $data['reference'] = $exceptionUsers ? $this->packingList->reference : ''; - $data['reference_hash'] = hash('sha256', $this->packingList->reference); - $data['reference_encrypted'] = Crypt::encryptString($this->packingList->reference); - } - return $data; } } diff --git a/app/Http/Resources/PackageDeprecatedResource.php b/app/Http/Resources/PackageDeprecatedResource.php new file mode 100644 index 00000000..416e2740 --- /dev/null +++ b/app/Http/Resources/PackageDeprecatedResource.php @@ -0,0 +1,65 @@ +user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + $userType = Auth() && Auth()->user() ? Auth()->user()->type : RoleTypes::USER; + $exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + + $data = [ + 'id' => $this->id, + 'type' => $this->type, + 'description' => $this->description, + 'width' => floatval($this->width), + 'height' => floatval($this->height), + 'length' => floatval($this->length), + 'weight' => $this->weight, + 'quantity' => $this->quantity, + 'cbm' => (($this->width / 100) * ($this->height / 100) * ($this->length / 100)) * $this->quantity, + 'status' => $this->status, + // 'container' => new ContainerResource($originalPackingList->containers()->first()), + // 'transport' => new TransportResource($originalPackingList->transports()->first()) + ]; + + if($this->include_order || $this->include_transport || $this->include_container) { + $originalPackingList = $this->packingList->owner instanceof PackingList ? $this->packingList->owner : $this->packingList; + if($this->include_order) { + $data['order'] = new OrderResource($originalPackingList->owner); + } + if($this->include_transport) { + $data['transport'] = new TransportResource($originalPackingList->transports()->first()); + } + if($this->include_container) { + $data['container'] = new ContainerResource($originalPackingList->containers()->first()); + } + } + + if($this->include_packing_list_reference){ + $data['reference'] = $exceptionUsers ? $this->packingList->reference : ''; + $data['reference_hash'] = hash('sha256', $this->packingList->reference); + $data['reference_encrypted'] = Crypt::encryptString($this->packingList->reference); + } + + return $data; + } +} diff --git a/app/Http/Resources/PackingListBaseResource.php b/app/Http/Resources/PackingListBaseResource.php index a29f174a..4fb778b7 100644 --- a/app/Http/Resources/PackingListBaseResource.php +++ b/app/Http/Resources/PackingListBaseResource.php @@ -2,12 +2,8 @@ namespace App\Http\Resources; -use App\Classes\ValueObjects\Constants\ApprovalStatus; -use App\Classes\ValueObjects\Constants\PackingListType; -use App\Classes\ValueObjects\Constants\TransactionType; -use App\Classes\ValueObjects\Constants\RoleTypes; + use App\Models\Order; -use App\Models\PackingList; use Illuminate\Http\Resources\Json\JsonResource; class PackingListBaseResource extends JsonResource @@ -20,13 +16,6 @@ class PackingListBaseResource extends JsonResource */ public function toArray($request) { - // $exceptionUsers = in_array(Auth()->user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); - $userType = Auth() && Auth()->user() ? Auth()->user()->type : RoleTypes::USER; - $exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); - - $packages = []; - $receive_packing_list = null; - //The Base $data = [ 'id' => $this->id, @@ -39,95 +28,7 @@ class PackingListBaseResource extends JsonResource $this->mergeWhen($this->owner instanceof Order, [ 'order' => New OrderResource($this->owner) ]), - // 'suspended_invoices' => TransactionResource::collection($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->get()), ]; - - - //option 1: include_packages - if($this->include_packages){ - $packages = !$this->packingLists()->exists() || $exceptionUsers ? $this->packages : $this->packingLists->first()->packages; - foreach ($packages as $item) { - if(isset($this->include_order_in_packages) && $this->include_order_in_packages){ - $item['include_order'] = $this->include_order_in_packages; - } - if(isset($this->include_transport_in_packages) && $this->include_transport_in_packages){ - $item['include_transport'] = $this->include_transport_in_packages; - } - if(isset($this->include_container_in_packages) && $this->include_container_in_packages){ - $item['include_container'] = $this->include_container_in_packages; - } - if(isset($this->include_packing_list_reference_in_packages) && $this->include_packing_list_reference_in_packages){ - $item['include_packing_list_reference'] = $this->include_packing_list_reference_in_packages; - } - } - } - $data['packages'] = PackageBaseResource::collection($packages); - - - //option 2a: include_receive_packing_list - if($this->include_receive_packing_list){ - $temp = PackingList::where('reference', $this->reference)->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->first(); - $temp->include_shipping_transaction = true; - $temp->include_suspended_invoice = true; - $temp->include_packages = true; - $temp->include_receive_packing_list = true; - $temp->include_base_only_in_receive_packing_list = false; - $temp->include_order_in_packages = true; - $temp->include_transport_in_packages = true; - $temp->include_container_in_packages = true; - $temp->include_packing_list_reference_in_packages = true; - - $receive_packing_list = $this->when($this->type === PackingListType::SHIPPING_PACKING_LIST, new PackingListBaseResource($temp)); - } - - //option 2b: include_base_only_in_receive_packing_list - if($this->include_base_only_in_receive_packing_list){ - $temp = PackingList::where('reference', $this->reference)->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->first(); - $temp->include_shipping_transaction = false; - $temp->include_suspended_invoice = false; - $temp->include_packages = false; - $temp->include_receive_packing_list = false; - $temp->include_base_only_in_receive_packing_list = false; - $temp->include_order_in_packages = false; - $temp->include_transport_in_packages = false; - $temp->include_container_in_packages = false; - $temp->include_packing_list_reference_in_packages = false; - - $receive_packing_list = $this->when($this->type === PackingListType::SHIPPING_PACKING_LIST, new PackingListBaseResource($temp)); - } - $data['receive_packing_list'] = $receive_packing_list; - - - //option 3: include_shipping_transaction WITHOUT warehouse storage - if($this->include_shipping_transaction && !$this->storages){ - $shippingTransaction = $this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first(); - $data['shipping_transaction'] = new TransactionResource($shippingTransaction); - } - - - //option 4: include_suspended_invoice - if($this->include_suspended_invoice){ - $data['suspended_invoice'] = new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->first()); - } - - //option 5: include_shipping_transaction WITH warehouse storage - if($this->include_shipping_transaction && $this->storages){ - $shippingTransaction = $this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first(); - $transactions = $this->transactions()->whereNotIn('transactions.status', [0, 1])->whereIn('transactions.type', [TransactionType::SHIPPING_INVOICE, TransactionType::STORAGE_INVOICE])->get(); - $storages = []; - - if($this->storages){ - $transactionId = $shippingTransaction->id; - $filteredStorages = array_filter($this->storages, function ($storage) use ($transactionId) { - return isset($storage['parentInvoiceId']) && $storage['parentInvoiceId'] == $transactionId; - }); - $storages = $filteredStorages; - } - $data['shipping_transaction'] = count($storages) == 0 ? new TransactionWithStorageResource($shippingTransaction): null; - $data['storages'] = $storages; - $data['invoices'] = TransactionWithStorageResource::collection($transactions); - } - return $data; } } diff --git a/app/Http/Resources/PackingListDeprecatedResource.php b/app/Http/Resources/PackingListDeprecatedResource.php new file mode 100644 index 00000000..820730cb --- /dev/null +++ b/app/Http/Resources/PackingListDeprecatedResource.php @@ -0,0 +1,138 @@ +user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + $userType = Auth() && Auth()->user() ? Auth()->user()->type : RoleTypes::USER; + $exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + + $packages = []; + $receive_packing_list = null; + + //The Base + $data = [ + 'id' => $this->id, + 'claimant_id' => $this->claimant_id, + 'reference' => $this->reference, + 'status' => $this->status, + 'transport' => new TransportResource($this->transports()->first()), + 'type' => $this->type, + 'container' => new ContainerResource($this->containers->first()), + $this->mergeWhen($this->owner instanceof Order, [ + 'order' => New OrderResource($this->owner) + ]), + // 'suspended_invoices' => TransactionResource::collection($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->get()), + ]; + + + //option 1: include_packages + if($this->include_packages){ + $packages = !$this->packingLists()->exists() || $exceptionUsers ? $this->packages : $this->packingLists->first()->packages; + foreach ($packages as $item) { + if(isset($this->include_order_in_packages) && $this->include_order_in_packages){ + $item['include_order'] = $this->include_order_in_packages; + } + if(isset($this->include_transport_in_packages) && $this->include_transport_in_packages){ + $item['include_transport'] = $this->include_transport_in_packages; + } + if(isset($this->include_container_in_packages) && $this->include_container_in_packages){ + $item['include_container'] = $this->include_container_in_packages; + } + if(isset($this->include_packing_list_reference_in_packages) && $this->include_packing_list_reference_in_packages){ + $item['include_packing_list_reference'] = $this->include_packing_list_reference_in_packages; + } + } + } + $data['packages'] = PackageDeprecatedResource::collection($packages); + + + //option 2a: include_receive_packing_list + if($this->include_receive_packing_list){ + $temp = PackingList::where('reference', $this->reference)->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->first(); + $temp->include_shipping_transaction = true; + $temp->include_suspended_invoice = true; + $temp->include_packages = true; + $temp->include_receive_packing_list = true; + $temp->include_base_only_in_receive_packing_list = false; + $temp->include_order_in_packages = true; + $temp->include_transport_in_packages = true; + $temp->include_container_in_packages = true; + $temp->include_packing_list_reference_in_packages = true; + + $receive_packing_list = $this->when($this->type === PackingListType::SHIPPING_PACKING_LIST, new PackingListDeprecatedResource($temp)); + } + + //option 2b: include_base_only_in_receive_packing_list + if($this->include_base_only_in_receive_packing_list){ + $temp = PackingList::where('reference', $this->reference)->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->first(); + $temp->include_shipping_transaction = false; + $temp->include_suspended_invoice = false; + $temp->include_packages = false; + $temp->include_receive_packing_list = false; + $temp->include_base_only_in_receive_packing_list = false; + $temp->include_order_in_packages = false; + $temp->include_transport_in_packages = false; + $temp->include_container_in_packages = false; + $temp->include_packing_list_reference_in_packages = false; + + $receive_packing_list = $this->when($this->type === PackingListType::SHIPPING_PACKING_LIST, new PackingListDeprecatedResource($temp)); + } + $data['receive_packing_list'] = $receive_packing_list; + + + //option 3: include_shipping_transaction WITHOUT warehouse storage + if($this->include_shipping_transaction && !$this->storages){ + $shippingTransaction = $this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first(); + $data['shipping_transaction'] = new TransactionResource($shippingTransaction); + } + + + //option 4: include_suspended_invoice + if($this->include_suspended_invoice){ + $data['suspended_invoice'] = new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->first()); + } + + //option 5: include_shipping_transaction WITH warehouse storage + if($this->include_shipping_transaction && $this->storages){ + $shippingTransaction = $this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first(); + $transactions = $this->transactions()->whereNotIn('transactions.status', [0, 1])->whereIn('transactions.type', [TransactionType::SHIPPING_INVOICE, TransactionType::STORAGE_INVOICE])->get(); + $storages = []; + + if($this->storages){ + $transactionId = $shippingTransaction->id; + $filteredStorages = array_filter($this->storages, function ($storage) use ($transactionId) { + return isset($storage['parentInvoiceId']) && $storage['parentInvoiceId'] == $transactionId; + }); + $storages = $filteredStorages; + } + $data['shipping_transaction'] = count($storages) == 0 ? new TransactionWithStorageResource($shippingTransaction): null; + $data['storages'] = $storages; + $data['invoices'] = TransactionWithStorageResource::collection($transactions); + } + + return $data; + } +} diff --git a/app/Http/Resources/PackingListForContainerBaseResource.php b/app/Http/Resources/PackingListForContainerBaseResource.php new file mode 100644 index 00000000..0f039ad1 --- /dev/null +++ b/app/Http/Resources/PackingListForContainerBaseResource.php @@ -0,0 +1,57 @@ +user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + $userType = Auth() && Auth()->user() ? Auth()->user()->type : RoleTypes::USER; + $exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + + $packages = []; + $receive_packing_list = null; + + //The Base + $data = [ + 'id' => $this->id, + 'claimant_id' => $this->claimant_id, + 'reference' => $this->reference, + 'status' => $this->status, + 'transport' => new TransportResource($this->transports()->first()), + 'type' => $this->type, + 'container' => new ContainerResource($this->containers->first()), + $this->mergeWhen($this->owner instanceof Order, [ + 'order' => New OrderResource($this->owner) + ]), + ]; + + + //option 1: include_packages + $packages = !$this->packingLists()->exists() || $exceptionUsers ? $this->packages : $this->packingLists->first()->packages; + $data['packages'] = PackageDeprecatedResource::collection($packages); + + + //option 2b: include_base_only_in_receive_packing_list + $temp = PackingList::where('reference', $this->reference)->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->first(); + $receive_packing_list = $this->when($this->type === PackingListType::SHIPPING_PACKING_LIST, new PackingListBaseResource($temp)); + $data['receive_packing_list'] = $receive_packing_list; + + return $data; + } +} diff --git a/app/Http/Resources/PackingListForPackagesReceivedResource.php b/app/Http/Resources/PackingListForPackagesReceivedResource.php index df150f35..24703202 100644 --- a/app/Http/Resources/PackingListForPackagesReceivedResource.php +++ b/app/Http/Resources/PackingListForPackagesReceivedResource.php @@ -42,7 +42,7 @@ class PackingListForPackagesReceivedResource extends JsonResource $item['include_container'] = false; $item['include_packing_list_reference'] = true; } - $data['packages'] = PackageBaseResource::collection($packages); + $data['packages'] = PackageDeprecatedResource::collection($packages); return $data; } diff --git a/app/Http/Resources/PackingListForPackagesResource.php b/app/Http/Resources/PackingListForPackagesResource.php new file mode 100644 index 00000000..290ff2cf --- /dev/null +++ b/app/Http/Resources/PackingListForPackagesResource.php @@ -0,0 +1,47 @@ +user() ? Auth()->user()->type : RoleTypes::USER; + $exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + + //The Base + $data = [ + 'id' => $this->id, + 'claimant_id' => $this->claimant_id, + 'reference' => $this->reference, + 'status' => $this->status, + 'transport' => new TransportResource($this->transports()->first()), + 'type' => $this->type, + 'container' => new ContainerResource($this->containers->first()), + $this->mergeWhen($this->owner instanceof Order, [ + 'order' => New OrderResource($this->owner) + ]), + ]; + + + //option 1: include_packages + $packages = !$this->packingLists()->exists() || $exceptionUsers ? $this->packages : $this->packingLists->first()->packages; + $data['packages'] = PackageBaseResource::collection($packages); + + return $data; + } +} diff --git a/app/Http/Resources/PackingListPaidInvoiceResource.php b/app/Http/Resources/PackingListPaidInvoiceResource.php new file mode 100644 index 00000000..f9b5a31c --- /dev/null +++ b/app/Http/Resources/PackingListPaidInvoiceResource.php @@ -0,0 +1,62 @@ + $this->id, + 'claimant_id' => $this->claimant_id, + 'reference' => $this->reference, + 'status' => $this->status, + 'transport' => new TransportResource($this->transports()->first()), + 'type' => $this->type, + 'container' => new ContainerResource($this->containers->first()), + $this->mergeWhen($this->owner instanceof Order, [ + 'order' => New OrderResource($this->owner) + ]), + ]; + + //option 1: include_packages + $data['packages'] = PackageBaseResource::collection([]); + + //option 4: include_suspended_invoice + $data['suspended_invoice'] = new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->first()); + + + //option 5: include_shipping_transaction WITH warehouse storage + $shippingTransaction = $this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first(); + $transactions = $this->transactions()->whereNotIn('transactions.status', [0, 1])->whereIn('transactions.type', [TransactionType::SHIPPING_INVOICE, TransactionType::STORAGE_INVOICE])->get(); + $storages = []; + + if($this->storages){ + $transactionId = $shippingTransaction->id; + $filteredStorages = array_filter($this->storages, function ($storage) use ($transactionId) { + return isset($storage['parentInvoiceId']) && $storage['parentInvoiceId'] == $transactionId; + }); + $storages = $filteredStorages; + } + $data['shipping_transaction'] = count($storages) == 0 ? new TransactionWithStorageResource($shippingTransaction): null; + $data['storages'] = $storages; + $data['invoices'] = TransactionWithStorageResource::collection($transactions); + + return $data; + } +} diff --git a/app/Http/Resources/PackingListPendingApprovalResource.php b/app/Http/Resources/PackingListPendingApprovalResource.php new file mode 100644 index 00000000..ed10a01c --- /dev/null +++ b/app/Http/Resources/PackingListPendingApprovalResource.php @@ -0,0 +1,53 @@ +user() ? Auth()->user()->type : RoleTypes::USER; + $exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + + //The Base + $data = [ + 'id' => $this->id, + 'claimant_id' => $this->claimant_id, + 'reference' => $this->reference, + 'status' => $this->status, + 'transport' => new TransportResource($this->transports()->first()), + 'type' => $this->type, + 'container' => new ContainerResource($this->containers->first()), + $this->mergeWhen($this->owner instanceof Order, [ + 'order' => New OrderResource($this->owner) + ]), + ]; + + + //option 1: include_packages + $packages = !$this->packingLists()->exists() || $exceptionUsers ? $this->packages : $this->packingLists->first()->packages; + $data['packages'] = PackageBaseResource::collection($packages); + + //option 3: include_shipping_transaction WITHOUT warehouse storage + $shippingTransaction = $this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first(); + $data['shipping_transaction'] = new TransactionResource($shippingTransaction); + + + //option 4: include_suspended_invoice + $data['suspended_invoice'] = new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->first()); + + return $data; + } +} diff --git a/app/Http/Resources/PackingListPendingInvoiceResource.php b/app/Http/Resources/PackingListPendingInvoiceResource.php new file mode 100644 index 00000000..816bf5ee --- /dev/null +++ b/app/Http/Resources/PackingListPendingInvoiceResource.php @@ -0,0 +1,72 @@ +user() ? Auth()->user()->type : RoleTypes::USER; + $exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + + //The Base + $data = [ + 'id' => $this->id, + 'claimant_id' => $this->claimant_id, + 'reference' => $this->reference, + 'status' => $this->status, + 'transport' => new TransportResource($this->transports()->first()), + 'type' => $this->type, + 'container' => new ContainerResource($this->containers->first()), + $this->mergeWhen($this->owner instanceof Order, [ + 'order' => New OrderResource($this->owner) + ]), + ]; + + + //option 1: include_packages + $packages = !$this->packingLists()->exists() || $exceptionUsers ? $this->packages : $this->packingLists->first()->packages; + $data['packages'] = PackageBaseResource::collection($packages); + + + //option 2a: include_receive_packing_list + $temp = PackingList::where('reference', $this->reference)->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->first(); + // $temp->include_shipping_transaction = true; + // $temp->include_suspended_invoice = true; + // $temp->include_packages = true; + // $temp->include_receive_packing_list = true; + // $temp->include_base_only_in_receive_packing_list = false; + // $temp->include_order_in_packages = true; + // $temp->include_transport_in_packages = true; + // $temp->include_container_in_packages = true; + // $temp->include_packing_list_reference_in_packages = true; + + $receive_packing_list = $this->when($this->type === PackingListType::SHIPPING_PACKING_LIST, new PackingListBaseResource($temp)); //cief todo: 100 - PackingListBaseResource was PackingListDeprecatedResource + $data['receive_packing_list'] = $receive_packing_list; + + + //option 3: include_shipping_transaction WITHOUT warehouse storage + $shippingTransaction = $this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first(); + $data['shipping_transaction'] = new TransactionResource($shippingTransaction); + + + //option 4: include_suspended_invoice + $data['suspended_invoice'] = new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->first()); + + return $data; + } +} diff --git a/app/Http/Resources/PackingListPendingPaymentResource.php b/app/Http/Resources/PackingListPendingPaymentResource.php new file mode 100644 index 00000000..e401fc94 --- /dev/null +++ b/app/Http/Resources/PackingListPendingPaymentResource.php @@ -0,0 +1,65 @@ +user() ? Auth()->user()->type : RoleTypes::USER; + $exceptionUsers = in_array($userType, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + + //The Base + $data = [ + 'id' => $this->id, + 'claimant_id' => $this->claimant_id, + 'reference' => $this->reference, + 'status' => $this->status, + 'transport' => new TransportResource($this->transports()->first()), + 'type' => $this->type, + 'container' => new ContainerResource($this->containers->first()), + $this->mergeWhen($this->owner instanceof Order, [ + 'order' => New OrderResource($this->owner) + ]), + ]; + + + //option 1: include_packages + $packages = !$this->packingLists()->exists() || $exceptionUsers ? $this->packages : $this->packingLists->first()->packages; + $data['packages'] = PackageBaseResource::collection($packages); + + //option 4: include_suspended_invoice + $data['suspended_invoice'] = new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->first()); + + + //option 5: include_shipping_transaction WITH warehouse storage + $shippingTransaction = $this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first(); + $transactions = $this->transactions()->whereNotIn('transactions.status', [0, 1])->whereIn('transactions.type', [TransactionType::SHIPPING_INVOICE, TransactionType::STORAGE_INVOICE])->get(); + $storages = []; + + if($this->storages){ + $transactionId = $shippingTransaction->id; + $filteredStorages = array_filter($this->storages, function ($storage) use ($transactionId) { + return isset($storage['parentInvoiceId']) && $storage['parentInvoiceId'] == $transactionId; + }); + $storages = $filteredStorages; + } + $data['shipping_transaction'] = count($storages) == 0 ? new TransactionWithStorageResource($shippingTransaction): null; + $data['storages'] = $storages; + $data['invoices'] = TransactionWithStorageResource::collection($transactions); + + return $data; + } +} diff --git a/resources/assets/vue/components/orders/elements/OrderPackageSummaryComponent.vue b/resources/assets/vue/components/orders/elements/OrderPackageSummaryComponent.vue index 4abc1812..35b50cf0 100644 --- a/resources/assets/vue/components/orders/elements/OrderPackageSummaryComponent.vue +++ b/resources/assets/vue/components/orders/elements/OrderPackageSummaryComponent.vue @@ -81,13 +81,6 @@ order: null, dataLoaded: false, error: null, - filters: { - include_packages_origin_warehouse: true, - include_packages_in_transit: true, - include_packages_destination_warehouse: true, - include_packages_delivery: true, - include_packages_received: true, - }, } }, mounted() { @@ -95,8 +88,8 @@ }, methods: { fetch(){ - this.isLoading = true; - this.submit(route('api.order.packages', this.order_number) + '?filters=' + JSON.stringify(this.filters), 'get', this.section, false, false); + this.isLoading = true; + this.submit(route('api.order.packages.v2', this.order_number), 'get', this.section, false, false); }, successHandler(response){ this.dataLoaded = true; diff --git a/resources/assets/vue/components/orders/elements/OrderPackagesComponent.vue b/resources/assets/vue/components/orders/elements/OrderPackagesComponent.vue index 46e695e7..e3586e4b 100644 --- a/resources/assets/vue/components/orders/elements/OrderPackagesComponent.vue +++ b/resources/assets/vue/components/orders/elements/OrderPackagesComponent.vue @@ -129,7 +129,7 @@ methods: { fetch(){ this.isLoading = true; - this.submit(route('api.order.packages.v2', this.order_number) + '?filters=' + JSON.stringify(this.filters), 'get', this.section, false, false); + this.submit(route('api.order.packages.received.v2', this.order_number) + '?filters=' + JSON.stringify(this.filters), 'get', this.section, false, false); }, successHandler(response){ this.dataLoaded = true; diff --git a/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue index 6e45b287..31e52c19 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue @@ -183,10 +183,16 @@ + + diff --git a/resources/assets/vue/components/paymentsBilling/elements/AdminPaymentsBillingWithSearchComponent.vue b/resources/assets/vue/components/paymentsBilling/elements/AdminPaymentsBillingWithSearchComponent.vue index 682cd602..ed97a524 100644 --- a/resources/assets/vue/components/paymentsBilling/elements/AdminPaymentsBillingWithSearchComponent.vue +++ b/resources/assets/vue/components/paymentsBilling/elements/AdminPaymentsBillingWithSearchComponent.vue @@ -34,7 +34,7 @@ - +