class MarketplaceSettlement { final int? id; final int? userId; final int invoiceId; final int? salesChannelId; final String? channelName; final String? settlementRef; final DateTime settlementDate; final double grossAmount; final double commissionFee; final double shippingFee; final double otherFees; final double feeGst; final double tcsGstAmount; final double tdsAmount; final double totalDeductions; final double netPayoutAmount; final int? payoutWalletId; final String status; final String? notes; final DateTime? createdAt; final DateTime? updatedAt; MarketplaceSettlement({ this.id, this.userId, required this.invoiceId, this.salesChannelId, this.channelName, this.settlementRef, required this.settlementDate, required this.grossAmount, this.commissionFee = 0.0, this.shippingFee = 0.0, this.otherFees = 0.0, this.feeGst = 0.0, this.tcsGstAmount = 0.0, this.tdsAmount = 0.0, required this.totalDeductions, required this.netPayoutAmount, this.payoutWalletId, this.status = 'SETTLED', this.notes, this.createdAt, this.updatedAt, }); factory MarketplaceSettlement.fromJson(Map json) { return MarketplaceSettlement( id: json['id'], userId: json['userId'] ?? json['user_id'], invoiceId: json['invoiceId'] ?? json['invoice_id'] ?? 0, salesChannelId: json['salesChannelId'] ?? json['sales_channel_id'], channelName: json['channelName'] ?? json['channel_name'], settlementRef: json['settlementRef'] ?? json['settlement_ref'], settlementDate: json['settlementDate'] != null ? DateTime.parse(json['settlementDate']) : (json['settlement_date'] != null ? DateTime.parse(json['settlement_date']) : DateTime.now()), grossAmount: (json['grossAmount'] ?? json['gross_amount'] as num?)?.toDouble() ?? 0.0, commissionFee: (json['commissionFee'] ?? json['commission_fee'] as num?)?.toDouble() ?? 0.0, shippingFee: (json['shippingFee'] ?? json['shipping_fee'] as num?)?.toDouble() ?? 0.0, otherFees: (json['otherFees'] ?? json['other_fees'] as num?)?.toDouble() ?? 0.0, feeGst: (json['feeGst'] ?? json['fee_gst'] as num?)?.toDouble() ?? 0.0, tcsGstAmount: (json['tcsGstAmount'] ?? json['tcs_gst_amount'] as num?)?.toDouble() ?? 0.0, tdsAmount: (json['tdsAmount'] ?? json['tds_amount'] as num?)?.toDouble() ?? 0.0, totalDeductions: (json['totalDeductions'] ?? json['total_deductions'] as num?)?.toDouble() ?? 0.0, netPayoutAmount: (json['netPayoutAmount'] ?? json['net_payout_amount'] as num?)?.toDouble() ?? 0.0, payoutWalletId: json['payoutWalletId'] ?? json['payout_wallet_id'], status: json['status'] ?? 'SETTLED', notes: json['notes'], createdAt: json['createdAt'] != null ? DateTime.parse(json['createdAt']) : (json['created_at'] != null ? DateTime.parse(json['created_at']) : null), updatedAt: json['updatedAt'] != null ? DateTime.parse(json['updatedAt']) : (json['updated_at'] != null ? DateTime.parse(json['updated_at']) : null), ); } Map toJson() { final Map data = {}; if (id != null) data['id'] = id; if (userId != null) data['userId'] = userId; data['invoiceId'] = invoiceId; if (salesChannelId != null) data['salesChannelId'] = salesChannelId; if (channelName != null) data['channelName'] = channelName; if (settlementRef != null) data['settlementRef'] = settlementRef; data['settlementDate'] = settlementDate.toIso8601String().split('T')[0]; data['grossAmount'] = grossAmount; data['commissionFee'] = commissionFee; data['shippingFee'] = shippingFee; data['otherFees'] = otherFees; data['feeGst'] = feeGst; data['tcsGstAmount'] = tcsGstAmount; data['tdsAmount'] = tdsAmount; data['totalDeductions'] = totalDeductions; data['netPayoutAmount'] = netPayoutAmount; if (payoutWalletId != null) data['payoutWalletId'] = payoutWalletId; data['status'] = status; if (notes != null) data['notes'] = notes; return data; } }