From 47a85d427d73a15b97c2588fa7fb5c0ff3904755 Mon Sep 17 00:00:00 2001 From: Jose Alberto Guerra Ugalde Date: Sat, 19 Oct 2024 10:12:46 -0600 Subject: [PATCH] =?UTF-8?q?-=20VERSION=204.10.17=20-=20Se=20modific=C3=B3?= =?UTF-8?q?=20la=20secci=C3=B3n=20del=20engrane=20para=20que=20se=20pueda?= =?UTF-8?q?=20modificar=20el=20servidor=20de=20DBRequest.=20-=20Se=20agreg?= =?UTF-8?q?=C3=B3=20en=20el=20engrane=20la=20opci=C3=B3n=20de=20importar?= =?UTF-8?q?=20una=20base=20de=20datos=20desde=20Whatsapp.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B4A/B4XMainPage.bas | 117 +++++++++++++++------- B4A/C_Cliente.bas | 11 +- B4A/C_Principal.bas | 183 ++++++++++++++++++---------------- B4A/C_Productos.bas | 7 +- B4A/C_TicketsDia.bas | 20 +--- B4A/Files/cliente.bal | Bin 46752 -> 46686 bytes B4A/Files/login.bal | Bin 17081 -> 18811 bytes B4A/Files/principal.bal | Bin 49211 -> 50942 bytes B4A/Guna Vistas V3.1.b4a | 4 +- B4A/Guna Vistas V3.1.b4a.meta | 8 +- B4A/Starter.bas | 9 ++ B4A/Subs.bas | 98 +++++++++++++++++- B4A/appUpdater.bas | 33 ++++-- 13 files changed, 329 insertions(+), 161 deletions(-) diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index 9dcb047..5f5777b 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -91,6 +91,10 @@ Sub Class_Globals Dim buscandoActualizacion As Boolean = False Dim actualizacionRevisada As Boolean = False 'Parte de la funcionalidad "appUpdater" Private b_actualizacion As Button + Private et_server As EditText + Dim intentUsado As Boolean = False + Private p_importarBDWA As Panel + Private cb_importarBDWA As CheckBox End Sub Public Sub Initialize @@ -230,6 +234,10 @@ Private Sub B4XPage_Created (Root1 As B4XView) almacen = 0 rutaPreventa = 0 p_appUpdate.Visible = False + 'Revisamos si se disparo el intent de cargar la base de datos desde WhatApp. + If Subs.traeUsarIntentBDWA Then + Subs.importaBDDesdeWhatsApp + End If End Sub Sub B4XPage_Appear @@ -241,6 +249,12 @@ Sub B4XPage_Appear ' Entrar.Enabled = False ' revisaActualizacion ' End If + cb_importarBDWA.Checked = Subs.traeUsarIntentBDWA + If user.Text.Trim = "KMTS1" Then + p_importarBDWA.Visible = True + Else + p_importarBDWA.Visible = False + End If reqManager.Initialize(Me, Starter.server) If Starter.muestraProgreso = 1 Then muestraProgreso("Descargando nueva versión, un momento por favor.") @@ -330,25 +344,23 @@ Sub B4XPage_Appear B4XSwitch1.Value = False End If Subs.guardaAppInfo + +' If Subs.traeAlmacen <> "NA" Then +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "selectVersionAppGuna" 'Antes select_usuario_guna_GV2_1 +' cmd.Parameters = Array As Object(almacen) +' reqManager.ExecuteQuery(cmd , 0, "versionApp") +' End If End Sub 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. Sub Entrar_Click - - Dim reqManager9000 As DBRequestManager - reqManager9000.Initialize(Me, "http://keymon.lat:9000") - Dim cmd As DBCommand - cmd.Initialize - cmd.Name = "selectVersionGuna" - cmd.Parameters = Array As Object("1") - Log("#### TEST QUERY FALSO") - reqManager9000.ExecuteQuery(cmd , 0, "testQueryFalso") - - Dim r As Reflector Dim Api As Int Dim PP As Phone user.Text = user.Text.trim + LogColor(Starter.server, Colors.Blue) Api = r.GetStaticField("android.os.Build$VERSION", "SDK_INT") If Api < 9 Then 'Old device @@ -412,29 +424,35 @@ Sub Entrar_Click c=skmt.ExecQuery2("select count(*) as EXISTE1 from usuarioa where usuario = ?", Array As String(user.Text)) c.Position=0 existe = c.GetString("EXISTE1") + If existe = 0 Then - If IMEI = "" Then - Dim cmd As DBCommand - cmd.Initialize - cmd.Name = "select_usuario_guna_GV2_10" 'Antes select_usuario_guna_GV2_1 - cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.Trim) - reqManager.ExecuteQuery(cmd , 0, "usuario_10") 'Antes usuario - Else - If IMEI = "" Then - Dim cmd As DBCommand - cmd.Initialize - cmd.Name = "select_usuario_guna_GV2_10" - cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.Trim) - reqManager.ExecuteQuery(cmd , 0, "usuario_10") - Else - Dim cmd As DBCommand - cmd.Initialize - cmd.Name = "select_usuario_guna_GV2_10" 'Antes select_usuario_guna_GV2 - cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.trim) - Log("Mandamos: "&user.Text&"|"& pass.Text) - reqManager.ExecuteQuery(cmd , 0, "usuario_10") 'Antes usuario - End If - End If + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_usuario_guna_GV2_10" 'Antes select_usuario_guna_GV2_1 + cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.Trim) + reqManager.ExecuteQuery(cmd , 0, "usuario_10") +' If IMEI = "" Then +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "select_usuario_guna_GV2_10" 'Antes select_usuario_guna_GV2_1 +' cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.Trim) +' reqManager.ExecuteQuery(cmd , 0, "usuario_10") +' Else +' If IMEI = "" Then +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "select_usuario_guna_GV2_10" +' cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.Trim) +' reqManager.ExecuteQuery(cmd , 0, "usuario_10") +' Else +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "select_usuario_guna_GV2_10" 'Antes select_usuario_guna_GV2 +' cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.trim) +' Log("Mandamos: "&user.Text&"|"& pass.Text) +' reqManager.ExecuteQuery(cmd , 0, "usuario_10") +' End If +' End If Dim cmd As DBCommand cmd.Initialize cmd.Name = "select_version_GV2" @@ -456,8 +474,8 @@ End Sub Sub JobDone(Job As HttpJob) Log(Job.Success) If Job.Success = False Then - LogColor("Error: " & Job.tag & " : " & Job.ErrorMessage, Colors.red) - ToastMessageShow("Error: " & Job.ErrorMessage, True) + LogColor("Error: " & Job.tag & " : " & Subs.parseHTTPError(Job.ErrorMessage), Colors.red) +' ToastMessageShow("Error: " & Job.ErrorMessage, True) Else LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211027 If Job.JobName = "DBRequest" Then @@ -520,8 +538,18 @@ Sub JobDone(Job As HttpJob) Dim name As String = records(result.Columns.Get("USUARIO")) Dim ID_ALMACEN As String = records(result.Columns.Get("CAT_LO_AGENCIA")) Dim IMEI_BASE As String = records(result.Columns.Get("CAT_LO_IDTELEFONO")) + Private version As String = records(result.Columns.Get("CAT_AL_VERSION")) + Private versionador As String = records(result.Columns.Get("CAT_AL_VERSIONADOR")) + Private actualizarAplicacion As String = records(result.Columns.Get("CAT_AL_ACTUALIZACION")) Next + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("VERSION_NUEVA")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("VERSION_NUEVA", version)) + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FORZAR_ACTUALIZACION")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FORZAR_ACTUALIZACION", actualizarAplicacion)) +' skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("VERSION_NUEVA")) +' skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("VERSION_NUEVA", version)) Log("|"&name&"|") + Log($">>>> GUARDAMOS NUEVA VERSION: ${version}, ${actualizarAplicacion}"$) paso1 = 1 IMEI_BASE = "" IMEI = "" @@ -740,6 +768,7 @@ Sub i_engrane_Click lv_server.AddSingleLine("http://keymon.lat:1782") If user.Text = "KMTS1" Then lv_server.AddSingleLine("http://10.0.0.205:1782") l_server.Text = Starter.server + et_server.Text = Starter.server Subs.panelVisible(p_appUpdate,0,0) p_appUpdate.Height = Root.Height c = skmt.ExecQuery("SELECT HABILITADA FROM IMPRESORA") @@ -750,10 +779,19 @@ Sub i_engrane_Click If c.RowCount = 0 Then skmt.ExecNonQuery2("INSERT INTO GPS VALUES (?)", Array As Object(0)) End If + If user.Text.Trim = "KMTS1" Then + p_importarBDWA.Visible = True + Else + p_importarBDWA.Visible = False + End If End Sub Sub b_regesar_Click Subs.panelVisible(p_Main,0,0) + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("DBReqServer")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("DBReqServer", et_server.Text)) + Starter.server = et_server.Text + Starter.reqManager.Initialize(Me, et_server.Text) End Sub Sub i_engrane_LongClick @@ -763,6 +801,9 @@ End Sub Private Sub lv_server_ItemClick (Position As Int, Value As Object) Starter.server = Value l_server.Text = Value + et_server.Text = Value + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("DBReqServer")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("DBReqServer", Value)) Starter.reqManager.Initialize(Me, Value) ToastMessageShow("Servidor modificado", False) End Sub @@ -963,3 +1004,9 @@ End Sub Private Sub b_actualizacion_Click CallSubDelayed(appUpdater, "download_newApk") End Sub + +Private Sub cb_importarBDWA_CheckedChange(Checked As Boolean) +' LogColor($"cb_importarBDWA_CheckedChange = ${Checked}"$, Colors.Red) + Starter.skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'IMPORTAR_BD_WA'") + Starter.skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('IMPORTAR_BD_WA', '${Checked}')"$) +End Sub \ No newline at end of file diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas index de8d1d8..62d08f2 100644 --- a/B4A/C_Cliente.bas +++ b/B4A/C_Cliente.bas @@ -508,6 +508,13 @@ Sub B4XPage_Appear b_Inicio_Fin_venta.Visible = False End If + If Subs.hayPedido Then 'Si hay pedido, deshabilitamos el boton de "No Venta" + Log(">>>>> HAY PEDIDO") + Tels.Enabled = False + Else + Tels.Enabled = True + End If + If Not(Starter.gps.GPSEnabled) Then ToastMessageShow("Es necesario tener el GPS encendido", True) StartActivity(Starter.gps.LocationSettingsIntent) @@ -537,7 +544,7 @@ Sub B4XPage_Appear If META2 < 1 Then META2 = "CUBIERTO" End If - la_saldooper.Text = META2 + la_saldooper.Text = numberformat2(META2, 0, 2, 2, True) c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") If c.RowCount>0 Then C.Position=0 @@ -1116,7 +1123,7 @@ End Sub Sub JobDone(Job As HttpJob) If Job.Success = False Then ' ToastMessageShow("Error: " & Job.ErrorMessage, True) - LogColor("Error: " & Job.tag & " : " & Job.ErrorMessage, Colors.red) + LogColor("Error: " & Job.tag & " : " & subs.parseHTTPError(Job.ErrorMessage), Colors.red) ' LogColor("Error: " & Job.ErrorMessage, Colors.red) Else LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211110 diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index dfea988..1cc47be 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -233,6 +233,9 @@ Sub Class_Globals Private Label4 As Label Private Label2 As Label Private Label25 As Label + Dim p_transparenteActualizacion As Panel + Private p_forzarActualizacion As Panel + Dim l_forzarActualizacion As Label End Sub 'You can add more parameters here. @@ -330,22 +333,26 @@ Private Sub B4XPage_Created (Root1 As B4XView) l_rutasuplencia.Visible = True l_rutasuplencia.Text = s.GetString("RS_RUTA") End If - + p_transparenteActualizacion.Width = Root.Width + p_transparenteActualizacion.Height = Root.Height + Subs.centraPanel(p_forzarActualizacion, p_transparenteActualizacion.Width) End Sub +'Descargar: GP_https://keymon.lat/movil/guna/GP_4.10.10.EP_d.apk + Sub B4XPage_Appear p_principal.Visible = True Subs.validaPromoProcterPRO3009 HORAINGRESO ="000000" Btn_Ubicar.Left = (Root.Width/2) - (Btn_Ubicar.Width/2) ' B4XPages.MainPage.reqManager.Initialize(Me, B4XPages.MainPage.SERVER) - PASO =0 + PASO = 0 If Not(Starter.gps.GPSEnabled) Then If Starter.marcaCel <> "Sony" Then ToastMessageShow("Es necesario tener el GPS encendido", True) StartActivity(Starter.gps.LocationSettingsIntent) End If c=B4XPages.MainPage.skmt.ExecQuery2("select count(*) as CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) - c.Position =0 + c.Position = 0 If c.GetString("CUANTOS") = 0 Then cmd.Initialize cmd.Name = "select_fecha" @@ -353,11 +360,11 @@ Sub B4XPage_Appear Msgbox("AJUSTAR FECHA","AVISO") 'ignore B4XPage_Appear Else - c=B4XPages.MainPage.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) - c.Position=0 - Dim sDate,sTime As String + c = B4XPages.MainPage.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position = 0 + Dim sDate, sTime As String DateTime.DateFormat = "yyyyMMdd" - sDate=DateTime.Date(DateTime.Now) + sDate = DateTime.Date(DateTime.Now) If c.GetString("CAT_VA_VALOR") > sDate Then Msgbox("AJUSTAR LA FECHA YA QUE ES MENOR AL SISTEMA" ,"AVISO") 'ignore c.Close @@ -366,7 +373,7 @@ Sub B4XPage_Appear c.Close End If c.Close - If EJECUTANDO =0 Then + If EJECUTANDO = 0 Then Listo1 = 0 Listo2 = 0 Listo3 = 0 @@ -378,11 +385,10 @@ Sub B4XPage_Appear DateTime.DateFormat = "MM/dd/yyyy" fecha=DateTime.Date(DateTime.Now) b=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from pedido_cliente") - b.Position=0 + b.Position = 0 Cuantos = b.GetString("CUANTOS") b.Close If Starter.marcaCel <> "Sony" Then ToastMessageShow(Cuantos , True) - d=B4XPages.MainPage.skmt.ExecQuery("select count(*) as TOTAL_VISITAR from kmt_info2 where gestion = 0") d.Position=0 e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as POR_VISITAR from kmt_info2") @@ -399,7 +405,7 @@ Sub B4XPage_Appear l_ruta.Text = f.GetString("CAT_CL_RUTA") f.Close End If - If Cuantos = 0 Then + If Cuantos = 0 Then L_MONTOD.Text =0 l_cuantosc.Text = 0 l_cuantosn.Text = 0 @@ -412,7 +418,6 @@ Sub B4XPage_Appear l_porvisitar.Text = e.GetString("POR_VISITAR") d.Close e.Close - b=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS from noventa") b.Position=0 l_cuantosn.Text = b.GetString("CUANTOS") @@ -424,12 +429,10 @@ Sub B4XPage_Appear b.Position=0 L_MONTOD.Text = c.GetString("MONTO_DIA") l_cuantosc.Text = c.GetString("CLIENTES_DIA") - D2=B4XPages.MainPage.skmt.ExecQuery("select COUNT(*) AS CUANTOS from PEDIDO ") D2.Position = 0 LPT = D2.GetString("CUANTOS") / l_cuantosc.Text D2.Close - l_cuantosn.Text = b.GetString("CUANTOS") efectiva = c.GetString("CLIENTES_DIA") / e.GetString("POR_VISITAR") l_efectiva.text = Round2(efectiva*100,2) @@ -466,12 +469,10 @@ Sub B4XPage_Appear c.Close bu.Initialize batterystatus = bu.BatteryInformation - c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") c.Position = 0 usuario = c.GetString("USUARIO") c.Close - B4XPages.MainPage.montoActual = L_MONTOD.Text B4XPages.MainPage.clientestotal = L_CUANTOST.Text B4XPages.MainPage.clientesventa = l_cuantosc.Text @@ -493,19 +494,14 @@ Sub B4XPage_Appear Private s As Cursor = B4XPages.MainPage.skmt.ExecQuery("select count(RS_RUTA) as cuenta, RS_RUTA FROM RUTA_SUPLENCIA") s.Position = 0 If s.GetString("cuenta") = 0 Then - Label22.Visible = False l_rutasuplencia.Visible = False l_rutasuplencia.Text = "" - Else If s.GetString("cuenta") > 0 Then - Label22.Visible = True l_rutasuplencia.Visible = True l_rutasuplencia.Text = s.GetString("RS_RUTA") - End If - End Sub Sub Subir_Click @@ -556,8 +552,8 @@ Sub Subir_Click Next End If c.Close - ' PEDIO_CLIENTE + ' PEDIO_CLIENTE c=B4XPages.MainPage.skmt.ExecQuery("SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN FROM PEDIDO_CLIENTE ") d=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDOSC FROM PEDIDO_CLIENTE ") If c.RowCount>0 Then @@ -577,7 +573,6 @@ Sub Subir_Click ' ENVIO DE LOS CODIGOS QR 'c=skmt.ExecQuery2("SELECT CAT_CL_NUM_SERIEFISICO,CAT_CL_CODIGO ,CAT_CL_LONG,CAT_CL_LAT, CAT_CL_FOTO FROM kmt_info2 where CAT_CL_NUM_SERIEFISICO = ?", Array As String("OK")) - c=B4XPages.MainPage.skmt.ExecQuery("SELECT CODIGOKMTS, CODIGOB, LAT, LON FROM HIST_CODIGO_BARRAS" ) If c.RowCount>0 Then For i=0 To c.RowCount -1 @@ -1148,7 +1143,7 @@ Sub JobDone(Job As HttpJob) ' End If 'Log(Job.Tag) If Job.Success = False Then - If Job.ErrorMessage <> "STREAM" Then LogColor("Error: " & Job.tag & " : " & Job.ErrorMessage, Colors.red) + If Job.ErrorMessage <> "STREAM" Then LogColor("Error: " & Job.tag & " : " & subs.parseHTTPError(Job.ErrorMessage), Colors.red) 'ToastMessageShow("Error: " & Job.ErrorMessage, True) If Job.ErrorMessage = "STREAM" Then If CARGA = "SUBIR" Then @@ -1173,7 +1168,7 @@ Sub JobDone(Job As HttpJob) If n = "OKActivo" Then Dim cmd As DBCommand cmd.Initialize - cmd.Name = "select_ruta_GV2_70_8" + cmd.Name = "select_ruta_GV2_70_9" cmd.Parameters = Array As Object(ALMACEN,e_ruta.text) B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ruta") 'Log("Usuario guardado en BD es 'Valido'") @@ -1967,70 +1962,79 @@ Private Sub B4XPage_CloseRequest As ResumableSub End Sub Sub connecta_Click - B4XPages.MainPage.reqManager.Initialize(Me, Starter.server) - teclado.HideKeyboard - connecta1 = connecta1 + 1 - 'imei = p.GetDeviceId - conn = "1" - Dim cmd As DBCommand - cmd.Initialize - cmd.Name = "select_version_GV2" - B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "version") - ' Cuando nos conectamos verificamos que el usuario guardado en BD sea VALIDO. - c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO, PASS from usuarioa") - c.Position=0 - If c.RowCount > 0 And c.GetString("USUARIO") <> "KMTS1" Then - Private usrT As String = c.GetString("USUARIO") - Private passT As String = c.GetString("PASS") + Log(">>> REVISAMOS ACTUALIZACION") + Private revisaActualizacion As Map = Subs.revisaForzarActualizacion + Log(revisaActualizacion) + If revisaActualizacion.Get("forzar") = 1 Then ' Hay actualización, la forzamos. +' Starter.newApp.appLink = $"https://keymon.lat/movil/guna/GP_${revisaActualizacion.Get("nuevaVersion")}.apk"$ 'Liga a nuevo apk +' Starter.newApp.newMsg = "Nueva version" 'Texto de que hay actualizacion +' Starter.newApp.okMsg = "Aceptar" 'Texto de app al corriente +' Starter.newApp.version = revisaActualizacion.Get("nuevaVersion") 'Version actual + l_forzarActualizacion.TextColor = Colors.black + l_forzarActualizacion.Text = "Hay una nueva actualización para la aplicación, por favor revise que tenga DATOS y espere mientras se descarga." + p_transparenteActualizacion.Visible = True + p_transparenteActualizacion.BringToFront + Starter.nuevoLink = $"https://keymon.lat/movil/guna/GP_${revisaActualizacion.Get("nuevaVersion")}.apk"$ + Log("Descargar: GP_" & Starter.newApp.appLink) + CallSubDelayed(appUpdater, "download_newApk") + else if revisaActualizacion.Get("forzar") = 2 Then ' No hay datos, regresamos al login y borramos usuario par que traiga los datos. + l_forzarActualizacion.TextColor = Colors.red + l_forzarActualizacion.Text = "Es necesaria una conexión a internet, por favor revise su conexión y vuelva a intentar." + p_transparenteActualizacion.Visible = True + p_transparenteActualizacion.BringToFront + Sleep(4500) + Starter.skmt.ExecNonQuery("delete from usuarioa") + p_transparenteActualizacion.Visible = False + B4XPages.ShowPage("Login") + Else ' No hay actualización, continuamos con la carga. + p_transparenteActualizacion.Visible = False + B4XPages.MainPage.reqManager.Initialize(Me, Starter.server) + teclado.HideKeyboard + connecta1 = connecta1 + 1 + 'imei = p.GetDeviceId + conn = "1" + Dim cmd As DBCommand cmd.Initialize - cmd.Name = "select_usuario_guna_GV2_10" - cmd.Parameters = Array As Object(usrT, passT) - B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "usuarioA") - End If - c.Close - -' If imei = "" Then -' cmd.Initialize - -' cmd.Name = "select_ruta_GV2_70_2" -' cmd.Parameters = Array As Object(ALMACEN,e_ruta.text,imei) -' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ruta") -' Else -' Dim cmd As DBCommand -' cmd.Initialize -' cmd.Name = "select_ruta_GV2_70_2" -' cmd.Parameters = Array As Object(ALMACEN,e_ruta.text,imei) -' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ruta") -' End If - - If e_ruta.Text = "KMTS1" Then - cargar.Visible = True - Subir.Visible = True - e_ruta.Text = "" - End If - - If e_ruta.Text = "BERNA1" Then - cargar.Visible = True - Subir.Visible = True - e_ruta.Text = "" - End If - - ToastMessageShow("Validando Conexión." , True) - - If connecta1 / 2 = 1 Then - 'SERVER = "http://177.244.63.54:1782" - 'SERVER = "http://keymon.com.mx:1782" - 'SERVER = "http://201.99.139.28:1782" + cmd.Name = "select_version_GV2" + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "version") + ' Cuando nos conectamos verificamos que el usuario guardado en BD sea VALIDO. + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO, PASS from usuarioa") + c.Position=0 + If c.RowCount > 0 And c.GetString("USUARIO") <> "KMTS1" Then + Private usrT As String = c.GetString("USUARIO") + Private passT As String = c.GetString("PASS") + cmd.Initialize + cmd.Name = "select_usuario_guna_GV2_10" + cmd.Parameters = Array As Object(usrT, passT) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "usuarioA") + End If + c.Close + If e_ruta.Text = "KMTS1" Then + cargar.Visible = True + Subir.Visible = True + e_ruta.Text = "" + End If + If e_ruta.Text = "BERNA1" Then + cargar.Visible = True + Subir.Visible = True + e_ruta.Text = "" + End If + ToastMessageShow("Validando Conexión." , True) + If connecta1 / 2 = 1 Then + 'SERVER = "http://177.244.63.54:1782" + 'SERVER = "http://keymon.com.mx:1782" + 'SERVER = "http://201.99.139.28:1782" ' B4XPages.MainPage.SERVER = "http://187.189.244.154:1782" ' SERVER = "http://10.0.0.205:1782" - B4XPages.MainPage.reqManager.Initialize(Me, Starter.server) - Else - 'SERVER = "http://keymon.com.mx:1782" - 'SERVER = "http://201.99.139.28:1782" - 'SERVER = "http://177.244.63.54:1782" + B4XPages.MainPage.reqManager.Initialize(Me, Starter.server) + Else + 'SERVER = "http://keymon.com.mx:1782" + 'SERVER = "http://201.99.139.28:1782" + 'SERVER = "http://177.244.63.54:1782" ' B4XPages.MainPage.SERVER = "http://187.189.244.154:1782" ' SERVER = "http://10.0.0.205:1782" - B4XPages.MainPage.reqManager.Initialize(Me, Starter.server) + B4XPages.MainPage.reqManager.Initialize(Me, Starter.server) + End If End If End Sub @@ -2072,6 +2076,8 @@ Sub t2_tick B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("pasword")) B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("LATITUD")) B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("LONGITUD")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("FORZAR_ACTUALIZACION")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("VERSION_NUEVA")) B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE GPS SET HABILITADO = (?)",Array As Object(0)) B4XPage_Appear E_RUTA2.Visible = False @@ -2086,18 +2092,14 @@ End Sub Sub e_ruta_EnterPressed If e_ruta.Text = "FIN DIA" Then - RES = Msgbox2("Seguro que desa hacer el cierre todos los datos se borraran?","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore - If RES = DialogResponse.POSITIVE Then Subs.bitacora(Subs.fechanormal(DateTime.Now),usuario,Subs.traeAlmacen, Subs.traeRuta,"Fin Día", "",Subs.fechanormal(DateTime.Now),Subs.fechanormal(DateTime.Now),B4XPages.MainPage.lat_gps,B4XPages.MainPage.lon_gps,"2","","") - t2.Initialize("T2", 1000) ' 1000 = 1 second t2.Enabled = True Label22.Visible = False l_rutasuplencia.Visible = False l_rutasuplencia.Text = "" - End If End If @@ -2215,6 +2217,7 @@ Sub B_OK_PAS_Click Resumen.Visible= True img2.Visible=False Subs.panelVisible(p_principal, 0, 0) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String("CARGA_DIA")) B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("CARGA_DIA",1)) If E_RUTA2.Visible = True Then @@ -2693,4 +2696,8 @@ End Sub Private Sub p_sombra_Click +End Sub + +Private Sub p_transparenteActualizacion_Click + End Sub \ No newline at end of file diff --git a/B4A/C_Productos.bas b/B4A/C_Productos.bas index 7e92645..2a42749 100644 --- a/B4A/C_Productos.bas +++ b/B4A/C_Productos.bas @@ -122,7 +122,7 @@ Sub B4XPage_Appear c = B4XPages.MainPage.skmt.ExecQuery("select count(*) as hayPromos from cat_gunaprod where CAT_GP_TIPOPROD = 'PROMOS'") c.Position = 0 If c.GetInt("hayPromos") > 0 Then - lv_catalogos.AddSingleLine("PROMOS") + If Not(Subs.traeCliente.StartsWith("N")) Then lv_catalogos.AddSingleLine("PROMOS") 'No se venden promos a clientes nuevos. End If Sleep(100) l_total.Visible = False @@ -212,7 +212,7 @@ Sub lv_catalogos_ItemClick (Position As Int, Value As Object) Private yaComproPRO3054 As Boolean = Subs.revisaPRO3054(Subs.traeCliente) Private yaComproPRO3055 As Boolean = Subs.revisaPRO3055(Subs.traeCliente) If c2.RowCount > 0 Then - For i=0 To c2.RowCount -1 + For i=0 To c2.RowCount - 1 c2.Position = i ' jpeg = c2.GetBlob("CAT_GP_IMG") ' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) @@ -225,8 +225,7 @@ Sub lv_catalogos_ItemClick (Position As Int, Value As Object) LogColor("Ya compro la PRO2265, ya no se muestra la PRO3015", Colors.Red) Else If (yaComproPRO3054 And c2.GetString("CAT_GP_ID") = "PRO3054") Or _ - (yaComproPRO3055 And c2.GetString("CAT_GP_ID") = "PRO3055") Or _ - (Subs.traeCliente.StartsWith("N")) Then ' Si la promo es la PRO3054 o PRO3055 y ya compro, NO la mostramos. + (yaComproPRO3055 And c2.GetString("CAT_GP_ID") = "PRO3055") Then ' Si la promo es la PRO3054 o PRO3055 y ya compro, NO la mostramos. LogColor("Ya compro prods de la PRO3054 o PRO3055 o es cliente nuevo, ya no se muestra.", Colors.Red) Else lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) diff --git a/B4A/C_TicketsDia.bas b/B4A/C_TicketsDia.bas index 66fd5ce..dc50468 100644 --- a/B4A/C_TicketsDia.bas +++ b/B4A/C_TicketsDia.bas @@ -57,35 +57,25 @@ Sub B4XPage_Appear nombre_boton = "NOVENTA" c=B4XPages.MainPage.skmt.ExecQuery("select PC_CLIENTE,PC_MONTO,PC_NOART,(select CAT_CL_NOMBRE from kmt_info2 where cat_cl_codigo = pc_cliente ) as NOMBRE FROM PEDIDO_CLIENTE ORDER BY PC_FECHA asc") ListView1.Clear - If c.RowCount>0 Then - For i=0 To c.RowCount -1 - c.Position=i + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i 'AQUI CAMBIAR - - + Private s3 As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select * FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and PE_RECALCULO <> ? OR PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL",Array As String("","null")) - LogColor(s3.RowCount,Colors.Yellow) +' LogColor(s3.RowCount,Colors.Yellow) If s3.RowCount > 0 Then - Private s As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and (PE_RECALCULO = ? or PE_RECALCULO = ? or PE_RECALCULO IS NULL)",Array As String("","null")) s.Position=0 Private s5 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(PE_RECALCULOTOT),0) as TOTAL_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and (PE_RECALCULO <> ? or PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL)",Array As String("","null")) s5.Position = 0 - Private suma As Float =NumberFormat2( s.GetString("TOTAL_CLIE") + s5.GetString("TOTAL_CLIE"),0,2,2,False) - - - s.Close - - Else If s3.RowCount = 0 Then Private s As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE = ?",Array As String(c.GetString("PC_CLIENTE"))) s.Position=0 - Private suma As Float = NumberFormat2( s.GetString("TOTAL_CLIE"),0,2,2,False) - s.Close End If diff --git a/B4A/Files/cliente.bal b/B4A/Files/cliente.bal index 35026eab11511d8b2751beb13b5c8e519a7e3cd1..d86ef2ca0c46486b502c6fc788913ba229bb506a 100644 GIT binary patch delta 861 zcmZ4Rmg(LbCRSDk1_rl{tiQPGy%`x8ts7aD(x{{9X>~pJr-Zk=&4sGt-Q*$ly$YtqiK!X0%h*=>Z~{@G=*iii$>wudP%3P zIXvYu68nzkeVOC?*>nBxB_{W^GFM7i>t8Wws=ISj=BZ`YZMMH1nRhakjAo1fEcr9* zeB7o5hdE1LZC0L@;UumhG~e--)SD+?_Pnt@u-?W(U;Xd`zi$qIddu~BdW^QKDW-}St1jYrE?=>4v-mlBGxxdDbov{bVEt~wnSAw~; zv~=>p7V*jbEe(^8wFpgquu*ceRqJ66prkl6!~g%26XkU#`}CcX=>bNK91t_wg5nCq zZ~_tvAcn}~2?_F(1N-$*G@a`|C37Aq4c1fv)8vS%>GA|rO#u^6P3G(56oy;UgsMJt z5~})3lP(Lx%|3{#_WER3G%p%VZl4kW_a@WS07i5LoA*wOWn`?FEZe5B*?ER98@l}D zx{V%_&wCnAE}Q=ds7ydhV{+qyiIWo|*(cvyFEsgmo62PWg-yb{VBVbubCM)5j1(rb zESdmUt6wWLdHxe2pq P;^YbT8k<=*&tV1tPk}_& delta 726 zcmccjhH1fDCRSDk1_p-+}wJBxL0l|?H?IU4-j_j$I&`Rl#%g?!SB zBm~`>mvv1&_IdHC6RN5**{{NzPAzgsJm9hVMy5ik=wW_d$%`|ZMG~%YSmsI8yJ}pw zKD&l}*4vHm_qugg*uB~Bar9e|#G!OEZc(2^kuTfS=PWQPy{OOAeDB=n>7G*hY55i;f8o%8h4wswv= z_TxiS$O)z38(BAcX4-!8YxKI;7i=B!;*Q7R`h%4$?u`;{O7CNu)NH1^&AKN4^vMaK zsm3Sj&c9y$>sL+HHvaqH_I;h~T-~5IaZ|Zlf9@xa!v;6*`8VxeroN2%Jv-Cf8&mu@ zd-J^FXZH;V^7Qo#+H4~uo4~kgb5u1+o<<&o5S)T+qfk`EOa;;Qh|xcJL6^p4*M2>)nw|ZpgcrcnG{e-S zfYt1q08wK!@szLtOpQBC%`31P^GOgjt0!G%YGRz6qbxaDzf*kjhRLpQcZE+0nB22b zd-J6!0gQ0Lgw5=myQhUQPEIe?+{`t@mklm6VQuwfllhN;5<-)AtBOyyUodg<0&~g9 z2jo>I^Db=SIs$XRKClB0E`&)7O|D(kE!+olC|sQkNZn@V#VkyWQJX!MRxmP(Y(BW` Y7`JdCOzBOSkyVoemuhT2v}q1A09+m-*#H0l diff --git a/B4A/Files/login.bal b/B4A/Files/login.bal index 0a798d52fd3216ed37f514d393d2e078896d65d1..863a17f2dce1e9239a5296f89eb1ebbe47d99b5d 100644 GIT binary patch delta 1517 zcma)5OH30{6rI;fWkzA79h5@tv=p#F0gKAVQh^aQ_!krF#$bge5|q{oMiV0&-54d- zYa)UY)KEp`lgvgFRQx3xU1(ey6XM2|iMkU^#`|7?PJ<>c&YSb@y}9qach5XJM`kXQ zv=olxUYa;gz;9(NZK_d3(sHP|?Pw$%?F>ehhCqD*hDtYvG1Ar1s&sXBhC2e$U?dWX z=50J2YH3%(CujGmSUDGpee?05&gSEx=!sAi^2jN3I%ba~b%q<{s*Q#tNnzB3ksZOd z4%j7HAz-K=1<+&Y&RB+t41^hBL@WZkQSQz{W<_Kp=6H^d+mNqB*b%ahJ9ONsn46NMz?eYqpj+jr5?jx18%*md0gkm#6sSM16epZI)%nr zk2sVDM{CFtsJFqfw5+CCOZ>lU{$e?*s_i(lQmEApUXulU0!Rtmr3!L6-#MCA|8?^MfZ>!R~jGULcj3Fu8mQ9Q4;Zsne?vJiP)v zn(xJhj%+El7k>;U{Z$5mgYhyqTwEbpsBNgd$ZK4v$H+9qoNjUrrZP6c(}Glz0;Ogf z>4QtvE`hdZUHhQDM24|^GfFbSr>b;#?By+A$!w2%SVv7tTo5eI2Dw^<^Tk2Zk6N=~ zpPc7fsIwo-6FU1i4$hR>rRx~ofG}y=%nZ}Xv{%^ZU&Quw?o9VtBgSkCQj2J=5Rq)jRab;)w&sjgNPK4T7nIwH5#vd1 zhTv`WXL1LJV1bGC{){_GS*)c`PVT~l+z3%$oD9!b4*#u^z65Nyd*J(83BJ@EAop}u z+#^yCB(4xwC;iU}xsN3q;A6d6yq}aFn!6!+069vd+Ek|yGBRI0@{i(CEFSm+g6uXh delta 706 zcmZvZO-vI(7>4KDLepKX3+>jl1*BU*DdkUsKoBSvBQ)N;h=#-yng|IA#;BKaARax~ zH-w)qKLz9nggL>9a3|@>gag4lC$HkcZyO0i^ziIF-^{z;&dgrqX#X?$%Y_h8uMh^0 z_rLmopo<vzGnF1*E@LW~N+y5>PwkAw7GlCogo!d$idQRMqxc=g zYZZ?vZYv&VuVd<&2IekvPl&go@v0CB#hVmQD&DMki{h>9rDO5f##|n^{c>Iw%YGAm zlgD1iYxsEf+4!63@pp3C->gw1ewsn-_;mT9LW^K0*@3CFAz!xHgzrr!_>}0t*^nX6 zlT{jGX-h_1f9aUW7o$Yn%oE*0f&+_Z0+rr_8dnY&D|D@;fW$=`ixnU65NB!pVwN(dG-7#9>)){oB zw=mXcl~Sw!rci7#a2WPsa%hg$xL*j{p&NMKld?Z@y2t&Pdwr!ntg&3}!9nD9yWD%6 rBP#qoS(jP37Rl!l7H-u9XdR~`8EFlt2}k`Y%#8%hjsGV%Il1x&vpRs2 diff --git a/B4A/Files/principal.bal b/B4A/Files/principal.bal index 61136d57a1fed768fa0d691d48de2df6154084b2..417d783dc73f1ab21930d35b046e5817f506d779 100644 GIT binary patch literal 50942 zcmeHQd3;<~b(S34i4q`7lMsiHjF)VVtym*jUSfjekrIo@lF;JB<ZYBYEP{%w%RH zFF1|~B!mzGEs#=D+JvyWElnY`&=y)sOU+Vf(~__RS}5JvTUts}iu--%&AZFYd(wNF zk@QD9zuz65d+xdC-us<%&t2ZkXhmIJ-H8{~)t!mIuSZ&m)V{N~zoQq-y2hQ;#bP#d zbKc42l6jW7j58=TR!q&LiigjkoR={qM~A1JoO2fI4ENqN+}GaI*}a(+OW6TM_jeAk z`JKhg@X%;#%*n4{ZfGFU&K8lMbXke+_C1}_T<3VIIG8+CEHy_>9&0)1ME9Pi^YFJZ zFAP(ESt$B$BGWyObqo7w!e@SyPeTwx>ScHl4oy{!};l=b2_Nb z;r^k)_ILxx{mxi2Kb%XBpNmXm*OW7vG}@$u;;{oN(`4nEtz3(h+ic}pt=twXx0L{- zrY7U1zs;vHpP6Bo)592Op-6d<(@v(CEsR;Y40GMXiJ|tM!QO#EjyOF$p3ml7spJHp zO3gT>TxM)KStvReh}1+jf5ged5vHAV>WDLz%4Udf_wera{zUtL*sVKNC>qE}d5Pt! zoXVn4!(#$WdbpH}TV>6}(11XsB_r=19_&io)Ysp;`z0b!Ockfo*&8ayPx!=hnuxwj zZPKK{jcabRCR;SQS(B}r+@i^?n%t(^)oSCq-MDTyZV2dhn{~&Vb;p}^$F+hM-SHOPZi{ZWrCD`xv!ZmjwwTdh3wR5-l6B@hKqS8Q^+}awr$OvWvti44of34aF-G|TvC_Em85_n#R7p)0)bEh zfl%8R7W#HJ{Q~|p_T{sa`DCH6)5(`&9*1FYUE#P4Ad?%%E2r^csU+ zYtZXJd;Po|wAaro4EjogzRIAlHt6*ReT_kHFzAh-8+GOyX3_5Pm%?90K(3=gq z)u6W+^j3r3X3*OW`Z|N&VbCu#=<5yo6WjgYGrxK7)RxLH8TC=v2MjuG&{GDTG3cy8=M4HT zgU%at!JvxlS(B9mCwL#x& z(60ggTBQ4s?nm##CdH| z%tXo=W;@i+)d4GBN6KM6t_ki+=&I)E3Ql@T3MpDhW>QX?qU>1VaAu53xP%PKsushd z#!~jlUFX1Xby4>qwkA05h{!4AFM9*kaGksR&0l}Tr`pcB?@OQC@n_HNI`P&gQ|EVF zb@9hv`J)pXKlZloPrTy=>M@=<{Yg8e`?M|Db?>0(80Zj#61;BAd?Uy&Tu}Mz5M( zv;swAlsz3pGDE%Nbdlr?c6~k0RFW-v-KD!sOsCV>1tpUiS|1z9^z?XA_FR;_)0uHN za1Jbk+JwU0L4uHdPtloVn>dxElhjb!o5eal^;>d$kpk&Gd&ENzx&v=gq0&{zNtp0~fpkhLzDQCTd=Wqq8@&yBzzNROolcQ_}?jJ)N8p zGjr25%l?}K%sJ!Zsmvs|alU7QpaIG`PX;JdX@G9)=~S+eIwHpF>Fw#H?zG=|gF~6X zS-AaR66Xc64zsLF7unyQhO1-4U8D~uI(r5?`-gY+_IK^WVYj`Tjl-*xFlV|87aRqN zLKsUr*`3NHX{SQ*u)Bxv>FwX$-YwGv7bLOMyiiT>;#qsTA`!!hW4TEL5^TXjhdc0*xN@xYoaC7!*FWWMSi+ zx~_56b~r`n#(Zj=<8_sAvU7~1Ely+dkTZpgh~`GOD2=<58C-7B(>rh(=S>9Kzm(r4 z^OfPLD^oyU+RNh|7ad;9^yX|f8&4G^KzlrPw-mEYR?bDlW6^PpOHK(MuEa8w^xj18 zl4~n<6~Is`;ZI*_G&RwycXo8Jx_eh7cXzmF(wr8`?CBcNoXzC)b#|}~eQVOxN_Nk+ z39|JSOw$&!J8$SDyOnXkN$2*g`AMaj!epT2Mup1#{@+Dbi_3%8l)VL#tc*Qtz!6}PWf`qc95 z*0?iO#3i+t<)K{rhh0Yhok*pV{+mRaV>0jXI-FxxJ!+Pow-7=^0kw;>WLlIj=yAv8 znsPTULj!iymWs`EKx2Px6}EDI;TBe|LABpVv@7jD5vQhDM_+7exow=%gVV7oEZwoz z4e`yJ=r(dw&MMwT?Ce*zrsM%xjl6mXa*QY{r`nCT5V}N@0H_@}E{G=L!q)eR@m7&; z4%!WR;YoIZUZ%7#m*A00YI@KFZphv6)#+~5be}e{ubrh^@6s@ED=e4bR3k9}7hJ4S z+I7(~rR%>K?!AbeJlPBptBPa(EPF22XJ1y$a}z-M>|PG(tExS5@R z&x}vYBcO3-oZT-yTu@S5IgpOdtN32FLH8ycw(JwmbXrAV?x^$xEGwj9_n8u*PGse& zOJP8VWb znTaeF@pe_buqW0z(AU}DUSjr@{_diubn`(6eK~>M1P`s=F}L8A#>M_#X~~vZRou+8 zyjQsp+l5sU>%&;Ka2fdJ)|5@XzCmWd^0`r#Wol;=T_=?pPhxXAmC9g!cKKqhxGV}J%R1hu$% zQnHKLN@uIMu#suvJsMTA+ZbA~x5Rb6Qpq8>EVgU8tXKTPM z5A_<4cW702*CpE!_gOCIp7#)#3bBsjc{3Xl*!sP&Esr7yX=l%#uJ-;I_FP>ZvNdy6 z%1*BIP?&n!uglB)ZzS zljWLFJ(A=CQCD~T#!D58jR)Q0Bsz`p#~nZnlnh`s2tBSf9-HG@i?ou1T8AW> zWTf{jTej?SkAuH;%dfy2E7TcdzY1p*9( zH86z928M!aIIg3}z-?e|fRy0)AP6ac9)z_05D3*9r3uUmVAg{t9&-(dXdXi^wmoJ8 zbTn+_8NZoV6>kd5E#z#)+cqSbbOIMuZfDVTc-ukZWq4C48F+I}YDXl*qJXUn-n57Gdmjij z5~T@Di86J|uLtGM&;`f)oE)^k4ws}$V z-$AI}C{55>f+zuMzRO2tl;k4Emlq{t?M5)@K!NJYT)bV> zBa(~PE|1OF)`isY3cTHfwDQzfp8ZBQh=c}j|Wjy9v@2acnC$dbr=A}Z8>hWxZClV z3bmPNG&QDK12Zvm0|f|~=WJ~|k`By!kW(HT7?=r@DBx6)KtYbU*A5UeB!VZJNbt2> z-f9vQDuMS43OA!c8{L!O*g=5^NKl}#4XTQ=3MxNfs8X+33K$YLFm!Mm7%=4J0;7Y% zE#Qjl?FB(au1D_k*tdeXO|jQ_?AaW(V&iaowEACdy!vv~sOKQ~T7C!KB21Ku_C<-` zY#ByLz-)=5$hIe~C-x*#0lOC}v<*7~&WhRhFb+hvA<1z>>`zah&s1S_76r;9E<((a zsbY;sd`qGcD!3j2qC|~?a?y@~65m)2LihqAn+hY~y&vMW z!TT6A3Eqr^f;Wj!cqbru8d6=ug8O$0t<)56DvW^loe-}v-VET;@YXBPg5!Ol)_7B4 z1iaHV!~02Svg64Pa6NTz&j7|+TgAHTgC6t{#}TKcM;OEH(m?E=PKR07@dYp!wlZ|^4+lPNT0Q8c+^7PuRYS7CuCP~Elw6;@>dM$T{+;1cgM2Y6|DF;YFF zRH!*{41!B$fqT$+O)Wr$RasyN3g%;h`%rHcQoXVO53Hdqa2$e5W`S3u@hU7(xeica zRTh}r;JTHQD%y|^Kd3ro2i|g_CgIb2v@H)J$Q0xah_Ul1Bh}7@~ygh_ee-Lkc znIBJiBl4FZ$qrTK9J?yWQLnn?Ivbe=3fq7wgcKg?e(6F8uc()ZYL8y+`xt1YoNgy= zlTf`;n!qgGB|i)*;^^OmDuJVaGYVCEbB&(D)sKE9v?#D-^nKt++l+szH$J0BaTO1u z=6QAei)N>!ngj=u3lX>Z0+G5pej1zr zi0C`Uo%(`b_52drt7$l*LJc0FY(WbAsLESVxDBcLaKspHyCgkPY|WK80B@9-SI42l z(OXe3a6)ngQ|-+)At`JFW_ugMv!A!w;b$8;b>HiKFnMzLRuD?wIF=<01>Z2-VQD0v#<2QCGJCQ6lqXsnTU(Hk`w)BfeFW_7EV>SFJ4kS$^Ygz9_&VCD*{A$ZEePbOktj`ImX?7RD6}nbE;zOY=Iimw0?|FbfKG(BKtQO0ju6LGAJ` zxQ+LGJzhl^MkVq1$3V#HI@kKn9oQn_{cC8drg&3f1iUF;8@vgcM3{Xb1aC&5Po!i9=3PeHd>fJ?1y0mhu!*3_dYUos0khQ@1Z0V-Tt z3vja=%>u_zW63P=I2y011*mXoEpQ^T1&*V}l3CzgXuPHtpu#1w0GC^dLeVY2C40#% z@I-jinpd*>4eC)D2aeGptEyx)(eYKk`%M!@?65U(-bD#C=uo2$Yi z;r$!6#+wQw;QgDm$6Kwbq47o^O7~_7P%iSn1!@^m!w2!EAENPARM@A3kWZD19Hk>Wsl%AcmfmGFuIVo*l6?MQP!QDLX_6BRWlKj_WLr$qu3L684Ok{LTg`wy3ESre82 zJOYmGKUApw=Pcw#kmm58--XCFB>mG3&mb4hf9{2(_McsVOB|5@2t-y@_4$Lj{HG=n zCA8O|*Yb)QT1;o5f~en!{m_~<;v;VB-i+CRZ29kb{2q8!xCUpk?HW`V*)=|jO15j9 zhky{yHSExG73P2QT;dy0{n$bsPc31eENaCsPYtI&sZw7{bdB4ITqDVK*aSLZ&P;1JR|1= z-n``xWk-vgN6`s)-u~b6nt5!+{s>To_L?wTF)EDgHGhmsw%2rr@EYwEI@)swCb5S1 z8sas5&@Dc1%>tije++_47VSTY#sln7x!#@+VSBy33>4qxd@OJrBbV1Yk{xNU*AfioWq zywbD4cR<*Yb1n_AJh5;IoLwhp`x_#2S1*8wUFv_LBg zZ3}!39D5FI1}EGcAh3ERKG)j|DGRV%^;?a^XC*!XLDvESJLu0tU>Q=wU*L@|-`^hi z0ty1Kw02`^eNIqCIMqkMBSBh9FiK*pLst0 zb8mOaa@G6U5dBLCx`^HnN}zik2p;fU_5&VUeGl)izJMJ-7iJ!H;?c zKd$y?BQ;Ri4>sj_GEph6eBnZ5d>_BtUCe zhZ)qt8{^IFnEov!78g^t=!0o}3-~MM#?+go)nR(f!<17f8m51T8ZM?WP~xYnLFl=< z#$%rjVlC3jQ`-|ytpicddS?j7`vpQ)!_v$nNOLS}4n*7_1W$_? zgy<>SBbXBfZ2(_9f*kQi2Fn1CK#BQ%&h^NON7U*eh3NNtHu3i;DThDs@iSqS>7<@b zFs#^X02SKsOQZ_=&G&CZ+yx#)RlvtR1$24=o>NtT=j5CX_yo#NLt227I<@+4=l%f& z<-k7{H~@Km_8z^hd`w8t;t$De?P zzsLWx5AaoaJQXf2@Xw;9rqdb4GSb9OJ(st#J2wl$T=@_jzX{HL!{egnewHpgQar_Z}y~ z*PCRuS5r?GSuQ=8YaSnk;OwLNF(e|6idAYjsuNHb%~q&Tx`X(4Q119b-);Q|s&EV7 zd$;uy6xe9Ya<@fcjl)^UjUcVix2mg8@r>m4?_QlldOnSp`a1^ZtFi$!^I#5 zN<4Qp2q-ME*LZAwXE4uSSo$e6+3?U41MUncY{O$aKLPLqhAOr5tHW$I_X2qSsdhi4o9>rz_2IcFJcq(!)2S{9wBphaZ&nN$dg7Od=b2kl@_l5*zu7e>J zYVZhU3sT^R)+SK64XOHHSlR14ZO(GQD2?#C{-v5oJYKk`%M!@?{h}Rfz<=>(49$h@Ve^zU}sW1ZG>6+pF zBsAIaWCu8*{5#sQdo9%Ze7ObO5b^teAXQWUrosq#XCYo2|K=&i#yhls=TLQ#;>pj^ zR88@w!U%ZhAzmB2m46dviQl39djSvG)98%;g3bo!Hu4Rr^t|&F$j}zJ6vFn7h3jQA zl05r7n*;<+|Huw@J0{=f0d4fdWWcXEbOINfZYfcVGcns zyvG+IE!)6=P-A_MZf*-uR}~g`7kXn`fC{U!z}uiQoCWCY+5&10C=0MWlm(7JaLFvd z|4mkf1)f9SZ3|FgRTg*zD(7PX74@TA;OJ6XU|Dq*c%s4rR9KY-IB&yQAOlICIlv2p zi;?OXr9#btV-Q@jIdEF7EkK1;Szrio%*O)vp`Pq~lm&S863PO{A-H4~;5UA&h(eX? z02Nkcf%&cjbY!tW^eA+1BnzyC^t|`_{Aa|W@g|P;&WGnlJL*$mAl|JIw|73T1;^g` zP-Qre=arX^IgcVYPmkwhaXtQiP|J|2`*Hr2z~B;S!JpEcV^;;a*MYbQN&lhAqT zLNXlUq3-i8M8@~yfNI~zKr0cKZYT4dgzAmb1ZL^l_+d~HNB<^Nc?ik(+W7P+qo;87 zqhE=>D6nMoec;IG8UJP*J&H>>oPn;mI5dC~FE|rKv>VdO{}OE+GtPoK)fegANwod~ zaO?T++r>fHq&Ns&=4_+}*3uC1X5DrW3M#XTgSZYr-FkW;<3dD2AR-~1Q2#ofV^*42 zyj_up*5+MPGP1?XvI2thZGVode!$}qKzZTT^ z#B?@BUmm&Jf^ONl_zQ}>^A{8^17SyQD%5Zi+!n|L-m;$q0XuSUhWK`*xzDWkLQ1=4 z6LK`QYhDkw>zeC9iEGaCRHMcgI2WBNx4`ir3(#R~3p@voZ2>9_ zv_Kog)x_U|j9ees76`v~?tlVq0Tn-$1-Md&vOofYt_AJ~B^KZsr-Q=-9{cqm9z<&3 zk2nOb9>0J>I|9T}N03u%Cm3#Mq_7Rx2#U%dI#OJPwZIkh5TwKl35IxKF9^Zl1`w)G zN)wo+067XOYJj}tn(wVcwR$3U29o}d;Gzi}-w!IEUjffah}r=%1{qm7C~U){97sk= ze^bLTfT2q59CRuXe=P_BrV;f77*4tXV9EkyXy>>9x&xi#LKLd@qz7F5Z08_HMo(cq zdSYRZo`Qa(Ctr^q)!fmOkkPA0u2imiqcnk8atlrA%ljCZGD%j0(3511$L4~#7HQ?F zc{<38(NEPWfr!=&a1aV>h#2y1h$1@3N72%PI|x7b5$GVRDn>txgHTwHo>?qGM%l4H4y8`_g- zGGKL}u#Kn!PevMXby$?izZ!iGocwDlMnB8sr?4J9v9L!!-_>CrlmAFf9fZ@1FW>#; z+6stfaS#e?h~~RGsQu+8sFRuV3G^=F>hL$HA~WYpAdD-Qb{pQFa`mg^d<}0hS=friAqv}Zh%IVR2+?zp3H?o0$jamzLB;LJ=s2_oIlnkW zhx$5_`At@ZDYUqlo&XUl8bPkKe?1CnK5Nbz)Dv59Gb?9qJ`P`tb&L=blHwHR2bQ7u0$o}a9@%T?Uar@~KrKUR zSdBM*23q5>!`z~%_2LTDVg+;CupXTYy-%jFji?ILGSbR@vJ1>fw5fqn)9Ec9FrPrV zOsDlARBzN40L+Td_6Kc)u7S=^R4TOX&;sGWXM@)&3qVR@V36-$bOa>a7CLu`+6eXP`(`4vmW|*0zRHT%b zy1v$3g>_|h3-y7lkFKJkySnQOtKbV2Ux;tr6-8a&tlItm&o|$F%*>a3-^?WO_gm-p zyEEsz_uO;u{hxEsJ@?+sq@k{^?wI3|@OdXvBT~4%r>~<2nRPAg6Zw2PbyYT&$;7iP zb25%5*Kj^DnaJ-wfqd?R!8tTI9?QgzWu3vEErY$`?r7I)RxCXBE4nY*&*t0nsljbS ziQ!nbflu4|BVo3P=TRps(iPqwmFA)&iTptP#(beUN^-O2gN}4(IvK^htdc)~dDn6W#vCYV~o`LYQSg|WM6i*iFutc8OoA_XMA|G1-DmvJ=Z6F+K z0y!2Nj%Nom@sShp(9$^`8;u)nl0)UO1L~pGdTO(tR#{K0t*15C(^~6k9RWy;kA@1L zZAbArHOVd~2QkoGp8OyuVyS#OH*7tn_|!ER*%s~|=;uL?ithqciOE>u zDK$J1&*fu;v1@Q^xGxg!7xi={a(M#)DKBI>HOJFvdT?0ApByYag{-nR!seFkHj8!_ zI^$H^ohvlogC2K?t_FJtTU{dL5^cwcyi7VfnaCybF|p>PX!F@pLcQiDGRb&qI3WY< z8XV}1Z0YUm*-9A10$PcpL#@=LksH#vZJJ!A$<>-%qsg_JT&KzPs$DHMq}vVYc0&e( zZa1Xc4XshKba|T=(53~n84OxLo9=jf&le z>29x8dFvFlp33ds7Tw-MH+=VVIv#!}XlmS=}ClTASB znOKrG*EgOXwyicm5Xp=2mR zt>-lDZEt-JK3aOS>CtRFmurt@3qFYbG;$s0kn}K>97yDoakhv$BMEU%81%$=JVhVS zKNyJ=J~tOWdkIK?q_3x|i-Yax42!qyAI_$eNn_%2*6B=w-9Isu$g(r}#PIHTJ~xQ= z*o$rb+roXFJ*`>LeAOcnGj^1X@{{%5eD>C*Y49#hSuRawxHNm>(rn(PIjK1qE>@hz zbU$>$9FNOGNS}*z64J>?F8}ik`uU(wK{^%bG=pAb(2EWFbb~&_pqmYPi9s(l=w$}I z9JJfdGeNukJj(HyHFq2EEasFE;2)4Ej=o-ek~WgKjtIh(UK4bkv|PGw90=db2@y8uS$g zy~Uur40@|UcN=t%LH8Q;l?L5s(ESEIV9?tPdb>eiWzbg}^fd;(!=SG<=oc9D3k~`@ zgB~>Kodz8<=pln12JPDR2xxbH#X;{v8bum2=!8LEZ_v99I%&}32AwkKv_WSK`UZoh zpK|+6Ys=qjZrHv^rUB!bqQ)$j8TrB<3GVPQ=~n$@FM?#ppyTwxV?%^XR3w#*!k6 zJxWc)C(|nmYp>HPopJYMx;f%3$ZVAIvBsvy5q%9##=akz2m@#>d}!)g|}zeDB~xZ;#HurSasK{ONP2?E2g{J9kVjPQLl<#JWwrZ(4Nr z58v>!7kv8o1+RbCtKPHYU~K1UC;jrYAM9NE;-*8dtKWU7@uBGbH$;y4==*LyaR2R_ zE_!s~W1n4q&$3Iu`|>UQpT9q`clpB~JmGEMeD8%HI@I#9iyle-=GNcdwBwIYt@!hA zFS-8fJ5Tz+qwihtRATg5k34(Z&=U!DH#y*qAxxap(!-gna5Bk%ZXZ`UV&`@Jh(`MV|Ezxu&ZYtzf$atmzm z0;EO^e>gX=HxuUq*fA8#C5Br%;P>^Mb7JElQ9mQ152Scp~%FtkOe~Gn0#!M zZRQzuQ9>csYVP>>J7wP>1=4%=h`SARiJ~VlVX^00NzuvpuKZE>%%?LHwkI)?A7fKv z@x}WMU&DiPR{2-by(} zbk10++(7g`ot~p~FHe&jmJL24V;oQ96Y<=NX=R=7i0z2wW0z+WBQyv{2$jyzZ)jDl zC4OUU96Q0b7N;nQ&Fdr%5jf%w9D2Bb5aq)2X3-nXv@?}MU&6(9Pv^sZaZi>z6ot`t z_Io&%r08CFxmBTf<$fna7C?`@v5c1dX1~VHcJk8bL?&vhcR90ScQ`Z4#JBw0j`h zH@H38hb?!wi}f;veGM%p#IU@ai8!ZGgvUOqI=2kJYt$|MKtE2EG6z$WO4q(cN(r;e zPcs`ygc=ne}5-Q3gHxdR6l;VzjQPPKU`@7Y2C)fSW< zL1uBQ*KC)=2&&6EvZ7Syn4*=g5H&PBnDSD)Maa>?hQE^WVCf*}c&YX6t=? z>l$WvUl?JwJ``wO%k1c7QD(29fy9!TF**KAYm2AmXsVW5rI@we$#RdSh+ykVg614r$+H|X=_4)4)29xt>nP_;$!+5fubi2w z13Rj)zy!9$O;jy_Y< zeCuhx0~5{TSiG9oTo78llIA04v8>{r0Zx5dXmaircjeaGo#B*HPpaL}Dnb`&6#%s% zhXm0`NV4@wS7?oJw|T`wu49%s$bBfRy#;vWe3TZn3umy7miB&UBa)_OroeTOnz>E&`GhemQx{@R5-cF+sAF-Y@U_0x{ zQ5v-&M02F8lYW^K8wbeb@4se6r%^LR&nq_6JQ7bz0Hmb0(T)qzf3A7EoVkvqbE>?R zKGd)d>`l_Da5Xytn;DsqONNoy2)kc6zE)i8IFOF$Ieae)QQZlLpmkSlBB`7?-Kd^` zMTHdX+*(j$k+j?kWJ$Yw3eHiUt&4H2^|A%`Dne|*eK2gnJuIWHccrt#@eVXa(PN2} zETH^UQ9vSp%EqrdK{4SoZ%Tk62iW@d}ibRj3-i9 z{?Fo8)uHTl^bs`(> z-rgDRYew+Z*&%_NBT}v%3ipnb6PAlw381M3=wfRp!u|odHx=K$hTw^wn%&prW+Ms+ zv9gr+Z|m)fc1JqH8<^#2QeB5}g}`CerJF!}$9br0;wP=7iBNGq)xQQ=^a9MNYhn+j zoR|=T#v^#)vu-|dZ>T2#O~jARs6o!T8tS>Eh(vZnN@-6`90v_q2&$sVJzi@(@{8Xe zIT<+(_1u0P#Tcu81aI{9LU8vW1S5SR=(%MWjQ9%ULAN-Uj-nfK2G9&j2CxK#9@kPg zo8wxB)W|_CM-oXg(wk2?<&-ns9DLTzKMQZHP-l$&Y&@#2NaqeCM-X6>G7^F$P>}f? zq~in+!lv+$k&;mjNAQr_jCzXHz~I3FhJ*mK3B8uKe+@$QMoA(cm0LIeT)b5Z43QCF zXaWKZ)yJ0$Omo-(<~$Uru1p6EnP(K3pLhdPWHINXD`GJhfLMX#;ML-0(~2)dYFdf6 zR;0!wU;pZpArSSnuQn1qe_I8jiT5mPkQ$Hdd+?dH%vp!G^+*kbvu?hU6wEf23MhoH z`5W-obP?Z>3iEO!$cvf9K3{?aIHBgb|M#9Kfmvkj^OPeD}<7>XBi{;2Y`+@>1v%M0Zgww-D^>PVHydW<#P1ZTF#aF90XtU`|%c_eo6Zxq}*&7K#9j};dPy@Pijx}Nu-pMw`U6l+KSzdoQAq~ zd5_?|%v8Aw+0InK99NcJ$yA|t76Hm4o)0a^RH3(0;}P3(_2XCsiVKrQ+eS0;#5R_I z(6-@AiSB}dn(`_;X|6_*>eO@#2AMUs$KuJJG{+#vo;0;vNsAVYW;Epwm?g(Pz8uW; z1p8uWfw=|+(*Z+!6mLRi4Gdwjfgz&}OucxE!^qd(1P?`SmP?u_g#uJ> zlq6Otj=gpuPk^}=L@1^6;R|o=5oa9lo#<0d@ut84c*nqAW4x7p`^I|+op9Fs8OM7VP1O`{3JicZU2ARd zJ_Jd&KiP;JU-lgb<1FF53r*D&Zwd^6_bAwFgZED%$;R8aeUG8)Ea9C%Q#Hk#0t4WE zJ=kl5x3X{LzkS>H?m&1a!Od{Z*ZyW4d`&5G<5f0dNu$8G1{i1B5z8~k2_xwpIR$!Z zAcMk%E_>7^Yz^>)!e7Kfgmr|dA{O>iR#0}smxs9ljQ%aY#u~_?@hUWMAFA6Lpunm$ za2Evl(*TWKYe3Bbr2&@v(m)Q3bEbhj8m~eFPoTQ30Sc^219w9}B^pp(Kez@a(BzzH zU=od2p@D;_Zfk%7tI`1B@TUQ~*D`Z}PEEX!?{#1gYRs7iZbaiX)c^%nrGae_P>BZa zL_LXolm@tA_2q^3f^p6?@FFx`g$7F30Sc^21C_1=`_QmxAh;L0DUb%1fxFB-8FGD` z)w~#7zVRlGcI3l-qwRAj&=coAG2vJ{0NC;<+!=KIa}hRcP^4m1FU@ zfSQNYv>$H`NKW>xpd|Y?5Vs>W-GMjGv3mL|zRZi)m*9C3QauY~&atb4+|_uP&dH!X`t2wXb~;+|xHLOyn}q6(l7!5{S@KIk1swg$P{nif ze}h8R-gKiUbM>QdgcJpqjJ_8+(l(7t^`^||QC!7ERE0;!FE=|S-8_sOF_0x7#6YND zF%U9qh_1$yZ6IV+12YVSBK7pZg98zlB!NgB9Y2N~4~S?x#Qm?C6*RHF$)w9m(_P_?0N6#poMRPQOar5j}-%l9VgD_J4Hj+a0|M zvOOo{t5K-*D?OOP9g*1v%(gb-QO??IcSJ*x(bIs$+I+jCF4PF)EsKeaQAV`%>W4-cHRvWq)cxV2-i}Wy#1aECX>+j{W)3KvmxE@6l8--c?#&FV;X+7Eghm8kk9oR~iUz@xhK>tFm}* zri$^d%Hk=|6Yo-szZ>kev3TWSHbSJVa0fv6THk{mv{r@pKcG)F#hU^H;7#`0;LWgA zJPf_E;LV7`7v6JvtonNNvRDIEc^C@x)WA%7mGavttXuPHx zpuoA+0JkZ@G_YqbHSmU7Yk&ghRs#6FK`Hy_6iuLbBQ#Hk#0t4WEAJ}V* zxAHK)@jf_vc)z*UcvD~iyx&rLyw#fO8*lWX3GUK@IJ07Wt(&gNd(^GCrSVaSPHJ%nC$#JAiUotL6sz;LF zD=d4Jre=E?r~dYesNa3*$lGrBI-43%v99{k1iG;ZFI$%PDv>-a1KKfj2dijQe9c+UFrTU;9>b z@?GwnoDV{J&t9qVC`rgH%t=jY|5$}>$fV`cF`e6_$&DlFzy0mQQvhpwEOGjos3Bh< zwgmcanra^&$P2*ot$u^CJa0vcP!*(s_G!#su4_X$}py~K>En{GG zOk)SAc}P=jXKTFNzX#2E=wTCzluJ~Bi%ijLQ6w(@Nf5RkDA3kJJ90e#SmnJav;(fy z$nmEE8iAgi7hq1xDzF<1XW7FE|_mi7o;EWfC}9|a!vQW})e4(vrWg&cdvQlM=wJ{Hvvppxx5udC2= zzRaDs{E^ULo>O0n{{OO?3PQ1mpfBH6<0llOz`$1X!4j+K@?kaFDzvv}1SY|XYZ%-_7f zP6K<<};CGYxzUjTdX6s)KF{^wdBGg$t47BrfU_wgy%s+n)wDf>W;p zj{`$l2VU-KfaS7&(N``)!V+y9&+!3E2HswZw>i_m$I*DP1`3Cpn^2_stwv(6#7~09 zUWqBtQv)3+v^DSvAA6F+sN^8(9`qq&TAOxOPIf^f`bS_Q zi2fOP$;!%d)q6FbGKd}oql4%zpai=8Ah^MEvTt>>Zv$~VQq!mLb|+HV@8Nw01*$#i z0f#8IxF3X^!f>^h%R@4kgH2hU42tZk=O^Q#>=j}!x-9GzC>Z<#g!JGgKt=UQNkVDC zsvZI54E9k_g287&G$9p!#qe_=OAY4pWT?B8tefzrnvg~}BIgS%IuUPQM3NiV$C&da zya^&~MG!d#gl$o5(T3*B$SGVs)JH&<`Ncdopd)gTzX9*XcSPSrUNQWh*UyAirqi_`Jk|gT zwBc_@j_2LP6DV|m2O+rm_f!N{Peq12B7jCOz;mh!@SL1e0pEpkXL9WTC3B7=^zc!& z0sdQPpcwcAUUu&XcnS;v{F7j>G4LEtFyMz!W43|+Hrgx(K2r_w6gaoQt5w;z#mDCW z`0tbfzAB5Sz_|tf8T25S#gC!JY+L+y(Ppv5_f})^6c_;b?}5F>u7<7Kz%vq?%E!;( z{WDrFzh(bE3Tg^G1qJ~A2Vk!;@HawaFyL=MjoG&NAEM2g0#AVffd3KLYYaR^1_NH- z-2NDKC93%^5XK3?f8$Zj8HtoQ#-AWHIB_2NRh%c=CRVY5u(wT&-WDS<2s8h5`Y;~L z#A@nhk>%2Z>EaS9YPe4lOo95oya znn8)>E&&07h3utnwmvhc@E4ZYCmSAGqQJu@1s;w|;32aOj|~hN%K<}?+W6JA`UZ?l zfKg`#6rg&eBq6ip%wPxd1ehr{D$BrA@h>d>5|uATlB2*&Kmh7yCurD&C)G>kHUu;F zMmdZy9`xTOQ=kTqP_`p^ZVX?D!rHh{ny}hg3f}C7FK2Tu7#%~LalHQrP1O`{3Jiev zAlPez_dZAxyh9)aZxX)n4z>}m%D#VvKGhU&3JidE4D2<=n`>_{yoXR@mhAi2XsV`o zQ(yqR=~`=p_aR8K{mDk;__FUf7-tFZ-=L|Q;!S}8@E!$wZSZD9WaI7IpNygEEaClI zG*wf)DKG%u*Mq$_cq{u>{@b^G&)_C|9OKhp(AmJJi};3AxbOTONZ%UZk+2=HJcArN zVxd4!4P;Qb5NRg<+(Shy?4@{gcEgv4nZe!m^cwg*dRc`A?n8B30~A=52JV7@%aNx4 z78{LS$LMMfC=K}bIeOc@10tu3(Uah*N1FCaYUG(-1AhQl6&iQ~)ol$>U{xBp8v-iP zfb#mmHK30O=0F2UWEoq*8vKwN&}Uy1N+dhXdt*3 zx+#zbmVvwCvzkAlvTwYJqaFEh-)MV%3iQOg1BG_vb2D;k6MNnRNflZ=RpnT`?}O7j zP=#}>?7``uQLu=GNY0$&7E+Mg4?>-C$;lv@ZNL;lG8{s@7)gYk45I9x1FE=>j#fM_ z%}(Y!3Dp}V37I8-=IeX(FGFR|(H}9}lO9YldNNl(`bJ1mV9Drvkt1!>xTYFCiVHXp zVaE#iZ(1e#ng^l*3{Lh^P?Eg>gvYGI-vAZ;*JERwaTLU{b^$qd*NO!EHym=PCQqV6Z*+YOwo@Rc-^PHqBN%$?V+%LNssy zgqWuCU1+SFX$CuGudxQ2(5Ye#?Dx_DM`CN>3FL&4^gRa!dTPMWsR7pte;U{bPOSmu zKa~d7pxl=Ry1?i-2j8p5F&L)j>TxUzZ4bchvmm!0gm?gaIc9M$USPLD>?{}EgyA*bvg zDj!z@&tb6I4zd|MGNZ|C!(*=;C!$;p#{h;RwQ1eiNO2rwFc329(Gv@M z^s{InW3y)<{0SW!qA3i7%o?If4dhc8op_L^T?64+^Gtb==b+D?2J+mJ(NAF@WY(i6 z7PT>ulskF~SGt(egXrs#t*FCALw<;>0fggNxL8RxcRp9D>|5RJ+d$lo)N~StVZ+lm z1^3A%-2GEf-JxP%De3 z>cj%=;3@>MQ-x6OmpACc>=257Xr^>ytdjOR@oLl)8~-^7af0lO^nN-m>x-9WR1qaE z0ikuf)XiQ1Vi{87kqX0yQ!o}A+QSfcJW>;z6lhiWKxP|J+x!Er4o{;20cIvA|EcJ+ zZQaKHn?_@geu~LYW<7dhVUNDj)gc8Ke3=FK3W0>a7ivacwFVNRV7$u4my1dun!-TH ztRbp&bx`r;N{AB!`3QO!aCLYTRRoyNf-qFR7&439%+B!V!Q}Z(Rz|L0pp+Bw_C+K) zTz!l=U&5PA7Pcajh0I|Vky-o@ThyQsqA#P!_cvL=D{f>bD%yVN3KW&|Lo}$bu!(vd zwJJ;@#liFe5CP3@0#%&FCD@u{xhvUoAAuytZ-H2j#BSC2`-aM_^#WC8N7%=*-={wv z-7hsNkF|^a5}WA;;bAirsBNa~+SP&D3z5Xoq9iymodXzm?Rp$J{%nTMOIr&KRE(|_ z{g4^Ra$nZ62aL04BU}>4k@R14^r`kOWqTQ$`{h(B#TMjYHC}>V5&Y*?C7?nalx z9J}%~6d2fQxVqa`(}kSrtj4j5+t9qW8s%e#AwaB#<-V+DFBt!7HKrW{kn+A}3Baww z*OXcf1qQa7rKn_Ejh|m))mEXc=KUC`_?nTxR&$fGnr2Y*kR)iWFixfm;HzvHv<#iI zBSm^!apOxs*l{wMZA6u$mXVgm$qq0Ssew_`>9sB}H4KB6LuRQJ&14wF7Bwh@XvV@I z2hAA^gZ4p9e|1*AoYk3S&CGXTRO+lKP+O7D!00Sga-5a>6DE&Cg;gza4@0CZalQ|K zU#hHT2Pkn?*MjhHRyDqvI@?eT(7?H6G*H#;ECmM8z~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~AddApplicationText(~\n~)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~ ~\n~ ''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~AddApplicationText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~)~\n~''CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~ AddManifestText(~\n~~\n~)~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~) 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~~\n~'///////////////////////// FLP Y PUSH /////////////~\n~ CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase)~\n~ CreateResourceFromFile(Macro, FirebaseAnalytics.FirebaseAnalytics)~\n~ CreateResourceFromFile(Macro, FirebaseNotifications.FirebaseNotifications)~\n~ SetServiceAttribute(Tracker, android:foregroundServiceType, "location")~\n~'//////////////////////////////////////////////////////~\n~~\n~'/////////////////////// App Updating ////////////////~\n~ AddManifestText(~\n~ )~\n~ AddApplicationText(~\n~ ~\n~ ~\n~ ~\n~ )~\n~ CreateResource(xml, provider_paths,~\n~ ~\n~ ~\n~ ~\n~ ~\n~ ~\n~ )~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~~\n~AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)~\n~AddPermission(android.permission.INTERNET)~\n~AddPermission(android.permission.INSTALL_PACKAGES)~\n~AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~CreateResourceFromFile(Macro, JhsIceZxing1.CaturePortrait)~\n~ ~\n~SetApplicationAttribute(android:largeHeap, "true")~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~AddPermission(android.permission.BLUETOOTH_ADVERTISE)~\n~AddPermission(android.permission.BLUETOOTH_CONNECT)~\n~AddPermission(android.permission.BLUETOOTH_SCAN)~\n~AddManifestText(~\n~ ~\n~ )~\n~AddManifestText()~\n~~\n~AddManifestText(~\n~ ~\n~ )~\n~ AddPermission(android.permission.MANAGE_EXTERNAL_STORAGE)~\n~ SetApplicationAttribute(android:allowBackup, "false")~\n~ ~\n~ ~\n~ AddManifestText(~\n~ )~\n~ AddPermission(android.permission.READ_EXTERNAL_STORAGE) +ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~AddApplicationText(~\n~)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~ ~\n~ ''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~AddApplicationText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~)~\n~''CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~ AddManifestText(~\n~~\n~)~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~) 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~~\n~'///////////////////////// FLP Y PUSH /////////////~\n~ CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase)~\n~ CreateResourceFromFile(Macro, FirebaseAnalytics.FirebaseAnalytics)~\n~ CreateResourceFromFile(Macro, FirebaseNotifications.FirebaseNotifications)~\n~ SetServiceAttribute(Tracker, android:foregroundServiceType, "location")~\n~'//////////////////////////////////////////////////////~\n~~\n~'/////////////////////// App Updating ////////////////~\n~ AddManifestText(~\n~ )~\n~ AddApplicationText(~\n~ ~\n~ ~\n~ ~\n~ )~\n~ CreateResource(xml, provider_paths,~\n~ ~\n~ ~\n~ ~\n~ ~\n~ ~\n~ )~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~~\n~AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)~\n~AddPermission(android.permission.INTERNET)~\n~AddPermission(android.permission.INSTALL_PACKAGES)~\n~AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~CreateResourceFromFile(Macro, JhsIceZxing1.CaturePortrait)~\n~ ~\n~SetApplicationAttribute(android:largeHeap, "true")~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~AddPermission(android.permission.BLUETOOTH_ADVERTISE)~\n~AddPermission(android.permission.BLUETOOTH_CONNECT)~\n~AddPermission(android.permission.BLUETOOTH_SCAN)~\n~AddManifestText(~\n~ ~\n~ )~\n~AddManifestText()~\n~~\n~AddManifestText(~\n~ ~\n~ )~\n~ AddPermission(android.permission.MANAGE_EXTERNAL_STORAGE)~\n~ SetApplicationAttribute(android:allowBackup, "false")~\n~ ~\n~ ~\n~ AddManifestText(~\n~ )~\n~ AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~~\n~ 'Para que se registre para abrir bases de datos~\n~' AddActivityText(main,~\n~'~\n~'~\n~'~\n~'~\n~')~\n~~\n~ 'Para que se registre para abrir bases de datos~\n~ AddActivityText(main,~\n~~\n~~\n~~\n~~\n~~\n~) Module1=appUpdater Module10=C_NoVenta Module11=C_NuevoCliente @@ -251,7 +251,7 @@ Version=12.8 #Region Project Attributes #ApplicationLabel: Guna Preventa #VersionCode: 1 - #VersionName: 4.10.11 + #VersionName: 4.10.17 'SupportedOrientations possible values: unspecified, landscape or portrait. #SupportedOrientations: portrait #CanInstallToExternalStorage: False diff --git a/B4A/Guna Vistas V3.1.b4a.meta b/B4A/Guna Vistas V3.1.b4a.meta index 95cc8da..065ecaa 100644 --- a/B4A/Guna Vistas V3.1.b4a.meta +++ b/B4A/Guna Vistas V3.1.b4a.meta @@ -55,14 +55,14 @@ ModuleClosedNodes1=11,13,14 ModuleClosedNodes10= ModuleClosedNodes11= ModuleClosedNodes12=6 -ModuleClosedNodes13= +ModuleClosedNodes13=3 ModuleClosedNodes14= ModuleClosedNodes15= ModuleClosedNodes16= ModuleClosedNodes17=4 ModuleClosedNodes18= ModuleClosedNodes19= -ModuleClosedNodes2=2,4,5 +ModuleClosedNodes2=6 ModuleClosedNodes20= ModuleClosedNodes21= ModuleClosedNodes22=3,4 @@ -76,6 +76,6 @@ ModuleClosedNodes6=8,9,10,11 ModuleClosedNodes7= ModuleClosedNodes8= ModuleClosedNodes9= -NavigationStack=C_Productos,lv_catalogos_ItemClick,206,0,C_Principal,cargar_Click,1017,0,C_Principal,Subir_Click,558,0,B4XMainPage,Entrar_Click,440,6,B4XMainPage,user_EnterPressed,447,0,Subs,revisaPRO3054,1486,0,C_Promos,Class_Globals,14,0,B4XMainPage,B4XPage_Created,94,3,DBRequestManager,HandleJob,187,0,B4XMainPage,JobDone,458,4 +NavigationStack=Subs,traeUsarIntentBDWA,1599,0,Subs,parseHTTPError,1547,0,B4XMainPage,Class_Globals,88,0,B4XMainPage,cb_importarBDWA_CheckedChange,999,0,Subs,importaBDDesdeWhatsApp,1549,6,B4XMainPage,i_engrane_Click,773,0,B4XMainPage,b_actualizacion_Click,1000,0,Visual Designer,login.bal,-100,6,B4XMainPage,B4XPage_Appear,245,1,B4XMainPage,B4XPage_Created,227,2 SelectedBuild=0 -VisibleModules=23,2,24,13,14,15,4,19 +VisibleModules=23,2,24,13,1,14,4 diff --git a/B4A/Starter.bas b/B4A/Starter.bas index fa39065..dcf6413 100644 --- a/B4A/Starter.bas +++ b/B4A/Starter.bas @@ -36,6 +36,7 @@ Sub Process_Globals Dim enVenta As Boolean = False Dim muestraProgreso = 0 'Parte de la funcionalidad "appUpdater" Public newApp As mNewVersion 'Parte de la funcionalidad "appUpdater" + Dim nuevoLink As String End Sub Sub Service_Create @@ -70,6 +71,14 @@ Sub Service_Start (StartingIntent As Intent) Service.StopAutomaticForeground 'Starter service can start in the foreground state in some edge cases. Subs.revisaBD Log(marcaCel) + Private s As Cursor = skmt.ExecQuery("select * from cat_variables where cat_va_descripcion = 'DBReqServer'") + If s.RowCount > 0 Then 'Si tenemso valor en BD lo tomamos. + s.Position = 0 + server = s.GetString("CAT_VA_VALOR") + Else 'Si no hay valor de BD usamos el defaut. + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("DBReqServer")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("DBReqServer", server)) + End If reqManager.Initialize(Me, server) End Sub diff --git a/B4A/Subs.bas b/B4A/Subs.bas index a8aca32..b25ad78 100644 --- a/B4A/Subs.bas +++ b/B4A/Subs.bas @@ -21,6 +21,8 @@ Sub Process_Globals ' Dim rutaInicioHoy As String = "" Private subsLogs As Boolean = False Dim skmt As SQL + Dim in As Intent + Dim intentUsado As Boolean = False End Sub 'Pone el valor de phn.Model en la variable global "devModel" @@ -633,7 +635,7 @@ End Sub 'Regresa el almacen actual de la base de datos. Sub traeAlmacen As String 'ignore Private c As Cursor - Private a As String + Private a As String = "NA" c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") c.Position = 0 a = C.GetString("ID_ALMACEN") @@ -1510,3 +1512,97 @@ Sub revisaPRO3055(idCliente As String) As Boolean Log($">>>> revisaPRO3055 ${idCliente} = ${x}"$) Return x End Sub + +'Revisa si hay actualizacion, si es necesario relaizarla y cual es la liga del APK de la actualización. +' Regresa 0, 1 o 2 dependiendo de CAT_VARIABLES (Sin actualizacion, Forzar actualizacion, Sin adtos, forzar descarga de datos) +Sub revisaForzarActualizacion As Map + Private ra As ResultSet = Starter.skmt.ExecQuery($"select * from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'VERSION_NUEVA' or CAT_VA_DESCRIPCION = 'FORZAR_ACTUALIZACION'"$) + Private nuevaVersion As String = "" + Private forzarActualizacion As Int = 2 + Private m As Map + m.Initialize + Do While ra.NextRow + If ra.GetString("CAT_VA_DESCRIPCION") = "VERSION_NUEVA" Then nuevaVersion = ra.GetString("CAT_VA_VALOR") + If ra.GetString("CAT_VA_DESCRIPCION") = "FORZAR_ACTUALIZACION" Then forzarActualizacion = ra.GetInt("CAT_VA_VALOR") + Loop +' Log(nuevaVersion) +' Log(forzarActualizacion) + If nuevaVersion <> Application.VersionName And forzarActualizacion = 1 Then + m.Put("forzar", 1) + m.Put("nuevaVersion", nuevaVersion) + else if forzarActualizacion = 2 Then 'Si no existen los datos en CAT_VARIABLES, entonces los recargamos + m.Put("forzar", 2) + m.Put("nuevaVersion", "Recargar") + Else + m.Put("forzar", 0) + m.Put("nuevaVersion", nuevaVersion) + End If + Return m +End Sub + +Sub parseHTTPError(error As String) As String + Private nuevoError As String = error + Private inicio As Int = error.IndexOf("") + Private final As Int = error.IndexOf("") + Log("|" & inicio & "|" & final & "|") + If inicio > 0 And final > 0 Then + nuevoError = error.SubString2(inicio + 17, final) +' LogColor(error.SubString2(inicio + 17, final), Colors.Blue) + End If + Return nuevoError +End Sub + +' Se revisa si hay una intención (intent) de abrir una base de datos y si es así, entonces se importa esa base de datos. +Sub importaBDDesdeWhatsApp +' Private tmpBDWA As Boolean = traeUsarIntentBDWA + Log("Revisamos intent de importar desde whatsapp") + Log(B4XPages.MainPage.intentUsado) + Log(in) + If Not(in.IsInitialized) Then in = B4XPages.GetNativeParent(B4XPages.MainPage).GetStartingIntent ' Si se usa esta funcion en Mainpage, se pone "Me" en lugar de B4XPages.MainPage. + If Not(B4XPages.MainPage.intentUsado) And in <> Null Then +' Log(in) + LogColor("Importamos base de datos desde Whatsapp.", Colors.blue) + B4XPages.MainPage.intentUsado = True +' Log(in.As(String)) + If in.GetData <> Null Then + Dim XmlData As String + XmlData = in.GetData + Try + Dim OutStr As OutputStream = File.OpenOutput(File.DirInternal,"kmt.db",False) + Dim InStr As InputStream = File.OpenInput("ContentDir",XmlData) + File.Copy2(InStr,OutStr) + LogColor("BD copiada a interna.", Colors.Blue) + OutStr.Close + If in.As(String).Contains("whatsapp") Then ToastMessageShow("BD cargada desde Whatsapp", False) + Catch + Log(LastException) + End Try +' ExitApplication +' Starter.skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'IMPORTAR_BD_WA'") +' Starter.skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('IMPORTAR_BD_WA', '${tmpBDWA}')"$) + Private a As Cursor = Starter.skmt.ExecQuery($"select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'APP_NAME'"$) + If a.RowCount > 0 Then + a.Position = 0 + ToastMessageShow($"BD de "${a.GetString("CAT_VA_VALOR")}" cargada."$, True) + End If + a = Starter.skmt.ExecQuery($"select * from usuarioa"$) + If a.RowCount > 0 Then + a.Position = 0 + B4XPages.MainPage.user.Text = a.GetString("USUARIO") + B4XPages.MainPage.pass.Text = a.GetString("PASS") + End If + End If + End If +End Sub + +'Regresa si se debe de usar el intent de importar la base d datos desde Whatsapp. +Sub traeUsarIntentBDWA As Boolean 'ignore + Private BDWA As Boolean = False + Private x As Cursor = Starter.skmt.ExecQuery($"select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'IMPORTAR_BD_WA'"$) + If x.RowCount > 0 Then + x.Position = 0 + If x.GetString("CAT_VA_VALOR") = "true" Then BDWA = True + End If + Log($"cb_importarBDWA = ${BDWA}"$) + Return BDWA +End Sub \ No newline at end of file diff --git a/B4A/appUpdater.bas b/B4A/appUpdater.bas index 74c134d..184ccf1 100644 --- a/B4A/appUpdater.bas +++ b/B4A/appUpdater.bas @@ -171,14 +171,17 @@ Sub download_newApk B4XPages.MainPage.muestraProgreso("Descargando nueva versión, un momento por favor.") Dim job_newAPP As HttpJob If job_newAPP.IsInitialized Then job_newAPP.Release -' Log(">>>> LOGIN LINK : " & Starter.newApp.appLink) - If Starter.newApp.appLink <> "" Then newApp = Starter.newApp + Log(">>>> LOGIN LINK2: " & Starter.nuevoLink) + If Starter.nuevoLink <> "" Then newApp.appLink = Starter.nuevoLink job_newAPP.Initialize("job_newAPP",Me) -' Log(newApp.appLink & "?dummy=" & DateTime.Now) + Log(newApp.appLink & "?dummy=" & DateTime.Now) job_newAPP.Download(newApp.appLink & "?dummy=" & DateTime.Now) + Log("Vamos a descargar: " & newApp.appLink & "?dummy=" & DateTime.Now) Wait for (job_newAPP) JobDone (job_newAPP As HttpJob) + Private downladSuccess As Boolean = False If job_newAPP.Success = True Then ' // Delete existing file + downladSuccess = True If File.Exists(SharedFolder,"newapp.apk") Then ' Log(">>>>>> Borramos achivo anterior") File.Delete(SharedFolder,"newapp.apk") @@ -190,15 +193,25 @@ Sub download_newApk Log("APK dir: "&SharedFolder) End If job_newAPP.Release - ' // Install the app - Dim in As Intent - in.Initialize(in.ACTION_VIEW,"" ) - SetFileUriAsIntentData(in, "newapp.apk") - ' // Type must be set after calling SetFileUriAsIntentData - in.SetType("application/vnd.android.package-archive") - StartActivity(in) n2.Cancel(nNewAppnID) B4XPages.MainPage.ocultaProgreso + If downladSuccess Then + ' // Install the app + Dim in As Intent + in.Initialize(in.ACTION_VIEW,"" ) + SetFileUriAsIntentData(in, "newapp.apk") + ' // Type must be set after calling SetFileUriAsIntentData + in.SetType("application/vnd.android.package-archive") + StartActivity(in) + Else + B4XPages.MainPage.principal.l_forzarActualizacion.TextColor = Colors.red + B4XPages.MainPage.principal.l_forzarActualizacion.text = "Hubo un error en la descarga, por favor revise que tenga conexion a internet e intente de nuevo." + Log("ERROR EN CONEXION") + Sleep(5000) + ExitApplication + End If + Starter.muestraProgreso = 0 + B4XPages.MainPage.principal.p_transparenteActualizacion.Visible = False ' Service.StopForeground(nNewAppnID) StopService(Me) ' CallSubDelayed(Main,"ocultaProgreso")