Refactor bank selections

This commit is contained in:
David Bomba 2024-11-12 10:27:55 +11:00
parent 2448098f4c
commit 1321da9712
2 changed files with 98 additions and 13 deletions

View File

@ -26,7 +26,7 @@ class CreatePaymentMethodRequest extends FormRequest
/** @var Client $client */
$client = auth()->guard('contact')->user()->client;
$available_methods = collect($this->client->service()->getPaymentMethods(-1))
$available_methods = collect($client->service()->getPaymentMethods(-1))
->pluck('gateway_type_id')
->toArray();

View File

@ -734,33 +734,118 @@ class Client extends BaseModel implements HasLocalePreference
}
}
return null;
}
public function getBankTransferMethodType()
{
if ($this->currency()->code == 'USD') {
$pms = $this->service()->getPaymentMethods(-1);
if ($this->currency()->code == 'USD' && in_array(GatewayType::BANK_TRANSFER, array_column($pms, 'gateway_type_id'))) {
foreach ($pms as $pm) {
if ($pm['gateway_type_id'] == GatewayType::BANK_TRANSFER) {
$cg = CompanyGateway::query()->find($pm['company_gateway_id']);
if ($cg && ! property_exists($cg->fees_and_limits, GatewayType::BANK_TRANSFER)) { //@phpstan-ignore-line
$fees_and_limits = $cg->fees_and_limits;
$fees_and_limits->{GatewayType::BANK_TRANSFER} = new FeesAndLimits();
$cg->fees_and_limits = $fees_and_limits;
$cg->save();
}
if ($cg && $cg->fees_and_limits->{GatewayType::BANK_TRANSFER}->is_enabled) {
return GatewayType::BANK_TRANSFER;
}
}
}
}
if ($this->currency()->code == 'EUR') {
if ($this->currency()->code == 'EUR' && (in_array(GatewayType::BANK_TRANSFER, array_column($pms, 'gateway_type_id')) || in_array(GatewayType::SEPA, array_column($pms, 'gateway_type_id')) || in_array(GatewayType::DIRECT_DEBIT, array_column($pms, 'gateway_type_id')))) {
foreach ($pms as $pm) {
if ($pm['gateway_type_id'] == GatewayType::SEPA) {
$cg = CompanyGateway::query()->find($pm['company_gateway_id']);
if ($cg && $cg->fees_and_limits->{GatewayType::SEPA}->is_enabled) {
return GatewayType::SEPA;
}
//Special handler for GoCardless
if($this->currency()->code == 'CAD' && ($this->getBankTransferGateway()->gateway_key == 'b9886f9257f0c6ee7c302f1c74475f6c') ?? false) {
else if ($cg && $cg->fees_and_limits->{GatewayType::BANK_TRANSFER}->is_enabled) {
return GatewayType::BANK_TRANSFER;
}
else if ($cg && $cg->fees_and_limits->{GatewayType::DIRECT_DEBIT}->is_enabled) {
return GatewayType::DIRECT_DEBIT;
}
if (in_array($this->currency()->code, ['EUR', 'GBP','DKK','SEK','AUD','NZD','USD'])) {
return GatewayType::DIRECT_DEBIT;
}
}
}
if(in_array($this->currency()->code, ['CAD'])) {
if (in_array(GatewayType::DIRECT_DEBIT, array_column($pms, 'gateway_type_id'))) {
foreach ($pms as $pm) {
if ($pm['gateway_type_id'] == GatewayType::DIRECT_DEBIT) {
$cg = CompanyGateway::query()->find($pm['company_gateway_id']);
if ($cg && $cg->fees_and_limits->{GatewayType::DIRECT_DEBIT}->is_enabled) {
return GatewayType::DIRECT_DEBIT;
}
}
}
}
if (in_array($this->currency()->code, ['CAD','USD']) && in_array(GatewayType::ACSS, array_column($pms, 'gateway_type_id'))) {
// if ($this->currency()->code == 'CAD' && in_array(GatewayType::ACSS, array_column($pms, 'gateway_type_id'))) {
foreach ($pms as $pm) {
if ($pm['gateway_type_id'] == GatewayType::ACSS) {
$cg = CompanyGateway::query()->find($pm['company_gateway_id']);
if ($cg && $cg->fees_and_limits->{GatewayType::ACSS}->is_enabled) {
return GatewayType::ACSS;
}
}
}
}
if (in_array($this->currency()->code, ['GBP']) && in_array(GatewayType::BACS, array_column($pms, 'gateway_type_id'))) {
// if ($this->currency()->code == 'CAD' && in_array(GatewayType::ACSS, array_column($pms, 'gateway_type_id'))) {
foreach ($pms as $pm) {
if ($pm['gateway_type_id'] == GatewayType::BACS) {
$cg = CompanyGateway::query()->find($pm['company_gateway_id']);
if ($cg && $cg->fees_and_limits->{GatewayType::BACS}->is_enabled) {
return GatewayType::BACS;
}
}
}
}
return null;
// if ($this->currency()->code == 'USD') {
// return GatewayType::BANK_TRANSFER;
// }
// if ($this->currency()->code == 'EUR') {
// return GatewayType::SEPA;
// }
// //Special handler for GoCardless
// if($this->currency()->code == 'CAD' && ($this->getBankTransferGateway()->gateway_key == 'b9886f9257f0c6ee7c302f1c74475f6c') ?? false) {
// return GatewayType::DIRECT_DEBIT;
// }
// if (in_array($this->currency()->code, ['EUR', 'GBP','DKK','SEK','AUD','NZD','USD'])) {
// return GatewayType::DIRECT_DEBIT;
// }
// if(in_array($this->currency()->code, ['CAD'])) {
// return GatewayType::ACSS;
// }
}
public function getCurrencyCode(): string
{