Merge branch 'dillon/90-e-invoice-e' into vapor/development

This commit is contained in:
Dillon Ngo
2025-08-15 02:11:55 +08:00
5 changed files with 72 additions and 12 deletions
@@ -8,9 +8,10 @@ use App\Classes\Modules\Banks\Services\FetchesBank;
use App\Classes\Modules\Banks\Standards\Rules\CanDeleteBank;
use App\Classes\Modules\Banks\Services\DeletesBank;
use App\Classes\Modules\Banks\Services\CreatesBankLog;
use App\Http\Resources\BankResource;
use App\Classes\ValueObjects\Constants\RoleTypes;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class DeleteBankLogic extends AbstractControllerLogic
{
@@ -66,20 +67,30 @@ class DeleteBankLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
$this->canDeleteBank->passes();
$bank = $this->fetchesBank->execute(['id' => $request->route('id')]);
$proceed = false;
if($bank->default){
throw new RequestValidationException('You can\'t delete bank account when it set to default');
$isAuthorized = in_array(Auth::user()->type, RoleTypes::ADMIN_ROLES);
if($isAuthorized) {
$banks = $bank->company->banks()->where('default', 1)->get();
if(count($banks) > 1) {
//User should be able to delete themselves, but sometimes there are more than 1 bank set as default (different type, why??!), we need to allow admin to do the delete
$proceed = true;
}
else{
$proceed = false;
}
}
if(!$proceed){
throw new RequestValidationException('You can\'t delete bank account when it set to default');
}
}
$bank = $this->deletesBank->execute($bank);
// $bankLog = $this->createsBankLog->execute($bank);
// $bankLog = $this->createsBankLog->execute($bank);
return $this->response([]);
}
}
}
@@ -12,4 +12,29 @@ final class BankAccountType {
public const ALIPAY_RECIPIENT = 4;
/**
* Get all account type labels.
*
* @return array
*/
public static function labels(): array
{
return [
self::PERSONAL => 'PERSONAL',
self::EXTERNAL => 'EXTERNAL',
self::ALIPAY_1688 => 'ALIPAY_1688',
self::ALIPAY_RECIPIENT => 'ALIPAY_RECIPIENT',
];
}
/**
* Get label for a specific account type.
*
* @param int|string $type
* @return string
*/
public static function label($type): string
{
return self::labels()[(int) $type] ?? 'Unknown';
}
}
+2
View File
@@ -2,6 +2,7 @@
namespace App\Http\Resources;
use App\Classes\ValueObjects\Constants\BankAccountType;
use Illuminate\Http\Resources\Json\JsonResource;
class BankResource extends JsonResource
@@ -27,6 +28,7 @@ class BankResource extends JsonResource
'country_id' => $this->country_id,
'default' => $this->default,
'status' => $this->status,
'bank_account_type_label' => BankAccountType::label($this->type),
];
}
}
@@ -8,6 +8,7 @@
<div class="col">
<h3 class="all-caps">Are you Sure?</h3>
<div class="fs-11">Are you sure you want to delete this bank account?</div>
<div class="fs-11 text-danger" v-if="$store.getters.isAdmin">Note to Admin: Always make sure that Account Type 'EXTERNAL' has a default set before or after delete</div>
</div>
</div>
<div class="row">
@@ -30,4 +31,4 @@
mixins: [componentHandler, ModalFormHandler]
}
</script>
</script>
@@ -24,6 +24,10 @@
<div class="font-heading fs-10">{{item.holder_name}}</div>
<div class="font-heading fs-11 text-complete m-b-5">{{item.type === 3 ? item.account_no : item.account_no.replace(/[^\dA-Z]/g, '').replace(/(.{4})/g, '$1 ').trim() }}</div>
</div>
<div class="col">
<div class="font-heading fs-10">Account Type</div>
<div class="font-heading fs-11">{{item.bank_account_type_label}}</div>
</div>
<div class="col-auto b-l b-grey">
<div class="row h-100">
<div class="col">
@@ -37,7 +41,7 @@
</div>
</a>
</div>
<div class="col-auto m-l-10 d-flex align-items-center">
<!-- <div class="col-auto m-l-10 d-flex align-items-center">
<div class="row align-items-center">
<div class="col-auto text-right p-t-5 p-b-5" :class="[{'bg-warning-lighter': item.default}, {'bg-master-light': !item.default}]">
<div data-toggle="tooltip" class="row align-items-center justify-content-center" :class="{'link': !item.default}">
@@ -50,6 +54,17 @@
<small class="fs-12 all-caps bold" :class="[{'text-warning': item.default}, {'text-master': !item.default}]">Default Bank</small>
</div>
</div>
</div> -->
<div class="col-auto m-l-10 d-flex align-items-center requestModal" data-type="deleteBankModal">
<div data-toggle="tooltip" title="" data-placement="bottom" class="row link align-items-center justify-content-center" data-original-title="Edit">
<div class="btn btn-xs btn-outline-danger b-rad-none m-r-5 requestModalol">
<i class="fa fa-times"></i>
</div>
</div>
</div>
<div class="col-auto m-l-10 d-flex align-items-center">
<div class="btn btn-xs btn-outline-success b-rad-none pointer requestModal" data-type="defaultBankModal" v-if="item.company_business_type !== 1 && !item.default">Set As Default</div>
<div class="bg-master-lighter p-t-10 p-b-10 p-r-15 p-l-15 muted hint-text fs-10" v-if="item.company_business_type !== 1 && item.default">Set As Default</div>
</div>
</div>
</div>
@@ -58,6 +73,12 @@
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="editBankModal">
<edit-bank-form-component :data="item" :section="section" :company_id="company_id"></edit-bank-form-component>
</modal-component>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="deleteBankModal">
<delete-bank-account-form-component :data="item" :section="section" class="text-center"></delete-bank-account-form-component>
</modal-component>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="defaultBankModal">
<set-bank-account-default-form-component :data="item" :section="section" class="text-center"></set-bank-account-default-form-component>
</modal-component>
</div>
</template>
@@ -75,4 +96,4 @@
},
mixins: [componentHandler]
}
</script>
</script>