- Commit inicial
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
**/Objects
|
||||
**/AutoBackups
|
||||
306
B4XMainPage.bas
Normal file
@@ -0,0 +1,306 @@
|
||||
B4A=true
|
||||
Group=Default Group
|
||||
ModulesStructureVersion=1
|
||||
Type=Class
|
||||
Version=9.85
|
||||
@EndOfDesignText@
|
||||
#Region Shared Files
|
||||
'Ctrl + click to sync files: ide://run?file=%WINDIR%\System32\Robocopy.exe&args=..\..\Shared+Files&args=..\Files&FilesSync=True
|
||||
'###########################################################################################################
|
||||
'###################### PULL #############################################################
|
||||
'Ctrl + click ide://run?file=%WINDIR%\System32\cmd.exe&Args=/c&Args=git&Args=pull
|
||||
'###########################################################################################################
|
||||
'###################### PUSH #############################################################
|
||||
'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=github&Args=..\..\
|
||||
'###########################################################################################################
|
||||
'###################### PUSH TORTOISE GIT #########################################################
|
||||
'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=TortoiseGitProc&Args=/command:commit&Args=/path:"./../../"&Args=/closeonend:2
|
||||
'###########################################################################################################
|
||||
#End Region
|
||||
|
||||
'Ctrl + click to export as zip: ide://run?File=%B4X%\Zipper.jar&Args=Project.zip
|
||||
|
||||
Sub Class_Globals
|
||||
Private Root As B4XView
|
||||
Private xui As XUI
|
||||
Public login As B4XMainPage
|
||||
Public principal As C_Principal
|
||||
Private i_logo As ImageView
|
||||
Private p_configuracion As Panel
|
||||
Private p_login As Panel
|
||||
Private b_regresar As Button
|
||||
Private b_entrar As Button
|
||||
Private b_envioBD As Button
|
||||
Private b_server As Button
|
||||
Private ImageView4 As ImageView
|
||||
Private ImageView2 As ImageView
|
||||
Private Panel3 As Panel
|
||||
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
|
||||
Dim atrasPresionado As Boolean = False
|
||||
Private cb_impresionActiva As CheckBox
|
||||
Private CheckBox1 As CheckBox
|
||||
Private b_leyendaDescuento As Button
|
||||
Private p_leyendaDescuento As Panel
|
||||
Public Provider As FileProvider
|
||||
End Sub
|
||||
|
||||
Public Sub Initialize
|
||||
' B4XPages.GetManager.LogEvents = True
|
||||
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
|
||||
B4XPages.AddPage("Login", login)
|
||||
principal.Initialize
|
||||
B4XPages.AddPage("Principal", principal)
|
||||
p_login.Width = Root.Width
|
||||
p_login.Height = Root.Height
|
||||
Subs.agregaColumna("cat_gunaprod", "CAT_PT_DESC", "TEXT")
|
||||
Subs.agregaColumna("cat_gunaprod", "CAT_PS_DESC", "TEXT")
|
||||
Subs.agregaColumna("cat_gunaprod", "CAT_PS_DESC", "TEXT")
|
||||
Subs.agregaColumna("cat_gunaprod", "CAT_GP_FECHA", "TEXT")
|
||||
Subs.agregaColumna("cat_gunaprod", "CAT_GP_FECHA_MOD", "TEXT")
|
||||
Starter.skmt.ExecNonQuery("delete from cuentaa")
|
||||
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)
|
||||
i_logo.Left = (Root.Width / 2) - (i_logo.Width / 2)
|
||||
Subs.centraPanel(Panel3, p_configuracion.Width)
|
||||
' subs.panelVisible(p_configuracion, 0, 0)
|
||||
Private x As Cursor = Starter.skmt.ExecQuery($"select * from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'DESCUENTO X EFECTIVO'"$)
|
||||
If x.RowCount = 0 Then 'Insertamos el descuento para efectivo por default.
|
||||
' Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("DESCUENTO X EFECTIVO"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("DESCUENTO X EFECTIVO","10"))
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Sub B4XPage_Appear
|
||||
Private z As ResultSet = Starter.skmt.ExecQuery2("select * from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As String ("IMPRESION_ACTIVA"))
|
||||
Do While z.NextRow
|
||||
Private ia As Boolean = False
|
||||
If z.GetString("CAT_VA_VALOR") = 1 Then ia = True
|
||||
Loop
|
||||
cb_impresionActiva.Checked = ia
|
||||
Starter.imprimirTicket = ia
|
||||
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 atrasPresionado Then ExitApplication 'Solo salimos de la aplicación si se presiona 'Atras' 2 veces seguidas.
|
||||
ToastMessageShow("Presiona 'Atras' nuevamente para salir de la aplicación.", False)
|
||||
atrasPresionado = 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
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub b_regresar_Click
|
||||
p_configuracion.Visible = False
|
||||
Subs.panelVisible(p_login, 0, 0)
|
||||
End Sub
|
||||
|
||||
Private Sub b_entrar_Click
|
||||
B4XPages.ShowPage("principal")
|
||||
End Sub
|
||||
|
||||
Private Sub b_server_Click
|
||||
If E_SERVER.Text <> "" Then
|
||||
Starter.DBReqServer = E_SERVER.text
|
||||
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("SERVER"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("SERVER", Starter.DBReqServer))
|
||||
p_configuracion.Visible = False
|
||||
reqManager.Initialize(Me, Starter.DBReqServer)
|
||||
Starter.reqManager.Initialize(Me, Starter.DBReqServer)
|
||||
' Log(E_SERVER.text)
|
||||
Else
|
||||
ToastMessageShow("Por favor ingrese la direccion del servidor", True)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'Enviamos la base de datos por correo o Whatsapp.
|
||||
Private Sub b_envioBD_Click
|
||||
'Hay que agregar las siguientes lineas al manifiesto:
|
||||
'AddApplicationText(<Provider android:name="android.support.v4.content.FileProvider"
|
||||
' android:authorities="$PACKAGE$.provider" android:exported="false"
|
||||
' android:grantUriPermissions="true"><meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/>
|
||||
' </Provider>)
|
||||
'CreateResource(xml, provider_paths,
|
||||
' <paths><external-files-path name="name" path="" /><files-path name="name" path="" /><files-path name="name" path="shared" /></paths>
|
||||
')
|
||||
Dim Provider As FileProvider
|
||||
Provider.Initialize
|
||||
Dim FileName As String = "kmt.db"
|
||||
'copy the shared file to the shared folder
|
||||
Log("xxxxxx:"&Provider.SharedFolder)
|
||||
Sleep(1000)
|
||||
File.Copy(File.DirInternal, FileName, Provider.SharedFolder, FileName)
|
||||
Dim email As Email
|
||||
email.To.Add("soporte@keymonsoft.com")
|
||||
email.Subject = "Envio Base de datos Mariana Censos"
|
||||
email.Attachments.Add(Provider.GetFileUri(FileName))
|
||||
' email.Attachments.Add(Provider.GetFileUri(FileName)) 'second attachment
|
||||
Dim in As Intent = email.GetIntent
|
||||
in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION
|
||||
StartActivity(in)
|
||||
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"))
|
||||
Dim CAT_GP_TIPO As String = records(result.Columns.Get("CAT_GP_TIPO"))
|
||||
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, CAT_GP_TIPO) 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,CAT_GP_TIPO))
|
||||
Next
|
||||
For v = 1 To 20 'Agregamos productos varios (editables)
|
||||
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, CAT_GP_TIPO) VALUES (?,?,?,?,?,?,?,?,?)", Array As Object ($"AVAR${NumberFormat2(v, 2, 0, 0, False)}"$,$"Alimentos Varios ${NumberFormat2(v, 2, 0, 0, False)}"$,"1","10000",Null,"2024-02-04 17:00:00","2024-02-04 17:00:00","VARIOS","ALIMENTOS"))
|
||||
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, CAT_GP_TIPO) VALUES (?,?,?,?,?,?,?,?,?)", Array As Object ($"VVAR${NumberFormat2(v, 2, 0, 0, False)}"$,$"Bebidas Varias ${NumberFormat2(v, 2, 0, 0, False)}"$,"1","10000",Null,"2024-02-04 17:00:00","2024-02-04 17:00:00","VARIOS","VINOS Y LICORES"))
|
||||
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
|
||||
If B4XPages.MainPage.principal.cb_mesero.IsInitialized Then B4XPages.MainPage.principal.cb_mesero.SetItems(Subs.traeMeserosLista)
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
ToastMessageShow("¡Información cargada!", False)
|
||||
Job.Release
|
||||
End Sub
|
||||
|
||||
Private Sub b_entrar_LongClick
|
||||
' Dim a As Int = "a"
|
||||
' Subs.alineaDerecha(NumberFormat2(1450, 1, 2, 2, True), 30, ".")
|
||||
End Sub
|
||||
|
||||
Private Sub user_TextChanged (Old As String, New As String)
|
||||
If New.Trim = "KMTS1" Then i_conf.Visible = True Else i_conf.Visible = False
|
||||
End Sub
|
||||
|
||||
Private Sub cb_impresionActiva_CheckedChange(Checked As Boolean)
|
||||
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("IMPRESION_ACTIVA"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("IMPRESION_ACTIVA", Checked))
|
||||
End Sub
|
||||
|
||||
Private Sub b_leyendaDescuento_Click
|
||||
|
||||
End Sub
|
||||
344
DBRequestManager.bas
Normal file
@@ -0,0 +1,344 @@
|
||||
B4A=true
|
||||
Group=Default Group
|
||||
ModulesStructureVersion=1
|
||||
Type=Class
|
||||
Version=6.8
|
||||
@EndOfDesignText@
|
||||
''Class module
|
||||
Sub Class_Globals
|
||||
Private mTarget As Object
|
||||
Type DBResult (Tag As Object, Columns As Map, Rows As List)
|
||||
Type DBCommand (Name As String, Parameters() As Object)
|
||||
Private link As String
|
||||
Private bc As ByteConverter
|
||||
Private T_NULL = 0, T_STRING = 1, T_SHORT = 2, T_INT = 3, T_LONG = 4, T_FLOAT = 5 _
|
||||
,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 - 211109
|
||||
Dim reqsList, timesList, errorList 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).
|
||||
'ConnectorLink - URL of the Java server.
|
||||
Public Sub Initialize (Target As Object, ConnectorLink As String)
|
||||
mTarget = Target
|
||||
link = ConnectorLink
|
||||
End Sub
|
||||
|
||||
'Sends a query request.
|
||||
'Command - Query name and parameters.
|
||||
'Limit - Maximum rows to return or 0 for no limit.
|
||||
'Tag - An object that will be returned in the result.
|
||||
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)
|
||||
' 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)
|
||||
out2.Close
|
||||
j.PostBytes(link & "?method=query", ms.ToBytesArray)
|
||||
End Sub
|
||||
|
||||
'Executes a batch of (non-select) commands.
|
||||
'ListOfCommands - List of the commands that will be executes.
|
||||
'Tag - An object that will be returned in the result.
|
||||
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)
|
||||
WriteInt(ListOfCommands.Size, out2)
|
||||
For Each Command As DBCommand In ListOfCommands
|
||||
WriteObject(Command.Name, out2)
|
||||
WriteList(Command.Parameters, out2)
|
||||
Next
|
||||
out2.Close
|
||||
j.PostBytes(link & "?method=batch", ms.ToBytesArray)
|
||||
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)
|
||||
Dim compress As CompressedStreams
|
||||
Dim out As OutputStream = compress.WrapOutputStream(MemoryStream, "gzip")
|
||||
WriteObject(VERSION, out)
|
||||
Return out
|
||||
End Sub
|
||||
|
||||
Private Sub WriteList(Parameters As List, out As OutputStream)
|
||||
Dim data() As Byte
|
||||
If Parameters = Null Or Parameters.IsInitialized = False Then
|
||||
Dim Parameters As List
|
||||
Parameters.Initialize
|
||||
End If
|
||||
data = bc.IntsToBytes(Array As Int(Parameters.Size))
|
||||
out.WriteBytes(data, 0, data.Length)
|
||||
For Each o As Object In Parameters
|
||||
WriteObject(o, out)
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Private Sub WriteObject(o As Object, out As OutputStream)
|
||||
Dim data() As Byte
|
||||
tempArray(0) = o
|
||||
If tempArray(0) = Null Then
|
||||
out.WriteBytes(Array As Byte(T_NULL), 0, 1)
|
||||
Else If tempArray(0) Is Short Then
|
||||
out.WriteBytes(Array As Byte(T_SHORT), 0, 1)
|
||||
data = bc.ShortsToBytes(Array As Short(o))
|
||||
Else If tempArray(0) Is Int Then
|
||||
out.WriteBytes(Array As Byte(T_INT), 0, 1)
|
||||
data = bc.IntsToBytes(Array As Int(o))
|
||||
Else If tempArray(0) Is Float Then
|
||||
out.WriteBytes(Array As Byte(T_FLOAT), 0, 1)
|
||||
data = bc.FloatsToBytes(Array As Float(o))
|
||||
Else If tempArray(0) Is Double Then
|
||||
out.WriteBytes(Array As Byte(T_DOUBLE), 0, 1)
|
||||
data = bc.DoublesToBytes(Array As Double(o))
|
||||
Else If tempArray(0) Is Long Then
|
||||
out.WriteBytes(Array As Byte(T_LONG), 0, 1)
|
||||
data = bc.LongsToBytes(Array As Long(o))
|
||||
Else If tempArray(0) Is Boolean Then
|
||||
out.WriteBytes(Array As Byte(T_BOOLEAN), 0, 1)
|
||||
Dim b As Boolean = 0
|
||||
Dim data(1) As Byte
|
||||
If b Then data(0) = 1 Else data(0) = 0
|
||||
Else If GetType(tempArray(0)) = "[B" Then
|
||||
data = o
|
||||
out.WriteBytes(Array As Byte(T_BLOB), 0, 1)
|
||||
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")
|
||||
WriteInt(data.Length, out)
|
||||
End If
|
||||
If data.Length > 0 Then out.WriteBytes(data, 0, data.Length)
|
||||
End Sub
|
||||
|
||||
Private Sub ReadObject(In As InputStream) As Object
|
||||
Dim data(1) As Byte
|
||||
In.ReadBytes(data, 0, 1)
|
||||
Select data(0)
|
||||
Case T_NULL
|
||||
Return Null
|
||||
Case T_SHORT
|
||||
Dim data(2) As Byte
|
||||
Return bc.ShortsFromBytes(ReadBytesFully(In, data, data.Length))(0)
|
||||
Case T_INT
|
||||
Dim data(4) As Byte
|
||||
Return bc.IntsFromBytes(ReadBytesFully(In, data, data.Length))(0)
|
||||
Case T_LONG
|
||||
Dim data(8) As Byte
|
||||
Return bc.LongsFromBytes(ReadBytesFully(In, data, data.Length))(0)
|
||||
Case T_FLOAT
|
||||
Dim data(4) As Byte
|
||||
Return bc.FloatsFromBytes(ReadBytesFully(In, data, data.Length))(0)
|
||||
Case T_DOUBLE
|
||||
Dim data(8) As Byte
|
||||
Return bc.DoublesFromBytes(ReadBytesFully(In, data, data.Length))(0)
|
||||
Case T_BOOLEAN
|
||||
Dim b As Byte = ReadByte(In)
|
||||
Return b = 1
|
||||
Case T_BLOB
|
||||
Dim len As Int = ReadInt(In)
|
||||
Dim data(len) As Byte
|
||||
Return ReadBytesFully(In, data, data.Length)
|
||||
Case Else
|
||||
Dim len As Int = ReadInt(In)
|
||||
Dim data(len) As Byte
|
||||
ReadBytesFully(In, data, data.Length)
|
||||
Return BytesToString(data, 0, data.Length, "UTF8")
|
||||
End Select
|
||||
End Sub
|
||||
|
||||
Private Sub ReadBytesFully(In As InputStream, Data() As Byte, Len As Int) As Byte()
|
||||
Dim count = 0, read As Int
|
||||
Do While count < Len And read > -1
|
||||
read = In.ReadBytes(Data, count, Len - count)
|
||||
count = count + read
|
||||
Loop
|
||||
Return Data
|
||||
End Sub
|
||||
|
||||
Private Sub WriteInt(i As Int, out As OutputStream)
|
||||
Dim data() As Byte
|
||||
data = bc.IntsToBytes(Array As Int(i))
|
||||
out.WriteBytes(data, 0, data.Length)
|
||||
End Sub
|
||||
|
||||
Private Sub ReadInt(In As InputStream) As Int
|
||||
Dim data(4) As Byte
|
||||
Return bc.IntsFromBytes(ReadBytesFully(In, data, data.Length))(0)
|
||||
End Sub
|
||||
|
||||
Private Sub ReadByte(In As InputStream) As Byte
|
||||
Dim data(1) As Byte
|
||||
In.ReadBytes(data, 0, 1)
|
||||
Return data(0)
|
||||
End Sub
|
||||
|
||||
'Handles the Job result and returns a DBResult.
|
||||
Public Sub HandleJob(Job As HttpJob) As DBResult
|
||||
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
|
||||
In = cs.WrapInputStream(In, "gzip")
|
||||
Dim serverVersion As Float = ReadObject(In) 'ignore
|
||||
Dim method As String = ReadObject(In)
|
||||
Dim table As DBResult
|
||||
table.Initialize
|
||||
table.Columns.Initialize
|
||||
table.rows.Initialize
|
||||
table.Tag = Job.Tag
|
||||
If method = "query" Then
|
||||
Dim numberOfColumns As Int = ReadInt(In)
|
||||
For i = 0 To numberOfColumns - 1
|
||||
table.Columns.Put(ReadObject(In), i)
|
||||
Next
|
||||
Do While ReadByte(In) = 1
|
||||
Dim rowObjects(numberOfColumns) As Object
|
||||
table.rows.Add(rowObjects)
|
||||
For col = 0 To numberOfColumns - 1
|
||||
Dim o As Object = ReadObject(In)
|
||||
rowObjects(col) = o
|
||||
Next
|
||||
Loop
|
||||
Else If method = "batch" Then
|
||||
table.Columns.Put("AffectedRows", 0)
|
||||
Dim rows As Int = ReadInt(In)
|
||||
For i = 0 To rows - 1
|
||||
table.rows.Add(Array As Object(ReadInt(In)))
|
||||
Next
|
||||
End If
|
||||
In.Close
|
||||
' 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
|
||||
out.InitializeToBytesArray(0)
|
||||
Dim In As InputStream = File.OpenInput(Dir, FileName)
|
||||
File.Copy2(In, out)
|
||||
out.Close
|
||||
Return out.ToBytesArray
|
||||
End Sub
|
||||
|
||||
'Converts an image to a bytes array (for BLOB fields).
|
||||
Public Sub ImageToBytes(Image As Bitmap) As Byte()
|
||||
Dim out As OutputStream
|
||||
out.InitializeToBytesArray(0)
|
||||
Image.WriteToStream(out, 100, "JPEG")
|
||||
out.Close
|
||||
Return out.ToBytesArray
|
||||
End Sub
|
||||
|
||||
'Converts a bytes array to an image (for BLOB fields).
|
||||
Public Sub BytesToImage(bytes() As Byte) As Bitmap
|
||||
Dim In As InputStream
|
||||
In.InitializeFromBytesArray(bytes, 0, bytes.Length)
|
||||
Dim bmp As Bitmap
|
||||
bmp.Initialize2(In)
|
||||
Return bmp
|
||||
End Sub
|
||||
|
||||
'Prints the table to the logs.
|
||||
Public Sub PrintTable(Table As DBResult)
|
||||
Log("Tag: " & Table.Tag & ", Columns: " & Table.Columns.Size & ", Rows: " & Table.Rows.Size)
|
||||
Dim sb As StringBuilder
|
||||
sb.Initialize
|
||||
For Each col In Table.Columns.Keys
|
||||
sb.Append(col).Append(TAB)
|
||||
Next
|
||||
Log(sb.ToString)
|
||||
For Each row() As Object In Table.Rows
|
||||
Dim sb As StringBuilder
|
||||
sb.Initialize
|
||||
For Each record As Object In row
|
||||
sb.Append(record).Append(TAB)
|
||||
Next
|
||||
Log(sb.ToString)
|
||||
Next
|
||||
End Sub
|
||||
|
||||
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
|
||||
errorList.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
|
||||
1148
EscPosPrinter.bas
Normal file
BIN
Files/candado.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
Files/durakelo.png
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
Files/engrane.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
Files/engranes.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
Files/errormanager.bal
Normal file
BIN
Files/formapago.bal
Normal file
BIN
Files/kmt.db
Normal file
BIN
Files/layout.bal
Normal file
BIN
Files/login.bal
Normal file
BIN
Files/logo.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
Files/logolanter.bmp
Normal file
|
After Width: | Height: | Size: 147 KiB |
BIN
Files/logolanter.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
Files/logolanter2.bmp
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
Files/logolanter_192x192.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
Files/logolanternegro.bmp
Normal file
|
After Width: | Height: | Size: 149 KiB |
BIN
Files/logolanternegro.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
Files/logolanternegro2.bmp
Normal file
|
After Width: | Height: | Size: 94 KiB |
BIN
Files/mainpage.bal
Normal file
BIN
Files/mesasitem.bal
Normal file
BIN
Files/principal.bal
Normal file
BIN
Files/proditem.bal
Normal file
BIN
Files/proditemcarrito.bal
Normal file
BIN
Files/resumencont.bal
Normal file
BIN
Files/usuario.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 15 KiB |
354
Lanterna2.b4a
Normal file
@@ -0,0 +1,354 @@
|
||||
Build1=Default,lanterna2.keymon.lat,HU2_PUBLIC
|
||||
File1=candado.png
|
||||
File10=logoLanter2.bmp
|
||||
File11=logoLanterNegro.bmp
|
||||
File12=logoLanterNegro.png
|
||||
File13=logoLanterNegro2.bmp
|
||||
File14=principal.bal
|
||||
File15=proditem.bal
|
||||
File16=usuario.png
|
||||
File2=durakelo.png
|
||||
File3=engrane.png
|
||||
File4=engranes.png
|
||||
File5=Layout.bal
|
||||
File6=login.bal
|
||||
File7=logo.png
|
||||
File8=logoLanter.png
|
||||
File9=logoLanter_192x192.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
|
||||
FileGroup5=Default Group
|
||||
FileGroup6=Default Group
|
||||
FileGroup7=Default Group
|
||||
FileGroup8=Default Group
|
||||
FileGroup9=Default Group
|
||||
Group=Default Group
|
||||
Library1=appupdating
|
||||
Library10=randomaccessfile
|
||||
Library11=runtimepermissions
|
||||
Library12=scrollview2d
|
||||
Library13=serial
|
||||
Library14=sql
|
||||
Library15=stringutils
|
||||
Library16=wobblemenu
|
||||
Library17=xui
|
||||
Library18=b4xtable
|
||||
Library2=byteconverter
|
||||
Library3=compressstrings
|
||||
Library4=core
|
||||
Library5=fileprovider
|
||||
Library6=javaobject
|
||||
Library7=json
|
||||
Library8=okhttputils2
|
||||
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~<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33"/>~\n~<supports-screens android:largeScreens="true" ~\n~ android:normalScreens="true" ~\n~ android:smallScreens="true" ~\n~ android:anyDensity="true"/>)~\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")~\n~~\n~AddApplicationText(<provider android:name="android.support.v4.content.FileProvider"~\n~ android:authorities="$PACKAGE$.provider" android:exported="false"~\n~ android:grantUriPermissions="true"><meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/>~\n~ </provider>)~\n~CreateResource(xml, provider_paths,~\n~ <paths><external-files-path name="name" path="" /><files-path name="name" path="" /><files-path name="name" path="shared" /></paths>~\n~)
|
||||
Module1=DBRequestManager
|
||||
Module2=errorManager
|
||||
Module3=EscPosPrinter
|
||||
Module4=numeroATexto
|
||||
Module5=Principal
|
||||
Module6=Starter
|
||||
Module7=Subs
|
||||
NumberOfFiles=16
|
||||
NumberOfLibraries=18
|
||||
NumberOfModules=7
|
||||
Version=12.8
|
||||
@EndOfDesignText@
|
||||
#Region Project Attributes
|
||||
#ApplicationLabel: Lanterna
|
||||
#VersionCode: 1
|
||||
#VersionName: 4.04.18
|
||||
'SupportedOrientations possible values: unspecified, landscape or portrait.
|
||||
#SupportedOrientations: landscape
|
||||
#CanInstallToExternalStorage: False
|
||||
'###########################################################################################################
|
||||
'###################### PULL #############################################################
|
||||
'Ctrl + click ide://run?file=%WINDIR%\System32\cmd.exe&Args=/c&Args=git&Args=pull
|
||||
'###########################################################################################################
|
||||
'###################### PUSH #############################################################
|
||||
'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=github&Args=..\..\
|
||||
'###########################################################################################################
|
||||
'###################### PUSH TORTOISE GIT #########################################################
|
||||
'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=TortoiseGitProc&Args=/command:commit&Args=/path:"./../"&Args=/closeonend:2
|
||||
'###########################################################################################################
|
||||
#End Region
|
||||
|
||||
#Region Activity Attributes
|
||||
#FullScreen: False
|
||||
#IncludeTitle: False
|
||||
#End Region
|
||||
|
||||
Sub Process_Globals
|
||||
'These global variables will be declared once when the application starts.
|
||||
'These variables can be accessed from all modules.
|
||||
Private xui As XUI
|
||||
Private xui As XUI
|
||||
Public Provider As FileProvider
|
||||
End Sub
|
||||
|
||||
Sub Globals
|
||||
'These global variables will be redeclared each time the activity is created.
|
||||
Private i_logo As ImageView
|
||||
Private p_configuracion As Panel
|
||||
Private p_login As Panel
|
||||
Private b_regresar As Button
|
||||
Private b_entrar As Button
|
||||
Private b_envioBD As Button
|
||||
Private b_server As Button
|
||||
Private ImageView4 As ImageView
|
||||
Private ImageView2 As ImageView
|
||||
Private Panel3 As Panel
|
||||
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
|
||||
Private cb_impresionActiva As CheckBox
|
||||
Private CheckBox1 As CheckBox
|
||||
Private b_leyendaDescuento As Button
|
||||
Private p_leyendaDescuento As Panel
|
||||
End Sub
|
||||
|
||||
Sub Activity_Create(FirstTime As Boolean)
|
||||
Activity.LoadLayout("login")
|
||||
Subs.revisaBD
|
||||
p_login.Width = Activity.Width
|
||||
p_login.Height = Activity.Height
|
||||
Subs.agregaColumna("cat_gunaprod", "CAT_PT_DESC", "TEXT")
|
||||
Subs.agregaColumna("cat_gunaprod", "CAT_PS_DESC", "TEXT")
|
||||
Subs.agregaColumna("cat_gunaprod", "CAT_PS_DESC", "TEXT")
|
||||
Subs.agregaColumna("cat_gunaprod", "CAT_GP_FECHA", "TEXT")
|
||||
Subs.agregaColumna("cat_gunaprod", "CAT_GP_FECHA_MOD", "TEXT")
|
||||
Starter.skmt.ExecNonQuery("delete from cuentaa")
|
||||
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 = Activity.Height : p_configuracion.width = Activity.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)
|
||||
i_logo.Left = (Activity.Width / 2) - (i_logo.Width / 2)
|
||||
Subs.centraPanel(Panel3, p_configuracion.Width)
|
||||
' subs.panelVisible(p_configuracion, 0, 0)
|
||||
Private x As Cursor = Starter.skmt.ExecQuery($"select * from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'DESCUENTO X EFECTIVO'"$)
|
||||
If x.RowCount = 0 Then 'Insertamos el descuento para efectivo por default.
|
||||
' Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("DESCUENTO X EFECTIVO"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("DESCUENTO X EFECTIVO","10"))
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Sub Activity_Resume
|
||||
Private z As ResultSet = Starter.skmt.ExecQuery2("select * from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As String ("IMPRESION_ACTIVA"))
|
||||
Do While z.NextRow
|
||||
Private ia As Boolean = False
|
||||
If z.GetString("CAT_VA_VALOR") = 1 Then ia = True
|
||||
Loop
|
||||
cb_impresionActiva.Checked = ia
|
||||
Starter.imprimirTicket = ia
|
||||
End Sub
|
||||
|
||||
Sub Activity_Pause (UserClosed As Boolean)
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
Private Sub i_logo_Click
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub b_regresar_Click
|
||||
p_configuracion.Visible = False
|
||||
Subs.panelVisible(p_login, 0, 0)
|
||||
End Sub
|
||||
|
||||
Private Sub b_entrar_Click
|
||||
StartActivity(Principal)
|
||||
End Sub
|
||||
|
||||
Private Sub b_server_Click
|
||||
If E_SERVER.Text <> "" Then
|
||||
Starter.DBReqServer = E_SERVER.text
|
||||
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("SERVER"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("SERVER", Starter.DBReqServer))
|
||||
p_configuracion.Visible = False
|
||||
reqManager.Initialize(Me, Starter.DBReqServer)
|
||||
Starter.reqManager.Initialize(Me, Starter.DBReqServer)
|
||||
' Log(E_SERVER.text)
|
||||
Else
|
||||
ToastMessageShow("Por favor ingrese la direccion del servidor", True)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'Enviamos la base de datos por correo o Whatsapp.
|
||||
Private Sub b_envioBD_Click
|
||||
'Hay que agregar las siguientes lineas al manifiesto:
|
||||
'AddApplicationText(<Provider android:name="android.support.v4.content.FileProvider"
|
||||
' android:authorities="$PACKAGE$.provider" android:exported="false"
|
||||
' android:grantUriPermissions="true"><meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/>
|
||||
' </Provider>)
|
||||
'CreateResource(xml, provider_paths,
|
||||
' <paths><external-files-path name="name" path="" /><files-path name="name" path="" /><files-path name="name" path="shared" /></paths>
|
||||
')
|
||||
Dim Provider As FileProvider
|
||||
Provider.Initialize
|
||||
Dim FileName As String = "kmt.db"
|
||||
'copy the shared file to the shared folder
|
||||
Log("xxxxxx:"&Provider.SharedFolder)
|
||||
Sleep(1000)
|
||||
File.Copy(File.DirInternal, FileName, Provider.SharedFolder, FileName)
|
||||
Dim email As Email
|
||||
email.To.Add("soporte@keymonsoft.com")
|
||||
email.Subject = "Envio Base de datos Mariana Censos"
|
||||
email.Attachments.Add(Provider.GetFileUri(FileName))
|
||||
' email.Attachments.Add(Provider.GetFileUri(FileName)) 'second attachment
|
||||
Dim in As Intent = email.GetIntent
|
||||
in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION
|
||||
StartActivity(in)
|
||||
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 = Activity.Width
|
||||
p_configuracion.Height = Activity.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"))
|
||||
Dim CAT_GP_TIPO As String = records(result.Columns.Get("CAT_GP_TIPO"))
|
||||
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, CAT_GP_TIPO) 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,CAT_GP_TIPO))
|
||||
Next
|
||||
For v = 1 To 20 'Agregamos productos varios (editables)
|
||||
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, CAT_GP_TIPO) VALUES (?,?,?,?,?,?,?,?,?)", Array As Object ($"AVAR${NumberFormat2(v, 2, 0, 0, False)}"$,$"Alimentos Varios ${NumberFormat2(v, 2, 0, 0, False)}"$,"1","10000",Null,"2024-02-04 17:00:00","2024-02-04 17:00:00","VARIOS","ALIMENTOS"))
|
||||
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, CAT_GP_TIPO) VALUES (?,?,?,?,?,?,?,?,?)", Array As Object ($"VVAR${NumberFormat2(v, 2, 0, 0, False)}"$,$"Bebidas Varias ${NumberFormat2(v, 2, 0, 0, False)}"$,"1","10000",Null,"2024-02-04 17:00:00","2024-02-04 17:00:00","VARIOS","VINOS Y LICORES"))
|
||||
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
|
||||
' If Principal.cb_mesero.IsInitialized Then Principal.cb_mesero.SetItems(Subs.traeMeserosLista)
|
||||
Starter.cargaMeseros = true
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
ToastMessageShow("¡Información cargada!", False)
|
||||
Job.Release
|
||||
End Sub
|
||||
|
||||
Private Sub b_entrar_LongClick
|
||||
' Dim a As Int = "a"
|
||||
' Subs.alineaDerecha(NumberFormat2(1450, 1, 2, 2, True), 30, ".")
|
||||
End Sub
|
||||
|
||||
Private Sub user_TextChanged (Old As String, New As String)
|
||||
If New.Trim = "KMTS1" Then i_conf.Visible = True Else i_conf.Visible = False
|
||||
End Sub
|
||||
|
||||
Private Sub cb_impresionActiva_CheckedChange(Checked As Boolean)
|
||||
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("IMPRESION_ACTIVA"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("IMPRESION_ACTIVA", Checked))
|
||||
End Sub
|
||||
|
||||
Private Sub b_leyendaDescuento_Click
|
||||
|
||||
End Sub
|
||||
27
Lanterna2.b4a.meta
Normal file
@@ -0,0 +1,27 @@
|
||||
ModuleBookmarks0=
|
||||
ModuleBookmarks1=
|
||||
ModuleBookmarks2=
|
||||
ModuleBookmarks3=
|
||||
ModuleBookmarks4=
|
||||
ModuleBookmarks5=
|
||||
ModuleBookmarks6=
|
||||
ModuleBookmarks7=
|
||||
ModuleBreakpoints0=
|
||||
ModuleBreakpoints1=
|
||||
ModuleBreakpoints2=
|
||||
ModuleBreakpoints3=
|
||||
ModuleBreakpoints4=
|
||||
ModuleBreakpoints5=
|
||||
ModuleBreakpoints6=
|
||||
ModuleBreakpoints7=
|
||||
ModuleClosedNodes0=
|
||||
ModuleClosedNodes1=
|
||||
ModuleClosedNodes2=
|
||||
ModuleClosedNodes3=
|
||||
ModuleClosedNodes4=
|
||||
ModuleClosedNodes5=2
|
||||
ModuleClosedNodes6=
|
||||
ModuleClosedNodes7=
|
||||
NavigationStack=Main,Globals,49,0,Principal,b_mesaCerrar_Click,1195,0,Principal,l_prodX_Click,2803,0,Principal,LlenaProdsLL,627,0,Principal,clv_prods_ll_VisibleRangeChanged,660,0,Principal,clv_orden_VisibleRangeChanged,2831,6,Principal,LlenaOrden,2871,0,Principal,l_selAlimentos_Click,2969,0,Principal,actualizaProductos,2912,6,Principal,l_prods_Click,281,1
|
||||
SelectedBuild=0
|
||||
VisibleModules=6,7,5
|
||||
3038
Principal.bas
Normal file
129
Starter.bas
Normal file
@@ -0,0 +1,129 @@
|
||||
B4A=true
|
||||
Group=Default Group
|
||||
ModulesStructureVersion=1
|
||||
Type=Service
|
||||
Version=9.9
|
||||
@EndOfDesignText@
|
||||
#Region Service Attributes
|
||||
#StartAtBoot: False
|
||||
#ExcludeFromLibrary: True
|
||||
#End Region
|
||||
|
||||
Sub Process_Globals
|
||||
'These global variables will be declared once when the application starts.
|
||||
'These variables can be accessed from all modules.
|
||||
Public rp As RuntimePermissions
|
||||
Dim reqManager As DBRequestManager
|
||||
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
|
||||
Private logcat As LogCat
|
||||
Dim Logger As Boolean
|
||||
Dim rutav As String = ""
|
||||
Dim tipov As String = "VENTA"
|
||||
Dim ticketActual, mesaActual, meseroActual, comensalesActuales, totalActual, mac_impresora As String
|
||||
Dim formasDePago As Int = 1
|
||||
Dim imprimirTicket As Boolean = False
|
||||
Dim nivelActual As String
|
||||
Dim catActual, subcatActual As String
|
||||
Dim atrasPresionado As Boolean = False
|
||||
dim cargaMeseros as Boolean = False
|
||||
End Sub
|
||||
|
||||
Sub Service_Create
|
||||
'This is the program entry point.
|
||||
'This is a good place to load resources that are not specific to a single activity.
|
||||
If Logger Then LogColor("'/////////////////////////////////////////////////////////////////////////////////////////////", Colors.Green)
|
||||
If Logger Then LogColor("'///////////////////////////////////// Iniciamos Starter /////////////////////////////////", Colors.Green)
|
||||
If Logger Then LogColor("'/////////////////////////////////////////////////////////////////////////////////////////////", Colors.Green)
|
||||
ruta = File.DirInternal
|
||||
If File.Exists(ruta, "kmt.db") = False Then
|
||||
File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db")
|
||||
End If
|
||||
skmt.Initialize(ruta,"kmt.db", True)
|
||||
'Para los Logs
|
||||
#if RELEASE
|
||||
logcat.LogCatStart(Array As String("-v","raw","*:F","B4A:v"), "logcat")
|
||||
#end if
|
||||
logs.Initialize
|
||||
DBReqServer = "http://keymon.lat:1782"
|
||||
If Logger Then Log($"Starter reqManager server: ${DBReqServer}"$)
|
||||
Logger = False
|
||||
End Sub
|
||||
|
||||
Sub Service_Start (StartingIntent As Intent)
|
||||
Service.StopAutomaticForeground 'Starter service can start in the foreground state in some edge cases.
|
||||
Subs.revisaBD
|
||||
#if DEBUG
|
||||
Logger = True
|
||||
#else
|
||||
Logger = False
|
||||
#End If
|
||||
Private c As Cursor = skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("SERVER"))
|
||||
' Log(c.RowCount)
|
||||
If c.RowCount > 0 Then
|
||||
c.Position = 0
|
||||
DBReqServer = c.GetString("CAT_VA_VALOR")
|
||||
Log("De base de datos -> " & DBReqServer)
|
||||
End If
|
||||
reqManager.Initialize(Me, DBReqServer)
|
||||
End Sub
|
||||
|
||||
Sub Service_TaskRemoved
|
||||
'This event will be raised when the user removes the app from the recent apps list.
|
||||
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(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))
|
||||
StartActivity(errorManager)
|
||||
Return True
|
||||
End Sub
|
||||
|
||||
Sub Service_Destroy
|
||||
' Timer1.Enabled=False
|
||||
If Logger Then LogColor("starter destroyed", Colors.red)
|
||||
End Sub
|
||||
|
||||
Sub JobDone(Job As HttpJob)
|
||||
LogColor("Starter - JobDone", Colors.Magenta)
|
||||
If Job.Success = False Then
|
||||
' ToastMessageShow("Error: " & Job.ErrorMessage, True)
|
||||
Else
|
||||
If Logger Then LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211110
|
||||
If Job.JobName = "DBRequest" Then
|
||||
Dim result As DBResult = reqManager.HandleJob(Job)
|
||||
If result.Tag = "updateKell_UTR" Then 'query tag
|
||||
If Logger Then Subs.logJobDoneResultados(result)
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Job.Release
|
||||
End Sub
|
||||
|
||||
'Para los Logs
|
||||
Private Sub logcat_LogCatData (Buffer() As Byte, Length As Int)
|
||||
logs.Append(BytesToString(Buffer, 0, Length, "utf8"))
|
||||
If logs.Length > 4000 Then
|
||||
logs.Remove(0, logs.Length - 2000) 'Obtenemos log de 2000 ~ 4000 chars
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'Revisa que la conexion a la base de datos este bien.
|
||||
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
|
||||
167
errorManager.bas
Normal file
@@ -0,0 +1,167 @@
|
||||
B4A=true
|
||||
Group=Default Group
|
||||
ModulesStructureVersion=1
|
||||
Type=Activity
|
||||
Version=10.2
|
||||
@EndOfDesignText@
|
||||
#Region Activity Attributes
|
||||
#FullScreen: False
|
||||
#IncludeTitle: True
|
||||
#End Region
|
||||
'******************************************************************************
|
||||
'Este modulo intercepta los errores de la aplicación mediante "Starter.Application_Error" y muestra una pantalla
|
||||
'con el log del error y lo manda al servidor con un query de DBRequestManager, se necesita que exista el query
|
||||
'en el "config.properties" llamado "guardaErrores" y que tenga el siguiente texto:
|
||||
'
|
||||
'sql.guardaErrores=INSERT INTO KELLOGGS.PUSH_INFO (ID, RUTA, FECHA, DATOS) VALUES((?),(?),(?),(?))
|
||||
'
|
||||
'Agregar estas lineas a "Starter.Process_Globals"
|
||||
' 'Para los Logs
|
||||
' Dim logs As StringBuilder
|
||||
' Private logcat As LogCat
|
||||
'
|
||||
'Agregar estas lineas a "Starter.Service_Create"
|
||||
' 'Para los Logs
|
||||
' #if RELEASE
|
||||
' logcat.LogCatStart(Array As String("-v","raw","*:F","B4A:v"), "logcat")
|
||||
' #end if
|
||||
' logs.Initialize
|
||||
'
|
||||
'Agregar este Sub a "Starter"
|
||||
'
|
||||
'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.
|
||||
' Dim jo As JavaObject
|
||||
' Dim l As Long = 500: jo.InitializeStatic("java.lang.Thread").RunMethod("sleep", Array(l)) 'Sleep 500ms
|
||||
' logcat.LogCatStop
|
||||
' logs.Append(StackTrace)
|
||||
' Subs.revisaBD
|
||||
' Subs.errorLog.ExecNonQuery2("INSERT INTO errores(fecha, error) VALUES (?,?)", Array As Object (Subs.fechaKMT(DateTime.now), logs))
|
||||
' StartActivity(errorManager)
|
||||
' Return True
|
||||
'End Sub
|
||||
'******************************************************************************
|
||||
|
||||
Sub Process_Globals
|
||||
'These global variables will be declared once when the application starts.
|
||||
'These variables can be accessed from all modules.
|
||||
|
||||
End Sub
|
||||
|
||||
Sub Globals
|
||||
'These global variables will be redeclared each time the activity is created.
|
||||
'These variables can only be accessed from this module.
|
||||
' Dim errorLog As SQL
|
||||
Dim c As Cursor
|
||||
Private p_principal As Panel
|
||||
Private l_titulo As Label
|
||||
Private svScroll As ScrollView
|
||||
Private etText As EditText
|
||||
Private c_continuar As Button
|
||||
Private p_botones As Panel
|
||||
Private b_salir As Button
|
||||
End Sub
|
||||
|
||||
Sub Activity_Create(FirstTime As Boolean)
|
||||
'Do not forget to load the layout file created with the visual designer. For example:
|
||||
Activity.LoadLayout("errorManager")
|
||||
End Sub
|
||||
|
||||
Sub Activity_Resume
|
||||
Dim elError As String = ""
|
||||
Dim laFecha As String = ""
|
||||
' svScroll.Initialize(500dip)
|
||||
' Activity.AddView(svScroll, 0, 300, 100%x, 80%y)
|
||||
p_principal.Height = Activity.Height
|
||||
p_principal.Width = Activity.Width
|
||||
svScroll.Width = Round(p_principal.Width * 0.9)
|
||||
svScroll.Left = Round(p_principal.Width/2)-Round(svScroll.Width/2)
|
||||
p_botones.Left = Round(p_principal.Width/2)-Round(p_botones.Width/2)
|
||||
p_botones.Top = Activity.Height - (p_botones.Height + 80)
|
||||
etText.Initialize("")
|
||||
svScroll.Panel.AddView(etText, 0, 0, 90%x, 80%y)
|
||||
etText.InputType = etText.INPUT_TYPE_NONE
|
||||
etText.Gravity = Gravity.TOP
|
||||
etText.SingleLine = False
|
||||
etText.Wrap = False
|
||||
' Dim lblText, edtText As StringBuilder
|
||||
Dim lbl As Label
|
||||
lbl.Initialize("")
|
||||
Activity.AddView(lbl, 0, 300, 100%x, 100%y) 'ignore
|
||||
etText.Text = ""
|
||||
Subs.revisaBD
|
||||
c = Subs.errorLog.ExecQuery("select * from errores order by fecha desc limit 1")
|
||||
If c.RowCount > 0 Then
|
||||
c.Position = 0
|
||||
elError = c.GetString("error")
|
||||
laFecha = c.GetString("fecha")
|
||||
etText.Text = elError
|
||||
End If
|
||||
c.Close
|
||||
Dim usuario As String = ""
|
||||
c = Starter.skmt.ExecQuery("select usuario from usuarioa")
|
||||
If c.RowCount > 0 Then
|
||||
c.Position = 0
|
||||
usuario = c.GetString("USUARIO")
|
||||
End If
|
||||
|
||||
' Log("++++++" & Starter.logsStr)
|
||||
' etText.Text = etText.Text & Starter.logsStr
|
||||
' lbl.TextSize = etText.TextSize
|
||||
' lbl.Text = etText.Text
|
||||
' Dim su As StringUtils
|
||||
' Dim edheight As Int = su.MeasureMultilineTextHeight(lbl, lbl.Text)
|
||||
' lbl.RemoveView
|
||||
' etText.Height = edheight
|
||||
' svScroll.Panel.Height = edheight
|
||||
svScroll.Height = Round(Activity.Height * 0.9)
|
||||
' Log(edheight)
|
||||
|
||||
Dim cmd As DBCommand
|
||||
cmd.Initialize
|
||||
cmd.Name = "guardaErrores"
|
||||
cmd.Parameters = Array As Object(laFecha, usuario&"|"&Starter.rutaV, laFecha, elError)
|
||||
Log($"Mandamos: ${Subs.fechaKMT(DateTime.Now)}, |${usuario}|, ${Subs.fechaKMT(DateTime.Now)}"$)
|
||||
Starter.reqManager.ExecuteCommand(cmd,"guardaErrores")
|
||||
End Sub
|
||||
|
||||
Sub Activity_Pause (UserClosed As Boolean)
|
||||
|
||||
End Sub
|
||||
|
||||
Sub JobDone(Job As HttpJob)
|
||||
Log("errorManager - JobDone")
|
||||
If Job.Success = False Then
|
||||
ToastMessageShow("Error: " & Job.ErrorMessage, True)
|
||||
Else
|
||||
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 = "guardaErrores" Then 'query tag
|
||||
For Each records() As Object In result.Rows
|
||||
For Each k As String In result.Columns.Keys
|
||||
Log("GuardaErrores: " & k & ": " & records(result.Columns.Get(k)))
|
||||
Next
|
||||
Next
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Job.Release
|
||||
End Sub
|
||||
|
||||
Private Sub c_continuar_Click
|
||||
' Subs.iniciaActividad("Principal")
|
||||
' B4XPages.ShowPage("Principal")
|
||||
End Sub
|
||||
|
||||
Private Sub b_salir_Click
|
||||
cierraActividades
|
||||
End Sub
|
||||
|
||||
Sub cierraActividades
|
||||
Log("closing activities")
|
||||
Dim jo As JavaObject
|
||||
jo.InitializeContext
|
||||
jo.RunMethod("finishAffinity", Null)
|
||||
End Sub
|
||||
135
numeroATexto.bas
Normal file
@@ -0,0 +1,135 @@
|
||||
B4A=true
|
||||
Group=Default Group
|
||||
ModulesStructureVersion=1
|
||||
Type=Class
|
||||
Version=12.8
|
||||
@EndOfDesignText@
|
||||
Sub Class_Globals
|
||||
Dim UnitWords() As String = Array As String( _
|
||||
"", "un", "dos", "tres", "cuatro", _
|
||||
"cinco", "seis", "siete", "ocho", "nueve", _
|
||||
"diez", "once", "doce", "trece", "catorce", _
|
||||
"quince", "dieciseis", "diecisiete", "dieciocho", "diecinueve" _
|
||||
)
|
||||
Dim TenWords() As String = Array As String( _
|
||||
"", "diez", "veinte", "treinta", "cuarenta", _
|
||||
"cincuenta", "sesenta", "setenta", "ochenta", "noventa" _
|
||||
)
|
||||
'only need to go up to Pentillions to handle largest Long integer, but while we're here...
|
||||
Dim ThousandWords() As String = Array As String( _
|
||||
"", "mil", "millon", "billon", "trillon", _
|
||||
"Cuadrillon", "Pentillion", "Sexillion", "Septillion", "Octillion" _
|
||||
)
|
||||
Dim moneda As String = "pesos"
|
||||
End Sub
|
||||
|
||||
'Initializes the object. You can add parameters to this method if needed.
|
||||
Public Sub Initialize
|
||||
Return Me
|
||||
End Sub
|
||||
|
||||
Sub NumberToWords(N As Double) As String
|
||||
If N < 0 Then
|
||||
Return "Minus " & NumberToWordsPositive(-N)
|
||||
Else
|
||||
Return NumberToWordsPositive(N) 'including zero
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Sub NumberToWordsPositive(N0 As Double) As String
|
||||
Private N As Long
|
||||
Private temp1() As String = Regex.Split("\.", NumberFormat2(N0, 1, 2, 2, False))
|
||||
Private conDecimales As Boolean = False
|
||||
Private losCents As String = 0
|
||||
' Log(N0)
|
||||
' Log(temp1.Length)
|
||||
' Log(temp1(0))
|
||||
If temp1.Length > 1 Then
|
||||
conDecimales = True
|
||||
N = temp1(0)
|
||||
losCents = temp1(1)
|
||||
' Log($"Con Decimales: ${losCents}"$)
|
||||
Else
|
||||
N = N0
|
||||
End If
|
||||
' Log(">> " & N)
|
||||
If N = 0 Then
|
||||
Return "Cero" 'that gets rid of that pesky special case
|
||||
End If
|
||||
Dim GroupsOfThree(10) As Int
|
||||
Dim NumGroupsOfThree As Int = 0
|
||||
Do While N <> 0
|
||||
GroupsOfThree(NumGroupsOfThree) = N Mod 1000
|
||||
NumGroupsOfThree = NumGroupsOfThree + 1
|
||||
N = N / 1000
|
||||
Loop
|
||||
|
||||
Dim Temp As String = ""
|
||||
For GroupOfThree = NumGroupsOfThree - 1 To 0 Step -1
|
||||
Dim ThisGroup As Int = GroupsOfThree(GroupOfThree)
|
||||
If ThisGroup <> 0 Then
|
||||
If Temp.Length <> 0 Then
|
||||
' If GroupOfThree = 0 And ThisGroup < 100 Then
|
||||
' Temp = Temp & " y "
|
||||
'' If Temp.Contains("mil y ") Then Temp = "mil "
|
||||
' Else
|
||||
' Temp = Temp & " "
|
||||
' End If
|
||||
Temp = Temp & " "
|
||||
End If
|
||||
Temp = Temp & NumberToWords1000(ThisGroup)
|
||||
If GroupOfThree <> 0 Then
|
||||
' Log($"${Temp} - ${ThousandWords(GroupOfThree)}"$)
|
||||
Temp = Temp & " " & ThousandWords(GroupOfThree)
|
||||
If Temp = "un mil" Then
|
||||
' Log(9)
|
||||
Temp = "mil"
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
Temp = Temp.Substring2(0,1).ToUppercase & Temp.SubString(1)
|
||||
|
||||
Return Temp & $" ${moneda} ${NumberFormat2(losCents, 2, 0, 0, False)}/100 M.N."$
|
||||
End Sub
|
||||
|
||||
Sub NumberToWords1000(N As Int) As String
|
||||
If N < 100 Then
|
||||
' Log(1)
|
||||
Return NumberToWords100(N)
|
||||
End If
|
||||
Dim Hundreds As String = UnitWords(N / 100) & "cientos" 'Hundreds always non-blank since N < 100 already done
|
||||
If UnitWords(N/100) = "nueve" Then Hundreds = "novecientos"
|
||||
If UnitWords(N/100) = "cinco" Then Hundreds = "quinientos"
|
||||
If UnitWords(N/100) = "siete" Then Hundreds = "setecientos"
|
||||
' Log($"${N/100} - ${UnitWords(N / 100)}"$)
|
||||
If UnitWords(N / 100) = "un" Then Hundreds = "ciento"
|
||||
|
||||
Dim TensUnits As String = NumberToWords100(N Mod 100) 'TensUnits could be blank if digits are 00
|
||||
If TensUnits.Length = 0 Then
|
||||
' Log(2)
|
||||
If UnitWords(N / 100) = "un" Then Hundreds = "cien"
|
||||
Return Hundreds
|
||||
Else
|
||||
' Log(3)
|
||||
Return Hundreds & " " & TensUnits
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Sub NumberToWords100(N As Int) As String
|
||||
If N < 20 Then
|
||||
Return UnitWords(N)
|
||||
End If
|
||||
Dim Tens As String = TenWords(N / 10) 'Tens always non-blank since N < 20 already done
|
||||
Dim Units As String = UnitWords(N Mod 10) 'Units could be blank if digit is 0
|
||||
If Units.Length = 0 Then
|
||||
Return Tens
|
||||
Else
|
||||
' Log($"${Tens} - ${Units}"$)
|
||||
If Tens = "veinte" Then
|
||||
Return "veinti" & Units
|
||||
Else
|
||||
Return Tens & " y " & Units
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||