From db078502d91d47a14219a1ce32ea5e6ef722d8c8 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Fri, 15 Aug 2025 00:16:24 +0800 Subject: [PATCH 1/2] Allow admin to delete a default bank --- .../ControllersLogic/DeleteBankLogic.php | 29 +++++++++++++------ .../elements/CompanyBankAccountComponent.vue | 12 +++++++- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/app/Classes/Modules/Banks/ControllersLogic/DeleteBankLogic.php b/app/Classes/Modules/Banks/ControllersLogic/DeleteBankLogic.php index 37c80843..871520ae 100644 --- a/app/Classes/Modules/Banks/ControllersLogic/DeleteBankLogic.php +++ b/app/Classes/Modules/Banks/ControllersLogic/DeleteBankLogic.php @@ -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([]); } - -} \ No newline at end of file +} diff --git a/resources/assets/vue/components/companies/elements/CompanyBankAccountComponent.vue b/resources/assets/vue/components/companies/elements/CompanyBankAccountComponent.vue index 1b911592..615e3f2f 100644 --- a/resources/assets/vue/components/companies/elements/CompanyBankAccountComponent.vue +++ b/resources/assets/vue/components/companies/elements/CompanyBankAccountComponent.vue @@ -51,6 +51,13 @@ +
+ +
@@ -58,6 +65,9 @@ + + + @@ -75,4 +85,4 @@ }, mixins: [componentHandler] } - \ No newline at end of file + From 4dca92f628f4e1c58867eeab7854a83ddab11fd7 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Fri, 15 Aug 2025 02:11:35 +0800 Subject: [PATCH 2/2] Allow admin to delete a default bank and set a bank as default --- .../Constants/BankAccountType.php | 25 +++++++++++++++++++ app/Http/Resources/BankResource.php | 2 ++ .../forms/DeleteBankAccountFormComponent.vue | 3 ++- .../elements/CompanyBankAccountComponent.vue | 17 ++++++++++--- 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/app/Classes/ValueObjects/Constants/BankAccountType.php b/app/Classes/ValueObjects/Constants/BankAccountType.php index 0393091f..8885f2db 100644 --- a/app/Classes/ValueObjects/Constants/BankAccountType.php +++ b/app/Classes/ValueObjects/Constants/BankAccountType.php @@ -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'; + } } diff --git a/app/Http/Resources/BankResource.php b/app/Http/Resources/BankResource.php index f3de3038..5e6e2e17 100644 --- a/app/Http/Resources/BankResource.php +++ b/app/Http/Resources/BankResource.php @@ -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), ]; } } diff --git a/resources/assets/vue/components/banks/forms/DeleteBankAccountFormComponent.vue b/resources/assets/vue/components/banks/forms/DeleteBankAccountFormComponent.vue index 3414c75f..88fccb2b 100644 --- a/resources/assets/vue/components/banks/forms/DeleteBankAccountFormComponent.vue +++ b/resources/assets/vue/components/banks/forms/DeleteBankAccountFormComponent.vue @@ -8,6 +8,7 @@

Are you Sure?

Are you sure you want to delete this bank account?
+
Note to Admin: Always make sure that Account Type 'EXTERNAL' has a default set before or after delete
@@ -30,4 +31,4 @@ mixins: [componentHandler, ModalFormHandler] } - \ No newline at end of file + diff --git a/resources/assets/vue/components/companies/elements/CompanyBankAccountComponent.vue b/resources/assets/vue/components/companies/elements/CompanyBankAccountComponent.vue index 615e3f2f..2a27dcb6 100644 --- a/resources/assets/vue/components/companies/elements/CompanyBankAccountComponent.vue +++ b/resources/assets/vue/components/companies/elements/CompanyBankAccountComponent.vue @@ -24,6 +24,10 @@
{{item.holder_name}}
{{item.type === 3 ? item.account_no : item.account_no.replace(/[^\dA-Z]/g, '').replace(/(.{4})/g, '$1 ').trim() }}
+
+
Account Type
+
{{item.bank_account_type_label}}
+
@@ -37,7 +41,7 @@
-
+ +
+
+
Set As Default
+
Set As Default
+
@@ -68,6 +76,9 @@ + + +