From 4b886aebb6b255078312b8af4c45462f5b8b2524 Mon Sep 17 00:00:00 2001 From: Javier Date: Tue, 4 Nov 2025 10:27:49 -0600 Subject: [PATCH] ... --- B4A/B4XMainPage.bas | 11 +- B4A/C_Cliente.bas | 128 ++++++++- B4A/C_NuevoCliente.bas | 518 +++++++++++++++++++++++++++++++++++-- B4A/C_Principal.bas | 151 ++++++++++- B4A/Files/cliente.bal | Bin 37860 -> 41791 bytes B4A/Files/nuevocliente.bal | Bin 4443 -> 12367 bytes B4A/Files/principal.bal | Bin 50878 -> 52030 bytes B4A/INTMEX.b4a | 2 +- B4A/INTMEX.b4a.meta | 4 +- B4A/Subs.bas | 14 + B4A/Tracker.bas | 296 ++++++++++++++++++++- 11 files changed, 1075 insertions(+), 49 deletions(-) diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index 16b2fe6..b832e1f 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -156,11 +156,16 @@ Private Sub B4XPage_Created (Root1 As B4XView) ' Log(ruta) skmt.Initialize(ruta,"kmt.db", True) Subs.guardaAppInfo(skmt) + + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_GIRO(GIRO TEXT)") + + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CLIENTES_NUEVOS(CN_ID TEXT, CN_FECHA TEXT, CN_USER TEXT, CN_LAT TEXT, CN_LON TEXT, CN_NOMBRE TEXT, CN_DIRECCION TEXT, CN_FOTO TEXT, CN_ALMACEN TEXT, CN_RUTA TEXT,CN_GIRO TEXT)") 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 CAT_GUNAPROD2 (CAT_GP_INICIATIVA TEXT, CAT_GP_TIPOPROD TEXT, CAT_GP_DEV TEXT, CAT_GP_ALMACEN NUMERIC, CAT_GP_ID TEXT, CAT_GP_NOMBRE TEXT, CAT_GP_IMP1 TEXT, CAT_GP_IMP2 TEXT, CAT_GP_PRECIO TEXT, CAT_GP_CLASIF TEXT, CAT_GP_STS TEXT, CAT_GP_TIPO TEXT, CAT_GP_SUBTIPO TEXT, CAT_GP_IMG BLOB)") 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)") + Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS TELEFONO(TEL TEXT, CLIENTE 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)") @@ -178,7 +183,11 @@ Private Sub B4XPage_Created (Root1 As B4XView) Subs.agregaColumna("PEDIDO", "PE_ENVIO_OK", "INT") Subs.agregaColumna("NOVENTA", "NV_ENVIO_OK", "INT") Subs.agregaColumna("PEDIDO", "PE_TICKET", "INT") - + Subs.agregaColumna("CLIENTES_NUEVOS", "CN_COLONIA", "TEXT") + Subs.agregaColumna("CLIENTES_NUEVOS", "CN_TELEFONO", "TEXT") + Subs.agregaColumna("CLIENTES_NUEVOS", "CN_CP", "TEXT") + Subs.agregaColumna("CLIENTES_NUEVOS", "CN_SOLICITA", "TEXT") + Subs.agregaColumna("CLIENTES_NUEVOS", "CN_ENVIO", "TEXT") Subs.agregaColumna("CAT_GUNAPROD2", "CAT_GP_PRECIO8", "TEXT DEFAULT '0'") Subs.agregaColumna("CAT_GUNAPROD2", "CAT_GP_PRECIO9", "TEXT DEFAULT '0'") Subs.agregaColumna("CAT_GUNAPROD2", "CAT_GP_PRECIO10", "TEXT DEFAULT '0'") diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas index c2a801b..3ec765d 100644 --- a/B4A/C_Cliente.bas +++ b/B4A/C_Cliente.bas @@ -163,6 +163,11 @@ Sub Class_Globals Private lv_pedidoExistente As ListView Private b_cerrar As Button Private l_pedidoExistente As Label + Private l_telefono As Label + Private p_telefono As Panel + Private et_telefono As EditText + Private b_canceltelefono As Button + Private b_aceptelefono As Button End Sub 'You can add more parameters here. @@ -285,6 +290,7 @@ Sub B4XPage_Appear l_atiende.Text = c.GetString("CAT_CL_ATIENDE1") l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2") TELEFONO = c.GetString("CAT_CL_TELEFONO") + l_telefono.Text = c.GetString("CAT_CL_TELEFONO") l_total.Text = "$" & NumberFormat2(s.GetString("TOTAL_CLIE"), 1, 2, 2, True) total_cliente = s.GetString("TOTAL_CLIE") Private factura As String = 0 @@ -1211,23 +1217,66 @@ Sub mandaPendientes ' ab.Close 'CLIENTES NUEVOS - Dim bb As Cursor = B4XPages.MainPage.skmt.ExecQuery($"SELECT * from CLIENTE_NUEVO where CN_enviado is null"$) - Dim cb As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT ID_ALMACEN from CAT_ALMACEN") - cb.Position = 0 - If bb.RowCount > 0 Then - For i=0 To bb.RowCount -1 - bb.Position = i +' Dim bb As Cursor = B4XPages.MainPage.skmt.ExecQuery($"SELECT * from CLIENTE_NUEVO where CN_enviado is null"$) +' Dim cb As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT ID_ALMACEN from CAT_ALMACEN") +' cb.Position = 0 +' If bb.RowCount > 0 Then +' For i=0 To bb.RowCount -1 +' bb.Position = i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_cliente_INTMEX" +' cmd.Parameters = Array As Object( bb.GetString("CN_ID_CLIENTE"), bb.GetString("CN_NOMBRE"),B4XPages.MainPage.principal.l_ruta.Text,cb.GetString("ID_ALMACEN")) +' reqManager.ExecuteCommand(cmd , $"insert_cliente_${bb.GetString("CN_ID_CLIENTE")}"$) +' Log($"insert_cliente_${bb.GetString("CN_ID_CLIENTE")}"$) +' Next +' Log("si lo hice") +' End If +' bb.Close +' cb.Close + + + c=Starter.skmt.ExecQuery("SELECT CN_ID, CN_FECHA , CN_USER, CN_LAT, CN_LON, CN_NOMBRE, CN_DIRECCION, CN_FOTO, CN_ALMACEN, CN_RUTA, CN_GIRO, CN_SOLICITA, CN_COLONIA, CN_TELEFONO, CN_CP FROM CLIENTES_NUEVOS") + If c.RowCount>0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Dim dia As Int = DateTime.GetDayOfWeek(DateTime.Now) + If dia = 2 Then + Dim dialetra As String = "LUNES" + Else If dia = 3 Then + Dim dialetra As String = "MARTES" + Else If dia = 4 Then + Dim dialetra As String = "MIERCOLES" + Else If dia = 5 Then + Dim dialetra As String = "JUEVES" + Else If dia = 6 Then + Dim dialetra As String = "VIERNES" + Else If dia = 7 Then + Dim dialetra As String = "SABADO" + End If Dim cmd As DBCommand cmd.Initialize - cmd.Name = "insert_cliente_INTMEX" - cmd.Parameters = Array As Object( bb.GetString("CN_ID_CLIENTE"), bb.GetString("CN_NOMBRE"),B4XPages.MainPage.principal.l_ruta.Text,cb.GetString("ID_ALMACEN")) - reqManager.ExecuteCommand(cmd , $"insert_cliente_${bb.GetString("CN_ID_CLIENTE")}"$) - Log($"insert_cliente_${bb.GetString("CN_ID_CLIENTE")}"$) + cmd.Name = "insert_cliente_INTMEX2" + Log(c.GetString("CN_ID")&" ,"& c.GetString("CN_FECHA")&" ,"& c.GetString("CN_USER")&" ,"& c.GetString("CN_LAT")&" ,"& c.GetString("CN_LON")&" ,"& c.GetString("CN_NOMBRE")&" ,"& c.GetString("CN_DIRECCION")&" ,"&ALMACEN& c.GetString("CN_RUTA")&" ,"& "En espera"&c.GetString("CN_GIRO")&" ,"&dialetra& c.GetString("CN_SOLICITA")&" ,"& c.GetString("CN_COLONIA")&" ,"& c.GetString("CN_TELEFONO")) + cmd.Parameters = Array As Object(c.GetString("CN_ID"), c.GetString("CN_NOMBRE"), c.GetString("CN_RUTA"),ALMACEN, c.GetString("CN_LAT"), c.GetString("CN_LON"), "En espera", c.GetString("CN_FECHA"), c.GetString("CN_USER"), c.GetString("CN_DIRECCION"), c.GetString("CN_GIRO"),dialetra, c.GetString("CN_TELEFONO"), c.GetString("CN_SOLICITA"), c.GetString("CN_COLONIA"), c.GetString("CN_CP")) + reqManager.ExecuteCommand(cmd , $"insert_cliente_${C.GetString("CN_ID")}"$) Next - Log("si lo hice") End If - bb.Close - cb.Close + c.Close + + ' Cambio atiende + c=B4XPages.MainPage.skmt.ExecQuery("Select CAT_CL_TELEFONO, CAT_CL_CODIGO from kmt_info where CAT_CL_CODIGO IN (SELECT CLIENTE FROM TELEFONO)") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "update_atiende_INTMEX" + cmd.Parameters = Array As Object(C.GetString("CAT_CL_TELEFONO"),C.GetString("CAT_CL_CODIGO"),ALMACEN,Subs.traeRuta2(C.GetString("CAT_CL_CODIGO"))) + reqManager.ExecuteCommand(cmd , "up_coordenadas") + Next + End If + c.Close '' BANDERA FACTURA (Pendientes) '' c=B4XPages.MainPage.skmt.ExecQuery("SELECT PC_FACTURA, PC_CLIENTE FROM pedido_cliente where PC_CLIENTE IN (Select CUENTA from cuentaa)") @@ -1405,7 +1454,7 @@ Sub JobDone(Job As HttpJob) Log(resultado.Tag & ": " & k & ": " & records(resultado.Columns.Get(k))) Next Next - B4XPages.MainPage.skmt.ExecNonQuery($"UPDATE CLIENTE_NUEVO set CN_enviado = 1 where CN_ID_CLIENTE = '${cliente}'"$) + B4XPages.MainPage.skmt.ExecNonQuery($"UPDATE CLIENTES_NUEVOS set CN_ENVIO = 1 where CN_ID = '${cliente}'"$) End If End If @@ -1643,4 +1692,55 @@ End Sub Private Sub b_pedidoExistente_Click p_pedidoExistente.Visible = True +End Sub + +Private Sub l_telefono_LongClick + p_telefono.Height = Root.Height + p_telefono.Width = Root.Width + p_telefono.Visible = True +End Sub + +Private Sub b_aceptelefono_Click + If et_telefono.Text <> "" Then + + Private coord As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT * from TELEFONO where CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + + If coord.RowCount = 0 Then + skmt.ExecNonQuery2("INSERT INTO TELEFONO(TEL,CLIENTE) VALUES (?,?)", Array As String (et_telefono.Text,Subs.traeCliente)) + B4XPages.MainPage.skmt.ExecNonQuery($"UPDATE kmt_info set CAT_CL_TELEFONO = '${et_telefono.Text}' where CAT_CL_CODIGO In (select cuenta from cuentaa)"$) + MsgboxAsync("Datos actualizados.","Atención") + l_telefono.Text = et_telefono.Text + ime.HideKeyboard + p_telefono.Visible = False + et_telefono.Text = "" + Else + skmt.ExecNonQuery2("UPDATE TELEFONO SET TEL = ? where CLIENTE IN (SELECT CUENTA FROM CUENTAA)", Array As String (et_telefono.Text)) + B4XPages.MainPage.skmt.ExecNonQuery($"UPDATE kmt_info set CAT_CL_TELEFONO = '${et_telefono.Text}' where CAT_CL_CODIGO In (select cuenta from cuentaa)"$) + MsgboxAsync("Datos actualizados.","Atención") + l_telefono.Text = et_telefono.Text + ime.HideKeyboard + p_telefono.Visible = False + et_telefono.Text = "" + End If + + + Else + MsgboxAsync("Por favor captura un telefono valido.","Atención") + End If +End Sub + +Private Sub b_canceltelefono_Click + p_telefono.Visible = False + et_telefono.Text = "" + ime.HideKeyboard +End Sub + +Private Sub p_telefono_Click + +End Sub + +Private Sub Label16_LongClick + p_telefono.Height = Root.Height + p_telefono.Width = Root.Width + p_telefono.Visible = True End Sub \ No newline at end of file diff --git a/B4A/C_NuevoCliente.bas b/B4A/C_NuevoCliente.bas index b4d1a5a..51e7c3d 100644 --- a/B4A/C_NuevoCliente.bas +++ b/B4A/C_NuevoCliente.bas @@ -4,6 +4,116 @@ ModulesStructureVersion=1 Type=Class Version=11.5 @EndOfDesignText@ +'Sub Class_Globals +' Private Root As B4XView 'ignore +' Private xui As XUI 'ignore +' +' Dim g As GPS +' Dim ruta As String +' Dim c As Cursor +' +' Dim CANCELA As Button +' Dim GUARDA 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 E_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 +'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) +'End Sub +' +''You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. +' +'Sub B4XPage_Appear +' E_NOMBRE.Text = "" +' If Not(Starter.gps.GPSEnabled) Then +' ToastMessageShow("Es necesario tener el GPS encendido", True) +' StartActivity(Starter.gps.LocationSettingsIntent) +' End If +' GUARDA.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 +' GUARDA.Visible = True 'Si hay ubicaccion, mostramos el boton de guardar. +' l_sinUbicacion.Visible = False +' End If +'End Sub +' +'Sub GPS_LocationChanged (Location1 As Location) +' If B4XPages.MainPage.lat_gps <> "0.0" Then +' GUARDA.Visible = True 'Si hay ubicaccion, mostramos el boton de guardar. +' l_sinUbicacion.Visible = False +' End If +'End Sub +' +'Sub CANCELA_Click +' B4XPages.ShowPage("Principal") +'End Sub +' +'Sub GUARDA_Click +' If E_NOMBRE.Text = "" Then +' ToastMessageShow("Se tiene que nombrar la tienda para continuar" , True) +' Else +' DateTime.DateFormat = "MM/dd/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= "N" & sTime & no_ruta +' Log("++ ++ no_cliente = "&no_cliente) +' c.Close +' 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) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,0,0) ",Array As Object (no_cliente,no_ruta, E_NOMBRE.Text,"null","null","null","null","null","null","null","null","null","null","null","null","null",B4XPages.MainPage.lon_gps,B4XPages.MainPage.lat_gps)) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (no_cliente)) +' B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(no_cliente)) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CLIENTE_NUEVO(CN_ID_CLIENTE, CN_NOMBRE) VALUES (?,?)", Array As Object(no_cliente, E_NOMBRE.Text)) +' B4XPages.ShowPage("Cliente") +' End If +'End Sub +' +' +'Private Sub p_nuevoCliente_Click +' +'End Sub + Sub Class_Globals Private Root As B4XView 'ignore Private xui As XUI 'ignore @@ -17,9 +127,10 @@ Sub Class_Globals Dim cuenta As String Dim usuario As String Dim sDate,sTime As String + Dim sDate2,sTime2 As String Dim no_cliente As String Dim no_ruta As String - + Dim lista_punta As List Dim r_4 As RadioButton Dim E_NOMBRE As EditText Dim tgl As Toggle @@ -27,6 +138,28 @@ Sub Class_Globals 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 = "0" + Dim ALMACEN As String + Private et_direccion As EditText + Private Label2 As Label + Dim lat As Double = 0 + Dim lon As Double = 0 + Private b_ubicacion As Label + Private Label3 As Label + Private cb_giro As B4XComboBox + Dim giros As String + Private L_Atiende As Label + Private ET_Atiende As EditText + Private Label5 As Label + Private et_colonia As EditText + Private et_telefono As EditText + Private et_cp As EditText + Private Label6 As Label End Sub 'You can add more parameters here. @@ -36,6 +169,7 @@ End Sub 'This event will be called once, before the page becomes visible. Private Sub B4XPage_Created (Root1 As B4XView) +' B4XPages.SetTitle(Me, $"${Subs.capitalizar(B4XPages.GetPageId(Me))} - ${Application.VersionName}"$) Root = Root1 'load the layout to Root Root.LoadLayout("nuevocliente") @@ -44,12 +178,43 @@ Private Sub B4XPage_Created (Root1 As B4XView) 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 +' Starter.rp.CheckAndRequest(Starter.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 +' Log("inicializamos Camara") +' Else +' ToastMessageShow("Sin permisos de camara!!!", True) +' End If + Starter.rp.CheckAndRequest(Starter.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!!!", True) + End If + + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_READ_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 lectura!!!", True) + End If End Sub 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. Sub B4XPage_Appear + et_direccion.Text = "" E_NOMBRE.Text = "" + ET_Atiende.Text = "" + et_colonia.Text = "" + et_telefono.Text = "" + et_cp.Text = "" If Not(Starter.gps.GPSEnabled) Then ToastMessageShow("Es necesario tener el GPS encendido", True) StartActivity(Starter.gps.LocationSettingsIntent) @@ -59,57 +224,354 @@ Sub B4XPage_Appear p_nuevoCliente.Height = Root.Height p_nuevoCliente.Width = Root.Width Subs.centraEtiqueta(Label1, Root.Width) + Subs.centraEtiqueta(Label5, Root.Width) + Subs.centraEtiqueta(Label6, Root.Width) + Subs.centraEtiqueta(Label2, Root.Width) + Subs.centraEtiqueta(Label3, Root.Width) Subs.centraEtiqueta(l_sinUbicacion, Root.Width) + Subs.centraEtiqueta(b_ubicacion, Root.Width) Subs.centraPanel(p_botones, Root.Width) E_NOMBRE.Left = Round(Root.Width/2)-(E_NOMBRE.Width/2) + et_cp.Left = Round(Root.Width/2)-(E_NOMBRE.Width/2) + et_colonia.Left = Round(Root.Width/2)-(et_colonia.Width/2) + et_direccion.Left = Round(Root.Width/2)-(et_direccion.Width/2) If B4XPages.MainPage.lat_gps <> "0.0" Then GUARDA.Visible = True 'Si hay ubicaccion, mostramos el boton de guardar. - l_sinUbicacion.Visible = False + l_sinUbicacion.Visible = True End If + + CallSubDelayed(Tracker, "Track") + CallSubDelayed(Tracker, "StartFLPSmall") + 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 + +' lista_punta.Initialize +' Dim pol As Cursor = Starter.skmt.ExecQuery("SELECT LAT, LONG FROM POLIGONO") +' If pol.RowCount > 0 Then +' +' For poli = 0 To pol.RowCount -1 +' pol.Position = poli +' Dim coords As LatLng +' coords.Initialize(pol.GetString("LAT"), pol.GetString("LONG")) +' lista_punta.Add(coords) +' Next +' End If + + If Not(Starter.GPS.GPSEnabled) Then + ToastMessageShow("Debe Activar el GPS del Equipo.", True) + StartActivity(Starter.GPS.LocationSettingsIntent) + Else + Starter.GPS.Start(0, 0) +' If Starter.ubicacionActual.Latitude <> 0 Then GPS_LocationChanged(Starter.ubicacionActual) + End If + CallSubDelayed(Tracker, "StartFLPSmall") + + c = Starter.skmt.ExecQuery("SELECT GIRO FROM CAT_GIRO order by 1") + Dim Items As List + Items.Initialize + Items.Add("SELECCIONA UNA OPCIÓN") + If c.RowCount > 0 Then + For i = 0 To c.RowCount-1 + c.Position = i + Items.Add(c.GetString("GIRO")) + Next + cb_giro.SetItems(Items) + End If + giros = "SELECCIONA UNA OPCIÓN" + c.Close End Sub Sub GPS_LocationChanged (Location1 As Location) If B4XPages.MainPage.lat_gps <> "0.0" Then GUARDA.Visible = True 'Si hay ubicaccion, mostramos el boton de guardar. - l_sinUbicacion.Visible = False + l_sinUbicacion.Visible = True + lat = Location1.Latitude + lon = Location1.Longitude + l_sinUbicacion.Text = ("Latitud: " & lat & ", Longotud: "& lon) + End If + + b_ubicacion.TextSize = 13 + b_ubicacion.Text = $"Precisión GPS $1.0{Location1.Accuracy} m"$ + If Location1.Accuracy > 200 Then + b_ubicacion.TextColor = Colors.Red + b_ubicacion.TextSize = 16 + b_ubicacion.Text = $"Mala señal $1.0{Location1.Accuracy} m"$ End If End Sub +'Sub InicializarGPSPreciso +' Dim gps1 As GPS +' gps1.Initialize("GPS") +' +' ' Usar Criteria para alta precisión +' Dim cr As Criteria +' cr.Accuracy = cr.ACCURACY_FINE +' cr.PowerRequirement = cr.POWER_HIGH +' +' gps1.Start(0, 0) ' Máxima frecuencia de actualización +'End Sub + Sub CANCELA_Click B4XPages.ShowPage("Principal") + CallSubDelayed(Tracker, "StartFLP") +End Sub + +Sub PointInPolygon(point As LatLng, polygon As List) As Boolean + Dim x As Double = point.Longitude + Dim y As Double = point.Latitude + + Dim inside As Boolean = False + For i = 0 To polygon.Size - 1 + Dim j As Int = (i + 1) Mod polygon.Size + Dim p1_1 As LatLng = polygon.Get(i) + Dim p2_1 As LatLng = polygon.Get(j) + + Dim xi As Double = p1_1.Longitude + Dim yi As Double = p1_1.Latitude + Dim xj As Double = p2_1.Longitude + Dim yj As Double = p2_1.Latitude + + Dim intersect As Boolean = ((yi > y) <> (yj > y)) And (x < (xj - xi) * (y - yi) / (yj - yi) + xi) + If intersect Then + inside = Not(inside) + End If + Next + + Return inside + + End Sub Sub GUARDA_Click - If E_NOMBRE.Text = "" Then - ToastMessageShow("Se tiene que nombrar la tienda para continuar" , True) + +' Dim mPoint As LatLng +' mPoint.Initialize(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps) +' + '' If lista_punta.Size > 0 Then + '' Dim dentro As Boolean = PointInPolygon(mPoint, lista_punta) + '' + '' If dentro Then +' ToastMessageShow("El punto está DENTRO del polígono", True) + B4XPages.ShowPage("NuevoCliente") + + + ' Verifica si el nombre de la tienda está vacío + If E_NOMBRE.Text = "" Then + MsgboxAsync("Por favor captura el nombre de la Tienda","Atención") + ' Verifica si la dirección tiene más de 3 caracteres + Else If et_direccion.Text.Length > 3 Then + ' Verifica si la latitud es diferente de 0 + If lat <> 0 Then + ' Verifica si el giro del cliente está seleccionado + If giros <> "SELECCIONA UNA OPCIÓN" Or cb_giro.SelectedItem <> "SELECCIONA UNA OPCIÓN" Then + ' Verifica si el encargado que atiende el negocio está capturado + If ET_Atiende.Text <> "" Then + If et_telefono.Text <> "" Then + If et_colonia.Text <> "" Then + If et_cp.Text <> "" Then + + DateTime.DateFormat = "MM/dd/yyyy" + DateTime.Timeformat = "HHmmss" + sDate = DateTime.Date(DateTime.Now) + sTime = DateTime.Time(DateTime.Now) + Log($" //////////// Date: ${sDate} - Time: ${sTime} ////////////////"$) + ' Aquí creamos manualmente 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 + Dim Fechacliente() As String = Regex.Split("/",sDate) + Log("////////////// sTime: "&sTime&" ////////////////") + c = Starter.skmt.ExecQuery("select CAT_CL_RUTA FROM kmt_info") + c.Position = 0 + no_ruta = c.GetString("CAT_CL_RUTA") + no_cliente = "N" & sTime & no_ruta + Log("++ ++ no_cliente = "&no_cliente) + c.Close + + Starter.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (no_cliente)) + Starter.skmt.ExecNonQuery("delete from CUENTAA") + Starter.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(no_cliente)) + c = Starter.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + If c.RowCount > 0 Then + c.Position = 0 + ALMACEN = c.GetString("ID_ALMACEN") + End If + c.Close + c = Starter.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + ' Starter.skmt.ExecNonQuery2("INSERT INTO HIST_FOTO_CLIENTE(CODIGO, ALMACEN, RUTA) VALUES(?,?,?)", Array As Object(no_cliente, ALMACEN, no_ruta)) + ' Starter.skmt.ExecNonQuery2("INSERT INTO NOVENTA (NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_LAT,NV_LON,NV_NOMBRE,NV_DIRECCION) VALUES(?,?,?,?,?,?,?,?) ", Array As Object (no_cliente,sDate & sTime, usuario, "NUEVO CLIENTE", lat, lon, E_NOMBRE.Text,et_direccion.Text)) + + DateTime.DateFormat = "dd/MM/yyyy" + DateTime.Timeformat = "HH:mm:ss" + sDate2 = DateTime.Date(DateTime.Now) + sTime2 = DateTime.Time(DateTime.Now) + Log("AQUI") + Starter.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, gestion, CAT_CL_GIRO,CAT_CL_CP) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,0,0,?,?) ", Array As Object (no_cliente,no_ruta, E_NOMBRE.Text,"null","null","null","null","null","null","null","null","null","null","null","null","null",B4XPages.MainPage.lon_gps,B4XPages.MainPage.lat_gps, cb_giro.SelectedItem,et_cp.Text)) + Starter.skmt.ExecNonQuery2("INSERT INTO CLIENTES_NUEVOS(CN_ID, CN_FECHA, CN_USER, CN_LAT, CN_LON, CN_NOMBRE, CN_DIRECCION, CN_ALMACEN, CN_RUTA, CN_GIRO, CN_SOLICITA,CN_COLONIA, CN_TELEFONO,CN_CP) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As String(no_cliente, sDate2 &" "&sTime2, usuario, lat, lon, E_NOMBRE.Text, et_direccion.Text, ALMACEN, no_ruta, cb_giro.SelectedItem, ET_Atiende.Text,et_colonia.Text,et_telefono.Text,et_cp.Text)) + ' fototomada = "0" + B4XPages.ShowPage("Cliente") + CallSubDelayed(Tracker, "StartFLP") + Else + MsgboxAsync("Por favor, debe capturar el C.P. el negocio.","Atención") + End If + Else + MsgboxAsync("Por favor, debe capturar la colonia el negocio.","Atención") + End If + Else + MsgboxAsync("Por favor, debe capturar el telefono.","Atención") + End If + Else + ' Mensaje de advertencia si ET_Atiende.Text está vacío + MsgboxAsync("Por favor, debe capturar al encargado que atiende el negocio.","Atención") + End If + Else + MsgboxAsync("Por favor captura el giro del cliente","Atención") + End If + Else + MsgboxAsync("Por favor revisa que tengas señal GPS","Atención") + End If Else - DateTime.DateFormat = "MM/dd/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= "N" & sTime & no_ruta - Log("++ ++ no_cliente = "&no_cliente) - c.Close - 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) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,0,0) ",Array As Object (no_cliente,no_ruta, E_NOMBRE.Text,"null","null","null","null","null","null","null","null","null","null","null","null","null",B4XPages.MainPage.lon_gps,B4XPages.MainPage.lat_gps)) - B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (no_cliente)) - B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") - B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(no_cliente)) - B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CLIENTE_NUEVO(CN_ID_CLIENTE, CN_NOMBRE) VALUES (?,?)", Array As Object(no_cliente, E_NOMBRE.Text)) - B4XPages.ShowPage("Cliente") + MsgboxAsync("Por favor captura la dirección del cliente","Atención") End If + +' Else +' ToastMessageShow("El punto está FUERA del polígono", True) +' End If +' End If End Sub + + Private Sub p_nuevoCliente_Click +End Sub + +'Private Sub b_foto_inci_Click +' camEx2.TakePicture +' p_camara.Visible = False +'' StopCamera2 +'End Sub +' +'Private Sub InitializeCamera2 +' Starter.rp.CheckAndRequest(Starter.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 +' Log("inicializamos Camara") +' Else +' ToastMessageShow("Sin permisos de camara!!!", True) +' End If +' Starter.rp.CheckAndRequest(Starter.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!!!", True) +' End If +' +' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_READ_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 lectura!!!", True) +' End If +'End Sub +' +'Sub Camera1_Ready (Success As Boolean) +' Log("Camara ready") +' If Success Then +' camEx2.SetJpegQuality(90) +' camEx2.SetContinuousAutoFocus +' camEx2.CommitParameters +' camEx2.StartPreview +' Log(camEx2.GetPreviewSize) +' Else +' ToastMessageShow("Cannot open camera.", True) +' Log("Cannot open camera") +' End If +'End Sub +' +'Sub Camera1_PictureTaken (Data()As Byte) +' 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" +' Log("creado en promotoria " & Dirp & Dir & Dir2) +' Catch +' Dir = "" +' Log("creado en raiz") +' End Try +' +' camEx2.SavePictureToFile(Data, Dirp&Dir, filename) +' camEx2.StartPreview 'restart preview +' ToastMessageShow("Picture saved." & CRLF & "File size: " & File.Size(Dir, filename) & Dir &"," & filename, True) +' Log("Picture saved." & CRLF & "File size: " & File.Size(Dir, filename) & Dir &"," & filename) +' p_camara.Visible = False +' StopCamera2 +' +'End Sub +' +'Private Sub StopCamera2 +'' Capturing = False +' If camEx2.IsInitialized Then +' camEx2.Release +' End If +'End Sub +' +' +'Private Sub B_FOTO_Click +' DateTime.DateFormat="ddMMyyyyHHmmss" +' InitializeCamera2 +' Subs.panelVisible(p_camara, 0, 0) +' fototomada = DateTime.Now & "_cliente.jpg" +'End Sub + +Private Sub cb_giro_SelectedIndexChanged (Index As Int) + giros = cb_giro.SelectedItem +End Sub + +Private Sub et_cp_TextChanged (Old As String, New As String) + If New.Length > 5 Then + et_cp.Text = Old + Else If New.Length > 1 And New.Length <= 5 Then + If New.Contains(Chr(10)) Or New.Contains(Chr(13)) Or New.Contains(Chr(34)) Then + et_cp.Text = Old + End If + End If + +End Sub + +Private Sub et_telefono_TextChanged (Old As String, New As String) + If New.Length > 10 Then + et_telefono.Text = Old + Else If New.Length > 1 And New.Length <= 10 Then + If New.Contains(Chr(10)) Or New.Contains(Chr(13)) Or New.Contains(Chr(34)) Then + et_telefono.Text = Old + End If + End If + End Sub \ No newline at end of file diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index c22455d..c96e82a 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -222,6 +222,8 @@ Sub Class_Globals Private p_prod As Panel Private b_regreso As Button Private b_productos As Button + Private B_PROM As Button + Private B_PROD As Button End Sub 'You can add more parameters here. @@ -746,6 +748,34 @@ Sub Subir_Click Next End If c.Close + + c=Starter.skmt.ExecQuery("SELECT CN_ID, CN_FECHA , CN_USER, CN_LAT, CN_LON, CN_NOMBRE, CN_DIRECCION, CN_FOTO, CN_ALMACEN, CN_RUTA, CN_GIRO, CN_SOLICITA, CN_COLONIA, CN_TELEFONO, CN_CP FROM CLIENTES_NUEVOS") + If c.RowCount>0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Dim dia As Int = DateTime.GetDayOfWeek(DateTime.Now) + If dia = 2 Then + Dim dialetra As String = "LUNES" + Else If dia = 3 Then + Dim dialetra As String = "MARTES" + Else If dia = 4 Then + Dim dialetra As String = "MIERCOLES" + Else If dia = 5 Then + Dim dialetra As String = "JUEVES" + Else If dia = 6 Then + Dim dialetra As String = "VIERNES" + Else If dia = 7 Then + Dim dialetra As String = "SABADO" + End If + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_cliente_INTMEX2" + Log(c.GetString("CN_ID")&" ,"& c.GetString("CN_FECHA")&" ,"& c.GetString("CN_USER")&" ,"& c.GetString("CN_LAT")&" ,"& c.GetString("CN_LON")&" ,"& c.GetString("CN_NOMBRE")&" ,"& c.GetString("CN_DIRECCION")&" ,"&ALMACEN& c.GetString("CN_RUTA")&" ,"& "En espera"&c.GetString("CN_GIRO")&" ,"&dialetra& c.GetString("CN_SOLICITA")&" ,"& c.GetString("CN_COLONIA")&" ,"& c.GetString("CN_TELEFONO")) + cmd.Parameters = Array As Object(c.GetString("CN_ID"), c.GetString("CN_NOMBRE"), c.GetString("CN_RUTA"),ALMACEN, c.GetString("CN_LAT"), c.GetString("CN_LON"), "En espera", c.GetString("CN_FECHA"), c.GetString("CN_USER"), c.GetString("CN_DIRECCION"), c.GetString("CN_GIRO"),dialetra, c.GetString("CN_TELEFONO"), c.GetString("CN_SOLICITA"), c.GetString("CN_COLONIA"), c.GetString("CN_CP")) + reqManager.ExecuteCommand(cmd , "inst_clientesn") + Next + End If + c.Close ' LO DEL LIKE c=B4XPages.MainPage.skmt.ExecQuery("Select HFCLIENTE, HFALIAS,HFRUTA,HFALMACEN from HIST_FACE") @@ -948,6 +978,12 @@ Sub cargar_Click cmd.Name = "select_cat_clientes_INTMEX" cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) reqManager.ExecuteQuery(cmd , 0, "kmt_datos") + + + '' cambiar + cmd.Initialize + cmd.Name = "select_cat_GIRO_INTMEX" + reqManager.ExecuteQuery(cmd , 0, "giro") cmd.Initialize cmd.Name = "select_cat_clientes_todos_INTMEX" @@ -1205,9 +1241,40 @@ Sub JobDone(Job As HttpJob) B4XPage_Appear img2.Visible=False EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "giro" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim giro As String = records(RESULT.Columns.Get("CAT_GR_DESC")) + + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_GIRO(GIRO) VALUES (?)", Array As Object (giro)) + Next + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + End If + Listo3 =1 + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If End If - End If If Job.JobName = "DBRequest" Then Dim resultado As DBResult = reqManager.HandleJob(Job) @@ -2087,6 +2154,7 @@ Sub e_ruta_EnterPressed 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 = "" + Starter.skmt.ExecNonQuery("delete from CAT_GIRO") B4XPages.MainPage.skmt.ExecNonQuery("delete from CLIENTE_NUEVO") B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente") B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido") @@ -2739,6 +2807,14 @@ Sub checaPedido If c.RowCount > 0 Then Starter.skmt.ExecNonQuery("Update kmt_info set gestion = 3 WHERE CAT_CL_CODIGO IN (SELECT NV_CLIENTE FROM NOVENTA)") End If + + Private coord As Cursor = Starter.skmt.ExecQuery("SELECT * FROM TELEFONO") + If coord.RowCount > 0 Then + For cor = 0 To coord.RowCount -1 + coord.Position = cor + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE kmt_info set CAT_CL_TELEFONO = ? where CAT_CL_CODIGO = ?", Array As Object(coord.GetString("TEL"),coord.GetString("CLIENTE"))) + Next + End If End Sub @@ -2756,7 +2832,8 @@ Private Sub b_productos_Click p_prod.BringToFront - Private c As Cursor = Starter.skmt.ExecQuery("select CAT_GP_NOMBRE AS HVD_PRONOMBRE, IFNULL(CAT_GP_PRECIO, 0) AS HVD_RECHAZOCANT from CAT_GUNAPROD order by CAT_GP_NOMBRE asc") +' Private c As Cursor = Starter.skmt.ExecQuery("select CAT_GP_NOMBRE AS HVD_PRONOMBRE, IFNULL(CAT_GP_PRECIO, 0) AS HVD_RECHAZOCANT from CAT_GUNAPROD order by CAT_GP_NOMBRE asc") + Private c As Cursor = Starter.skmt.ExecQuery("select CAT_GP_NOMBRE AS HVD_PRONOMBRE, IFNULL(CAT_GP_PRECIO, 0) AS HVD_RECHAZOCANT from CAT_GUNAPROD WHERE CAT_GP_CLASIF <> 'PROMOS' order by CAT_GP_NOMBRE asc") lv_prod_Prin.SingleLineLayout.Label.TextColor = Colors.Black lv_prod_Prin.Clear @@ -2785,4 +2862,74 @@ End Sub Private Sub p_prod_Click +End Sub + +Private Sub B_PROD_Click + Dim label1 As Label + label1 = lv_prod_Prin.SingleLineLayout.Label + label1.TextSize = 14 + p_prod.Width = Root.Width + p_prod.Height = Root.Height + b_regreso.Left = (p_prod.Width - b_regreso.Width) / 2 + b_regreso.Top = p_prod.Height - b_regreso.Height + + p_prod.Visible = True + p_prod.BringToFront + + + Private c As Cursor = Starter.skmt.ExecQuery("select CAT_GP_NOMBRE AS HVD_PRONOMBRE, IFNULL(CAT_GP_PRECIO, 0) AS HVD_RECHAZOCANT from CAT_GUNAPROD WHERE CAT_GP_CLASIF <> 'PROMOS' order by CAT_GP_NOMBRE asc") + + lv_prod_Prin.SingleLineLayout.Label.TextColor = Colors.Black + lv_prod_Prin.Clear + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Dim itemText As String + + + + itemText = $"${c.GetString("HVD_PRONOMBRE")} ${CRLF}Precio: ${(c.GetDouble("HVD_RECHAZOCANT"))}"$ + lv_prod_Prin.AddSingleLine(itemText) + + + Next + Else + lv_prod_Prin.AddSingleLine("No hay datos disponibles.") + End If + c.Close +End Sub + +Private Sub B_PROM_Click + Dim label1 As Label + label1 = lv_prod_Prin.SingleLineLayout.Label + label1.TextSize = 14 + p_prod.Width = Root.Width + p_prod.Height = Root.Height + b_regreso.Left = (p_prod.Width - b_regreso.Width) / 2 + b_regreso.Top = p_prod.Height - b_regreso.Height + + p_prod.Visible = True + p_prod.BringToFront + + + Private c As Cursor = Starter.skmt.ExecQuery("select CAT_GP_NOMBRE AS HVD_PRONOMBRE, IFNULL(CAT_GP_PRECIO, 0) AS HVD_RECHAZOCANT from CAT_GUNAPROD WHERE CAT_GP_CLASIF = 'PROMOS' order by CAT_GP_NOMBRE asc") + + lv_prod_Prin.SingleLineLayout.Label.TextColor = Colors.Black + lv_prod_Prin.Clear + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Dim itemText As String + + + + itemText = $"${c.GetString("HVD_PRONOMBRE")} ${CRLF}Precio: ${(c.GetDouble("HVD_RECHAZOCANT"))}"$ + lv_prod_Prin.AddSingleLine(itemText) + + + Next + Else + lv_prod_Prin.AddSingleLine("No hay datos disponibles.") + End If + c.Close End Sub \ No newline at end of file diff --git a/B4A/Files/cliente.bal b/B4A/Files/cliente.bal index d973343ed7a816a2e4e6e9adf6de5118dcb539bb..9293dbf1b9bed9647e1fee6ba6f31cd118b2b73e 100644 GIT binary patch delta 2526 zcmaKueN2-_9LJw~DAcyJ)V5G)i!BA@MH#fUAQVs;b)qQv1`}6m!CKIYRm)P`OL2+W z98q3=M(6%8Y%XpZondUr5=}(2Ft=rf&BV=Z*@$z=bn`97{joUN@1D|fs2l0;$>;8V z_r1I4?)e_q-{;Sb^743&;~Y|s!ynh)FK?KqKxlD$TD^gw*YDl5tz#Q)YH_!EI$FJc z&kiM1ie?OLcaTIGHh6<>p$?9d2MXHHA1R{>9N{mO6pOL0*3;tkTS}&IenPa?8mqJx zO`!!|i~Dgdl?%k=XqS3V2MWc=8Y3HQ7llXz+!UP&$6=xfLyZw-4RSI@3WgRV6(bEp zhY`)uBO5T%F=jDrWY~lp&Cg)iJjG!y6AMwHEaYsA*%&zt=OX7}Q3_rtg zA;U!sTLcbAM6FDNjp2C=+ZirqxP;;P43{!o#;}9oavVRlvI>SP8D7BfLWUPHT*dIS z3|BMkWO(r;hv_SQj%irJa1Fyt8D7S4EyK$hUcqo3!}ScWyXuGrW%BCWhBD`~t%+hMO67BX7X)aJZC~Sb^hO8Q#dSm*Gvw(ZlFNj!wD_UY(I0 z{upbFJu~o0zpH}%=cN~ll-0LBaSv%FZyea1T%Fr=Hlz{VvAAwjy?wynw59Iap}+Hv z-MlbjwVgTJm?b^+4(xyLUgAlEy)wo5$E|fW`&#pxj{03k?~QN$K%~DOa)x}LE*({! zB<_p@-}hIwoe;17om}p&d3hkA^Wb8`siWt0g%2_wR*6ebUT!xoAMLvRm#0ho^=H4m z9{1DWyZYk`uB3eA{o!=+jfY?L6<$lapR=m*98T6iIF33*>&`V@0T|Mz4f`Z<3JZ@_ zHpYyK>C)CXYn_YhR@4cN^QrSNMz&e|ZJ1U)#f)rIrd31@r>4WV!@JXK^7>6tubj%T z2qR6JEbE@=mQQn8#+k*Fy@tzEL$!u-9En;Kxrh%Vg-a6?6DA4=VRxAhx&uk@W#(-# zt+fs7HkB%*|6se&!#eB=&Pw5V0%N+DNE~e6tA=o01s_Ks;3(il1boX@k^vZUTKM=# zQi70lr(q6ks8sO@G;smkU%v>m?l~+lu~`ax-V744kS6b`;Kc+?>3WcORAk2RuAb9G zCc&+s)+Uh>7%|U-F_#KH?^VFk>>N0~?=F$S;QqP1j6mP)YAKzkFxPr8^g5)8*q3gL zL=K)_Tf72`NpQH=V3s3MvnF(JsKZNW8+E}%>h%(oOAnf1WRGT8-d9D4QkdXGs6wfH zJnx&m23V+*keP6${|-?JiB|_Il&Z%QGweoiLN7TCWA^HtBRCA*N6d=+iRkx@8*W-e z_b#3!;Zvf<#bwIUF-e%Dnyzvde}aG~GX;)q)Y5Yk*~LfEU3>(0XXn9HyN76K=ll?6 z2%R<4CZxs^z0M@`UK3tfE_63$Yv}bS6sai+=cANBMxR+Y7fpsNP`+3}k|VDp%M67* z5*Xa2QYKFm*I*aBkxwBoUQ`C-K81$<>mbO|>r;>|AkZ8zgUOc!e|CC^_6bSt(QfZ7NW9s+4I@sOPI;ye$jb zJ1f=n789hYr3thB0xoss!Yl1k_%Nh}4O`1$a9}3v-BKudxTjp$M=R{kDiLZ!t~8>H zEC&ya?(u;p4-Ee^2jBHCkbAKG9HN#U3Ng|Z{l R#Ea+$H?Sj~`H6VK{R_G%@HYSe delta 1279 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 Lq1{BAhobxsRksBg delta 709 zcmX?~a9fF&m4Sib7b61$7mya5$g9lF4rDkx`Z>G$I8L;ZnRr4+gbgU-9_kq6;>ZVN z<-`|f=7mnoQQ`uL`y?i%<`_<%%cw34k}QbND@`rSch1R7%_~XenEZxOz8<6uWGDv^ zGXpUT5OV@C$VP4;=0Rff0@)yQ_<>jei49~j%mQNhZjdP;Gjw}Tb1@n6xRzSSPmFbR zIdF7agSEcO!Y{U@PLh<@w!iAXF_gJ6qu@Q~@tMb}C34T3t!PL%@2P#6N6J6L zcIq`A#^mdP0T*UWlxfzD_c3qm7A+EB&hUPak)q=9*4d(1;m;CR)45YBW&3_sJfA!B zvp>fqj-RJ~h`&$RyXyVyT-*Oq-%h_`zNcLIdI8W$5u0x_Ph?@#n7oi(cya>=r;1Bz zT4HHViAzypd16vdsw7a2UJ8_>2bG-sioudJp7Y2#Z@MU@JliVPkx{-I{BQM_~Z$aER(|}_%uNZ&4HLx6i5hz z7{Ne73y66{Ks-Mn5dy@llN03RghPQWTOelp4|F2f{g)Q0N(fC377=1am=lh}oC+j!tS8$W@J+Te;9_E6000KEuBHG0 diff --git a/B4A/Files/principal.bal b/B4A/Files/principal.bal index 1711c110f2f897a38dac336cac0c1441f94b53f7..19f9bcae56d4cbeb5faa9fbdc03cff9600ce1616 100644 GIT binary patch delta 1612 zcmZY9Sx-|z7zW@uDV7wZVQB7jwGIgwGTprAXc~P*|B-g;Axd z;97;OM%Ex}k#eL0Sw~(EZ$PS%8nT_dk?bJXk~ayFG8%2Bi7n(h@>cRT@^)A)uO3zl z*g>}?b?;$t9jmTbPAJv=4&15&(LvGQH`{y6^ewsKyZY8&o50cx- zUUCPylYEGrI!uEjWFNVUe3X2Q>?e1V1LPiZ@3K?*)%VdvkQ^fSlf&fWMgd60aLJVcI?hsh)4^UC`Fe?bj!y-2=99wlEUUxC$Tyb7zg;2Nx6 z(HI;@t|MdQ1e{V6NtzfZPmphrC&^Rfo8(*YZR8Gem#i=P?|nzbGzRLI&cJE~_h9uN z-zPsHKZGA4kC7*c`tDO$^?U~B53x+^%HNu`MH9k|QZx~oijT-&wyMm4^=qk1uPvXY z7Dzu+`@Nw+&?x)$BNkb5e(`4`G zy1B4NF1)Ui)3artvL7_*d|{V^=~`8r%f8i`D5}D(?GkTq2tyE{OyX6&*nlJ$Rs|N{{#k z7B!wZsO7~AkKhw<^z6UE4&ULc{5qXUre`ue`6)8_F;bjwjH!+rQ=r!mW5vPzLZK~{ z=}C9=wfCm86F=s~y#C;K?6aTHOo=L0Wom(1s3Iz=7OBN*iCU`M=gZ+`@^ZC8t%NJ! zRq*OL`=)YkV5;CX@LG5sydK^FZye1n-6S!TaF@a5H=mKJ?$dy|0Hc(E=ZVkHW{`z5-u`ujQ=ke?2!aCJEnwZ^F0W+i(iL1GmC$aJ#j= z|MnJiV4@Sg3*Upg;QMg5?EZ`oWcL(2l-(oxNPeu+%Fkf%1nz;ea4*~k_rp)&0r;8x zT)j|(v-W2OFEwyy^h$PTYOju4!E4z)$3yTi{6>DOM$|jyjvbZVcfOb1CYCT^rfAyp z8pBllPa;fLWQT&O?pTma#>2l~epQv(-O%oIUeq(jZgbvX(EP1DsIAKnr+=2_1>;`} Mf~oJeXrAZ&1C4@c=>Px# diff --git a/B4A/INTMEX.b4a b/B4A/INTMEX.b4a index 4c7d1ad..4d4a86f 100644 --- a/B4A/INTMEX.b4a +++ b/B4A/INTMEX.b4a @@ -164,7 +164,7 @@ Version=12.8 #Region Project Attributes #ApplicationLabel: Intmex #VersionCode: 1 - #VersionName: 5.09.07 s/C + #VersionName: 5.10.13 'SupportedOrientations possible values: unspecified, landscape or portrait. #SupportedOrientations: portrait #CanInstallToExternalStorage: False diff --git a/B4A/INTMEX.b4a.meta b/B4A/INTMEX.b4a.meta index bdd7559..3615058 100644 --- a/B4A/INTMEX.b4a.meta +++ b/B4A/INTMEX.b4a.meta @@ -91,6 +91,6 @@ ModuleClosedNodes6= ModuleClosedNodes7= ModuleClosedNodes8= ModuleClosedNodes9= -NavigationStack=C_Productos,Busca_TextChanged,1143,6,C_Principal,checaPedido,2723,0,C_Principal,Class_Globals,217,0,C_Principal,B4XPage_Appear,440,0,C_Principal,b_productos_Click,2774,0,Diseñador Visual,principal.bal,-100,6,C_Principal,b_regreso_Click,2777,0,C_Principal,p_prod_Click,2781,0,C_Productos,clv_prods_ll_VisibleRangeChanged,1112,0,C_Principal,JobDone,1477,0,C_Principal,cargar_Click,910,0 +NavigationStack=B4XMainPage,B4XPage_Created,161,2,Subs,decompress,73,0,Subs,traeRuta2,73,0,C_Principal,JobDone,1211,0,C_Principal,checaPedido,2806,2,C_Cliente,l_telefono_LongClick,1691,0,Diseñador Visual,cliente.bal,-100,4,C_Cliente,Label16_LongClick,1738,0,C_Cliente,b_aceptelefono_Click,1721,6,C_Cliente,mandaPendientes,1268,2,C_NuevoCliente,GUARDA_Click,385,0 SelectedBuild=0 -VisibleModules=28,2,13,20,14,29,17,15,9,4 +VisibleModules=28,2,13,20,14,29,17,15,9,4,11 diff --git a/B4A/Subs.bas b/B4A/Subs.bas index 0f3e490..51225c2 100644 --- a/B4A/Subs.bas +++ b/B4A/Subs.bas @@ -65,6 +65,20 @@ Sub decompress(base64 As String) As String 'ignore Return uncompressed End Sub +'Regresa la ruta actual de la base de datos. +Sub traeRuta2 (cliente As String) As String 'ignore + Private c As Cursor + Private r As String + c=B4XPages.MainPage.skmt.ExecQuery($"select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO = '${cliente}' UNION ALL select CAT_CL_RUTA from kmt_info2 where CAT_CL_CODIGO = '${cliente}'"$) + r = "0" + If c.RowCount > 0 Then + c.Position=0 + r = c.GetString("CAT_CL_RUTA") + End If + c.Close + Return r +End Sub + 'Convierte una fecha al formato yyMMddHHmmss Sub fechaKMT(fecha As String) As String 'ignore ' Log(fecha) diff --git a/B4A/Tracker.bas b/B4A/Tracker.bas index 6c5f0b4..f4c4f13 100644 --- a/B4A/Tracker.bas +++ b/B4A/Tracker.bas @@ -4,6 +4,300 @@ 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 B4XPage_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("No permission") +' Return +' End If +' StartFLP 'Iniciamos FusedLocationProvider +' Tracking = True +'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 +'' Log("CreateLocationRequest") +' 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(50) '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 +'' Log("Iniciamos CreateLocationRequestSmallD") +' Dim lr As LocationRequest +' lr.Initialize +' lr.SetInterval(2000) 'Intervalo deseado para actualizaciones de ubicacion +' lr.SetFastestInterval(lr.GetInterval / 2) 'Intervalo minimo para actualizaciones de ubicacion +' lr.setNumUpdates(2) 'Solicitamos solo 2 actualizaciones con estos parametros +' lr.SetSmallestDisplacement(1) '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:${Location1.Longitude},${Location1.Latitude}"$) +' 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) +'' CallSub2(gestion, "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("INTMEX", 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 + + #Region Service Attributes #StartAtBoot: True #End Region @@ -202,7 +496,7 @@ Sub CreateNotification (Body As String) As Notification Dim notification As Notification notification.Initialize2(notification.IMPORTANCE_LOW) notification.Icon = "icon" - notification.SetInfo("INTMEX", Body, Main) + notification.SetInfo("IZCA", Body, Main) Return notification End Sub