From 37ed6686f8c45c5d096d83effb6ad64c911f86ac Mon Sep 17 00:00:00 2001 From: efrilm Date: Wed, 6 Aug 2025 00:36:13 +0700 Subject: [PATCH] feat: update type and customer is required --- lib/presentation/home/dialog/type_dialog.dart | 8 +-- lib/presentation/home/models/order_type.dart | 6 +- .../home/pages/confirm_payment_page.dart | 39 +++++++--- .../home/widgets/home_right_title.dart | 72 +++++++++++++------ 4 files changed, 87 insertions(+), 38 deletions(-) diff --git a/lib/presentation/home/dialog/type_dialog.dart b/lib/presentation/home/dialog/type_dialog.dart index f689820..c4e35ca 100644 --- a/lib/presentation/home/dialog/type_dialog.dart +++ b/lib/presentation/home/dialog/type_dialog.dart @@ -34,10 +34,10 @@ class _TypeDialogState extends State { 'type': OrderType.delivery, }, { - 'value': 'grab', - 'label': 'Grab', - 'icon': Icons.two_wheeler, - 'type': OrderType.grab, + 'value': 'free_table', + 'label': 'Free Table', + 'icon': Icons.table_bar_outlined, + 'type': OrderType.freeTable, }, ]; diff --git a/lib/presentation/home/models/order_type.dart b/lib/presentation/home/models/order_type.dart index d9b4019..4de6b5b 100644 --- a/lib/presentation/home/models/order_type.dart +++ b/lib/presentation/home/models/order_type.dart @@ -1,8 +1,8 @@ enum OrderType { dineIn('DINE IN'), takeAway('TAKE AWAY'), - grab('GRAB'), - delivery('DELIVERY'); + delivery('DELIVERY'), + freeTable('FREE TABLE'); final String value; const OrderType(this.value); @@ -13,4 +13,4 @@ enum OrderType { orElse: () => OrderType.dineIn, ); } -} \ No newline at end of file +} diff --git a/lib/presentation/home/pages/confirm_payment_page.dart b/lib/presentation/home/pages/confirm_payment_page.dart index 7dd6603..bcc5571 100644 --- a/lib/presentation/home/pages/confirm_payment_page.dart +++ b/lib/presentation/home/pages/confirm_payment_page.dart @@ -876,16 +876,26 @@ class _ConfirmPaymentPageState extends State { SpaceWidth(12), Expanded( child: Button.filled( - onPressed: () => showDialog( - context: context, - builder: (dcontext) => SaveDialog( - selectedTable: widget.table, - customerName: customerController.text, - items: items, - orderType: orderType, - customer: selectedCustomer, - ), - ), + onPressed: () { + if (customerController.text == '') { + AppFlushbar.showError( + context, + 'Pilih Pelanggan terlebih dahulu', + ); + return; + } + + showDialog( + context: context, + builder: (dcontext) => SaveDialog( + selectedTable: widget.table, + customerName: customerController.text, + items: items, + orderType: orderType, + customer: selectedCustomer, + ), + ); + }, label: 'Simpan', ), ), @@ -914,6 +924,15 @@ class _ConfirmPaymentPageState extends State { child: state.maybeMap( orElse: () => Button.filled( onPressed: () { + if (customerController.text == + '') { + AppFlushbar.showError( + context, + 'Pilih Pelanggan terlebih dahulu', + ); + return; + } + context.read().add( OrderFormEvent.create( items: items, diff --git a/lib/presentation/home/widgets/home_right_title.dart b/lib/presentation/home/widgets/home_right_title.dart index fc1a867..9f0e7e2 100644 --- a/lib/presentation/home/widgets/home_right_title.dart +++ b/lib/presentation/home/widgets/home_right_title.dart @@ -6,6 +6,7 @@ import 'package:enaklo_pos/data/models/response/table_model.dart'; import 'package:enaklo_pos/presentation/customer/pages/customer_page.dart'; import 'package:enaklo_pos/presentation/home/bloc/checkout/checkout_bloc.dart'; import 'package:enaklo_pos/presentation/home/dialog/type_dialog.dart'; +import 'package:enaklo_pos/presentation/home/models/order_type.dart'; import 'package:enaklo_pos/presentation/home/pages/dashboard_page.dart'; import 'package:enaklo_pos/presentation/sales/pages/sales_page.dart'; import 'package:flutter/material.dart'; @@ -115,27 +116,56 @@ class HomeRightTitle extends StatelessWidget { }, ), ), - Expanded( - child: Button.filled( - width: 180.0, - height: 40, - elevation: 0, - icon: Icon( - Icons.table_restaurant_outlined, - color: Colors.white, - size: 24, - ), - onPressed: () { - if (table == null) { - context.push(DashboardPage( - index: 1, - )); - } - }, - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - label: table == null ? 'Pilih Meja' : '${table!.tableName}', - ), + BlocBuilder( + builder: (context, state) { + return state.maybeWhen( + orElse: () => const SizedBox.shrink(), + loaded: (items, + discountModel, + discount, + discountAmount, + tax, + serviceCharge, + totalQuantity, + totalPrice, + draftName, + orderType) { + switch (orderType) { + case OrderType.dineIn: + return Expanded( + child: Button.filled( + width: 180.0, + height: 40, + elevation: 0, + icon: Icon( + Icons.table_restaurant_outlined, + color: Colors.white, + size: 24, + ), + onPressed: () { + if (table == null) { + context.push(DashboardPage( + index: 1, + )); + } + }, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + label: table == null + ? 'Pilih Meja' + : '${table!.tableName}', + ), + ); + case OrderType.takeAway: + return const SizedBox.shrink(); + case OrderType.delivery: + return const SizedBox.shrink(); + default: + return const SizedBox.shrink(); + } + }, + ); + }, ), ], ),