apskel-owner-flutter/lib/infrastructure/analytic/dto/payment_method_analytic_dto.dart
2025-08-18 02:23:25 +07:00

86 lines
2.9 KiB
Dart

part of '../analytic_dtos.dart';
@freezed
class PaymentMethodAnalyticDto with _$PaymentMethodAnalyticDto {
const PaymentMethodAnalyticDto._();
const factory PaymentMethodAnalyticDto({
@JsonKey(name: 'organization_id') String? organizationId,
@JsonKey(name: 'outlet_id') String? outletId,
@JsonKey(name: 'date_from') String? dateFrom,
@JsonKey(name: 'date_to') String? dateTo,
@JsonKey(name: 'group_by') String? groupBy,
@JsonKey(name: 'summary') PaymentMethodSummaryDto? summary,
@JsonKey(name: 'data') List<PaymentMethodItemDto>? data,
}) = _PaymentMethodAnalyticDto;
factory PaymentMethodAnalyticDto.fromJson(Map<String, dynamic> json) =>
_$PaymentMethodAnalyticDtoFromJson(json);
PaymentMethodAnalytic toDomain() {
return PaymentMethodAnalytic(
organizationId: organizationId ?? '',
outletId: outletId ?? '',
dateFrom: dateFrom ?? '',
dateTo: dateTo ?? '',
groupBy: groupBy ?? '',
summary: summary?.toDomain() ?? PaymentMethodSummary.empty(),
data: data?.map((e) => e.toDomain()).toList() ?? [],
);
}
}
@freezed
class PaymentMethodItemDto with _$PaymentMethodItemDto {
const PaymentMethodItemDto._();
const factory PaymentMethodItemDto({
@JsonKey(name: 'payment_method_id') String? paymentMethodId,
@JsonKey(name: 'payment_method_name') String? paymentMethodName,
@JsonKey(name: 'payment_method_type') String? paymentMethodType,
@JsonKey(name: 'total_amount') num? totalAmount,
@JsonKey(name: 'order_count') int? orderCount,
@JsonKey(name: 'payment_count') int? paymentCount,
@JsonKey(name: 'percentage') double? percentage,
}) = _PaymentMethodItemDto;
factory PaymentMethodItemDto.fromJson(Map<String, dynamic> json) =>
_$PaymentMethodItemDtoFromJson(json);
PaymentMethodItem toDomain() {
return PaymentMethodItem(
paymentMethodId: paymentMethodId ?? '',
paymentMethodName: paymentMethodName ?? '',
paymentMethodType: paymentMethodType ?? '',
totalAmount: totalAmount ?? 0,
orderCount: orderCount ?? 0,
paymentCount: paymentCount ?? 0,
percentage: percentage ?? 0.0,
);
}
}
@freezed
class PaymentMethodSummaryDto with _$PaymentMethodSummaryDto {
const PaymentMethodSummaryDto._();
const factory PaymentMethodSummaryDto({
@JsonKey(name: 'total_amount') num? totalAmount,
@JsonKey(name: 'total_orders') int? totalOrders,
@JsonKey(name: 'total_payments') int? totalPayments,
@JsonKey(name: 'average_order_value') double? averageOrderValue,
}) = _PaymentMethodSummaryDto;
factory PaymentMethodSummaryDto.fromJson(Map<String, dynamic> json) =>
_$PaymentMethodSummaryDtoFromJson(json);
PaymentMethodSummary toDomain() {
return PaymentMethodSummary(
totalAmount: totalAmount ?? 0,
totalOrders: totalOrders ?? 0,
totalPayments: totalPayments ?? 0,
averageOrderValue: averageOrderValue ?? 0.0,
);
}
}