commit b74544355b7a7b7d23239a99066f47e875c7b7a7 Author: cheveguerra Date: Wed Sep 20 02:26:55 2023 -0600 Initial commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..af94e9d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +**/Objects +**/AutoBackups \ No newline at end of file diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas new file mode 100644 index 0000000..c3090b1 --- /dev/null +++ b/B4A/B4XMainPage.bas @@ -0,0 +1,623 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=9.85 +@EndOfDesignText@ +#Region Shared Files +#CustomBuildAction: folders ready, %WINDIR%\System32\Robocopy.exe,"..\..\Shared Files" "..\Files" +'Ctrl + click to sync files: ide://run?file=%WINDIR%\System32\Robocopy.exe&args=..\..\Shared+Files&args=..\Files&FilesSync=True +'########################################################################################################### +'###################### PULL ############################################################# +'Ctrl + click ide://run?file=%WINDIR%\System32\cmd.exe&Args=/c&Args=..\..\gitpull.bat +'########################################################################################################### +'###################### PUSH ############################################################# +'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=github&Args=..\..\ +'########################################################################################################### +#End Region + +'Ctrl + click to export as zip: ide://run?File=%B4X%\Zipper.jar&Args=Project.zip + +Sub Class_Globals + Private Root As B4XView + Dim rp As RuntimePermissions + Private xui As XUI + Public login As B4XMainPage + Public principal As C_Principal + Public clientes As C_Clientes + Public cliente As C_Cliente + Public updateAvailable As C_UpdateAvailable + Public nuevoCliente As C_NuevoCliente + Public mapa As C_Mapas + Dim reqManager As DBRequestManager + Dim v As String = Application.VersionName + Dim ruta As String + Dim tgl As Toggle + Dim lat_gps, lon_gps As String + Dim usuario As String + Dim batt As Int + Dim skmt As SQL + Dim montoActual, clientesTotal, clientesVenta, clientesVisitados,almacen, rutaPreventa As String + Dim server, fechaRuta As String + Dim Logger As Boolean + Dim mac_impresora As String + Dim Phn As PhoneId + Dim user As EditText + Dim pass As EditText + Dim c As Cursor + Dim existe As String + Dim paso1 As String + Private IMEN As Label + Dim IMEI As String = "" + Dim alterno As String + Private b_menu As Button + Dim PopupMenu As RSPopupMenu + Dim cmd As DBCommand + Private PDF As Button + Private bpv1 As BatteryProgressView + Dim batterystatus(11) As Int + Private bu As BatteryUtilities + Private b_apk As Button + Private i_engrane As ImageView + Private p_Main As Panel + Private p_appUpdate As Panel + Private b_guardar As Button + Private l_version As Label + Private ImageView1 As ImageView + Private Label2 As Label + Private Entrar As Button + Dim tipo_venta As String + Dim bTerminarClicked As Boolean = False + Private lv_server As ListView + Private l_server As Label + Private et_server As EditText +End Sub + +Public Sub Initialize +' B4XPages.GetManager.LogEvents = True +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + B4XPages.GetManager.LogEvents = True + Root = Root1 + Root.LoadLayout("login") + B4XPages.SetTitle(Me, "Mariana Censos") + login.Initialize + B4XPages.AddPage("Login", login) + principal.Initialize + B4XPages.AddPage("Principal", principal) + clientes.Initialize + B4XPages.AddPage("Clientes", clientes) + cliente.Initialize + B4XPages.AddPageAndCreate("Cliente", cliente) +' productos.Initialize +' B4XPages.AddPage("Productos", productos) + updateAvailable.Initialize + B4XPages.AddPage("updateAvailable", updateAvailable) +' mapas.Initialize +' B4XPages.AddPage("Mapas", mapas) + nuevoCliente.Initialize + B4XPages.AddPageAndCreate("NuevoCliente", nuevoCliente) + mapa.Initialize + B4XPages.AddPage("Mapa", mapa) +' ticketsDia.Initialize +' B4XPages.AddPage("TicketsDia", ticketsDia) +' noVenta.Initialize +' B4XPages.AddPage("NoVenta", noVenta) +' nota.Initialize +' B4XPages.AddPage("Nota", nota) +' pedidos.Initialize +' B4XPages.AddPage("Pedidos", pedidos) +' promos.Initialize +' B4XPages.AddPage("Promos", promos) +' historico.Initialize +' B4XPages.AddPage("Historico", historico) + ruta = Starter.ruta +' Subs.borraArribaDe100Errores ' Para Websockets +' Subs.borraArribaDe600RenglonesBitacora ' Para Websockets + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + LogColor("copiamos kmt.db de "&File.DirAssets & " a " & ruta,Colors.Green) + End If +' Log(ruta) + skmt.Initialize(ruta,"kmt.db", True) + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_CUOTAS (HC_META6 TEXT, HC_META5 TEXT, HC_META4 TEXT, HC_META3 TEXT, HC_META2 TEXT, HC_META1 TEXT, HC_RUTA TEXT, HC_CUOTA1 TEXT, HC_CUOTA2 TEXT, HC_CUOTA3 TEXT, HC_CUOTA4 TEXT, HC_CUOTA5 TEXT, HC_CUOTA6 TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_GPS (HGDATE TEXT, HGLAT TEXT, HGLON TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_STAY_STORE (HSS_CODIGO TEXT, HSS_IN TEXT, HSS_OUT TEXT, HSS_TOT TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_STAY_OUT (HSO_INI TEXT, HSO_FIN TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS INVENT_X_ENVIAR (ALMACEN TEXT, PROID TEXT, CANTIDAD TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_RESUM_APK (HIST_RA_OBJMES TEXT, HIST_RA_VENTA TEXT, HIST_RA_TENDENCIA TEXT, HIST_RA_ALCANCE TEXT, HISR_RA_DRAOBJ TEXT, HIST_RA_DRAVTA TEXT, HIST_RA_DSOBJ TEXT, HIST_RA_DSVTA TEXT, HIST_RA_VPOOBJ TEXT, HIST_RA_VPOVTA TEXT, HIST_RA_COBCCC TEXT, HIST_RA_CTES TEXT, HIST_RA_ECO TEXT, HIST_RA_VISITPLAN TEXT, HIST_RA_VISIREAL TEXT, HIST_RA_COBVISIT TEXT, HIST_RA_FRECCOMPOBJ TEXT, HIST_RA_FRECCOMREAL TEXT, HIST_RA_VENTAMES1 TEXT, HIST_RA_VENTAMES2 TEXT, HIST_RA_VENTAMES3 TEXT, HIST_RA_VENTAMES4 TEXT, HIST_RA_RECHAZO TEXT, HIST_RA_RECHAZOPORCEN TEXT, HIST_RA_SEMANA1 TEXT, HIST_RA_SEMANA1_DIAS TEXT, HIST_RA_SEMANA1_DRA TEXT, HIST_RA_SEMANA2 TEXT, HIST_RA_SEMANA2_DIAS TEXT, HIST_RA_SEMANA2_DRA TEXT, HIST_RA_SEMANA3 TEXT, HIST_RA_SEMANA3_DIAS TEXT, HIST_RA_SEMANA4 TEXT, HIST_RA_SEMANA3_DRA TEXT, HIST_RA_SEMANA4_DIAS TEXT, HIST_RA_SEMANA4_DRA TEXT, HIST_RA_SEMANA5 TEXT, HIST_RA_SEMANA5_DIAS TEXT, HIST_RA_SEMANA5_DRA TEXT, HIST_RA_SEMANA1_LPT TEXT, HIST_RA_SEMANA2_LPT TEXT, HIST_RA_SEMANA3_LPT TEXT, HIST_RA_SEMANA4_LPT TEXT, HIST_RA_SEMANA5_LPT TEXT, HIST_RA_RUTA TEXT, HIST_RA_IDALMACEN TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_COMISIONES_MOVIL (HCM_IDALMACEN TEXT, HCM_RUTA TEXT, HCM_TOTAL_V TEXT, HCM_TOTAL_VIVE TEXT, HCM_TOTAL_GUNA TEXT, HCM_TOTAL_BEB TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_GEOCERCA (HGCLIENTE TEXT, HGDATE TEXT, HGLAT TEXT, HGLON TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_FACE (HFCLIENTE TEXT, HFALIAS TEXT, HFRUTA TEXT, HFALMACEN TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS RUTA_GPS(FECHA INTEGER, LAT TEXT, LON TEXT)") + skmt.ExecNonQuery("CREATE VIEW IF NOT EXISTS CATALOGO AS Select CAT_GP_CLASIF, CAT_GP_ID FROM CAT_GUNAPROD UNION Select CAT_GP_CLASIF, CAT_GP_ID FROM CAT_GUNAPROD GROUP BY CAT_GP_CLASIF, CAT_GP_ID") + skmt.ExecNonQuery("CREATE VIEW IF NOT EXISTS total_marcas AS Select cat_gp_clasif, sum(pe_costo_tot) As total from CATALOGO, pedido where pe_proid = cat_gp_id And pe_cliente <> 0 group by cat_gp_clasif") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_MARCAS_CUOTAS (HMC_MARCA TEXT, HMC_TOTAL TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_CODIGO_BARRAS(CODIGOKMTS TEXT, CODIGOB TEXT, LAT TEXT, LON TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ABONOS (a_usuario TEXT, a_ruta TEXT, a_cliente TEXT, a_abono TEXT, a_fecha TEXT, a_enviado TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_GIROS (id TEXT, descripcion TEXT)") +' skmt.ExecNonQuery("drop table kmt_info") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS kmt_info (CAT_CL_FOTO BLOB, CAT_CL_NUM_SERIEFISICO TEXT, CAT_CL_MTOCOMPRA TEXT, CAT_CL_CEDIS TEXT, CAT_CL_LAT TEXT, CAT_CL_LONG TEXT, CAT_CL_FBAJA TEXT, CAT_CL_FALTA TEXT, CAT_CL_CP TEXT, CAT_CL_EDO TEXT, CAT_CL_MUNI TEXT, CAT_CL_COLONIA TEXT, CAT_CL_CALLE2 TEXT, CAT_CL_CALLE1 TEXT, CAT_CL_NOINT TEXT, CAT_CL_NOEXT TEXT, CAT_CL_CALLE TEXT, CAT_CL_EMAIL TEXT, CAT_CL_TELEFONO TEXT, CAT_CL_ATIENTE2 TEXT, CAT_CL_ATIENDE1 TEXT, CAT_CL_NOMBRE TEXT, CAT_CL_GIRO TEXT, CAT_CL_DIAS_VISITA TEXT, CAT_CL_TIPO_RUTA TEXT, CAT_CL_RUTA TEXT, CAT_CL_CODIGO TEXT, gestion NUMERIC, CAT_CL_DIASEMANA TEXT, CAT_CL_SECUENCIA INT)") + Subs.agregaColumna("kmt_info", "CAT_CL_CRUCE1", "TEXT") + Subs.agregaColumna("kmt_info", "CAT_CL_ESTATUS", "TEXT") + Subs.agregaColumna("kmt_info", "CAT_CL_ENVIO_PENDIENTE", "TEXT") + Subs.agregaColumna("kmt_info", "CAT_CL_FECHA_CAPTURA", "TEXT") + Subs.agregaColumna("HIST_FOTO_CLIENTE", "ENVIO_PENDIENTE", "TEXT") + Subs.agregaColumna("kmt_info", "NUEVO", "TEXT") + Subs.agregaColumna("kmt_info", "LAT_CENSADOR", "TEXT") + Subs.agregaColumna("kmt_info", "LON_CENSADOR", "TEXT") + Subs.agregaColumna("kmt_info", "ESTATUS_ORIGINAL", "TEXT") + Subs.agregaColumna("kmt_info", "CAMPOS_MODIFICADOS", "TEXT") + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna "CAT_CL_DIASEMANA" en la tabla + c=skmt.ExecQuery("SELECT COUNT(*) AS fCol FROM pragma_table_info('kmt_info') WHERE name='CAT_CL_DIASEMANA'") + c.Position = 0 + If c.GetString("fCol") = 0 Then 'Si no esta la columna FECHA la agregamos + skmt.ExecNonQuery("ALTER TABLE kmt_info ADD COLUMN CAT_CL_DIASEMANA TEXT") + End If + Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch + Try + skmt.ExecNonQuery("ALTER TABLE kmt_info ADD COLUMN CAT_CL_DIASEMANA TEXT") + Catch + Log(LastException) + End Try + End Try + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna "CAT_CL_SECUENCIA" en la tabla + c=skmt.ExecQuery("SELECT COUNT(*) AS fCol FROM pragma_table_info('kmt_info') WHERE name='CAT_CL_SECUENCIA'") + c.Position = 0 + If c.GetString("fCol") = 0 Then 'Si no esta la columna FECHA la agregamos + skmt.ExecNonQuery("ALTER TABLE kmt_info ADD COLUMN CAT_CL_SECUENCIA INT") + End If + Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch + Try + skmt.ExecNonQuery("ALTER TABLE kmt_info ADD COLUMN CAT_CL_SECUENCIA INT") + Catch + Log(LastException) + End Try + End Try + c=skmt.ExecQuery("select COUNT(*) AS CUANTOS from HIST_STAY_OUT ") + C.Position = 0 + If c.GetString("CUANTOS") = 0 Then +' skmt.ExecNonQuery("INSERT INTO HIST_STAY_OUT(HSO_INI, HSO_FIN) VALUES (0,0)") + End If + C.Close +' server = "http://keymon.com.mx:1782" + 'server = "http://201.99.139.28:1783" +' reqManager.Initialize(Me, server) + l_version.Text = "Ver. " & Application.VersionName + 'este codigo es para lo del menu +' PopupMenu.Initialize("PopupMenu", b_menu) +' PopupMenu.AddMenuItem(0, 0, "View") +' PopupMenu.AddMenuItem(1, 1, "Edit") +' PopupMenu.AddMenuItem(2, 2, "Details") +' PopupMenu.AddMenuItem(3, 3, "Remove") + ' menu fin + montoActual = 0 + clientesTotal = 0 + clientesVenta = 0 + clientesVisitados = 0 + almacen = 0 + rutaPreventa = 0 + p_appUpdate.Visible = False + + reqManager.Initialize(Me, Starter.server) +End Sub + +Sub B4XPage_Appear + LogColor("Revisa permisos Location", Colors.Green) + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + If Result Then + Log("Con permisos de ubicacion") + StartService(Tracker) +' Log("Start Tracker") + Else + Log("SIN permisos de ubicacion") + End If + Log("1") + p_Main.Width = Root.Width + Dim ph As Phone 'Get Id Device + Dim DeviceID As String = ph.GetSettings("android_id").ToUpperCase + LogColor($"////////////////// DeviceID: ${DeviceID} ////////////////// "$, Colors.Blue) + server = Starter.server + reqManager.Initialize(Me, Starter.server) + tgl.Initialize() + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + Sleep(500) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + c=skmt.ExecQuery2("select count(*) as CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position = 0 + If c.GetString("CUANTOS") = 0 Then + LogColor($"No hay fecha: ${c.GetString("CUANTOS")}"$, Colors.Red) + cmd.Initialize + cmd.Name = "select_fecha" + reqManager.ExecuteQuery(cmd , 0, "fecha") + Msgbox("AJUSTAR FECHA","AVISO") 'Ignore + B4XPage_Appear + Else +' LogColor($"Si hay fecha: ${c.GetString("CUANTOS")}"$, Colors.Green) + c=skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position =0 + Dim sDate As String + DateTime.DateFormat = "yyyyMMdd" + sDate=DateTime.Date(DateTime.Now) +' If sDate > "20220701" Then +' Msgbox("INSTALAR NUEVO APK" ,"AVISO") 'Ignore +' B4XPage_Appear +' End If + If c.GetString("CAT_VA_VALOR") > sDate Then + Msgbox("AJUSTAR LA FECHA YA QUE ES MENOR AL SISTEMA" ,"AVISO") 'Ignore + B4XPage_Appear + End If + End If + bu.Initialize + batterystatus = bu.BatteryInformation + 'Obtenemos el usuario registrado +' CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") + dameUsuario +End Sub +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub Entrar_Click + Dim r As Reflector + Dim Api As Int + Dim PP As Phone + user.Text = user.Text.trim + Api = r.GetStaticField("android.os.Build$VERSION", "SDK_INT") + If Api < 9 Then + 'Old device + If File.Exists(File.DirInternal, "__id") Then + IMEI = File.ReadString(File.DirInternal, "__id") + Log(1&"-"&IMEI) + Else + Dim id As Int + id = Rnd(0x10000000, 0x7FFFFFFF) + File.WriteString(File.DirInternal, "__id", id) + IMEI = id + Log(2&"-"&IMEI) + End If + Else + 'New device + IMEI = r.GetStaticField("android.os.Build", "SERIAL") +' Log(3&"-"&IMEI) + End If + If IMEI.ToLowerCase = "unknown" Then + IMEI = PP.GetSettings("android_id") + End If +' Log("IMEI = " & IMEI) + + If user.Text = "ALTERNO" Then + c=skmt.ExecQuery2("select CAT_CO_CONFIGURACION, CAT_CO_RESULTADO from CAT_CODIGOS where CAT_CO_PONDERACION =1 AND CAT_CO_ACCION = ?", Array As String("SERVER")) + c.Position =0 + server = c.GetString("CAT_CO_CONFIGURACION") + alterno = c.GetString("CAT_CO_RESULTADO") + c.Close + If alterno = 1 Then + skmt.ExecNonQuery2("UPDATE CAT_CODIGOS SET CAT_CO_PONDERACION = 1 WHERE CAT_CO_ACCION = ? AND CAT_CO_RESULTADO = 2", Array As String ("SERVER")) + skmt.ExecNonQuery2("UPDATE CAT_CODIGOS SET CAT_CO_PONDERACION = 0 WHERE CAT_CO_ACCION = ? AND CAT_CO_RESULTADO = 1", Array As String ("SERVER")) + Else if alterno = 2 Then + skmt.ExecNonQuery2("UPDATE CAT_CODIGOS SET CAT_CO_PONDERACION = 1 WHERE CAT_CO_ACCION = ? AND CAT_CO_RESULTADO = 1", Array As String ("SERVER")) + skmt.ExecNonQuery2("UPDATE CAT_CODIGOS SET CAT_CO_PONDERACION = 0 WHERE CAT_CO_ACCION = ? AND CAT_CO_RESULTADO = 2", Array As String ("SERVER")) + End If + c=skmt.ExecQuery2("select CAT_CO_CONFIGURACION, CAT_CO_RESULTADO from CAT_CODIGOS where CAT_CO_PONDERACION =1 AND CAT_CO_ACCION = ?", Array As String("SERVER")) + c.Position =0 + server = c.GetString("CAT_CO_CONFIGURACION") + user.Text = server + c.Close +' reqManager.Initialize(Me, server) + else if user.Text.Trim = "KMTS1" Then + skmt.ExecNonQuery("delete from usuarioa") + skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object(user.Text.trim, pass.Text)) + skmt.ExecNonQuery("delete from cat_almacen") + skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object (pass.Text)) + skmt.ExecNonQuery("delete from VERSION") + skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object ("2.1")) + B4XPages.ShowPage("Clientes") + else if user.Text = "BERNA1" Then + skmt.ExecNonQuery("delete from usuarioa") + skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object(user.Text, "1")) + skmt.ExecNonQuery("delete from cat_almacen") + skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object ("1")) + skmt.ExecNonQuery("delete from VERSION") + skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object ("2.1")) + B4XPages.ShowPage("Clientes") + else if user.Text = "IMEI" Then + user.Text = IMEI + End If + + 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 + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_usuario_MARDS_10" + cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.Trim) + reqManager.ExecuteQuery(cmd , 0, "usuario_10") + + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_version_MARDS" + reqManager.ExecuteQuery(cmd , 0, "version") + Else + usuario = user.Text + B4XPages.ShowPage("Principal") + End If +End Sub + +Sub JobDone(Job As HttpJob) + Log(Job.Success) + If Job.Success = False Then + 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 + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "version" Then 'query tag + For Each records() As Object In result.Rows + skmt.ExecNonQuery("delete from VERSION") + Dim CAT_VE_VERSION As String = records(result.Columns.Get("CAT_VE_VERSION")) + skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object (CAT_VE_VERSION)) + Next + End If + + If result.Tag = "select_fechat" Then 'query tag + For Each records() As Object In result.Rows + For Each k As String In result.Columns.Keys + Log("select_fechat: " & k & ": " & records(result.Columns.Get(k))) + Next + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "agencia" Then 'query tag + For Each records() As Object In result.Rows + Dim ID_ALMACEN As String = records(result.Columns.Get("ID_ALMACEN")) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "fecha" Then 'query tag + For Each records() As Object In result.Rows + Dim FECHA_HOY As String = records(result.Columns.Get("FECHA")) + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FECHA")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FECHA",FECHA_HOY)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "usuario" Then 'query tag + For Each records() As Object In result.Rows + 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")) + Log(records(result.Columns.Get("CAT_LO_IDTELEFONO")) ) + Next + paso1 = 1 + ToastMessageShow(name, False) + Log("////////////////////////// "&name) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "usuario_10" Then 'query tag + For Each records() As Object In result.Rows + 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")) + Next + Log("|"&name&"|") + paso1 = 1 + IMEI_BASE = "" + IMEI = "" + End If + End If + Job.Release + End If +' Log($"Paso1 = ${paso1} - Name: ${name} - IMEI: ${IMEI} - IMEI_BASE: ${IMEI_BASE}"$) + If paso1 = 1 Then + If IMEI = "" Then + If user.Text = "KMTS1" Then name = "OKActivo" + If name = "OKActivo" Then + skmt.ExecNonQuery("delete from usuarioa") + skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object(user.Text, pass.Text)) + skmt.ExecNonQuery("delete from cat_almacen") + skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object (ID_ALMACEN)) + usuario = user.Text + B4XPages.ShowPage("Principal") + Else If name = "OKExpirado" Then + Msgbox("Usuario Expirado llamar al administrador","") 'Ignore + Else If name = "OKCancelado" Then + Msgbox("Usuario Cancelado llamar al administrador","") 'Ignore + Else + Msgbox("Usuario o password No validos","") 'Ignore + End If + paso1 = 0 + Else + If name = "OKActivo" & IMEI And IMEI = IMEI_BASE Then + If name = "OKActivo" & IMEI Then + skmt.ExecNonQuery("delete from usuarioa") + skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object(user.Text, pass.Text)) + skmt.ExecNonQuery("delete from cat_almacen") + skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object (ID_ALMACEN)) + usuario = user.Text + B4XPages.ShowPage("Clientes") + Else If name = "OKExpirado"& IMEI Then + Msgbox("Usuario Expirado llamar al administrador","") 'ignore + Else If name = "OKCancelado"& IMEI Then + Msgbox("Usuario Cancelado llamar al administrador","") 'ignore + Else + Msgbox("Usuario o password No validos","") 'ignore + End If + paso1 = 0 + Else IF name = "OKActivo" Then + Msgbox("Telefono no VALIDO!","") 'ignore + Else + Msgbox("Usuario o password No validos","") 'ignore + End If + End If + End If +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + Log("CloseRequest") + Sleep(0) + If p_appUpdate.IsInitialized And p_appUpdate.Visible Then + p_appUpdate.Visible = False + Return False + End If + If Not(p_appUpdate.Visible) Then + Log("ExitApplication") + ExitApplication + End If + Return True +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + If user.text = "GPS" Then + user.Text=Location1.Latitude + pass.text=Location1.Longitude + End If +End Sub + +Sub PopupMenu_Dismiss + ToastMessageShow("PopupMenu dismissed", False) +End Sub + +Sub PopupMenu_MenuItemClick (ItemId As Int) As Boolean + ToastMessageShow("Item " & ItemId & " clicked.", False) + Return False +End Sub + +Sub b_menu_Click + PopupMenu.Show +End Sub + +Sub PDF_Click + +End Sub + +'Private Sub GetAdvertisingId As ResumableSub +' Dim jo As JavaObject = Me +' jo.RunMethod("GetAdvertisingId", Null) +' Wait For AdvertisingId_Ready (Success As Boolean, Id As String) +' Return Id +'End Sub + +Sub dameUsuario + c=skmt.ExecQuery2("select count(*) as EXISTE1 from usuarioa where usuario = ?", Array As String(user.Text)) + c.Position=0 + existe = c.GetString("EXISTE1") + c.Close + If existe > 0 Then + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + Else + usuario = "SINUSUARIO" + End If +End Sub + +Sub copiaDB + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + Dim theDir As String = "" + If Result Then +' Private x As String +' If File.ExternalWritable Then +' x = File.DirRootExternal +' Else +' x = File.DirInternal +' End If + Dim theDir As String + Try + File.MakeDir(File.DirRootExternal,"kmts") + theDir = "/kmts" + Catch + theDir = "" + End Try + Try + File.Copy(File.DirInternal,"kmt.db",File.DirInternal&theDir, "mariana_kmt.db") + ToastMessageShow("Listo, copiado a " & File.DirRootExternal&theDir & "/mariana_kmt.db", False) + Catch + ToastMessageShow("No se pudo hacer la copia: "&LastException, True) + End Try + Else + ToastMessageShow("Sin permisos", False) + End If +End Sub + +Sub b_apk_Click + StartService(appUpdater) +End Sub + +'appUpdater - Mostramos el anuncio de que se esta descargando el nuevo apk +Sub muestraProgreso(mensaje As String) + ProgressDialogShow(mensaje) +End Sub + +'appUpdater - Ocultamos el anuncio de que se esta descargando el nuevo apk +Sub ocultaProgreso + ProgressDialogHide +End Sub + +Sub i_engrane_Click + lv_server.Clear + 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) +End Sub + +Sub b_guardar_Click + p_appUpdate.Visible = False + Starter.reqManager.Initialize(Me, et_server.Text) + Starter.server = et_server.Text + ToastMessageShow("Servidor modificado", False) + Subs.panelVisible(p_Main,0,0) +End Sub + +Sub i_engrane_LongClick + copiaDB +End Sub + +Sub Entrar_LongClick +' dim a as int = "a" +End Sub + +Private Sub lv_server_ItemClick (Position As Int, Value As Object) + Starter.server = Value + l_server.Text = Value + et_server.Text = Value + Starter.reqManager.Initialize(Me, Value) + ToastMessageShow("Servidor modificado", False) +End Sub + +Private Sub b_enviarbd_Click + Dim provider As FileProvider + provider.Initialize + Dim FileName As String = "kmt.db" + 'copy the shared file to the shared folder + Log("xxxxxx:"&provider.SharedFolder) + Sleep(1000) + File.Copy(File.DirInternal, FileName, provider.SharedFolder, FileName) + Dim email As Email + email.To.Add("soporte@keymonsoft.com") + email.Subject = "Envio Base de datos Mariana Censos" + email.Attachments.Add(provider.GetFileUri(FileName)) +' email.Attachments.Add(Provider.GetFileUri(FileName)) 'second attachment + Dim in As Intent = email.GetIntent + in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION + StartActivity(in) +End Sub diff --git a/B4A/BatteryUtilities.bas b/B4A/BatteryUtilities.bas new file mode 100644 index 0000000..53902d5 --- /dev/null +++ b/B4A/BatteryUtilities.bas @@ -0,0 +1,126 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=9.5 +@EndOfDesignText@ +'Class module +Sub Class_Globals + Private nativeMe As JavaObject + +End Sub +'Initializes the object. +Public Sub Initialize + nativeMe = Me +End Sub +'Return information about the battery status. It returns the following 11 values in an integer Array: +'EXTRA_LEVEL = current battery level, from 0 To EXTRA_SCALE. +'EXTRA_SCALE = the maximum battery level possible. +'EXTRA_HEALTH = the current health constant. +'EXTRA_ICON_SMALL = the resource ID of a small status bar icon indicating the current battery state. +'EXTRA_PLUGGED = whether the device is plugged into a Power source; 0 means it is on battery, other constants are different types of Power sources. +'EXTRA_STATUS = the current status constant. +'EXTRA_TEMPERATURE = the current battery temperature. +'EXTRA_VOLTAGE = the current battery voltage level. +'A value indicating if the battery is being charged or fully charged (If neither it returns 0 Else it returns 1) +'A value indicating if it is charging via USB (0 = Not USB, 2 = USB) +'A value indicating if it is charging via AC (0 = Not AC, 1 = AC) +Public Sub getBatteryInformation () As Int() + + Dim batteryInfo(11) As Int + batteryInfo = nativeMe.RunMethod("getBatteryInformation",Null) + Return batteryInfo + +End Sub + +Public Sub getBatteryTechnolgy() As String + + Dim batterytech As String + batterytech = nativeMe.RunMethod("getBatteryTechnology",Null) + Return batterytech + +End Sub + + + +#If Java + +import android.os.BatteryManager; +import android.os.Bundle; +import android.app.Activity; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + + public int[] getBatteryInformation() { + + int[] mybat = new int[11]; + + Intent batteryIntent = ba.context.getApplicationContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + + int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); + mybat[0] = level; + int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); + mybat[1] = scale; + int health = batteryIntent.getIntExtra(BatteryManager.EXTRA_HEALTH,-1); + mybat[2] = health; + int icon_small = batteryIntent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL,-1); + mybat[3] = icon_small; + int plugged = batteryIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED,-1); + mybat[4] = plugged; +// boolean present = batteryIntent.getExtras().getBoolean(BatteryManager.EXTRA_PRESENT); + int status = batteryIntent.getIntExtra(BatteryManager.EXTRA_STATUS,-1); + mybat[5] = status; +// String technology = batteryIntent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY); +// BA.Log("Technology = " + technology); + int temperature = batteryIntent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,-1); + mybat[6] = temperature; + int voltage = batteryIntent.getIntExtra(BatteryManager.EXTRA_VOLTAGE,-1); + mybat[7] = voltage; +// int ac = batteryIntent.getIntExtra("plugged",BatteryManager.BATTERY_PLUGGED_AC); +// mybat[8] = ac; +// int usb = batteryIntent.getIntExtra("plugged",BatteryManager.BATTERY_PLUGGED_USB); +// mybat[9] = usb; + + boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || + status == BatteryManager.BATTERY_STATUS_FULL; + mybat[8] = 0; + if (isCharging == true) { + mybat[8] = 1; + } + + // How are we charging? + mybat[9] = 0; + mybat[10] = 0; + int chargePlug = batteryIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); + boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; + if (usbCharge == true) { + mybat[9] = 2; + } + + boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; + if (acCharge == true) { + mybat[10] = 1; + } + + return mybat; + } + + + public String getBatteryTechnology() { + + Intent batteryIntent = ba.context.getApplicationContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + + String technology = batteryIntent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY); + + return technology; + } + + + + + + + +#End If \ No newline at end of file diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas new file mode 100644 index 0000000..db3ca41 --- /dev/null +++ b/B4A/C_Cliente.bas @@ -0,0 +1,642 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub MODS 'ignore + 'V3.04.10 - Se agregó código para el registro de abonos, en B4XMainPage se genera la tabla y aquí se agregó el panel p_abonos para ralizar el abono, y el codigo en el sub "mandaPendientes" para cambiar la bandera de enviado en el abono. +End Sub + +Sub Class_Globals + Private Root As B4XView 'ignore + Dim rp As RuntimePermissions + Private xui As XUI 'ignore + Private p_cliente As Panel + Dim reqManager As DBRequestManager + Dim cmd As DBCommand + Dim ime As IME + Dim g As GPS + Dim ruta As String + Dim skmt As SQL + Dim clie_id As String + Dim sDate,sTime As String + Dim usuario As String + Dim total_cliente As String + Dim m_lat, m_lon As String +' Dim btAdmin As BluetoothAdmin + Dim cmp20 As Serial + Dim printer As TextWriter + Dim PairedDevices As Map + Dim L As List + Dim TAMANO As Int + Dim ESPACIO As Int + Dim BLANCO As String + Dim cuenta As String + Dim tipo_venta As String = "PREVENTA" + Dim MAC_IMPRESORA As String + Dim c As Cursor + Dim s As Cursor + Dim DD As Cursor + Dim c2 As Cursor + Dim ListView1 As ListView + Dim la_cuenta As Label + Dim La_nombre As Label + Dim la_Calle As Label + Dim la_numero As Label + Dim la_nint As Label + Dim la_edo As Label + Dim la_pob As Label + Dim la_col As Label + Dim la_cp As Label + Dim la_zona As Label + Dim gest As Button + Dim la_saldotot As Label + Dim la_saldooper As Label + Dim Tels As Button + Dim Label10 As Label + Dim Label11 As Label + Dim Tar As Button + Dim la_comm As Label + Dim la_actdte As Label + Dim la_usuario As Label + Dim la_resultado As Label + Dim l_entre1 As Label + Dim l_entre2 As Label + Dim l_atiende As Label + Dim l_atiende2 As Label + Dim DATOS As Button + Dim NUEVO As Button +' Dim lat_gps, lon_gps As String + Dim l_total As Label + Dim c2 As Cursor + Dim S2 As Cursor + Private s As Cursor + Dim res As String + Private HIST As Button + Private MONTO_COMPRA As String + Private META As String + Private META2 As String + Private VERIFICA As String + Private L_QR As Label + Private BT_QR As Button + Dim CODIGO As String + Private b_mapa As Button + Dim CUANTOS As String + Private B_IMP As Button + Dim Toggla As Toggle + Dim tgl As Toggle + Private Panel1 As Panel + Private I_COMPRA As EditText + Private b_venta As Button + Dim ALMACEN As String + Private LA_GPS As Label + Private B_E_NEXT As Button + Private E_RES_E As EditText + Private t_tenc As Label + Private Panel2 As Panel + Private CONTADOR_E As String + Private HR_RES1 As String + Private HR_RES2 As String + Private HR_RES3 As String + Private EXISTE As String + Private TELEFONO As String + Private RB1, RB2, RB3, RB4, RB5 As RadioButton + Private stay_hh, stay_mi, stay_ss As String + Dim result As Int + Private LA_RUTA As String + Private b_like As Button + Private B_GPS As Button + Dim CODIGO As String + Private cb_factura As CheckBox + Private p_cbFactura As Panel + Dim venimosDeTicketsDia As Boolean = False + Private p_abono As Panel + Private et_abono As EditText + Private b_abono As Button + Private b_cancelar As Button + Private b_abono1 As Button + Private E_NOMBRE_C As EditText + Private et_direccion As EditText + Private E_ENTRE1 As EditText + Private E_ENTRE_2 As EditText + Private CH_ACTIVO As CheckBox + Private CLIENTE_ACTIVO As String + Private et_cp As EditText + Private et_colonia As EditText + Private lv_colonia As ListView + Private et_estado As EditText + Private et_municipio As EditText + Dim desdeBD As Boolean + Private b_guardaCambios As Button + Private l_secuencia As Label + Private l_ruta As Label + Private et_diaSemana As EditText + Private et_giro As EditText + Private lv_diaSemana As ListView + Private et_calle As EditText + Private et_NoExt As EditText + Private et_NoInt As EditText + Private l_cp As Label + Private l_lon As Label + Private l_lat As Label + Private b_actCoords As Button + Private estatus As String + Private cb_activo As B4XComboBox + Private et_atiende As EditText + Private cb_giro As B4XComboBox + Dim refrescarCliente As Boolean = False + Dim Timer2 As Timer + Dim Interval As Int = 300 + Dim turnoColor As Int = 1 + Dim cd As ColorDrawable + Dim camposModificados As List +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Log("Entramos a clientes create") + Root = Root1 + 'load the layout to Root +' Activity.RemoveAllViews + Root.LoadLayout("cliente") + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + skmt.Initialize(ruta,"kmt.db", True) +' btAdmin.Initialize("BlueTeeth") +' cmp20.Initialize("Printer") + m_lat = 0 + m_lon = 0 + + reqManager.Initialize(Me, Starter.server) + + Log("terminamos create") + camposModificados.Initialize +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA) + Wait For B4XPage_PermissionResult (Permission As String, resultC As Boolean) + rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) + Wait For B4XPage_PermissionResult (Permission As String, resultC As Boolean) + CallSubDelayed(Tracker, "StartFLPSmall") + reqManager.Initialize(Me, Starter.server) + lv_colonia.Visible = False + Timer2.Initialize("Timer2", Interval * 1) + Timer2.Enabled = True + b_guardaCambios.Enabled = False + b_guardaCambios.Text = "Buscando Ubicación" + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + If refrescarCliente Then + LogColor("Cargamos cliente de BD", Colors.Magenta) + skmt.Initialize(ruta,"kmt.db", True) + c = B4XPages.MainPage.skmt.ExecQuery("select * from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + If c.RowCount > 0 Then + c.Position=0 + la_cuenta.Text = c.GetString("CAT_CL_CODIGO") + l_ruta.Text = c.GetString("CAT_CL_RUTA") + et_giro.Text = c.GetString("CAT_CL_GIRO") + et_diaSemana.Text = c.GetString("CAT_CL_DIASEMANA") + l_secuencia.text = c.GetString("CAT_CL_SECUENCIA") + la_cuenta.Text = c.GetString("CAT_CL_CODIGO") + E_NOMBRE_C.TEXT = c.GetString("CAT_CL_NOMBRE") + et_direccion.Text = c.GetString("CAT_CL_CALLE1") + et_colonia.Text = "" + et_colonia.Text = c.GetString("CAT_CL_COLONIA") + et_estado.Text = c.GetString("CAT_CL_EDO") + desdeBD = True + et_cp.Text = c.GetString("CAT_CL_CP") + et_calle.Text = c.GetString("CAT_CL_CALLE") + et_NoExt.Text = c.GetString("CAT_CL_NOEXT") + et_NoInt.Text = c.GetString("CAT_CL_NOINT") + estatus = c.GetString("CAT_CL_ESTATUS") + If estatus = Null Then estatus = "" + cb_activo.Tag = estatus + E_ENTRE1.Text = "" + E_ENTRE_2.Text = "" + et_atiende.Text = "" + If c.GetString("CAT_CL_CRUCE1") <> Null Then E_ENTRE1.Text = c.GetString("CAT_CL_CRUCE1") + If c.GetString("CAT_CL_CALLE2") <> Null Then E_ENTRE_2.Text = c.GetString("CAT_CL_CALLE2") + If c.GetString("CAT_CL_ATIENDE1") <> Null Then et_atiende.Text = c.GetString("CAT_CL_ATIENDE1") + m_lat = "0" + If c.GetString("CAT_CL_LAT") <> "" Then m_lat = c.GetString("CAT_CL_LAT") + If m_lat.Length < 5 Then m_lat = "0" + m_lon = "0" + If c.GetString("CAT_CL_LONG") <> "" Then m_lon = c.GetString("CAT_CL_LONG") + If m_lon.Length < 5 Then m_lon = "0" + l_lat.Text = m_lat + l_lon.Text = m_lon + End If +' Tracker.FLP.Connect + If Tracker.FLP.IsInitialized And Tracker.FLP.GetLastKnownLocation.IsInitialized Then 'Si tenemos "UltimaUbicaccionConocida" la usamos. + B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude + B4XPages.MainPage.lon_gps = Tracker.FLP.GetLastKnownLocation.Longitude +' Log($"Tenemos UUC: ${Tracker.FLP.GetLastKnownLocation.Latitude},${Tracker.FLP.GetLastKnownLocation.Longitude}"$) +' GPS_LocationChanged(Tracker.FLP.GetLastKnownLocation) + End If + desdeBD = False + Dim itemsAct As List + itemsAct.Initialize + itemsAct.Add("Activo") + itemsAct.Add("No Activo") + itemsAct.Add("Cerrado Permanente") + cb_activo.SetItems(itemsAct) +' Log(estatus) + If estatus = "Activo" Then + cb_activo.SelectedIndex = 0 + CLIENTE_ACTIVO = "Activo" + Else If estatus = "Inactivo" Then + cb_activo.SelectedIndex = 1 + CLIENTE_ACTIVO = "Inactivo" + Else + cb_activo.SelectedIndex = 2 + CLIENTE_ACTIVO = "Cerrado Permanente" + End If + Dim losGiros As List = Subs.traeGirosLista + cb_giro.SetItems(losGiros) + cb_giro.SelectedIndex = losGiros.IndexOf(c.GetString("CAT_CL_GIRO")) + cb_giro.mBase.Width = et_diaSemana.Width + Log("|"&c.GetString("CAT_CL_GIRO")&"|") + c.Close + camposModificados.Clear + End If + refrescarCliente = False +End Sub + +Private Sub Timer2_Tick +' Log(turnoColor) + If turnoColor = 1 Then + cd.Initialize(Colors.RGB(125, 125, 125), 5dip) '210, 132, 79 '210, 105, 30 '125, 125, 125 + b_guardaCambios.Background = cd + turnoColor = 0 + Else + cd.Initialize(Colors.RGB(87, 87, 87), 5dip) '210, 132, 79 '210, 105, 30 '125, 125, 125 + b_guardaCambios.Background = cd + turnoColor = 1 + End If +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + LogColor($"Entrando a Cliente.GPS_LocationChanged"$, Colors.red) +' Log($"${Tracker.FLP.GetLastKnownLocation.Latitude}, ${Tracker.FLP.GetLastKnownLocation.Longitude}"$) + If Tracker.FLP.GetLastKnownLocation.IsInitialized And Tracker.FLP.GetLastKnownLocation.Latitude <> 0 Then + B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude + B4XPages.MainPage.lon_gps = Tracker.FLP.GetLastKnownLocation.Longitude +' Log("Coords set to: " & B4XPages.MainPage.lat_gps & " and " & B4XPages.MainPage.lon_gps) + End If + Dim l1, l2 As Location + l1.Initialize2(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps) +' Log($"Coordenadas de la tienda - lat:${m_lat}, lon:${m_lon}"$) + l2.Initialize2(m_lat, m_lon) +' Log($"${Location1.Latitude}, ${Location1.Longitude} - ${Tracker.FLP.GetLastKnownLocation.Latitude}, ${Tracker.FLP.GetLastKnownLocation.Longitude}"$) + 'now we need the distance between our location and the target location + Dim distance As Long + distance = l1.DistanceTo(l2) 'the result is in meter + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_GPS (HGDATE, HGLAT, HGLON) VALUES(?,?,?) ", Array As Object (sDate & " " & sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + CallSubDelayed(Tracker, "CreateLocationRequest") + b_guardaCambios.Text = "Guardar" + b_guardaCambios.Enabled = True + Timer2.Enabled = False + b_guardaCambios.Color = Colors.RGB(210, 105, 30) '210, 132, 79 '210, 105, 30 +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel + Return True +' Return False +End Sub + +Private Sub b_guardaCambios_Click +' dd/mm/yyyy hh24:mi:ss + DateTime.DateFormat = "dd/MM/yyyy HH:mm:ss" + sDate=DateTime.Date(DateTime.Now) + camposModificados = Subs.RemoveDuplicates(camposModificados) + Log(camposModificados) + If CLIENTE_ACTIVO = "Inactivo" Or CLIENTE_ACTIVO = "Cerrado Permanente" Then l_secuencia.Text = "0" + If CLIENTE_ACTIVO = "Cerrado Permanente" Then CLIENTE_ACTIVO = "Cerrado permanente confirmado" + B4XPages.MainPage.skmt.ExecNonQuery($"UPDATE kmt_info set CAT_CL_CODIGO = '${la_cuenta.text}', CAT_CL_CEDIS = '${Subs.traeAlmacen}', CAT_CL_LAT = '${l_lat.text}', CAT_CL_LONG = '${l_lon.text}', CAT_CL_SECUENCIA = '${l_secuencia.text}', CAT_CL_RUTA = '${l_ruta.text}', CAT_CL_DIASEMANA = '${et_diaSemana.text}', CAT_CL_GIRO = '${cb_giro.SelectedItem}', CAT_CL_NOMBRE = '${Subs.escapeSQLString(E_NOMBRE_C.text)}', CAT_CL_ATIENDE1 = '${et_atiende.text}', CAT_CL_CALLE = '${Subs.escapeSQLString(et_calle.text)}', CAT_CL_NOINT = '${et_NoInt.text}', CAT_CL_NOEXT = '${et_NoExt.text}', CAT_CL_CALLE1 = '${Subs.escapeSQLString(et_direccion.text)}', CAT_CL_CRUCE1 = '${E_ENTRE1.text}', CAT_CL_CALLE2 = '${E_ENTRE_2.text}', CAT_CL_CP = '${et_cp.text}', CAT_CL_COLONIA = '${et_colonia.text}', CAT_CL_MUNI = '${et_municipio.text}', CAT_CL_EDO = '${et_estado.text}', CAT_CL_ESTATUS = '${CLIENTE_ACTIVO}', gestion = 11, CAT_CL_FECHA_CAPTURA = '${sDate & " " & sTime}', CAT_CL_ENVIO_PENDIENTE = 1, LAT_CENSADOR = '${B4XPages.MainPage.lat_gps}', LON_CENSADOR = '${B4XPages.MainPage.lon_gps}', ESTATUS_ORIGINAL = '${cb_activo.tag}', CAMPOS_MODIFICADOS = '${Subs.list2string(camposModificados)}' where CAT_CL_CODIGO In (select cuenta from cuentaa)"$) + Log($"CAT_CL_CODIGO = '${la_cuenta.text}', CAT_CL_CEDIS = '${Subs.traeAlmacen}', CAT_CL_LAT = '${l_lat.text}', CAT_CL_LONG = '${l_lon.text}', CAT_CL_SECUENCIA = '${l_secuencia.text}', CAT_CL_RUTA = '${l_ruta.text}', CAT_CL_DIASEMANA = '${et_diaSemana.text}', CAT_CL_GIRO = '${cb_giro.SelectedItem}', CAT_CL_NOMBRE = '${E_NOMBRE_C.text}', CAT_CL_ATIENDE1 = '${et_atiende.text}', CAT_CL_CALLE = '${et_calle.text}', CAT_CL_NOINT = '${et_NoInt.text}', CAT_CL_NOEXT = '${et_NoExt.text}', CAT_CL_CALLE1 = '${et_direccion.text}', CAT_CL_CRUCE1 = '${E_ENTRE1.text}', CAT_CL_CALLE2 = '${E_ENTRE_2.text}', CAT_CL_CP = '${et_cp.text}', CAT_CL_COLONIA = '${et_colonia.text}', CAT_CL_MUNI = '${et_municipio.text}', CAT_CL_EDO = '${et_estado.text}', CAT_CL_ESTATUS = '${CLIENTE_ACTIVO}', gestion = 11"$) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO NOVENTA (NV_CLIENTE, NV_FECHA, NV_USER, NV_MOTIVO, NV_COMM, NV_LAT, NV_LON) VALUES(?,?,?,?,?,?,?) ", Array As Object (clie_id, sDate & sTime, usuario, "CENSOS", CLIENTE_ACTIVO, l_lat.text, l_lon.text)) + mandaPendientes + B4XPages.ShowPage("Clientes") +End Sub + +Sub NUEVO_Click + B4XPages.ShowPage("NuevoCliente") +End Sub + +Private Sub p_cliente_Click + 'Nada aqui, solo esta para que los clics no se pasen hacia atras. +End Sub + +Sub mandaPendientes + 'Enviamos Pendientes + c = B4XPages.MainPage.skmt.ExecQuery("SELECT * from kmt_info where CAT_CL_ENVIO_PENDIENTE = '1'") + Log($"Cliente PENDIENTE: ${c.RowCount}"$) + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i +' Dim fechaCaptura As String = c.GetString("CAT_CL_FECHA_CAPTURA").As(String).SubString2(0,10) + Dim fechaCaptura As String = c.GetString("CAT_CL_FECHA_CAPTURA") + Log(fechaCaptura) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "guardaClienteGeocerca_MARDS" + Dim motivo As String = "VERIFICACION DE DATOS" + Dim comentario As String = c.GetString("ESTATUS_ORIGINAL") + If c.GetString("CAT_CL_CODIGO").As(String).SubString2(0,1) = "N" Then motivo = "VERIFICACION CLIENTE NUEVO PREVENTA" + If c.GetString("CAT_CL_CODIGO").As(String).SubString2(0,2) = "NC" Then motivo = "CLIENTE NUEVO CENSOS" + If c.GetString("CAT_CL_CODIGO").As(String).SubString2(0,1) = "N" Then comentario = "" + If c.GetString("CAT_CL_CODIGO").As(String).SubString2(0,2) = "NC" Then comentario = c.GetString("CAT_CL_CALLE1") + + cmd.Parameters = Array As Object(c.GetString("CAT_CL_CODIGO"), fechaCaptura, Subs.traeUsuarioDeBD, c.GetString("CAT_CL_LAT"), c.GetString("CAT_CL_LONG"), l_ruta.text, Subs.traeAlmacen, c.GetString("LAT_CENSADOR"), c.GetString("LON_CENSADOR"), motivo, comentario) + reqManager.ExecuteCommand(cmd, "guaradClienteGeocerca") + + cmd.Initialize + cmd.Name = "sp_confirmaCliente" + cmd.Parameters = Array As Object(c.GetString("CAT_CL_CODIGO"), Subs.traeAlmacen, c.GetString("CAT_CL_LAT"), c.GetString("CAT_CL_LONG"), c.GetString("CAT_CL_SECUENCIA"), c.GetString("CAT_CL_RUTA"), c.GetString("CAT_CL_DIASEMANA"), c.GetString("CAT_CL_GIRO"), Subs.escapeSQLString(c.GetString("CAT_CL_NOMBRE")), c.GetString("CAT_CL_ATIENDE1"), c.GetString("CAT_CL_CALLE"), c.GetString("CAT_CL_NOINT"), c.GetString("CAT_CL_NOEXT"), Subs.escapeSQLString(c.GetString("CAT_CL_CALLE1")), c.GetString("CAT_CL_CRUCE1"), c.GetString("CAT_CL_CALLE2"), c.GetString("CAT_CL_CP"), c.GetString("CAT_CL_COLONIA"), c.GetString("CAT_CL_MUNI"), c.GetString("CAT_CL_EDO"), c.GetString("CAT_CL_ESTATUS"), c.GetString("CAT_CL_FECHA_CAPTURA"), sDate, Subs.traeUsuarioDeBD) + Log($"${c.GetString("CAT_CL_CODIGO")}, ${Subs.traeAlmacen}, ${c.GetString("CAT_CL_LAT")}, ${c.GetString("CAT_CL_LONG")}, ${c.GetString("CAT_CL_SECUENCIA")}, ${c.GetString("CAT_CL_RUTA")}, ${c.GetString("CAT_CL_DIASEMANA")}, ${c.GetString("CAT_CL_GIRO")}, ${Subs.escapeSQLString(c.GetString("CAT_CL_NOMBRE"))}, ${c.GetString("CAT_CL_ATIENDE1")}, ${c.GetString("CAT_CL_CALLE")}, ${c.GetString("CAT_CL_NOINT")}, ${c.GetString("CAT_CL_NOEXT")}, ${c.GetString("CAT_CL_CALLE1")}, ${c.GetString("CAT_CL_CRUCE1")}, ${c.GetString("CAT_CL_CALLE2")}, ${c.GetString("CAT_CL_CP")}, ${c.GetString("CAT_CL_COLONIA")}, ${c.GetString("CAT_CL_MUNI")}, ${c.GetString("CAT_CL_EDO")}, ${c.GetString("CAT_CL_ESTATUS")}, ${c.GetString("CAT_CL_FECHA_CAPTURA")}, ${sDate}, ${Subs.traeUsuarioDeBD}"$) + reqManager.ExecuteCommand(cmd , $"confirmaCliente_${c.GetString("CAT_CL_CODIGO")}"$) + + cmd.Initialize + cmd.Name = "guardaClientesNuevosMods_MARDS" + cmd.Parameters = Array As Object(Subs.traeUsuarioDeBD, Subs.traeAlmacen, Subs.traeAlmacen, c.GetString("CAT_CL_RUTA"), Subs.traeCliente, c.GetString("CAMPOS_MODIFICADOS")) + Log($"${Subs.traeUsuarioDeBD}, ${Subs.traeAlmacen}, ${Subs.traeAlmacen}, ${c.GetString("CAT_CL_RUTA")}, ${Subs.traeCliente}, ${c.GetString("CAMPOS_MODIFICADOS")}"$) + reqManager.ExecuteCommand(cmd , $"guardaClientesNuevosMods_${c.GetString("CAT_CL_CODIGO")}"$) + Next + End If +End Sub + +Sub JobDone(Job As HttpJob) + Log(Job.Success) + If Job.Success = False Then + ToastMessageShow("Error: " & Job.ErrorMessage, True) + LogColor("Error: " & Job.ErrorMessage, Colors.red) + Else + LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211027 + If Job.JobName = "DBRequest" Then + Dim resultado As DBResult = reqManager.HandleJob(Job) + If resultado.Tag = "confirmaCliente" Then + Subs.logJobDoneResultados(resultado) + End If + 'Modificamos la bandera de pendiente en kmt_info + If resultado.Tag.As(String).IndexOf("confirmaCliente_") > -1 Then + Private cliente As String= resultado.Tag + cliente = cliente.SubString(cliente.IndexOf("_")+1) +' Log($"Cliente: ${cliente}"$) + B4XPages.MainPage.skmt.ExecNonQuery($"update kmt_info set CAT_CL_ENVIO_PENDIENTE = 0 where CAT_CL_CODIGO = '${cliente}'"$) + Subs.logJobDoneResultados(resultado) + End If + If resultado.Tag = "guaradClienteGeocerca" Then + Subs.logJobDoneResultados(resultado) + End If + End If + Job.Release + End If + +End Sub + +Private Sub b_cancelar_Click + et_abono.Text = "" + p_abono.Visible = False + ime.HideKeyboard +End Sub + +Private Sub et_cp_TextChanged (Old As String, New As String) +' Log(desdeBD) + camposModificados.Add("CAT_CL_CP") + If Not(desdeBD) And New.Length = 5 Then + Private cc As Cursor = skmt.ExecQuery($"select estado, municipio, colonia from sepomex where codigo = '${et_cp.text}'"$) +' LogColor(cc.RowCount, Colors.Green) + If cc.RowCount > 0 Then + For x = 0 To cc.RowCount - 1 + cc.Position = x + et_estado.Text = cc.GetString("ESTADO") + et_municipio.Text = cc.GetString("MUNICIPIO") + Next + End If + End If + desdeBD = False +End Sub + +Private Sub et_cp_FocusChanged (HasFocus As Boolean) + et_cp_click +End Sub + +Sub et_cp_click + lv_colonia.Visible = False +End Sub + +Private Sub et_colonia_Click + Sender.As(EditText).InputType = 524288 + If lv_colonia.Visible = False Then + lv_colonia.Visible = True + Else + lv_colonia.Visible = False + End If +End Sub + +Private Sub et_colonia_FocusChanged (HasFocus As Boolean) + If HasFocus Then + Private cc As Cursor = skmt.ExecQuery($"select colonia from sepomex where codigo = '${et_cp.text}'"$) + lv_colonia.Clear + lv_colonia.BringToFront + Private label1 As Label + label1 = lv_colonia.SingleLineLayout.Label + label1.TextColor = Colors.White + label1.TextSize = 14 +' Log(cc.RowCount) + If cc.RowCount > 0 Then + For i = 0 To cc.RowCount - 1 + cc.Position = i + lv_colonia.AddSingleLine(cc.GetString("COLONIA")) +' Log(cc.GetString("COLONIA")) + Next + Else + lv_colonia.AddSingleLine("Código no encontrado.") + lv_colonia.AddSingleLine("Ingrese colonia manualmente.") + End If + lv_colonia.Visible = True + End If +End Sub + +Private Sub lv_colonia_ItemClick (Position As Int, Value As Object) + lv_colonia.Visible = False + If Value <> "Código no encontrado." And Value <> "Ingrese colonia manualmente." Then + et_colonia.Text = Value + End If +End Sub + +Sub et_diaSemana_Click + LogColor("Clic diasemana", Colors.Red) + Sender.As(EditText).InputType = 524288 + If Not(lv_diaSemana.Visible) Then + lv_diaSemana.Visible = True + Else + Log("Si visible") + lv_diaSemana.Visible = False + End If +End Sub + +Private Sub et_diaSemana_FocusChanged (HasFocus As Boolean) + If HasFocus And lv_diaSemana.Visible = False Then +' lv_diaSemana.Visible = True + lv_diaSemana.BringToFront + lv_diaSemana.Clear + Private label1 As Label + label1 = lv_diaSemana.SingleLineLayout.Label + label1.TextColor = Colors.White + label1.TextSize = 14 + lv_diaSemana.AddSingleLine("LUNES") + lv_diaSemana.AddSingleLine("MARTES") + lv_diaSemana.AddSingleLine("MIERCOLES") + lv_diaSemana.AddSingleLine("JUEVES") + lv_diaSemana.AddSingleLine("VIERNES") + lv_diaSemana.AddSingleLine("SABADO") + lv_diaSemana.Visible = True + End If + If Not(HasFocus) And lv_diaSemana.Visible Then + lv_diaSemana.Visible = False + End If +End Sub + +Private Sub lv_diaSemana_ItemClick (Position As Int, Value As Object) + lv_diaSemana.Visible = False + et_diaSemana.Text = Value +End Sub + +Sub et_giro_Click +' If lv_giro.Visible Then +' lv_giro.Visible = False +' Else +' lv_giro.Visible = True +' End If +End Sub + +Sub et_giro_FocusChanged (HasFocus As Boolean) +' If HasFocus Then +' Sender.As(EditText).InputType = 524288 +' Private cc As Cursor = skmt.ExecQuery($"select * from cat_giros"$) +' lv_giro.Clear +' lv_giro.BringToFront +' Private label1 As Label +'' label1 = lv_giro.SingleLineLayout.Label +' label1.TextColor = Colors.White +' label1.TextSize = 14 +' Log(cc.RowCount) +' If cc.RowCount > 0 Then +' For i = 0 To cc.RowCount - 1 +' cc.Position = i +' label1.Tag = cc.GetString("id") +' lv_giro.AddSingleLine(cc.GetString("descripcion")) +' Log(cc.GetString("descripcion")) +' Next +' End If +' lv_giro.Visible = True +' Else +' lv_giro.Visible = False +' End If +End Sub + +Private Sub lv_giro_ItemClick (Position As Int, Value As Object) +' lv_giro.Visible = False + et_giro.Text = Value +End Sub + +Private Sub l_cp_LongClick + et_cp_TextChanged(et_cp.Text, et_cp.Text) +End Sub + +Private Sub b_mapa2_Click + B4XPages.MainPage.mapa.Latitud = l_lat.text + B4XPages.MainPage.mapa.Longitud = l_lon.text + B4XPages.MainPage.mapa.NOMBRE_TIENDA = E_NOMBRE_C.text +' B4XPages.MainPage.mapa.gmap.Clear + B4XPages.ShowPage("mapa") +End Sub + +Private Sub b_actCoords_Click + l_lat.Text = B4XPages.MainPage.lat_gps + l_lon.Text = B4XPages.MainPage.lon_gps + camposModificados.Add("CAT_CL_LAT") + camposModificados.Add("CAT_CL_LONG") + ToastMessageShow("¡Coordenadas actualizadas!", False) +End Sub + +Private Sub cb_activo_SelectedIndexChanged (Index As Int) + If Index = 0 Then + CLIENTE_ACTIVO = "Activo" + else if Index = 1 Then + CLIENTE_ACTIVO = "Inactivo" + Else + CLIENTE_ACTIVO = "Cerrado Permanente" + End If + Log(CLIENTE_ACTIVO) + camposModificados.Add("CAT_CL_ESTATUS") +End Sub + +Private Sub cb_giro_SelectedIndexChanged (Index As Int) + camposModificados.Add("CAT_CL_GIRO") +End Sub + +Private Sub et_atiende_TextChanged (Old As String, New As String) + camposModificados.Add("CAT_CL_ATIENDE1") +End Sub + +Private Sub E_ENTRE_2_TextChanged (Old As String, New As String) + camposModificados.Add("CAT_CL_CALLE2") +End Sub + +Private Sub E_ENTRE1_TextChanged (Old As String, New As String) + camposModificados.Add("CAT_CL_CRUCE1") +End Sub + +Private Sub et_NoInt_TextChanged (Old As String, New As String) + camposModificados.Add("CAT_CL_NOINT") +End Sub + +Private Sub et_NoExt_TextChanged (Old As String, New As String) + camposModificados.Add("CAT_CL_NOEXT") +End Sub + +Private Sub et_calle_TextChanged (Old As String, New As String) + camposModificados.Add("CAT_CL_CALLE") +End Sub + +Private Sub et_direccion_TextChanged (Old As String, New As String) + camposModificados.Add("CAT_CL_CALLE1") +End Sub + +Private Sub et_colonia_TextChanged (Old As String, New As String) + camposModificados.Add("CAT_CL_COLONIA") +End Sub + +Private Sub et_municipio_TextChanged (Old As String, New As String) + camposModificados.Add("CAT_CL_MUNI") +End Sub + +Private Sub et_estado_TextChanged (Old As String, New As String) + camposModificados.Add("CAT_CL_EDO") +End Sub + +Private Sub E_NOMBRE_C_TextChanged (Old As String, New As String) + camposModificados.Add("CAT_CL_NOMBRE") +End Sub + +Private Sub et_diaSemana_TextChanged (Old As String, New As String) + camposModificados.Add("CAT_CL_DIAS_VISITA") +End Sub \ No newline at end of file diff --git a/B4A/C_Clientes.bas b/B4A/C_Clientes.bas new file mode 100644 index 0000000..844241f --- /dev/null +++ b/B4A/C_Clientes.bas @@ -0,0 +1,244 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Mods + '20230526 - + +End Sub + +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + +' Dim skmt As SQL + Dim c As Cursor + Dim c2 As Cursor + Dim s As Cursor + Dim ListView1 As ListView + Dim entro As String + Dim gest As Button + Dim lfila As Label + Dim busca As EditText + Dim colonia As String + Private b_qr As Button + Private qr As QRCode + ' Dim sc As Zxing_scanner + Dim CODIGO As String + Dim STIME As String + + Dim ruta As String + Dim q_buscar As String + Private p_clientes As Panel +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("clientes") + 'Dim ruta As String + entro ="2" + ' valido donde escribo el archivo de la base de datos de kmt +' If File.ExternalWritable Then +' ruta = File.DirDefaultExternal +' Else + ruta = File.DirInternal +' End If + + ' se crea o no el archivo de la base de ddatos de kmt + 'NOTAS SI SE MODIFICA LA ESTRUCTURA SE QUITA EL IF Y SE VA DIRECTO A LA SENTENCIA FILE.COPY PARA QUE + 'TOME LA NUEVA ESTRUCTURA ES MUY IMPORTANTE TENER EL IF DE LO CONTRARIO SOLO LO ESCRIBE UNA VEZ Y LO BORRA + 'SI SE REGRESA A ESTE ACTIVIDAD. + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + qr.initialize +End Sub + +Sub B4XPage_Appear + B4XPages.SetTitle(Me, $"Clientes - ${Starter.dia_semana}"$) + busca.Text = "" + entro ="2" + colonia = 0 + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO, CAT_CL_SECUENCIA from kmt_info where gestion = 0 ORDER BY CAT_CL_SECUENCIA, CAT_CL_CODIGO") + ListView1.Clear +' Log("LIMPIAMOS LISTVIEW") + lfila.Text = "NOMBRE" + If c.RowCount>0 Then + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 14 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 14 + label2.TextColor = Colors.Black + label2.Height = 50dip + label2.Width = ListView1.Width * 0.99 + ListView1.TwoLinesLayout.ItemHeight = 70dip + For i=0 To c.RowCount -1 + c.Position=i +' Log($"${c.GetString("CAT_CL_CODIGO")}, ${c.GetString("CAT_CL_NOMBRE")}"$) + ListView1.AddTwoLines(c.GetString("CAT_CL_CODIGO") & " - " & c.GetString("CAT_CL_SECUENCIA"), c.GetString("CAT_CL_NOMBRE") & ", " & c.GetString("CAT_CL_CALLE")) + Next + End If + c.Close + p_clientes.Height = Root.Height + ListView1.Height = Root.Height * 0.75 + entro = "4" +End Sub + +Sub ListView1_ItemClick (Position As Int, Value As Object) + Private value2() As String = Regex.Split(" - ", Value) + If colonia = 0 Then + colonia = value2(0) + End If +' Log("-------------------------------" & value2(0)) + + If entro = "2" Then + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_CALLE, CAT_CL_COLONIA, count(*) as cuantos from kmt_info where gestion = 0 and CAT_CL_COLONIA = ? GROUP BY CAT_CL_CALLE, CAT_CL_COLONIA order by CAT_CL_CALLE ", Array As String(value2(0))) + ListView1.Clear + lfila.text = "Calle" + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + ListView1.AddTwoLines(c2.GetString("CAT_CL_CALLE"),c2.GetString("cuantos") ) + Next + End If + entro = "3" + Else If entro = "3" Then + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info where gestion = 0 and CAT_CL_CALLE = ? AND CAT_CL_COLONIA = ? order by CAT_CL_NOMBRE ", Array As String(value2(0), colonia)) + ListView1.Clear + lfila.text = "Nombre" + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + ListView1.AddTwoLines(c2.GetString("CAT_CL_CODIGO"), c2.GetString("CAT_CL_NOMBRE")) + Next + End If + entro = "4" + Else If entro = "4" Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(value2(0))) + DateTime.TimeFormat = "HHmmss" + STIME=DateTime.Time(DateTime.Now) + + s=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_STAY_STORE WHERE HSS_IN = ? AND HSS_CODIGO In (select cuenta from cuentaa)", Array As String("0")) + s.Position = 0 + If s.GetString("CUANTOS") = 1 Then + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_IN = ? where HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(STIME)) + Else + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (value2(0))) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_IN = ? where HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(STIME)) + End If + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_OUT set HSO_INI = ? where HSO_INI = 0 ", Array As Object(STIME)) + DateTime.TimeFormat = "HH:mm:ss" + Subs.guardaClienteHoraInicio(value2(0)) + B4XPages.MainPage.cliente.refrescarCliente = True + Log(Value) + If Value.As(String).StartsWith("N") Then + B4XPages.MainPage.nuevoCliente.cargarCliente = True + B4XPages.ShowPage("NuevoCliente") + Else + B4XPages.ShowPage("Cliente") + End If + End If +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + ' BACK key pressed + 'Return True to close, False to cancel +' If key=KeyCodes.KEYCODE_BACK Then +' StartActivity(seleccion) +' Return False +' End If + B4XPages.ShowPage("Principal") + Return True +End Sub + +Sub BUSCA_TextChanged (Old As String, New As String) +' Log($"${Old} - ${New}"$) + If Old <> "" And New <> "" Then +' Log("BUSCA_TEXTCHANGED") + q_buscar = "%" & busca.Text & "%" + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info where (CAT_CL_NOMBRE like ? OR CAT_CL_CODIGO LIKE ? OR CAT_CL_CALLE LIKE ?)and gestion = 0 order by CAT_CL_NOMBRE ", Array As String(q_buscar,q_buscar,q_buscar)) + ListView1.Clear + lfila.text = "Nombre y Calle" +' Log("=========================================================================") + If c2.RowCount > 0 Then + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 14 + label1.TextColor = Colors.DarkGray + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 14 + label2.TextColor = Colors.DarkGray +' ListView1.TwoLinesLayout.ItemHeight = 350dip + For i=0 To c2.RowCount -1 + c2.Position=i +' Log($"${c2.GetString("CAT_CL_CODIGO")} - ${c2.GetString("CAT_CL_NOMBRE")}"$) + ListView1.AddTwoLines(c2.GetString("CAT_CL_CODIGO"), c2.GetString("CAT_CL_NOMBRE") &" CALLE: "& c2.GetString("CAT_CL_CALLE")) + Next + End If + entro = "4" + c2.Close + End If +End Sub + +Sub b_qr_Click + Dim scan_width As Int + Dim scan_height As Int + scan_width = 400 + scan_height = 400 +End Sub + +Sub sc_result(atype As String,Values As String) + CODIGO = Values + c2=B4XPages.MainPage.skmt.ExecQuery2("select COUNT(*) AS ENCONTRADO from kmt_info where CAT_CL_NUM_SERIEFISICO = ? order by CAT_CL_NOMBRE ", Array As String(CODIGO)) + c2.Position =0 + If c2.GetString("ENCONTRADO") > 0 Then + s=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_CODIGO from kmt_info where CAT_CL_NUM_SERIEFISICO = ? order by CAT_CL_NOMBRE ", Array As String(CODIGO)) + s.Position =0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(s.GetString("CAT_CL_CODIGO"))) + s.Close +' b_qr.Visible = False + B4XPages.ShowPage("clientes") + Else + Msgbox("CODIGO " & CODIGO & " NO ENCONTRADO","AVISO") 'ignore + End If +End Sub + +Sub sc_noScan + Log("nothing returned from the scan !!!!!") +End Sub + +Sub calc_ean_checksum(number As String) As String 'this has now become redundant as I am only interested in QR Codes + Dim i As Int + Dim cO As Char + Dim soma As Int + Dim n As Int + Dim digit As Float + soma = 0 + For i=0 To number.Length - 1 + digit = number.SubString2(i,i+1) + n= digit * ((i Mod 2) * 2 + 1) + soma=soma+n + Next + Return number & ( ( 10 - ( soma Mod 10 )) Mod 10 ) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Private Sub p_clientes_Click + 'Nada aqui, solo esta para que los clics no se pasen hacia atras. +End Sub \ No newline at end of file diff --git a/B4A/C_MapaRutas.bas b/B4A/C_MapaRutas.bas new file mode 100644 index 0000000..d055d2d --- /dev/null +++ b/B4A/C_MapaRutas.bas @@ -0,0 +1,263 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + + Dim GPS As GPS + Dim rp As RuntimePermissions + Dim ruta As String + Dim skmt As SQL + Dim c As Cursor + Dim c2 As Cursor + Dim c22 As Cursor + Dim c3 As Cursor + + Private gmap As GoogleMap + Private MapFragment1 As MapFragment + Dim Latitud As Double = 0 + Dim Longitud As Double = 0 + Dim Lat2 As Double = 0 + Dim Lon2 As Double = 0 + Dim p1, p2 As Location + Dim Distance As Float + Dim boton1 As Button + Dim HUE_BLUE As Float + Dim HUE_RED As Float + Dim HUE_GREEN As Float + Private B_AZUL As Button + Private B_ROJO As Button + Private B_VERDE As Button + Private B_TODOS As Button + Dim Tienda As String + Dim LatitudRu As Double + Dim LongitudRU As Double + Dim LIST_AZUL As List + Dim LIST_ROJO As List + Dim LIST_VERDE As List + Dim MARK_AZUL As Marker + Dim MARK_ROJO As Marker + Dim MARK_VERDE As Marker + Dim MARK_CEDIS As Marker + Dim rojo As String + Dim azul As String + Dim verde As String + Dim todos As String + Dim NumSerie As Int + Dim OnInfoWindowClickListener1 As OnInfoWindowClickListener + Dim GoogleMapEXTRA As GoogleMapsExtras + Dim CODIGO As String + Private SEMANA As String + Private p_mapaRutas As Panel +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("mapaRutas") + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + skmt.Initialize(ruta,"kmt.db", True) + GPS.Initialize("GPS") + If MapFragment1.IsGooglePlayServicesAvailable = False Then + ToastMessageShow("Please install Google Play Services.", True) + End If + MARK_AZUL.IsInitialized + MARK_ROJO.IsInitialized + MARK_VERDE.IsInitialized + LIST_AZUL.Initialize + LIST_ROJO.Initialize + LIST_VERDE.Initialize + verde = 0 + azul = 0 + rojo = 0 + todos = 1 + c=B4XPages.MainPage.skmt.ExecQuery2("select count(*) AS CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("SEMANA")) + c.Position =0 + SEMANA = c.GetString("CUANTOS") + c.Close + If SEMANA > 0 Then + c=B4XPages.MainPage.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("SEMANA")) + c.Position =0 + SEMANA = c.GetString("CAT_VA_VALOR") + c.Close + End If +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub MapFragment1_Ready + Log("ENTRANDO") + gmap = MapFragment1.GetMap + gmap.IsInitialized + rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION) + Wait For Activity_PermissionResult (Permission As String, Result As Boolean) + gmap.MyLocationEnabled = Result + Dim JavaMapsObject As JavaObject + JavaMapsObject = gmap.GetUiSettings + JavaMapsObject.RunMethod("setMapToolbarEnabled", Array As Object(True)) + '''''''----------------------------MARKER AZUL - POR VISITAR + If azul = 1 Or todos = 1 Then + c.IsInitialized + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO,CAT_CL_NOMBRE,CAT_CL_LAT,CAT_CL_LONG from kmt_info where gestion = 0 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0 and CAT_CL_LAT <> ' ' and CAT_CL_LONG <> ' ' ") + skmt.Initialize(ruta,"kmt.db", True) + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i +' Log(i&"|"&c.GetString("CAT_CL_LAT")&"|") + LatitudRu = 0 + If c.GetString("CAT_CL_LAT") <> "" Then LatitudRu = c.GetString("CAT_CL_LAT") + LongitudRU = 0 + If c.GetString("CAT_CL_LONG") <> "" Then LongitudRU = c.GetString("CAT_CL_LONG") + CODIGO=c.GetString("CAT_CL_CODIGO") + Tienda= c.GetString("CAT_CL_NOMBRE") + MARK_AZUL = gmap.AddMarker2(LatitudRu,LongitudRU,CODIGO, gmap.HUE_BLUE) + MARK_AZUL.Snippet = Tienda + Next + End If + c .Close + If MARK_AZUL.IsInitialized Then LIST_AZUL.Add(MARK_AZUL) + End If + '''''''----------------------------MARKER VERDE - VENTA + If verde =1 Or todos = 1 Then + c2.IsInitialized + c2=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 2 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c2.RowCount -1 + c2.Position = i + LongitudRU = c2.GetString("CAT_CL_LONG") + LatitudRu = c2.GetString("CAT_CL_LAT") + CODIGO=c2.GetString("CAT_CL_CODIGO") + Tienda= c2.GetString("CAT_CL_NOMBRE") + MARK_VERDE = gmap.AddMarker2(LatitudRu,LongitudRU,CODIGO,gmap.HUE_GREEN) + MARK_VERDE.Snippet = Tienda + Next + Else + If verde =1 Or todos = 1 Then + c2.IsInitialized + c2=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 2 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c2.RowCount -1 + c2.Position = i + LongitudRU = c2.GetString("CAT_CL_LONG") + LatitudRu = c2.GetString("CAT_CL_LAT") + CODIGO=c2.GetString("CAT_CL_CODIGO") + Tienda= c2.GetString("CAT_CL_NOMBRE") + MARK_VERDE = gmap.AddMarker2(LatitudRu,LongitudRU,CODIGO,gmap.HUE_GREEN) + MARK_VERDE.Snippet = Tienda + Next + c2 .Close + If MARK_VERDE.IsInitialized Then LIST_VERDE.Add(MARK_VERDE) + End If + End If +' '''''''----------------------------MARKER ROJO - NO VENTA + If rojo =1 Or todos = 1 Then + c3.IsInitialized + c3=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 3 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c3.RowCount -1 + c3.Position = i + LongitudRU = c3.GetDouble("CAT_CL_LONG") + LatitudRu = c3.GetDouble("CAT_CL_LAT") + Tienda= c3.GetString("CAT_CL_NOMBRE") + MARK_ROJO = gmap.AddMarker2(LatitudRu,LongitudRU,Tienda, gmap.HUE_RED) + Next + Else + If rojo =1 Or todos = 1 Then + c3.IsInitialized + c3=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 3 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c3.RowCount -1 + c3.Position = i + LongitudRU = c3.GetDouble("CAT_CL_LONG") + LatitudRu = c3.GetDouble("CAT_CL_LAT") + Tienda= c3.GetString("CAT_CL_NOMBRE") + MARK_ROJO = gmap.AddMarker2(LatitudRu,LongitudRU,Tienda, gmap.HUE_RED) + Next + If MARK_ROJO.IsInitialized Then LIST_ROJO.Add(MARK_ROJO) + c3.Close + End If + End If + ''------------------------------ + Dim aa As CameraPosition + aa.Initialize(LatitudRu,LongitudRU,15)''' RECOMENDABLE CAMBIAR A 10 PARA QUE SE VEAN MAS MARCADORES + gmap.AnimateCamera(aa) + + '''''---------------------- ESTO ES PARA LOS CLICK EN LAS VENTANAS D INFORMACION----------- + Dim OnInfoWindowClickListener1 As OnInfoWindowClickListener + OnInfoWindowClickListener1.Initialize("OnInfoWindowClickListener1") + GoogleMapEXTRA.SetOnInfoWindowClickListener(gmap, OnInfoWindowClickListener1) + +End Sub + +Sub OnInfoWindowClickListener1_click(Marker1 As Marker) + Log("mapclicked") + Log("borramos cuentaa") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + Log("insertamos cuentaa") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?) ", Array As Object(Marker1.Title)) + Log("vamos a cliente") + B4XPages.ShowPage("Cliente") + B4XPages.ClosePage("MapaRutas") + B4XPages.GetManager.ClosePage(Me) +End Sub + +Sub GPS_LocationChanged (Parametro As Location) + MARK_CEDIS.IsInitialized +End Sub + +Sub B4XPage_Appear + If GPS.GPSEnabled = False Then + ToastMessageShow("Debe Activar el GPS del Equipo.", True) + StartActivity(GPS.LocationSettingsIntent) + Else + GPS.Start(0, 0) + End If +End Sub + +Sub B_TODOS_Click + todos =1 + verde = 0 + azul = 0 + rojo = 0 + MapFragment1_Ready +End Sub + +Sub B_VERDE_Click + verde = 1 + azul = 0 + rojo = 0 + todos = 0 + gmap.Clear + MapFragment1_Ready +End Sub + +Sub B_ROJO_Click + rojo = 1 + verde = 0 + azul = 0 + todos = 0 + gmap.Clear + MapFragment1_Ready +End Sub + +Sub B_AZUL_Click + azul = 1 + verde = 0 + rojo = 0 + todos = 0 + gmap.Clear + MapFragment1_Ready +End Sub + +Private Sub p_mapaRutas_Click + +End Sub \ No newline at end of file diff --git a/B4A/C_Mapas.bas b/B4A/C_Mapas.bas new file mode 100644 index 0000000..8ae644c --- /dev/null +++ b/B4A/C_Mapas.bas @@ -0,0 +1,140 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + '//Process Globals + Dim GPS As GPS + Dim rp As RuntimePermissions + Dim ruta As String + '//Globals + Dim gmap As GoogleMap + Private MapFragment1 As MapFragment + Dim Latitud As Double = 0 + Dim Longitud As Double = 0 + Dim Lat2 As Double = 0 + Dim Lon2 As Double = 0 + Dim p1, p2 As Location + Dim Distance As Float + Dim boton1 As Button + Dim c As Cursor + Dim latmarker As String + Dim longmarker As String + Dim l_long As Label + Dim l_lat As Label + Dim NOMBRE_TIENDA As String + Dim logger As Boolean = True + Private b_mapa2 As Button + Private b_guardar As Button +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("mapas") + If MapFragment1.IsGooglePlayServicesAvailable = False Then + ToastMessageShow("Please install Google Play Services.", True) + End If + 'Boton velocidad' + boton1.Initialize(0) + boton1.Text = 0 &" "&"km/h" + boton1.TextColor = Colors.Red + boton1.TextSize = 15 + Root.AddView(boton1, 40%x, 5dip, 25%x, 40dip) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + GPS.Initialize("GPS") +' Log(1) + rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' Log(2) + gmap.MyLocationEnabled = Result +' Log(gmap.MyLocationEnabled) + If GPS.GPSEnabled = False Then + ToastMessageShow("Debe Activar el GPS del Equipo.", True) + StartActivity(GPS.LocationSettingsIntent) + Else + GPS.Start(0, 0) + End If + latmarker = Latitud + longmarker = Longitud +' NOMBRE_TIENDA = B4XPages.MainPage.cliente.NOMBRE + If logger Then Log($"lat=${latmarker}, lon=${longmarker}"$) + If logger Then Log(gmap) +' Log($"${gmap.IsInitialized} And ${gmap.MyLocationEnabled}"$) + If gmap.IsInitialized And gmap.MyLocationEnabled Then + gmap.Clear + MapFragment1_Ready + End If + If Not(Starter.Logger) Then logger = False +End Sub + +Sub B4XPage_CloseRequest As ResumableSub + Log("Vamos a Cliente") +' BACK key pressed +' Return True To close, False To cancel +' Subs.iniciaActividad("Cliente") +' Return True + Return True +End Sub + +Sub MapFragment1_Ready +' LogColor("MapReady", Colors.red) + gmap = MapFragment1.GetMap +' rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION) +' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' gmap.MyLocationEnabled = Result + gmap.Clear + + Dim JavaMapsObject As JavaObject + JavaMapsObject = gmap.GetUiSettings + JavaMapsObject.RunMethod("setMapToolbarEnabled", Array As Object(True)) + + 'marcadores + If latmarker = "null" Or latmarker = Null Or latmarker = "" Then 'Zocalo + latmarker = "19.432568527069805" + longmarker = "-99.13335030112772" + End If + If logger Then Log($"lat=${latmarker}, lon=${longmarker}"$) + Dim marcador1 As Marker = gmap.AddMarker(latmarker, longmarker, "TIENDA") + marcador1.Snippet = NOMBRE_TIENDA + 'Tienda 1 + + 'posicion inicial + Dim aa As CameraPosition + aa.Initialize(latmarker, longmarker,15)''' RECOMENDABLE CAMBIAR A 10 SI ES MAS DE 1 MARCADOR + gmap.AnimateCamera(aa) +End Sub + +Sub GPS_LocationChanged (Parametro As Location) + Dim sp As Int + sp = Ceil(Parametro.Speed * 3.6) + boton1.Text = sp &" "&"km/h" + Latitud = Parametro.Latitude + Longitud = Parametro.Longitude + p2.Initialize2(Latitud,Longitud) + p1.Initialize2(Lat2, Lon2) + Distance = p1.DistanceTo(p2) +End Sub + +Sub reg_Click +' Subs.iniciaActividad("Cliente") +End Sub + + +Private Sub b_guardar_Click + B4XPages.ShowPage("Cliente") +End Sub \ No newline at end of file diff --git a/B4A/C_NuevoCliente.bas b/B4A/C_NuevoCliente.bas new file mode 100644 index 0000000..4c27cf8 --- /dev/null +++ b/B4A/C_NuevoCliente.bas @@ -0,0 +1,418 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Dim rp As RuntimePermissions + Dim g As GPS + Dim ruta As String + Dim c As Cursor + Dim reqManager As DBRequestManager + Dim ime As IME + + Dim CANCELA As Button + Dim b_guardar As Button + Dim cuenta As String + Dim usuario As String + Dim sDate,sTime As String + Dim no_cliente As String + Dim no_ruta As String + + Dim r_4 As RadioButton + Dim et_nombre As EditText + Dim tgl As Toggle +' Private l_sinUbicacion As Label + Private p_nuevoCliente As Panel + Private Label1 As Label + Private p_botones As Panel + Private p_cam As Panel + Private p_camara As Panel + Private b_foto_inci As Button + Private camEx2 As CameraExClass2 + Dim frontCamera As Boolean = False + Dim fototomada As String + Dim ALMACEN As String + Private Panel1 As Panel + Private Button1 As Button + Private et_direccion As EditText + Private b_ubicacion As Button + Dim elGiro As String = "" + Private lv_giro As ListView + Private l_giro As Label + Private et_giro As EditText + Private cb_giro As B4XComboBox + Dim logger As Boolean = False + Dim cargarCliente As Boolean = False + Private B_FOTO As Button + Dim elOtroCliente As String = "" + Dim camposModificados As List +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("nuevocliente") + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If +' skmt.Initialize(ruta,"kmt.db", True) +' p_camara.Height = Root.Height +' p_camara.Width = Root.Width +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + camposModificados.Initialize + reqManager.Initialize(Me, Starter.server) + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + Dim losGiros As List = Subs.traeGirosLista + cb_giro.SetItems(losGiros) + B_FOTO.Enabled = True + If cargarCliente Then + Private cf As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select * from HIST_FOTO_CLIENTE where codigo In (Select cuenta from cuentaa)"$) + Private cc As Cursor = B4XPages.MainPage.skmt.ExecQuery("select * from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + If cc.RowCount > 0 Then + cc.Position = 0 + fototomada = "" + If cf.RowCount > 0 Then + cf.Position = 0 + fototomada = cf.GetString("NOM_FOTO") + End If + Log($"${cc.GetString("CAT_CL_CODIGO")}, ${cf.RowCount}, ${fototomada}"$) + elOtroCliente = cc.GetString("CAT_CL_CODIGO") + et_nombre.Text = cc.GetString("CAT_CL_NOMBRE") + et_direccion.Text = cc.GetString("CAT_CL_CALLE1") + et_nombre.Text = cc.GetString("CAT_CL_NOMBRE") +' B_FOTO.Enabled = False + Log($"${losGiros.IndexOf(cc.GetString("CAT_CL_GIRO"))}, ${losGiros}, ${cc.GetString("CAT_CL_GIRO")}"$) + cb_giro.SelectedIndex = losGiros.IndexOf(cc.GetString("CAT_CL_GIRO")) + + End If + End If + b_ubicacion.Text = "Buscando ubicación ..." + b_guardar.Visible = False + Subs.panelVisible(p_nuevoCliente, 0, 0) + p_nuevoCliente.Height = Root.Height + p_nuevoCliente.Width = Root.Width +' Subs.centraEtiqueta(Label1, Root.Width) +' Subs.centraEtiqueta(l_sinUbicacion, Root.Width) + Subs.centraPanel(p_botones, Root.Width) +' E_NOMBRE.Left = Round(Root.Width/2)-(E_NOMBRE.Width/2) + If B4XPages.MainPage.lat_gps <> "0.0" Then + b_guardar.Visible = True 'Si hay ubicaccion, mostramos el boton de guardar. +' l_sinUbicacion.Visible = False + End If + Subs.centraPanel(Panel1, Root.Width) + b_guardar.Enabled = False +' Log(losGiros.IndexOf("ABARROTES")) +' cb_giro.SelectedIndex = losGiros.IndexOf("ABARROTES") +' cb_giro. +' l_sinUbicacion.Visible = True + CallSubDelayed(Tracker, "StartFLPSmall") + Log($"${B4XPages.MainPage.principal.l_dia.text}, ${Starter.dia_semana}"$) +End Sub + +Sub GPS_LocationChanged (Location1 As Location) +' LogColor($"LATITUD= ${B4XPages.MainPage.lat_gps}"$, Colors.Red) + b_ubicacion.TextColor = Colors.Gray + Sleep(200) + b_ubicacion.TextColor = Colors.red + If B4XPages.MainPage.lat_gps <> "0.0" Then + b_guardar.Enabled = True 'Si hay ubicaccion, mostramos el boton de guardar. +' l_sinUbicacion.Visible = True + b_ubicacion.Text = $"Precisión del GPS: ${Round2(Location1.Accuracy,1)} mts."$ + End If +End Sub + +Sub flp_LocationChanged (Location1 As Location) + Log("FLP LOC CHANGED") +End Sub + +Sub CANCELA_Click + B4XPages.ShowPage("Principal") + fototomada = "" + et_nombre.Text = "" + et_direccion.Text = "" + CallSubDelayed(Tracker, "StartFLP") +End Sub + +Sub b_guardar_Click + Log("|" & fototomada & "|" & et_nombre.Text & "|" & et_direccion.Text & "|" & cb_giro.SelectedItem) + If et_nombre.Text = "" Or fototomada = "null" Or fototomada = Null Or fototomada = "" Or et_direccion.Text = "" Or cb_giro.SelectedItem = "SELECCIONA UNA OPCION" Then + ToastMessageShow("Se tienen que llenar todos los campos y tomar la foto para continuar" , True) + else if B4XPages.MainPage.principal.l_ruta.Text = "0" Then + ToastMessageShow("Es necesario cargar una ruta.", False) + Else + Log("entramos a b_guardar") + DateTime.DateFormat = "dd/MM/yyyy" + DateTime.Timeformat = "HHmmss" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + Log($" //////////// Date: ${sDate} - Time: ${sTime} ////////////////"$) + 'Aqui creamos manualmete la hora con el separador de los 2 puntos porque en algunas versiones de android no respeta el formato "Timeformat = 'HH:mm:ss'" + Private hora As String = sTime.SubString2(0,2) + Private mins As String = sTime.SubString2(2,4) + Private segs As String = sTime.SubString(4) + sTime = hora&":"&mins&":"&segs + Log("////////////// sTime: "&sTime&" ////////////////") + c = B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA FROM kmt_info") + c.Position=0 + no_ruta= c.GetString("CAT_CL_RUTA") + no_cliente= "NC" & sTime & no_ruta + If cargarCliente Then no_cliente = elOtroCliente + Log("++ ++ no_cliente = "&no_cliente) + c.Close + + DateTime.DateFormat = "dd/MM/yyyy HH:mm:ss" + Private DateNC As String = DateTime.Date(DateTime.Now) + If cargarCliente Then + camposModificados = Subs.RemoveDuplicates(camposModificados) + B4XPages.MainPage.skmt.ExecNonQuery($"UPDATE kmt_info set CAT_CL_CODIGO = '${no_cliente}', CAT_CL_CEDIS = '${Subs.traeAlmacen}', CAT_CL_LAT = '${B4XPages.MainPage.lat_gps}', CAT_CL_LONG = '${B4XPages.MainPage.lon_gps}', CAT_CL_GIRO = '${cb_giro.SelectedItem}', CAT_CL_NOMBRE = '${Subs.escapeSQLString(et_nombre.Text)}', CAT_CL_CALLE1 = '${Subs.escapeSQLString(et_direccion.text)}', CAT_CL_ENVIO_PENDIENTE = 1, LAT_CENSADOR = '${B4XPages.MainPage.lat_gps}', LON_CENSADOR = '${B4XPages.MainPage.lon_gps}', CAMPOS_MODIFICADOS = '${Subs.list2string(camposModificados)}' where CAT_CL_CODIGO In (select cuenta from cuentaa)"$) + Else + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO, CAT_CL_RUTA, CAT_CL_NOMBRE, CAT_CL_CALLE1, CAT_CL_LAT, CAT_CL_LONG, CAT_CL_FECHA_CAPTURA, CAT_CL_DIAS_VISITA, CAT_CL_ENVIO_PENDIENTE) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1) ", Array As Object (no_cliente, no_ruta, et_nombre.Text, et_direccion.Text, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, DateNC, Starter.dia_semana)) + End If + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(no_cliente)) + ALMACEN = Subs.traeAlmacen + +' If fototomada <> "" And fototomada <> Null Then + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_FOTO_CLIENTE(CODIGO, ALMACEN, RUTA, NOM_FOTO, ENVIO_PENDIENTE) VALUES(?,?,?,?,1)", Array As Object(no_cliente, ALMACEN, no_ruta, fototomada)) + Log($"${no_cliente}, ${ALMACEN}, ${no_ruta}, ${fototomada}"$) +' End If + + mandaPendientesNuevosClientes + cargarCliente = False + B4XPages.ShowPage("Principal") + fototomada = "" + et_nombre.Text = "" + et_direccion.Text = "" + End If +End Sub + +Private Sub p_nuevoCliente_Click + +End Sub + +Private Sub b_foto_inci_Click + b_guardar.Enabled = False + camEx2.TakePicture + p_camara.Visible = False +' StopCamera2 +End Sub + +Private Sub InitializeCamera2 + rp.CheckAndRequest(rp.PERMISSION_CAMERA) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + If Result Then + camEx2.Initialize(p_cam, frontCamera, Me, "Camera1") + frontCamera = camEx2.Front + If logger Then Log("inicializamos Camara") + Else + ToastMessageShow("Sin permisos de camara!!!", True) + End If +' rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE) +' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' If Result Then +' Log("Con permisos para escritura") +' Else +' ToastMessageShow("Sin permisos de escritura externa.", True) +' End If +' +' rp.CheckAndRequest(rp.PERMISSION_READ_EXTERNAL_STORAGE) +' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' If Result Then +' Log("Con permisos de lectura") +' Else +' ToastMessageShow("Sin permisos de lectura externa!", True) +' End If +End Sub + +Sub Camera1_Ready (Success As Boolean) + If logger Then Log("Camara ready") + If Success Then + camEx2.SetJpegQuality(90) + camEx2.SetContinuousAutoFocus + camEx2.CommitParameters + camEx2.StartPreview + If logger Then Log(camEx2.GetPreviewSize) + Else + ToastMessageShow("Cannot open camera.", True) + Log("Cannot open camera") + End If +End Sub + +Sub Camera1_PictureTaken (Data()As Byte) + If logger Then Log("tome foto") + Dim filename As String = fototomada + Dim Dirp As String = File.DirInternal + Dim Dir As String + Dim Dir2 As String + Try + File.MakeDir(Dirp,"/promotoriakmts") + Dir = "/promotoriakmts" + Log("creado en promotoria " & Dirp & Dir) + Catch + Dir = "" + Log("creado en raiz") + End Try + Try + File.MakeDir(Dirp & Dir,"/reduccion") + Dir2 = "/reduccion" + If logger Then Log("creado en promotoria " & Dirp & Dir & Dir2) + Catch + Dir2 = "" + If logger Then Log("creado en raiz") + End Try + camEx2.SavePictureToFile(Data, Dirp&Dir, filename) + camEx2.StartPreview 'restart preview + Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 400, 550, True) + Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False) + img.WriteToStream(out, 100, "PNG") + out.Close +' ImageView8.Bitmap = LoadBitmap(File.DirInternal & Dir & Dir2,nombrefoto7) + ToastMessageShow("Picture saved." & CRLF & "File size: " & File.Size(Dir, filename) & Dir &"," & filename, True) + If logger Then Log("Picture saved." & CRLF & "File size: " & File.Size(Dir, filename) & Dir &"," & filename) + p_camara.Visible = False + StopCamera2 + b_guardar.Enabled = True +End Sub + +Private Sub StopCamera2 +' Capturing = False + If logger Then Log("ENTRAMOS STOPCAMERA2") + If logger Then Log(camEx2.IsInitialized) + If camEx2.IsInitialized Then + If logger Then Log("RELEASE CAMERA") + camEx2.Release + End If +End Sub + +Private Sub B_FOTO_Click + DateTime.DateFormat="ddMMyyyyHHmmss" + ime.HideKeyboard + InitializeCamera2 + Subs.centraPanel(p_cam, Root.Width) + Subs.panelVisible(p_camara, 0, 0) + p_camara.Width = Root.Width + Subs.centraBoton(b_foto_inci, Root.Width) + fototomada = DateTime.Now & "_cliente.jpg" + Log(fototomada) +End Sub + +Sub B4XPage_CloseRequest As ResumableSub + Log("CloseRequest NC") + StopCamera2 + CallSubDelayed(Tracker, "StartFLP") + If p_camara.Visible Then + p_camara.Visible = False + Else + B4XPages.ShowPage("Principal") + End If + Return False +End Sub + +Private Sub b_ubicacion_Click + ToastMessageShow("Buscando ubicación", False) + b_ubicacion.Text = "Buscando ubicación ..." + CallSubDelayed(Tracker, "StartFLPSmall") +End Sub + +Sub JobDone(Job As HttpJob) + Log(Job.Success) + If Job.Success = False Then + 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 + Dim resultado As DBResult = reqManager.HandleJob(Job) + 'Modificamos la bandera de pendiente en kmt_info + If resultado.Tag.As(String).IndexOf("guardaClienteNuevo_") > -1 Then + Private cliente As String= resultado.Tag + cliente = cliente.SubString(cliente.IndexOf("_")+1) +' Log($"Cliente: ${cliente}"$) + B4XPages.MainPage.skmt.ExecNonQuery($"update kmt_info set CAT_CL_ENVIO_PENDIENTE = 0 where CAT_CL_CODIGO = '${cliente}'"$) + Log($"Cliente: ${cliente} - PENDIENTE A CERO"$) + B4XPages.MainPage.skmt.ExecNonQuery($"update HIST_FOTO_CLIENTE set ENVIO_PENDIENTE = 0 where CODIGO = '${cliente}'"$) + Subs.logJobDoneResultados(resultado) + End If + 'Modificamos la bandera de pendiente en fotos + If resultado.Tag.As(String).IndexOf("insertFotoCN_") > -1 Then + Subs.logJobDoneResultados(resultado) + Private cliente As String= resultado.Tag + cliente = cliente.SubString(cliente.IndexOf("_")+1) + Log($"Cliente: ${cliente} - PENDIENTE A CERO"$) + B4XPages.MainPage.skmt.ExecNonQuery($"update HIST_FOTO_CLIENTE set ENVIO_PENDIENTE = 0 where CODIGO = '${cliente}'"$) + End If + End If + Job.Release + End If +End Sub + +Sub mandaPendientesNuevosClientes + 'Enviamos Pendientes + DateTime.DateFormat = "dd/MM/yyyy HH:mm:ss" + reqManager.Initialize(Me, Starter.server) + Private sDateP As String = DateTime.Date(DateTime.Now) +' c = B4XPages.MainPage.skmt.ExecQuery("SELECT * from kmt_info where CAT_CL_CODIGO like 'NC%' and CAT_CL_ENVIO_PENDIENTE = '1'") + c = B4XPages.MainPage.skmt.ExecQuery("Select kmt_info.*, nom_foto from kmt_info left join HIST_FOTO_CLIENTE on cat_cl_codigo = codigo where CAT_CL_CODIGO like 'NC%' and CAT_CL_ENVIO_PENDIENTE = '1'") + Log($"Cliente Nuevo PENDIENTE: ${c.RowCount}"$) + Dim fotox() As Byte + Dim cmd As DBCommand + Dim Dirp As String = File.DirInternal + Dim Dir As String + Dim Dir2 As String + Dir = "/promotoriakmts" + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Log(c.GetString("NOM_FOTO")) + If c.GetString("NOM_FOTO") <> Null And c.GetString("NOM_FOTO") <> "" And c.GetString("NOM_FOTO") <> "null" Then + Log(File.Exists(Dirp&Dir&Dir2,c.GetString("NOM_FOTO"))) + Log($"${Dirp&Dir&Dir2},${c.GetString("NOM_FOTO")}"$) + fotox = Null + If File.Exists(Dirp&Dir&Dir2,c.GetString("NOM_FOTO")) Then fotox = Bit.InputStreamToBytes(File.OpenInput(Dirp&Dir&Dir2,c.GetString("NOM_FOTO"))) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "guardaClienteNuevo_MARDS" +' TMP_ALMACENID, TMP_RUTA, TMP_USUARIO, TMP_ID_CLIENTE, TMP_NOMBRE, TMP_DOMICILIO, TMP_FECHA_CAPTURA_MOVIL, TMP_FECHA_SINCRONIZACION, TMP_LATITUD, TMP_LONGITUD + cmd.Parameters = Array As Object(Subs.traeAlmacen, c.GetString("CAT_CL_RUTA"), Subs.traeUsuarioDeBD, c.GetString("CAT_CL_CODIGO"), c.GetString("CAT_CL_NOMBRE"), c.GetString("CAT_CL_CALLE1"), c.GetString("CAT_CL_FECHA_CAPTURA"), sDateP, c.GetString("CAT_CL_LAT"), c.GetString("CAT_CL_LONG"), fotox, elGiro, Starter.dia_semana) +' Log($"${c.GetString("CAT_CL_CODIGO")}, ${Subs.traeAlmacen}, ${c.GetString("CAT_CL_LAT")}, ${c.GetString("CAT_CL_LONG")}, ${c.GetString("CAT_CL_SECUENCIA")}, ${c.GetString("CAT_CL_RUTA")}, ${c.GetString("CAT_CL_DIASEMANA")}, ${c.GetString("CAT_CL_GIRO")}, ${c.GetString("CAT_CL_NOMBRE")}, ${c.GetString("CAT_CL_ATIENDE1")}, ${c.GetString("CAT_CL_CALLE")}, ${c.GetString("CAT_CL_NOINT")}, ${c.GetString("CAT_CL_NOEXT")}, ${c.GetString("CAT_CL_CALLE1")}, ${c.GetString("CAT_CL_CRUCE1")}, ${c.GetString("CAT_CL_CALLE2")}, ${c.GetString("CAT_CL_CP")}, ${c.GetString("CAT_CL_COLONIA")}, ${c.GetString("CAT_CL_MUNI")}, ${c.GetString("CAT_CL_EDO")}, ${c.GetString("CAT_CL_ESTATUS")}, ${c.GetString("CAT_CL_FECHA_CAPTURA")}, ${sDate}, ${Subs.traeUsuarioDeBD}"$) + + reqManager.ExecuteCommand(cmd , $"guardaClienteNuevo_${c.GetString("CAT_CL_CODIGO")}"$) + cmd.Initialize + cmd.Name = "guardaClientesNuevosMods_MARDS" + cmd.Parameters = Array As Object(Subs.traeUsuarioDeBD, Subs.traeAlmacen, Subs.traeAlmacen, c.GetString("CAT_CL_RUTA"), Subs.traeCliente, c.GetString("CAMPOS_MODIFICADOS")) + Log($"${Subs.traeUsuarioDeBD}, ${Subs.traeAlmacen}, ${Subs.traeAlmacen}, ${c.GetString("CAT_CL_RUTA")}, ${Subs.traeCliente}, ${c.GetString("CAMPOS_MODIFICADOS")}"$) + reqManager.ExecuteCommand(cmd , $"guardaClientesNuevosMods_${c.GetString("CAT_CL_CODIGO")}"$) + End If + Next + End If +End Sub + +Private Sub cb_giro_SelectedIndexChanged (Index As Int) + elGiro = cb_giro.SelectedItem + camposModificados.Add("CAT_CL_GIRO") +End Sub + +Private Sub et_nombre_TextChanged (Old As String, New As String) + camposModificados.Add("CAT_CL_NOMBRE") +End Sub + +Private Sub et_direccion_TextChanged (Old As String, New As String) + camposModificados.Add("CAT_CL_CALLE1") +End Sub \ No newline at end of file diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas new file mode 100644 index 0000000..32b23a3 --- /dev/null +++ b/B4A/C_Principal.bas @@ -0,0 +1,1106 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Public rp As RuntimePermissions + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +' Dim conectado As String + Dim t1 As Timer +' Dim sb As StringBuilder +' Dim PHONE As Phone +' Dim g As GPS +' Dim trabajar As Button +' Dim lat_gps, lon_gps As String + Dim ime As IME + Dim c As Cursor + Dim d As Cursor + Dim b As Cursor + Dim e As Cursor + Dim f As Cursor + Dim D2 As Cursor +' Dim lv As ListView + Dim cargar As Button +' Dim pendiente As Button +' Dim foto1() As Byte + Dim usuario As String + Dim connecta As Button + Dim conn As String + Dim b_subir As Button + Dim cmd As DBCommand + Dim TOPE As Int +' Dim COUNT_CLIE As Int + Dim fecha As String + Dim drop As Double + Dim efectiva As Double + Dim L_MONTOD As Label + Dim l_cuantosc As Label + Dim l_drop As Label + Dim l_efectiva As Label + Dim l_ctast As Label + Dim BUSCA As Button + Dim Cuantos As String + Dim l_cuantosn As Label + Dim e_ruta As EditText + Dim l_porvisitar As Label + Dim b_mapa As Button + Dim l_ruta As Label + Dim ALMACEN As String +' Private img2 As ImageView + Dim Listo1 As String + Dim Listo2 As String + Dim Listo3 As String + Dim Listo4 As String + Dim Listo5 As String + Dim EJECUTANDO As String + Dim RES As String + Dim inve As String + Dim cuantos_pedidosc As String + Dim cuantos_pedido As String + Dim cuantos_noventa As String + Dim datos_iguales As String + Dim p As PhoneId + Dim imei As String +' Dim SERVER As String + + Private inv As Button + Private P1 As Panel + Private CLAVE As EditText + Private B_OK_PAS As Button + Dim PASO As String + Private USUARIO1 As EditText + Dim connecta1 As Double + Dim armafolio As String + Private NUEVO As Button + Private S_CC As Label + Private S_CP As Label + Private S_CH As Label + Private PB2 As ProgressBar + Private PB1 As ProgressBar +' Private L_P_1 As Label +' Private L_P_2 As Label +' Private L_P_3 As Label + Private CARGA As String + Private PORCENTAJE As String + Private P_RESUMEN As Panel + Private B_OK_RES As Button + Private Resumen As Button + Private L_CUANTOST As Label + Private img3 As ImageView + + Private ImageView3 As ImageView + Private ImageView5 As ImageView + Private L_TICKPROM As Label + Private L_MARCAS As ListView + Private ImageView9 As ImageView + Private E_RUTA2 As EditText + Private resdia As ImageView + Private hacer_ped As ImageView + Private nvo_cliente As ImageView + Private tickets_dia As ImageView + + Private l_monto_ks As Label + Private l_monto_kp As Label + Private l_monto_k As Label + + Private l_monto_c1 As Label + Private l_monto_c2 As Label + Private l_monto_c3 As Label + + Private l_encuesta As Label + + Private bpv1 As BatteryProgressView + Dim batterystatus(11) As Int + Private bu As BatteryUtilities + + Private Panel4 As Panel + Private L_NES As Label + Private L_REAL As Label + Private L_ALCANCE As Label + Private L_VPLAN As Label + Private L_VREAL As Label + Private L_EFEC_VIS As Label + Private L_VISITCC As Label + Private L_EFEC_PV As Label + Private L_EFEC_PURA As Label + Private L_CTE_PROMO As Label + Private L_REDEN_PROMO As Label + Private L_LIN_TICK As Label + Private SCROLL_RESDIA As ScrollView + Private L_ACUMULADO As Label + Private L_UNILEVER As Label + Private L_RECHAZOP As Label + Private L_RECHAZOM As Label + Private L_VTA_3MES As Label + Private L_VTA_2MES As Label + Private L_VTA_1MES As Label + Private L_MES_PY As Label + Private L_FREC_DE_CREAL As Label + Private L_FREC_DE_COBJ As Label + Private L_COB_VISIT As Label + Private L_VISIT_REAL As Label + Private L_VISIT_PLAN As Label + Private L_ECO As Label + Private L_COB_CCC As Label + Private L_CTES As Label + Private L_VPO_VTA As Label + Private L_VPO_OBJ As Label + Private L_DS_VTA As Label + Private L_DS_OBJ As Label + Private L_DRA_VTA As Label + Private L_DRA_OBJ As Label + Private L_ALCANCEM As Label + Private L_TENDENCIA As Label + Private L_VTA_ACUM As Label + Private L_OBJ_MES As Label + Private L_DS_OBJD As Label + Private L_DS_VTAD As Label + Private LPT As String + Private STEYIN As String + Private STEYOUT As String + + Private L_PRIO As Label + Private L_SECUND As Label + Private L_COMP As Label + + + Private stay_hh As String + Private stay_mi As String + Private stay_ss As String + + Dim sDate,sTime As String + Dim HORAINGRESO As String + + Private L_QUALA As Label + Private L_FERRERO As Label + Private L_SANMARCOS As Label + Private L_CAMPARI As Label + Private L_IBERIA As Label + Private L_BEPENSA As Label + Private L_SCJ As Label + Private L_MEDJ As Label + Private L_DURACELL As Label + Private L_GUNA As Label + Private L_KIMB As Label + Private L_TRESM As Label + Private L_REDB As Label + Private Btn_Ubicar As Button + Private B_COMM As Button + Private L_TOTAL_MM As Label + Private L_TOTAL_VIVE As Label + Private L_TOTAL_GUNA As Label + Private L_TOTAL_BA As Label + Private L_TOTAL_COMIS As Label + Private L_TOTAL_MM_1 As Label + Private L_TOTAL_VIVE_1 As Label + Private L_TOTAL_GUNA_1 As Label + Private L_TOTAL_BA_1 As Label + Private L_TOTAL_COMIS_1 As Label + Private B_OK_COMISS As Button + Private Panel_C As Panel + + Private TitleHeight As Int = 50dip + Private Title2Height As Int = 100dip + + Private DividerHeight As Int = 5dip + Private CLV1 As CustomListView + Private pnlTitle As B4XView + Private xui As XUI + Type TitleData (Title As String) + + Private B_MARCAS As Button + Private Panel5 As Panel + Private lblTitle As Label + Private B_OK_PANEL5 As Button + + Private p_principal As Panel +' Private p_mandaInfo As Panel + Private L_CARGARDIA As Label + Private LV_DIAV As ListView + Dim reqs As List + Private p_botones As Panel + Dim l_dia As Label + Private b_clientes As Button + Private ImageView1 As ImageView + Private p_resDiaSombra As Panel + Private b_resumenDia As Button + Private p_resumenDia As Panel + Dim l_nuevos_c As Label + Dim l_nuevos_p As Label + Dim l_visitados As Label + Dim l_total As Label + Dim mapTiempos As Map +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("principal") + EJECUTANDO=1 + Dim ruta As String +' img2.Visible = False + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If +' DateTime.DateFormat = "MM/dd/yyyy" +' fecha=DateTime.Date(DateTime.Now) + B4XPages.MainPage.skmt.Initialize(ruta,"kmt.db", True) +' b=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from pedido_cliente") +' b.Position=0 +' Cuantos = b.GetString("CUANTOS") +' b.Close +' d=B4XPages.MainPage.skmt.ExecQuery("select count(*) as TOTAL_VISITAR from kmt_info where gestion = 0") +' d.Position=0 +' e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as POR_VISITAR from kmt_info") +' e.Position=0 +' f=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CAT_CL_RUTA from kmt_info") +' f.Position=0 +' l_ruta.Text = f.GetString("CAT_CL_RUTA") +' f.Close +' If l_ruta.Text = 0 Then +' l_ruta.Text =0 +' Else +' f=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA, CAT_CL_DIASEMANA from kmt_info limit 1") +' f.Position=0 +' l_ruta.Text = f.GetString("CAT_CL_RUTA") +' l_dia.Text = f.GetString("CAT_CL_DIASEMANA") +' f.Close +' End If +' If Cuantos = 0 Then +' L_MONTOD.Text =0 +' l_cuantosc.Text = 0 +' l_cuantosn.Text = 0 +' drop = 0 +' l_drop.Text = 0 +' efectiva = 0 +' l_efectiva.text =0 +' l_ctast.Text = d.GetString("TOTAL_VISITAR") +' l_porvisitar.Text = e.GetString("POR_VISITAR") +' Else +' c=B4XPages.MainPage.skmt.ExecQuery("select sum(pc_monto) as MONTO_DIA, count(pc_cliente) AS CLIENTES_DIA from pedido_cliente ") +' b=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS from noventa") +' 'where pc_fecha = ?", Array As String(fecha) +' c.Position=0 +' b.Position=0 +' L_MONTOD.Text = c.GetString("MONTO_DIA") +' l_cuantosc.Text = c.GetString("CLIENTES_DIA") +' l_cuantosn.Text = b.GetString("CUANTOS") +' drop = c.GetString("MONTO_DIA") / c.GetString("CLIENTES_DIA") +' l_drop.Text = Round2(drop,2) +' efectiva = c.GetString("CLIENTES_DIA") / e.GetString("POR_VISITAR") +' l_efectiva.text = Round2(efectiva*100,2) +' l_ctast.Text = d.GetString("TOTAL_VISITAR") +' l_porvisitar.Text = e.GetString("POR_VISITAR") +' b.Close +' c.Close +' End If +' d.Close +' e.Close + Private ds As Cursor = B4XPages.MainPage.skmt.ExecQuery("select cat_cl_diasemana from kmt_info") + If ds.RowCount > 0 Then + ds.Position = 0 + Starter.dia_semana = ds.GetString("CAT_CL_DIASEMANA") + End If +' CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") +End Sub + +Sub B4XPage_Appear + mapTiempos.Initialize + HORAINGRESO ="000000" + reqs.Initialize + B4XPages.SetTitle(Me, $"Principal"$) +' Btn_Ubicar.Left = (Root.Width/2) - (Btn_Ubicar.Width/2) +' B4XPages.MainPage.reqManager.Initialize(Me, B4XPages.MainPage.SERVER) + PASO = 0 + connecta.Visible = True + cargar.Visible = False + b_subir.Visible = False + Subs.centraPanel(p_botones, Root.Width) + 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 + If c.GetString("CUANTOS") = 0 Then + cmd.Initialize + cmd.Name = "select_fecha" + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "fecha") + 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 + DateTime.DateFormat = "yyyyMMdd" + 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 + B4XPage_Appear + End If + c.Close + End If + c.Close + DateTime.DateFormat = "MM/dd/yyyy" + fecha=DateTime.Date(DateTime.Now) + + d=B4XPages.MainPage.skmt.ExecQuery("select count(*) as TOTAL from kmt_info") + d.Position=0 + l_total.Text = d.GetString("TOTAL") + d.Close + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as POR_VISITAR from kmt_info where gestion = 0 and CAT_CL_CODIGO not like 'NC%'") + e.Position=0 + l_porvisitar.Text = e.GetString("POR_VISITAR") + e.Close + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as VISITADOS from kmt_info where gestion = 11") + e.Position=0 + l_visitados.Text = e.GetString("VISITADOS") + e.Close + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as NUEVOS_P from kmt_info where CAT_CL_CODIGO like 'N%' and CAT_CL_CODIGO not like 'NC%'") + e.Position=0 + l_nuevos_p.Text = e.GetString("NUEVOS_P") + e.Close + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as NUEVOS_C from kmt_info where CAT_CL_CODIGO like 'NC%'") + e.Position=0 + l_nuevos_c.Text = e.GetString("NUEVOS_C") + e.Close + f=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA, CAT_CL_DIASEMANA from kmt_info limit 1") + l_ruta.Text = "0" + l_dia.Text = "NINGUNA" + If f.RowCount > 0 Then + f.Position = 0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + l_dia.Text = f.GetString("CAT_CL_DIASEMANA") + End If + f.Close + c.Close +' b.Close + ALMACEN = Subs.traeAlmacen + 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.batt = batterystatus(0) + B4XPages.MainPage.ALMACEN = ALMACEN + usuario = Subs.traeUsuarioDeBD + B4XPages.MainPage.usuario = usuario + c.Close + CallSub(Starter, "ENVIA_ULTIMA_GPS") +End Sub + +Sub b_subir_Click +' Hay que meter los datos a TMP_CLIENTES_CENSOS +' las fechas van asi: dd/mm/yyyy hh24:mi:ss + CARGA = "SUBIR" + PASO = 1 + If PASO = 1 Then + ProgressDialogShow("Enviando información pendiente!!") + Sleep(700) + 'fotos cliente nuevo + c = B4XPages.MainPage.skmt.ExecQuery("Select CODIGO, ALMACEN, RUTA, NOM_FOTO from HIST_FOTO_CLIENTE where ENVIO_PENDIENTE = 1") + If c.RowCount > 0 Then + c.Position = 0 + Dim fotox() As Byte + Dim cmd As DBCommand + Dim Dirp As String = File.DirInternal + Dim Dir As String + Dim Dir2 As String + Dir = "/promotoriakmts" + For i = 0 To c.RowCount - 1 + c.Position = i + Log(File.Exists(Dirp&Dir&Dir2,c.GetString("NOM_FOTO"))) + Log($"${Dirp&Dir&Dir2},${c.GetString("NOM_FOTO")}"$) + fotox = Bit.InputStreamToBytes(File.OpenInput(Dirp&Dir&Dir2,c.GetString("NOM_FOTO"))) + cmd.Initialize + cmd.Name = "insert_fotos_cliente_nuevo_MARIANA" + cmd.Parameters = Array As Object(c.GetString("CODIGO"),c.GetString("ALMACEN"),c.GetString("RUTA"), fotox) + Log($"${c.GetString("CODIGO")}, ${c.GetString("ALMACEN")}, ${c.GetString("RUTA")}"$) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd, $"insert_clientes_${c.GetString("CODIGO")}"$) + Next + c.Close + End If + + B4XPages.MainPage.cliente.mandaPendientes + B4XPages.MainPage.nuevoCliente.mandaPendientesNuevosClientes + ProgressDialogHide + ToastMessageShow("Información enviada", True) + End If +End Sub + +Sub cargar_Click + ProgressDialogShow("Descargando clientes, por favor espere.") + CARGA = "CARGAR" + EJECUTANDO = 1 + + 'c=skmt.ExecQuery("CREATE TABLE kmt_info (pr_cd_credito NUMERIC,pr_cd_nombre TEXT,pr_cd_calle TEXT,pr_cd_numero TEXT,pr_cd_num_int TEXT,pr_cd_entrecalle1 TEXT,pr_cd_entrecalle2 TEXT,pr_cd_colonia TEXT,pr_cd_poblacion TEXT,pr_cd_edo TEXT,pr_cd_cp TEXT,pr_cd_zona TEXT,pr_cf_credito NUMERIC,pr_cf_saldotot NUMERIC,pr_cf_saldooper NUMERIC,pr_cf_saldof1 NUMERIC, pr_cf_penalizacion NUMERIC)") + TOPE = 0 +' NUEVOS CLIENTE + + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info") + B4XPages.MainPage.skmt.ExecNonQuery("delete from hist_gest") + + c = B4XPages.MainPage.skmt.ExecQuery2("select count(CAT_VA_DESCRIPCION) as HoraIngreso from cat_variables where CAT_VA_DESCRIPCION = ? ", Array As String("HoraIngreso")) + c.Position = 0 + DateTime.TimeFormat = "HHmmss" + 'Valida si ya se cuenta con hora actualiza el valor si no lo inserta----------- + If c.GetString("HoraIngreso") > 0 Then + B4XPages.MainPage.skmt.ExecNonQuery2("Update cat_variables set CAT_VA_VALOR = ? WHERE CAT_VA_DESCRIPCION = ?" , Array As String(DateTime.Time(DateTime.Now),"HoraIngreso")) + Else + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_VALOR,CAT_VA_DESCRIPCION) VALUES (?,?)" , Array As String(DateTime.Time(DateTime.Now),"HoraIngreso")) + End If + c.Close + DateTime.TimeFormat = "HH:mm:ss" + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close +' + Dim sDate, sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + + Dim P As PhoneId +' imei = P.GetDeviceId + imei = "QqQq" + cmd.Initialize + cmd.Name ="insert_drop_MARDS_2" + cmd.Parameters = Array As Object(usuario,e_ruta.text,sDate,"CENSOS",sTime,"","","","","CARGA",ALMACEN) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_drop") + mapTiempos.Put($"ins_drop"$, DateTime.now) +' reqs.Add("ins_drop") + + cmd.Initialize + cmd.Name = "select_cat_clientes_MARDS_C" + cmd.Parameters = Array As Object(L_CARGARDIA.TEXT,e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "kmt_datos") + reqs.Add("kmt_datos") + mapTiempos.Put($"kmt_datos"$, DateTime.now) + + cmd.Initialize + cmd.Name = "selectClientesNuevosCensos" + Private diaSemana As String = L_CARGARDIA.Text.ToLowerCase + If diaSemana = "miercoles" Then diaSemana = "miércoles" + cmd.Parameters = Array As Object(diaSemana, e_ruta.text, ALMACEN) + Log($"${diaSemana}, ${e_ruta.text}, ${ALMACEN}"$) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "clientes_nuevos") + reqs.Add("clientes_nuevos") + mapTiempos.Put($"clientes_nuevos"$, DateTime.now) + +' LogColor("Traemos GIROS", Colors.red) + cmd.Initialize + cmd.Name ="select_cat_GIRO_MARDS" + cmd.Parameters = Array As Object(usuario,e_ruta.text,sDate,"CENSOS",sTime,"","","","","CARGA",ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "giros") + mapTiempos.Put($"giros"$, DateTime.now) +' reqs.Add("giros") + + cargar.Visible = False + b_subir.Visible = False +' inv.Visible = False + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Se Actualizaran los datos, este proceso podria tardar hasta un minuto, gracias" , True) +End Sub + +Sub JobDone(Job As HttpJob) +' If Job.JobName = "DBRequest" Then +' Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) +' Log($"Tag: ${RESULT.tag}, success=${Job.Success}"$) +' End If + Log("JobDone Principal") + If Job.Success = False Then + 'ToastMessageShow("Error: " & Job.ErrorMessage, True) + If Job.ErrorMessage = "STREAM" Then + If CARGA = "SUBIR" Then + PB2.Progress = PB2.Progress + PORCENTAJE + S_CP.Text = "SUBIENDO" + If PB2.Progress > 99 Then + S_CP.Text = "VALIDANDO" + End If + End If + End If + Else 'If Job Success then ... + LogColor("JobDone: '" & B4XPages.MainPage.reqManager.HandleJob(Job).tag & "' - Registros: " & B4XPages.MainPage.reqManager.HandleJob(Job).Rows.Size, Colors.Magenta) 'Mod por CHV - 211027 + 'Verificamos que el usuario guardado en BD sea VALIDO. + Private inicioCont As Int + Log($"Inicia ${B4XPages.MainPage.reqManager.HandleJob(Job).tag}"$) + Private elTag = B4XPages.MainPage.reqManager.HandleJob(Job).tag + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + + If RESULT.Tag = "usuarioA" Then 'query tag + Private n As String = "Sin Usuario" + For Each records() As Object In RESULT.Rows + n = records(RESULT.Columns.Get("USUARIO")) + Next + LogColor("**************************"&n, Colors.Green) + If n = "OKActivo" Then + Log("Usuario guardado en BD es 'Valido'") + Else If n = "OKExpirado" Then + Msgbox("Usuario Expirado llamar al administrador","") 'ignore + B4XPages.ShowPage("B4XMainPage") + Else If n = "OKCancelado" Then + Msgbox("Usuario Cancelado llamar al administrador","") 'ignore + B4XPages.ShowPage("B4XMainPage") + Else + Msgbox("Usuario o password No validos","") 'ignore + B4XPages.ShowPage("B4XMainPage") + End If + Log("***************** "&n) + End If + + If RESULT.Tag = "kmt_datos" Then 'query tag +' Subs.logJobDoneResultados(RESULT) + If reqs.IndexOf("kmt_datos") > -1 Then + reqs.RemoveAt(reqs.IndexOf("kmt_datos")) + End If + connecta.Visible = True +' S_CC.TEXT = "CARGANDO" + For Each records() As Object In RESULT.Rows + Dim CAT_CL_CODIGO As String = records(RESULT.Columns.Get("CAT_CL_CODIGO")) + Dim CAT_CL_RUTA As String = records(RESULT.Columns.Get("CAT_CL_RUTA")) + Dim CAT_CL_NOMBRE As String = records(RESULT.Columns.Get("CAT_CL_NOMBRE")) + Dim CAT_CL_ATIENDE1 As String = records(RESULT.Columns.Get("CAT_CL_ATIENDE1")) + Dim CAT_CL_ATIENTE2 As String = records(RESULT.Columns.Get("CAT_CL_ATIENTE2")) + Dim CAT_CL_TELEFONO As String = records(RESULT.Columns.Get("CAT_CL_TELEFONO")) + Dim CAT_CL_EMAIL As String = records(RESULT.Columns.Get("CAT_CL_EMAIL")) + Dim CAT_CL_CALLE As String = records(RESULT.Columns.Get("CAT_CL_CALLE")) + Dim CAT_CL_NOEXT As String = records(RESULT.Columns.Get("CAT_CL_NOEXT")) + Dim CAT_CL_NOINT As String = records(RESULT.Columns.Get("CAT_CL_NOINT")) + Dim CAT_CL_CALLE1 As String = records(RESULT.Columns.Get("CAT_CL_CALLE1")) + Dim CAT_CL_CALLE2 As String = records(RESULT.Columns.Get("CAT_CL_CALLE2")) + Dim CAT_CL_CRUCE1 As String = records(RESULT.Columns.Get("CAT_CL_CRUCE1")) + Dim CAT_CL_COLONIA As String = records(RESULT.Columns.Get("CAT_CL_COLONIA")) + Dim CAT_CL_MUNI As String = records(RESULT.Columns.Get("CAT_CL_MUNI")) + Dim CAT_CL_EDO As String = records(RESULT.Columns.Get("CAT_CL_EDO")) + Dim CAT_CL_CP As String = records(RESULT.Columns.Get("CAT_CL_CP")) + Dim CAT_CL_LONG As String = records(RESULT.Columns.Get("CAT_CL_LONG")) + Dim CAT_CL_LAT As String = records(RESULT.Columns.Get("CAT_CL_LAT")) + Dim CAT_CL_MTOCOMPRA As String = records(RESULT.Columns.Get("CAT_CL_MTOCOMPRA")) + Dim CAT_CL_NUM_SERIEFISICO As String = records(RESULT.Columns.Get("CAT_CL_NUM_SERIEFISICO")) + Dim CAT_CL_DIASEMANA As String = records(RESULT.Columns.Get("CAT_CL_DIAS_VISITA")) + Dim CAT_CL_SECUENCIA As Int = records(RESULT.Columns.Get("CAT_CL_SECUENCIA")) + Dim CAT_CL_ESTATUS As String = records(RESULT.Columns.Get("CAT_CL_ESTATUS")) + Dim CAT_CL_GIRO As String = records(RESULT.Columns.Get("CAT_CL_GIRO")) + Dim CAT_CL_FECHA_CAPTURA As String = records(RESULT.Columns.Get("CAT_CL_FALTA")) +' Dim CAT_CL_FECHA_CAPTURA As String = "26/04/23" + Starter.dia_semana = CAT_CL_DIASEMANA + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, gestion, CAT_CL_DIASEMANA, CAT_CL_SECUENCIA, CAT_CL_ESTATUS, CAT_CL_ENVIO_PENDIENTE, CAT_CL_GIRO, NUEVO, CAT_CL_FECHA_CAPTURA) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,?,?,?,0,?,0,?)", Array As Object (CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, CAT_CL_DIASEMANA, CAT_CL_SECUENCIA, CAT_CL_ESTATUS, CAT_CL_GIRO, CAT_CL_FECHA_CAPTURA)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (CAT_CL_CODIGO)) + l_ruta.Text = records(RESULT.Columns.Get(("CAT_CL_RUTA"))) +' LogColor($"${CAT_CL_CODIGO}, ${CAT_CL_NOMBRE}"$, Colors.Magenta) + Next + Listo1 = 1 +' S_CC.Text = "LISTO" + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Catalogo Clientes Actualizados." , True) + l_dia.Text = L_CARGARDIA.text +' If Listo1 = 1 And Listo2 = 1 And Listo3 = 1 And Listo4 = 1 Then +' B4XPage_Appear +' img2.Visible=False +' EJECUTANDO = 0 +' End If + End If + + 'GIROS + If RESULT.Tag = "giros" Then +' Subs.logJobDoneResultados(RESULT) + B4XPages.MainPage.skmt.ExecNonQuery($"delete from CAT_GIROS"$) + For Each records() As Object In RESULT.Rows + B4XPages.MainPage.skmt.ExecNonQuery($"insert into CAT_GIROS (id, descripcion) values ('${records(RESULT.Columns.Get("CAT_GR_ID"))}', '${records(RESULT.Columns.Get("CAT_GR_DESC"))}')"$) + Next + End If + + 'NUEVOS + If RESULT.Tag = "clientes_nuevos" Then + For Each records() As Object In RESULT.Rows + Dim CAT_CL_CODIGO As String = records(RESULT.Columns.Get("HCC_ID_CLIENTE")) + Dim CAT_CL_RUTA As String = records(RESULT.Columns.Get("HCC_RUTA")) + Dim CAT_CL_CEDIS As String = records(RESULT.Columns.Get("HCC_ALMACENID")) + Dim CAT_CL_NOMBRE As String = records(RESULT.Columns.Get("HCC_NOMBRE")) + Dim CAT_CL_CALLE1 As String = records(RESULT.Columns.Get("HCC_DOMICILIO")) + Dim CAT_CL_LONG As String = records(RESULT.Columns.Get("HCC_LONGITUD")) + Dim CAT_CL_LAT As String = records(RESULT.Columns.Get("HCC_LATITUD")) + Dim CAT_CL_FECHA_CAPTURA As String = records(RESULT.Columns.Get("HCC_FECHA_CAPTURA_MOVIL")) + Dim CAT_CL_ESTATUS As String = records(RESULT.Columns.Get("HCC_ESTATUS")) + Dim CAT_CL_GIRO As String = records(RESULT.Columns.Get("HCC_GIRO")) + Dim CAT_CL_FOTO As String = records(RESULT.Columns.Get("HCC_FOTO")) + Dim CAT_CL_DIASEMANA As String = records(RESULT.Columns.Get("DIASEMANA")).As(String).ToUpperCase + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, gestion, CAT_CL_DIASEMANA, CAT_CL_SECUENCIA, CAT_CL_ESTATUS, CAT_CL_ENVIO_PENDIENTE, CAT_CL_GIRO, NUEVO, CAT_CL_FECHA_CAPTURA) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,?,?,?,0,?,0,?)", Array As Object (CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, CAT_CL_DIASEMANA, CAT_CL_SECUENCIA, CAT_CL_ESTATUS, CAT_CL_GIRO, CAT_CL_FECHA_CAPTURA)) +' LogColor($"${CAT_CL_CODIGO}, ${CAT_CL_NOMBRE}"$, Colors.blue) + Next + reqs.RemoveAt(reqs.IndexOf("clientes_nuevos")) + End If + + If RESULT.Tag = "resum_apk" Then 'query tag + Subs.logJobDoneResultados(RESULT) + For Each records() As Object In RESULT.Rows + Dim HIST_RA_OBJMES As String = records(RESULT.Columns.Get("HIST_RA_OBJMES")) + Dim HIST_RA_VENTA As String = records(RESULT.Columns.Get("HIST_RA_VENTA")) + Dim HIST_RA_TENDENCIA As String = records(RESULT.Columns.Get("HIST_RA_TENDENCIA")) + Dim HIST_RA_ALCANCE As String = records(RESULT.Columns.Get("HIST_RA_ALCANCE")) + Dim HISR_RA_DRAOBJ As String = records(RESULT.Columns.Get("HISR_RA_DRAOBJ")) + Dim HIST_RA_DRAVTA As String = records(RESULT.Columns.Get("HIST_RA_DRAVTA")) + Dim HIST_RA_DSOBJ As String = records(RESULT.Columns.Get("HIST_RA_DSOBJ")) + Dim HIST_RA_DSVTA As String = records(RESULT.Columns.Get("HIST_RA_DSVTA")) + Dim HIST_RA_VPOOBJ As String = records(RESULT.Columns.Get("HIST_RA_VPOOBJ")) + Dim HIST_RA_VPOVTA As String = records(RESULT.Columns.Get("HIST_RA_VPOVTA")) + Dim HIST_RA_CTES As String = records(RESULT.Columns.Get("HIST_RA_CTES")) + Dim HIST_RA_COBCCC As String = records(RESULT.Columns.Get("HIST_RA_COBCCC")) + Dim HIST_RA_ECO As String = records(RESULT.Columns.Get("HIST_RA_ECO")) + Dim HIST_RA_VISITPLAN As String = records(RESULT.Columns.Get("HIST_RA_VISITPLAN")) + Dim HIST_RA_VISIREAL As String = records(RESULT.Columns.Get("HIST_RA_VISIREAL")) + Dim HIST_RA_COBVISIT As String = records(RESULT.Columns.Get("HIST_RA_COBVISIT")) + Dim HIST_RA_FRECCOMPOBJ As String = records(RESULT.Columns.Get("HIST_RA_FRECCOMPOBJ")) + Dim HIST_RA_FRECCOMREAL As String = records(RESULT.Columns.Get("HIST_RA_FRECCOMREAL")) + Dim HIST_RA_VENTAMES1 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES1")) + Dim HIST_RA_VENTAMES2 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES2")) + Dim HIST_RA_VENTAMES3 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES3")) + Dim HIST_RA_VENTAMES4 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES4")) + Dim HIST_RA_RECHAZO As String = records(RESULT.Columns.Get("HIST_RA_RECHAZO")) + Dim HIST_RA_RECHAZOPORCEN As String = records(RESULT.Columns.Get("HIST_RA_RECHAZOPORCEN")) + Dim HIST_RA_SEMANA1 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1")) + Dim HIST_RA_SEMANA1_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1_DIAS")) + Dim HIST_RA_SEMANA1_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1_DRA")) + Dim HIST_RA_SEMANA2 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2")) + Dim HIST_RA_SEMANA2_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2_DIAS")) + Dim HIST_RA_SEMANA2_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2_DRA")) + Dim HIST_RA_SEMANA3 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3")) + Dim HIST_RA_SEMANA3_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3_DIAS")) + Dim HIST_RA_SEMANA3_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3_DRA")) + Dim HIST_RA_SEMANA4 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4")) + Dim HIST_RA_SEMANA4_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4_DIAS")) + Dim HIST_RA_SEMANA4_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4_DRA")) + Dim HIST_RA_SEMANA5 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5")) + Dim HIST_RA_SEMANA5_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5_DIAS")) + Dim HIST_RA_SEMANA5_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5_DRA")) + Dim HIST_RA_SEMANA1_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1_LPT")) + Dim HIST_RA_SEMANA2_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2_LPT")) + Dim HIST_RA_SEMANA3_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3_LPT")) + Dim HIST_RA_SEMANA4_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4_LPT")) + Dim HIST_RA_SEMANA5_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5_LPT")) + Dim HIST_RA_RUTA As String = records(RESULT.Columns.Get("HIST_RA_RUTA")) + Dim HIST_RA_IDALMACEN As String = records(RESULT.Columns.Get("HIST_RA_IDALMACEN")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_RESUM_APK(HIST_RA_OBJMES,HIST_RA_VENTA,HIST_RA_TENDENCIA,HIST_RA_ALCANCE,HISR_RA_DRAOBJ,HIST_RA_DRAVTA,HIST_RA_DSOBJ,HIST_RA_DSVTA,HIST_RA_VPOOBJ,HIST_RA_VPOVTA,HIST_RA_CTES,HIST_RA_COBCCC,HIST_RA_ECO,HIST_RA_VISITPLAN,HIST_RA_VISIREAL,HIST_RA_COBVISIT,HIST_RA_FRECCOMPOBJ,HIST_RA_FRECCOMREAL,HIST_RA_VENTAMES1,HIST_RA_VENTAMES2,HIST_RA_VENTAMES3,HIST_RA_VENTAMES4,HIST_RA_RECHAZO,HIST_RA_RECHAZOPORCEN,HIST_RA_SEMANA1,HIST_RA_SEMANA1_DIAS,HIST_RA_SEMANA1_DRA,HIST_RA_SEMANA2,HIST_RA_SEMANA2_DIAS,HIST_RA_SEMANA2_DRA,HIST_RA_SEMANA3,HIST_RA_SEMANA3_DIAS,HIST_RA_SEMANA3_DRA,HIST_RA_SEMANA4,HIST_RA_SEMANA4_DIAS,HIST_RA_SEMANA4_DRA,HIST_RA_SEMANA5,HIST_RA_SEMANA5_DIAS,HIST_RA_SEMANA5_DRA,HIST_RA_SEMANA1_LPT,HIST_RA_SEMANA2_LPT,HIST_RA_SEMANA3_LPT,HIST_RA_SEMANA4_LPT,HIST_RA_SEMANA5_LPT,HIST_RA_RUTA,HIST_RA_IDALMACEN) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (HIST_RA_OBJMES,HIST_RA_VENTA,HIST_RA_TENDENCIA,HIST_RA_ALCANCE,HISR_RA_DRAOBJ,HIST_RA_DRAVTA,HIST_RA_DSOBJ,HIST_RA_DSVTA,HIST_RA_VPOOBJ,HIST_RA_VPOVTA,HIST_RA_CTES,HIST_RA_COBCCC,HIST_RA_ECO,HIST_RA_VISITPLAN,HIST_RA_VISIREAL,HIST_RA_COBVISIT,HIST_RA_FRECCOMPOBJ,HIST_RA_FRECCOMREAL,HIST_RA_VENTAMES1,HIST_RA_VENTAMES2,HIST_RA_VENTAMES3,HIST_RA_VENTAMES4,HIST_RA_RECHAZO,HIST_RA_RECHAZOPORCEN,HIST_RA_SEMANA1,HIST_RA_SEMANA1_DIAS,HIST_RA_SEMANA1_DRA,HIST_RA_SEMANA2,HIST_RA_SEMANA2_DIAS,HIST_RA_SEMANA2_DRA,HIST_RA_SEMANA3,HIST_RA_SEMANA3_DIAS,HIST_RA_SEMANA3_DRA,HIST_RA_SEMANA4,HIST_RA_SEMANA4_DIAS,HIST_RA_SEMANA4_DRA,HIST_RA_SEMANA5,HIST_RA_SEMANA5_DIAS,HIST_RA_SEMANA5_DRA,HIST_RA_SEMANA1_LPT,HIST_RA_SEMANA2_LPT,HIST_RA_SEMANA3_LPT,HIST_RA_SEMANA4_LPT,HIST_RA_SEMANA5_LPT,HIST_RA_RUTA,HIST_RA_IDALMACEN)) + Next + Listo1 = 1 +' S_CC.Text = "LISTO" + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Catalogo Resumen Actualizado." , True) + End If + + If RESULT.Tag = "hist_promos" Then 'query tag + Subs.logJobDoneResultados(RESULT) + For Each records() As Object In RESULT.Rows + Dim HP_CLIENTE As String = records(RESULT.Columns.Get("HP_CLIENTE")) + Dim HP_CODIGO_PROMOCION As String = records(RESULT.Columns.Get("HP_CODIGO_PROMOCION")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_PROMOS(HP_CLIENTE, HP_CODIGO_PROMOCION) VALUES (?,?)", Array As Object (HP_CLIENTE, HP_CODIGO_PROMOCION)) + Next + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Historico Promociones Actualizado." , True) + If PB1.Progress = 0 Then + PB1.Progress = 30 + S_CH.Text = "CARGANDO" + ELSE If PB1.Progress = 30 Then + PB1.Progress = 60 + ELSE IF PB1.Progress = 60 Then + PB1.Progress = 100 + S_CH.Text = "LISTO" + End If + End If + + If RESULT.Tag = "hist_cliente_promos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HCCP_CLIENTE As String = records(RESULT.Columns.Get("HCCP_CLIENTE")) + Dim HCCP_PROMO As String = records(RESULT.Columns.Get("HCCP_PROMO")) + Dim HCCP_CANT As String = records(RESULT.Columns.Get("HCCP_CANT")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_CLIENTE_CANT_PROMOS(HCCP_CLIENTE, HCCP_PROMO, HCCP_CANT) VALUES (?,?,?)", Array As Object (HCCP_CLIENTE, HCCP_PROMO,HCCP_CANT)) + Next + If Starter.marcaCel <> "Sony" Then ToastMessageShow(" Historico Clientes Promociones Actualizado." , True) + End If + + If RESULT.Tag = "HIST_MARCAS_CUOTAS" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HMC_MARCA As String = records(RESULT.Columns.Get("HMC_MARCA")) + Dim HMC_TOTAL As String = records(RESULT.Columns.Get("HMC_TOTAL")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_MARCAS_CUOTAS(HMC_MARCA, HMC_TOTAL) VALUES (?,?)", Array As Object (HMC_MARCA, HMC_TOTAL)) + Next + If Starter.marcaCel <> "Sony" Then ToastMessageShow(" Historico Marcas" , True) + End If + + If RESULT.Tag = "ins_pedido" Then 'query tag + For Each records() As Object In RESULT.Rows + PB2.Progress = PB2.Progress + 5 + S_CP.Text = "SUBIENDO" + Next + PB2.Progress = 100 + S_CP.Text = "LISTO" + Log("5") + End If + + If RESULT.Tag = "version" Then 'query tag + For Each records() As Object In RESULT.Rows + B4XPages.MainPage.skmt.ExecNonQuery("delete from VERSION") + Dim CAT_VE_VERSION As String = records(RESULT.Columns.Get("CAT_VE_VERSION")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object (CAT_VE_VERSION)) + Next + End If + + If RESULT.Tag = "count_cli" Then 'query tag + For Each records() As Object In RESULT.Rows +' COUNT_CLIE = records(RESULT.Columns.Get("COUNT_CLIE")) + Next + End If + + If RESULT.Tag = "ruta" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim VALIDO As String = records(RESULT.Columns.Get("VALIDO")) + If VALIDO = "OK" Then + cargar.Visible = True + b_subir.Visible = True +' inv.Visible = True + connecta.Visible = False + If conn = "1" Then + ToastMessageShow("Existe Conexión con el Servidor." , True) + End If + Else + cargar.Visible = False + b_subir.Visible = False +' inv.Visible = False + connecta.Visible = False + ToastMessageShow("Ruta invalida." , True) + End If + Next + End If + + If RESULT.Tag = "usuario" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim name2 As String = records(RESULT.Columns.Get("VALIDO")) + Next + If name2 = "OK" Then + PASO = 1 + End If + P1.Visible = False +' p_mandaInfo.Visible = False + End If + + If RESULT.Tag = "fecha" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim FECHA_HOY As String = records(RESULT.Columns.Get("FECHA")) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FECHA")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FECHA",FECHA_HOY)) + Next + End If + End If + If mapTiempos.Get(elTag) <> Null Then LogColor($"Tiempo ${elTag} - ${DateTime.Now-mapTiempos.Get(elTag)}"$, Colors.red) +' LogColor($"TIEMPO ${elTag} : "$ & ((DateTime.Now-inicioCont)/1000), Colors.red) + End If + Job.Release +' Log(reqs) + If reqs.Size = 0 Then + ProgressDialogHide +' Log(reqs.size) +' Log("Terminamos lo descarga de ruta!") + End If +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + 'Return True to close, False to cancel + If p_resDiaSombra.Visible Then + p_resDiaSombra.Visible = False + Else + B4XPages.ShowPage("login") + End If + Return False +End Sub + +Sub connecta_Click + B4XPages.MainPage.reqManager.Initialize(Me, Starter.server) + connecta1 = connecta1 + 1 + ime.HideKeyboard + imei = "" + conn = "1" + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_version_MARDS" + 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_MARDS_1" + cmd.Parameters = Array As Object(usrT, passT) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "usuarioA") + End If + c.Close + + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_ruta_MARDS_6" + cmd.Parameters = Array As Object(ALMACEN, e_ruta.text,imei) + Log($"almacen: ${ALMACEN}, Ruta: ${e_ruta.text}"$) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ruta") + + If e_ruta.Text = "KMTS1" Then + cargar.Visible = True + b_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" + +' 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) +' End If +End Sub + +Sub BUSCA_Click + B4XPages.ShowPage("TicketsDia") +End Sub + +Sub b_mapa_Click + Log("mapClic") + B4XPages.GetPage("Mapas") +End Sub + +Sub e_ruta_EnterPressed + If e_ruta.Text = "FIN DIA" Then + RES = Msgbox2("Seguro que desea hacer el cierre todos los datos se borraran?","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + e_ruta.Text = "" + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente") + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido") + B4XPages.MainPage.skmt.ExecNonQuery("delete from noventa") + B4XPages.MainPage.skmt.ExecNonQuery("delete from clie_act") + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VENTAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VERIFICACION") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_ENCUESTA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_STAY_OUT") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_FACE") + B4XPages.MainPage.skmt.ExecNonQuery("INSERT INTO HIST_STAY_OUT(HSO_INI, HSO_FIN) VALUES (0,0)") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_CODIGO_BARRAS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_FOTO_CLIENTE") + 'Borramos las fotos del directorio promotoriakmts y reducciones + Private MyList As List = File.ListFiles(File.DirInternal & "/promotoriakmts") + For i= MyList.Size-1 To 0 Step -1 + Private MyFile As String = MyList.Get(i) + Log(MyFile) + File.Delete(File.DirInternal & "/promotoriakmts", MyFile) + Log(File.DirInternal & "/promotoriakmts/" & MyFile) + Next + If File.Exists(File.DirInternal & "/promotoriakmts", "reduccion") Then + Log("SI hay reduccion") + Private MyList As List = File.ListFiles(File.DirInternal & "/promotoriakmts/reduccion") + For i= MyList.Size-1 To 0 Step -1 + Private MyFile As String = MyList.Get(i) + Log(File.DirInternal & "/promotoriakmts/reduccion" & MyFile) + File.Delete(File.DirInternal & "/promotoriakmts/reduccion", MyFile) + Next + Else + Log("NO hay reduccion") + End If + + B4XPage_Appear + End If + End If + If e_ruta.Text = "IWL" Then + ' trabajar.Visible = False +' NUEVO.Visible =False +' BUSCA.Visible=False +' connecta.Visible=False +' img3.Visible =True +' Resumen.Visible= False + End If + If e_ruta.Text = "SUPLENCIA" Then + E_RUTA2.Visible = True + ImageView9.Visible = True + End If +End Sub + +Sub inv_Click +' img2.Visible =True +' EJECUTANDO = 1 +' inve = 1 +' B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") +' B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") +' c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") +' c.Position = 0 +' usuario = c.GetString("USUARIO") +' c.Close +' cmd.Initialize +' cmd.Name = "select_cat_gunaprod_MARDS" +' cmd.Parameters = Array As Object(ALMACEN) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprod") +' cmd.Initialize +' cmd.Name = "select_cat_paquetes_MARDS" +' cmd.Parameters = Array As Object(ALMACEN) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprodp") +' +' cmd.Initialize +' cmd.Name = "select_cat_detallepa_MARDS" +' cmd.Parameters = Array As Object(ALMACEN) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "detallepaq") +' +' cargar.Visible = False +' b_subir.Visible = False +' connecta.Visible = True +'' inv.Visible = False +' ToastMessageShow("Se Actualizaran los datos, este proceso podria tardar hasta un minuto, gracias" , True) +End Sub + +Sub t1_tick +' cmd.Initialize +' cmd.Name = "select_cuantos_pedido_MARDS" +' cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "valida_pedido") +' +' cmd.Initialize +' cmd.Name = "select_cuantos_noventa_MARDS" +' cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "valida_noventa") +' +' cmd.Initialize +' cmd.Name = "select_cuantos_pedidoc_MARDS" +' cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "valida_pedidoc") +' +' If PB2.Progress = 0 Then +' S_CP.Text = "ENVIAR DATOS (K-1)" +' End If +'' img2.Visible=False +' t1.Enabled = False +End Sub + +Sub NUEVO_Click + B4XPages.ShowPage("NuevoCliente") +End Sub + +Sub P_RESUMEN_click + +End Sub + +Sub CARGA_Click + B4XPages.ShowPage("Productos") +End Sub + +Sub hacer_ped_Click + B4XPages.ShowPage("Clientes") +End Sub + +Sub nvo_cliente_Click + B4XPages.ShowPage("NuevoCliente") +End Sub + +'Sub tickets_dia_Click +' B4XPages.ShowPage("TicketsDia") +'End Sub + +Sub GPS_LocationChanged (Location1 As Location) + +End Sub + +Sub Btn_Ubicar_Click +' Log("ccccc") + rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' Log("ddddd") +' Log(Result) + If Result Then + StartActivity(MAPA_RUTAS) + End If +End Sub + +'''''''''''''''''''''''''''''''''''' VALIDAR CARACTERES +Sub e_ruta_TextChanged (Old As String, New As String) + Dim validChars As String ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 " +' Log("Antes: " & Old & " | " & New) + If Old <> "KMTS1" Then +' Log("Desp: " & Old & " | " & New) + Try + If validChars.Contains(New.SubString(New.Length-1)) = False Then + e_ruta.Text = New.SubString2(0, New.Length-1) + e_ruta.SelectionStart = e_ruta.Text.Length + End If + Catch + Log(LastException) + End Try + End If +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +'Private Sub p_mandaInfo_Click +' +'End Sub + +Private Sub L_CARGARDIA_Click + If Not(LV_DIAV.Visible) Then + LV_DIAV.Visible = True + LV_DIAV.BringToFront + LV_DIAV.Clear + Private label1 As Label + label1 = LV_DIAV.SingleLineLayout.Label + label1.TextColor = Colors.White + label1.TextSize = 14 + LV_DIAV.AddSingleLine("LUNES") + LV_DIAV.AddSingleLine("MARTES") + LV_DIAV.AddSingleLine("MIERCOLES") + LV_DIAV.AddSingleLine("JUEVES") + LV_DIAV.AddSingleLine("VIERNES") + LV_DIAV.AddSingleLine("SABADO") + Else + LV_DIAV.Visible = False + End If +End Sub + +Private Sub LV_DIAV_ItemClick (Position As Int, Value As Object) + L_CARGARDIA.Text = Value + LV_DIAV.Visible = False +End Sub + +Private Sub b_clientes_Click + B4XPages.ShowPage("Clientes") +End Sub + +Private Sub b_resumenDia_Click + Subs.panelVisible(p_resDiaSombra, 0, 0) + p_resDiaSombra.Width = Root.Width + p_resDiaSombra.Height = Root.Height + Subs.centraPanel(p_resumenDia, Root.Width) + Subs.centraPanelV(p_resumenDia, Root.Height) + p_resDiaSombra.Visible = True +End Sub + +Private Sub p_resDiaSombra_Click + p_resDiaSombra.Visible = False +End Sub + diff --git a/B4A/C_UpdateAvailable.bas b/B4A/C_UpdateAvailable.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/C_UpdateAvailable.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/CameraExClass2.bas b/B4A/CameraExClass2.bas new file mode 100644 index 0000000..36a0273 --- /dev/null +++ b/B4A/CameraExClass2.bas @@ -0,0 +1,400 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=6 +@EndOfDesignText@ +'Class module +'version 1.30 +'See this page for the list of constants: +'http://developer.android.com/intl/fr/reference/android/hardware/Camera.Parameters.html +'Note that you should use the constant values instead of the names. +Sub Class_Globals + Private nativeCam As Object + Private cam As Camera + Private r As Reflector + Private target As Object + Private event As String + Public Front As Boolean + Private parameters As Object + Private logger As Boolean = False +End Sub + +Public Sub Initialize (Panel1 As Panel, FrontCamera As Boolean, TargetModule As Object, EventName As String) + target = TargetModule + event = EventName + Front = FrontCamera + Dim id As Int + id = FindCamera(Front).id + If id = -1 Then + Front = Not(Front) 'try different camera + id = FindCamera(Front).id + If id = -1 Then + ToastMessageShow("No camera found.", True) + Return + End If + End If + cam.Initialize2(Panel1, "camera", id) +End Sub + +Private Sub FindCamera (frontCamera As Boolean) As CameraInfoAndId + Dim ci As CameraInfoAndId + Dim cameraInfo As Object + Dim cameraValue As Int + If logger Then Log("findCamera") + If frontCamera Then cameraValue = 1 Else cameraValue = 0 + cameraInfo = r.CreateObject("android.hardware.Camera$CameraInfo") + Dim numberOfCameras As Int = r.RunStaticMethod("android.hardware.Camera", "getNumberOfCameras", Null, Null) + If logger Then Log(r.target) + If logger Then Log(numberOfCameras) + For i = 0 To numberOfCameras - 1 + r.RunStaticMethod("android.hardware.Camera", "getCameraInfo", Array As Object(i, cameraInfo), _ + Array As String("java.lang.int", "android.hardware.Camera$CameraInfo")) + r.target = cameraInfo + if logger then Log("facing: " & r.GetField("facing") & ", " & cameraValue) + If r.GetField("facing") = cameraValue Then + ci.cameraInfo = r.target + ci.Id = i + Return ci + End If + Next + ci.id = -1 + Return ci +End Sub + +Private Sub SetDisplayOrientation + r.target = r.GetActivity + r.target = r.RunMethod("getWindowManager") + r.target = r.RunMethod("getDefaultDisplay") + r.target = r.RunMethod("getRotation") + Dim previewResult, result, degrees As Int = r.target * 90 + Dim ci As CameraInfoAndId = FindCamera(Front) + r.target = ci.CameraInfo + Dim orientation As Int = r.GetField("orientation") + If Front Then + previewResult = (orientation + degrees) Mod 360 + result = previewResult + previewResult = (360 - previewResult) Mod 360 + Else + previewResult = (orientation - degrees + 360) Mod 360 + result = previewResult + if logger then Log(previewResult) + End If + r.target = nativeCam + r.RunMethod2("setDisplayOrientation", previewResult, "java.lang.int") + r.target = parameters + r.RunMethod2("setRotation", result, "java.lang.int") + CommitParameters +End Sub + +Private Sub Camera_Ready (Success As Boolean) + If Success Then + r.target = cam + nativeCam = r.GetField("camera") + r.target = nativeCam + parameters = r.RunMethod("getParameters") + SetDisplayOrientation + Else + Log("success = false, " & LastException) + End If + CallSub2(target, event & "_ready", Success) +End Sub +'Uncomment this sub if you need to handle the Preview event +'Sub Camera_Preview (Data() As Byte) +' If SubExists(target, event & "_preview") Then +' CallSub2(target, event & "_preview", Data) +' End If +'End Sub + +Public Sub TakePicture + cam.TakePicture +End Sub + +Private Sub Camera_PictureTaken (Data() As Byte) + CallSub2(target, event & "_PictureTaken", Data) +End Sub + +Public Sub StartPreview + cam.StartPreview +End Sub + +Public Sub StopPreview + cam.StopPreview +End Sub + +Public Sub Release + cam.Release +End Sub + +'Saves the data received from PictureTaken event +Public Sub SavePictureToFile(Data() As Byte, Dir As String, FileName As String) + Dim out As OutputStream = File.OpenOutput(Dir, FileName, False) + out.WriteBytes(Data, 0, Data.Length) + out.Close +End Sub + +Public Sub SetParameter(Key As String, Value As String) + r.target = parameters + r.RunMethod3("set", Key, "java.lang.String", Value, "java.lang.String") +End Sub + +Public Sub GetParameter(Key As String) As String + r.target = parameters + Return r.RunMethod2("get", Key, "java.lang.String") +End Sub + +Public Sub CommitParameters + 'Try + r.target = nativeCam + r.RunMethod4("setParameters", Array As Object(parameters), Array As String("android.hardware.Camera$Parameters")) + 'Catch +' ToastMessageShow("Error setting parameters.", True) +' Log(LastException) +' End Try +End Sub + +Public Sub GetColorEffect As String + Return GetParameter("effect") +End Sub + +Public Sub SetColorEffect(Effect As String) + SetParameter("effect", Effect) +End Sub + +Public Sub GetSupportedPreviewSizes As CameraSize() + r.target = parameters + Dim list1 As List = r.RunMethod("getSupportedPreviewSizes") + Dim cs(list1.Size) As CameraSize + For i = 0 To list1.Size - 1 + r.target = list1.get(i) + cs(i).Width = r.GetField("width") + cs(i).Height = r.GetField("height") + Next + Return cs +End Sub + +Public Sub SetPreviewSize(Width As Int, Height As Int) + r.target = parameters + r.RunMethod3("setPreviewSize", Width, "java.lang.int", Height, "java.lang.int") +End Sub +Public Sub GetSupportedPicturesSizes As CameraSize() + r.target = parameters + Dim list1 As List = r.RunMethod("getSupportedPictureSizes") + Dim cs(list1.Size) As CameraSize + For i = 0 To list1.Size - 1 + r.target = list1.get(i) + cs(i).Width = r.GetField("width") + cs(i).Height = r.GetField("height") + Next + Return cs +End Sub + +Public Sub SetPictureSize(Width As Int, Height As Int) + r.target = parameters + r.RunMethod3("setPictureSize", Width, "java.lang.int", Height, "java.lang.int") +End Sub + +Public Sub SetJpegQuality(Quality As Int) + r.target = parameters + r.RunMethod2("setJpegQuality", Quality, "java.lang.int") +End Sub + +Public Sub SetFlashMode(Mode As String) + r.target = parameters + r.RunMethod2("setFlashMode", Mode, "java.lang.String") +End Sub + +Public Sub GetFlashMode As String + r.target = parameters + Return r.RunMethod("getFlashMode") +End Sub + +Public Sub GetSupportedFlashModes As List + r.target = parameters + Return r.RunMethod("getSupportedFlashModes") +End Sub + +Public Sub GetSupportedColorEffects As List + r.target = parameters + Return r.RunMethod("getSupportedColorEffects") +End Sub + +'Returns a list with the supported preview fps. Each item in the list is an array of two ints (minimum value and maximum value). +Public Sub GetSupportedPreviewFpsRange As List + r.target = parameters + Return r.RunMethod("getSupportedPreviewFpsRange") +End Sub +'Returns the current preview fps range. +'Range is a two elements array. The minimum value and maximum value will be stored in this array. +Public Sub GetPreviewFpsRange(Range() As Int) + r.target = parameters + r.RunMethod4("getPreviewFpsRange", Array As Object(Range), Array As String("[I")) +End Sub + +Public Sub SetPreviewFpsRange(MinValue As Int, MaxValue As Int) + r.target = parameters + r.RunMethod4("setPreviewFpsRange", Array As Object(MinValue, MaxValue), _ + Array As String("java.lang.int", "java.lang.int")) +End Sub + +Public Sub GetPreviewSize As CameraSize + r.target = parameters + r.target = r.RunMethod("getPreviewSize") + Dim cs As CameraSize + cs.Width = r.GetField("width") + cs.Height = r.GetField("height") + Return cs +End Sub + +Public Sub GetPictureSize As CameraSize + r.target = parameters + r.target = r.RunMethod("getPictureSize") + Dim cs As CameraSize + cs.Width = r.GetField("width") + cs.Height = r.GetField("height") + Return cs +End Sub + +'Converts a preview image formatted in YUV format to JPEG. +'Note that you should not save every preview image as it will slow down the whole process. +Public Sub PreviewImageToJpeg(data() As Byte, quality As Int) As Byte() + Dim size, previewFormat As Object + r.target = parameters + size = r.RunMethod("getPreviewSize") + previewFormat = r.RunMethod("getPreviewFormat") + r.target = size + Dim width = r.GetField("width"), height = r.GetField("height") As Int + Dim yuvImage As Object = r.CreateObject2("android.graphics.YuvImage", _ + Array As Object(data, previewFormat, width, height, Null), _ + Array As String("[B", "java.lang.int", "java.lang.int", "java.lang.int", "[I")) + r.target = yuvImage + Dim rect1 As Rect + rect1.Initialize(0, 0, r.RunMethod("getWidth"), r.RunMethod("getHeight")) + Dim out As OutputStream + out.InitializeToBytesArray(100) + r.RunMethod4("compressToJpeg", Array As Object(rect1, quality, out), _ + Array As String("android.graphics.Rect", "java.lang.int", "java.io.OutputStream")) + Return out.ToBytesArray +End Sub + +Public Sub GetSupportedFocusModes As List + r.target = parameters + Return r.RunMethod("getSupportedFocusModes") +End Sub + +Public Sub SetContinuousAutoFocus + Dim modes As List = GetSupportedFocusModes + If modes.IndexOf("continuous-picture") > -1 Then + SetFocusMode("continuous-picture") + Else If modes.IndexOf("continuous-video") > -1 Then + SetFocusMode("continuous-video") + Else + Log("Continuous focus mode is not available") + End If +End Sub + +Public Sub SetFocusMode(Mode As String) + r.target = parameters + r.RunMethod2("setFocusMode", Mode, "java.lang.String") +End Sub + +Public Sub GetFocusDistances As Float() + Dim F(3) As Float + r.target = parameters + r.RunMethod4("getFocusDistances", Array As Object(F), Array As String("[F")) + Return F +End Sub + +Public Sub GetSupportedPictureFormats As List + r.target = parameters + Return r.RunMethod("getSupportedPictureFormats") +End Sub +'This method should only be called if you need to immediately release the camera. +'For example if you need to start another application that depends on the camera. +Public Sub CloseNow + cam.Release + r.target = cam + r.RunMethod2("releaseCameras", True, "java.lang.boolean") +End Sub +'Calls AutoFocus and then takes the picture if focus was successfull. +Public Sub FocusAndTakePicture + cam.AutoFocus +End Sub + + +Private Sub Camera_FocusDone (Success As Boolean) + If Success Then + TakePicture + Else + Log("AutoFocus error.") + End If +End Sub + +Public Sub IsZoomSupported As Boolean + r.target = parameters + Return r.RunMethod("isZoomSupported") +End Sub + +Public Sub GetMaxZoom As Int + r.target = parameters + Return r.RunMethod("getMaxZoom") +End Sub + +Public Sub getZoom() As Int + r.target = parameters + Return r.RunMethod("getZoom") +End Sub + +Public Sub setZoom(ZoomValue As Int) + r.target = parameters + r.RunMethod2("setZoom", ZoomValue, "java.lang.int") +End Sub + +Public Sub getExposureCompensation As Int + r.target = parameters + Return r.RunMethod("getExposureCompensation") +End Sub + +Public Sub setExposureCompensation(v As Int) + r.target = parameters + r.RunMethod2("setExposureCompensation", v, "java.lang.int") +End Sub + +Public Sub getMinExposureCompensation As Int + r.target = parameters + Return r.RunMethod("getMinExposureCompensation") +End Sub + +Public Sub getMaxExposureCompensation As Int + r.target = parameters + Return r.RunMethod("getMaxExposureCompensation") +End Sub + +Public Sub SetFaceDetectionListener + Dim jo As JavaObject = nativeCam + Dim e As Object = jo.CreateEvent("android.hardware.Camera.FaceDetectionListener", "FaceDetection", Null) + jo.RunMethod("setFaceDetectionListener", Array(e)) +End Sub + +Private Sub FaceDetection_Event (MethodName As String, Args() As Object) As Object + Dim faces() As Object = Args(0) + For Each f As Object In faces + Dim jo As JavaObject = f + Dim faceRect As Rect = jo.GetField("rect") + Log(faceRect) + Next + Return Null +End Sub + + + +Public Sub StartFaceDetection + Dim jo As JavaObject = nativeCam + jo.RunMethod("startFaceDetection", Null) +End Sub + +Public Sub StopFaceDetection + Dim jo As JavaObject = nativeCam + jo.RunMethod("stopFaceDetection", Null) +End Sub + diff --git a/B4A/DBRequestManager.bas b/B4A/DBRequestManager.bas new file mode 100644 index 0000000..43c627f --- /dev/null +++ b/B4A/DBRequestManager.bas @@ -0,0 +1,275 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=6.8 +@EndOfDesignText@ +'Necesita la libreria RandomAccessFile + +'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 - 211027 +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) + + WriteObject(Command.Name, out2) + WriteInt(Limit, out2) + WriteList(Command.Parameters, out2) + out2.Close + j.PostBytes(link & "?method=query", ms.ToBytesArray) +End Sub + +'Executes a batch of (non-select) commands. +'ListOfCommands - List of the commands that will be executes. +'Tag - An object that will be returned in the result. +Public Sub ExecuteBatch(ListOfCommands As List, Tag As Object) + Dim j As HttpJob + Dim ms As OutputStream + Dim out2 As OutputStream = StartJob(j,ms, Tag) + WriteInt(ListOfCommands.Size, out2) + For Each Command As DBCommand In ListOfCommands + WriteObject(Command.Name, out2) + WriteList(Command.Parameters, out2) + Next + out2.Close + j.PostBytes(link & "?method=batch", ms.ToBytesArray) +End Sub + +'Similar to ExecuteBatch. Sends a single command. +Public Sub ExecuteCommand(Command As DBCommand, Tag As Object) + ExecuteBatch(Array As DBCommand(Command), Tag) +End Sub + +Private Sub StartJob(j As HttpJob, MemoryStream As OutputStream, Tag As Object) As OutputStream + 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 + Dim start As Long = DateTime.Now + 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 jobTagAnterior <> Job.Tag Then LogColor("HandleJob: '"&Job.Tag&"'", Colors.Blue) 'Mod por CHV - 211023 + jobTagAnterior = Job.Tag 'Mod por CHV - 211023 + If method = "query" Then + Dim numberOfColumns As Int = ReadInt(In) + For i = 0 To numberOfColumns - 1 + 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)) + 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 + ToastMessageShow(sb.ToString, True) + Next +End Sub + + \ No newline at end of file diff --git a/B4A/Files/alert2.png b/B4A/Files/alert2.png new file mode 100644 index 0000000..44d3b7e Binary files /dev/null and b/B4A/Files/alert2.png differ diff --git a/B4A/Files/alerta_amarilla.png b/B4A/Files/alerta_amarilla.png new file mode 100644 index 0000000..4f4beac Binary files /dev/null and b/B4A/Files/alerta_amarilla.png differ diff --git a/B4A/Files/anterior.jpg b/B4A/Files/anterior.jpg new file mode 100644 index 0000000..48e56e4 Binary files /dev/null and b/B4A/Files/anterior.jpg differ diff --git a/B4A/Files/carrito.png b/B4A/Files/carrito.png new file mode 100644 index 0000000..03889f6 Binary files /dev/null and b/B4A/Files/carrito.png differ diff --git a/B4A/Files/celltitle.bal b/B4A/Files/celltitle.bal new file mode 100644 index 0000000..17a1327 Binary files /dev/null and b/B4A/Files/celltitle.bal differ diff --git a/B4A/Files/cliente.bal b/B4A/Files/cliente.bal new file mode 100644 index 0000000..23aeca0 Binary files /dev/null and b/B4A/Files/cliente.bal differ diff --git a/B4A/Files/clientes.bal b/B4A/Files/clientes.bal new file mode 100644 index 0000000..2cee098 Binary files /dev/null and b/B4A/Files/clientes.bal differ diff --git a/B4A/Files/durakelo.png b/B4A/Files/durakelo.png new file mode 100644 index 0000000..e1c956c Binary files /dev/null and b/B4A/Files/durakelo.png differ diff --git a/B4A/Files/engrane.jpg b/B4A/Files/engrane.jpg new file mode 100644 index 0000000..01159de Binary files /dev/null and b/B4A/Files/engrane.jpg differ diff --git a/B4A/Files/engrane_gris.png b/B4A/Files/engrane_gris.png new file mode 100644 index 0000000..93d32d4 Binary files /dev/null and b/B4A/Files/engrane_gris.png differ diff --git a/B4A/Files/engrane_negro.png b/B4A/Files/engrane_negro.png new file mode 100644 index 0000000..5b17818 Binary files /dev/null and b/B4A/Files/engrane_negro.png differ diff --git a/B4A/Files/fondo_kmt.jpg b/B4A/Files/fondo_kmt.jpg new file mode 100644 index 0000000..4055faf Binary files /dev/null and b/B4A/Files/fondo_kmt.jpg differ diff --git a/B4A/Files/hacer pedido.jpg b/B4A/Files/hacer pedido.jpg new file mode 100644 index 0000000..eee236f Binary files /dev/null and b/B4A/Files/hacer pedido.jpg differ diff --git a/B4A/Files/intmex_logo_192x192.jpg b/B4A/Files/intmex_logo_192x192.jpg new file mode 100644 index 0000000..73ab234 Binary files /dev/null and b/B4A/Files/intmex_logo_192x192.jpg differ diff --git a/B4A/Files/intmex_logo_192x192_old.jpg b/B4A/Files/intmex_logo_192x192_old.jpg new file mode 100644 index 0000000..8b31f85 Binary files /dev/null and b/B4A/Files/intmex_logo_192x192_old.jpg differ diff --git a/B4A/Files/itembuttonblue.png b/B4A/Files/itembuttonblue.png new file mode 100644 index 0000000..af4dc0b Binary files /dev/null and b/B4A/Files/itembuttonblue.png differ diff --git a/B4A/Files/kmt.db b/B4A/Files/kmt.db new file mode 100644 index 0000000..28a3dae Binary files /dev/null and b/B4A/Files/kmt.db differ diff --git a/B4A/Files/kmt.db.original b/B4A/Files/kmt.db.original new file mode 100644 index 0000000..4930646 Binary files /dev/null and b/B4A/Files/kmt.db.original differ diff --git a/B4A/Files/login.bal b/B4A/Files/login.bal new file mode 100644 index 0000000..50619e2 Binary files /dev/null and b/B4A/Files/login.bal differ diff --git a/B4A/Files/logo_192x192.jpg b/B4A/Files/logo_192x192.jpg new file mode 100644 index 0000000..0dfabaa Binary files /dev/null and b/B4A/Files/logo_192x192.jpg differ diff --git a/B4A/Files/logo_mariana.jpeg b/B4A/Files/logo_mariana.jpeg new file mode 100644 index 0000000..0298a0b Binary files /dev/null and b/B4A/Files/logo_mariana.jpeg differ diff --git a/B4A/Files/mainpage.bal b/B4A/Files/mainpage.bal new file mode 100644 index 0000000..acba0d3 Binary files /dev/null and b/B4A/Files/mainpage.bal differ diff --git a/B4A/Files/malo.jpg b/B4A/Files/malo.jpg new file mode 100644 index 0000000..bbf3c87 Binary files /dev/null and b/B4A/Files/malo.jpg differ diff --git a/B4A/Files/mapa_rutas.bal b/B4A/Files/mapa_rutas.bal new file mode 100644 index 0000000..2b74ab1 Binary files /dev/null and b/B4A/Files/mapa_rutas.bal differ diff --git a/B4A/Files/mapas.bal b/B4A/Files/mapas.bal new file mode 100644 index 0000000..9f88334 Binary files /dev/null and b/B4A/Files/mapas.bal differ diff --git a/B4A/Files/mariana_ico.png b/B4A/Files/mariana_ico.png new file mode 100644 index 0000000..c596453 Binary files /dev/null and b/B4A/Files/mariana_ico.png differ diff --git a/B4A/Files/marker-azul-0.png b/B4A/Files/marker-azul-0.png new file mode 100644 index 0000000..8560f70 Binary files /dev/null and b/B4A/Files/marker-azul-0.png differ diff --git a/B4A/Files/marker-azul-1.png b/B4A/Files/marker-azul-1.png new file mode 100644 index 0000000..2ef7fc8 Binary files /dev/null and b/B4A/Files/marker-azul-1.png differ diff --git a/B4A/Files/marker-azul-10.png b/B4A/Files/marker-azul-10.png new file mode 100644 index 0000000..4d0fd2c Binary files /dev/null and b/B4A/Files/marker-azul-10.png differ diff --git a/B4A/Files/marker-azul-100.png b/B4A/Files/marker-azul-100.png new file mode 100644 index 0000000..c406609 Binary files /dev/null and b/B4A/Files/marker-azul-100.png differ diff --git a/B4A/Files/marker-azul-101.png b/B4A/Files/marker-azul-101.png new file mode 100644 index 0000000..10b4518 Binary files /dev/null and b/B4A/Files/marker-azul-101.png differ diff --git a/B4A/Files/marker-azul-102.png b/B4A/Files/marker-azul-102.png new file mode 100644 index 0000000..cba642e Binary files /dev/null and b/B4A/Files/marker-azul-102.png differ diff --git a/B4A/Files/marker-azul-103.png b/B4A/Files/marker-azul-103.png new file mode 100644 index 0000000..fd5116f Binary files /dev/null and b/B4A/Files/marker-azul-103.png differ diff --git a/B4A/Files/marker-azul-104.png b/B4A/Files/marker-azul-104.png new file mode 100644 index 0000000..d0241f1 Binary files /dev/null and b/B4A/Files/marker-azul-104.png differ diff --git a/B4A/Files/marker-azul-105.png b/B4A/Files/marker-azul-105.png new file mode 100644 index 0000000..d915e5d Binary files /dev/null and b/B4A/Files/marker-azul-105.png differ diff --git a/B4A/Files/marker-azul-106.png b/B4A/Files/marker-azul-106.png new file mode 100644 index 0000000..f3da475 Binary files /dev/null and b/B4A/Files/marker-azul-106.png differ diff --git a/B4A/Files/marker-azul-107.png b/B4A/Files/marker-azul-107.png new file mode 100644 index 0000000..2e15e66 Binary files /dev/null and b/B4A/Files/marker-azul-107.png differ diff --git a/B4A/Files/marker-azul-108.png b/B4A/Files/marker-azul-108.png new file mode 100644 index 0000000..70d1eca Binary files /dev/null and b/B4A/Files/marker-azul-108.png differ diff --git a/B4A/Files/marker-azul-109.png b/B4A/Files/marker-azul-109.png new file mode 100644 index 0000000..645ee0b Binary files /dev/null and b/B4A/Files/marker-azul-109.png differ diff --git a/B4A/Files/marker-azul-11.png b/B4A/Files/marker-azul-11.png new file mode 100644 index 0000000..1c2c3a2 Binary files /dev/null and b/B4A/Files/marker-azul-11.png differ diff --git a/B4A/Files/marker-azul-110.png b/B4A/Files/marker-azul-110.png new file mode 100644 index 0000000..54bb1ee Binary files /dev/null and b/B4A/Files/marker-azul-110.png differ diff --git a/B4A/Files/marker-azul-111.png b/B4A/Files/marker-azul-111.png new file mode 100644 index 0000000..9e6d0ee Binary files /dev/null and b/B4A/Files/marker-azul-111.png differ diff --git a/B4A/Files/marker-azul-112.png b/B4A/Files/marker-azul-112.png new file mode 100644 index 0000000..8129946 Binary files /dev/null and b/B4A/Files/marker-azul-112.png differ diff --git a/B4A/Files/marker-azul-113.png b/B4A/Files/marker-azul-113.png new file mode 100644 index 0000000..8c1b478 Binary files /dev/null and b/B4A/Files/marker-azul-113.png differ diff --git a/B4A/Files/marker-azul-114.png b/B4A/Files/marker-azul-114.png new file mode 100644 index 0000000..8ac5fe0 Binary files /dev/null and b/B4A/Files/marker-azul-114.png differ diff --git a/B4A/Files/marker-azul-115.png b/B4A/Files/marker-azul-115.png new file mode 100644 index 0000000..a6a004b Binary files /dev/null and b/B4A/Files/marker-azul-115.png differ diff --git a/B4A/Files/marker-azul-116.png b/B4A/Files/marker-azul-116.png new file mode 100644 index 0000000..d7b4549 Binary files /dev/null and b/B4A/Files/marker-azul-116.png differ diff --git a/B4A/Files/marker-azul-117.png b/B4A/Files/marker-azul-117.png new file mode 100644 index 0000000..ee45975 Binary files /dev/null and b/B4A/Files/marker-azul-117.png differ diff --git a/B4A/Files/marker-azul-118.png b/B4A/Files/marker-azul-118.png new file mode 100644 index 0000000..1c75f62 Binary files /dev/null and b/B4A/Files/marker-azul-118.png differ diff --git a/B4A/Files/marker-azul-119.png b/B4A/Files/marker-azul-119.png new file mode 100644 index 0000000..ad1dcc1 Binary files /dev/null and b/B4A/Files/marker-azul-119.png differ diff --git a/B4A/Files/marker-azul-12.png b/B4A/Files/marker-azul-12.png new file mode 100644 index 0000000..7b6e148 Binary files /dev/null and b/B4A/Files/marker-azul-12.png differ diff --git a/B4A/Files/marker-azul-120.png b/B4A/Files/marker-azul-120.png new file mode 100644 index 0000000..cd3353a Binary files /dev/null and b/B4A/Files/marker-azul-120.png differ diff --git a/B4A/Files/marker-azul-121.png b/B4A/Files/marker-azul-121.png new file mode 100644 index 0000000..055d7be Binary files /dev/null and b/B4A/Files/marker-azul-121.png differ diff --git a/B4A/Files/marker-azul-122.png b/B4A/Files/marker-azul-122.png new file mode 100644 index 0000000..7a854f0 Binary files /dev/null and b/B4A/Files/marker-azul-122.png differ diff --git a/B4A/Files/marker-azul-123.png b/B4A/Files/marker-azul-123.png new file mode 100644 index 0000000..e212b0d Binary files /dev/null and b/B4A/Files/marker-azul-123.png differ diff --git a/B4A/Files/marker-azul-124.png b/B4A/Files/marker-azul-124.png new file mode 100644 index 0000000..ab035bb Binary files /dev/null and b/B4A/Files/marker-azul-124.png differ diff --git a/B4A/Files/marker-azul-125.png b/B4A/Files/marker-azul-125.png new file mode 100644 index 0000000..368c749 Binary files /dev/null and b/B4A/Files/marker-azul-125.png differ diff --git a/B4A/Files/marker-azul-126.png b/B4A/Files/marker-azul-126.png new file mode 100644 index 0000000..79f591c Binary files /dev/null and b/B4A/Files/marker-azul-126.png differ diff --git a/B4A/Files/marker-azul-127.png b/B4A/Files/marker-azul-127.png new file mode 100644 index 0000000..e6b1d0b Binary files /dev/null and b/B4A/Files/marker-azul-127.png differ diff --git a/B4A/Files/marker-azul-128.png b/B4A/Files/marker-azul-128.png new file mode 100644 index 0000000..7ae1512 Binary files /dev/null and b/B4A/Files/marker-azul-128.png differ diff --git a/B4A/Files/marker-azul-129.png b/B4A/Files/marker-azul-129.png new file mode 100644 index 0000000..e5055b0 Binary files /dev/null and b/B4A/Files/marker-azul-129.png differ diff --git a/B4A/Files/marker-azul-13.png b/B4A/Files/marker-azul-13.png new file mode 100644 index 0000000..693bd7c Binary files /dev/null and b/B4A/Files/marker-azul-13.png differ diff --git a/B4A/Files/marker-azul-130.png b/B4A/Files/marker-azul-130.png new file mode 100644 index 0000000..d00bc41 Binary files /dev/null and b/B4A/Files/marker-azul-130.png differ diff --git a/B4A/Files/marker-azul-131.png b/B4A/Files/marker-azul-131.png new file mode 100644 index 0000000..da6fc5c Binary files /dev/null and b/B4A/Files/marker-azul-131.png differ diff --git a/B4A/Files/marker-azul-132.png b/B4A/Files/marker-azul-132.png new file mode 100644 index 0000000..b58884b Binary files /dev/null and b/B4A/Files/marker-azul-132.png differ diff --git a/B4A/Files/marker-azul-133.png b/B4A/Files/marker-azul-133.png new file mode 100644 index 0000000..8255ae7 Binary files /dev/null and b/B4A/Files/marker-azul-133.png differ diff --git a/B4A/Files/marker-azul-134.png b/B4A/Files/marker-azul-134.png new file mode 100644 index 0000000..96ec85d Binary files /dev/null and b/B4A/Files/marker-azul-134.png differ diff --git a/B4A/Files/marker-azul-135.png b/B4A/Files/marker-azul-135.png new file mode 100644 index 0000000..4f4cf4f Binary files /dev/null and b/B4A/Files/marker-azul-135.png differ diff --git a/B4A/Files/marker-azul-136.png b/B4A/Files/marker-azul-136.png new file mode 100644 index 0000000..4f4cf4f Binary files /dev/null and b/B4A/Files/marker-azul-136.png differ diff --git a/B4A/Files/marker-azul-137.png b/B4A/Files/marker-azul-137.png new file mode 100644 index 0000000..f799d36 Binary files /dev/null and b/B4A/Files/marker-azul-137.png differ diff --git a/B4A/Files/marker-azul-138.png b/B4A/Files/marker-azul-138.png new file mode 100644 index 0000000..832d4f7 Binary files /dev/null and b/B4A/Files/marker-azul-138.png differ diff --git a/B4A/Files/marker-azul-139.png b/B4A/Files/marker-azul-139.png new file mode 100644 index 0000000..7767338 Binary files /dev/null and b/B4A/Files/marker-azul-139.png differ diff --git a/B4A/Files/marker-azul-14.png b/B4A/Files/marker-azul-14.png new file mode 100644 index 0000000..acebd22 Binary files /dev/null and b/B4A/Files/marker-azul-14.png differ diff --git a/B4A/Files/marker-azul-140.png b/B4A/Files/marker-azul-140.png new file mode 100644 index 0000000..e652c58 Binary files /dev/null and b/B4A/Files/marker-azul-140.png differ diff --git a/B4A/Files/marker-azul-141.png b/B4A/Files/marker-azul-141.png new file mode 100644 index 0000000..c4c6246 Binary files /dev/null and b/B4A/Files/marker-azul-141.png differ diff --git a/B4A/Files/marker-azul-142.png b/B4A/Files/marker-azul-142.png new file mode 100644 index 0000000..128d33f Binary files /dev/null and b/B4A/Files/marker-azul-142.png differ diff --git a/B4A/Files/marker-azul-143.png b/B4A/Files/marker-azul-143.png new file mode 100644 index 0000000..f369b0f Binary files /dev/null and b/B4A/Files/marker-azul-143.png differ diff --git a/B4A/Files/marker-azul-144.png b/B4A/Files/marker-azul-144.png new file mode 100644 index 0000000..16ed234 Binary files /dev/null and b/B4A/Files/marker-azul-144.png differ diff --git a/B4A/Files/marker-azul-145.png b/B4A/Files/marker-azul-145.png new file mode 100644 index 0000000..5c57553 Binary files /dev/null and b/B4A/Files/marker-azul-145.png differ diff --git a/B4A/Files/marker-azul-146.png b/B4A/Files/marker-azul-146.png new file mode 100644 index 0000000..c44af7c Binary files /dev/null and b/B4A/Files/marker-azul-146.png differ diff --git a/B4A/Files/marker-azul-147.png b/B4A/Files/marker-azul-147.png new file mode 100644 index 0000000..d71d816 Binary files /dev/null and b/B4A/Files/marker-azul-147.png differ diff --git a/B4A/Files/marker-azul-148.png b/B4A/Files/marker-azul-148.png new file mode 100644 index 0000000..45da0a7 Binary files /dev/null and b/B4A/Files/marker-azul-148.png differ diff --git a/B4A/Files/marker-azul-149.png b/B4A/Files/marker-azul-149.png new file mode 100644 index 0000000..0cfe147 Binary files /dev/null and b/B4A/Files/marker-azul-149.png differ diff --git a/B4A/Files/marker-azul-15.png b/B4A/Files/marker-azul-15.png new file mode 100644 index 0000000..8482547 Binary files /dev/null and b/B4A/Files/marker-azul-15.png differ diff --git a/B4A/Files/marker-azul-150.png b/B4A/Files/marker-azul-150.png new file mode 100644 index 0000000..5b4c665 Binary files /dev/null and b/B4A/Files/marker-azul-150.png differ diff --git a/B4A/Files/marker-azul-16.png b/B4A/Files/marker-azul-16.png new file mode 100644 index 0000000..3adc732 Binary files /dev/null and b/B4A/Files/marker-azul-16.png differ diff --git a/B4A/Files/marker-azul-17.png b/B4A/Files/marker-azul-17.png new file mode 100644 index 0000000..1f29874 Binary files /dev/null and b/B4A/Files/marker-azul-17.png differ diff --git a/B4A/Files/marker-azul-18.png b/B4A/Files/marker-azul-18.png new file mode 100644 index 0000000..509ee1f Binary files /dev/null and b/B4A/Files/marker-azul-18.png differ diff --git a/B4A/Files/marker-azul-19.png b/B4A/Files/marker-azul-19.png new file mode 100644 index 0000000..0fb18e7 Binary files /dev/null and b/B4A/Files/marker-azul-19.png differ diff --git a/B4A/Files/marker-azul-2.png b/B4A/Files/marker-azul-2.png new file mode 100644 index 0000000..bf3df74 Binary files /dev/null and b/B4A/Files/marker-azul-2.png differ diff --git a/B4A/Files/marker-azul-20.png b/B4A/Files/marker-azul-20.png new file mode 100644 index 0000000..b5f8526 Binary files /dev/null and b/B4A/Files/marker-azul-20.png differ diff --git a/B4A/Files/marker-azul-21.png b/B4A/Files/marker-azul-21.png new file mode 100644 index 0000000..5f7fe4f Binary files /dev/null and b/B4A/Files/marker-azul-21.png differ diff --git a/B4A/Files/marker-azul-22.png b/B4A/Files/marker-azul-22.png new file mode 100644 index 0000000..4ae74cb Binary files /dev/null and b/B4A/Files/marker-azul-22.png differ diff --git a/B4A/Files/marker-azul-23.png b/B4A/Files/marker-azul-23.png new file mode 100644 index 0000000..8bdead9 Binary files /dev/null and b/B4A/Files/marker-azul-23.png differ diff --git a/B4A/Files/marker-azul-24.png b/B4A/Files/marker-azul-24.png new file mode 100644 index 0000000..bada41e Binary files /dev/null and b/B4A/Files/marker-azul-24.png differ diff --git a/B4A/Files/marker-azul-25.png b/B4A/Files/marker-azul-25.png new file mode 100644 index 0000000..fbec553 Binary files /dev/null and b/B4A/Files/marker-azul-25.png differ diff --git a/B4A/Files/marker-azul-26.png b/B4A/Files/marker-azul-26.png new file mode 100644 index 0000000..73b017b Binary files /dev/null and b/B4A/Files/marker-azul-26.png differ diff --git a/B4A/Files/marker-azul-27.png b/B4A/Files/marker-azul-27.png new file mode 100644 index 0000000..0026278 Binary files /dev/null and b/B4A/Files/marker-azul-27.png differ diff --git a/B4A/Files/marker-azul-28.png b/B4A/Files/marker-azul-28.png new file mode 100644 index 0000000..bb56ac5 Binary files /dev/null and b/B4A/Files/marker-azul-28.png differ diff --git a/B4A/Files/marker-azul-29.png b/B4A/Files/marker-azul-29.png new file mode 100644 index 0000000..93aef08 Binary files /dev/null and b/B4A/Files/marker-azul-29.png differ diff --git a/B4A/Files/marker-azul-3.png b/B4A/Files/marker-azul-3.png new file mode 100644 index 0000000..2162489 Binary files /dev/null and b/B4A/Files/marker-azul-3.png differ diff --git a/B4A/Files/marker-azul-30.png b/B4A/Files/marker-azul-30.png new file mode 100644 index 0000000..dac177c Binary files /dev/null and b/B4A/Files/marker-azul-30.png differ diff --git a/B4A/Files/marker-azul-31.png b/B4A/Files/marker-azul-31.png new file mode 100644 index 0000000..c032098 Binary files /dev/null and b/B4A/Files/marker-azul-31.png differ diff --git a/B4A/Files/marker-azul-32.png b/B4A/Files/marker-azul-32.png new file mode 100644 index 0000000..3c27807 Binary files /dev/null and b/B4A/Files/marker-azul-32.png differ diff --git a/B4A/Files/marker-azul-33.png b/B4A/Files/marker-azul-33.png new file mode 100644 index 0000000..85f97bf Binary files /dev/null and b/B4A/Files/marker-azul-33.png differ diff --git a/B4A/Files/marker-azul-34.png b/B4A/Files/marker-azul-34.png new file mode 100644 index 0000000..fbd3895 Binary files /dev/null and b/B4A/Files/marker-azul-34.png differ diff --git a/B4A/Files/marker-azul-35.png b/B4A/Files/marker-azul-35.png new file mode 100644 index 0000000..3c81688 Binary files /dev/null and b/B4A/Files/marker-azul-35.png differ diff --git a/B4A/Files/marker-azul-36.png b/B4A/Files/marker-azul-36.png new file mode 100644 index 0000000..9192565 Binary files /dev/null and b/B4A/Files/marker-azul-36.png differ diff --git a/B4A/Files/marker-azul-37.png b/B4A/Files/marker-azul-37.png new file mode 100644 index 0000000..d798756 Binary files /dev/null and b/B4A/Files/marker-azul-37.png differ diff --git a/B4A/Files/marker-azul-38.png b/B4A/Files/marker-azul-38.png new file mode 100644 index 0000000..465e870 Binary files /dev/null and b/B4A/Files/marker-azul-38.png differ diff --git a/B4A/Files/marker-azul-39.png b/B4A/Files/marker-azul-39.png new file mode 100644 index 0000000..4119a7b Binary files /dev/null and b/B4A/Files/marker-azul-39.png differ diff --git a/B4A/Files/marker-azul-4.png b/B4A/Files/marker-azul-4.png new file mode 100644 index 0000000..fde106a Binary files /dev/null and b/B4A/Files/marker-azul-4.png differ diff --git a/B4A/Files/marker-azul-40.png b/B4A/Files/marker-azul-40.png new file mode 100644 index 0000000..ff48089 Binary files /dev/null and b/B4A/Files/marker-azul-40.png differ diff --git a/B4A/Files/marker-azul-41.png b/B4A/Files/marker-azul-41.png new file mode 100644 index 0000000..d9ec040 Binary files /dev/null and b/B4A/Files/marker-azul-41.png differ diff --git a/B4A/Files/marker-azul-42.png b/B4A/Files/marker-azul-42.png new file mode 100644 index 0000000..69d2f08 Binary files /dev/null and b/B4A/Files/marker-azul-42.png differ diff --git a/B4A/Files/marker-azul-43.png b/B4A/Files/marker-azul-43.png new file mode 100644 index 0000000..801d552 Binary files /dev/null and b/B4A/Files/marker-azul-43.png differ diff --git a/B4A/Files/marker-azul-44.png b/B4A/Files/marker-azul-44.png new file mode 100644 index 0000000..e00f894 Binary files /dev/null and b/B4A/Files/marker-azul-44.png differ diff --git a/B4A/Files/marker-azul-45.png b/B4A/Files/marker-azul-45.png new file mode 100644 index 0000000..9826f40 Binary files /dev/null and b/B4A/Files/marker-azul-45.png differ diff --git a/B4A/Files/marker-azul-46.png b/B4A/Files/marker-azul-46.png new file mode 100644 index 0000000..b445466 Binary files /dev/null and b/B4A/Files/marker-azul-46.png differ diff --git a/B4A/Files/marker-azul-47.png b/B4A/Files/marker-azul-47.png new file mode 100644 index 0000000..6f80d24 Binary files /dev/null and b/B4A/Files/marker-azul-47.png differ diff --git a/B4A/Files/marker-azul-48.png b/B4A/Files/marker-azul-48.png new file mode 100644 index 0000000..a70dfdc Binary files /dev/null and b/B4A/Files/marker-azul-48.png differ diff --git a/B4A/Files/marker-azul-49.png b/B4A/Files/marker-azul-49.png new file mode 100644 index 0000000..f2a9bf0 Binary files /dev/null and b/B4A/Files/marker-azul-49.png differ diff --git a/B4A/Files/marker-azul-5.png b/B4A/Files/marker-azul-5.png new file mode 100644 index 0000000..e95e584 Binary files /dev/null and b/B4A/Files/marker-azul-5.png differ diff --git a/B4A/Files/marker-azul-50.png b/B4A/Files/marker-azul-50.png new file mode 100644 index 0000000..4d551be Binary files /dev/null and b/B4A/Files/marker-azul-50.png differ diff --git a/B4A/Files/marker-azul-51.png b/B4A/Files/marker-azul-51.png new file mode 100644 index 0000000..42eb752 Binary files /dev/null and b/B4A/Files/marker-azul-51.png differ diff --git a/B4A/Files/marker-azul-52.png b/B4A/Files/marker-azul-52.png new file mode 100644 index 0000000..b70dcf0 Binary files /dev/null and b/B4A/Files/marker-azul-52.png differ diff --git a/B4A/Files/marker-azul-53.png b/B4A/Files/marker-azul-53.png new file mode 100644 index 0000000..60a9eac Binary files /dev/null and b/B4A/Files/marker-azul-53.png differ diff --git a/B4A/Files/marker-azul-54.png b/B4A/Files/marker-azul-54.png new file mode 100644 index 0000000..31ac0b4 Binary files /dev/null and b/B4A/Files/marker-azul-54.png differ diff --git a/B4A/Files/marker-azul-55.png b/B4A/Files/marker-azul-55.png new file mode 100644 index 0000000..3b7e061 Binary files /dev/null and b/B4A/Files/marker-azul-55.png differ diff --git a/B4A/Files/marker-azul-56.png b/B4A/Files/marker-azul-56.png new file mode 100644 index 0000000..0898310 Binary files /dev/null and b/B4A/Files/marker-azul-56.png differ diff --git a/B4A/Files/marker-azul-57.png b/B4A/Files/marker-azul-57.png new file mode 100644 index 0000000..738bfaf Binary files /dev/null and b/B4A/Files/marker-azul-57.png differ diff --git a/B4A/Files/marker-azul-58.png b/B4A/Files/marker-azul-58.png new file mode 100644 index 0000000..108bd24 Binary files /dev/null and b/B4A/Files/marker-azul-58.png differ diff --git a/B4A/Files/marker-azul-59.png b/B4A/Files/marker-azul-59.png new file mode 100644 index 0000000..abb27b5 Binary files /dev/null and b/B4A/Files/marker-azul-59.png differ diff --git a/B4A/Files/marker-azul-6.png b/B4A/Files/marker-azul-6.png new file mode 100644 index 0000000..9300e54 Binary files /dev/null and b/B4A/Files/marker-azul-6.png differ diff --git a/B4A/Files/marker-azul-60.png b/B4A/Files/marker-azul-60.png new file mode 100644 index 0000000..ff26b31 Binary files /dev/null and b/B4A/Files/marker-azul-60.png differ diff --git a/B4A/Files/marker-azul-61.png b/B4A/Files/marker-azul-61.png new file mode 100644 index 0000000..31acf81 Binary files /dev/null and b/B4A/Files/marker-azul-61.png differ diff --git a/B4A/Files/marker-azul-62.png b/B4A/Files/marker-azul-62.png new file mode 100644 index 0000000..8a4a90e Binary files /dev/null and b/B4A/Files/marker-azul-62.png differ diff --git a/B4A/Files/marker-azul-63.png b/B4A/Files/marker-azul-63.png new file mode 100644 index 0000000..9ba5051 Binary files /dev/null and b/B4A/Files/marker-azul-63.png differ diff --git a/B4A/Files/marker-azul-64.png b/B4A/Files/marker-azul-64.png new file mode 100644 index 0000000..d458e02 Binary files /dev/null and b/B4A/Files/marker-azul-64.png differ diff --git a/B4A/Files/marker-azul-65.png b/B4A/Files/marker-azul-65.png new file mode 100644 index 0000000..4ba4da8 Binary files /dev/null and b/B4A/Files/marker-azul-65.png differ diff --git a/B4A/Files/marker-azul-66.png b/B4A/Files/marker-azul-66.png new file mode 100644 index 0000000..92c7472 Binary files /dev/null and b/B4A/Files/marker-azul-66.png differ diff --git a/B4A/Files/marker-azul-67.png b/B4A/Files/marker-azul-67.png new file mode 100644 index 0000000..ed5fdcc Binary files /dev/null and b/B4A/Files/marker-azul-67.png differ diff --git a/B4A/Files/marker-azul-68.png b/B4A/Files/marker-azul-68.png new file mode 100644 index 0000000..b0c1e6d Binary files /dev/null and b/B4A/Files/marker-azul-68.png differ diff --git a/B4A/Files/marker-azul-69.png b/B4A/Files/marker-azul-69.png new file mode 100644 index 0000000..315109a Binary files /dev/null and b/B4A/Files/marker-azul-69.png differ diff --git a/B4A/Files/marker-azul-7.png b/B4A/Files/marker-azul-7.png new file mode 100644 index 0000000..1ad901c Binary files /dev/null and b/B4A/Files/marker-azul-7.png differ diff --git a/B4A/Files/marker-azul-70.png b/B4A/Files/marker-azul-70.png new file mode 100644 index 0000000..3c9a519 Binary files /dev/null and b/B4A/Files/marker-azul-70.png differ diff --git a/B4A/Files/marker-azul-71.png b/B4A/Files/marker-azul-71.png new file mode 100644 index 0000000..31cf9e2 Binary files /dev/null and b/B4A/Files/marker-azul-71.png differ diff --git a/B4A/Files/marker-azul-72.png b/B4A/Files/marker-azul-72.png new file mode 100644 index 0000000..8bdcfbd Binary files /dev/null and b/B4A/Files/marker-azul-72.png differ diff --git a/B4A/Files/marker-azul-73.png b/B4A/Files/marker-azul-73.png new file mode 100644 index 0000000..2ed9b12 Binary files /dev/null and b/B4A/Files/marker-azul-73.png differ diff --git a/B4A/Files/marker-azul-74.png b/B4A/Files/marker-azul-74.png new file mode 100644 index 0000000..f160e64 Binary files /dev/null and b/B4A/Files/marker-azul-74.png differ diff --git a/B4A/Files/marker-azul-75.png b/B4A/Files/marker-azul-75.png new file mode 100644 index 0000000..6b0b8d4 Binary files /dev/null and b/B4A/Files/marker-azul-75.png differ diff --git a/B4A/Files/marker-azul-76.png b/B4A/Files/marker-azul-76.png new file mode 100644 index 0000000..9854364 Binary files /dev/null and b/B4A/Files/marker-azul-76.png differ diff --git a/B4A/Files/marker-azul-77.png b/B4A/Files/marker-azul-77.png new file mode 100644 index 0000000..f31e818 Binary files /dev/null and b/B4A/Files/marker-azul-77.png differ diff --git a/B4A/Files/marker-azul-78.png b/B4A/Files/marker-azul-78.png new file mode 100644 index 0000000..912cb94 Binary files /dev/null and b/B4A/Files/marker-azul-78.png differ diff --git a/B4A/Files/marker-azul-79.png b/B4A/Files/marker-azul-79.png new file mode 100644 index 0000000..3e0d3be Binary files /dev/null and b/B4A/Files/marker-azul-79.png differ diff --git a/B4A/Files/marker-azul-8.png b/B4A/Files/marker-azul-8.png new file mode 100644 index 0000000..6e7471f Binary files /dev/null and b/B4A/Files/marker-azul-8.png differ diff --git a/B4A/Files/marker-azul-80.png b/B4A/Files/marker-azul-80.png new file mode 100644 index 0000000..c926099 Binary files /dev/null and b/B4A/Files/marker-azul-80.png differ diff --git a/B4A/Files/marker-azul-81.png b/B4A/Files/marker-azul-81.png new file mode 100644 index 0000000..170dc2b Binary files /dev/null and b/B4A/Files/marker-azul-81.png differ diff --git a/B4A/Files/marker-azul-82.png b/B4A/Files/marker-azul-82.png new file mode 100644 index 0000000..b4783e6 Binary files /dev/null and b/B4A/Files/marker-azul-82.png differ diff --git a/B4A/Files/marker-azul-83.png b/B4A/Files/marker-azul-83.png new file mode 100644 index 0000000..525c979 Binary files /dev/null and b/B4A/Files/marker-azul-83.png differ diff --git a/B4A/Files/marker-azul-84.png b/B4A/Files/marker-azul-84.png new file mode 100644 index 0000000..bf18fd8 Binary files /dev/null and b/B4A/Files/marker-azul-84.png differ diff --git a/B4A/Files/marker-azul-85.png b/B4A/Files/marker-azul-85.png new file mode 100644 index 0000000..6a0b8d9 Binary files /dev/null and b/B4A/Files/marker-azul-85.png differ diff --git a/B4A/Files/marker-azul-86.png b/B4A/Files/marker-azul-86.png new file mode 100644 index 0000000..598bbdb Binary files /dev/null and b/B4A/Files/marker-azul-86.png differ diff --git a/B4A/Files/marker-azul-87.png b/B4A/Files/marker-azul-87.png new file mode 100644 index 0000000..9152779 Binary files /dev/null and b/B4A/Files/marker-azul-87.png differ diff --git a/B4A/Files/marker-azul-88.png b/B4A/Files/marker-azul-88.png new file mode 100644 index 0000000..d14bf47 Binary files /dev/null and b/B4A/Files/marker-azul-88.png differ diff --git a/B4A/Files/marker-azul-89.png b/B4A/Files/marker-azul-89.png new file mode 100644 index 0000000..f8cfd83 Binary files /dev/null and b/B4A/Files/marker-azul-89.png differ diff --git a/B4A/Files/marker-azul-9.png b/B4A/Files/marker-azul-9.png new file mode 100644 index 0000000..75d48ea Binary files /dev/null and b/B4A/Files/marker-azul-9.png differ diff --git a/B4A/Files/marker-azul-90.png b/B4A/Files/marker-azul-90.png new file mode 100644 index 0000000..11d6b83 Binary files /dev/null and b/B4A/Files/marker-azul-90.png differ diff --git a/B4A/Files/marker-azul-91.png b/B4A/Files/marker-azul-91.png new file mode 100644 index 0000000..9cc8ff9 Binary files /dev/null and b/B4A/Files/marker-azul-91.png differ diff --git a/B4A/Files/marker-azul-92.png b/B4A/Files/marker-azul-92.png new file mode 100644 index 0000000..182cd4d Binary files /dev/null and b/B4A/Files/marker-azul-92.png differ diff --git a/B4A/Files/marker-azul-93.png b/B4A/Files/marker-azul-93.png new file mode 100644 index 0000000..42a03c0 Binary files /dev/null and b/B4A/Files/marker-azul-93.png differ diff --git a/B4A/Files/marker-azul-94.png b/B4A/Files/marker-azul-94.png new file mode 100644 index 0000000..936003d Binary files /dev/null and b/B4A/Files/marker-azul-94.png differ diff --git a/B4A/Files/marker-azul-95.png b/B4A/Files/marker-azul-95.png new file mode 100644 index 0000000..501bd85 Binary files /dev/null and b/B4A/Files/marker-azul-95.png differ diff --git a/B4A/Files/marker-azul-96.png b/B4A/Files/marker-azul-96.png new file mode 100644 index 0000000..6ac75b9 Binary files /dev/null and b/B4A/Files/marker-azul-96.png differ diff --git a/B4A/Files/marker-azul-97.png b/B4A/Files/marker-azul-97.png new file mode 100644 index 0000000..7f04854 Binary files /dev/null and b/B4A/Files/marker-azul-97.png differ diff --git a/B4A/Files/marker-azul-98.png b/B4A/Files/marker-azul-98.png new file mode 100644 index 0000000..96ac429 Binary files /dev/null and b/B4A/Files/marker-azul-98.png differ diff --git a/B4A/Files/marker-azul-99.png b/B4A/Files/marker-azul-99.png new file mode 100644 index 0000000..e2eee84 Binary files /dev/null and b/B4A/Files/marker-azul-99.png differ diff --git a/B4A/Files/marker-negro-0.png b/B4A/Files/marker-negro-0.png new file mode 100644 index 0000000..65fdc2c Binary files /dev/null and b/B4A/Files/marker-negro-0.png differ diff --git a/B4A/Files/marker-negro-1.png b/B4A/Files/marker-negro-1.png new file mode 100644 index 0000000..252bcc2 Binary files /dev/null and b/B4A/Files/marker-negro-1.png differ diff --git a/B4A/Files/marker-negro-10.png b/B4A/Files/marker-negro-10.png new file mode 100644 index 0000000..e82fde3 Binary files /dev/null and b/B4A/Files/marker-negro-10.png differ diff --git a/B4A/Files/marker-negro-100.png b/B4A/Files/marker-negro-100.png new file mode 100644 index 0000000..e025605 Binary files /dev/null and b/B4A/Files/marker-negro-100.png differ diff --git a/B4A/Files/marker-negro-101.png b/B4A/Files/marker-negro-101.png new file mode 100644 index 0000000..9166e07 Binary files /dev/null and b/B4A/Files/marker-negro-101.png differ diff --git a/B4A/Files/marker-negro-102.png b/B4A/Files/marker-negro-102.png new file mode 100644 index 0000000..9cc46e8 Binary files /dev/null and b/B4A/Files/marker-negro-102.png differ diff --git a/B4A/Files/marker-negro-103.png b/B4A/Files/marker-negro-103.png new file mode 100644 index 0000000..e8b6a1a Binary files /dev/null and b/B4A/Files/marker-negro-103.png differ diff --git a/B4A/Files/marker-negro-104.png b/B4A/Files/marker-negro-104.png new file mode 100644 index 0000000..fede632 Binary files /dev/null and b/B4A/Files/marker-negro-104.png differ diff --git a/B4A/Files/marker-negro-105.png b/B4A/Files/marker-negro-105.png new file mode 100644 index 0000000..98db6c0 Binary files /dev/null and b/B4A/Files/marker-negro-105.png differ diff --git a/B4A/Files/marker-negro-106.png b/B4A/Files/marker-negro-106.png new file mode 100644 index 0000000..2f6b344 Binary files /dev/null and b/B4A/Files/marker-negro-106.png differ diff --git a/B4A/Files/marker-negro-107.png b/B4A/Files/marker-negro-107.png new file mode 100644 index 0000000..2e182cc Binary files /dev/null and b/B4A/Files/marker-negro-107.png differ diff --git a/B4A/Files/marker-negro-108.png b/B4A/Files/marker-negro-108.png new file mode 100644 index 0000000..b04a7e1 Binary files /dev/null and b/B4A/Files/marker-negro-108.png differ diff --git a/B4A/Files/marker-negro-109.png b/B4A/Files/marker-negro-109.png new file mode 100644 index 0000000..219607b Binary files /dev/null and b/B4A/Files/marker-negro-109.png differ diff --git a/B4A/Files/marker-negro-11.png b/B4A/Files/marker-negro-11.png new file mode 100644 index 0000000..b6639e3 Binary files /dev/null and b/B4A/Files/marker-negro-11.png differ diff --git a/B4A/Files/marker-negro-110.png b/B4A/Files/marker-negro-110.png new file mode 100644 index 0000000..ef432a3 Binary files /dev/null and b/B4A/Files/marker-negro-110.png differ diff --git a/B4A/Files/marker-negro-111.png b/B4A/Files/marker-negro-111.png new file mode 100644 index 0000000..8205363 Binary files /dev/null and b/B4A/Files/marker-negro-111.png differ diff --git a/B4A/Files/marker-negro-112.png b/B4A/Files/marker-negro-112.png new file mode 100644 index 0000000..f38e6c9 Binary files /dev/null and b/B4A/Files/marker-negro-112.png differ diff --git a/B4A/Files/marker-negro-113.png b/B4A/Files/marker-negro-113.png new file mode 100644 index 0000000..1cee8ec Binary files /dev/null and b/B4A/Files/marker-negro-113.png differ diff --git a/B4A/Files/marker-negro-114.png b/B4A/Files/marker-negro-114.png new file mode 100644 index 0000000..3fc5112 Binary files /dev/null and b/B4A/Files/marker-negro-114.png differ diff --git a/B4A/Files/marker-negro-115.png b/B4A/Files/marker-negro-115.png new file mode 100644 index 0000000..17173cb Binary files /dev/null and b/B4A/Files/marker-negro-115.png differ diff --git a/B4A/Files/marker-negro-116.png b/B4A/Files/marker-negro-116.png new file mode 100644 index 0000000..05d4528 Binary files /dev/null and b/B4A/Files/marker-negro-116.png differ diff --git a/B4A/Files/marker-negro-117.png b/B4A/Files/marker-negro-117.png new file mode 100644 index 0000000..979e3c9 Binary files /dev/null and b/B4A/Files/marker-negro-117.png differ diff --git a/B4A/Files/marker-negro-118.png b/B4A/Files/marker-negro-118.png new file mode 100644 index 0000000..5ae1977 Binary files /dev/null and b/B4A/Files/marker-negro-118.png differ diff --git a/B4A/Files/marker-negro-119.png b/B4A/Files/marker-negro-119.png new file mode 100644 index 0000000..4afdbf0 Binary files /dev/null and b/B4A/Files/marker-negro-119.png differ diff --git a/B4A/Files/marker-negro-12.png b/B4A/Files/marker-negro-12.png new file mode 100644 index 0000000..fe9dc00 Binary files /dev/null and b/B4A/Files/marker-negro-12.png differ diff --git a/B4A/Files/marker-negro-120.png b/B4A/Files/marker-negro-120.png new file mode 100644 index 0000000..8b49deb Binary files /dev/null and b/B4A/Files/marker-negro-120.png differ diff --git a/B4A/Files/marker-negro-121.png b/B4A/Files/marker-negro-121.png new file mode 100644 index 0000000..4615555 Binary files /dev/null and b/B4A/Files/marker-negro-121.png differ diff --git a/B4A/Files/marker-negro-122.png b/B4A/Files/marker-negro-122.png new file mode 100644 index 0000000..42c08ed Binary files /dev/null and b/B4A/Files/marker-negro-122.png differ diff --git a/B4A/Files/marker-negro-123.png b/B4A/Files/marker-negro-123.png new file mode 100644 index 0000000..8deb233 Binary files /dev/null and b/B4A/Files/marker-negro-123.png differ diff --git a/B4A/Files/marker-negro-124.png b/B4A/Files/marker-negro-124.png new file mode 100644 index 0000000..6c83670 Binary files /dev/null and b/B4A/Files/marker-negro-124.png differ diff --git a/B4A/Files/marker-negro-125.png b/B4A/Files/marker-negro-125.png new file mode 100644 index 0000000..d19a01c Binary files /dev/null and b/B4A/Files/marker-negro-125.png differ diff --git a/B4A/Files/marker-negro-126.png b/B4A/Files/marker-negro-126.png new file mode 100644 index 0000000..22cf49c Binary files /dev/null and b/B4A/Files/marker-negro-126.png differ diff --git a/B4A/Files/marker-negro-127.png b/B4A/Files/marker-negro-127.png new file mode 100644 index 0000000..2078a14 Binary files /dev/null and b/B4A/Files/marker-negro-127.png differ diff --git a/B4A/Files/marker-negro-128.png b/B4A/Files/marker-negro-128.png new file mode 100644 index 0000000..968e7d2 Binary files /dev/null and b/B4A/Files/marker-negro-128.png differ diff --git a/B4A/Files/marker-negro-129.png b/B4A/Files/marker-negro-129.png new file mode 100644 index 0000000..b5b7e57 Binary files /dev/null and b/B4A/Files/marker-negro-129.png differ diff --git a/B4A/Files/marker-negro-13.png b/B4A/Files/marker-negro-13.png new file mode 100644 index 0000000..52f424d Binary files /dev/null and b/B4A/Files/marker-negro-13.png differ diff --git a/B4A/Files/marker-negro-130.png b/B4A/Files/marker-negro-130.png new file mode 100644 index 0000000..27af6a9 Binary files /dev/null and b/B4A/Files/marker-negro-130.png differ diff --git a/B4A/Files/marker-negro-131.png b/B4A/Files/marker-negro-131.png new file mode 100644 index 0000000..5b1c15c Binary files /dev/null and b/B4A/Files/marker-negro-131.png differ diff --git a/B4A/Files/marker-negro-132.png b/B4A/Files/marker-negro-132.png new file mode 100644 index 0000000..42f0c31 Binary files /dev/null and b/B4A/Files/marker-negro-132.png differ diff --git a/B4A/Files/marker-negro-133.png b/B4A/Files/marker-negro-133.png new file mode 100644 index 0000000..521a284 Binary files /dev/null and b/B4A/Files/marker-negro-133.png differ diff --git a/B4A/Files/marker-negro-134.png b/B4A/Files/marker-negro-134.png new file mode 100644 index 0000000..c904b0e Binary files /dev/null and b/B4A/Files/marker-negro-134.png differ diff --git a/B4A/Files/marker-negro-135.png b/B4A/Files/marker-negro-135.png new file mode 100644 index 0000000..176ae42 Binary files /dev/null and b/B4A/Files/marker-negro-135.png differ diff --git a/B4A/Files/marker-negro-136.png b/B4A/Files/marker-negro-136.png new file mode 100644 index 0000000..d03021f Binary files /dev/null and b/B4A/Files/marker-negro-136.png differ diff --git a/B4A/Files/marker-negro-137.png b/B4A/Files/marker-negro-137.png new file mode 100644 index 0000000..f312f02 Binary files /dev/null and b/B4A/Files/marker-negro-137.png differ diff --git a/B4A/Files/marker-negro-138.png b/B4A/Files/marker-negro-138.png new file mode 100644 index 0000000..5f5b08e Binary files /dev/null and b/B4A/Files/marker-negro-138.png differ diff --git a/B4A/Files/marker-negro-139.png b/B4A/Files/marker-negro-139.png new file mode 100644 index 0000000..f89040a Binary files /dev/null and b/B4A/Files/marker-negro-139.png differ diff --git a/B4A/Files/marker-negro-14.png b/B4A/Files/marker-negro-14.png new file mode 100644 index 0000000..3d82f0c Binary files /dev/null and b/B4A/Files/marker-negro-14.png differ diff --git a/B4A/Files/marker-negro-140.png b/B4A/Files/marker-negro-140.png new file mode 100644 index 0000000..721143f Binary files /dev/null and b/B4A/Files/marker-negro-140.png differ diff --git a/B4A/Files/marker-negro-141.png b/B4A/Files/marker-negro-141.png new file mode 100644 index 0000000..91a3a97 Binary files /dev/null and b/B4A/Files/marker-negro-141.png differ diff --git a/B4A/Files/marker-negro-142.png b/B4A/Files/marker-negro-142.png new file mode 100644 index 0000000..ade4a5c Binary files /dev/null and b/B4A/Files/marker-negro-142.png differ diff --git a/B4A/Files/marker-negro-143.png b/B4A/Files/marker-negro-143.png new file mode 100644 index 0000000..05ed5c5 Binary files /dev/null and b/B4A/Files/marker-negro-143.png differ diff --git a/B4A/Files/marker-negro-144.png b/B4A/Files/marker-negro-144.png new file mode 100644 index 0000000..9ca1a29 Binary files /dev/null and b/B4A/Files/marker-negro-144.png differ diff --git a/B4A/Files/marker-negro-145.png b/B4A/Files/marker-negro-145.png new file mode 100644 index 0000000..87d069a Binary files /dev/null and b/B4A/Files/marker-negro-145.png differ diff --git a/B4A/Files/marker-negro-146.png b/B4A/Files/marker-negro-146.png new file mode 100644 index 0000000..2a2d3c7 Binary files /dev/null and b/B4A/Files/marker-negro-146.png differ diff --git a/B4A/Files/marker-negro-147.png b/B4A/Files/marker-negro-147.png new file mode 100644 index 0000000..28e6fc7 Binary files /dev/null and b/B4A/Files/marker-negro-147.png differ diff --git a/B4A/Files/marker-negro-148.png b/B4A/Files/marker-negro-148.png new file mode 100644 index 0000000..a69019c Binary files /dev/null and b/B4A/Files/marker-negro-148.png differ diff --git a/B4A/Files/marker-negro-149.png b/B4A/Files/marker-negro-149.png new file mode 100644 index 0000000..b8cb77c Binary files /dev/null and b/B4A/Files/marker-negro-149.png differ diff --git a/B4A/Files/marker-negro-15.png b/B4A/Files/marker-negro-15.png new file mode 100644 index 0000000..f79b160 Binary files /dev/null and b/B4A/Files/marker-negro-15.png differ diff --git a/B4A/Files/marker-negro-150.png b/B4A/Files/marker-negro-150.png new file mode 100644 index 0000000..e415684 Binary files /dev/null and b/B4A/Files/marker-negro-150.png differ diff --git a/B4A/Files/marker-negro-16.png b/B4A/Files/marker-negro-16.png new file mode 100644 index 0000000..40ba473 Binary files /dev/null and b/B4A/Files/marker-negro-16.png differ diff --git a/B4A/Files/marker-negro-17.png b/B4A/Files/marker-negro-17.png new file mode 100644 index 0000000..7d18fe0 Binary files /dev/null and b/B4A/Files/marker-negro-17.png differ diff --git a/B4A/Files/marker-negro-18.png b/B4A/Files/marker-negro-18.png new file mode 100644 index 0000000..7b56689 Binary files /dev/null and b/B4A/Files/marker-negro-18.png differ diff --git a/B4A/Files/marker-negro-19.png b/B4A/Files/marker-negro-19.png new file mode 100644 index 0000000..a9dc7a3 Binary files /dev/null and b/B4A/Files/marker-negro-19.png differ diff --git a/B4A/Files/marker-negro-2.png b/B4A/Files/marker-negro-2.png new file mode 100644 index 0000000..8bcbebd Binary files /dev/null and b/B4A/Files/marker-negro-2.png differ diff --git a/B4A/Files/marker-negro-20.png b/B4A/Files/marker-negro-20.png new file mode 100644 index 0000000..6a6d9ff Binary files /dev/null and b/B4A/Files/marker-negro-20.png differ diff --git a/B4A/Files/marker-negro-21.png b/B4A/Files/marker-negro-21.png new file mode 100644 index 0000000..70d6b9d Binary files /dev/null and b/B4A/Files/marker-negro-21.png differ diff --git a/B4A/Files/marker-negro-22.png b/B4A/Files/marker-negro-22.png new file mode 100644 index 0000000..b10a108 Binary files /dev/null and b/B4A/Files/marker-negro-22.png differ diff --git a/B4A/Files/marker-negro-23.png b/B4A/Files/marker-negro-23.png new file mode 100644 index 0000000..146c3a2 Binary files /dev/null and b/B4A/Files/marker-negro-23.png differ diff --git a/B4A/Files/marker-negro-24.png b/B4A/Files/marker-negro-24.png new file mode 100644 index 0000000..6cc7e8c Binary files /dev/null and b/B4A/Files/marker-negro-24.png differ diff --git a/B4A/Files/marker-negro-25.png b/B4A/Files/marker-negro-25.png new file mode 100644 index 0000000..3c72975 Binary files /dev/null and b/B4A/Files/marker-negro-25.png differ diff --git a/B4A/Files/marker-negro-26.png b/B4A/Files/marker-negro-26.png new file mode 100644 index 0000000..beb2e8c Binary files /dev/null and b/B4A/Files/marker-negro-26.png differ diff --git a/B4A/Files/marker-negro-27.png b/B4A/Files/marker-negro-27.png new file mode 100644 index 0000000..5360aaf Binary files /dev/null and b/B4A/Files/marker-negro-27.png differ diff --git a/B4A/Files/marker-negro-28.png b/B4A/Files/marker-negro-28.png new file mode 100644 index 0000000..80488c0 Binary files /dev/null and b/B4A/Files/marker-negro-28.png differ diff --git a/B4A/Files/marker-negro-29.png b/B4A/Files/marker-negro-29.png new file mode 100644 index 0000000..4478c3c Binary files /dev/null and b/B4A/Files/marker-negro-29.png differ diff --git a/B4A/Files/marker-negro-3.png b/B4A/Files/marker-negro-3.png new file mode 100644 index 0000000..d05f408 Binary files /dev/null and b/B4A/Files/marker-negro-3.png differ diff --git a/B4A/Files/marker-negro-30.png b/B4A/Files/marker-negro-30.png new file mode 100644 index 0000000..323cf4f Binary files /dev/null and b/B4A/Files/marker-negro-30.png differ diff --git a/B4A/Files/marker-negro-31.png b/B4A/Files/marker-negro-31.png new file mode 100644 index 0000000..e5c6422 Binary files /dev/null and b/B4A/Files/marker-negro-31.png differ diff --git a/B4A/Files/marker-negro-32.png b/B4A/Files/marker-negro-32.png new file mode 100644 index 0000000..51eedee Binary files /dev/null and b/B4A/Files/marker-negro-32.png differ diff --git a/B4A/Files/marker-negro-33.png b/B4A/Files/marker-negro-33.png new file mode 100644 index 0000000..dad0dfd Binary files /dev/null and b/B4A/Files/marker-negro-33.png differ diff --git a/B4A/Files/marker-negro-34.png b/B4A/Files/marker-negro-34.png new file mode 100644 index 0000000..03a6070 Binary files /dev/null and b/B4A/Files/marker-negro-34.png differ diff --git a/B4A/Files/marker-negro-35.png b/B4A/Files/marker-negro-35.png new file mode 100644 index 0000000..18f8439 Binary files /dev/null and b/B4A/Files/marker-negro-35.png differ diff --git a/B4A/Files/marker-negro-36.png b/B4A/Files/marker-negro-36.png new file mode 100644 index 0000000..b76ea8b Binary files /dev/null and b/B4A/Files/marker-negro-36.png differ diff --git a/B4A/Files/marker-negro-37.png b/B4A/Files/marker-negro-37.png new file mode 100644 index 0000000..6beecc7 Binary files /dev/null and b/B4A/Files/marker-negro-37.png differ diff --git a/B4A/Files/marker-negro-38.png b/B4A/Files/marker-negro-38.png new file mode 100644 index 0000000..8b430d5 Binary files /dev/null and b/B4A/Files/marker-negro-38.png differ diff --git a/B4A/Files/marker-negro-39.png b/B4A/Files/marker-negro-39.png new file mode 100644 index 0000000..c79b71d Binary files /dev/null and b/B4A/Files/marker-negro-39.png differ diff --git a/B4A/Files/marker-negro-4.png b/B4A/Files/marker-negro-4.png new file mode 100644 index 0000000..e97dc39 Binary files /dev/null and b/B4A/Files/marker-negro-4.png differ diff --git a/B4A/Files/marker-negro-40.png b/B4A/Files/marker-negro-40.png new file mode 100644 index 0000000..adbe907 Binary files /dev/null and b/B4A/Files/marker-negro-40.png differ diff --git a/B4A/Files/marker-negro-41.png b/B4A/Files/marker-negro-41.png new file mode 100644 index 0000000..5192b06 Binary files /dev/null and b/B4A/Files/marker-negro-41.png differ diff --git a/B4A/Files/marker-negro-42.png b/B4A/Files/marker-negro-42.png new file mode 100644 index 0000000..f8a23ad Binary files /dev/null and b/B4A/Files/marker-negro-42.png differ diff --git a/B4A/Files/marker-negro-43.png b/B4A/Files/marker-negro-43.png new file mode 100644 index 0000000..bad13e4 Binary files /dev/null and b/B4A/Files/marker-negro-43.png differ diff --git a/B4A/Files/marker-negro-44.png b/B4A/Files/marker-negro-44.png new file mode 100644 index 0000000..0d50850 Binary files /dev/null and b/B4A/Files/marker-negro-44.png differ diff --git a/B4A/Files/marker-negro-45.png b/B4A/Files/marker-negro-45.png new file mode 100644 index 0000000..b8b0c41 Binary files /dev/null and b/B4A/Files/marker-negro-45.png differ diff --git a/B4A/Files/marker-negro-46.png b/B4A/Files/marker-negro-46.png new file mode 100644 index 0000000..7d0969b Binary files /dev/null and b/B4A/Files/marker-negro-46.png differ diff --git a/B4A/Files/marker-negro-47.png b/B4A/Files/marker-negro-47.png new file mode 100644 index 0000000..cd4eb61 Binary files /dev/null and b/B4A/Files/marker-negro-47.png differ diff --git a/B4A/Files/marker-negro-48.png b/B4A/Files/marker-negro-48.png new file mode 100644 index 0000000..2256cdc Binary files /dev/null and b/B4A/Files/marker-negro-48.png differ diff --git a/B4A/Files/marker-negro-49.png b/B4A/Files/marker-negro-49.png new file mode 100644 index 0000000..c6dd503 Binary files /dev/null and b/B4A/Files/marker-negro-49.png differ diff --git a/B4A/Files/marker-negro-5.png b/B4A/Files/marker-negro-5.png new file mode 100644 index 0000000..f130740 Binary files /dev/null and b/B4A/Files/marker-negro-5.png differ diff --git a/B4A/Files/marker-negro-50.png b/B4A/Files/marker-negro-50.png new file mode 100644 index 0000000..e89bae9 Binary files /dev/null and b/B4A/Files/marker-negro-50.png differ diff --git a/B4A/Files/marker-negro-51.png b/B4A/Files/marker-negro-51.png new file mode 100644 index 0000000..1d50194 Binary files /dev/null and b/B4A/Files/marker-negro-51.png differ diff --git a/B4A/Files/marker-negro-52.png b/B4A/Files/marker-negro-52.png new file mode 100644 index 0000000..84095e2 Binary files /dev/null and b/B4A/Files/marker-negro-52.png differ diff --git a/B4A/Files/marker-negro-53.png b/B4A/Files/marker-negro-53.png new file mode 100644 index 0000000..969a9c5 Binary files /dev/null and b/B4A/Files/marker-negro-53.png differ diff --git a/B4A/Files/marker-negro-54.png b/B4A/Files/marker-negro-54.png new file mode 100644 index 0000000..9d66992 Binary files /dev/null and b/B4A/Files/marker-negro-54.png differ diff --git a/B4A/Files/marker-negro-55.png b/B4A/Files/marker-negro-55.png new file mode 100644 index 0000000..465192c Binary files /dev/null and b/B4A/Files/marker-negro-55.png differ diff --git a/B4A/Files/marker-negro-56.png b/B4A/Files/marker-negro-56.png new file mode 100644 index 0000000..e91f48d Binary files /dev/null and b/B4A/Files/marker-negro-56.png differ diff --git a/B4A/Files/marker-negro-57.png b/B4A/Files/marker-negro-57.png new file mode 100644 index 0000000..5cf1774 Binary files /dev/null and b/B4A/Files/marker-negro-57.png differ diff --git a/B4A/Files/marker-negro-58.png b/B4A/Files/marker-negro-58.png new file mode 100644 index 0000000..45d5ef4 Binary files /dev/null and b/B4A/Files/marker-negro-58.png differ diff --git a/B4A/Files/marker-negro-59.png b/B4A/Files/marker-negro-59.png new file mode 100644 index 0000000..ca5b709 Binary files /dev/null and b/B4A/Files/marker-negro-59.png differ diff --git a/B4A/Files/marker-negro-6.png b/B4A/Files/marker-negro-6.png new file mode 100644 index 0000000..af0d4d8 Binary files /dev/null and b/B4A/Files/marker-negro-6.png differ diff --git a/B4A/Files/marker-negro-60.png b/B4A/Files/marker-negro-60.png new file mode 100644 index 0000000..b46b85f Binary files /dev/null and b/B4A/Files/marker-negro-60.png differ diff --git a/B4A/Files/marker-negro-61.png b/B4A/Files/marker-negro-61.png new file mode 100644 index 0000000..8b4fb11 Binary files /dev/null and b/B4A/Files/marker-negro-61.png differ diff --git a/B4A/Files/marker-negro-62.png b/B4A/Files/marker-negro-62.png new file mode 100644 index 0000000..13fa2bf Binary files /dev/null and b/B4A/Files/marker-negro-62.png differ diff --git a/B4A/Files/marker-negro-63.png b/B4A/Files/marker-negro-63.png new file mode 100644 index 0000000..5b0c80a Binary files /dev/null and b/B4A/Files/marker-negro-63.png differ diff --git a/B4A/Files/marker-negro-64.png b/B4A/Files/marker-negro-64.png new file mode 100644 index 0000000..f254f08 Binary files /dev/null and b/B4A/Files/marker-negro-64.png differ diff --git a/B4A/Files/marker-negro-65.png b/B4A/Files/marker-negro-65.png new file mode 100644 index 0000000..de127e7 Binary files /dev/null and b/B4A/Files/marker-negro-65.png differ diff --git a/B4A/Files/marker-negro-66.png b/B4A/Files/marker-negro-66.png new file mode 100644 index 0000000..5561f63 Binary files /dev/null and b/B4A/Files/marker-negro-66.png differ diff --git a/B4A/Files/marker-negro-67.png b/B4A/Files/marker-negro-67.png new file mode 100644 index 0000000..6afbbac Binary files /dev/null and b/B4A/Files/marker-negro-67.png differ diff --git a/B4A/Files/marker-negro-68.png b/B4A/Files/marker-negro-68.png new file mode 100644 index 0000000..2e08b24 Binary files /dev/null and b/B4A/Files/marker-negro-68.png differ diff --git a/B4A/Files/marker-negro-69.png b/B4A/Files/marker-negro-69.png new file mode 100644 index 0000000..10df9f5 Binary files /dev/null and b/B4A/Files/marker-negro-69.png differ diff --git a/B4A/Files/marker-negro-7.png b/B4A/Files/marker-negro-7.png new file mode 100644 index 0000000..cee1f73 Binary files /dev/null and b/B4A/Files/marker-negro-7.png differ diff --git a/B4A/Files/marker-negro-70.png b/B4A/Files/marker-negro-70.png new file mode 100644 index 0000000..beb6d5d Binary files /dev/null and b/B4A/Files/marker-negro-70.png differ diff --git a/B4A/Files/marker-negro-71.png b/B4A/Files/marker-negro-71.png new file mode 100644 index 0000000..6d5353c Binary files /dev/null and b/B4A/Files/marker-negro-71.png differ diff --git a/B4A/Files/marker-negro-72.png b/B4A/Files/marker-negro-72.png new file mode 100644 index 0000000..b9a9276 Binary files /dev/null and b/B4A/Files/marker-negro-72.png differ diff --git a/B4A/Files/marker-negro-73.png b/B4A/Files/marker-negro-73.png new file mode 100644 index 0000000..08d2c5c Binary files /dev/null and b/B4A/Files/marker-negro-73.png differ diff --git a/B4A/Files/marker-negro-74.png b/B4A/Files/marker-negro-74.png new file mode 100644 index 0000000..487fc43 Binary files /dev/null and b/B4A/Files/marker-negro-74.png differ diff --git a/B4A/Files/marker-negro-75.png b/B4A/Files/marker-negro-75.png new file mode 100644 index 0000000..b833886 Binary files /dev/null and b/B4A/Files/marker-negro-75.png differ diff --git a/B4A/Files/marker-negro-76.png b/B4A/Files/marker-negro-76.png new file mode 100644 index 0000000..77ce6df Binary files /dev/null and b/B4A/Files/marker-negro-76.png differ diff --git a/B4A/Files/marker-negro-77.png b/B4A/Files/marker-negro-77.png new file mode 100644 index 0000000..ddaa176 Binary files /dev/null and b/B4A/Files/marker-negro-77.png differ diff --git a/B4A/Files/marker-negro-78.png b/B4A/Files/marker-negro-78.png new file mode 100644 index 0000000..c4e7563 Binary files /dev/null and b/B4A/Files/marker-negro-78.png differ diff --git a/B4A/Files/marker-negro-79.png b/B4A/Files/marker-negro-79.png new file mode 100644 index 0000000..9bd3c92 Binary files /dev/null and b/B4A/Files/marker-negro-79.png differ diff --git a/B4A/Files/marker-negro-8.png b/B4A/Files/marker-negro-8.png new file mode 100644 index 0000000..39bea75 Binary files /dev/null and b/B4A/Files/marker-negro-8.png differ diff --git a/B4A/Files/marker-negro-80.png b/B4A/Files/marker-negro-80.png new file mode 100644 index 0000000..f98cfce Binary files /dev/null and b/B4A/Files/marker-negro-80.png differ diff --git a/B4A/Files/marker-negro-81.png b/B4A/Files/marker-negro-81.png new file mode 100644 index 0000000..c7f7b28 Binary files /dev/null and b/B4A/Files/marker-negro-81.png differ diff --git a/B4A/Files/marker-negro-82.png b/B4A/Files/marker-negro-82.png new file mode 100644 index 0000000..a4db4df Binary files /dev/null and b/B4A/Files/marker-negro-82.png differ diff --git a/B4A/Files/marker-negro-83.png b/B4A/Files/marker-negro-83.png new file mode 100644 index 0000000..db60052 Binary files /dev/null and b/B4A/Files/marker-negro-83.png differ diff --git a/B4A/Files/marker-negro-84.png b/B4A/Files/marker-negro-84.png new file mode 100644 index 0000000..73ccd9d Binary files /dev/null and b/B4A/Files/marker-negro-84.png differ diff --git a/B4A/Files/marker-negro-85.png b/B4A/Files/marker-negro-85.png new file mode 100644 index 0000000..4d0db5f Binary files /dev/null and b/B4A/Files/marker-negro-85.png differ diff --git a/B4A/Files/marker-negro-86.png b/B4A/Files/marker-negro-86.png new file mode 100644 index 0000000..313f303 Binary files /dev/null and b/B4A/Files/marker-negro-86.png differ diff --git a/B4A/Files/marker-negro-87.png b/B4A/Files/marker-negro-87.png new file mode 100644 index 0000000..9c846d8 Binary files /dev/null and b/B4A/Files/marker-negro-87.png differ diff --git a/B4A/Files/marker-negro-88.png b/B4A/Files/marker-negro-88.png new file mode 100644 index 0000000..d1193e1 Binary files /dev/null and b/B4A/Files/marker-negro-88.png differ diff --git a/B4A/Files/marker-negro-89.png b/B4A/Files/marker-negro-89.png new file mode 100644 index 0000000..aa2b747 Binary files /dev/null and b/B4A/Files/marker-negro-89.png differ diff --git a/B4A/Files/marker-negro-9.png b/B4A/Files/marker-negro-9.png new file mode 100644 index 0000000..ead27ac Binary files /dev/null and b/B4A/Files/marker-negro-9.png differ diff --git a/B4A/Files/marker-negro-90.png b/B4A/Files/marker-negro-90.png new file mode 100644 index 0000000..936eaa7 Binary files /dev/null and b/B4A/Files/marker-negro-90.png differ diff --git a/B4A/Files/marker-negro-91.png b/B4A/Files/marker-negro-91.png new file mode 100644 index 0000000..d7528e6 Binary files /dev/null and b/B4A/Files/marker-negro-91.png differ diff --git a/B4A/Files/marker-negro-92.png b/B4A/Files/marker-negro-92.png new file mode 100644 index 0000000..21f4936 Binary files /dev/null and b/B4A/Files/marker-negro-92.png differ diff --git a/B4A/Files/marker-negro-93.png b/B4A/Files/marker-negro-93.png new file mode 100644 index 0000000..a3327e9 Binary files /dev/null and b/B4A/Files/marker-negro-93.png differ diff --git a/B4A/Files/marker-negro-94.png b/B4A/Files/marker-negro-94.png new file mode 100644 index 0000000..c698e4a Binary files /dev/null and b/B4A/Files/marker-negro-94.png differ diff --git a/B4A/Files/marker-negro-95.png b/B4A/Files/marker-negro-95.png new file mode 100644 index 0000000..d7a487e Binary files /dev/null and b/B4A/Files/marker-negro-95.png differ diff --git a/B4A/Files/marker-negro-96.png b/B4A/Files/marker-negro-96.png new file mode 100644 index 0000000..1afa30e Binary files /dev/null and b/B4A/Files/marker-negro-96.png differ diff --git a/B4A/Files/marker-negro-97.png b/B4A/Files/marker-negro-97.png new file mode 100644 index 0000000..d8ecfc1 Binary files /dev/null and b/B4A/Files/marker-negro-97.png differ diff --git a/B4A/Files/marker-negro-98.png b/B4A/Files/marker-negro-98.png new file mode 100644 index 0000000..25ba618 Binary files /dev/null and b/B4A/Files/marker-negro-98.png differ diff --git a/B4A/Files/marker-negro-99.png b/B4A/Files/marker-negro-99.png new file mode 100644 index 0000000..f6a58c5 Binary files /dev/null and b/B4A/Files/marker-negro-99.png differ diff --git a/B4A/Files/marker-rojo-0.png b/B4A/Files/marker-rojo-0.png new file mode 100644 index 0000000..a53150b Binary files /dev/null and b/B4A/Files/marker-rojo-0.png differ diff --git a/B4A/Files/marker-rojo-1.png b/B4A/Files/marker-rojo-1.png new file mode 100644 index 0000000..9d3cb93 Binary files /dev/null and b/B4A/Files/marker-rojo-1.png differ diff --git a/B4A/Files/marker-rojo-10.png b/B4A/Files/marker-rojo-10.png new file mode 100644 index 0000000..dfd1035 Binary files /dev/null and b/B4A/Files/marker-rojo-10.png differ diff --git a/B4A/Files/marker-rojo-100.png b/B4A/Files/marker-rojo-100.png new file mode 100644 index 0000000..1483bb1 Binary files /dev/null and b/B4A/Files/marker-rojo-100.png differ diff --git a/B4A/Files/marker-rojo-101.png b/B4A/Files/marker-rojo-101.png new file mode 100644 index 0000000..3a3ad55 Binary files /dev/null and b/B4A/Files/marker-rojo-101.png differ diff --git a/B4A/Files/marker-rojo-102.png b/B4A/Files/marker-rojo-102.png new file mode 100644 index 0000000..a1a0df3 Binary files /dev/null and b/B4A/Files/marker-rojo-102.png differ diff --git a/B4A/Files/marker-rojo-103.png b/B4A/Files/marker-rojo-103.png new file mode 100644 index 0000000..930ff88 Binary files /dev/null and b/B4A/Files/marker-rojo-103.png differ diff --git a/B4A/Files/marker-rojo-104.png b/B4A/Files/marker-rojo-104.png new file mode 100644 index 0000000..00046fb Binary files /dev/null and b/B4A/Files/marker-rojo-104.png differ diff --git a/B4A/Files/marker-rojo-105.png b/B4A/Files/marker-rojo-105.png new file mode 100644 index 0000000..759b910 Binary files /dev/null and b/B4A/Files/marker-rojo-105.png differ diff --git a/B4A/Files/marker-rojo-106.png b/B4A/Files/marker-rojo-106.png new file mode 100644 index 0000000..bbab2fc Binary files /dev/null and b/B4A/Files/marker-rojo-106.png differ diff --git a/B4A/Files/marker-rojo-107.png b/B4A/Files/marker-rojo-107.png new file mode 100644 index 0000000..400d221 Binary files /dev/null and b/B4A/Files/marker-rojo-107.png differ diff --git a/B4A/Files/marker-rojo-108.png b/B4A/Files/marker-rojo-108.png new file mode 100644 index 0000000..7872cbb Binary files /dev/null and b/B4A/Files/marker-rojo-108.png differ diff --git a/B4A/Files/marker-rojo-109.png b/B4A/Files/marker-rojo-109.png new file mode 100644 index 0000000..55b2a2c Binary files /dev/null and b/B4A/Files/marker-rojo-109.png differ diff --git a/B4A/Files/marker-rojo-11.png b/B4A/Files/marker-rojo-11.png new file mode 100644 index 0000000..f03381a Binary files /dev/null and b/B4A/Files/marker-rojo-11.png differ diff --git a/B4A/Files/marker-rojo-110.png b/B4A/Files/marker-rojo-110.png new file mode 100644 index 0000000..16f40cf Binary files /dev/null and b/B4A/Files/marker-rojo-110.png differ diff --git a/B4A/Files/marker-rojo-111.png b/B4A/Files/marker-rojo-111.png new file mode 100644 index 0000000..1c1f071 Binary files /dev/null and b/B4A/Files/marker-rojo-111.png differ diff --git a/B4A/Files/marker-rojo-112.png b/B4A/Files/marker-rojo-112.png new file mode 100644 index 0000000..cfcb77d Binary files /dev/null and b/B4A/Files/marker-rojo-112.png differ diff --git a/B4A/Files/marker-rojo-113.png b/B4A/Files/marker-rojo-113.png new file mode 100644 index 0000000..a23038c Binary files /dev/null and b/B4A/Files/marker-rojo-113.png differ diff --git a/B4A/Files/marker-rojo-114.png b/B4A/Files/marker-rojo-114.png new file mode 100644 index 0000000..38b9499 Binary files /dev/null and b/B4A/Files/marker-rojo-114.png differ diff --git a/B4A/Files/marker-rojo-115.png b/B4A/Files/marker-rojo-115.png new file mode 100644 index 0000000..1994390 Binary files /dev/null and b/B4A/Files/marker-rojo-115.png differ diff --git a/B4A/Files/marker-rojo-116.png b/B4A/Files/marker-rojo-116.png new file mode 100644 index 0000000..d6eb29f Binary files /dev/null and b/B4A/Files/marker-rojo-116.png differ diff --git a/B4A/Files/marker-rojo-117.png b/B4A/Files/marker-rojo-117.png new file mode 100644 index 0000000..69f411c Binary files /dev/null and b/B4A/Files/marker-rojo-117.png differ diff --git a/B4A/Files/marker-rojo-118.png b/B4A/Files/marker-rojo-118.png new file mode 100644 index 0000000..331d474 Binary files /dev/null and b/B4A/Files/marker-rojo-118.png differ diff --git a/B4A/Files/marker-rojo-119.png b/B4A/Files/marker-rojo-119.png new file mode 100644 index 0000000..dc2f657 Binary files /dev/null and b/B4A/Files/marker-rojo-119.png differ diff --git a/B4A/Files/marker-rojo-12.png b/B4A/Files/marker-rojo-12.png new file mode 100644 index 0000000..c2e93b7 Binary files /dev/null and b/B4A/Files/marker-rojo-12.png differ diff --git a/B4A/Files/marker-rojo-120.png b/B4A/Files/marker-rojo-120.png new file mode 100644 index 0000000..819446f Binary files /dev/null and b/B4A/Files/marker-rojo-120.png differ diff --git a/B4A/Files/marker-rojo-121.png b/B4A/Files/marker-rojo-121.png new file mode 100644 index 0000000..63ac374 Binary files /dev/null and b/B4A/Files/marker-rojo-121.png differ diff --git a/B4A/Files/marker-rojo-122.png b/B4A/Files/marker-rojo-122.png new file mode 100644 index 0000000..ce8e273 Binary files /dev/null and b/B4A/Files/marker-rojo-122.png differ diff --git a/B4A/Files/marker-rojo-123.png b/B4A/Files/marker-rojo-123.png new file mode 100644 index 0000000..bb0b0ef Binary files /dev/null and b/B4A/Files/marker-rojo-123.png differ diff --git a/B4A/Files/marker-rojo-124.png b/B4A/Files/marker-rojo-124.png new file mode 100644 index 0000000..08d2c30 Binary files /dev/null and b/B4A/Files/marker-rojo-124.png differ diff --git a/B4A/Files/marker-rojo-125.png b/B4A/Files/marker-rojo-125.png new file mode 100644 index 0000000..b6111cf Binary files /dev/null and b/B4A/Files/marker-rojo-125.png differ diff --git a/B4A/Files/marker-rojo-126.png b/B4A/Files/marker-rojo-126.png new file mode 100644 index 0000000..bd20aea Binary files /dev/null and b/B4A/Files/marker-rojo-126.png differ diff --git a/B4A/Files/marker-rojo-127.png b/B4A/Files/marker-rojo-127.png new file mode 100644 index 0000000..4239ab0 Binary files /dev/null and b/B4A/Files/marker-rojo-127.png differ diff --git a/B4A/Files/marker-rojo-128.png b/B4A/Files/marker-rojo-128.png new file mode 100644 index 0000000..9efc95c Binary files /dev/null and b/B4A/Files/marker-rojo-128.png differ diff --git a/B4A/Files/marker-rojo-129.png b/B4A/Files/marker-rojo-129.png new file mode 100644 index 0000000..68975d0 Binary files /dev/null and b/B4A/Files/marker-rojo-129.png differ diff --git a/B4A/Files/marker-rojo-13.png b/B4A/Files/marker-rojo-13.png new file mode 100644 index 0000000..22b88d9 Binary files /dev/null and b/B4A/Files/marker-rojo-13.png differ diff --git a/B4A/Files/marker-rojo-130.png b/B4A/Files/marker-rojo-130.png new file mode 100644 index 0000000..c839d69 Binary files /dev/null and b/B4A/Files/marker-rojo-130.png differ diff --git a/B4A/Files/marker-rojo-131.png b/B4A/Files/marker-rojo-131.png new file mode 100644 index 0000000..2007bec Binary files /dev/null and b/B4A/Files/marker-rojo-131.png differ diff --git a/B4A/Files/marker-rojo-132.png b/B4A/Files/marker-rojo-132.png new file mode 100644 index 0000000..dbf7380 Binary files /dev/null and b/B4A/Files/marker-rojo-132.png differ diff --git a/B4A/Files/marker-rojo-133.png b/B4A/Files/marker-rojo-133.png new file mode 100644 index 0000000..6d6af59 Binary files /dev/null and b/B4A/Files/marker-rojo-133.png differ diff --git a/B4A/Files/marker-rojo-134.png b/B4A/Files/marker-rojo-134.png new file mode 100644 index 0000000..a8c0bcc Binary files /dev/null and b/B4A/Files/marker-rojo-134.png differ diff --git a/B4A/Files/marker-rojo-135.png b/B4A/Files/marker-rojo-135.png new file mode 100644 index 0000000..40fadf0 Binary files /dev/null and b/B4A/Files/marker-rojo-135.png differ diff --git a/B4A/Files/marker-rojo-136.png b/B4A/Files/marker-rojo-136.png new file mode 100644 index 0000000..141caa5 Binary files /dev/null and b/B4A/Files/marker-rojo-136.png differ diff --git a/B4A/Files/marker-rojo-137.png b/B4A/Files/marker-rojo-137.png new file mode 100644 index 0000000..38408c8 Binary files /dev/null and b/B4A/Files/marker-rojo-137.png differ diff --git a/B4A/Files/marker-rojo-138.png b/B4A/Files/marker-rojo-138.png new file mode 100644 index 0000000..b340b33 Binary files /dev/null and b/B4A/Files/marker-rojo-138.png differ diff --git a/B4A/Files/marker-rojo-139.png b/B4A/Files/marker-rojo-139.png new file mode 100644 index 0000000..970b17d Binary files /dev/null and b/B4A/Files/marker-rojo-139.png differ diff --git a/B4A/Files/marker-rojo-14.png b/B4A/Files/marker-rojo-14.png new file mode 100644 index 0000000..53c04c4 Binary files /dev/null and b/B4A/Files/marker-rojo-14.png differ diff --git a/B4A/Files/marker-rojo-140.png b/B4A/Files/marker-rojo-140.png new file mode 100644 index 0000000..94658e1 Binary files /dev/null and b/B4A/Files/marker-rojo-140.png differ diff --git a/B4A/Files/marker-rojo-141.png b/B4A/Files/marker-rojo-141.png new file mode 100644 index 0000000..69596a0 Binary files /dev/null and b/B4A/Files/marker-rojo-141.png differ diff --git a/B4A/Files/marker-rojo-142.png b/B4A/Files/marker-rojo-142.png new file mode 100644 index 0000000..b0ac536 Binary files /dev/null and b/B4A/Files/marker-rojo-142.png differ diff --git a/B4A/Files/marker-rojo-143.png b/B4A/Files/marker-rojo-143.png new file mode 100644 index 0000000..0f7e02f Binary files /dev/null and b/B4A/Files/marker-rojo-143.png differ diff --git a/B4A/Files/marker-rojo-144.png b/B4A/Files/marker-rojo-144.png new file mode 100644 index 0000000..9b56466 Binary files /dev/null and b/B4A/Files/marker-rojo-144.png differ diff --git a/B4A/Files/marker-rojo-145.png b/B4A/Files/marker-rojo-145.png new file mode 100644 index 0000000..18689b7 Binary files /dev/null and b/B4A/Files/marker-rojo-145.png differ diff --git a/B4A/Files/marker-rojo-146.png b/B4A/Files/marker-rojo-146.png new file mode 100644 index 0000000..967d599 Binary files /dev/null and b/B4A/Files/marker-rojo-146.png differ diff --git a/B4A/Files/marker-rojo-147.png b/B4A/Files/marker-rojo-147.png new file mode 100644 index 0000000..183ede7 Binary files /dev/null and b/B4A/Files/marker-rojo-147.png differ diff --git a/B4A/Files/marker-rojo-148.png b/B4A/Files/marker-rojo-148.png new file mode 100644 index 0000000..4e6cdd6 Binary files /dev/null and b/B4A/Files/marker-rojo-148.png differ diff --git a/B4A/Files/marker-rojo-149.png b/B4A/Files/marker-rojo-149.png new file mode 100644 index 0000000..79d8540 Binary files /dev/null and b/B4A/Files/marker-rojo-149.png differ diff --git a/B4A/Files/marker-rojo-15.png b/B4A/Files/marker-rojo-15.png new file mode 100644 index 0000000..ae5942d Binary files /dev/null and b/B4A/Files/marker-rojo-15.png differ diff --git a/B4A/Files/marker-rojo-150.png b/B4A/Files/marker-rojo-150.png new file mode 100644 index 0000000..4e327ae Binary files /dev/null and b/B4A/Files/marker-rojo-150.png differ diff --git a/B4A/Files/marker-rojo-16.png b/B4A/Files/marker-rojo-16.png new file mode 100644 index 0000000..af90495 Binary files /dev/null and b/B4A/Files/marker-rojo-16.png differ diff --git a/B4A/Files/marker-rojo-17.png b/B4A/Files/marker-rojo-17.png new file mode 100644 index 0000000..35be6d0 Binary files /dev/null and b/B4A/Files/marker-rojo-17.png differ diff --git a/B4A/Files/marker-rojo-18.png b/B4A/Files/marker-rojo-18.png new file mode 100644 index 0000000..6549c3c Binary files /dev/null and b/B4A/Files/marker-rojo-18.png differ diff --git a/B4A/Files/marker-rojo-19.png b/B4A/Files/marker-rojo-19.png new file mode 100644 index 0000000..2d62ac4 Binary files /dev/null and b/B4A/Files/marker-rojo-19.png differ diff --git a/B4A/Files/marker-rojo-2.png b/B4A/Files/marker-rojo-2.png new file mode 100644 index 0000000..9292404 Binary files /dev/null and b/B4A/Files/marker-rojo-2.png differ diff --git a/B4A/Files/marker-rojo-20.png b/B4A/Files/marker-rojo-20.png new file mode 100644 index 0000000..6554032 Binary files /dev/null and b/B4A/Files/marker-rojo-20.png differ diff --git a/B4A/Files/marker-rojo-21.png b/B4A/Files/marker-rojo-21.png new file mode 100644 index 0000000..cb7ba4f Binary files /dev/null and b/B4A/Files/marker-rojo-21.png differ diff --git a/B4A/Files/marker-rojo-22.png b/B4A/Files/marker-rojo-22.png new file mode 100644 index 0000000..73c4a6a Binary files /dev/null and b/B4A/Files/marker-rojo-22.png differ diff --git a/B4A/Files/marker-rojo-23.png b/B4A/Files/marker-rojo-23.png new file mode 100644 index 0000000..05e36d8 Binary files /dev/null and b/B4A/Files/marker-rojo-23.png differ diff --git a/B4A/Files/marker-rojo-24.png b/B4A/Files/marker-rojo-24.png new file mode 100644 index 0000000..efceca3 Binary files /dev/null and b/B4A/Files/marker-rojo-24.png differ diff --git a/B4A/Files/marker-rojo-25.png b/B4A/Files/marker-rojo-25.png new file mode 100644 index 0000000..8985ac0 Binary files /dev/null and b/B4A/Files/marker-rojo-25.png differ diff --git a/B4A/Files/marker-rojo-26.png b/B4A/Files/marker-rojo-26.png new file mode 100644 index 0000000..a8188d9 Binary files /dev/null and b/B4A/Files/marker-rojo-26.png differ diff --git a/B4A/Files/marker-rojo-27.png b/B4A/Files/marker-rojo-27.png new file mode 100644 index 0000000..ba3ce7b Binary files /dev/null and b/B4A/Files/marker-rojo-27.png differ diff --git a/B4A/Files/marker-rojo-28.png b/B4A/Files/marker-rojo-28.png new file mode 100644 index 0000000..53e32be Binary files /dev/null and b/B4A/Files/marker-rojo-28.png differ diff --git a/B4A/Files/marker-rojo-29.png b/B4A/Files/marker-rojo-29.png new file mode 100644 index 0000000..c3daa0c Binary files /dev/null and b/B4A/Files/marker-rojo-29.png differ diff --git a/B4A/Files/marker-rojo-3.png b/B4A/Files/marker-rojo-3.png new file mode 100644 index 0000000..8408796 Binary files /dev/null and b/B4A/Files/marker-rojo-3.png differ diff --git a/B4A/Files/marker-rojo-30.png b/B4A/Files/marker-rojo-30.png new file mode 100644 index 0000000..4929f5f Binary files /dev/null and b/B4A/Files/marker-rojo-30.png differ diff --git a/B4A/Files/marker-rojo-31.png b/B4A/Files/marker-rojo-31.png new file mode 100644 index 0000000..5f6786f Binary files /dev/null and b/B4A/Files/marker-rojo-31.png differ diff --git a/B4A/Files/marker-rojo-32.png b/B4A/Files/marker-rojo-32.png new file mode 100644 index 0000000..22cdc71 Binary files /dev/null and b/B4A/Files/marker-rojo-32.png differ diff --git a/B4A/Files/marker-rojo-33.png b/B4A/Files/marker-rojo-33.png new file mode 100644 index 0000000..4602e54 Binary files /dev/null and b/B4A/Files/marker-rojo-33.png differ diff --git a/B4A/Files/marker-rojo-34.png b/B4A/Files/marker-rojo-34.png new file mode 100644 index 0000000..d3d5203 Binary files /dev/null and b/B4A/Files/marker-rojo-34.png differ diff --git a/B4A/Files/marker-rojo-35.png b/B4A/Files/marker-rojo-35.png new file mode 100644 index 0000000..4ca48eb Binary files /dev/null and b/B4A/Files/marker-rojo-35.png differ diff --git a/B4A/Files/marker-rojo-36.png b/B4A/Files/marker-rojo-36.png new file mode 100644 index 0000000..acdecf0 Binary files /dev/null and b/B4A/Files/marker-rojo-36.png differ diff --git a/B4A/Files/marker-rojo-37.png b/B4A/Files/marker-rojo-37.png new file mode 100644 index 0000000..a9f7f56 Binary files /dev/null and b/B4A/Files/marker-rojo-37.png differ diff --git a/B4A/Files/marker-rojo-38.png b/B4A/Files/marker-rojo-38.png new file mode 100644 index 0000000..77c143f Binary files /dev/null and b/B4A/Files/marker-rojo-38.png differ diff --git a/B4A/Files/marker-rojo-39.png b/B4A/Files/marker-rojo-39.png new file mode 100644 index 0000000..ab04a29 Binary files /dev/null and b/B4A/Files/marker-rojo-39.png differ diff --git a/B4A/Files/marker-rojo-4.png b/B4A/Files/marker-rojo-4.png new file mode 100644 index 0000000..3949f62 Binary files /dev/null and b/B4A/Files/marker-rojo-4.png differ diff --git a/B4A/Files/marker-rojo-40.png b/B4A/Files/marker-rojo-40.png new file mode 100644 index 0000000..f9f6ade Binary files /dev/null and b/B4A/Files/marker-rojo-40.png differ diff --git a/B4A/Files/marker-rojo-41.png b/B4A/Files/marker-rojo-41.png new file mode 100644 index 0000000..c709269 Binary files /dev/null and b/B4A/Files/marker-rojo-41.png differ diff --git a/B4A/Files/marker-rojo-42.png b/B4A/Files/marker-rojo-42.png new file mode 100644 index 0000000..a8cdd4c Binary files /dev/null and b/B4A/Files/marker-rojo-42.png differ diff --git a/B4A/Files/marker-rojo-43.png b/B4A/Files/marker-rojo-43.png new file mode 100644 index 0000000..9c05330 Binary files /dev/null and b/B4A/Files/marker-rojo-43.png differ diff --git a/B4A/Files/marker-rojo-44.png b/B4A/Files/marker-rojo-44.png new file mode 100644 index 0000000..6bd2955 Binary files /dev/null and b/B4A/Files/marker-rojo-44.png differ diff --git a/B4A/Files/marker-rojo-45.png b/B4A/Files/marker-rojo-45.png new file mode 100644 index 0000000..0d626e0 Binary files /dev/null and b/B4A/Files/marker-rojo-45.png differ diff --git a/B4A/Files/marker-rojo-46.png b/B4A/Files/marker-rojo-46.png new file mode 100644 index 0000000..bf81523 Binary files /dev/null and b/B4A/Files/marker-rojo-46.png differ diff --git a/B4A/Files/marker-rojo-47.png b/B4A/Files/marker-rojo-47.png new file mode 100644 index 0000000..fe9c03c Binary files /dev/null and b/B4A/Files/marker-rojo-47.png differ diff --git a/B4A/Files/marker-rojo-48.png b/B4A/Files/marker-rojo-48.png new file mode 100644 index 0000000..aad933a Binary files /dev/null and b/B4A/Files/marker-rojo-48.png differ diff --git a/B4A/Files/marker-rojo-49.png b/B4A/Files/marker-rojo-49.png new file mode 100644 index 0000000..8ca751f Binary files /dev/null and b/B4A/Files/marker-rojo-49.png differ diff --git a/B4A/Files/marker-rojo-5.png b/B4A/Files/marker-rojo-5.png new file mode 100644 index 0000000..908590b Binary files /dev/null and b/B4A/Files/marker-rojo-5.png differ diff --git a/B4A/Files/marker-rojo-50.png b/B4A/Files/marker-rojo-50.png new file mode 100644 index 0000000..c332a91 Binary files /dev/null and b/B4A/Files/marker-rojo-50.png differ diff --git a/B4A/Files/marker-rojo-51.png b/B4A/Files/marker-rojo-51.png new file mode 100644 index 0000000..fbdb260 Binary files /dev/null and b/B4A/Files/marker-rojo-51.png differ diff --git a/B4A/Files/marker-rojo-52.png b/B4A/Files/marker-rojo-52.png new file mode 100644 index 0000000..2862129 Binary files /dev/null and b/B4A/Files/marker-rojo-52.png differ diff --git a/B4A/Files/marker-rojo-53.png b/B4A/Files/marker-rojo-53.png new file mode 100644 index 0000000..fd97d26 Binary files /dev/null and b/B4A/Files/marker-rojo-53.png differ diff --git a/B4A/Files/marker-rojo-54.png b/B4A/Files/marker-rojo-54.png new file mode 100644 index 0000000..edaf337 Binary files /dev/null and b/B4A/Files/marker-rojo-54.png differ diff --git a/B4A/Files/marker-rojo-55.png b/B4A/Files/marker-rojo-55.png new file mode 100644 index 0000000..42e86ab Binary files /dev/null and b/B4A/Files/marker-rojo-55.png differ diff --git a/B4A/Files/marker-rojo-56.png b/B4A/Files/marker-rojo-56.png new file mode 100644 index 0000000..347551f Binary files /dev/null and b/B4A/Files/marker-rojo-56.png differ diff --git a/B4A/Files/marker-rojo-57.png b/B4A/Files/marker-rojo-57.png new file mode 100644 index 0000000..8266bea Binary files /dev/null and b/B4A/Files/marker-rojo-57.png differ diff --git a/B4A/Files/marker-rojo-58.png b/B4A/Files/marker-rojo-58.png new file mode 100644 index 0000000..22e171b Binary files /dev/null and b/B4A/Files/marker-rojo-58.png differ diff --git a/B4A/Files/marker-rojo-59.png b/B4A/Files/marker-rojo-59.png new file mode 100644 index 0000000..173cbd8 Binary files /dev/null and b/B4A/Files/marker-rojo-59.png differ diff --git a/B4A/Files/marker-rojo-6.png b/B4A/Files/marker-rojo-6.png new file mode 100644 index 0000000..116f874 Binary files /dev/null and b/B4A/Files/marker-rojo-6.png differ diff --git a/B4A/Files/marker-rojo-60.png b/B4A/Files/marker-rojo-60.png new file mode 100644 index 0000000..4f85297 Binary files /dev/null and b/B4A/Files/marker-rojo-60.png differ diff --git a/B4A/Files/marker-rojo-61.png b/B4A/Files/marker-rojo-61.png new file mode 100644 index 0000000..be43b44 Binary files /dev/null and b/B4A/Files/marker-rojo-61.png differ diff --git a/B4A/Files/marker-rojo-62.png b/B4A/Files/marker-rojo-62.png new file mode 100644 index 0000000..a86ecbc Binary files /dev/null and b/B4A/Files/marker-rojo-62.png differ diff --git a/B4A/Files/marker-rojo-63.png b/B4A/Files/marker-rojo-63.png new file mode 100644 index 0000000..de83695 Binary files /dev/null and b/B4A/Files/marker-rojo-63.png differ diff --git a/B4A/Files/marker-rojo-64.png b/B4A/Files/marker-rojo-64.png new file mode 100644 index 0000000..0e6c31c Binary files /dev/null and b/B4A/Files/marker-rojo-64.png differ diff --git a/B4A/Files/marker-rojo-65.png b/B4A/Files/marker-rojo-65.png new file mode 100644 index 0000000..513ecde Binary files /dev/null and b/B4A/Files/marker-rojo-65.png differ diff --git a/B4A/Files/marker-rojo-66.png b/B4A/Files/marker-rojo-66.png new file mode 100644 index 0000000..5464dea Binary files /dev/null and b/B4A/Files/marker-rojo-66.png differ diff --git a/B4A/Files/marker-rojo-67.png b/B4A/Files/marker-rojo-67.png new file mode 100644 index 0000000..80b20bb Binary files /dev/null and b/B4A/Files/marker-rojo-67.png differ diff --git a/B4A/Files/marker-rojo-68.png b/B4A/Files/marker-rojo-68.png new file mode 100644 index 0000000..6083880 Binary files /dev/null and b/B4A/Files/marker-rojo-68.png differ diff --git a/B4A/Files/marker-rojo-69.png b/B4A/Files/marker-rojo-69.png new file mode 100644 index 0000000..77be8ae Binary files /dev/null and b/B4A/Files/marker-rojo-69.png differ diff --git a/B4A/Files/marker-rojo-7.png b/B4A/Files/marker-rojo-7.png new file mode 100644 index 0000000..b33bef8 Binary files /dev/null and b/B4A/Files/marker-rojo-7.png differ diff --git a/B4A/Files/marker-rojo-70.png b/B4A/Files/marker-rojo-70.png new file mode 100644 index 0000000..ecfef03 Binary files /dev/null and b/B4A/Files/marker-rojo-70.png differ diff --git a/B4A/Files/marker-rojo-71.png b/B4A/Files/marker-rojo-71.png new file mode 100644 index 0000000..5760768 Binary files /dev/null and b/B4A/Files/marker-rojo-71.png differ diff --git a/B4A/Files/marker-rojo-72.png b/B4A/Files/marker-rojo-72.png new file mode 100644 index 0000000..f2732f9 Binary files /dev/null and b/B4A/Files/marker-rojo-72.png differ diff --git a/B4A/Files/marker-rojo-73.png b/B4A/Files/marker-rojo-73.png new file mode 100644 index 0000000..1a9108f Binary files /dev/null and b/B4A/Files/marker-rojo-73.png differ diff --git a/B4A/Files/marker-rojo-74.png b/B4A/Files/marker-rojo-74.png new file mode 100644 index 0000000..47eedd0 Binary files /dev/null and b/B4A/Files/marker-rojo-74.png differ diff --git a/B4A/Files/marker-rojo-75.png b/B4A/Files/marker-rojo-75.png new file mode 100644 index 0000000..c41f3b3 Binary files /dev/null and b/B4A/Files/marker-rojo-75.png differ diff --git a/B4A/Files/marker-rojo-76.png b/B4A/Files/marker-rojo-76.png new file mode 100644 index 0000000..c6329f1 Binary files /dev/null and b/B4A/Files/marker-rojo-76.png differ diff --git a/B4A/Files/marker-rojo-77.png b/B4A/Files/marker-rojo-77.png new file mode 100644 index 0000000..71a5a37 Binary files /dev/null and b/B4A/Files/marker-rojo-77.png differ diff --git a/B4A/Files/marker-rojo-78.png b/B4A/Files/marker-rojo-78.png new file mode 100644 index 0000000..c029057 Binary files /dev/null and b/B4A/Files/marker-rojo-78.png differ diff --git a/B4A/Files/marker-rojo-79.png b/B4A/Files/marker-rojo-79.png new file mode 100644 index 0000000..80ec140 Binary files /dev/null and b/B4A/Files/marker-rojo-79.png differ diff --git a/B4A/Files/marker-rojo-8.png b/B4A/Files/marker-rojo-8.png new file mode 100644 index 0000000..a9a5fc6 Binary files /dev/null and b/B4A/Files/marker-rojo-8.png differ diff --git a/B4A/Files/marker-rojo-80.png b/B4A/Files/marker-rojo-80.png new file mode 100644 index 0000000..2f73356 Binary files /dev/null and b/B4A/Files/marker-rojo-80.png differ diff --git a/B4A/Files/marker-rojo-81.png b/B4A/Files/marker-rojo-81.png new file mode 100644 index 0000000..689e7f4 Binary files /dev/null and b/B4A/Files/marker-rojo-81.png differ diff --git a/B4A/Files/marker-rojo-82.png b/B4A/Files/marker-rojo-82.png new file mode 100644 index 0000000..f73dd9d Binary files /dev/null and b/B4A/Files/marker-rojo-82.png differ diff --git a/B4A/Files/marker-rojo-83.png b/B4A/Files/marker-rojo-83.png new file mode 100644 index 0000000..7c99c9c Binary files /dev/null and b/B4A/Files/marker-rojo-83.png differ diff --git a/B4A/Files/marker-rojo-84.png b/B4A/Files/marker-rojo-84.png new file mode 100644 index 0000000..f18ce95 Binary files /dev/null and b/B4A/Files/marker-rojo-84.png differ diff --git a/B4A/Files/marker-rojo-85.png b/B4A/Files/marker-rojo-85.png new file mode 100644 index 0000000..b9bd7c7 Binary files /dev/null and b/B4A/Files/marker-rojo-85.png differ diff --git a/B4A/Files/marker-rojo-86.png b/B4A/Files/marker-rojo-86.png new file mode 100644 index 0000000..9b1fb84 Binary files /dev/null and b/B4A/Files/marker-rojo-86.png differ diff --git a/B4A/Files/marker-rojo-87.png b/B4A/Files/marker-rojo-87.png new file mode 100644 index 0000000..95fdc5c Binary files /dev/null and b/B4A/Files/marker-rojo-87.png differ diff --git a/B4A/Files/marker-rojo-88.png b/B4A/Files/marker-rojo-88.png new file mode 100644 index 0000000..9f817b5 Binary files /dev/null and b/B4A/Files/marker-rojo-88.png differ diff --git a/B4A/Files/marker-rojo-89.png b/B4A/Files/marker-rojo-89.png new file mode 100644 index 0000000..e387fa6 Binary files /dev/null and b/B4A/Files/marker-rojo-89.png differ diff --git a/B4A/Files/marker-rojo-9.png b/B4A/Files/marker-rojo-9.png new file mode 100644 index 0000000..d0ff664 Binary files /dev/null and b/B4A/Files/marker-rojo-9.png differ diff --git a/B4A/Files/marker-rojo-90.png b/B4A/Files/marker-rojo-90.png new file mode 100644 index 0000000..b049177 Binary files /dev/null and b/B4A/Files/marker-rojo-90.png differ diff --git a/B4A/Files/marker-rojo-91.png b/B4A/Files/marker-rojo-91.png new file mode 100644 index 0000000..0c142d2 Binary files /dev/null and b/B4A/Files/marker-rojo-91.png differ diff --git a/B4A/Files/marker-rojo-92.png b/B4A/Files/marker-rojo-92.png new file mode 100644 index 0000000..6c1c46a Binary files /dev/null and b/B4A/Files/marker-rojo-92.png differ diff --git a/B4A/Files/marker-rojo-93.png b/B4A/Files/marker-rojo-93.png new file mode 100644 index 0000000..c1d0eeb Binary files /dev/null and b/B4A/Files/marker-rojo-93.png differ diff --git a/B4A/Files/marker-rojo-94.png b/B4A/Files/marker-rojo-94.png new file mode 100644 index 0000000..45fa431 Binary files /dev/null and b/B4A/Files/marker-rojo-94.png differ diff --git a/B4A/Files/marker-rojo-95.png b/B4A/Files/marker-rojo-95.png new file mode 100644 index 0000000..f0e7386 Binary files /dev/null and b/B4A/Files/marker-rojo-95.png differ diff --git a/B4A/Files/marker-rojo-96.png b/B4A/Files/marker-rojo-96.png new file mode 100644 index 0000000..0fe3ac2 Binary files /dev/null and b/B4A/Files/marker-rojo-96.png differ diff --git a/B4A/Files/marker-rojo-97.png b/B4A/Files/marker-rojo-97.png new file mode 100644 index 0000000..fb2b8e4 Binary files /dev/null and b/B4A/Files/marker-rojo-97.png differ diff --git a/B4A/Files/marker-rojo-98.png b/B4A/Files/marker-rojo-98.png new file mode 100644 index 0000000..eeab2c9 Binary files /dev/null and b/B4A/Files/marker-rojo-98.png differ diff --git a/B4A/Files/marker-rojo-99.png b/B4A/Files/marker-rojo-99.png new file mode 100644 index 0000000..d14a3c3 Binary files /dev/null and b/B4A/Files/marker-rojo-99.png differ diff --git a/B4A/Files/marker-verde-0.png b/B4A/Files/marker-verde-0.png new file mode 100644 index 0000000..77d29ba Binary files /dev/null and b/B4A/Files/marker-verde-0.png differ diff --git a/B4A/Files/marker-verde-1.png b/B4A/Files/marker-verde-1.png new file mode 100644 index 0000000..14e9402 Binary files /dev/null and b/B4A/Files/marker-verde-1.png differ diff --git a/B4A/Files/marker-verde-10.png b/B4A/Files/marker-verde-10.png new file mode 100644 index 0000000..7d231cf Binary files /dev/null and b/B4A/Files/marker-verde-10.png differ diff --git a/B4A/Files/marker-verde-100.png b/B4A/Files/marker-verde-100.png new file mode 100644 index 0000000..4f72828 Binary files /dev/null and b/B4A/Files/marker-verde-100.png differ diff --git a/B4A/Files/marker-verde-101.png b/B4A/Files/marker-verde-101.png new file mode 100644 index 0000000..45ef333 Binary files /dev/null and b/B4A/Files/marker-verde-101.png differ diff --git a/B4A/Files/marker-verde-102.png b/B4A/Files/marker-verde-102.png new file mode 100644 index 0000000..c194b8d Binary files /dev/null and b/B4A/Files/marker-verde-102.png differ diff --git a/B4A/Files/marker-verde-103.png b/B4A/Files/marker-verde-103.png new file mode 100644 index 0000000..3cd9740 Binary files /dev/null and b/B4A/Files/marker-verde-103.png differ diff --git a/B4A/Files/marker-verde-104.png b/B4A/Files/marker-verde-104.png new file mode 100644 index 0000000..5a040f4 Binary files /dev/null and b/B4A/Files/marker-verde-104.png differ diff --git a/B4A/Files/marker-verde-105.png b/B4A/Files/marker-verde-105.png new file mode 100644 index 0000000..4b09455 Binary files /dev/null and b/B4A/Files/marker-verde-105.png differ diff --git a/B4A/Files/marker-verde-106.png b/B4A/Files/marker-verde-106.png new file mode 100644 index 0000000..baafce9 Binary files /dev/null and b/B4A/Files/marker-verde-106.png differ diff --git a/B4A/Files/marker-verde-107.png b/B4A/Files/marker-verde-107.png new file mode 100644 index 0000000..969c70f Binary files /dev/null and b/B4A/Files/marker-verde-107.png differ diff --git a/B4A/Files/marker-verde-108.png b/B4A/Files/marker-verde-108.png new file mode 100644 index 0000000..1a23478 Binary files /dev/null and b/B4A/Files/marker-verde-108.png differ diff --git a/B4A/Files/marker-verde-109.png b/B4A/Files/marker-verde-109.png new file mode 100644 index 0000000..8cf4f90 Binary files /dev/null and b/B4A/Files/marker-verde-109.png differ diff --git a/B4A/Files/marker-verde-11.png b/B4A/Files/marker-verde-11.png new file mode 100644 index 0000000..b88f9e8 Binary files /dev/null and b/B4A/Files/marker-verde-11.png differ diff --git a/B4A/Files/marker-verde-110.png b/B4A/Files/marker-verde-110.png new file mode 100644 index 0000000..302639b Binary files /dev/null and b/B4A/Files/marker-verde-110.png differ diff --git a/B4A/Files/marker-verde-111.png b/B4A/Files/marker-verde-111.png new file mode 100644 index 0000000..934e450 Binary files /dev/null and b/B4A/Files/marker-verde-111.png differ diff --git a/B4A/Files/marker-verde-112.png b/B4A/Files/marker-verde-112.png new file mode 100644 index 0000000..2fbdf62 Binary files /dev/null and b/B4A/Files/marker-verde-112.png differ diff --git a/B4A/Files/marker-verde-113.png b/B4A/Files/marker-verde-113.png new file mode 100644 index 0000000..40245fb Binary files /dev/null and b/B4A/Files/marker-verde-113.png differ diff --git a/B4A/Files/marker-verde-114.png b/B4A/Files/marker-verde-114.png new file mode 100644 index 0000000..f39b60c Binary files /dev/null and b/B4A/Files/marker-verde-114.png differ diff --git a/B4A/Files/marker-verde-115.png b/B4A/Files/marker-verde-115.png new file mode 100644 index 0000000..6cf06ec Binary files /dev/null and b/B4A/Files/marker-verde-115.png differ diff --git a/B4A/Files/marker-verde-116.png b/B4A/Files/marker-verde-116.png new file mode 100644 index 0000000..00eb8dc Binary files /dev/null and b/B4A/Files/marker-verde-116.png differ diff --git a/B4A/Files/marker-verde-117.png b/B4A/Files/marker-verde-117.png new file mode 100644 index 0000000..04b60d6 Binary files /dev/null and b/B4A/Files/marker-verde-117.png differ diff --git a/B4A/Files/marker-verde-118.png b/B4A/Files/marker-verde-118.png new file mode 100644 index 0000000..3ae47ac Binary files /dev/null and b/B4A/Files/marker-verde-118.png differ diff --git a/B4A/Files/marker-verde-119.png b/B4A/Files/marker-verde-119.png new file mode 100644 index 0000000..6762381 Binary files /dev/null and b/B4A/Files/marker-verde-119.png differ diff --git a/B4A/Files/marker-verde-12.png b/B4A/Files/marker-verde-12.png new file mode 100644 index 0000000..e72ff7c Binary files /dev/null and b/B4A/Files/marker-verde-12.png differ diff --git a/B4A/Files/marker-verde-120.png b/B4A/Files/marker-verde-120.png new file mode 100644 index 0000000..99a91d5 Binary files /dev/null and b/B4A/Files/marker-verde-120.png differ diff --git a/B4A/Files/marker-verde-121.png b/B4A/Files/marker-verde-121.png new file mode 100644 index 0000000..2b55e76 Binary files /dev/null and b/B4A/Files/marker-verde-121.png differ diff --git a/B4A/Files/marker-verde-122.png b/B4A/Files/marker-verde-122.png new file mode 100644 index 0000000..c406e6f Binary files /dev/null and b/B4A/Files/marker-verde-122.png differ diff --git a/B4A/Files/marker-verde-123.png b/B4A/Files/marker-verde-123.png new file mode 100644 index 0000000..5fd2842 Binary files /dev/null and b/B4A/Files/marker-verde-123.png differ diff --git a/B4A/Files/marker-verde-124.png b/B4A/Files/marker-verde-124.png new file mode 100644 index 0000000..4167885 Binary files /dev/null and b/B4A/Files/marker-verde-124.png differ diff --git a/B4A/Files/marker-verde-125.png b/B4A/Files/marker-verde-125.png new file mode 100644 index 0000000..ed5ed49 Binary files /dev/null and b/B4A/Files/marker-verde-125.png differ diff --git a/B4A/Files/marker-verde-126.png b/B4A/Files/marker-verde-126.png new file mode 100644 index 0000000..dc89a65 Binary files /dev/null and b/B4A/Files/marker-verde-126.png differ diff --git a/B4A/Files/marker-verde-127.png b/B4A/Files/marker-verde-127.png new file mode 100644 index 0000000..f558023 Binary files /dev/null and b/B4A/Files/marker-verde-127.png differ diff --git a/B4A/Files/marker-verde-128.png b/B4A/Files/marker-verde-128.png new file mode 100644 index 0000000..5eed2f0 Binary files /dev/null and b/B4A/Files/marker-verde-128.png differ diff --git a/B4A/Files/marker-verde-129.png b/B4A/Files/marker-verde-129.png new file mode 100644 index 0000000..1699a90 Binary files /dev/null and b/B4A/Files/marker-verde-129.png differ diff --git a/B4A/Files/marker-verde-13.png b/B4A/Files/marker-verde-13.png new file mode 100644 index 0000000..54eb8cc Binary files /dev/null and b/B4A/Files/marker-verde-13.png differ diff --git a/B4A/Files/marker-verde-130.png b/B4A/Files/marker-verde-130.png new file mode 100644 index 0000000..e5fb83b Binary files /dev/null and b/B4A/Files/marker-verde-130.png differ diff --git a/B4A/Files/marker-verde-131.png b/B4A/Files/marker-verde-131.png new file mode 100644 index 0000000..e065336 Binary files /dev/null and b/B4A/Files/marker-verde-131.png differ diff --git a/B4A/Files/marker-verde-132.png b/B4A/Files/marker-verde-132.png new file mode 100644 index 0000000..451f884 Binary files /dev/null and b/B4A/Files/marker-verde-132.png differ diff --git a/B4A/Files/marker-verde-133.png b/B4A/Files/marker-verde-133.png new file mode 100644 index 0000000..0d6fe98 Binary files /dev/null and b/B4A/Files/marker-verde-133.png differ diff --git a/B4A/Files/marker-verde-134.png b/B4A/Files/marker-verde-134.png new file mode 100644 index 0000000..479d583 Binary files /dev/null and b/B4A/Files/marker-verde-134.png differ diff --git a/B4A/Files/marker-verde-135.png b/B4A/Files/marker-verde-135.png new file mode 100644 index 0000000..733bd03 Binary files /dev/null and b/B4A/Files/marker-verde-135.png differ diff --git a/B4A/Files/marker-verde-136.png b/B4A/Files/marker-verde-136.png new file mode 100644 index 0000000..3e4f1ac Binary files /dev/null and b/B4A/Files/marker-verde-136.png differ diff --git a/B4A/Files/marker-verde-137.png b/B4A/Files/marker-verde-137.png new file mode 100644 index 0000000..66fae18 Binary files /dev/null and b/B4A/Files/marker-verde-137.png differ diff --git a/B4A/Files/marker-verde-138.png b/B4A/Files/marker-verde-138.png new file mode 100644 index 0000000..87a5200 Binary files /dev/null and b/B4A/Files/marker-verde-138.png differ diff --git a/B4A/Files/marker-verde-139.png b/B4A/Files/marker-verde-139.png new file mode 100644 index 0000000..b4d1291 Binary files /dev/null and b/B4A/Files/marker-verde-139.png differ diff --git a/B4A/Files/marker-verde-14.png b/B4A/Files/marker-verde-14.png new file mode 100644 index 0000000..8050322 Binary files /dev/null and b/B4A/Files/marker-verde-14.png differ diff --git a/B4A/Files/marker-verde-140.png b/B4A/Files/marker-verde-140.png new file mode 100644 index 0000000..1460cca Binary files /dev/null and b/B4A/Files/marker-verde-140.png differ diff --git a/B4A/Files/marker-verde-141.png b/B4A/Files/marker-verde-141.png new file mode 100644 index 0000000..8c949b4 Binary files /dev/null and b/B4A/Files/marker-verde-141.png differ diff --git a/B4A/Files/marker-verde-142.png b/B4A/Files/marker-verde-142.png new file mode 100644 index 0000000..08da39f Binary files /dev/null and b/B4A/Files/marker-verde-142.png differ diff --git a/B4A/Files/marker-verde-143.png b/B4A/Files/marker-verde-143.png new file mode 100644 index 0000000..907a6b2 Binary files /dev/null and b/B4A/Files/marker-verde-143.png differ diff --git a/B4A/Files/marker-verde-144.png b/B4A/Files/marker-verde-144.png new file mode 100644 index 0000000..89a924b Binary files /dev/null and b/B4A/Files/marker-verde-144.png differ diff --git a/B4A/Files/marker-verde-145.png b/B4A/Files/marker-verde-145.png new file mode 100644 index 0000000..acfccf9 Binary files /dev/null and b/B4A/Files/marker-verde-145.png differ diff --git a/B4A/Files/marker-verde-146.png b/B4A/Files/marker-verde-146.png new file mode 100644 index 0000000..745241a Binary files /dev/null and b/B4A/Files/marker-verde-146.png differ diff --git a/B4A/Files/marker-verde-147.png b/B4A/Files/marker-verde-147.png new file mode 100644 index 0000000..3503f40 Binary files /dev/null and b/B4A/Files/marker-verde-147.png differ diff --git a/B4A/Files/marker-verde-148.png b/B4A/Files/marker-verde-148.png new file mode 100644 index 0000000..56e69ae Binary files /dev/null and b/B4A/Files/marker-verde-148.png differ diff --git a/B4A/Files/marker-verde-149.png b/B4A/Files/marker-verde-149.png new file mode 100644 index 0000000..e8e4079 Binary files /dev/null and b/B4A/Files/marker-verde-149.png differ diff --git a/B4A/Files/marker-verde-15.png b/B4A/Files/marker-verde-15.png new file mode 100644 index 0000000..02ca0c5 Binary files /dev/null and b/B4A/Files/marker-verde-15.png differ diff --git a/B4A/Files/marker-verde-150.png b/B4A/Files/marker-verde-150.png new file mode 100644 index 0000000..09eff30 Binary files /dev/null and b/B4A/Files/marker-verde-150.png differ diff --git a/B4A/Files/marker-verde-16.png b/B4A/Files/marker-verde-16.png new file mode 100644 index 0000000..2b16555 Binary files /dev/null and b/B4A/Files/marker-verde-16.png differ diff --git a/B4A/Files/marker-verde-17.png b/B4A/Files/marker-verde-17.png new file mode 100644 index 0000000..5a06f41 Binary files /dev/null and b/B4A/Files/marker-verde-17.png differ diff --git a/B4A/Files/marker-verde-18.png b/B4A/Files/marker-verde-18.png new file mode 100644 index 0000000..cfb3579 Binary files /dev/null and b/B4A/Files/marker-verde-18.png differ diff --git a/B4A/Files/marker-verde-19.png b/B4A/Files/marker-verde-19.png new file mode 100644 index 0000000..abc5f86 Binary files /dev/null and b/B4A/Files/marker-verde-19.png differ diff --git a/B4A/Files/marker-verde-2.png b/B4A/Files/marker-verde-2.png new file mode 100644 index 0000000..ab41084 Binary files /dev/null and b/B4A/Files/marker-verde-2.png differ diff --git a/B4A/Files/marker-verde-20.png b/B4A/Files/marker-verde-20.png new file mode 100644 index 0000000..e1eac8b Binary files /dev/null and b/B4A/Files/marker-verde-20.png differ diff --git a/B4A/Files/marker-verde-21.png b/B4A/Files/marker-verde-21.png new file mode 100644 index 0000000..79673f6 Binary files /dev/null and b/B4A/Files/marker-verde-21.png differ diff --git a/B4A/Files/marker-verde-22.png b/B4A/Files/marker-verde-22.png new file mode 100644 index 0000000..8781609 Binary files /dev/null and b/B4A/Files/marker-verde-22.png differ diff --git a/B4A/Files/marker-verde-23.png b/B4A/Files/marker-verde-23.png new file mode 100644 index 0000000..6b625ce Binary files /dev/null and b/B4A/Files/marker-verde-23.png differ diff --git a/B4A/Files/marker-verde-24.png b/B4A/Files/marker-verde-24.png new file mode 100644 index 0000000..3c77d33 Binary files /dev/null and b/B4A/Files/marker-verde-24.png differ diff --git a/B4A/Files/marker-verde-25.png b/B4A/Files/marker-verde-25.png new file mode 100644 index 0000000..3f7aa69 Binary files /dev/null and b/B4A/Files/marker-verde-25.png differ diff --git a/B4A/Files/marker-verde-26.png b/B4A/Files/marker-verde-26.png new file mode 100644 index 0000000..bfb589d Binary files /dev/null and b/B4A/Files/marker-verde-26.png differ diff --git a/B4A/Files/marker-verde-27.png b/B4A/Files/marker-verde-27.png new file mode 100644 index 0000000..3503dfb Binary files /dev/null and b/B4A/Files/marker-verde-27.png differ diff --git a/B4A/Files/marker-verde-28.png b/B4A/Files/marker-verde-28.png new file mode 100644 index 0000000..78334e9 Binary files /dev/null and b/B4A/Files/marker-verde-28.png differ diff --git a/B4A/Files/marker-verde-29.png b/B4A/Files/marker-verde-29.png new file mode 100644 index 0000000..2cebbb5 Binary files /dev/null and b/B4A/Files/marker-verde-29.png differ diff --git a/B4A/Files/marker-verde-3.png b/B4A/Files/marker-verde-3.png new file mode 100644 index 0000000..89b8e9e Binary files /dev/null and b/B4A/Files/marker-verde-3.png differ diff --git a/B4A/Files/marker-verde-30.png b/B4A/Files/marker-verde-30.png new file mode 100644 index 0000000..dd0505c Binary files /dev/null and b/B4A/Files/marker-verde-30.png differ diff --git a/B4A/Files/marker-verde-31.png b/B4A/Files/marker-verde-31.png new file mode 100644 index 0000000..a5973fa Binary files /dev/null and b/B4A/Files/marker-verde-31.png differ diff --git a/B4A/Files/marker-verde-32.png b/B4A/Files/marker-verde-32.png new file mode 100644 index 0000000..593c122 Binary files /dev/null and b/B4A/Files/marker-verde-32.png differ diff --git a/B4A/Files/marker-verde-33.png b/B4A/Files/marker-verde-33.png new file mode 100644 index 0000000..40dbf20 Binary files /dev/null and b/B4A/Files/marker-verde-33.png differ diff --git a/B4A/Files/marker-verde-34.png b/B4A/Files/marker-verde-34.png new file mode 100644 index 0000000..4d9e4f5 Binary files /dev/null and b/B4A/Files/marker-verde-34.png differ diff --git a/B4A/Files/marker-verde-35.png b/B4A/Files/marker-verde-35.png new file mode 100644 index 0000000..020175d Binary files /dev/null and b/B4A/Files/marker-verde-35.png differ diff --git a/B4A/Files/marker-verde-36.png b/B4A/Files/marker-verde-36.png new file mode 100644 index 0000000..dff2a9b Binary files /dev/null and b/B4A/Files/marker-verde-36.png differ diff --git a/B4A/Files/marker-verde-37.png b/B4A/Files/marker-verde-37.png new file mode 100644 index 0000000..a619ebe Binary files /dev/null and b/B4A/Files/marker-verde-37.png differ diff --git a/B4A/Files/marker-verde-38.png b/B4A/Files/marker-verde-38.png new file mode 100644 index 0000000..dfef35e Binary files /dev/null and b/B4A/Files/marker-verde-38.png differ diff --git a/B4A/Files/marker-verde-39.png b/B4A/Files/marker-verde-39.png new file mode 100644 index 0000000..231006d Binary files /dev/null and b/B4A/Files/marker-verde-39.png differ diff --git a/B4A/Files/marker-verde-4.png b/B4A/Files/marker-verde-4.png new file mode 100644 index 0000000..3d244ef Binary files /dev/null and b/B4A/Files/marker-verde-4.png differ diff --git a/B4A/Files/marker-verde-40.png b/B4A/Files/marker-verde-40.png new file mode 100644 index 0000000..95cff50 Binary files /dev/null and b/B4A/Files/marker-verde-40.png differ diff --git a/B4A/Files/marker-verde-41.png b/B4A/Files/marker-verde-41.png new file mode 100644 index 0000000..b0c6c5a Binary files /dev/null and b/B4A/Files/marker-verde-41.png differ diff --git a/B4A/Files/marker-verde-42.png b/B4A/Files/marker-verde-42.png new file mode 100644 index 0000000..5c23e8e Binary files /dev/null and b/B4A/Files/marker-verde-42.png differ diff --git a/B4A/Files/marker-verde-43.png b/B4A/Files/marker-verde-43.png new file mode 100644 index 0000000..cafe02e Binary files /dev/null and b/B4A/Files/marker-verde-43.png differ diff --git a/B4A/Files/marker-verde-44.png b/B4A/Files/marker-verde-44.png new file mode 100644 index 0000000..b905539 Binary files /dev/null and b/B4A/Files/marker-verde-44.png differ diff --git a/B4A/Files/marker-verde-45.png b/B4A/Files/marker-verde-45.png new file mode 100644 index 0000000..53f496d Binary files /dev/null and b/B4A/Files/marker-verde-45.png differ diff --git a/B4A/Files/marker-verde-46.png b/B4A/Files/marker-verde-46.png new file mode 100644 index 0000000..47d44bc Binary files /dev/null and b/B4A/Files/marker-verde-46.png differ diff --git a/B4A/Files/marker-verde-47.png b/B4A/Files/marker-verde-47.png new file mode 100644 index 0000000..a57e49e Binary files /dev/null and b/B4A/Files/marker-verde-47.png differ diff --git a/B4A/Files/marker-verde-48.png b/B4A/Files/marker-verde-48.png new file mode 100644 index 0000000..d4f0e9d Binary files /dev/null and b/B4A/Files/marker-verde-48.png differ diff --git a/B4A/Files/marker-verde-49.png b/B4A/Files/marker-verde-49.png new file mode 100644 index 0000000..9fe94c5 Binary files /dev/null and b/B4A/Files/marker-verde-49.png differ diff --git a/B4A/Files/marker-verde-5.png b/B4A/Files/marker-verde-5.png new file mode 100644 index 0000000..4abd44b Binary files /dev/null and b/B4A/Files/marker-verde-5.png differ diff --git a/B4A/Files/marker-verde-50.png b/B4A/Files/marker-verde-50.png new file mode 100644 index 0000000..ce10774 Binary files /dev/null and b/B4A/Files/marker-verde-50.png differ diff --git a/B4A/Files/marker-verde-51.png b/B4A/Files/marker-verde-51.png new file mode 100644 index 0000000..e48908d Binary files /dev/null and b/B4A/Files/marker-verde-51.png differ diff --git a/B4A/Files/marker-verde-52.png b/B4A/Files/marker-verde-52.png new file mode 100644 index 0000000..7d24294 Binary files /dev/null and b/B4A/Files/marker-verde-52.png differ diff --git a/B4A/Files/marker-verde-53.png b/B4A/Files/marker-verde-53.png new file mode 100644 index 0000000..fe09650 Binary files /dev/null and b/B4A/Files/marker-verde-53.png differ diff --git a/B4A/Files/marker-verde-54.png b/B4A/Files/marker-verde-54.png new file mode 100644 index 0000000..d33303e Binary files /dev/null and b/B4A/Files/marker-verde-54.png differ diff --git a/B4A/Files/marker-verde-55.png b/B4A/Files/marker-verde-55.png new file mode 100644 index 0000000..d1af4af Binary files /dev/null and b/B4A/Files/marker-verde-55.png differ diff --git a/B4A/Files/marker-verde-56.png b/B4A/Files/marker-verde-56.png new file mode 100644 index 0000000..8133a47 Binary files /dev/null and b/B4A/Files/marker-verde-56.png differ diff --git a/B4A/Files/marker-verde-57.png b/B4A/Files/marker-verde-57.png new file mode 100644 index 0000000..47b9b35 Binary files /dev/null and b/B4A/Files/marker-verde-57.png differ diff --git a/B4A/Files/marker-verde-58.png b/B4A/Files/marker-verde-58.png new file mode 100644 index 0000000..2f6efcc Binary files /dev/null and b/B4A/Files/marker-verde-58.png differ diff --git a/B4A/Files/marker-verde-59.png b/B4A/Files/marker-verde-59.png new file mode 100644 index 0000000..977dd0c Binary files /dev/null and b/B4A/Files/marker-verde-59.png differ diff --git a/B4A/Files/marker-verde-6.png b/B4A/Files/marker-verde-6.png new file mode 100644 index 0000000..094cd0a Binary files /dev/null and b/B4A/Files/marker-verde-6.png differ diff --git a/B4A/Files/marker-verde-60.png b/B4A/Files/marker-verde-60.png new file mode 100644 index 0000000..3ae2551 Binary files /dev/null and b/B4A/Files/marker-verde-60.png differ diff --git a/B4A/Files/marker-verde-61.png b/B4A/Files/marker-verde-61.png new file mode 100644 index 0000000..f9e185b Binary files /dev/null and b/B4A/Files/marker-verde-61.png differ diff --git a/B4A/Files/marker-verde-62.png b/B4A/Files/marker-verde-62.png new file mode 100644 index 0000000..7774a8a Binary files /dev/null and b/B4A/Files/marker-verde-62.png differ diff --git a/B4A/Files/marker-verde-63.png b/B4A/Files/marker-verde-63.png new file mode 100644 index 0000000..b437bde Binary files /dev/null and b/B4A/Files/marker-verde-63.png differ diff --git a/B4A/Files/marker-verde-64.png b/B4A/Files/marker-verde-64.png new file mode 100644 index 0000000..4113c30 Binary files /dev/null and b/B4A/Files/marker-verde-64.png differ diff --git a/B4A/Files/marker-verde-65.png b/B4A/Files/marker-verde-65.png new file mode 100644 index 0000000..42f2f09 Binary files /dev/null and b/B4A/Files/marker-verde-65.png differ diff --git a/B4A/Files/marker-verde-66.png b/B4A/Files/marker-verde-66.png new file mode 100644 index 0000000..9473f7f Binary files /dev/null and b/B4A/Files/marker-verde-66.png differ diff --git a/B4A/Files/marker-verde-67.png b/B4A/Files/marker-verde-67.png new file mode 100644 index 0000000..b248d7d Binary files /dev/null and b/B4A/Files/marker-verde-67.png differ diff --git a/B4A/Files/marker-verde-68.png b/B4A/Files/marker-verde-68.png new file mode 100644 index 0000000..4e9c567 Binary files /dev/null and b/B4A/Files/marker-verde-68.png differ diff --git a/B4A/Files/marker-verde-69.png b/B4A/Files/marker-verde-69.png new file mode 100644 index 0000000..ccc064f Binary files /dev/null and b/B4A/Files/marker-verde-69.png differ diff --git a/B4A/Files/marker-verde-7.png b/B4A/Files/marker-verde-7.png new file mode 100644 index 0000000..3792b5f Binary files /dev/null and b/B4A/Files/marker-verde-7.png differ diff --git a/B4A/Files/marker-verde-70.png b/B4A/Files/marker-verde-70.png new file mode 100644 index 0000000..aef31a7 Binary files /dev/null and b/B4A/Files/marker-verde-70.png differ diff --git a/B4A/Files/marker-verde-71.png b/B4A/Files/marker-verde-71.png new file mode 100644 index 0000000..cd2d1a3 Binary files /dev/null and b/B4A/Files/marker-verde-71.png differ diff --git a/B4A/Files/marker-verde-72.png b/B4A/Files/marker-verde-72.png new file mode 100644 index 0000000..7b50f6f Binary files /dev/null and b/B4A/Files/marker-verde-72.png differ diff --git a/B4A/Files/marker-verde-73.png b/B4A/Files/marker-verde-73.png new file mode 100644 index 0000000..64af59d Binary files /dev/null and b/B4A/Files/marker-verde-73.png differ diff --git a/B4A/Files/marker-verde-74.png b/B4A/Files/marker-verde-74.png new file mode 100644 index 0000000..52a7284 Binary files /dev/null and b/B4A/Files/marker-verde-74.png differ diff --git a/B4A/Files/marker-verde-75.png b/B4A/Files/marker-verde-75.png new file mode 100644 index 0000000..61f0d3e Binary files /dev/null and b/B4A/Files/marker-verde-75.png differ diff --git a/B4A/Files/marker-verde-76.png b/B4A/Files/marker-verde-76.png new file mode 100644 index 0000000..730517f Binary files /dev/null and b/B4A/Files/marker-verde-76.png differ diff --git a/B4A/Files/marker-verde-77.png b/B4A/Files/marker-verde-77.png new file mode 100644 index 0000000..e4108f4 Binary files /dev/null and b/B4A/Files/marker-verde-77.png differ diff --git a/B4A/Files/marker-verde-78.png b/B4A/Files/marker-verde-78.png new file mode 100644 index 0000000..7a760c2 Binary files /dev/null and b/B4A/Files/marker-verde-78.png differ diff --git a/B4A/Files/marker-verde-79.png b/B4A/Files/marker-verde-79.png new file mode 100644 index 0000000..69d716e Binary files /dev/null and b/B4A/Files/marker-verde-79.png differ diff --git a/B4A/Files/marker-verde-8.png b/B4A/Files/marker-verde-8.png new file mode 100644 index 0000000..667eab4 Binary files /dev/null and b/B4A/Files/marker-verde-8.png differ diff --git a/B4A/Files/marker-verde-80.png b/B4A/Files/marker-verde-80.png new file mode 100644 index 0000000..56e8c76 Binary files /dev/null and b/B4A/Files/marker-verde-80.png differ diff --git a/B4A/Files/marker-verde-81.png b/B4A/Files/marker-verde-81.png new file mode 100644 index 0000000..a48110d Binary files /dev/null and b/B4A/Files/marker-verde-81.png differ diff --git a/B4A/Files/marker-verde-82.png b/B4A/Files/marker-verde-82.png new file mode 100644 index 0000000..4e82059 Binary files /dev/null and b/B4A/Files/marker-verde-82.png differ diff --git a/B4A/Files/marker-verde-83.png b/B4A/Files/marker-verde-83.png new file mode 100644 index 0000000..91df1b6 Binary files /dev/null and b/B4A/Files/marker-verde-83.png differ diff --git a/B4A/Files/marker-verde-84.png b/B4A/Files/marker-verde-84.png new file mode 100644 index 0000000..4f77e31 Binary files /dev/null and b/B4A/Files/marker-verde-84.png differ diff --git a/B4A/Files/marker-verde-85.png b/B4A/Files/marker-verde-85.png new file mode 100644 index 0000000..d1605c4 Binary files /dev/null and b/B4A/Files/marker-verde-85.png differ diff --git a/B4A/Files/marker-verde-86.png b/B4A/Files/marker-verde-86.png new file mode 100644 index 0000000..ab5a09e Binary files /dev/null and b/B4A/Files/marker-verde-86.png differ diff --git a/B4A/Files/marker-verde-87.png b/B4A/Files/marker-verde-87.png new file mode 100644 index 0000000..7a596a0 Binary files /dev/null and b/B4A/Files/marker-verde-87.png differ diff --git a/B4A/Files/marker-verde-88.png b/B4A/Files/marker-verde-88.png new file mode 100644 index 0000000..47acf99 Binary files /dev/null and b/B4A/Files/marker-verde-88.png differ diff --git a/B4A/Files/marker-verde-89.png b/B4A/Files/marker-verde-89.png new file mode 100644 index 0000000..6a8bb03 Binary files /dev/null and b/B4A/Files/marker-verde-89.png differ diff --git a/B4A/Files/marker-verde-9.png b/B4A/Files/marker-verde-9.png new file mode 100644 index 0000000..0265595 Binary files /dev/null and b/B4A/Files/marker-verde-9.png differ diff --git a/B4A/Files/marker-verde-90.png b/B4A/Files/marker-verde-90.png new file mode 100644 index 0000000..a0761a9 Binary files /dev/null and b/B4A/Files/marker-verde-90.png differ diff --git a/B4A/Files/marker-verde-91.png b/B4A/Files/marker-verde-91.png new file mode 100644 index 0000000..6c9daa6 Binary files /dev/null and b/B4A/Files/marker-verde-91.png differ diff --git a/B4A/Files/marker-verde-92.png b/B4A/Files/marker-verde-92.png new file mode 100644 index 0000000..7f4600b Binary files /dev/null and b/B4A/Files/marker-verde-92.png differ diff --git a/B4A/Files/marker-verde-93.png b/B4A/Files/marker-verde-93.png new file mode 100644 index 0000000..9df60d7 Binary files /dev/null and b/B4A/Files/marker-verde-93.png differ diff --git a/B4A/Files/marker-verde-94.png b/B4A/Files/marker-verde-94.png new file mode 100644 index 0000000..0a5b8b7 Binary files /dev/null and b/B4A/Files/marker-verde-94.png differ diff --git a/B4A/Files/marker-verde-95.png b/B4A/Files/marker-verde-95.png new file mode 100644 index 0000000..e402d5f Binary files /dev/null and b/B4A/Files/marker-verde-95.png differ diff --git a/B4A/Files/marker-verde-96.png b/B4A/Files/marker-verde-96.png new file mode 100644 index 0000000..b329bab Binary files /dev/null and b/B4A/Files/marker-verde-96.png differ diff --git a/B4A/Files/marker-verde-97.png b/B4A/Files/marker-verde-97.png new file mode 100644 index 0000000..aa82aad Binary files /dev/null and b/B4A/Files/marker-verde-97.png differ diff --git a/B4A/Files/marker-verde-98.png b/B4A/Files/marker-verde-98.png new file mode 100644 index 0000000..873aab2 Binary files /dev/null and b/B4A/Files/marker-verde-98.png differ diff --git a/B4A/Files/marker-verde-99.png b/B4A/Files/marker-verde-99.png new file mode 100644 index 0000000..6d005ab Binary files /dev/null and b/B4A/Files/marker-verde-99.png differ diff --git a/B4A/Files/nota.bal b/B4A/Files/nota.bal new file mode 100644 index 0000000..dc491f7 Binary files /dev/null and b/B4A/Files/nota.bal differ diff --git a/B4A/Files/noventa.bal b/B4A/Files/noventa.bal new file mode 100644 index 0000000..3756c95 Binary files /dev/null and b/B4A/Files/noventa.bal differ diff --git a/B4A/Files/nuevocliente.bal b/B4A/Files/nuevocliente.bal new file mode 100644 index 0000000..3178daa Binary files /dev/null and b/B4A/Files/nuevocliente.bal differ diff --git a/B4A/Files/nvo cliente.jpg b/B4A/Files/nvo cliente.jpg new file mode 100644 index 0000000..f45ceab Binary files /dev/null and b/B4A/Files/nvo cliente.jpg differ diff --git a/B4A/Files/palomita_verde.png b/B4A/Files/palomita_verde.png new file mode 100644 index 0000000..f8e11e6 Binary files /dev/null and b/B4A/Files/palomita_verde.png differ diff --git a/B4A/Files/pedido.bal b/B4A/Files/pedido.bal new file mode 100644 index 0000000..3112ac9 Binary files /dev/null and b/B4A/Files/pedido.bal differ diff --git a/B4A/Files/planfia_logo.png b/B4A/Files/planfia_logo.png new file mode 100644 index 0000000..4b784fa Binary files /dev/null and b/B4A/Files/planfia_logo.png differ diff --git a/B4A/Files/principal.bal b/B4A/Files/principal.bal new file mode 100644 index 0000000..e9c4a0b Binary files /dev/null and b/B4A/Files/principal.bal differ diff --git a/B4A/Files/proditem.bal b/B4A/Files/proditem.bal new file mode 100644 index 0000000..dc03e73 Binary files /dev/null and b/B4A/Files/proditem.bal differ diff --git a/B4A/Files/productos.bal b/B4A/Files/productos.bal new file mode 100644 index 0000000..134e502 Binary files /dev/null and b/B4A/Files/productos.bal differ diff --git a/B4A/Files/promociones.bal b/B4A/Files/promociones.bal new file mode 100644 index 0000000..e031d2e Binary files /dev/null and b/B4A/Files/promociones.bal differ diff --git a/B4A/Files/resdia.bal b/B4A/Files/resdia.bal new file mode 100644 index 0000000..9bd91e1 Binary files /dev/null and b/B4A/Files/resdia.bal differ diff --git a/B4A/Files/resdia.jpg b/B4A/Files/resdia.jpg new file mode 100644 index 0000000..bbdc493 Binary files /dev/null and b/B4A/Files/resdia.jpg differ diff --git a/B4A/Files/salma.jpg b/B4A/Files/salma.jpg new file mode 100644 index 0000000..3293909 Binary files /dev/null and b/B4A/Files/salma.jpg differ diff --git a/B4A/Files/salma.png b/B4A/Files/salma.png new file mode 100644 index 0000000..a0c3190 Binary files /dev/null and b/B4A/Files/salma.png differ diff --git a/B4A/Files/senial.jpg b/B4A/Files/senial.jpg new file mode 100644 index 0000000..a758065 Binary files /dev/null and b/B4A/Files/senial.jpg differ diff --git a/B4A/Files/sync.png b/B4A/Files/sync.png new file mode 100644 index 0000000..ff7d32e Binary files /dev/null and b/B4A/Files/sync.png differ diff --git a/B4A/Files/tache_rojo.png b/B4A/Files/tache_rojo.png new file mode 100644 index 0000000..2f5f59d Binary files /dev/null and b/B4A/Files/tache_rojo.png differ diff --git a/B4A/Files/ticket dia.jpg b/B4A/Files/ticket dia.jpg new file mode 100644 index 0000000..887000b Binary files /dev/null and b/B4A/Files/ticket dia.jpg differ diff --git a/B4A/Files/ticketsdia.bal b/B4A/Files/ticketsdia.bal new file mode 100644 index 0000000..dd12242 Binary files /dev/null and b/B4A/Files/ticketsdia.bal differ diff --git a/B4A/Files/tiendita.jpg b/B4A/Files/tiendita.jpg new file mode 100644 index 0000000..5f52563 Binary files /dev/null and b/B4A/Files/tiendita.jpg differ diff --git a/B4A/Files/verde.png b/B4A/Files/verde.png new file mode 100644 index 0000000..59edded Binary files /dev/null and b/B4A/Files/verde.png differ diff --git a/B4A/MAPA_RUTAS.bas b/B4A/MAPA_RUTAS.bas new file mode 100644 index 0000000..d8eb913 --- /dev/null +++ b/B4A/MAPA_RUTAS.bas @@ -0,0 +1,341 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Activity +Version=9.3 +@EndOfDesignText@ +#Region Activity Attributes + #FullScreen: False + #IncludeTitle: False +#End Region + +'Activity module +Sub Process_Globals + Dim GPS As GPS + Dim rp As RuntimePermissions + Dim ruta As String + Dim skmt As SQL + Dim c As Cursor + Dim c2 As Cursor + Dim c22 As Cursor + Dim c3 As Cursor +End Sub + +Sub Globals + Private gmap As GoogleMap + Private MapFragment1 As MapFragment + Dim Latitud As Double = 0 + Dim Longitud As Double = 0 + Dim Lat2 As Double = 0 + Dim Lon2 As Double = 0 + Dim p1, p2 As Location + Dim Distance As Float + Dim boton1 As Button + Dim HUE_BLUE As Float + Dim HUE_RED As Float + Dim HUE_GREEN As Float + Private B_AZUL As Button + Private B_ROJO As Button + Private B_ROJO As Button + Private B_VERDE As Button + Dim Tienda As String + Dim LatitudRu As Double + Dim LongitudRU As Double + Dim LIST_AZUL As List + Dim LIST_ROJO As List + Dim LIST_VERDE As List + Dim MARK_AZUL As Marker + Dim MARK_ROJO As Marker + Dim MARK_VERDE As Marker + Dim MARK_CEDIS As Marker + dim MARK_NEGRO as Marker + Dim rojo, azul, verde, negro, pVisitar, todos As String + Dim NumSerie As Int + Dim OnInfoWindowClickListener1 As OnInfoWindowClickListener + Dim GoogleMapEXTRA As GoogleMapsExtras + Dim CODIGO As String + Private SEMANA As String + Private b_todos As Button +End Sub + +Sub Activity_Create(FirstTime As Boolean) + Activity.LoadLayout("MAPA_RUTAS") +' If File.ExternalWritable Then +' ruta = File.DirDefaultExternal +' Else + ruta = File.DirInternal +' End If + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + skmt.Initialize(ruta,"kmt.db", True) + 'GPS + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) + Wait For Activity_PermissionResult (Permission As String, Result As Boolean) + If Result Then + StartService(Tracker) + Log("Start Tracker") + If MapFragment1.IsGooglePlayServicesAvailable = False Then + ToastMessageShow("Please install Google Play Services.", True) + End If + Else + ToastMessageShow("No permission", True) + B4XPages.ShowPage("Principal") + End If +' If(FirstTime) Then +' Starter.GPS.Initialize("GPS") +' End If + + 'Boton velocidad' +' boton1.Initialize(0) +' boton1.Text = 0 &" "&"km/h" +' boton1.TextColor = Colors.Red +' boton1.TextSize = 15 +' Activity.AddView(boton1, 40%x, 5dip, 25%x, 40dip) + 'Fin Boton velocidad' + 'MARK_CEDIS.IsInitialized + MARK_AZUL.IsInitialized + MARK_ROJO.IsInitialized + MARK_VERDE.IsInitialized + MARK_NEGRO.IsInitialized + + LIST_AZUL.Initialize + LIST_ROJO.Initialize + LIST_VERDE.Initialize +' verde = 0 + azul = 0 + rojo = 0 + todos = 1 + c=skmt.ExecQuery2("select count(*) AS CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("SEMANA")) + c.Position =0 + SEMANA = c.GetString("CUANTOS") + c.Close + + If SEMANA > 0 Then + c=skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("SEMANA")) + c.Position =0 + SEMANA = c.GetString("CAT_VA_VALOR") + c.Close + End If +End Sub + +Sub Activity_Resume + Starter.rp.Check(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) + Wait For Activity_PermissionResult (Permission As String, Result As Boolean) + If Result Then + If Starter.GPS.GPSEnabled = False Then + ToastMessageShow("Debe Activar el GPS del Equipo.", True) + StartActivity(Starter.GPS.LocationSettingsIntent) + Else + Starter.GPS.Start(0, 0) + End If + End If + LIST_AZUL.Initialize + LIST_ROJO.Initialize + LIST_VERDE.Initialize + verde = 0 + azul = 0 + rojo = 0 + pVisitar = 0 + todos = 1 +End Sub + +Sub MapFragment1_Ready +' Log("ENTRANDO MapFragment1_Ready") + gmap = MapFragment1.GetMap + gmap.IsInitialized +' todos= 1 + 'permisos + + rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION) + Wait For Activity_PermissionResult (Permission As String, Result As Boolean) + gmap.MyLocationEnabled = Result + + Dim JavaMapsObject As JavaObject + JavaMapsObject = gmap.GetUiSettings + JavaMapsObject.RunMethod("setMapToolbarEnabled", Array As Object(True)) + '''''''----------------------------MARKER AZUL - NUEVOS + If azul = 1 Or todos = 1 Then +' c.IsInitialized + c = skmt.ExecQuery("select CAT_CL_CODIGO,CAT_CL_NOMBRE,CAT_CL_LAT,CAT_CL_LONG,CAT_CL_SECUENCIA from kmt_info where CAT_CL_CODIGO like 'N%' and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0 and CAT_CL_LAT <> ' ' and CAT_CL_LONG <> ' ' ") +' skmt.Initialize(ruta,"kmt.db", True) + Log($"============== Azul Resultados = ${c.RowCount}"$) + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i +' Log($"|${c.GetString("CAT_CL_LONG")}|${c.GetString("CAT_CL_LAT")}|"$) +' Log(i&"|"&c.GetString("CAT_CL_LAT")&"|") + LatitudRu = 0 + If c.GetString("CAT_CL_LAT") <> "" Then LatitudRu = c.GetString("CAT_CL_LAT") + LongitudRU = 0 + If c.GetString("CAT_CL_LONG") <> "" Then LongitudRU = c.GetString("CAT_CL_LONG") + CODIGO=c.GetString("CAT_CL_CODIGO") + Tienda= c.GetString("CAT_CL_NOMBRE") + NumSerie=c.GetInt("CAT_CL_SECUENCIA") + MARK_AZUL = gmap.AddMarker3(LatitudRu,LongitudRU,CODIGO, LoadBitmap(File.DirAssets, "marker-azul-" & NumSerie &".png")) + MARK_AZUL.Snippet = Tienda + Next + End If + c.Close +' Log("4") + If MARK_AZUL.IsInitialized Then LIST_AZUL.Add(MARK_AZUL) + End If + '''''''----------------------------MARKER VERDE + If verde = 1 Or todos = 1 Then +' c2.IsInitialized + c2=skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE, CAT_CL_LONG, CAT_CL_LAT, CAT_CL_SECUENCIA from kmt_info where gestion = 0 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and NUEVO <> '1' and CAT_CL_SECUENCIA <> '0' and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + Log($"============== Verde Resultados = ${c2.RowCount}"$) + For i = 0 To c2.RowCount -1 + c2.Position = i +' Log($"|${c2.GetString("CAT_CL_LONG")}|${c2.GetString("CAT_CL_LAT")}|"$) + If IsNumber(c2.GetString("CAT_CL_LONG")) Then + LongitudRU = c2.GetString("CAT_CL_LONG") + LatitudRu = c2.GetString("CAT_CL_LAT") + CODIGO=c2.GetString("CAT_CL_CODIGO") + Tienda= c2.GetString("CAT_CL_NOMBRE") + NumSerie=c2.GetInt("CAT_CL_SECUENCIA") + MARK_VERDE = gmap.AddMarker3(LatitudRu,LongitudRU,CODIGO,LoadBitmap(File.DirAssets, "marker-verde-"&NumSerie&".png")) + MARK_VERDE.Snippet = Tienda + End If + Next + c.Close + End If +' '''''''----------------------------MARKER ROJO - NO VENTA + + If rojo = 1 Or todos = 1 Then +' c3.IsInitialized + c3 = skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT, CAT_CL_SECUENCIA from kmt_info where CAT_CL_CODIGO not like 'N%'and CAT_CL_SECUENCIA = 0 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + Log($"============== Rojo Resultados = ${c3.RowCount}"$) + For i = 0 To c3.RowCount -1 + c3.Position = i + LongitudRU = c3.GetDouble("CAT_CL_LONG") + LatitudRu = c3.GetDouble("CAT_CL_LAT") + Tienda= c3.GetString("CAT_CL_NOMBRE") + CODIGO = c3.GetString("CAT_CL_CODIGO") + NumSerie=c3.GetInt("CAT_CL_SECUENCIA") +' Log($"${Tienda}|${c3.GetString("CAT_CL_LONG")}|${c3.GetString("CAT_CL_LAT")}|"$) + MARK_ROJO = gmap.AddMarker3(LatitudRu,LongitudRU,CODIGO,LoadBitmap(File.DirAssets, "marker-rojo-"&NumSerie&".png")) + MARK_ROJO.Snippet = Tienda + Next + c3.Close + End If + + If pVisitar = 1 Then +' c3.IsInitialized + c3 = skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT, CAT_CL_SECUENCIA from kmt_info where gestion = '11' and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + Log($"============== Negro Resultados = ${c3.RowCount}"$) + For i = 0 To c3.RowCount -1 + c3.Position = i + LongitudRU = c3.GetDouble("CAT_CL_LONG") + LatitudRu = c3.GetDouble("CAT_CL_LAT") + Tienda= c3.GetString("CAT_CL_NOMBRE") + CODIGO = c3.GetString("CAT_CL_CODIGO") + NumSerie=c3.GetInt("CAT_CL_SECUENCIA") +' Log($"${Tienda}|${c3.GetString("CAT_CL_LONG")}|${c3.GetString("CAT_CL_LAT")}|"$) + MARK_NEGRO = gmap.AddMarker3(LatitudRu,LongitudRU,CODIGO,LoadBitmap(File.DirAssets, "marker-negro-"&NumSerie&".png")) +' MARK_NEGRO = gmap.AddMarker2(LatitudRu,LongitudRU,CODIGO, gmap.HUE_ORANGE) + MARK_NEGRO.Snippet = Tienda + Next + c3.Close + End If + ''------------------------------ + +' MARK_CEDIS = gmap.AddMarker3("19.3961802","-99.0784293","CEDIS", LoadBitmap(File.DirAssets, "marker-azul-0.png")) +' If MARK_VERDE.Visible Or MARK_ROJO.Visible Then +' MARK_CEDIS.Remove +' End If + Dim aa As CameraPosition + aa.Initialize(LatitudRu,LongitudRU,15)''' RECOMENDABLE CAMBIAR A 10 PARA QUE SE VEAN MAS MARCADORES + gmap.AnimateCamera(aa) + + '''''---------------------- ESTO ES PARA LOS CLICK EN LAS VENTANAS D INFORMACION----------- + Dim OnInfoWindowClickListener1 As OnInfoWindowClickListener + OnInfoWindowClickListener1.Initialize("OnInfoWindowClickListener1") + GoogleMapEXTRA.SetOnInfoWindowClickListener(gmap, OnInfoWindowClickListener1) + +End Sub +' +''''-------------------------- PRUEBA CON MARKER _CLICK + +Sub OnInfoWindowClickListener1_click(Marker1 As Marker) + skmt.ExecNonQuery("delete from CUENTAA") + skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?) ", Array As Object(Marker1.Title)) + Activity.Finish + B4XPages.MainPage.cliente.refrescarCliente = True + B4XPages.ShowPage("Cliente") +End Sub + +Sub GPS_LocationChanged (Parametro As Location) + MARK_CEDIS.IsInitialized +' Dim sp As Int +' sp = Ceil(Parametro.Speed * 3.6) +' boton1.Text = sp &" "&"km/h" +' Latitud = Parametro.Latitude +' Longitud = Parametro.Longitude +' p2.Initialize2(Latitud,Longitud) +' p1.Initialize2(Lat2, Lon2) +' Distance = p1.DistanceTo(p2) +' If Latitud <> 0 And Longitud <> 0 Then +' If Distance > 10 Then +' Lat2 = Latitud +' Lon2 = Longitud +' Dim cp As CameraPosition +' cp.Initialize2(Parametro.Latitude, Parametro.Longitude, gmap.CameraPosition.Zoom, Parametro.Bearing, 0) +' gmap.AnimateCamera(cp) +' End If +' End If +End Sub + +Sub Activity_Pause (UserClosed As Boolean) + GPS.Stop +End Sub + +Sub B_VERDE_Click + verde = 1 + azul = 0 + rojo = 0 + todos = 0 + pVisitar = 0 + gmap.Clear + MapFragment1_Ready +End Sub + +Sub B_ROJO_Click + rojo = 1 + azul = 0 + verde = 0 + todos = 0 + pVisitar = 0 + gmap.Clear + MapFragment1_Ready +End Sub + +Sub B_AZUL_Click + azul = 1 + rojo = 0 + verde = 0 + todos = 0 + pVisitar = 0 + gmap.Clear + MapFragment1_Ready +End Sub + +Private Sub b_todos_Click + todos = 1 + azul = 0 + rojo = 0 + verde = 0 + pVisitar = 0 + gmap.Clear + MapFragment1_Ready +End Sub + +Private Sub b_porVisitar_Click + pVisitar = 1 + azul = 0 + rojo = 0 + verde = 0 + todos = 0 + gmap.Clear + MapFragment1_Ready +End Sub \ No newline at end of file diff --git a/B4A/Mariana Censos.b4a b/B4A/Mariana Censos.b4a new file mode 100644 index 0000000..9821cd4 --- /dev/null +++ b/B4A/Mariana Censos.b4a @@ -0,0 +1,816 @@ +Build1=Default,md_censos.keymon.com.mx +File1=alert2.png +File10=fondo_kmt.jpg +File100=marker-azul-78.png +File101=marker-azul-79.png +File102=marker-azul-8.png +File103=marker-azul-80.png +File104=marker-azul-81.png +File105=marker-azul-82.png +File106=marker-azul-83.png +File107=marker-azul-84.png +File108=marker-azul-85.png +File109=marker-azul-86.png +File11=Hacer pedido.jpg +File110=marker-azul-87.png +File111=marker-azul-88.png +File112=marker-azul-89.png +File113=marker-azul-9.png +File114=marker-azul-90.png +File115=marker-azul-91.png +File116=marker-azul-92.png +File117=marker-azul-93.png +File118=marker-azul-94.png +File119=marker-azul-95.png +File12=intmex_logo_192x192.jpg +File120=marker-azul-96.png +File121=marker-azul-97.png +File122=marker-azul-98.png +File123=marker-azul-99.png +File124=marker-rojo-0.png +File125=marker-rojo-1.png +File126=marker-rojo-10.png +File127=marker-rojo-100.png +File128=marker-rojo-11.png +File129=marker-rojo-12.png +File13=itembuttonblue.png +File130=marker-rojo-13.png +File131=marker-rojo-14.png +File132=marker-rojo-15.png +File133=marker-rojo-16.png +File134=marker-rojo-17.png +File135=marker-rojo-18.png +File136=marker-rojo-19.png +File137=marker-rojo-2.png +File138=marker-rojo-20.png +File139=marker-rojo-21.png +File14=kmt.db +File140=marker-rojo-22.png +File141=marker-rojo-23.png +File142=marker-rojo-24.png +File143=marker-rojo-25.png +File144=marker-rojo-26.png +File145=marker-rojo-27.png +File146=marker-rojo-28.png +File147=marker-rojo-29.png +File148=marker-rojo-3.png +File149=marker-rojo-30.png +File15=login.bal +File150=marker-rojo-31.png +File151=marker-rojo-32.png +File152=marker-rojo-33.png +File153=marker-rojo-34.png +File154=marker-rojo-35.png +File155=marker-rojo-36.png +File156=marker-rojo-37.png +File157=marker-rojo-38.png +File158=marker-rojo-39.png +File159=marker-rojo-4.png +File16=Logo_192x192.jpg +File160=marker-rojo-40.png +File161=marker-rojo-41.png +File162=marker-rojo-42.png +File163=marker-rojo-43.png +File164=marker-rojo-44.png +File165=marker-rojo-45.png +File166=marker-rojo-46.png +File167=marker-rojo-47.png +File168=marker-rojo-48.png +File169=marker-rojo-49.png +File17=logo_mariana.jpeg +File170=marker-rojo-5.png +File171=marker-rojo-50.png +File172=marker-rojo-51.png +File173=marker-rojo-52.png +File174=marker-rojo-53.png +File175=marker-rojo-54.png +File176=marker-rojo-55.png +File177=marker-rojo-56.png +File178=marker-rojo-57.png +File179=marker-rojo-58.png +File18=MainPage.bal +File180=marker-rojo-59.png +File181=marker-rojo-6.png +File182=marker-rojo-60.png +File183=marker-rojo-61.png +File184=marker-rojo-62.png +File185=marker-rojo-63.png +File186=marker-rojo-64.png +File187=marker-rojo-65.png +File188=marker-rojo-66.png +File189=marker-rojo-67.png +File19=Malo.jpg +File190=marker-rojo-68.png +File191=marker-rojo-69.png +File192=marker-rojo-7.png +File193=marker-rojo-70.png +File194=marker-rojo-71.png +File195=marker-rojo-72.png +File196=marker-rojo-73.png +File197=marker-rojo-74.png +File198=marker-rojo-75.png +File199=marker-rojo-76.png +File2=alerta_amarilla.png +File20=mapa_rutas.bal +File200=marker-rojo-77.png +File201=marker-rojo-78.png +File202=marker-rojo-79.png +File203=marker-rojo-8.png +File204=marker-rojo-80.png +File205=marker-rojo-81.png +File206=marker-rojo-82.png +File207=marker-rojo-83.png +File208=marker-rojo-84.png +File209=marker-rojo-85.png +File21=mapas.bal +File210=marker-rojo-86.png +File211=marker-rojo-87.png +File212=marker-rojo-88.png +File213=marker-rojo-89.png +File214=marker-rojo-9.png +File215=marker-rojo-90.png +File216=marker-rojo-91.png +File217=marker-rojo-92.png +File218=marker-rojo-93.png +File219=marker-rojo-94.png +File22=mariana_ico.png +File220=marker-rojo-95.png +File221=marker-rojo-96.png +File222=marker-rojo-97.png +File223=marker-rojo-98.png +File224=marker-rojo-99.png +File225=marker-verde-0.png +File226=marker-verde-1.png +File227=marker-verde-10.png +File228=marker-verde-100.png +File229=marker-verde-11.png +File23=marker-azul-0.png +File230=marker-verde-12.png +File231=marker-verde-13.png +File232=marker-verde-14.png +File233=marker-verde-15.png +File234=marker-verde-16.png +File235=marker-verde-17.png +File236=marker-verde-18.png +File237=marker-verde-19.png +File238=marker-verde-2.png +File239=marker-verde-20.png +File24=marker-azul-1.png +File240=marker-verde-21.png +File241=marker-verde-22.png +File242=marker-verde-23.png +File243=marker-verde-24.png +File244=marker-verde-25.png +File245=marker-verde-26.png +File246=marker-verde-27.png +File247=marker-verde-28.png +File248=marker-verde-29.png +File249=marker-verde-3.png +File25=marker-azul-10.png +File250=marker-verde-30.png +File251=marker-verde-31.png +File252=marker-verde-32.png +File253=marker-verde-33.png +File254=marker-verde-34.png +File255=marker-verde-35.png +File256=marker-verde-36.png +File257=marker-verde-37.png +File258=marker-verde-38.png +File259=marker-verde-39.png +File26=marker-azul-100.png +File260=marker-verde-4.png +File261=marker-verde-40.png +File262=marker-verde-41.png +File263=marker-verde-42.png +File264=marker-verde-43.png +File265=marker-verde-44.png +File266=marker-verde-45.png +File267=marker-verde-46.png +File268=marker-verde-47.png +File269=marker-verde-48.png +File27=marker-azul-11.png +File270=marker-verde-49.png +File271=marker-verde-5.png +File272=marker-verde-50.png +File273=marker-verde-51.png +File274=marker-verde-52.png +File275=marker-verde-53.png +File276=marker-verde-54.png +File277=marker-verde-55.png +File278=marker-verde-56.png +File279=marker-verde-57.png +File28=marker-azul-12.png +File280=marker-verde-58.png +File281=marker-verde-59.png +File282=marker-verde-6.png +File283=marker-verde-60.png +File284=marker-verde-61.png +File285=marker-verde-62.png +File286=marker-verde-63.png +File287=marker-verde-64.png +File288=marker-verde-65.png +File289=marker-verde-66.png +File29=marker-azul-13.png +File290=marker-verde-67.png +File291=marker-verde-68.png +File292=marker-verde-69.png +File293=marker-verde-7.png +File294=marker-verde-70.png +File295=marker-verde-71.png +File296=marker-verde-72.png +File297=marker-verde-73.png +File298=marker-verde-74.png +File299=marker-verde-75.png +File3=carrito.png +File30=marker-azul-14.png +File300=marker-verde-76.png +File301=marker-verde-77.png +File302=marker-verde-78.png +File303=marker-verde-79.png +File304=marker-verde-8.png +File305=marker-verde-80.png +File306=marker-verde-81.png +File307=marker-verde-82.png +File308=marker-verde-83.png +File309=marker-verde-84.png +File31=marker-azul-15.png +File310=marker-verde-85.png +File311=marker-verde-86.png +File312=marker-verde-87.png +File313=marker-verde-88.png +File314=marker-verde-89.png +File315=marker-verde-9.png +File316=marker-verde-90.png +File317=marker-verde-91.png +File318=marker-verde-92.png +File319=marker-verde-93.png +File32=marker-azul-16.png +File320=marker-verde-94.png +File321=marker-verde-95.png +File322=marker-verde-96.png +File323=marker-verde-97.png +File324=marker-verde-98.png +File325=marker-verde-99.png +File326=nota.bal +File327=noventa.bal +File328=nuevocliente.bal +File329=Nvo Cliente.jpg +File33=marker-azul-17.png +File330=palomita_verde.png +File331=pedido.bal +File332=planfia_logo.png +File333=principal.bal +File334=proditem.bal +File335=productos.bal +File336=promociones.bal +File337=resdia.bal +File338=ResDia.jpg +File339=salma.jpg +File34=marker-azul-18.png +File340=salma.png +File341=senial.jpg +File342=sync.png +File343=tache_rojo.png +File344=ticketsdia.bal +File345=Tiendita.jpg +File346=verde.png +File35=marker-azul-19.png +File36=marker-azul-2.png +File37=marker-azul-20.png +File38=marker-azul-21.png +File39=marker-azul-22.png +File4=celltitle.bal +File40=marker-azul-23.png +File41=marker-azul-24.png +File42=marker-azul-25.png +File43=marker-azul-26.png +File44=marker-azul-27.png +File45=marker-azul-28.png +File46=marker-azul-29.png +File47=marker-azul-3.png +File48=marker-azul-30.png +File49=marker-azul-31.png +File5=cliente.bal +File50=marker-azul-32.png +File51=marker-azul-33.png +File52=marker-azul-34.png +File53=marker-azul-35.png +File54=marker-azul-36.png +File55=marker-azul-37.png +File56=marker-azul-38.png +File57=marker-azul-39.png +File58=marker-azul-4.png +File59=marker-azul-40.png +File6=clientes.bal +File60=marker-azul-41.png +File61=marker-azul-42.png +File62=marker-azul-43.png +File63=marker-azul-44.png +File64=marker-azul-45.png +File65=marker-azul-46.png +File66=marker-azul-47.png +File67=marker-azul-48.png +File68=marker-azul-49.png +File69=marker-azul-5.png +File7=durakelo.png +File70=marker-azul-50.png +File71=marker-azul-51.png +File72=marker-azul-52.png +File73=marker-azul-53.png +File74=marker-azul-54.png +File75=marker-azul-55.png +File76=marker-azul-56.png +File77=marker-azul-57.png +File78=marker-azul-58.png +File79=marker-azul-59.png +File8=engrane.jpg +File80=marker-azul-6.png +File81=marker-azul-60.png +File82=marker-azul-61.png +File83=marker-azul-62.png +File84=marker-azul-63.png +File85=marker-azul-64.png +File86=marker-azul-65.png +File87=marker-azul-66.png +File88=marker-azul-67.png +File89=marker-azul-68.png +File9=engrane_gris.png +File90=marker-azul-69.png +File91=marker-azul-7.png +File92=marker-azul-70.png +File93=marker-azul-71.png +File94=marker-azul-72.png +File95=marker-azul-73.png +File96=marker-azul-74.png +File97=marker-azul-75.png +File98=marker-azul-76.png +File99=marker-azul-77.png +FileGroup1=Default Group +FileGroup10=Default Group +FileGroup100=Default Group +FileGroup101=Default Group +FileGroup102=Default Group +FileGroup103=Default Group +FileGroup104=Default Group +FileGroup105=Default Group +FileGroup106=Default Group +FileGroup107=Default Group +FileGroup108=Default Group +FileGroup109=Default Group +FileGroup11=Default Group +FileGroup110=Default Group +FileGroup111=Default Group +FileGroup112=Default Group +FileGroup113=Default Group +FileGroup114=Default Group +FileGroup115=Default Group +FileGroup116=Default Group +FileGroup117=Default Group +FileGroup118=Default Group +FileGroup119=Default Group +FileGroup12=Default Group +FileGroup120=Default Group +FileGroup121=Default Group +FileGroup122=Default Group +FileGroup123=Default Group +FileGroup124=Default Group +FileGroup125=Default Group +FileGroup126=Default Group +FileGroup127=Default Group +FileGroup128=Default Group +FileGroup129=Default Group +FileGroup13=Default Group +FileGroup130=Default Group +FileGroup131=Default Group +FileGroup132=Default Group +FileGroup133=Default Group +FileGroup134=Default Group +FileGroup135=Default Group +FileGroup136=Default Group +FileGroup137=Default Group +FileGroup138=Default Group +FileGroup139=Default Group +FileGroup14=Default Group +FileGroup140=Default Group +FileGroup141=Default Group +FileGroup142=Default Group +FileGroup143=Default Group +FileGroup144=Default Group +FileGroup145=Default Group +FileGroup146=Default Group +FileGroup147=Default Group +FileGroup148=Default Group +FileGroup149=Default Group +FileGroup15=Default Group +FileGroup150=Default Group +FileGroup151=Default Group +FileGroup152=Default Group +FileGroup153=Default Group +FileGroup154=Default Group +FileGroup155=Default Group +FileGroup156=Default Group +FileGroup157=Default Group +FileGroup158=Default Group +FileGroup159=Default Group +FileGroup16=Default Group +FileGroup160=Default Group +FileGroup161=Default Group +FileGroup162=Default Group +FileGroup163=Default Group +FileGroup164=Default Group +FileGroup165=Default Group +FileGroup166=Default Group +FileGroup167=Default Group +FileGroup168=Default Group +FileGroup169=Default Group +FileGroup17=Default Group +FileGroup170=Default Group +FileGroup171=Default Group +FileGroup172=Default Group +FileGroup173=Default Group +FileGroup174=Default Group +FileGroup175=Default Group +FileGroup176=Default Group +FileGroup177=Default Group +FileGroup178=Default Group +FileGroup179=Default Group +FileGroup18=Default Group +FileGroup180=Default Group +FileGroup181=Default Group +FileGroup182=Default Group +FileGroup183=Default Group +FileGroup184=Default Group +FileGroup185=Default Group +FileGroup186=Default Group +FileGroup187=Default Group +FileGroup188=Default Group +FileGroup189=Default Group +FileGroup19=Default Group +FileGroup190=Default Group +FileGroup191=Default Group +FileGroup192=Default Group +FileGroup193=Default Group +FileGroup194=Default Group +FileGroup195=Default Group +FileGroup196=Default Group +FileGroup197=Default Group +FileGroup198=Default Group +FileGroup199=Default Group +FileGroup2=Default Group +FileGroup20=Default Group +FileGroup200=Default Group +FileGroup201=Default Group +FileGroup202=Default Group +FileGroup203=Default Group +FileGroup204=Default Group +FileGroup205=Default Group +FileGroup206=Default Group +FileGroup207=Default Group +FileGroup208=Default Group +FileGroup209=Default Group +FileGroup21=Default Group +FileGroup210=Default Group +FileGroup211=Default Group +FileGroup212=Default Group +FileGroup213=Default Group +FileGroup214=Default Group +FileGroup215=Default Group +FileGroup216=Default Group +FileGroup217=Default Group +FileGroup218=Default Group +FileGroup219=Default Group +FileGroup22=Default Group +FileGroup220=Default Group +FileGroup221=Default Group +FileGroup222=Default Group +FileGroup223=Default Group +FileGroup224=Default Group +FileGroup225=Default Group +FileGroup226=Default Group +FileGroup227=Default Group +FileGroup228=Default Group +FileGroup229=Default Group +FileGroup23=Default Group +FileGroup230=Default Group +FileGroup231=Default Group +FileGroup232=Default Group +FileGroup233=Default Group +FileGroup234=Default Group +FileGroup235=Default Group +FileGroup236=Default Group +FileGroup237=Default Group +FileGroup238=Default Group +FileGroup239=Default Group +FileGroup24=Default Group +FileGroup240=Default Group +FileGroup241=Default Group +FileGroup242=Default Group +FileGroup243=Default Group +FileGroup244=Default Group +FileGroup245=Default Group +FileGroup246=Default Group +FileGroup247=Default Group +FileGroup248=Default Group +FileGroup249=Default Group +FileGroup25=Default Group +FileGroup250=Default Group +FileGroup251=Default Group +FileGroup252=Default Group +FileGroup253=Default Group +FileGroup254=Default Group +FileGroup255=Default Group +FileGroup256=Default Group +FileGroup257=Default Group +FileGroup258=Default Group +FileGroup259=Default Group +FileGroup26=Default Group +FileGroup260=Default Group +FileGroup261=Default Group +FileGroup262=Default Group +FileGroup263=Default Group +FileGroup264=Default Group +FileGroup265=Default Group +FileGroup266=Default Group +FileGroup267=Default Group +FileGroup268=Default Group +FileGroup269=Default Group +FileGroup27=Default Group +FileGroup270=Default Group +FileGroup271=Default Group +FileGroup272=Default Group +FileGroup273=Default Group +FileGroup274=Default Group +FileGroup275=Default Group +FileGroup276=Default Group +FileGroup277=Default Group +FileGroup278=Default Group +FileGroup279=Default Group +FileGroup28=Default Group +FileGroup280=Default Group +FileGroup281=Default Group +FileGroup282=Default Group +FileGroup283=Default Group +FileGroup284=Default Group +FileGroup285=Default Group +FileGroup286=Default Group +FileGroup287=Default Group +FileGroup288=Default Group +FileGroup289=Default Group +FileGroup29=Default Group +FileGroup290=Default Group +FileGroup291=Default Group +FileGroup292=Default Group +FileGroup293=Default Group +FileGroup294=Default Group +FileGroup295=Default Group +FileGroup296=Default Group +FileGroup297=Default Group +FileGroup298=Default Group +FileGroup299=Default Group +FileGroup3=Default Group +FileGroup30=Default Group +FileGroup300=Default Group +FileGroup301=Default Group +FileGroup302=Default Group +FileGroup303=Default Group +FileGroup304=Default Group +FileGroup305=Default Group +FileGroup306=Default Group +FileGroup307=Default Group +FileGroup308=Default Group +FileGroup309=Default Group +FileGroup31=Default Group +FileGroup310=Default Group +FileGroup311=Default Group +FileGroup312=Default Group +FileGroup313=Default Group +FileGroup314=Default Group +FileGroup315=Default Group +FileGroup316=Default Group +FileGroup317=Default Group +FileGroup318=Default Group +FileGroup319=Default Group +FileGroup32=Default Group +FileGroup320=Default Group +FileGroup321=Default Group +FileGroup322=Default Group +FileGroup323=Default Group +FileGroup324=Default Group +FileGroup325=Default Group +FileGroup326=Default Group +FileGroup327=Default Group +FileGroup328=Default Group +FileGroup329=Default Group +FileGroup33=Default Group +FileGroup330=Default Group +FileGroup331=Default Group +FileGroup332=Default Group +FileGroup333=Default Group +FileGroup334=Default Group +FileGroup335=Default Group +FileGroup336=Default Group +FileGroup337=Default Group +FileGroup338=Default Group +FileGroup339=Default Group +FileGroup34=Default Group +FileGroup340=Default Group +FileGroup341=Default Group +FileGroup342=Default Group +FileGroup343=Default Group +FileGroup344=Default Group +FileGroup345=Default Group +FileGroup346=Default Group +FileGroup35=Default Group +FileGroup36=Default Group +FileGroup37=Default Group +FileGroup38=Default Group +FileGroup39=Default Group +FileGroup4=Default Group +FileGroup40=Default Group +FileGroup41=Default Group +FileGroup42=Default Group +FileGroup43=Default Group +FileGroup44=Default Group +FileGroup45=Default Group +FileGroup46=Default Group +FileGroup47=Default Group +FileGroup48=Default Group +FileGroup49=Default Group +FileGroup5=Default Group +FileGroup50=Default Group +FileGroup51=Default Group +FileGroup52=Default Group +FileGroup53=Default Group +FileGroup54=Default Group +FileGroup55=Default Group +FileGroup56=Default Group +FileGroup57=Default Group +FileGroup58=Default Group +FileGroup59=Default Group +FileGroup6=Default Group +FileGroup60=Default Group +FileGroup61=Default Group +FileGroup62=Default Group +FileGroup63=Default Group +FileGroup64=Default Group +FileGroup65=Default Group +FileGroup66=Default Group +FileGroup67=Default Group +FileGroup68=Default Group +FileGroup69=Default Group +FileGroup7=Default Group +FileGroup70=Default Group +FileGroup71=Default Group +FileGroup72=Default Group +FileGroup73=Default Group +FileGroup74=Default Group +FileGroup75=Default Group +FileGroup76=Default Group +FileGroup77=Default Group +FileGroup78=Default Group +FileGroup79=Default Group +FileGroup8=Default Group +FileGroup80=Default Group +FileGroup81=Default Group +FileGroup82=Default Group +FileGroup83=Default Group +FileGroup84=Default Group +FileGroup85=Default Group +FileGroup86=Default Group +FileGroup87=Default Group +FileGroup88=Default Group +FileGroup89=Default Group +FileGroup9=Default Group +FileGroup90=Default Group +FileGroup91=Default Group +FileGroup92=Default Group +FileGroup93=Default Group +FileGroup94=Default Group +FileGroup95=Default Group +FileGroup96=Default Group +FileGroup97=Default Group +FileGroup98=Default Group +FileGroup99=Default Group +Group=Default Group +Library1=appupdating +Library10=firebaseadmob +Library11=firebaseanalytics +Library12=firebasenotifications +Library13=fusedlocationprovider +Library14=googlemaps +Library15=googlemapsextras +Library16=gps +Library17=ime +Library18=javaobject +Library19=json +Library2=b4xpages +Library20=okhttputils2 +Library21=phone +Library22=preoptimizedclv +Library23=randomaccessfile +Library24=rspopupmenu +Library25=serial +Library26=sql +Library27=togglelibrary +Library28=xcustomlistview +Library29=xui +Library3=baqrcode +Library30=fileprovider +Library4=batteryprogressview +Library5=bitmapcreator +Library6=byteconverter +Library7=camera +Library8=compressstrings +Library9=core +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~''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~AddManifestText(~\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~) 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~AddPermission("android.permission.MANAGE_EXTERNAL_STORAGE")~\n~SetApplicationAttribute(android:largeHeap, "true")~\n~AddPermission("android.permission.MANAGE_EXTERNAL_STORAGE")~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~ +Module1=appUpdater +Module10=CameraExClass2 +Module11=DBRequestManager +Module12=MAPA_RUTAS +Module13=Starter +Module14=Subs +Module15=Tracker +Module2=B4XMainPage +Module3=BatteryUtilities +Module4=C_Cliente +Module5=C_Clientes +Module6=C_Mapas +Module7=C_NuevoCliente +Module8=C_Principal +Module9=C_UpdateAvailable +NumberOfFiles=346 +NumberOfLibraries=30 +NumberOfModules=15 +Version=11.5 +@EndOfDesignText@ +#Region Project Attributes + #ApplicationLabel: Mariana Censos + #VersionCode: 1 + #VersionName: 3.09.14 + 'SupportedOrientations possible values: unspecified, landscape or portrait. + #SupportedOrientations: portrait + #CanInstallToExternalStorage: False + #BridgeLogger: True + #AdditionalJar: com.android.support:support-v4 + #AdditionalJar: com.google.android.gms:play-services-location + #MultiDex: True +#End Region + +#Region Activity Attributes + #FullScreen: False + #IncludeTitle: True +#End Region + +Sub Process_Globals + Public ActionBarHomeClicked As Boolean +End Sub + +Sub Globals + Type CameraInfoAndId (CameraInfo As Object, Id As Int) + Type CameraSize (Width As Int, Height As Int) +End Sub + +Sub Activity_Create(FirstTime As Boolean) + Dim pm As B4XPagesManager + pm.Initialize(Activity) +End Sub + +'Template version: B4A-1.01 +#Region Delegates + +Sub Activity_ActionBarHomeClick + ActionBarHomeClicked = True + B4XPages.Delegate.Activity_ActionBarHomeClick + ActionBarHomeClicked = False +End Sub + +Sub Activity_KeyPress (KeyCode As Int) As Boolean + Return B4XPages.Delegate.Activity_KeyPress(KeyCode) +End Sub + +Sub Activity_Resume + B4XPages.Delegate.Activity_Resume +End Sub + +Sub Activity_Pause (UserClosed As Boolean) + B4XPages.Delegate.Activity_Pause +End Sub + +Sub Activity_PermissionResult (Permission As String, Result As Boolean) + B4XPages.Delegate.Activity_PermissionResult(Permission, Result) +End Sub + +Sub Create_Menu (Menu As Object) + B4XPages.Delegate.Create_Menu(Menu) +End Sub + +#if Java +public boolean _onCreateOptionsMenu(android.view.Menu menu) { + processBA.raiseEvent(null, "create_menu", menu); + return true; + +} +#End If +#End Region + +'Program code should go into B4XMainPage and other pages. \ No newline at end of file diff --git a/B4A/Mariana Censos.b4a.meta b/B4A/Mariana Censos.b4a.meta new file mode 100644 index 0000000..7b9f3b6 --- /dev/null +++ b/B4A/Mariana Censos.b4a.meta @@ -0,0 +1,51 @@ +ModuleBookmarks0= +ModuleBookmarks1= +ModuleBookmarks10= +ModuleBookmarks11= +ModuleBookmarks12= +ModuleBookmarks13= +ModuleBookmarks14= +ModuleBookmarks15= +ModuleBookmarks2= +ModuleBookmarks3= +ModuleBookmarks4= +ModuleBookmarks5= +ModuleBookmarks6= +ModuleBookmarks7= +ModuleBookmarks8= +ModuleBookmarks9= +ModuleBreakpoints0= +ModuleBreakpoints1= +ModuleBreakpoints10= +ModuleBreakpoints11= +ModuleBreakpoints12= +ModuleBreakpoints13= +ModuleBreakpoints14= +ModuleBreakpoints15= +ModuleBreakpoints2= +ModuleBreakpoints3= +ModuleBreakpoints4= +ModuleBreakpoints5= +ModuleBreakpoints6= +ModuleBreakpoints7= +ModuleBreakpoints8= +ModuleBreakpoints9= +ModuleClosedNodes0= +ModuleClosedNodes1= +ModuleClosedNodes10= +ModuleClosedNodes11= +ModuleClosedNodes12=5 +ModuleClosedNodes13= +ModuleClosedNodes14=63,64,65,67,68 +ModuleClosedNodes15=9,10,11,13,17,18,19 +ModuleClosedNodes2=2,3,7,8,9,10,11,12,13,14,15,16,17,18,21,22 +ModuleClosedNodes3= +ModuleClosedNodes4=8,10,11,14,16,17,18,19,20,21,22,23,24,25,26,27,28 +ModuleClosedNodes5=2,4,5,8 +ModuleClosedNodes6= +ModuleClosedNodes7=1,5,6,9,11,12,13,14,16,17,18 +ModuleClosedNodes8=3 +ModuleClosedNodes9= +NavigationStack=C_Principal,B4XPage_Appear,348,0,Tracker,flp_LocationChanged,175,0,C_NuevoCliente,b_guardar_Click,155,2,Subs,traeFecha,692,0,C_Cliente,b_guardaCambios_Click,318,6,C_Cliente,GPS_LocationChanged,308,2,C_Cliente,B4XPage_Appear,270,0,C_Principal,cargar_Click,476,5,Visual Designer,cliente.bal,-100,2,C_NuevoCliente,mandaPendientesNuevosClientes,397,0,B4XMainPage,B4XPage_Appear,232,0 +SelectedBuild=0 +VisibleModules=2,13,8,4,5,14,15,7,11,6 diff --git a/B4A/Starter.bas b/B4A/Starter.bas new file mode 100644 index 0000000..1838833 --- /dev/null +++ b/B4A/Starter.bas @@ -0,0 +1,148 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Service +Version=9.85 +@EndOfDesignText@ +#Region Service Attributes + #StartAtBoot: False + #ExcludeFromLibrary: True +#End Region + +Sub Process_Globals + 'These global variables will be declared once when the application starts. + 'These variables can be accessed from all modules. + Public gps As GPS + Dim ph As Phone + Public rp As RuntimePermissions + Public FLP As FusedLocationProvider +' Private flpStarted As Boolean + Dim reqManager As DBRequestManager + Dim server As String = "http://187.189.244.154:1782" +' Dim server As String = "http://187.189.244.154:1783" +' Dim server As String = "http://10.0.0.205:1782" +' Dim server As String = "http://11.0.0.231:1782" + Dim Timer1 As Timer + Dim Interval As Int = 500 + Dim ruta As String = File.DirInternal + 'Para los Logs + Private logs As StringBuilder + Private logcat As LogCat + Dim dia_semana As String = "" + Dim logger As Boolean = False + Dim marcaCel As String = ph.manufacturer + Public rp As RuntimePermissions +End Sub + +Sub Service_Create + 'This is the program entry point. + 'This is a good place to load resources that are not specific to a single activity. + gps.Initialize("GPS") +' CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") 'Para Push FirebaseMessaging + Timer1.Initialize("Timer1", Interval * 1000) + Timer1.Enabled = True +' 'Para los Logs + #if RELEASE + logcat.LogCatStart(Array As String("-v","raw","*:F","B4A:v"), "logcat") + #end if + logs.Initialize +' CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") 'Para Push FirebaseMessaging +End Sub + +Sub Service_Start (StartingIntent As Intent) + Service.StopAutomaticForeground 'Starter service can start in the foreground state in some edge cases. + Subs.revisaBD +' Log(marcaCel) + reqManager.Initialize(Me, server) +End Sub + +Private Sub Timer1_Tick +' Log("Next run " & DateTime.Time(DateTime.Now + Interval * 1000)) + ENVIA_ULTIMA_GPS +End Sub + +Sub GPS_LocationChanged (Location1 As Location) +' CallSub2(Main, "GPS_LocationChanged", Location1) +End Sub + +Sub Service_TaskRemoved + 'This event will be raised when the user removes the app from the recent apps list. +End Sub + +Sub Service_Destroy + +End Sub + +Sub ENVIA_ULTIMA_GPS +' reqManager.Initialize(Me, server) + Dim logger As Boolean = True + If logger Then LogColor("Iniciamos ENVIA_ULTIMA_GPS", Colors.Magenta) + Dim skmt As SQL + skmt.Initialize(ruta,"kmt.db", False) + + If Subs.traeAlmacen <> Null And Subs.traeAlmacen <> "" Then + 'Primero borramos de CAT_RUTAS_CENSOS el registro (por almacen y ruta) + 'y LUEGO lo insertamos en JobDone + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "deleteRutaCensos" + cmd.Parameters = Array As Object(Subs.traeAlmacen, B4XPages.MainPage.principal.l_ruta.text) + reqManager.ExecuteCommand(cmd , "delCatRutas") + End If + + 'Reiniciamos el timer para cuando llamamos el Sub desde "seleccion" + Timer1.Enabled = False + Timer1.Interval = Interval * 1000 + Timer1.Enabled = True +End Sub + +'Para los Logs +Private Sub logcat_LogCatData (Buffer() As Byte, Length As Int) + logs.Append(BytesToString(Buffer, 0, Length, "utf8")) + If logs.Length > 4000 Then + logs.Remove(0, logs.Length - 2000) 'Obtenemos log de 2000 ~ 4000 chars + End If +End Sub + +'Return true to allow the OS default exceptions handler to handle the uncaught exception. 'Para los Logs +Sub Application_Error (Error As Exception, StackTrace As String) As Boolean + 'wait for 500ms to allow the logs to be updated. + Dim jo As JavaObject + Dim l As Long = 500: jo.InitializeStatic("java.lang.Thread").RunMethod("sleep", Array(l)) 'Sleep 500ms + logcat.LogCatStop + logs.Append(StackTrace) + Subs.revisaBD + Subs.errorLog.ExecNonQuery2("INSERT INTO errores(fecha, error) VALUES (?,?)", Array As Object (Subs.fechaKMT(DateTime.now), logs)) + Return True +End Sub + + +Sub JobDone(Job As HttpJob) +' Log(Job.Success) + If Job.Success = False Then + 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 + Dim resultado As DBResult = reqManager.HandleJob(Job) + If resultado.Tag = "confirmaCliente" Then + Subs.logJobDoneResultados(resultado) + End If + If resultado.Tag = "ins_UTR" Then + Subs.logJobDoneResultados(resultado) + End If + If resultado.Tag = "delCatRutas" Then + Subs.logJobDoneResultados(resultado) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_UTR_MARDS_C" + If B4XPages.MainPage.lat_gps.Length < 15 Then B4XPages.MainPage.lat_gps = B4XPages.MainPage.lat_gps&"0" + cmd.Parameters = Array As Object(Subs.traeAlmacen, B4XPages.MainPage.batt, B4XPages.MainPage.principal.l_dia.text, B4XPages.MainPage.principal.l_nuevos_c.text, B4XPages.MainPage.principal.l_nuevos_p.text, B4XPages.MainPage.principal.l_ruta.Text, B4XPages.MainPage.principal.l_total.text, Subs.traeUsuarioDeBD, B4XPages.MainPage.principal.l_visitados.text, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps) +'' If logger Then Log($"${Subs.traeAlmacen}, ${B4XPages.MainPage.batt}, ${B4XPages.MainPage.principal.l_dia.text}, ${B4XPages.MainPage.principal.l_nuevos_c.text}, ${B4XPages.MainPage.principal.l_nuevos_p.text}, ${B4XPages.MainPage.principal.l_ruta.Text}, ${B4XPages.MainPage.principal.l_total.text}, ${Subs.traeUsuarioDeBD}, ${B4XPages.MainPage.principal.l_visitados.text}, ${B4XPages.MainPage.lat_gps}, ${B4XPages.MainPage.lon_gps}"$) + reqManager.ExecuteCommand(cmd, "ins_UTR") + End If + End If + Job.Release + End If + +End Sub diff --git a/B4A/Subs.bas b/B4A/Subs.bas new file mode 100644 index 0000000..d3d200a --- /dev/null +++ b/B4A/Subs.bas @@ -0,0 +1,1303 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=StaticCode +Version=11 +@EndOfDesignText@ +'Code module +'Subs in this code module will be accessible from all modules. +Sub Process_Globals + 'These global variables will be declared once when the application starts. + 'These variables can be accessed from all modules. + Public GZip As GZipStrings 'Usa la libreria CompressStrings + Private su As StringUtils 'Usa la libreria StringUtils + Dim phn As Phone + Dim devModel As String + Dim kmt, errorLog As SQL 'Requiere la libreria "SQL" +' Dim wifi As MLwifi + Dim ssid As String 'ignore + Dim rutaMaxPoints As Int = 3000 + Dim rutaHrsAtras As Int = 48 +' Dim rutaInicioHoy As String = "" + Private subsLogs As Boolean = False +End Sub + +'Pone el valor de phn.Model en la variable global "devModel" +Sub getPhnId As String 'ignore + 'Requiere la libreria "Phone" + devModel = phn.Model + If devModel.Length <= 3 Then 'Si phn.Model esta en blanco ... + Dim t As String = phn.GetSettings("android_id") 'Intentamos con "android_id" + devModel = t + End If + If devModel.Length >= 3 Then 'Si tenemos valor para phn.Model + File.WriteString(File.DirInternal, "phnId.txt", devModel) 'Sobreescribimos archivo phnId.txt with deviceId +' Log("Tenemos phnId: "&devModel&" "&File.DirInternal&"/phn.txt sobreescrito") + Else If devModel.Length < 3 Then ' Si no tenemos valor, lo leemos de phnId.txt + Dim s As String = File.ReadString(File.DirInternal, "phnId.txt") + devModel = s +' Log("Leemos id de "&File.DirInternal&"/phnId.txt") +' Log(devModel) + End If + Return devModel +End Sub + +'Comprime y regresa un texto (str) en base64 +Sub compress(str As String) As String 'ignore + 'Requiere la libreria "CompressStrings" + Dim compressed() As Byte = GZip.compress(str) +' Log($"UncompressedBytesLength: ${str.Length}"$) +' Log($"CompressedBytesLength: ${compressed.Length}"$) + Dim base64 As String = su.EncodeBase64(compressed) + Log($"Comprimido: ${base64.Length}"$) +' Log($"CompressedBytes converted to base64: ${base64}"$) + Return base64 +End Sub + +'Descomprime y regresa un texto en base64 +Sub decompress(base64 As String) As String 'ignore + Dim decompressedbytes() As Byte = su.DecodeBase64(base64) +' Log($"decompressedbytesLength: ${decompressedbytes.Length}"$) + Dim bc As ByteConverter + Dim uncompressed As String = bc.StringFromBytes(decompressedbytes,"UTF8") + Log($"Descomprimido: ${uncompressed.Length}"$) +' Log($"Decompressed String = ${uncompressed}"$) + Return uncompressed +End Sub + +'Convierte una fecha al formato yyMMddHHmmss +Sub fechaKMT(fecha As String) As String 'ignore +' Log(fecha) + Dim OrigFormat As String = DateTime.DateFormat 'save orig date format + DateTime.DateFormat="yyMMddHHmmss" + Dim nuevaFecha As String=DateTime.Date(fecha) + DateTime.DateFormat=OrigFormat 'return to orig date format +' Log(nuevaFecha) + Return nuevaFecha +End Sub + +'Genera una notificacion con importancia alta +Sub notiHigh(title As String, body As String, activity As Object) 'ignore + Private notif As Notification + notif.Initialize2(notif.IMPORTANCE_HIGH) + notif.Icon = "icon" + notif.Vibrate = False + notif.Sound = False + notif.AutoCancel = True + Log("notiHigh: "&title) + notif.SetInfo(title, body, activity) +' Log("notiHigh SetInfo") + notif.Notify(777) +End Sub + +'Regresa el objeto de una notificacion con importancia baja +Sub notiLowReturn(title As String, Body As String, id As Int) As Notification 'ignore + Private notification As Notification + notification.Initialize2(notification.IMPORTANCE_LOW) + Log("notiLowReturn: "&title) + notification.Icon = "icon" + notification.Sound = False + notification.Vibrate = False + notification.SetInfo(title, Body, Main) + notification.Notify(id) +' Log("notiLowReturn SetInfo") + Return notification +End Sub + +'Escribimos las coordenadas y fecha a un archivo de texto +Sub guardaInfoEnArchivo(coords As String) 'ignore + ' Cambiamos el formato de la hora + Dim OrigFormat As String=DateTime.DateFormat 'save orig date format + DateTime.DateFormat="MMM-dd HH:mm:ss" + Dim lastUpdate As String=DateTime.Date(DateTime.Now) + DateTime.DateFormat=OrigFormat 'return to orig date format + + Dim ubic As String = coords&","&lastUpdate + Dim out As OutputStream = File.OpenOutput(File.DirRootExternal, "gps.txt", True) + Dim s As String = ubic & CRLF + Dim t() As Byte = s.GetBytes("UTF-8") + out.WriteBytes(t, 0, t.Length) + out.Close +End Sub + +'Escribimos las coordenadas (latitud, longitud, fecha) y fecha a una BD +Sub guardaInfoEnBD(coords As String) 'ignore + Log("Guardamos ubicacion en BD - "&coords) + Try + Dim latlon() As String = Regex.Split("\|", coords) + If latlon.Length < 2 Then latlon = Regex.Split(",", coords) 'Si son menos de 2, entonces estan separadas por comas y no por "|" + If subsLogs Then Log("LatLon="&latlon) + kmt.ExecNonQuery2("INSERT INTO RUTA_GPS(FECHA, LAT, LON) VALUES (?,?,?)", Array As Object (latlon(2),latlon(0),latlon(1))) + Catch + LogColor(LastException, Colors.red) + End Try +End Sub + +'Regresa la ruta solicitada comprimida y en base64 +Sub dameRuta(inicioRuta As String, origenRuta As String) As String 'ignore + 'Requiere la libreria "SQL" + Dim fechaInicio As String + Try 'incioRuta es numero + inicioRuta = inicioRuta * 1 +' Log("fechaInicio numerica="&fechaInicio) + fechaInicio = fechaKMT(DateTime.Now - (DateTime.TicksPerHour * inicioRuta)) + Catch 'inicioRuta es string + fechaInicio = fechaInicioHoy +' Log("fechaInicio string="&fechaInicio) + End Try + If subsLogs Then Log("fechaInicio: "&fechaInicio&" | rutaHrsAtras="&rutaHrsAtras) 'fechaKMT(DateTime.Now) + Dim c As Cursor + If kmt.IsInitialized = False Then kmt.Initialize(Starter.ruta, "kmt.db", True) + If subsLogs Then Log("select FECHA, LAT, LON from "& origenRuta &" where FECHA > " & fechaInicio & " order by FECHA desc limit " & rutaMaxPoints) + c = kmt.ExecQuery("select FECHA, LAT, LON from "& origenRuta &" where FECHA > " & fechaInicio & " order by FECHA desc limit " & rutaMaxPoints) + c.Position = 0 + Dim ruta2 As String = "" + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + ruta2=ruta2&CRLF&c.GetString("LAT")&","&c.GetString("LON")&","&c.GetString("FECHA") + B4XPages.MainPage.fechaRuta = c.GetString("FECHA") + Next + End If + c.Close + Return compress(ruta2) +End Sub + +'Limpiamos la tabla RUTA_GPS de la BD +Sub deleteGPS_DB 'ignore + kmt.ExecNonQuery("delete from RUTA_GPS") + kmt.ExecNonQuery("vacuum;") + ToastMessageShow("Borramos BD Coords GPS", False) +End Sub + +'Limpiamos la tabla errorLog de la BD +Sub deleteErrorLog_DB 'ignore + errorLog.ExecNonQuery("delete from errores") + errorLog.ExecNonQuery("vacuum;") + ToastMessageShow("BD Errores Borrada", False) +End Sub + +'Borramos el archio "gps.txt" +Sub borramosArchivoGPS 'ignore + Dim out As OutputStream = File.OpenOutput(File.DirRootExternal, "gps.txt", False) + Dim s As String = "" + Dim t() As Byte = s.GetBytes("UTF-8") + out.WriteBytes(t, 0, t.Length) + out.Close +End Sub + +'Revisa que exista la BD y si es necesario crea algunans tablas dentro de ella +Sub revisaBD 'ignore +' Main.ruta = File.DirInternal +' Log(Starter.ruta) +' Log(File.Exists(Starter.ruta, "kmt.db")) + If Not(File.Exists(Starter.ruta, "kmt.db")) Then + File.Copy(File.DirAssets, "kmt.db", Starter.ruta, "kmt.db") + LogColor("copiamos kmt.db de "&File.DirAssets & " a " & Starter.ruta,Colors.Green) + End If + If Not(kmt.IsInitialized) Then kmt.Initialize(Starter.ruta, "kmt.db", True) + kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS RUTA_GPS(FECHA INTEGER, LAT TEXT, LON TEXT)") +' kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS UUC(fecha INTEGER, lat TEXT, lon TEXT)") 'LastKnownLocation + kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS bitacora(fecha INTEGER, texto TEXT)") 'Bitacora + kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_AVANCE(HA_MARCA TEXT, HA_AVANCE TEXT, HA_OBJETIVO TEXT, HA_PORCENTAJE TEXT)") 'Historico avance mes actual + kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_FOTO_CLIENTE(CODIGO TEXT, ALMACEN TEXT, RUTA TEXT, NOM_FOTO TEXT)") + Try 'Si no existe la columna PC_ENVIO_OK la agregamos. + kmt.ExecQuery("select count(PC_ENVIO_OK) from PEDIDO_CLIENTE") + Catch + Try + kmt.ExecNonQuery("ALTER TABLE PEDIDO_CLIENTE ADD COLUMN PC_ENVIO_OK INTEGER") + Catch + LogColor("No pudimos agregar la columna PC_ENVIO_OK.", Colors.Red) + LogColor(LastException, Colors.Red) + End Try + End Try + Try 'Si no existe la columna PC_ENVIO_OK la agregamos. + kmt.ExecQuery("select count(PC_TIEMPO_TIENDA) from PEDIDO_CLIENTE") + Catch + Try + kmt.ExecNonQuery("ALTER TABLE PEDIDO_CLIENTE ADD COLUMN PC_TIEMPO_TIENDA FLOAT") + Catch + LogColor("No pudimos agregar la columna PC_TIEMPO_TIENDA.", Colors.Red) + LogColor(LastException, Colors.Red) + End Try + End Try + Try 'Si no existe la columna PC_FACTURA la agregamos. + kmt.ExecQuery("select count(PC_FACTURA) from PEDIDO_CLIENTE") + Catch + Try + kmt.ExecNonQuery("ALTER TABLE PEDIDO_CLIENTE ADD COLUMN PC_FACTURA INTEGER") + Catch + LogColor("No pudimos agregar la columna PC_FACTURA.", Colors.Red) + LogColor(LastException, Colors.Red) + End Try + End Try + kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS bitacora(fecha INTEGER, texto TEXT)") 'Bitacora +' kmt.ExecNonQuery("drop table PEDIDO_INICIO_FINAL") 'Bitacora + kmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PEDIDO_INICIO_FINAL(PIF_CLIENTE TEXT, PIF_HORA_INICIO LONG, PIF_HORA_FINAL LONG)") 'Bitacora + + 'Tabla para la bitacora de errores + If Not(errorLog.IsInitialized) Then errorLog.Initialize(Starter.ruta, "errorLog.db", True) + errorLog.ExecNonQuery("CREATE TABLE IF NOT EXISTS errores(fecha INTEGER, error TEXT)") +End Sub + +'Obtiene el ssid al que esta conectado el telefono +Sub getSSID 'ignore +' 'Requiere la libreria "MLWifi400" +' If wifi.isWifiConnected Then +' ssid = wifi.WifiSSID +' End If +End Sub + +'Convierte un texto en formato JSON a un objeto "Map" +Sub JSON2Map(theJson As String) As Map 'ignore + 'Requiere la libreria "JSON" + Try + Private json As JSONParser + json.Initialize(theJson) + Return json.NextObject + Catch + Log(LastException) + log2DB("JSON2Map: "&LastException) + Private m As Map = CreateMap("title":"Error generating JSON", "t":"Error", "Message":LastException, "text" : LastException) + Return m + End Try +End Sub + +'Convierte un mapa a formato JSON +Sub map2JSON(m As Map) As String 'ignore + 'Requiere la libreria "JSON" + 'Convierte un objecto "Map" a JSON + Dim jg As JSONGenerator + jg.Initialize(m) + Dim t As String = jg.ToString + Return t +End Sub + +'Mandamos "coords" en un mensaje a "Sprvsr" +'Sub mandamosLoc(coords As String) 'ignore +'' Log("Iniciamos mandamosLoc "&coords) +'' Log("locRequest="&Tracker.locRequest) +' guardaInfoEnBD(coords)'Escribimos coordenadas y fecha a una bd +' Dim t As String +' If Tracker.locRequest="Activa" Then +' If PushService.au = 1 Then +' t = "au" ' es una actualizacion +' Else +' t = "u" ' es una peticion +' End If +' Dim params As Map = CreateMap("topic":"Sprvsr", "coords":coords, "t":t, "b":PushService.battery, "mt":Main.montoActual) +' CallSub2(PushService, "mandaMensaje",params) +' Tracker.locRequest="Enviada" +' CallSubDelayed(Tracker,"CreateLocationRequest") +' End If +'End Sub + +'Regresa la fecha y hora de hoy a las 00:00 en el formato "yyMMddHHMMSS" +Sub fechaInicioHoy As String 'ignore + Dim OrigFormat As String = DateTime.DateFormat 'save orig date format + DateTime.DateFormat="yyMMdd" + Private h As String = DateTime.Date(DateTime.Now)&"000000" + DateTime.DateFormat=OrigFormat 'return to orig date format + Log("Hoy="&h) + Return h +End Sub + +'Guardamos "texto" a la bitacora +Sub log2DB(texto As String) 'ignore + LogColor(fechaKMT(DateTime.Now)&" - log2BD: '"&texto&"'", Colors.LightGray) + kmt.ExecNonQuery2("INSERT INTO bitacora(fecha, texto) VALUES (?,?)", Array As Object (fechaKMT(DateTime.now), texto)) +End Sub + +'Regresa verdadero si ya pasaron XX minutos de la fecha dada +Sub masDeXXMins(hora As Int, mins As Int) As Boolean 'ignore + If (hora + mins * DateTime.TicksPerMinute) < DateTime.Now Then + Return True + Else + Return False + End If +End Sub + +'Regresa verdadero si ya pasaron XX minutos de la fechaKMT dada +Sub masDeXXMinsKMT(hora As String, mins As Int) As Boolean 'ignore + Try + ' LogColor($"Hora=${fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute)}, Mins=${mins}, Actual=${fechaKMT(DateTime.Now)}"$,Colors.red) + If fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute < DateTime.Now Then + ' Log("+++ +++ "&fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute) & " < " & fechaKMT(DateTime.Now)) + Return True + Else + ' Log("+++ +++ "&fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute) & " > " & fechaKMT(DateTime.Now)) + Return False + End If + Catch + Log(LastException) + End Try +End Sub + +'Limpiamos la tabla "bitacora" de la BD +Sub borraLogDB 'ignore + LogColor("Borramos BD de log", Colors.Magenta) + kmt.ExecNonQuery("delete from bitacora") + kmt.ExecNonQuery("vacuum;") +End Sub + +'Monitoreamos los servicios para ver si estan activos (No pausados), y si no, los reniciamos +'Sub Monitor 'ignore +' Private monitorStatus As Boolean = True +' LogColor("Corriendo Subs.Monitor", Colors.RGB(161,150,0)) +' If IsPaused(Tracker) Then +' log2DB("Reiniciando 'Tracker Pausado' desde Subs.Monitor") +' StartService(Tracker) +' monitorStatus = False +' Else +' CallSubDelayed(Tracker, "revisaFLP") +' End If +' If IsPaused(PushService) Then +' log2DB("Reiniciando 'PushService Pausado' desde Subs.Monitor") +' StartService(PushService) +' monitorStatus = False +' Else +' revisaPushService +' End If +' If monitorStatus Then LogColor(" +++ +++ Servicios Activos", Colors.Green) +'End Sub + +'Compara la UUG (Ultima Ubicacion Guardada) con FLP.LastKnowLocation y si +'cumple con los requisitos de distancia y precision la guardamos en la BD. +Sub revisaUUG 'ignore + Try +' revisaFLP + If Tracker.FLP.GetLastKnownLocation.IsInitialized Then + Dim daa As Int = Tracker.UUGCoords.DistanceTo(Tracker.FLP.GetLastKnownLocation) 'Distancia de la UUG a la actual de Tracker.FLP.GetLastKnownLocation + If Starter.Logger Then LogColor($"**** UUC "${fechaKMT(Tracker.FLP.GetLastKnownLocation.Time)}|$0.2{Tracker.FLP.GetLastKnownLocation.Accuracy}|$0.8{Tracker.FLP.GetLastKnownLocation.Latitude}|$0.8{Tracker.FLP.GetLastKnownLocation.Longitude}|$0.2{Tracker.FLP.GetLastKnownLocation.Speed}|"$, Colors.RGB(255,112,35)) + If daa > 40 And Tracker.FLP.GetLastKnownLocation.Accuracy < 35 Then 'Si la distancia de la ubicacion anterior es mayor de XX y la precision es menor de XX, la guardamos ... + kmt.ExecNonQuery2("INSERT INTO RUTA_GPS(fecha, lat, lon) VALUES (?,?,?)", Array As Object (fechaKMT(Tracker.FLP.GetLastKnownLocation.Time),Tracker.FLP.GetLastKnownLocation.Latitude,Tracker.FLP.GetLastKnownLocation.Longitude)) + If Starter.Logger Then Log("++++ Distancia a anterior="&daa&"|"&"Precision="&Tracker.FLP.GetLastKnownLocation.Accuracy) + End If + Tracker.UUGCoords = Tracker.FLP.GetLastKnownLocation + End If + Catch + LogColor("If Tracker.FLP.GetLastKnownLocation.IsInitialized --> "&LastException, Colors.Red) + End Try +End Sub + +'Revisamos que el FLP (FusedLocationProvider) este inicializado y activo +Sub revisaFLP 'ignore + LogColor("**** **** Revisamos FLP **** ****", Colors.RGB(78,0,227)) + Private todoBienFLP As Boolean = True + Try + If Not(Tracker.FLP.IsInitialized) Then + log2DB("revisaFLP: No esta inicializado ... 'Reinicializando FLP'") + Tracker.FLP.Initialize("flp") + todoBienFLP = False + End If + Catch + LogColor("If Not(Tracker.FLP.IsInitialized) --- "&LastException, Colors.Red) + End Try + Try + If Tracker.FLP.IsInitialized Then + Try + If Not(Tracker.FLP.IsConnected) Then + log2DB("revisaFLP: No esta conectado ... 'Reconectando FLP'") + ' Tracker.FLP.Connect + CallSubDelayed(Tracker,"StartFLP") + todoBienFLP = False + End If + Catch + LogColor("If Not(Tracker.FLP.IsConnected) --> "&LastException, Colors.Red) + End Try + Try + If Tracker.FLP.IsConnected And _ + Tracker.FLP.GetLastKnownLocation.IsInitialized And _ + Tracker.FLP.GetLastKnownLocation.DistanceTo(Tracker.UUGCoords) > 500 Then + log2DB("revisaFLP: 'No se esta actualizando, lo reiniciamos ...'") + StartService(Tracker) + todoBienFLP = False + End If + Catch + LogColor("If FLP.IsConnectctd and FLP.getLKL.IsInitialized --> "&LastException, Colors.Red) + End Try + End If + If todoBienFLP Then LogColor(" +++ +++ Sin errores en FLP", Colors.Green) + Catch + LogColor("If Tracker.FLP.IsInitialized --> "&LastException, Colors.Red) + End Try + ' revisar hora de lastKnownlocation y si es mayor de 10 minutos llamar StartFLP +End Sub + +'Revisamos que el servicio "PushService" este inicializado y activo +'Sub revisaPushService 'ignore +' Private todoBienPS As Boolean = True +' LogColor("**** **** Revisamos PushService **** ****", Colors.RGB(78,0,227)) +' If Not(PushService.wsh.IsInitialized) Then 'Si no esta inicializado ... +' log2DB("revisaPushService: No esta inicializado ... 'Reinicializando PushService'") +' CallSubDelayed(PushService, "Connect") +' todoBienPS = False +' End If +' If Not(PushService.wsh.ws.Connected) Then 'Si no esta conectado ... +' log2DB("revisaPushService: No esta conectado ... 'Reconectando PushService'") +' CallSubDelayed(PushService, "Connect") +' todoBienPS = False +' End If +' If masDeXXMinsKMT(Starter.pushServiceActividad, 5) Then 'Si mas de xx minutos de la ultima actividad entonces ... +' PushService.wsh.Close +' CallSubDelayed(PushService, "Connect") +'' StartService(PushService) +' log2DB("revisaPushService: 'Reconectamos 'PushService' por inactividad") +' Starter.pushServiceActividad = fechaKMT(DateTime.Now) +' todoBienPS = False +' End If +' If todoBienPS Then LogColor(" +++ +++ Sin errores en PushService", Colors.Green) +'End Sub + +'Borramos renglones extra de la tabla de errores +Sub borraArribaDe100Errores 'ignore + revisaBD + LogColor("Borramos BD de log", Colors.Magenta) + errorLog.ExecNonQuery("DELETE FROM errores WHERE fecha NOT in (SELECT fecha FROM errores ORDER BY fecha desc LIMIT 99 )") + errorLog.ExecNonQuery("vacuum;") + Log("Borramos mas de 100 de errorLog") +End Sub + +'Borramos renglones extra de la tabla de bitacora +Sub borraArribaDe600RenglonesBitacora 'ignore + revisaBD + LogColor("Borramos BD de log", Colors.Magenta) + kmt.ExecNonQuery("DELETE FROM bitacora WHERE fecha NOT in (SELECT fecha FROM bitacora ORDER BY fecha desc LIMIT 599 )") + kmt.ExecNonQuery("vacuum;") + Log("Borramos mas de 600 de bitacora") +End Sub + +'Inserta 50 renglones de prueba a la tabla "errores" +Sub insertaRenglonesPruebaEnErrorLog 'ignore + revisaBD + Log("insertamos 50 renglones a errorLog") + For x = 1 To 50 + errorLog.ExecNonQuery2("INSERT INTO errores(fecha, error) VALUES (?,?)", Array As Object (fechaKMT(DateTime.now), "abc")) + Log(x) + Next +End Sub + +'Regresa la tabla "errores" en una lista de mapas convertida a JSON +Sub dameErroresJSON(SQL As SQL, maxErrores As Int, comprimido As Boolean) As String 'ignore + Log("dameErroresJSON") + Private j As JSONGenerator + Private lim As String + Private cur As ResultSet + Private l As List + Private i As Int = 0 + l.Initialize + Dim m, m2 As Map + m2.Initialize + If maxErrores = 0 Then lim = "" Else lim = "limit "&maxErrores + cur = SQL.ExecQuery("select * from errores order by fecha desc "&lim) + Do While cur.NextRow + m.Initialize + m.Put("fecha", cur.GetString("fecha")) + m.Put("error", cur.GetString("error")) + m2.Put(i,m) + i = i + 1 + Loop + cur.Close + j.Initialize(m2) + Log(j.ToString) + If comprimido Then + Return compress(j.ToString) + Else + Return j.ToString + End If +End Sub + +'Convierte una fecha en formato YYMMDDHHMMSS a Ticks +Sub fechaKMT2Ticks(fKMT As String) As Long 'ignore + Try + If fKMT.Length = 12 Then + Private parteFecha As String = fKMT.SubString2(0,6) + Private parteHora As String = fKMT.SubString(6) + Private OrigFormat As String = DateTime.DateFormat 'save original date format + DateTime.DateFormat="yymmdd" + DateTime.TimeFormat="HHmmss" + Private ticks As Long = DateTime.DateTimeParse(parteFecha,parteHora) + DateTime.DateFormat=OrigFormat 'return to original date format + Return ticks + Else + Log("Formato de fecha incorrecto, debe de ser 'YYMMDDHHMMSS', no '"&fKMT&"' largo="&fKMT.Length) + Return 0 + End If + Catch + Log(LastException) + LogColor($"Fecha dada: ${fKMT}, Parte Fecha: ${parteFecha}, Parte Hora: ${parteHora}"$, Colors.Red) + Return 0 + End Try +End Sub + +Sub InstallAPK(dir As String, apk As String) 'ignore + If File.Exists(dir, apk) Then + Dim i As Intent + i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(dir, apk)) + i.SetType("application/vnd.android.package-archive") + StartActivity(i) + End If +End Sub + +'Copia la base de datos del almacenamiento interno al externo en el directorio kmts +Sub copiaDB(result As Boolean) 'ignore + ToastMessageShow("copiaDB", False) + If result Then + Dim p As String + If File.ExternalWritable Then + p = File.DirRootExternal +' Log("Externo") + Else + p = File.DirInternal +' Log("Interno") + End If + Dim theDir As String + Try + File.MakeDir(File.DirRootExternal,"kmts") + theDir = "/kmts" + Catch + theDir = "" + End Try + Try + File.Copy(File.DirInternal,"kmt.db",File.DirRootExternal&theDir,"cedex_kmt.db") + File.Copy(File.DirInternal,"errorLog.db",File.DirRootExternal&theDir,"cedex_errorLog.db") + ToastMessageShow("BD copiada!", False) + Catch + ToastMessageShow("No se pudo hacer la copia: "&LastException, True) + End Try + Log("rootExternal="&p) + Log("File.DirInternal="&File.DirInternal) + Log("File.DirRootExternal="&File.DirRootExternal) + Else + ToastMessageShow("Sin permisos", False) + End If +End Sub + +'Hace visible y trae al frente el panel con los parametros "Top" y "Left" dados +Sub panelVisible(panel As Panel, top As Int, left As Int) 'ignore + panel.BringToFront + panel.Visible = True + panel.Top = top + panel.Left = left +End Sub + +'Centra un boton dentro de un elemento superior +Sub centraBoton(elemento As Label, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +End Sub + +'Centra una etiqueta dentro de un elemento superior +Sub centraEtiqueta(elemento As Label, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +End Sub + +'Centra un panel horizontalmente dentro de un elemento superior +Sub centraPanel(elemento As Panel, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +End Sub + +'Centra un panel verticalmente dentro de un elemento superior +Sub centraPanelV(elemento As Panel, altoElementoSuperior As Int) 'ignore + elemento.Top = Round(altoElementoSuperior/2)-(elemento.Height/2) +End Sub + +'Centra una barra de progreso dentro de un elemento superior +Sub centraProgressBar(elemento As ProgressBar, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +End Sub + +'Regresa el usuario de la tabla USUARIOA si es que existe, si no existe, regresa "SinUsuario". +Sub buscaDBUsuario As String 'ignore + Private c As Cursor + Private usuario As String = "SinUsuario" + c=kmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + If c.RowCount > 0 Then usuario = c.GetString("USUARIO") + Return usuario +End Sub + +'Saca el usuario de la tabla USUARIOA +Sub dameUsuarioDeDB As String 'ignore + Private c As Cursor + Private u As String = "SinUsuario" + If Not(kmt.IsInitialized) Then revisaBD + c=kmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + If c.RowCount > 0 Then u = c.GetString("USUARIO") + c.Close + Return u +End Sub + +''Inserta un producto en la tabla "PEDIDO" +'Sub guardaProductoX(cedis As String, costoTot As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, tipoV As String, precio2 As String, query As String) 'ignore +'' LogColor("guardaProducto", Colors.Magenta) +'' Log($"Guardamos producto ${prodId}"$) +'' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_TIPO, PE_PRECIO2, PE_RUTA) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, costoTot, costoU, cant, nombre, prodId, clienteId, fecha, usuario, tipoV, precio2, Starter.rutaV)) +'' B4XPages.MainPage.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cant, prodId)) +'' ToastMessageShow("guardaProd", False) +'End Sub + +'Sub guardaProductoSin(cedis As String, costoTot As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoV As String, precio2 As String, query As String) 'ignore +'' LogColor("guardaProductoSin", Colors.Magenta) +'' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_RUTA, PE_COSTO_SIN, PE_TIPO, PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, costoTot,costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoV, precio2)) +'' B4XPages.MainPage.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cant, prodId)) +'' DateTime.DateFormat = "MM/dd/yyyy" +'' Private sDate As String =DateTime.Date(DateTime.Now) +'' Private sTime As String =DateTime.Time(DateTime.Now) +'' Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") +'' c.Position=0 +'' B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") +'' B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clienteId, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps, cedis, rutaV, c.GetString("TOTAL_CLIE_SIN"))) +'' B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +'' c.Close +' ToastMessageShow("guardaProdSin", False) +'End Sub + +'Regresa el almacen actual de la base de datos. +Sub traeAlmacen As String 'ignore + Private c As Cursor + Private a As String + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + c.Position = 0 + a = C.GetString("ID_ALMACEN") + c.Close + Return a +End Sub + +'Regresa el nombre del producto desde CAT_GUNAPROD +Sub traeProdNombre(id As String) As String + Private h As Cursor + Private n As String + h=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_NOMBRE from CAT_GUNAPROD where CAT_GP_ID = ? ", Array As String(id.Trim)) + If h.RowCount > 0 Then + h.Position = 0 + n = h.GetString("CAT_GP_NOMBRE") +' Log(h.RowCount&"|"&id&"|"&n&"|") + End If + h.Close + If n = Null Or n="" Then n = "N/A" +' Log(h.RowCount&"|"&id&"|"&n&"|") + Return n +End Sub + +Sub traeCliente As String 'ignore + Private c As Cursor + Private cl As String + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + cl = c.GetString("CUENTA") + c.Close + Return cl +End Sub + +Sub traeFecha As String 'ignore + DateTime.DateFormat = "MM/dd/yyyy" + Private sDate As String =DateTime.Date(DateTime.Now) + Private sTime As String =DateTime.Time(DateTime.Now) + Return sDate & sTime +End Sub + +'Regresa el usuario de la tabla USUARIOA +Sub traeUsuarioDeBD As String 'ignore + Private c As Cursor + Private u As String = "SinUsuario" + If Not(kmt.IsInitialized) Then revisaBD + c=kmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + If c.RowCount > 0 Then u = c.GetString("USUARIO") + c.Close + Return u +End Sub + +'Inserta un producto en la tabla "pedido" y "pedido_cliente". +'Actualiza "cat_gunaprod" y la columna "gestion" en la tabla "kmt_info". +Sub guardaProducto(cedis As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoVenta As String) + LogColor("guardaProducto: "&prodId&", cant="&cant, Colors.Magenta) + Private c As Cursor + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, (cant * costoU), costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoVenta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cant, prodId)) + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clienteId, fecha, usuario, c.GetString("CANT_CLIE"), c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps, cedis, c.GetString("TOTAL_CLIE_SIN"))) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +End Sub + +'Inserta un producto en la tabla "pedido" y "pedido_cliente" y actualiza "cat_gunaprod". +'NO ACTUALIZA LA BANDERA DE GESTION EN LA TABLA "kmt_info". +'Si "gestion=2" entonces el sistema considera que el pedido ya se guardó y ya no se debe modificar. +Sub guardaProductoSinGestion(cedis As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoVenta As String) + LogColor("guardaProductoSinGestion: "&prodId&", cant="&cant, Colors.Magenta) + Private c As Cursor + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, (cant * costoU), costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoVenta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cant, prodId)) + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clienteId, fecha, usuario, c.GetString("CANT_CLIE"), c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps, cedis, c.GetString("TOTAL_CLIE_SIN"))) +End Sub + +Sub actualizaProducto(cedis As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoVenta As String) + Private c As Cursor=B4XPages.MainPage.skmt.ExecQuery($"select * from pedido where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}'"$) + If c.RowCount > 0 Then + c.Position=0 + Private antCant As Int = 0 + If IsNumber(c.GetInt("PE_CANT")) Then antCant=c.GetInt("PE_CANT") + Private difCant As Int = cant - antCant + B4XPages.MainPage.skmt.ExecNonQuery($"update pedido set pe_cant = ${cant}, pe_costo_tot = ${(cant*c.GetString("PE_COSTOU"))} where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}' "$) + B4XPages.MainPage.skmt.ExecNonQuery($"update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - (${difCant}) where cat_gp_id = '${prodId}' "$) + If cant = 0 Then +' Log("BORRAMOS PROD") + B4XPages.MainPage.skmt.ExecNonQuery($"delete from pedido where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}' "$) + Private pe As Cursor = B4XPages.MainPage.skmt.ExecQuery("select count(pe_cliente) as cuantosPedidos from pedido where pe_cliente In (select cuenta from cuentaa)") + pe.Position=0 + If pe.GetString("cuantosPedidos") = 0 Then B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + End If + Else + 'INSERTAMOS + guardaProductoSinGestion(cedis, costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoVenta) + End If + c.Close +End Sub + +'Regresa un mapa con la información de la promo. +'Regresa: {id, maxXcliente, maxRecurrente, maxPromos, historico, +' productos={idProducto={idProducto, preciosimptos, precio, almacen, tipo, piezas, usuario, fecha, regalo, clasif}} 'Mapa con los productos de la promo y los datos de cada uno. +' tipos={idProducto=tipo} 'Mapa con id y tipo del producto, 0 si es fijo y 1 si es variable. +' prodsFijos={idProducto,idProducto} 'Lista con los ids de los productos fijos. +' prodsVariables={idProducto,idProducto} 'Lista con los ids de los productos variables. +' resultado="OK" 'Ok si existe la promocion. +' prodsVariablesRequeridos=5} 'Cantidad de productos variables requeridos para la promoción. +Sub traePromo(promo As String, cliente As String) As Map + Private inicioContador As String = DateTime.Now + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery("Select * from promos_comp where cat_pa_id = '"& promo&"'") 'Obtenemos las el maximo de promocioones a otorgar. + Private siHistorico As String = 0 + Private promoMap As Map + Private prodsFijos, prodsFijosPrecios, prodsFijosPiezas, prodsVariables As List + promoMap.Initialize + prodsFijos.Initialize + prodsFijosPrecios.Initialize + prodsFijosPiezas.Initialize + prodsVariables.Initialize + c.Position = 0 + If c.RowCount > 0 Then promoMap = CreateMap("id":promo, "maxXcliente":c.GetString("CAT_PA_MAXPROMCLIE"), "maxRecurrente":c.GetString("CAT_PA_MAXPROMREC"), "maxPromos":c.GetString("CAT_PA_MAXPROM")) + c = B4XPages.MainPage.skmt.ExecQuery("Select count(*) as hist from HIST_PROMOS where HP_CLIENTE = '"& cliente & "' and HP_CODIGO_PROMOCION = '" & promo & "'") 'Revisamos si hay historico de la promoción. + c.Position = 0 + If c.GetString("hist") > 0 Then siHistorico = 1 + promoMap.Put("historico", siHistorico) + c = B4XPages.MainPage.skmt.ExecQuery("Select * from CAT_DETALLES_PAQ where CAT_DP_ID = '"& promo & "'") 'Obtenemos los detalles de la promoción. + c.Position = 0 + If c.RowCount > 0 Then + Private prods, tipos As Map + prods.Initialize + tipos.Initialize + For i=0 To c.RowCount -1 + c.Position=i + prods.Put(c.GetString("CAT_DP_IDPROD"), CreateMap("idProducto":c.GetString("CAT_DP_IDPROD"), "precioSimptos":c.GetString("CAT_DP_PRECIO_SIMPTOS"), "precio":c.GetString("CAT_DP_PRECIO"), "almacen":c.GetString("CAT_DP_ALMACEN"), "tipo":c.GetString("CAT_DP_TIPO"), "piezas":c.GetString("CAT_DP_PZAS"), "usuario":c.GetString("CAT_DP_USUARIO"), "regalo":c.GetString("CAT_DP_REGALO"), "clasif":c.GetString("CAT_DP_CLASIF"))) + tipos.Put(c.GetString("CAT_DP_IDPROD"), c.GetString("CAT_DP_TIPO")) + If c.GetString("CAT_DP_TIPO") = "0" Then + prodsFijos.Add(c.GetString("CAT_DP_IDPROD")) + prodsFijosPrecios.Add(c.GetString("CAT_DP_PRECIO")) + prodsFijosPiezas.Add(c.GetString("CAT_DP_PZAS")) + End If + If c.GetString("CAT_DP_TIPO") = "1" Then prodsVariables.Add(c.GetString("CAT_DP_IDPROD")) +' Log($"id:${c.GetString("CAT_DP_IDPROD")}, tipo:${c.GetString("CAT_DP_TIPO")}"$) + Next + promoMap.Put("productos", prods) 'Mapa con los productos de la promocion (id, precio, almacen, tipo, piezas, etc.) + promoMap.Put("tipos", tipos) 'Mapa con los productos de la promoción y su tipo (fijo o variable). + promoMap.Put("prodsFijos", prodsFijos) 'Lista de los productos fijos de la promoción. + promoMap.Put("prodsVariables", prodsVariables) 'Lista de los productos variables de la promoción. + promoMap.Put("prodsFijosCant", prodsFijos.Size) + promoMap.Put("prodsFijosPrecios", prodsFijosPrecios) + promoMap.Put("prodsFijosPiezas", prodsFijosPiezas) + promoMap.Put("prodsVariablesCant", prodsVariables.Size) + promoMap.Put("resultado", "ok") + Else + promoMap.Put("resultado", "No hay datos de la promoción.") + End If + c = B4XPages.MainPage.skmt.ExecQuery("Select CAT_GP_STS, CAT_GP_NOMBRE from CAT_GUNAPROD where CAT_GP_ID = '"& promo & "'") 'Obtenemos las piezas requeridas de productos variables para la promoción. + c.Position = 0 + Private pvr As String = 0 + If c.RowCount > 0 Then + c.Position = 0 + pvr = c.GetString("CAT_GP_STS") + promoMap.Put("prodsVariablesRequeridos", pvr) 'Cantidad de productos variables requeridos para la promoción. + promoMap.put("descripcion", c.GetString("CAT_GP_NOMBRE")) + End If + c.Close +' Log($"Inv variables: ${cuantosVariablesTengoBD(promo)}"$) +' Log($"Inv dispo: ${traemosInventarioDisponibleParaPromo(promo)}"$) +' LogColor($"Promo ${promo}: ${promoMap}"$, Colors.Green) +' LogColor("TIEMPO para traePromo -=" & promo & "=- : " & ((DateTime.Now-inicioContador)/1000), Colors.Red) + Return promoMap +End Sub + +'Regresa un mapa con el inventario disponible por producto para la promoción (desde la base de datos). +Sub traemosInventarioDisponibleParaPromo(promo As String) As Map 'ignore + Private c As Cursor + c = B4XPages.MainPage.skmt.ExecQuery2("SELECT CAT_GP_ID, CAT_GP_ALMACEN FROM CAT_GUNAPROD WHERE CAT_GP_ID IN (select CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID = ?)", Array As String(promo)) +' Private prodInv As Map +' prodInv.Initialize + Private prods As Map + prods.Initialize + If c.RowCount > 0 Then + For i=0 To c.RowCount -1 + c.Position=i + prods.Put(c.GetString("CAT_GP_ID"), c.GetString("CAT_GP_ALMACEN")) +' Log($"prod:${c.GetString("CAT_GP_ID")}, inventario:${c.GetString("CAT_GP_ALMACEN")}"$) + Next +' prodInv.Put("inventarios", prods) + End If + Return prods +End Sub + +'Resta los productos fijos del inventario de la promoción (mapa) y regresa un mapa con el nuevo inventario. +'Hay que darle como parametro un mapa (traePromo(promo)) con toda la informacion de la promocion. +'Regresa en el mapa la llave "resultado" que nos da "ok" o "No hay suficiente producto para la promocion". +Sub restaFijosPromo(promoMap As Map) As Map 'ignore + Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub. + Private inventariosDisponiblesParaEstaPromo As Map = traemosInventarioDisponibleParaPromo(promoMap.Get("id")) 'Obtenemos un mapa con el inventario disponible para cada producto de la promocion desde la base de datos. + If thisLog Then LogColor(inventariosDisponiblesParaEstaPromo, Colors.red) + If thisLog Then LogColor("Inventario inicial antes de FIJOS: "&inventariosDisponiblesParaEstaPromo, Colors.Gray) 'Inventario inicial. + Private i As Int + Private prodsmap As Map = promoMap.Get("productos") 'Obtenemos un mapa con todos los productos de la promoción. + Private prodsFijos As List = promoMap.get("prodsFijos") 'Obtenemos una lista con los productos fijos de la promoción. + For p = 0 To prodsFijos.Size - 1 + Private t As String = prodsFijos.Get(p) 'Obtenemos el Id de este producto desde la lista de productos fijos. + Private p2 As Map = prodsmap.Get(t) 'Obtenemos un mapa con los datos de este producto (id, precio, almacen, tipo, piezas, etc.) + If thisLog Then Log($"T: ${t}, prod ${p2.Get("idProducto")}, piezas: ${p2.Get("piezas")}"$) 'Producto y piezas requeridas + If thisLog Then Log("inventariosDisponiblesParaEstaPromo="&inventariosDisponiblesParaEstaPromo) + If inventariosDisponiblesParaEstaPromo.ContainsKey(t) Then 'Si el mapa del inventario contiene el id del producto entonces ... + i = inventariosDisponiblesParaEstaPromo.get(t) 'Obtenemos del mapa el inventario de este producto. + If thisLog Then Log($"Nuevo inventario de ${t}: ${i}-${promoMap.Get("prodsFijosPiezas").As(List).get(p)} = $1.0{i - promoMap.Get("prodsFijosPiezas").As(List).get(p)}"$) 'El nuevo inventario. + inventariosDisponiblesParaEstaPromo.Put(t, $"${i - promoMap.Get("prodsFijosPiezas").As(List).get(p)}"$) 'Restamos del inventario las piezas requeridas para la promoción y guardamos el nuevo inventario en el mapa. + inventariosDisponiblesParaEstaPromo.Put("resultado", "ok") + Else 'Si en el mapa no esta el id del producto, entonces no tenemos inventario. + inventariosDisponiblesParaEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") + LogColor("Sin suficiente inventario fijo: " & t, Colors.Blue) + Exit + End If + If i - p2.Get("piezas") < 0 Then + inventariosDisponiblesParaEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") 'Si el inventario de este producto sale negativo, quiere decir que no tenemos suficiente inventario para la promoción. + Exit + End If + Next + If prodsFijos.Size = 0 Then inventariosDisponiblesParaEstaPromo.Put("resultado", "ok") 'No hay productos fijos. + If thisLog Then LogColor("Inventario final depues de FIJOS: "&inventariosDisponiblesParaEstaPromo, Colors.blue) 'Inventario final. + Return inventariosDisponiblesParaEstaPromo +End Sub + +'Revisa si tenemos los productos variables requeridos para la promoción (mapa). +'Hay que darle como parametro un mapa (traePromo(promo)) con toda la informacion de la promocion. +Sub alcanzanLosVariablesParaPromo(promoMap As Map, inventarioSinFijos As Map) As Boolean 'ignore + Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub. + If thisLog Then LogColor("Inventario inicial: "&inventarioSinFijos, Colors.Gray) 'Inventario inicial. + Private totalProdsVariables As Int = 0 +' Private prodsmap As Map = promoMap.Get("productos") 'Obtenemos un mapa con todos los productos de la promoción. + Private prodsVariables As List = promoMap.get("prodsVariables") 'Obtenemos un a lista con los productos variables de la promoción. + For p = 0 To prodsVariables.Size - 1 + Private t As String = prodsVariables.Get(p) 'Obtenemos el Id de este producto desde la lista de productos fijos. + If inventarioSinFijos.ContainsKey(t) Then 'Si existe el producto en la lista del inventario, entonces ... + Private p2 As String = inventarioSinFijos.Get(t) 'Obtenemos el inventario disponible este producto. + totalProdsVariables = totalProdsVariables + p2 + If thisLog Then Log($"prod ${t}, hay: ${p2}"$) 'Producto y piezas requeridas + End If + Next + If thisLog Then Log("Total prods variables=" & totalProdsVariables & ", requeridos=" & promoMap.Get("prodsVariablesRequeridos")) + Private res As Boolean = False + If totalProdsVariables >= promoMap.Get("prodsVariablesRequeridos") Then res = True 'Si el total de inventario de productos variables (totalProdsVariables) es mayor o igual a los productos requeridos entonces regresamos TRUE + Return res +End Sub + +'Regresa el numero máximo de promociones permitidas, tomando en cuenta recurrentes, clientes y maxPromos. +Sub traeMaxPromos(pm As Map) As Int + Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub. + Private maxPromos As List + Private vendidas As Int = 0 + maxPromos.Initialize +' If Starter.promosLog Then Log("==== HISTORICO:"&pm.Get("historico")) + If thisLog Then Log(pm) + If pm.Get("historico") = "1" Then maxPromos.Add(pm.Get("maxRecurrente")) 'Si hay historico, agregamos maxRecurrente + maxPromos.Add(pm.Get("maxPromos")) 'Agregamos maxPromos + maxPromos.Add(pm.Get("maxXcliente")) 'Agregamos maxXcliente + maxPromos.Sort(True) + +' Log($"|${pm.Get("id").As(String).trim}|${traeCliente.Trim}|"$) + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery2("select sum(PE_CANT) as vendidas from PEDIDO where PE_PROID = ? and PE_CLIENTE = ? ", Array As String(pm.Get("id").As(String).trim, traeCliente.Trim)) + If c.RowCount > 0 Then + c.Position = 0 + vendidas = c.GetInt("vendidas") +' Log(vendidas) + End If + +' If Starter.promosLog Then Log(maxPromos) +' If Starter.promosLog Then Log("Max Promos="&maxPromos.Get(0)) +' LogColor($"maxPromos=${maxPromos.Get(0)} - vendidas=${vendidas}"$, Colors.red) + Return maxPromos.Get(0) - vendidas 'Regresamos el numero mas pequeño de las opciones. +End Sub + +'Regresa la cantidad de promos que se le han vendido al cliente. +Sub traePromosVendidas(promo As String, cliente As String) As Int + Private c As Cursor + Private pv As Int = 0 + c=B4XPages.MainPage.skmt.ExecQuery($"select PE_CANT from PEDIDO where PE_PROID = '${promo}' and PE_CLIENTE = '${cliente}'"$) + If c.RowCount > 0 Then + c.Position = 0 + pv = c.GetInt("PE_CANT") + End If + Return pv +End Sub + +Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore + Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub. + Private inicioContador As String = DateTime.Now + If thisLog Then LogColor($"********* Iniciamos revision de Promo ${idPromo} *********"$, Colors.Magenta) + 'Obtenemos el mapa con toda la info de la promoción. + Private pm As Map = traePromo(idPromo, cliente) + If thisLog Then LogColor(pm, Colors.Blue) + If pm.Get("resultado") = "ok" Then 'Si encontramos la promoción, entonces ... + 'Buscamos el máximo de promociones permitidas. + If thisLog Then LogColor($"Promociones permitidas=${traeMaxPromos(pm)}"$, Colors.Blue) + If thisLog Then Log("Promos vendidas: " & traePromosVendidas(idPromo, cliente)) + If traePromosVendidas(idPromo, cliente) >= traeMaxPromos(pm) Then + If thisLog Then LogColor("Ya se vendieron las promos PERMITIDAS para el cliente", Colors.red) + Return CreateMap("status":"ko", "mp":pm) + End If + 'Restamos del inventario (mapa) las piezas necesarias para los productos fijos. + Private inventarioSinFijos As Map = restaFijosPromo(pm) + If thisLog Then LogColor("inventariosfijos="&inventarioSinFijos, Colors.Green) + + If inventarioSinFijos.Get("resultado") = "ok" Then + 'Revisamos que los productos variables requeridos sean menos que el inventario total (mapa). + Private pv As Boolean = alcanzanLosVariablesParaPromo(pm, inventarioSinFijos) + If thisLog Then Log("Alcanzan los variables? --> " & pv) + If pv Then Return CreateMap("status":"ok", "mp":pm) Else Return CreateMap("status":"ko", "mp":pm) + Else + If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red) + Return CreateMap("status":"ko", "mp":pm) + End If + End If + ' Si tenemos suficiente inventario para los variables mostramos la promocion, si no ... + ' break 'NO HAY INVENTARIO SUFICIENTE PARA LA PROMOCION. + + LogColor("TIEMPO DE PROCESO ESTA PROMO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red) +End Sub + +'Regresa cuantas promos alcanzan con los productos FIJOS que hay en inventario. +Sub revisaMaxPromosProdsFijosPorInventario2(pm As Map) As Int + Private thisLog As Boolean = False + If thisLog Then Log($"pm=${pm}"$) +' Private prodsFijos As List = pm.get("prodsFijos") + Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id")) + If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$) + Private maxPromos As String = traeMaxPromos(pm) + Private maxPromosFijosXinv As Int = 1 + Private fpf2, pdp2 As Int + Private salir As Boolean = False + Private pf As List = pm.Get("prodsFijos") + Private pfp As List = pm.Get("prodsFijosPiezas") + If thisLog Then Log($"maxPromos=${maxPromos}, prodsFijos=${pf}, piezas=${pfp}"$) + If thisLog Then LogColor($"InvFijo disponible=${invDispParaPromo}"$, Colors.Blue) + Private invFijoXpromo As Map + invFijoXpromo.Initialize + For p = 0 To pf.Size -1 'Generamos mapa con los productos fijo y piezas requeridos por promo. + invFijoXpromo.Put(pf.Get(p), pfp.Get(p)) + Next + If thisLog Then LogColor("Inv req. de prods fijos x promo" & invFijoXpromo, Colors.Green) + For i = 1 To maxPromos 'Revisamos cuantas promociones alcanzan, hasta llegar al máximo de promos permitadas. + If thisLog Then LogColor("Prods para promo " & (i+1), Colors.Magenta) + For q = 0 To pf.Size - 1 + Private q2 As String = pf.Get(q) + If thisLog Then Log("q="&q2) +' fpf2 = invFijoXpromo.Get(q2) * i 'Multiplicamos las piezas requeridas por la cantidad de promos. + fpf2 = pfp.Get(q) * i 'Multiplicamos las piezas requeridas por la cantidad de promos. + pdp2 = invDispParaPromo.Get(q2) + If thisLog Then Log($"pf=${q2}, Actual=${(i)}, max promos: ${pdp2}-${fpf2}=${pdp2 - fpf2}"$) + If pdp2 - fpf2 < 0 Then 'Si el inventario es negativo, entonces ya no alcanza para este producto. + salir=True + Exit + End If + Next + If salir Then Exit + maxPromosFijosXinv = i + Next + If thisLog Then LogColor("InvFijo requerido x promo="&invFijoXpromo, Colors.blue) + LogColor("Maximo de promociones de prodsFijos POR inventario = " & maxPromosFijosXinv, Colors.Red) + Return maxPromosFijosXinv +End Sub + +'Regresa cuantas promos alcanzan con los productos FIJOS que hay en inventario. +Sub revisaMaxPromosProdsFijosPorInventario(pm As Map) As Int + Private thisLog As Boolean = False + Private invFijoXpromo As Map + Private t As List + t.Initialize + t.Add(traeMaxPromos(pm)) ' Agregamos a la lista las promos maximas permitidas (recurrente, cliente y promo). + invFijoXpromo.Initialize + If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue) + Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id")) + If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$) + Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas") + Private idProdsFijos As List = pm.Get("prodsFijos") + For p = 0 To idProdsFijos.Size -1 'Generamos una lista con las promos disponibles por producto (dividimos el inventario total entre las piezas requeridas). + If thisLog Then Log($"id=${idProdsFijos.Get(p)}, inv=${invDispParaPromo.Get(idProdsFijos.Get(p))}, pzas=${prodsFijosPiezas.Get(p)}"$) + If thisLog Then Log($"${(invDispParaPromo.Get(idProdsFijos.Get(p)) / prodsFijosPiezas.Get(p))}"$) + Private x() As String = Regex.Split("\.", $"${(invDispParaPromo.Get(idProdsFijos.Get(p)) / prodsFijosPiezas.Get(p))}"$) 'Separamos el resultado de la division por el punto decimal. + If thisLog Then Log(x(0)) + t.Add(x(0).As(Int)) 'Solo guardamos la parte del entero de la division. + Next + t.Sort(True) 'Ordenamos la lista para que en el lugar 0 este el resultao mas pequeño. + If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue) + If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue) + If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue) + LogColor("Max promos de prodsFijos POR inventario = " & t.Get(0), Colors.red) + Return t.Get(0) 'Regresamos el resultado mas pequeño. +End Sub + +'Regresa cuantas promos alcanzan con los productos VARIABLES que hay en inventario. +'La cantidad de promos disponibles se calcula DESPUES de descontar los productos fijos, y si las +'promos por productos fijos llega al maximo, aunque se puedan mas de producos variables, solo se +'regresa el maximo por productos fijos. Ej. si las promos por variables es 10, pero el maximo por +'fijos es 5, entonces regresamos 5. +Sub revisaMaxPromosProdsVariablesPorInventario(pm As Map) As Int 'ignore + Private thisLog As Boolean = False + If thisLog Then Log("======================================================") + If thisLog Then Log("======================================================") + Private invFijoXpromo As Map + invFijoXpromo.Initialize + Private totalProdsVariablesDisponibles As Int = 0 + If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue) + Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id")) + If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$) + Private maxPromos As String = traeMaxPromos(pm) + Private maxPromosXFijos As Int = revisaMaxPromosProdsFijosPorInventario(pm) + Private idProdsVariables As List = pm.Get("prodsVariables") + Private prodsVariablesRequeridos As Int = pm.Get("prodsVariablesRequeridos") + Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas") + Private idProdsFijos As List = pm.Get("prodsFijos") + For p = 0 To idProdsFijos.Size -1 'Generamos mapa con los productos fijos y piezas requeridas por promo. + invFijoXpromo.Put(idProdsFijos.Get(p), prodsFijosPiezas.Get(p)) + Private idEsteProd As String = idProdsFijos.Get(p) + Private invEsteProd As Int = invDispParaPromo.Get(idEsteProd) + Private pzasReqEsteProd As Int = prodsFijosPiezas.Get(p) + If thisLog Then Log($"id=${idEsteProd}, inv=${invEsteProd}, pzas=${pzasReqEsteProd}"$) +' invDispParaPromo.Put( idEsteProd, (invEsteProd - (1)) ) + Next + If thisLog Then LogColor($"MaxPromos=${maxPromos}, promosXFijos=${maxPromosXFijos}"$, Colors.Blue) + If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue) + If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue) + If thisLog Then LogColor($"prodsVariables=${idProdsVariables}${CRLF}Variables Req=${prodsVariablesRequeridos} "$, Colors.Blue) + If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue) + If thisLog Then Log($"Prods variables disponibles = ${totalProdsVariablesDisponibles}"$) + Private maxPromosXVariables As Int = 0 + For x = 1 To maxPromosXFijos + If thisLog Then Log("=====================================================") + If thisLog Then Log("=====================================================") + For i = 0 To idProdsFijos.Size - 1 + If thisLog Then Log($"FIJO - ${idProdsFijos.Get(i)}, ${invDispParaPromo.Get(idProdsFijos.Get(i))} - ${prodsFijosPiezas.Get(i).As(Int)*(i+1)}"$) + invDispParaPromo.Put(idProdsFijos.Get(i), invDispParaPromo.Get(idProdsFijos.Get(i)).As(Int) - prodsFijosPiezas.Get(i).As(Int)*(i+1)) 'Restamos las piezas de los productos fijos del inventario disponible. + Next + If thisLog Then LogColor("Inv disponible despues de restar fijos = " & invDispParaPromo, Colors.Blue) + + totalProdsVariablesDisponibles = 0 + For i = 0 To idProdsVariables.Size - 1 'Obtenemos total de productos variables disponibes. + If invDispParaPromo.ContainsKey(idProdsVariables.Get(i)) Then + totalProdsVariablesDisponibles = totalProdsVariablesDisponibles + invDispParaPromo.Get(idProdsVariables.Get(i)) + End If + Next + 'Revisamos variables. + If thisLog Then Log($"Var disponibles - var requeridos : ${totalProdsVariablesDisponibles} - ${prodsVariablesRequeridos*x}"$) + totalProdsVariablesDisponibles = totalProdsVariablesDisponibles - (prodsVariablesRequeridos*x) + If thisLog Then Log("prodsVariables disponibles despues de promo = " & totalProdsVariablesDisponibles) + If totalProdsVariablesDisponibles < 0 Then Exit 'Ya no hay inventario disponible. + maxPromosXVariables = x + Next + 'Restamos fijos. + If thisLog Then LogColor("Max promos de prodsVariables POR inventario = " & maxPromosXVariables, Colors.red) + Return maxPromosXVariables +End Sub + +'Regresa la suma del inventario de los productos variables de la promoción dada desde la base de datos. +Sub cuantosVariablesTengoBD(promo As String) As String 'ignore +' Private x As String = "0" +' If promo <> "" Then +' Private c As Cursor +' c = Starter.skmt.ExecQuery2("Select SUM(CAT_GP_ALMACEN) as variables FROM CAT_GUNAPROD2 WHERE CAT_GP_ID IN (Select CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID = ? and cat_dp_tipo = 1 GROUP BY CAT_DP_IDPROD)", Array As String (promo)) +' If c.RowCount > -1 Then +' c.Position = 0 +' If c.GetString("variables") <> Null Then x = c.GetString("variables") +' End If +' End If +' Return x +End Sub + +'Regresa un mapa con los datos del producto desde la base de datos. +'el mapa incluye: Id, nombre, tipo y subtipo del producto. +Sub traeProdIdDeBD As Map 'ignore + Private c As Cursor + Private m As Map + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_TIPO,CAT_GP_SUBTIPO from CAT_GUNAPROD where CAT_GP_NOMBRE In (Select PDESC from PROID)") + If c.RowCount > 0 Then + c.Position = 0 + m = CreateMap("id":c.GetString("CAT_GP_ID"), "nombre":c.GetString("CAT_GP_NOMBRE"), "tipo":c.GetString("CAT_GP_TIPO"), "subtipo":c.GetString("CAT_GP_SUBTIPO")) + Else + m = CreateMap("id":"N/A", "nombre":"N/A", "tipo":"N/A", "subtipo":"N/A") + End If + c.Close + Return m +End Sub + +'Guarda en la base de datos la hora inicial y final de la vista. +Sub guardaClienteHoraInicio(cliente As String) + B4XPages.MainPage.skmt.ExecNonQuery2("insert into PEDIDO_INICIO_FINAL(PIF_CLIENTE, PIF_HORA_INICIO, PIF_HORA_FINAL) VALUES(?,?,?) ", Array As Object (cliente, DateTime.Now, 0)) +' LogColor($"insertamos ${cliente}, hora_inicio=${DateTime.Now}, hora_final=0"$,Colors.Red) +End Sub + +'Actualizamos el tiempo que el vendedor estuvo en la tienda, desde que entra a la pantalla del cliente hasta que hace clic en "Guardar". +Sub actualizaTET(cliente As String) + Dim c As Cursor = B4XPages.MainPage.skmt.Execquery2("select * from PEDIDO_INICIO_FINAL where PIF_CLIENTE = ?", Array As String(cliente)) + Dim total As Long = 0 + If c.RowCount > 0 Then + c.Position=0 + For i = 0 To c.RowCount-1 + c.Position=i +' LogColor($"cliente=${c.GetString("PIF_CLIENTE")}, inicio=${c.GetString("PIF_HORA_INICIO")}, final=${c.GetString("PIF_HORA_FINAL")}"$, Colors.Magenta) + Dim subtotal As Long = c.GetString("PIF_HORA_FINAL") - c.GetString("PIF_HORA_INICIO") + total = total + subtotal +' Log($" Subtotal=${subtotal}, total=${total}"$) + Next +' Log($"Total=${(total/1000)/60}"$) + B4XPages.MainPage.skmt.ExecNonQuery2("update PEDIDO_CLIENTE set PC_TIEMPO_TIENDA = ? where PC_CLIENTE = ?", Array As String(((total/1000)/60), cliente)) + End If +End Sub + +'Regresa el total de productos y monto del pedido del cliente actual. +Sub traeTotalesClienteActual As Map + Private m As Map + m.Initialize + Private c_prodsX As Cursor=B4XPages.MainPage.skmt.ExecQuery("select ifnull(sum(PE_CANT), 0) as cantProds, ifnull(sum(PE_COSTO_TOT), 0) as costoTotal FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PRONOMBRE asc") + c_prodsX.Position=0 +' LogColor($"Productos de la orden: ${c_prodsX.GetString("cantProds")}, Total: ${c_prodsX.GetString("costoTotal")}"$, Colors.red) + m = CreateMap("productos": c_prodsX.GetString("cantProds"), "monto" : c_prodsX.GetString("costoTotal")) + Return m +End Sub + +'Borra el pedido del cliente actual. +'Borra los registros de la tabla "pedido" y "pedido_cliente" +'Actualiza las tablas "cat_gunaprod" y "kmt_info". +Sub borraPedidoClienteActual As String + Private thisC As Cursor + thisC=B4XPages.MainPage.skmt.ExecQuery("select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ") + If thisC.RowCount>0 Then + For i=0 To thisC.RowCount -1 + thisC.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?", Array As Object(thisC.GetString("PE_CANT"),thisC.GetString("PE_PROID"))) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (traeAlmacen, thisC.GetString("PE_PROID"),thisC.GetString("PE_CANT")* -1)) + Next + End If + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido where pe_cliente in (Select CUENTA from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Return 1 +End Sub + +'Regresa verdadero si la columna gestion en la tabla "kmt_info" tene valor 2. +'si no, entonces regresa falso. +Sub pedidoGuardado As Boolean + Private guardado As Boolean = False + Private g As Cursor = B4XPages.MainPage.skmt.ExecQuery("select gestion from kmt_info where CAT_CL_CODIGO in (Select CUENTA from cuentaa)") + If g.RowCount > 0 Then + g.Position=0 + If g.GetString("gestion") = "2" Then guardado = True + End If + Log($"Guardado=${guardado}"$) + Return guardado +End Sub + +'Regresa verdadero si hay pedido en la tabla "PEDIDO" del cliente actual. +Sub hayPedido As Boolean + Private thisC As Cursor=B4XPages.MainPage.skmt.ExecQuery($"select count(PE_CLIENTE) as hayPedido from PEDIDO where PE_CLIENTE = '${traeCliente}'"$) + thisC.Position=0 + Private hay As Boolean = False + If thisC.GetInt("hayPedido") > 0 Then hay = True +' Log($"Cliente actual=${traeCliente}, hayPedido=${hay}"$) + Return hay +End Sub + +'Muestra en el Log los campos y valores que regresan en el JobDone. +Sub logJobDoneResultados(resultado As DBResult) + For Each records() As Object In resultado.Rows + LogColor($"====== ${resultado.Tag} - REGISTROS = ${resultado.Rows.Size}"$, Colors.RGB(215,37,0)) + For Each k As String In resultado.Columns.Keys + LogColor(k & " = " & records(resultado.Columns.Get(k)), Colors.RGB(215,37,0)) + Next + Next +End Sub + +'Agrega una columna a la tabla especificada. +'Hay que indicar el "tipo" de la columna (TEXT, INTEGER, ETC) +'Ej. agregaColumna("TABLA", "COLUMNA", "TIPO") +Sub agregaColumna(tabla As String, columna As String, tipo As String) + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna en la tabla + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery($"SELECT COUNT(*) AS fCol FROM pragma_table_info('${tabla}') WHERE name='${columna}'"$) + c.Position = 0 + If c.GetString("fCol") = 0 Then 'Si no esta la columna la agregamos + B4XPages.MainPage.skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + Log($"Columna "${columna} ${tipo}", agregada a "${tabla}"."$) + End If + Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch + Try + B4XPages.MainPage.skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + Log($"Columna "${columna} ${tipo}", agregada a "${tabla}".."$) + Catch + Log(LastException) + End Try + End Try +End Sub + +Sub escapeSQLString(str As String) + Private s As String = str.Replace("'","''") + Return s +End Sub + +'Regresa una lista con los giros desdxe la base de datos. +Sub traeGirosLista As List + Private cc As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select * from cat_giros order by descripcion"$) + Private itemsGiro As List + itemsGiro.Initialize + itemsGiro.Add("SELECCIONA UNA OPCION") + If cc.RowCount > 0 Then + For i = 0 To cc.RowCount - 1 + cc.Position = i +' lv_giro.AddSingleLine(cc.GetString("descripcion")) + itemsGiro.Add(cc.GetString("descripcion")) + Next + End If + cc.Close + Return itemsGiro +End Sub + +'Quita los duplicados de una lista. +Sub RemoveDuplicates(pList As List) As List + If pList = Null Or Not(pList.IsInitialized) Then Return pList + Dim lstNew As List : lstNew.Initialize + Dim objItem As Object + + For i = 0 To pList.Size - 1 + objItem = pList.Get(i) + If lstNew.IndexOf(objItem) = - 1 Then + lstNew.Add(objItem) + End If + Next + Return lstNew +End Sub + +'Convierte un alista en un string. +Sub list2string(laLista As List) As String + If laLista = Null Or Not(laLista.IsInitialized) Then Return "" + Private elString As String = "" + For i = 0 To laLista.Size - 1 + If i = 0 Then elString = laLista.Get(i) Else elString = $"${elString},${laLista.Get(i)}"$ + Next + Return elString +End Sub \ No newline at end of file diff --git a/B4A/Tracker.bas b/B4A/Tracker.bas new file mode 100644 index 0000000..f4befbd --- /dev/null +++ b/B4A/Tracker.bas @@ -0,0 +1,298 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Service +Version=10.2 +@EndOfDesignText@ +#Region Service Attributes + #StartAtBoot: True +#End Region +'****************************************************************************** +'No olvidar agregar esta linea al editor de manifiesto: +' SetServiceAttribute(Tracker, android:foregroundServiceType, "location") +' +'En Starter agregar estas lineas en Process_Globals +' Public rp As RuntimePermissions +' Public FLP As FusedLocationProvider +' Private flpStarted As Boolean +' +'En Main agregar estas lineas a Activity_Resume +' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) +' Wait For Activity_PermissionResult (Permission As String, Result As Boolean) +' If Result Then +' StartService(Tracker) +' Log("Start Tracker") +' Else +' ToastMessageShow("No permission", True) +' End If +' +'Se necesitan las librerias FusedLocationProvider, GPS, Phone y RunTimePermissions +' +'Y en Main agregar estas dos lineas: +'#AdditionalJar: com.android.support:support-v4 +'#AdditionalJar: com.google.android.gms:play-services-location + +Sub Process_Globals + Private nid As Int = 51042 + Private Tracking As Boolean + Private lock As PhoneWakeState + 'Para FusedLocationProvider (2 lineas) + Public FLP As FusedLocationProvider + Dim actualLR As LocationRequest + Private flpStarted As Boolean +' Dim locRequest As String + Dim UUGCoords As Location 'Ultima Ubicacion Guardada +End Sub + +Sub Service_Create + Service.AutomaticForegroundMode = Service.AUTOMATIC_FOREGROUND_NEVER 'we are handling it ourselves + 'Para FusedLocationProvider (2 lineas) + FLP.Initialize("flp") + FLP.Connect + lock.PartialLock +' StartFLP +End Sub + +Sub flp_ConnectionSuccess +' Log("Connected to location provider") + 'FLP.GetLastKnownLocation +End Sub + +Sub flp_ConnectionFailed(ConnectionResult1 As Int) + Log("Failed to connect to location provider") +End Sub + +Sub Service_Start (StartingIntent As Intent) + 'Para FusedLocationProvider (1 linea) + Service.StopAutomaticForeground + Service.StartForeground(nid, CreateNotification("...")) + Track + StartServiceAt(Me, DateTime.Now + 5 * DateTime.TicksPerMinute, True) + FLP.GetLastKnownLocation.Initialize +End Sub + +Public Sub Track +' Log("Inicia Track - Tracking : "&Tracking) + If Not(FLP.IsInitialized) Then FLP.Initialize("flp") + If Not(FLP.IsConnected) Then FLP.Connect + If Tracking And actualLR.IsInitialized Then +' Log(actualLR.GetSmallestDisplacement) + Return 'Si ya estamos "rastreando" no hacemos nada (return) + End If + If Starter.rp.Check(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) = False Then + Log("Sin permisos de ubicacion") + Return + Else + StartFLP 'Iniciamos FusedLocationProvider + Tracking = True + End If +End Sub + +Public Sub StartFLP +' Log("StartFLP - flpStarted="&flpStarted) + Do While FLP.IsConnected = False + Sleep(500) +' Log("sleeping") + Loop +' If flpStarted = False Then +' Log("RequestLocationUpdates") + FLP.RequestLocationUpdates(CreateLocationRequest) 'Buscamos ubicacion +' Log("Buscamos ubicacion") +' Log(actualLR.GetSmallestDisplacement) + flpStarted = True +' End If +End Sub + +Public Sub StartFLPSmall +' Log("StartFLPSmall - flpStarted="&flpStarted) + Do While FLP.IsConnected = False + Sleep(500) + Log("sleeping") + Loop + dameUltimaUbicacionConocida 'Regresamos ultima ubicacion conocida + FLP.RequestLocationUpdates(CreateLocationRequestSmallD) 'Buscamos ubicacion 2 peticiones +' Log("Buscamos ubicacion Small displacement") +' Log("GPSSmallestDisplacement = " & actualLR.GetSmallestDisplacement) +End Sub + +Private Sub CreateLocationRequest As LocationRequest +' LogColor("Iniciamos CreateLocationRequest", Colors.Blue) + Dim lr As LocationRequest + lr.Initialize + lr.SetInterval(10000) 'Intervalo deseado para actualizaciones de ubicacion + lr.SetFastestInterval(lr.GetInterval / 2) 'Intervalo minimo para actualizaciones de ubicacion + lr.SetSmallestDisplacement(40) 'Solo registra cambio de ubicacion si es mayor a XX mts + lr.SetPriority(lr.Priority.PRIORITY_HIGH_ACCURACY) + actualLR=lr + Return lr +End Sub + +Private Sub CreateLocationRequestSmallD As LocationRequest +' LogColor("Iniciamos CreateLocationRequestSmallD", Colors.Blue) + Dim lr As LocationRequest + lr.Initialize + lr.SetInterval(1000) 'Intervalo deseado para actualizaciones de ubicacion + lr.SetFastestInterval(800) 'Intervalo minimo para actualizaciones de ubicacion + lr.setNumUpdates(10) 'Solicitamos solo 2 actualizaciones con estos parametros + lr.SetSmallestDisplacement(0) 'Solo registra cambio de ubicacion si es mayor a XX mts + lr.SetPriority(lr.Priority.PRIORITY_HIGH_ACCURACY) + actualLR=lr + Return lr +End Sub + +Sub dameUltimaUbicacionConocida + If FLP.GetLastKnownLocation.IsInitialized Then 'Mandamos ultima ubicacion guardada +' If Main.logger Then Log("Mandamos UUC : "&formatoFecha(FLP.GetLastKnownLocation.Time)) + If Starter.Logger Then LogColor($"Mandamos UUC "${Subs.fechaKMT(FLP.GetLastKnownLocation.Time)}|Acc:$0.2{FLP.GetLastKnownLocation.Accuracy}|$0.8{FLP.GetLastKnownLocation.Latitude}|$0.8{FLP.GetLastKnownLocation.Longitude}|Spd:$0.2{FLP.GetLastKnownLocation.Speed}|"$, Colors.RGB(255,112,35)) + Dim coords As String = FLP.GetLastKnownLocation.Latitude&","&FLP.GetLastKnownLocation.Longitude&","&formatoFecha(FLP.GetLastKnownLocation.Time) +' CallSubDelayed2(FirebaseMessaging,"mandamosLoc",coords) +' Subs.mandamosLoc(coords) + End If +End Sub + +Public Sub StopFLP + 'Log("StopFLP") + If flpStarted Then + FLP.RemoveLocationUpdates 'Eliminamos todas las solicitudes de ubicacion + flpStarted = False + End If +End Sub + +Sub flp_LocationChanged (Location1 As Location) +' ToastMessageShow("Loc changed", False) + Log($"Loc changed TRACKER:${Location1.Longitude}, ${Location1.Latitude}, ${Location1.Accuracy}"$) + B4XPages.MainPage.lat_gps = Location1.Latitude + B4XPages.MainPage.lon_gps = Location1.Longitude + UUGCoords = Location1 +' Log("SmallestDisplacement="&actualLR.GetSmallestDisplacement) +' If DateTime.Now > LastUpdateTime + 10 * DateTime.TicksPerSecond Then +' Dim n As Notification = CreateNotification($"$2.5{Location1.Latitude} / $2.5{Location1.Longitude}"$) +' n.Notify(nid) +' LastUpdateTime = DateTime.Now +' End If + '/////// para la ultima localización FL + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + If Not(B4XPages.MainPage.skmt.IsInitialized) Then B4XPages.MainPage.skmt.Initialize(Starter.ruta,"kmt.db", True) + Try + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_GPS (HGDATE, HGLAT, HGLON) VALUES(?,?,?) ", Array As Object (sDate & " " & sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS") + Catch + LogColor(LastException, Colors.Red) + End Try + '/////// + Dim coords As String = Location1.Latitude&","&Location1.Longitude&","&formatoFecha(Location1.Time) +' Log("Loc changed : "&Location1.Latitude&","&Location1.Longitude&"|"&B4XPages.MainPage.usuario&"|") +' Log("Mandamos Ubicacion") +' Log(FirebaseMessaging.locRequest) + ' Solo mandamos la ubicacion si la precision es menor a XX mts + If Location1.Accuracy < 100 Then +' CallSubDelayed2(FirebaseMessaging,"mandamosLoc",coords) + End If + + CallSub2(Starter, "GPS_LocationChanged", Location1) + B4XPages.mainpage.nuevoCliente.GPS_LocationChanged(Location1) + CallSub2(B4XPages.GetPage("Cliente"), "GPS_LocationChanged", Location1) +' CallSub2(nuevocliente, "GPS_LocationChanged", Location1) +End Sub + +Sub CreateNotification (Body As String) As Notification + Dim notification As Notification + notification.Initialize2(notification.IMPORTANCE_LOW) + notification.Icon = "icon" + notification.SetInfo("MARIANA CENSOS", Body, Main) + Return notification +End Sub + +Sub Service_Destroy + If Tracking Then + StopFLP + End If + Tracking = False + lock.ReleasePartialLock +End Sub + +Sub formatoFecha(fecha As String) As String 'Convierte una fecha al formato yyMMddHHmmss +' Log(fecha) + Dim OrigFormat As String = DateTime.DateFormat 'save orig date format + DateTime.DateFormat="yyMMddHHmmss" + Dim lastUpdate As String=DateTime.Date(fecha) + DateTime.DateFormat=OrigFormat 'return to orig date format +' Log(lastUpdate) + Return lastUpdate +End Sub + +'Revisamos que el FLP (FusedLocationProvider) este inicializado y activo +Sub revisaFLP 'ignore + LogColor("**** **** Revisamos FLP **** ****", Colors.RGB(78,0,227)) + Private todoBienFLP As Boolean = True + Try + If Not(FLP.IsInitialized) Then + Subs.log2DB("revisaFLP: No esta inicializado ... 'Reinicializando FLP'") + FLP.Initialize("flp") + todoBienFLP = False + End If + Catch + LogColor("If Not(Tracker.FLP.IsInitialized) --> "&LastException, Colors.Red) + End Try + Try + If FLP.IsInitialized Then + Try + If Not(FLP.IsConnected) Then + Subs.log2DB("revisaFLP: No esta conectado ... 'Reconectando FLP'") + ' Tracker.FLP.Connect + StartFLP + todoBienFLP = False + End If + Catch + LogColor("If Not(Tracker.FLP.IsConnected) --> "&LastException, Colors.Red) + End Try + Try + If FLP.IsConnected And _ + FLP.GetLastKnownLocation.IsInitialized And _ + FLP.GetLastKnownLocation.DistanceTo(UUGCoords) > 500 Then + Subs.log2DB("revisaFLP: 'No se esta actualizando, lo reiniciamos ...'") + StartService(Me) + todoBienFLP = False + End If + Catch + LogColor("If FLP.IsConnectctd and FLP.getLKL.IsInitialized --> "&LastException, Colors.Red) + End Try + End If + If todoBienFLP Then LogColor(" +++ +++ Sin errores en FLP", Colors.Green) + Catch + LogColor("If Tracker.FLP.IsInitialized --> "&LastException, Colors.Red) + End Try + ' revisar hora de lastKnownlocation y si es mayor de 10 minutos llamar StartFLP +End Sub + +'Compara la UUG (Ultima Ubicacion Guardada) con FLP.LastKnowLocation y si +'cumple con los requisitos de distancia y precision la guardamos en la BD. +Sub revisaUUG 'ignore + Try +' revisaFLP + If FLP.IsInitialized And FLP.IsConnected Then + Try + If FLP.GetLastKnownLocation.IsInitialized Then +' Dim x As Location = FLP.GetLastKnownLocation + Dim daa As Int = UUGCoords.DistanceTo(FLP.GetLastKnownLocation) 'Distancia de la UUG a la actual de Tracker.FLP.GetLastKnownLocation + If Starter.Logger Then LogColor($"**** UUC "${Subs.fechaKMT(FLP.GetLastKnownLocation.Time)}|$0.2{FLP.GetLastKnownLocation.Accuracy}|$0.8{FLP.GetLastKnownLocation.Latitude}|$0.8{FLP.GetLastKnownLocation.Longitude}|$0.2{FLP.GetLastKnownLocation.Speed}|"$, Colors.RGB(255,112,35)) + If daa > 40 And FLP.GetLastKnownLocation.Accuracy < 35 Then 'Si la distancia de la ubicacion anterior es mayor de XX y la precision es menor de XX, la guardamos ... + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO RUTA_GPS(fecha, lat, lon) VALUES (?,?,?)", Array As Object (Subs.fechaKMT(FLP.GetLastKnownLocation.Time),FLP.GetLastKnownLocation.Latitude,FLP.GetLastKnownLocation.Longitude)) + If Starter.Logger Then Log("++++ Distancia a anterior="&daa&"|"&"Precision="&FLP.GetLastKnownLocation.Accuracy) + End If + UUGCoords = FLP.GetLastKnownLocation + End If + Catch + LogColor("FLP.GetLastKnownLocation.IsInitialized --> "&LastException, Colors.Red) + End Try + Else + Log("StartFLP") + StartFLP + End If + Catch + LogColor("If FLP.IsInitialized --> "&LastException, Colors.Red) + End Try +End Sub \ No newline at end of file diff --git a/B4A/appUpdater.bas b/B4A/appUpdater.bas new file mode 100644 index 0000000..e955e1e --- /dev/null +++ b/B4A/appUpdater.bas @@ -0,0 +1,277 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Service +Version=10.2 +@EndOfDesignText@ +#Region Service Attributes + #StartAtBoot: False +#End Region + +'//////////////////////////////////////////////////////////////////////////////////////////// +'//// Servicio para revisar si hay actualizacion de aplicación, usa la +'//// actividad "updateAvailable" para mostrar mensajes. +'//// +'//// https://www.b4x.com/android/forum/threads/update-your-app-without-using-the-gplaystore.109720/#content +'//// +'//// En la actividad del la cual se va a llamar la revision de actualizacion +'//// hay que agregar los siguientes Subs: +'//// +' Sub boton_que_llama_revision_Click +' StartService(appUpdater) +' End Sub +' +' appUpdater - Mostramos el anuncio de que se esta descargando el nuevo apk +' Sub muestraProgreso +' ProgressDialogShow("Descargando actualización") +' End Sub +' +' appUpdater - Ocultamos el anuncio de que se esta descargando el nuevo apk +' Sub ocultaProgreso +' ProgressDialogHide +' End Sub +'//// +'//// Requiere las siguientes librerias: +'//// +'//// * JavaObject +'//// * OkHttpUtils2 +'//// * Phone +'//// * RuntimePermissions +'//// * appUpdating +'//// +'//// Requiere las siguientes lineas en el manifiesto: +'//// +' AddManifestText( +' ) +' AddApplicationText( +' +' +' +' ) +' CreateResource(xml, provider_paths, +' +' +' +' +' +' ) +' AddPermission(android.permission.REQUEST_INSTALL_PACKAGES) +' AddPermission(android.permission.INTERNET) +' AddPermission(android.permission.INSTALL_PACKAGES) +' AddPermission(android.permission.READ_EXTERNAL_STORAGE) +' AddPermission(android.permission.WRITE_EXTERNAL_STORAGE) +' AddPermission(android.permission.READ_PHONE_STATE) +' AddPermission(android.permission.WAKE_LOCK) +'//// +'//////////////////////////////////////////////////////////////////////////////////////////// + +Sub Process_Globals + 'These global variables will be declared once when the application starts. + 'These variables can be accessed from all modules. + + 'Aqui va la liga al archivo .ver en el servidor que contiene la información de la aplicacion + Public lnk As String = "https://keymon.lat/movil/guna/cedex.ver" +' Public lnk As String = "https://10.0.0.205/Movil/Guna/cedex.ver" + + '/// En el servidor se necesita un archivo de texto (.ver) que tenga los siguientes + '/// datos separados por un tabulador + '/// contents of ver file, each field is seperated by a tab + ' Field 0 = 2.226.19.09.19.01a <-- Esta es la version de la aplicación disponible + ' Field 1 = A new version of the MyAPP is available, Download and update now ? <-- Mensaje para cuando hay actualización + ' Field 2 = MyApp is up to date <--- Mensaje para cuando no hay actualización + ' Field 3 = http://www.mydomain.com/Public/myapp.apk <--- Liga al apk de la actualización + + Public nNewApp As Notification + Public nNewAppnID As Int = 16 + 'Para Download + Dim nativeMe As JavaObject + Dim n2 As Notification + Dim n2ID As Int = 16 + 'Para fileProvider + Public SharedFolder As String + Public UseFileProvider As Boolean + Private rp As RuntimePermissions + + Type mNewVersion(update As Boolean, nonewAPP As Boolean, notifyUser As Boolean, _ + version As String, newMsg As String, okMsg As String, appLink As String) + Public newApp As mNewVersion +End Sub + +Sub Service_Create + Log("appUpdater(), Service_Create") + newApp.Initialize + Service.AutomaticForegroundMode = Service.AUTOMATIC_FOREGROUND_NEVER + n2.Initialize + nativeMe.InitializeContext +End Sub + +Sub Service_Start (StartingIntent As Intent) + Log("appUpdater(), Service_Start") + CallSubDelayed2(Main, "muestraProgreso", "Buscando actualización") + fileProvider_init + Wait For (Download(Me, lnk)) JobDone (j As HttpJob) + If j.Success Then + Try + Dim app() As String = Regex.Split(Chr(9),j.GetString) + ' // Set the data + newApp.appLink = app(3) 'Liga a nueva app + newApp.newMsg = app(1) 'Texto de que hay actualizacion + newApp.okMsg = app(2) 'Texto de app al corriente + newApp.version = app(0) 'Version actual + + Log($"Application.VersionName=${Application.VersionName}, newApp=${newApp}"$) + + ' // App version check + If newApp.version = Application.VersionName Then + newApp.update = False + Log("No new app") + B4XPages.ShowPage("updateAvailable") + 'Se puede mandar tambien una notificacion avisando que NO hay actualizaciones +' CreateNotification2("Aplicacion al corriente","No hay actualizaciones disponibles","ic_file_download_white_24dp",Main,True,True,nNewApp,nNewAppnID) + End If + If newApp.version <> Application.VersionName Then + newApp.update = True + Log("New app true") + B4XPages.ShowPage("updateAvailable") + 'Se puede mandar tambien una notificacion avisando que hay actualizacion disponible +' CreateNotification2("Nueva aplicación disponible","Haga clic para descargar.","ic_file_download_white_24dp",updateAvailable,True,True,nNewApp,nNewAppnID) + End If + Catch + Log("appUpdater(), Job Failed, error " & LastException.Message) + End Try + Else + Log("appUpdater(), Job Failed " & lnk) + End If + j.Release +' StopService(Me) +End Sub + +Sub download_Start (StartingIntent As Intent) + download_newApk +End Sub + +Sub download_newApk +' CreateNotification("Descargando actualización", "Descargando apk", "ic_cloud_download_white_24dp", Main, False, True) + CallSubDelayed2(Main, "muestraProgreso", "Descargando actualización") + Dim job_newAPP As HttpJob + job_newAPP.Initialize("job_newAPP",Me) + job_newAPP.Download(newApp.appLink) + Wait for (job_newAPP) JobDone (job_newAPP As HttpJob) + If job_newAPP.Success = True Then + ' // Delete existing file + If File.Exists(SharedFolder,"newapp.apk") Then + File.Delete(SharedFolder,"newapp.apk") + End If + ' // Save new file + Dim outNewAPK As OutputStream = File.OpenOutput(SharedFolder,"newapp.apk", False) + File.Copy2(job_newAPP.GetInputStream, outNewAPK) + outNewAPK.Close + If Starter.Logger Then 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) +' Service.StopForeground(nNewAppnID) + StopService(Me) + CallSubDelayed(Main,"ocultaProgreso") +End Sub + +Sub download_Destroy + n2.Cancel(n2ID) + Service.StopForeground(n2ID) +End Sub + +Sub Download (Callback As Object, link As String) As HttpJob + Dim j As HttpJob + j.Initialize("", Callback) + j.Download(link) + Return j +End Sub + +Private Sub CreateNotification2(Title As String, Content As String, _ 'ignore + Icon As String, TargetActivity As Object, Sound As Boolean, _ + Vibrate As Boolean, pN As Notification,pNID As Int) As Notification + pN.Initialize2(pN.IMPORTANCE_HIGH) +' pN.Number = pNID +' pN.Light = False + pN.Vibrate = Vibrate + pN.Sound = Sound +' pN.OnGoingEvent = False + pN.Icon = Icon + pN.AutoCancel = True + pN.SetInfo(Title, Content, TargetActivity) + pN.Notify(pNID) + Return pN +End Sub + +Private Sub CreateNotification(Title As String, Content As String, Icon As String, TargetActivity As Object, Sound As Boolean, Vibrate As Boolean) As Notification 'ignore + n2.Initialize + n2.Light = False + n2.Vibrate = Vibrate + n2.Sound = Sound + n2.OnGoingEvent = True + n2.Icon = Icon + n2.SetInfo(Title, Content, TargetActivity) + n2.Notify(nNewAppnID) +End Sub + +Sub Service_Destroy + Log("appUpdater(), Service_Destroy") +End Sub + +Sub fileProvider_init + Dim p As Phone + If p.SdkVersion >= 24 Or File.ExternalWritable = False Then + UseFileProvider = True + SharedFolder = File.Combine(File.DirInternal, "shared") + If Not(File.IsDirectory(File.DirInternal,"shared")) Then + File.MakeDir("", SharedFolder) + End If + Else + UseFileProvider = False + SharedFolder = rp.GetSafeDirDefaultExternal("shared") + End If + Log($"Using FileProvider? ${UseFileProvider}"$) +End Sub + +'Returns the file uri. +Sub GetFileUri (FileName As String) As Object + Try + If Not(UseFileProvider) Then + Dim uri As JavaObject + Return uri.InitializeStatic("android.net.Uri").RunMethod("parse", Array("file://" & File.Combine(SharedFolder, FileName))) + End If + Dim f As JavaObject + f.InitializeNewInstance("java.io.File", Array(SharedFolder, FileName)) + Dim fp As JavaObject + Dim context As JavaObject + context.InitializeContext + fp.InitializeStatic("android.support.v4.content.FileProvider") + Return fp.RunMethod("getUriForFile", Array(context, Application.PackageName & ".provider", f)) + Catch + Log("FileProvider::GetFileUri - error - " & LastException.Message) + Return "" + End Try +End Sub + +'Replaces the intent Data field with the file uri. +'Resets the type field. Make sure to call Intent.SetType after calling this method +Sub SetFileUriAsIntentData (Intent As Intent, FileName As String) + Dim jo As JavaObject = Intent + jo.RunMethod("setData", Array(GetFileUri(FileName))) + Intent.Flags = Bit.Or(Intent.Flags, 1) 'FLAG_GRANT_READ_URI_PERMISSION +End Sub diff --git a/B4A/google-services.json b/B4A/google-services.json new file mode 100644 index 0000000..7edcc98 --- /dev/null +++ b/B4A/google-services.json @@ -0,0 +1,126 @@ +{ + "project_info": { + "project_number": "821860097209", + "project_id": "pusher-4c091", + "storage_bucket": "pusher-4c091.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:821860097209:android:4a9c1af4c93ba100f24f68", + "android_client_info": { + "package_name": "flp2.chv.com" + } + }, + "oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDS-_5lpLX5IiKYrG-0Et-KCKx1bwlY7R0" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:821860097209:android:7b6620b2a870f23cf24f68", + "android_client_info": { + "package_name": "gunav2.keymon.com.mx" + } + }, + "oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDS-_5lpLX5IiKYrG-0Et-KCKx1bwlY7R0" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:821860097209:android:7780f81ae43bf0f3f24f68", + "android_client_info": { + "package_name": "pusher.chv.com" + } + }, + "oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDS-_5lpLX5IiKYrG-0Et-KCKx1bwlY7R0" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:821860097209:android:7c55bc95da6d952df24f68", + "android_client_info": { + "package_name": "ths.keymon.com.mx" + } + }, + "oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDS-_5lpLX5IiKYrG-0Et-KCKx1bwlY7R0" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "821860097209-ef17t5620111ghub7l0tple62otbb56v.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/B4A/updateAvailable.bas b/B4A/updateAvailable.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/updateAvailable.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/gitpull.bat b/gitpull.bat new file mode 100644 index 0000000..d0aed61 --- /dev/null +++ b/gitpull.bat @@ -0,0 +1 @@ +git pull