Files
velocity-pay-flutter/lib/screens/transactions/transaction_model.dart
2026-05-29 15:23:02 +02:00

152 lines
4.2 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:json_annotation/json_annotation.dart';
import 'package:decimal/decimal.dart';
part 'transaction_model.g.dart';
/// JsonConverter for [Decimal] values — reads from [num] (int or double)
/// in JSON and writes back as [num].
class DecimalJsonConverter implements JsonConverter<Decimal, num> {
const DecimalJsonConverter();
@override
Decimal fromJson(num json) => Decimal.parse(json.toString());
@override
num toJson(Decimal object) => object.toDouble();
}
/// JsonConverter for [DateTime] values — reads from ISO8601 [String]
/// and writes back as ISO8601 [String].
class DateTimeJsonConverter implements JsonConverter<DateTime, String> {
const DateTimeJsonConverter();
@override
DateTime fromJson(String json) => DateTime.parse(json);
@override
String toJson(DateTime object) => object.toIso8601String();
}
/// JsonConverter for a list of key-value entries (additionalData).
class AdditionalDataJsonConverter
implements JsonConverter<List<Map<String, dynamic>>?, List<dynamic>?> {
const AdditionalDataJsonConverter();
@override
List<Map<String, dynamic>>? fromJson(List<dynamic>? json) {
return json?.map((e) => Map<String, dynamic>.from(e as Map)).toList();
}
@override
List<dynamic>? toJson(List<Map<String, dynamic>>? object) {
return object?.map((e) => e as dynamic).toList();
}
}
@DecimalJsonConverter()
@DateTimeJsonConverter()
@AdditionalDataJsonConverter()
@JsonSerializable(explicitToJson: true)
class TransactionModel {
final String? id;
final DateTime? createdAt;
final String userId;
final String trace;
final Decimal amount;
final Decimal charge;
final Decimal gatewayCharge;
final Decimal tax;
final Decimal totalAmount;
final String reference;
final String paymentProcessorLabel;
final String? integrationProcessorLabel;
final String confirmationProcessorLabel;
final String providerLabel;
final String debitPhone;
final String debitCurrency;
final String debitRef;
final String? creditPhone;
final String? creditAccount;
final String? creditRef;
final String? billClientId;
final String billName;
final String paymentProcessorName;
final String? providerImage;
final String? paymentProcessorImage;
final String confirmationStatus;
final String paymentStatus;
final String integrationStatus;
final String pollingStatus;
final String? orderId;
final String? orderTrace;
final String? orderTransactionTrace;
final String? erpSalesRef;
final String? erpSalesPaymentRef;
final int workflowId;
final String? type;
final String? authType;
final String? responseCode;
final String? status;
final String? errorMessage;
final String? billProductName;
final String? creditName;
final String? creditEmail;
final String? productUid;
final String? targetUrl;
final List<Map<String, dynamic>>? additionalData;
const TransactionModel({
this.id,
this.createdAt,
required this.userId,
required this.trace,
required this.amount,
required this.charge,
required this.gatewayCharge,
required this.tax,
required this.totalAmount,
required this.reference,
required this.paymentProcessorLabel,
this.integrationProcessorLabel,
required this.confirmationProcessorLabel,
required this.providerLabel,
required this.debitPhone,
required this.debitCurrency,
required this.debitRef,
this.creditPhone,
this.creditAccount,
this.creditRef,
this.billClientId,
required this.billName,
required this.paymentProcessorName,
this.providerImage,
this.paymentProcessorImage,
required this.confirmationStatus,
required this.paymentStatus,
required this.integrationStatus,
required this.pollingStatus,
this.orderId,
this.orderTrace,
this.orderTransactionTrace,
this.erpSalesRef,
this.erpSalesPaymentRef,
required this.workflowId,
this.type,
this.authType,
this.responseCode,
this.status,
this.errorMessage,
this.billProductName,
this.creditName,
this.creditEmail,
this.productUid,
this.targetUrl,
this.additionalData,
});
factory TransactionModel.fromJson(Map<String, dynamic> json) =>
_$TransactionModelFromJson(json);
Map<String, dynamic> toJson() => _$TransactionModelToJson(this);
}