Line item fixes

This commit is contained in:
Hillel Coren 2019-11-10 17:00:11 +02:00
parent 4e22a59942
commit d7d9b07f13
20 changed files with 127 additions and 361 deletions

View File

@ -512,13 +512,10 @@ abstract class InvoiceEntity extends Object
static Serializer<InvoiceEntity> get serializer => _$invoiceEntitySerializer; static Serializer<InvoiceEntity> get serializer => _$invoiceEntitySerializer;
} }
abstract class InvoiceItemEntity extends Object abstract class InvoiceItemEntity
with BaseEntity, SelectableEntity
implements Built<InvoiceItemEntity, InvoiceItemEntityBuilder> { implements Built<InvoiceItemEntity, InvoiceItemEntityBuilder> {
factory InvoiceItemEntity({String productKey, double quantity}) { factory InvoiceItemEntity({String productKey, double quantity}) {
return _$InvoiceItemEntity._( return _$InvoiceItemEntity._(
id: BaseEntity.nextId,
isChanged: false,
productKey: productKey ?? '', productKey: productKey ?? '',
notes: '', notes: '',
cost: 0.0, cost: 0.0,
@ -533,19 +530,11 @@ abstract class InvoiceItemEntity extends Object
customValue1: '', customValue1: '',
customValue2: '', customValue2: '',
discount: 0.0, discount: 0.0,
updatedAt: 0,
archivedAt: 0,
isDeleted: false,
); );
} }
InvoiceItemEntity._(); InvoiceItemEntity._();
@override
EntityType get entityType {
return EntityType.invoiceItem;
}
@BuiltValueField(wireName: 'product_key') @BuiltValueField(wireName: 'product_key')
String get productKey; String get productKey;
@ -598,24 +587,6 @@ abstract class InvoiceItemEntity extends Object
bool get isExpense => expenseId != null && expenseId.isNotEmpty; bool get isExpense => expenseId != null && expenseId.isNotEmpty;
@override
bool matchesFilter(String filter) {
if (filter == null || filter.isEmpty) {
return true;
}
return false;
}
@override
String matchesFilterValue(String filter) {
if (filter == null || filter.isEmpty) {
return null;
}
return null;
}
InvoiceItemEntity applyTax(TaxRateEntity taxRate, {bool isSecond = false}) { InvoiceItemEntity applyTax(TaxRateEntity taxRate, {bool isSecond = false}) {
InvoiceItemEntity item; InvoiceItemEntity item;
@ -637,17 +608,6 @@ abstract class InvoiceItemEntity extends Object
return item; return item;
} }
@override
String get listDisplayName {
return '';
}
@override
double get listDisplayAmount => null;
@override
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
static Serializer<InvoiceItemEntity> get serializer => static Serializer<InvoiceItemEntity> get serializer =>
_$invoiceItemEntitySerializer; _$invoiceItemEntitySerializer;
} }

View File

@ -606,54 +606,6 @@ class _$InvoiceItemEntitySerializer
..add(serializers.serialize(object.expenseId, ..add(serializers.serialize(object.expenseId,
specifiedType: const FullType(String))); specifiedType: const FullType(String)));
} }
if (object.isChanged != null) {
result
..add('isChanged')
..add(serializers.serialize(object.isChanged,
specifiedType: const FullType(bool)));
}
if (object.createdAt != null) {
result
..add('created_at')
..add(serializers.serialize(object.createdAt,
specifiedType: const FullType(int)));
}
if (object.updatedAt != null) {
result
..add('updated_at')
..add(serializers.serialize(object.updatedAt,
specifiedType: const FullType(int)));
}
if (object.archivedAt != null) {
result
..add('archived_at')
..add(serializers.serialize(object.archivedAt,
specifiedType: const FullType(int)));
}
if (object.isDeleted != null) {
result
..add('is_deleted')
..add(serializers.serialize(object.isDeleted,
specifiedType: const FullType(bool)));
}
if (object.createdUserId != null) {
result
..add('user_id')
..add(serializers.serialize(object.createdUserId,
specifiedType: const FullType(String)));
}
if (object.assignedUserId != null) {
result
..add('assigned_user_id')
..add(serializers.serialize(object.assignedUserId,
specifiedType: const FullType(String)));
}
if (object.id != null) {
result
..add('id')
..add(serializers.serialize(object.id,
specifiedType: const FullType(String)));
}
return result; return result;
} }
@ -733,38 +685,6 @@ class _$InvoiceItemEntitySerializer
result.expenseId = serializers.deserialize(value, result.expenseId = serializers.deserialize(value,
specifiedType: const FullType(String)) as String; specifiedType: const FullType(String)) as String;
break; break;
case 'isChanged':
result.isChanged = serializers.deserialize(value,
specifiedType: const FullType(bool)) as bool;
break;
case 'created_at':
result.createdAt = serializers.deserialize(value,
specifiedType: const FullType(int)) as int;
break;
case 'updated_at':
result.updatedAt = serializers.deserialize(value,
specifiedType: const FullType(int)) as int;
break;
case 'archived_at':
result.archivedAt = serializers.deserialize(value,
specifiedType: const FullType(int)) as int;
break;
case 'is_deleted':
result.isDeleted = serializers.deserialize(value,
specifiedType: const FullType(bool)) as bool;
break;
case 'user_id':
result.createdUserId = serializers.deserialize(value,
specifiedType: const FullType(String)) as String;
break;
case 'assigned_user_id':
result.assignedUserId = serializers.deserialize(value,
specifiedType: const FullType(String)) as String;
break;
case 'id':
result.id = serializers.deserialize(value,
specifiedType: const FullType(String)) as String;
break;
} }
} }
@ -1894,22 +1814,6 @@ class _$InvoiceItemEntity extends InvoiceItemEntity {
final String taskId; final String taskId;
@override @override
final String expenseId; final String expenseId;
@override
final bool isChanged;
@override
final int createdAt;
@override
final int updatedAt;
@override
final int archivedAt;
@override
final bool isDeleted;
@override
final String createdUserId;
@override
final String assignedUserId;
@override
final String id;
factory _$InvoiceItemEntity( factory _$InvoiceItemEntity(
[void Function(InvoiceItemEntityBuilder) updates]) => [void Function(InvoiceItemEntityBuilder) updates]) =>
@ -1931,15 +1835,7 @@ class _$InvoiceItemEntity extends InvoiceItemEntity {
this.customValue2, this.customValue2,
this.discount, this.discount,
this.taskId, this.taskId,
this.expenseId, this.expenseId})
this.isChanged,
this.createdAt,
this.updatedAt,
this.archivedAt,
this.isDeleted,
this.createdUserId,
this.assignedUserId,
this.id})
: super._() { : super._() {
if (productKey == null) { if (productKey == null) {
throw new BuiltValueNullFieldError('InvoiceItemEntity', 'productKey'); throw new BuiltValueNullFieldError('InvoiceItemEntity', 'productKey');
@ -2013,15 +1909,7 @@ class _$InvoiceItemEntity extends InvoiceItemEntity {
customValue2 == other.customValue2 && customValue2 == other.customValue2 &&
discount == other.discount && discount == other.discount &&
taskId == other.taskId && taskId == other.taskId &&
expenseId == other.expenseId && expenseId == other.expenseId;
isChanged == other.isChanged &&
createdAt == other.createdAt &&
updatedAt == other.updatedAt &&
archivedAt == other.archivedAt &&
isDeleted == other.isDeleted &&
createdUserId == other.createdUserId &&
assignedUserId == other.assignedUserId &&
id == other.id;
} }
@override @override
@ -2042,9 +1930,13 @@ class _$InvoiceItemEntity extends InvoiceItemEntity {
$jc( $jc(
$jc( $jc(
$jc( $jc(
$jc( 0,
$jc( productKey
$jc($jc($jc($jc($jc($jc(0, productKey.hashCode), notes.hashCode), cost.hashCode), quantity.hashCode), taxName1.hashCode), .hashCode),
notes.hashCode),
cost.hashCode),
quantity.hashCode),
taxName1.hashCode),
taxRate1.hashCode), taxRate1.hashCode),
taxName2.hashCode), taxName2.hashCode),
taxRate2.hashCode), taxRate2.hashCode),
@ -2055,15 +1947,7 @@ class _$InvoiceItemEntity extends InvoiceItemEntity {
customValue2.hashCode), customValue2.hashCode),
discount.hashCode), discount.hashCode),
taskId.hashCode), taskId.hashCode),
expenseId.hashCode), expenseId.hashCode));
isChanged.hashCode),
createdAt.hashCode),
updatedAt.hashCode),
archivedAt.hashCode),
isDeleted.hashCode),
createdUserId.hashCode),
assignedUserId.hashCode),
id.hashCode));
} }
@override @override
@ -2084,15 +1968,7 @@ class _$InvoiceItemEntity extends InvoiceItemEntity {
..add('customValue2', customValue2) ..add('customValue2', customValue2)
..add('discount', discount) ..add('discount', discount)
..add('taskId', taskId) ..add('taskId', taskId)
..add('expenseId', expenseId) ..add('expenseId', expenseId))
..add('isChanged', isChanged)
..add('createdAt', createdAt)
..add('updatedAt', updatedAt)
..add('archivedAt', archivedAt)
..add('isDeleted', isDeleted)
..add('createdUserId', createdUserId)
..add('assignedUserId', assignedUserId)
..add('id', id))
.toString(); .toString();
} }
} }
@ -2166,40 +2042,6 @@ class InvoiceItemEntityBuilder
String get expenseId => _$this._expenseId; String get expenseId => _$this._expenseId;
set expenseId(String expenseId) => _$this._expenseId = expenseId; set expenseId(String expenseId) => _$this._expenseId = expenseId;
bool _isChanged;
bool get isChanged => _$this._isChanged;
set isChanged(bool isChanged) => _$this._isChanged = isChanged;
int _createdAt;
int get createdAt => _$this._createdAt;
set createdAt(int createdAt) => _$this._createdAt = createdAt;
int _updatedAt;
int get updatedAt => _$this._updatedAt;
set updatedAt(int updatedAt) => _$this._updatedAt = updatedAt;
int _archivedAt;
int get archivedAt => _$this._archivedAt;
set archivedAt(int archivedAt) => _$this._archivedAt = archivedAt;
bool _isDeleted;
bool get isDeleted => _$this._isDeleted;
set isDeleted(bool isDeleted) => _$this._isDeleted = isDeleted;
String _createdUserId;
String get createdUserId => _$this._createdUserId;
set createdUserId(String createdUserId) =>
_$this._createdUserId = createdUserId;
String _assignedUserId;
String get assignedUserId => _$this._assignedUserId;
set assignedUserId(String assignedUserId) =>
_$this._assignedUserId = assignedUserId;
String _id;
String get id => _$this._id;
set id(String id) => _$this._id = id;
InvoiceItemEntityBuilder(); InvoiceItemEntityBuilder();
InvoiceItemEntityBuilder get _$this { InvoiceItemEntityBuilder get _$this {
@ -2220,14 +2062,6 @@ class InvoiceItemEntityBuilder
_discount = _$v.discount; _discount = _$v.discount;
_taskId = _$v.taskId; _taskId = _$v.taskId;
_expenseId = _$v.expenseId; _expenseId = _$v.expenseId;
_isChanged = _$v.isChanged;
_createdAt = _$v.createdAt;
_updatedAt = _$v.updatedAt;
_archivedAt = _$v.archivedAt;
_isDeleted = _$v.isDeleted;
_createdUserId = _$v.createdUserId;
_assignedUserId = _$v.assignedUserId;
_id = _$v.id;
_$v = null; _$v = null;
} }
return this; return this;
@ -2265,15 +2099,7 @@ class InvoiceItemEntityBuilder
customValue2: customValue2, customValue2: customValue2,
discount: discount, discount: discount,
taskId: taskId, taskId: taskId,
expenseId: expenseId, expenseId: expenseId);
isChanged: isChanged,
createdAt: createdAt,
updatedAt: updatedAt,
archivedAt: archivedAt,
isDeleted: isDeleted,
createdUserId: createdUserId,
assignedUserId: assignedUserId,
id: id);
replace(_$result); replace(_$result);
return _$result; return _$result;
} }

View File

@ -33,11 +33,11 @@ class EditInvoice implements PersistUI {
{this.invoice, {this.invoice,
this.context, this.context,
this.completer, this.completer,
this.invoiceItem, this.invoiceItemIndex,
this.force = false}); this.force = false});
final InvoiceEntity invoice; final InvoiceEntity invoice;
final InvoiceItemEntity invoiceItem; final int invoiceItemIndex;
final BuildContext context; final BuildContext context;
final Completer completer; final Completer completer;
final bool force; final bool force;
@ -52,9 +52,9 @@ class ShowEmailInvoice {
} }
class EditInvoiceItem implements PersistUI { class EditInvoiceItem implements PersistUI {
EditInvoiceItem([this.invoiceItem]); EditInvoiceItem([this.invoiceItemIndex]);
final InvoiceItemEntity invoiceItem; final int invoiceItemIndex;
} }
class UpdateInvoice implements PersistUI { class UpdateInvoice implements PersistUI {

View File

@ -13,20 +13,15 @@ EntityUIState invoiceUIReducer(InvoiceUIState state, dynamic action) {
return state.rebuild((b) => b return state.rebuild((b) => b
..listUIState.replace(invoiceListReducer(state.listUIState, action)) ..listUIState.replace(invoiceListReducer(state.listUIState, action))
..editing.replace(editingReducer(state.editing, action)) ..editing.replace(editingReducer(state.editing, action))
..editingItem.replace(editingItemReducer(state.editingItem, action)) ..editingItemIndex = editingItemIndexReducer(state.editingItemIndex, action)
..selectedId = selectedIdReducer(state.selectedId, action)); ..selectedId = selectedIdReducer(state.selectedId, action));
} }
final editingItemReducer = combineReducers<InvoiceItemEntity>([ final editingItemIndexReducer = combineReducers<int>([
TypedReducer<InvoiceItemEntity, EditInvoice>(editInvoiceItem), TypedReducer<int, EditInvoice>((index, action) => action.invoiceItemIndex),
TypedReducer<InvoiceItemEntity, EditInvoiceItem>(editInvoiceItem), TypedReducer<int, EditInvoiceItem>((index, action) => action.invoiceItemIndex),
]); ]);
InvoiceItemEntity editInvoiceItem(
InvoiceItemEntity invoiceItem, dynamic action) {
return action.invoiceItem ?? InvoiceItemEntity();
}
Reducer<String> dropdownFilterReducer = combineReducers([ Reducer<String> dropdownFilterReducer = combineReducers([
TypedReducer<String, FilterInvoiceDropdown>(filterInvoiceDropdownReducer), TypedReducer<String, FilterInvoiceDropdown>(filterInvoiceDropdownReducer),
]); ]);

View File

@ -59,7 +59,6 @@ abstract class InvoiceUIState extends Object
listUIState: listUIState:
ListUIState(InvoiceFields.invoiceNumber, sortAscending: false), ListUIState(InvoiceFields.invoiceNumber, sortAscending: false),
editing: InvoiceEntity(), editing: InvoiceEntity(),
editingItem: InvoiceItemEntity(),
selectedId: '', selectedId: '',
); );
} }
@ -70,7 +69,7 @@ abstract class InvoiceUIState extends Object
InvoiceEntity get editing; InvoiceEntity get editing;
@nullable @nullable
InvoiceItemEntity get editingItem; int get editingItemIndex;
@override @override
bool get isCreatingNew => editing.isNew; bool get isCreatingNew => editing.isNew;

View File

@ -95,11 +95,11 @@ class _$InvoiceUIStateSerializer
..add(serializers.serialize(object.editing, ..add(serializers.serialize(object.editing,
specifiedType: const FullType(InvoiceEntity))); specifiedType: const FullType(InvoiceEntity)));
} }
if (object.editingItem != null) { if (object.editingItemIndex != null) {
result result
..add('editingItem') ..add('editingItemIndex')
..add(serializers.serialize(object.editingItem, ..add(serializers.serialize(object.editingItemIndex,
specifiedType: const FullType(InvoiceItemEntity))); specifiedType: const FullType(int)));
} }
if (object.selectedId != null) { if (object.selectedId != null) {
result result
@ -126,10 +126,9 @@ class _$InvoiceUIStateSerializer
result.editing.replace(serializers.deserialize(value, result.editing.replace(serializers.deserialize(value,
specifiedType: const FullType(InvoiceEntity)) as InvoiceEntity); specifiedType: const FullType(InvoiceEntity)) as InvoiceEntity);
break; break;
case 'editingItem': case 'editingItemIndex':
result.editingItem.replace(serializers.deserialize(value, result.editingItemIndex = serializers.deserialize(value,
specifiedType: const FullType(InvoiceItemEntity)) specifiedType: const FullType(int)) as int;
as InvoiceItemEntity);
break; break;
case 'listUIState': case 'listUIState':
result.listUIState.replace(serializers.deserialize(value, result.listUIState.replace(serializers.deserialize(value,
@ -269,7 +268,7 @@ class _$InvoiceUIState extends InvoiceUIState {
@override @override
final InvoiceEntity editing; final InvoiceEntity editing;
@override @override
final InvoiceItemEntity editingItem; final int editingItemIndex;
@override @override
final ListUIState listUIState; final ListUIState listUIState;
@override @override
@ -284,7 +283,7 @@ class _$InvoiceUIState extends InvoiceUIState {
_$InvoiceUIState._( _$InvoiceUIState._(
{this.editing, {this.editing,
this.editingItem, this.editingItemIndex,
this.listUIState, this.listUIState,
this.selectedId, this.selectedId,
this.saveCompleter, this.saveCompleter,
@ -308,7 +307,7 @@ class _$InvoiceUIState extends InvoiceUIState {
if (identical(other, this)) return true; if (identical(other, this)) return true;
return other is InvoiceUIState && return other is InvoiceUIState &&
editing == other.editing && editing == other.editing &&
editingItem == other.editingItem && editingItemIndex == other.editingItemIndex &&
listUIState == other.listUIState && listUIState == other.listUIState &&
selectedId == other.selectedId && selectedId == other.selectedId &&
saveCompleter == other.saveCompleter && saveCompleter == other.saveCompleter &&
@ -320,7 +319,7 @@ class _$InvoiceUIState extends InvoiceUIState {
return $jf($jc( return $jf($jc(
$jc( $jc(
$jc( $jc(
$jc($jc($jc(0, editing.hashCode), editingItem.hashCode), $jc($jc($jc(0, editing.hashCode), editingItemIndex.hashCode),
listUIState.hashCode), listUIState.hashCode),
selectedId.hashCode), selectedId.hashCode),
saveCompleter.hashCode), saveCompleter.hashCode),
@ -331,7 +330,7 @@ class _$InvoiceUIState extends InvoiceUIState {
String toString() { String toString() {
return (newBuiltValueToStringHelper('InvoiceUIState') return (newBuiltValueToStringHelper('InvoiceUIState')
..add('editing', editing) ..add('editing', editing)
..add('editingItem', editingItem) ..add('editingItemIndex', editingItemIndex)
..add('listUIState', listUIState) ..add('listUIState', listUIState)
..add('selectedId', selectedId) ..add('selectedId', selectedId)
..add('saveCompleter', saveCompleter) ..add('saveCompleter', saveCompleter)
@ -349,11 +348,10 @@ class InvoiceUIStateBuilder
_$this._editing ??= new InvoiceEntityBuilder(); _$this._editing ??= new InvoiceEntityBuilder();
set editing(InvoiceEntityBuilder editing) => _$this._editing = editing; set editing(InvoiceEntityBuilder editing) => _$this._editing = editing;
InvoiceItemEntityBuilder _editingItem; int _editingItemIndex;
InvoiceItemEntityBuilder get editingItem => int get editingItemIndex => _$this._editingItemIndex;
_$this._editingItem ??= new InvoiceItemEntityBuilder(); set editingItemIndex(int editingItemIndex) =>
set editingItem(InvoiceItemEntityBuilder editingItem) => _$this._editingItemIndex = editingItemIndex;
_$this._editingItem = editingItem;
ListUIStateBuilder _listUIState; ListUIStateBuilder _listUIState;
ListUIStateBuilder get listUIState => ListUIStateBuilder get listUIState =>
@ -380,7 +378,7 @@ class InvoiceUIStateBuilder
InvoiceUIStateBuilder get _$this { InvoiceUIStateBuilder get _$this {
if (_$v != null) { if (_$v != null) {
_editing = _$v.editing?.toBuilder(); _editing = _$v.editing?.toBuilder();
_editingItem = _$v.editingItem?.toBuilder(); _editingItemIndex = _$v.editingItemIndex;
_listUIState = _$v.listUIState?.toBuilder(); _listUIState = _$v.listUIState?.toBuilder();
_selectedId = _$v.selectedId; _selectedId = _$v.selectedId;
_saveCompleter = _$v.saveCompleter; _saveCompleter = _$v.saveCompleter;
@ -410,7 +408,7 @@ class InvoiceUIStateBuilder
_$result = _$v ?? _$result = _$v ??
new _$InvoiceUIState._( new _$InvoiceUIState._(
editing: _editing?.build(), editing: _editing?.build(),
editingItem: _editingItem?.build(), editingItemIndex: editingItemIndex,
listUIState: listUIState.build(), listUIState: listUIState.build(),
selectedId: selectedId, selectedId: selectedId,
saveCompleter: saveCompleter, saveCompleter: saveCompleter,
@ -420,8 +418,7 @@ class InvoiceUIStateBuilder
try { try {
_$failedField = 'editing'; _$failedField = 'editing';
_editing?.build(); _editing?.build();
_$failedField = 'editingItem';
_editingItem?.build();
_$failedField = 'listUIState'; _$failedField = 'listUIState';
listUIState.build(); listUIState.build();
} catch (e) { } catch (e) {

View File

@ -33,11 +33,11 @@ class EditQuote implements PersistUI {
{this.quote, {this.quote,
this.context, this.context,
this.completer, this.completer,
this.quoteItem, this.quoteItemIndex,
this.force = false}); this.force = false});
final InvoiceEntity quote; final InvoiceEntity quote;
final InvoiceItemEntity quoteItem; final int quoteItemIndex;
final BuildContext context; final BuildContext context;
final Completer completer; final Completer completer;
final bool force; final bool force;
@ -52,9 +52,9 @@ class ShowEmailQuote {
} }
class EditQuoteItem implements PersistUI { class EditQuoteItem implements PersistUI {
EditQuoteItem([this.quoteItem]); EditQuoteItem([this.quoteItemIndex]);
final InvoiceItemEntity quoteItem; final int quoteItemIndex;
} }
class UpdateQuote implements PersistUI { class UpdateQuote implements PersistUI {

View File

@ -13,19 +13,15 @@ EntityUIState quoteUIReducer(QuoteUIState state, dynamic action) {
return state.rebuild((b) => b return state.rebuild((b) => b
..listUIState.replace(quoteListReducer(state.listUIState, action)) ..listUIState.replace(quoteListReducer(state.listUIState, action))
..editing.replace(editingReducer(state.editing, action)) ..editing.replace(editingReducer(state.editing, action))
..editingItem.replace(editingItemReducer(state.editingItem, action)) ..editingItemIndex = editingItemReducer(state.editingItemIndex, action)
..selectedId = selectedIdReducer(state.selectedId, action)); ..selectedId = selectedIdReducer(state.selectedId, action));
} }
final editingItemReducer = combineReducers<InvoiceItemEntity>([ final editingItemReducer = combineReducers<int>([
TypedReducer<InvoiceItemEntity, EditQuote>(editQuoteItem), TypedReducer<int, EditQuote>((index, action) => action.quoteItemIndex),
TypedReducer<InvoiceItemEntity, EditQuoteItem>(editQuoteItem), TypedReducer<int, EditQuoteItem>((index, action) => action.quoteItemIndex),
]); ]);
InvoiceItemEntity editQuoteItem(InvoiceItemEntity quoteItem, dynamic action) {
return action.quoteItem ?? InvoiceItemEntity();
}
Reducer<String> dropdownFilterReducer = combineReducers([ Reducer<String> dropdownFilterReducer = combineReducers([
TypedReducer<String, FilterQuoteDropdown>(filterquoteDropdownReducer), TypedReducer<String, FilterQuoteDropdown>(filterquoteDropdownReducer),
]); ]);

View File

@ -51,7 +51,6 @@ abstract class QuoteUIState extends Object
return _$QuoteUIState._( return _$QuoteUIState._(
listUIState: ListUIState(QuoteFields.quoteNumber, sortAscending: false), listUIState: ListUIState(QuoteFields.quoteNumber, sortAscending: false),
editing: InvoiceEntity(), editing: InvoiceEntity(),
editingItem: InvoiceItemEntity(),
selectedId: '', selectedId: '',
); );
} }
@ -62,7 +61,7 @@ abstract class QuoteUIState extends Object
InvoiceEntity get editing; InvoiceEntity get editing;
@nullable @nullable
InvoiceItemEntity get editingItem; int get editingItemIndex;
@override @override
bool get isCreatingNew => editing.isNew; bool get isCreatingNew => editing.isNew;

View File

@ -93,11 +93,11 @@ class _$QuoteUIStateSerializer implements StructuredSerializer<QuoteUIState> {
..add(serializers.serialize(object.editing, ..add(serializers.serialize(object.editing,
specifiedType: const FullType(InvoiceEntity))); specifiedType: const FullType(InvoiceEntity)));
} }
if (object.editingItem != null) { if (object.editingItemIndex != null) {
result result
..add('editingItem') ..add('editingItemIndex')
..add(serializers.serialize(object.editingItem, ..add(serializers.serialize(object.editingItemIndex,
specifiedType: const FullType(InvoiceItemEntity))); specifiedType: const FullType(int)));
} }
if (object.selectedId != null) { if (object.selectedId != null) {
result result
@ -123,10 +123,9 @@ class _$QuoteUIStateSerializer implements StructuredSerializer<QuoteUIState> {
result.editing.replace(serializers.deserialize(value, result.editing.replace(serializers.deserialize(value,
specifiedType: const FullType(InvoiceEntity)) as InvoiceEntity); specifiedType: const FullType(InvoiceEntity)) as InvoiceEntity);
break; break;
case 'editingItem': case 'editingItemIndex':
result.editingItem.replace(serializers.deserialize(value, result.editingItemIndex = serializers.deserialize(value,
specifiedType: const FullType(InvoiceItemEntity)) specifiedType: const FullType(int)) as int;
as InvoiceItemEntity);
break; break;
case 'listUIState': case 'listUIState':
result.listUIState.replace(serializers.deserialize(value, result.listUIState.replace(serializers.deserialize(value,
@ -265,7 +264,7 @@ class _$QuoteUIState extends QuoteUIState {
@override @override
final InvoiceEntity editing; final InvoiceEntity editing;
@override @override
final InvoiceItemEntity editingItem; final int editingItemIndex;
@override @override
final ListUIState listUIState; final ListUIState listUIState;
@override @override
@ -280,7 +279,7 @@ class _$QuoteUIState extends QuoteUIState {
_$QuoteUIState._( _$QuoteUIState._(
{this.editing, {this.editing,
this.editingItem, this.editingItemIndex,
this.listUIState, this.listUIState,
this.selectedId, this.selectedId,
this.saveCompleter, this.saveCompleter,
@ -303,7 +302,7 @@ class _$QuoteUIState extends QuoteUIState {
if (identical(other, this)) return true; if (identical(other, this)) return true;
return other is QuoteUIState && return other is QuoteUIState &&
editing == other.editing && editing == other.editing &&
editingItem == other.editingItem && editingItemIndex == other.editingItemIndex &&
listUIState == other.listUIState && listUIState == other.listUIState &&
selectedId == other.selectedId && selectedId == other.selectedId &&
saveCompleter == other.saveCompleter && saveCompleter == other.saveCompleter &&
@ -315,7 +314,7 @@ class _$QuoteUIState extends QuoteUIState {
return $jf($jc( return $jf($jc(
$jc( $jc(
$jc( $jc(
$jc($jc($jc(0, editing.hashCode), editingItem.hashCode), $jc($jc($jc(0, editing.hashCode), editingItemIndex.hashCode),
listUIState.hashCode), listUIState.hashCode),
selectedId.hashCode), selectedId.hashCode),
saveCompleter.hashCode), saveCompleter.hashCode),
@ -326,7 +325,7 @@ class _$QuoteUIState extends QuoteUIState {
String toString() { String toString() {
return (newBuiltValueToStringHelper('QuoteUIState') return (newBuiltValueToStringHelper('QuoteUIState')
..add('editing', editing) ..add('editing', editing)
..add('editingItem', editingItem) ..add('editingItemIndex', editingItemIndex)
..add('listUIState', listUIState) ..add('listUIState', listUIState)
..add('selectedId', selectedId) ..add('selectedId', selectedId)
..add('saveCompleter', saveCompleter) ..add('saveCompleter', saveCompleter)
@ -344,11 +343,10 @@ class QuoteUIStateBuilder
_$this._editing ??= new InvoiceEntityBuilder(); _$this._editing ??= new InvoiceEntityBuilder();
set editing(InvoiceEntityBuilder editing) => _$this._editing = editing; set editing(InvoiceEntityBuilder editing) => _$this._editing = editing;
InvoiceItemEntityBuilder _editingItem; int _editingItemIndex;
InvoiceItemEntityBuilder get editingItem => int get editingItemIndex => _$this._editingItemIndex;
_$this._editingItem ??= new InvoiceItemEntityBuilder(); set editingItemIndex(int editingItemIndex) =>
set editingItem(InvoiceItemEntityBuilder editingItem) => _$this._editingItemIndex = editingItemIndex;
_$this._editingItem = editingItem;
ListUIStateBuilder _listUIState; ListUIStateBuilder _listUIState;
ListUIStateBuilder get listUIState => ListUIStateBuilder get listUIState =>
@ -375,7 +373,7 @@ class QuoteUIStateBuilder
QuoteUIStateBuilder get _$this { QuoteUIStateBuilder get _$this {
if (_$v != null) { if (_$v != null) {
_editing = _$v.editing?.toBuilder(); _editing = _$v.editing?.toBuilder();
_editingItem = _$v.editingItem?.toBuilder(); _editingItemIndex = _$v.editingItemIndex;
_listUIState = _$v.listUIState?.toBuilder(); _listUIState = _$v.listUIState?.toBuilder();
_selectedId = _$v.selectedId; _selectedId = _$v.selectedId;
_saveCompleter = _$v.saveCompleter; _saveCompleter = _$v.saveCompleter;
@ -405,7 +403,7 @@ class QuoteUIStateBuilder
_$result = _$v ?? _$result = _$v ??
new _$QuoteUIState._( new _$QuoteUIState._(
editing: _editing?.build(), editing: _editing?.build(),
editingItem: _editingItem?.build(), editingItemIndex: editingItemIndex,
listUIState: listUIState.build(), listUIState: listUIState.build(),
selectedId: selectedId, selectedId: selectedId,
saveCompleter: saveCompleter, saveCompleter: saveCompleter,
@ -415,8 +413,7 @@ class QuoteUIStateBuilder
try { try {
_$failedField = 'editing'; _$failedField = 'editing';
_editing?.build(); _editing?.build();
_$failedField = 'editingItem';
_editingItem?.build();
_$failedField = 'listUIState'; _$failedField = 'listUIState';
listUIState.build(); listUIState.build();
} catch (e) { } catch (e) {

View File

@ -38,11 +38,10 @@ class _InvoiceEditState extends State<InvoiceEdit>
void initState() { void initState() {
super.initState(); super.initState();
final invoice = widget.viewModel.invoice; final viewModel = widget.viewModel;
final invoiceItem = widget.viewModel.invoiceItem;
final index = final index =
invoice.lineItems.contains(invoiceItem) ? kItemScreen : kDetailsScreen; viewModel.invoiceItemIndex != null ? kItemScreen : kDetailsScreen;
_controller = TabController(vsync: this, length: 4, initialIndex: index); _controller = TabController(vsync: this, length: 4, initialIndex: index);
} }

View File

@ -28,8 +28,7 @@ class InvoiceEditItems extends StatefulWidget {
class _InvoiceEditItemsState extends State<InvoiceEditItems> { class _InvoiceEditItemsState extends State<InvoiceEditItems> {
InvoiceItemEntity selectedInvoiceItem; InvoiceItemEntity selectedInvoiceItem;
void _showInvoiceItemEditor( void _showInvoiceItemEditor(int lineItemIndex, BuildContext context) {
InvoiceItemEntity invoiceItem, BuildContext context) {
showDialog<ItemEditDetails>( showDialog<ItemEditDetails>(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
@ -38,10 +37,9 @@ class _InvoiceEditItemsState extends State<InvoiceEditItems> {
return ItemEditDetails( return ItemEditDetails(
viewModel: viewModel, viewModel: viewModel,
key: Key(invoiceItem.entityKey), key: ValueKey('__${lineItemIndex}__'),
invoiceItem: invoiceItem, invoiceItem: invoice.lineItems[lineItemIndex],
index: invoice.lineItems.indexOf( index: lineItemIndex,
invoice.lineItems.firstWhere((i) => i.id == invoiceItem.id)),
); );
}); });
} }
@ -51,30 +49,31 @@ class _InvoiceEditItemsState extends State<InvoiceEditItems> {
final localization = AppLocalization.of(context); final localization = AppLocalization.of(context);
final viewModel = widget.viewModel; final viewModel = widget.viewModel;
final invoice = viewModel.invoice; final invoice = viewModel.invoice;
final invoiceItem = invoice.lineItems.contains(viewModel.invoiceItem) final itemIndex = viewModel.invoiceItemIndex;
? viewModel.invoiceItem final invoiceItem =
itemIndex != null && invoice.lineItems.length > itemIndex
? invoice.lineItems[itemIndex]
: null; : null;
if (invoiceItem != null && invoiceItem != selectedInvoiceItem) { if (invoiceItem != null && invoiceItem != selectedInvoiceItem) {
selectedInvoiceItem = invoiceItem; selectedInvoiceItem = invoiceItem;
WidgetsBinding.instance.addPostFrameCallback((duration) { WidgetsBinding.instance.addPostFrameCallback((duration) {
_showInvoiceItemEditor(invoiceItem, context); _showInvoiceItemEditor(itemIndex, context);
}); });
} }
if (invoice.lineItems.isEmpty) { if (invoice.lineItems.isEmpty) {
return HelpText(localization.clickPlusToAddItem); return HelpText(localization.clickPlusToAddItem);
} }
final lineItems =
invoice.lineItems.map((invoiceItem) => InvoiceItemListTile(
invoice: invoice,
invoiceItem: invoiceItem,
onTap: () => _showInvoiceItemEditor(invoiceItem, context),
));
return ListView( return ListView(
children: lineItems.toList(), children: [
for (int i = 0; i < invoice.lineItems.length; i++)
InvoiceItemListTile(
invoice: invoice,
invoiceItem: invoice.lineItems[i],
onTap: () => _showInvoiceItemEditor(i, context),
)
],
); );
} }
} }

View File

@ -29,7 +29,7 @@ class EntityEditItemsVM {
EntityEditItemsVM({ EntityEditItemsVM({
@required this.company, @required this.company,
@required this.invoice, @required this.invoice,
@required this.invoiceItem, @required this.invoiceItemIndex,
@required this.onRemoveInvoiceItemPressed, @required this.onRemoveInvoiceItemPressed,
@required this.onDoneInvoiceItemPressed, @required this.onDoneInvoiceItemPressed,
@required this.onChangedInvoiceItem, @required this.onChangedInvoiceItem,
@ -37,7 +37,7 @@ class EntityEditItemsVM {
final CompanyEntity company; final CompanyEntity company;
final InvoiceEntity invoice; final InvoiceEntity invoice;
final InvoiceItemEntity invoiceItem; final int invoiceItemIndex;
final Function(int) onRemoveInvoiceItemPressed; final Function(int) onRemoveInvoiceItemPressed;
final Function onDoneInvoiceItemPressed; final Function onDoneInvoiceItemPressed;
final Function(InvoiceItemEntity, int) onChangedInvoiceItem; final Function(InvoiceItemEntity, int) onChangedInvoiceItem;
@ -47,14 +47,14 @@ class InvoiceEditItemsVM extends EntityEditItemsVM {
InvoiceEditItemsVM({ InvoiceEditItemsVM({
CompanyEntity company, CompanyEntity company,
InvoiceEntity invoice, InvoiceEntity invoice,
InvoiceItemEntity invoiceItem, int invoiceItemIndex,
Function(int) onRemoveInvoiceItemPressed, Function(int) onRemoveInvoiceItemPressed,
Function onDoneInvoiceItemPressed, Function onDoneInvoiceItemPressed,
Function(InvoiceItemEntity, int) onChangedInvoiceItem, Function(InvoiceItemEntity, int) onChangedInvoiceItem,
}) : super( }) : super(
company: company, company: company,
invoice: invoice, invoice: invoice,
invoiceItem: invoiceItem, invoiceItemIndex: invoiceItemIndex,
onRemoveInvoiceItemPressed: onRemoveInvoiceItemPressed, onRemoveInvoiceItemPressed: onRemoveInvoiceItemPressed,
onDoneInvoiceItemPressed: onDoneInvoiceItemPressed, onDoneInvoiceItemPressed: onDoneInvoiceItemPressed,
onChangedInvoiceItem: onChangedInvoiceItem, onChangedInvoiceItem: onChangedInvoiceItem,
@ -67,7 +67,7 @@ class InvoiceEditItemsVM extends EntityEditItemsVM {
return InvoiceEditItemsVM( return InvoiceEditItemsVM(
company: state.selectedCompany, company: state.selectedCompany,
invoice: invoice, invoice: invoice,
invoiceItem: state.invoiceUIState.editingItem, invoiceItemIndex: state.invoiceUIState.editingItemIndex,
onRemoveInvoiceItemPressed: (index) => onRemoveInvoiceItemPressed: (index) =>
store.dispatch(DeleteInvoiceItem(index)), store.dispatch(DeleteInvoiceItem(index)),
onDoneInvoiceItemPressed: () => store.dispatch(EditInvoiceItem()), onDoneInvoiceItemPressed: () => store.dispatch(EditInvoiceItem()),

View File

@ -41,7 +41,7 @@ class EntityEditVM {
@required this.state, @required this.state,
@required this.company, @required this.company,
@required this.invoice, @required this.invoice,
@required this.invoiceItem, @required this.invoiceItemIndex,
@required this.origInvoice, @required this.origInvoice,
@required this.onSavePressed, @required this.onSavePressed,
@required this.onItemsAdded, @required this.onItemsAdded,
@ -53,7 +53,7 @@ class EntityEditVM {
final AppState state; final AppState state;
final CompanyEntity company; final CompanyEntity company;
final InvoiceEntity invoice; final InvoiceEntity invoice;
final InvoiceItemEntity invoiceItem; final int invoiceItemIndex;
final InvoiceEntity origInvoice; final InvoiceEntity origInvoice;
final Function(BuildContext) onSavePressed; final Function(BuildContext) onSavePressed;
final Function(List<InvoiceItemEntity>, String) onItemsAdded; final Function(List<InvoiceItemEntity>, String) onItemsAdded;
@ -67,7 +67,7 @@ class InvoiceEditVM extends EntityEditVM {
AppState state, AppState state,
CompanyEntity company, CompanyEntity company,
InvoiceEntity invoice, InvoiceEntity invoice,
InvoiceItemEntity invoiceItem, int invoiceItemIndex,
InvoiceEntity origInvoice, InvoiceEntity origInvoice,
Function(BuildContext) onSavePressed, Function(BuildContext) onSavePressed,
Function(List<InvoiceItemEntity>, String) onItemsAdded, Function(List<InvoiceItemEntity>, String) onItemsAdded,
@ -78,7 +78,7 @@ class InvoiceEditVM extends EntityEditVM {
state: state, state: state,
company: company, company: company,
invoice: invoice, invoice: invoice,
invoiceItem: invoiceItem, invoiceItemIndex: invoiceItemIndex,
origInvoice: origInvoice, origInvoice: origInvoice,
onSavePressed: onSavePressed, onSavePressed: onSavePressed,
onItemsAdded: onItemsAdded, onItemsAdded: onItemsAdded,
@ -96,7 +96,7 @@ class InvoiceEditVM extends EntityEditVM {
company: state.selectedCompany, company: state.selectedCompany,
isSaving: state.isSaving, isSaving: state.isSaving,
invoice: invoice, invoice: invoice,
invoiceItem: state.invoiceUIState.editingItem, invoiceItemIndex: state.invoiceUIState.editingItemIndex,
origInvoice: store.state.invoiceState.map[invoice.id], origInvoice: store.state.invoiceState.map[invoice.id],
onBackPressed: () { onBackPressed: () {
if (state.uiState.currentRoute.contains(InvoiceScreen.route)) { if (state.uiState.currentRoute.contains(InvoiceScreen.route)) {
@ -134,7 +134,7 @@ class InvoiceEditVM extends EntityEditVM {
store.dispatch(AddInvoiceItems(items)); store.dispatch(AddInvoiceItems(items));
// if we're just adding one item automatically show the editor // if we're just adding one item automatically show the editor
if (items.length == 1) { if (items.length == 1) {
store.dispatch(EditInvoiceItem(items[0])); store.dispatch(EditInvoiceItem(invoice.lineItems.length));
} }
}, },
onCancelPressed: (BuildContext context) { onCancelPressed: (BuildContext context) {

View File

@ -160,7 +160,7 @@ class InvoiceOverview extends StatelessWidget {
invoice: invoice, invoice: invoice,
invoiceItem: invoiceItem, invoiceItem: invoiceItem,
onTap: () => userCompany.canEditEntity(invoice) onTap: () => userCompany.canEditEntity(invoice)
? viewModel.onEditPressed(context, invoiceItem) ? viewModel.onEditPressed(context, invoice.lineItems.indexOf(invoiceItem))
: null, : null,
); );
}, },

View File

@ -67,7 +67,7 @@ class EntityViewVM {
final bool isSaving; final bool isSaving;
final bool isDirty; final bool isDirty;
final Function(BuildContext, EntityAction) onActionSelected; final Function(BuildContext, EntityAction) onActionSelected;
final Function(BuildContext, [InvoiceItemEntity]) onEditPressed; final Function(BuildContext, [int]) onEditPressed;
final Function(BuildContext, [bool]) onClientPressed; final Function(BuildContext, [bool]) onClientPressed;
final Function(BuildContext) onPaymentsPressed; final Function(BuildContext) onPaymentsPressed;
final Function(BuildContext, PaymentEntity, [bool]) onPaymentPressed; final Function(BuildContext, PaymentEntity, [bool]) onPaymentPressed;
@ -87,7 +87,7 @@ class InvoiceViewVM extends EntityViewVM {
bool isSaving, bool isSaving,
bool isDirty, bool isDirty,
Function(BuildContext, EntityAction) onEntityAction, Function(BuildContext, EntityAction) onEntityAction,
Function(BuildContext, [InvoiceItemEntity]) onEditPressed, Function(BuildContext, [int]) onEditPressed,
Function(BuildContext, [bool]) onClientPressed, Function(BuildContext, [bool]) onClientPressed,
Function(BuildContext, PaymentEntity, [bool]) onPaymentPressed, Function(BuildContext, PaymentEntity, [bool]) onPaymentPressed,
Function(BuildContext) onPaymentsPressed, Function(BuildContext) onPaymentsPressed,
@ -133,14 +133,14 @@ class InvoiceViewVM extends EntityViewVM {
isDirty: invoice.isNew, isDirty: invoice.isNew,
invoice: invoice, invoice: invoice,
client: client, client: client,
onEditPressed: (BuildContext context, [InvoiceItemEntity invoiceItem]) { onEditPressed: (BuildContext context, [invoiceItemIndex]) {
final Completer<InvoiceEntity> completer = final Completer<InvoiceEntity> completer =
new Completer<InvoiceEntity>(); new Completer<InvoiceEntity>();
store.dispatch(EditInvoice( store.dispatch(EditInvoice(
invoice: invoice, invoice: invoice,
context: context, context: context,
completer: completer, completer: completer,
invoiceItem: invoiceItem)); invoiceItemIndex: invoiceItemIndex));
completer.future.then((invoice) { completer.future.then((invoice) {
Scaffold.of(context).showSnackBar(SnackBar( Scaffold.of(context).showSnackBar(SnackBar(
content: SnackBarRow( content: SnackBarRow(

View File

@ -30,14 +30,14 @@ class QuoteEditItemsVM extends EntityEditItemsVM {
QuoteEditItemsVM({ QuoteEditItemsVM({
CompanyEntity company, CompanyEntity company,
InvoiceEntity invoice, InvoiceEntity invoice,
InvoiceItemEntity invoiceItem, int invoiceItemIndex,
Function(int) onRemoveInvoiceItemPressed, Function(int) onRemoveInvoiceItemPressed,
Function onDoneInvoiceItemPressed, Function onDoneInvoiceItemPressed,
Function(InvoiceItemEntity, int) onChangedInvoiceItem, Function(InvoiceItemEntity, int) onChangedInvoiceItem,
}) : super( }) : super(
company: company, company: company,
invoice: invoice, invoice: invoice,
invoiceItem: invoiceItem, invoiceItemIndex: invoiceItemIndex,
onRemoveInvoiceItemPressed: onRemoveInvoiceItemPressed, onRemoveInvoiceItemPressed: onRemoveInvoiceItemPressed,
onDoneInvoiceItemPressed: onDoneInvoiceItemPressed, onDoneInvoiceItemPressed: onDoneInvoiceItemPressed,
onChangedInvoiceItem: onChangedInvoiceItem, onChangedInvoiceItem: onChangedInvoiceItem,
@ -50,7 +50,7 @@ class QuoteEditItemsVM extends EntityEditItemsVM {
return QuoteEditItemsVM( return QuoteEditItemsVM(
company: state.selectedCompany, company: state.selectedCompany,
invoice: quote, invoice: quote,
invoiceItem: state.quoteUIState.editingItem, invoiceItemIndex: state.quoteUIState.editingItemIndex,
onRemoveInvoiceItemPressed: (index) => onRemoveInvoiceItemPressed: (index) =>
store.dispatch(DeleteQuoteItem(index)), store.dispatch(DeleteQuoteItem(index)),
onDoneInvoiceItemPressed: () => store.dispatch(EditQuoteItem()), onDoneInvoiceItemPressed: () => store.dispatch(EditQuoteItem()),

View File

@ -42,7 +42,7 @@ class QuoteEditVM extends EntityEditVM {
AppState state, AppState state,
CompanyEntity company, CompanyEntity company,
InvoiceEntity invoice, InvoiceEntity invoice,
InvoiceItemEntity invoiceItem, int invoiceItemIndex,
InvoiceEntity origInvoice, InvoiceEntity origInvoice,
Function(BuildContext) onSavePressed, Function(BuildContext) onSavePressed,
Function(List<InvoiceItemEntity>, String) onItemsAdded, Function(List<InvoiceItemEntity>, String) onItemsAdded,
@ -53,7 +53,7 @@ class QuoteEditVM extends EntityEditVM {
state: state, state: state,
company: company, company: company,
invoice: invoice, invoice: invoice,
invoiceItem: invoiceItem, invoiceItemIndex: invoiceItemIndex,
origInvoice: origInvoice, origInvoice: origInvoice,
onSavePressed: onSavePressed, onSavePressed: onSavePressed,
onItemsAdded: onItemsAdded, onItemsAdded: onItemsAdded,
@ -70,7 +70,7 @@ class QuoteEditVM extends EntityEditVM {
company: state.selectedCompany, company: state.selectedCompany,
isSaving: state.isSaving, isSaving: state.isSaving,
invoice: quote, invoice: quote,
invoiceItem: state.quoteUIState.editingItem, invoiceItemIndex: state.quoteUIState.editingItemIndex,
origInvoice: store.state.quoteState.map[quote.id], origInvoice: store.state.quoteState.map[quote.id],
onBackPressed: () { onBackPressed: () {
if (state.uiState.currentRoute.contains(QuoteScreen.route)) { if (state.uiState.currentRoute.contains(QuoteScreen.route)) {
@ -100,7 +100,7 @@ class QuoteEditVM extends EntityEditVM {
}, },
onItemsAdded: (items, clientId) { onItemsAdded: (items, clientId) {
if (items.length == 1) { if (items.length == 1) {
store.dispatch(EditQuoteItem(items[0])); store.dispatch(EditQuoteItem(quote.lineItems.length));
} }
store.dispatch(AddQuoteItems(items)); store.dispatch(AddQuoteItems(items));
}, },

View File

@ -36,11 +36,10 @@ class _QuoteEditState extends State<QuoteEdit>
void initState() { void initState() {
super.initState(); super.initState();
final invoice = widget.viewModel.invoice; final viewModel = widget.viewModel;
final invoiceItem = widget.viewModel.invoiceItem;
final index = final index =
invoice.lineItems.contains(invoiceItem) ? kItemScreen : kDetailsScreen; viewModel.invoiceItemIndex != null ? kItemScreen : kDetailsScreen;
_controller = TabController(vsync: this, length: 3, initialIndex: index); _controller = TabController(vsync: this, length: 3, initialIndex: index);
} }

View File

@ -49,7 +49,7 @@ class QuoteViewVM extends EntityViewVM {
bool isSaving, bool isSaving,
bool isDirty, bool isDirty,
Function(BuildContext, EntityAction) onEntityAction, Function(BuildContext, EntityAction) onEntityAction,
Function(BuildContext, [InvoiceItemEntity]) onEditPressed, Function(BuildContext, [int]) onEditPressed,
Function(BuildContext, [bool]) onClientPressed, Function(BuildContext, [bool]) onClientPressed,
Function(BuildContext) onPaymentsPressed, Function(BuildContext) onPaymentsPressed,
Function(BuildContext, PaymentEntity) onPaymentPressed, Function(BuildContext, PaymentEntity) onPaymentPressed,
@ -98,14 +98,14 @@ class QuoteViewVM extends EntityViewVM {
isDirty: quote.isNew, isDirty: quote.isNew,
invoice: quote, invoice: quote,
client: client, client: client,
onEditPressed: (BuildContext context, [InvoiceItemEntity invoiceItem]) { onEditPressed: (BuildContext context, [int index]) {
final Completer<InvoiceEntity> completer = final Completer<InvoiceEntity> completer =
new Completer<InvoiceEntity>(); new Completer<InvoiceEntity>();
store.dispatch(EditQuote( store.dispatch(EditQuote(
quote: quote, quote: quote,
context: context, context: context,
completer: completer, completer: completer,
quoteItem: invoiceItem)); quoteItemIndex: index));
completer.future.then((invoice) { completer.future.then((invoice) {
Scaffold.of(context).showSnackBar(SnackBar( Scaffold.of(context).showSnackBar(SnackBar(
content: SnackBarRow( content: SnackBarRow(