diff --git a/lib/data/models/company_model.dart b/lib/data/models/company_model.dart index 94bf168c5..cfa2ed640 100644 --- a/lib/data/models/company_model.dart +++ b/lib/data/models/company_model.dart @@ -1211,6 +1211,12 @@ abstract class SettingsEntity autoBill: clientSettings?.autoBill ?? groupSettings?.autoBill ?? companySettings?.autoBill, + emailBodyStatement: clientSettings?.emailBodyStatement ?? + groupSettings?.emailBodyStatement ?? + companySettings?.emailBodyStatement, + emailSubjectStatement: clientSettings?.emailSubjectStatement ?? + groupSettings?.emailSubjectStatement ?? + companySettings?.emailSubjectStatement, ); } @@ -1630,6 +1636,14 @@ abstract class SettingsEntity @BuiltValueField(wireName: 'email_template_custom3') String get emailBodyCustom3; + @nullable + @BuiltValueField(wireName: 'email_subject_statement') + String get emailSubjectStatement; + + @nullable + @BuiltValueField(wireName: 'email_template_statement') + String get emailBodyStatement; + @nullable @BuiltValueField(wireName: 'enable_client_portal_password') bool get enablePortalPassword; diff --git a/lib/data/models/company_model.g.dart b/lib/data/models/company_model.g.dart index 6b902c8cc..e3a849636 100644 --- a/lib/data/models/company_model.g.dart +++ b/lib/data/models/company_model.g.dart @@ -1564,6 +1564,18 @@ class _$SettingsEntitySerializer ..add(serializers.serialize(object.emailBodyCustom3, specifiedType: const FullType(String))); } + if (object.emailSubjectStatement != null) { + result + ..add('email_subject_statement') + ..add(serializers.serialize(object.emailSubjectStatement, + specifiedType: const FullType(String))); + } + if (object.emailBodyStatement != null) { + result + ..add('email_template_statement') + ..add(serializers.serialize(object.emailBodyStatement, + specifiedType: const FullType(String))); + } if (object.enablePortalPassword != null) { result ..add('enable_client_portal_password') @@ -2388,6 +2400,14 @@ class _$SettingsEntitySerializer result.emailBodyCustom3 = serializers.deserialize(value, specifiedType: const FullType(String)) as String; break; + case 'email_subject_statement': + result.emailSubjectStatement = serializers.deserialize(value, + specifiedType: const FullType(String)) as String; + break; + case 'email_template_statement': + result.emailBodyStatement = serializers.deserialize(value, + specifiedType: const FullType(String)) as String; + break; case 'enable_client_portal_password': result.enablePortalPassword = serializers.deserialize(value, specifiedType: const FullType(bool)) as bool; @@ -4684,6 +4704,10 @@ class _$SettingsEntity extends SettingsEntity { @override final String emailBodyCustom3; @override + final String emailSubjectStatement; + @override + final String emailBodyStatement; + @override final bool enablePortalPassword; @override final bool signatureOnPdf; @@ -4923,6 +4947,8 @@ class _$SettingsEntity extends SettingsEntity { this.emailBodyCustom2, this.emailSubjectCustom3, this.emailBodyCustom3, + this.emailSubjectStatement, + this.emailBodyStatement, this.enablePortalPassword, this.signatureOnPdf, this.enableEmailMarkup, @@ -5104,6 +5130,8 @@ class _$SettingsEntity extends SettingsEntity { emailBodyCustom2 == other.emailBodyCustom2 && emailSubjectCustom3 == other.emailSubjectCustom3 && emailBodyCustom3 == other.emailBodyCustom3 && + emailSubjectStatement == other.emailSubjectStatement && + emailBodyStatement == other.emailBodyStatement && enablePortalPassword == other.enablePortalPassword && signatureOnPdf == other.signatureOnPdf && enableEmailMarkup == other.enableEmailMarkup && @@ -5198,7 +5226,7 @@ class _$SettingsEntity extends SettingsEntity { $jc( $jc( $jc( - $jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc(0, timezoneId.hashCode), dateFormatId.hashCode), enableMilitaryTime.hashCode), languageId.hashCode), showCurrencyCode.hashCode), currencyId.hashCode), customValue1.hashCode), customValue2.hashCode), customValue3.hashCode), customValue4.hashCode), defaultPaymentTerms.hashCode), companyGatewayIds.hashCode), defaultTaskRate.hashCode), sendReminders.hashCode), enablePortal.hashCode), enablePortalDashboard.hashCode), enablePortalTasks.hashCode), emailStyle.hashCode), replyToEmail.hashCode), bccEmail.hashCode), pdfEmailAttachment.hashCode), ublEmailAttachment.hashCode), documentEmailAttachment.hashCode), emailStyleCustom.hashCode), customMessageDashboard.hashCode), customMessageUnpaidInvoice.hashCode), customMessagePaidInvoice.hashCode), customMessageUnapprovedQuote.hashCode), autoArchiveInvoice.hashCode), autoArchiveQuote.hashCode), autoEmailInvoice.hashCode), autoConvertQuote.hashCode), enableInclusiveTaxes.hashCode), translations.hashCode), taskNumberPattern.hashCode), taskNumberCounter.hashCode), expenseNumberPattern.hashCode), expenseNumberCounter.hashCode), vendorNumberPattern.hashCode), vendorNumberCounter.hashCode), ticketNumberPattern.hashCode), ticketNumberCounter.hashCode), paymentNumberPattern.hashCode), paymentNumberCounter.hashCode), invoiceNumberPattern.hashCode), invoiceNumberCounter.hashCode), recurringInvoiceNumberPattern.hashCode), recurringInvoiceNumberCounter.hashCode), quoteNumberPattern.hashCode), quoteNumberCounter.hashCode), clientNumberPattern.hashCode), clientNumberCounter.hashCode), creditNumberPattern.hashCode), creditNumberCounter.hashCode), recurringNumberPrefix.hashCode), resetCounterFrequencyId.hashCode), resetCounterDate.hashCode), counterPadding.hashCode), sharedInvoiceQuoteCounter.hashCode), defaultInvoiceTerms.hashCode), defaultQuoteTerms.hashCode), defaultQuoteFooter.hashCode), defaultCreditTerms.hashCode), defaultCreditFooter.hashCode), defaultInvoiceDesignId.hashCode), defaultQuoteDesignId.hashCode), defaultCreditDesignId.hashCode), defaultInvoiceFooter.hashCode), invoiceLabels.hashCode), defaultTaxName1.hashCode), defaultTaxRate1.hashCode), defaultTaxName2.hashCode), defaultTaxRate2.hashCode), defaultTaxName3.hashCode), defaultTaxRate3.hashCode), defaultPaymentTypeId.hashCode), invoiceFields.hashCode), pdfVariables.hashCode), emailSignature.hashCode), emailSubjectInvoice.hashCode), emailSubjectQuote.hashCode), emailSubjectPayment.hashCode), emailSubjectPaymentPartial.hashCode), emailBodyInvoice.hashCode), emailBodyQuote.hashCode), emailBodyPayment.hashCode), emailBodyPaymentPartial.hashCode), emailSubjectReminder1.hashCode), emailSubjectReminder2.hashCode), emailSubjectReminder3.hashCode), emailBodyReminder1.hashCode), emailBodyReminder2.hashCode), emailBodyReminder3.hashCode), emailSubjectCustom1.hashCode), emailBodyCustom1.hashCode), emailSubjectCustom2.hashCode), emailBodyCustom2.hashCode), emailSubjectCustom3.hashCode), emailBodyCustom3.hashCode), enablePortalPassword.hashCode), signatureOnPdf.hashCode), enableEmailMarkup.hashCode), showAcceptInvoiceTerms.hashCode), showAcceptQuoteTerms.hashCode), requireInvoiceSignature.hashCode), requireQuoteSignature.hashCode), name.hashCode), companyLogo.hashCode), website.hashCode), address1.hashCode), address2.hashCode), city.hashCode), state.hashCode), postalCode.hashCode), phone.hashCode), email.hashCode), countryId.hashCode), vatNumber.hashCode), idNumber.hashCode), pageSize.hashCode), fontSize.hashCode), primaryColor.hashCode), secondaryColor.hashCode), primaryFont.hashCode), secondaryFont.hashCode), hidePaidToDate.hashCode), embedDocuments.hashCode), allPagesHeader.hashCode), allPagesFooter.hashCode), enableReminder1.hashCode), enableReminder2.hashCode), enableReminder3.hashCode), enableReminder4.hashCode), numDaysReminder1.hashCode), numDaysReminder2.hashCode), numDaysReminder3.hashCode), scheduleReminder1.hashCode), scheduleReminder2.hashCode), scheduleReminder3.hashCode), endlessReminderFrequencyId.hashCode), lateFeeAmount1.hashCode), lateFeeAmount2.hashCode), lateFeeAmount3.hashCode), lateFeeAmountEndless.hashCode), lateFeePercent1.hashCode), lateFeePercent2.hashCode), lateFeePercent3.hashCode), lateFeePercentEndless.hashCode), + $jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc(0, timezoneId.hashCode), dateFormatId.hashCode), enableMilitaryTime.hashCode), languageId.hashCode), showCurrencyCode.hashCode), currencyId.hashCode), customValue1.hashCode), customValue2.hashCode), customValue3.hashCode), customValue4.hashCode), defaultPaymentTerms.hashCode), companyGatewayIds.hashCode), defaultTaskRate.hashCode), sendReminders.hashCode), enablePortal.hashCode), enablePortalDashboard.hashCode), enablePortalTasks.hashCode), emailStyle.hashCode), replyToEmail.hashCode), bccEmail.hashCode), pdfEmailAttachment.hashCode), ublEmailAttachment.hashCode), documentEmailAttachment.hashCode), emailStyleCustom.hashCode), customMessageDashboard.hashCode), customMessageUnpaidInvoice.hashCode), customMessagePaidInvoice.hashCode), customMessageUnapprovedQuote.hashCode), autoArchiveInvoice.hashCode), autoArchiveQuote.hashCode), autoEmailInvoice.hashCode), autoConvertQuote.hashCode), enableInclusiveTaxes.hashCode), translations.hashCode), taskNumberPattern.hashCode), taskNumberCounter.hashCode), expenseNumberPattern.hashCode), expenseNumberCounter.hashCode), vendorNumberPattern.hashCode), vendorNumberCounter.hashCode), ticketNumberPattern.hashCode), ticketNumberCounter.hashCode), paymentNumberPattern.hashCode), paymentNumberCounter.hashCode), invoiceNumberPattern.hashCode), invoiceNumberCounter.hashCode), recurringInvoiceNumberPattern.hashCode), recurringInvoiceNumberCounter.hashCode), quoteNumberPattern.hashCode), quoteNumberCounter.hashCode), clientNumberPattern.hashCode), clientNumberCounter.hashCode), creditNumberPattern.hashCode), creditNumberCounter.hashCode), recurringNumberPrefix.hashCode), resetCounterFrequencyId.hashCode), resetCounterDate.hashCode), counterPadding.hashCode), sharedInvoiceQuoteCounter.hashCode), defaultInvoiceTerms.hashCode), defaultQuoteTerms.hashCode), defaultQuoteFooter.hashCode), defaultCreditTerms.hashCode), defaultCreditFooter.hashCode), defaultInvoiceDesignId.hashCode), defaultQuoteDesignId.hashCode), defaultCreditDesignId.hashCode), defaultInvoiceFooter.hashCode), invoiceLabels.hashCode), defaultTaxName1.hashCode), defaultTaxRate1.hashCode), defaultTaxName2.hashCode), defaultTaxRate2.hashCode), defaultTaxName3.hashCode), defaultTaxRate3.hashCode), defaultPaymentTypeId.hashCode), invoiceFields.hashCode), pdfVariables.hashCode), emailSignature.hashCode), emailSubjectInvoice.hashCode), emailSubjectQuote.hashCode), emailSubjectPayment.hashCode), emailSubjectPaymentPartial.hashCode), emailBodyInvoice.hashCode), emailBodyQuote.hashCode), emailBodyPayment.hashCode), emailBodyPaymentPartial.hashCode), emailSubjectReminder1.hashCode), emailSubjectReminder2.hashCode), emailSubjectReminder3.hashCode), emailBodyReminder1.hashCode), emailBodyReminder2.hashCode), emailBodyReminder3.hashCode), emailSubjectCustom1.hashCode), emailBodyCustom1.hashCode), emailSubjectCustom2.hashCode), emailBodyCustom2.hashCode), emailSubjectCustom3.hashCode), emailBodyCustom3.hashCode), emailSubjectStatement.hashCode), emailBodyStatement.hashCode), enablePortalPassword.hashCode), signatureOnPdf.hashCode), enableEmailMarkup.hashCode), showAcceptInvoiceTerms.hashCode), showAcceptQuoteTerms.hashCode), requireInvoiceSignature.hashCode), requireQuoteSignature.hashCode), name.hashCode), companyLogo.hashCode), website.hashCode), address1.hashCode), address2.hashCode), city.hashCode), state.hashCode), postalCode.hashCode), phone.hashCode), email.hashCode), countryId.hashCode), vatNumber.hashCode), idNumber.hashCode), pageSize.hashCode), fontSize.hashCode), primaryColor.hashCode), secondaryColor.hashCode), primaryFont.hashCode), secondaryFont.hashCode), hidePaidToDate.hashCode), embedDocuments.hashCode), allPagesHeader.hashCode), allPagesFooter.hashCode), enableReminder1.hashCode), enableReminder2.hashCode), enableReminder3.hashCode), enableReminder4.hashCode), numDaysReminder1.hashCode), numDaysReminder2.hashCode), numDaysReminder3.hashCode), scheduleReminder1.hashCode), scheduleReminder2.hashCode), scheduleReminder3.hashCode), endlessReminderFrequencyId.hashCode), lateFeeAmount1.hashCode), lateFeeAmount2.hashCode), lateFeeAmount3.hashCode), lateFeeAmountEndless.hashCode), lateFeePercent1.hashCode), lateFeePercent2.hashCode), lateFeePercent3.hashCode), lateFeePercentEndless.hashCode), emailSubjectReminder4.hashCode), emailBodyReminder4.hashCode), clientOnlinePaymentNotification.hashCode), @@ -5322,6 +5350,8 @@ class _$SettingsEntity extends SettingsEntity { ..add('emailBodyCustom2', emailBodyCustom2) ..add('emailSubjectCustom3', emailSubjectCustom3) ..add('emailBodyCustom3', emailBodyCustom3) + ..add('emailSubjectStatement', emailSubjectStatement) + ..add('emailBodyStatement', emailBodyStatement) ..add('enablePortalPassword', enablePortalPassword) ..add('signatureOnPdf', signatureOnPdf) ..add('enableEmailMarkup', enableEmailMarkup) @@ -5889,6 +5919,16 @@ class SettingsEntityBuilder set emailBodyCustom3(String emailBodyCustom3) => _$this._emailBodyCustom3 = emailBodyCustom3; + String _emailSubjectStatement; + String get emailSubjectStatement => _$this._emailSubjectStatement; + set emailSubjectStatement(String emailSubjectStatement) => + _$this._emailSubjectStatement = emailSubjectStatement; + + String _emailBodyStatement; + String get emailBodyStatement => _$this._emailBodyStatement; + set emailBodyStatement(String emailBodyStatement) => + _$this._emailBodyStatement = emailBodyStatement; + bool _enablePortalPassword; bool get enablePortalPassword => _$this._enablePortalPassword; set enablePortalPassword(bool enablePortalPassword) => @@ -6317,6 +6357,8 @@ class SettingsEntityBuilder _emailBodyCustom2 = _$v.emailBodyCustom2; _emailSubjectCustom3 = _$v.emailSubjectCustom3; _emailBodyCustom3 = _$v.emailBodyCustom3; + _emailSubjectStatement = _$v.emailSubjectStatement; + _emailBodyStatement = _$v.emailBodyStatement; _enablePortalPassword = _$v.enablePortalPassword; _signatureOnPdf = _$v.signatureOnPdf; _enableEmailMarkup = _$v.enableEmailMarkup; @@ -6508,6 +6550,8 @@ class SettingsEntityBuilder emailBodyCustom2: emailBodyCustom2, emailSubjectCustom3: emailSubjectCustom3, emailBodyCustom3: emailBodyCustom3, + emailSubjectStatement: emailSubjectStatement, + emailBodyStatement: emailBodyStatement, enablePortalPassword: enablePortalPassword, signatureOnPdf: signatureOnPdf, enableEmailMarkup: enableEmailMarkup, diff --git a/lib/data/models/entities.dart b/lib/data/models/entities.dart index 1f303a285..f75c3ebb5 100644 --- a/lib/data/models/entities.dart +++ b/lib/data/models/entities.dart @@ -154,6 +154,7 @@ class EmailTemplate extends EnumClass { static const EmailTemplate custom1 = _$custom1_email; static const EmailTemplate custom2 = _$custom2_email; static const EmailTemplate custom3 = _$custom3_email; + static const EmailTemplate statement = _$statement_email; static BuiltSet get values => _$templateValues; diff --git a/lib/data/models/entities.g.dart b/lib/data/models/entities.g.dart index 1c55dca79..f3f4ce5b7 100644 --- a/lib/data/models/entities.g.dart +++ b/lib/data/models/entities.g.dart @@ -220,6 +220,7 @@ const EmailTemplate _$reminder_endless_email = const EmailTemplate _$custom1_email = const EmailTemplate._('custom1'); const EmailTemplate _$custom2_email = const EmailTemplate._('custom2'); const EmailTemplate _$custom3_email = const EmailTemplate._('custom3'); +const EmailTemplate _$statement_email = const EmailTemplate._('statement'); EmailTemplate _$templateValueOf(String name) { switch (name) { @@ -247,6 +248,8 @@ EmailTemplate _$templateValueOf(String name) { return _$custom2_email; case 'custom3': return _$custom3_email; + case 'statement': + return _$statement_email; default: throw new ArgumentError(name); } @@ -266,6 +269,7 @@ final BuiltSet _$templateValues = _$custom1_email, _$custom2_email, _$custom3_email, + _$statement_email, ]); const UserPermission _$create = const UserPermission._('create'); diff --git a/lib/ui/settings/templates_and_reminders.dart b/lib/ui/settings/templates_and_reminders.dart index fd804a1c1..b5b9c6c98 100644 --- a/lib/ui/settings/templates_and_reminders.dart +++ b/lib/ui/settings/templates_and_reminders.dart @@ -155,6 +155,10 @@ class _TemplatesAndRemindersState extends State settings = settings.rebuild((b) => b ..emailBodyCustom3 = body ..emailSubjectCustom3 = subject); + } else if (_template == EmailTemplate.statement) { + settings = settings.rebuild((b) => b + ..emailBodyStatement = body + ..emailSubjectStatement = subject); } if (settings != widget.viewModel.settings) { @@ -248,7 +252,7 @@ class _TemplatesAndRemindersState extends State if ([ EmailTemplate.invoice, EmailTemplate.payment, - EmailTemplate.partial_payment + EmailTemplate.partial_payment, ].contains(value) && !company.isModuleEnabled(EntityType.invoice)) { return false;