// SPDX-FileCopyrightText: (C) 2024 Matyáš Caras // // SPDX-License-Identifier: AGPL-3.0-only import 'package:json_annotation/json_annotation.dart'; import 'package:prasule/api/category.dart'; import 'package:prasule/api/entry_data.dart'; import 'package:prasule/api/wallet_entry.dart'; part 'recurring_entry.g.dart'; /// This is a [WalletSingleEntry] that is automatically recurring @JsonSerializable() class RecurringWalletEntry extends WalletSingleEntry { /// This is a [WalletSingleEntry] that is automatically recurring RecurringWalletEntry({ required super.data, required super.type, required super.date, required super.category, required super.id, required this.lastRunDate, required this.recurType, this.repeatAfter = 1, }); /// Generates a class instance from a Map factory RecurringWalletEntry.fromJson(Map json) => _$RecurringWalletEntryFromJson(json); /// Converts the data in this instance into a Map @override Map toJson() => _$RecurringWalletEntryToJson(this); /// Last date the recurring entry was added into the single entry list @JsonKey(defaultValue: DateTime.now) DateTime lastRunDate; /// After how many {recurType} should the entry recur @JsonKey(defaultValue: 1) int repeatAfter; /// What type of recurrence should happen @JsonKey(defaultValue: RecurType.month) RecurType recurType; } /// How a [RecurringWalletEntry] should recur @JsonEnum() enum RecurType { /// Will recur every {repeatAfter} months month, /// Will recur every {repeatAfter} years year, /// Will recur every {repeatAfter} days day }