From 6acfbdc4cac09b49bf2dad6b0ee310434fc3ad7c Mon Sep 17 00:00:00 2001 From: efrilm Date: Fri, 19 Sep 2025 18:49:55 +0700 Subject: [PATCH] print on sales --- .../models/response/order_response_model.dart | 21 ++++++++++++ lib/presentation/sales/pages/sales_page.dart | 32 +++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/lib/data/models/response/order_response_model.dart b/lib/data/models/response/order_response_model.dart index 74acba4..1a1b367 100644 --- a/lib/data/models/response/order_response_model.dart +++ b/lib/data/models/response/order_response_model.dart @@ -1,5 +1,8 @@ import 'dart:convert'; +import 'package:enaklo_pos/data/models/response/product_response_model.dart'; +import 'package:enaklo_pos/presentation/home/models/product_quantity.dart'; + class OrderDetailResponseModel { final bool? success; final Order? data; @@ -380,3 +383,21 @@ class Payment { }; } } + +extension OrderItemListExtension on List { + List toProductQuantities() => map((e) => ProductQuantity( + product: Product( + id: e.productId, + name: e.productName, + price: e.unitPrice, + printerType: e.printerType, + ), + variant: ProductVariant( + id: e.productVariantId, + name: e.productVariantName, + productId: e.productId, + ), + notes: e.notes ?? '', + quantity: e.quantity ?? 0, + )).toList(); +} diff --git a/lib/presentation/sales/pages/sales_page.dart b/lib/presentation/sales/pages/sales_page.dart index f6d0b72..8b7dbdd 100644 --- a/lib/presentation/sales/pages/sales_page.dart +++ b/lib/presentation/sales/pages/sales_page.dart @@ -1,6 +1,7 @@ import 'package:enaklo_pos/core/components/buttons.dart'; import 'package:enaklo_pos/core/components/spaces.dart'; import 'package:enaklo_pos/core/extensions/build_context_ext.dart'; +import 'package:enaklo_pos/core/function/app_function.dart'; import 'package:enaklo_pos/data/models/response/order_response_model.dart'; import 'package:enaklo_pos/presentation/home/bloc/order_form/order_form_bloc.dart'; import 'package:enaklo_pos/presentation/payment/pages/payment_page.dart'; @@ -256,6 +257,37 @@ class _SalesPageState extends State { label: 'Refund', icon: Icon(Icons.autorenew), ), + SpaceWidth(8), + Button.outlined( + onPressed: () { + if (widget.status == 'completed') { + onPrintRecipt( + context, + order: orderDetail!, + paymentMethod: orderDetail!.payments + ?.map((p) => p.paymentMethodName) + .join(', ') ?? + "", + nominalBayar: orderDetail?.totalPaid ?? 0, + kembalian: 0, + productQuantity: orderDetail!.orderItems! + .toProductQuantities(), + ); + } else { + onPrint( + context, + productQuantity: orderDetail!.orderItems! + .toProductQuantities(), + order: orderDetail!, + ); + } + }, + label: 'Print', + icon: Icon( + Icons.print, + ), + ), + SpaceWidth(8), ], ), Expanded(