diff --git a/lib/presentation/home/dialog/payment_add_order_dialog.dart b/lib/presentation/home/dialog/payment_add_order_dialog.dart new file mode 100644 index 0000000..7e8240c --- /dev/null +++ b/lib/presentation/home/dialog/payment_add_order_dialog.dart @@ -0,0 +1,106 @@ +import 'package:enaklo_pos/core/components/buttons.dart'; +import 'package:enaklo_pos/core/components/custom_modal_dialog.dart'; +import 'package:enaklo_pos/core/components/spaces.dart'; +import 'package:enaklo_pos/core/constants/colors.dart'; +import 'package:enaklo_pos/core/extensions/build_context_ext.dart'; +import 'package:enaklo_pos/data/models/response/table_model.dart'; +import 'package:enaklo_pos/presentation/home/bloc/get_table_status/get_table_status_bloc.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +class PaymentAddOrderDialog extends StatefulWidget { + const PaymentAddOrderDialog({super.key}); + + @override + State createState() => _PaymentAddOrderDialogState(); +} + +class _PaymentAddOrderDialogState extends State { + TableModel? selectTable; + + @override + Widget build(BuildContext context) { + return CustomModalDialog( + title: 'Tambah Pesanan', + subtitle: 'Silahkan tambahkan pesanan', + contentPadding: + const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0), + minWidth: context.deviceWidth * 0.4, + minHeight: context.deviceHeight * 0.4, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text( + 'Pilih Meja yang Sudah Ada Pesanan', + style: TextStyle( + color: AppColors.black, + fontSize: 16, + fontWeight: FontWeight.w600, + ), + ), + const SpaceHeight(12.0), + BlocBuilder( + builder: (context, state) { + return state.maybeWhen( + orElse: () => const CircularProgressIndicator(), + success: (tables) { + print( + "🔘 Add to Order - Tables fetched: ${tables.length} tables"); + print( + "🔘 Add to Order - Table statuses: ${tables.map((t) => '${t.tableName}: ${t.status}').join(', ')}"); + // No need to filter since we're fetching occupied tables directly + final occupiedTables = tables; + + if (selectTable == null && occupiedTables.isNotEmpty) { + selectTable = occupiedTables.first; + } + + return Container( + padding: const EdgeInsets.symmetric(horizontal: 16), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + border: Border.all( + color: Theme.of(context).primaryColor, + width: 2, + ), + ), + child: DropdownButtonHideUnderline( + child: DropdownButton( + isExpanded: true, + value: selectTable, + onChanged: (TableModel? newValue) { + setState(() { + selectTable = newValue; + }); + }, + items: occupiedTables + .map>( + (TableModel value) => + DropdownMenuItem( + value: value, + child: Text('${value.tableName} (Occupied)'), + ), + ) + .toList(), + ), + ), + ); + }, + ); + }), + ], + ), + SpaceHeight(24), + Button.filled( + onPressed: () {}, + label: "Simpan", + ), + ], + ), + ); + } +} diff --git a/lib/presentation/home/dialog/payment_save_dialog.dart b/lib/presentation/home/dialog/payment_save_dialog.dart new file mode 100644 index 0000000..423dd48 --- /dev/null +++ b/lib/presentation/home/dialog/payment_save_dialog.dart @@ -0,0 +1,122 @@ +import 'package:enaklo_pos/core/components/buttons.dart'; +import 'package:enaklo_pos/core/components/custom_modal_dialog.dart'; +import 'package:enaklo_pos/core/components/spaces.dart'; +import 'package:enaklo_pos/core/constants/colors.dart'; +import 'package:enaklo_pos/core/extensions/build_context_ext.dart'; +import 'package:enaklo_pos/data/models/response/table_model.dart'; +import 'package:enaklo_pos/presentation/home/bloc/get_table_status/get_table_status_bloc.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +class PaymentSaveDialog extends StatefulWidget { + const PaymentSaveDialog({super.key}); + + @override + State createState() => _PaymentSaveDialogState(); +} + +class _PaymentSaveDialogState extends State { + TableModel? selectTable; + @override + Widget build(BuildContext context) { + return CustomModalDialog( + title: 'Bayar Nanti', + subtitle: 'Simpan pesanan dan bayar nanti', + contentPadding: + const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0), + minWidth: context.deviceWidth * 0.4, + minHeight: context.deviceHeight * 0.4, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text( + 'Pilih Meja', + style: TextStyle( + color: AppColors.black, + fontSize: 16, + fontWeight: FontWeight.w600, + ), + ), + const SpaceHeight(6.0), + BlocBuilder( + builder: (context, state) { + return state.maybeWhen( + orElse: () => const CircularProgressIndicator(), + success: (tables) { + print("🔘 Tables fetched: ${tables.length} tables"); + print( + "🔘 Table statuses: ${tables.map((t) => '${t.tableName}: ${t.status}').join(', ')}"); + // No need to filter since we're fetching the correct tables directly + final availableTables = tables; + + if (selectTable == null && availableTables.isNotEmpty) { + selectTable = availableTables.first; + } + + if (availableTables.isEmpty) { + return Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.orange[50], + borderRadius: BorderRadius.circular(16), + border: Border.all( + color: Colors.orange, + width: 1, + ), + ), + child: const Text( + 'Tidak ada meja yang tersedia. Silakan pilih opsi lain.', + style: TextStyle(color: Colors.orange), + ), + ); + } + + return Container( + padding: const EdgeInsets.symmetric(horizontal: 16), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + border: Border.all( + color: Theme.of(context).primaryColor, + width: 2, + ), + ), + child: DropdownButtonHideUnderline( + child: DropdownButton( + isExpanded: true, + value: selectTable, + onChanged: (TableModel? newValue) { + setState(() { + selectTable = newValue; + }); + }, + items: availableTables + .map>( + (TableModel value) => + DropdownMenuItem( + value: value, + child: Text(value.tableName), + ), + ) + .toList(), + ), + ), + ); + }, + ); + }), + ], + ), + SpaceHeight(24), + Button.filled( + onPressed: () {}, + label: "Simpan", + ), + ], + ), + ); + } +} diff --git a/lib/presentation/home/dialog/save_dialog.dart b/lib/presentation/home/dialog/save_dialog.dart index 05f7be6..aefd6e0 100644 --- a/lib/presentation/home/dialog/save_dialog.dart +++ b/lib/presentation/home/dialog/save_dialog.dart @@ -1,6 +1,8 @@ import 'package:enaklo_pos/core/components/custom_modal_dialog.dart'; import 'package:enaklo_pos/core/components/spaces.dart'; import 'package:enaklo_pos/core/constants/colors.dart'; +import 'package:enaklo_pos/presentation/home/dialog/payment_add_order_dialog.dart'; +import 'package:enaklo_pos/presentation/home/dialog/payment_save_dialog.dart'; import 'package:flutter/material.dart'; class SaveDialog extends StatelessWidget { @@ -19,14 +21,20 @@ class SaveDialog extends StatelessWidget { icon: Icons.schedule_outlined, title: 'Bayar Nanti', subtitle: 'Simpan pesanan dan bayar nanti', - onTap: () {}, + onTap: () => showDialog( + context: context, + builder: (context) => const PaymentSaveDialog(), + ), ), SpaceHeight(16.0), _item( icon: Icons.shopping_cart_checkout_outlined, title: 'Tambahkan Pesanan', - subtitle: 'ambah item ke daftar pesanan', - onTap: () {}, + subtitle: 'Tambah item ke daftar pesanan', + onTap: () => showDialog( + context: context, + builder: (context) => const PaymentAddOrderDialog(), + ), ), ], ),