User interface to allow admin to update company whether is a credit term customer for warehoue storage charges

This commit is contained in:
Dillon Ngo
2024-02-18 10:00:35 +08:00
parent af1b6ac373
commit 78573db17d
8 changed files with 186 additions and 7 deletions
@@ -0,0 +1,71 @@
<?php
namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Services\UpdatesCompanyModuleIsCreditTerm;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class UpdateCompanyCreditTermStatusLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Update Company Credit Term Status',
'message' => 'You have successfully updated Company Credit Term Status'
];
}
/** @var FetchesCompany */
private $fetchesCompany;
/** @var UpdatesCompanyModuleIsCreditTerm */
private $updatesCompanyModuleIsCreditTerm;
/**
* UpdateCompanyCreditTermStatusLogic constructor.
* @param FetchesCompany $fetchesCompany
* @param UpdatesCompanyModuleIsCreditTerm $updatesCompanyModuleIsCreditTerm
*/
public function __construct(FetchesCompany $fetchesCompany, UpdatesCompanyModuleIsCreditTerm $updatesCompanyModuleIsCreditTerm)
{
$this->fetchesCompany = $fetchesCompany;
$this->updatesCompanyModuleIsCreditTerm = $updatesCompanyModuleIsCreditTerm;
}
/**
* @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
{
$company = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$isCreditTerm = $company->companyModules()->first()->connections()->first()->is_credit_term;
if ($isCreditTerm == 1) {
$isCreditTerm = 0;
} else {
$isCreditTerm = 1;
}
$this->updatesCompanyModuleIsCreditTerm->execute($company->companyModules()->first()->connections()->first(), $isCreditTerm);
Log::info(Auth::user()->email." updated credit term status for customer with id: " .$request->route('id'). " to status " . $isCreditTerm);
$result = ['is_credit_term' => $isCreditTerm];
return $this->response(['data' => $result]);
}
}
@@ -0,0 +1,23 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\CompanyConnection;
class UpdatesCompanyModuleIsCreditTerm extends AbstractUpdateRecord
{
/**
* @param CompanyConnection $model
* @param int $isCreditTerm
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(CompanyConnection $model, int $isCreditTerm)
{
$model->is_credit_term = $isCreditTerm;
return $this->handler($model);
}
}
@@ -6,6 +6,7 @@ namespace App\Classes\Modules\Transactions\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Transactions\Services\ListsTransactions;
use App\Http\Resources\TransactionWithStorageResource;
use App\Http\Resources\TransactionResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
@@ -49,8 +50,10 @@ class ListTransactionsLogic extends AbstractControllerLogic
});
$item['storages'] = $filteredStorages;
}
return $this->collectionResponse(TransactionWithStorageResource::collection($query));
}
else{
return $this->collectionResponse(TransactionResource::collection($query));
}
return $this->collectionResponse(TransactionWithStorageResource::collection($query));
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Companies;
use App\Classes\Modules\Companies\ControllersLogic\UpdateCompanyCreditTermStatusLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateCompanyCreditTermStatusController
{
/**
* @param Request $request
* @param UpdateCompanyCreditTermStatusLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdateCompanyCreditTermStatusLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
+2 -1
View File
@@ -21,7 +21,7 @@ class CompanyResource extends JsonResource
{
$companyModule = $this->companyModules()->first();
$companyTypeArray = CompanyType::COMPANY_TYPE_ID;
return [
'id' => $this->id,
'hash_id' => Crypt::encryptString($this->id),
@@ -33,6 +33,7 @@ class CompanyResource extends JsonResource
'business_type' => (int) $this->business_type,
'status' => (int) $this->status,
'segments' => SegmentResource::collection($companyModule->connections()->first()->segments),
'is_credit_term' => $companyModule->connections()->first()->is_credit_term,
'contact' => new ContactResource ($this->when($this->has('contacts'), $this->contacts->first())),
'employee' => new UserResource($companyModule->employees()->first()),
'company_module' => new CompanyModuleResource($companyModule),
@@ -17,7 +17,7 @@
<change-customer-name-form-component :section="'customerProfileSection'" :data="item"></change-customer-name-form-component>
</modal-component>
<div class="font-heading fs-20 light">
{{item.name}}
{{item.name}}
<div class="btn btn-xs b-rad-none pointer requestModal d-inline rounded no-border hover-primary bg-transparent" data-type="changeCustomerName" >
<i class="fa fa-edit pointer fa-fw fs-15 m-l-5"></i>
</div>
@@ -35,6 +35,26 @@
</div>
</div>
</div>
<div class="row" v-if="$store.getters.isAdmin">
<div class="col">
<div class="row align-items-center">
<div class="col-auto">
<div v-if="item.is_credit_term === 1" class="font-heading fs-11 light">
Credit term customer: YES
</div>
<div v-else class="font-heading fs-11 light">
Credit term customer: NO
</div>
</div>
<div class="btn btn-xs b-rad-none pointer requestModal d-inline rounded no-border hover-primary bg-transparent" data-type="changeCreditTermCustomerStatus">
<i class="fa fa-edit pointer fa-fw fs-11 m-l-5"></i>
</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="changeCreditTermCustomerStatus">
<update-credit-term-status-form-component :section="'customerProfileSection'" :data="item" v-on:update="item.is_credit_term = $event.is_credit_term"></update-credit-term-status-form-component>
</modal-component>
</div>
</div>
</div>
</div>
</div>
</div>
@@ -95,13 +115,13 @@
</div>
<!-- <div class="row align-items-center">
<div class="col">
<h6 class="no-margin fs-12">WeChat ID</h6>
<h6 class="no-margin fs-12">WeChat ID</h6>
<h6 class="no-margin">{{item.contact.wechat_id}}</h6>
</div>
</div> -->
<div class="row align-items-center">
<div class="col">
<h6 class="no-margin fs-12">Company Type </h6>
<h6 class="no-margin fs-12">Company Type </h6>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="changeBusinessType">
<change-business-type-form-component :section="'customerProfileSection'" :data="item"></change-business-type-form-component>
</modal-component>
@@ -216,4 +236,4 @@
},
mixins: [componentHandler]
}
</script>
</script>
@@ -0,0 +1,40 @@
<template>
<div class="row" @keyup.enter="submitForm">
<div class="col bg-white padding-40 b-rad-lg">
<loading-component style="height: 50px; top: 0;" key="1" color="success" v-show="$store.getters.isLoading(section)"></loading-component>
<div class="row" v-show="!$store.getters.isLoading(section)">
<div class="col text-center">
<div class="row m-b-20">
<div class="col">
<h5 class="all-caps">Update Credit Term Customer</h5>
<div class="fs-11">Are you sure you want to update the credit term status for this company to <b>{{ data.is_credit_term === 1 ? 'NO' : 'YES' }}</b>?</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div data-dismiss="modal" class="btn btn-sm btn-default bg-master-lighter btn-block b-rad-none">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-danger w-100 btn-sm" @click="submit(route('api.company.update.creditterm.status', data.id), 'post', section, true, true)">Confirm</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import modalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
methods: {
successHandler(response){
console.log('update', response.payload.data);
this.$emit('update', response.payload.data);
this.closeModal();
this.formHandler();
},
},
mixins: [modalFormHandler]
}
</script>
+1
View File
@@ -9,6 +9,7 @@ Route::group(['prefix' => 'company', 'as' => 'company.', 'namespace' => 'Compani
Route::put('/update/{id}', 'UpdateCompanyController@update')->name('update');
Route::delete('/delete/{id}', 'DeleteCompanyController@destroy')->name('delete');
Route::put('/name-and-debtor/update/{id}', 'UpdateCompanyNameAndDebtorController@update')->name('update.nameAndDebtor');
Route::post('/update-credit-term/{id}', 'UpdateCompanyCreditTermStatusController@update')->name('update.creditterm.status');
Route::put('/type/update/{id}', 'UpdateCompanyTypeController@create')->name('update.type');
Route::post('/team/create', 'AddNewMemberController@create')->name('team.create');