Improve auto-taxes

This commit is contained in:
Hillel Coren 2023-07-20 13:55:26 +03:00
parent a113b642e3
commit dbb87a31e7
1 changed files with 82 additions and 53 deletions

View File

@ -1,8 +1,10 @@
// Flutter imports: // Flutter imports:
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/constants.dart';
// Project imports: // Project imports:
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart'; import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart'; import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/help_text.dart'; import 'package:invoiceninja_flutter/ui/app/help_text.dart';
@ -118,6 +120,7 @@ class ItemEditDetailsState extends State<ItemEditDetails> {
TaxRateEntity _taxRate1; TaxRateEntity _taxRate1;
TaxRateEntity _taxRate2; TaxRateEntity _taxRate2;
TaxRateEntity _taxRate3; TaxRateEntity _taxRate3;
String _taxCategoryId;
List<TextEditingController> _controllers = []; List<TextEditingController> _controllers = [];
final _debouncer = Debouncer(); final _debouncer = Debouncer();
@ -163,6 +166,7 @@ class ItemEditDetailsState extends State<ItemEditDetails> {
TaxRateEntity(name: invoiceItem.taxName2, rate: invoiceItem.taxRate2); TaxRateEntity(name: invoiceItem.taxName2, rate: invoiceItem.taxRate2);
_taxRate3 = _taxRate3 =
TaxRateEntity(name: invoiceItem.taxName3, rate: invoiceItem.taxRate3); TaxRateEntity(name: invoiceItem.taxName3, rate: invoiceItem.taxRate3);
_taxCategoryId = invoiceItem.taxCategoryId;
super.didChangeDependencies(); super.didChangeDependencies();
} }
@ -195,14 +199,19 @@ class ItemEditDetailsState extends State<ItemEditDetails> {
..customValue3 = _custom3Controller.text.trim() ..customValue3 = _custom3Controller.text.trim()
..customValue4 = _custom4Controller.text.trim()); ..customValue4 = _custom4Controller.text.trim());
if (_taxRate1 != null) { if (widget.viewModel.company.calculateTaxes) {
invoiceItem = invoiceItem.applyTax(_taxRate1); invoiceItem =
} invoiceItem.rebuild((b) => b..taxCategoryId = _taxCategoryId);
if (_taxRate2 != null) { } else {
invoiceItem = invoiceItem.applyTax(_taxRate2, isSecond: true); if (_taxRate1 != null) {
} invoiceItem = invoiceItem.applyTax(_taxRate1);
if (_taxRate3 != null) { }
invoiceItem = invoiceItem.applyTax(_taxRate3, isThird: true); if (_taxRate2 != null) {
invoiceItem = invoiceItem.applyTax(_taxRate2, isSecond: true);
}
if (_taxRate3 != null) {
invoiceItem = invoiceItem.applyTax(_taxRate3, isThird: true);
}
} }
if (invoiceItem != widget.invoiceItem) { if (invoiceItem != widget.invoiceItem) {
@ -307,51 +316,71 @@ class ItemEditDetailsState extends State<ItemEditDetails> {
onSavePressed: widget.entityViewModel.onSavePressed, onSavePressed: widget.entityViewModel.onSavePressed,
) )
: Container(), : Container(),
if (company.enableFirstItemTaxRate || _taxRate1.name.isNotEmpty) if (company.calculateTaxes)
TaxRateDropdown( AppDropdownButton<String>(
onSelected: (taxRate) { labelText: localization.taxCategory,
setState(() { value: _taxCategoryId,
_taxRate1 = taxRate; onChanged: (dynamic value) {
_onChanged(); setState(() {
}); _taxCategoryId = value;
}, _onChanged();
labelText: localization.tax + });
(company.settings.enableInclusiveTaxes },
? ' - ${localization.inclusive}' items: kTaxCategories.keys
: ''), .map((key) => DropdownMenuItem<String>(
initialTaxName: _taxRate1.name, child: Text(localization.lookup(
initialTaxRate: _taxRate1.rate, kTaxCategories[key],
), )),
if (company.enableSecondItemTaxRate || _taxRate2.name.isNotEmpty) value: key,
TaxRateDropdown( ))
onSelected: (taxRate) { .toList())
setState(() { else ...[
_taxRate2 = taxRate; if (company.enableFirstItemTaxRate || _taxRate1.name.isNotEmpty)
_onChanged(); TaxRateDropdown(
}); onSelected: (taxRate) {
}, setState(() {
labelText: localization.tax + _taxRate1 = taxRate;
(company.settings.enableInclusiveTaxes _onChanged();
? ' - ${localization.inclusive}' });
: ''), },
initialTaxName: _taxRate2.name, labelText: localization.tax +
initialTaxRate: _taxRate2.rate, (company.settings.enableInclusiveTaxes
), ? ' - ${localization.inclusive}'
if (company.enableThirdItemTaxRate || _taxRate3.name.isNotEmpty) : ''),
TaxRateDropdown( initialTaxName: _taxRate1.name,
onSelected: (taxRate) { initialTaxRate: _taxRate1.rate,
setState(() { ),
_taxRate3 = taxRate; if (company.enableSecondItemTaxRate || _taxRate2.name.isNotEmpty)
_onChanged(); TaxRateDropdown(
}); onSelected: (taxRate) {
}, setState(() {
labelText: localization.tax + _taxRate2 = taxRate;
(company.settings.enableInclusiveTaxes _onChanged();
? ' - ${localization.inclusive}' });
: ''), },
initialTaxName: _taxRate3.name, labelText: localization.tax +
initialTaxRate: _taxRate3.rate, (company.settings.enableInclusiveTaxes
), ? ' - ${localization.inclusive}'
: ''),
initialTaxName: _taxRate2.name,
initialTaxRate: _taxRate2.rate,
),
if (company.enableThirdItemTaxRate || _taxRate3.name.isNotEmpty)
TaxRateDropdown(
onSelected: (taxRate) {
setState(() {
_taxRate3 = taxRate;
_onChanged();
});
},
labelText: localization.tax +
(company.settings.enableInclusiveTaxes
? ' - ${localization.inclusive}'
: ''),
initialTaxName: _taxRate3.name,
initialTaxRate: _taxRate3.rate,
),
],
], ],
), ),
), ),