Merge branch 'api-intergration' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development

This commit is contained in:
edmondlang
2022-04-24 23:04:26 +08:00
10 changed files with 599 additions and 26 deletions
@@ -0,0 +1,121 @@
<?php
namespace App\Classes\Modules\Segments\ControllersLogic;
use App\Classes\Exceptions\ResourceNotFoundException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Segments\DataTransferObjects\ConstantObject;
use App\Classes\Modules\Segments\Services\UpdatesBasePriceConstantByDates;
use App\Classes\Modules\Segments\Services\CreatesConstant;
use App\Classes\Modules\Segments\Services\FetchesConstant;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Classes\Modules\Segments\Standards\Rules\CanCreateConstant;
use App\Classes\Modules\Segments\Standards\Rules\CanUpdateConstant;
use App\Classes\Modules\Segments\Services\UpdatesConstant;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Http\Resources\ConstantResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateBasePriceLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Create Base Price',
'message' => 'You have successfully created a Base Price'
];
}
/** @var CanUpdateConstant */
private $canUpdateConstant;
/** @var UpdatesConstant */
private $updatesConstant;
/** @var FetchesSegment */
private $fetchesSegment;
/** @var FetchesConstant */
private $fetchesConstant;
/** @var CanCreateConstant */
private $canCreateConstant;
/** @var CreatesConstant */
private $createsConstant;
/** @var UpdatesBasePriceConstantByDates */
private $updatesBasePriceConstantByDates;
/**
* UpdateConstantLogic constructor.
* @param CanUpdateConstant $canUpdateConstant
* @param UpdatesConstant $updatesConstant
* @param FetchesSegment $fetchesSegment
* @param FetchesConstant $fetchesConstant
* @param CanCreateConstant $canCreateConstant
* @param CreatesConstant $createsConstant
* @param UpdatesBasePriceConstantByDates $updatesBasePriceConstantByDates
*/
public function __construct(
CanUpdateConstant $canUpdateConstant,
UpdatesConstant $updatesConstant,
FetchesSegment $fetchesSegment,
FetchesConstant $fetchesConstant,
CanCreateConstant $canCreateConstant,
CreatesConstant $createsConstant,
UpdatesBasePriceConstantByDates $updatesBasePriceConstantByDates
)
{
$this->canUpdateConstant = $canUpdateConstant;
$this->updatesConstant = $updatesConstant;
$this->fetchesSegment = $fetchesSegment;
$this->fetchesConstant = $fetchesConstant;
$this->canCreateConstant = $canCreateConstant;
$this->createsConstant = $createsConstant;
$this->updatesBasePriceConstantByDates = $updatesBasePriceConstantByDates;
}
/**
* @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
{
$segment = $this->fetchesSegment->execute(['id' => $request->route('id')]);
try {
$constant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => SegmentConstants::BASE_PRICE]);
} catch (ResourceNotFoundException $exception){
$constantObject = [];
$object = new ConstantObject(
SegmentConstants::BASE_PRICE,
$constantObject
);
$constant = $this->createsConstant->execute($segment, $object);
}
$constantValue = $this->updatesBasePriceConstantByDates->execute($constant->value, $request->input('dateFrom'), $request->input('dateTo'), $request->input('rate'));
$object = new ConstantObject(SegmentConstants::BASE_PRICE, $constantValue);
$this->canUpdateConstant->passes($object);
$constant = $this->updatesConstant->execute($constant, $object);
return $this->resourceResponse(new ConstantResource($constant));
}
}
@@ -0,0 +1,68 @@
<?php
namespace App\Classes\Modules\Segments\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Segments\Services\FetchesConstant;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Http\Resources\ConstantResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Carbon\CarbonPeriod;
class FetchBasePriceLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Base Price',
'message' => 'You have successfully retrieved the Base Price'
];
}
/** @var FetchesConstant */
private $fetchesConstant;
/**
* FetchConstantLogic constructor.
* @param FetchesConstant $fetchesConstant
*/
public function __construct(FetchesConstant $fetchesConstant)
{
$this->fetchesConstant = $fetchesConstant;
}
/**
* @param Request $request
* @return JsonResponse
*/
public function logic(Request $request) : JsonResponse
{
$constant = $this->fetchesConstant->execute(['segment_id' => $request->route('id'), 'reference' => SegmentConstants::BASE_PRICE]);
$constantObject = (array) $constant->value;
if ($request->input('dateFrom') !== null && $request->input('dateTo') !== null) {
$period = CarbonPeriod::create($request->input('dateFrom'), $request->input('dateTo'));
$returnObject = [];
foreach ($period as $date) {
array_key_exists($date->format('Y-m-d'), $constantObject) === true ? $returnObject[$date->format('Y-m-d')] = $constantObject[$date->format('Y-m-d')] : '';
}
$constant->value = json_encode($returnObject);
}
return $this->resourceResponse(new ConstantResource($constant));
}
}
@@ -0,0 +1,29 @@
<?php
namespace App\Classes\Modules\Segments\Services;
use Carbon\CarbonPeriod;
class UpdatesBasePriceConstantByDates
{
/**
* @param $json
* @param int $status_id
* @param Array $rate
* @return Array
*/
public function execute($json, String $date_from, String $date_to, String $rate) {
$objectArray = (array) $json;
$period = CarbonPeriod::create($date_from, $date_to);
foreach ($period as $date) {
$objectArray[$date->format('Y-m-d')] = $rate;
}
return $objectArray;
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Segments;
use App\Classes\Modules\Segments\ControllersLogic\CreateBasePriceLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateBasePriceController
{
/**
* @param Request $request
* @param CreateBasePriceLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateBasePriceLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Segments;
use App\Classes\Modules\Segments\ControllersLogic\FetchBasePriceLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchBasePriceController
{
/**
* @param Request $request
* @param FetchSegmentLogic $logic
* @return JsonResponse
*/
public function fetch(Request $request, FetchBasePriceLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,80 @@
<template>
<div class="row" style="width: 450px; margin: auto;" @keyup.enter="submitForm">
<div class="col bg-white b-rad-lg">
<div class="row m-b-10">
<div class="col text-center">
<p>Plese set the approximate of base price and dates of below.</p>
</div>
</div>
<div class="row">
<div class="col">
<div class="row m-auto mt-10 mb-10">
<div class="col p-l-0 p-r-10">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.dateFrom">
<label class="text-primary">Date From</label>
<date-picker-component v-model="parameters.dateFrom"></date-picker-component>
</validation-wrapper-component>
</div>
</div>
<div class="row m-auto mt-10 mb-10">
<div class="col p-l-0 p-r-10">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.dateTo">
<label class="text-primary">Date To</label>
<date-picker-component v-model="parameters.dateTo"></date-picker-component>
</validation-wrapper-component>
</div>
</div>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.rate">
<label class="text-primary">Extra Charges (MYR)</label>
<div class="controls">
<input type="text" class="form-control fs-12" v-model.trim="parameters.rate" v-money="money">
</div>
</validation-wrapper-component>
</div>
</div>
<div class="row m-t-15">
<div class="col p-r-5">
<div class="btn btn-sm btn-default b-rad-none w-100" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-sm btn-primary w-100" @click="submitForm()">Confirm</div>
</div>
</div>
</div>
</div>
</template>
<script>
import modalFormHandler from '../../../general/mixins/modalFormHandler';
import { required } from "vuelidate/lib/validators";
export default {
props: {
section: {
default: ''
},
},
data() {
return {
parameters: {
dateFrom: '',
dateTo: '',
rate: ''
},
};
},
validations: {
parameters: {
dateFrom: { required },
dateTo: { required },
rate: { required },
}
},
methods: {
submitForm(){
this.submit(this.route('api.segment.constant.basePrice.create', 1), 'post', this.section, true, true)
},
},
mixins: [modalFormHandler]
}
</script>
@@ -1,15 +1,16 @@
<template>
<div class="row parentContainer" style="width: 450px; margin: auto;" @keyup.enter="submitForm">
<div class="col bg-white b-rad-lg">
<div class="row parentContainer padding-40 bg-white b-rad-lg" style="width: 450px; margin: auto;" @keyup.enter="submitForm">
<div class="col">
<div class="row m-b-10">
<div class="col">
<h2 class="text-center">Edit Base Price</h2>
<p class="text-center">{{ parameters.dateFrom }}</p>
</div>
</div>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.value.amount">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.rate">
<label class="text-primary">Base Price (MYR)</label>
<div class="controls">
<input type="text" class="form-control fs-12" v-model.trim="parameters.value.amount" v-money="money">
<input type="text" class="form-control fs-12" v-model.trim="parameters.rate" v-money="money">
</div>
</validation-wrapper-component>
<div class="row m-t-15">
@@ -17,7 +18,7 @@
<div class="btn btn-lg btn-default b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-primary w-100 btn-lg" @click="submit(route('api.segment.constant.update', 1), 'put', section, true, true)">Confirm</div>
<div class="btn btn-primary w-100 btn-lg" @click="submit(route('api.segment.constant.basePrice.create', 1), 'post', section, true, true)">Confirm</div>
</div>
</div>
</div>
@@ -29,11 +30,10 @@
export default {
props: {
// pass in default base price
// data: {
// type: Object,
// required: false
// },
data: {
type: Object,
required: false
},
section: {
default: ''
},
@@ -41,18 +41,17 @@
data() {
return {
parameters: {
reference: 'BASE_PRICE',
value : {
amount: 0
}
}
dateFrom: this.data.date,
dateTo: this.data.date,
rate: this.data.rate
},
};
},
validations: {
parameters: {
value: {
amount: { required }
}
dateFrom: { required },
dateTo: { required },
rate: { required },
}
},
mixins: [modalFormHandler]
File diff suppressed because one or more lines are too long
+3
View File
@@ -14,5 +14,8 @@ Route::group(['prefix' => 'segment', 'as' => 'segment.', 'namespace' => 'Segment
Route::put('/update', 'UpdateConstantController@update')->name('update');
Route::get('/show/{reference}', 'FetchConstantController@fetch')->name('show');
Route::put('/update/postcode', 'UpdateConstantPostcodeController@update')->name('update.postcode');
Route::post('base-price/create', 'CreateBasePriceController@create')->name('basePrice.create');
Route::get('base-price/show', 'FetchBasePriceController@fetch')->name('basePrice.show');
});
});