diff --git a/lib/data/models/invoice_model.dart b/lib/data/models/invoice_model.dart index 11f486517..dbfd3ee7d 100644 --- a/lib/data/models/invoice_model.dart +++ b/lib/data/models/invoice_model.dart @@ -169,7 +169,8 @@ abstract class InvoiceEntity extends Object lastSentDate: '', nextSendDate: '', frequencyId: kFrequencyMonthly, - remainingCycles: 0, + remainingCycles: -1, + dueDateDays: '', ); } diff --git a/lib/ui/invoice/edit/invoice_edit_desktop.dart b/lib/ui/invoice/edit/invoice_edit_desktop.dart index 2dc8e2720..ef2bebf68 100644 --- a/lib/ui/invoice/edit/invoice_edit_desktop.dart +++ b/lib/ui/invoice/edit/invoice_edit_desktop.dart @@ -270,6 +270,29 @@ class InvoiceEditDesktopState extends State .toList() ], ), + AppDropdownButton( + labelText: localization.dueDate, + value: invoice.dueDateDays ?? '', + onChanged: (dynamic value) => viewModel.onChanged( + invoice.rebuild((b) => b..dueDateDays = value)), + items: [ + DropdownMenuItem( + child: Text(localization.usePaymentTerms), + value: 'terms', + ), + ...List.generate(31, (i) => i + 1) + .map((value) => DropdownMenuItem( + child: Text(value == 1 + ? localization.firstDayOfTheMonth + : value == 31 + ? localization.lastDayOfTheMonth + : localization.dayCount.replaceFirst( + ':count', '$value')), + value: '$value', + )) + .toList() + ], + ), ] else ...[ DatePicker( validator: (String val) => val.trim().isEmpty diff --git a/lib/utils/i18n.dart b/lib/utils/i18n.dart index 75902d7e9..49b3e6f4a 100644 --- a/lib/utils/i18n.dart +++ b/lib/utils/i18n.dart @@ -15,6 +15,10 @@ mixin LocalizationsProvider on LocaleCodeAware { static final Map> _localizedValues = { 'en': { // STARTER: lang key - do not remove comment + 'day_count': 'Day :count', + 'first_day_of_the_month': 'First Day of the Month', + 'last_day_of_the_month': 'Last Day of the Month', + 'use_payment_terms': 'Use Payment Terms', 'endless': 'Endless', 'next_send_date': 'Next Send Date', 'remaining_cycles': 'Remaining Cycles', @@ -4545,6 +4549,17 @@ mixin LocalizationsProvider on LocaleCodeAware { String get endless => _localizedValues[localeCode]['endless'] ?? ''; + String get usePaymentTerms => + _localizedValues[localeCode]['use_payment_terms'] ?? ''; + + String get firstDayOfTheMonth => + _localizedValues[localeCode]['first_day_of_the_month'] ?? ''; + + String get lastDayOfTheMonth => + _localizedValues[localeCode]['last_day_of_the_month'] ?? ''; + + String get dayCount => _localizedValues[localeCode]['day_count'] ?? ''; + String lookup(String key) { final lookupKey = toSnakeCase(key);