diff --git a/lib/data/models/settings_model.dart b/lib/data/models/settings_model.dart index de9a10eab..fc028206c 100644 --- a/lib/data/models/settings_model.dart +++ b/lib/data/models/settings_model.dart @@ -369,6 +369,18 @@ abstract class SettingsEntity @BuiltValueField(wireName: 'credit_design_id') String? get defaultCreditDesignId; + @BuiltValueField(wireName: 'delivery_note_design_id') + String? get defaultDeliveryNoteDesignId; + + @BuiltValueField(wireName: 'statement_design_id') + String? get defaultStatementDesignId; + + @BuiltValueField(wireName: 'payment_receipt_design_id') + String? get defaultPaymentReceiptDesignId; + + @BuiltValueField(wireName: 'payment_refund_design_id') + String? get defaultPaymentRefundDesignId; + @BuiltValueField(wireName: 'invoice_footer') String? get defaultInvoiceFooter; diff --git a/lib/data/models/settings_model.g.dart b/lib/data/models/settings_model.g.dart index cfc995266..54822b1bf 100644 --- a/lib/data/models/settings_model.g.dart +++ b/lib/data/models/settings_model.g.dart @@ -559,6 +559,34 @@ class _$SettingsEntitySerializer ..add(serializers.serialize(value, specifiedType: const FullType(String))); } + value = object.defaultDeliveryNoteDesignId; + if (value != null) { + result + ..add('delivery_note_design_id') + ..add(serializers.serialize(value, + specifiedType: const FullType(String))); + } + value = object.defaultStatementDesignId; + if (value != null) { + result + ..add('statement_design_id') + ..add(serializers.serialize(value, + specifiedType: const FullType(String))); + } + value = object.defaultPaymentReceiptDesignId; + if (value != null) { + result + ..add('payment_receipt_design_id') + ..add(serializers.serialize(value, + specifiedType: const FullType(String))); + } + value = object.defaultPaymentRefundDesignId; + if (value != null) { + result + ..add('payment_refund_design_id') + ..add(serializers.serialize(value, + specifiedType: const FullType(String))); + } value = object.defaultInvoiceFooter; if (value != null) { result @@ -1873,6 +1901,22 @@ class _$SettingsEntitySerializer result.defaultCreditDesignId = serializers.deserialize(value, specifiedType: const FullType(String)) as String?; break; + case 'delivery_note_design_id': + result.defaultDeliveryNoteDesignId = serializers.deserialize(value, + specifiedType: const FullType(String)) as String?; + break; + case 'statement_design_id': + result.defaultStatementDesignId = serializers.deserialize(value, + specifiedType: const FullType(String)) as String?; + break; + case 'payment_receipt_design_id': + result.defaultPaymentReceiptDesignId = serializers.deserialize(value, + specifiedType: const FullType(String)) as String?; + break; + case 'payment_refund_design_id': + result.defaultPaymentRefundDesignId = serializers.deserialize(value, + specifiedType: const FullType(String)) as String?; + break; case 'invoice_footer': result.defaultInvoiceFooter = serializers.deserialize(value, specifiedType: const FullType(String)) as String?; @@ -2677,6 +2721,14 @@ class _$SettingsEntity extends SettingsEntity { @override final String? defaultCreditDesignId; @override + final String? defaultDeliveryNoteDesignId; + @override + final String? defaultStatementDesignId; + @override + final String? defaultPaymentReceiptDesignId; + @override + final String? defaultPaymentRefundDesignId; + @override final String? defaultInvoiceFooter; @override final String? defaultTaxName1; @@ -3041,6 +3093,10 @@ class _$SettingsEntity extends SettingsEntity { this.defaultInvoiceDesignId, this.defaultQuoteDesignId, this.defaultCreditDesignId, + this.defaultDeliveryNoteDesignId, + this.defaultStatementDesignId, + this.defaultPaymentReceiptDesignId, + this.defaultPaymentRefundDesignId, this.defaultInvoiceFooter, this.defaultTaxName1, this.defaultTaxRate1, @@ -3274,6 +3330,10 @@ class _$SettingsEntity extends SettingsEntity { defaultInvoiceDesignId == other.defaultInvoiceDesignId && defaultQuoteDesignId == other.defaultQuoteDesignId && defaultCreditDesignId == other.defaultCreditDesignId && + defaultDeliveryNoteDesignId == other.defaultDeliveryNoteDesignId && + defaultStatementDesignId == other.defaultStatementDesignId && + defaultPaymentReceiptDesignId == other.defaultPaymentReceiptDesignId && + defaultPaymentRefundDesignId == other.defaultPaymentRefundDesignId && defaultInvoiceFooter == other.defaultInvoiceFooter && defaultTaxName1 == other.defaultTaxName1 && defaultTaxRate1 == other.defaultTaxRate1 && @@ -3505,6 +3565,10 @@ class _$SettingsEntity extends SettingsEntity { _$hash = $jc(_$hash, defaultInvoiceDesignId.hashCode); _$hash = $jc(_$hash, defaultQuoteDesignId.hashCode); _$hash = $jc(_$hash, defaultCreditDesignId.hashCode); + _$hash = $jc(_$hash, defaultDeliveryNoteDesignId.hashCode); + _$hash = $jc(_$hash, defaultStatementDesignId.hashCode); + _$hash = $jc(_$hash, defaultPaymentReceiptDesignId.hashCode); + _$hash = $jc(_$hash, defaultPaymentRefundDesignId.hashCode); _$hash = $jc(_$hash, defaultInvoiceFooter.hashCode); _$hash = $jc(_$hash, defaultTaxName1.hashCode); _$hash = $jc(_$hash, defaultTaxRate1.hashCode); @@ -3731,6 +3795,10 @@ class _$SettingsEntity extends SettingsEntity { ..add('defaultInvoiceDesignId', defaultInvoiceDesignId) ..add('defaultQuoteDesignId', defaultQuoteDesignId) ..add('defaultCreditDesignId', defaultCreditDesignId) + ..add('defaultDeliveryNoteDesignId', defaultDeliveryNoteDesignId) + ..add('defaultStatementDesignId', defaultStatementDesignId) + ..add('defaultPaymentReceiptDesignId', defaultPaymentReceiptDesignId) + ..add('defaultPaymentRefundDesignId', defaultPaymentRefundDesignId) ..add('defaultInvoiceFooter', defaultInvoiceFooter) ..add('defaultTaxName1', defaultTaxName1) ..add('defaultTaxRate1', defaultTaxRate1) @@ -4268,6 +4336,29 @@ class SettingsEntityBuilder set defaultCreditDesignId(String? defaultCreditDesignId) => _$this._defaultCreditDesignId = defaultCreditDesignId; + String? _defaultDeliveryNoteDesignId; + String? get defaultDeliveryNoteDesignId => + _$this._defaultDeliveryNoteDesignId; + set defaultDeliveryNoteDesignId(String? defaultDeliveryNoteDesignId) => + _$this._defaultDeliveryNoteDesignId = defaultDeliveryNoteDesignId; + + String? _defaultStatementDesignId; + String? get defaultStatementDesignId => _$this._defaultStatementDesignId; + set defaultStatementDesignId(String? defaultStatementDesignId) => + _$this._defaultStatementDesignId = defaultStatementDesignId; + + String? _defaultPaymentReceiptDesignId; + String? get defaultPaymentReceiptDesignId => + _$this._defaultPaymentReceiptDesignId; + set defaultPaymentReceiptDesignId(String? defaultPaymentReceiptDesignId) => + _$this._defaultPaymentReceiptDesignId = defaultPaymentReceiptDesignId; + + String? _defaultPaymentRefundDesignId; + String? get defaultPaymentRefundDesignId => + _$this._defaultPaymentRefundDesignId; + set defaultPaymentRefundDesignId(String? defaultPaymentRefundDesignId) => + _$this._defaultPaymentRefundDesignId = defaultPaymentRefundDesignId; + String? _defaultInvoiceFooter; String? get defaultInvoiceFooter => _$this._defaultInvoiceFooter; set defaultInvoiceFooter(String? defaultInvoiceFooter) => @@ -5047,6 +5138,10 @@ class SettingsEntityBuilder _defaultInvoiceDesignId = $v.defaultInvoiceDesignId; _defaultQuoteDesignId = $v.defaultQuoteDesignId; _defaultCreditDesignId = $v.defaultCreditDesignId; + _defaultDeliveryNoteDesignId = $v.defaultDeliveryNoteDesignId; + _defaultStatementDesignId = $v.defaultStatementDesignId; + _defaultPaymentReceiptDesignId = $v.defaultPaymentReceiptDesignId; + _defaultPaymentRefundDesignId = $v.defaultPaymentRefundDesignId; _defaultInvoiceFooter = $v.defaultInvoiceFooter; _defaultTaxName1 = $v.defaultTaxName1; _defaultTaxRate1 = $v.defaultTaxRate1; @@ -5290,6 +5385,10 @@ class SettingsEntityBuilder defaultInvoiceDesignId: defaultInvoiceDesignId, defaultQuoteDesignId: defaultQuoteDesignId, defaultCreditDesignId: defaultCreditDesignId, + defaultDeliveryNoteDesignId: defaultDeliveryNoteDesignId, + defaultStatementDesignId: defaultStatementDesignId, + defaultPaymentReceiptDesignId: defaultPaymentReceiptDesignId, + defaultPaymentRefundDesignId: defaultPaymentRefundDesignId, defaultInvoiceFooter: defaultInvoiceFooter, defaultTaxName1: defaultTaxName1, defaultTaxRate1: defaultTaxRate1, diff --git a/lib/ui/app/forms/design_picker.dart b/lib/ui/app/forms/design_picker.dart index cf7c5ecb7..fc0c5c62a 100644 --- a/lib/ui/app/forms/design_picker.dart +++ b/lib/ui/app/forms/design_picker.dart @@ -15,11 +15,13 @@ class DesignPicker extends StatelessWidget { required this.onSelected, this.label, this.initialValue, + this.showBlank = false, }); - final Function(DesignEntity) onSelected; + final Function(DesignEntity?) onSelected; final String? label; final String? initialValue; + final bool showBlank; @override Widget build(BuildContext context) { @@ -29,6 +31,7 @@ class DesignPicker extends StatelessWidget { final designState = state.designState; return AppDropdownButton( + showBlank: showBlank, value: initialValue, onChanged: (dynamic value) => onSelected(designState.map[value]!), items: designState.list diff --git a/lib/ui/design/edit/design_edit.dart b/lib/ui/design/edit/design_edit.dart index d69eb060e..d0bc56351 100644 --- a/lib/ui/design/edit/design_edit.dart +++ b/lib/ui/design/edit/design_edit.dart @@ -462,7 +462,7 @@ class _DesignSettingsState extends State { DesignPicker( label: localization.design, onSelected: (value) { - widget.onLoadDesign(value); + widget.onLoadDesign(value!); _selectedDesign = value; }, initialValue: _selectedDesign?.id), diff --git a/lib/ui/invoice/edit/invoice_edit_desktop.dart b/lib/ui/invoice/edit/invoice_edit_desktop.dart index 9120d5684..ee6e659de 100644 --- a/lib/ui/invoice/edit/invoice_edit_desktop.dart +++ b/lib/ui/invoice/edit/invoice_edit_desktop.dart @@ -795,7 +795,7 @@ class InvoiceEditDesktopState extends State initialValue: invoice.designId, onSelected: (value) { viewModel.onChanged!(invoice.rebuild( - (b) => b..designId = value.id)); + (b) => b..designId = value!.id)); }, ), UserPicker( diff --git a/lib/ui/invoice/edit/invoice_edit_details.dart b/lib/ui/invoice/edit/invoice_edit_details.dart index d382f1a93..2c0930b3e 100644 --- a/lib/ui/invoice/edit/invoice_edit_details.dart +++ b/lib/ui/invoice/edit/invoice_edit_details.dart @@ -459,7 +459,7 @@ class InvoiceEditDetailsState extends State { DesignPicker( initialValue: invoice.designId, onSelected: (value) => viewModel - .onChanged!(invoice.rebuild((b) => b..designId = value.id)), + .onChanged!(invoice.rebuild((b) => b..designId = value!.id)), ), if (company.isModuleEnabled(EntityType.project)) ProjectPicker( diff --git a/lib/ui/settings/company_details.dart b/lib/ui/settings/company_details.dart index 3bf0f6a6c..a976afe14 100644 --- a/lib/ui/settings/company_details.dart +++ b/lib/ui/settings/company_details.dart @@ -664,7 +664,7 @@ class _CompanyDetailsState extends State initialValue: settings.defaultInvoiceDesignId, onSelected: (value) => viewModel.onSettingsChanged( settings.rebuild( - (b) => b..defaultInvoiceDesignId = value.id)), + (b) => b..defaultInvoiceDesignId = value!.id)), ), if (company.isModuleEnabled(EntityType.quote)) DesignPicker( @@ -672,7 +672,7 @@ class _CompanyDetailsState extends State initialValue: settings.defaultQuoteDesignId, onSelected: (value) => viewModel.onSettingsChanged( settings.rebuild( - (b) => b..defaultQuoteDesignId = value.id)), + (b) => b..defaultQuoteDesignId = value!.id)), ), if (company.isModuleEnabled(EntityType.credit)) DesignPicker( @@ -680,7 +680,7 @@ class _CompanyDetailsState extends State initialValue: settings.defaultCreditDesignId, onSelected: (value) => viewModel.onSettingsChanged( settings.rebuild( - (b) => b..defaultCreditDesignId = value.id)), + (b) => b..defaultCreditDesignId = value!.id)), ), if (company.isModuleEnabled(EntityType.purchaseOrder)) DesignPicker( @@ -688,7 +688,7 @@ class _CompanyDetailsState extends State initialValue: settings.defaultPurchaseOrderDesignId, onSelected: (value) => viewModel.onSettingsChanged( settings.rebuild((b) => - b..defaultPurchaseOrderDesignId = value.id)), + b..defaultPurchaseOrderDesignId = value!.id)), ), ]), if (!state.settingsUIState.isFiltered) diff --git a/lib/ui/settings/invoice_design.dart b/lib/ui/settings/invoice_design.dart index 06e5e6710..bb899af00 100644 --- a/lib/ui/settings/invoice_design.dart +++ b/lib/ui/settings/invoice_design.dart @@ -292,7 +292,7 @@ class _InvoiceDesignState extends State }); viewModel.onSettingsChanged(settings.rebuild( (b) => - b..defaultInvoiceDesignId = value.id)); + b..defaultInvoiceDesignId = value!.id)); }, ), if (!isFiltered && @@ -320,7 +320,8 @@ class _InvoiceDesignState extends State _wasQuoteDesignChanged = true; }); viewModel.onSettingsChanged(settings.rebuild( - (b) => b..defaultQuoteDesignId = value.id)); + (b) => + b..defaultQuoteDesignId = value!.id)); }, ), if (!isFiltered && @@ -349,7 +350,7 @@ class _InvoiceDesignState extends State }); viewModel.onSettingsChanged(settings.rebuild( (b) => - b..defaultCreditDesignId = value.id)); + b..defaultCreditDesignId = value!.id)); }, ), if (!isFiltered && @@ -381,7 +382,7 @@ class _InvoiceDesignState extends State viewModel.onSettingsChanged(settings.rebuild( (b) => b ..defaultPurchaseOrderDesignId = - value.id)); + value!.id)); }, ), if (!isFiltered && @@ -415,6 +416,21 @@ class _InvoiceDesignState extends State ), SizedBox(height: 16), ], + DesignPicker( + showBlank: true, + label: localization.deliveryNoteDesign, + initialValue: settings.defaultDeliveryNoteDesignId, + onSelected: (value) { + viewModel.onSettingsChanged(settings.rebuild((b) => + b + ..defaultDeliveryNoteDesignId = + value?.id ?? '')); + }, + ), + ], + ), + FormCard( + children: [ AppDropdownButton( labelText: localization.pageLayout, value: settings.pageLayout, diff --git a/lib/utils/i18n.dart b/lib/utils/i18n.dart index 723bbbe9e..60400a2c7 100644 --- a/lib/utils/i18n.dart +++ b/lib/utils/i18n.dart @@ -18,6 +18,10 @@ mixin LocalizationsProvider on LocaleCodeAware { static final Map> _localizedValues = { 'en': { // STARTER: lang key - do not remove comment + 'delivery_note_design': 'Delivery Note Design', + 'statement_design': 'Statement Design', + 'payment_receipt_design': 'Payment Receipt Design', + 'payment_refund_design': 'Payment Refund Design', 'quarter': 'Quarter', 'item_description': 'Item Description', 'task_item': 'Task Item', @@ -109945,6 +109949,21 @@ mixin LocalizationsProvider on LocaleCodeAware { _localizedValues[localeCode]!['quarter'] ?? _localizedValues['en']!['quarter']!; + String get deliveryNoteDesign => + _localizedValues[localeCode]!['delivery_note_design'] ?? + _localizedValues['en']!['delivery_note_design']!; + + String get statementDesign => + _localizedValues[localeCode]!['statement_design'] ?? + _localizedValues['en']!['statement_design']!; + + String get paymentReceiptDesign => + _localizedValues[localeCode]!['payment_receipt_design'] ?? + _localizedValues['en']!['payment_receipt_design']!; + + String get paymentRefundDesign => + _localizedValues[localeCode]!['payment_refund_design'] ?? + _localizedValues['en']!['payment_refund_design']!; // STARTER: lang field - do not remove comment