|
@@ -96,7 +96,11 @@ class _PedidoMesaFormState extends State<PedidoMesaForm> {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- listaMesas = mvm.mesas
|
|
|
+ final mesas = mvm.mesas;
|
|
|
+ if (mesas.isNotEmpty) {
|
|
|
+ mesas.sort((a, b) => a.nombre!.compareTo(b.nombre!));
|
|
|
+ }
|
|
|
+ listaMesas = mesas
|
|
|
.map(
|
|
|
(mesa) => DropdownMenuItem<int>(
|
|
|
value: mesa.id,
|
|
@@ -107,15 +111,14 @@ class _PedidoMesaFormState extends State<PedidoMesaForm> {
|
|
|
),
|
|
|
)
|
|
|
.toList();
|
|
|
-
|
|
|
- listaMesas.add(DropdownMenuItem<int>(
|
|
|
- value: 0,
|
|
|
- child:
|
|
|
- Text('Seleccionar', style: const TextStyle(color: Colors.black))));
|
|
|
+
|
|
|
|
|
|
Provider.of<DescuentoViewModel>(context, listen: false).cargarDescuentos();
|
|
|
|
|
|
if (widget.pedido != null && widget.pedido!.id != null) {
|
|
|
+ if (widget.pedido!.idMesa != null && listaMesas.isNotEmpty) {
|
|
|
+ selectedMesa = widget.pedido!.idMesa;
|
|
|
+ }
|
|
|
Future(() async {
|
|
|
for (var item in widget.pedido!.productos) {
|
|
|
Map<int, List<Producto>> toppingsSeleccionables =
|
|
@@ -127,6 +130,11 @@ class _PedidoMesaFormState extends State<PedidoMesaForm> {
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+ listaMesas.add(DropdownMenuItem<int>(
|
|
|
+ value: 0,
|
|
|
+ child:
|
|
|
+ Text('Seleccionar', style: const TextStyle(color: Colors.black))));
|
|
|
}
|
|
|
|
|
|
_onSearchChanged(String value) {
|
|
@@ -569,13 +577,13 @@ class _PedidoMesaFormState extends State<PedidoMesaForm> {
|
|
|
|
|
|
void prepararPedidoActual(String nombreCliente, String comentarios) async {
|
|
|
DateTime now = DateTime.now();
|
|
|
- String formattedDate = DateFormat('dd-MM-yyyy kk:mm:ss').format(now);
|
|
|
+ String formattedDate = DateTime.now().toUtc().toIso8601String();
|
|
|
|
|
|
Pedido nuevoPedido = Pedido(
|
|
|
peticion: formattedDate,
|
|
|
nombreCliente: nombreCliente,
|
|
|
comentarios: comentarios,
|
|
|
- estatus: "NUEVO",
|
|
|
+ estatus: "FINALIZADO",
|
|
|
totalPedido: totalPedido,
|
|
|
descuento: pedidoActual?.descuento,
|
|
|
tipoPago: _obtenerTipoPago(),
|
|
@@ -632,25 +640,25 @@ class _PedidoMesaFormState extends State<PedidoMesaForm> {
|
|
|
|
|
|
void guardarPedidoActual() async {
|
|
|
DateTime now = DateTime.now();
|
|
|
- String formattedDate = DateFormat('dd-MM-yyyy kk:mm:ss').format(now);
|
|
|
+ String formattedDate = DateTime.now().toUtc().toIso8601String();
|
|
|
|
|
|
Pedido nuevoPedido = Pedido(
|
|
|
- peticion: formattedDate,
|
|
|
- // nombreCliente: nombreCliente,
|
|
|
- // comentarios: comentarios,
|
|
|
- estatus: "EN PROCESO",
|
|
|
- // totalPedido: totalPedido,
|
|
|
- descuento: pedidoActual?.descuento,
|
|
|
- idMesa: selectedMesa
|
|
|
- // tipoPago: _obtenerTipoPago(),
|
|
|
- // cantEfectivo:
|
|
|
- // efectivoSeleccionado ? double.tryParse(efectivoController.text) : 0,
|
|
|
- // cantTarjeta:
|
|
|
- // tarjetaSeleccionada ? double.tryParse(tarjetaController.text) : 0,
|
|
|
- // cantTransferencia: transferenciaSeleccionada
|
|
|
- // ? double.tryParse(transferenciaController.text)
|
|
|
- // : 0,
|
|
|
- );
|
|
|
+ peticion: formattedDate,
|
|
|
+ // nombreCliente: nombreCliente,
|
|
|
+ // comentarios: comentarios,
|
|
|
+ estatus: "EN PROCESO",
|
|
|
+ // totalPedido: totalPedido,
|
|
|
+ descuento: pedidoActual?.descuento,
|
|
|
+ idMesa: selectedMesa
|
|
|
+ // tipoPago: _obtenerTipoPago(),
|
|
|
+ // cantEfectivo:
|
|
|
+ // efectivoSeleccionado ? double.tryParse(efectivoController.text) : 0,
|
|
|
+ // cantTarjeta:
|
|
|
+ // tarjetaSeleccionada ? double.tryParse(tarjetaController.text) : 0,
|
|
|
+ // cantTransferencia: transferenciaSeleccionada
|
|
|
+ // ? double.tryParse(transferenciaController.text)
|
|
|
+ // : 0,
|
|
|
+ );
|
|
|
|
|
|
List<PedidoProducto> listaPedidoProducto = carrito.map((item) {
|
|
|
List<PedidoProductoTopping> selectedToppings = [];
|
|
@@ -689,15 +697,87 @@ class _PedidoMesaFormState extends State<PedidoMesaForm> {
|
|
|
await Provider.of<PedidoViewModel>(context, listen: false)
|
|
|
.fetchPedidoConProductos(nuevoPedido.id!);
|
|
|
|
|
|
- if (pedidoCompleto != null) {
|
|
|
+ /* if (pedidoCompleto != null) {
|
|
|
imprimirTicketsJuntos(context, pedidoCompleto);
|
|
|
- }
|
|
|
+ } */
|
|
|
Navigator.of(context).pop();
|
|
|
} else {
|
|
|
print("Error al guardar el pedido");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ void cancelarPedidoActual() async {
|
|
|
+ if (widget.pedido == null) {
|
|
|
+ Navigator.of(context).pop();
|
|
|
+ } else {
|
|
|
+ DateTime now = DateTime.now();
|
|
|
+ String formattedDate = DateTime.now().toUtc().toIso8601String();
|
|
|
+
|
|
|
+ Pedido nuevoPedido = Pedido(
|
|
|
+ peticion: formattedDate,
|
|
|
+ // nombreCliente: nombreCliente,
|
|
|
+ // comentarios: comentarios,
|
|
|
+ estatus: "CANCELADO",
|
|
|
+ // totalPedido: totalPedido,
|
|
|
+ descuento: pedidoActual?.descuento,
|
|
|
+ idMesa: selectedMesa
|
|
|
+ // tipoPago: _obtenerTipoPago(),
|
|
|
+ // cantEfectivo:
|
|
|
+ // efectivoSeleccionado ? double.tryParse(efectivoController.text) : 0,
|
|
|
+ // cantTarjeta:
|
|
|
+ // tarjetaSeleccionada ? double.tryParse(tarjetaController.text) : 0,
|
|
|
+ // cantTransferencia: transferenciaSeleccionada
|
|
|
+ // ? double.tryParse(transferenciaController.text)
|
|
|
+ // : 0,
|
|
|
+ );
|
|
|
+
|
|
|
+ List<PedidoProducto> listaPedidoProducto = carrito.map((item) {
|
|
|
+ List<PedidoProductoTopping> selectedToppings = [];
|
|
|
+
|
|
|
+ item.selectedToppings.forEach((categoryId, selectedToppingIds) {
|
|
|
+ for (int toppingId in selectedToppingIds) {
|
|
|
+ selectedToppings.add(PedidoProductoTopping(
|
|
|
+ idTopping: toppingId,
|
|
|
+ ));
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ return PedidoProducto(
|
|
|
+ idProducto: item.producto.id,
|
|
|
+ producto: item.producto,
|
|
|
+ costoUnitario: item.producto.precio.toString(),
|
|
|
+ cantidad: item.cantidad,
|
|
|
+ // comentario: comentarios,
|
|
|
+ toppings: selectedToppings,
|
|
|
+ );
|
|
|
+ }).toList();
|
|
|
+
|
|
|
+ nuevoPedido.productos = listaPedidoProducto;
|
|
|
+
|
|
|
+ if (widget.pedido != null && widget.pedido!.id != null) {
|
|
|
+ nuevoPedido.id = widget.pedido!.id;
|
|
|
+ }
|
|
|
+
|
|
|
+ bool result = await Provider.of<PedidoViewModel>(context, listen: false)
|
|
|
+ .guardarPedidoLocal(pedido: nuevoPedido);
|
|
|
+
|
|
|
+ if (!mounted) return;
|
|
|
+
|
|
|
+ if (result) {
|
|
|
+ Pedido? pedidoCompleto =
|
|
|
+ await Provider.of<PedidoViewModel>(context, listen: false)
|
|
|
+ .fetchPedidoConProductos(nuevoPedido.id!);
|
|
|
+
|
|
|
+ // if (pedidoCompleto != null) {
|
|
|
+ // imprimirTicketsJuntos(context, pedidoCompleto);
|
|
|
+ // }
|
|
|
+ Navigator.of(context).pop();
|
|
|
+ } else {
|
|
|
+ print("Error al guardar el pedido");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
String _obtenerTipoPago() {
|
|
|
List<String> tiposPago = [];
|
|
|
if (efectivoSeleccionado) tiposPago.add('Efectivo');
|
|
@@ -1209,7 +1289,7 @@ class _PedidoMesaFormState extends State<PedidoMesaForm> {
|
|
|
Padding(
|
|
|
padding: const EdgeInsets.all(8.0),
|
|
|
child: ElevatedButton(
|
|
|
- onPressed: _finalizeOrder,
|
|
|
+ onPressed: cancelarPedidoActual,
|
|
|
style: ElevatedButton.styleFrom(
|
|
|
backgroundColor: AppTheme.tertiary,
|
|
|
textStyle: const TextStyle(fontSize: 22),
|