From 1870dce5ec2fae042def7b9765079d0611b9c411 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Tue, 2 Aug 2022 11:26:04 +0300 Subject: [PATCH] Support setting edit payment form send email at client/group level --- lib/data/models/payment_model.dart | 5 ++++- lib/data/models/settings_model.dart | 4 ++++ lib/redux/client/client_actions.dart | 4 ++-- lib/redux/credit/credit_actions.dart | 13 +++++++------ lib/redux/invoice/invoice_actions.dart | 13 +++++++------ lib/ui/settings/company_details.dart | 19 +++++++++---------- 6 files changed, 33 insertions(+), 25 deletions(-) diff --git a/lib/data/models/payment_model.dart b/lib/data/models/payment_model.dart index 45b78037d..89211de78 100644 --- a/lib/data/models/payment_model.dart +++ b/lib/data/models/payment_model.dart @@ -7,6 +7,7 @@ import 'package:built_value/serializer.dart'; import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; +import 'package:invoiceninja_flutter/redux/client/client_selectors.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/strings.dart'; @@ -75,6 +76,8 @@ abstract class PaymentEntity extends Object with BaseEntity, SelectableEntity, BelongsToClient implements Built { factory PaymentEntity({String id, AppState state, ClientEntity client}) { + final settings = getClientSettings(state, client); + return _$PaymentEntity._( id: id ?? BaseEntity.nextId, isChanged: false, @@ -109,7 +112,7 @@ abstract class PaymentEntity extends Object vendorId: '', projectId: '', number: '', - sendEmail: state?.company?.settings?.clientManualPaymentNotification, + sendEmail: settings.clientManualPaymentNotification ?? false, companyGatewayId: '', clientContactId: '', currencyId: '', diff --git a/lib/data/models/settings_model.dart b/lib/data/models/settings_model.dart index aac116e0d..bcc966606 100644 --- a/lib/data/models/settings_model.dart +++ b/lib/data/models/settings_model.dart @@ -84,6 +84,10 @@ abstract class SettingsEntity defaultTaxName3: clientSettings?.defaultTaxName3 ?? groupSettings?.defaultTaxName3 ?? companySettings?.defaultTaxName3, + clientManualPaymentNotification: + clientSettings?.clientManualPaymentNotification ?? + groupSettings?.clientManualPaymentNotification ?? + companySettings?.clientManualPaymentNotification, ); } diff --git a/lib/redux/client/client_actions.dart b/lib/redux/client/client_actions.dart index 5b6c70cfe..8439bf6c4 100644 --- a/lib/redux/client/client_actions.dart +++ b/lib/redux/client/client_actions.dart @@ -428,8 +428,8 @@ void handleClientAction( case EntityAction.newPayment: createEntity( context: context, - entity: - PaymentEntity(state: state).rebuild((b) => b.clientId = client.id), + entity: PaymentEntity(state: state, client: client) + .rebuild((b) => b.clientId = client.id), ); break; case EntityAction.newProject: diff --git a/lib/redux/credit/credit_actions.dart b/lib/redux/credit/credit_actions.dart index a49312d87..427dd670d 100644 --- a/lib/redux/credit/credit_actions.dart +++ b/lib/redux/credit/credit_actions.dart @@ -586,12 +586,13 @@ Future handleCreditAction( case EntityAction.applyCredit: createEntity( context: context, - entity: PaymentEntity(state: state).rebuild((b) => b - ..typeId = kPaymentTypeCredit - ..clientId = credit.clientId - ..credits.addAll(credits - .map((credit) => PaymentableEntity.fromCredit(credit)) - .toList())), + entity: PaymentEntity( + state: state, client: state.clientState.get(credit.clientId)) + .rebuild((b) => b + ..typeId = kPaymentTypeCredit + ..credits.addAll(credits + .map((credit) => PaymentableEntity.fromCredit(credit)) + .toList())), ); break; case EntityAction.download: diff --git a/lib/redux/invoice/invoice_actions.dart b/lib/redux/invoice/invoice_actions.dart index 364b20add..ff7966c56 100644 --- a/lib/redux/invoice/invoice_actions.dart +++ b/lib/redux/invoice/invoice_actions.dart @@ -660,12 +660,13 @@ void handleInvoiceAction(BuildContext context, List invoices, case EntityAction.newPayment: createEntity( context: context, - entity: PaymentEntity(state: state).rebuild((b) => b - ..clientId = invoice.clientId - ..invoices.addAll(invoices - .where((invoice) => !(invoice as InvoiceEntity).isPaid) - .map((invoice) => PaymentableEntity.fromInvoice(invoice)) - .toList())), + entity: PaymentEntity( + state: state, client: state.clientState.get(invoice.clientId)) + .rebuild((b) => b + ..invoices.addAll(invoices + .where((invoice) => !(invoice as InvoiceEntity).isPaid) + .map((invoice) => PaymentableEntity.fromInvoice(invoice)) + .toList())), ); break; case EntityAction.download: diff --git a/lib/ui/settings/company_details.dart b/lib/ui/settings/company_details.dart index e6c9186b8..0b3e1063e 100644 --- a/lib/ui/settings/company_details.dart +++ b/lib/ui/settings/company_details.dart @@ -626,16 +626,15 @@ class _CompanyDetailsState extends State FormCard( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - if (!state.settingsUIState.isFiltered) - BoolDropdownButton( - value: settings.clientManualPaymentNotification, - onChanged: (value) => viewModel.onSettingsChanged( - settings.rebuild((b) => - b..clientManualPaymentNotification = value)), - label: localization.manualPaymentEmail, - helpLabel: localization.emailReceipt, - iconData: Icons.email, - ), + BoolDropdownButton( + value: settings.clientManualPaymentNotification, + onChanged: (value) => viewModel.onSettingsChanged( + settings.rebuild((b) => + b..clientManualPaymentNotification = value)), + label: localization.manualPaymentEmail, + helpLabel: localization.emailReceipt, + iconData: Icons.email, + ), BoolDropdownButton( value: settings.clientOnlinePaymentNotification, onChanged: (value) => viewModel.onSettingsChanged(