diff --git a/lib/redux/product/product_actions.dart b/lib/redux/product/product_actions.dart index 1ae3f44a2..0b4ae817b 100644 --- a/lib/redux/product/product_actions.dart +++ b/lib/redux/product/product_actions.dart @@ -256,14 +256,16 @@ void handleProductAction( switch (action) { case EntityAction.newInvoice: + final invoice = InvoiceEntity(state: state); createEntity( context: context, - entity: InvoiceEntity(state: state).rebuild( + entity: invoice.rebuild( (b) => b ..lineItems.addAll( productIds.map( (productId) => convertProductToInvoiceItem( company: state.company, + invoice: invoice, product: state.productState.map[productId], currencyMap: state.staticState.currencyMap, ), diff --git a/lib/redux/product/product_selectors.dart b/lib/redux/product/product_selectors.dart index 06aeef3c7..2a3502a62 100644 --- a/lib/redux/product/product_selectors.dart +++ b/lib/redux/product/product_selectors.dart @@ -9,6 +9,7 @@ import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart'; InvoiceItemEntity convertProductToInvoiceItem({ @required ProductEntity product, @required CompanyEntity company, + @required InvoiceEntity invoice, @required BuiltMap currencyMap, ClientEntity client, }) { @@ -18,11 +19,8 @@ InvoiceItemEntity convertProductToInvoiceItem({ if (company.convertProductExchangeRate && client != null && client.currencyId != company.currencyId) { - cost = cost * - getExchangeRateWithMap(currencyMap, - fromCurrencyId: company.currencyId, - toCurrencyId: client.currencyId); - cost = round(cost, currencyMap[client.currencyId].precision); + cost = round(cost * invoice.exchangeRate, + currencyMap[client.currencyId].precision); } return InvoiceItemEntity().rebuild((b) => b diff --git a/lib/ui/invoice/edit/invoice_edit_items_desktop.dart b/lib/ui/invoice/edit/invoice_edit_items_desktop.dart index aa0a6002b..ef24e2147 100644 --- a/lib/ui/invoice/edit/invoice_edit_items_desktop.dart +++ b/lib/ui/invoice/edit/invoice_edit_items_desktop.dart @@ -181,11 +181,8 @@ class _InvoiceEditItemsDesktopState extends State { final product = productState.map[productId]; final client = state.clientState.get(invoice.clientId); - final currencyId = client.getCurrencyId( - company: company, - group: state.groupState.get(client.groupId)); final currency = - state.staticState.currencyMap[currencyId]; + state.staticState.currencyMap[client.currencyId]; double cost = product.price; if (company.convertProductExchangeRate && @@ -225,9 +222,6 @@ class _InvoiceEditItemsDesktopState extends State { final item = lineItems[index]; final product = productState.map[suggestion]; final client = state.clientState.get(invoice.clientId); - final currencyId = client.getCurrencyId( - company: company, - group: state.groupState.get(client.groupId)); double cost = product.price; if (company.convertProductExchangeRate && @@ -235,7 +229,7 @@ class _InvoiceEditItemsDesktopState extends State { client.currencyId != company.currencyId) { cost = round( cost * invoice.exchangeRate, - state.staticState.currencyMap[currencyId] + state.staticState.currencyMap[client?.currencyId] .precision); } diff --git a/lib/ui/invoice/edit/invoice_item_selector.dart b/lib/ui/invoice/edit/invoice_item_selector.dart index 549b2e32d..42963b164 100644 --- a/lib/ui/invoice/edit/invoice_item_selector.dart +++ b/lib/ui/invoice/edit/invoice_item_selector.dart @@ -70,6 +70,7 @@ class _InvoiceItemSelectorState extends State convertProductToInvoiceItem( company: company, product: entity as ProductEntity, + invoice: state.invoiceUIState.editing, currencyMap: state.staticState.currencyMap, client: state.clientState.get(widget.clientId), ),