Files
flux/lib/features/operations/models/operation_model.dart

201 lines
5.7 KiB
Dart
Raw Normal View History

import 'package:equatable/equatable.dart';
import 'package:flux/features/attachments/models/attachment_model.dart';
enum OperationStatus {
ok('ok'),
waitingforaction('waiting_for_action'),
waitingforsupport('waiting_for_support'),
waitingfordeployment('waiting_for_deployment'),
ko('ko'),
draft('draft'),
canceled('canceled');
static OperationStatus fromString(String value) {
final normalizedValue = value.replaceAll('_', '').toLowerCase();
return OperationStatus.values.firstWhere(
(e) => e.name.toLowerCase() == normalizedValue,
);
}
final String supabaseName;
const OperationStatus(this.supabaseName);
}
2026-05-01 10:11:44 +02:00
class OperationModel extends Equatable {
final String? id;
final DateTime? createdAt;
final String type;
final String? providerId;
final String? modelId;
final String? description;
final DateTime? expirationDate;
final String note;
final bool showInDashboard;
final String batchUuid;
final String companyId;
final String storeId;
final int quantity;
final String? staffId;
final String staffDisplayName;
final String? lastCampaignId;
final OperationStatus status;
final String? customerId;
final String customerDisplayName;
final String reference;
// ALLEGATI (Aggiunto)
final List<AttachmentModel> attachments;
2026-05-01 10:11:44 +02:00
const OperationModel({
this.id,
this.createdAt,
this.type = '',
this.providerId,
this.modelId,
this.description,
this.expirationDate,
this.note = '',
this.showInDashboard = true,
this.batchUuid = '',
required this.companyId,
this.storeId = '',
this.quantity = 1,
this.staffId,
this.staffDisplayName = '',
this.lastCampaignId,
this.status = OperationStatus.draft,
this.customerId,
this.customerDisplayName = '',
this.reference = '',
this.attachments = const [],
});
2026-05-01 10:11:44 +02:00
OperationModel copyWith({
String? id,
DateTime? createdAt,
String? type,
String? providerId,
String? modelId,
String? description,
DateTime? expirationDate,
String? note,
bool? showInDashboard,
String? batchUuid,
String? companyId,
String? storeId,
int? quantity,
String? staffId,
String? staffDisplayName,
String? lastCampaignId,
OperationStatus? status,
String? customerId,
String? customerDisplayName,
String? reference,
List<AttachmentModel>? attachments,
}) => OperationModel(
id: id ?? this.id,
createdAt: createdAt ?? this.createdAt,
type: type ?? this.type,
providerId: providerId ?? this.providerId,
modelId: modelId ?? this.modelId,
description: description ?? this.description,
expirationDate: expirationDate ?? this.expirationDate,
note: note ?? this.note,
showInDashboard: showInDashboard ?? this.showInDashboard,
batchUuid: batchUuid ?? this.batchUuid,
companyId: companyId ?? this.companyId,
storeId: storeId ?? this.storeId,
quantity: quantity ?? this.quantity,
staffId: staffId ?? this.staffId,
staffDisplayName: staffDisplayName ?? this.staffDisplayName,
lastCampaignId: lastCampaignId ?? this.lastCampaignId,
status: status ?? this.status,
customerId: customerId ?? this.customerId,
customerDisplayName: customerDisplayName ?? this.customerDisplayName,
reference: reference ?? this.reference,
attachments: attachments ?? this.attachments,
);
@override
List<Object?> get props => [
id,
createdAt,
type,
providerId,
modelId,
description,
expirationDate,
note,
showInDashboard,
batchUuid,
companyId,
storeId,
quantity,
staffId,
staffDisplayName,
lastCampaignId,
status,
customerId,
customerDisplayName,
reference,
attachments,
];
factory OperationModel.empty({required String companyId}) {
return OperationModel(id: null, createdAt: null, companyId: companyId);
}
2026-05-01 10:11:44 +02:00
factory OperationModel.fromMap(Map<String, dynamic> map) {
return OperationModel(
id: map['id'],
createdAt: map['created_at'] != null
? DateTime.parse(map['created_at'])
: null,
type: map['type'] as String? ?? '',
providerId: map['provider_id'] as String? ?? '',
modelId: map['model_id'] as String? ?? '',
description: map['description'] as String? ?? '',
expirationDate: map['expiration_date'] != null
? DateTime.parse(map['expiration_date'])
: null,
note: map['note'] as String? ?? '',
showInDashboard: map['show_in_dashboard'] as bool,
batchUuid: map['batch_uuid'] as String,
companyId: map['company_id'] as String,
storeId: map['store_id'] as String? ?? '',
quantity: map['quantity'] is int
? map['quantity']
: int.tryParse(map['quantity']?.toString() ?? '0') ?? 0,
staffId: map['staff_id'] as String? ?? '',
lastCampaignId: map['last_campaign_id'] as String? ?? '',
status: OperationStatus.fromString(map['status']),
customerId: map['customer_id'] as String? ?? '',
reference: map['reference'] as String? ?? '',
);
}
Map<String, dynamic> toMap() {
return {
if (id != null) 'id': id,
'type': type,
'provider_id': providerId,
'model_id': modelId,
'description': description,
if (expirationDate != null)
'expiration_date': expirationDate!.toIso8601String(),
'note': note,
'show_in_dashboard': showInDashboard,
'batch_uuid': batchUuid,
'company_id': companyId,
'store_id': storeId,
'quantity': quantity,
if (staffId != null) 'staff_id': staffId,
if (lastCampaignId != null) 'last_campaign_id': lastCampaignId,
'status': status.supabaseName,
if (customerId != null) 'customer_id': customerId,
'reference': reference,
};
}
}