Recurring schedule
This commit is contained in:
parent
47e769653b
commit
2bb05d1919
|
|
@ -604,11 +604,26 @@ abstract class ExpenseEntity extends Object
|
||||||
@override
|
@override
|
||||||
String get listDisplayName => number ?? '';
|
String get listDisplayName => number ?? '';
|
||||||
|
|
||||||
|
@nullable
|
||||||
|
@BuiltValueField(compare: false)
|
||||||
|
int get loadedAt;
|
||||||
|
|
||||||
bool isBetween(String startDate, String endDate) {
|
bool isBetween(String startDate, String endDate) {
|
||||||
return (startDate ?? '').compareTo(date ?? '') <= 0 &&
|
return (startDate ?? '').compareTo(date ?? '') <= 0 &&
|
||||||
(endDate ?? '').compareTo(date ?? '') >= 0;
|
(endDate ?? '').compareTo(date ?? '') >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool get isLoaded => loadedAt != null && loadedAt > 0;
|
||||||
|
|
||||||
|
bool get isStale {
|
||||||
|
if (!isLoaded) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return DateTime.now().millisecondsSinceEpoch - loadedAt >
|
||||||
|
kMillisecondsToRefreshActivities;
|
||||||
|
}
|
||||||
|
|
||||||
bool get isUpcoming => convertSqlDateToDateTime(date).isAfter(DateTime.now());
|
bool get isUpcoming => convertSqlDateToDateTime(date).isAfter(DateTime.now());
|
||||||
|
|
||||||
bool get isRecurring => [EntityType.recurringExpense].contains(entityType);
|
bool get isRecurring => [EntityType.recurringExpense].contains(entityType);
|
||||||
|
|
|
||||||
|
|
@ -302,6 +302,12 @@ class _$ExpenseEntitySerializer implements StructuredSerializer<ExpenseEntity> {
|
||||||
specifiedType: const FullType(
|
specifiedType: const FullType(
|
||||||
BuiltList, const [const FullType(ExpenseScheduleEntity)])));
|
BuiltList, const [const FullType(ExpenseScheduleEntity)])));
|
||||||
}
|
}
|
||||||
|
value = object.loadedAt;
|
||||||
|
if (value != null) {
|
||||||
|
result
|
||||||
|
..add('loadedAt')
|
||||||
|
..add(serializers.serialize(value, specifiedType: const FullType(int)));
|
||||||
|
}
|
||||||
value = object.isChanged;
|
value = object.isChanged;
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
result
|
result
|
||||||
|
|
@ -528,6 +534,10 @@ class _$ExpenseEntitySerializer implements StructuredSerializer<ExpenseEntity> {
|
||||||
BuiltList, const [const FullType(ExpenseScheduleEntity)]))
|
BuiltList, const [const FullType(ExpenseScheduleEntity)]))
|
||||||
as BuiltList<Object>);
|
as BuiltList<Object>);
|
||||||
break;
|
break;
|
||||||
|
case 'loadedAt':
|
||||||
|
result.loadedAt = serializers.deserialize(value,
|
||||||
|
specifiedType: const FullType(int)) as int;
|
||||||
|
break;
|
||||||
case 'isChanged':
|
case 'isChanged':
|
||||||
result.isChanged = serializers.deserialize(value,
|
result.isChanged = serializers.deserialize(value,
|
||||||
specifiedType: const FullType(bool)) as bool;
|
specifiedType: const FullType(bool)) as bool;
|
||||||
|
|
@ -941,6 +951,8 @@ class _$ExpenseEntity extends ExpenseEntity {
|
||||||
@override
|
@override
|
||||||
final BuiltList<ExpenseScheduleEntity> recurringDates;
|
final BuiltList<ExpenseScheduleEntity> recurringDates;
|
||||||
@override
|
@override
|
||||||
|
final int loadedAt;
|
||||||
|
@override
|
||||||
final bool isChanged;
|
final bool isChanged;
|
||||||
@override
|
@override
|
||||||
final int createdAt;
|
final int createdAt;
|
||||||
|
|
@ -1006,6 +1018,7 @@ class _$ExpenseEntity extends ExpenseEntity {
|
||||||
this.nextSendDate,
|
this.nextSendDate,
|
||||||
this.remainingCycles,
|
this.remainingCycles,
|
||||||
this.recurringDates,
|
this.recurringDates,
|
||||||
|
this.loadedAt,
|
||||||
this.isChanged,
|
this.isChanged,
|
||||||
this.createdAt,
|
this.createdAt,
|
||||||
this.updatedAt,
|
this.updatedAt,
|
||||||
|
|
@ -1244,6 +1257,7 @@ class _$ExpenseEntity extends ExpenseEntity {
|
||||||
..add('nextSendDate', nextSendDate)
|
..add('nextSendDate', nextSendDate)
|
||||||
..add('remainingCycles', remainingCycles)
|
..add('remainingCycles', remainingCycles)
|
||||||
..add('recurringDates', recurringDates)
|
..add('recurringDates', recurringDates)
|
||||||
|
..add('loadedAt', loadedAt)
|
||||||
..add('isChanged', isChanged)
|
..add('isChanged', isChanged)
|
||||||
..add('createdAt', createdAt)
|
..add('createdAt', createdAt)
|
||||||
..add('updatedAt', updatedAt)
|
..add('updatedAt', updatedAt)
|
||||||
|
|
@ -1446,6 +1460,10 @@ class ExpenseEntityBuilder
|
||||||
set recurringDates(ListBuilder<ExpenseScheduleEntity> recurringDates) =>
|
set recurringDates(ListBuilder<ExpenseScheduleEntity> recurringDates) =>
|
||||||
_$this._recurringDates = recurringDates;
|
_$this._recurringDates = recurringDates;
|
||||||
|
|
||||||
|
int _loadedAt;
|
||||||
|
int get loadedAt => _$this._loadedAt;
|
||||||
|
set loadedAt(int loadedAt) => _$this._loadedAt = loadedAt;
|
||||||
|
|
||||||
bool _isChanged;
|
bool _isChanged;
|
||||||
bool get isChanged => _$this._isChanged;
|
bool get isChanged => _$this._isChanged;
|
||||||
set isChanged(bool isChanged) => _$this._isChanged = isChanged;
|
set isChanged(bool isChanged) => _$this._isChanged = isChanged;
|
||||||
|
|
@ -1534,6 +1552,7 @@ class ExpenseEntityBuilder
|
||||||
_nextSendDate = $v.nextSendDate;
|
_nextSendDate = $v.nextSendDate;
|
||||||
_remainingCycles = $v.remainingCycles;
|
_remainingCycles = $v.remainingCycles;
|
||||||
_recurringDates = $v.recurringDates?.toBuilder();
|
_recurringDates = $v.recurringDates?.toBuilder();
|
||||||
|
_loadedAt = $v.loadedAt;
|
||||||
_isChanged = $v.isChanged;
|
_isChanged = $v.isChanged;
|
||||||
_createdAt = $v.createdAt;
|
_createdAt = $v.createdAt;
|
||||||
_updatedAt = $v.updatedAt;
|
_updatedAt = $v.updatedAt;
|
||||||
|
|
@ -1615,6 +1634,7 @@ class ExpenseEntityBuilder
|
||||||
nextSendDate: BuiltValueNullFieldError.checkNotNull(nextSendDate, 'ExpenseEntity', 'nextSendDate'),
|
nextSendDate: BuiltValueNullFieldError.checkNotNull(nextSendDate, 'ExpenseEntity', 'nextSendDate'),
|
||||||
remainingCycles: BuiltValueNullFieldError.checkNotNull(remainingCycles, 'ExpenseEntity', 'remainingCycles'),
|
remainingCycles: BuiltValueNullFieldError.checkNotNull(remainingCycles, 'ExpenseEntity', 'remainingCycles'),
|
||||||
recurringDates: _recurringDates?.build(),
|
recurringDates: _recurringDates?.build(),
|
||||||
|
loadedAt: loadedAt,
|
||||||
isChanged: isChanged,
|
isChanged: isChanged,
|
||||||
createdAt: BuiltValueNullFieldError.checkNotNull(createdAt, 'ExpenseEntity', 'createdAt'),
|
createdAt: BuiltValueNullFieldError.checkNotNull(createdAt, 'ExpenseEntity', 'createdAt'),
|
||||||
updatedAt: BuiltValueNullFieldError.checkNotNull(updatedAt, 'ExpenseEntity', 'updatedAt'),
|
updatedAt: BuiltValueNullFieldError.checkNotNull(updatedAt, 'ExpenseEntity', 'updatedAt'),
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,10 @@ class _ExpenseViewState extends State<ExpenseView>
|
||||||
? localization.documents
|
? localization.documents
|
||||||
: '${localization.documents} (${expense.documents.length})',
|
: '${localization.documents} (${expense.documents.length})',
|
||||||
),
|
),
|
||||||
|
if (expense.isRecurring)
|
||||||
|
Tab(
|
||||||
|
text: localization.schedule,
|
||||||
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
body: Builder(builder: (context) {
|
body: Builder(builder: (context) {
|
||||||
|
|
@ -113,6 +117,12 @@ class _ExpenseViewState extends State<ExpenseView>
|
||||||
child: ExpenseViewDocuments(
|
child: ExpenseViewDocuments(
|
||||||
viewModel: viewModel, expense: viewModel.expense),
|
viewModel: viewModel, expense: viewModel.expense),
|
||||||
),
|
),
|
||||||
|
if (expense.isRecurring)
|
||||||
|
RefreshIndicator(
|
||||||
|
onRefresh: () => viewModel.onRefreshed(context),
|
||||||
|
child: ExpenseViewDocuments(
|
||||||
|
viewModel: viewModel, expense: viewModel.expense),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue