diff --git a/lib/data/datasources/product_local_datasource.dart b/lib/data/datasources/product_local_datasource.dart index 271e907..6610f6e 100644 --- a/lib/data/datasources/product_local_datasource.dart +++ b/lib/data/datasources/product_local_datasource.dart @@ -358,19 +358,19 @@ class ProductLocalDatasource { // generate table managent with count Future createTableManagement(String tableName, Offset position) async { - final db = await instance.database; - TableModel newTable = TableModel( - tableName: tableName, - status: 'available', - orderId: 0, - paymentAmount: 0, - startTime: DateTime.now().toIso8601String(), - position: position, - ); - await db.insert( - tableManagement, - newTable.toMap(), - ); + // final db = await instance.database; + // TableModel newTable = TableModel( + // tableName: tableName, + // status: 'available', + // orderId: 0, + // paymentAmount: 0, + // startTime: DateTime.now().toIso8601String(), + // position: position, + // ); + // await db.insert( + // tableManagement, + // newTable.toMap(), + // ); } // change position table diff --git a/lib/data/datasources/table_remote_datasource.dart b/lib/data/datasources/table_remote_datasource.dart index 33b8427..ef8c905 100644 --- a/lib/data/datasources/table_remote_datasource.dart +++ b/lib/data/datasources/table_remote_datasource.dart @@ -2,6 +2,7 @@ import 'dart:developer'; import 'package:dartz/dartz.dart'; import 'package:dio/dio.dart'; import 'package:enaklo_pos/core/network/dio_client.dart'; +import 'package:enaklo_pos/data/models/response/table_model.dart'; import '../../core/constants/variables.dart'; import 'auth_local_datasource.dart'; @@ -50,4 +51,41 @@ class TableRemoteDataSource { return const Left('Unexpected error occurred'); } } + + Future> getTable({ + int page = 1, + int limit = 10, + }) async { + try { + final authData = await AuthLocalDataSource().getAuthData(); + final url = '${Variables.baseUrl}/api/v1/tables'; + + final response = await dio.get( + url, + queryParameters: { + 'page': page, + 'limit': limit, + 'outlet_id': authData.user?.outletId, + }, + options: Options( + headers: { + 'Authorization': 'Bearer ${authData.token}', + 'Accept': 'application/json', + }, + ), + ); + + if (response.statusCode == 200) { + return Right(TableResponseModel.fromMap(response.data)); + } else { + return const Left('Failed to get tables'); + } + } on DioException catch (e) { + log("Dio error: ${e.message}"); + return Left(e.response?.data['message'] ?? 'Gagal mengambil data meja'); + } catch (e) { + log("Unexpected error: $e"); + return const Left('Unexpected error occurred'); + } + } } diff --git a/lib/data/models/response/table_model.dart b/lib/data/models/response/table_model.dart index 85e81d3..29972c4 100644 --- a/lib/data/models/response/table_model.dart +++ b/lib/data/models/response/table_model.dart @@ -1,74 +1,132 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first -import 'dart:ui'; +import 'dart:convert'; + +class TableResponseModel { + final bool? success; + final TableData? data; + final dynamic errors; + + TableResponseModel({ + this.success, + this.data, + this.errors, + }); + + factory TableResponseModel.fromJson(String str) => + TableResponseModel.fromMap(json.decode(str)); + + String toJson() => json.encode(toMap()); + + factory TableResponseModel.fromMap(Map json) => + TableResponseModel( + success: json["success"], + data: json["data"] == null ? null : TableData.fromMap(json["data"]), + errors: json["errors"], + ); + + Map toMap() => { + "success": success, + "data": data?.toMap(), + "errors": errors, + }; +} + +class TableData { + final List? tables; + final int? totalCount; + final int? page; + final int? limit; + final int? totalPages; + + TableData({ + this.tables, + this.totalCount, + this.page, + this.limit, + this.totalPages, + }); + + factory TableData.fromMap(Map json) => TableData( + tables: json["tables"] == null + ? [] + : List.from( + json["tables"].map((x) => TableModel.fromMap(x))), + totalCount: json["total_count"], + page: json["page"], + limit: json["limit"], + totalPages: json["total_pages"], + ); + + Map toMap() => { + "tables": tables == null + ? [] + : List.from(tables!.map((x) => x.toMap())), + "total_count": totalCount, + "page": page, + "limit": limit, + "total_pages": totalPages, + }; +} class TableModel { - int? id; - final String tableName; - final String startTime; - final String status; - final int orderId; - final int paymentAmount; - final Offset position; + final String? id; + final String? organizationId; + final String? outletId; + final String? tableName; + final String? status; + final int? paymentAmount; + final double? positionX; + final double? positionY; + final int? capacity; + final bool? isActive; + final DateTime? createdAt; + final DateTime? updatedAt; TableModel({ this.id, - required this.tableName, - required this.startTime, - required this.status, - required this.orderId, - required this.paymentAmount, - required this.position, + this.organizationId, + this.outletId, + this.tableName, + this.status, + this.paymentAmount, + this.positionX, + this.positionY, + this.capacity, + this.isActive, + this.createdAt, + this.updatedAt, }); - @override + factory TableModel.fromMap(Map json) => TableModel( + id: json["id"], + organizationId: json["organization_id"], + outletId: json["outlet_id"], + tableName: json["table_name"], + status: json["status"], + paymentAmount: json["payment_amount"], + positionX: json["position_x"]?.toDouble(), + positionY: json["position_y"]?.toDouble(), + capacity: json["capacity"], + isActive: json["is_active"], + createdAt: json["created_at"] == null + ? null + : DateTime.parse(json["created_at"]), + updatedAt: json["updated_at"] == null + ? null + : DateTime.parse(json["updated_at"]), + ); - // from map - factory TableModel.fromMap(Map map) { - return TableModel( - id: map['id'], - tableName: map['table_name'], - startTime: map['start_time'], - status: map['status'], - orderId: map['order_id'], - paymentAmount: map['payment_amount'], - position: Offset(map['x_position'], map['y_position']), - ); - } - - // to map - Map toMap() { - return { - 'table_name': tableName, - 'status': status, - 'start_time': startTime, - 'order_id': orderId, - 'payment_amount': paymentAmount, - 'x_position': position.dx, - 'y_position': position.dy, - }; - } - - @override - bool operator ==(covariant TableModel other) { - if (identical(this, other)) return true; - - return other.id == id && - other.tableName == tableName && - other.startTime == startTime && - other.status == status && - other.orderId == orderId && - other.paymentAmount == paymentAmount && - other.position == position; - } - - @override - int get hashCode { - return id.hashCode ^ - tableName.hashCode ^ - startTime.hashCode ^ - status.hashCode ^ - orderId.hashCode ^ - paymentAmount.hashCode ^ - position.hashCode; - } + Map toMap() => { + "id": id, + "organization_id": organizationId, + "outlet_id": outletId, + "table_name": tableName, + "status": status, + "payment_amount": paymentAmount, + "position_x": positionX, + "position_y": positionY, + "capacity": capacity, + "is_active": isActive, + "created_at": createdAt?.toIso8601String(), + "updated_at": updatedAt?.toIso8601String(), + }; } diff --git a/lib/main.dart b/lib/main.dart index 6d86213..a5707c7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -154,7 +154,7 @@ class _MyAppState extends State { create: (context) => ChangePositionTableBloc(), ), BlocProvider( - create: (context) => GetTableBloc(), + create: (context) => GetTableBloc(TableRemoteDataSource()), ), BlocProvider( create: (context) => UpdateTableBloc(), diff --git a/lib/presentation/home/dialog/payment_save_dialog.dart b/lib/presentation/home/dialog/payment_save_dialog.dart index 7baf6c2..49cfa19 100644 --- a/lib/presentation/home/dialog/payment_save_dialog.dart +++ b/lib/presentation/home/dialog/payment_save_dialog.dart @@ -117,7 +117,7 @@ class _PaymentSaveDialogState extends State { (TableModel value) => DropdownMenuItem( value: value, - child: Text(value.tableName), + child: Text(value.tableName ?? ""), ), ) .toList(), diff --git a/lib/presentation/home/pages/confirm_payment_page-old.dart b/lib/presentation/home/pages/confirm_payment_page-old.dart index c6b9676..46ec6d6 100644 --- a/lib/presentation/home/pages/confirm_payment_page-old.dart +++ b/lib/presentation/home/pages/confirm_payment_page-old.dart @@ -829,7 +829,8 @@ class _ConfirmPaymentPageState extends State { DropdownMenuItem< TableModel>( value: value, - child: Text(value.tableName), + child: Text( + value.tableName ?? ""), ), ) .toList(), @@ -1192,28 +1193,28 @@ class _ConfirmPaymentPageState extends State { savedDraftOrder: (orderDraftId) { log("PRICEVALUE: ${priceValue}"); - final newTabel = TableModel( - id: widget.isTable - ? widget.table!.id - : selectTable?.id, - tableName: widget.isTable - ? widget.table!.tableName - : selectTable?.tableName ?? - '0', - status: 'occupied', - paymentAmount: priceValue, - orderId: orderDraftId, - startTime: DateTime.now() - .toIso8601String(), - position: widget.isTable - ? widget.table!.position - : selectTable!.position); - log('new tabel: ${newTabel.toMap()}'); - context - .read() - .add(StatusTableEvent.statusTabel( - newTabel, - )); + // final newTabel = TableModel( + // id: widget.isTable + // ? widget.table!.id + // : selectTable?.id, + // tableName: widget.isTable + // ? widget.table!.tableName + // : selectTable?.tableName ?? + // '0', + // status: 'occupied', + // paymentAmount: priceValue, + // orderId: orderDraftId, + // startTime: DateTime.now() + // .toIso8601String(), + // position: widget.isTable + // ? widget.table!.position + // : selectTable!.position); + // log('new tabel: ${newTabel.toMap()}'); + // context + // .read() + // .add(StatusTableEvent.statusTabel( + // newTabel, + // )); }); }, child: @@ -1357,16 +1358,16 @@ class _ConfirmPaymentPageState extends State { if (widget.isTable) { log("discountAmountValue: $totalDiscount"); - context.read().add( - CheckoutEvent - .saveDraftOrder( - widget.isTable == true - ? widget.table!.id! - : selectTable!.id!, - customerController.text, - totalDiscount.toInt(), - ), - ); + // context.read().add( + // CheckoutEvent + // .saveDraftOrder( + // widget.isTable == true + // ? widget.table!.id! + // : selectTable!.id!, + // customerController.text, + // totalDiscount.toInt(), + // ), + // ); await showDialog( context: context, barrierDismissible: false, @@ -1515,120 +1516,120 @@ class _ConfirmPaymentPageState extends State { // Tambahkan ke pesanan meja yang sudah ada if (selectTable != null) { // Ambil draft order yang sudah ada - final existingDraftOrder = - await ProductLocalDatasource - .instance - .getDraftOrderById( - selectTable - ?.orderId ?? - 0); + // final existingDraftOrder = + // await ProductLocalDatasource + // .instance + // .getDraftOrderById( + // selectTable + // ?.orderId ?? + // 0); - if (existingDraftOrder != - null) { - // Convert items ke DraftOrderItem - final newDraftItems = items - .map((item) => - DraftOrderItem( - product: - item.product, - quantity: - item.quantity, - )) - .toList(); + // if (existingDraftOrder != + // null) { + // // Convert items ke DraftOrderItem + // final newDraftItems = items + // .map((item) => + // DraftOrderItem( + // product: + // item.product, + // quantity: + // item.quantity, + // )) + // .toList(); - // Gabungkan dengan pesanan yang sudah ada - final updatedItems = [ - ...existingDraftOrder - .orders, - ...newDraftItems - ]; + // // Gabungkan dengan pesanan yang sudah ada + // final updatedItems = [ + // ...existingDraftOrder + // .orders, + // ...newDraftItems + // ]; - final updatedDraftOrder = - existingDraftOrder - .copyWith( - orders: updatedItems, - totalQuantity: - updatedItems.fold( - 0, - (sum, item) => - sum + - item.quantity), - subTotal: updatedItems.fold< - int>( - 0, - (sum, item) => - sum + - (item.product - .price ?? - 0) * - item.quantity), - ); + // final updatedDraftOrder = + // existingDraftOrder + // .copyWith( + // orders: updatedItems, + // totalQuantity: + // updatedItems.fold( + // 0, + // (sum, item) => + // sum + + // item.quantity), + // subTotal: updatedItems.fold< + // int>( + // 0, + // (sum, item) => + // sum + + // (item.product + // .price ?? + // 0) * + // item.quantity), + // ); - // Update draft order - await ProductLocalDatasource - .instance - .updateDraftOrder( - updatedDraftOrder); + // // Update draft order + // await ProductLocalDatasource + // .instance + // .updateDraftOrder( + // updatedDraftOrder); - // Tampilkan dialog sukses - await showDialog( - context: context, - barrierDismissible: false, - builder: (context) => - SaveOrderDialog( - data: items, - totalQty: totalQty, - totalPrice: - totalPriceFinal, - totalTax: - finalTax.toInt(), - totalDiscount: - totalDiscount.toInt(), - subTotal: - subTotal.toInt(), - normalPrice: price, - table: selectTable!, - draftName: - customerController - .text, - ), - ); - } else { - // Jika tidak ada draft order, buat baru - context - .read() - .add( - CheckoutEvent - .saveDraftOrder( - selectTable!.id!, - customerController - .text, - totalDiscount.toInt(), - ), - ); - await showDialog( - context: context, - barrierDismissible: false, - builder: (context) => - SaveOrderDialog( - data: items, - totalQty: totalQty, - totalPrice: - totalPriceFinal, - totalTax: - finalTax.toInt(), - totalDiscount: - totalDiscount.toInt(), - subTotal: - subTotal.toInt(), - normalPrice: price, - table: selectTable!, - draftName: - customerController - .text, - ), - ); - } + // // Tampilkan dialog sukses + // await showDialog( + // context: context, + // barrierDismissible: false, + // builder: (context) => + // SaveOrderDialog( + // data: items, + // totalQty: totalQty, + // totalPrice: + // totalPriceFinal, + // totalTax: + // finalTax.toInt(), + // totalDiscount: + // totalDiscount.toInt(), + // subTotal: + // subTotal.toInt(), + // normalPrice: price, + // table: selectTable!, + // draftName: + // customerController + // .text, + // ), + // ); + // } else { + // // Jika tidak ada draft order, buat baru + // context + // .read() + // .add( + // CheckoutEvent + // .saveDraftOrder( + // selectTable!.id!, + // customerController + // .text, + // totalDiscount.toInt(), + // ), + // ); + // await showDialog( + // context: context, + // barrierDismissible: false, + // builder: (context) => + // SaveOrderDialog( + // data: items, + // totalQty: totalQty, + // totalPrice: + // totalPriceFinal, + // totalTax: + // finalTax.toInt(), + // totalDiscount: + // totalDiscount.toInt(), + // subTotal: + // subTotal.toInt(), + // normalPrice: price, + // table: selectTable!, + // draftName: + // customerController + // .text, + // ), + // ); + // } } else { ScaffoldMessenger.of(context) .showSnackBar( @@ -1640,16 +1641,16 @@ class _ConfirmPaymentPageState extends State { ); } } else { - context.read().add( - CheckoutEvent - .saveDraftOrder( - widget.isTable == true - ? widget.table!.id! - : selectTable!.id!, - customerController.text, - totalDiscount.toInt(), - ), - ); + // context.read().add( + // CheckoutEvent + // .saveDraftOrder( + // widget.isTable == true + // ? widget.table!.id! + // : selectTable!.id!, + // customerController.text, + // totalDiscount.toInt(), + // ), + // ); await showDialog( context: context, barrierDismissible: false, diff --git a/lib/presentation/home/widgets/save_order_dialog.dart b/lib/presentation/home/widgets/save_order_dialog.dart index e164aae..db73d5e 100644 --- a/lib/presentation/home/widgets/save_order_dialog.dart +++ b/lib/presentation/home/widgets/save_order_dialog.dart @@ -97,98 +97,108 @@ class _SaveOrderDialogState extends State { builder: (context, state) { final orderType = state.maybeWhen( orElse: () => OrderType.dineIn, - loaded: (items, discountModel, discount, discountAmount, tax, serviceCharge, totalQuantity, totalPrice, draftName, orderType) => orderType, + loaded: (items, + discountModel, + discount, + discountAmount, + tax, + serviceCharge, + totalQuantity, + totalPrice, + draftName, + orderType) => + orderType, ); - + return Button.filled( onPressed: () async { - final checkerPrinter = await ProductLocalDatasource - .instance - .getPrinterByCode('checker'); - final kitchenPrinter = await ProductLocalDatasource - .instance - .getPrinterByCode('kitchen'); - final barPrinter = await ProductLocalDatasource.instance - .getPrinterByCode('bar'); - - log("Checker printer: ${checkerPrinter?.toMap()}"); - log("Kitchen printer: ${kitchenPrinter?.toMap()}"); - log("Bar printer: ${barPrinter?.toMap()}"); - - // Checker printer - if (checkerPrinter != null) { - try { - final printValue = await PrintDataoutputs.instance - .printChecker( - widget.data, - widget.table.tableName, - widget.draftName, - 'kasir', - checkerPrinter.paper.toIntegerFromText, - orderType.value); - - await PrinterService().printWithPrinter( - checkerPrinter, - printValue, - context - ); - } catch (e) { - log("Error printing checker: $e"); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text('Error printing checker: $e')), - ); - } - } + final checkerPrinter = await ProductLocalDatasource + .instance + .getPrinterByCode('checker'); + final kitchenPrinter = await ProductLocalDatasource + .instance + .getPrinterByCode('kitchen'); + final barPrinter = await ProductLocalDatasource + .instance + .getPrinterByCode('bar'); - // Kitchen printer - if (kitchenPrinter != null) { - try { - final printValue = await PrintDataoutputs.instance.printKitchen( - widget.data, - widget.table.tableName, - widget.draftName, - 'kasir', - kitchenPrinter.paper.toIntegerFromText, - orderType.value, - ); - - await PrinterService().printWithPrinter( - kitchenPrinter, - printValue, - context - ); - } catch (e) { - log("Error printing kitchen order: $e"); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text('Error printing kitchen order: $e')), - ); - } - } + log("Checker printer: ${checkerPrinter?.toMap()}"); + log("Kitchen printer: ${kitchenPrinter?.toMap()}"); + log("Bar printer: ${barPrinter?.toMap()}"); - // Bar printer - if (barPrinter != null) { - try { - final printValue = await PrintDataoutputs.instance.printBar( - widget.data, - widget.table.tableName, - widget.draftName, - 'kasir', - barPrinter.paper.toIntegerFromText, - orderType.value, - ); - - await PrinterService().printWithPrinter( - barPrinter, - printValue, - context - ); - } catch (e) { - log("Error printing bar order: $e"); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text('Error printing bar order: $e')), - ); - } - } + // Checker printer + if (checkerPrinter != null) { + try { + final printValue = await PrintDataoutputs.instance + .printChecker( + widget.data, + widget.table.tableName!, + widget.draftName, + 'kasir', + checkerPrinter.paper.toIntegerFromText, + orderType.value); + + await PrinterService().printWithPrinter( + checkerPrinter, printValue, context); + } catch (e) { + log("Error printing checker: $e"); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: + Text('Error printing checker: $e')), + ); + } + } + + // Kitchen printer + if (kitchenPrinter != null) { + try { + final printValue = + await PrintDataoutputs.instance.printKitchen( + widget.data, + widget.table.tableName!, + widget.draftName, + 'kasir', + kitchenPrinter.paper.toIntegerFromText, + orderType.value, + ); + + await PrinterService().printWithPrinter( + kitchenPrinter, printValue, context); + } catch (e) { + log("Error printing kitchen order: $e"); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + 'Error printing kitchen order: $e')), + ); + } + } + + // Bar printer + if (barPrinter != null) { + try { + final printValue = + await PrintDataoutputs.instance.printBar( + widget.data, + widget.table.tableName!, + widget.draftName, + 'kasir', + barPrinter.paper.toIntegerFromText, + orderType.value, + ); + + await PrinterService().printWithPrinter( + barPrinter, printValue, context); + } catch (e) { + log("Error printing bar order: $e"); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: + Text('Error printing bar order: $e')), + ); + } + } }, label: 'Print Checker', ); diff --git a/lib/presentation/table/blocs/get_table/get_table_bloc.dart b/lib/presentation/table/blocs/get_table/get_table_bloc.dart index 84c3d76..71f35bd 100644 --- a/lib/presentation/table/blocs/get_table/get_table_bloc.dart +++ b/lib/presentation/table/blocs/get_table/get_table_bloc.dart @@ -1,3 +1,4 @@ +import 'package:enaklo_pos/data/datasources/table_remote_datasource.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:enaklo_pos/data/datasources/product_local_datasource.dart'; import 'package:enaklo_pos/data/models/response/table_model.dart'; @@ -8,11 +9,17 @@ part 'get_table_state.dart'; part 'get_table_bloc.freezed.dart'; class GetTableBloc extends Bloc { - GetTableBloc() : super(_Initial()) { + final TableRemoteDataSource _tableRemoteDataSource; + GetTableBloc(this._tableRemoteDataSource) : super(GetTableState.initial()) { on<_GetTables>((event, emit) async { emit(_Loading()); - final tables = await ProductLocalDatasource.instance.getAllTable(); - emit(_Success(tables)); + final tables = await _tableRemoteDataSource.getTable(); + tables.fold( + (l) => emit(_Error(l)), + (r) => emit( + _Success(r.data!.tables!), + ), + ); }); } } diff --git a/lib/presentation/table/blocs/get_table/get_table_bloc.freezed.dart b/lib/presentation/table/blocs/get_table/get_table_bloc.freezed.dart index 332d5f8..ccfa93c 100644 --- a/lib/presentation/table/blocs/get_table/get_table_bloc.freezed.dart +++ b/lib/presentation/table/blocs/get_table/get_table_bloc.freezed.dart @@ -294,6 +294,7 @@ mixin _$GetTableState { required TResult Function() initial, required TResult Function() loading, required TResult Function(List tables) success, + required TResult Function(String message) error, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -301,6 +302,7 @@ mixin _$GetTableState { TResult? Function()? initial, TResult? Function()? loading, TResult? Function(List tables)? success, + TResult? Function(String message)? error, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -308,6 +310,7 @@ mixin _$GetTableState { TResult Function()? initial, TResult Function()? loading, TResult Function(List tables)? success, + TResult Function(String message)? error, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -316,6 +319,7 @@ mixin _$GetTableState { required TResult Function(_Initial value) initial, required TResult Function(_Loading value) loading, required TResult Function(_Success value) success, + required TResult Function(_Error value) error, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -323,6 +327,7 @@ mixin _$GetTableState { TResult? Function(_Initial value)? initial, TResult? Function(_Loading value)? loading, TResult? Function(_Success value)? success, + TResult? Function(_Error value)? error, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -330,6 +335,7 @@ mixin _$GetTableState { TResult Function(_Initial value)? initial, TResult Function(_Loading value)? loading, TResult Function(_Success value)? success, + TResult Function(_Error value)? error, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -400,6 +406,7 @@ class _$InitialImpl implements _Initial { required TResult Function() initial, required TResult Function() loading, required TResult Function(List tables) success, + required TResult Function(String message) error, }) { return initial(); } @@ -410,6 +417,7 @@ class _$InitialImpl implements _Initial { TResult? Function()? initial, TResult? Function()? loading, TResult? Function(List tables)? success, + TResult? Function(String message)? error, }) { return initial?.call(); } @@ -420,6 +428,7 @@ class _$InitialImpl implements _Initial { TResult Function()? initial, TResult Function()? loading, TResult Function(List tables)? success, + TResult Function(String message)? error, required TResult orElse(), }) { if (initial != null) { @@ -434,6 +443,7 @@ class _$InitialImpl implements _Initial { required TResult Function(_Initial value) initial, required TResult Function(_Loading value) loading, required TResult Function(_Success value) success, + required TResult Function(_Error value) error, }) { return initial(this); } @@ -444,6 +454,7 @@ class _$InitialImpl implements _Initial { TResult? Function(_Initial value)? initial, TResult? Function(_Loading value)? loading, TResult? Function(_Success value)? success, + TResult? Function(_Error value)? error, }) { return initial?.call(this); } @@ -454,6 +465,7 @@ class _$InitialImpl implements _Initial { TResult Function(_Initial value)? initial, TResult Function(_Loading value)? loading, TResult Function(_Success value)? success, + TResult Function(_Error value)? error, required TResult orElse(), }) { if (initial != null) { @@ -511,6 +523,7 @@ class _$LoadingImpl implements _Loading { required TResult Function() initial, required TResult Function() loading, required TResult Function(List tables) success, + required TResult Function(String message) error, }) { return loading(); } @@ -521,6 +534,7 @@ class _$LoadingImpl implements _Loading { TResult? Function()? initial, TResult? Function()? loading, TResult? Function(List tables)? success, + TResult? Function(String message)? error, }) { return loading?.call(); } @@ -531,6 +545,7 @@ class _$LoadingImpl implements _Loading { TResult Function()? initial, TResult Function()? loading, TResult Function(List tables)? success, + TResult Function(String message)? error, required TResult orElse(), }) { if (loading != null) { @@ -545,6 +560,7 @@ class _$LoadingImpl implements _Loading { required TResult Function(_Initial value) initial, required TResult Function(_Loading value) loading, required TResult Function(_Success value) success, + required TResult Function(_Error value) error, }) { return loading(this); } @@ -555,6 +571,7 @@ class _$LoadingImpl implements _Loading { TResult? Function(_Initial value)? initial, TResult? Function(_Loading value)? loading, TResult? Function(_Success value)? success, + TResult? Function(_Error value)? error, }) { return loading?.call(this); } @@ -565,6 +582,7 @@ class _$LoadingImpl implements _Loading { TResult Function(_Initial value)? initial, TResult Function(_Loading value)? loading, TResult Function(_Success value)? success, + TResult Function(_Error value)? error, required TResult orElse(), }) { if (loading != null) { @@ -655,6 +673,7 @@ class _$SuccessImpl implements _Success { required TResult Function() initial, required TResult Function() loading, required TResult Function(List tables) success, + required TResult Function(String message) error, }) { return success(tables); } @@ -665,6 +684,7 @@ class _$SuccessImpl implements _Success { TResult? Function()? initial, TResult? Function()? loading, TResult? Function(List tables)? success, + TResult? Function(String message)? error, }) { return success?.call(tables); } @@ -675,6 +695,7 @@ class _$SuccessImpl implements _Success { TResult Function()? initial, TResult Function()? loading, TResult Function(List tables)? success, + TResult Function(String message)? error, required TResult orElse(), }) { if (success != null) { @@ -689,6 +710,7 @@ class _$SuccessImpl implements _Success { required TResult Function(_Initial value) initial, required TResult Function(_Loading value) loading, required TResult Function(_Success value) success, + required TResult Function(_Error value) error, }) { return success(this); } @@ -699,6 +721,7 @@ class _$SuccessImpl implements _Success { TResult? Function(_Initial value)? initial, TResult? Function(_Loading value)? loading, TResult? Function(_Success value)? success, + TResult? Function(_Error value)? error, }) { return success?.call(this); } @@ -709,6 +732,7 @@ class _$SuccessImpl implements _Success { TResult Function(_Initial value)? initial, TResult Function(_Loading value)? loading, TResult Function(_Success value)? success, + TResult Function(_Error value)? error, required TResult orElse(), }) { if (success != null) { @@ -729,3 +753,155 @@ abstract class _Success implements GetTableState { _$$SuccessImplCopyWith<_$SuccessImpl> get copyWith => throw _privateConstructorUsedError; } + +/// @nodoc +abstract class _$$ErrorImplCopyWith<$Res> { + factory _$$ErrorImplCopyWith( + _$ErrorImpl value, $Res Function(_$ErrorImpl) then) = + __$$ErrorImplCopyWithImpl<$Res>; + @useResult + $Res call({String message}); +} + +/// @nodoc +class __$$ErrorImplCopyWithImpl<$Res> + extends _$GetTableStateCopyWithImpl<$Res, _$ErrorImpl> + implements _$$ErrorImplCopyWith<$Res> { + __$$ErrorImplCopyWithImpl( + _$ErrorImpl _value, $Res Function(_$ErrorImpl) _then) + : super(_value, _then); + + /// Create a copy of GetTableState + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? message = null, + }) { + return _then(_$ErrorImpl( + null == message + ? _value.message + : message // ignore: cast_nullable_to_non_nullable + as String, + )); + } +} + +/// @nodoc + +class _$ErrorImpl implements _Error { + const _$ErrorImpl(this.message); + + @override + final String message; + + @override + String toString() { + return 'GetTableState.error(message: $message)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$ErrorImpl && + (identical(other.message, message) || other.message == message)); + } + + @override + int get hashCode => Object.hash(runtimeType, message); + + /// Create a copy of GetTableState + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + @override + @pragma('vm:prefer-inline') + _$$ErrorImplCopyWith<_$ErrorImpl> get copyWith => + __$$ErrorImplCopyWithImpl<_$ErrorImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initial, + required TResult Function() loading, + required TResult Function(List tables) success, + required TResult Function(String message) error, + }) { + return error(message); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initial, + TResult? Function()? loading, + TResult? Function(List tables)? success, + TResult? Function(String message)? error, + }) { + return error?.call(message); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initial, + TResult Function()? loading, + TResult Function(List tables)? success, + TResult Function(String message)? error, + required TResult orElse(), + }) { + if (error != null) { + return error(message); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(_Initial value) initial, + required TResult Function(_Loading value) loading, + required TResult Function(_Success value) success, + required TResult Function(_Error value) error, + }) { + return error(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(_Initial value)? initial, + TResult? Function(_Loading value)? loading, + TResult? Function(_Success value)? success, + TResult? Function(_Error value)? error, + }) { + return error?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(_Initial value)? initial, + TResult Function(_Loading value)? loading, + TResult Function(_Success value)? success, + TResult Function(_Error value)? error, + required TResult orElse(), + }) { + if (error != null) { + return error(this); + } + return orElse(); + } +} + +abstract class _Error implements GetTableState { + const factory _Error(final String message) = _$ErrorImpl; + + String get message; + + /// Create a copy of GetTableState + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + _$$ErrorImplCopyWith<_$ErrorImpl> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/lib/presentation/table/blocs/get_table/get_table_state.dart b/lib/presentation/table/blocs/get_table/get_table_state.dart index ef24094..e0ac76c 100644 --- a/lib/presentation/table/blocs/get_table/get_table_state.dart +++ b/lib/presentation/table/blocs/get_table/get_table_state.dart @@ -5,4 +5,5 @@ class GetTableState with _$GetTableState { const factory GetTableState.initial() = _Initial; const factory GetTableState.loading() = _Loading; const factory GetTableState.success(List tables) = _Success; + const factory GetTableState.error(String message) = _Error; } diff --git a/lib/presentation/table/pages/new_table_management_page.dart b/lib/presentation/table/pages/new_table_management_page.dart index 8ddf07e..044aeca 100644 --- a/lib/presentation/table/pages/new_table_management_page.dart +++ b/lib/presentation/table/pages/new_table_management_page.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:enaklo_pos/core/components/components.dart'; import 'package:enaklo_pos/core/constants/colors.dart'; -import 'package:enaklo_pos/core/extensions/build_context_ext.dart'; import 'package:enaklo_pos/presentation/table/blocs/change_position_table/change_position_table_bloc.dart'; import 'package:enaklo_pos/presentation/table/blocs/create_table/create_table_bloc.dart'; import 'package:enaklo_pos/presentation/table/blocs/get_table/get_table_bloc.dart'; @@ -94,8 +93,8 @@ class _TableManagementScreenState extends State { return Stack( children: tables.map((table) { return Positioned( - left: table.position.dx - 116, - top: table.position.dy - 80, + left: (table.positionX ?? 0) - 116, + top: (table.positionY ?? 0) - 80, child: BlocListener( listener: (context, state) { @@ -111,12 +110,12 @@ class _TableManagementScreenState extends State { feedback: TableWidget(table: table), childWhenDragging: SizedBox.shrink(), onDragEnd: (details) { - context - .read() - .add(ChangePositionTableEvent.changePositionTable( - tableId: table.id!, - position: details.offset, - )); + // context + // .read() + // .add(ChangePositionTableEvent.changePositionTable( + // tableId: table.id, + // position: details.offset, + // )); }, child: TableWidget(table: table), ), diff --git a/lib/presentation/table/pages/payment_table_page.dart b/lib/presentation/table/pages/payment_table_page.dart index 4619850..c6e4b96 100644 --- a/lib/presentation/table/pages/payment_table_page.dart +++ b/lib/presentation/table/pages/payment_table_page.dart @@ -51,18 +51,18 @@ class _PaymentTablePageState extends State { Future _handlePostPaymentCleanup() async { if (widget.table != null && widget.draftOrder?.id != null) { // Update table status to available - final newTable = TableModel( - id: widget.table!.id, - tableName: widget.table!.tableName, - status: 'available', - orderId: 0, - paymentAmount: 0, - startTime: DateTime.now().toIso8601String(), - position: widget.table!.position, - ); + // final newTable = TableModel( + // id: widget.table!.id, + // tableName: widget.table!.tableName, + // status: 'available', + // orderId: 0, + // paymentAmount: 0, + // startTime: DateTime.now().toIso8601String(), + // position: widget.table!.position, + // ); // Update table status - await ProductLocalDatasource.instance.updateStatusTable(newTable); + // await ProductLocalDatasource.instance.updateStatusTable(newTable); // Remove draft order await ProductLocalDatasource.instance @@ -965,25 +965,25 @@ class _PaymentTablePageState extends State { onPressed: () { // Void the order if (widget.table != null) { - final newTable = TableModel( - id: widget.table!.id, - tableName: widget - .table!.tableName, - status: 'available', - orderId: 0, - paymentAmount: 0, - startTime: DateTime.now() - .toIso8601String(), - position: widget - .table!.position, - ); - context - .read() - .add( - StatusTableEvent - .statusTabel( - newTable), - ); + // final newTable = TableModel( + // id: widget.table!.id, + // tableName: widget + // .table!.tableName, + // status: 'available', + // orderId: 0, + // paymentAmount: 0, + // startTime: DateTime.now() + // .toIso8601String(), + // position: widget + // .table!.position, + // ); + // context + // .read() + // .add( + // StatusTableEvent + // .statusTabel( + // newTable), + // ); } // Remove draft order from local storage if (widget.draftOrder?.id != @@ -1013,21 +1013,21 @@ class _PaymentTablePageState extends State { const SpaceWidth(8.0), BlocListener( listener: (context, state) { - final newTable = TableModel( - id: widget.table!.id, - tableName: widget.table!.tableName, - status: 'available', - orderId: 0, - paymentAmount: 0, - startTime: - DateTime.now().toIso8601String(), - position: widget.table!.position, - ); - context.read().add( - StatusTableEvent.statusTabel( - newTable, - ), - ); + // final newTable = TableModel( + // id: widget.table!.id, + // tableName: widget.table!.tableName, + // status: 'available', + // orderId: 0, + // paymentAmount: 0, + // startTime: + // DateTime.now().toIso8601String(), + // position: widget.table!.position, + // ); + // context.read().add( + // StatusTableEvent.statusTabel( + // newTable, + // ), + // ); ProductLocalDatasource.instance .removeDraftOrderById( widget.draftOrder!.id!); @@ -1160,24 +1160,24 @@ class _PaymentTablePageState extends State { 'uang tunai' || paymentMethodName == 'cash payment') { - context.read().add( - OrderEvent.order( - items, - discount, - discountAmountFinal, - finalTax.toInt(), - 0, - totalPriceController.text - .toIntegerFromText, - customerController.text, - widget.table?.id ?? 0, - 'completed', - 'paid', - selectedPaymentMethod - ?.name ?? - 'Cash', - totalPriceFinal, - orderType)); + // context.read().add( + // OrderEvent.order( + // items, + // discount, + // discountAmountFinal, + // finalTax.toInt(), + // 0, + // totalPriceController.text + // .toIntegerFromText, + // customerController.text, + // widget.table?.id ?? 0, + // 'completed', + // 'paid', + // selectedPaymentMethod + // ?.name ?? + // 'Cash', + // totalPriceFinal, + // orderType)); await showDialog( context: context, @@ -1202,24 +1202,24 @@ class _PaymentTablePageState extends State { await _handlePostPaymentCleanup(); } else { log("Processing non-cash payment: ${selectedPaymentMethod?.name}"); - context.read().add( - OrderEvent.order( - items, - discount, - discountAmountFinal, - finalTax.toInt(), - 0, - totalPriceController.text - .toIntegerFromText, - customerController.text, - widget.table?.id ?? 0, - 'completed', - 'paid', - selectedPaymentMethod - ?.name ?? - 'Unknown Payment Method', - totalPriceFinal, - orderType)); + // context.read().add( + // OrderEvent.order( + // items, + // discount, + // discountAmountFinal, + // finalTax.toInt(), + // 0, + // totalPriceController.text + // .toIntegerFromText, + // customerController.text, + // widget.table?.id ?? 0, + // 'completed', + // 'paid', + // selectedPaymentMethod + // ?.name ?? + // 'Unknown Payment Method', + // totalPriceFinal, + // orderType)); await showDialog( context: context, diff --git a/lib/presentation/table/widgets/card_table_widget.dart b/lib/presentation/table/widgets/card_table_widget.dart index 024a311..4b18d5a 100644 --- a/lib/presentation/table/widgets/card_table_widget.dart +++ b/lib/presentation/table/widgets/card_table_widget.dart @@ -39,8 +39,8 @@ class _CardTableWidgetState extends State { loadData() async { if (widget.table.status != 'available') { - data = await ProductLocalDatasource.instance - .getDraftOrderById(widget.table.orderId); + // data = await ProductLocalDatasource.instance + // .getDraftOrderById(widget.table.orderId); } } @@ -70,9 +70,10 @@ class _CardTableWidgetState extends State { ), ), Text( - widget.table.status == 'available' - ? widget.table.status - : "${widget.table.status} - ${DateTime.parse(widget.table.startTime).toFormattedTime()}", + // widget.table.status == 'available' + // ? widget.table.status + // : "${widget.table.status} - ${DateTime.parse(widget.table.startTime).toFormattedTime()}", + "", style: TextStyle( color: AppColors.black, fontSize: 24, diff --git a/lib/presentation/table/widgets/table_widget.dart b/lib/presentation/table/widgets/table_widget.dart index a9684e0..d9e5441 100644 --- a/lib/presentation/table/widgets/table_widget.dart +++ b/lib/presentation/table/widgets/table_widget.dart @@ -51,8 +51,8 @@ class _TableWidgetState extends State { loadData() async { if (widget.table.status != 'available') { - data = await ProductLocalDatasource.instance - .getDraftOrderById(widget.table.orderId); + // data = await ProductLocalDatasource.instance + // .getDraftOrderById(widget.table.orderId); } } @@ -136,33 +136,33 @@ class _TableWidgetState extends State { Expanded( child: Button.filled( onPressed: () { - final newData = - TableModel( - id: widget.table.id, - tableName: - tableNameController! - .text, - status: - widget.table.status, - startTime: widget - .table.startTime, - orderId: widget - .table.orderId, - paymentAmount: widget - .table - .paymentAmount, - position: widget - .table.position, - ); - context - .read< - UpdateTableBloc>() - .add( - UpdateTableEvent - .updateTable( - newData, - ), - ); + // final newData = + // TableModel( + // id: widget.table.id, + // tableName: + // tableNameController! + // .text, + // status: + // widget.table.status, + // startTime: widget + // .table.startTime, + // orderId: widget + // .table.orderId, + // paymentAmount: widget + // .table + // .paymentAmount, + // position: widget + // .table.position, + // ); + // context + // .read< + // UpdateTableBloc>() + // .add( + // UpdateTableEvent + // .updateTable( + // newData, + // ), + // ); context .pop(); // close dialog after adding }, @@ -194,16 +194,16 @@ class _TableWidgetState extends State { color: widget.table.status == 'available' ? Colors.green : Colors.red), - widget.table.status == 'available' - ? SizedBox.shrink() - : _buildInfoRow( - 'Start Time:', - DateFormatter.formatDateTime2( - widget.table.startTime)), - widget.table.status == 'available' - ? SizedBox.shrink() - : _buildInfoRow( - 'Order ID:', widget.table.orderId.toString()), + // widget.table.status == 'available' + // ? SizedBox.shrink() + // : _buildInfoRow( + // 'Start Time:', + // DateFormatter.formatDateTime2( + // widget.table.startTime)), + // widget.table.status == 'available' + // ? SizedBox.shrink() + // : _buildInfoRow( + // 'Order ID:', widget.table.orderId.toString()), widget.table.status == 'available' ? SizedBox.shrink() : SpaceHeight(16), @@ -267,29 +267,29 @@ class _TableWidgetState extends State { backgroundColor: AppColors.red, ), onPressed: () { - // Void the order - final newTable = TableModel( - id: widget.table.id, - tableName: - widget.table.tableName, - status: 'available', - orderId: 0, - paymentAmount: 0, - startTime: DateTime.now() - .toIso8601String(), - position: widget.table.position, - ); - context - .read() - .add( - StatusTableEvent - .statusTabel(newTable), - ); - // Remove draft order from local storage - ProductLocalDatasource.instance - .removeDraftOrderById( - widget.table.orderId); - log("Voided order for table: ${widget.table.tableName}"); + // // Void the order + // final newTable = TableModel( + // id: widget.table.id, + // tableName: + // widget.table.tableName, + // status: 'available', + // orderId: 0, + // paymentAmount: 0, + // startTime: DateTime.now() + // .toIso8601String(), + // position: widget.table.position, + // ); + // context + // .read() + // .add( + // StatusTableEvent + // .statusTabel(newTable), + // ); + // // Remove draft order from local storage + // ProductLocalDatasource.instance + // .removeDraftOrderById( + // widget.table.orderId); + // log("Voided order for table: ${widget.table.tableName}"); }, child: const Text( "Ya, Batalkan",