container load

This commit is contained in:
glovetleong
2021-09-18 09:56:41 +08:00
parent 2f6055c577
commit d7e2366fed
9 changed files with 265 additions and 11 deletions
@@ -23,8 +23,8 @@ class CreateContainerLogic extends AbstractControllerLogic
*/
protected function notification():array {
return [
'title' => 'Created PackingList',
'message' => 'You have successfully created a new PackingList'
'title' => 'Created Container',
'message' => 'You have successfully created a new Container'
];
}
@@ -0,0 +1,105 @@
<?php
namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\PackingLists\Services\Containers\CreatesContainer;
use App\Classes\Modules\PackingLists\Standards\Rules\Containers\CanCreateContainer;
use App\Classes\Modules\Transports\Services\CreatesTransport;
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
use App\Classes\Modules\PackingLists\DataTransferObjects\ContainerObject;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Classes\ValueObjects\Constants\TransportType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\ContainerResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Carbon\Carbon;
class CreateLoadContainerLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Container',
'message' => 'You have successfully created a new Container'
];
}
/** @var CanCreateContainer */
private $canCreateContainer;
/** @var FetchesPackingList */
private $fetchesPackingList;
/** @var FetchesCompanyModule */
private $fetchesCompanyModule;
/** @var CreatesPackingList */
private $createsContainer;
/** @var CreatesTransport */
private $createsTransport;
/** @var CreatesSchedule */
private $createsSchedule;
public function __construct(
CanCreateContainer $canCreateContainer,
FetchesPackingList $fetchesPackingList,
FetchesCompanyModule $fetchesCompanyModule,
CreatesContainer $createsContainer,
CreatesTransport $createsTransport,
CreatesSchedule $createsSchedule
)
{
$this->canCreateContainer = $canCreateContainer;
$this->fetchesPackingList = $fetchesPackingList;
$this->fetchesCompanyModule = $fetchesCompanyModule;
$this->createsContainer = $createsContainer;
$this->createsTransport = $createsTransport;
$this->createsSchedule = $createsSchedule;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$object = new ContainerObject(
$request->input('container_reference'),
$request->input('container_number'),
$request->input('seal_reference'),
$request->input('container_type'),
$request->input('status')
);
$company = $this->fetchesCompanyModule->execute(['id' => 2]);
$this->canCreateContainer->passes($object);
$container = $this->createsContainer->execute($object, $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]));
$transportObject = new TransportObject(TransportType::LAND, null, $request->input('tracking'), Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED);
$transport = $this->createsTransport->execute($transportObject, $container);
$scheduleObject = new ScheduleObject(Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED);
$schedule = $this->createsSchedule->execute($transport, $scheduleObject);
return $this->resourceResponse(new ContainerResource($container));
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\PackingLists\Containers;
use App\Classes\Modules\PackingLists\ControllersLogic\Containers\CreateLoadContainerLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateLoadContainerController
{
/**
* @param Request $request
* @param CreateLoadContainerLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateLoadContainerLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,90 @@
<template>
<div class="row" @keyup.enter="submitForm">
<div class="col">
<div class="row m-b-20 text-info">
<div class="col">
<h3 class="text-left">Create Load Container</h3>
</div>
</div>
<error-message-component class="m-b-20" :error="error"></error-message-component>
<div class="row">
<div class="col">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.receive_date">
<label class="text-primary">Receive Date</label>
<date-picker-component :parameters="parameters" :value="'receive_date'"></date-picker-component>
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.tracking">
<label class="text-primary">Tracking</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.tracking">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.company_module_id">
<label class="text-primary">Company Module</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.company_module_id">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.container_reference">
<label class="text-primary">Container Reference</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.container_reference">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.container_number">
<label class="text-primary">Container Number</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.container_number">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.seal_reference">
<label class="text-primary">Seal Reference</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.seal_reference">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.container_type">
<label class="text-primary">Container Type</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.container_type">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.status">
<label class="text-primary">Status</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.status">
</validation-wrapper-component>
<div class="row m-t-15 align-items-center justify-content-center">
<div class="col">
<div class="btn btn-block btn-lg btn-primary b-rad-none no-border" @click="submitForm">Submit</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import createContainerFormValidation from '../../../general/mixins/containers/validation/createContainerFormValidation';
import componentHandler from '../../../general/mixins/componentHandler';
import modalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
data() {
return {
error: '',
parameters: {
tracking: this.tracking,
receive_date: this.receive_date,
company_module_id: this.company_module_id,
container_reference: this.container_reference,
container_number: this.container_number,
seal_reference: this.seal_reference,
container_type: this.container_type,
status: this.status,
}
};
},
methods: {
submitForm(){
this.submit(this.route('api.packing_list.container.create.load'), 'post', this.section, true, true)
}
},
mixins: [createContainerFormValidation, componentHandler, modalFormHandler]
}
</script>
@@ -12,7 +12,6 @@
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.type">
<label class="text-primary">Type</label>
<select-component :options="[{'id': 0, 'text': 'Carton'}, {'id': 1, 'text': 'Pallet'}]" v-model="parameters.type"></select-component>
<input type="text" class="form-control fs-12" v-model.trim="parameters.type">
</validation-wrapper-component>
@@ -249,18 +249,19 @@
</div>
<div class="col">
<div class="row">
<div class="col-12 mb-2">
<div data-type="createShippingPackageList" class="btn btn-sm btn-block bg-white text-info b-rad-sm pointer requestModal">
Add
</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="stick-up" type="createShippingPackageList" size="large">
<create-shipping-package-list-form-component :id="order.id" :section="section"></create-shipping-package-list-form-component>
</modal-component>
</div>
<div class="col">
<div class="row" v-if="order.origin_warehouse_packages.length">
<div class="col">
<div class="col-12 mb-2">
<div data-type="createShippingPackageList" class="btn btn-sm btn-block bg-white text-info b-rad-sm pointer requestModal">
Add
</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="stick-up" type="createShippingPackageList" size="large">
<create-shipping-package-list-form-component :id="order.id" :section="section"></create-shipping-package-list-form-component>
</modal-component>
</div>
<div class="row" v-for="group in Math.ceil(order.origin_warehouse_packages.length / 2)">
<div class="col-12 p-r-0" :class="'col-md-'+(12/2)" v-for="item in order.origin_warehouse_packages.slice((group - 1) * 2, group * 2)" v-bind:key="item.id" :data="item">
@@ -0,0 +1,32 @@
import { required } from "vuelidate/lib/validators";
export default {
validations: {
parameters: {
tracking: {
required
},
receive_date: {
required
},
company_module_id: {
required
},
container_reference: {
required
},
container_number: {
required
},
seal_reference: {
required
},
container_type: {
required
},
status: {
required
}
}
},
}
@@ -23,6 +23,12 @@
<div class="col"></div>
<div class="col-auto p-r-0">
<a href="{{route('orders.refresh')}}"><div class="btn btn-sm btn-warning all-caps b-rad-none pointer"><i class="fa fa-refresh m-r-10"></i>Refresh Orders</div></a>
<div data-type="createContainer" class="btn btn-sm btn-block bg-white text-info b-rad-sm pointer requestModal">Add</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="stick-up" type="createContainer" size="large">
<create-load-container-form-component :section="'containerListSection'"></create-load-container-form-component>
</modal-component>
</div>
</div>
@yield('inner_content')
+1
View File
@@ -14,6 +14,7 @@ Route::group(['namespace' => 'PackingLists', 'as' => 'packing_list.', 'prefix' =
Route::get('/{id}/show', 'FetchContainerController@fetch')->name('show');
Route::get('/list', 'ListContainersController@list')->name('list');
Route::post('/create', 'CreateContainerController@create')->name('create');
Route::post('/create/load', 'CreateLoadContainerController@create')->name('create.load');
Route::put('/update/{id}', 'UpdateContainerController@update')->name('update');
Route::delete('/delete/{id}', 'DeleteContainerController@delete')->name('delete');
});