# Conflicts:
#	resources/views/vendor/js.blade.php
This commit is contained in:
edmondlang
2022-04-17 23:36:42 +08:00
24 changed files with 532 additions and 143 deletions
@@ -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',
]);
}
@@ -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);
@@ -0,0 +1,86 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\PackingList;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Carbon\Carbon;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\RoleTypes;
class ExportsArrivedParcel implements WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize, FromCollection
{
use Exportable;
public function headings(): array
{
return [
'ORDER NUMBER',
'Marking',
'Warehouse',
'Cbm',
'Description',
'quantity',
'Received Date',
'Remarks'
];
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function collection()
{
$returnArray = collect();
$packingLists = PackingList::where('type', '=', 1)->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,
''
];
}
}
@@ -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,
@@ -0,0 +1,74 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\FromCollection;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Concerns\WithTitle;
class ExportsDeliveryValidValues implements WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize, WithTitle, FromCollection
{
use Exportable;
private $request;
/**
* ExportsDeliveryValidValues constructor.
* @param Request $request
*/
public function __construct(Request $request)
{
$this->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],
];
}
}
@@ -0,0 +1,38 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Classes\Modules\Exports\Services\ExportsDeliveryOrders;
use App\Classes\Modules\Exports\Services\ExportsDeliveryValidValues;
use App\Models\Order;
use Maatwebsite\Excel\Concerns\Exportable;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class ExportsMultipleDeliveryOrders implements WithMultipleSheets
{
use Exportable;
protected $request;
/**
* ExportsMultipleDeliveryOrders constructor.
* @param Request $request
*/
public function __construct(Request $request)
{
$this->request = $request;
}
/**
* @return array
*/
public function sheets(): array
{
$sheets = [];
$sheets[] = new ExportsDeliveryOrders($this->request);
$sheets[] = new ExportsDeliveryValidValues($this->request);
return $sheets;
}
}
@@ -0,0 +1,59 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\PackingList;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Carbon\Carbon;
class ExportsOnHoldPackingList implements FromQuery, WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize
{
use Exportable;
public function headings(): array
{
return [
'Container Ref.',
'ETA',
'Unstuffing',
'Marking',
'Order Number'
];
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function query()
{
return PackingList::where('type', '=', 2)->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,
];
}
}
@@ -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,
@@ -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);
}
@@ -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);
@@ -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
}
@@ -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;
}
@@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Exports;
use App\Classes\Modules\Exports\Services\ExportsArrivedParcel;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Excel;
class ExportArrivedParcelController
{
/**
* ExportArrivedParcelController constructor.
* @param Request $request
*/
public function __construct(Request $request)
{
$token = Auth::fromUser(User::find(1));
$request->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;
}
}
@@ -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;
}
@@ -1,7 +1,7 @@
<template>
<div class="row p-t-25 text-left">
<div class="col">
<div class="row">
<div class="row" v-if="![7,8].includes($store.getters.getCompanyModuleType)">
<div class="col">
<div class="row m-b-15">
<div class="col">
@@ -73,6 +73,68 @@
</div>
</div>
</div>
<div class="row" v-if="[7,8].includes($store.getters.getCompanyModuleType)">
<div class="col">
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.reference">
<label>Company Name</label>
<input class="form-control" name="reference" v-model="parameters.reference">
</validation-wrapper-component>
</div>
</div>
<div class="row m-b-15">
<div class="col-12 col-md pr-md-1 pb-3 pb-md-0">
<validation-wrapper-component :validator="$v.parameters.person_in_charge">
<label>Name</label>
<input class="form-control" name="person_in_charge" v-model="parameters.person_in_charge">
</validation-wrapper-component>
</div>
<div class="col-12 col-md pl-md-1">
<validation-wrapper-component :validator="$v.parameters.phone">
<label>Phone</label>
<input class="form-control" name="phone" v-model="parameters.phone">
</validation-wrapper-component>
</div>
</div>
<div class="row m-b-15">
<div class="col-12 col-md-3 pr-md-1 pb-3 pb-md-0">
<validation-wrapper-component :validator="$v.parameters.street_one">
<label>Unit No.</label>
<input class="form-control" name="street_one" v-model="parameters.street_one">
</validation-wrapper-component>
</div>
<div class="col-12 col-md pl-md-1">
<validation-wrapper-component :validator="$v.parameters.street_two">
<label>Street Address</label>
<input class="form-control" name="street_two" v-model="parameters.street_two">
</validation-wrapper-component>
</div>
</div>
<div class="row m-b-15">
<div class="col-12 col-md pr-md-1 pb-3 pb-md-0">
<validation-wrapper-component selectable :validator="$v.parameters.district_id">
<label>City/Town</label>
<selectable-component :endpoint="route('api.address.district.list')" section="districtListSection" valueColumn="id" :labelColumn="['city']" v-model="parameters.district_id"></selectable-component>
</validation-wrapper-component>
</div>
<div class="col-12 col-md pl-md-1">
<validation-wrapper-component :validator="$v.parameters.post_code">
<label>Post Code</label>
<input class="form-control" name="post_code" v-model="parameters.post_code">
</validation-wrapper-component>
</div>
</div>
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.remark">
<label>Remark</label>
<input class="form-control" name="remark" v-model="parameters.remark">
</validation-wrapper-component>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="row">
@@ -8,8 +8,8 @@
</div>
<div class="row" v-show="!$store.getters.isShowing('createOrderForm')">
<div class="col">
<on-boarding-section-component v-if="company.last_order && company.status === 0"></on-boarding-section-component>
<div class="row" v-if="company.last_order && company.status !== 0">
<on-boarding-section-component v-if="!company.last_order"></on-boarding-section-component>
<div class="row" v-if="company.last_order">
<div class="col">
<div class="row m-b-30 relative">
<div class="col">
@@ -67,7 +67,7 @@
</div>
</div>
</div>
<order-form-component v-show="$store.getters.isShowing('createOrderForm') || (!company.last_order && company.status === 0)" :company="company" :section="section"></order-form-component>
<order-form-component v-show="$store.getters.isShowing('createOrderForm')" :company="company" :section="section"></order-form-component>
</div>
</div>
</template>
@@ -1,7 +1,7 @@
<template>
<div class="row">
<div class="col">
<div class="row m-b-20 hide">
<div class="row m-b-20">
<div class="col">
<div class="row m-b-50 text-center" v-if="!$store.getters.isAdmin">
<div class="col">
@@ -97,109 +97,6 @@
</div>
</div>
</div>
<div class="row align-items-center justify-content-center m-b-30">
<div class="col-10 bg-master-lightest padding-25">
<div class="row align-items-center">
<div class="col-12 col-lg-3">
<div class="row justify-content-center">
<div class="col-10">
<a :href="route('order.qr.download', 3362)" target="_blank">
<div class="peelable-corner overflow-hidden relative">
<img :src="'https://chart.googleapis.com/chart?chs=150x150&cht=qr&chl={id:3362}'" class="w-100">
</div>
</a>
</div>
</div>
</div>
<div class="col">
<div class="row align-items-center">
<div class="col">
<h4 class="text-success bold">Hooray! You have successfully created your first order.</h4>
</div>
</div>
<div class="row m-b-20">
<div class="col-auto">
<h3 class="no-margin"><b>Order No.</b> 636295692</h3>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row align-items-center justify-content-center m-b-50">
<div class="col-10">
<div class="row">
<div class="col p-t-10 p-b-25 p-l-25 p-r-25 bg-master-lightest b-r b-grey">
<div class="row m-b-15">
<div class="col text-center">
<img src="/images/qr-box.svg" width="150" height="150">
</div>
</div>
<div class="row justify-content-center">
<div class="col">
<div class="row m-b-10">
<div class="col">
<div class="bold all-caps fs-10"><i class="fa fa-circle text-primary m-r-10"></i>Step 1</div>
</div>
</div>
<div class="row">
<div class="col">
<p class="no-margin">Send the QR Code label to your supplier to attach to your parcel</p>
</div>
</div>
</div>
</div>
</div>
<div class="col p-t-10 p-b-25 p-l-25 p-r-25 bg-master-lightest b-r b-grey">
<div class="row m-b-15">
<div class="col text-center">
<img src="/images/package.svg" width="120" height="150">
</div>
</div>
<div class="row justify-content-center">
<div class="col">
<div class="row m-b-10">
<div class="col">
<div class="bold all-caps fs-10"><i class="fa fa-circle text-primary m-r-10"></i>Step 2</div>
</div>
</div>
<div class="row">
<div class="col">
<p class="no-margin">We receive your packages at our warehouse, and arrange for shipping.</p>
</div>
</div>
</div>
</div>
</div>
<div class="col p-t-10 p-b-25 p-l-25 p-r-25 bg-master-lightest">
<div class="row m-b-15">
<div class="col">
<img src="/images/package_hands.svg" width="160" height="150">
</div>
</div>
<div class="row justify-content-center">
<div class="col">
<div class="row m-b-10">
<div class="col">
<div class="bold all-caps fs-10"><i class="fa fa-circle text-primary m-r-10"></i>Step 3</div>
</div>
</div>
<div class="row">
<div class="col">
<p class="no-margin">Track your parcel to your doorsteps at your selected delivery address.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row align-items-center justify-content-center">
<div class="col-10">
<complete-registration-form-component></complete-registration-form-component>
</div>
</div>
</div>
</div>
</template>
@@ -6,8 +6,58 @@
<div class="col">
<div class="row m-b-15" v-if="$store.getters.isAdmin || $store.getters.getCompanyModuleType === 8">
<div class="col-auto p-r-5">
<div class="row m-b-20">
<div class="col">
<div class="row m-l-0 m-r-0 bg-master-light padding-10" @keyup.enter="submitSearch()">
<div class="col-12 col-md mb-2 mb-md-0">
<div class="row">
<div class="col p-r-0 h-100">
<validation-wrapper-component :validator="$v.orderNumber">
<label class="all-caps">Order Number</label>
<input class="form-control" v-model.lazy="orderNumber">
</validation-wrapper-component>
</div>
</div>
</div>
<div class="col-12 col-md mb-2 mb-md-0">
<div class="row">
<div class="col p-r-0 h-100">
<validation-wrapper-component :validator="$v.orderMarking">
<label class="all-caps">Marking</label>
<input class="form-control" v-model.lazy="orderMarking">
</validation-wrapper-component>
</div>
</div>
</div>
<div class="col-12 col-md mb-2 mb-md-0">
<div class="row">
<div class="col p-r-0 h-100">
<validation-wrapper-component :validator="$v.orderSenderName">
<label class="all-caps">Sender Name</label>
<input class="form-control" v-model.lazy="orderSenderName">
</validation-wrapper-component>
</div>
</div>
</div>
<div class="col-12 col-md-auto mb-2 mb-md-0">
<div class="row h-100">
<div class="col p-r-0 h-100">
<div class="btn btn-primary b-rad-none w-100 h-100 d-flex justify-content-center align-items-center p-l-30 p-r-30" @click="submitSearch()">
Search
</div>
</div>
<div class="col p-l-0 h-100">
<div class="btn btn-secondary b-rad-none w-100 h-100 d-flex justify-content-center align-items-center p-l-30 p-r-30" @click="resetSearch()">
Reset
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<a :href="route('last_mile_delivery.order.export') + '?ids=' + JSON.stringify(selectedOrderId)" target="_blank">
<button type="button" class="btn btn-sm btn-block p-t-10 p-b-10 p-r-35 p-l-35 btn-complete b-rad-none">
<button type="button" class="btn btn-sm p-t-10 p-b-10 p-r-35 p-l-35 btn-complete b-rad-none">
<div class="row align-items-center">
<div class="col-auto p-r-0 p-l-0">
<i class="fa fa-file-excel-o fs-16"></i>
@@ -47,7 +97,7 @@
</tr>
</thead>
<tbody>
<tr v-for="data in $store.getters.getListData(section)">
<tr v-for="data in orderData">
<td class="col-auto pointer align-items-center" @click="selectOrder(data.id)" v-if="$store.getters.isAdmin || $store.getters.getCompanyModuleType === 8">
<i class="fa fs-30 fa-fw" :class="{'fa-square-o': !selectedOrderId.includes(data.id), 'fa-check-square': selectedOrderId.includes(data.id), 'text-complete': selectedOrderId.includes(data.id)}" ></i>
</td>
@@ -73,7 +123,7 @@
<td>{{data.delivery_address.street_one+' '+(data.delivery_address.street_two ? data.delivery_address.street_two : '')+', '+ data.delivery_address.district.name+', '+data.delivery_address.post_code+' '+data.delivery_address.state.name+', '+data.delivery_address.country.name}}</td>
<td>{{data.delivery_address.contact.phone}}</td>
</tr>
<tr v-if="$store.getters.getListData(section).length === 0">
<tr v-if="orderData.length === 0">
<td colspan="100%" class="text-center">No data available in table</td>
</tr>
</tbody>
@@ -101,12 +151,16 @@
data(){
return {
section: 'ListOrderTableSection',
orderData: [],
selectAllOrder: false,
selectedOrderId: [],
emptyListSection: false,
filters: this.data ? {
company_module_id: this.data.company_module.id,
per_page: 20,
reference_like: '',
orderMarking: '',
orderSenderName: '',
status_in: [2],
order_by: {
column: 'id',
@@ -114,6 +168,9 @@
},
} : {
per_page: 100,
reference_like: '',
orderMarking: '',
orderSenderName: '',
status_in: [2],
order_by: {
column: 'id',
@@ -126,8 +183,16 @@
total: null,
current_page: null,
},
orderNumber: '',
orderMarking: '',
orderSenderName: ''
}
},
validations: {
orderNumber: { },
orderMarking: { },
orderSenderName: { }
},
created(){
this.setDecoratorDefault();
this.$store.dispatch('updateListQueue', {'name': this.section, 'page': 1, 'filters': this.filters});
@@ -147,12 +212,16 @@
methods: {
fetchList(){
let listDecorators = this.$store.getters.getListDetails(this.section);
listDecorators.filters.reference_like = this.orderNumber;
listDecorators.filters.orderMarking = this.orderMarking;
listDecorators.filters.orderSenderName = this.orderSenderName;
this.submit(this.route('api.delivery.order.list') + '?page=' + listDecorators.page + '&filters=' + JSON.stringify(listDecorators.filters), 'get', this.section, false, false)
},
successHandler(response){
this.$store.dispatch('completeList', {'name': this.section, 'data': response.payload.data});
this.$refs.pagination.makePagination(response.payload.meta, response.payload.links);
this.metaData = response.payload.meta;
this.orderData = response.payload.data;
},
chooseAllOrder(){
this.selectAllOrder = !this.selectAllOrder;
@@ -166,7 +235,16 @@
selectOrder(orderId){
this.selectedOrderId.includes(orderId) ? this.selectedOrderId.splice(this.selectedOrderId.indexOf(orderId), 1) : this.selectedOrderId.push(orderId);
this.selectedOrderId.length === this.$store.getters.getListData(this.section).length ? this.selectAllOrder = true : this.selectAllOrder = false;
}
},
submitSearch(){
this.fetchList();
},
resetSearch() {
this.orderNumber = '';
this.orderMarking = '';
this.orderSenderName = '';
this.fetchList();
},
},
mixins: [componentHandler]
}
@@ -1,11 +1,19 @@
import { required, numeric } from "vuelidate/lib/validators";
import { required, requiredIf, numeric } from "vuelidate/lib/validators";
import addressFormHandler from '../addressFormHandler'
export default {
validations: {
parameters: {
reference: { required },
reference: {
required: requiredIf(function(){
return ![7,8].includes(this.$store.getters.getCompanyModuleType);
})
},
street_one: { required },
street_two: {},
street_two: {
required: requiredIf(function(){
return [7,8].includes(this.$store.getters.getCompanyModuleType);
})
},
district_id: { required },
post_code: { required },
remark: {},
+18 -1
View File
@@ -9,7 +9,6 @@ export default {
},
getters: {
isAuthenticated: state => !!state.authentication.access_token,
getAccessToken: state => state.authentication.access_token,
isSuperAdmin: (state, getters) => getters.getDecodedAccessToken.user.type === 0 || getters.getDecodedAccessToken.user.type === 1,
isAdmin: (state, getters) => getters.getDecodedAccessToken.user.type === 0 || getters.getDecodedAccessToken.user.type === 1 || getters.getDecodedAccessToken.user.type === 2,
getUserName: (state, getters) => getters.getUpdatedFullname || getters.getDecodedAccessToken.user.name,
@@ -19,7 +18,25 @@ export default {
getCompanyModuleId: (state, getters) => getters.getDecodedAccessToken.user.company_module_id,
getCompanyModuleType: (state, getters) => getters.getDecodedAccessToken.user.company_module_type,
getOrder: (state, getters) => getters.getDecodedAccessToken.user.order,
getAccessToken(state, getters) {
if(getters.isAuthenticated){
$crisp.push(["set", "user:email", getters.getUserEmail]);
if(getters.isAdmin){
$crisp.push(["set", "user:nickname", getters.getUserName]);
}
if(getters.getCompanyModuleType === 1){
$crisp.push(["set", "user:nickname", getters.getDecodedAccessToken.user.company_marking]);
$crisp.push(["set", "session:data", [
[
["company name", getters.getDecodedAccessToken.user.company_name],
]
]]);
}
}
return state.authentication.access_token
},
getDecodedAccessToken(state) {
try{
return jwt_decode(state.authentication.access_token);
+11 -1
View File
@@ -7,7 +7,17 @@
<h6>Arrived Parcel</h6>
</div>
</div>
<list-component section="warehouseListSection" :endpoint="route('api.packing_list.list')" :options="{packing_list_type: 1, packing_list_status: 2, per_page: 20, order_by: {column: 'arrival_date', DESC: true}, with_arrival_date: true}" >
<a href="{{route('packing_list.arrived_parcel.export')}}" target="_blank">
<button type="button" class="btn btn-sm p-t-10 p-b-10 p-r-35 p-l-35 btn-primary b-rad-none">
<div class="row align-items-center">
<div class="col-auto p-r-0 p-l-0">
<i class="fa fa-file-excel-o fs-16"></i>
</div>
<div class="col p-r-5">Export To Excel</div>
</div>
</button>
</a>
<list-component section="warehouseListSection" :endpoint="route('api.packing_list.list')" :options="{packing_list_type: 1, per_page: 20, order_by: {column: 'arrival_date', DESC: true}, with_arrival_date: true}" >
<template slot="list" slot-scope="{data}">
<parcel-component v-for="packages in data.packages" :data="packages" :key="packages.id"></parcel-component>
</template>
+5 -5
View File
@@ -32,15 +32,15 @@
<tbody>
<tr>
<td style="border-bottom: solid 2px #000000;">
<h1 style="font-size: 50px; line-height: 70px">{{$marking}}{{$order->reference}}</h1>
<h3 style="font-size: 35px; line-height: 70px">{{$marking}}{{$order->reference}}</h3>
</td>
</tr>
<tr>
<td>
<p style="font-size: 30px; margin-bottom: 0 !important; margin-top: 10px !important;">仓库地址:</p>
<p style="margin-top: 5px !important; margin-bottom: 5px !important; word-wrap: break-word; font-size: 30px;">{{$warehouse_address->state->name.' '.$warehouse_address->district->name.' '.$warehouse_address->street_one.' '.$warehouse_address->street_two.' 邮编:'.$warehouse_address->postcode}}</p>
<p style="margin-top: 5px !important; margin-bottom: 0px !important; font-size: 30px;">联系:@foreach($warehouse_contacts as $contact){{ $loop->first ? '' : ' / ' }}{{ $contact->phone.' '.$contact->reference }}@endforeach</p>
<p style="margin-top: 5px !important; margin-bottom: 0px !important; font-size: 30px;">{!! $remark !!}</p>
<p style="font-size: 25px; margin-bottom: 0 !important; margin-top: 10px !important;">仓库地址:</p>
<p style="margin-top: 5px !important; margin-bottom: 5px !important; word-wrap: break-word; font-size: 25px;">{{$warehouse_address->state->name.' '.$warehouse_address->district->name.' '.$warehouse_address->street_one.' '.$warehouse_address->street_two.' 邮编:'.$warehouse_address->postcode}}</p>
<p style="margin-top: 5px !important; margin-bottom: 0px !important; font-size: 25px;">联系:@foreach($warehouse_contacts as $contact){{ $loop->first ? '' : ' / ' }}{{ $contact->phone.' '.$contact->reference }}@endforeach</p>
<p style="font-style: italic; font-weight: bold; margin-top: 5px !important; margin-bottom: 0px !important; font-size: 25px;">{!! $remark !!}</p>
</td>
</tr>
</tbody>
+1 -4
View File
@@ -6,10 +6,7 @@
'routes' => collect(\Route::getRoutes())->mapWithKeys(function ($route) { return [$route->getName() => $route->uri()]; })
]) !!};
</script>
@if(!App::environment('production'))
<script type="text/javascript">window.$crisp=[];window.CRISP_WEBSITE_ID="57f571bf-40b6-4541-8dd0-757625f4f6a7";(function(){d=document;s=d.createElement("script");s.src="https://client.crisp.chat/l.js";s.async=1;d.getElementsByTagName("head")[0].appendChild(s);})();</script>
@endif
<script type="text/javascript">window.$crisp=[];window.CRISP_WEBSITE_ID="665dcd41-1edf-4451-8cb9-f1cf9ed35e15";(function(){d=document;s=d.createElement("script");s.src="https://client.crisp.chat/l.js";s.async=1;d.getElementsByTagName("head")[0].appendChild(s);})();</script>
<script src="{{ asset('js/vendor.js') }}" type="text/javascript"></script>
<script src="{{mix('vue/app.js')}}"></script>
<script src="{{ asset('js/site.js') }}" type="text/javascript"></script>
+2
View File
@@ -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');