B4A=true Group=Default Group ModulesStructureVersion=1 Type=Class Version=12.2 @EndOfDesignText@ Sub Class_Globals Private Root As B4XView 'ignore Private xui As XUI 'ignore Private p_principal As Panel Private WobbleMenu1 As WobbleMenu Dim PCLV, PCLVM As PreoptimizedCLV Private p_productos As Panel Private clv_prods_ll, clv_carrito, clv As CustomListView Dim prodsMap As Map Private p_botonesVenta As Panel Private b_continuar As Button Private lfila As Label Private et_busca As EditText Private b_buscar As Button Dim etCantHasFocus, hayPedido As Boolean 'ignore Dim ticketId As String Dim rutaUsuario, folio As String 'ignore Dim query As String Dim listaProds, listaHints, listaHintsM, list_prodsPedido As List Dim reiniciarlistaProds As Boolean = False 'ignore Dim forzarBusqueda As Boolean = False ' Private lv_promos As ListView Private b_prodMenos As Button Private et_pCant As EditText Private l_pCant As Label Private b_prodMas As Button Private p_botMasMen As Panel Private l_prodX As Label Private i_prod As ImageView Private p_prods As Panel Private p_mesas As Panel ' Private lv_carrito As ListView Private p_carrito As Panel Private p_botonesCarrito As Panel Private b_terminar As Button Private p_historial As Panel ' Private p_botonesHist As Panel Private l_compraTerminada As Label Private l_carritoVacio As Label Private b_borrar As Button Private l_totalCarrito As Label Private l_historialVacio As Label Private lv_historial As ListView Private clv_mesas As CustomListView Private l_mesaX As Label Private l_estatus As Label Private l_mesa As Label Private p_mesa As Panel Private b_abrirMesa As Button Private cb_comensales As B4XComboBox Private cb_mesero As B4XComboBox Private l_mesero As Label Private l_comensales As Label Private l_pago As Label Private cb_pago As B4XComboBox Private p_mesaCampos As Panel Private p_mesasItem As Panel Private l_comensalesAbierta2 As Label Private l_meseroAbierta2 As Label Private b_mesaEditar As Button Private b_mesaCerrar As Button Private p_mesaAbierta As Panel Private lv_categorias As ListView Private p_pago As Panel Private Label1 As Label Private b_pagoCerrar As Button End Sub 'You can add more parameters here. Public Sub Initialize As Object Return Me End Sub 'This event will be called once, before the page becomes visible. Private Sub B4XPage_Created (Root1 As B4XView) Root = Root1 'load the layout to Root Root.LoadLayout("principal") ' p_principal.Width = Root.Width ' p_principal.Height = Root.Height Subs.panelWH(p_principal, Root.Width, Root.Height) Subs.panelWH(p_mesa, Root.Width, Root.Height - WobbleMenu1.Height) If File.Exists(Starter.ruta, "kmt.db") = False Then File.Copy(File.DirAssets, "kmt.db", Starter.ruta, "kmt.db") End If PCLV.Initialize(Me, "PCLV", clv_prods_ll) PCLVM.Initialize(Me, "PCLVM", clv_mesas) WobbleMenu1.SetTabTextIcon(1,"Mesas", Chr(0xF0C0), Typeface.FONTAWESOME) WobbleMenu1.SetTabTextIcon(2,"Productos", Chr(0xF007), Typeface.FONTAWESOME) WobbleMenu1.SetTabTextIcon(3,"Carrito", Chr(0xF2BE), Typeface.FONTAWESOME) WobbleMenu1.SetTabTextIcon(4,"Historial", Chr(0xF21B), Typeface.FONTAWESOME) ' WobbleMenu1.SetTabTextIcon(5,"Cinco", Chr(0xF29D), Typeface.FONTAWESOME) p_principal.Width = Root.Width p_principal.Height = Root.Height clv_prods_ll.GetBase.SetLayoutAnimated(0, 5dip, (l_meseroAbierta2.Top + l_meseroAbierta2.Height + 5), Root.Width + 10, Root.Height * 0.55) 'Cambiamos el tamaño y posición de la lista de productos. clv_prods_ll.Base_Resize(clv_prods_ll.GetBase.Width, clv_prods_ll.GetBase.Height) 'Cambiamos el tamaño del panel interno de la lista para que se ajuste al nuevo tamaño. clv_carrito.GetBase.SetLayoutAnimated(0, 5dip, 80dip, Root.Width - 20, Root.Height * 0.65) 'Cambiamos el tamaño y posición de la lista del carrito. clv_carrito.Base_Resize(clv_carrito.GetBase.Width, clv_carrito.GetBase.Height) 'Cambiamos el tamaño del panel interno del carrito para que se ajuste al nuevo tamaño. clv_mesas.GetBase.SetLayoutAnimated(0, 5dip, 80dip, Root.Width - 20, Root.Height * 0.80) 'Cambiamos el tamaño y posición de la lista de mesas. clv_mesas.Base_Resize(clv_mesas.GetBase.Width, clv_mesas.GetBase.Height) 'Cambiamos el tamaño del panel interno de las mesas para que se ajuste al nuevo tamaño. p_productos.Width = Root.Width p_productos.Height = Root.Height - WobbleMenu1.Height p_carrito.Width = Root.Width p_carrito.Height = Root.Height - WobbleMenu1.Height p_mesas.Width = Root.Width p_mesaAbierta.Height = Root.Height p_mesas.Height = Root.Height - WobbleMenu1.Height p_historial.Width = Root.Width p_historial.Height = Root.Height - WobbleMenu1.Height p_botonesVenta.Top = Root.Height - p_botonesVenta.Height - WobbleMenu1.Height + 10 p_botonesCarrito.Top = Root.Height - p_botonesCarrito.Height - WobbleMenu1.Height + 10 Subs.centraPanel(p_pago, p_mesaAbierta.Width) Subs.centraBoton(b_abrirMesa, Root.Width) b_mesaCerrar.Top = clv_prods_ll.AsView.top + clv_prods_ll.AsView.Height + 15 ' - b_mesaCerrar.Height ' Subs.centraEtiqueta(l_mesa, Root.Width) ' Subs.centraEtiqueta(l_comensales, Root.Width) ' Subs.centraEtiqueta(l_mesero, Root.Width) Subs.centraPanel(p_mesaCampos, Root.Width) Subs.centraPanel(p_mesaAbierta, Root.Width) Dim ri As Cursor = Starter.skmt.ExecQuery($"select count(*) as cuantos from cat_gunaprod"$) ri.Position = 0 If ri.GetString("cuantos") = "0" Then 'Si no hay productos, los descargamos Starter.reqManager.Initialize(Me, Starter.server) Dim cmd As DBCommand cmd.Initialize cmd.Name = "selectPedigree" cmd.Parameters = Array As Object(DateTime.Date(DateTime.Now)) Log($"Traemos productos, ${DateTime.Date(DateTime.Now)}"$) Starter.reqManager.ExecuteQuery(cmd , 0, "descargaProds") End If query = "cat_gunaprod" prodsMap.Initialize listaProds.Initialize listaHints.Initialize listaHintsM.Initialize p_mesas.Width = Root.Width ' Log(p_productos.Width) Subs.panelVisible(p_mesas, 0, 0) cb_comensales.SetItems(Array As String(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)) cb_pago.SetItems(Array As String("Efectivo", "Tarjeta")) cb_mesero.SetItems(Subs.traeMeserosLista) End Sub Sub B4XPage_Appear ' ticketId = Subs.traeTicket ' rutaUsuario = Subs.traeMesa ' Log($"${clv_carrito.AsView.Width}, ${Root.Width}"$) clv = clv_prods_ll cuentaProds ' LlenaProdsLL(Null, Null) LlenaMesas(Null, Null) LlenaProdsLL(Null, Null) PCLV.lblHint.SetTextSizeAnimated(0,13) PCLV.B4XSeekBar1.Color1=Colors.DarkGray PCLV.B4XSeekBar1.Color2=Colors.DarkGray PCLV.B4XSeekBar1.ThumbColor=Colors.red PCLV.B4XSeekBar1.Radius1 = 15 PCLV.B4XSeekBar1.Radius2 = 20 PCLV.B4XSeekBar1.mBase.Left=Root.Width * 0.85 PCLV.B4XSeekBar1.mBase.Width=50dip ' PCLV.B4XSeekBar1.mBase.Top=-50 PCLV.B4XSeekBar1.mBase.Height=clv_prods_ll.AsView.Height PCLV.pnlOverlay.Height = clv_prods_ll.AsView.Height PCLV.pnlOverlay.Width = clv_prods_ll.AsView.Width PCLV.B4XSeekBar1.Update If clv_mesas.Size > 0 Then clv_mesas.JumpToItem(0) 'Vamos al primer artículo de la lista. End If PCLVM.lblHint.SetTextSizeAnimated(0,13) PCLVM.B4XSeekBar1.Color1=Colors.DarkGray PCLVM.B4XSeekBar1.Color2=Colors.DarkGray PCLVM.B4XSeekBar1.ThumbColor=Colors.red PCLVM.B4XSeekBar1.Radius1 = 15 PCLVM.B4XSeekBar1.Radius2 = 20 PCLVM.B4XSeekBar1.mBase.Left=Root.Width * 0.88 ' PCLVM.B4XSeekBar1.mBase.Top=-50 PCLVM.B4XSeekBar1.mBase.Height=clv_mesas.AsView.Height PCLVM.pnlOverlay.Height = clv_mesas.AsView.Height PCLVM.pnlOverlay.Width = clv_mesas.AsView.Width PCLVM.B4XSeekBar1.Update p_productos.Height = Root.Height - WobbleMenu1.Height If et_busca.Text <> "" Then et_busca.Text ="" End Sub Sub B4XPage_CloseRequest As ResumableSub ' BACK key pressed 'Return True to close, False to cancel Log(1) If p_pago.visible Then p_pago.Visible = False else If p_mesa.Visible Then p_mesa.Visible = False p_mesas.Visible = True LlenaMesas(Null, Null) Else if p_carrito.Visible Then ' p_carrito.Visible = False ' p_mesas.Visible = True WobbleMenu1_Tab1Click WobbleMenu1.SetCurrentTab(1) Else B4XPages.ShowPage("Login") End If Return False End Sub Sub JobDone(Job As HttpJob) If Starter.Logger Then LogColor("Principal - JobDone", Colors.Magenta) If Job.Success = False Then ' ToastMessageShow("Error: " & Job.ErrorMessage, True) Else If Starter.Logger Then LogColor("JobDone: '" & Starter.reqManager.HandleJob(Job).tag & "' - Registros: " & Starter.reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211110 If Job.JobName = "DBRequest" Then Dim result As DBResult = Starter.reqManager.HandleJob(Job) If result.Tag = "descargaProds" Then 'query tag ' If Starter.Logger Then Subs.logJobDoneResultados(result) Starter.skmt.BeginTransaction For Each records() As Object In result.Rows Log($"ID: ${records(result.Columns.Get("CAT_GP_ID"))}, NOM: ${records(result.Columns.Get("CAT_GP_NOMBRE"))}"$) Dim CAT_GP_ID As String = records(result.Columns.Get("CAT_GP_ID")) Dim CAT_GP_NOMBRE As String = records(result.Columns.Get("CAT_GP_NOMBRE")) Dim CAT_GP_PRECIO As String = records(result.Columns.Get("CAT_GP_PRECIO")) Dim CAT_GP_ALMACEN As String = records(result.Columns.Get("CAT_GP_ALMACEN")) Dim CAT_PT_DESC As String = records(result.Columns.Get("CAT_PT_DESC")) Dim CAT_PS_DESC As String = records(result.Columns.Get("CAT_PS_DESC")) Dim CAT_GP_IMG() As Byte = records(result.Columns.Get("CAT_GP_IMG")) Dim CAT_GP_FECHA As String = records(result.Columns.Get("CAT_GP_FECHA")) Dim CAT_GP_FECHA_MOD As String = records(result.Columns.Get("CAT_GP_FECHA_MOD")) Dim CAT_GP_CLASIF As String = records(result.Columns.Get("CAT_GP_CLASIF")) Starter.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_PRECIO,CAT_GP_ALMACEN,CAT_PT_DESC,CAT_PS_DESC,CAT_GP_IMG,CAT_GP_FECHA,CAT_GP_FECHA_MOD, CAT_GP_CLASIF) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_PRECIO,CAT_GP_ALMACEN,CAT_PT_DESC,CAT_PS_DESC,CAT_GP_IMG,CAT_GP_FECHA,CAT_GP_FECHA_MOD,CAT_GP_CLASIF)) Next ' Starter.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_BFACTURA,CAT_CL_BCREDITO,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO,CAT_CL_DIAS_VISITA, gestion, IMPRESION) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,0,0,?,0,0) ",Array As Object ("0",e_ruta.TEXT, "VENTA ABORDO","null","null","null","null","null","null","null","null","null","null","null","null","NULL","null","null","NULL","NULL")) Starter.skmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!! Starter.skmt.EndTransaction ' LlenaProdsLL(Null, Null) End If End If End If Job.Release End Sub Sub b_prodMenos_Click etCantHasFocus = False If WobbleMenu1.GetCurrentTab = 3 Then clv = clv_carrito Else clv = clv_prods_ll ' Log(Sender.As(Button).text & "|" & Sender.As(Button).tag) Private buttonTag As String = Sender.As(Button).tag LogColor("b_prodMenos_Click", Colors.Magenta) Dim index As Int = clv.GetItemFromView(Sender) LogColor(clv.GetValue(index), Colors.Magenta) Private inv As Int = clv.GetValue(index).As(Map).Get("almacen") Dim pnl0 As B4XView = clv.GetPanel(index) Log(pnl0.As(Panel)) Dim pnl As B4XView = pnl0.GetView(0) Dim laCant As B4XView = pnl.GetView(2).GetView(2) ' Log(pnl.GetView(0).NumberOfViews) Dim elNombre As B4XView = pnl.GetView(1) If WobbleMenu1.GetCurrentTab = 3 Then laCant = pnl.GetView(2).GetView(4) Log($"${pnl.GetView(1)}${CRLF}${pnl.GetView(2).GetView(2)}${CRLF}${pnl.GetView(2).GetView(3)}${CRLF}${pnl.GetView(2).GetView(4)}"$) ' Log($"precio|stock:${laCant.tag}"$) ' Log("lacant.text="&laCant.text & "|" & buttonTag) If buttonTag = "vendido" And laCant.Text > 0 Then Log(clv.GetValue(index).As(Map)) clv.GetValue(index).As(Map).Put("almacen",inv + 1) Log(clv.GetValue(index).As(Map)) ' clv.GetValue(index).As(Map).Get("almacen") = clv.GetValue(index).As(Map).Get("almacen") + 1 End If If laCant.Text = "" Then laCant.Text = 0 Log($"|${laCant.Text}|"$) laCant.Text = $"$1.0{laCant.Text-1}"$ If laCant.Text < 0 Then laCant.Text = 0 Private tmpMap As Map = clv.GetValue(index).As(Map) Private precio As String = clv.GetValue(index).As(Map).Get("precio") Private id As String=clv.GetValue(index).As(Map).Get("id") Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":Subs.traeAlmacen) ' Log(tmpMap) prodsMap.Put(id, tmpMap) If laCant.Text = 0 Then prodsMap.Remove(id) ' LogColor("prodsMap="&prodsMap, Colors.blue) ' (Subs.traeAlmacen, p1.Get("precio"), p1.Get("cant"), pn, p, ticketId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta) ' Private almacenX As String = Subs.traeAlmacen Private nombreX As String = Subs.traeProdNombre(id) Subs.actualizaProducto(precio, laCant.text, nombreX, id, Starter.ticketActual, Subs.traeFecha, Starter.meseroActual, Starter.mesaActual, 0, Starter.tipov, Starter.comensalesActuales) cuentaProds Dim cs As CSBuilder cs.Initialize If WobbleMenu1.GetCurrentTab = 3 Then Private elTexto As String = clv.GetValue(index).As(Map).Get("prod") Private elPrecioU As String = clv.GetValue(index).As(Map).Get("precio") Private elTotal As String = elPrecioU * laCant.text elNombre.Text = cs.Color(Colors.red).append(elTexto).pop.append(CRLF).Color(0xFF017F01).Append($"Precio $${NumberFormat2(elTotal, 1, 2, 2, True)}"$).Popall End If ' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) End Sub Sub b_prodMas_Click etCantHasFocus = False If WobbleMenu1.GetCurrentTab = 3 Then clv = clv_carrito Else clv = clv_prods_ll Private buttonTag As String = Sender.As(Button).tag Dim index As Int = clv.GetItemFromView(Sender) LogColor("b_prodMas_Click", Colors.Magenta) Dim pnl0 As B4XView = clv.GetPanel(index) Dim pnl As B4XView = pnl0.GetView(0) Dim laCant As B4XView = pnl.GetView(2).GetView(2) Dim elNombre As B4XView = pnl.GetView(1) If WobbleMenu1.GetCurrentTab = 3 Then laCant = pnl.GetView(2).GetView(4) Log($"${pnl.GetView(2).GetView(1)}${CRLF}${pnl.GetView(2).GetView(2)}${CRLF}${pnl.GetView(2).GetView(3)}${CRLF}${pnl.GetView(2).GetView(4)}"$) If laCant.Text = "" Then laCant.Text = 0 ' Private tmpMap As Map = clv.GetValue(index).As(Map) Private precio As String=clv.GetValue(index).As(Map).Get("precio") Private inv As Int = clv.GetValue(index).As(Map).Get("almacen") Log($"|${laCant.Text}, ${inv}"$) If buttonTag = "vendido" Then If inv > 0 And (laCant.Text + 1 <= inv) Then ' Log(clv.GetValue(index).As(Map)) clv.GetValue(index).As(Map).Put("almacen", (inv - 1)) inv = inv - 1 laCant.Text = $"$1.0{laCant.Text+1}"$ ' Log(clv.GetValue(index).As(Map)) End If else If laCant.Text + 1 <= inv And lfila.Text = "PRODUCTOS" Then ' LogColor(inv, Colors.blue) laCant.Text = $"$1.0{laCant.Text + 1}"$ Log(Subs.totalPedido) End If Private id As String=clv.GetValue(index).As(Map).Get("id") ' Private almacenX As String = Subs.traeAlmacen Private nombreX As String = Subs.traeProdNombre(id) Private precioX As String = precio Subs.actualizaProducto(precioX, laCant.text, nombreX, id, Starter.ticketActual, Subs.traeFecha, Starter.meseroActual, Starter.mesaActual, 0, Starter.tipov, Starter.comensalesActuales) cuentaProds Dim cs As CSBuilder cs.Initialize If WobbleMenu1.GetCurrentTab = 3 Then Private elTexto As String = clv.GetValue(index).As(Map).Get("prod") Private elPrecioU As String = clv.GetValue(index).As(Map).Get("precio") Private elTotal As String = elPrecioU * laCant.text elNombre.Text = cs.Color(Colors.red).append(elTexto).pop.append(CRLF).Color(0xFF017F01).Append($"Precio $${NumberFormat2(elTotal, 1, 2, 2, True)}"$).Popall End If ' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) End Sub Sub cuentaProds 'LogColor($"Productos de la orden: ${c_prodsX.GetString("cantProds")}, Total: ${c_prodsX.GetString("costoTotal")}"$, Colors.red) ' Log("===========================") Private c As Cursor = Starter.skmt.ExecQuery($"select sum(PE_COSTO_TOT) as total, sum(PE_CANT) as cant from PEDIDO where PE_TICKET IN (Select cuenta from cuentaa)"$) ' LogColor("TIEMPO cuentaProds =" & ((DateTime.Now-inicioContador)/1000), Colors.Red) ' LogColor(prodsMap, Colors.Magenta) p_botonesVenta.Visible = True p_botonesVenta.BringToFront c.Position=0 ' Log(Subs.totalPedido) Private cant0 As String = "0" Private total0 As String = "0" If c.GetString("cant") <> Null And c.GetString("cant") <> "null" Then cant0 = c.GetString("cant") If c.GetString("total") <> Null And c.GetString("total") <> "null" Then total0 = c.GetString("total") ' Log($"Total Prods: ${cant0}, Total Compra: $$1.2{total0}"$) l_totalCarrito.text = $"Total: $${NumberFormat2(total0,1,2,2,True)}"$ c.Close If WobbleMenu1.GetCurrentTab = 3 Then LlenaProdsLL(Null, Null) If Subs.hayPedido Then WobbleMenu1.SetBadge(3, 1, Colors.white, Colors.red) Else WobbleMenu1.RemoveBadge(3) End Sub Sub LlenaProdsLL(p As ResultSet, extra As String) ' Log("LlenaProdsLL") listaProds.Initialize hayPedido = Subs.hayPedido ' Log($"HAYPEDIDO: ${hayPedido}"$) If hayPedido Then 'Si hay pedido obtenemos las cantidades de los productos para agregarlos al CLV. Dim cantsMap As Map cantsMap.Initialize Dim pe As ResultSet = Starter.skmt.ExecQuery($"select PE_PROID, PE_CANT from PEDIDO where PE_TICKET = '${Starter.ticketActual}' and PE_MESA = '${Starter.mesaActual}' and PE_TIPO = 'VENTA'"$) 'Si EXTRA es igual a rmi, entonces regresamos los RMIs existentes. If extra = "rmi" Then pe = Starter.skmt.ExecQuery($"select PE_PROID, PE_CANT from PEDIDO where PE_TICKET = '${Starter.ticketActual}' and PE_MESA = 'DUR'"$) ' LogColor("Ponemos productos de pedido anterior: "&pe.RowCount, Colors.red) Do While pe.NextRow Private cant As Int = 0 cantsMap.put(pe.GetString("PE_PROID"), pe.GetString("PE_CANT")) Loop ' Log($"Con pedido: ${pe.RowCount}"$) ' Log("CANTSMAP: " & cantsMap) pe.Close End If ' Log(p.IsInitialized) If query = "" Or query = Null Then query = "cat_gunaprod2" If p.IsInitialized Then Log($"YA HAY RESULSET ${p.RowCount}"$) Else ' Log("NO HAY RESULSET") Dim p As ResultSet = Starter.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD, CAT_GP_IMG from cat_gunaprod where CAT_GP_PRECIO > 0 And CAT_GP_CLASIF <> 'PROMOS' order by CAT_GP_NOMBRE"$) End If ' Log(p.RowCount) Do While p.NextRow Private cant As Int = 0 ' Dim ins As InputStream ' Dim bmp As Bitmap ' Dim jpeg() As Byte ' jpeg = p.GetBlob("CAT_GP_IMG") ' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) ' bmp.Initialize2(ins) If hayPedido And cantsMap.ContainsKey(p.GetString("CAT_GP_ID")) Then cant = cantsMap.Get(p.GetString("CAT_GP_ID")) Dim tempMap As Map = CreateMap("prod":p.GetString("CAT_GP_NOMBRE"), "precio":p.GetString("CAT_GP_PRECIO"), "almacen":p.GetString("CAT_GP_ALMACEN"), "id":p.GetString("CAT_GP_ID"), "cant":cant, "img":Null) listaProds.Add(tempMap) ' Log($"${p.GetString("CAT_GP_ID")}, ${p.GetString("CAT_GP_NOMBRE")}, ${cant}"$) Loop p.Close ' Log("LISTAPRODS: " & listaProds) PCLV.Commit clv_prods_ll.Clear Private listaProdsConCant, listaProdsConCantIndex As List listaProdsConCant.Initialize listaProdsConCantIndex.Initialize listaHints.Initialize ' Log(listaProds) For q = 0 To listaProds.Size - 1' Sacamos los productos con cantidad previa. If listaProds.Get(q).As(Map).Get("cant").As(Int) <> 0 Then ' Log(listaProds.Get(q).As(Map).Get("prod")) listaProdsConCant.Add(listaProds.Get(q)) listaProdsConCantIndex.Add(q) End If Next ' Log("PRODCONCANT: " & listaProdsConCant) ' Log(listaProdsConCantIndex) Private cont As Int = 0 For pr0=0 To listaProdsConCant.Size - 1 'Agregamos los productos con cantidad previa. Private Pnl As B4XView = xui.CreatePanel("") Pnl.SetLayoutAnimated(0, 0, 0, clv_prods_ll.AsView.Width, 70dip) clv_prods_ll.Add(Pnl, listaProdsConCant.Get(pr0)) listaHints.Add(listaProdsConCant.get(pr0).As(Map).Get("prod")) cont = cont + 1 Next ' LogColor(clv_prods_ll.Size, Colors.red) ' Log(listaProds.Size) For pr = 0 To listaProds.Size - 1 If listaProdsConCantIndex.IndexOf(pr) = -1 Then Private Pnl As B4XView = xui.CreatePanel("") If listaProds.Get(pr).As(Map).Get("almacen") < 1 Then ' Log("EN CERO" & listaProds.Get(pr).As(Map).Get("prod") & "|" & listaProds.Get(pr).As(Map).Get("almacen")) Else Pnl.SetLayoutAnimated(0, 0, 0, clv_prods_ll.AsView.Width, 70dip) ' Log(listaProds.Get(pr)) clv_prods_ll.Add(Pnl, listaProds.Get(pr)) listaHints.Add(listaProds.get(pr).As(Map).Get("prod")) cont = cont + 1 End If End If Next ' LogColor(clv_prods_ll.Size, Colors.red) ' PCLV.Commit ' Log("CONT=" & cont) ' Log("CLV_PRODSLL="&clv_prods_ll.Size) If clv_prods_ll.Size > 0 Then clv_prods_ll.JumpToItem(0) 'Vamos al primer artículo de la lista. End If PCLV.B4XSeekBar1.MaxValue = clv_prods_ll.Size PCLV.B4XSeekBar1.MinValue = 0 PCLV.B4XSeekBar1.Interval = clv_prods_ll.Size/20 PCLV.B4XSeekBar1.Value = clv_prods_ll.Size PCLV.B4XSeekBar1.Update ' Log($"Min:0, max:${clv_prods_ll.Size}, Interval:${clv_prods_ll.Size/20}"$) reiniciarlistaProds = False End Sub Private Sub clv_prods_ll_VisibleRangeChanged (FirstIndex As Int, LastIndex As Int) ' Private inicioContador As String = DateTime.Now ' Log($"clv_prods_ll_VisibleRangeChanged : ${FirstIndex}, ${LastIndex} "$) Dim ExtraSize As Int = 30 'List size For i = Max(0, FirstIndex - ExtraSize) To Min(LastIndex + ExtraSize, clv_prods_ll.Size - 1) Dim Pnl As B4XView = clv_prods_ll.GetPanel(i) If i > FirstIndex - ExtraSize And i < LastIndex + ExtraSize Then ' Log(listaRenglones) ' Log(clv_prods_ll.GetValue(i)) If Pnl.NumberOfViews = 0 Then 'Add each item/layout to the list/main layout Pnl.LoadLayout("proditem") ' p_botMasMen.Left = (p_prods.Width * 0.66) - (p_botMasMen.Width / 2) p_prods.Width = Root.Width * 0.99 ' p_botMasMen.Left = p_prods.Width - (p_botMasMen.Width + 5) ' Log(Root.Width) p_botMasMen.Left = (p_prods.Width - p_botMasMen.Width - 75) ' Log(p_botMasMen.left) Private cs As CSBuilder cs.Initialize l_prodX.SetTextSizeAnimated(0, 13) If clv_prods_ll.GetValue(i).As(Map).Get("cant") <> Null And clv_prods_ll.GetValue(i).As(Map).Get("cant") > 0 Then p_prods.Color=0xFFE2EEFF et_pCant.TextColor=Colors.Red ' Log("VENDIDO ") b_prodMenos.Tag = "vendido" b_prodMas.Tag = "vendido" End If Private precio As String=NumberFormat2(clv_prods_ll.GetValue(i).As(Map).Get("precio").As(Double),1,2,2,False) If clv_prods_ll.GetValue(i).As(Map).Get("cant") <> Null Then et_pCant.Text = clv_prods_ll.GetValue(i).As(Map).Get("cant") l_prodX.Text = cs.Color(Colors.red).append(clv_prods_ll.GetValue(i).As(Map).Get("prod")).pop.append(CRLF).Color(0xFF017F01).Append($"Precio $${NumberFormat2(precio, 1, 2, 2, True)}"$).Popall l_prodX.Tag = clv_prods_ll.GetValue(i).As(Map).Get("almacen") l_pCant.Tag = clv_prods_ll.GetValue(i).As(Map).Get("id") ' Log(clv_prods_ll.GetValue(i).As(Map).Get("id")) ' Private rs_img As ResultSet = Starter.skmt.ExecQuery($"select CAT_GP_IMG from cat_gunaprod where CAT_GP_ID = '${clv_prods_ll.GetValue(i).As(Map).Get("id")}'"$) i_prod.Bitmap = clv_prods_ll.GetValue(i).As(Map).Get("img") End If ' Log($"${i}, ${FirstIndex}, ${LastIndex}, ${Pnl.NumberOfViews}. ${clv_prods_ll.Size}"$) Else 'Not visible ' If Pnl.NumberOfViews > 0 Then ' Pnl.RemoveAllViews 'Remove none visable item/layouts from the list/main layout ' End If End If PCLV.B4XSeekBar1.Value = clv_prods_ll.Size - FirstIndex ' Log($"Bar value: ${PCLV.B4XSeekBar1.Value}"$) Next End Sub Sub et_busca_TextChanged (Old As String, New As String) ' Private inicioContador As String = DateTime.Now If New.Length = 1 And Not(forzarBusqueda) Then Return forzarBusqueda = False If lfila.text = "PROMOCIONES" Then ' If Not(lv_promos.Visible) Then lv_promos.Visible = True ' Private cPromo As Cursor=Starter.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from ${query} where CAT_GP_NOMBRE like '%${New}%' and CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO = 'PROMOS' AND CAT_GP_TIPOPROD <> 1 and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID)"$) ' Log($"res:${cPromo.RowCount}"$) ' If cPromo.RowCount > 0 Then ' lv_promos.Clear ' For i=0 To cPromo.RowCount -1 ' cPromo.Position=i ' Private tm As Map = Subs.procesaPromocion(cPromo.GetString("CAT_GP_ID"), ticketId) ' If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto. ' lv_promos.AddTwoLines(cPromo.GetString("CAT_GP_NOMBRE"),"# " & cPromo.GetString("CAT_GP_ALMACEN") & " $ " & cPromo.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) ' End If ' Next ' Else ' ToastMessageShow("No hay promociones disponibles.", False) ' End If ' cPromo.Close Else If Not(clv_prods_ll.AsView.Visible) Then clv_prods_ll.AsView.Visible = True clv_prods_ll.Clear listaProds.Initialize listaHints.Initialize Sleep(0) Dim p As ResultSet = Starter.skmt.ExecQuery($"Select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD, CAT_GP_IMG from cat_gunaprod where CAT_GP_NOMBRE like '%${New}%' and CAT_GP_PRECIO > 0 And CAT_GP_CLASIF <> 'PROMOS' order by CAT_GP_NOMBRE"$) Log($"Llamamos LlenaProdsLL con ${p.RowCount} registros"$) LlenaProdsLL(p, Null) p.Close End If End Sub Sub llenaCarrito 'ignore Private totalPedido As String = 0 Private cantPedido As String = 0 p_mesas.Visible = False ' Subs.agrupador ' lv_carrito.Clear clv_carrito.Clear list_prodsPedido.Initialize Private c_prods As Cursor=Starter.skmt.ExecQuery("select PE_PRONOMBRE,PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_FOLIO, PE_CEDIS, PE_PROID FROM PEDIDO WHERE PE_TICKET IN (Select CUENTA from cuentaa) order by PE_CEDIS, PE_PRONOMBRE") ' Log(c_prods.RowCount) If c_prods.RowCount > 0 Then c_prods.Position = 0 ' lv_carrito.BringToFront clv_carrito.AsView.BringToFront Private cs As CSBuilder For i = 0 To c_prods.RowCount -1 cs.Initialize c_prods.Position = i ' Dim label1 As Label ' lv_carrito.TwoLinesLayout.ItemHeight = 50dip ' label1 = lv_carrito.TwoLinesLayout.Label ' label1.TextSize = 15 ' label1.TextColor = Colors.Black ' label1.color = Colors.White ' label1.Height = 30dip Private textColor As Int = Colors.black 'ignore ' Log(c_prods.GetString("PE_CEDIS")) If Not(IsNumber(c_prods.GetString("PE_CEDIS"))) Then textColor = Colors.RGB(210,105,30) 'Si es promo, cambiamos el color del texto. If c_prods.GetString("PE_CEDIS") = "DUR" Then textColor = Colors.red 'Si es promo, cambiamos el color del texto. ' Dim label2 As Label ' label2 = lv_carrito.TwoLinesLayout.SecondLabel ' label2.TextSize = 10 ' label2.TextColor = Colors.Blue ' label2.Tag = i ' Log(c_prods.GetString("PE_PRONOMBRE")) ' lv_carrito.AddTwoLines(cs.Color(textColor).append(c_prods.GetString("PE_PRONOMBRE")).pop,"Cantidad #"& c_prods.GetString("PE_CANT")& " SubTotal $"& c_prods.GetString("PE_COSTO_TOT")& " Folio "& c_prods.GetString("PE_FOLIO")) Private tempMap As Map = CreateMap("prod":c_prods.GetString("PE_PRONOMBRE"), "almacen":1000, "id": c_prods.GetString("PE_PROID"), "cant": c_prods.GetString("PE_CANT"), "precio": c_prods.GetString("PE_COSTOU"), "precioT": c_prods.GetString("PE_COSTO_TOT")) list_prodsPedido.Add(tempMap) ' Private bmp As Bitmap = Subs.traeImgDeDB(c_prods.GetString("PE_PROID")) ' Private elTexto As String = cs.Color(Colors.red).append(c_prods.GetString("PE_PRONOMBRE")).pop.append(CRLF).Color(0xFF017F01).Append($"Precio $${NumberFormat2(c_prods.GetString("PE_COSTO_TOT"), 1, 2, 2, True)}"$).Popall clv_carrito.Add(CreateListItem(c_prods.GetString("PE_PRONOMBRE"), c_prods.GetString("PE_CANT"), c_prods.GetString("PE_COSTO_TOT"), 1000, clv_carrito.AsView.Width, 150dip, Null, c_prods.GetString("PE_PROID")), tempMap) folio = 0 totalPedido = totalPedido + (c_prods.GetString("PE_COSTOU") * c_prods.GetString("PE_CANT")) cantPedido = cantPedido + c_prods.GetString("PE_CANT") If c_prods.GetString("PE_FOLIO") <> Null Then folio = c_prods.GetString("PE_FOLIO") Next Else l_carritoVacio.Visible = True l_carritoVacio.Text = "No hay productos en tu carrito." End If ' Log(list_prodsPedido) c_prods.Close ' l_total2.Text = $"$1.2{totalPedido}"$ ' l_cant.Text = cantPedido ' If Subs.revisaImpresa Then b_rechazar.Visible = False Else b_rechazar.Visible = True ' p_vistaPreviaTrans.Width = Root.Width ' p_vistaPreviaTrans.Height = Root.Height ' Subs.centraPanel(p_vistaPrevia, Root.Width) ' p_vistaPrevia.Visible=True ' p_vistaPreviaTrans.Visible=True End Sub 'Return the hint that will be displayed when the user fast scrolls the list. It can be a string or CSBuilder. Sub PCLV_HintRequested(Index As Int) As Object Dim word As String = listaHints.get(Index) Return word End Sub 'Return the hint that will be displayed when the user fast scrolls the list. It can be a string or CSBuilder. Sub PCLVM_HintRequested(Index As Int) As Object Dim word As String = listaHintsM.get(Index) Return word End Sub 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. Private Sub WobbleMenu1_Tab1Click LlenaMesas(Null, Null) ' LlenaProdsLL(Null, Null) Subs.panelVisible(p_mesas, 0, 0) PCLVM.B4XSeekBar1.mBase.Visible = True PCLV.B4XSeekBar1.mBase.Visible = False p_productos.Visible = False p_carrito.Visible = False p_historial.Visible = False p_mesa.Visible = False End Sub Private Sub WobbleMenu1_Tab2Click LlenaProdsLL(Null, Null) PCLVM.B4XSeekBar1.mBase.Visible = False PCLV.B4XSeekBar1.mBase.BringToFront PCLV.B4XSeekBar1.mBase.Visible = True Subs.panelVisible(p_productos, 0, 0) p_mesas.Visible = False p_carrito.Visible = False p_historial.Visible = False p_mesa.Visible = False End Sub Private Sub WobbleMenu1_Tab3Click PCLVM.B4XSeekBar1.mBase.Visible = False PCLV.B4XSeekBar1.mBase.Visible = False Subs.panelVisible(p_carrito, 0, 0) p_carrito.BringToFront ' p_carrito.BringToFront p_productos.Visible = False p_mesas.Visible = False p_historial.Visible = False l_carritoVacio.Visible = False l_compraTerminada.Visible = False p_mesa.Visible = False llenaCarrito If clv_carrito.Size > 0 Then p_botonesCarrito.Visible = True Else p_botonesCarrito.Visible = False End Sub Private Sub WobbleMenu1_Tab4Click Subs.panelVisible(p_historial, 0, 0) p_productos.Visible = False p_carrito.Visible = False p_mesas.Visible = False p_mesa.Visible = False llenaHistorial End Sub Private Sub b_continuar_Click WobbleMenu1.SetCurrentTab(2) End Sub Private Sub p_botonesVenta_Click End Sub Private Sub lv_promos_ItemClick (Position As Int, Value As Object) End Sub 'Private Sub p_mesas_Click ' 'Para evitar que el clic en pantalla no se siga hacia atras 'End Sub Private Sub p_historial_Click 'Para evitar que el clic en pantalla no se siga hacia atras End Sub Private Sub p_carrito_Click 'Para evitar que el clic en pantalla no se siga hacia atras End Sub Private Sub b_buscar_Click forzarBusqueda = True et_busca_TextChanged("",et_busca.Text) End Sub Private Sub b_terminar_Click DateTime.DateFormat= $"yyMMdd-HHmmss-${Starter.ticketActual}"$ Private id As String = DateTime.Date(DateTime.Now) Starter.skmt.ExecNonQuery($"insert into cat_hist_compras (H_IDCOMPRA, H_FOLIO, H_MESA, H_CEDIS, H_COSTO_TOT, H_COSTOU, H_CANT, H_PRONOMBRE, H_PROID, H_TICKET, H_FECHA) select '${id}', PE_FOLIO, PE_MESA, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_TICKET, PE_FECHA from pedido where PE_TICKET = '${Starter.ticketActual}'"$) Starter.skmt.ExecNonQuery($"delete from pedido where PE_TICKET = '${Starter.ticketActual}'"$) ' lv_carrito.Clear clv_carrito.Clear ' et_busca_TextChanged("", et_busca.Text) LlenaProdsLL(Null, Null) l_compraTerminada.Text = $"¡Felicidades!${CRLF}${CRLF}Tu compra con número de orden ${id} ha sido registrada.${CRLF}${CRLF}Llegará en tu siguiente día de entrega."$ l_compraTerminada.Visible = True l_compraTerminada.BringToFront l_totalCarrito.Text = "" End Sub Sub llenaHistorial Dim rs_hist As ResultSet = Starter.skmt.ExecQuery($"Select h_idcompra, sum(h_costo_tot) as total, sum(h_cant) as cantidad, h_fecha from cat_hist_compras group by h_idcompra"$) If rs_hist.RowCount > 0 Then ' c_prods.Position = 0 ' l_total2.Text = c_prods.GetString("PE_COSTO_TOT") ' lv_historial.BringToFront Private cs As CSBuilder Do While rs_hist.NextRow ' Private rs_do As ResultSet = Starter.skmt.ExecQuery($"select * from CAT_HIST_COMPRAS where H_IDCOMPRA = '${rs_hist.GetString("H_IDCOMPRA")}'"$) cs.Initialize Dim Label1 As Label ' lv_historial.TwoLinesLayout.ItemHeight = 50dip Label1 = lv_historial.TwoLinesLayout.Label Label1.TextSize = 16 Label1.TextColor = Colors.red Label1.color = Colors.White Label1.Height = 30dip ' Private textColor As Int = Colors.black Dim label2 As Label label2 = lv_historial.TwoLinesLayout.SecondLabel label2.TextSize = 14 label2.TextColor = Colors.RGB(1,127,1) ' Do While rs_do.NextRow ' Log($"${rs_do.GetString("H_IDCOMPRA")}, ${rs_do.GetString("H_PRONOMBRE")}, ${rs_do.GetString("H_CANT")}"$) ' Loop Private fecha As String = rs_hist.GetString("H_FECHA") fecha = fecha.SubString2(1,10) lv_historial.AddTwoLines("Orden: " & rs_hist.GetString("H_IDCOMPRA"), $"Fecha: ${fecha}, Productos: ${rs_hist.GetString("cantidad")}, Total: $${NumberFormat2(rs_hist.GetString("total"), 1, 2, 2, True)}"$) ' totalPedido = totalPedido + (rs_hist.GetString("PE_COSTOU") * rs_hist.GetString("PE_CANT")) ' cantPedido = cantPedido + rs_hist.GetString("PE_CANT") Loop ' Private c As Cursor = Starter.skmt.ExecQuery("select pc_noart, pc_monto from PEDIDO_TICKET where pc_cliente in (Select CUENTA from cuentaa)") ' c.Position=0 '' l_cant.Text = c.GetString("PC_NOART") ' c.Close Else l_historialVacio.Visible = True l_historialVacio.Text = "No hay ordenes en tu historial." End If rs_hist.Close End Sub Sub CreateListItem(Text As String, cant As Int, precioU As String, inv As Int, Width As Int, Height As Int, img As Bitmap, prodId As String) As Panel 'ignore Dim p As B4XView = xui.CreatePanel("") Dim cs As CSBuilder cs.Initialize p.SetLayoutAnimated(0, 0, 0, Width, Height) p.LoadLayout("prodItemCarrito") ' i_prod.Bitmap = img l_prodX.TextSize = 15 p_prods.Height = Height p_prods.Width = Width - 10 ' Log($"${clv_carrito.AsView.Width}, ${Root.Width}, ${p_prods.Width}"$) p_botMasMen.Left = p_prods.Width - (p_botMasMen.Width - 75) l_prodX.Height = Height l_prodX.Text = Text&CRLF&"# " & inv & " $ " & precioU l_prodX.Text = cs.Color(Colors.red).append(Text).pop.append(CRLF).Color(0xFF017F01).Append($"Precio $${NumberFormat2(precioU, 1, 2, 2, True)}"$).Popall l_prodX.Tag = $"ID: ${prodId}${CRLF}${Text}${CRLF}Precio: $$1.2{precioU}${CRLF}Inv: ${inv} pzs"$ l_pCant.Tag = precioU&"|"&inv&"|"&prodId et_pCant.Tag = precioU&"|"&inv&"|"&prodId et_pCant.Text = cant et_pCant.BringToFront Return p End Sub Private Sub b_borrar_Click clv = clv_carrito ' Private buttonTag As String = Sender.As(Button).tag Dim index As Int = clv.GetItemFromView(Sender) Msgbox2Async("¿Seguro que deseas borrar este producto?", "Borrar Producto", "Si", "", "No", Null, False) Wait For Msgbox_Result (Result As Int) If Result = DialogResponse.POSITIVE Then LogColor("b_borrar_Click", Colors.Magenta) Private precio As String=clv.GetValue(index).As(Map).Get("precio") ' Private inv As Int = clv.GetValue(index).As(Map).Get("almacen") Dim pnl0 As B4XView = clv.GetPanel(index) Dim pnl As B4XView = pnl0.GetView(0) Dim laCant As B4XView = pnl.GetView(2).GetView(2) If WobbleMenu1.GetCurrentTab = 3 Then laCant = pnl.GetView(2).GetView(4) Log(laCant.text) laCant.Text = "0" Private id As String=clv.GetValue(index).As(Map).Get("id") ' Private almacenX As String = Subs.traeAlmacen Private nombreX As String = Subs.traeProdNombre(id) Private precioX As String = precio Subs.actualizaProducto(precioX, laCant.text, nombreX, id, Starter.ticketActual, Subs.traeFecha, Starter.meseroActual, Starter.mesaActual, 0, Starter.tipov, Starter.comensalesActuales) ' Log($"${almacenX}, ${precioX}, ${laCant.text}, ${nombreX}, ${id}, ${Starter.ticketActual}, ${Subs.traeFecha}, ${Subs.traeUsuarioDeBD}, ${rutaUsuario}, 0, ${Starter.tipov}"$) cuentaProds llenaCarrito End If End Sub Private Sub lv_historial_ItemClick (Position As Int, Value As Object) End Sub Private Sub clv_mesas_VisibleRangeChanged (FirstIndex As Int, LastIndex As Int) ' Log($"clv_mesa_VisibleRangeChanged : ${FirstIndex}, ${LastIndex} "$) Dim ExtraSize As Int = 30 'List size Private m As Map For i = Max(0, FirstIndex - ExtraSize) To Min(LastIndex + ExtraSize, clv_mesas.Size - 1) Dim Pnl As B4XView = clv_mesas.GetPanel(i) m = clv_mesas.GetValue(i) If i > FirstIndex - ExtraSize And i < LastIndex + ExtraSize Then If Pnl.NumberOfViews = 0 Then 'Add each item/layout to the list/main layout Pnl.LoadLayout("mesasItem") p_mesasItem.Width = Root.Width * 0.99 Private cs As CSBuilder cs.Initialize l_mesaX.SetTextSizeAnimated(0, 13) l_estatus.text = "DISPONIBLE" ' Log(m) If m.Get("estatus") = "ABIERTA" Then l_estatus.Text = "ABIERTA" ' Log(m) If l_estatus.text = "ABIERTA" Then l_mesaX.Text = cs.Color(Colors.red).Size(16).Append($"Mesa ${m.Get("id")}"$).pop.append(CRLF).Color(0xFF017F01).Append($"Comensales ${m.Get("comensales")}"$).Append(" - Mesero ").pop.Color(Colors.red).append(m.Get("mesero")).pop.append(CRLF).Color(Colors.black).Append($"Subtotal. $${NumberFormat2(m.Get("subtotal"), 1,2,2,True)} - Articulos: ${m.Get("articulos")}"$).Popall Else l_mesaX.Text = cs.Color(Colors.red).Size(16).Append($"Mesa ${m.Get("id")}"$).Popall End If l_mesaX.Tag = m p_mesasItem.Tag = m End If Else 'Not visible ' If Pnl.NumberOfViews > 0 Then ' Pnl.RemoveAllViews 'Remove none visable item/layouts from the list/main layout ' End If End If Next End Sub Sub LlenaMesas(p As ResultSet, extra As String) 'ignore Dim p As ResultSet = Starter.skmt.ExecQuery($"select *, IFNULL(M_ESTATUS, 'CERRADA') as ESTATUS2, IFNULL(M_MESERO, 'NINGUNO') as MESERO, IFNULL(M_COMENSALES, 0) as COMENSALES from cat_mesas"$) ' Dim p As ResultSet = Starter.skmt.ExecQuery($"Select *, IFNULL(M_ESTATUS, 'CERRADA') as ESTATUS2, IFNULL(M_MESERO, 'NINGUNO') as MESERO, IFNULL(M_COMENSALES, 0) as COMENSALES, M_TICKET, IFNULL(PT_MONTO, 0) as SUBTOTAL, IFNULL(PT_NOART, 0) as NO_ARTS from CAT_MESAS left join pedido_ticket on M_TICKET = pt_ticket and M_ID = PT_MESA"$) ' Log(p.RowCount) PCLVM.Commit clv_mesas.Clear Private m_mesas As Map m_mesas.Initialize Do While p.NextRow Private SUBTOTAL2 As String = "0" Private NO_ARTS2 As String = "0" ' Log(p.GetString("ESTATUS2")) If p.GetString("ESTATUS2") = "ABIERTA" Then ' Log($"PT_TICKET = '${p.GetString("M_TICKET")}' and PT_MESA = '${p.GetString("M_ID")}"$) Private pt As Cursor = Starter.skmt.ExecQuery($"select ifnull(sum(PT_MONTO),0) as SUBTOTAL, ifnull(sum(PT_NOART), 0) as NO_ARTS from PEDIDO_TICKET where PT_TICKET = '${p.GetString("M_TICKET")}' and PT_MESA = '${p.GetString("M_ID")}'"$) If pt.RowCount > 0 Then pt.Position = 0 SUBTOTAL2 = pt.GetString("SUBTOTAL") NO_ARTS2 = pt.GetString("NO_ARTS") End If End If ' Log($"${SUBTOTAL2}, ${NO_ARTS2}"$) Dim tempMap As Map = CreateMap("id":p.GetString("M_ID"), "numero":p.GetString("M_NUMERO"), "nombre":p.GetString("M_NOMBRE"), "zona":p.GetString("M_ZONA"), "ticket":p.GetString("M_TICKET"), "estatus":p.GetString("ESTATUS2"), "mesero":p.GetString("MESERO"), "comensales":p.GetString("COMENSALES"), "subtotal":SUBTOTAL2, "articulos":NO_ARTS2) ' m_mesas.Put(p.GetString("M_ID"), tempMap) Private Pnl As B4XView = xui.CreatePanel("") Pnl.SetLayoutAnimated(0, 0, 0, clv_mesas.AsView.Width, 70dip) clv_mesas.Add(Pnl, tempMap) listaHintsM.Add($"Mesa ${p.GetString("M_ID")}"$) Loop p.Close PCLVM.B4XSeekBar1.MaxValue = clv_mesas.Size PCLVM.B4XSeekBar1.MinValue = 0 PCLVM.B4XSeekBar1.Interval = clv_mesas.Size/20 PCLVM.B4XSeekBar1.Value = clv_mesas.Size PCLVM.B4XSeekBar1.Update reiniciarlistaProds = False End Sub 'Entramos a la mesa seleccionada. Private Sub p_mesasItem_Click Log(Sender.As(Panel).tag) Subs.panelVisible(p_mesa, 0, 0) Private m As Map = Sender.As(Panel).tag Starter.mesaActual = m.Get("id") Starter.meseroActual = m.Get("mesero") Starter.ticketActual = m.Get("ticket") Starter.comensalesActuales = m.Get("comensales") l_mesa.Text = $"MESA NO. ${m.Get("id")}"$ Log(m) b_mesaCerrar.Tag = m Starter.skmt.ExecNonQuery("delete from cuentaa") Starter.skmt.ExecNonQuery($"insert into cuentaa (cuenta) values ('${m.Get("ticket")}')"$) LlenaProdsLL(Null, Null) p_mesas.Visible = False cb_mesero.SelectedIndex = 0 cb_pago.SelectedIndex = 0 cb_comensales.SelectedIndex = 0 ' Private mesero As String = Subs.traeMesero(m.Get("id")) If m.Get("mesero") <> "NINGUNO" Then cb_mesero.SelectedIndex = cb_mesero.IndexOf(m.Get("mesero")) If m.Get("comensales") <> "0" Then cb_comensales.SelectedIndex = cb_comensales.IndexOf(m.Get("comensales")) ' Log(Subs.traeMesaEstatus(m.Get("id"))) If Subs.traeMesaEstatus(m.Get("id")) = "CERRADA" Then p_mesaCampos.Visible = True b_abrirMesa.Visible = True p_mesaAbierta.Visible = False Else p_mesaCampos.Visible = False b_abrirMesa.Visible = False p_mesaAbierta.Visible = True p_mesaAbierta.BringToFront l_meseroAbierta2.Text = m.Get("mesero") l_comensalesAbierta2.Text = m.Get("comensales") End If End Sub Private Sub b_abrirMesa_Click If cb_mesero.SelectedIndex <> 0 Then Private c As Cursor = Starter.skmt.ExecQuery($"select M_ESTATUS from CAT_MESAS where M_ID = '${Starter.mesaActual}' and M_ESTATUS = 'ABIERTA'"$) If c.RowCount > 0 Then Starter.skmt.ExecNonQuery($"update CAT_MESAS set M_MESERO = '${cb_mesero.SelectedItem}', M_COMENSALES = '${cb_comensales.SelectedItem}' where M_ID = '${Starter.mesaActual}'"$) Log($"update CAT_MESAS set M_MESERO = '${cb_mesero.SelectedItem}', M_COMENSALES = '${cb_comensales.SelectedItem}' where M_ID = '${Starter.mesaActual}'"$) Else Starter.ticketActual = Subs.traeConsecutivoTicket("ABIERTA", "PENDIENTE") Starter.skmt.ExecNonQuery($"update CAT_MESAS set M_TICKET = '${Subs.traeConsecutivoTicket("ABIERTA", "PENDIENTE")}', M_ESTATUS = 'ABIERTA', M_MESERO = '${cb_mesero.SelectedItem}', M_COMENSALES = '${cb_comensales.SelectedItem}' where M_ID = '${Starter.mesaActual}'"$) Log($"update CAT_MESAS set M_TICKET = '${Starter.ticketActual}', M_ESTATUS = 'ABIERTA', M_MESERO = '${cb_mesero.SelectedItem}', M_COMENSALES = '${cb_comensales.SelectedItem}' where M_ID = '${Starter.mesaActual}'"$) End If Starter.meseroActual = cb_mesero.SelectedItem Starter.comensalesActuales = cb_comensales.SelectedItem Starter.skmt.ExecNonQuery($"insert into usuarioa (usuario) values ('${cb_mesero.SelectedItem}')"$) LlenaProdsLL(Null, Null) l_comensalesAbierta2.Text = cb_comensales.SelectedItem l_meseroAbierta2.Text = cb_mesero.SelectedItem p_mesaCampos.Visible = False b_abrirMesa.Visible = False p_mesaAbierta.Visible = True Else ToastMessageShow("Es necesario seleccionar un mesero", False) End If End Sub Private Sub p_mesa_Click 'Para evitar que el clic en pantalla no se siga hacia atras End Sub Private Sub cb_comensales_SelectedIndexChanged (Index As Int) Log(Index) End Sub Private Sub cb_mesero_SelectedIndexChanged (Index As Int) Log(Index) End Sub Private Sub b_mesaCerrar_Click Log("Cerrar") Log(Sender.As(Button).tag) p_pago.BringToFront p_pago.Visible = True End Sub Private Sub b_mesaEditar_Click p_mesaCampos.Visible = True b_abrirMesa.Visible = True p_mesaAbierta.Visible = False End Sub Private Sub p_mesaAbierta_Click 'Para evitar que el clic en pantalla no se siga hacia atras End Sub Private Sub lv_categorias_ItemClick (Position As Int, Value As Object) End Sub Private Sub p_pago_Click 'Para evitar que el clic en pantalla no se siga hacia atras End Sub Private Sub b_pagoCerrar_Click p_pago.Visible = False If cb_pago.SelectedItem = "Efectivo" Then Private sigTicket As String = Subs.traeConsecutivoTicket("CERRADA", "EFECTIVO") Starter.skmt.ExecNonQuery($"update CAT_MESAS set M_PAGO = null, M_TICKET = null, M_ESTATUS = null, M_MESERO = null, M_COMENSALES = null where M_ID = '${Starter.mesaActual}'"$) Log($"update CAT_MESAS set M_PAGO = null, M_TICKET = null, M_ESTATUS = null, M_MESERO = null, M_COMENSALES = null where M_ID = '${Starter.mesaActual}'"$) Starter.skmt.ExecNonQuery($"update PEDIDO set PE_TIPO = 'EFECTIVO', PE_TICKET = '${sigTicket}' where PE_MESA = '${Starter.mesaActual}' and PE_TIPO = 'VENTA' and PE_TICKET = '${Starter.ticketActual}'"$) Log($"update PEDIDO set PE_TIPO = 'EFECTIVO', PE_TICKET = '${sigTicket}' where PE_MESA = '${Starter.mesaActual}' and PE_TIPO = 'VENTA' and PE_TICKET = '${Starter.ticketActual}'"$) Starter.skmt.ExecNonQuery($"update PEDIDO_TICKET set PT_PAGO = 'EFECTIVO', PT_TICKET = '${sigTicket}' where PT_MESA = '${Starter.mesaActual}' and PT_TICKET = '${Starter.ticketActual}' and PT_PAGO = 'VENTA'"$) Log($"update PEDIDO_TICKET set PT_PAGO = 'EFECTIVO', PT_TICKET = '${sigTicket}' where PT_MESA = '${Starter.mesaActual}' and PT_TICKET = '${Starter.ticketActual}' and PT_PAGO = 'VENTA"$) Else End If B4XPage_CloseRequest End Sub Private Sub cb_pago_SelectedIndexChanged (Index As Int) Log(cb_pago.SelectedItem) End Sub