173 lines
5.4 KiB
Dart
173 lines
5.4 KiB
Dart
class DetailOrderModel {
|
|
String idOrder;
|
|
List<VirtualNumbers>? bankVa;
|
|
String? virtualNumber;
|
|
String? billerCode;
|
|
String? bankName;
|
|
String paymentType;
|
|
String? email;
|
|
String? name;
|
|
String? url;
|
|
// List<OrderModel>? orders;
|
|
String totalPayment;
|
|
DateTime transactionTime;
|
|
DateTime transactionTimeLimit;
|
|
String? qrCodeUrl;
|
|
String? urlGopay;
|
|
String? transactionStatus;
|
|
String? merchantId;
|
|
String? coupon;
|
|
|
|
DetailOrderModel({
|
|
required this.idOrder,
|
|
this.bankVa,
|
|
this.url,
|
|
this.bankName,
|
|
this.qrCodeUrl,
|
|
this.urlGopay,
|
|
this.email,
|
|
this.name,
|
|
this.virtualNumber,
|
|
this.billerCode,
|
|
this.transactionStatus,
|
|
this.merchantId,
|
|
this.coupon,
|
|
// this.orders,
|
|
required this.transactionTime,
|
|
required this.transactionTimeLimit,
|
|
required this.totalPayment,
|
|
required this.paymentType,
|
|
});
|
|
|
|
factory DetailOrderModel.fromJson(Map<String, dynamic> json) {
|
|
final pType = json['payment_type'] ?? '';
|
|
final permataCheck = json['status_message'] ?? '';
|
|
final total = json['gross_amount'] ?? '';
|
|
final statusTransaction = json['transaction_status'] ?? '';
|
|
final time = DateTime.parse(json['transaction_time'] ?? '');
|
|
|
|
if (pType == 'echannel') {
|
|
// Model for Payment Mandiri VA
|
|
return DetailOrderModel(
|
|
transactionTime: time,
|
|
idOrder: json["order_id"] ?? '',
|
|
virtualNumber: json["bill_key"] ?? '',
|
|
billerCode: json["biller_code"] ?? '',
|
|
bankName: 'mandiri',
|
|
paymentType: json['payment_type'] ?? '',
|
|
totalPayment: total,
|
|
transactionStatus: statusTransaction,
|
|
transactionTimeLimit: time.add(Duration(days: 1)));
|
|
} else if (pType == 'bank_transfer' &&
|
|
permataCheck == 'Success, PERMATA VA transaction is successful') {
|
|
// Model for Payment Permata VA
|
|
return DetailOrderModel(
|
|
transactionTime: time,
|
|
idOrder: json["order_id"] ?? '',
|
|
virtualNumber: json["permata_va_number"] ?? '',
|
|
bankName: 'permata',
|
|
paymentType: json['payment_type'] ?? '',
|
|
totalPayment: total,
|
|
transactionStatus: statusTransaction,
|
|
transactionTimeLimit: time.add(Duration(days: 1)));
|
|
} else if (pType == 'bank_transfer') {
|
|
// Model for Payment Bank Transfer (BCA & BNI)
|
|
final bankVAResponse = List<VirtualNumbers>.from(
|
|
json["va_numbers"].map((x) => VirtualNumbers.fromJson(x))).toList();
|
|
return DetailOrderModel(
|
|
transactionTime: time,
|
|
idOrder: json['order_id'] ?? '',
|
|
paymentType: pType,
|
|
bankVa: bankVAResponse,
|
|
virtualNumber: bankVAResponse[0].vaNumber,
|
|
totalPayment: total,
|
|
transactionStatus: statusTransaction,
|
|
transactionTimeLimit: time.add(Duration(days: 1)),
|
|
bankName: bankVAResponse[0].bank);
|
|
} else if (pType == 'credit_card') {
|
|
// Model for CC Payment
|
|
return DetailOrderModel(
|
|
transactionTime: time,
|
|
url: json['redirect_url'] ?? '',
|
|
idOrder: json['order_id'] ?? '',
|
|
paymentType: pType,
|
|
totalPayment: total,
|
|
transactionStatus: statusTransaction,
|
|
transactionTimeLimit: time.add(Duration(days: 1)),
|
|
bankName: json['bank'] ?? '');
|
|
} else if (pType == 'cstore') {
|
|
// Model for Store (Indomaret & Alfamart)
|
|
return DetailOrderModel(
|
|
transactionTime: time,
|
|
idOrder: json["order_id"] ?? '',
|
|
virtualNumber: json["payment_code"] ?? '',
|
|
merchantId: json["merchant_id"] ?? '',
|
|
paymentType: pType,
|
|
bankName: json['store'] ?? '',
|
|
totalPayment: total,
|
|
transactionStatus: statusTransaction,
|
|
transactionTimeLimit: time.add(Duration(days: 1)));
|
|
} else {
|
|
// Model for GoPay
|
|
final qrUrl = json['actions'][0]['url'];
|
|
final urlGop = json['actions'][1]['url'];
|
|
|
|
return DetailOrderModel(
|
|
idOrder: json['order_id'] ?? '',
|
|
transactionTime: time,
|
|
transactionTimeLimit: time.add(Duration(days: 1)),
|
|
totalPayment: total,
|
|
paymentType: pType,
|
|
transactionStatus: statusTransaction,
|
|
qrCodeUrl: qrUrl,
|
|
urlGopay: urlGop,
|
|
);
|
|
}
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return paymentType == "echannel"
|
|
? {
|
|
"order_id": idOrder,
|
|
"payment_type": paymentType,
|
|
"bill_key": virtualNumber,
|
|
"biller_code": billerCode,
|
|
"transaction_status": transactionStatus,
|
|
}
|
|
: paymentType == 'permata'
|
|
? {
|
|
"order_id": idOrder,
|
|
"payment_type": paymentType,
|
|
"permata_va_number": bankVa,
|
|
"transaction_status": transactionStatus,
|
|
}
|
|
: {
|
|
"order_id": idOrder,
|
|
"va_numbers":
|
|
List<dynamic>.from(bankVa!.map((x) => x.toJson())).toList(),
|
|
"payment_type": paymentType,
|
|
"transaction_status": transactionStatus,
|
|
};
|
|
}
|
|
}
|
|
|
|
class VirtualNumbers {
|
|
VirtualNumbers({
|
|
this.bank,
|
|
this.vaNumber,
|
|
});
|
|
|
|
String? bank;
|
|
String? vaNumber;
|
|
|
|
factory VirtualNumbers.fromJson(Map<String, dynamic> json) => VirtualNumbers(
|
|
bank: json["bank"],
|
|
vaNumber: json["va_number"],
|
|
);
|
|
|
|
Map<String, dynamic> toJson() => {
|
|
"bank": bank,
|
|
"va_number": vaNumber,
|
|
};
|
|
}
|