diff --git a/app/Domains/Admin/Actions/CreateTenant/CreateTenantAction.php b/app/Domains/Admin/Actions/CreateTenant/CreateTenantAction.php index 9d20ed8..177c357 100644 --- a/app/Domains/Admin/Actions/CreateTenant/CreateTenantAction.php +++ b/app/Domains/Admin/Actions/CreateTenant/CreateTenantAction.php @@ -33,7 +33,7 @@ class CreateTenantAction $paymentMethodDefaults = PaymentMethod::defaults(); foreach (PaymentMethod::all() as $paymentMethod) { - $defaults = $paymentMethodDefaults[$paymentMethod->slug] ?? ['name' => $paymentMethod->slug, 'description' => null]; + $defaults = $paymentMethodDefaults[$paymentMethod->slug] ?? ['name' => $paymentMethod->slug, 'description' => null, 'configuration' => []]; AvailablePaymentMethod::create([ 'tenant' => $tenant->slug, @@ -41,6 +41,7 @@ class CreateTenantAction 'name' => $defaults['name'], 'description' => $defaults['description'], 'active' => true, + 'configuration' => PaymentMethod::sanitizeConfiguration($paymentMethod->slug, $defaults['configuration'] ?? []), ]); } diff --git a/app/Domains/Admin/Actions/UpdateTenantPayment/UpdateTenantPaymentAction.php b/app/Domains/Admin/Actions/UpdateTenantPayment/UpdateTenantPaymentAction.php index 7ec581a..343e883 100644 --- a/app/Domains/Admin/Actions/UpdateTenantPayment/UpdateTenantPaymentAction.php +++ b/app/Domains/Admin/Actions/UpdateTenantPayment/UpdateTenantPaymentAction.php @@ -2,6 +2,10 @@ namespace App\Domains\Admin\Actions\UpdateTenantPayment; +use App\Models\AvailablePaymentMethod; +use App\Models\PaymentMethod; +use App\Scopes\SiteScope; + class UpdateTenantPaymentAction { public function __construct(private UpdateTenantPaymentRequest $request) @@ -18,9 +22,41 @@ class UpdateTenantPaymentAction 'account_name' => $this->request->accountName, ]); + $this->syncTransferPaymentConfiguration(); + $response->success = true; - $response->message = 'Bezahldaten wurden gespeichert.'; + $response->message = 'IBAN-Informationen wurden gespeichert.'; return $response; } + + /** + * Übernimmt die eingegebenen IBAN-Daten direkt in die Tenant-Config der Überweisungs-Zahlungsart + * (Kontoinhaber/IBAN/BIC), damit sie nicht doppelt gepflegt werden müssen. Bestehende weitere + * Config-Werte (z.B. Symbol) bleiben erhalten. Der Ziel-Tenant kann ein verwalteter sein, daher + * ohne SiteScope explizit auf den Tenant-Slug gefiltert. + */ + private function syncTransferPaymentConfiguration(): void + { + $slug = PaymentMethod::PAYMENT_ACCOUNT_TRANSACTION; + + $method = AvailablePaymentMethod::withoutGlobalScope(SiteScope::class) + ->where('tenant', $this->request->tenant->slug) + ->where('slug', $slug) + ->first(); + + if ($method === null) { + return; + } + + $method->configuration = PaymentMethod::sanitizeConfiguration($slug, array_merge( + $method->configuration ?? [], + [ + 'account_owner' => $this->request->accountName, + 'iban' => $this->request->accountIban, + 'bic' => $this->request->accountBic, + ], + )); + $method->save(); + } } diff --git a/app/Domains/Admin/Views/Partials/TenantPaymentMethods.vue b/app/Domains/Admin/Views/Partials/TenantPaymentMethods.vue index ac8d306..1f60daa 100644 --- a/app/Domains/Admin/Views/Partials/TenantPaymentMethods.vue +++ b/app/Domains/Admin/Views/Partials/TenantPaymentMethods.vue @@ -2,6 +2,8 @@ import {computed, ref} from 'vue'; import FullScreenModal from "../../../../Views/Components/FullScreenModal.vue"; import TextEditor from "../../../../Views/Components/TextEditor.vue"; +import RichSelectBox from "../../../../Views/Components/RichSelectBox.vue"; +import {PAYMENT_METHOD_ICONS} from "../../../../../resources/js/constants/paymentMethodIcons.js"; import {useAjax} from "../../../../../resources/js/components/ajaxHandler.js"; import {toast} from "vue3-toastify"; @@ -90,15 +92,18 @@ async function save() {