Files
BudgetApp/lib/models/transaction_record.dart
T

75 lines
2.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:hive_ce/hive.dart';
import 'category.dart';
import 'tag.dart';
part 'transaction_record.g.dart';
@HiveType(typeId: 2)
/// Модель записи о транзакции - основной элемент учета бюджета
/// Содержит все детали финансовой операции
class TransactionRecord {
/// Уникальный идентификатор транзакции
@HiveField(0)
final String id;
/// Ссылка на категорию транзакции
final Category category;
/// Опциональная ссылка на тег (может быть null)
final Tag? tag;
/// Сумма транзакции (отрицательная для расходов)
final double amount;
/// Дата и время совершения операции
final DateTime dateTime;
/// Название продавца/получателя средств
final String vendor;
/// Валюта операции (код валюты, например "RUB", "USD")
final String currency;
/// Конструктор с обязательными параметрами
const TransactionRecord({
required this.id,
required this.category,
this.tag,
required this.amount,
required this.dateTime,
required this.vendor,
required this.currency,
});
/// Преобразование объекта в Map
Map<String, dynamic> toMap() {
return {
'category': category.toMap(),
'tag': tag?.toMap(),
'amount': amount,
'dateTime': dateTime.toIso8601String(),
'vendor': vendor,
'currency': currency,
};
}
/// Создание объекта из Map
factory TransactionRecord.fromMap(Map<String, dynamic> map) {
return TransactionRecord(
id: map['id'],
category: Category.fromMap(map['category']),
tag: map['tag'] != null ? Tag.fromMap(map['tag']) : null,
amount: map['amount'],
dateTime: DateTime.parse(map['dateTime']),
vendor: map['vendor'],
currency: map['currency'],
);
}
/// Вспомогательный геттер для определения типа операции
/// (доход/расход) на основе категории
bool get isIncome => category.isIncome;
}