import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:sebn_inventory_app/infrastructure/repository/datasources/local_datasource.dart'; import 'value_objects.dart'; part 'entities.freezed.dart'; @freezed class Inventory with _$Inventory { const factory Inventory({ required int id, required String name, required String description, required DateTime begin, required DateTime end, }) = _Inventory; const Inventory._(); factory Inventory.empty() => Inventory( id: -1, name: '', description: '', begin: DateTime(0), end: DateTime(0), ); bool get isValid => DateTime.now().isAfter(begin) && DateTime.now().isBefore(end); } @freezed class InventoryState with _$InventoryState { const factory InventoryState({ required String user, required int firstLabel, required int currentLabel, required int totalLabelsUsed, required int totalItemsInventory, required int inventoryId, required int branchId, required int areaId, }) = _InventoryState; const InventoryState._(); factory InventoryState.empty() => const InventoryState( user: '', firstLabel: -1, currentLabel: -1, totalLabelsUsed: -1, totalItemsInventory: -1, inventoryId: -1, branchId: -1, areaId: -1, ); factory InventoryState.fromCache(TblInventoryState tbl) => InventoryState( user: tbl.user, firstLabel: tbl.firstLabel, currentLabel: tbl.currentLabel, totalLabelsUsed: tbl.totalLabelsUsed, totalItemsInventory: tbl.totalItemsInventory, inventoryId: tbl.inventoryId, branchId: tbl.branchId, areaId: tbl.areaId, ); } @freezed class InventoryItem with _$InventoryItem { const factory InventoryItem({ required int id, required InventoryNbr inventoryNbr, required SerialNbr serialNbr, required String description, required String name, required int label, required int inventoryTaking, required int sapId, required int areaId, }) = _InventoryItem; const InventoryItem._(); Map<String, dynamic> get json { if (sapId.isNegative) return { "inventory_id": inventoryNbr.getOrCrash(), "serial_nbr": serialNbr.getOrCrash(), "description": description, "name": name, "label_id": label, "inventory_taking": inventoryTaking, "area": areaId, }; else return { "id": sapId, "inventory_id": inventoryNbr.getOrCrash(), "serial_nbr": serialNbr.getOrCrash(), "description": description, "name": name, "label_id": label, "inventory_taking": inventoryTaking, "area": areaId, }; } factory InventoryItem.fromResultJson(Map<String, dynamic> json) => InventoryItem( id: int.tryParse(json['id'].toString()) ?? -1, inventoryNbr: InventoryNbr(json['inventory_id'].toString()), serialNbr: SerialNbr(json['serial_nbr'].toString()), description: json['description'].toString(), name: json['name'].toString(), label: int.tryParse(json['label_id'].toString()) ?? -1, inventoryTaking: int.tryParse(json['inventory_taking'].toString()) ?? -1, sapId: int.tryParse(json['id'].toString()) ?? -1, areaId: int.tryParse(json['area'].toString()) ?? -1, ); //factory InventoryItem.empty() => InventoryItem(); } @freezed class InventoryHistoryItem with _$InventoryHistoryItem { // datetime: DateTime.now(), // onServer: true, const factory InventoryHistoryItem({ required int id, required InventoryItem item, required bool onServer, required DateTime datetime, required bool pending, required String insertUser, }) = _InventoryHistoryItem; const InventoryHistoryItem._(); factory InventoryHistoryItem.fromCache(TblInventoryHistoryItem tbl) => InventoryHistoryItem( id: tbl.id, item: InventoryItem( id: tbl.idOnServer, inventoryNbr: InventoryNbr('${tbl.inventoryNbr}'), serialNbr: SerialNbr(tbl.serialNbr), description: tbl.description, name: tbl.name, label: tbl.label, inventoryTaking: tbl.inventoryId, sapId: tbl.sapId, areaId: tbl.areaId, ), onServer: tbl.onServer, pending: false, datetime: tbl.datetime, insertUser: tbl.insertUser); } @freezed class SapItem with _$SapItem { const factory SapItem({ required int sapId, required String name, required String description, required int inventoryNbr, required String serialNbr, required String owner, }) = _SapItem; const SapItem._(); factory SapItem.fromResultsItem(dynamic item) => SapItem( sapId: int.tryParse(item['sap_id'].toString()) ?? -1, name: item['name']?.toString() ?? '', description: item['description']?.toString() ?? '', inventoryNbr: int.tryParse(item['inventory_id'].toString()) ?? -1, serialNbr: item['serial_nbr']?.toString() ?? '', owner: item['owner']?.toString() ?? '', ); factory SapItem.empty() => const SapItem( sapId: -1, name: '', description: '', inventoryNbr: -1, serialNbr: '', owner: '', ); bool isValid() => !sapId.isNegative; }