From de9473c0b7c9ed1cb6e0654c411f6fd476a1571a Mon Sep 17 00:00:00 2001 From: Jose Alberto Guerra Ugalde Date: Tue, 11 Mar 2025 09:25:08 -0600 Subject: [PATCH] - VERSION 5.03.03 - Promos por monto. - Encuestas con modulo de Alan para subir archivo con clientes que SI deben de ver la encuesta. - Correccion de la funcion Subs.revisaHora, que manda "falso" aun cuando las horas estan bien ... solo se puso que mandara siempre "true", hay que arreglarla!! --- B4A/C_Principal.bas | 7 +- B4A/DBRequestManager1.bas | 360 +++++++++++++++++++ B4A/DBRequestManager2.bas | 201 +++++++++++ B4A/Files/marker-azul.png | Bin 0 -> 4374 bytes B4A/Files/marker-azul1.png | Bin 0 -> 3496 bytes B4A/Files/marker-azul2.png | Bin 0 -> 3390 bytes B4A/Files/marker-azul3.png | Bin 0 -> 3916 bytes B4A/Files/marker-azul4.png | Bin 0 -> 3867 bytes B4A/Files/marker-azul5.png | Bin 0 -> 2652 bytes B4A/Files/marker-rojo.png | Bin 0 -> 2488 bytes B4A/Files/marker-rojo1.png | Bin 0 -> 4356 bytes B4A/Files/marker-rojo2.png | Bin 0 -> 3844 bytes B4A/Files/marker-verde.png | Bin 0 -> 4135 bytes B4A/KelloggsV4.b4a | 712 +++++++++++++++++++------------------ B4A/KelloggsV4.b4a.meta | 6 +- B4A/MAPA_RUTAS.bas | 3 +- B4A/Subs.bas | 22 +- B4A/kms_helperSubs.bas | 22 +- 18 files changed, 969 insertions(+), 364 deletions(-) create mode 100644 B4A/DBRequestManager1.bas create mode 100644 B4A/DBRequestManager2.bas create mode 100644 B4A/Files/marker-azul.png create mode 100644 B4A/Files/marker-azul1.png create mode 100644 B4A/Files/marker-azul2.png create mode 100644 B4A/Files/marker-azul3.png create mode 100644 B4A/Files/marker-azul4.png create mode 100644 B4A/Files/marker-azul5.png create mode 100644 B4A/Files/marker-rojo.png create mode 100644 B4A/Files/marker-rojo1.png create mode 100644 B4A/Files/marker-rojo2.png create mode 100644 B4A/Files/marker-verde.png diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index 254252f..8229d2c 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -753,10 +753,11 @@ Sub cargar_Click cmd.Initialize cmd.Name = "SELECT_HIST_ENCUESTA_KELL" - cmd.Parameters = Array As Object( e_ruta.text, ALMACEN) + cmd.Parameters = Array As Object( e_ruta.text, ALMACEN,e_ruta.text, ALMACEN,e_ruta.text, ALMACEN,e_ruta.text, ALMACEN ) reqManager.ExecuteQuery(cmd , 0, "HIST_ENCUESTA2") + Log($"${e_ruta.text}, ${ALMACEN},${e_ruta.text}, ${ALMACEN},${e_ruta.text}, ${ALMACEN},${e_ruta.text}, ${ALMACEN}"$) - +' ruta , ALMACEN, ruta , ALMACEN, ruta, ALMACEN, ruta, ALMACEN, cmd.Initialize cmd.Name = "SELECT_EXHIBIDOR_RUTA_KELL" @@ -1785,7 +1786,7 @@ Sub JobDone(Job As HttpJob) Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("HORA", Starter.HORA)) Next If Not(Subs.revisaHora) Then - Log("***************** HORA INCORRECTA") + LogColor("***************** HORA INCORRECTA",Colors.red) MsgboxAsync("La hora del equipo NO coincide con la hora del servidor, es necesario corregirla", "AVISO IMPORTANTE") End If End If diff --git a/B4A/DBRequestManager1.bas b/B4A/DBRequestManager1.bas new file mode 100644 index 0000000..3d2d3ad --- /dev/null +++ b/B4A/DBRequestManager1.bas @@ -0,0 +1,360 @@ +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 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 + +'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. +'Timeout - The http request timeout in ms, or 0 if default (30 secs) +Public Sub ExecuteQuery3(Command As DBCommand, Limit As Int, Tag As Object, Timeout As Int) 'Mod por CHV, agregué el parametro Timeout - 211229 + Dim j As HttpJob + Dim ms As OutputStream + Dim out2 As OutputStream = StartJob(j,ms, Tag) + WriteObject(Command.Name, out2) + WriteInt(Limit, out2) + WriteList(Command.Parameters, out2) + out2.Close + j.PostBytes(link & "?method=query", ms.ToBytesArray) + If Timeout <> 0 Then j.GetRequest.Timeout = Timeout +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 + 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/DBRequestManager2.bas b/B4A/DBRequestManager2.bas new file mode 100644 index 0000000..3dbcf14 --- /dev/null +++ b/B4A/DBRequestManager2.bas @@ -0,0 +1,201 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=6.8 +@EndOfDesignText@ +'Requires support for resumable subs +'Class module + +Sub Class_Globals + Private mTarget As Object + Private link As String + Private VERSION As Float = 2 + 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). +'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) As HttpJob + Dim ser As B4XSerializator + Dim data() As Byte = ser.ConvertObjectToBytes(CreateMap("command": Command, "limit": Limit, "version": VERSION)) + Return SendJob(CreateJob, data, Tag, "query2") +End Sub + +Private Sub SendJob(j As HttpJob, Data() As Byte, Tag As Object, Method As String) As HttpJob + j.Tag = Tag + j.PostBytes(link & "?method=" & Method , Data) + Return j +End Sub + +Private Sub CreateJob As HttpJob + Dim j As HttpJob + j.Initialize("DBRequest", mTarget) + Return j +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) As HttpJob + Dim j As HttpJob = CreateJob + ExecuteBatchImpl(j, ListOfCommands, Tag) + Return j +End Sub + +Private Sub ExecuteBatchImpl(Job As HttpJob, ListOfCommands As List, Tag As Object) + Dim ser As B4XSerializator + ser.ConvertObjectToBytesAsync(CreateMap("commands": ListOfCommands, "version": VERSION), "ser") + Wait For (ser) ser_ObjectToBytes (Success As Boolean, Bytes() As Byte) + If Success = False Then + Log("Error building command: " & LastException) + Return + End If + Dim ser As B4XSerializator = Sender + SendJob(Job, Bytes, Tag, "batch2") +End Sub + + +'Similar to ExecuteBatch. Sends a single command. +Public Sub ExecuteCommand(Command As DBCommand, Tag As Object) As HttpJob + Return ExecuteBatch(Array As DBCommand(Command), Tag) +End Sub + +'Handles the Job result and returns a DBResult. +'It is recommended to use HandleJobAsync instead. +Public Sub HandleJob(Job As HttpJob) As DBResult + Dim ser As B4XSerializator + Dim data() As Byte = Bit.InputStreamToBytes(Job.GetInputStream) + Dim res As DBResult = ser.ConvertBytesToObject(data) + res.Tag = Job.Tag + Return res +End Sub +'Handles the Job result and raises the Result event when the data is ready. + +Public Sub HandleJobAsync(Job As HttpJob, EventName As String) + Dim ser As B4XSerializator + Dim data() As Byte = Bit.InputStreamToBytes(Job.GetInputStream) + ser.ConvertBytesToObjectAsync(data, "ser") + Wait For (ser) ser_BytesToObject (Success As Boolean, NewObject As Object) + If Success = False Then + Log("Error reading response: " & LastException) + Return + End If + Dim res As DBResult = NewObject + res.Tag = Job.Tag + CallSubDelayed2(mTarget, EventName & "_result", res) +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 +#if Not(B4J) +'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 +#End If + +'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 + 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/marker-azul.png b/B4A/Files/marker-azul.png new file mode 100644 index 0000000000000000000000000000000000000000..362226c84d019ce5f9408de71148a9a61841cd49 GIT binary patch literal 4374 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 H-Q)iU@FWeE literal 0 HcmV?d00001 diff --git a/B4A/Files/marker-azul4.png b/B4A/Files/marker-azul4.png new file mode 100644 index 0000000000000000000000000000000000000000..152a0daa7bc0b2fb820ad085a1ad07daaa18f410 GIT binary patch literal 3867 zcmY*cc|4Tu*S|3sTaDJClCeya2qA089wH25nb8bp24iVtM6zaV8C%FMQXzXN zB}-(4L5jj8dZLICzwx}!=l8zvAJ=`Ib6w{?=X<`_IoIdD?^s?o5)(cs3;=+biLt&l zcQ)pZ>tF%yvuE(9H+SM8SsUpA)dPpvTm|Hrck|5#YNH(e8eMWG(5yKrBYX3+;t+$6!#3?r0=NQAGuV zRzzcvDvB5+5~GGvIj8ES;x7Gfcrw=Of8!HK|I)xEL}_8T10mHV(udTDN_XJ`|ldBMwlldm>@C67D4&6� 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 b<-c8p6Zq#WStYx_zkrFsW&LVBH`;#ymGv1C literal 0 HcmV?d00001 diff --git a/B4A/Files/marker-azul5.png b/B4A/Files/marker-azul5.png new file mode 100644 index 0000000000000000000000000000000000000000..b4981107b449ae514045bf66ad04bed617473687 GIT binary patch literal 2652 zcmY*bc|04~7LKSjG_k8~QerD1sD0Pisa=Iy5=jV^L{KR;MAg=!#fzYO)p)g3=|n9h z7)x8#MU_%*Y*kx|(MlDanAhLD_x?Edob#P?&-w26*Uj@j?kp~3 zvjky5-f8KL)aE(91Yc(dK*O-oA}=`*W$$SZ0NgJE?VtsCxd_<>l>h)hJok++>LMST zcOi%1ACws6>0uE`iqk`5Nf?|SHIB^d1^}#Vsbq9yEG`j>!9@{>)|#K&yELH$thMF| zV^4%9`4}#m;F3bY`K289k4%Y;G{#N#WQLuOmU!>E|4qj%h8l9L(w$Rs4PEOWKHqs+eqVx^S&CT@@hWdtva9#&I;S4bm zO@$K^)P4>?;u0b$1acyQM1<}SL}N%viPow~Nd&9~9*sA~V6nz<4B7|_H!#4W;b^Rp z0UT>&gf%rbFf+s(U{rsuPbA>~yPufwQwE+O`ui1q13kn(<^9;gi$cKhSnRK~F|hi( z{(qR2{yvfaA!hR*g!fin^p7(8GX0}2j>wZVnWvp@DFXxm2#2{M?ft1?t5=_sCI@8( zY;SdB#{8zWl)~5BFgEFTt|xanOtzoH98h(6bt7k&7B(SJk@BOePOio@RjZ@3Dlb-U zS4eEm7gbonffvN83C_r005YRpVX0K3gT~b`H&t!l4I%mQTiKEePq*H89PTSuI(HKg z#DX>6*dyhD{4=D!v{f_vjt{?sNXdHpV>-lVlcA38&94ONP4jw?ACH;sk=}zhUk1;cI0EXMxMZs z{j|-_5~MRxQ0*e>uF5GYrAbtgvLSB-wjuUs6wP_mzed{%^l&fCJ~r5WOnaNgmclLO zA;dp~(85&)%kz!;H$xs6r*VCCucDd_e2hTnleiBmY-$MsJT$m0vdF6n^^mC-o(LgB z3Hn0!^N)gTLvuzgI>fjeb){6K@61`hoD^0Wz8p$cQC{Odl&r&^Rzo$Ou5qT<+UY1IFTu$%lZjA1t)8tD^A^Ke z59z3bqcQ-_Vn&?Psyeq1{xD9Qy<{iK5VX(;-WVlQYoh{@?QTr?!-~1uS`%24P!1}>=+JlNG zgh~8Yaq9839X*Mb)Xf1A@>$H|^dFXI{#0E3WbmBo z4aUA%k9=bs?py@w04NPehD_Awy51>+wV(bLx{ViK@pPZtSn@WFb#!7ll_yQ0{0*sk zYdw;!!>03N%lCJ0b>$(ZtoUUX4~SS^(E`PkvKQ}LeTBeRb$g{*br-xmn*VS=Bw~4T z6H}ghtX^1>nH<9k53R8gQV6~w`0)9(Eiw3-z`7955AX=!QEL>MC}jDo6AdG*My{`yzd>meVKH3@)sHQqR5(PWQ|XDx+4c~ zZ_wM6*+-DOjyUja;bz!Y%^1H;jeZ#4hk#OFPoQ#dt>j8S2Y)RYbpvXj$t)9hW|IQ6Cd4K?m(ekx+FyA8OatYg$B?KL5C6xbcCnRBnj zAKHerq{;6^#ND1*>4k2oX4%Co+*_RVh}_}n+gKqZa9!+HK^Kun|e^U1?$+tbw^kCNoc_l$JrUzC`TM^2rD zOa(zmdew1BO+(UtPOs=+yHO+ccFtrbeafe^pi1X=W8*s!xAQStWv^G4IFh{&8>`BK8miS~1FX5X`M-@KN|@?>7l(AZl*ugDvQKrI z`SMk+kEg)OsfCitfm!MTWe&HRubDN%7PuW240HLBL#ZBu(TT+^G{kH$0f6Mzk;omZ!2l~p> zb7iG!QZ^2K^VX5a7PRhVLm$=CE~~$W%+1D-+^5A(L=YW|9?y~mKSFiyXMn@=9T^S} zj=WVOeR1=l=b=OnHHN3m(D(EFVB4CJ=&pvq*|;vu6NF^XXyUyu!-Eg$d6eG+K^>u+ z!PhSq$CeM}e`oYw+6ydFG@wD@I8fyL0J|dtbCWk}G86_rPso0upJ}X;S-N OJXgo#$Oeaq%)bEpYO2Bj literal 0 HcmV?d00001 diff --git a/B4A/Files/marker-rojo.png b/B4A/Files/marker-rojo.png new file mode 100644 index 0000000000000000000000000000000000000000..271c1905c7eae7449accebccd6dda0c33326a3a8 GIT binary patch literal 2488 zcmY*bX*3&H8xB*65^YthC=y%JX=Squ5wVmMK}yxMoP;Dqi6ya=Y3-w?meLWbD7AF4 zwn9m%pcq6N)z;LME;0>MjJ8_K44s&-XTI<}7 z5M7_ zJ#Z+KhJ*W=d!Rj{9OP5#@hs+YMVOz6ExQvNk~`5enF`bCC1hUykLCB}}f*{<}BzS^E2xac?!>^Ugt!=}JJz`f2tLC^3M zf|wETi6Z(T?v;FiPhANfQi%U9PIte~-pkk&HYeJV{yBVZfwy25wgD72SITKLU$i}O z3}(Mc7!_T=ji7vZjf46fxH{qu;SdEMoBM>OE8nOxw7qty&0NZdAN(|%P92}-ez8Ao zwws^Iaecj-oPoh=xExN+jM75~;JJA(b}rK?QrqkdOlRkyM6!}BG-xa?e*TiDI**;R zoD@h@vA@H+y9@cALWMekLrBK;d=4-mK0R;Ex$m7f#pbNQ$g2u3oC1&7s35U!E}Kv& z`!w?Mz`!lcRe~>@dR^CkwJc>!u0$@U!0!~qB3-mOY}y4YP|UOj&|{9_RIGY)pMy(d z+w&5fU2}-PnH^Gqb-ddIYk_=wo)AziS7vALpTO3Q#AjZ95gXw}F!EW8i7VN79P{X? zL&}79(GuU{X1H-#P0-AxtIF2aRhU6~gE1+3vW);Qu2(a9 zLkADSFKpzQOjY)&`9goyfL$}+fDuB|?@mL&;>&N+E#^8L9j102o3n3!t*zO^o@|2z zAP!%O;EiT9KDg%>A*Qxf#By8@oO{=FCOwaL+rE9=_#zLe!y>1KR|l$twpp?rGhhyh zy>|W!u`(haD*orSH=4~ZOt@~UghiwchO?@=qxPxy03Y_>EL6k0P+P%IY+Z_U#N zpi`8|^E$%4adKIdQ(+C)2!eJL$MDeiTMxfv8(Z8MYyd_)RmBqxDNha^I+Cs*!Wo2H z49g|Dg$WtrrNuo9@Vp9Lo%dxmJdv)nD30?ZHT}Tki46a1Bhn|nQ_816nTR%(lphHm(jA-2j#>tdimIW~ zuA$bY=+2LrQBi*r3+-!?G3&qDA<56;$GPpLawl*Pru%2PAlb9_EvLXnJAOG7aKTT) zwO`b8Goe0FdyI>p*Y9F%1#oG7bp{mJNO-P%K#DXcZS|coF_UM&ywoK^j-pedCnjr!HM>KDXhHprTcyPLTqQ{Q~A1maaP6EK+)}Z1QB>EsWz$U zSvJsl;PhG`T=S=0Y2W&^n)M0#>k-4iDw~=lhBe!cU zhKo1U-ByL;*_oNDvsBNkM$vel;{&6{abjk!b8@@kA6ZS@rJa&G)pR{?MF^y2->X`S zi`E6}`Ux|QT>Y*m114ipKavc25`sr#?H&}5#Fs*_SuLiU$L7Wd5~@DZHcn@fph~u# zBC;3kQz_?>QupjlFS~+cI*{XoW1w#vCd`OdrD zR$p9?-*ff@wcn4M2C8PDjatrC-b>8WYHe!Uhtrrgm~OR?v?AHArq(W}hW3DK&(~OL zSRR(z-$0&+@&ouG;(O+K`uX6vu=gZ%e-`?+P1wG2rQCGuvt8bN_$>a@9tPL=o(6T| z1SX_y#{R|d5uI1Vv$fs_!K2XPmsE_QueT0(RHL6dCRGnUJywvUyZ*VJM3ppf4Dv-~ zZ-3j^eYc?KOp*04I51ZYH0bM?^!tA2`kJJrr=CK_)=Et<>4xw~1L){GINj7>w5sWV zF!(VpS?p=G>vVFx@WM;xdcf4IRRf6ithaIv!V^6|yem+1WBdC=bS619IZ)F629$ka AHUIzs literal 0 HcmV?d00001 diff --git a/B4A/Files/marker-rojo1.png b/B4A/Files/marker-rojo1.png new file mode 100644 index 0000000000000000000000000000000000000000..1f3754dd64851b03ce7b2287e80933082bc78a85 GIT binary patch literal 4356 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 literal 0 HcmV?d00001 diff --git a/B4A/Files/marker-rojo2.png b/B4A/Files/marker-rojo2.png new file mode 100644 index 0000000000000000000000000000000000000000..23ca7690dbd97ea639ac87b66ad0b3b05f955990 GIT binary patch literal 3844 zcmY*cc{~*A`X7U7jBO}cB8*+ejD74QyNo1jBC}!ayRnr)gD6{tNRlMG>}wNpvZs)a zC6k0X#Ic9!PWN{{_jm6f&--lO_gTL0UvH|djX5_&1Ofm6xGgPA?3mhuDWPBx^VGF9 zQD7>TP&@PUfSOU!Ri?w{WrQ&T0O~V1kFo4bpCib^B@_UFVtxyYS31iA^FlJo-Z{(} zW37V^^jF3b0&zrTvVRa04FKpFl7p~#Ut*X9j_5@S(3jijcqu1ABIwIGX<(3;AY-C8 z$s#(0csbg}9v|(C*Cxmr8gN7O$U4jl{=_h>1liv&AXJB}5Bqmv9j5&|jDQ*Fg%CV- z>`cu5K`=din0HuMkPZS785yY@siqtl;)PJr*49QKRS~MHa3%sC8Wj+RCBp+krT!^k zLJY-+kb=TUfdLY~3u1AB;bHo)@Ng1A#}n(Rfg=z!;5e)r0j{D#z{0TvH5E8PO^u+X zp@LHNRKdaiX&*-N{Qv#|q5sgpBn0t0gHTaM{vP?at#dJiL}X6!yQP7O-oNwz6VpTd z9^}6UGx)y_$jtt_;+RZy*bi9?{B;!Szr1ZR!nPYR?@MzCv9+3HBpxy>iA;#6C=e1)Qe z1hnMc=YVU3L?deCiB*f^`;0p1HY~8I~BVmPw^}D+0G=j zP@;<6o4tr1r#K~%?1iEUg8Q`9C&=$?>1!vxu}~q7vmnhz?@#D34iPPEH@h0&@I3{4 zK3z9!7O#j`m6wCI6om8v^y?nZWlE_+&a45zUkUvh<<8TFahv7M`zgj^}l z0$f3t~2)iVhy<~B>;YsBl<4-*u<^Gm(HmY%kh51yvYQQBzYEH{5m!;joAB>3Q32 zh3deE)4X!Jp{~HFb2-4w1@5ic6XNw;1|+}p9#^YRj8P9`qqVH(r7ru#a%bg@xt0RT zlyaS;IAR*%wJ;!~j0fy_jPN_I-u7F2^u$vG23iRN z>ioj8WB%_x`-RP6!G(EACtX_9V@0RV0*|+MnuVpmS>zu{HtAq{ z4*Y&9)0F18QFlhzdBb1jYF}{G=gUbWJzuOV|B!Vk?rcpD6UN1)a;YueHi1}*M#i|x zP5GbTXqJ9Flx`&;KLXIUd2^2Bo+IK_*J0-Ol((vvC-*>;Y#A39@k%QWMk>i%fQLNL z{NsLDMC+0ZO9huG&f*of?Cs;85^Jwk)~eoWXluA&z+9GsT}?t?K(TZ}H6C z+bpa;fRv3J*c%>qzbWv~uK>Kbq!LyZz9=bH`?j{ZUUvRVsD{Zc&uj9+xh7`q;Dbo8 z`V2D0p=&S6FMiHj!KCV@YHit3_-D6dz7JU!?_UE&#&{OqoF|iRLL)OA`=D?&O+c4e`@__^0!#_R4FI_$z=1 zdaj^Q?aHT_-Z`xLKTY7fb=E`R3829*5X=ed0$P|(Ypd%jy__NADEEfH_S|SnNsENo z)doU_i4VxPpK<08^S?KvNp=p4SmFKW{- zq`St>-)bwp<4XIG!fE*O?z<6!5&x0Z1y&56J3=Q1fjm+=XVdlFM%_3U9=z6x(sXH_ zsj4)JHZn|`l6kwOGjaN4yKs@fM^ZYVpL2Na{Su$f?8Iu-j0Qg61#_P$iO92-8=GMW zXN(>sLd$Kn8nR#m`+H$xzPw17NQUaFE`4ezAW5Z2iaoPu8cSOF`x#&5iJb?iy@2O) zTw}NDM0}oUZLCu*GqRScZ`%L9H}TZkT_L@8#51wtkvm&5I)5%*RN%9B-QWD%KAFV9 z&@;kbj|xCU4yi?4(_ZS-WUum&>{ZCbY!c_Mq{9a(nQtK3$km>tbAI@DB4buQrNe=b zF3{shEKUwbUhBz8PtkzwG~~v1N>Qz3Kb}A=!^*lxaO+x65&Lq?`ANYm-yB-XA`=^h zi|aW8|C;lYb)kNocE>IUyM?dHNPpRV?ND^PXnuKQCm@L9l&Nh8WJrr>4e1g>m|DRu z=JP-5JmeeobRBW$)*Y3B(w>Ir4T)6cY^n@;a2AA}GKz3@%Ga7aXb^qQ((apW&0juF zO*5S`d6#k>_E$tIE@k&yT<>_71s~YsXW6pHLzC=F4ms*mZQjr2oFBl=_hH7xhl*G8 z_C>35-l*33#hTQQ7rZC#w*HvX@P2^S=blo2QR8XXif~zyvs z1U`=Zt|q>LL~OZfUx?=O_Tc;jc2H9&(*;g)L0zvhD4W~sJCs^#XI#+`eq>e))WElH z3QwfXpJSZx^?CK)JKAPlvkSszd+x~nl0cu&zQBVTZcz|rE!*rFi$8z1CJlmDb&j!qUS&wNE?^5EDA%Z8S zlhT^}n^Py}b7HXa3dY5wdwAWbaoDB{FQ>7kFc7O*Kl3^*eZOk24te*k40AiUe-5T< zNnb5WkedC14F`R6y;c5wjJ!*+d_tQqL-!8r6YGt~1d7m3b>@q%WC)u`x!}EZeR~OL z;#P@bXYwsJkrY7(y1uAxZ+Te+Xz zaXj$-3SZFoj%5k#-&}UrdTMFEWVD0NDBI8o<@U*nPAc9x>-H3F-(~K~Y7kHTne)Ud zLfe7!6idSer0brWd1!6ho4NDi6{o?)^GVypPvM=_-AT5e?0+5Gr|!R%qagQd5S1UR zk?;k#ly2L_Q9p-yV{vvLb?jID@=uv6`o+(7qdO8vZtoBjfKLmy8B`6sjJZ(F=2|%z zYUOsSy*xxrn#8glx$v3+^n{Pfl zeeC#C`_d$rl|+0~N8Jk+!ziJCGh$Ul)5S^J@e-)>@x`M-33f(UlK}Y;oD|~N;90F@ z`|Hn%mKvf^DSD;G(Ul^#7!*5r7+yR>(|y~{^D=`TX=-4g+*8aBboTGf)uMk77P?`} zJGg=VOZB*(JFvo#{nsx~p@St<=P#iu@q}H;16JFeixrUVYw6w!Nk2atz4`qWwKTOc JsX6bF@Gl{`-|GMX literal 0 HcmV?d00001 diff --git a/B4A/Files/marker-verde.png b/B4A/Files/marker-verde.png new file mode 100644 index 0000000000000000000000000000000000000000..48d83164bea19bf55e4a7a160918472033793412 GIT binary patch literal 4135 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 literal 0 HcmV?d00001 diff --git a/B4A/KelloggsV4.b4a b/B4A/KelloggsV4.b4a index 7ebdbe1..f401141 100644 --- a/B4A/KelloggsV4.b4a +++ b/B4A/KelloggsV4.b4a @@ -1,352 +1,362 @@ Build1=Default,kelloggsV2.keymon.lat,HU2_PUBLIC File1=alcancia.png File10=cacahuates_blanco2.png -File100=marker-azul-38.png -File101=marker-azul-39.png -File102=marker-azul-4.png -File103=marker-azul-40.png -File104=marker-azul-41.png -File105=marker-azul-42.png -File106=marker-azul-43.png -File107=marker-azul-44.png -File108=marker-azul-45.png -File109=marker-azul-46.png +File100=marker-azul-34.png +File101=marker-azul-35.png +File102=marker-azul-36.png +File103=marker-azul-37.png +File104=marker-azul-38.png +File105=marker-azul-39.png +File106=marker-azul4.png +File107=marker-azul-4.png +File108=marker-azul-40.png +File109=marker-azul-41.png File11=cacahuates_blanco3.png -File110=marker-azul-47.png -File111=marker-azul-48.png -File112=marker-azul-49.png -File113=marker-azul-5.png -File114=marker-azul-50.png -File115=marker-azul-51.png -File116=marker-azul-52.png -File117=marker-azul-53.png -File118=marker-azul-54.png -File119=marker-azul-55.png +File110=marker-azul-42.png +File111=marker-azul-43.png +File112=marker-azul-44.png +File113=marker-azul-45.png +File114=marker-azul-46.png +File115=marker-azul-47.png +File116=marker-azul-48.png +File117=marker-azul-49.png +File118=marker-azul5.png +File119=marker-azul-5.png File12=cacahuates_chico.png -File120=marker-azul-56.png -File121=marker-azul-57.png -File122=marker-azul-58.png -File123=marker-azul-59.png -File124=marker-azul-6.png -File125=marker-azul-60.png -File126=marker-azul-61.png -File127=marker-azul-62.png -File128=marker-azul-63.png -File129=marker-azul-64.png +File120=marker-azul-50.png +File121=marker-azul-51.png +File122=marker-azul-52.png +File123=marker-azul-53.png +File124=marker-azul-54.png +File125=marker-azul-55.png +File126=marker-azul-56.png +File127=marker-azul-57.png +File128=marker-azul-58.png +File129=marker-azul-59.png File13=cacahuates_original.jpeg -File130=marker-azul-65.png -File131=marker-azul-66.png -File132=marker-azul-67.png -File133=marker-azul-68.png -File134=marker-azul-69.png -File135=marker-azul-7.png -File136=marker-azul-70.png -File137=marker-azul-71.png -File138=marker-azul-72.png -File139=marker-azul-73.png +File130=marker-azul-6.png +File131=marker-azul-60.png +File132=marker-azul-61.png +File133=marker-azul-62.png +File134=marker-azul-63.png +File135=marker-azul-64.png +File136=marker-azul-65.png +File137=marker-azul-66.png +File138=marker-azul-67.png +File139=marker-azul-68.png File14=cacahuates_original2.bmp -File140=marker-azul-74.png -File141=marker-azul-75.png -File142=marker-azul-76.png -File143=marker-azul-77.png -File144=marker-azul-78.png -File145=marker-azul-79.png -File146=marker-azul-8.png -File147=marker-azul-80.png -File148=marker-azul-81.png -File149=marker-azul-82.png +File140=marker-azul-69.png +File141=marker-azul-7.png +File142=marker-azul-70.png +File143=marker-azul-71.png +File144=marker-azul-72.png +File145=marker-azul-73.png +File146=marker-azul-74.png +File147=marker-azul-75.png +File148=marker-azul-76.png +File149=marker-azul-77.png File15=cacahuates_original2.jpg -File150=marker-azul-83.png -File151=marker-azul-84.png -File152=marker-azul-85.png -File153=marker-azul-86.png -File154=marker-azul-87.png -File155=marker-azul-88.png -File156=marker-azul-89.png -File157=marker-azul-9.png -File158=marker-azul-90.png -File159=marker-azul-91.png +File150=marker-azul-78.png +File151=marker-azul-79.png +File152=marker-azul-8.png +File153=marker-azul-80.png +File154=marker-azul-81.png +File155=marker-azul-82.png +File156=marker-azul-83.png +File157=marker-azul-84.png +File158=marker-azul-85.png +File159=marker-azul-86.png File16=cacahuates_original3.bmp -File160=marker-azul-92.png -File161=marker-azul-93.png -File162=marker-azul-94.png -File163=marker-azul-95.png -File164=marker-azul-96.png -File165=marker-azul-97.png -File166=marker-azul-98.png -File167=marker-azul-99.png -File168=marker-rojo-0.png -File169=marker-rojo-1.png +File160=marker-azul-87.png +File161=marker-azul-88.png +File162=marker-azul-89.png +File163=marker-azul-9.png +File164=marker-azul-90.png +File165=marker-azul-91.png +File166=marker-azul-92.png +File167=marker-azul-93.png +File168=marker-azul-94.png +File169=marker-azul-95.png File17=carrito.png -File170=marker-rojo-10.png -File171=marker-rojo-100.png -File172=marker-rojo-11.png -File173=marker-rojo-12.png -File174=marker-rojo-13.png -File175=marker-rojo-14.png -File176=marker-rojo-15.png -File177=marker-rojo-16.png -File178=marker-rojo-17.png -File179=marker-rojo-18.png +File170=marker-azul-96.png +File171=marker-azul-97.png +File172=marker-azul-98.png +File173=marker-azul-99.png +File174=marker-rojo.png +File175=marker-rojo-0.png +File176=marker-rojo1.png +File177=marker-rojo-1.png +File178=marker-rojo-10.png +File179=marker-rojo-100.png File18=checklist.bal -File180=marker-rojo-19.png -File181=marker-rojo-2.png -File182=marker-rojo-20.png -File183=marker-rojo-21.png -File184=marker-rojo-22.png -File185=marker-rojo-23.png -File186=marker-rojo-24.png -File187=marker-rojo-25.png -File188=marker-rojo-26.png -File189=marker-rojo-27.png +File180=marker-rojo-11.png +File181=marker-rojo-12.png +File182=marker-rojo-13.png +File183=marker-rojo-14.png +File184=marker-rojo-15.png +File185=marker-rojo-16.png +File186=marker-rojo-17.png +File187=marker-rojo-18.png +File188=marker-rojo-19.png +File189=marker-rojo2.png File19=checks.bal -File190=marker-rojo-28.png -File191=marker-rojo-29.png -File192=marker-rojo-3.png -File193=marker-rojo-30.png -File194=marker-rojo-31.png -File195=marker-rojo-32.png -File196=marker-rojo-33.png -File197=marker-rojo-34.png -File198=marker-rojo-35.png -File199=marker-rojo-36.png +File190=marker-rojo-2.png +File191=marker-rojo-20.png +File192=marker-rojo-21.png +File193=marker-rojo-22.png +File194=marker-rojo-23.png +File195=marker-rojo-24.png +File196=marker-rojo-25.png +File197=marker-rojo-26.png +File198=marker-rojo-27.png +File199=marker-rojo-28.png File2=alert2.png File20=cliente.bal -File200=marker-rojo-37.png -File201=marker-rojo-38.png -File202=marker-rojo-39.png -File203=marker-rojo-4.png -File204=marker-rojo-40.png -File205=marker-rojo-41.png -File206=marker-rojo-42.png -File207=marker-rojo-43.png -File208=marker-rojo-44.png -File209=marker-rojo-45.png +File200=marker-rojo-29.png +File201=marker-rojo-3.png +File202=marker-rojo-30.png +File203=marker-rojo-31.png +File204=marker-rojo-32.png +File205=marker-rojo-33.png +File206=marker-rojo-34.png +File207=marker-rojo-35.png +File208=marker-rojo-36.png +File209=marker-rojo-37.png File21=cliente.bal.bak -File210=marker-rojo-46.png -File211=marker-rojo-47.png -File212=marker-rojo-48.png -File213=marker-rojo-49.png -File214=marker-rojo-5.png -File215=marker-rojo-50.png -File216=marker-rojo-51.png -File217=marker-rojo-52.png -File218=marker-rojo-53.png -File219=marker-rojo-54.png +File210=marker-rojo-38.png +File211=marker-rojo-39.png +File212=marker-rojo-4.png +File213=marker-rojo-40.png +File214=marker-rojo-41.png +File215=marker-rojo-42.png +File216=marker-rojo-43.png +File217=marker-rojo-44.png +File218=marker-rojo-45.png +File219=marker-rojo-46.png File22=clientes.bal -File220=marker-rojo-55.png -File221=marker-rojo-56.png -File222=marker-rojo-57.png -File223=marker-rojo-58.png -File224=marker-rojo-59.png -File225=marker-rojo-6.png -File226=marker-rojo-60.png -File227=marker-rojo-61.png -File228=marker-rojo-62.png -File229=marker-rojo-63.png +File220=marker-rojo-47.png +File221=marker-rojo-48.png +File222=marker-rojo-49.png +File223=marker-rojo-5.png +File224=marker-rojo-50.png +File225=marker-rojo-51.png +File226=marker-rojo-52.png +File227=marker-rojo-53.png +File228=marker-rojo-54.png +File229=marker-rojo-55.png File23=detalle_promo.bal -File230=marker-rojo-64.png -File231=marker-rojo-65.png -File232=marker-rojo-66.png -File233=marker-rojo-67.png -File234=marker-rojo-68.png -File235=marker-rojo-69.png -File236=marker-rojo-7.png -File237=marker-rojo-70.png -File238=marker-rojo-71.png -File239=marker-rojo-72.png +File230=marker-rojo-56.png +File231=marker-rojo-57.png +File232=marker-rojo-58.png +File233=marker-rojo-59.png +File234=marker-rojo-6.png +File235=marker-rojo-60.png +File236=marker-rojo-61.png +File237=marker-rojo-62.png +File238=marker-rojo-63.png +File239=marker-rojo-64.png File24=durakelo.png -File240=marker-rojo-73.png -File241=marker-rojo-74.png -File242=marker-rojo-75.png -File243=marker-rojo-76.png -File244=marker-rojo-77.png -File245=marker-rojo-78.png -File246=marker-rojo-79.png -File247=marker-rojo-8.png -File248=marker-rojo-80.png -File249=marker-rojo-81.png +File240=marker-rojo-65.png +File241=marker-rojo-66.png +File242=marker-rojo-67.png +File243=marker-rojo-68.png +File244=marker-rojo-69.png +File245=marker-rojo-7.png +File246=marker-rojo-70.png +File247=marker-rojo-71.png +File248=marker-rojo-72.png +File249=marker-rojo-73.png File25=durakelo1.png -File250=marker-rojo-82.png -File251=marker-rojo-83.png -File252=marker-rojo-84.png -File253=marker-rojo-85.png -File254=marker-rojo-86.png -File255=marker-rojo-87.png -File256=marker-rojo-88.png -File257=marker-rojo-89.png -File258=marker-rojo-9.png -File259=marker-rojo-90.png +File250=marker-rojo-74.png +File251=marker-rojo-75.png +File252=marker-rojo-76.png +File253=marker-rojo-77.png +File254=marker-rojo-78.png +File255=marker-rojo-79.png +File256=marker-rojo-8.png +File257=marker-rojo-80.png +File258=marker-rojo-81.png +File259=marker-rojo-82.png File26=engrane.jpg -File260=marker-rojo-91.png -File261=marker-rojo-92.png -File262=marker-rojo-93.png -File263=marker-rojo-94.png -File264=marker-rojo-95.png -File265=marker-rojo-96.png -File266=marker-rojo-97.png -File267=marker-rojo-98.png -File268=marker-rojo-99.png -File269=marker-verde-0.png +File260=marker-rojo-83.png +File261=marker-rojo-84.png +File262=marker-rojo-85.png +File263=marker-rojo-86.png +File264=marker-rojo-87.png +File265=marker-rojo-88.png +File266=marker-rojo-89.png +File267=marker-rojo-9.png +File268=marker-rojo-90.png +File269=marker-rojo-91.png File27=engrane.png -File270=marker-verde-1.png -File271=marker-verde-10.png -File272=marker-verde-100.png -File273=marker-verde-11.png -File274=marker-verde-12.png -File275=marker-verde-13.png -File276=marker-verde-14.png -File277=marker-verde-15.png -File278=marker-verde-16.png -File279=marker-verde-17.png +File270=marker-rojo-92.png +File271=marker-rojo-93.png +File272=marker-rojo-94.png +File273=marker-rojo-95.png +File274=marker-rojo-96.png +File275=marker-rojo-97.png +File276=marker-rojo-98.png +File277=marker-rojo-99.png +File278=marker-verde.png +File279=marker-verde-0.png File28=engranes.png -File280=marker-verde-18.png -File281=marker-verde-19.png -File282=marker-verde-2.png -File283=marker-verde-20.png -File284=marker-verde-21.png -File285=marker-verde-22.png -File286=marker-verde-23.png -File287=marker-verde-24.png -File288=marker-verde-25.png -File289=marker-verde-26.png +File280=marker-verde-1.png +File281=marker-verde-10.png +File282=marker-verde-100.png +File283=marker-verde-11.png +File284=marker-verde-12.png +File285=marker-verde-13.png +File286=marker-verde-14.png +File287=marker-verde-15.png +File288=marker-verde-16.png +File289=marker-verde-17.png File29=errormanager.bal -File290=marker-verde-27.png -File291=marker-verde-28.png -File292=marker-verde-29.png -File293=marker-verde-3.png -File294=marker-verde-30.png -File295=marker-verde-31.png -File296=marker-verde-32.png -File297=marker-verde-33.png -File298=marker-verde-34.png -File299=marker-verde-35.png +File290=marker-verde-18.png +File291=marker-verde-19.png +File292=marker-verde-2.png +File293=marker-verde-20.png +File294=marker-verde-21.png +File295=marker-verde-22.png +File296=marker-verde-23.png +File297=marker-verde-24.png +File298=marker-verde-25.png +File299=marker-verde-26.png File3=alerta.jpg File30=fondo_kmt.jpg -File300=marker-verde-36.png -File301=marker-verde-37.png -File302=marker-verde-38.png -File303=marker-verde-39.png -File304=marker-verde-4.png -File305=marker-verde-40.png -File306=marker-verde-41.png -File307=marker-verde-42.png -File308=marker-verde-43.png -File309=marker-verde-44.png +File300=marker-verde-27.png +File301=marker-verde-28.png +File302=marker-verde-29.png +File303=marker-verde-3.png +File304=marker-verde-30.png +File305=marker-verde-31.png +File306=marker-verde-32.png +File307=marker-verde-33.png +File308=marker-verde-34.png +File309=marker-verde-35.png File31=foto.bal -File310=marker-verde-45.png -File311=marker-verde-46.png -File312=marker-verde-47.png -File313=marker-verde-48.png -File314=marker-verde-49.png -File315=marker-verde-5.png -File316=marker-verde-50.png -File317=marker-verde-51.png -File318=marker-verde-52.png -File319=marker-verde-53.png +File310=marker-verde-36.png +File311=marker-verde-37.png +File312=marker-verde-38.png +File313=marker-verde-39.png +File314=marker-verde-4.png +File315=marker-verde-40.png +File316=marker-verde-41.png +File317=marker-verde-42.png +File318=marker-verde-43.png +File319=marker-verde-44.png File32=foto1.jpg -File320=marker-verde-54.png -File321=marker-verde-55.png -File322=marker-verde-56.png -File323=marker-verde-57.png -File324=marker-verde-58.png -File325=marker-verde-59.png -File326=marker-verde-6.png -File327=marker-verde-60.png -File328=marker-verde-61.png -File329=marker-verde-62.png +File320=marker-verde-45.png +File321=marker-verde-46.png +File322=marker-verde-47.png +File323=marker-verde-48.png +File324=marker-verde-49.png +File325=marker-verde-5.png +File326=marker-verde-50.png +File327=marker-verde-51.png +File328=marker-verde-52.png +File329=marker-verde-53.png File33=foto2.jpg -File330=marker-verde-63.png -File331=marker-verde-64.png -File332=marker-verde-65.png -File333=marker-verde-66.png -File334=marker-verde-67.png -File335=marker-verde-68.png -File336=marker-verde-69.png -File337=marker-verde-7.png -File338=marker-verde-70.png -File339=marker-verde-71.png +File330=marker-verde-54.png +File331=marker-verde-55.png +File332=marker-verde-56.png +File333=marker-verde-57.png +File334=marker-verde-58.png +File335=marker-verde-59.png +File336=marker-verde-6.png +File337=marker-verde-60.png +File338=marker-verde-61.png +File339=marker-verde-62.png File34=foto3.jpg -File340=marker-verde-72.png -File341=marker-verde-73.png -File342=marker-verde-74.png -File343=marker-verde-75.png -File344=marker-verde-76.png -File345=marker-verde-77.png -File346=marker-verde-78.png -File347=marker-verde-79.png -File348=marker-verde-8.png -File349=marker-verde-80.png +File340=marker-verde-63.png +File341=marker-verde-64.png +File342=marker-verde-65.png +File343=marker-verde-66.png +File344=marker-verde-67.png +File345=marker-verde-68.png +File346=marker-verde-69.png +File347=marker-verde-7.png +File348=marker-verde-70.png +File349=marker-verde-71.png File35=foto4.jpg -File350=marker-verde-81.png -File351=marker-verde-82.png -File352=marker-verde-83.png -File353=marker-verde-84.png -File354=marker-verde-85.png -File355=marker-verde-86.png -File356=marker-verde-87.png -File357=marker-verde-88.png -File358=marker-verde-89.png -File359=marker-verde-9.png +File350=marker-verde-72.png +File351=marker-verde-73.png +File352=marker-verde-74.png +File353=marker-verde-75.png +File354=marker-verde-76.png +File355=marker-verde-77.png +File356=marker-verde-78.png +File357=marker-verde-79.png +File358=marker-verde-8.png +File359=marker-verde-80.png File36=guardagestion.bal -File360=marker-verde-90.png -File361=marker-verde-91.png -File362=marker-verde-92.png -File363=marker-verde-93.png -File364=marker-verde-94.png -File365=marker-verde-95.png -File366=marker-verde-96.png -File367=marker-verde-97.png -File368=marker-verde-98.png -File369=marker-verde-99.png +File360=marker-verde-81.png +File361=marker-verde-82.png +File362=marker-verde-83.png +File363=marker-verde-84.png +File364=marker-verde-85.png +File365=marker-verde-86.png +File366=marker-verde-87.png +File367=marker-verde-88.png +File368=marker-verde-89.png +File369=marker-verde-9.png File37=guna_viejo.png -File370=nota.bal -File371=noventa.bal -File372=nuevocliente.bal -File373=palomita_verde.png -File374=palomita_verde_original.png -File375=pedido.bal -File376=pedidoItem.bal -File377=planfia_logo.png -File378=planfia_logo_old.png -File379=planfia_logo_old2.png +File370=marker-verde-90.png +File371=marker-verde-91.png +File372=marker-verde-92.png +File373=marker-verde-93.png +File374=marker-verde-94.png +File375=marker-verde-95.png +File376=marker-verde-96.png +File377=marker-verde-97.png +File378=marker-verde-98.png +File379=marker-verde-99.png File38=historico.bal -File380=principal.bal -File381=proditem.bal -File382=productos.bal -File383=productos2.bal -File384=profina.jpg -File385=profina.png -File386=promociones.bal -File387=qr.bal -File388=rechazo.jpg -File389=rojo.png +File380=nota.bal +File381=noventa.bal +File382=nuevocliente.bal +File383=palomita_verde.png +File384=palomita_verde_original.png +File385=pedido.bal +File386=pedidoItem.bal +File387=planfia_logo.png +File388=planfia_logo_old.png +File389=planfia_logo_old2.png File39=info_gral.resp -File390=salma.jpg -File391=salma.png -File392=senial.jpg -File393=sync.png -File394=tache_rojo.png -File395=tache_rojo_original.png -File396=telefonos.bal -File397=ticketsDia.bal -File398=Tiendita.jpg -File399=transporte.png +File390=principal.bal +File391=proditem.bal +File392=productos.bal +File393=productos2.bal +File394=profina.jpg +File395=profina.png +File396=promociones.bal +File397=qr.bal +File398=rechazo.jpg +File399=rojo.png File4=alerta_amarilla.png File40=infonavit1.jpg -File400=verde.png -File401=vista1.png -File402=vista2.png -File403=vista3.png -File404=vista4.png -File405=WhatsApp Image 2022-11-17 at 11.50.59 AM.jpeg -File406=WhatsApp Image 2022-11-17 at 11.50.59 AM.jpg -File407=whatsapp.png -File408=whatsapp_original.png -File409=WHATSTEL.jpeg +File400=salma.jpg +File401=salma.png +File402=senial.jpg +File403=sync.png +File404=tache_rojo.png +File405=tache_rojo_original.png +File406=telefonos.bal +File407=ticketsDia.bal +File408=Tiendita.jpg +File409=transporte.png File41=INVENTARIO (1).jpg -File410=WHATSTEL.png +File410=verde.png +File411=vista1.png +File412=vista2.png +File413=vista3.png +File414=vista4.png +File415=WhatsApp Image 2022-11-17 at 11.50.59 AM.jpeg +File416=WhatsApp Image 2022-11-17 at 11.50.59 AM.jpg +File417=whatsapp.png +File418=whatsapp_original.png +File419=WHATSTEL.jpeg File42=INVENTARIO.jpg +File420=WHATSTEL.png File43=inventario.PNG File44=itembuttonblue.png File45=itembuttonred.png @@ -373,42 +383,42 @@ File63=Malo.jpg File64=mapa.bal File65=mapa_rutas.bal File66=mapas.bal -File67=marker-azul-0.png -File68=marker-azul-1.png -File69=marker-azul-10.png +File67=marker-azul.png +File68=marker-azul-0.png +File69=marker-azul1.png File7=BLACNCO.jpg -File70=marker-azul-100.png -File71=marker-azul-11.png -File72=marker-azul-12.png -File73=marker-azul-13.png -File74=marker-azul-14.png -File75=marker-azul-15.png -File76=marker-azul-16.png -File77=marker-azul-17.png -File78=marker-azul-18.png -File79=marker-azul-19.png +File70=marker-azul-1.png +File71=marker-azul-10.png +File72=marker-azul-100.png +File73=marker-azul-11.png +File74=marker-azul-12.png +File75=marker-azul-13.png +File76=marker-azul-14.png +File77=marker-azul-15.png +File78=marker-azul-16.png +File79=marker-azul-17.png File8=cacahuates.png -File80=marker-azul-2.png -File81=marker-azul-20.png -File82=marker-azul-21.png -File83=marker-azul-22.png -File84=marker-azul-23.png -File85=marker-azul-24.png -File86=marker-azul-25.png -File87=marker-azul-26.png -File88=marker-azul-27.png -File89=marker-azul-28.png +File80=marker-azul-18.png +File81=marker-azul-19.png +File82=marker-azul2.png +File83=marker-azul-2.png +File84=marker-azul-20.png +File85=marker-azul-21.png +File86=marker-azul-22.png +File87=marker-azul-23.png +File88=marker-azul-24.png +File89=marker-azul-25.png File9=cacahuates_blanco.png -File90=marker-azul-29.png -File91=marker-azul-3.png -File92=marker-azul-30.png -File93=marker-azul-31.png -File94=marker-azul-32.png -File95=marker-azul-33.png -File96=marker-azul-34.png -File97=marker-azul-35.png -File98=marker-azul-36.png -File99=marker-azul-37.png +File90=marker-azul-26.png +File91=marker-azul-27.png +File92=marker-azul-28.png +File93=marker-azul-29.png +File94=marker-azul3.png +File95=marker-azul-3.png +File96=marker-azul-30.png +File97=marker-azul-31.png +File98=marker-azul-32.png +File99=marker-azul-33.png FileGroup1=Default Group FileGroup10=Default Group FileGroup100=Default Group @@ -756,7 +766,17 @@ FileGroup408=Default Group FileGroup409=Default Group FileGroup41=Default Group FileGroup410=Default Group +FileGroup411=Default Group +FileGroup412=Default Group +FileGroup413=Default Group +FileGroup414=Default Group +FileGroup415=Default Group +FileGroup416=Default Group +FileGroup417=Default Group +FileGroup418=Default Group +FileGroup419=Default Group FileGroup42=Default Group +FileGroup420=Default Group FileGroup43=Default Group FileGroup44=Default Group FileGroup45=Default Group @@ -879,7 +899,7 @@ Module6=C_Mapas Module7=C_Nota Module8=C_NoVenta Module9=C_NuevoCliente -NumberOfFiles=410 +NumberOfFiles=420 NumberOfLibraries=28 NumberOfModules=30 Version=12.8 @@ -887,7 +907,7 @@ Version=12.8 #Region Project Attributes #ApplicationLabel: Kelloggs Venta #VersionCode: 3000 - #VersionName: 5.03.02 + #VersionName: 5.03.03 #SupportedOrientations: portrait #CanInstallToExternalStorage: False #BridgeLogger:true diff --git a/B4A/KelloggsV4.b4a.meta b/B4A/KelloggsV4.b4a.meta index 9cdbf33..0a7f53b 100644 --- a/B4A/KelloggsV4.b4a.meta +++ b/B4A/KelloggsV4.b4a.meta @@ -76,7 +76,7 @@ ModuleClosedNodes2= ModuleClosedNodes20= ModuleClosedNodes21= ModuleClosedNodes22= -ModuleClosedNodes23=1,3,4,5,6,7,8,9,11,12,13,14,15,17,18,21,22,24,25,26,27,28,29,30,31,32,33,35 +ModuleClosedNodes23=1,3,4,5,6,7,8,9,11,12,14,15,17,18,21,22,24,25,26,27,28,29,30,31,32,33,35 ModuleClosedNodes24= ModuleClosedNodes25=4 ModuleClosedNodes26= @@ -91,6 +91,6 @@ ModuleClosedNodes6= ModuleClosedNodes7= ModuleClosedNodes8= ModuleClosedNodes9= -NavigationStack=C_Principal,cargar_Click,796,0,C_Principal,JobDone,1486,0,MAPA_RUTAS,MapFragment1_Ready,174,6,MAPA_RUTAS,CreateBitmapWithNumber,376,6,MAPA_RUTAS,inicio,361,0,Subs,procesaPromocion,1250,0,C_Principal,Class_Globals,0,0,C_Clientes,Class_Globals,0,0,Subs,revisaPromoPorMonto,1926,0,C_Cliente,B4XPage_Appear,758,6 +NavigationStack=C_Cliente,B4XPage_Appear,758,6,C_Principal,Class_Globals,1,0,C_Principal,SUBIR_INFO_PEDIDO,3023,0,C_Principal,cargar_Click,748,6,C_Principal,JobDone,1781,1,kms_helperSubs,RD_respalda_cat_detalle_paq,303,1,C_Cliente,Cuestionario,2315,0,MAPA_RUTAS,MapFragment1_Ready,151,1,Subs,CreateBitmapWithNumber,1983,0,Subs,revisaHora,1967,6,Subs,actualizaProducto,970,0 SelectedBuild=0 -VisibleModules=1,28,11,3,29,12,4,13,7,9 +VisibleModules=1,28,11,3,29,12,4,13,7,9,23,25 diff --git a/B4A/MAPA_RUTAS.bas b/B4A/MAPA_RUTAS.bas index b7c0ce0..d5e49de 100644 --- a/B4A/MAPA_RUTAS.bas +++ b/B4A/MAPA_RUTAS.bas @@ -154,7 +154,8 @@ Sub MapFragment1_Ready Tienda= c.GetString("CAT_CL_NOMBRE") NumSerie=c.GetInt("CAT_CL_NUM_SERIEFISICO") 'MARK_AZUL = gmap.AddMarker2(LongitudRU,LatitudRu,Tienda, gmap.HUE_BLUE) - MARK_AZUL = gmap.AddMarker3(LatitudRU, LongitudRU, CODIGO, LoadBitmap(File.DirAssets, "marker-azul-" & NumSerie &".png")) +' MARK_AZUL = gmap.AddMarker3(LatitudRU, LongitudRU, CODIGO, LoadBitmap(File.DirAssets, "marker-azul-" & NumSerie &".png")) + MARK_AZUL = gmap.AddMarker3(LatitudRU,LongitudRU,CODIGO, Subs.CreateBitmapWithNumber(LoadBitmap(File.DirAssets, "marker-azul.png"), NumSerie)) MARK_AZUL.Snippet = Tienda Next c .Close diff --git a/B4A/Subs.bas b/B4A/Subs.bas index 140d5db..941c20f 100644 --- a/B4A/Subs.bas +++ b/B4A/Subs.bas @@ -1961,12 +1961,30 @@ Sub revisaHora As Boolean Private h As Cursor = Starter.skmt.ExecQuery("select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'HORA'") If h.RowCount > 0 Then h.Position = 0 + Log(h.GetInt("CAT_VA_VALOR")) + Log(h.GetString("CAT_VA_VALOR")) + Private hr As Int = h.GetString("CAT_VA_VALOR") DateTime.DateFormat = "HH" Private ahora As String = DateTime.Date(DateTime.Now) - Log($"${h.GetInt("CAT_VA_VALOR")} >= ${(ahora - 2)} and ${h.GetInt("CAT_VA_VALOR")} <= ${(ahora + 2)}"$) + Log($"${hr} >= ${(ahora - 2)} and ${hr} <= ${(ahora + 2)}"$) If h.GetInt("CAT_VA_VALOR") >= ahora - 2 And h.GetInt("CAT_VA_VALOR") <= ahora + 2 Then horaCorrecta = True End If End If - Return horaCorrecta + Return True +End Sub + +Sub CreateBitmapWithNumber(OriginalBitmap As Bitmap, Number As Int) As Bitmap 'ignore + Dim NewBitmap As Bitmap + NewBitmap.InitializeMutable(OriginalBitmap.Width, OriginalBitmap.Height) + Dim Canvas As Canvas + Canvas.Initialize2(NewBitmap) + ' Definir el rectángulo donde se dibujará el Bitmap + Dim DestRect As Rect + DestRect.Initialize(0, 0, OriginalBitmap.Width, OriginalBitmap.Height) + ' Dibujar la imagen original + Canvas.DrawBitmap(OriginalBitmap, Null, DestRect) + ' Dibujar el número en el centro del Bitmap y configurar el estilo del texto + Canvas.DrawText(Number, (OriginalBitmap.Width / 2), (OriginalBitmap.Height / 2.4), Typeface.DEFAULT, 15, Colors.White, "CENTER") + Return NewBitmap End Sub \ No newline at end of file diff --git a/B4A/kms_helperSubs.bas b/B4A/kms_helperSubs.bas index 5d14c09..e0df4e3 100644 --- a/B4A/kms_helperSubs.bas +++ b/B4A/kms_helperSubs.bas @@ -295,15 +295,19 @@ Sub RD_respalda_cat_detalle_paq Private inicio As String = DateTime.Now ' Log("Copiando CAT_DETALLES_PAQ ...") Private x As Cursor = skmt.ExecQuery("select * from CAT_DETALLES_PAQ") - If x.RowCount > 0 Then - Private lasCols As String = getTableColumnListName(skmt, "CAT_DETALLES_PAQ") - rkmt.BeginTransaction - rkmt.ExecNonQuery($"delete from CAT_DETALLES_PAQ where fecha = '${fechaHoy}'"$) - rkmt.ExecNonQuery($"insert into CAT_DETALLES_PAQ (${lasCols}, FECHA) select ${lasCols}, '${fechaHoy}' as FECHA from skmt1.CAT_DETALLES_PAQ"$) - rkmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!! - rkmt.EndTransaction - LogColor("DP: " & ((DateTime.Now - inicio)/1000) & " segs", Colors.RGB(166,37,0)) - End If + Try + If x.RowCount > 0 Then + Private lasCols As String = getTableColumnListName(skmt, "CAT_DETALLES_PAQ") + rkmt.BeginTransaction + rkmt.ExecNonQuery($"delete from CAT_DETALLES_PAQ where fecha = '${fechaHoy}'"$) + rkmt.ExecNonQuery($"insert into CAT_DETALLES_PAQ (${lasCols}, FECHA) select ${lasCols}, '${fechaHoy}' as FECHA from skmt1.CAT_DETALLES_PAQ"$) + rkmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!! + rkmt.EndTransaction + LogColor("DP: " & ((DateTime.Now - inicio)/1000) & " segs", Colors.RGB(166,37,0)) + End If + Catch + Log(LastException) + End Try x.Close End Sub