Line data Source code
1 : // Copyright 2023 The terCAD team. All rights reserved.
2 : // Use of this source code is governed by a CC BY-NC-ND 4.0 license that can be found in the LICENSE file.
3 :
4 : import 'dart:convert';
5 : import 'package:app_finance/_classes/controller/encryption_handler.dart';
6 : import 'package:app_finance/_classes/structure/interface_app_data.dart';
7 : import 'package:app_finance/_ext/date_time_ext.dart';
8 : import 'package:material_ui/material_ui.dart';
9 : import 'package:flutter_currency_picker/flutter_currency_picker.dart';
10 :
11 : abstract class AbstractAppData implements InterfaceAppData {
12 : @override
13 : String? uuid;
14 : double _amount = 0.0;
15 : DateTime _createdAt;
16 : DateTime _updatedAt;
17 : @override
18 : String title;
19 : double progress;
20 : @override
21 : bool hidden;
22 : @override
23 : bool skip;
24 : String? description;
25 : @override
26 : MaterialColor? color;
27 : @override
28 : IconData? icon;
29 : @override
30 : Currency? currency;
31 : String? payment;
32 :
33 1 : AbstractAppData({
34 : required this.title,
35 : this.uuid,
36 : this.description,
37 : this.color,
38 : this.icon,
39 : this.currency,
40 : DateTime? updatedAt,
41 : DateTime? createdAt,
42 : String? createdAtFormatted,
43 : details = 0.0,
44 : this.progress = 1.0,
45 : this.hidden = false,
46 : this.skip = false,
47 : this.payment,
48 1 : }) : _createdAt = createdAt ?? (createdAtFormatted != null ? DateTime.parse(createdAtFormatted) : DateTime.now()),
49 1 : _updatedAt = updatedAt ?? DateTime.now(),
50 1 : _amount = 0.0 + (details ?? 0.0);
51 :
52 : AbstractAppData clone();
53 :
54 0 : @override
55 0 : void deactivate() => hidden = true;
56 :
57 0 : factory AbstractAppData.fromJson(Map<String, dynamic> json) {
58 0 : throw Exception('Implement by extending');
59 : }
60 :
61 2 : Map<String, dynamic> toJson() => {
62 1 : 'uuid': uuid,
63 1 : 'title': title,
64 1 : 'description': description,
65 2 : 'color': color?.toARGB32(),
66 1 : 'icon': icon?.codePoint,
67 1 : 'currency': currency?.code,
68 2 : 'createdAt': createdAt.toIso8601String(),
69 2 : 'updatedAt': updatedAt.toIso8601String(),
70 1 : 'details': details,
71 1 : 'progress': progress,
72 1 : 'hidden': hidden,
73 1 : 'skip': skip,
74 1 : 'payment': payment,
75 : };
76 :
77 1 : Map<String, Map<String, dynamic>> toFile() {
78 2 : var data = {...toJson()};
79 1 : return {
80 1 : 'type': {
81 1 : 'name': getClassName(),
82 1 : 'hash': EncryptionHandler.getHash(data),
83 : },
84 : 'data': data,
85 : };
86 : }
87 :
88 3 : String toStream() => EncryptionHandler.encrypt(toString());
89 :
90 1 : @override
91 2 : String toString() => json.encode(toFile());
92 :
93 1 : @override
94 1 : dynamic get details => _amount;
95 :
96 2 : set details(dynamic value) => _amount = value;
97 :
98 0 : Widget? get error => null;
99 :
100 : // ignore: unnecessary_getters_setters
101 2 : DateTime get updatedAt => _updatedAt;
102 0 : set updatedAt(DateTime value) => _updatedAt = value;
103 3 : String get updatedAtFormatted => _updatedAt.yMEd();
104 0 : set updatedAtFormatted(String value) => _updatedAt = DateTime.parse(value);
105 :
106 : // ignore: unnecessary_getters_setters
107 1 : @override
108 1 : DateTime get createdAt => _createdAt;
109 0 : @override
110 0 : set createdAt(DateTime value) => _createdAt = value;
111 0 : String get createdAtFormatted => _createdAt.yMEd();
112 0 : set createdAtFormatted(String value) => _createdAt = DateTime.parse(value);
113 : }
|