diff --git a/app/Classes/Modules/Accounts/Services/GeneratesAuthenticationToken.php b/app/Classes/Modules/Accounts/Services/GeneratesAuthenticationToken.php index 88645795..67a63604 100644 --- a/app/Classes/Modules/Accounts/Services/GeneratesAuthenticationToken.php +++ b/app/Classes/Modules/Accounts/Services/GeneratesAuthenticationToken.php @@ -70,7 +70,9 @@ class GeneratesAuthenticationToken { $claims = array_merge($claims, [ 'company_id' => $companyModule->company_id, 'company_module_id' => $companyModule->id, - 'company_module_type' => $companyModule->type + 'company_module_type' => $companyModule->type, + 'company_name' => $companyModule->name, + 'company_marking' => $companyModule->type !== 8 ? $companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference : 'HWT', ]); } diff --git a/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryOrderLogic.php b/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryOrderLogic.php index 69ffcc55..f27d1e59 100644 --- a/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryOrderLogic.php +++ b/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryOrderLogic.php @@ -129,7 +129,7 @@ class CreateDeliveryOrderLogic extends AbstractControllerLogic $order = $this->createsOrder->execute($companyModule, $orderObject); $senderAddressObject = new AddressObject($senderAddress->street_one, $senderAddress->street_two, $senderAddress->country_id, $senderAddress->state_id, $senderAddress->district_id, $senderAddress->postcode, $senderAddress->type, ApprovalStatus::APPROVED, $senderAddress->reference); - $deliveryAddressObject = new AddressObject($deliveryAddress->street_one, $deliveryAddress->street_two, $deliveryAddress->country_id, $deliveryAddress->state_id, $deliveryAddress->district_id, $deliveryAddress->postcode, $deliveryAddress->type, ApprovalStatus::APPROVED, $senderAddress->reference); + $deliveryAddressObject = new AddressObject($deliveryAddress->street_one, $deliveryAddress->street_two, $deliveryAddress->country_id, $deliveryAddress->state_id, $deliveryAddress->district_id, $deliveryAddress->postcode, $deliveryAddress->type, ApprovalStatus::APPROVED, $deliveryAddress->reference); /** @var Address $orderSenderAddress */ $orderSenderAddress = $this->createAddress->execute($order, $senderAddressObject); diff --git a/app/Classes/Modules/Exports/Services/ExportsArrivedParcel.php b/app/Classes/Modules/Exports/Services/ExportsArrivedParcel.php new file mode 100644 index 00000000..66934840 --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsArrivedParcel.php @@ -0,0 +1,86 @@ +where('status', '=', 2)->get(); + $exceptionUsers = in_array(Auth()->user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + + foreach($packingLists as $packingList){ + $packages = !$packingList->packingLists()->exists() || $exceptionUsers ? $packingList->packages : $packingList->packingLists->first()->packages; + foreach ($packages as $package) { + $returnArray->push($package); + } + } + + return $returnArray; + } + + /** + * @param ReturnArray $returnArray + * + * @return array + */ + public function map($package): array + { + $packingList = $package->packingList; + $order = $packingList->owner; + + $connection = $order->companyModule()->first()->inviters()->withPivot('invitee_reference')->first(); + $marking = $connection ? $connection->pivot->invitee_reference:''; + + $warehouse = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee; + + $cbm = (($package->width / 100) * ($package->height / 100) * ($package->length / 100)) * $package->quantity; + + $arrival_date = $packingList->transports()->first()->drop_date->format('d-m-Y'); + + return [ + $packingList->owner->reference, + $marking, + $warehouse->reference, + $cbm, + $package->description, + $package->quantity, + $arrival_date, + '' + ]; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Exports/Services/ExportsDeliveryOrders.php b/app/Classes/Modules/Exports/Services/ExportsDeliveryOrders.php index 802cd3ef..874a537e 100644 --- a/app/Classes/Modules/Exports/Services/ExportsDeliveryOrders.php +++ b/app/Classes/Modules/Exports/Services/ExportsDeliveryOrders.php @@ -13,8 +13,9 @@ use Maatwebsite\Excel\Concerns\WithHeadingRow; use Maatwebsite\Excel\Concerns\WithHeadings; use Maatwebsite\Excel\Concerns\WithMapping; use Illuminate\Http\Request; +use Maatwebsite\Excel\Concerns\WithTitle; -class ExportsDeliveryOrders implements FromQuery, WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize +class ExportsDeliveryOrders implements FromQuery, WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize, WithTitle { use Exportable; @@ -70,6 +71,11 @@ class ExportsDeliveryOrders implements FromQuery, WithHeadings, WithHeadingRow, return Order::where('type', OrderType::LAST_MILE_DELIVERY)->whereIn('id', $selectedIds); } + public function title(): string + { + return 'bulk-shipment'; + } + /** * @param Order $order * @@ -85,22 +91,22 @@ class ExportsDeliveryOrders implements FromQuery, WithHeadings, WithHeadingRow, 'Domestic Shipment', 'ST00000020', $senderAddress->contacts()->first()->reference, - $order->companyModule->name, - '*', - $senderAddress->street_one.', '.$senderAddress->street_two.' '.$senderAddress->district->name.' '.$senderAddress->postcode.' '.$senderAddress->state->name.' '.$senderAddress->country->name, + $senderAddress->reference ? $senderAddress->reference : $order->companyModule->name, + $senderAddress->street_one, + $senderAddress->street_two.' '.$senderAddress->district->name.' '.$senderAddress->postcode.' '.$senderAddress->state->name.' '.$senderAddress->country->name, '', $senderAddress->postcode, $senderAddress->contacts()->first()->phone, $deliveryAddress->contacts()->first()->reference, - '', - '*', - $deliveryAddress->street_one.', '.$deliveryAddress->street_two.' '.$deliveryAddress->district->name.' '.$deliveryAddress->postcode.' '.$deliveryAddress->state->name.' '.$deliveryAddress->country->name, + $deliveryAddress->reference, + $deliveryAddress->street_one, + $deliveryAddress->street_two.' '.$deliveryAddress->district->name.' '.$deliveryAddress->postcode.' '.$deliveryAddress->state->name.' '.$deliveryAddress->country->name, '', $deliveryAddress->postcode, $deliveryAddress->contacts()->first()->phone, $package->type === PackageType::CARTON ? 'Package' : ($package->type === PackageType::PALLET ? 'Pallet' : 'Documents'), 'Pick Up', - 'Sender', + 'Default', $order->reference, $package->quantity, $package->weight * $package->quantity, diff --git a/app/Classes/Modules/Exports/Services/ExportsDeliveryValidValues.php b/app/Classes/Modules/Exports/Services/ExportsDeliveryValidValues.php new file mode 100644 index 00000000..ef85dfeb --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsDeliveryValidValues.php @@ -0,0 +1,74 @@ +request = $request; + } + + public function headings(): array + { + return [ + 'Types_Of_Services', + 'Service_Type', + 'Mode', + 'Flag', + 'Pickup Address' + ]; + } + + /** + * @return \Illuminate\Support\Collection|mixed + */ + public function collection() + { + $returnArray = collect(); + + $returnArray->push(['Domestic Shipment', 'Package', 'Pick Up', 'Yes', 'Default']); + $returnArray->push(['', 'Documents', 'Lodge In / Walk In', 'No', 'Sender']); + $returnArray->push(['', 'Pallet', '', '', '']); + + return $returnArray; + } + + public function title(): string + { + return 'valid-values'; + } + + /** + * @param ReturnArray $returnArray + * + * @return array + */ + public function map($returnArray): array + { + return [ + $returnArray[0], + $returnArray[1], + $returnArray[2], + $returnArray[3], + $returnArray[4], + ]; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Exports/Services/ExportsMultipleDeliveryOrders.php b/app/Classes/Modules/Exports/Services/ExportsMultipleDeliveryOrders.php new file mode 100644 index 00000000..0b6bf899 --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsMultipleDeliveryOrders.php @@ -0,0 +1,38 @@ +request = $request; + } + + /** + * @return array + */ + public function sheets(): array + { + $sheets = []; + $sheets[] = new ExportsDeliveryOrders($this->request); + $sheets[] = new ExportsDeliveryValidValues($this->request); + + return $sheets; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Exports/Services/ExportsOnHoldPackingList.php b/app/Classes/Modules/Exports/Services/ExportsOnHoldPackingList.php new file mode 100644 index 00000000..50e84a11 --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsOnHoldPackingList.php @@ -0,0 +1,59 @@ +whereIn('status', [4, 5])->whereHas('containers'); + } + + /** + * @param PackingList $packingList + * + * @return array + */ + public function map($packingList): array + { + $container = $packingList->containers()->first(); + $ContainerTransport = $container->transports()->first(); + $order = $packingList->owner; + $marking = $order->companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference; + + return [ + $container->reference, + $ContainerTransport ? $ContainerTransport->schedules()->where('status', '=', ApprovalStatus::APPROVED)->first()->eta : 'n/a', + $ContainerTransport ? $ContainerTransport->drop_date : 'n/a', + $marking, + $order->reference, + ]; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Exports/Services/ExportsPendingArrangementDeliveryList.php b/app/Classes/Modules/Exports/Services/ExportsPendingArrangementDeliveryList.php index bd46f9d0..65908390 100644 --- a/app/Classes/Modules/Exports/Services/ExportsPendingArrangementDeliveryList.php +++ b/app/Classes/Modules/Exports/Services/ExportsPendingArrangementDeliveryList.php @@ -25,7 +25,8 @@ class ExportsPendingArrangementDeliveryList implements FromQuery, WithHeadings, 'Unstuffing', 'Marking', 'Order Number', - 'Delay Days', + 'status', + 'Delay Days / delivery date', 'Quantity', 'State', 'Postcode', @@ -43,7 +44,7 @@ class ExportsPendingArrangementDeliveryList implements FromQuery, WithHeadings, { return PackingList::where('type', '=', 2)->whereHas('containers', function ($query){ $query->where('containers.status', ApprovalStatus::COMPLETED); - })->whereDoesntHave('transports'); + }); } /** @@ -61,6 +62,7 @@ class ExportsPendingArrangementDeliveryList implements FromQuery, WithHeadings, $contacts = $address->contacts->first() ? $address->contacts->first(): ''; $originalPackingList = $packingList->owner instanceof PackingList ? $packingList->owner : $packingList; $transport = $originalPackingList->containers()->first()->transports()->first(); + $deliveryTransport = $originalPackingList->transports()->first(); return [ $container->reference, @@ -68,7 +70,8 @@ class ExportsPendingArrangementDeliveryList implements FromQuery, WithHeadings, $ContainerTransport->drop_date, $marking, $order->reference, - $transport ? Carbon::now()->diffInDays($transport->drop_date, false) . ' Days' : '', + $deliveryTransport ? (Carbon::parse($deliveryTransport->schedules()->first()->eta) < Carbon::now() ? 'Delivered' : 'Pending Delivery') : 'Pending Arrangement', + $deliveryTransport ? $deliveryTransport->schedules()->first()->eta : ($transport ? Carbon::now()->diffInDays($transport->drop_date, false) . ' Days' : ''), $packingList->packages()->sum('quantity'), $address->state->name, $address->postcode, diff --git a/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php b/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php index e1d112ed..477f7da7 100644 --- a/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php @@ -6,6 +6,8 @@ namespace App\Classes\Modules\PackingLists\Processors; use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject; use App\Classes\Modules\PackingLists\Services\Packages\CreatesPackage; use App\Classes\Modules\PackingLists\Standards\Rules\Packages\CanCreatePackage; +use App\Classes\ValueObjects\Constants\WarehouseReferences; +use App\Models\Order; use App\Models\PackingList; class CreatePackageProcessor @@ -48,6 +50,11 @@ class CreatePackageProcessor if($replica) { $modificationValue = 1; + + if($replica->owner->owner instanceof Order){ + $modificationValue = in_array( $replica->owner->owner->companyModule->id, WarehouseReferences::REPLICA_WHITE_LIST) ? 0 : 1; + } + $packageObject = new PackageObject($object->getType(), $object->getDescription(), $object->getWidth() + $modificationValue, $object->getHeight() + $modificationValue, $object->getLength() + $modificationValue, $object->getWeight(), $object->getQuantity(), $object->getStatus()); $package = $this->createsPackage->execute($packageObject, $replica); } diff --git a/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php b/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php index f0eda0cb..655897b6 100644 --- a/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php @@ -10,7 +10,10 @@ use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingList; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\OrderRoleTypes; use App\Classes\ValueObjects\Constants\PackingListType; +use App\Classes\ValueObjects\Constants\WarehouseReferences; +use App\Models\Order; use App\Models\PackingList; +use function PHPUnit\Framework\isInstanceOf; class CreatePackingListProcessor { @@ -51,6 +54,7 @@ class CreatePackingListProcessor $appointee_id = $packingList->owner_id == 1 ? 2037 : $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id; $type = $object->getType() === PackingListType::SHIPPING_PACKING_LIST ? PackingListType::SHIPPING_PACKING_LIST_REPLICA : PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA; + /** create packing list replica */ $object = new PackingListObject($object->getReference().'_01', $appointee_id, $type, ApprovalStatus::PENDING_SUBMISSION); $this->createsPackingList->execute($object, $packingList); diff --git a/app/Classes/ValueObjects/Constants/WarehouseReferences.php b/app/Classes/ValueObjects/Constants/WarehouseReferences.php index 59943ae8..60cef23e 100644 --- a/app/Classes/ValueObjects/Constants/WarehouseReferences.php +++ b/app/Classes/ValueObjects/Constants/WarehouseReferences.php @@ -43,6 +43,8 @@ final class WarehouseReferences { public const YD_EXEMPT_LIST = [230, 294, 320, 652, 1248, 1726]; + public const REPLICA_WHITE_LIST = [502]; + //2376 qce } diff --git a/app/Http/Controllers/Delivery/ExportDeliveryOrdersToExcelController.php b/app/Http/Controllers/Delivery/ExportDeliveryOrdersToExcelController.php index 9121fe00..f2ae08ad 100644 --- a/app/Http/Controllers/Delivery/ExportDeliveryOrdersToExcelController.php +++ b/app/Http/Controllers/Delivery/ExportDeliveryOrdersToExcelController.php @@ -4,7 +4,7 @@ namespace App\Http\Controllers\Delivery; use App\Classes\Modules\Exports\Services\ExportsCustomers; -use App\Classes\Modules\Exports\Services\ExportsDeliveryOrders; +use App\Classes\Modules\Exports\Services\ExportsMultipleDeliveryOrders; use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; @@ -24,8 +24,8 @@ class ExportDeliveryOrdersToExcelController } public function lineClear(Request $request){ - $exportsTransactions = new ExportsDeliveryOrders($request); - $response = $exportsTransactions->download('line-clear-export.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); + $exportsTransactions = new ExportsMultipleDeliveryOrders($request); + $response = $exportsTransactions->download('line-clear-export.xlsx', Excel::XLSX, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); ob_end_clean(); return $response; } diff --git a/app/Http/Controllers/Exports/ExportArrivedParcelController.php b/app/Http/Controllers/Exports/ExportArrivedParcelController.php new file mode 100644 index 00000000..1d67a5c0 --- /dev/null +++ b/app/Http/Controllers/Exports/ExportArrivedParcelController.php @@ -0,0 +1,29 @@ +headers->set('Authorization', 'Bearer '.$token); + } + + public function export(Request $request) { + $exportsPendingArrangementDeliveryList = new ExportsArrivedParcel($request); + $response = $exportsPendingArrangementDeliveryList->download('arrived-parcel.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); + ob_end_clean(); + return $response; + } +} diff --git a/app/Http/Controllers/Exports/ExportPendingArrangementPackingListController.php b/app/Http/Controllers/Exports/ExportPendingArrangementPackingListController.php index 8575e88c..9afb397e 100644 --- a/app/Http/Controllers/Exports/ExportPendingArrangementPackingListController.php +++ b/app/Http/Controllers/Exports/ExportPendingArrangementPackingListController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Exports; +use App\Classes\Modules\Exports\Services\ExportsOnHoldPackingList; use App\Classes\Modules\Exports\Services\ExportsPendingArrangementDeliveryList; use App\Models\User; use Illuminate\Http\Request; @@ -22,7 +23,14 @@ class ExportPendingArrangementPackingListController public function export(Request $request) { $exportsPendingArrangementDeliveryList = new ExportsPendingArrangementDeliveryList($request); - $response = $exportsPendingArrangementDeliveryList->download('pending-arrangement-packing-list.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); + $response = $exportsPendingArrangementDeliveryList->download('packing-list-delivery.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); + ob_end_clean(); + return $response; + } + + public function onHold(Request $request) { + $exportsPendingArrangementDeliveryList = new ExportsOnHoldPackingList($request); + $response = $exportsPendingArrangementDeliveryList->download('packing-list-on-hold.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); ob_end_clean(); return $response; } diff --git a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue index 5aaf56d0..3dc9325c 100644 --- a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue +++ b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue @@ -1,7 +1,7 @@ diff --git a/resources/assets/vue/components/companies/sections/OnBoardingSectionComponent.vue b/resources/assets/vue/components/companies/sections/OnBoardingSectionComponent.vue index 2e4a9cec..c7b5b154 100644 --- a/resources/assets/vue/components/companies/sections/OnBoardingSectionComponent.vue +++ b/resources/assets/vue/components/companies/sections/OnBoardingSectionComponent.vue @@ -1,7 +1,7 @@ \ No newline at end of file diff --git a/resources/assets/vue/components/orders/sections/DeliveryOrdersTableSectionComponent.vue b/resources/assets/vue/components/orders/sections/DeliveryOrdersTableSectionComponent.vue index eb424fc9..f43fde99 100644 --- a/resources/assets/vue/components/orders/sections/DeliveryOrdersTableSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/DeliveryOrdersTableSectionComponent.vue @@ -6,8 +6,58 @@
+
+
+
+
+
+
+ + + + +
+
+
+
+
+
+ + + + +
+
+
+
+
+
+ + + + +
+
+
+
+
+
+
+ Search +
+
+
+
+ Reset +
+
+
+
+
+
+
- + + diff --git a/resources/views/pdfs/qr.blade.php b/resources/views/pdfs/qr.blade.php index b280dfea..9595f389 100644 --- a/resources/views/pdfs/qr.blade.php +++ b/resources/views/pdfs/qr.blade.php @@ -32,15 +32,15 @@ -

{{$marking}}{{$order->reference}}

+

{{$marking}}{{$order->reference}}

-

仓库地址:

-

{{$warehouse_address->state->name.' '.$warehouse_address->district->name.' '.$warehouse_address->street_one.' '.$warehouse_address->street_two.' 邮编:'.$warehouse_address->postcode}}

-

联系:@foreach($warehouse_contacts as $contact){{ $loop->first ? '' : ' / ' }}{{ $contact->phone.' '.$contact->reference }}@endforeach

-

{!! $remark !!}

+

仓库地址:

+

{{$warehouse_address->state->name.' '.$warehouse_address->district->name.' '.$warehouse_address->street_one.' '.$warehouse_address->street_two.' 邮编:'.$warehouse_address->postcode}}

+

联系:@foreach($warehouse_contacts as $contact){{ $loop->first ? '' : ' / ' }}{{ $contact->phone.' '.$contact->reference }}@endforeach

+

{!! $remark !!}

diff --git a/resources/views/vendor/js.blade.php b/resources/views/vendor/js.blade.php index be5a8e86..41482a0d 100644 --- a/resources/views/vendor/js.blade.php +++ b/resources/views/vendor/js.blade.php @@ -6,10 +6,7 @@ 'routes' => collect(\Route::getRoutes())->mapWithKeys(function ($route) { return [$route->getName() => $route->uri()]; }) ]) !!}; -@if(!App::environment('production')) - - -@endif + diff --git a/routes/web.php b/routes/web.php index 5d5d98d4..c700e3c3 100644 --- a/routes/web.php +++ b/routes/web.php @@ -260,6 +260,8 @@ Route::get('/warehouse/{id}/show', function ($id) { Route::get('/export/customer-latest-order-date/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@export'); Route::get('/export/packing-list/{id}', 'Exports\ExportContainerPackingListController@export')->name('container.packaging_list.export'); Route::get('/export/pending-arrangement-delivery-list', 'Exports\ExportPendingArrangementPackingListController@export')->name('packaging_list.pending_arrangement.export'); +Route::get('/export/on-hold-packing-list', 'Exports\ExportPendingArrangementPackingListController@onHold')->name('packaging_list.on_hold.export'); +Route::get('/export/arrived-parcel', 'Exports\ExportArrivedParcelController@export')->name('packing_list.arrived_parcel.export'); Route::get('/settings', function () { return view('pages.settings');