Recurring schedule

This commit is contained in:
Hillel Coren 2021-09-29 17:21:26 +03:00
parent 47e769653b
commit 2bb05d1919
3 changed files with 45 additions and 0 deletions

View File

@ -604,11 +604,26 @@ abstract class ExpenseEntity extends Object
@override
String get listDisplayName => number ?? '';
@nullable
@BuiltValueField(compare: false)
int get loadedAt;
bool isBetween(String startDate, String endDate) {
return (startDate ?? '').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 isRecurring => [EntityType.recurringExpense].contains(entityType);

View File

@ -302,6 +302,12 @@ class _$ExpenseEntitySerializer implements StructuredSerializer<ExpenseEntity> {
specifiedType: const FullType(
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;
if (value != null) {
result
@ -528,6 +534,10 @@ class _$ExpenseEntitySerializer implements StructuredSerializer<ExpenseEntity> {
BuiltList, const [const FullType(ExpenseScheduleEntity)]))
as BuiltList<Object>);
break;
case 'loadedAt':
result.loadedAt = serializers.deserialize(value,
specifiedType: const FullType(int)) as int;
break;
case 'isChanged':
result.isChanged = serializers.deserialize(value,
specifiedType: const FullType(bool)) as bool;
@ -941,6 +951,8 @@ class _$ExpenseEntity extends ExpenseEntity {
@override
final BuiltList<ExpenseScheduleEntity> recurringDates;
@override
final int loadedAt;
@override
final bool isChanged;
@override
final int createdAt;
@ -1006,6 +1018,7 @@ class _$ExpenseEntity extends ExpenseEntity {
this.nextSendDate,
this.remainingCycles,
this.recurringDates,
this.loadedAt,
this.isChanged,
this.createdAt,
this.updatedAt,
@ -1244,6 +1257,7 @@ class _$ExpenseEntity extends ExpenseEntity {
..add('nextSendDate', nextSendDate)
..add('remainingCycles', remainingCycles)
..add('recurringDates', recurringDates)
..add('loadedAt', loadedAt)
..add('isChanged', isChanged)
..add('createdAt', createdAt)
..add('updatedAt', updatedAt)
@ -1446,6 +1460,10 @@ class ExpenseEntityBuilder
set recurringDates(ListBuilder<ExpenseScheduleEntity> recurringDates) =>
_$this._recurringDates = recurringDates;
int _loadedAt;
int get loadedAt => _$this._loadedAt;
set loadedAt(int loadedAt) => _$this._loadedAt = loadedAt;
bool _isChanged;
bool get isChanged => _$this._isChanged;
set isChanged(bool isChanged) => _$this._isChanged = isChanged;
@ -1534,6 +1552,7 @@ class ExpenseEntityBuilder
_nextSendDate = $v.nextSendDate;
_remainingCycles = $v.remainingCycles;
_recurringDates = $v.recurringDates?.toBuilder();
_loadedAt = $v.loadedAt;
_isChanged = $v.isChanged;
_createdAt = $v.createdAt;
_updatedAt = $v.updatedAt;
@ -1615,6 +1634,7 @@ class ExpenseEntityBuilder
nextSendDate: BuiltValueNullFieldError.checkNotNull(nextSendDate, 'ExpenseEntity', 'nextSendDate'),
remainingCycles: BuiltValueNullFieldError.checkNotNull(remainingCycles, 'ExpenseEntity', 'remainingCycles'),
recurringDates: _recurringDates?.build(),
loadedAt: loadedAt,
isChanged: isChanged,
createdAt: BuiltValueNullFieldError.checkNotNull(createdAt, 'ExpenseEntity', 'createdAt'),
updatedAt: BuiltValueNullFieldError.checkNotNull(updatedAt, 'ExpenseEntity', 'updatedAt'),

View File

@ -92,6 +92,10 @@ class _ExpenseViewState extends State<ExpenseView>
? localization.documents
: '${localization.documents} (${expense.documents.length})',
),
if (expense.isRecurring)
Tab(
text: localization.schedule,
)
],
),
body: Builder(builder: (context) {
@ -113,6 +117,12 @@ class _ExpenseViewState extends State<ExpenseView>
child: ExpenseViewDocuments(
viewModel: viewModel, expense: viewModel.expense),
),
if (expense.isRecurring)
RefreshIndicator(
onRefresh: () => viewModel.onRefreshed(context),
child: ExpenseViewDocuments(
viewModel: viewModel, expense: viewModel.expense),
),
],
),
),