Line item fixes
This commit is contained in:
parent
4e22a59942
commit
d7d9b07f13
|
|
@ -512,13 +512,10 @@ abstract class InvoiceEntity extends Object
|
|||
static Serializer<InvoiceEntity> get serializer => _$invoiceEntitySerializer;
|
||||
}
|
||||
|
||||
abstract class InvoiceItemEntity extends Object
|
||||
with BaseEntity, SelectableEntity
|
||||
abstract class InvoiceItemEntity
|
||||
implements Built<InvoiceItemEntity, InvoiceItemEntityBuilder> {
|
||||
factory InvoiceItemEntity({String productKey, double quantity}) {
|
||||
return _$InvoiceItemEntity._(
|
||||
id: BaseEntity.nextId,
|
||||
isChanged: false,
|
||||
productKey: productKey ?? '',
|
||||
notes: '',
|
||||
cost: 0.0,
|
||||
|
|
@ -533,19 +530,11 @@ abstract class InvoiceItemEntity extends Object
|
|||
customValue1: '',
|
||||
customValue2: '',
|
||||
discount: 0.0,
|
||||
updatedAt: 0,
|
||||
archivedAt: 0,
|
||||
isDeleted: false,
|
||||
);
|
||||
}
|
||||
|
||||
InvoiceItemEntity._();
|
||||
|
||||
@override
|
||||
EntityType get entityType {
|
||||
return EntityType.invoiceItem;
|
||||
}
|
||||
|
||||
@BuiltValueField(wireName: 'product_key')
|
||||
String get productKey;
|
||||
|
||||
|
|
@ -598,24 +587,6 @@ abstract class InvoiceItemEntity extends Object
|
|||
|
||||
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 item;
|
||||
|
||||
|
|
@ -637,17 +608,6 @@ abstract class InvoiceItemEntity extends Object
|
|||
return item;
|
||||
}
|
||||
|
||||
@override
|
||||
String get listDisplayName {
|
||||
return '';
|
||||
}
|
||||
|
||||
@override
|
||||
double get listDisplayAmount => null;
|
||||
|
||||
@override
|
||||
FormatNumberType get listDisplayAmountType => FormatNumberType.money;
|
||||
|
||||
static Serializer<InvoiceItemEntity> get serializer =>
|
||||
_$invoiceItemEntitySerializer;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -606,54 +606,6 @@ class _$InvoiceItemEntitySerializer
|
|||
..add(serializers.serialize(object.expenseId,
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
@ -733,38 +685,6 @@ class _$InvoiceItemEntitySerializer
|
|||
result.expenseId = serializers.deserialize(value,
|
||||
specifiedType: const FullType(String)) as String;
|
||||
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;
|
||||
@override
|
||||
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(
|
||||
[void Function(InvoiceItemEntityBuilder) updates]) =>
|
||||
|
|
@ -1931,15 +1835,7 @@ class _$InvoiceItemEntity extends InvoiceItemEntity {
|
|||
this.customValue2,
|
||||
this.discount,
|
||||
this.taskId,
|
||||
this.expenseId,
|
||||
this.isChanged,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
this.archivedAt,
|
||||
this.isDeleted,
|
||||
this.createdUserId,
|
||||
this.assignedUserId,
|
||||
this.id})
|
||||
this.expenseId})
|
||||
: super._() {
|
||||
if (productKey == null) {
|
||||
throw new BuiltValueNullFieldError('InvoiceItemEntity', 'productKey');
|
||||
|
|
@ -2013,15 +1909,7 @@ class _$InvoiceItemEntity extends InvoiceItemEntity {
|
|||
customValue2 == other.customValue2 &&
|
||||
discount == other.discount &&
|
||||
taskId == other.taskId &&
|
||||
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;
|
||||
expenseId == other.expenseId;
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
@ -2042,28 +1930,24 @@ class _$InvoiceItemEntity extends InvoiceItemEntity {
|
|||
$jc(
|
||||
$jc(
|
||||
$jc(
|
||||
$jc(
|
||||
$jc(
|
||||
$jc($jc($jc($jc($jc($jc(0, productKey.hashCode), notes.hashCode), cost.hashCode), quantity.hashCode), taxName1.hashCode),
|
||||
taxRate1.hashCode),
|
||||
taxName2.hashCode),
|
||||
taxRate2.hashCode),
|
||||
taxName3.hashCode),
|
||||
taxRate3.hashCode),
|
||||
invoiceItemTypeId.hashCode),
|
||||
customValue1.hashCode),
|
||||
customValue2.hashCode),
|
||||
discount.hashCode),
|
||||
taskId.hashCode),
|
||||
expenseId.hashCode),
|
||||
isChanged.hashCode),
|
||||
createdAt.hashCode),
|
||||
updatedAt.hashCode),
|
||||
archivedAt.hashCode),
|
||||
isDeleted.hashCode),
|
||||
createdUserId.hashCode),
|
||||
assignedUserId.hashCode),
|
||||
id.hashCode));
|
||||
0,
|
||||
productKey
|
||||
.hashCode),
|
||||
notes.hashCode),
|
||||
cost.hashCode),
|
||||
quantity.hashCode),
|
||||
taxName1.hashCode),
|
||||
taxRate1.hashCode),
|
||||
taxName2.hashCode),
|
||||
taxRate2.hashCode),
|
||||
taxName3.hashCode),
|
||||
taxRate3.hashCode),
|
||||
invoiceItemTypeId.hashCode),
|
||||
customValue1.hashCode),
|
||||
customValue2.hashCode),
|
||||
discount.hashCode),
|
||||
taskId.hashCode),
|
||||
expenseId.hashCode));
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
@ -2084,15 +1968,7 @@ class _$InvoiceItemEntity extends InvoiceItemEntity {
|
|||
..add('customValue2', customValue2)
|
||||
..add('discount', discount)
|
||||
..add('taskId', taskId)
|
||||
..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))
|
||||
..add('expenseId', expenseId))
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
|
|
@ -2166,40 +2042,6 @@ class InvoiceItemEntityBuilder
|
|||
String get expenseId => _$this._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 get _$this {
|
||||
|
|
@ -2220,14 +2062,6 @@ class InvoiceItemEntityBuilder
|
|||
_discount = _$v.discount;
|
||||
_taskId = _$v.taskId;
|
||||
_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;
|
||||
}
|
||||
return this;
|
||||
|
|
@ -2265,15 +2099,7 @@ class InvoiceItemEntityBuilder
|
|||
customValue2: customValue2,
|
||||
discount: discount,
|
||||
taskId: taskId,
|
||||
expenseId: expenseId,
|
||||
isChanged: isChanged,
|
||||
createdAt: createdAt,
|
||||
updatedAt: updatedAt,
|
||||
archivedAt: archivedAt,
|
||||
isDeleted: isDeleted,
|
||||
createdUserId: createdUserId,
|
||||
assignedUserId: assignedUserId,
|
||||
id: id);
|
||||
expenseId: expenseId);
|
||||
replace(_$result);
|
||||
return _$result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,11 +33,11 @@ class EditInvoice implements PersistUI {
|
|||
{this.invoice,
|
||||
this.context,
|
||||
this.completer,
|
||||
this.invoiceItem,
|
||||
this.invoiceItemIndex,
|
||||
this.force = false});
|
||||
|
||||
final InvoiceEntity invoice;
|
||||
final InvoiceItemEntity invoiceItem;
|
||||
final int invoiceItemIndex;
|
||||
final BuildContext context;
|
||||
final Completer completer;
|
||||
final bool force;
|
||||
|
|
@ -52,9 +52,9 @@ class ShowEmailInvoice {
|
|||
}
|
||||
|
||||
class EditInvoiceItem implements PersistUI {
|
||||
EditInvoiceItem([this.invoiceItem]);
|
||||
EditInvoiceItem([this.invoiceItemIndex]);
|
||||
|
||||
final InvoiceItemEntity invoiceItem;
|
||||
final int invoiceItemIndex;
|
||||
}
|
||||
|
||||
class UpdateInvoice implements PersistUI {
|
||||
|
|
|
|||
|
|
@ -13,20 +13,15 @@ EntityUIState invoiceUIReducer(InvoiceUIState state, dynamic action) {
|
|||
return state.rebuild((b) => b
|
||||
..listUIState.replace(invoiceListReducer(state.listUIState, action))
|
||||
..editing.replace(editingReducer(state.editing, action))
|
||||
..editingItem.replace(editingItemReducer(state.editingItem, action))
|
||||
..editingItemIndex = editingItemIndexReducer(state.editingItemIndex, action)
|
||||
..selectedId = selectedIdReducer(state.selectedId, action));
|
||||
}
|
||||
|
||||
final editingItemReducer = combineReducers<InvoiceItemEntity>([
|
||||
TypedReducer<InvoiceItemEntity, EditInvoice>(editInvoiceItem),
|
||||
TypedReducer<InvoiceItemEntity, EditInvoiceItem>(editInvoiceItem),
|
||||
final editingItemIndexReducer = combineReducers<int>([
|
||||
TypedReducer<int, EditInvoice>((index, action) => action.invoiceItemIndex),
|
||||
TypedReducer<int, EditInvoiceItem>((index, action) => action.invoiceItemIndex),
|
||||
]);
|
||||
|
||||
InvoiceItemEntity editInvoiceItem(
|
||||
InvoiceItemEntity invoiceItem, dynamic action) {
|
||||
return action.invoiceItem ?? InvoiceItemEntity();
|
||||
}
|
||||
|
||||
Reducer<String> dropdownFilterReducer = combineReducers([
|
||||
TypedReducer<String, FilterInvoiceDropdown>(filterInvoiceDropdownReducer),
|
||||
]);
|
||||
|
|
|
|||
|
|
@ -59,7 +59,6 @@ abstract class InvoiceUIState extends Object
|
|||
listUIState:
|
||||
ListUIState(InvoiceFields.invoiceNumber, sortAscending: false),
|
||||
editing: InvoiceEntity(),
|
||||
editingItem: InvoiceItemEntity(),
|
||||
selectedId: '',
|
||||
);
|
||||
}
|
||||
|
|
@ -70,7 +69,7 @@ abstract class InvoiceUIState extends Object
|
|||
InvoiceEntity get editing;
|
||||
|
||||
@nullable
|
||||
InvoiceItemEntity get editingItem;
|
||||
int get editingItemIndex;
|
||||
|
||||
@override
|
||||
bool get isCreatingNew => editing.isNew;
|
||||
|
|
|
|||
|
|
@ -95,11 +95,11 @@ class _$InvoiceUIStateSerializer
|
|||
..add(serializers.serialize(object.editing,
|
||||
specifiedType: const FullType(InvoiceEntity)));
|
||||
}
|
||||
if (object.editingItem != null) {
|
||||
if (object.editingItemIndex != null) {
|
||||
result
|
||||
..add('editingItem')
|
||||
..add(serializers.serialize(object.editingItem,
|
||||
specifiedType: const FullType(InvoiceItemEntity)));
|
||||
..add('editingItemIndex')
|
||||
..add(serializers.serialize(object.editingItemIndex,
|
||||
specifiedType: const FullType(int)));
|
||||
}
|
||||
if (object.selectedId != null) {
|
||||
result
|
||||
|
|
@ -126,10 +126,9 @@ class _$InvoiceUIStateSerializer
|
|||
result.editing.replace(serializers.deserialize(value,
|
||||
specifiedType: const FullType(InvoiceEntity)) as InvoiceEntity);
|
||||
break;
|
||||
case 'editingItem':
|
||||
result.editingItem.replace(serializers.deserialize(value,
|
||||
specifiedType: const FullType(InvoiceItemEntity))
|
||||
as InvoiceItemEntity);
|
||||
case 'editingItemIndex':
|
||||
result.editingItemIndex = serializers.deserialize(value,
|
||||
specifiedType: const FullType(int)) as int;
|
||||
break;
|
||||
case 'listUIState':
|
||||
result.listUIState.replace(serializers.deserialize(value,
|
||||
|
|
@ -269,7 +268,7 @@ class _$InvoiceUIState extends InvoiceUIState {
|
|||
@override
|
||||
final InvoiceEntity editing;
|
||||
@override
|
||||
final InvoiceItemEntity editingItem;
|
||||
final int editingItemIndex;
|
||||
@override
|
||||
final ListUIState listUIState;
|
||||
@override
|
||||
|
|
@ -284,7 +283,7 @@ class _$InvoiceUIState extends InvoiceUIState {
|
|||
|
||||
_$InvoiceUIState._(
|
||||
{this.editing,
|
||||
this.editingItem,
|
||||
this.editingItemIndex,
|
||||
this.listUIState,
|
||||
this.selectedId,
|
||||
this.saveCompleter,
|
||||
|
|
@ -308,7 +307,7 @@ class _$InvoiceUIState extends InvoiceUIState {
|
|||
if (identical(other, this)) return true;
|
||||
return other is InvoiceUIState &&
|
||||
editing == other.editing &&
|
||||
editingItem == other.editingItem &&
|
||||
editingItemIndex == other.editingItemIndex &&
|
||||
listUIState == other.listUIState &&
|
||||
selectedId == other.selectedId &&
|
||||
saveCompleter == other.saveCompleter &&
|
||||
|
|
@ -320,7 +319,7 @@ class _$InvoiceUIState extends InvoiceUIState {
|
|||
return $jf($jc(
|
||||
$jc(
|
||||
$jc(
|
||||
$jc($jc($jc(0, editing.hashCode), editingItem.hashCode),
|
||||
$jc($jc($jc(0, editing.hashCode), editingItemIndex.hashCode),
|
||||
listUIState.hashCode),
|
||||
selectedId.hashCode),
|
||||
saveCompleter.hashCode),
|
||||
|
|
@ -331,7 +330,7 @@ class _$InvoiceUIState extends InvoiceUIState {
|
|||
String toString() {
|
||||
return (newBuiltValueToStringHelper('InvoiceUIState')
|
||||
..add('editing', editing)
|
||||
..add('editingItem', editingItem)
|
||||
..add('editingItemIndex', editingItemIndex)
|
||||
..add('listUIState', listUIState)
|
||||
..add('selectedId', selectedId)
|
||||
..add('saveCompleter', saveCompleter)
|
||||
|
|
@ -349,11 +348,10 @@ class InvoiceUIStateBuilder
|
|||
_$this._editing ??= new InvoiceEntityBuilder();
|
||||
set editing(InvoiceEntityBuilder editing) => _$this._editing = editing;
|
||||
|
||||
InvoiceItemEntityBuilder _editingItem;
|
||||
InvoiceItemEntityBuilder get editingItem =>
|
||||
_$this._editingItem ??= new InvoiceItemEntityBuilder();
|
||||
set editingItem(InvoiceItemEntityBuilder editingItem) =>
|
||||
_$this._editingItem = editingItem;
|
||||
int _editingItemIndex;
|
||||
int get editingItemIndex => _$this._editingItemIndex;
|
||||
set editingItemIndex(int editingItemIndex) =>
|
||||
_$this._editingItemIndex = editingItemIndex;
|
||||
|
||||
ListUIStateBuilder _listUIState;
|
||||
ListUIStateBuilder get listUIState =>
|
||||
|
|
@ -380,7 +378,7 @@ class InvoiceUIStateBuilder
|
|||
InvoiceUIStateBuilder get _$this {
|
||||
if (_$v != null) {
|
||||
_editing = _$v.editing?.toBuilder();
|
||||
_editingItem = _$v.editingItem?.toBuilder();
|
||||
_editingItemIndex = _$v.editingItemIndex;
|
||||
_listUIState = _$v.listUIState?.toBuilder();
|
||||
_selectedId = _$v.selectedId;
|
||||
_saveCompleter = _$v.saveCompleter;
|
||||
|
|
@ -410,7 +408,7 @@ class InvoiceUIStateBuilder
|
|||
_$result = _$v ??
|
||||
new _$InvoiceUIState._(
|
||||
editing: _editing?.build(),
|
||||
editingItem: _editingItem?.build(),
|
||||
editingItemIndex: editingItemIndex,
|
||||
listUIState: listUIState.build(),
|
||||
selectedId: selectedId,
|
||||
saveCompleter: saveCompleter,
|
||||
|
|
@ -420,8 +418,7 @@ class InvoiceUIStateBuilder
|
|||
try {
|
||||
_$failedField = 'editing';
|
||||
_editing?.build();
|
||||
_$failedField = 'editingItem';
|
||||
_editingItem?.build();
|
||||
|
||||
_$failedField = 'listUIState';
|
||||
listUIState.build();
|
||||
} catch (e) {
|
||||
|
|
|
|||
|
|
@ -33,11 +33,11 @@ class EditQuote implements PersistUI {
|
|||
{this.quote,
|
||||
this.context,
|
||||
this.completer,
|
||||
this.quoteItem,
|
||||
this.quoteItemIndex,
|
||||
this.force = false});
|
||||
|
||||
final InvoiceEntity quote;
|
||||
final InvoiceItemEntity quoteItem;
|
||||
final int quoteItemIndex;
|
||||
final BuildContext context;
|
||||
final Completer completer;
|
||||
final bool force;
|
||||
|
|
@ -52,9 +52,9 @@ class ShowEmailQuote {
|
|||
}
|
||||
|
||||
class EditQuoteItem implements PersistUI {
|
||||
EditQuoteItem([this.quoteItem]);
|
||||
EditQuoteItem([this.quoteItemIndex]);
|
||||
|
||||
final InvoiceItemEntity quoteItem;
|
||||
final int quoteItemIndex;
|
||||
}
|
||||
|
||||
class UpdateQuote implements PersistUI {
|
||||
|
|
|
|||
|
|
@ -13,19 +13,15 @@ EntityUIState quoteUIReducer(QuoteUIState state, dynamic action) {
|
|||
return state.rebuild((b) => b
|
||||
..listUIState.replace(quoteListReducer(state.listUIState, action))
|
||||
..editing.replace(editingReducer(state.editing, action))
|
||||
..editingItem.replace(editingItemReducer(state.editingItem, action))
|
||||
..editingItemIndex = editingItemReducer(state.editingItemIndex, action)
|
||||
..selectedId = selectedIdReducer(state.selectedId, action));
|
||||
}
|
||||
|
||||
final editingItemReducer = combineReducers<InvoiceItemEntity>([
|
||||
TypedReducer<InvoiceItemEntity, EditQuote>(editQuoteItem),
|
||||
TypedReducer<InvoiceItemEntity, EditQuoteItem>(editQuoteItem),
|
||||
final editingItemReducer = combineReducers<int>([
|
||||
TypedReducer<int, EditQuote>((index, action) => action.quoteItemIndex),
|
||||
TypedReducer<int, EditQuoteItem>((index, action) => action.quoteItemIndex),
|
||||
]);
|
||||
|
||||
InvoiceItemEntity editQuoteItem(InvoiceItemEntity quoteItem, dynamic action) {
|
||||
return action.quoteItem ?? InvoiceItemEntity();
|
||||
}
|
||||
|
||||
Reducer<String> dropdownFilterReducer = combineReducers([
|
||||
TypedReducer<String, FilterQuoteDropdown>(filterquoteDropdownReducer),
|
||||
]);
|
||||
|
|
|
|||
|
|
@ -51,7 +51,6 @@ abstract class QuoteUIState extends Object
|
|||
return _$QuoteUIState._(
|
||||
listUIState: ListUIState(QuoteFields.quoteNumber, sortAscending: false),
|
||||
editing: InvoiceEntity(),
|
||||
editingItem: InvoiceItemEntity(),
|
||||
selectedId: '',
|
||||
);
|
||||
}
|
||||
|
|
@ -62,7 +61,7 @@ abstract class QuoteUIState extends Object
|
|||
InvoiceEntity get editing;
|
||||
|
||||
@nullable
|
||||
InvoiceItemEntity get editingItem;
|
||||
int get editingItemIndex;
|
||||
|
||||
@override
|
||||
bool get isCreatingNew => editing.isNew;
|
||||
|
|
|
|||
|
|
@ -93,11 +93,11 @@ class _$QuoteUIStateSerializer implements StructuredSerializer<QuoteUIState> {
|
|||
..add(serializers.serialize(object.editing,
|
||||
specifiedType: const FullType(InvoiceEntity)));
|
||||
}
|
||||
if (object.editingItem != null) {
|
||||
if (object.editingItemIndex != null) {
|
||||
result
|
||||
..add('editingItem')
|
||||
..add(serializers.serialize(object.editingItem,
|
||||
specifiedType: const FullType(InvoiceItemEntity)));
|
||||
..add('editingItemIndex')
|
||||
..add(serializers.serialize(object.editingItemIndex,
|
||||
specifiedType: const FullType(int)));
|
||||
}
|
||||
if (object.selectedId != null) {
|
||||
result
|
||||
|
|
@ -123,10 +123,9 @@ class _$QuoteUIStateSerializer implements StructuredSerializer<QuoteUIState> {
|
|||
result.editing.replace(serializers.deserialize(value,
|
||||
specifiedType: const FullType(InvoiceEntity)) as InvoiceEntity);
|
||||
break;
|
||||
case 'editingItem':
|
||||
result.editingItem.replace(serializers.deserialize(value,
|
||||
specifiedType: const FullType(InvoiceItemEntity))
|
||||
as InvoiceItemEntity);
|
||||
case 'editingItemIndex':
|
||||
result.editingItemIndex = serializers.deserialize(value,
|
||||
specifiedType: const FullType(int)) as int;
|
||||
break;
|
||||
case 'listUIState':
|
||||
result.listUIState.replace(serializers.deserialize(value,
|
||||
|
|
@ -265,7 +264,7 @@ class _$QuoteUIState extends QuoteUIState {
|
|||
@override
|
||||
final InvoiceEntity editing;
|
||||
@override
|
||||
final InvoiceItemEntity editingItem;
|
||||
final int editingItemIndex;
|
||||
@override
|
||||
final ListUIState listUIState;
|
||||
@override
|
||||
|
|
@ -280,7 +279,7 @@ class _$QuoteUIState extends QuoteUIState {
|
|||
|
||||
_$QuoteUIState._(
|
||||
{this.editing,
|
||||
this.editingItem,
|
||||
this.editingItemIndex,
|
||||
this.listUIState,
|
||||
this.selectedId,
|
||||
this.saveCompleter,
|
||||
|
|
@ -303,7 +302,7 @@ class _$QuoteUIState extends QuoteUIState {
|
|||
if (identical(other, this)) return true;
|
||||
return other is QuoteUIState &&
|
||||
editing == other.editing &&
|
||||
editingItem == other.editingItem &&
|
||||
editingItemIndex == other.editingItemIndex &&
|
||||
listUIState == other.listUIState &&
|
||||
selectedId == other.selectedId &&
|
||||
saveCompleter == other.saveCompleter &&
|
||||
|
|
@ -315,7 +314,7 @@ class _$QuoteUIState extends QuoteUIState {
|
|||
return $jf($jc(
|
||||
$jc(
|
||||
$jc(
|
||||
$jc($jc($jc(0, editing.hashCode), editingItem.hashCode),
|
||||
$jc($jc($jc(0, editing.hashCode), editingItemIndex.hashCode),
|
||||
listUIState.hashCode),
|
||||
selectedId.hashCode),
|
||||
saveCompleter.hashCode),
|
||||
|
|
@ -326,7 +325,7 @@ class _$QuoteUIState extends QuoteUIState {
|
|||
String toString() {
|
||||
return (newBuiltValueToStringHelper('QuoteUIState')
|
||||
..add('editing', editing)
|
||||
..add('editingItem', editingItem)
|
||||
..add('editingItemIndex', editingItemIndex)
|
||||
..add('listUIState', listUIState)
|
||||
..add('selectedId', selectedId)
|
||||
..add('saveCompleter', saveCompleter)
|
||||
|
|
@ -344,11 +343,10 @@ class QuoteUIStateBuilder
|
|||
_$this._editing ??= new InvoiceEntityBuilder();
|
||||
set editing(InvoiceEntityBuilder editing) => _$this._editing = editing;
|
||||
|
||||
InvoiceItemEntityBuilder _editingItem;
|
||||
InvoiceItemEntityBuilder get editingItem =>
|
||||
_$this._editingItem ??= new InvoiceItemEntityBuilder();
|
||||
set editingItem(InvoiceItemEntityBuilder editingItem) =>
|
||||
_$this._editingItem = editingItem;
|
||||
int _editingItemIndex;
|
||||
int get editingItemIndex => _$this._editingItemIndex;
|
||||
set editingItemIndex(int editingItemIndex) =>
|
||||
_$this._editingItemIndex = editingItemIndex;
|
||||
|
||||
ListUIStateBuilder _listUIState;
|
||||
ListUIStateBuilder get listUIState =>
|
||||
|
|
@ -375,7 +373,7 @@ class QuoteUIStateBuilder
|
|||
QuoteUIStateBuilder get _$this {
|
||||
if (_$v != null) {
|
||||
_editing = _$v.editing?.toBuilder();
|
||||
_editingItem = _$v.editingItem?.toBuilder();
|
||||
_editingItemIndex = _$v.editingItemIndex;
|
||||
_listUIState = _$v.listUIState?.toBuilder();
|
||||
_selectedId = _$v.selectedId;
|
||||
_saveCompleter = _$v.saveCompleter;
|
||||
|
|
@ -405,7 +403,7 @@ class QuoteUIStateBuilder
|
|||
_$result = _$v ??
|
||||
new _$QuoteUIState._(
|
||||
editing: _editing?.build(),
|
||||
editingItem: _editingItem?.build(),
|
||||
editingItemIndex: editingItemIndex,
|
||||
listUIState: listUIState.build(),
|
||||
selectedId: selectedId,
|
||||
saveCompleter: saveCompleter,
|
||||
|
|
@ -415,8 +413,7 @@ class QuoteUIStateBuilder
|
|||
try {
|
||||
_$failedField = 'editing';
|
||||
_editing?.build();
|
||||
_$failedField = 'editingItem';
|
||||
_editingItem?.build();
|
||||
|
||||
_$failedField = 'listUIState';
|
||||
listUIState.build();
|
||||
} catch (e) {
|
||||
|
|
|
|||
|
|
@ -38,11 +38,10 @@ class _InvoiceEditState extends State<InvoiceEdit>
|
|||
void initState() {
|
||||
super.initState();
|
||||
|
||||
final invoice = widget.viewModel.invoice;
|
||||
final invoiceItem = widget.viewModel.invoiceItem;
|
||||
final viewModel = widget.viewModel;
|
||||
|
||||
final index =
|
||||
invoice.lineItems.contains(invoiceItem) ? kItemScreen : kDetailsScreen;
|
||||
viewModel.invoiceItemIndex != null ? kItemScreen : kDetailsScreen;
|
||||
_controller = TabController(vsync: this, length: 4, initialIndex: index);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@ class InvoiceEditItems extends StatefulWidget {
|
|||
class _InvoiceEditItemsState extends State<InvoiceEditItems> {
|
||||
InvoiceItemEntity selectedInvoiceItem;
|
||||
|
||||
void _showInvoiceItemEditor(
|
||||
InvoiceItemEntity invoiceItem, BuildContext context) {
|
||||
void _showInvoiceItemEditor(int lineItemIndex, BuildContext context) {
|
||||
showDialog<ItemEditDetails>(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
|
|
@ -38,10 +37,9 @@ class _InvoiceEditItemsState extends State<InvoiceEditItems> {
|
|||
|
||||
return ItemEditDetails(
|
||||
viewModel: viewModel,
|
||||
key: Key(invoiceItem.entityKey),
|
||||
invoiceItem: invoiceItem,
|
||||
index: invoice.lineItems.indexOf(
|
||||
invoice.lineItems.firstWhere((i) => i.id == invoiceItem.id)),
|
||||
key: ValueKey('__${lineItemIndex}__'),
|
||||
invoiceItem: invoice.lineItems[lineItemIndex],
|
||||
index: lineItemIndex,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
|
@ -51,30 +49,31 @@ class _InvoiceEditItemsState extends State<InvoiceEditItems> {
|
|||
final localization = AppLocalization.of(context);
|
||||
final viewModel = widget.viewModel;
|
||||
final invoice = viewModel.invoice;
|
||||
final invoiceItem = invoice.lineItems.contains(viewModel.invoiceItem)
|
||||
? viewModel.invoiceItem
|
||||
: null;
|
||||
final itemIndex = viewModel.invoiceItemIndex;
|
||||
final invoiceItem =
|
||||
itemIndex != null && invoice.lineItems.length > itemIndex
|
||||
? invoice.lineItems[itemIndex]
|
||||
: null;
|
||||
|
||||
if (invoiceItem != null && invoiceItem != selectedInvoiceItem) {
|
||||
selectedInvoiceItem = invoiceItem;
|
||||
WidgetsBinding.instance.addPostFrameCallback((duration) {
|
||||
_showInvoiceItemEditor(invoiceItem, context);
|
||||
_showInvoiceItemEditor(itemIndex, context);
|
||||
});
|
||||
}
|
||||
|
||||
if (invoice.lineItems.isEmpty) {
|
||||
return HelpText(localization.clickPlusToAddItem);
|
||||
}
|
||||
|
||||
final lineItems =
|
||||
invoice.lineItems.map((invoiceItem) => InvoiceItemListTile(
|
||||
invoice: invoice,
|
||||
invoiceItem: invoiceItem,
|
||||
onTap: () => _showInvoiceItemEditor(invoiceItem, context),
|
||||
));
|
||||
|
||||
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),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ class EntityEditItemsVM {
|
|||
EntityEditItemsVM({
|
||||
@required this.company,
|
||||
@required this.invoice,
|
||||
@required this.invoiceItem,
|
||||
@required this.invoiceItemIndex,
|
||||
@required this.onRemoveInvoiceItemPressed,
|
||||
@required this.onDoneInvoiceItemPressed,
|
||||
@required this.onChangedInvoiceItem,
|
||||
|
|
@ -37,7 +37,7 @@ class EntityEditItemsVM {
|
|||
|
||||
final CompanyEntity company;
|
||||
final InvoiceEntity invoice;
|
||||
final InvoiceItemEntity invoiceItem;
|
||||
final int invoiceItemIndex;
|
||||
final Function(int) onRemoveInvoiceItemPressed;
|
||||
final Function onDoneInvoiceItemPressed;
|
||||
final Function(InvoiceItemEntity, int) onChangedInvoiceItem;
|
||||
|
|
@ -47,14 +47,14 @@ class InvoiceEditItemsVM extends EntityEditItemsVM {
|
|||
InvoiceEditItemsVM({
|
||||
CompanyEntity company,
|
||||
InvoiceEntity invoice,
|
||||
InvoiceItemEntity invoiceItem,
|
||||
int invoiceItemIndex,
|
||||
Function(int) onRemoveInvoiceItemPressed,
|
||||
Function onDoneInvoiceItemPressed,
|
||||
Function(InvoiceItemEntity, int) onChangedInvoiceItem,
|
||||
}) : super(
|
||||
company: company,
|
||||
invoice: invoice,
|
||||
invoiceItem: invoiceItem,
|
||||
invoiceItemIndex: invoiceItemIndex,
|
||||
onRemoveInvoiceItemPressed: onRemoveInvoiceItemPressed,
|
||||
onDoneInvoiceItemPressed: onDoneInvoiceItemPressed,
|
||||
onChangedInvoiceItem: onChangedInvoiceItem,
|
||||
|
|
@ -67,7 +67,7 @@ class InvoiceEditItemsVM extends EntityEditItemsVM {
|
|||
return InvoiceEditItemsVM(
|
||||
company: state.selectedCompany,
|
||||
invoice: invoice,
|
||||
invoiceItem: state.invoiceUIState.editingItem,
|
||||
invoiceItemIndex: state.invoiceUIState.editingItemIndex,
|
||||
onRemoveInvoiceItemPressed: (index) =>
|
||||
store.dispatch(DeleteInvoiceItem(index)),
|
||||
onDoneInvoiceItemPressed: () => store.dispatch(EditInvoiceItem()),
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ class EntityEditVM {
|
|||
@required this.state,
|
||||
@required this.company,
|
||||
@required this.invoice,
|
||||
@required this.invoiceItem,
|
||||
@required this.invoiceItemIndex,
|
||||
@required this.origInvoice,
|
||||
@required this.onSavePressed,
|
||||
@required this.onItemsAdded,
|
||||
|
|
@ -53,7 +53,7 @@ class EntityEditVM {
|
|||
final AppState state;
|
||||
final CompanyEntity company;
|
||||
final InvoiceEntity invoice;
|
||||
final InvoiceItemEntity invoiceItem;
|
||||
final int invoiceItemIndex;
|
||||
final InvoiceEntity origInvoice;
|
||||
final Function(BuildContext) onSavePressed;
|
||||
final Function(List<InvoiceItemEntity>, String) onItemsAdded;
|
||||
|
|
@ -67,7 +67,7 @@ class InvoiceEditVM extends EntityEditVM {
|
|||
AppState state,
|
||||
CompanyEntity company,
|
||||
InvoiceEntity invoice,
|
||||
InvoiceItemEntity invoiceItem,
|
||||
int invoiceItemIndex,
|
||||
InvoiceEntity origInvoice,
|
||||
Function(BuildContext) onSavePressed,
|
||||
Function(List<InvoiceItemEntity>, String) onItemsAdded,
|
||||
|
|
@ -78,7 +78,7 @@ class InvoiceEditVM extends EntityEditVM {
|
|||
state: state,
|
||||
company: company,
|
||||
invoice: invoice,
|
||||
invoiceItem: invoiceItem,
|
||||
invoiceItemIndex: invoiceItemIndex,
|
||||
origInvoice: origInvoice,
|
||||
onSavePressed: onSavePressed,
|
||||
onItemsAdded: onItemsAdded,
|
||||
|
|
@ -96,7 +96,7 @@ class InvoiceEditVM extends EntityEditVM {
|
|||
company: state.selectedCompany,
|
||||
isSaving: state.isSaving,
|
||||
invoice: invoice,
|
||||
invoiceItem: state.invoiceUIState.editingItem,
|
||||
invoiceItemIndex: state.invoiceUIState.editingItemIndex,
|
||||
origInvoice: store.state.invoiceState.map[invoice.id],
|
||||
onBackPressed: () {
|
||||
if (state.uiState.currentRoute.contains(InvoiceScreen.route)) {
|
||||
|
|
@ -134,7 +134,7 @@ class InvoiceEditVM extends EntityEditVM {
|
|||
store.dispatch(AddInvoiceItems(items));
|
||||
// if we're just adding one item automatically show the editor
|
||||
if (items.length == 1) {
|
||||
store.dispatch(EditInvoiceItem(items[0]));
|
||||
store.dispatch(EditInvoiceItem(invoice.lineItems.length));
|
||||
}
|
||||
},
|
||||
onCancelPressed: (BuildContext context) {
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ class InvoiceOverview extends StatelessWidget {
|
|||
invoice: invoice,
|
||||
invoiceItem: invoiceItem,
|
||||
onTap: () => userCompany.canEditEntity(invoice)
|
||||
? viewModel.onEditPressed(context, invoiceItem)
|
||||
? viewModel.onEditPressed(context, invoice.lineItems.indexOf(invoiceItem))
|
||||
: null,
|
||||
);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ class EntityViewVM {
|
|||
final bool isSaving;
|
||||
final bool isDirty;
|
||||
final Function(BuildContext, EntityAction) onActionSelected;
|
||||
final Function(BuildContext, [InvoiceItemEntity]) onEditPressed;
|
||||
final Function(BuildContext, [int]) onEditPressed;
|
||||
final Function(BuildContext, [bool]) onClientPressed;
|
||||
final Function(BuildContext) onPaymentsPressed;
|
||||
final Function(BuildContext, PaymentEntity, [bool]) onPaymentPressed;
|
||||
|
|
@ -87,7 +87,7 @@ class InvoiceViewVM extends EntityViewVM {
|
|||
bool isSaving,
|
||||
bool isDirty,
|
||||
Function(BuildContext, EntityAction) onEntityAction,
|
||||
Function(BuildContext, [InvoiceItemEntity]) onEditPressed,
|
||||
Function(BuildContext, [int]) onEditPressed,
|
||||
Function(BuildContext, [bool]) onClientPressed,
|
||||
Function(BuildContext, PaymentEntity, [bool]) onPaymentPressed,
|
||||
Function(BuildContext) onPaymentsPressed,
|
||||
|
|
@ -133,14 +133,14 @@ class InvoiceViewVM extends EntityViewVM {
|
|||
isDirty: invoice.isNew,
|
||||
invoice: invoice,
|
||||
client: client,
|
||||
onEditPressed: (BuildContext context, [InvoiceItemEntity invoiceItem]) {
|
||||
onEditPressed: (BuildContext context, [invoiceItemIndex]) {
|
||||
final Completer<InvoiceEntity> completer =
|
||||
new Completer<InvoiceEntity>();
|
||||
store.dispatch(EditInvoice(
|
||||
invoice: invoice,
|
||||
context: context,
|
||||
completer: completer,
|
||||
invoiceItem: invoiceItem));
|
||||
invoiceItemIndex: invoiceItemIndex));
|
||||
completer.future.then((invoice) {
|
||||
Scaffold.of(context).showSnackBar(SnackBar(
|
||||
content: SnackBarRow(
|
||||
|
|
|
|||
|
|
@ -30,14 +30,14 @@ class QuoteEditItemsVM extends EntityEditItemsVM {
|
|||
QuoteEditItemsVM({
|
||||
CompanyEntity company,
|
||||
InvoiceEntity invoice,
|
||||
InvoiceItemEntity invoiceItem,
|
||||
int invoiceItemIndex,
|
||||
Function(int) onRemoveInvoiceItemPressed,
|
||||
Function onDoneInvoiceItemPressed,
|
||||
Function(InvoiceItemEntity, int) onChangedInvoiceItem,
|
||||
}) : super(
|
||||
company: company,
|
||||
invoice: invoice,
|
||||
invoiceItem: invoiceItem,
|
||||
invoiceItemIndex: invoiceItemIndex,
|
||||
onRemoveInvoiceItemPressed: onRemoveInvoiceItemPressed,
|
||||
onDoneInvoiceItemPressed: onDoneInvoiceItemPressed,
|
||||
onChangedInvoiceItem: onChangedInvoiceItem,
|
||||
|
|
@ -50,7 +50,7 @@ class QuoteEditItemsVM extends EntityEditItemsVM {
|
|||
return QuoteEditItemsVM(
|
||||
company: state.selectedCompany,
|
||||
invoice: quote,
|
||||
invoiceItem: state.quoteUIState.editingItem,
|
||||
invoiceItemIndex: state.quoteUIState.editingItemIndex,
|
||||
onRemoveInvoiceItemPressed: (index) =>
|
||||
store.dispatch(DeleteQuoteItem(index)),
|
||||
onDoneInvoiceItemPressed: () => store.dispatch(EditQuoteItem()),
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ class QuoteEditVM extends EntityEditVM {
|
|||
AppState state,
|
||||
CompanyEntity company,
|
||||
InvoiceEntity invoice,
|
||||
InvoiceItemEntity invoiceItem,
|
||||
int invoiceItemIndex,
|
||||
InvoiceEntity origInvoice,
|
||||
Function(BuildContext) onSavePressed,
|
||||
Function(List<InvoiceItemEntity>, String) onItemsAdded,
|
||||
|
|
@ -53,7 +53,7 @@ class QuoteEditVM extends EntityEditVM {
|
|||
state: state,
|
||||
company: company,
|
||||
invoice: invoice,
|
||||
invoiceItem: invoiceItem,
|
||||
invoiceItemIndex: invoiceItemIndex,
|
||||
origInvoice: origInvoice,
|
||||
onSavePressed: onSavePressed,
|
||||
onItemsAdded: onItemsAdded,
|
||||
|
|
@ -70,7 +70,7 @@ class QuoteEditVM extends EntityEditVM {
|
|||
company: state.selectedCompany,
|
||||
isSaving: state.isSaving,
|
||||
invoice: quote,
|
||||
invoiceItem: state.quoteUIState.editingItem,
|
||||
invoiceItemIndex: state.quoteUIState.editingItemIndex,
|
||||
origInvoice: store.state.quoteState.map[quote.id],
|
||||
onBackPressed: () {
|
||||
if (state.uiState.currentRoute.contains(QuoteScreen.route)) {
|
||||
|
|
@ -100,7 +100,7 @@ class QuoteEditVM extends EntityEditVM {
|
|||
},
|
||||
onItemsAdded: (items, clientId) {
|
||||
if (items.length == 1) {
|
||||
store.dispatch(EditQuoteItem(items[0]));
|
||||
store.dispatch(EditQuoteItem(quote.lineItems.length));
|
||||
}
|
||||
store.dispatch(AddQuoteItems(items));
|
||||
},
|
||||
|
|
|
|||
|
|
@ -36,11 +36,10 @@ class _QuoteEditState extends State<QuoteEdit>
|
|||
void initState() {
|
||||
super.initState();
|
||||
|
||||
final invoice = widget.viewModel.invoice;
|
||||
final invoiceItem = widget.viewModel.invoiceItem;
|
||||
final viewModel = widget.viewModel;
|
||||
|
||||
final index =
|
||||
invoice.lineItems.contains(invoiceItem) ? kItemScreen : kDetailsScreen;
|
||||
viewModel.invoiceItemIndex != null ? kItemScreen : kDetailsScreen;
|
||||
_controller = TabController(vsync: this, length: 3, initialIndex: index);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ class QuoteViewVM extends EntityViewVM {
|
|||
bool isSaving,
|
||||
bool isDirty,
|
||||
Function(BuildContext, EntityAction) onEntityAction,
|
||||
Function(BuildContext, [InvoiceItemEntity]) onEditPressed,
|
||||
Function(BuildContext, [int]) onEditPressed,
|
||||
Function(BuildContext, [bool]) onClientPressed,
|
||||
Function(BuildContext) onPaymentsPressed,
|
||||
Function(BuildContext, PaymentEntity) onPaymentPressed,
|
||||
|
|
@ -98,14 +98,14 @@ class QuoteViewVM extends EntityViewVM {
|
|||
isDirty: quote.isNew,
|
||||
invoice: quote,
|
||||
client: client,
|
||||
onEditPressed: (BuildContext context, [InvoiceItemEntity invoiceItem]) {
|
||||
onEditPressed: (BuildContext context, [int index]) {
|
||||
final Completer<InvoiceEntity> completer =
|
||||
new Completer<InvoiceEntity>();
|
||||
store.dispatch(EditQuote(
|
||||
quote: quote,
|
||||
context: context,
|
||||
completer: completer,
|
||||
quoteItem: invoiceItem));
|
||||
quoteItemIndex: index));
|
||||
completer.future.then((invoice) {
|
||||
Scaffold.of(context).showSnackBar(SnackBar(
|
||||
content: SnackBarRow(
|
||||
|
|
|
|||
Loading…
Reference in New Issue