diff --git a/lib/database/collections/account.g.dart b/lib/database/collections/account.g.dart index c7f17ee..ead950f 100644 --- a/lib/database/collections/account.g.dart +++ b/lib/database/collections/account.g.dart @@ -17,7 +17,11 @@ const AccountSchema = CollectionSchema( name: r'Account', id: -6646797162501847804, properties: { - r'name': PropertySchema(id: 0, name: r'name', type: IsarType.string), + r'name': PropertySchema( + id: 0, + name: r'name', + type: IsarType.string, + ) }, estimateSize: _accountEstimateSize, serialize: _accountSerialize, @@ -106,7 +110,10 @@ extension AccountQueryWhereSort on QueryBuilder { extension AccountQueryWhere on QueryBuilder { QueryBuilder idEqualTo(Id id) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); + return query.addWhereClause(IdWhereClause.between( + lower: id, + upper: id, + )); }); } @@ -132,10 +139,8 @@ extension AccountQueryWhere on QueryBuilder { }); } - QueryBuilder idGreaterThan( - Id id, { - bool include = false, - }) { + QueryBuilder idGreaterThan(Id id, + {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -143,10 +148,8 @@ extension AccountQueryWhere on QueryBuilder { }); } - QueryBuilder idLessThan( - Id id, { - bool include = false, - }) { + QueryBuilder idLessThan(Id id, + {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -161,14 +164,12 @@ extension AccountQueryWhere on QueryBuilder { bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); + return query.addWhereClause(IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + )); }); } } @@ -177,9 +178,10 @@ extension AccountQueryFilter on QueryBuilder { QueryBuilder idEqualTo(Id value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'id', + value: value, + )); }); } @@ -188,13 +190,11 @@ extension AccountQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + )); }); } @@ -203,13 +203,11 @@ extension AccountQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + )); }); } @@ -220,31 +218,29 @@ extension AccountQueryFilter bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); }); } QueryBuilder nameIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'name'), - ); + return query.addFilterCondition(const FilterCondition.isNull( + property: r'name', + )); }); } QueryBuilder nameIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'name'), - ); + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'name', + )); }); } @@ -253,13 +249,11 @@ extension AccountQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } @@ -269,14 +263,12 @@ extension AccountQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } @@ -286,14 +278,12 @@ extension AccountQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } @@ -305,16 +295,14 @@ extension AccountQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'name', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); }); } @@ -323,13 +311,11 @@ extension AccountQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } @@ -338,59 +324,53 @@ extension AccountQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder nameContains( - String value, { - bool caseSensitive = true, - }) { + String value, + {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder nameMatches( - String pattern, { - bool caseSensitive = true, - }) { + String pattern, + {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'name', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + )); }); } QueryBuilder nameIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'name', value: ''), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: '', + )); }); } QueryBuilder nameIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'name', value: ''), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'name', + value: '', + )); }); } } @@ -444,9 +424,8 @@ extension AccountQuerySortThenBy extension AccountQueryWhereDistinct on QueryBuilder { - QueryBuilder distinctByName({ - bool caseSensitive = true, - }) { + QueryBuilder distinctByName( + {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'name', caseSensitive: caseSensitive); }); diff --git a/lib/database/collections/beneficiary.g.dart b/lib/database/collections/beneficiary.g.dart index 7943e15..d1acf98 100644 --- a/lib/database/collections/beneficiary.g.dart +++ b/lib/database/collections/beneficiary.g.dart @@ -22,13 +22,17 @@ const BeneficiarySchema = CollectionSchema( name: r'imagePath', type: IsarType.string, ), - r'name': PropertySchema(id: 1, name: r'name', type: IsarType.string), + r'name': PropertySchema( + id: 1, + name: r'name', + type: IsarType.string, + ), r'type': PropertySchema( id: 2, name: r'type', type: IsarType.byte, enumMap: _BeneficiarytypeEnumValueMap, - ), + ) }, estimateSize: _beneficiaryEstimateSize, serialize: _beneficiarySerialize, @@ -42,7 +46,7 @@ const BeneficiarySchema = CollectionSchema( name: r'account', target: r'Account', single: true, - ), + ) }, embeddedSchemas: {}, getId: _beneficiaryGetId, @@ -90,7 +94,7 @@ Beneficiary _beneficiaryDeserialize( object.name = reader.readString(offsets[1]); object.type = _BeneficiarytypeValueEnumMap[reader.readByteOrNull(offsets[2])] ?? - BeneficiaryType.account; + BeneficiaryType.account; return object; } @@ -107,14 +111,16 @@ P _beneficiaryDeserializeProp

( return (reader.readString(offset)) as P; case 2: return (_BeneficiarytypeValueEnumMap[reader.readByteOrNull(offset)] ?? - BeneficiaryType.account) - as P; + BeneficiaryType.account) as P; default: throw IsarError('Unknown property with id $propertyId'); } } -const _BeneficiarytypeEnumValueMap = {'account': 0, 'other': 1}; +const _BeneficiarytypeEnumValueMap = { + 'account': 0, + 'other': 1, +}; const _BeneficiarytypeValueEnumMap = { 0: BeneficiaryType.account, 1: BeneficiaryType.other, @@ -129,10 +135,7 @@ List> _beneficiaryGetLinks(Beneficiary object) { } void _beneficiaryAttach( - IsarCollection col, - Id id, - Beneficiary object, -) { + IsarCollection col, Id id, Beneficiary object) { object.id = id; object.account.attach(col, col.isar.collection(), r'account', id); } @@ -150,13 +153,15 @@ extension BeneficiaryQueryWhere on QueryBuilder { QueryBuilder idEqualTo(Id id) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); + return query.addWhereClause(IdWhereClause.between( + lower: id, + upper: id, + )); }); } QueryBuilder idNotEqualTo( - Id id, - ) { + Id id) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -178,10 +183,8 @@ extension BeneficiaryQueryWhere }); } - QueryBuilder idGreaterThan( - Id id, { - bool include = false, - }) { + QueryBuilder idGreaterThan(Id id, + {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -189,10 +192,8 @@ extension BeneficiaryQueryWhere }); } - QueryBuilder idLessThan( - Id id, { - bool include = false, - }) { + QueryBuilder idLessThan(Id id, + {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -207,14 +208,12 @@ extension BeneficiaryQueryWhere bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); + return query.addWhereClause(IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + )); }); } } @@ -222,12 +221,12 @@ extension BeneficiaryQueryWhere extension BeneficiaryQueryFilter on QueryBuilder { QueryBuilder idEqualTo( - Id value, - ) { + Id value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'id', + value: value, + )); }); } @@ -236,13 +235,11 @@ extension BeneficiaryQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + )); }); } @@ -251,13 +248,11 @@ extension BeneficiaryQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + )); }); } @@ -268,87 +263,82 @@ extension BeneficiaryQueryFilter bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); }); } QueryBuilder - imagePathIsNull() { + imagePathIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'imagePath'), - ); + return query.addFilterCondition(const FilterCondition.isNull( + property: r'imagePath', + )); }); } QueryBuilder - imagePathIsNotNull() { + imagePathIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'imagePath'), - ); + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'imagePath', + )); }); } QueryBuilder - imagePathEqualTo(String? value, {bool caseSensitive = true}) { + imagePathEqualTo( + String? value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'imagePath', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - imagePathGreaterThan( + imagePathGreaterThan( String? value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'imagePath', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - imagePathLessThan( + imagePathLessThan( String? value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'imagePath', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - imagePathBetween( + imagePathBetween( String? lower, String? upper, { bool includeLower = true, @@ -356,86 +346,84 @@ extension BeneficiaryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'imagePath', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'imagePath', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - imagePathStartsWith(String value, {bool caseSensitive = true}) { + imagePathStartsWith( + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.startsWith( + property: r'imagePath', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - imagePathEndsWith(String value, {bool caseSensitive = true}) { + imagePathEndsWith( + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.endsWith( + property: r'imagePath', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - imagePathContains(String value, {bool caseSensitive = true}) { + imagePathContains(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.contains( + property: r'imagePath', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - imagePathMatches(String pattern, {bool caseSensitive = true}) { + imagePathMatches(String pattern, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'imagePath', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.matches( + property: r'imagePath', + wildcard: pattern, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - imagePathIsEmpty() { + imagePathIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'imagePath', value: ''), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'imagePath', + value: '', + )); }); } QueryBuilder - imagePathIsNotEmpty() { + imagePathIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'imagePath', value: ''), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'imagePath', + value: '', + )); }); } @@ -444,13 +432,11 @@ extension BeneficiaryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } @@ -460,14 +446,12 @@ extension BeneficiaryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } @@ -477,14 +461,12 @@ extension BeneficiaryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } @@ -496,16 +478,14 @@ extension BeneficiaryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'name', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); }); } @@ -514,13 +494,11 @@ extension BeneficiaryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } @@ -529,70 +507,64 @@ extension BeneficiaryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder nameContains( - String value, { - bool caseSensitive = true, - }) { + String value, + {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder nameMatches( - String pattern, { - bool caseSensitive = true, - }) { + String pattern, + {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'name', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + )); }); } QueryBuilder nameIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'name', value: ''), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: '', + )); }); } QueryBuilder - nameIsNotEmpty() { + nameIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'name', value: ''), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'name', + value: '', + )); }); } QueryBuilder typeEqualTo( - BeneficiaryType value, - ) { + BeneficiaryType value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'type', value: value), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'type', + value: value, + )); }); } @@ -601,13 +573,11 @@ extension BeneficiaryQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'type', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'type', + value: value, + )); }); } @@ -616,13 +586,11 @@ extension BeneficiaryQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'type', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'type', + value: value, + )); }); } @@ -633,15 +601,13 @@ extension BeneficiaryQueryFilter bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'type', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'type', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); }); } } @@ -652,15 +618,14 @@ extension BeneficiaryQueryObject extension BeneficiaryQueryLinks on QueryBuilder { QueryBuilder account( - FilterQuery q, - ) { + FilterQuery q) { return QueryBuilder.apply(this, (query) { return query.link(q, r'account'); }); } QueryBuilder - accountIsNull() { + accountIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'account', 0, true, 0, true); }); @@ -759,17 +724,15 @@ extension BeneficiaryQuerySortThenBy extension BeneficiaryQueryWhereDistinct on QueryBuilder { - QueryBuilder distinctByImagePath({ - bool caseSensitive = true, - }) { + QueryBuilder distinctByImagePath( + {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'imagePath', caseSensitive: caseSensitive); }); } - QueryBuilder distinctByName({ - bool caseSensitive = true, - }) { + QueryBuilder distinctByName( + {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'name', caseSensitive: caseSensitive); }); diff --git a/lib/database/collections/budget.dart b/lib/database/collections/budget.dart new file mode 100644 index 0000000..71c7d1a --- /dev/null +++ b/lib/database/collections/budget.dart @@ -0,0 +1,35 @@ +import 'package:isar/isar.dart'; +import 'package:okane/database/collections/expense_category.dart'; + +import 'account.dart'; + +part 'budget.g.dart'; + +enum BudgetPeriod { + month +} + +@collection +class BudgetItem { + Id id = Isar.autoIncrement; + + late double amount; + + final expenseCategory = IsarLink(); +} + +@collection +class Budget { + Id id = Isar.autoIncrement; + + @Enumerated(EnumType.ordinal) + late BudgetPeriod period; + + late String name; + + late double income; + + final account = IsarLink(); + + final items = IsarLinks(); +} \ No newline at end of file diff --git a/lib/database/collections/budget.g.dart b/lib/database/collections/budget.g.dart new file mode 100644 index 0000000..01fe1eb --- /dev/null +++ b/lib/database/collections/budget.g.dart @@ -0,0 +1,1097 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'budget.dart'; + +// ************************************************************************** +// IsarCollectionGenerator +// ************************************************************************** + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +extension GetBudgetItemCollection on Isar { + IsarCollection get budgetItems => this.collection(); +} + +const BudgetItemSchema = CollectionSchema( + name: r'BudgetItem', + id: 618999772191843499, + properties: { + r'amount': PropertySchema( + id: 0, + name: r'amount', + type: IsarType.double, + ) + }, + estimateSize: _budgetItemEstimateSize, + serialize: _budgetItemSerialize, + deserialize: _budgetItemDeserialize, + deserializeProp: _budgetItemDeserializeProp, + idName: r'id', + indexes: {}, + links: { + r'expenseCategory': LinkSchema( + id: -915171920088002159, + name: r'expenseCategory', + target: r'ExpenseCategory', + single: true, + ) + }, + embeddedSchemas: {}, + getId: _budgetItemGetId, + getLinks: _budgetItemGetLinks, + attach: _budgetItemAttach, + version: '3.1.0+1', +); + +int _budgetItemEstimateSize( + BudgetItem object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + return bytesCount; +} + +void _budgetItemSerialize( + BudgetItem object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeDouble(offsets[0], object.amount); +} + +BudgetItem _budgetItemDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = BudgetItem(); + object.amount = reader.readDouble(offsets[0]); + object.id = id; + return object; +} + +P _budgetItemDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readDouble(offset)) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +Id _budgetItemGetId(BudgetItem object) { + return object.id; +} + +List> _budgetItemGetLinks(BudgetItem object) { + return [object.expenseCategory]; +} + +void _budgetItemAttach(IsarCollection col, Id id, BudgetItem object) { + object.id = id; + object.expenseCategory.attach( + col, col.isar.collection(), r'expenseCategory', id); +} + +extension BudgetItemQueryWhereSort + on QueryBuilder { + QueryBuilder anyId() { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(const IdWhereClause.any()); + }); + } +} + +extension BudgetItemQueryWhere + on QueryBuilder { + QueryBuilder idEqualTo(Id id) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(IdWhereClause.between( + lower: id, + upper: id, + )); + }); + } + + QueryBuilder idNotEqualTo(Id id) { + return QueryBuilder.apply(this, (query) { + if (query.whereSort == Sort.asc) { + return query + .addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: false), + ) + .addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: false), + ); + } else { + return query + .addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: false), + ) + .addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: false), + ); + } + }); + } + + QueryBuilder idGreaterThan(Id id, + {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: include), + ); + }); + } + + QueryBuilder idLessThan(Id id, + {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: include), + ); + }); + } + + QueryBuilder idBetween( + Id lowerId, + Id upperId, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + )); + }); + } +} + +extension BudgetItemQueryFilter + on QueryBuilder { + QueryBuilder amountEqualTo( + double value, { + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'amount', + value: value, + epsilon: epsilon, + )); + }); + } + + QueryBuilder amountGreaterThan( + double value, { + bool include = false, + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'amount', + value: value, + epsilon: epsilon, + )); + }); + } + + QueryBuilder amountLessThan( + double value, { + bool include = false, + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'amount', + value: value, + epsilon: epsilon, + )); + }); + } + + QueryBuilder amountBetween( + double lower, + double upper, { + bool includeLower = true, + bool includeUpper = true, + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'amount', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + epsilon: epsilon, + )); + }); + } + + QueryBuilder idEqualTo( + Id value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idGreaterThan( + Id value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idLessThan( + Id value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idBetween( + Id lower, + Id upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } +} + +extension BudgetItemQueryObject + on QueryBuilder {} + +extension BudgetItemQueryLinks + on QueryBuilder { + QueryBuilder expenseCategory( + FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.link(q, r'expenseCategory'); + }); + } + + QueryBuilder + expenseCategoryIsNull() { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'expenseCategory', 0, true, 0, true); + }); + } +} + +extension BudgetItemQuerySortBy + on QueryBuilder { + QueryBuilder sortByAmount() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'amount', Sort.asc); + }); + } + + QueryBuilder sortByAmountDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'amount', Sort.desc); + }); + } +} + +extension BudgetItemQuerySortThenBy + on QueryBuilder { + QueryBuilder thenByAmount() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'amount', Sort.asc); + }); + } + + QueryBuilder thenByAmountDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'amount', Sort.desc); + }); + } + + QueryBuilder thenById() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'id', Sort.asc); + }); + } + + QueryBuilder thenByIdDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'id', Sort.desc); + }); + } +} + +extension BudgetItemQueryWhereDistinct + on QueryBuilder { + QueryBuilder distinctByAmount() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'amount'); + }); + } +} + +extension BudgetItemQueryProperty + on QueryBuilder { + QueryBuilder idProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'id'); + }); + } + + QueryBuilder amountProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'amount'); + }); + } +} + +// coverage:ignore-file +// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types + +extension GetBudgetCollection on Isar { + IsarCollection get budgets => this.collection(); +} + +const BudgetSchema = CollectionSchema( + name: r'Budget', + id: -3383598594604670326, + properties: { + r'income': PropertySchema( + id: 0, + name: r'income', + type: IsarType.double, + ), + r'name': PropertySchema( + id: 1, + name: r'name', + type: IsarType.string, + ), + r'period': PropertySchema( + id: 2, + name: r'period', + type: IsarType.byte, + enumMap: _BudgetperiodEnumValueMap, + ) + }, + estimateSize: _budgetEstimateSize, + serialize: _budgetSerialize, + deserialize: _budgetDeserialize, + deserializeProp: _budgetDeserializeProp, + idName: r'id', + indexes: {}, + links: { + r'account': LinkSchema( + id: -2244135419803748845, + name: r'account', + target: r'Account', + single: true, + ), + r'items': LinkSchema( + id: -7217800434111289514, + name: r'items', + target: r'BudgetItem', + single: false, + ) + }, + embeddedSchemas: {}, + getId: _budgetGetId, + getLinks: _budgetGetLinks, + attach: _budgetAttach, + version: '3.1.0+1', +); + +int _budgetEstimateSize( + Budget object, + List offsets, + Map> allOffsets, +) { + var bytesCount = offsets.last; + bytesCount += 3 + object.name.length * 3; + return bytesCount; +} + +void _budgetSerialize( + Budget object, + IsarWriter writer, + List offsets, + Map> allOffsets, +) { + writer.writeDouble(offsets[0], object.income); + writer.writeString(offsets[1], object.name); + writer.writeByte(offsets[2], object.period.index); +} + +Budget _budgetDeserialize( + Id id, + IsarReader reader, + List offsets, + Map> allOffsets, +) { + final object = Budget(); + object.id = id; + object.income = reader.readDouble(offsets[0]); + object.name = reader.readString(offsets[1]); + object.period = + _BudgetperiodValueEnumMap[reader.readByteOrNull(offsets[2])] ?? + BudgetPeriod.month; + return object; +} + +P _budgetDeserializeProp

( + IsarReader reader, + int propertyId, + int offset, + Map> allOffsets, +) { + switch (propertyId) { + case 0: + return (reader.readDouble(offset)) as P; + case 1: + return (reader.readString(offset)) as P; + case 2: + return (_BudgetperiodValueEnumMap[reader.readByteOrNull(offset)] ?? + BudgetPeriod.month) as P; + default: + throw IsarError('Unknown property with id $propertyId'); + } +} + +const _BudgetperiodEnumValueMap = { + 'month': 0, +}; +const _BudgetperiodValueEnumMap = { + 0: BudgetPeriod.month, +}; + +Id _budgetGetId(Budget object) { + return object.id; +} + +List> _budgetGetLinks(Budget object) { + return [object.account, object.items]; +} + +void _budgetAttach(IsarCollection col, Id id, Budget object) { + object.id = id; + object.account.attach(col, col.isar.collection(), r'account', id); + object.items.attach(col, col.isar.collection(), r'items', id); +} + +extension BudgetQueryWhereSort on QueryBuilder { + QueryBuilder anyId() { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(const IdWhereClause.any()); + }); + } +} + +extension BudgetQueryWhere on QueryBuilder { + QueryBuilder idEqualTo(Id id) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(IdWhereClause.between( + lower: id, + upper: id, + )); + }); + } + + QueryBuilder idNotEqualTo(Id id) { + return QueryBuilder.apply(this, (query) { + if (query.whereSort == Sort.asc) { + return query + .addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: false), + ) + .addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: false), + ); + } else { + return query + .addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: false), + ) + .addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: false), + ); + } + }); + } + + QueryBuilder idGreaterThan(Id id, + {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause( + IdWhereClause.greaterThan(lower: id, includeLower: include), + ); + }); + } + + QueryBuilder idLessThan(Id id, + {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause( + IdWhereClause.lessThan(upper: id, includeUpper: include), + ); + }); + } + + QueryBuilder idBetween( + Id lowerId, + Id upperId, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addWhereClause(IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + )); + }); + } +} + +extension BudgetQueryFilter on QueryBuilder { + QueryBuilder idEqualTo(Id value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idGreaterThan( + Id value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idLessThan( + Id value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + )); + }); + } + + QueryBuilder idBetween( + Id lower, + Id upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } + + QueryBuilder incomeEqualTo( + double value, { + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'income', + value: value, + epsilon: epsilon, + )); + }); + } + + QueryBuilder incomeGreaterThan( + double value, { + bool include = false, + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'income', + value: value, + epsilon: epsilon, + )); + }); + } + + QueryBuilder incomeLessThan( + double value, { + bool include = false, + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'income', + value: value, + epsilon: epsilon, + )); + }); + } + + QueryBuilder incomeBetween( + double lower, + double upper, { + bool includeLower = true, + bool includeUpper = true, + double epsilon = Query.epsilon, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'income', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + epsilon: epsilon, + )); + }); + } + + QueryBuilder nameEqualTo( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameGreaterThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameLessThan( + String value, { + bool include = false, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameBetween( + String lower, + String upper, { + bool includeLower = true, + bool includeUpper = true, + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameStartsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameEndsWith( + String value, { + bool caseSensitive = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameContains(String value, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameMatches( + String pattern, + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + )); + }); + } + + QueryBuilder nameIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: '', + )); + }); + } + + QueryBuilder nameIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'name', + value: '', + )); + }); + } + + QueryBuilder periodEqualTo( + BudgetPeriod value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.equalTo( + property: r'period', + value: value, + )); + }); + } + + QueryBuilder periodGreaterThan( + BudgetPeriod value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'period', + value: value, + )); + }); + } + + QueryBuilder periodLessThan( + BudgetPeriod value, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'period', + value: value, + )); + }); + } + + QueryBuilder periodBetween( + BudgetPeriod lower, + BudgetPeriod upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition(FilterCondition.between( + property: r'period', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); + }); + } +} + +extension BudgetQueryObject on QueryBuilder {} + +extension BudgetQueryLinks on QueryBuilder { + QueryBuilder account( + FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.link(q, r'account'); + }); + } + + QueryBuilder accountIsNull() { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'account', 0, true, 0, true); + }); + } + + QueryBuilder items( + FilterQuery q) { + return QueryBuilder.apply(this, (query) { + return query.link(q, r'items'); + }); + } + + QueryBuilder itemsLengthEqualTo( + int length) { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'items', length, true, length, true); + }); + } + + QueryBuilder itemsIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'items', 0, true, 0, true); + }); + } + + QueryBuilder itemsIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'items', 0, false, 999999, true); + }); + } + + QueryBuilder itemsLengthLessThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'items', 0, true, length, include); + }); + } + + QueryBuilder itemsLengthGreaterThan( + int length, { + bool include = false, + }) { + return QueryBuilder.apply(this, (query) { + return query.linkLength(r'items', length, include, 999999, true); + }); + } + + QueryBuilder itemsLengthBetween( + int lower, + int upper, { + bool includeLower = true, + bool includeUpper = true, + }) { + return QueryBuilder.apply(this, (query) { + return query.linkLength( + r'items', lower, includeLower, upper, includeUpper); + }); + } +} + +extension BudgetQuerySortBy on QueryBuilder { + QueryBuilder sortByIncome() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'income', Sort.asc); + }); + } + + QueryBuilder sortByIncomeDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'income', Sort.desc); + }); + } + + QueryBuilder sortByName() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'name', Sort.asc); + }); + } + + QueryBuilder sortByNameDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'name', Sort.desc); + }); + } + + QueryBuilder sortByPeriod() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'period', Sort.asc); + }); + } + + QueryBuilder sortByPeriodDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'period', Sort.desc); + }); + } +} + +extension BudgetQuerySortThenBy on QueryBuilder { + QueryBuilder thenById() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'id', Sort.asc); + }); + } + + QueryBuilder thenByIdDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'id', Sort.desc); + }); + } + + QueryBuilder thenByIncome() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'income', Sort.asc); + }); + } + + QueryBuilder thenByIncomeDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'income', Sort.desc); + }); + } + + QueryBuilder thenByName() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'name', Sort.asc); + }); + } + + QueryBuilder thenByNameDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'name', Sort.desc); + }); + } + + QueryBuilder thenByPeriod() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'period', Sort.asc); + }); + } + + QueryBuilder thenByPeriodDesc() { + return QueryBuilder.apply(this, (query) { + return query.addSortBy(r'period', Sort.desc); + }); + } +} + +extension BudgetQueryWhereDistinct on QueryBuilder { + QueryBuilder distinctByIncome() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'income'); + }); + } + + QueryBuilder distinctByName( + {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'name', caseSensitive: caseSensitive); + }); + } + + QueryBuilder distinctByPeriod() { + return QueryBuilder.apply(this, (query) { + return query.addDistinctBy(r'period'); + }); + } +} + +extension BudgetQueryProperty on QueryBuilder { + QueryBuilder idProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'id'); + }); + } + + QueryBuilder incomeProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'income'); + }); + } + + QueryBuilder nameProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'name'); + }); + } + + QueryBuilder periodProperty() { + return QueryBuilder.apply(this, (query) { + return query.addPropertyName(r'period'); + }); + } +} diff --git a/lib/database/collections/expense_category.g.dart b/lib/database/collections/expense_category.g.dart index 13012af..b740c75 100644 --- a/lib/database/collections/expense_category.g.dart +++ b/lib/database/collections/expense_category.g.dart @@ -17,7 +17,11 @@ const ExpenseCategorySchema = CollectionSchema( name: r'ExpenseCategory', id: -6352499903118634, properties: { - r'name': PropertySchema(id: 0, name: r'name', type: IsarType.string), + r'name': PropertySchema( + id: 0, + name: r'name', + type: IsarType.string, + ) }, estimateSize: _expenseCategoryEstimateSize, serialize: _expenseCategorySerialize, @@ -87,10 +91,7 @@ List> _expenseCategoryGetLinks(ExpenseCategory object) { } void _expenseCategoryAttach( - IsarCollection col, - Id id, - ExpenseCategory object, -) { + IsarCollection col, Id id, ExpenseCategory object) { object.id = id; } @@ -106,15 +107,17 @@ extension ExpenseCategoryQueryWhereSort extension ExpenseCategoryQueryWhere on QueryBuilder { QueryBuilder idEqualTo( - Id id, - ) { + Id id) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); + return query.addWhereClause(IdWhereClause.between( + lower: id, + upper: id, + )); }); } QueryBuilder - idNotEqualTo(Id id) { + idNotEqualTo(Id id) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -137,7 +140,7 @@ extension ExpenseCategoryQueryWhere } QueryBuilder - idGreaterThan(Id id, {bool include = false}) { + idGreaterThan(Id id, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -146,9 +149,8 @@ extension ExpenseCategoryQueryWhere } QueryBuilder idLessThan( - Id id, { - bool include = false, - }) { + Id id, + {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -163,14 +165,12 @@ extension ExpenseCategoryQueryWhere bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); + return query.addWhereClause(IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + )); }); } } @@ -178,111 +178,109 @@ extension ExpenseCategoryQueryWhere extension ExpenseCategoryQueryFilter on QueryBuilder { QueryBuilder - idEqualTo(Id value) { + idEqualTo(Id value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'id', + value: value, + )); }); } QueryBuilder - idGreaterThan(Id value, {bool include = false}) { + idGreaterThan( + Id value, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + )); }); } QueryBuilder - idLessThan(Id value, {bool include = false}) { + idLessThan( + Id value, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + )); }); } QueryBuilder - idBetween( + idBetween( Id lower, Id upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); }); } QueryBuilder - nameEqualTo(String value, {bool caseSensitive = true}) { + nameEqualTo( + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameGreaterThan( + nameGreaterThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameLessThan( + nameLessThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameBetween( + nameBetween( String lower, String upper, { bool includeLower = true, @@ -290,86 +288,84 @@ extension ExpenseCategoryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'name', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameStartsWith(String value, {bool caseSensitive = true}) { + nameStartsWith( + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameEndsWith(String value, {bool caseSensitive = true}) { + nameEndsWith( + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameContains(String value, {bool caseSensitive = true}) { + nameContains(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameMatches(String pattern, {bool caseSensitive = true}) { + nameMatches(String pattern, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'name', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameIsEmpty() { + nameIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'name', value: ''), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: '', + )); }); } QueryBuilder - nameIsNotEmpty() { + nameIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'name', value: ''), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'name', + value: '', + )); }); } } @@ -389,7 +385,7 @@ extension ExpenseCategoryQuerySortBy } QueryBuilder - sortByNameDesc() { + sortByNameDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'name', Sort.desc); }); @@ -417,7 +413,7 @@ extension ExpenseCategoryQuerySortThenBy } QueryBuilder - thenByNameDesc() { + thenByNameDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'name', Sort.desc); }); @@ -426,9 +422,8 @@ extension ExpenseCategoryQuerySortThenBy extension ExpenseCategoryQueryWhereDistinct on QueryBuilder { - QueryBuilder distinctByName({ - bool caseSensitive = true, - }) { + QueryBuilder distinctByName( + {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'name', caseSensitive: caseSensitive); }); diff --git a/lib/database/collections/recurrent.g.dart b/lib/database/collections/recurrent.g.dart index c587bc5..77408c6 100644 --- a/lib/database/collections/recurrent.g.dart +++ b/lib/database/collections/recurrent.g.dart @@ -18,12 +18,16 @@ const RecurringTransactionSchema = CollectionSchema( name: r'RecurringTransaction', id: 969840479390105118, properties: { - r'days': PropertySchema(id: 0, name: r'days', type: IsarType.long), + r'days': PropertySchema( + id: 0, + name: r'days', + type: IsarType.long, + ), r'lastExecution': PropertySchema( id: 1, name: r'lastExecution', type: IsarType.dateTime, - ), + ) }, estimateSize: _recurringTransactionEstimateSize, serialize: _recurringTransactionSerialize, @@ -43,7 +47,7 @@ const RecurringTransactionSchema = CollectionSchema( name: r'account', target: r'Account', single: true, - ), + ) }, embeddedSchemas: {}, getId: _recurringTransactionGetId, @@ -105,30 +109,22 @@ Id _recurringTransactionGetId(RecurringTransaction object) { } List> _recurringTransactionGetLinks( - RecurringTransaction object, -) { + RecurringTransaction object) { return [object.template, object.account]; } void _recurringTransactionAttach( - IsarCollection col, - Id id, - RecurringTransaction object, -) { + IsarCollection col, Id id, RecurringTransaction object) { object.id = id; - object.template.attach( - col, - col.isar.collection(), - r'template', - id, - ); + object.template + .attach(col, col.isar.collection(), r'template', id); object.account.attach(col, col.isar.collection(), r'account', id); } extension RecurringTransactionQueryWhereSort on QueryBuilder { QueryBuilder - anyId() { + anyId() { return QueryBuilder.apply(this, (query) { return query.addWhereClause(const IdWhereClause.any()); }); @@ -138,14 +134,17 @@ extension RecurringTransactionQueryWhereSort extension RecurringTransactionQueryWhere on QueryBuilder { QueryBuilder - idEqualTo(Id id) { + idEqualTo(Id id) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); + return query.addWhereClause(IdWhereClause.between( + lower: id, + upper: id, + )); }); } QueryBuilder - idNotEqualTo(Id id) { + idNotEqualTo(Id id) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -168,7 +167,7 @@ extension RecurringTransactionQueryWhere } QueryBuilder - idGreaterThan(Id id, {bool include = false}) { + idGreaterThan(Id id, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -177,7 +176,7 @@ extension RecurringTransactionQueryWhere } QueryBuilder - idLessThan(Id id, {bool include = false}) { + idLessThan(Id id, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -186,326 +185,240 @@ extension RecurringTransactionQueryWhere } QueryBuilder - idBetween( + idBetween( Id lowerId, Id upperId, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); + return query.addWhereClause(IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + )); }); } } -extension RecurringTransactionQueryFilter - on - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QFilterCondition - > { - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - daysEqualTo(int value) { +extension RecurringTransactionQueryFilter on QueryBuilder { + QueryBuilder daysEqualTo(int value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'days', value: value), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'days', + value: value, + )); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - daysGreaterThan(int value, {bool include = false}) { + QueryBuilder daysGreaterThan( + int value, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'days', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'days', + value: value, + )); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - daysLessThan(int value, {bool include = false}) { + QueryBuilder daysLessThan( + int value, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'days', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'days', + value: value, + )); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - daysBetween( + QueryBuilder daysBetween( int lower, int upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'days', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'days', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - idEqualTo(Id value) { + QueryBuilder idEqualTo(Id value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'id', + value: value, + )); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - idGreaterThan(Id value, {bool include = false}) { + QueryBuilder idGreaterThan( + Id value, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + )); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - idLessThan(Id value, {bool include = false}) { + QueryBuilder idLessThan( + Id value, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + )); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - idBetween( + QueryBuilder idBetween( Id lower, Id upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - lastExecutionIsNull() { + QueryBuilder lastExecutionIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNull(property: r'lastExecution'), - ); + return query.addFilterCondition(const FilterCondition.isNull( + property: r'lastExecution', + )); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - lastExecutionIsNotNull() { + QueryBuilder lastExecutionIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - const FilterCondition.isNotNull(property: r'lastExecution'), - ); + return query.addFilterCondition(const FilterCondition.isNotNull( + property: r'lastExecution', + )); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - lastExecutionEqualTo(DateTime? value) { + QueryBuilder lastExecutionEqualTo(DateTime? value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'lastExecution', value: value), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'lastExecution', + value: value, + )); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - lastExecutionGreaterThan(DateTime? value, {bool include = false}) { + QueryBuilder lastExecutionGreaterThan( + DateTime? value, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'lastExecution', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'lastExecution', + value: value, + )); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - lastExecutionLessThan(DateTime? value, {bool include = false}) { + QueryBuilder lastExecutionLessThan( + DateTime? value, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'lastExecution', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'lastExecution', + value: value, + )); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - lastExecutionBetween( + QueryBuilder lastExecutionBetween( DateTime? lower, DateTime? upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'lastExecution', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'lastExecution', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); }); } } -extension RecurringTransactionQueryObject - on - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QFilterCondition - > {} +extension RecurringTransactionQueryObject on QueryBuilder {} -extension RecurringTransactionQueryLinks - on - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QFilterCondition - > { - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - template(FilterQuery q) { +extension RecurringTransactionQueryLinks on QueryBuilder { + QueryBuilder template(FilterQuery q) { return QueryBuilder.apply(this, (query) { return query.link(q, r'template'); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - templateIsNull() { + QueryBuilder templateIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'template', 0, true, 0, true); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - account(FilterQuery q) { + QueryBuilder account(FilterQuery q) { return QueryBuilder.apply(this, (query) { return query.link(q, r'account'); }); } - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QAfterFilterCondition - > - accountIsNull() { + QueryBuilder accountIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'account', 0, true, 0, true); }); @@ -515,28 +428,28 @@ extension RecurringTransactionQueryLinks extension RecurringTransactionQuerySortBy on QueryBuilder { QueryBuilder - sortByDays() { + sortByDays() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'days', Sort.asc); }); } QueryBuilder - sortByDaysDesc() { + sortByDaysDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'days', Sort.desc); }); } QueryBuilder - sortByLastExecution() { + sortByLastExecution() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'lastExecution', Sort.asc); }); } QueryBuilder - sortByLastExecutionDesc() { + sortByLastExecutionDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'lastExecution', Sort.desc); }); @@ -546,42 +459,42 @@ extension RecurringTransactionQuerySortBy extension RecurringTransactionQuerySortThenBy on QueryBuilder { QueryBuilder - thenByDays() { + thenByDays() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'days', Sort.asc); }); } QueryBuilder - thenByDaysDesc() { + thenByDaysDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'days', Sort.desc); }); } QueryBuilder - thenById() { + thenById() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'id', Sort.asc); }); } QueryBuilder - thenByIdDesc() { + thenByIdDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'id', Sort.desc); }); } QueryBuilder - thenByLastExecution() { + thenByLastExecution() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'lastExecution', Sort.asc); }); } QueryBuilder - thenByLastExecutionDesc() { + thenByLastExecutionDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'lastExecution', Sort.desc); }); @@ -591,27 +504,22 @@ extension RecurringTransactionQuerySortThenBy extension RecurringTransactionQueryWhereDistinct on QueryBuilder { QueryBuilder - distinctByDays() { + distinctByDays() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'days'); }); } QueryBuilder - distinctByLastExecution() { + distinctByLastExecution() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'lastExecution'); }); } } -extension RecurringTransactionQueryProperty - on - QueryBuilder< - RecurringTransaction, - RecurringTransaction, - QQueryProperty - > { +extension RecurringTransactionQueryProperty on QueryBuilder< + RecurringTransaction, RecurringTransaction, QQueryProperty> { QueryBuilder idProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'id'); @@ -625,7 +533,7 @@ extension RecurringTransactionQueryProperty } QueryBuilder - lastExecutionProperty() { + lastExecutionProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'lastExecution'); }); diff --git a/lib/database/collections/template.g.dart b/lib/database/collections/template.g.dart index 99b6524..96a643e 100644 --- a/lib/database/collections/template.g.dart +++ b/lib/database/collections/template.g.dart @@ -18,13 +18,21 @@ const TransactionTemplateSchema = CollectionSchema( name: r'TransactionTemplate', id: -2324989530163310644, properties: { - r'amount': PropertySchema(id: 0, name: r'amount', type: IsarType.double), - r'name': PropertySchema(id: 1, name: r'name', type: IsarType.string), + r'amount': PropertySchema( + id: 0, + name: r'amount', + type: IsarType.double, + ), + r'name': PropertySchema( + id: 1, + name: r'name', + type: IsarType.string, + ), r'recurring': PropertySchema( id: 2, name: r'recurring', type: IsarType.bool, - ), + ) }, estimateSize: _transactionTemplateEstimateSize, serialize: _transactionTemplateSerialize, @@ -50,7 +58,7 @@ const TransactionTemplateSchema = CollectionSchema( name: r'account', target: r'Account', single: true, - ), + ) }, embeddedSchemas: {}, getId: _transactionTemplateGetId, @@ -117,29 +125,17 @@ Id _transactionTemplateGetId(TransactionTemplate object) { } List> _transactionTemplateGetLinks( - TransactionTemplate object, -) { + TransactionTemplate object) { return [object.expenseCategory, object.beneficiary, object.account]; } void _transactionTemplateAttach( - IsarCollection col, - Id id, - TransactionTemplate object, -) { + IsarCollection col, Id id, TransactionTemplate object) { object.id = id; object.expenseCategory.attach( - col, - col.isar.collection(), - r'expenseCategory', - id, - ); - object.beneficiary.attach( - col, - col.isar.collection(), - r'beneficiary', - id, - ); + col, col.isar.collection(), r'expenseCategory', id); + object.beneficiary + .attach(col, col.isar.collection(), r'beneficiary', id); object.account.attach(col, col.isar.collection(), r'account', id); } @@ -155,14 +151,17 @@ extension TransactionTemplateQueryWhereSort extension TransactionTemplateQueryWhere on QueryBuilder { QueryBuilder - idEqualTo(Id id) { + idEqualTo(Id id) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); + return query.addWhereClause(IdWhereClause.between( + lower: id, + upper: id, + )); }); } QueryBuilder - idNotEqualTo(Id id) { + idNotEqualTo(Id id) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -185,7 +184,7 @@ extension TransactionTemplateQueryWhere } QueryBuilder - idGreaterThan(Id id, {bool include = false}) { + idGreaterThan(Id id, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -194,7 +193,7 @@ extension TransactionTemplateQueryWhere } QueryBuilder - idLessThan(Id id, {bool include = false}) { + idLessThan(Id id, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -203,83 +202,73 @@ extension TransactionTemplateQueryWhere } QueryBuilder - idBetween( + idBetween( Id lowerId, Id upperId, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); + return query.addWhereClause(IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + )); }); } } -extension TransactionTemplateQueryFilter - on - QueryBuilder< - TransactionTemplate, - TransactionTemplate, - QFilterCondition - > { +extension TransactionTemplateQueryFilter on QueryBuilder { QueryBuilder - amountEqualTo(double value, {double epsilon = Query.epsilon}) { + amountEqualTo( + double value, { + double epsilon = Query.epsilon, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'amount', + value: value, + epsilon: epsilon, + )); }); } QueryBuilder - amountGreaterThan( + amountGreaterThan( double value, { bool include = false, double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'amount', + value: value, + epsilon: epsilon, + )); }); } QueryBuilder - amountLessThan( + amountLessThan( double value, { bool include = false, double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'amount', + value: value, + epsilon: epsilon, + )); }); } QueryBuilder - amountBetween( + amountBetween( double lower, double upper, { bool includeLower = true, @@ -287,125 +276,121 @@ extension TransactionTemplateQueryFilter double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'amount', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - epsilon: epsilon, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'amount', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + epsilon: epsilon, + )); }); } QueryBuilder - idEqualTo(Id value) { + idEqualTo(Id value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'id', + value: value, + )); }); } QueryBuilder - idGreaterThan(Id value, {bool include = false}) { + idGreaterThan( + Id value, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + )); }); } QueryBuilder - idLessThan(Id value, {bool include = false}) { + idLessThan( + Id value, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + )); }); } QueryBuilder - idBetween( + idBetween( Id lower, Id upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); }); } QueryBuilder - nameEqualTo(String value, {bool caseSensitive = true}) { + nameEqualTo( + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameGreaterThan( + nameGreaterThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameLessThan( + nameLessThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameBetween( + nameBetween( String lower, String upper, { bool includeLower = true, @@ -413,151 +398,140 @@ extension TransactionTemplateQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'name', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameStartsWith(String value, {bool caseSensitive = true}) { + nameStartsWith( + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameEndsWith(String value, {bool caseSensitive = true}) { + nameEndsWith( + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameContains(String value, {bool caseSensitive = true}) { + nameContains(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'name', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameMatches(String pattern, {bool caseSensitive = true}) { + nameMatches(String pattern, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'name', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - nameIsEmpty() { + nameIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'name', value: ''), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'name', + value: '', + )); }); } QueryBuilder - nameIsNotEmpty() { + nameIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'name', value: ''), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'name', + value: '', + )); }); } QueryBuilder - recurringEqualTo(bool value) { + recurringEqualTo(bool value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'recurring', value: value), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'recurring', + value: value, + )); }); } } -extension TransactionTemplateQueryObject - on - QueryBuilder< - TransactionTemplate, - TransactionTemplate, - QFilterCondition - > {} +extension TransactionTemplateQueryObject on QueryBuilder {} -extension TransactionTemplateQueryLinks - on - QueryBuilder< - TransactionTemplate, - TransactionTemplate, - QFilterCondition - > { +extension TransactionTemplateQueryLinks on QueryBuilder { QueryBuilder - expenseCategory(FilterQuery q) { + expenseCategory(FilterQuery q) { return QueryBuilder.apply(this, (query) { return query.link(q, r'expenseCategory'); }); } QueryBuilder - expenseCategoryIsNull() { + expenseCategoryIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'expenseCategory', 0, true, 0, true); }); } QueryBuilder - beneficiary(FilterQuery q) { + beneficiary(FilterQuery q) { return QueryBuilder.apply(this, (query) { return query.link(q, r'beneficiary'); }); } QueryBuilder - beneficiaryIsNull() { + beneficiaryIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'beneficiary', 0, true, 0, true); }); } QueryBuilder - account(FilterQuery q) { + account(FilterQuery q) { return QueryBuilder.apply(this, (query) { return query.link(q, r'account'); }); } QueryBuilder - accountIsNull() { + accountIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'account', 0, true, 0, true); }); @@ -567,42 +541,42 @@ extension TransactionTemplateQueryLinks extension TransactionTemplateQuerySortBy on QueryBuilder { QueryBuilder - sortByAmount() { + sortByAmount() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'amount', Sort.asc); }); } QueryBuilder - sortByAmountDesc() { + sortByAmountDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'amount', Sort.desc); }); } QueryBuilder - sortByName() { + sortByName() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'name', Sort.asc); }); } QueryBuilder - sortByNameDesc() { + sortByNameDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'name', Sort.desc); }); } QueryBuilder - sortByRecurring() { + sortByRecurring() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'recurring', Sort.asc); }); } QueryBuilder - sortByRecurringDesc() { + sortByRecurringDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'recurring', Sort.desc); }); @@ -612,56 +586,56 @@ extension TransactionTemplateQuerySortBy extension TransactionTemplateQuerySortThenBy on QueryBuilder { QueryBuilder - thenByAmount() { + thenByAmount() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'amount', Sort.asc); }); } QueryBuilder - thenByAmountDesc() { + thenByAmountDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'amount', Sort.desc); }); } QueryBuilder - thenById() { + thenById() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'id', Sort.asc); }); } QueryBuilder - thenByIdDesc() { + thenByIdDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'id', Sort.desc); }); } QueryBuilder - thenByName() { + thenByName() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'name', Sort.asc); }); } QueryBuilder - thenByNameDesc() { + thenByNameDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'name', Sort.desc); }); } QueryBuilder - thenByRecurring() { + thenByRecurring() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'recurring', Sort.asc); }); } QueryBuilder - thenByRecurringDesc() { + thenByRecurringDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'recurring', Sort.desc); }); @@ -671,21 +645,21 @@ extension TransactionTemplateQuerySortThenBy extension TransactionTemplateQueryWhereDistinct on QueryBuilder { QueryBuilder - distinctByAmount() { + distinctByAmount() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'amount'); }); } QueryBuilder - distinctByName({bool caseSensitive = true}) { + distinctByName({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'name', caseSensitive: caseSensitive); }); } QueryBuilder - distinctByRecurring() { + distinctByRecurring() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'recurring'); }); @@ -713,7 +687,7 @@ extension TransactionTemplateQueryProperty } QueryBuilder - recurringProperty() { + recurringProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'recurring'); }); diff --git a/lib/database/collections/transaction.g.dart b/lib/database/collections/transaction.g.dart index 491ba9c..38a53da 100644 --- a/lib/database/collections/transaction.g.dart +++ b/lib/database/collections/transaction.g.dart @@ -17,9 +17,21 @@ const TransactionSchema = CollectionSchema( name: r'Transaction', id: 5320225499417954855, properties: { - r'amount': PropertySchema(id: 0, name: r'amount', type: IsarType.double), - r'date': PropertySchema(id: 1, name: r'date', type: IsarType.dateTime), - r'tags': PropertySchema(id: 2, name: r'tags', type: IsarType.stringList), + r'amount': PropertySchema( + id: 0, + name: r'amount', + type: IsarType.double, + ), + r'date': PropertySchema( + id: 1, + name: r'date', + type: IsarType.dateTime, + ), + r'tags': PropertySchema( + id: 2, + name: r'tags', + type: IsarType.stringList, + ) }, estimateSize: _transactionEstimateSize, serialize: _transactionSerialize, @@ -45,7 +57,7 @@ const TransactionSchema = CollectionSchema( name: r'beneficiary', target: r'Beneficiary', single: true, - ), + ) }, embeddedSchemas: {}, getId: _transactionGetId, @@ -122,24 +134,13 @@ List> _transactionGetLinks(Transaction object) { } void _transactionAttach( - IsarCollection col, - Id id, - Transaction object, -) { + IsarCollection col, Id id, Transaction object) { object.id = id; object.expenseCategory.attach( - col, - col.isar.collection(), - r'expenseCategory', - id, - ); + col, col.isar.collection(), r'expenseCategory', id); object.account.attach(col, col.isar.collection(), r'account', id); - object.beneficiary.attach( - col, - col.isar.collection(), - r'beneficiary', - id, - ); + object.beneficiary + .attach(col, col.isar.collection(), r'beneficiary', id); } extension TransactionQueryWhereSort @@ -155,13 +156,15 @@ extension TransactionQueryWhere on QueryBuilder { QueryBuilder idEqualTo(Id id) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); + return query.addWhereClause(IdWhereClause.between( + lower: id, + upper: id, + )); }); } QueryBuilder idNotEqualTo( - Id id, - ) { + Id id) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -183,10 +186,8 @@ extension TransactionQueryWhere }); } - QueryBuilder idGreaterThan( - Id id, { - bool include = false, - }) { + QueryBuilder idGreaterThan(Id id, + {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -194,10 +195,8 @@ extension TransactionQueryWhere }); } - QueryBuilder idLessThan( - Id id, { - bool include = false, - }) { + QueryBuilder idLessThan(Id id, + {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -212,14 +211,12 @@ extension TransactionQueryWhere bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause( - IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - ), - ); + return query.addWhereClause(IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + )); }); } } @@ -231,31 +228,27 @@ extension TransactionQueryFilter double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'amount', + value: value, + epsilon: epsilon, + )); }); } QueryBuilder - amountGreaterThan( + amountGreaterThan( double value, { bool include = false, double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'amount', + value: value, + epsilon: epsilon, + )); }); } @@ -265,14 +258,12 @@ extension TransactionQueryFilter double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'amount', + value: value, + epsilon: epsilon, + )); }); } @@ -284,26 +275,24 @@ extension TransactionQueryFilter double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'amount', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - epsilon: epsilon, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'amount', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + epsilon: epsilon, + )); }); } QueryBuilder dateEqualTo( - DateTime value, - ) { + DateTime value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'date', value: value), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'date', + value: value, + )); }); } @@ -312,13 +301,11 @@ extension TransactionQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'date', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'date', + value: value, + )); }); } @@ -327,13 +314,11 @@ extension TransactionQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'date', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'date', + value: value, + )); }); } @@ -344,25 +329,23 @@ extension TransactionQueryFilter bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'date', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'date', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); }); } QueryBuilder idEqualTo( - Id value, - ) { + Id value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'id', value: value), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'id', + value: value, + )); }); } @@ -371,13 +354,11 @@ extension TransactionQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + )); }); } @@ -386,13 +367,11 @@ extension TransactionQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + )); }); } @@ -403,69 +382,64 @@ extension TransactionQueryFilter bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + )); }); } QueryBuilder - tagsElementEqualTo(String value, {bool caseSensitive = true}) { + tagsElementEqualTo( + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo( - property: r'tags', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'tags', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - tagsElementGreaterThan( + tagsElementGreaterThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan( - include: include, - property: r'tags', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + include: include, + property: r'tags', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - tagsElementLessThan( + tagsElementLessThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.lessThan( - include: include, - property: r'tags', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.lessThan( + include: include, + property: r'tags', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - tagsElementBetween( + tagsElementBetween( String lower, String upper, { bool includeLower = true, @@ -473,125 +447,159 @@ extension TransactionQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.between( - property: r'tags', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.between( + property: r'tags', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - tagsElementStartsWith(String value, {bool caseSensitive = true}) { + tagsElementStartsWith( + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.startsWith( - property: r'tags', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.startsWith( + property: r'tags', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - tagsElementEndsWith(String value, {bool caseSensitive = true}) { + tagsElementEndsWith( + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.endsWith( - property: r'tags', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.endsWith( + property: r'tags', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - tagsElementContains(String value, {bool caseSensitive = true}) { + tagsElementContains(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.contains( - property: r'tags', - value: value, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.contains( + property: r'tags', + value: value, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - tagsElementMatches(String pattern, {bool caseSensitive = true}) { + tagsElementMatches(String pattern, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.matches( - property: r'tags', - wildcard: pattern, - caseSensitive: caseSensitive, - ), - ); + return query.addFilterCondition(FilterCondition.matches( + property: r'tags', + wildcard: pattern, + caseSensitive: caseSensitive, + )); }); } QueryBuilder - tagsElementIsEmpty() { + tagsElementIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.equalTo(property: r'tags', value: ''), - ); + return query.addFilterCondition(FilterCondition.equalTo( + property: r'tags', + value: '', + )); }); } QueryBuilder - tagsElementIsNotEmpty() { + tagsElementIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition( - FilterCondition.greaterThan(property: r'tags', value: ''), - ); + return query.addFilterCondition(FilterCondition.greaterThan( + property: r'tags', + value: '', + )); }); } QueryBuilder - tagsLengthEqualTo(int length) { + tagsLengthEqualTo(int length) { return QueryBuilder.apply(this, (query) { - return query.listLength(r'tags', length, true, length, true); + return query.listLength( + r'tags', + length, + true, + length, + true, + ); }); } QueryBuilder tagsIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.listLength(r'tags', 0, true, 0, true); + return query.listLength( + r'tags', + 0, + true, + 0, + true, + ); }); } QueryBuilder - tagsIsNotEmpty() { + tagsIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.listLength(r'tags', 0, false, 999999, true); + return query.listLength( + r'tags', + 0, + false, + 999999, + true, + ); }); } QueryBuilder - tagsLengthLessThan(int length, {bool include = false}) { + tagsLengthLessThan( + int length, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { - return query.listLength(r'tags', 0, true, length, include); + return query.listLength( + r'tags', + 0, + true, + length, + include, + ); }); } QueryBuilder - tagsLengthGreaterThan(int length, {bool include = false}) { + tagsLengthGreaterThan( + int length, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { - return query.listLength(r'tags', length, include, 999999, true); + return query.listLength( + r'tags', + length, + include, + 999999, + true, + ); }); } QueryBuilder - tagsLengthBetween( + tagsLengthBetween( int lower, int upper, { bool includeLower = true, @@ -615,45 +623,42 @@ extension TransactionQueryObject extension TransactionQueryLinks on QueryBuilder { QueryBuilder expenseCategory( - FilterQuery q, - ) { + FilterQuery q) { return QueryBuilder.apply(this, (query) { return query.link(q, r'expenseCategory'); }); } QueryBuilder - expenseCategoryIsNull() { + expenseCategoryIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'expenseCategory', 0, true, 0, true); }); } QueryBuilder account( - FilterQuery q, - ) { + FilterQuery q) { return QueryBuilder.apply(this, (query) { return query.link(q, r'account'); }); } QueryBuilder - accountIsNull() { + accountIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'account', 0, true, 0, true); }); } QueryBuilder beneficiary( - FilterQuery q, - ) { + FilterQuery q) { return QueryBuilder.apply(this, (query) { return query.link(q, r'beneficiary'); }); } QueryBuilder - beneficiaryIsNull() { + beneficiaryIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'beneficiary', 0, true, 0, true); }); diff --git a/lib/database/database.dart b/lib/database/database.dart index 95e916c..d30e5c1 100644 --- a/lib/database/database.dart +++ b/lib/database/database.dart @@ -12,6 +12,8 @@ import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/utils.dart'; import 'package:path_provider/path_provider.dart'; +import 'collections/budget.dart'; + Future openDatabase() async { final dir = await getApplicationDocumentsDirectory(); return Isar.open([ @@ -21,6 +23,8 @@ Future openDatabase() async { TransactionTemplateSchema, RecurringTransactionSchema, ExpenseCategorySchema, + BudgetSchema, + BudgetItemSchema, ], directory: dir.path); } @@ -205,3 +209,56 @@ Future> getExpenseCategories() { Stream watchExpenseCategory() { return GetIt.I.get().expenseCategorys.watchLazy(fireImmediately: true); } + +Stream watchBudgets(Account account) { + return GetIt.I.get().budgets.filter().account((q) => q.idEqualTo(account.id)).watchLazy(fireImmediately: true); +} + +Future> getBudgets(Account? account) { + if (account == null) { + return Future.value([]); + } + + return GetIt.I.get().budgets.filter().account((q) => q.idEqualTo(account.id)).findAll(); +} + +Future upsertBudget(Budget budget) { + final db = GetIt.I.get(); + return db.writeTxn(() async { + await db.budgets.put(budget); + await budget.items.save(); + await budget.account.save(); + }); +} + +Future upsertBudgetItem(BudgetItem item) { + final db = GetIt.I.get(); + return db.writeTxn(() async { + await db.budgetItems.put(item); + await item.expenseCategory.save(); + }); +} + +enum TransactionQueryDateOption { + thisMonth, +} + +Future> getTransactionsInTimeframe(Account account, DateTime today, TransactionQueryDateOption option) async { + final lower = switch (option) { + TransactionQueryDateOption.thisMonth => DateTime( + today.year, + today.month, + 0, + ), + }; + final upper = switch (option) { + TransactionQueryDateOption.thisMonth => monthEnding(today), + }; + + return GetIt.I.get() + .transactions + .filter() + .account((q) => q.idEqualTo(account.id)) + .dateBetween(lower, upper) + .findAll(); +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 5393302..373562a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -8,6 +8,7 @@ import 'package:isar/isar.dart'; import 'package:okane/database/database.dart'; import 'package:okane/screen.dart'; import 'package:okane/ui/navigation.dart'; +import 'package:okane/ui/pages/budgets/budget_details.dart'; import 'package:okane/ui/pages/transaction_details.dart'; import 'package:okane/ui/state/core.dart'; @@ -39,6 +40,7 @@ class MyApp extends StatelessWidget { onGenerateRoute: (settings) => switch (settings.name) { "/transactions/details" => TransactionDetailsPage.mobileRoute, + "/budgets/details" => BudgetDetailsPage.mobileRoute, _ => MaterialPageRoute(builder: (_) => Text("Unknown!!")), }, ), @@ -86,10 +88,7 @@ class _MyHomePageState extends State { } return Scaffold( - bottomNavigationBar: switch (screenSize) { - ScreenSize.normal => null, - ScreenSize.small => OkaneNavigationBar(), - }, + drawer: OkaneNavigationDrawer(), body: switch (screenSize) { ScreenSize.normal => const Row( children: [ diff --git a/lib/ui/navigation.dart b/lib/ui/navigation.dart index d5131c1..3e332c3 100644 --- a/lib/ui/navigation.dart +++ b/lib/ui/navigation.dart @@ -2,6 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:okane/screen.dart'; import 'package:okane/ui/pages/account/account.dart'; +import 'package:okane/ui/pages/budgets/budget_details.dart'; +import 'package:okane/ui/pages/budgets/budgets.dart'; import 'package:okane/ui/pages/template_list.dart'; import 'package:okane/ui/pages/transaction_details.dart'; import 'package:okane/ui/pages/transaction_list.dart'; @@ -66,8 +68,8 @@ final _pages = [ OkanePage.budgets, Icons.pie_chart, "Budgets", - Placeholder(), - null, + BudgetListPage(), + (_) => BudgetDetailsPage(), ), ]; @@ -105,6 +107,29 @@ class OkaneNavigationBar extends StatelessWidget { } } +class OkaneNavigationDrawer extends StatelessWidget { + const OkaneNavigationDrawer({super.key}); + + @override + Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, state) => Drawer( + child: ListView( + children: _pages.map((p) => ListTile( + title: Text(p.label), + leading: Icon(p.icon), + selected: p.page == state.activePage, + onTap: () { + context.read().setPage(p.page); + Navigator.of(context).pop(); + }, + )).toList(), + ), + ), + ); + } +} + class OkaneNavigationLayout extends StatelessWidget { const OkaneNavigationLayout({super.key}); @@ -119,7 +144,27 @@ class OkaneNavigationLayout extends StatelessWidget { _pages .map( (p) => switch (screenSize) { - ScreenSize.small => p.child, + ScreenSize.small => Column( + children: [ + SizedBox( + height: 50, + child: Padding( + padding: EdgeInsets.all(8), + child: Row( + children: [ + IconButton( + icon: Icon(Icons.menu), + onPressed: () { + Scaffold.of(context).openDrawer(); + }, + ), + ], + ), + ), + ), + Expanded(child: p.child), + ], + ), ScreenSize.normal => p.details != null ? Row( diff --git a/lib/ui/pages/account/account.dart b/lib/ui/pages/account/account.dart index 2a3ef13..fdff884 100644 --- a/lib/ui/pages/account/account.dart +++ b/lib/ui/pages/account/account.dart @@ -111,20 +111,6 @@ class AccountListPageState extends State { child: UpcomingTransactionsCard(), ), - /* - BlocBuilder( - builder: - (context, state) => Row( - children: [ - Expanded( - child: Padding( - padding: EdgeInsets.all(16), - child: AccountBalanceGraphCard(), - ), - ), - ], - ), - ),*/ Row( children: [ Padding(padding: EdgeInsets.all(16), child: BreakdownCard()), diff --git a/lib/ui/pages/account/total_balance_card.dart b/lib/ui/pages/account/total_balance_card.dart index 2d09957..73741a4 100644 --- a/lib/ui/pages/account/total_balance_card.dart +++ b/lib/ui/pages/account/total_balance_card.dart @@ -28,15 +28,17 @@ class TotalBalanceCard extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Text("Total balance"), + Text( + "Total balance", + style: Theme.of(context).textTheme.titleLarge, + ), FutureBuilder( future: _getTotalBalance(state.accounts), builder: (context, snapshot) { - if (!snapshot.hasData) { - return Text("..."); - } - - return Text(formatCurrency(snapshot.data!)); + return Text( + snapshot.hasData ? formatCurrency(snapshot.data!) : "...", + style: Theme.of(context).textTheme.bodyLarge, + ); }, ), ], diff --git a/lib/ui/pages/account/upcoming_transactions_card.dart b/lib/ui/pages/account/upcoming_transactions_card.dart index 09c41ca..da5ac3c 100644 --- a/lib/ui/pages/account/upcoming_transactions_card.dart +++ b/lib/ui/pages/account/upcoming_transactions_card.dart @@ -1,6 +1,4 @@ import 'dart:math'; - -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:okane/database/collections/recurrent.dart'; @@ -29,7 +27,12 @@ class UpcomingTransactionsCard extends StatelessWidget { : upcomingRaw.sublist(0, min(upcomingRaw.length, 3)); final transactions = upcoming.isEmpty - ? [Text("No upcoming transactions")] + ? [ + Text( + "No upcoming transactions", + style: Theme.of(context).textTheme.bodyLarge, + ), + ] : upcoming .map( (t) => ListTile( @@ -59,7 +62,14 @@ class UpcomingTransactionsCard extends StatelessWidget { child: Padding( padding: const EdgeInsets.all(16), child: Column( - children: [Text("Upcoming Transactions")] + transactions, + children: + [ + Text( + "Upcoming Transactions", + style: Theme.of(context).textTheme.titleLarge, + ), + ] + + transactions, ), ), ); diff --git a/lib/ui/pages/budgets/add_budget.dart b/lib/ui/pages/budgets/add_budget.dart new file mode 100644 index 0000000..5e36ccb --- /dev/null +++ b/lib/ui/pages/budgets/add_budget.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:get_it/get_it.dart'; +import 'package:okane/database/collections/budget.dart'; +import 'package:okane/database/database.dart'; +import 'package:okane/ui/state/core.dart'; + +class AddBudgetPopup extends StatefulWidget { + final VoidCallback onDone; + + const AddBudgetPopup({super.key, required this.onDone}); + + @override + AddBudgetState createState() => AddBudgetState(); +} + +class AddBudgetState extends State { + final _budgetNameEditController = TextEditingController(); + final _budgetIncomeEditController = TextEditingController(); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + TextField( + decoration: InputDecoration( + hintText: "Budget name", + ), + controller: _budgetNameEditController, + ), + + TextField( + decoration: InputDecoration( + hintText: "Income", + ), + controller: _budgetIncomeEditController, + keyboardType: TextInputType.numberWithOptions(signed: false, decimal: true), + ), + + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + OutlinedButton( + onPressed: () async { + if (_budgetNameEditController.text.isEmpty || _budgetIncomeEditController.text.isEmpty) { + return; + } + + final bloc = GetIt.I.get(); + final budget = Budget() + ..name = _budgetNameEditController.text + ..period = BudgetPeriod.month + ..income = double.parse(_budgetIncomeEditController.text) + ..account.value = bloc.activeAccount!; + await upsertBudget(budget); + widget.onDone(); + }, + child: Text("Add"), + ), + ], + ), + ], + ); + } +} \ No newline at end of file diff --git a/lib/ui/pages/budgets/add_budget_item.dart b/lib/ui/pages/budgets/add_budget_item.dart new file mode 100644 index 0000000..c959f19 --- /dev/null +++ b/lib/ui/pages/budgets/add_budget_item.dart @@ -0,0 +1,85 @@ +import 'package:flutter/material.dart'; +import 'package:get_it/get_it.dart'; +import 'package:okane/database/collections/budget.dart'; +import 'package:okane/database/collections/expense_category.dart'; +import 'package:okane/database/database.dart'; +import 'package:okane/ui/state/core.dart'; +import 'package:okane/ui/utils.dart'; +import 'package:okane/ui/widgets/add_expense_category.dart'; + +class AddBudgetItemPopup extends StatefulWidget { + final VoidCallback onDone; + final Budget budget; + + const AddBudgetItemPopup({super.key, required this.onDone, required this.budget}); + + @override + AddBudgetItemState createState() => AddBudgetItemState(); +} + +class AddBudgetItemState extends State { + final _budgetItemAmountEditController = TextEditingController(); + ExpenseCategory? _expenseCategory; + + @override + Widget build(BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + children: [ + Text("Expense category"), + + OutlinedButton( + onPressed: () async { + final category = await showDialogOrModal( + context: context, + builder: (_) => AddExpenseCategory(), + ); + if (category == null) { + return; + } + + setState(() => _expenseCategory = category); + }, + child: Text(_expenseCategory?.name ?? "None"), + ), + ], + ), + + TextField( + decoration: InputDecoration( + hintText: "Amount", + ), + controller: _budgetItemAmountEditController, + keyboardType: TextInputType.numberWithOptions(signed: false, decimal: true), + ), + + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + OutlinedButton( + onPressed: () async { + if (_budgetItemAmountEditController.text.isEmpty || _expenseCategory == null) { + return; + } + if (widget.budget.items.where((i) => i.expenseCategory.value!.name == _expenseCategory!.name).firstOrNull != null) { + return; + } + + final item = BudgetItem() + ..expenseCategory.value = _expenseCategory + ..amount = double.parse(_budgetItemAmountEditController.text); + await upsertBudgetItem(item); + widget.budget.items.add(item); + await upsertBudget(widget.budget); + widget.onDone(); + }, + child: Text("Add"), + ), + ], + ), + ], + ); + } +} \ No newline at end of file diff --git a/lib/ui/pages/budgets/budget_details.dart b/lib/ui/pages/budgets/budget_details.dart new file mode 100644 index 0000000..755e885 --- /dev/null +++ b/lib/ui/pages/budgets/budget_details.dart @@ -0,0 +1,374 @@ +import 'package:fl_chart/fl_chart.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:get_it/get_it.dart'; +import 'package:okane/database/collections/budget.dart'; +import 'package:okane/database/database.dart'; +import 'package:okane/ui/pages/account/breakdown_card.dart'; +import 'package:okane/ui/pages/budgets/add_budget_item.dart'; +import 'package:okane/ui/state/core.dart'; +import 'package:okane/ui/utils.dart'; + +class BudgetDetailsPage extends StatelessWidget { + final bool isPage; + + const BudgetDetailsPage({this.isPage = false, super.key}); + + static MaterialPageRoute get mobileRoute => + MaterialPageRoute(builder: (_) => BudgetDetailsPage(isPage: true)); + + void _addBudgetItem(BuildContext context, CoreState state) { + showDialogOrModal( + context: context, + builder: + (_) => AddBudgetItemPopup( + budget: state.activeBudget!, + onDone: () { + Navigator.of(context).pop(); + }, + ), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Column( + children: [ + if (isPage) + SizedBox( + height: 50, + child: Row( + children: [ + IconButton( + icon: Icon(Icons.arrow_back), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ), + ), + + BlocBuilder( + builder: (context, state) { + if (state.activeBudget == null) { + return Text("No budget selected"); + } + + if (state.activeBudget!.items.isEmpty) { + return Row( + children: [ + Text("No budget items added"), + Padding( + padding: EdgeInsets.only(left: 16), + child: IconButton( + onPressed: () => _addBudgetItem(context, state), + icon: Icon(Icons.add), + ), + ), + ], + ); + } + + final bloc = GetIt.I.get(); + final today = DateTime.now(); + return FutureBuilder( + future: getTransactionsInTimeframe( + bloc.activeAccount!, + today, + TransactionQueryDateOption.thisMonth, + ), + builder: (context, snapshot) { + final daysLeft = switch (state.activeBudget!.period) { + BudgetPeriod.month => + monthEnding(today).difference(today).inDays, + }; + + if (!snapshot.hasData) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "Budget items", + style: Theme.of(context).textTheme.titleMedium, + ), + ListView.builder( + shrinkWrap: true, + itemCount: state.activeBudget!.items.length, + itemBuilder: (context, index) { + final item = state.activeBudget!.items.elementAt( + index, + ); + final amount = formatCurrency(item.amount); + return ListTile( + title: Text( + "${item.expenseCategory.value!.name} ($amount)", + ), + subtitle: Text("..."), + ); + }, + ), + ], + ); + } + + final spending = {}; + for (final t in snapshot.data!) { + if (t.expenseCategory.value == null) { + continue; + } + + spending.update( + t.expenseCategory.value!.name, + (value) => value + t.amount, + ifAbsent: () => t.amount, + ); + } + + final budgetTotal = state.activeBudget!.items + .map((i) => i.amount) + .reduce((acc, val) => acc + val); + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 100, + child: ListView( + scrollDirection: Axis.horizontal, + children: [ + Padding( + padding: EdgeInsets.all(8), + child: SizedBox( + height: 100, + width: 150, + child: Card( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Days left", + textAlign: TextAlign.center, + style: + Theme.of( + context, + ).textTheme.titleLarge, + ), + Text( + daysLeft.toString(), + textAlign: TextAlign.center, + style: + Theme.of( + context, + ).textTheme.bodyLarge, + ), + ], + ), + ), + ), + ), + Padding( + padding: EdgeInsets.all(8), + child: SizedBox( + height: 100, + width: 150, + child: Card( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Budget total", + textAlign: TextAlign.center, + style: + Theme.of( + context, + ).textTheme.titleLarge, + ), + Text( + formatCurrency(budgetTotal), + textAlign: TextAlign.center, + style: + Theme.of( + context, + ).textTheme.bodyLarge, + ), + ], + ), + ), + ), + ), + ], + ), + ), + + Padding( + padding: EdgeInsets.all(8), + child: SizedBox( + child: Card( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsets.only(top: 8), + child: Text( + "Budget breakdown", + style: + Theme.of(context).textTheme.titleLarge, + textAlign: TextAlign.center, + ), + ), + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: EdgeInsets.all(16), + child: SizedBox( + width: 150, + height: 150, + child: AspectRatio( + aspectRatio: 1, + child: PieChart( + PieChartData( + borderData: FlBorderData( + show: false, + ), + sectionsSpace: 0, + centerSpaceRadius: 35, + sections: + state.activeBudget!.items + .map( + ( + i, + ) => PieChartSectionData( + value: i.amount.abs(), + title: formatCurrency( + i.amount.abs(), + ), + titleStyle: TextStyle( + fontWeight: + FontWeight.bold, + ), + radius: 40, + color: colorHash( + i + .expenseCategory + .value! + .name, + ), + ), + ) + .toList(), + ), + ), + ), + ), + ), + + Padding( + padding: EdgeInsets.symmetric( + horizontal: 8, + ), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: + state.activeBudget!.items + .map( + (i) => LegendItem( + text: + i + .expenseCategory + .value! + .name, + color: colorHash( + i + .expenseCategory + .value! + .name, + ), + ), + ) + .toList(), + ), + ), + ], + ), + ], + ), + ), + ), + ), + + Padding( + padding: EdgeInsets.all(8), + child: Row( + children: [ + Text( + "Budget items", + style: Theme.of(context).textTheme.titleMedium, + ), + Padding( + padding: EdgeInsets.only(left: 16), + child: IconButton( + icon: Icon(Icons.add), + onPressed: () => _addBudgetItem(context, state), + ), + ), + ], + ), + ), + Padding( + padding: EdgeInsets.all(8), + child: ListView.builder( + shrinkWrap: true, + itemCount: state.activeBudget!.items.length, + itemBuilder: (context, index) { + final item = state.activeBudget!.items.elementAt( + index, + ); + final amount = formatCurrency(item.amount); + final spent = + spending[item.expenseCategory.value!.name]; + final left = + spent == null + ? item.amount + : item.amount + spent; + final subtitleText = + left < 0 + ? "${formatCurrency(left)} over" + : "${formatCurrency(left)} left"; + return ListTile( + title: Text( + "${item.expenseCategory.value!.name} ($amount)", + ), + subtitle: Text( + subtitleText, + style: TextStyle( + color: left < 0 ? Colors.red : Colors.green, + ), + ), + trailing: IconButton( + icon: Icon(Icons.delete), + onPressed: () {}, + ), + ); + }, + ), + ), + ], + ); + }, + ); + }, + ), + ], + ), + ); + } +} diff --git a/lib/ui/pages/budgets/budgets.dart b/lib/ui/pages/budgets/budgets.dart new file mode 100644 index 0000000..ddc1b4a --- /dev/null +++ b/lib/ui/pages/budgets/budgets.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:get_it/get_it.dart'; +import 'package:okane/screen.dart'; +import 'package:okane/ui/pages/budgets/add_budget.dart'; +import 'package:okane/ui/state/core.dart'; +import 'package:okane/ui/utils.dart'; + +class BudgetListPage extends StatelessWidget { + const BudgetListPage({super.key}); + + @override + Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, state) { + if (state.budgets.isEmpty) { + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text("No budgets"), + OutlinedButton( + onPressed: () { + showDialogOrModal( + context: context, + builder: + (_) => AddBudgetPopup( + onDone: () { + Navigator.of(context).pop(); + }, + ), + ); + }, + child: Text("Add"), + ), + ], + ); + } + + return ListView.builder( + itemCount: state.budgets.length, + itemBuilder: + (context, index) => ListTile( + title: Text(state.budgets[index].name), + selected: state.budgets[index] == state.activeBudget, + trailing: IconButton( + icon: Icon( + Icons.delete, + color: Colors.redAccent, + ), + onPressed: () { + // TODO + }, + ), + onTap: () { + GetIt.I.get().setActiveBudget( + state.budgets[index], + ); + if (getScreenSize(context) == ScreenSize.small) { + Navigator.of(context).pushNamed("/budgets/details"); + } + }, + ), + ); + }, + ); + } +} diff --git a/lib/ui/pages/transaction_details.dart b/lib/ui/pages/transaction_details.dart index d3d0072..f779979 100644 --- a/lib/ui/pages/transaction_details.dart +++ b/lib/ui/pages/transaction_details.dart @@ -47,72 +47,89 @@ class TransactionDetailsPage extends StatelessWidget { @override Widget build(BuildContext context) { - final widget = BlocBuilder( - builder: (context, state) { - if (state.activeTransaction == null) { - return Text("No transaction selected"); - } - - return Padding( - padding: const EdgeInsets.all(8.0), - child: ListView( - children: [ - Row( + return Scaffold( + body: Column( + children: [ + if (isPage) + SizedBox( + height: 50, + child: Row( children: [ - StreamBuilder( - stream: watchBeneficiaryObject( - state.activeTransaction!.beneficiary.value!.id, - ), - builder: (context, snapshot) { - final obj = - snapshot.data ?? - state.activeTransaction!.beneficiary.value!; - return ImageWrapper( - title: obj.name, - path: obj.imagePath, - onTap: () => _updateBeneficiaryIcon(obj), - ); - }, - ), - Padding( - padding: EdgeInsets.only(left: 8), - child: Text( - state.activeTransaction!.beneficiary.value!.name, - ), - ), - Spacer(), IconButton( - icon: Icon(Icons.edit), + icon: Icon(Icons.arrow_back), onPressed: () { - // TODO: Implement + Navigator.of(context).pop(); }, ), ], ), - Wrap( - spacing: 8, - children: - state.activeTransaction!.tags - .map((tag) => Chip(label: Text(tag))) - .toList(), - ), - Row( - children: [ - state.activeTransaction!.amount > 0 - ? Icon(Icons.add) - : Icon(Icons.remove), - Text(formatCurrency(state.activeTransaction!.amount)), - ], - ), - ], - ), - ); - }, - ); + ), + Expanded( + child: BlocBuilder( + builder: (context, state) { + if (state.activeTransaction == null) { + return Text("No transaction selected"); + } - if (isPage) { - return Scaffold(body: widget); - } - return widget; + return Padding( + padding: const EdgeInsets.all(8.0), + child: ListView( + children: [ + Row( + children: [ + StreamBuilder( + stream: watchBeneficiaryObject( + state.activeTransaction!.beneficiary.value!.id, + ), + builder: (context, snapshot) { + final obj = + snapshot.data ?? + state.activeTransaction!.beneficiary.value!; + return ImageWrapper( + title: obj.name, + path: obj.imagePath, + onTap: () => _updateBeneficiaryIcon(obj), + ); + }, + ), + Padding( + padding: EdgeInsets.only(left: 8), + child: Text( + state.activeTransaction!.beneficiary.value!.name, + ), + ), + Spacer(), + IconButton( + icon: Icon(Icons.edit), + onPressed: () { + // TODO: Implement + }, + ), + ], + ), + Wrap( + spacing: 8, + children: + state.activeTransaction!.tags + .map((tag) => Chip(label: Text(tag))) + .toList(), + ), + Row( + children: [ + state.activeTransaction!.amount > 0 + ? Icon(Icons.add) + : Icon(Icons.remove), + Text(formatCurrency(state.activeTransaction!.amount)), + ], + ), + ], + ), + ); + }, + ), + ), + ], + ), + ); } } diff --git a/lib/ui/pages/transaction_list.dart b/lib/ui/pages/transaction_list.dart index 1244cd3..5076f4a 100644 --- a/lib/ui/pages/transaction_list.dart +++ b/lib/ui/pages/transaction_list.dart @@ -3,7 +3,6 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; import 'package:grouped_list/grouped_list.dart'; import 'package:okane/database/collections/transaction.dart'; -import 'package:okane/database/database.dart'; import 'package:okane/screen.dart'; import 'package:okane/ui/pages/account/balance_graph_card.dart'; import 'package:okane/ui/state/core.dart'; diff --git a/lib/ui/state/core.dart b/lib/ui/state/core.dart index 4f96781..4723ddc 100644 --- a/lib/ui/state/core.dart +++ b/lib/ui/state/core.dart @@ -4,6 +4,7 @@ import 'package:bloc/bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:okane/database/collections/account.dart'; import 'package:okane/database/collections/beneficiary.dart'; +import 'package:okane/database/collections/budget.dart'; import 'package:okane/database/collections/expense_category.dart'; import 'package:okane/database/collections/recurrent.dart'; import 'package:okane/database/collections/template.dart'; @@ -25,6 +26,8 @@ abstract class CoreState with _$CoreState { @Default([]) List transactionTemplates, @Default([]) List beneficiaries, @Default([]) List expenseCategories, + @Default([]) List budgets, + @Default(null) Budget? activeBudget, }) = _CoreState; } @@ -37,6 +40,7 @@ class CoreCubit extends Cubit { StreamSubscription? _transactionsStreamSubscription; StreamSubscription? _beneficiariesStreamSubscription; StreamSubscription? _expenseCategoryStreamSubscription; + StreamSubscription? _budgetsStreamSubscription; void setupAccountStream() { _accountsStreamSubscription?.cancel(); @@ -94,6 +98,12 @@ class CoreCubit extends Cubit { ) async { emit(state.copyWith(expenseCategories: await getExpenseCategories())); }); + _budgetsStreamSubscription?.cancel(); + _budgetsStreamSubscription = watchBudgets(activeAccount!).listen(( + _, + ) async { + emit(state.copyWith(budgets: await getBudgets(activeAccount!))); + }); } Future init() async { @@ -108,6 +118,7 @@ class CoreCubit extends Cubit { transactionTemplates: await getTransactionTemplates(account), recurringTransactions: await getRecurringTransactions(account), expenseCategories: await getExpenseCategories(), + budgets: await getBudgets(account), ), ); @@ -132,6 +143,9 @@ class CoreCubit extends Cubit { beneficiaries: await getBeneficiaries(), transactionTemplates: await getTransactionTemplates(account), recurringTransactions: await getRecurringTransactions(account), + budgets: await getBudgets(account), + activeBudget: null, + activeTransaction: null, ), ); setupStreams(account); @@ -145,6 +159,10 @@ class CoreCubit extends Cubit { emit(state.copyWith(accounts: accounts)); } + void setActiveBudget(Budget? budget) { + emit(state.copyWith(activeBudget: budget)); + } + Account? get activeAccount => state.activeAccountIndex == null ? null diff --git a/lib/ui/state/core.freezed.dart b/lib/ui/state/core.freezed.dart index 49d8a24..02f41e5 100644 --- a/lib/ui/state/core.freezed.dart +++ b/lib/ui/state/core.freezed.dart @@ -12,8 +12,7 @@ part of 'core.dart'; T _$identity(T value) => value; final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models', -); + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); /// @nodoc mixin _$CoreState { @@ -29,6 +28,8 @@ mixin _$CoreState { List get beneficiaries => throw _privateConstructorUsedError; List get expenseCategories => throw _privateConstructorUsedError; + List get budgets => throw _privateConstructorUsedError; + Budget? get activeBudget => throw _privateConstructorUsedError; @JsonKey(ignore: true) $CoreStateCopyWith get copyWith => @@ -40,17 +41,18 @@ abstract class $CoreStateCopyWith<$Res> { factory $CoreStateCopyWith(CoreState value, $Res Function(CoreState) then) = _$CoreStateCopyWithImpl<$Res, CoreState>; @useResult - $Res call({ - OkanePage activePage, - int? activeAccountIndex, - Transaction? activeTransaction, - List accounts, - List recurringTransactions, - List transactions, - List transactionTemplates, - List beneficiaries, - List expenseCategories, - }); + $Res call( + {OkanePage activePage, + int? activeAccountIndex, + Transaction? activeTransaction, + List accounts, + List recurringTransactions, + List transactions, + List transactionTemplates, + List beneficiaries, + List expenseCategories, + List budgets, + Budget? activeBudget}); } /// @nodoc @@ -75,57 +77,55 @@ class _$CoreStateCopyWithImpl<$Res, $Val extends CoreState> Object? transactionTemplates = null, Object? beneficiaries = null, Object? expenseCategories = null, + Object? budgets = null, + Object? activeBudget = freezed, }) { - return _then( - _value.copyWith( - activePage: - null == activePage - ? _value.activePage - : activePage // ignore: cast_nullable_to_non_nullable - as OkanePage, - activeAccountIndex: - freezed == activeAccountIndex - ? _value.activeAccountIndex - : activeAccountIndex // ignore: cast_nullable_to_non_nullable - as int?, - activeTransaction: - freezed == activeTransaction - ? _value.activeTransaction - : activeTransaction // ignore: cast_nullable_to_non_nullable - as Transaction?, - accounts: - null == accounts - ? _value.accounts - : accounts // ignore: cast_nullable_to_non_nullable - as List, - recurringTransactions: - null == recurringTransactions - ? _value.recurringTransactions - : recurringTransactions // ignore: cast_nullable_to_non_nullable - as List, - transactions: - null == transactions - ? _value.transactions - : transactions // ignore: cast_nullable_to_non_nullable - as List, - transactionTemplates: - null == transactionTemplates - ? _value.transactionTemplates - : transactionTemplates // ignore: cast_nullable_to_non_nullable - as List, - beneficiaries: - null == beneficiaries - ? _value.beneficiaries - : beneficiaries // ignore: cast_nullable_to_non_nullable - as List, - expenseCategories: - null == expenseCategories - ? _value.expenseCategories - : expenseCategories // ignore: cast_nullable_to_non_nullable - as List, - ) - as $Val, - ); + return _then(_value.copyWith( + activePage: null == activePage + ? _value.activePage + : activePage // ignore: cast_nullable_to_non_nullable + as OkanePage, + activeAccountIndex: freezed == activeAccountIndex + ? _value.activeAccountIndex + : activeAccountIndex // ignore: cast_nullable_to_non_nullable + as int?, + activeTransaction: freezed == activeTransaction + ? _value.activeTransaction + : activeTransaction // ignore: cast_nullable_to_non_nullable + as Transaction?, + accounts: null == accounts + ? _value.accounts + : accounts // ignore: cast_nullable_to_non_nullable + as List, + recurringTransactions: null == recurringTransactions + ? _value.recurringTransactions + : recurringTransactions // ignore: cast_nullable_to_non_nullable + as List, + transactions: null == transactions + ? _value.transactions + : transactions // ignore: cast_nullable_to_non_nullable + as List, + transactionTemplates: null == transactionTemplates + ? _value.transactionTemplates + : transactionTemplates // ignore: cast_nullable_to_non_nullable + as List, + beneficiaries: null == beneficiaries + ? _value.beneficiaries + : beneficiaries // ignore: cast_nullable_to_non_nullable + as List, + expenseCategories: null == expenseCategories + ? _value.expenseCategories + : expenseCategories // ignore: cast_nullable_to_non_nullable + as List, + budgets: null == budgets + ? _value.budgets + : budgets // ignore: cast_nullable_to_non_nullable + as List, + activeBudget: freezed == activeBudget + ? _value.activeBudget + : activeBudget // ignore: cast_nullable_to_non_nullable + as Budget?, + ) as $Val); } } @@ -133,22 +133,22 @@ class _$CoreStateCopyWithImpl<$Res, $Val extends CoreState> abstract class _$$CoreStateImplCopyWith<$Res> implements $CoreStateCopyWith<$Res> { factory _$$CoreStateImplCopyWith( - _$CoreStateImpl value, - $Res Function(_$CoreStateImpl) then, - ) = __$$CoreStateImplCopyWithImpl<$Res>; + _$CoreStateImpl value, $Res Function(_$CoreStateImpl) then) = + __$$CoreStateImplCopyWithImpl<$Res>; @override @useResult - $Res call({ - OkanePage activePage, - int? activeAccountIndex, - Transaction? activeTransaction, - List accounts, - List recurringTransactions, - List transactions, - List transactionTemplates, - List beneficiaries, - List expenseCategories, - }); + $Res call( + {OkanePage activePage, + int? activeAccountIndex, + Transaction? activeTransaction, + List accounts, + List recurringTransactions, + List transactions, + List transactionTemplates, + List beneficiaries, + List expenseCategories, + List budgets, + Budget? activeBudget}); } /// @nodoc @@ -156,9 +156,8 @@ class __$$CoreStateImplCopyWithImpl<$Res> extends _$CoreStateCopyWithImpl<$Res, _$CoreStateImpl> implements _$$CoreStateImplCopyWith<$Res> { __$$CoreStateImplCopyWithImpl( - _$CoreStateImpl _value, - $Res Function(_$CoreStateImpl) _then, - ) : super(_value, _then); + _$CoreStateImpl _value, $Res Function(_$CoreStateImpl) _then) + : super(_value, _then); @pragma('vm:prefer-inline') @override @@ -172,78 +171,80 @@ class __$$CoreStateImplCopyWithImpl<$Res> Object? transactionTemplates = null, Object? beneficiaries = null, Object? expenseCategories = null, + Object? budgets = null, + Object? activeBudget = freezed, }) { - return _then( - _$CoreStateImpl( - activePage: - null == activePage - ? _value.activePage - : activePage // ignore: cast_nullable_to_non_nullable - as OkanePage, - activeAccountIndex: - freezed == activeAccountIndex - ? _value.activeAccountIndex - : activeAccountIndex // ignore: cast_nullable_to_non_nullable - as int?, - activeTransaction: - freezed == activeTransaction - ? _value.activeTransaction - : activeTransaction // ignore: cast_nullable_to_non_nullable - as Transaction?, - accounts: - null == accounts - ? _value._accounts - : accounts // ignore: cast_nullable_to_non_nullable - as List, - recurringTransactions: - null == recurringTransactions - ? _value._recurringTransactions - : recurringTransactions // ignore: cast_nullable_to_non_nullable - as List, - transactions: - null == transactions - ? _value._transactions - : transactions // ignore: cast_nullable_to_non_nullable - as List, - transactionTemplates: - null == transactionTemplates - ? _value._transactionTemplates - : transactionTemplates // ignore: cast_nullable_to_non_nullable - as List, - beneficiaries: - null == beneficiaries - ? _value._beneficiaries - : beneficiaries // ignore: cast_nullable_to_non_nullable - as List, - expenseCategories: - null == expenseCategories - ? _value._expenseCategories - : expenseCategories // ignore: cast_nullable_to_non_nullable - as List, - ), - ); + return _then(_$CoreStateImpl( + activePage: null == activePage + ? _value.activePage + : activePage // ignore: cast_nullable_to_non_nullable + as OkanePage, + activeAccountIndex: freezed == activeAccountIndex + ? _value.activeAccountIndex + : activeAccountIndex // ignore: cast_nullable_to_non_nullable + as int?, + activeTransaction: freezed == activeTransaction + ? _value.activeTransaction + : activeTransaction // ignore: cast_nullable_to_non_nullable + as Transaction?, + accounts: null == accounts + ? _value._accounts + : accounts // ignore: cast_nullable_to_non_nullable + as List, + recurringTransactions: null == recurringTransactions + ? _value._recurringTransactions + : recurringTransactions // ignore: cast_nullable_to_non_nullable + as List, + transactions: null == transactions + ? _value._transactions + : transactions // ignore: cast_nullable_to_non_nullable + as List, + transactionTemplates: null == transactionTemplates + ? _value._transactionTemplates + : transactionTemplates // ignore: cast_nullable_to_non_nullable + as List, + beneficiaries: null == beneficiaries + ? _value._beneficiaries + : beneficiaries // ignore: cast_nullable_to_non_nullable + as List, + expenseCategories: null == expenseCategories + ? _value._expenseCategories + : expenseCategories // ignore: cast_nullable_to_non_nullable + as List, + budgets: null == budgets + ? _value._budgets + : budgets // ignore: cast_nullable_to_non_nullable + as List, + activeBudget: freezed == activeBudget + ? _value.activeBudget + : activeBudget // ignore: cast_nullable_to_non_nullable + as Budget?, + )); } } /// @nodoc class _$CoreStateImpl implements _CoreState { - const _$CoreStateImpl({ - this.activePage = OkanePage.accounts, - this.activeAccountIndex, - this.activeTransaction = null, - final List accounts = const [], - final List recurringTransactions = const [], - final List transactions = const [], - final List transactionTemplates = const [], - final List beneficiaries = const [], - final List expenseCategories = const [], - }) : _accounts = accounts, - _recurringTransactions = recurringTransactions, - _transactions = transactions, - _transactionTemplates = transactionTemplates, - _beneficiaries = beneficiaries, - _expenseCategories = expenseCategories; + const _$CoreStateImpl( + {this.activePage = OkanePage.accounts, + this.activeAccountIndex, + this.activeTransaction = null, + final List accounts = const [], + final List recurringTransactions = const [], + final List transactions = const [], + final List transactionTemplates = const [], + final List beneficiaries = const [], + final List expenseCategories = const [], + final List budgets = const [], + this.activeBudget = null}) + : _accounts = accounts, + _recurringTransactions = recurringTransactions, + _transactions = transactions, + _transactionTemplates = transactionTemplates, + _beneficiaries = beneficiaries, + _expenseCategories = expenseCategories, + _budgets = budgets; @override @JsonKey() @@ -310,9 +311,22 @@ class _$CoreStateImpl implements _CoreState { return EqualUnmodifiableListView(_expenseCategories); } + final List _budgets; + @override + @JsonKey() + List get budgets { + if (_budgets is EqualUnmodifiableListView) return _budgets; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_budgets); + } + + @override + @JsonKey() + final Budget? activeBudget; + @override String toString() { - return 'CoreState(activePage: $activePage, activeAccountIndex: $activeAccountIndex, activeTransaction: $activeTransaction, accounts: $accounts, recurringTransactions: $recurringTransactions, transactions: $transactions, transactionTemplates: $transactionTemplates, beneficiaries: $beneficiaries, expenseCategories: $expenseCategories)'; + return 'CoreState(activePage: $activePage, activeAccountIndex: $activeAccountIndex, activeTransaction: $activeTransaction, accounts: $accounts, recurringTransactions: $recurringTransactions, transactions: $transactions, transactionTemplates: $transactionTemplates, beneficiaries: $beneficiaries, expenseCategories: $expenseCategories, budgets: $budgets, activeBudget: $activeBudget)'; } @override @@ -327,41 +341,35 @@ class _$CoreStateImpl implements _CoreState { (identical(other.activeTransaction, activeTransaction) || other.activeTransaction == activeTransaction) && const DeepCollectionEquality().equals(other._accounts, _accounts) && - const DeepCollectionEquality().equals( - other._recurringTransactions, - _recurringTransactions, - ) && - const DeepCollectionEquality().equals( - other._transactions, - _transactions, - ) && - const DeepCollectionEquality().equals( - other._transactionTemplates, - _transactionTemplates, - ) && - const DeepCollectionEquality().equals( - other._beneficiaries, - _beneficiaries, - ) && - const DeepCollectionEquality().equals( - other._expenseCategories, - _expenseCategories, - )); + const DeepCollectionEquality() + .equals(other._recurringTransactions, _recurringTransactions) && + const DeepCollectionEquality() + .equals(other._transactions, _transactions) && + const DeepCollectionEquality() + .equals(other._transactionTemplates, _transactionTemplates) && + const DeepCollectionEquality() + .equals(other._beneficiaries, _beneficiaries) && + const DeepCollectionEquality() + .equals(other._expenseCategories, _expenseCategories) && + const DeepCollectionEquality().equals(other._budgets, _budgets) && + (identical(other.activeBudget, activeBudget) || + other.activeBudget == activeBudget)); } @override int get hashCode => Object.hash( - runtimeType, - activePage, - activeAccountIndex, - activeTransaction, - const DeepCollectionEquality().hash(_accounts), - const DeepCollectionEquality().hash(_recurringTransactions), - const DeepCollectionEquality().hash(_transactions), - const DeepCollectionEquality().hash(_transactionTemplates), - const DeepCollectionEquality().hash(_beneficiaries), - const DeepCollectionEquality().hash(_expenseCategories), - ); + runtimeType, + activePage, + activeAccountIndex, + activeTransaction, + const DeepCollectionEquality().hash(_accounts), + const DeepCollectionEquality().hash(_recurringTransactions), + const DeepCollectionEquality().hash(_transactions), + const DeepCollectionEquality().hash(_transactionTemplates), + const DeepCollectionEquality().hash(_beneficiaries), + const DeepCollectionEquality().hash(_expenseCategories), + const DeepCollectionEquality().hash(_budgets), + activeBudget); @JsonKey(ignore: true) @override @@ -371,17 +379,18 @@ class _$CoreStateImpl implements _CoreState { } abstract class _CoreState implements CoreState { - const factory _CoreState({ - final OkanePage activePage, - final int? activeAccountIndex, - final Transaction? activeTransaction, - final List accounts, - final List recurringTransactions, - final List transactions, - final List transactionTemplates, - final List beneficiaries, - final List expenseCategories, - }) = _$CoreStateImpl; + const factory _CoreState( + {final OkanePage activePage, + final int? activeAccountIndex, + final Transaction? activeTransaction, + final List accounts, + final List recurringTransactions, + final List transactions, + final List transactionTemplates, + final List beneficiaries, + final List expenseCategories, + final List budgets, + final Budget? activeBudget}) = _$CoreStateImpl; @override OkanePage get activePage; @@ -402,6 +411,10 @@ abstract class _CoreState implements CoreState { @override List get expenseCategories; @override + List get budgets; + @override + Budget? get activeBudget; + @override @JsonKey(ignore: true) _$$CoreStateImplCopyWith<_$CoreStateImpl> get copyWith => throw _privateConstructorUsedError; diff --git a/lib/ui/utils.dart b/lib/ui/utils.dart index e85bfcf..f2fe3e4 100644 --- a/lib/ui/utils.dart +++ b/lib/ui/utils.dart @@ -69,3 +69,14 @@ String formatCurrency(double amount, {bool precise = true}) { } return "${amount.toStringAsFixed(2)}€"; } + +DateTime monthEnding(DateTime now) { + return DateTime( + now.year, + now.month, + 32, + 23, + 59, + 59, + ); +} \ No newline at end of file