From c84f43e4ccfb027a0057c7594e3651e00699d9a3 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Wed, 25 Oct 2023 13:13:52 +0300 Subject: [PATCH] add task based items to invoices using the mobile app #541 --- lib/data/models/invoice_model.dart | 5 +++-- lib/ui/invoice/edit/invoice_edit_items.dart | 12 +++++++++--- lib/ui/invoice/edit/invoice_item_selector.dart | 10 ++++++---- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/data/models/invoice_model.dart b/lib/data/models/invoice_model.dart index 759eeca90..f96dda1b5 100644 --- a/lib/data/models/invoice_model.dart +++ b/lib/data/models/invoice_model.dart @@ -1552,7 +1552,8 @@ class TaskItemFields { abstract class InvoiceItemEntity implements Built { - factory InvoiceItemEntity({String? productKey, double? quantity}) { + factory InvoiceItemEntity( + {String? productKey, double? quantity, String? typeId}) { return _$InvoiceItemEntity._( productKey: productKey ?? '', notes: '', @@ -1565,7 +1566,7 @@ abstract class InvoiceItemEntity taxRate2: 0, taxName3: '', taxRate3: 0, - typeId: TYPE_STANDARD, + typeId: typeId ?? TYPE_STANDARD, customValue1: '', customValue2: '', customValue3: '', diff --git a/lib/ui/invoice/edit/invoice_edit_items.dart b/lib/ui/invoice/edit/invoice_edit_items.dart index e33f8163d..a60ad8ebd 100644 --- a/lib/ui/invoice/edit/invoice_edit_items.dart +++ b/lib/ui/invoice/edit/invoice_edit_items.dart @@ -252,7 +252,9 @@ class ItemEditDetailsState extends State { child: Column( children: [ DecoratedFormField( - label: localization.product, + label: widget.invoiceItem.isTask + ? localization.service + : localization.product, controller: _productKeyController, onSavePressed: widget.entityViewModel.onSavePressed, keyboardType: TextInputType.text, @@ -296,7 +298,9 @@ class ItemEditDetailsState extends State { value: _custom4Controller.text, ), DecoratedFormField( - label: localization.unitCost, + label: widget.invoiceItem.isTask + ? localization.rate + : localization.unitCost, controller: _costController, keyboardType: TextInputType.numberWithOptions(decimal: true, signed: true), @@ -304,7 +308,9 @@ class ItemEditDetailsState extends State { ), company.enableProductQuantity ? DecoratedFormField( - label: localization.quantity, + label: widget.invoiceItem.isTask + ? localization.hours + : localization.quantity, controller: _qtyController, keyboardType: TextInputType.numberWithOptions( decimal: true, signed: true), diff --git a/lib/ui/invoice/edit/invoice_item_selector.dart b/lib/ui/invoice/edit/invoice_item_selector.dart index b87956996..168fba533 100644 --- a/lib/ui/invoice/edit/invoice_item_selector.dart +++ b/lib/ui/invoice/edit/invoice_item_selector.dart @@ -42,7 +42,7 @@ class _InvoiceItemSelectorState extends State with SingleTickerProviderStateMixin { String? _filter; String? _filterClientId; - TabController? _tabController; + late TabController _tabController; final List _selected = []; final _textController = TextEditingController(); @@ -57,15 +57,17 @@ class _InvoiceItemSelectorState extends State @override void dispose() { _textController.dispose(); - _tabController!.dispose(); + _tabController.dispose(); super.dispose(); } void _addBlankItem(CompanyEntity company) { widget.onItemsSelected!([ InvoiceItemEntity( - quantity: - company.defaultQuantity || !company.enableProductQuantity ? 1 : 0) + quantity: + company.defaultQuantity || !company.enableProductQuantity ? 1 : 0, + typeId: _tabController.index == 1 ? InvoiceItemEntity.TYPE_TASK : null, + ) ]); Navigator.pop(context); }