Compare commits

..

1 Commits

Author SHA1 Message Date
omair saleh 0e7469f1cd new registration ui flow 2022-03-29 23:15:42 +08:00
22 changed files with 513 additions and 303 deletions
@@ -1,75 +0,0 @@
<?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 ExportsPendingArrangementDeliveryList implements FromQuery, WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize
{
use Exportable;
public function headings(): array
{
return [
'Order Number',
'Marking',
'Quantity',
'Remark',
'Contact Person Name',
'Contact Number',
'Delivery Date',
'Delivery Address',
'Delivery State',
'Delivery Postcode'
];
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function query()
{
return PackingList::where('type', '=', 2)->whereHas('containers', function ($query){
$query->where('containers.status', ApprovalStatus::COMPLETED);
})->whereDoesntHave('transports');
}
/**
* @param PackingList $packingList
*
* @return array
*/
public function map($packingList): array
{
$order = $packingList->owner;
$marking = $order->companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference;
$defaultAddress = $order->companyModule->addresses()->defaultAddress()->first();
$defaultAddress = $defaultAddress ? $defaultAddress : $order->companyModule->addresses()->first();
$address = $defaultAddress->street_one.', '.$defaultAddress->street_two.' '.$defaultAddress->district->name.' '.$defaultAddress->postcode.' '.$defaultAddress->state->name.' '.$defaultAddress->country->name;
$contacts = $defaultAddress->contacts->first() ? $defaultAddress->contacts->first(): '';
$originalPackingList = $packingList->owner instanceof PackingList ? $packingList->owner : $packingList;
$transport = $originalPackingList->containers()->first()->transports()->first();
return [
$order->reference,
$marking,
$packingList->packages()->sum('quantity'),
$defaultAddress->remarks->first() ? $defaultAddress->remarks->first()->content: '',
$contacts ? $contacts ->reference : '',
$contacts ? $contacts ->phone : '',
$transport ? Carbon::now()->diffInDays($transport->drop_date, false) . ' Days' : '',
$address,
$defaultAddress->state->name,
$defaultAddress->postcode
];
}
}
@@ -7,7 +7,6 @@ use App\Classes\Modules\Orders\Standards\Rules\CanApproveChangeOrderAddress;
use App\Classes\Modules\Orders\Services\UpdatesOrdersAddress;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Http\Request;
class ApproveChangeOrderAddressProcessor
@@ -66,11 +65,7 @@ class ApproveChangeOrderAddressProcessor
$address->owner->addresses()->update(['status' => ApprovalStatus::EXPIRED]);
$appointee = $address->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id;
if($appointee === 2) {
foreach($address->owner->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST) as $packingList){
$this->updateDoFromVTPortalProcessor->execute($packingList);
}
}
$appointee === 2 ? $this->updateDoFromVTPortalProcessor->execute($address) : $this->updateDoFromYDPortalProcessor->execute($address);
}
@@ -6,9 +6,23 @@ use App\Classes\Exceptions\InternalServerErrorException;
use App\Classes\Modules\Orders\Services\FetchesDataFromVTPortal;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
use App\Classes\Modules\Transports\Services\CreatesTransport;
use App\Classes\Modules\Unity\Services\UpdatesContractObligation;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\TransportType;
use App\Models\PackingList;
use App\Models\Transport;
use Carbon\Carbon;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Support\Facades\Log;
use Illuminate\Http\Request;
class UpdateDoFromVTPortalProcessor
{
/** @var FetchesDataFromVTPortal */
@@ -29,20 +43,19 @@ class UpdateDoFromVTPortalProcessor
}
/**
* @param PackingList $packing_list
* @param $address
* @return array
* @throws GuzzleException
* @throws InternalServerErrorException
*/
public function execute(PackingList $packing_list) {
public function execute($address) {
if(!app()->environment(['production'])){
return [];
}
try {
$address= $packing_list->owner->addresses()->where('status', ApprovalStatus::APPROVED)->first();
$order = $packing_list->owner;
$order = $address->owner()->orderBy('id', 'desc')->first();
$packing_list = $order->packingLists()->orderBy('id', 'desc')->first();
if ($packing_list) {
$contact = $address->contacts()->first();
@@ -54,7 +67,7 @@ class UpdateDoFromVTPortalProcessor
$status = 'On Hold';
if (in_array($packing_list->status, [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) {
if (in_array($packing_list->status, [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) {
$status = 'Release';
}
@@ -64,7 +77,6 @@ class UpdateDoFromVTPortalProcessor
if ($vt_do) {
foreach ($vt_do->Rows as $key => $row) {
if($row[4] !== $packing_list->containers()->first()->reference) continue;
$vt_do_update = $this->fetchesDataFRomVTPortal->clientRequest(
'http://portal.vtnation.com.my/Services/DataControllerService.asmx/Execute',
'POST',
@@ -129,7 +141,7 @@ class UpdateDoFromVTPortalProcessor
}
} catch (\Exception $exception){
throw new InternalServerErrorException('failed to approve address due to an error related to VT portal: '.$exception->getMessage());
return [];
}
}
@@ -8,7 +8,6 @@ use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Models\PackingList;
use Illuminate\Support\Facades\Log;
class UpdateDoFromYDPortalProcessor
@@ -31,34 +30,36 @@ class UpdateDoFromYDPortalProcessor
}
/**
* @param PackingList $packingList
* @param $address
* @return void
* @throws InternalServerErrorException
*/
public function execute(PackingList $packingList) {
if(!app()->environment(['production'])){
return;
}
public function execute($address) {
try {
$address = $packingList->owner->addresses()->where('status', ApprovalStatus::APPROVED)->first();
$order = $address->owner()->orderBy('id', 'desc')->first();
$packing_lists = $order->packingLists()
->where('type', PackingListType::SHIPPING_PACKING_LIST)
->where('status', '!=', ApprovalStatus::SUSPENDED)
->orderBy('id', 'desc')->get();
if (!in_array($packingList->status, [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) {
return;
}
$contact = $address->contacts()->first();
$remark = $address->remarks()->first();
foreach ($packing_lists as $key => $row) {
if ($row->status === ApprovalStatus::SUSPENDED) {
continue;
}
$phone = $contact ? $contact->phone : null;
$reference = $contact ? $contact->reference : null;
$remark = $remark ? $remark->content : 'URGENT!!! PLEASE CALL BEFORE ONE DAY DELIVERY.';
$contact = $address->contacts()->first();
$remark = $address->remarks()->first();
$this->fetchesDataFRomYDPortal->clientRequest(
'http://www.yd-wl.com/api/UpdateOrderAddress.ashx',
'POST',
$phone = $contact ? $contact->phone : null;
$reference = $contact ? $contact->reference : null;
$remark = $remark ? $remark->content : 'URGENT!!! PLEASE CALL BEFORE ONE DAY DELIVERY.';
$this->fetchesDataFRomYDPortal->clientRequest(
'http://www.yd-wl.com/api/UpdateOrderAddress.ashx',
'POST',
[
'expressno' => $packingList->reference,
'expressno' => $row->reference,
'customers_name' => $reference,
'cellphone' => $phone,
'postcode' => $address->postcode,
@@ -67,6 +68,8 @@ class UpdateDoFromYDPortalProcessor
]);
}
} catch (\Exception $exception){
throw new InternalServerErrorException('failed to approve address due to an error related to YD portal');
}
@@ -14,7 +14,6 @@ use App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Http\Resources\PackingListResource;
use App\Models\PackingList;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -71,16 +70,16 @@ class UpdatePackingListStatusLogic extends AbstractControllerLogic
{
$packingList = $this->fetchesPackingList->execute(['id' => $request->route('id')]);
/** @var PackingList $packingList */
$packingList = $this->updatesPackingListStatus->execute($packingList, $request->route('status'));
$packing_list = $this->updatesPackingListStatus->execute($packingList, $request->route('status'));
$address = $packing_list->owner()->first()->addresses()->where('status', ApprovalStatus::APPROVED)->first();
// $appointee = $address->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id;
$this->updateDoFromVTPortalProcessor->execute($packingList);
$this->updateDoFromYDPortalProcessor->execute($packingList);
$this->updateDoFromVTPortalProcessor->execute($address);
$this->updateDoFromYDPortalProcessor->execute($address);
return $this->resourceResponse(new PackingListResource($packingList));
return $this->resourceResponse(new PackingListResource($packing_list));
}
}
@@ -36,7 +36,6 @@ use App\Models\Transport;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
class FetchOrderListsFromYdPortalProcessor
{
@@ -154,6 +153,7 @@ class FetchOrderListsFromYdPortalProcessor
$rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest);
foreach($rows->data as $row){
$containerReference = null;
$loadingDate = null;
$unstuffingDate = null;
@@ -168,11 +168,6 @@ class FetchOrderListsFromYdPortalProcessor
$rows = $this->fetchesDataFRomYDPortal->getResponseBody($trackingRequest);
if(!$rows){
Log::debug($row->expressno);
continue;
}
foreach (array_reverse($rows->data) as $trackingRow) {
if ($trackingRow->tracking === '货物已送达仓库准备入库中') {
$receiveDate = Carbon::parse($trackingRow->trackingtime);
@@ -222,7 +217,7 @@ class FetchOrderListsFromYdPortalProcessor
$unstuffingDate = Carbon::parse($trackingRow->trackingtime);
}
if (Str::contains($trackingRow->tracking, ['派送中'])) {
if ($trackingRow->tracking === '货物已派送完成') {
$deliveryDate = Carbon::parse($trackingRow->trackingtime);
}
}
@@ -315,13 +310,6 @@ class FetchOrderListsFromYdPortalProcessor
$this->createPackageProcessor->execute($packageObject, $packingList);
}
if(!count($row->deliverysize)){
$measurement = round(((float) $row->volume / (float) $row->goodcount) ** (1/3) * 100, 2);
$packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $measurement, (float) $measurement, (float) $measurement, 0, (float) $row->goodcount, ApprovalStatus::APPROVED);
$this->createPackageProcessor->execute($packageObject, $warehouseReceiveList);
$this->createPackageProcessor->execute($packageObject, $packingList);
}
$weightCbm = (float) $row->weight / 500;
$overWeightCbm = $weightCbm - $packingList->packages()->sum(DB::raw('(width/100) * (height/100) * (length/100) * quantity'));
@@ -407,7 +395,7 @@ class FetchOrderListsFromYdPortalProcessor
}
}
if($deliveryDate && !$packingList->transports()->exists()){
if($deliveryDate && !$packingList->transports){
$packingList->status = ApprovalStatus::COMPLETED;
$packingList->save();
@@ -1,29 +0,0 @@
<?php
namespace App\Http\Controllers\Exports;
use App\Classes\Modules\Exports\Services\ExportsPendingArrangementDeliveryList;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Excel;
class ExportPendingArrangementPackingListController
{
/**
* ExportPendingArrangementPackingListController 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 ExportsPendingArrangementDeliveryList($request);
$response = $exportsPendingArrangementDeliveryList->download('pending-arrangement-packing-list.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
ob_end_clean();
return $response;
}
}
+2 -6
View File
@@ -3,7 +3,6 @@
namespace App\Http\Resources;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use Carbon\Carbon;
use Illuminate\Http\Resources\Json\JsonResource;
class TransportResource extends JsonResource
@@ -16,7 +15,6 @@ class TransportResource extends JsonResource
*/
public function toArray($request)
{
$currentSchedule = $this->schedules()->where('status', '=', ApprovalStatus::APPROVED)->first();
return [
'id' => $this->id,
'type' => $this->type,
@@ -25,10 +23,8 @@ class TransportResource extends JsonResource
'dispatch_date' => $this->dispatch_date ? $this->dispatch_date->format('d-m-Y') : $this->dispatch_date,
'drop_date' => $this->drop_date ? $this->drop_date->format('d-m-Y') : $this->drop_date,
'status' => $this->status,
'current_schedule' => new ScheduleResource($currentSchedule),
'schedule_history' => ScheduleResource::collection($this->schedules()->where('status', '=', ApprovalStatus::EXPIRED)->get()),
'dropped_days' => Carbon::now()->diffInDays($this->drop_date, false),
'schedule_complete' => $currentSchedule ? $currentSchedule->eta <= Carbon::now() : false
'current_schedule' => new ScheduleResource($this->schedules()->where('status', '=', ApprovalStatus::APPROVED)->first()),
'schedule_history' => ScheduleResource::collection($this->schedules()->where('status', '=', ApprovalStatus::EXPIRED)->get())
];
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

File diff suppressed because one or more lines are too long
@@ -6,7 +6,7 @@
<error-message-component class="m-b-20" :error="error"></error-message-component>
<div class="row">
<div class="col">
<div class="row" v-show="step === 1">
<div class="row hide" v-show="step === 1">
<div class="col">
<div class="row m-b-15">
<div class="col">
@@ -180,13 +180,8 @@
</div>
</div>
</div>
<div class="row" v-show="step === 2">
<div class="row" v-show="step === 1">
<div class="col">
<div class="row">
<div class="col">
<p class="bold fs-11 all-caps muted">Personal Information</p>
</div>
</div>
<div class="row m-b-15">
<div class="col p-r-5">
<validation-wrapper-component :validator="$v.parameters.name">
@@ -202,18 +197,12 @@
</div>
</div>
<div class="row m-b-15">
<div class="col p-r-5">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.email">
<label>Email</label>
<input class="form-control" v-model="parameters.email">
</validation-wrapper-component>
</div>
<div class="col-4 p-l-5">
<validation-wrapper-component :validator="$v.parameters.wechat_id">
<label>WeChat ID</label>
<input class="form-control" v-model="parameters.wechat_id">
</validation-wrapper-component>
</div>
</div>
<div class="row m-b-15">
@@ -230,9 +219,10 @@
</validation-wrapper-component>
</div>
</div>
<div class="row">
<div class="col-auto">
<button type="button" class="btn btn-sm p-t-10 p-b-10 btn-default bg-master-lighter b-rad-none" @click="changeStep('back')">
<div class="row align-items-center">
<div class="col">
<p class="text-info pointer m-b-0">Sign in instead</p>
<button type="button" class="hide btn btn-sm p-t-10 p-b-10 btn-default bg-master-lighter b-rad-none" @click="changeStep('back')">
<div class="row align-items-center">
<div class="col-auto p-r-10">
<i class="fa fa-angle-left fs-16" style="margin-top: 1px;"></i>
@@ -241,8 +231,8 @@
</div>
</button>
</div>
<div class="col text-right">
<button type="button" class="btn btn-sm btn-block p-t-10 p-b-10 p-r-35 p-l-35 btn-primary b-rad-none p-r-30" @click="submitForm"><i class="fa fa-check fs-18 m-r-10"></i>Complete Registration</button>
<div class="col-3">
<button type="button" class="btn btn-sm btn-block p-t-10 p-b-10 p-r-35 p-l-35 btn-primary b-rad-none p-r-30" @click="submitForm">Sign Up</button>
</div>
</div>
</div>
@@ -6,41 +6,10 @@
<customer-profile-component :data="company"></customer-profile-component>
</div>
</div>
<div class="alert alert-info padding-15" role="alert">
<div class="row">
<div class="col"></div>
<div class="col-auto">
<i class="fa fa-times text-info-darker pointer" data-dismiss="alert"></i>
</div>
</div>
<div class="row">
<div class="col">
<p>[清明节仓库放假通知 Qing Ming Warehouse Holiday Notice]<br>
尊敬的客户们<br>
仓库将为 2022年清明节假期做出如下安排 <br>
广州仓库 2022 4 4 - 2022 4 5 4月6日复工<br>
义乌仓库 2022 4 3 - 2022 4 4 4月5日复工<br>
*放假期间没有仓库人员值班 请大家安排好送货时间 感谢<br><br>
Dear Customers :<br>
Our warehouse holiday for Qing Ming is as below :<br>
Guangzhou : 4 April 2022 - 5 April 2022 (Resume date : 6 April)<br>
Yiwu : 3 April 2022 - 4 April 2022 (Resume date : 5 April)<br>
*Warehouse personnel are on leave during the holiday period, please arrange delivery date in advance, thank you</p>
</div>
</div>
</div>
<div class="row" v-show="!$store.getters.isShowing('createOrderForm')">
<div class="col">
<on-boarding-section-component v-if="!company.last_order"></on-boarding-section-component>
<div class="row" v-if="company.last_order">
<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">
<div class="col">
<div class="row m-b-30 relative">
<div class="col">
@@ -98,7 +67,7 @@
</div>
</div>
</div>
<order-form-component v-show="$store.getters.isShowing('createOrderForm')" :company="company" :section="section"></order-form-component>
<order-form-component v-show="$store.getters.isShowing('createOrderForm') || (!company.last_order && company.status === 0)" :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">
<div class="row m-b-20 hide">
<div class="col">
<div class="row m-b-50 text-center" v-if="!$store.getters.isAdmin">
<div class="col">
@@ -97,6 +97,109 @@
</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>
@@ -23,8 +23,7 @@
</div>
</div>
<div class="col">
<p class="no-margin" v-if="item.transport">{{ item.transport.current_schedule.eta }}</p>
<p class="no-margin text-danger" v-if="!item.transport">{{ item.packages[0].container.transport ? item.packages[0].container.transport.dropped_days+' Days': 'n/a'}}</p>
<p class="no-margin">{{item.transport ? item.transport.current_schedule.eta : 'n/a'}}</p>
</div>
<div class="col-auto text-right" v-if="!item.transport">
<div class="row m-b-5">
@@ -50,7 +50,7 @@
</div>
<div class="col-auto">
<small class="fs-10 all-caps muted">Status</small>
<p class="no-margin bold">{{item.container ? item.container.transport.schedule_complete && status === 'Shipping' ? 'Custom Clearance' : status : status}}</p>
<p class="no-margin bold">{{status}}</p>
</div>
<div class="col-auto" v-if="$store.getters.isAdmin">
<small class="fs-10 all-caps muted">Container</small>
@@ -22,18 +22,17 @@
<p class="no-margin all-caps fs-10 light">Arrival Date</p>
<p class="no-margin text-success bold">{{data.transport ? data.transport.drop_date : 'n/a'}}</p>
</div>
<div class="col text-right" v-if="$store.getters.isSuperAdmin">
<div class="col text-right">
<button type="button" class="btn b-rad-none btn-primary fs-11 requestModal" data-type="claimPackingList">Claim</button>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="claimPackingList">
<claim-packinglist-form-component :data="data.id"></claim-packinglist-form-component>
</modal-component>
</div>
</div>
</div>
</div>
</div>
</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="claimPackingList">
<claim-packinglist-form-component :data="data.id"></claim-packinglist-form-component>
</modal-component>
</div>
</div>
</template>
@@ -133,9 +133,15 @@
</div>
</div>
<loading-component class="m-l-0" style="height: 50px; top: 0;" color="info"></loading-component>
<div class="row">
<div class="row" v-if="!company.last_order">
<div class="col">
<h4 class="text-info">We are generating the <b>QR code</b> that you need to <b>send to your supplier</b> to print to <b>stick to your packages</b>, this QR code is required for us to identify your packages when they arrives at our warehouse!</h4>
<h4 class="text-info">We are generating your first <b>QR code</b></h4>
<p>Please wait...</p>
</div>
</div>
<div class="row" v-if="company.last_order">
<div class="col">
<h4 class="text-info">We are generating the <b>QR code</b> for you to <b>send to your supplier</b> to print and <b>stick to your packages</b>, this QR code is required for us to identify your packages when they arrives at our warehouse!</h4>
<p>Please wait...</p>
</div>
</div>
@@ -176,7 +182,7 @@
methods:{
createOrder(){
this.step++;
this.submit((this.route('api.order.create')), 'post', 'orderListSection', true, false)
this.submit((this.route('api.order.create')), 'post', 'orderListSection', false, false)
},
cancelOrder(){
this.parameters.warehouse_id = '';
@@ -184,13 +190,18 @@
this.$store.dispatch('toggleSection', {name: this.section, status: false})
},
successHandler(response){
let vm = this;
if(!this.company.last_order) {
window.location.reload();
return;
}
setTimeout(function(){
window.location.href = this.route('order.show', response.payload.data.reference)
}, 5000);
},
errorHandler(response){
alert(response.message)
this.error = response.message;
this.step--;
}
+1 -1
View File
@@ -5,7 +5,7 @@ export default {
(this.$store.getters.isAuthenticated && !this.isProtectedRoute()&& this.isWithTokenRoute()) ? window.location.href = this.route('dashboard') : '';
},
isProtectedRoute(){
const unprotectedRoutes = [this.route('login'), this.route('account.email.verification'), this.route('company.claim')];
const unprotectedRoutes = [this.route('login'), this.route('account.email.verification'), this.route('company.claim'), this.route('signup')];
if(window.location.href.indexOf(this.route('company.claim')) === 0) {
return false;
}
@@ -0,0 +1,67 @@
@extends('layouts.base')
@section('content')
<div class="fluid-container h-100">
<div class="row h-100">
<div class="col-5 d-none d-lg-inline h-100 padding-50 bg-info" >
<div class="row">
<div class="col">
<div class="row m-b-50">
<div class="col-5 col-md-3">
<img class="w-100" src="{{asset('images/cief-logo-white.png')}}" alt="">
</div>
</div>
<div class="row m-b-20">
<div class="col">
<h3 class="text-white ">Spend less time managing your logistics and more time optimizing your operations.</h3>
</div>
</div>
<div class="row m-b-20">
<div class="col">
<h4 class="text-white ">You know how to run your operations, let us help you streamline your logistic supply chain management.</h4>
</div>
</div>
<div class="row ">
<div class="col">
<h4 class="text-white">Sign-up today and get access to:</h4>
<h5 class="text-white m-l-20"><i class="fa fa-circle-o m-r-10"></i>An intuitive and easy to use order process</h5>
<h5 class="text-white m-l-20"><i class="fa fa-circle-o m-r-10"></i>Service customization to keep you in control</h5>
<h5 class="text-white m-l-20"><i class="fa fa-circle-o m-r-10"></i>Follow-up action to keep you on track</h5>
<h5 class="text-white m-l-20"><i class="fa fa-circle-o m-r-10"></i>Personalized customer support</h5>
</div>
</div>
</div>
</div>
</div>
<div class="col bg-white no-padding h-100">
<div class="row h-100 align-items-center justify-content-center">
<div class="col h-100">
<div class="page-container">
<div class="page-content-wrapper p-t-50 p-b-50 h-100">
<div class="row no-margin align-items-center justify-content-center h-100">
<div class="col">
<div class="content p-t-0 overflow-hidden">
<div class="row h-100 no-margin align-items-center justify-content-center">
<div class="col col-md-10">
<div class="row">
<div class="col">
<loading-component style="height: 350px;" key="1" color="primary" v-show="$store.getters.isLoading('loginSection')"></loading-component>
<div class="row justify-content-center" v-show="!$store.getters.isLoading('loginSection')">
<div class="col">
<registration-form-component section="loginSection"></registration-form-component>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@@ -44,20 +44,6 @@
</div>
</div>
<div class="col">
<div class="row">
<div class="col">
<div class="row p-b-5 b-b b-grey m-b-10 m-l-0 m-r-0">
<div class="col no-padding">
<h6>Unclaimed Packing Lists</h6>
</div>
</div>
<list-component section="unclaimedPackingListSection" :endpoint="route('api.packing_list.list')" :options="{claimant_id: 2037, owner_id: 1, status: 4}">
<template slot="list" slot-scope="{data}">
<unclaimed-packinglist-component :data="data"></unclaimed-packinglist-component>
</template>
</list-component>
</div>
</div>
<profit-model-report-section-component></profit-model-report-section-component>
</div>
</div>
+31 -55
View File
@@ -75,79 +75,55 @@
<div class="col bg-master-lightest p-1 p-sm-4">
<div class="row tabsContainer tabContent" tab-name="pendingArrangement">
<div class="col">
<div class="row">
<div class="col">
<a href="{{route('packaging_list.pending_arrangement.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>
<div class="row align-items-center m-t-10 p-t-10 p-b-10 b-t b-grey muted all-caps fs-10">
<div class="col-2">Marking</div>
<div class="col-1 text-center">Quantity</div>
<div class="col-1">CBM</div>
<div class="col-1">Overweight CBM</div>
<div class="col-1">Total CBM</div>
<div class="col-1 text-center">status</div>
<div class="col-3">Delivery Details</div>
<div class="col">Delivery Date</div>
</div>
</div>
<div class="row align-items-center m-b-5 p-b-10 b-b b-grey muted all-caps fs-10">
<div class="col-2">Marking</div>
<div class="col text-center">Quantity</div>
<div class="col">CBM</div>
<div class="col">Overweight CBM</div>
<div class="col">Total CBM</div>
<div class="col">status</div>
<div class="col">Delivery Date</div>
<div class="col text-right">Action</div>
</div>
<list-component section="activeContainerListSection" :endpoint="route('api.packing_list.list')" :options="{packing_list_type: 2, 'packing_list_delivery_status': 1, with_arrival_date: true ,'per_page': 10, order_by: {column: 'arrival_date', DESC: true}}">
<list-component section="activeContainerListSection" :endpoint="route('api.packing_list.list')" :options="{packing_list_type: 2, 'packing_list_delivery_status': 1, with_arrival_date: true ,'per_page': 30, order_by: {column: 'arrival_date', DESC: true}}">
<template slot="list" slot-scope="{data}">
<packing-list-component :data="data"></packing-list-component>
<warehouse-packing-list-component :data="data"></warehouse-packing-list-component>
</template>
</list-component>
</div>
</div>
<div class="row tabsContainer tabContent hide" tab-name="pendingDelivery">
<div class="col">
<div class="row">
<div class="col">
<div class="row align-items-center p-t-10 p-b-10 b-t b-grey muted all-caps fs-10">
<div class="col-2">Marking</div>
<div class="col-1 text-center">Quantity</div>
<div class="col-1">CBM</div>
<div class="col-1">Overweight CBM</div>
<div class="col-1">Total CBM</div>
<div class="col-1 text-center">status</div>
<div class="col-3">Delivery Details</div>
<div class="col">Delivery Date</div>
</div>
</div>
<div class="row align-items-center m-b-5 p-b-10 b-b b-grey muted all-caps fs-10">
<div class="col-2">Marking</div>
<div class="col text-center">Quantity</div>
<div class="col">CBM</div>
<div class="col">Overweight CBM</div>
<div class="col">Total CBM</div>
<div class="col">status</div>
<div class="col">Delivery Date</div>
</div>
<list-component section="arrivedContainerListSection" :endpoint="route('api.packing_list.list')" :options="{packing_list_type: 2, 'packing_list_delivery_status': 2, with_arrival_date: true ,'per_page': 10, order_by: {column: 'arrival_date', DESC: true}}">
<list-component section="arrivedContainerListSection" :endpoint="route('api.packing_list.list')" :options="{packing_list_type: 2, 'packing_list_delivery_status': 2, with_arrival_date: true ,'per_page': 30, order_by: {column: 'arrival_date', DESC: true}}">
<template slot="list" slot-scope="{data}">
<packing-list-component :data="data"></packing-list-component>
<warehouse-packing-list-component :data="data"></warehouse-packing-list-component>
</template>
</list-component>
</div>
</div>
<div class="row tabsContainer tabContent hide" tab-name="delivered">
<div class="col">
<div class="row">
<div class="col">
<div class="row align-items-center p-t-10 p-b-10 b-t b-grey muted all-caps fs-10">
<div class="col-2">Marking</div>
<div class="col-1 text-center">Quantity</div>
<div class="col-1">CBM</div>
<div class="col-1">Overweight CBM</div>
<div class="col-1">Total CBM</div>
<div class="col-1 text-center">status</div>
<div class="col-3">Delivery Details</div>
<div class="col">Delivery Date</div>
</div>
</div>
<div class="row align-items-center m-b-5 p-b-10 b-b b-grey muted all-caps fs-10">
<div class="col-2">Marking</div>
<div class="col text-center">Quantity</div>
<div class="col">CBM</div>
<div class="col">Overweight CBM</div>
<div class="col">Total CBM</div>
<div class="col">status</div>
<div class="col">Delivery Date</div>
</div>
<list-component section="completeContainerListSection" :endpoint="route('api.packing_list.list')" :options="{packing_list_type: 2, 'packing_list_delivery_status': 3, with_arrival_date: true ,'per_page': 10, order_by: {column: 'arrival_date', DESC: true}}">
<list-component section="completeContainerListSection" :endpoint="route('api.packing_list.list')" :options="{packing_list_type: 2, 'packing_list_delivery_status': 3, with_arrival_date: true ,'per_page': 30, order_by: {column: 'arrival_date', DESC: true}}">
<template slot="list" slot-scope="{data}">
<packing-list-component :data="data"></packing-list-component>
<warehouse-packing-list-component :data="data"></warehouse-packing-list-component>
</template>
</list-component>
</div>
+5 -2
View File
@@ -31,6 +31,10 @@ Route::get('', function () {
return view('pages.accounts.login');
})->name('login');
Route::get('/signup', function () {
return view('pages.accounts.signup');
})->name('signup');
Route::group(['prefix' => 'swagger'], function () {
Route::get('/', function () {
return view('swagger.index');
@@ -231,7 +235,6 @@ Route::get('/warehouse/{id}/show', function ($id) {
})->name('warehouse.show');
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('/settings', function () {
return view('pages.settings');
@@ -242,7 +245,7 @@ Route::get('/settings', function () {
Route::get('/customer/summary/monthly', function () {
// $containers = Container::whereMonth('loading_date', 1)->where('owner_id', 3)->get();
$containers = Container::whereIn('reference', ['EPS-3850', 'EPS-3863', 'WP-1331', 'EPS-3856'])->get();
$containers = Container::whereIn('reference', ['SM21-166', 'SM21-168', 'SM21-170', 'SM21-171', 'SM21-172', 'SM21-173', 'EPS-3833'])->get();
foreach ($containers as $container){
$packingLists = $container->packingLists()->get()->filter(function ($packingList) {
return $packingList->owner->company_module_id === 248;