From 120742c3012113ecafe5d3cfe53dfacac7911897 Mon Sep 17 00:00:00 2001 From: Jose Alberto Guerra Ugalde Date: Fri, 9 Feb 2024 04:03:52 -0600 Subject: [PATCH] Cierre administativo, cierre de mesa sin venta y envio de errores a push_info --- B4A/B4XMainPage.bas | 143 ++++++++- B4A/C_Principal.bas | 641 +++++++++++++++++++++---------------- B4A/DBRequestManager.bas | 98 +++++- B4A/Files/errormanager.bal | Bin 0 -> 4280 bytes B4A/Files/kmt.db | Bin 66560 -> 189440 bytes B4A/Files/login.bal | Bin 10599 -> 11250 bytes B4A/Files/principal.bal | Bin 28832 -> 28780 bytes B4A/Files/proditem.bal | Bin 5149 -> 5149 bytes B4A/MarketPlace.b4a | 50 +-- B4A/MarketPlace.b4a.meta | 10 +- B4A/Starter.bas | 14 +- B4A/Subs.bas | 127 +++++--- 12 files changed, 709 insertions(+), 374 deletions(-) create mode 100644 B4A/Files/errormanager.bal diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index 50286e6..bf4e07e 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -38,6 +38,13 @@ Sub Class_Globals Private Label1 As Label Private i_conf As ImageView Private b_cargaProductos As Button + Private ListView1 As ListView + Private E_SERVER As EditText + Dim reqManager As DBRequestManager + Private l_version As Label + Private p_botones As Panel + Private Label3 As Label + Private p_server As Panel End Sub Public Sub Initialize @@ -46,6 +53,7 @@ End Sub 'This event will be called once, before the page becomes visible. Private Sub B4XPage_Created (Root1 As B4XView) + Subs.revisaBD Root = Root1 Root.LoadLayout("login") login.Initialize @@ -63,17 +71,39 @@ Private Sub B4XPage_Created (Root1 As B4XView) Starter.skmt.ExecNonQuery("insert into cuentaa (cuenta) values ('123456')") Starter.skmt.ExecNonQuery("delete from cat_almacen") Starter.skmt.ExecNonQuery("insert into cat_almacen (id_almacen) values ('1')") + l_version.Text = Application.VersionName + p_configuracion.Height = Root.Height : p_configuracion.width = Root.width + reqManager.Initialize(Me, Starter.DBReqServer) + Subs.centraEtiqueta(Label3, p_configuracion.Width) + Subs.centraPanel(p_server, p_configuracion.Width) + Subs.centraPanel(p_botones, p_configuracion.Width) +' subs.panelVisible(p_configuracion, 0, 0) +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + ' BACK key pressed + 'Return True to close, False to cancel + Log("BACK") + If p_configuracion.Visible Then + p_configuracion.Visible = False + Return False + Else +' If logger Then Log("Saliendo") +' B4XPages.ClosePage(Me) +' Subs.cierraActividades +' Return True + End If + Return False End Sub 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. Private Sub i_logo_Click - p_configuracion.Width = Root.Width - p_configuracion.Height = Root.Height - Subs.panelVisible(p_configuracion, 0, 0) + End Sub Private Sub b_regresar_Click + p_configuracion.Visible = False Subs.panelVisible(p_login, 0, 0) End Sub @@ -82,7 +112,8 @@ Private Sub b_entrar_Click End Sub Private Sub B_SERVER_Click - + Starter.DBReqServer = E_SERVER.text + p_configuracion.Visible = False End Sub Private Sub b_envioBD_Click @@ -90,9 +121,111 @@ Private Sub b_envioBD_Click End Sub Private Sub i_conf_Click - + ListView1.Clear + Dim Label1 As Label + Label1 = ListView1.SingleLineLayout.Label + Label1.TextSize = 20 + Label1.TextColor = Colors.Black +' If user.Text = "KMTS1" Then ListView1.AddSingleLine("http://10.0.0.205:1781") + ListView1.AddSingleLine("http://keymon.lat:1782") + p_configuracion.Width = Root.Width + p_configuracion.Height = Root.Height + p_configuracion.BringToFront + Subs.panelVisible(p_configuracion, 0, 0) End Sub Private Sub b_cargaProductos_Click + Log(Starter.DBReqServer) +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "select_cat_gunaprod_GV2" +' cmd.Parameters = Array As Object(1) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprod") + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "selectProds_Lanter" + reqManager.ExecuteQuery(cmd , 0, "selectProds") + cmd.Initialize + cmd.Name = "selectMesas_Lanter" + reqManager.ExecuteQuery(cmd , 0, "selectMesas") + + cmd.Initialize + cmd.Name = "selectMeseros_Lanter" + reqManager.ExecuteQuery(cmd , 0, "selectMeseros") +End Sub + +Private Sub ListView1_ItemClick (Position As Int, Value As Object) + Starter.DBReqServer = Value + E_SERVER.Text = Value + Log(Starter.DBReqServer) +End Sub + +Sub JobDone(Job As HttpJob) + Log("JOBDONE MAINPAGE") + If Job.Tag.As(String).StartsWith("_KMS_") Then Job.tag = Job.Tag.As(String).SubString(16) + 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 = "selectProds" Then 'query tag +' If Starter.Logger Then Subs.logJobDoneResultados(result) + Starter.skmt.ExecNonQuery("delete from cat_gunaprod") + 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 = 10000 'records(result.Columns.Get("CAT_GP_ALMACEN")) + 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_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_GP_IMG,CAT_GP_FECHA,CAT_GP_FECHA_MOD,CAT_GP_CLASIF)) + Next + Starter.skmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!! + Starter.skmt.EndTransaction + End If + + If result.Tag = "selectMesas" Then 'query tag +' If Starter.Logger Then Subs.logJobDoneResultados(result) + Starter.skmt.ExecNonQuery("delete from CAT_MESAS") + Starter.skmt.BeginTransaction + For Each records() As Object In result.Rows + Log($"ID: ${records(result.Columns.Get("M_ID"))}, NOM: ${records(result.Columns.Get("M_NOMBRE"))}"$) + Dim M_ID As String = records(result.Columns.Get("M_ID")) + Dim M_NOMBRE As String = records(result.Columns.Get("M_NOMBRE")) + Dim M_NUMERO As String = records(result.Columns.Get("M_NUMERO")) + Dim M_ZONA As String = records(result.Columns.Get("M_ZONA")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_MESAS(M_ID, M_NUMERO, M_NOMBRE, M_ZONA) VALUES (?,?,?,?)", Array As Object (M_ID, M_NUMERO, M_NOMBRE, M_ZONA)) + Next + Starter.skmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!! + Starter.skmt.EndTransaction + End If + + If result.Tag = "selectMeseros" Then 'query tag +' If Starter.Logger Then Subs.logJobDoneResultados(result) + Starter.skmt.ExecNonQuery("delete from CAT_MESEROS") + Starter.skmt.BeginTransaction + For Each records() As Object In result.Rows + Log($"ID: ${records(result.Columns.Get("MS_ID"))}, NOM: ${records(result.Columns.Get("MS_NOMBRE"))}"$) + Dim MS_ID As String = records(result.Columns.Get("MS_ID")) + Dim MS_NOMBRE As String = records(result.Columns.Get("MS_NOMBRE")) + Dim MS_MESAS_ASIGNADAS As String = records(result.Columns.Get("MS_MESAS_ASIGNADAS")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_MESEROS(MS_ID, MS_NOMBRE, MS_MESAS_ASIGNADAS) VALUES (?,?,?)", Array As Object (MS_ID, MS_NOMBRE, MS_MESAS_ASIGNADAS)) + Next + Starter.skmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!! + Starter.skmt.EndTransaction + B4XPages.MainPage.principal.cb_mesero.SetItems(Subs.traeMeserosLista) + End If + End If + End If + Job.Release +End Sub + +Private Sub b_entrar_LongClick + Dim a As Int = "a" End Sub \ No newline at end of file diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index 0afd2d1..6c5776e 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -10,14 +10,14 @@ Sub Class_Globals 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 + Private p_meseros As Panel + Private clv_prods_ll, clv As CustomListView Dim prodsMap As Map - Private p_botonesVenta As Panel +' Private p_botonesVenta As Panel Private b_continuar As Button Private lfila As Label - Private et_busca As EditText - Private b_buscar As Button +' 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 @@ -35,26 +35,21 @@ Sub Class_Globals 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 + Dim 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 + Dim cb_mesero As B4XComboBox Private l_mesero As Label Private l_comensales As Label Private l_pago As Label @@ -70,8 +65,18 @@ Sub Class_Globals Private p_pago As Panel Private Label1 As Label Private b_pagoCerrar As Button + Dim reqManager As DBRequestManager + Private b_cierraAdmin As Button + Private b_cierreTotal As Button + Private p_cierreAdmin As Panel + Private et_inicioDia As EditText + Private l_inicioDia As Label + Private l_cierreAdmin As Label + Dim p_transparenteCierreAdmin As Panel + Private cd1 As ColorDrawable + Private p_botonesCierre As Panel End Sub - + 'You can add more parameters here. Public Sub Initialize As Object Return Me @@ -91,30 +96,26 @@ Private Sub B4XPage_Created (Root1 As B4XView) 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(1,"Mesas", Chr(0xF00A), Typeface.FONTAWESOME) + WobbleMenu1.SetTabTextIcon(2,"Meseros", Chr(0xF0C0), Typeface.FONTAWESOME) + WobbleMenu1.SetTabTextIcon(3,"Ordenes", Chr(0xF155), 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_meseros.Width = Root.Width + p_meseros.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 + p_transparenteCierreAdmin.Height = Root.Height : p_transparenteCierreAdmin.Width = Root.Width + p_transparenteCierreAdmin.Top = 0 : p_transparenteCierreAdmin.left = 0 +' p_botonesVenta.Top = Root.Height - p_botonesVenta.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 @@ -123,31 +124,37 @@ Private Sub B4XPage_Created (Root1 As B4XView) ' 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" + lv_historial.Height = Root.Height * 0.7 + p_botonesCierre.Top = lv_historial.Top + lv_historial.Height + 20dip + Subs.centraPanel(p_botonesCierre, p_historial.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) +' Log(p_meseros.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_pago.SetItems(Array As String("Tarjeta","Efectivo")) cb_mesero.SetItems(Subs.traeMeserosLista) + + End Sub Sub B4XPage_Appear + reqManager.Initialize(Me, Starter.DBReqServer) ' ticketId = Subs.traeTicket ' rutaUsuario = Subs.traeMesa ' Log($"${clv_carrito.AsView.Width}, ${Root.Width}"$) @@ -184,69 +191,36 @@ Sub B4XPage_Appear 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 ="" + p_meseros.Height = Root.Height - WobbleMenu1.Height +' If et_busca.Text <> "" Then et_busca.Text ="" + If p_mesas.Visible And Subs.revisaCierreAdmin Then p_transparenteCierreAdmin.Visible = True Else p_transparenteCierreAdmin.Visible = False 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 + If Subs.revisaCierreAdmin Then p_transparenteCierreAdmin.Visible = True Else p_transparenteCierreAdmin.Visible = False 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 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 +' If WobbleMenu1.GetCurrentTab = 3 Then clv = clv_carrito Else clv = clv_prods_ll + 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) @@ -256,7 +230,7 @@ Sub b_prodMenos_Click 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) + Dim laCant As B4XView = pnl.GetView(2).GetView(4) 'et_pCant ' Log(pnl.GetView(0).NumberOfViews) Dim elNombre As B4XView = pnl.GetView(1) If WobbleMenu1.GetCurrentTab = 3 Then laCant = pnl.GetView(2).GetView(4) @@ -299,13 +273,14 @@ End Sub Sub b_prodMas_Click etCantHasFocus = False - If WobbleMenu1.GetCurrentTab = 3 Then clv = clv_carrito Else clv = clv_prods_ll +' If WobbleMenu1.GetCurrentTab = 3 Then clv = clv_carrito Else clv = clv_prods_ll + 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 laCant As B4XView = pnl.GetView(2).GetView(4) 'et_pCant 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)}"$) @@ -322,7 +297,7 @@ Sub b_prodMas_Click 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 + else If laCant.Text + 1 <= inv Then ' LogColor(inv, Colors.blue) laCant.Text = $"$1.0{laCant.Text + 1}"$ Log(Subs.totalPedido) @@ -350,8 +325,8 @@ Sub cuentaProds 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 +' p_botonesVenta.Visible = True +' p_botonesVenta.BringToFront c.Position=0 ' Log(Subs.totalPedido) Private cant0 As String = "0" @@ -360,11 +335,13 @@ Sub cuentaProds 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") + Private p As Cursor = Starter.skmt.ExecQuery("select count(PT_TICKET) as ordenes from PEDIDO_TICKET where PT_PAGO <> 'VENTA'") + p.Position = 0 ' Log($"Total Prods: ${cant0}, Total Compra: $$1.2{total0}"$) - l_totalCarrito.text = $"Total: $${NumberFormat2(total0,1,2,2,True)}"$ +' 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) + If Subs.hayPedido Then WobbleMenu1.SetBadge(3, p.GetString("ordenes"), Colors.white, Colors.red) Else WobbleMenu1.RemoveBadge(3) End Sub Sub LlenaProdsLL(p As ResultSet, extra As String) @@ -516,99 +493,99 @@ Private Sub clv_prods_ll_VisibleRangeChanged (FirstIndex As Int, LastIndex As In 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 +'' 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 +' 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. @@ -625,13 +602,14 @@ End Sub 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. Private Sub WobbleMenu1_Tab1Click + If Subs.revisaCierreAdmin Then p_transparenteCierreAdmin.Visible = True Else p_transparenteCierreAdmin.Visible = False 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_meseros.Visible = False +' p_carrito.Visible = False p_historial.Visible = False p_mesa.Visible = False End Sub @@ -641,45 +619,54 @@ Private Sub WobbleMenu1_Tab2Click PCLVM.B4XSeekBar1.mBase.Visible = False PCLV.B4XSeekBar1.mBase.BringToFront PCLV.B4XSeekBar1.mBase.Visible = True - Subs.panelVisible(p_productos, 0, 0) + Subs.panelVisible(p_meseros, 0, 0) p_mesas.Visible = False - p_carrito.Visible = False +' p_carrito.Visible = False + p_transparenteCierreAdmin.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_meseros.Visible = False +' p_carrito.Visible = False p_mesas.Visible = False p_mesa.Visible = False + p_transparenteCierreAdmin.Visible = False + If Subs.revisaCierreAdmin Then + cd1.Initialize(Colors.gray, 10dip) + b_cierraAdmin.Background = cd1 + Else + cd1.Initialize(Colors.red, 10dip) + b_cierraAdmin.Background = cd1 + End If llenaHistorial End Sub +'Private Sub WobbleMenu1_Tab4Click +' PCLVM.B4XSeekBar1.mBase.Visible = False +' PCLV.B4XSeekBar1.mBase.Visible = False +' Subs.panelVisible(p_carrito, 0, 0) +' p_carrito.BringToFront +'' p_carrito.BringToFront +' p_meseros.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 b_continuar_Click WobbleMenu1.SetCurrentTab(2) End Sub -Private Sub p_botonesVenta_Click - -End Sub +'Private Sub p_botonesVenta_Click +' +'End Sub Private Sub lv_promos_ItemClick (Position As Int, Value As Object) @@ -697,10 +684,10 @@ 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_buscar_Click +' forzarBusqueda = True +' et_busca_TextChanged("",et_busca.Text) +'End Sub Private Sub b_terminar_Click DateTime.DateFormat= $"yyMMdd-HHmmss-${Starter.ticketActual}"$ @@ -708,22 +695,25 @@ Private Sub b_terminar_Click 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 +' 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 = "" +' 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"$) + Dim rs_hist As ResultSet = Starter.skmt.ExecQuery($"Select * from pedido_ticket where PT_PAGO <> 'VENTA' order by PT_PAGO, PT_TICKET"$) If rs_hist.RowCount > 0 Then -' c_prods.Position = 0 -' l_total2.Text = c_prods.GetString("PE_COSTO_TOT") -' lv_historial.BringToFront +' c_prods.Position = 0 +' l_total2.Text = c_prods.GetString("PE_COSTO_TOT") +' lv_historial.BringToFront + l_historialVacio.Visible = False Private cs As CSBuilder + lv_historial.Clear + lv_historial.Visible = True 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 @@ -731,7 +721,9 @@ Sub llenaHistorial ' lv_historial.TwoLinesLayout.ItemHeight = 50dip Label1 = lv_historial.TwoLinesLayout.Label Label1.TextSize = 16 - Label1.TextColor = Colors.red +' Label1.TextColor = Colors.red + Private elColor As Int = Colors.Red + If rs_hist.GetString("PT_PAGO") = "TARJETA" Then elColor = Colors.RGB(0,0,122) Label1.color = Colors.White Label1.Height = 30dip ' Private textColor As Int = Colors.black @@ -742,9 +734,9 @@ Sub llenaHistorial ' 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") + Private fecha As String = rs_hist.GetString("PT_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)}"$) + lv_historial.AddTwoLines(cs.Color(elColor).Append("Orden: " & rs_hist.GetString("PT_TICKET") & " - Mesa: " & rs_hist.GetString("PT_MESA")).PopAll, $"Fecha: ${fecha}, Productos: ${rs_hist.GetString("PT_NOART")}, Total: $${NumberFormat2(rs_hist.GetString("PT_MONTO"), 1, 2, 2, True)}"$) ' totalPedido = totalPedido + (rs_hist.GetString("PE_COSTOU") * rs_hist.GetString("PE_CANT")) ' cantPedido = cantPedido + rs_hist.GetString("PE_CANT") Loop @@ -753,60 +745,103 @@ Sub llenaHistorial '' l_cant.Text = c.GetString("PC_NOART") ' c.Close Else + lv_historial.Visible = False l_historialVacio.Visible = True l_historialVacio.Text = "No hay ordenes en tu historial." End If rs_hist.Close End Sub +Sub llenaHistorial_old +' 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 +' 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 +' 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) @@ -848,6 +883,10 @@ Private Sub clv_mesas_VisibleRangeChanged (FirstIndex As Int, LastIndex As Int) End Sub Sub LlenaMesas(p As ResultSet, extra As String) 'ignore + Private o As Cursor = Starter.skmt.ExecQuery("select count(PT_TICKET) as ordenes from PEDIDO_TICKET where PT_PAGO <> 'VENTA'") + o.Position = 0 + If o.GetInt("ordenes") > 0 Then WobbleMenu1.SetBadge(3, o.GetInt("ordenes"), Colors.white, Colors.red) Else WobbleMenu1.RemoveBadge(3) + 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"$) @@ -862,7 +901,7 @@ Sub LlenaMesas(p As ResultSet, extra As String) 'ignore ' 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")}'"$) + 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")}' and PT_PAGO = 'VENTA'"$) If pt.RowCount > 0 Then pt.Position = 0 SUBTOTAL2 = pt.GetString("SUBTOTAL") @@ -886,9 +925,11 @@ Sub LlenaMesas(p As ResultSet, extra As String) 'ignore reiniciarlistaProds = False End Sub + 'Entramos a la mesa seleccionada. Private Sub p_mesasItem_Click Log(Sender.As(Panel).tag) + b_abrirMesa.Text = "Abrir Mesa" Subs.panelVisible(p_mesa, 0, 0) Private m As Map = Sender.As(Panel).tag Starter.mesaActual = m.Get("id") @@ -961,13 +1002,20 @@ Private Sub cb_mesero_SelectedIndexChanged (Index As Int) End Sub Private Sub b_mesaCerrar_Click - Log("Cerrar") - Log(Sender.As(Button).tag) - p_pago.BringToFront - p_pago.Visible = True +' Log("Cerrar") + Private c As Cursor = Starter.skmt.ExecQuery($"select PE_MESA from PEDIDO where PE_MESA = '${Starter.mesaActual}' and PE_TIPO = 'VENTA'"$) + If c.RowCount > 0 Then + Log(Sender.As(Button).tag) + p_pago.BringToFront + p_pago.Visible = True + Else + 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}'"$) + B4XPage_CloseRequest + End If End Sub Private Sub b_mesaEditar_Click + b_abrirMesa.Text = "Guardar" p_mesaCampos.Visible = True b_abrirMesa.Visible = True p_mesaAbierta.Visible = False @@ -988,19 +1036,60 @@ 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"$) + Private tipoPago As String = "EFECTIVO" Else - + 'Pago con tarjeta + Private tipoPago As String = "TARJETA" End If + Private sigTicket As String = Subs.traeConsecutivoTicket("CERRADA", tipoPago) + 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 = '${tipoPago}', PE_TICKET = '${sigTicket}' where PE_MESA = '${Starter.mesaActual}' and PE_TIPO = 'VENTA' and PE_TICKET = '${Starter.ticketActual}'"$) +' Log($"update PEDIDO set PE_TIPO = '${tipoPago}', 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 = '${tipoPago}', PT_TICKET = '${sigTicket}' where PT_MESA = '${Starter.mesaActual}' and PT_TICKET = '${Starter.ticketActual}' and PT_PAGO = 'VENTA'"$) +' Log($"update PEDIDO_TICKET set PT_PAGO = '${tipoPago}', PT_TICKET = '${sigTicket}' where PT_MESA = '${Starter.mesaActual}' and PT_TICKET = '${Starter.ticketActual}' and PT_PAGO = 'VENTA"$) B4XPage_CloseRequest End Sub Private Sub cb_pago_SelectedIndexChanged (Index As Int) Log(cb_pago.SelectedItem) +End Sub + +Private Sub b_cierraAdmin_Click + Private c As Cursor = Starter.skmt.ExecQuery($"select M_ESTATUS from CAT_MESAS where M_ESTATUS = 'ABIERTA'"$) + Log(c.RowCount) + If c.RowCount = 0 Then + cd1.Initialize(Colors.gray, 10dip) + b_cierraAdmin.Background = cd1 + ToastMessageShow("¡Cierre administrativo habilitado!", False) + Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("CIERRE ADMIN")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("CIERRE ADMIN","1")) + Else + ToastMessageShow("¡Es necesario que NO haya mesas abiertas para realizar el cierre!", True) + End If +End Sub + +Private Sub b_cierraAdmin_LongClick + Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("CIERRE ADMIN")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("CIERRE ADMIN","0")) + cd1.Initialize(Colors.red, 10dip) + b_cierraAdmin.Background = cd1 + ToastMessageShow("¡Cierre administrativo cancelado!", False) +End Sub + +Private Sub b_cierreTotal_Click + +End Sub + +Private Sub et_inicioDia_EnterPressed + If et_inicioDia.Text.trim = "INICIO DIA" Then + p_transparenteCierreAdmin.Visible = False + et_inicioDia.Text = "" + Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("CIERRE ADMIN")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("CIERRE ADMIN","0")) + End If +End Sub + +Private Sub p_transparenteCierreAdmin_Click + 'Para evitar que el clic en pantalla no se siga hacia atras End Sub \ No newline at end of file diff --git a/B4A/DBRequestManager.bas b/B4A/DBRequestManager.bas index cda673d..c14262f 100644 --- a/B4A/DBRequestManager.bas +++ b/B4A/DBRequestManager.bas @@ -4,9 +4,7 @@ ModulesStructureVersion=1 Type=Class Version=6.8 @EndOfDesignText@ -'Necesita la libreria RandomAccessFile - -'Class module +''Class module Sub Class_Globals Private mTarget As Object Type DBResult (Tag As Object, Columns As Map, Rows As List) @@ -17,8 +15,11 @@ Sub Class_Globals ,T_DOUBLE = 6, T_BOOLEAN = 7, T_BLOB = 8 As Byte Private VERSION As Float = 0.9 Private tempArray(1) As Object - Dim jobTagAnterior As String = "" 'Mod por CHV - 211027 - Dim logger As Boolean = False + Dim jobTagAnterior As String = "" 'Mod por CHV - 211109 + Dim reqsList, timesList As List + Dim inicioRequest As Long 'ignore + Dim inicioJobDone As Long 'ignore + Dim inicioRequestMap, inicioJobDoneMap As Map End Sub 'Target - The module that handles JobDone (usually Me). @@ -35,8 +36,10 @@ End Sub Public Sub ExecuteQuery(Command As DBCommand, Limit As Int, Tag As Object) Dim j As HttpJob Dim ms As OutputStream - Dim out2 As OutputStream = StartJob(j,ms, Tag) - + Dim out2 As OutputStream = StartJob(j, ms, Tag) +' If reqsList.IsInitialized Then reqsList.Add(Tag) +' If timesList.IsInitialized Then timesList.Add(DateTime.now) + WriteObject(Command.Name, out2) WriteInt(Limit, out2) WriteList(Command.Parameters, out2) @@ -50,7 +53,7 @@ End Sub Public Sub ExecuteBatch(ListOfCommands As List, Tag As Object) Dim j As HttpJob Dim ms As OutputStream - Dim out2 As OutputStream = StartJob(j,ms, Tag) + Dim out2 As OutputStream = StartJob(j, ms, Tag) WriteInt(ListOfCommands.Size, out2) For Each Command As DBCommand In ListOfCommands WriteObject(Command.Name, out2) @@ -62,10 +65,15 @@ End Sub 'Similar to ExecuteBatch. Sends a single command. Public Sub ExecuteCommand(Command As DBCommand, Tag As Object) +' If reqsList.IsInitialized Then reqsList.Add(Tag) +' If timesList.IsInitialized Then timesList.Add(DateTime.now) ExecuteBatch(Array As DBCommand(Command), Tag) End Sub Private Sub StartJob(j As HttpJob, MemoryStream As OutputStream, Tag As Object) As OutputStream +' inicioRequest = DateTime.now + If reqsList.IsInitialized Then reqsList.Add(Tag) + If timesList.IsInitialized Then timesList.Add(DateTime.now) j.Initialize("DBRequest", mTarget) j.Tag = Tag MemoryStream.InitializeToBytesArray(0) @@ -116,7 +124,7 @@ Private Sub WriteObject(o As Object, out As OutputStream) Else If GetType(tempArray(0)) = "[B" Then data = o out.WriteBytes(Array As Byte(T_BLOB), 0, 1) - WriteInt(data.Length, out) + WriteInt(data.Length, out) Else 'If o Is String Then (treat all other values as string) out.WriteBytes(Array As Byte(T_STRING), 0, 1) data = bc.StringToBytes(o, "UTF8") @@ -189,10 +197,15 @@ End Sub 'Handles the Job result and returns a DBResult. Public Sub HandleJob(Job As HttpJob) As DBResult -' Dim start As Long = DateTime.Now + If jobTagAnterior <> Job.Tag Then +' inicioJobDone = DateTime.Now 'ignore + If inicioJobDoneMap.IsInitialized Then inicioJobDoneMap.Put(Job.Tag, DateTime.Now) +' tiempos.Put(Job.taskId, CreateMap("inicioJobDone":inicioJobDone)) +' Log(tiempos) +' Log("############# " & Job.taskId) + End If Dim In As InputStream = Job.GetInputStream Dim cs As CompressedStreams - If Starter.Logger Then logger = Starter.Logger In = cs.WrapInputStream(In, "gzip") Dim serverVersion As Float = ReadObject(In) 'ignore Dim method As String = ReadObject(In) @@ -201,8 +214,6 @@ Public Sub HandleJob(Job As HttpJob) As DBResult table.Columns.Initialize table.rows.Initialize table.Tag = Job.Tag - If jobTagAnterior <> Job.Tag Then LogColor("HandleJob: '"&Job.Tag&"'", Colors.Blue) 'Mod por CHV - 211023 - jobTagAnterior = Job.Tag 'Mod por CHV - 211023 If method = "query" Then Dim numberOfColumns As Int = ReadInt(In) For i = 0 To numberOfColumns - 1 @@ -224,9 +235,14 @@ Public Sub HandleJob(Job As HttpJob) As DBResult Next End If In.Close -' Log("HandleJob: " & (DateTime.Now - start)) +' Log("HandleJob: " & (DateTime.Now - start))'Comentado por CHV - 211112 + If jobTagAnterior <> table.Tag Then + LogColor("HandleJob: '"&table.Tag&"'" & " - Registros: " & table.Rows.Size, Colors.RGB(115, 0, 140)) 'Mod por CHV - 211109 + End If + jobTagAnterior = table.Tag 'Mod por CHV - 211109 Return table End Sub + 'Reads a file and returns the file as a bytes array. Public Sub FileToBytes(Dir As String, FileName As String) As Byte() Dim out As OutputStream @@ -270,8 +286,58 @@ Public Sub PrintTable(Table As DBResult) For Each record As Object In row sb.Append(record).Append(TAB) Next - ToastMessageShow(sb.ToString, True) + Log(sb.ToString) Next End Sub - \ No newline at end of file +Sub requestTimes(tag As String) As Map 'ignore + Private times As Map + times.Initialize +' Log("###### " & tag) +' Log(reqsList.IsInitialized) + If reqsList.IsInitialized Then +' Log(reqsList) +' Private pos As Int = reqsList.IndexOf(tag) + If inicioRequestMap.ContainsKey(tag) Then + inicioRequest = inicioRequestMap.Get(tag) +' Log(">>>>>>> From inicioRequestMap") + End If + If inicioJobDoneMap.ContainsKey(tag) Then + inicioJobDone = inicioJobDoneMap.Get(tag) +' Log(">>>>>>> From inicioJobDoneMap") + End If + End If +' Log($"${inicioJobDone} - ${inicioRequest}"$) + Private requestTime As String = NumberFormat2(((inicioJobDone - inicioRequest) / 1000),1,5,0,False) + Private JobDoneTime As String = NumberFormat2(((DateTime.Now - inicioJobDone) / 1000),1,5,0,False) + times.Put("requestTime", requestTime) + times.Put("jobDoneTime", JobDoneTime) + times.Put("totalTime", NumberFormat2((JobDoneTime + requestTime),1,5,0,False)) + Return times +End Sub + +'Initializes request tracking +Sub trackInit 'ignore + Log(">>>>>>>>> TRACKINIT ") + reqsList.Initialize + timesList.Initialize + inicioRequestMap.Initialize + inicioJobDoneMap.Initialize +End Sub + +Sub trackNext(job As HttpJob) + If reqsList.IsInitialized Then 'Si tenemos lista de requests, la procesamos. + Private quitamos As String = "" + If reqsList.IndexOf(job.tag) <> -1 Then + Private pos As Int = reqsList.IndexOf(job.tag) + If pos <> -1 Then + inicioRequestMap.Put(job.Tag, timesList.Get(pos)) + reqsList.RemoveAt(pos) + timesList.RemoveAt(pos) + End If + quitamos = $"Quitamos ${job.tag} - "$ + End If + LogColor(">>>>>> Requests: " & reqsList.Size & " - " & quitamos & reqsList, Colors.Blue) + LogColor(">>>>>> inicioRequestMap:" & inicioRequestMap.Size & " - " & inicioRequestMap, Colors.Magenta) + End If +End Sub \ No newline at end of file diff --git a/B4A/Files/errormanager.bal b/B4A/Files/errormanager.bal new file mode 100644 index 0000000000000000000000000000000000000000..50d6f7373b0d11e3d8905266c93188303a8d694f GIT binary patch literal 4280 zcmd5;Piz!r6rYvd$_ff!Gi}+)Zg#T&g^cx6&o&2^3A^QeeZkU zd%ySl-fT+Kv>y|i_5glYVl2hT8G%)^f-{_Fqsa+RuT+$GKXj85zHVFILtNfp4FcDx zFLpo^DwaVqCJfgJET^h_^lDE8R#3Iw2f3}FPb#~ANyf@hr!%D!NVIer?R~T-$yGayAslEj3d=fVnl4%zzJ)mghdamtZ6@7)m5F8QRi6 zBcm4{y}U_gkc43c2A^{n8{X#*`dcD7TTv|D z7)~AXR$W=sscvnWUfpx+_POax7tG$DwsfuS`f~i@)zhC(U7Efy@Wqzy?tzQn{hYXZ zTDx-ccYS4F=X=XW&+odq^ZaMyuWjyH*IoML)vnu}@BVRl_iy)U#_`MFe2l}7VK4#1 zFP*8V#~|e=b>A|wdF5Nvj`FfcRG>$-W$FR!+7YoV+eRUka##e^->#af zWCgZZzM}LKI-GeU(Qr1A9=0V`0tr*OZ=eb@+IT>5e=oQ;Cbi?}ovcsdq zMxrMNYL;&yRmM}(Jxh0j?L5U+QvvA`xE1=HvCN>%Q_ISlE(hFL)*Ykl%B`t|A`SPx zX_-Fxx4j#$c9jvL&$|LU+E_>6hIpQ^g7Tp2p}>B$K+aCOo~b-Zr!hUja0#R#8%A~0 zs``Szt!h$cW}qAv*_?CfxKhzg({iR4NbFDDkLT93ERjJ-qRu(bDi>uE2`#c$^#B+{H$NYTv|oXw>G2k>#Ms2Zd<# zyOR;d&6CNrJ0xt*^Bec(Hue#JvSR@NwJkrO23%MN6~RdDeA|-=wgqpWQbA;g@itrTNP) zpN?94;v=ZIhYBstD=X{tOq@Gr|NMIvzgm(9r&(CWmXh9|N|0pYi$KaM^Gh>vl2QZ~ zG5siBofzV86@*k`HQr0udlDvIU6H^`BpOyu1fnbnuzA-rK|t#KdBp=Tg8 zGTIoanb8v%9Zcs*4Dl4^*!Stpo=AgVEx8FVZqV4$QwhoaX^3$s65Lg21c3~MI1_<_ z#=RKJ1rNd&;}K^XrxW5KiPL2R7)(N7D9HK%qL#D2f)Ga&d!pT3V900zW($Nx0)yhW z0@DW{>3+PLfZ2*^mU@!32!oSDTX8kD-c6UI_cA{E!O zwR_NEqp&P<0VDPAJ>&>X_F#0(-nnxpz8H7wAz{TCRO70|j93b_FyaFU!bZl~$_Q{p zo+RH*JtU9m|BMk||IpKes1oESpX4GL@%D%7Tlb5Tc8n-uWiBHY{GOOFz8fRx@GguP lfl1sL<*RZOn#D6BAr)s(4MxyYOsT~&0z2z%bRkL8{sAS`YmEQ^ literal 0 HcmV?d00001 diff --git a/B4A/Files/kmt.db b/B4A/Files/kmt.db index 6d9dc455b1e7890542b1ee7c4c9b78d30cd518c9..13a91e3119ebef75bb4ccb2ced92507e7e12a56b 100644 GIT binary patch literal 189440 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 pGmG~?ReFcv|JvVwYOM>RJ_r9dbM$jIs`9B6(} zMU|d(R^XSNN-ab*IaF%T^*wuY$B*kTlWNtX8lVs${yQR7h*QlecE>7FMNvds`B`Ic z?$|N?25n=__G5%B`m;x3#fZ=@5=(PKH$hzYS(Bnd=&g3^;BvMMmwXW}CojR}*m=0*CgC#vNw^%y!DZi5qi}^uul^JQ3V|U+K+XRl>~z&+ zg#bf9&3`o%6avGGfSUiq+xM#F3V~7MJ6gtgT{B)c-d1QR1QY_lL^rarVr~z?s(a@uA-Ug!i7R%hRpwc+NuWs zzODVYzO28U`41yD{@D25`%@yN^jVLY-TP6Gt?$j|PM_90$Eben16MlU+n>$l^Ll3@ zDX)q`P|AV6GQhgaZfL)xRg>eW^0A8QPKl|XXuOb}(DU0LKbXZj&IeRSgj2m29cMN0 zOEyXqTX#_&1hqp>nQIwKo7afg85P78`@sus~OP2 z|I~QL_^R>O#&?bH?zTsuYL7zT2|(bf5o7Gxc`NX$=uaIZ0T?1JSw_+7GJH^y=WifvkQ58Vy?iWArPmj^G^MR6ah0 z5E6GIf^xYp9p2Q0p07`2bI(4jclMKpF142Ho6W8JYwhmcnAFrR-JDw5TyAbHG5$-N z5S83-Y_dQ;%8_~Sn{;O4nYgk+XCeH4OyW&u2T)-itSrM!VBGGmtbvgqwT**&FmuW) z`9FDDs*6HkC=pQee<-_MHCiD+5K!}94FrY2@FJk*|M2#`YPmu{nE&H|hOwIv0kL7i;kvoF%N(V|jm?*u?M4qTPL=s_s?3v9WxmzMvgqyia=VVDTlbd| zPr;SuRvUZY^*GKccft?MoluznyJ_mHwkQM?0y{te&;Jp9T+_!hcII!5+r|$&<}*ZN zvrP>pxPB^1ZYCsELqY~E#>VP$qOLe=E^V||Hxi44<*oa-rSQGR<`TC_SXvhKAIq2SNVrz{{-jH!v$z2-9+90+cKeSlI%F zmM#!z`68jp0v~99;C&pt3g{(;-U9WdM?lR#0fV)9jO?S(p$bqwUHI=Oq%p;*p#5}8 z@U<8_)c}5?S`n@u3M~Y`*k%fTLeS>p$YM~kD=0tz$-UTG=sFp-z{kOgb*J=nFMqHe zn<6YIfa?9fgNLL_q7c}n2&nnLOFLFIOChiW1l0WB0Z1x|LSUC7z~{g5?k;VhYL-Gk zA&^Gk043r1pUwQLX8a}W0Dv+-&-_K^O$e$#g~0nm;7oSk#PNyTiLr^9*|`g$T?WM_ zxH|?es@m1aAr~CFR9LvQ@cdq!c;fgtPCPFr#vYRNe-{;|!4ZDO8QGW1oyen!@xsi) zg$36E^(r{Dg3nCFx4poQ&F4%A`=!7qG>c&^F3eq;pIs>KA*^PB)!ag1C#*`~ z!cv7jJu80TU%ap|Jv05H0X!yhSB@Mh%umnHk?J7di6EtY1K*hV&bk5a5Xic2M#wAH zECimng@x&b49aA|%f$qT*-xCNDf=1+oVspeYt%=G+pMc+4`o0zQ{EfbDQ;OmH=DA&PP_3m4}L)6;nV8=0?bnXemXjqe-ZPdfdt zun>IPq2fgF#VG|w6bTI^iZ&>zBhX*RLEIJGQ|iNKP7n#`m$HNz*1p4@1IMvq zULfscb6Mib3SJ&iDBbCnZt-hjw+${wXKAp*3X{7tO1X%xap5{AA=t!MPL+t&SrR*u zz%znZ^PQe7lH8spBZ7Y}kr!!PBhF}k&{Y8>q^^=c%qf>@d&uF&2`m-(uh`|l=e7fk z3NAX>Kdh%Ngj%vwwGp%zEPurbdpMRH6oE$OG)3}O>QVaVJD)h2 z#oHHe8)Urr0oXpoi2WRwh94uEQ~qL|`N6Ro0fAUqbb~e6G@~2xg4kK)?ZUaaO5v;t zq3&?P0k)rXzVoqDRFwZ4q++;0*z!5%zn_w-#;M>lOda%C**(CsAnzUMLY7YKUtth( zt&dlwmCs+EBzrwabfRLBKa>1}pkJyGQ3nv|KTSl+QT{*415e#31cna*zWyJ+ma7&k z1QY^l{;M&d5ExzrMz#Ni<3Cy&{QDdIP2&≠AGTxvc2C_UUZyg%|V(r|41%_Mj@+ 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 Rc56>s;0?J5`81Wu{0HKT3K#$Y literal 10599 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 E2S}3Zh5!Hn diff --git a/B4A/Files/principal.bal b/B4A/Files/principal.bal index 914a290f6b2a0792d19db417efaa49e171685e4d..2bcb2fb4978b05587d3f1f2f9e7b163fc7b33d8b 100644 GIT binary patch delta 3885 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 W3(g6kz5 zgUm+W8$xghP<7BSfIo9nBf<%@ZVpk12b_I0%WqmIMfk$Z1^RK=3`pu6s7Z)wO9 delta 665 zcma)3O)mpc6rD?EnxUobq{^h!we25b8_B!H+RlEa~->m-6;y`OmdhDO2r6Bl9VvhS<@-b+m4mD z)7hDn2WIuCe0*Fk5oEmecPM8%Su0T+IVe^WyOooOyR6f5#xIKAu449}cv`NM_DhFi zQO-;omSNwsrz}&2-@Ri!ChP`4O@d^g5s=h5kZaF#)fXX)ZNDB_fT;r_h}0oO3FHIR zBtHjq&4L^PydtG)fEM{9&`T-q3HH$vKY7Fa*xbUmtwHMI^I(iGo2EGGAEC7P04;E| zc^vx2@BB_vH+KXk`x4kz%VtBl*_I&&0GY%~)eLroW*uQj6TIi$y%(?18&y=nL^;kHV|SyYLoE|aRwyyf6eCq*K8ge z>*Lg#-K=j`o5oxiAn}jdg>ZYOExu|pc+WRT+kD~sX?hz?4^!cL$7stAzia(p0P}4( diff --git a/B4A/MarketPlace.b4a b/B4A/MarketPlace.b4a index bebbf14..a70e851 100644 --- a/B4A/MarketPlace.b4a +++ b/B4A/MarketPlace.b4a @@ -1,24 +1,28 @@ Build1=Default,mp.keymon.lat,HU2_PUBLIC File1=candado.png -File10=principal.bal -File11=proditem.bal -File12=proditemCarrito.bal -File13=usuario.png -File14=vecteezy_white-diagonal-stripes-with-red-line-isolated-on-white_12833309-[Convertido].png +File10=MainPage.bal +File11=mesasItem.bal +File12=principal.bal +File13=proditem.bal +File14=proditemCarrito.bal +File15=usuario.png +File16=vecteezy_white-diagonal-stripes-with-red-line-isolated-on-white_12833309-[Convertido].png File2=durakelo.png File3=engrane.png File4=engranes.png -File5=kmt.db -File6=login.bal -File7=logo.png -File8=MainPage.bal -File9=mesasItem.bal +File5=errormanager.bal +File6=fondoblanco.png +File7=kmt.db +File8=login.bal +File9=logo.png FileGroup1=Default Group FileGroup10=Default Group FileGroup11=Default Group FileGroup12=Default Group FileGroup13=Default Group FileGroup14=Default Group +FileGroup15=Default Group +FileGroup16=Default Group FileGroup2=Default Group FileGroup3=Default Group FileGroup4=Default Group @@ -29,32 +33,38 @@ FileGroup8=Default Group FileGroup9=Default Group Group=Default Group Library1=appupdating -Library10=wobblemenu -Library11=preoptimizedclv +Library10=randomaccessfile +Library11=runtimepermissions +Library12=serial +Library13=sql +Library14=stringutils +Library15=wobblemenu +Library16=xui +Library17=javaobject Library2=b4xpages Library3=byteconverter Library4=compressstrings Library5=core Library6=json Library7=okhttputils2 -Library8=randomaccessfile -Library9=sql -ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~'End of default text.~\n~~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true") +Library8=phone +Library9=preoptimizedclv +ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~'End of default text.~\n~~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~AddPermission(android.permission.BLUETOOTH_ADVERTISE)~\n~AddPermission(android.permission.BLUETOOTH_CONNECT)~\n~AddPermission(android.permission.BLUETOOTH_SCAN)~\n~SetApplicationAttribute(android:largeHeap, "true")~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~SetApplicationAttribute(android:exported, "true") Module1=B4XMainPage Module2=C_Principal Module3=DBRequestManager Module4=errorManager Module5=Starter Module6=Subs -NumberOfFiles=14 -NumberOfLibraries=11 +NumberOfFiles=16 +NumberOfLibraries=17 NumberOfModules=6 -Version=12.5 +Version=12.8 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: MarketPlace #VersionCode: 1 - #VersionName: 3.07.20 + #VersionName: 4.07.20 'SupportedOrientations possible values: unspecified, landscape or portrait. #SupportedOrientations: portrait #CanInstallToExternalStorage: False @@ -72,7 +82,7 @@ Sub Process_Globals End Sub Sub Globals - + End Sub Sub Activity_Create(FirstTime As Boolean) diff --git a/B4A/MarketPlace.b4a.meta b/B4A/MarketPlace.b4a.meta index f8ec122..40ef548 100644 --- a/B4A/MarketPlace.b4a.meta +++ b/B4A/MarketPlace.b4a.meta @@ -14,11 +14,11 @@ ModuleBreakpoints5= ModuleBreakpoints6= ModuleClosedNodes0= ModuleClosedNodes1= -ModuleClosedNodes2=1 -ModuleClosedNodes3=14 +ModuleClosedNodes2= +ModuleClosedNodes3= ModuleClosedNodes4= -ModuleClosedNodes5=6 +ModuleClosedNodes5= ModuleClosedNodes6=68 -NavigationStack=B4XMainPage,b_cargaProductos_Click,91,0,C_Principal,b_prodMenos_Click,282,0,B4XMainPage,Class_Globals,20,0,C_Principal,B4XPage_CloseRequest,200,6,C_Principal,Initialize,72,0,C_Principal,b_pagoCerrar_Click,991,0,Starter,Process_Globals,5,0,B4XMainPage,Initialize,39,0,C_Principal,Class_Globals,67,0,Subs,Process_Globals,17,0 +NavigationStack=C_Principal,b_mesaCerrar_Click,999,6,Main,Globals,21,0,Visual Designer,principal.bal,-100,6,B4XMainPage,Initialize,44,0,Visual Designer,login.bal,-100,6,B4XMainPage,Class_Globals,40,0,B4XMainPage,B4XPage_Created,63,6,Subs,traeTotalesTicketActual,1131,0,C_Principal,p_mesasItem_Click,936,0,Starter,Process_Globals,18,0,errorManager,Activity_Resume,117,0 SelectedBuild=0 -VisibleModules=1,5,6,2,4 +VisibleModules=1,5,6,2,4,3 diff --git a/B4A/Starter.bas b/B4A/Starter.bas index 8cc9ec1..be15697 100644 --- a/B4A/Starter.bas +++ b/B4A/Starter.bas @@ -14,7 +14,9 @@ Sub Process_Globals 'These variables can be accessed from all modules. Public rp As RuntimePermissions Dim reqManager As DBRequestManager - Dim skmt, errorLog As SQL + Dim skmt As SQL + Dim Logger As Boolean = False + Dim DBReqServer As String = "http://keymon.lat:1782" Dim server, ruta As String 'Para los Logs Dim logs As StringBuilder @@ -41,7 +43,7 @@ Sub Service_Create logcat.LogCatStart(Array As String("-v","raw","*:F","B4A:v"), "logcat") #end if logs.Initialize - server = "http://keymon.lat:1782" + server = "http://keymon.lat:1781" If Logger Then Log($"Starter reqManager server: ${server}"$) Logger = False End Sub @@ -64,12 +66,12 @@ End Sub 'Return true to allow the OS default exceptions handler to handle the uncaught exception. 'Para los Logs Sub Application_Error (Error As Exception, StackTrace As String) As Boolean 'wait for 500ms to allow the logs to be updated. + Log(">>>>>>>>> ERROR") Dim jo As JavaObject Dim l As Long = 500: jo.InitializeStatic("java.lang.Thread").RunMethod("sleep", Array(l)) 'Sleep 500ms logcat.LogCatStop logs.Initialize - logs.Append("Ver " & Application.VersionName & CRLF) - logs.Append("R:" & rutav & CRLF) + logs.Append(Application.LabelName & " Ver " & Application.VersionName & CRLF) logs.Append(StackTrace) Subs.revisaBD Subs.errorLog.ExecNonQuery2("INSERT INTO errores(fecha, error) VALUES (?,?)", Array As Object (Subs.fechaKMT(DateTime.now), logs)) @@ -82,7 +84,7 @@ Sub Service_Destroy If Logger Then LogColor("starter destroyed", Colors.red) End Sub -Sub reinicializaReqManager +Sub reinicializaReqManager 'ignore reqManager.Initialize(Me, server) If Logger Then Log(server) End Sub @@ -116,4 +118,4 @@ Sub revisaBD 'ignore If Logger Then Log("revisaBD") If Not(File.Exists(ruta, "kmt.db")) Then File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") If Not(skmt.IsInitialized) Then skmt.Initialize(ruta, "kmt.db", True) -End Sub +End Sub \ No newline at end of file diff --git a/B4A/Subs.bas b/B4A/Subs.bas index 5a2ba4f..1489e74 100644 --- a/B4A/Subs.bas +++ b/B4A/Subs.bas @@ -188,32 +188,23 @@ End Sub 'Revisa que exista la BD y si es necesario crea algunans tablas dentro de ella Sub revisaBD 'ignore -' Main.ruta = File.DirInternal -' Log(Starter.ruta) -' Log(File.Exists(Starter.ruta, "kmt.db")) + Log("REVISA BD") If Not(File.Exists(Starter.ruta, "kmt.db")) Then File.Copy(File.DirAssets, "kmt.db", Starter.ruta, "kmt.db") LogColor("copiamos kmt.db de "&File.DirAssets & " a " & Starter.ruta,Colors.Green) End If If Not(kmt.IsInitialized) Then kmt.Initialize(Starter.ruta, "kmt.db", True) kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS RUTA_GPS(FECHA INTEGER, LAT TEXT, LON TEXT)") -' kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS UUC(fecha INTEGER, lat TEXT, lon TEXT)") 'LastKnownLocation kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS bitacora(fecha INTEGER, texto TEXT)") 'Bitacora - kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_AVANCE(HA_MARCA TEXT, HA_AVANCE TEXT, HA_OBJETIVO TEXT, HA_PORCENTAJE TEXT)") 'Historico avance mes actual - kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ABONOSP(NOTA TEXT, CLIENTE TEXT, SALDO_PENDIENTE TEXT)") - kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CLIENTE_NUEVO(CN_ID_CLIENTE TEXT, CN_NOMBRE TEXT, CN_enviado text)") - kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS RUTA_SUPLENCIA(RS_RUTA TEXT)") kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_MESAS(M_ID TEXT, M_NUMERO TEXT, M_NOMBRE TEXT, M_ZONA TEXT, M_ESTATUS TEXT, M_TICKET TEXT, M_MESERO TEXT, M_PAGO TEXT, M_COMENSALES INTEGER)") kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_MESEROS(MS_ID TEXT, MS_NOMBRE TEXT, MS_MESAS_ASIGNADAS TEXT)") - kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS bitacora(fecha INTEGER, texto TEXT)") 'Bitacora -' kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS MESAA(MESA STRING)") -' kmt.ExecNonQuery("drop table PEDIDO_INICIO_FINAL") 'Bitacora - kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PEDIDO_INICIO_FINAL(PIF_CLIENTE TEXT, PIF_HORA_INICIO LONG, PIF_HORA_FINAL LONG)") 'Bitacora - kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PEDIDO3 (PE_PRECIO2 TEXT,PE_TIPO TEXT,PE_FOLIO NUMERIC,PE_DESC NUMERIC,PE_COSTO_SIN TEXT,PE_MESA TEXT,PE_CEDIS TEXT,PE_COSTO_TOT NUMERIC,PE_COSTOU NUMERIC,PE_CANT NUMERIC,PE_PRONOMBRE TEXT,PE_PROID TEXT,PE_TICKET TEXT,PE_FECHA TEXT,PE_MESERO TEXT)") kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PEDIDO (PE_PRECIO2 TEXT,PE_TIPO TEXT,PE_FOLIO NUMERIC,PE_DESC NUMERIC,PE_COSTO_SIN TEXT,PE_MESA TEXT,PE_CEDIS TEXT,PE_COSTO_TOT NUMERIC,PE_COSTOU NUMERIC,PE_CANT NUMERIC,PE_PRONOMBRE TEXT,PE_PROID TEXT,PE_TICKET TEXT,PE_FECHA TEXT,PE_MESERO TEXT)") kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PEDIDO_TICKET (PT_FACT TEXT, PT_COSTO_SIN TEXT, PT_MESA TEXT, PT_PAGO TEXT, PT_ALMACEN TEXT, PT_LON TEXT, PT_LAT TEXT, PT_TICKET TEXT, PT_FECHA TEXT, PT_MESERO TEXT, PT_COMENSALES INTEGER, PT_NOART NUMERIC, PT_MONTO TEXT, PT_ENVIO_OK INTEGER, PT_TIEMPO_TIENDA FLOAT, PT_FACTURA INTEGER)") - kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_HIST_COMPRAS (H_IDCOMPRA TEXT, H_FOLIO NUMERIC, H_MESA TEXT, H_CEDIS TEXT, H_COSTO_TOT NUMERIC, H_COSTOU NUMERIC, H_CANT NUMERIC, H_PRONOMBRE TEXT, H_PROID TEXT, H_TICKET TEXT, H_FECHA TEXT)") - + agregaColumna("PEDIDO_TICKET", "PT_TICKET", "TEXT") + agregaColumna("PEDIDO", "PE_TICKET", "TEXT") + agregaColumna("PEDIDO", "PE_MESA", "TEXT") + agregaColumna("PEDIDO", "PE_MESERO", "TEXT") + kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_VARIABLES (CAT_VA_DESCRIPCION TEXT, CAT_VA_VALOR TEXT)") 'Tabla para la bitacora de errores If Not(errorLog.IsInitialized) Then errorLog.Initialize(Starter.ruta, "errorLog.db", True) errorLog.ExecNonQuery("CREATE TABLE IF NOT EXISTS errores(fecha INTEGER, error TEXT)") @@ -650,6 +641,8 @@ Sub traeAlmacen As String 'ignore Return a End Sub + + 'Regresa el nombre del producto desde CAT_GUNAPROD Sub traeProdNombre(id As String) As String Private h As Cursor @@ -680,10 +673,10 @@ Sub traeMesa As String 'ignore Return m End Sub -Sub traeTicket(mesaId As String) As String 'ignore +Sub traeTicket(mesaId As String, tipoPago As String) As String 'ignore Private c As Cursor Private cl As String = "PENDIENTE" - c=Starter.skmt.ExecQuery("Select M_TICKET from CAT_MESAS where M_ID = '${mesaId}'") + c=Starter.skmt.ExecQuery($"Select M_TICKET from CAT_MESAS where M_ID = '${mesaId}' and PE_TIPO = '${tipoPago}'"$) If c.RowCount > 0 Then c.Position=0 cl = c.GetString("M_TICKET") @@ -911,6 +904,7 @@ Sub traeMaxPromos(pm As Map) As Int End Sub 'Regresa la cantidad de promos que se le han vendido al cliente. +'HAY QUE REVISAR QUE TRAIGA BIEN LOS DATOS, HAY QUE PONER MAS DATOS EN EL "WHERE" DEL QUERY. Sub traePromosVendidas(promo As String, cliente As String) As Int Private c As Cursor Private pv As Int = 0 @@ -1137,6 +1131,7 @@ Sub traeProdIdDeBD As Map 'ignore End Sub 'Regresa el total de productos y monto del pedido del ticket actual. +'HAY QUE REVISAR QYUE EL WHERE TENGA LOS PARAMETRSO NECESARIOS Sub traeTotalesTicketActual As Map Private m As Map m.Initialize @@ -1180,9 +1175,10 @@ Sub pedidoGuardado As Boolean End Sub 'Regresa verdadero si hay pedido en la tabla "PEDIDO" del cliente actual. +'HAY QUE REVSAR QUE REGERSE BIEN LOS DATOS; SEGURO HAY QUE PONER MAS DATOS EN EL WHERE DEL QUERY. Sub hayPedido As Boolean ' Log($"TraeTicket: ${traeTicket}"$) - Private thisC As Cursor=Starter.skmt.ExecQuery($"select count(PE_TICKET) as hayPedido from PEDIDO where PE_TICKET = '${Starter.ticketActual}'"$) + Private thisC As Cursor=Starter.skmt.ExecQuery($"select count(PE_TICKET) as hayPedido from PEDIDO where PE_TICKET = '${Starter.ticketActual}' and PE_MESA = '${Starter.mesaActual}' and PE_TIPO = 'VENTA'"$) ' Log($"select count(PE_TICKET) as hayPedido from PEDIDO where PE_TICKET = '${Starter.ticketActual}'"$) thisC.Position = 0 Private hay As Boolean = False @@ -1224,20 +1220,20 @@ End Sub 'Regresa el total del pedido en la tabla "PEDIDO" del cliente actual. Sub totalPedido As String - Private cT As Cursor = Starter.skmt.ExecQuery($"select sum(PE_COSTO_TOT) as total from PEDIDO where PE_TICKET = '${traeTicket(Starter.mesaActual)}'"$) - Private pTotal As String = "0" - If cT.RowCount > 0 Then - cT.Position = 0 -' Log("|"&cT.GetLong("total")&"|"&pTotal) - Private tempT As String = cT.GetLong("total") - If tempT <> "null" And tempT <> Null Then -' Log("|"&cT.GetLong("total")&"|") - pTotal = tempT - End If -' Log($"Cliente actual=${traeTicket}, hayPedido=${hay}"$) - End If - cT.Close - Return pTotal +' Private cT As Cursor = Starter.skmt.ExecQuery($"select sum(PE_COSTO_TOT) as total from PEDIDO where PE_TICKET = '${traeTicket(Starter.mesaActual)}'"$) +' Private pTotal As String = "0" +' If cT.RowCount > 0 Then +' cT.Position = 0 +'' Log("|"&cT.GetLong("total")&"|"&pTotal) +' Private tempT As String = cT.GetLong("total") +' If tempT <> "null" And tempT <> Null Then +'' Log("|"&cT.GetLong("total")&"|") +' pTotal = tempT +' End If +'' Log($"Cliente actual=${traeTicket}, hayPedido=${hay}"$) +' End If +' cT.Close +' Return pTotal End Sub Sub actualizaProducto(costoU As String, cant As String, nombre As String, prodId As String, ticketId As String, fecha As String, mesero As String, mesa As String, precioSin As String, tipoVenta As String, comensales As Int) @@ -1254,22 +1250,23 @@ Sub actualizaProducto(costoU As String, cant As String, nombre As String, prodId Private difCant As Int = cant - antCant Starter.skmt.ExecNonQuery($"update pedido set pe_cant = ${cant}, pe_costo_tot = ${(cant*c.GetString("PE_COSTOU"))} where pe_proid = '${prodId}' and PE_TICKET = '${ticketId}' and PE_MESA = '${mesa}' and PE_TIPO = '${tipoVenta}'"$) Starter.skmt.ExecNonQuery($"update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - (${difCant}) where cat_gp_id = '${prodId}' "$) - c=Starter.skmt.ExecQuery($"select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_TICKET = '${ticketId}'"$) - Log($"select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_TICKET = '${ticketId}'"$) + c=Starter.skmt.ExecQuery($"select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_TICKET = '${ticketId}' and PE_MESA = '${mesa}' and PE_TIPO = '${tipoVenta}'"$) +' Log($"select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_TICKET = '${ticketId}' and PE_MESA = '${mesa}' and PE_TIPO = '${tipoVenta}'"$) c.Position=0 Starter.skmt.ExecNonQuery($"delete from PEDIDO_TICKET where PT_TICKET = '${ticketId}' and PT_MESA = '${mesa}' and PT_PAGO = '${tipoVenta}'"$) - Log($"delete from PEDIDO_TICKET where PT_TICKET = '${ticketId}' and PT_MESA = '${mesa}' and PT_PAGO = '${tipoVenta}'"$) +' Log($"delete from PEDIDO_TICKET where PT_TICKET = '${ticketId}' and PT_MESA = '${mesa}' and PT_PAGO = '${tipoVenta}'"$) Starter.skmt.ExecNonQuery2("insert into PEDIDO_TICKET(PT_TICKET, PT_PAGO, PT_FECHA, PT_MESERO, PT_NOART, PT_MONTO, PT_MESA, PT_COSTO_SIN, PT_COMENSALES) VALUES (?,?,?,?,?,?,?,?,?)", Array As Object(ticketId, tipoVenta, fecha, mesero, c.GetString("CANT_CLIE"), c.GetString("TOTAL_CLIE"), mesa, c.GetString("TOTAL_CLIE_SIN"), comensales)) +' Log($"insert into PEDIDO_TICKET(PT_TICKET, PT_PAGO, PT_FECHA, PT_MESERO, PT_NOART, PT_MONTO, PT_MESA, PT_COSTO_SIN, PT_COMENSALES) VALUES (${ticketId}, ${tipoVenta}, fecha, mesero, ${c.GetString("CANT_CLIE")}, ${c.GetString("TOTAL_CLIE")}, ${mesa}, c.GetString("TOTAL_CLIE_SIN"), comensales)"$) If cant = 0 Then LogColor($"BORRAMOS PRODUCTO - ${prodId}"$, Colors.Red) - Starter.skmt.ExecNonQuery($"delete from pedido where pe_proid = '${prodId}' and PE_TICKET = '${ticketId}' "$) + Starter.skmt.ExecNonQuery($"delete from pedido where pe_proid = '${prodId}' and PE_TICKET = '${ticketId}' and PE_MESA = '${mesa}' and PE_TIPO = '${tipoVenta}'"$) Log($"Borramos pe_proid='${prodId}' and PE_TICKET='${ticketId}'"$) Private pe As Cursor = Starter.skmt.ExecQuery($"select count(PE_TICKET) as cuantosPedidos from pedido where PE_TICKET = '${ticketId}' and PE_MESA = '${mesa}' and PE_TIPO = '${tipoVenta}'"$) pe.Position = 0 If pe.GetString("cuantosPedidos") = 0 Then Log("Borramos PEDIDO_TICKET") Starter.skmt.ExecNonQuery($"delete from PEDIDO_TICKET where PT_TICKET = '${ticketId}' and PT_MESA = '${mesa}' and PT_PAGO = '${tipoVenta}'"$) - Log($"delete from PEDIDO_TICKET where PT_TICKET = '${ticketId}' and PT_MESA = '${mesa}' and PT_PAGO = '${tipoVenta}'"$) +' Log($"delete from PEDIDO_TICKET where PT_TICKET = '${ticketId}' and PT_MESA = '${mesa}' and PT_PAGO = '${tipoVenta}'"$) End If End If Else @@ -1292,12 +1289,13 @@ Sub guardaProductoSinGestion(costoU As String, cant As String, nombre As String, Starter.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_TICKET, PE_FECHA, PE_MESERO, PE_MESA, PE_COSTO_SIN, PE_TIPO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object ((cant * costoU), costoU, cant, nombre, prodId, ticketId, fecha, mesero, mesa, precioSin, tipoVenta)) 'Actualizamos el inventario en cat_gunaprod solo si no es RMI Starter.skmt.ExecNonQuery2($"update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? "$, Array As Object(cant, prodId)) - c=Starter.skmt.ExecQuery($"select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_TICKET = '${ticketId}'"$) + c = Starter.skmt.ExecQuery($"select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_TICKET = '${ticketId}' and PE_TIPO = 'VENTA' and PE_MESA = '${mesa}'"$) Log($"select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_TICKET = '${ticketId}'"$) - c.Position=0 + c.Position = 0 Starter.skmt.ExecNonQuery($"delete from PEDIDO_TICKET where PT_TICKET = '${ticketId}' and PT_MESA = '${mesa}' and PT_PAGO = '${tipoVenta}'"$) - Log($"delete from PEDIDO_TICKET where PT_TICKET = '${ticketId}' and PT_MESA = '${mesa}' and PT_PAGO = '${tipoVenta}'"$) +' Log($"delete from PEDIDO_TICKET where PT_TICKET = '${ticketId}' and PT_MESA = '${mesa}' and PT_PAGO = '${tipoVenta}'"$) Starter.skmt.ExecNonQuery2("insert into PEDIDO_TICKET(PT_TICKET, PT_PAGO, PT_FECHA, PT_MESERO, PT_NOART, PT_MONTO, PT_MESA, PT_COSTO_SIN, PT_COMENSALES) VALUES (?,?,?,?,?,?,?,?,?)", Array As Object(ticketId, tipoVenta, fecha, mesero, c.GetString("CANT_CLIE"), c.GetString("TOTAL_CLIE"), mesa, c.GetString("TOTAL_CLIE_SIN"), comensales)) + Log($"insert into PEDIDO_TICKET(PT_TICKET, PT_PAGO, PT_MESERO, PT_NOART, PT_MONTO, PT_MESA, PT_COSTO_SIN, PT_COMENSALES) VALUES (${ticketId}, ${tipoVenta}, ${mesero}, ${c.GetString("CANT_CLIE")}, ${c.GetString("TOTAL_CLIE")}, ${mesa}, ${c.GetString("TOTAL_CLIE_SIN")}, ${comensales})"$) End Sub Sub agrupador() @@ -1391,19 +1389,18 @@ Sub traeConsecutivoTicket(estatus As String, pago As String) As String Private m As String = "00000" Private sqlPago As String = $"M_PAGO = '${pago}'"$ If pago = "PENDIENTE" Then sqlPago = $"M_PAGO is NULL"$ - If pago = "EFECTIVO" Then - Private c As Cursor = Starter.skmt.ExecQuery($"select max(PE_TICKET) as ultimo from PEDIDO where PE_TIPO = 'EFECTIVO'"$) + If pago = "EFECTIVO" Or pago = "TARJETA" Then + Private c As Cursor = Starter.skmt.ExecQuery($"select max(PE_TICKET) as ultimo from PEDIDO where PE_TIPO = '${pago}'"$) Else Private c As Cursor = Starter.skmt.ExecQuery($"select max(M_TICKET) as ultimo from CAT_MESAS where ifnull(M_ESTATUS, 'CERRADA') = '${estatus}' and ${sqlPago}"$) End If - - Log($"select max(M_TICKET) as ultimo from CAT_MESAS where ifnull(M_ESTATUS, 'CERRADA') = '${estatus}' and ${sqlPago}"$) +' Log($"select max(M_TICKET) as ultimo from CAT_MESAS where ifnull(M_ESTATUS, 'CERRADA') = '${estatus}' and ${sqlPago}"$) If c.RowCount > 0 Then c.Position = 0 - Log("|" & c.GetString("ultimo") & "|") +' Log("|" & c.GetString("ultimo") & "|") If c.GetString("ultimo") <> Null And c.GetString("ultimo") <> "null" Then m = NumberFormat2(c.GetString("ultimo"), 5, 0,0, False) End If - Log(m + 1) +' Log(m + 1) Return NumberFormat2(m+1, 5, 0, 0, False) End Sub @@ -1418,6 +1415,37 @@ Sub traeMesaEstatus(id As String) As String Return e End Sub +'Regresa verdadero si el cierre adminstrativo esta en 1 +Sub revisaCierreAdmin As Boolean + Private c As Cursor = Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("CIERRE ADMIN")) + Private cierre As Boolean = False + If c.RowCount > 0 Then + c.Position = 0 + If c.GetString("CAT_VA_VALOR") = 1 Then +' B4XPages.MainPage.principal.p_transparenteCierreAdmin.BringToFront +' B4XPages.MainPage.principal.p_transparenteCierreAdmin.Visible = True + cierre = True + Else +' B4XPages.MainPage.principal.p_transparenteCierreAdmin.Visible = False + End If + End If + Return cierre +End Sub + +'Change CheckBox colors +Sub SetButtonTintList(View As View, Disabled As Int, Enabled As Int) + Dim States(2,1) As Int + Dim sd As StateListDrawable 'ignore + States(0, 0) = sd.State_Enabled + States(1, 0) = sd.State_Disabled + Dim Color(2) As Int = Array As Int(Enabled, Disabled) + Dim CSL As JavaObject + CSL.InitializeNewInstance("android.content.res.ColorStateList",Array(States,Color)) + Dim jo As JavaObject + jo.InitializeStatic("android.support.v4.widget.CompoundButtonCompat") + jo.RunMethod("setButtonTintList", Array(View, CSL)) +End Sub + 'CAT_GUNAPRODS, CAT_MESAS y CAT_MESEROS '1782 @@ -1425,3 +1453,10 @@ End Sub 'DBKMT 'LANTER 'LANTERD2023M +'sql.selectProds_Lanter = Select * from cat_gunaprod +'sql.selectMesas_Lanter = Select * from cat_mesas +'sql.selectMeseros_Lanter = Select * from cat_meseros + +'CREATE TABLE CAT_GUNAPROD (CAT_GP_CODPROMO TEXT, CAT_GP_INICIATIVA TEXT, CAT_GP_TIPOPROD TEXT, CAT_GP_DEV TEXT, CAT_GP_ALMACEN NUMERIC, CAT_GP_ID TEXT, CAT_GP_NOMBRE TEXT, CAT_GP_IMP1 TEXT, CAT_GP_IMP2 TEXT, CAT_GP_PRECIO TEXT, CAT_GP_CLASIF TEXT, CAT_GP_STS TEXT, CAT_GP_TIPO TEXT, CAT_GP_SUBTIPO TEXT, CAT_GP_IMG BLOB, CAT_PT_DESC TEXT, CAT_PS_DESC TEXT, CAT_GP_FECHA TEXT, CAT_GP_FECHA_MOD TEXT) +'CREATE TABLE "CAT_MESAS"(M_ID TEXT, M_NUMERO TEXT, M_NOMBRE TEXT, M_ZONA TEXT, M_ESTATUS TEXT, M_MESERO TEXT, M_PAGO TEXT, M_TICKET TEXT, M_COMENSALES INTEGER) +'CREATE TABLE CAT_MESEROS(MS_ID TEXT, MS_NOMBRE TEXT, MS_MESAS_ASIGNADAS TEXT) \ No newline at end of file