From 9eb4ad2019467af72fbb330cd6ee4e958df7799e Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Sun, 11 Jun 2023 12:44:18 +0300 Subject: [PATCH] Choose template to use when emailing multiple invoices at once #472 --- lib/data/repositories/invoice_repository.dart | 2 +- lib/redux/invoice/invoice_actions.dart | 106 ++++++++---------- lib/redux/invoice/invoice_middleware.dart | 6 +- 3 files changed, 51 insertions(+), 63 deletions(-) diff --git a/lib/data/repositories/invoice_repository.dart b/lib/data/repositories/invoice_repository.dart index 657c10f01..31b3c5755 100644 --- a/lib/data/repositories/invoice_repository.dart +++ b/lib/data/repositories/invoice_repository.dart @@ -68,7 +68,7 @@ class InvoiceRepository { data: json.encode({ 'ids': ids, 'action': action.toApiParam(), - if (template != null) 'email_type': 'email_template_$template', + if (template != null) 'email_type': '$template', })); final InvoiceListResponse invoiceResponse = diff --git a/lib/redux/invoice/invoice_actions.dart b/lib/redux/invoice/invoice_actions.dart index 34d2c9579..0249d2a2a 100644 --- a/lib/redux/invoice/invoice_actions.dart +++ b/lib/redux/invoice/invoice_actions.dart @@ -670,68 +670,52 @@ void handleInvoiceAction(BuildContext context, List invoices, ..parameters.entityType = EntityType.invoice.apiValue ..parameters.entityId = invoice.id)); } else { - confirmCallback( - context: context, - message: localization.bulkEmailInvoices, - callback: (_) { - store.dispatch(BulkEmailInvoicesRequest( - completer: snackBarCompleter( - context, - invoiceIds.length == 1 - ? localization.emailedInvoice - : localization.emailedInvoices), - invoiceIds: invoiceIds, - )); - }); + final template = await showDialog( + context: context, + builder: (context) { + final settings = getClientSettings(state, client); + final templates = { + EmailTemplate.invoice: localization.initialEmail, + EmailTemplate.reminder1: localization.firstReminder, + EmailTemplate.reminder2: localization.secondReminder, + EmailTemplate.reminder3: localization.thirdReminder, + EmailTemplate.reminder_endless: localization.endlessReminder, + if ((settings.emailSubjectCustom1 ?? '').isNotEmpty) + EmailTemplate.custom1: localization.firstCustom, + if ((settings.emailSubjectCustom2 ?? '').isNotEmpty) + EmailTemplate.custom2: localization.secondCustom, + if ((settings.emailSubjectCustom3 ?? '').isNotEmpty) + EmailTemplate.custom3: localization.thirdCustom, + }; + return SimpleDialog( + title: Text( + invoiceIds.length == 1 + ? localization.emailInvoice + : localization.emailCountInvoices + .replaceFirst(':count', '${invoiceIds.length}'), + ), + children: templates.keys + .map((template) => SimpleDialogOption( + child: Text(templates[template]), + onPressed: () { + Navigator.of(context).pop(template); + }, + )) + .toList(), + ); + }, + ); - if (false) { - final template = await showDialog( - context: context, - builder: (context) { - final settings = getClientSettings(state, client); - final templates = { - EmailTemplate.invoice: localization.initialEmail, - EmailTemplate.reminder1: localization.firstReminder, - EmailTemplate.reminder2: localization.secondReminder, - EmailTemplate.reminder3: localization.thirdReminder, - EmailTemplate.reminder_endless: localization.endlessReminder, - if ((settings.emailSubjectCustom1 ?? '').isNotEmpty) - EmailTemplate.custom1: localization.firstCustom, - if ((settings.emailSubjectCustom2 ?? '').isNotEmpty) - EmailTemplate.custom2: localization.secondCustom, - if ((settings.emailSubjectCustom3 ?? '').isNotEmpty) - EmailTemplate.custom3: localization.thirdCustom, - }; - return SimpleDialog( - title: Text( - invoiceIds.length == 1 - ? localization.emailInvoice - : localization.emailCountInvoices - .replaceFirst(':count', '${invoiceIds.length}'), - ), - children: templates.keys - .map((template) => SimpleDialogOption( - child: Text(templates[template]), - onPressed: () { - Navigator.of(context).pop(template); - }, - )) - .toList(), - ); - }, - ); - - if (template != null) { - store.dispatch(BulkEmailInvoicesRequest( - completer: snackBarCompleter( - navigatorKey.currentContext, - invoiceIds.length == 1 - ? localization.emailedInvoice - : localization.emailedInvoices), - invoiceIds: invoiceIds, - template: template, - )); - } + if (template != null) { + store.dispatch(BulkEmailInvoicesRequest( + completer: snackBarCompleter( + navigatorKey.currentContext, + invoiceIds.length == 1 + ? localization.emailedInvoice + : localization.emailedInvoices), + invoiceIds: invoiceIds, + template: template, + )); } } break; diff --git a/lib/redux/invoice/invoice_middleware.dart b/lib/redux/invoice/invoice_middleware.dart index 71d263861..9b8615de5 100644 --- a/lib/redux/invoice/invoice_middleware.dart +++ b/lib/redux/invoice/invoice_middleware.dart @@ -385,7 +385,11 @@ Middleware _bulkEmailInvoices(InvoiceRepository repository) { repository .bulkAction( - store.state.credentials, action.invoiceIds, EntityAction.sendEmail) + store.state.credentials, + action.invoiceIds, + EntityAction.sendEmail, + template: action.template, + ) .then((List invoices) { store.dispatch(BulkEmailInvoicesSuccess(invoices)); if (action.completer != null) {