mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 04:24:12 +00:00
allow user to edit billing address
This commit is contained in:
@@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Addresses\ControllersLogic;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\Addresses\Services\CreatesAddress;
|
||||||
|
use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress;
|
||||||
|
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
|
||||||
|
use App\Classes\Modules\Addresses\Services\FetchesAddress;
|
||||||
|
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
|
||||||
|
use App\Classes\ValueObjects\Constants\AddressType;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use App\Http\Resources\AddressResource;
|
||||||
|
use App\Models\Address;
|
||||||
|
use App\Models\CompanyModule;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class CreateBillingAddressLogic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function notification():array {
|
||||||
|
return [
|
||||||
|
'title' => 'Created Billing Address',
|
||||||
|
'message' => 'You have successfully created a new Billing Address'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var CanCreateAddress */
|
||||||
|
private $canCreateAddress;
|
||||||
|
|
||||||
|
/** @var FetchesCompanyModule */
|
||||||
|
private $fetchesCompanyModule;
|
||||||
|
|
||||||
|
/** @var CreatesAddress */
|
||||||
|
private $createsAddress;
|
||||||
|
|
||||||
|
/** @var FetchesAddress */
|
||||||
|
private $fetchesAddress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CreateAddressLogic constructor.
|
||||||
|
* @param CanCreateAddress $canCreateAddress
|
||||||
|
* @param FetchesCompanyModule $fetchesCompanyModule
|
||||||
|
* @param CreatesAddress $createsAddress
|
||||||
|
* @param FetchesAddress $fetchesAddress
|
||||||
|
*/
|
||||||
|
public function __construct(CanCreateAddress $canCreateAddress, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress, FetchesAddress $fetchesAddress)
|
||||||
|
{
|
||||||
|
$this->canCreateAddress = $canCreateAddress;
|
||||||
|
$this->fetchesCompanyModule = $fetchesCompanyModule;
|
||||||
|
$this->createsAddress = $createsAddress;
|
||||||
|
$this->fetchesAddress = $fetchesAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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
|
||||||
|
{
|
||||||
|
$companyModule = $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]);
|
||||||
|
|
||||||
|
$address = $this->fetchesAddress->execute(['id' => $request->input('billing_address_id')]);
|
||||||
|
|
||||||
|
if ($address->type !== AddressType::BILLING || $address !== $companyModule->addresses->where('type', AddressType::BILLING)->first()) {
|
||||||
|
// delete all current billing address
|
||||||
|
Address::where('owner_type', CompanyModule::class)->where('owner_id', $request->input('company_module_id'))->where('type', AddressType::BILLING)->delete();
|
||||||
|
|
||||||
|
// create addrress
|
||||||
|
$billingAddress = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode, AddressType::BILLING, ApprovalStatus::APPROVED, $address->reference);
|
||||||
|
$this->canCreateAddress->passes($billingAddress);
|
||||||
|
$this->createsAddress->execute($companyModule, $billingAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->resourceResponse(new AddressResource($address));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Addresses;
|
||||||
|
|
||||||
|
use App\Classes\Modules\Addresses\ControllersLogic\CreateBillingAddressLogic;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class CreateBillingAddressController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @param CreateBillingAddressLogic $logic
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
public function create(Request $request, CreateBillingAddressLogic $logic): JsonResponse {
|
||||||
|
return $logic->execute($request);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
<style>
|
||||||
|
@media screen and (min-width: 570px) {
|
||||||
|
.extend-modal-body{
|
||||||
|
width: 700px;
|
||||||
|
max-width: calc(100% - 20px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<template>
|
||||||
|
<div class="row m-b-20 bg-white text-black padding-15 rounded extend-modal-body">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row m-b-20 text-info">
|
||||||
|
<div class="col text-center">
|
||||||
|
<h3>Please select the <b>Billing Address</b></h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row b-rounded justify-content-center m-b-15" @click="updateBillingAddressFilters">
|
||||||
|
<div class="col col-md-10 bg-master-lightest margin-auto padding-15">
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col pointer d-flex justtify-content-center align-items-center">
|
||||||
|
<i class="fa fs-30 fa-fw" :class="{'fa-square-o': !useDeliveryAddress, 'fa-check-square': useDeliveryAddress, 'text-primary':useDeliveryAddress}" ></i>
|
||||||
|
<p class="m-b-0">Use Delivery Address</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row justify-content-center m-b-15" v-if="error">
|
||||||
|
<div class="col-10">
|
||||||
|
<small class="text-danger">{{error}}</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col col-md-10">
|
||||||
|
<list-component :key="currentKey" style="min-height: 50px;" section="addressList" :emptyListSection=false :endpoint="route('api.address.list')" :options="billingAddressFilters">
|
||||||
|
<template slot="list" slot-scope="{data}">
|
||||||
|
<select-address-component :data="data" :value="parameters.billing_address_id" v-model="parameters.billing_address_id"></select-address-component>
|
||||||
|
</template>
|
||||||
|
</list-component>
|
||||||
|
<div class="row m-b-10 animate__animated animate__fadeInUpBig animate__delay-1 animate__fast">
|
||||||
|
<div class="col b-a p-t-15 p-b-15 pointer" :class="{ 'b-primary': !parameters.billing_address_id, 'b-grey': parameters.billing_address_id}" @click="parameters.billing_address_id = null">
|
||||||
|
<div class="row align-items-center">
|
||||||
|
<div class="col-auto p-r-0">
|
||||||
|
<i class="fa fs-20 p-t-5" :class="{'fa-circle-o': parameters.billing_address_id, 'fa-check-circle': !parameters.billing_address_id, 'text-primary': !parameters.billing_address_id}"></i>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto semi-bold">New Address</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" v-show="!parameters.billing_address_id">
|
||||||
|
<div class="col">
|
||||||
|
<address-form-component :type="1" :id="company_module_id" section="addressList" @input="parameters.billing_address_id = $event"></address-form-component>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col"></div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<button type="button" class="btn btn-lg rounded btn-primary" v-if="parameters.billing_address_id" @click="submitForm()">Confirm</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
section: {
|
||||||
|
type: String,
|
||||||
|
default: 'addressList'
|
||||||
|
},
|
||||||
|
company_module_id: {
|
||||||
|
type: Number,
|
||||||
|
default: 1
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data(){
|
||||||
|
return {
|
||||||
|
useDeliveryAddress: false,
|
||||||
|
isLoading: false,
|
||||||
|
error: '',
|
||||||
|
billingAddressFilters: {
|
||||||
|
per_page: 10,
|
||||||
|
HasMorphCompanyModule: this.company_module_id,
|
||||||
|
type: 1
|
||||||
|
},
|
||||||
|
parameters : {
|
||||||
|
company_module_id: this.company_module_id,
|
||||||
|
billing_address_id: '',
|
||||||
|
},
|
||||||
|
item:{
|
||||||
|
id:null
|
||||||
|
},
|
||||||
|
currentKey: 1,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
updateBillingAddressFilters(){
|
||||||
|
if(this.useDeliveryAddress) {
|
||||||
|
// if use delivery address
|
||||||
|
this.billingAddressFilters = {
|
||||||
|
per_page: 10,
|
||||||
|
HasMorphCompanyModule: this.company_module_id,
|
||||||
|
type: 1
|
||||||
|
}
|
||||||
|
this.parameters.billing_address_id = '';
|
||||||
|
} else {
|
||||||
|
this.billingAddressFilters = {per_page: 10, HasMorphCompanyModule: this.company_module_id,};
|
||||||
|
}
|
||||||
|
this.useDeliveryAddress = !this.useDeliveryAddress;
|
||||||
|
this.currentKey++;
|
||||||
|
},
|
||||||
|
submitForm(){
|
||||||
|
this.submit(this.route('api.address.billingAddress.create'), 'post', this.section, true, true)
|
||||||
|
},
|
||||||
|
successHandler(response){
|
||||||
|
this.closeModal();
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -58,6 +58,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<div class="btn-lg btn-primary b-a b-white pointer fs-14 position-relative bg-transparent requestModal" data-type="billingAddressComponent" style="z-index: 2;">Change Billing Address</div>
|
||||||
|
</div>
|
||||||
|
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="billingAddressComponent">
|
||||||
|
<billing-address-list-component :company_module_id="company.company_module.id" section="billingAddressComponent"></billing-address-list-component>
|
||||||
|
</modal-component>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ Route::group(['prefix' => 'address', 'as' => 'address.', 'namespace' => 'Address
|
|||||||
Route::get('state/list', 'ListStatesController@list')->name('state.list');
|
Route::get('state/list', 'ListStatesController@list')->name('state.list');
|
||||||
|
|
||||||
Route::post('/create', 'CreateAddressController@create')->name('create');
|
Route::post('/create', 'CreateAddressController@create')->name('create');
|
||||||
|
|
||||||
|
Route::post('billingAddress/create', 'CreateBillingAddressController@create')->name('billingAddress.create');
|
||||||
|
|
||||||
Route::put('/update/{id}', 'UpdateAddressController@update')->name('update');
|
Route::put('/update/{id}', 'UpdateAddressController@update')->name('update');
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user