diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..a3f49d9 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,16 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# linguist-language +*.b4a linguist-language=B4X +*.b4i linguist-language=B4X +*.b4j linguist-language=B4X +*.b4r linguist-language=B4X +*.bas linguist-language=B4X + +# linguist-detectable +*.b4a linguist-detectable=true +*.b4i linguist-detectable=true +*.b4j linguist-detectable=true +*.b4r linguist-detectable=true +*.bas linguist-detectable=true \ No newline at end of file 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/B4XCliente.bas b/B4A/B4XCliente.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XCliente.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/B4XClientes.bas b/B4A/B4XClientes.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XClientes.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/B4XMainPage.bas b/B4A/B4XMainPage.bas new file mode 100644 index 0000000..497f694 --- /dev/null +++ b/B4A/B4XMainPage.bas @@ -0,0 +1,1085 @@ +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=git&Args=pull + '########################################################################################################### + '###################### PUSH ############################################################# + 'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=github&Args=..\..\ + '########################################################################################################### + '###################### PUSH TORTOISE GIT ######################################################### + 'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=TortoiseGitProc&Args=/command:commit&Args=/path:"./../../"&Args=/closeonend:2 + '########################################################################################################### +#End Region + +'Ctrl + click to export as zip: ide://run?File=%B4X%\Zipper.jar&Args=Project.zip + +Sub Class_Globals + Private Root As B4XView + Private xui As XUI + Public login As B4XMainPage + Public principal As C_Principal + Public clientes As C_Clientes + Public cliente As C_Cliente + Public productos As C_Productos + Public updateAvailable As C_UpdateAvailable + Public mapas As C_Mapas + Public nuevoCliente As C_NuevoCliente + Public ticketsDia As C_TicketsDia + Public noVenta As C_NoVenta + Public nota As C_Nota + Public pedidos As C_Pedidos + Public promos As C_Promos + Public historico As C_Historico + 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_regesar As Button + Private l_version As Label + Private ImageView1 As ImageView + Private Label2 As Label + Dim Entrar As Button + Dim tipo_venta As String = Subs.traeTipoVentaDeBD + Dim bTerminarClicked As Boolean = False + Private lv_server As ListView + Private l_server As Label + Private b_envioBD As Button + Public Provider As FileProvider + Public rutaBDBackup = "" + Private B4XSwitch1 As B4XSwitch + Private p_validacion As Panel + Private B4XSwitch2 As B4XSwitch + Dim x As Int + Private et_codigo As EditText + Dim buscandoActualizacion As Boolean = False + Dim actualizacionRevisada As Boolean = False 'Parte de la funcionalidad "appUpdater" + Private b_actualizacion As Button + Private et_server As EditText + Dim intentUsado As Boolean = False + Private p_importarBDWA As Panel + Private cb_importarBDWA As CheckBox + + Dim pkg As PackageManager +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) + Log("##### CREAMOS MAINPAGE LOGIN") + B4XPages.GetManager.LogEvents = True + Root = Root1 + Root.LoadLayout("login") +' B4XPages.SetTitle(Me, "Guna Preventa") + login.Initialize + B4XPages.AddPage("Login", login) + principal.Initialize + B4XPages.AddPage("Principal", principal) + clientes.Initialize + B4XPages.AddPage("Clientes", clientes) + cliente.Initialize + B4XPages.AddPage("Cliente", cliente) + productos.Initialize + B4XPages.AddPage("Productos", productos) + updateAvailable.Initialize + B4XPages.AddPage("updateAvailable", updateAvailable) + mapas.Initialize + B4XPages.AddPage("Mapas", mapas) + nuevoCliente.Initialize + B4XPages.AddPage("NuevoCliente", nuevoCliente) + 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) + p_Main.Height = Root.Height + p_Main.Width = Root.Width + ruta = Starter.ruta + Provider.Initialize + If File.Exists(File.DirInternal, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", File.DirInternal, "kmt.db") + End If + skmt.Initialize(File.DirInternal,"kmt.db", True) + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS IMPRESORA (HABILITADA)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PLAN_LEALTAD (PL_CLIENTE TEXT, PL_BANDERA TEXT)") + + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ABONOSP(NOTA TEXT, CLIENTE TEXT, SALDO_PENDIENTE TEXT, FECHA TEXT)") + + + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS COMENTARIOS (COMENTARTIO TEXT, CLIENTE TEXT, DESCARGADO TEXT)") + Subs.agregaColumna("PLAN_LEALTAD", "DESCARGADO", "TEXT") + Subs.agregaColumna("PEDIDO_CLIENTE", "PC_FACTURA", "INTEGER") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS GPS (HABILITADO)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_GUNAPROD2 (CAT_GP_CODPROMO TEXT, CAT_GP_INICIATIVA TEXT, CAT_GP_TIPOPROD TEXT, CAT_GP_DEV TEXT, CAT_GP_ALMACEN NUM, 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 )") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PROMO_ESP (HVD_CLIENTE)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_PROMO_ESP(CAT_PE_ID TEXT,CAT_PE_IDPROMO TEXT,CAT_PE_MONTO 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 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 ENCUESTA_MODULO1(CLIENTE TEXT,ALMACEN TEXT, P1 TEXT, P2 TEXT, P3 TEXT, P4 TEXT, P5 TEXT, P6 TEXT, P7 TEXT, P8 TEXT, P9 TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ENCUESTA_MODULO2 (CLIENTE TEXT, ALMACEN TEXT,P1 TEXT, P2 TEXT, P3 TEXT , P4 TEXT, P5 TEXT, P6 TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_ENCUESTA_PREGUNTA (CAT_EP_ID TEXT,CAT_EP_IDTIPOPREGUNTA TEXT,CAT_CE_DESCRIPCION TEXT,CAT_EP_PREGUNTA TEXT,CAT_EP_RES1_PRED TEXT,CAT_EP_RES2_PRED TEXT,CAT_EP_RES3_PRED TEXT,CAT_EP_ORDEN_PREGUNTA TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ENCUESTA_MODULO3(CLIENTE TEXT,ALMACEN TEXT, P1 TEXT, P2 TEXT, P3 TEXT, P4 TEXT, P5 TEXT, P6 TEXT, P7 TEXT, P8 TEXT, P9 TEXT, P10 TEXT, P11 TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ENCUESTA_MODULO4 (CLIENTE TEXT, ALMACEN TEXT,P1 TEXT, P2 TEXT, P3 TEXT , P4 TEXT, P5 TEXT, P6 TEXT, P7 TEXT, P8 TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ENCUESTA_MODULO5 (CLIENTE TEXT, ALMACEN TEXT,P1 TEXT, P2 TEXT, P3 TEXT , P4 TEXT, P5 TEXT, P6 TEXT, P7 TEXT, P8 TEXT, P9 TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_ENCUESTA2(HE_CLIENTE TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_ENCUESTA_CLIENTE (HEC_CLIENTE TEXT, HEC_MODULO TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_ENCUESTA_AVISO_GIRO (HEAV_CLIENTE TEXT, HEAV_MODULO TEXT, HEAV_AVISO TEXT, HEAV_GIRO TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_ENCUESTA (HE_CLIE TEXT, HE_RES TEXT, HE_FECHA TEXT, HE_TIPO TEXT, HE_LAT TEXT, HE_LON TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS kmt_info3(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)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_PRO2265(H_IDCLIENTE TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_PRO3054(H_IDCLIENTE TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_PRO3055(H_IDCLIENTE TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS RUTA_SUPLENCIA(RS_RUTA TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS TICKET_IMPRESO (idCliente TEXT)") +' skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_VARIABLES (CAT_VA_DESCRIPCION TEXT, CAT_VA_VALOR TEXT)") + Subs.agregaColumna("HIST_ENCUESTA", "HE_LAT", "TEXT") + Subs.agregaColumna("HIST_ENCUESTA", "HE_FOTO", "BLOB") + Subs.agregaColumna("kmt_info3", "foto", "BLOB") + Subs.agregaColumna("PEDIDO", "PE_RECALCULO", "TEXT") + Subs.agregaColumna("PEDIDO", "PE_RECALCULOTOT", "TEXT") + Subs.agregaColumna("HIST_ENCUESTA", "HE_LON", "TEXT") + Subs.agregaColumna("kmt_info3", "encuesta", "TEXT") + Subs.agregaColumna("kmt_info3", "CAT_CL_TIPOCLIENTE", "TEXT") + Subs.agregaColumna("kmt_info3", "CAT_CL_BCREDITO", "TEXT") '########################## CODIGO PARA CREDITOS #################### + Subs.agregaColumna("CAT_GUNAPROD", "CAT_PA_BSEGMENTA", "TEXT") + Subs.agregaColumna("CAT_GUNAPROD", "CAT_PA_SEGMENTAV", "TEXT") + Subs.agregaColumna("CAT_GUNAPROD2", "CAT_PA_BSEGMENTA", "TEXT") + Subs.agregaColumna("CAT_GUNAPROD2", "CAT_PA_SEGMENTAV", "TEXT") + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna "P10" en la tabla + c=skmt.ExecQuery("SELECT COUNT(*) AS fCol FROM pragma_table_info('ENCUESTA_MODULO3') WHERE name='P10'") + c.Position = 0 + If c.GetString("fCol") = 0 Then 'Si no esta la columna FECHA la agregamos + skmt.ExecNonQuery("ALTER TABLE ENCUESTA_MODULO3 ADD COLUMN P10 TEXT") + End If + Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch + Try + skmt.ExecNonQuery("ALTER TABLE ENCUESTA_MODULO3 ADD COLUMN P10 TEXT") + Catch + Log(LastException) + End Try + End Try + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna "P11" en la tabla + c=skmt.ExecQuery("SELECT COUNT(*) AS fCol FROM pragma_table_info('ENCUESTA_MODULO3') WHERE name='P11'") + c.Position = 0 + If c.GetString("fCol") = 0 Then 'Si no esta la columna FECHA la agregamos + skmt.ExecNonQuery("ALTER TABLE ENCUESTA_MODULO3 ADD COLUMN P11 TEXT") + End If + Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch + Try + skmt.ExecNonQuery("ALTER TABLE ENCUESTA_MODULO3 ADD COLUMN P11 TEXT") + 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 = 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 + 'Revisamos si se disparo el intent de cargar la base de datos desde WhatApp. + If Subs.traeUsarIntentBDWA Then + Subs.importaBDDesdeWhatsApp + End If +End Sub + +Sub B4XPage_Appear +' Log("buscandoActualizacion-" & buscandoActualizacion) +' Log("actualizacionRevisada-" & actualizacionRevisada) + 'Buscamos actualización de app (appUpdater) +' If Not(versionRevisadaHoy) And Not(actualizacionRevisada) And Starter.muestraProgreso = 0 Then +' buscandoActualizacion = True +' Entrar.Enabled = False +' revisaActualizacion +' End If + cb_importarBDWA.Checked = Subs.traeUsarIntentBDWA + If user.Text.Trim = "KMTS1" Then + p_importarBDWA.Visible = True + Else + p_importarBDWA.Visible = False + End If + reqManager.Initialize(Me, Starter.server) + If Starter.muestraProgreso = 1 Then + muestraProgreso("Descargando nueva versión, un momento por favor.") + Starter.muestraProgreso = 0 + End If + Dim ph As Phone 'Get Id Device + Dim DeviceID As String = ph.GetSettings("android_id").ToUpperCase +' LogColor($"////////////////// DeviceID: ${DeviceID} ////////////////// "$, Colors.Blue) + LogColor("Revisa permisos Phone_State", Colors.Green) + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_READ_PHONE_STATE) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + If Result Then + IMEN.Text ="" + IMEI = "" +' LogColor($"////////////////// IMEI: ${IMEI} ////////////////// "$, Colors.Blue) + IMEI="" 'Pruebas + End If + 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("Sin permisos de ubicacion", True) + End If + server = 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, sTime 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 + c = skmt.ExecQuery("SELECT HABILITADA FROM IMPRESORA") + If c.RowCount > 0 Then + c.Position = 0 + If c.GetString("HABILITADA") = 1 Then + B4XSwitch1.Value = True + Else If c.GetString("HABILITADA") = 0 Then + B4XSwitch1.Value = False + End If + Else + B4XSwitch1.Value = False + End If + c = skmt.ExecQuery("SELECT HABILITADO FROM GPS") + If c.RowCount = 0 Then + skmt.ExecNonQuery2("INSERT INTO GPS VALUES (?)", Array As Object(0)) + End If + c = skmt.ExecQuery("SELECT HABILITADO FROM GPS") + If c.RowCount > 0 Then + c.Position = 0 + If c.GetString("HABILITADO") = 1 Then + B4XSwitch2.Value = True + Else If c.GetString("HABILITADO") = 0 Then + B4XSwitch2.Value = False + End If + Else + B4XSwitch1.Value = False + End If + Subs.guardaAppInfo + +' If Subs.traeAlmacen <> "NA" Then +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "selectVersionAppGuna" 'Antes select_usuario_guna_GV2_1 +' cmd.Parameters = Array As Object(almacen) +' reqManager.ExecuteQuery(cmd , 0, "versionApp") +' End If +End Sub +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub Entrar_Click + Dim r As Reflector + Dim Api As Int + Dim PP As Phone + user.Text = user.Text.trim + LogColor(Starter.server, Colors.Blue) + Api = r.GetStaticField("android.os.Build$VERSION", "SDK_INT") + If Api < 9 Then + 'Old device + 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 = "KMTS1" 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 (pass.Text)) + skmt.ExecNonQuery("delete from VERSION") + skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object ("2.1")) + B4XPages.ShowPage("Principal") + 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("Principal") + 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 Subs.traeAlmacen <> "NA" Then + cmd.Initialize + cmd.Name = "selectVersionAppGuna" + cmd.Parameters = Array As Object(Subs.traeAlmacen) + reqManager.ExecuteQuery(cmd , 0, "traeVersion") + End If + If existe = 0 Then + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_usuario_guna_GV2_10" 'Antes select_usuario_guna_GV2_1 + cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.Trim) + reqManager.ExecuteQuery(cmd , 0, "usuario_10") +' If IMEI = "" Then +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "select_usuario_guna_GV2_10" 'Antes select_usuario_guna_GV2_1 +' cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.Trim) +' reqManager.ExecuteQuery(cmd , 0, "usuario_10") +' Else +' If IMEI = "" Then +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "select_usuario_guna_GV2_10" +' cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.Trim) +' reqManager.ExecuteQuery(cmd , 0, "usuario_10") +' Else +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "select_usuario_guna_GV2_10" 'Antes select_usuario_guna_GV2 +' cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.trim) +' Log("Mandamos: "&user.Text&"|"& pass.Text) +' reqManager.ExecuteQuery(cmd , 0, "usuario_10") +' End If +' End If + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_version_GV2" + reqManager.ExecuteQuery(cmd , 0, "version") + Else + usuario = user.Text + B4XPages.ShowPage("Principal") + End If +End Sub + +Sub Entrar_LongClick +' dim a as int = "a" +End Sub + +Private Sub user_EnterPressed + If user.text = "KMTS1" Then Entrar.Enabled = True +End Sub + +Sub JobDone(Job As HttpJob) + Log("JOBDONE MAINPAGE") + Log(Job.Success) + If Job.Success = False Then + LogColor("Error: " & Job.tag & " : " & Subs.parseHTTPError(Job.ErrorMessage), Colors.red) +' ToastMessageShow("Error: " & Job.ErrorMessage, True) + Else + LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211027 + If Job.JobName = "DBRequest" Then + 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 result1 As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If result1.Tag = "CHECAENCUESTA" Then 'query tag + For Each records() As Object In result1.Rows + Dim CUANTOSENCUESTA As String = records(result1.Columns.Get("CUANTOS")) + Log(CUANTOSENCUESTA) + Next + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + If CUANTOSENCUESTA = "0" Then + cmd.Initialize + cmd.Name ="insert_drop_GV2_4" + cmd.Parameters = Array As Object(usuario,Subs.traeRuta,sDate,"",sTime,"","","","","ENCUESTA",almacen,Application.VersionName,Starter.encuesta) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_drop") + End If + 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) + 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")) + Private version As String = records(result.Columns.Get("CAT_AL_VERSION")) + Private versionador As String = records(result.Columns.Get("CAT_AL_VERSIONADOR")) + Private actualizarAplicacion As String = records(result.Columns.Get("CAT_AL_ACTUALIZACION")) + Next + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("VERSION_NUEVA")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("VERSION_NUEVA", version)) + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FORZAR_ACTUALIZACION")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FORZAR_ACTUALIZACION", actualizarAplicacion)) +' skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("VERSION_NUEVA")) +' skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("VERSION_NUEVA", version)) + Log("|"&name&"|") + Log($">>>> GUARDAMOS NUEVA VERSION: ${version}, ${actualizarAplicacion}"$) + paso1 = 1 + IMEI_BASE = "" + IMEI = "" + End If + + If result.Tag = "traeVersion" Then 'query tag + For Each records() As Object In result.Rows + Private version As String = records(result.Columns.Get("CAT_AL_VERSION")) + Private actualizarAplicacion As String = records(result.Columns.Get("CAT_AL_ACTUALIZACION")) + Next + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("VERSION_NUEVA")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("VERSION_NUEVA", version)) + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FORZAR_ACTUALIZACION")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FORZAR_ACTUALIZACION", actualizarAplicacion)) + Log($">>>> GUARDAMOS NUEVA VERSION: ${version}, ${actualizarAplicacion}"$) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "geopass" Then 'query tag + For Each records() As Object In result.Rows + Dim cuenta As String = records(result.Columns.Get("CUENTA")) + Next + If cuenta = "1" Then + p_validacion.Visible = False + B4XSwitch2.Value = True + skmt.ExecNonQuery2("UPDATE GPS SET HABILITADO = (?)",Array As Object(1)) + et_codigo.Text = "" + Private c2 As Cursor = skmt.ExecQuery("select distinct CAT_CL_RUTA from kmt_info3 where CAT_CL_RUTA not in (select * from ruta_suplencia)") + c2.Position = 0 + Private rutades As String = c2.GetString("CAT_CL_RUTA") + c2.Close + Private c2 As Cursor = skmt.ExecQuery("SELECT ID_ALMACEN FROM CAT_ALMACEN") + c2.Position = 0 + Private almacendes As String = c2.GetString("ID_ALMACEN") + c2.Close + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "delete_geoPass_GUNA" +' Log(Subs.traeAlmacen&", "& Subs.traeRuta) + cmd.Parameters = Array As Object( almacendes,rutades) + reqManager.ExecuteCommand(cmd , "traeGeoPass") + Else If cuenta = "0" Then + MsgboxAsync("Codigo incorrecto","Atención") + p_validacion.Visible = False + B4XSwitch2.Value = False + skmt.ExecNonQuery2("UPDATE GPS SET HABILITADO = (?)",Array As Object(0)) + et_codigo.Text = "" + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "carga_encuesta" Then 'query tag + For Each records() As Object In result.Rows + Dim CAT_EP_ID As String = records(result.COLUMNS.GET("CAT_EP_ID")) + Dim CAT_EP_IDTIPOPREGUNTA As String = records(result.COLUMNS.GET("CAT_EP_IDTIPOPREGUNTA")) + Dim CAT_CE_DESCRIPCION As String = records(result.COLUMNS.GET("CAT_CE_DESCRIPCION")) + Dim CAT_EP_PREGUNTA As String = records(result.COLUMNS.GET("CAT_EP_PREGUNTA")) + Dim CAT_EP_RES1_PRED As String = records(result.COLUMNS.GET("CAT_EP_RES1_PRED")) + Dim CAT_EP_RES2_PRED As String = records(result.COLUMNS.GET("CAT_EP_RES2_PRED")) + Dim CAT_EP_RES3_PRED As String = records(result.COLUMNS.GET("CAT_EP_RES3_PRED")) + Dim CAT_EP_ORDEN_PREGUNTA As String = records(result.COLUMNS.GET("CAT_EP_ORDEN_PREGUNTA")) + skmt.ExecNonQuery2("INSERT INTO CAT_ENCUESTA_PREGUNTA (CAT_EP_ID ,CAT_EP_IDTIPOPREGUNTA ,CAT_CE_DESCRIPCION ,CAT_EP_PREGUNTA ,CAT_EP_RES1_PRED ,CAT_EP_RES2_PRED ,CAT_EP_RES3_PRED ,CAT_EP_ORDEN_PREGUNTA ) VALUES (?,?,?,?,?,?,?,?)", Array As Object (CAT_EP_ID ,CAT_EP_IDTIPOPREGUNTA ,CAT_CE_DESCRIPCION ,CAT_EP_PREGUNTA ,CAT_EP_RES1_PRED ,CAT_EP_RES2_PRED ,CAT_EP_RES3_PRED ,CAT_EP_ORDEN_PREGUNTA)) + Next + 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("Principal") + 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("closreq") + 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 + +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 + +'#if Java +'import java.util.concurrent.Callable; +'import com.google.android.gms.ads.identifier.AdvertisingIdClient; +'import com.google.android.gms.ads.identifier.AdvertisingIdClient.Info; +' +'public static void GetAdvertisingId() { +' BA.runAsync(processBA, mostCurrent, "advertisingid_ready", new Object[] {false, ""} +' , new Callable() { +' @Override +' public Object[] call() throws Exception { +' String id = AdvertisingIdClient.getAdvertisingIdInfo(mostCurrent).getId(); +' return new Object[] {true, id}; +' } +' }); } +'#End If + +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 + Dim theDir As String + Try + File.MakeDir(File.DirRootExternal,"kmts") + theDir = "/kmts" + Catch + theDir = "" + End Try + rutaBDBackup = File.DirRootExternal&theDir + Try + File.Copy(File.DirInternal,"kmt.db",File.DirRootExternal&theDir,"cedex_kmt.db") + ToastMessageShow("Listo", False) + Catch + ToastMessageShow("No se pudo hacer la copia: "&LastException, True) + End Try + Else + ToastMessageShow("Sin permisos", False) + End If + Log(rutaBDBackup) +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 + p_appUpdate.Left = (Root.Width/2) - (p_appUpdate.Width/2) + 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) + p_appUpdate.Height = Root.Height + p_appUpdate.Width = Root.Width + c = skmt.ExecQuery("SELECT HABILITADA FROM IMPRESORA") + If c.RowCount = 0 Then + skmt.ExecNonQuery2("INSERT INTO IMPRESORA VALUES (?)", Array As Object(0)) + End If + c = skmt.ExecQuery("SELECT HABILITADO FROM GPS") + If c.RowCount = 0 Then + skmt.ExecNonQuery2("INSERT INTO GPS VALUES (?)", Array As Object(0)) + End If + If user.Text.Trim = "KMTS1" Then + p_importarBDWA.Visible = True + Else + p_importarBDWA.Visible = False + End If +End Sub + +Sub b_regesar_Click +' Subs.panelVisible(p_Main,0,0) + p_appUpdate.Visible = False + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("DBReqServer")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("DBReqServer", et_server.Text)) + Starter.server = et_server.Text + Starter.reqManager.Initialize(Me, et_server.Text) +End Sub + +'Sub i_engrane_LongClick +' copiaDB +'End Sub + +Private Sub lv_server_ItemClick (Position As Int, Value As Object) + Starter.server = Value + l_server.Text = Value + et_server.Text = Value + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("DBReqServer")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("DBReqServer", Value)) + Starter.reqManager.Initialize(Me, Value) + ToastMessageShow("Servidor modificado", False) +End Sub + +'Enviamos la base de datos por correo +Private Sub b_envioBD_Click +' copiaDB +' Sleep(1000) + 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("cheveguerra@gmail.com") + email.Subject = "subject" + email.Attachments.Add(Provider.GetFileUri(FileName)) +' email.Attachments.Add(Provider.GetFileUri(FileName)) 'second attachment + Dim in As Intent = email.GetIntent + in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION + StartActivity(in) +End Sub + +Private Sub B4XSwitch1_ValueChanged (Value As Boolean) + If Value Then + Log("1") + skmt.ExecNonQuery2("UPDATE IMPRESORA SET HABILITADA = (?)",Array As Object(1)) + Else + Log("desactivado") + skmt.ExecNonQuery2("UPDATE IMPRESORA SET HABILITADA = (?)",Array As Object(0)) + End If +End Sub + +Private Sub B4XSwitch2_ValueChanged (Value2 As Boolean) + c = skmt.ExecQuery2("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String("CARGA_DIA")) + If c.RowCount > 0 Then + c.Position = 0 + If c.GetString("CAT_VA_VALOR") = 1 Then + If Value2 Then + p_validacion.Visible = True + p_validacion.Left = (Root.Width/2) - (p_appUpdate.Width/2) + Subs.panelVisible(p_validacion,0,0) + p_validacion.Height = Root.Height + p_validacion.Width = Root.Width + Else + skmt.ExecNonQuery2("UPDATE GPS SET HABILITADO = (?)",Array As Object(0)) + End If + Else + MsgboxAsync("Por favor primero haz carga de día","Atención") + B4XSwitch2.Value = False + End If + Else + MsgboxAsync("Por favor primero haz carga de día","Atención") + B4XSwitch2.Value = False + End If +End Sub + +Private Sub p_validacion_Click +End Sub + +Private Sub b_cancelarcodigo_Click + p_validacion.Visible = False + et_codigo.Text = "" + B4XSwitch2.Value = False +End Sub + +Private Sub b_aceptar_Click + If et_codigo.Text <> "" Then + Private c2 As Cursor = skmt.ExecQuery("select distinct CAT_CL_RUTA from kmt_info3 where CAT_CL_RUTA not in (select * from ruta_suplencia)") + c2.Position = 0 + Private rutades As String = c2.GetString("CAT_CL_RUTA") + c2.Close + Private c2 As Cursor = skmt.ExecQuery("SELECT ID_ALMACEN FROM CAT_ALMACEN") + c2.Position = 0 + Private almacendes As String = c2.GetString("ID_ALMACEN") + c2.Close + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_geoPass_GUNA" + cmd.Parameters = Array As Object(et_codigo.Text, almacendes, rutades) + reqManager.ExecuteQuery(cmd , 0, "geopass") + Else If et_codigo.Text = "" Then + MsgboxAsync("Ingresa un codigo","Atención") + p_validacion.Visible = False + B4XSwitch2.Value = False + skmt.ExecNonQuery2("UPDATE GPS SET HABILITADO = (?)",Array As Object(0)) + et_codigo.Text = "" + End If + +' c = skmt.ExecQuery2("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION =? ", Array As String("pasword")) +' Log(c.RowCount) +' If c.RowCount > 0 Then +' c.Position = 0 +' Log(c.GetString("CAT_VA_VALOR")) +' If c.GetString("CAT_VA_VALOR") = et_codigo.Text Then +' +' p_validacion.Visible = False +' +' B4XSwitch2.Value = True +' skmt.ExecNonQuery2("UPDATE GPS SET HABILITADO = (?)",Array As Object(1)) +' et_codigo.Text = "" +' Else If c.GetString("CAT_VA_VALOR") <> et_codigo.Text Then +' MsgboxAsync("Codigo incorrecto","Atención") +' p_validacion.Visible = False +' B4XSwitch2.Value = False +' skmt.ExecNonQuery2("UPDATE GPS SET HABILITADO = (?)",Array As Object(0)) +' et_codigo.Text = "" +' End If +' Else If c.RowCount = 0 Then +' MsgboxAsync("Codigo incorrecto","Atención") +' p_validacion.Visible = False +' B4XSwitch2.Value = False +' skmt.ExecNonQuery2("UPDATE GPS SET HABILITADO = (?)",Array As Object(0)) +' End If +End Sub + +Sub revisaActualizacion 'Parte de la funcionalidad "appUpdater" + '################################################ + '## Hay que subir el nuevo APK al servidor. ## + '## La ruta en el servidor es: \\10.0.0.205\e$\Cargas\MOVIL\Guna ## + '## Hay que actualizar la version en el archivo "gunaPreventa.ver" ## + '################################################ + LogColor("Buscarmos archivo Ver", Colors.red) + Private link As String = "https://keymon.lat/movil/guna/gunaPreventa.ver" + Wait For (traeArchivoVer(Me, link)) JobDone (j As HttpJob) + If j.Success Then + LogColor("Archivo .VER encontrado.", Colors.red) + Try + Dim app() As String = Regex.Split(Chr(9),j.GetString) + ' // Set the data + Starter.newApp.appLink = app(3) 'Liga a nuevo apk + Starter.newApp.newMsg = app(1) 'Texto de que hay actualizacion + Starter.newApp.okMsg = app(2) 'Texto de app al corriente + Starter.newApp.version = app(0) 'Version actual + Log($"Application.VersionName=${Application.VersionName}, newApp=${Starter.newApp}"$) + 'Guardamos la fecha de la última revisión en CAT_VARIABLES. + DateTime.DateFormat = "yyyyMMdd" + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("REVISION_APK")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("REVISION_APK", DateTime.Date(DateTime.Now))) + ' // App version check + If Starter.newApp.version = Application.VersionName Then + Starter.newApp.update = False + LogColor("No hay nuevo APK", Colors.red) + B4XPages.MainPage.Entrar.Enabled = True + End If + If Starter.newApp.version <> Application.VersionName Then + Starter.newApp.update = True + LogColor("Hay nuevo APK", Colors.red) + b_actualizacion.Visible = True + CallSubDelayed(appUpdater, "download_newApk") + End If + Catch + LogColor("appUpdater(), Job Failed, error " & LastException.Message, Colors.red) + If Msgbox2("Hubo un error: " & LastException.Message, "FALLO LA ACTUALIZACIÓN", "OK", "", "", Null) = DialogResponse.POSITIVE Then 'Ignore + ExitApplication + End If + End Try + Else + LogColor("appUpdater(), Job Failed " & link & CRLF & LastException.Message, Colors.Red) + If Msgbox2("Es necesaria una conexión a internet, por favor revise su conexión y vuelva a intentar", "ATENCIÓN", "OK", "", "", Null) = DialogResponse.POSITIVE Then 'Ignore + ExitApplication + End If + End If + j.Release +End Sub + +'En el servidor se necesita un archivo de texto (.ver) que tenga los siguientes +'datos separados por un tabulador: +' Campo 0 = 4.10.10 <-- Esta es la version de la aplicación disponible. +' Campo 1 = Hay una nueva actualizacion disponible. <-- Mensaje para cuando hay actualización. +' Campo 2 = Tu version es la ultima. <--- Mensaje para cuando no hay actualización. +' Campo 3 = https://keymon.lat/movil/guna/Guna_Preventa.apk <--- Liga al apk de la actualización. +Sub traeArchivoVer (Callback As Object, link As String) As HttpJob 'Parte de la funcionalidad "appUpdater" + Dim j As HttpJob + j.Initialize("", Callback) + j.GetRequest.Timeout = 5000 + j.Download(link) + Return j +End Sub + +'Regresa verdadero si ya se reviso la version del apk el dia de hoy. +Sub versionRevisadaHoy As Boolean + Private revisada As Boolean = False + c = skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("REVISION_APK")) + If c.RowCount > 0 Then + c.Position = 0 + DateTime.DateFormat = "yyyyMMdd" + If DateTime.Date(DateTime.Now) = c.GetString("CAT_VA_VALOR") Then + revisada = True + LogColor("La versión ya se revisó el día de hoy.", Colors.Red) + End If + End If + ' ####################################### + ' ### REGRESAMOS FALSE PARA QUE SIEMPRE REVISE ### + ' ####################################### + Return False +' Return revisada +End Sub + +Private Sub b_actualizacion_Click + CallSubDelayed(appUpdater, "download_newApk") +End Sub + +Private Sub cb_importarBDWA_CheckedChange(Checked As Boolean) +' LogColor($"cb_importarBDWA_CheckedChange = ${Checked}"$, Colors.Red) + Starter.skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'IMPORTAR_BD_WA'") + Starter.skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('IMPORTAR_BD_WA', '${Checked}')"$) +End Sub + + +Private Sub i_engrane_LongClick + Dim Intent1 As Intent + Intent1.Initialize(Intent1.ACTION_VIEW, "guna://tienda360/config?clienteId=12&almacen=45&ruta=143") + Try + StartActivity(Intent1) + Catch +' Log(LastException) + ToastMessageShow("La aplicación Tienda 360 no está instalada o no puede manejar la URL.", True) + End Try +End Sub diff --git a/B4A/B4XMapaRutas.bas b/B4A/B4XMapaRutas.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XMapaRutas.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/B4XMapas.bas b/B4A/B4XMapas.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XMapas.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/B4XNoVenta.bas b/B4A/B4XNoVenta.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XNoVenta.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/B4XNota.bas b/B4A/B4XNota.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XNota.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/B4XNuevoCliente.bas b/B4A/B4XNuevoCliente.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XNuevoCliente.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/B4XPrincipal.bas b/B4A/B4XPrincipal.bas new file mode 100644 index 0000000..200361f --- /dev/null +++ b/B4A/B4XPrincipal.bas @@ -0,0 +1,2100 @@ +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 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 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 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 +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 + 'SERVER = "http://201.99.139.28:1782" + 'SERVER = "http://keymon.com.mx:1782" + B4XPages.MainPage.SERVER = "http://187.189.244.154:1782" +' SERVER = "http://10.0.0.205:1782" + 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 from kmt_info") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + 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 + CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") +End Sub + +Sub B4XPage_Appear + HORAINGRESO ="000000" + B4XPages.MainPage.reqManager.Initialize(Me, B4XPages.MainPage.SERVER) + + PASO =0 + If Not(Starter.gps.GPSEnabled) Then + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + c=B4XPages.MainPage.skmt.ExecQuery2("select count(*) as CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position =0 + 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 + If EJECUTANDO =0 Then + Listo1 = 0 + Listo2 = 0 + Listo3 = 0 + Listo4 = 0 + Listo5 = 0 + inve = 0 + img2.Visible =False + End If + DateTime.DateFormat = "MM/dd/yyyy" + fecha=DateTime.Date(DateTime.Now) + b=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from pedido_cliente") + b.Position=0 + Cuantos = b.GetString("CUANTOS") + b.Close + If Starter.marcaCel <> "Sony" Then ToastMessageShow(Cuantos , True) + + d=B4XPages.MainPage.skmt.ExecQuery("select count(*) as TOTAL_VISITAR from kmt_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 from kmt_info") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + End If + If Cuantos = 0 Then + L_MONTOD.Text =0 + l_cuantosc.Text = 0 + l_cuantosn.Text = 0 + L_CUANTOST.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") + d.Close + e.Close + + b=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS from noventa") + b.Position=0 + l_cuantosn.Text = b.GetString("CUANTOS") + b.close + Else + c=B4XPages.MainPage.skmt.ExecQuery("select SUM(PE_COSTO_TOT) as MONTO_DIA, COUNT(DISTINCT(PE_CLIENTE)) AS CLIENTES_DIA from PEDIDO ") + b=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS from noventa") + c.Position=0 + b.Position=0 + L_MONTOD.Text = c.GetString("MONTO_DIA") + l_cuantosc.Text = c.GetString("CLIENTES_DIA") + + D2=B4XPages.MainPage.skmt.ExecQuery("select COUNT(*) AS CUANTOS from PEDIDO ") + D2.Position = 0 + LPT = D2.GetString("CUANTOS") / l_cuantosc.Text + D2.Close + + l_cuantosn.Text = b.GetString("CUANTOS") + efectiva = c.GetString("CLIENTES_DIA") / e.GetString("POR_VISITAR") + l_efectiva.text = Round2(efectiva*100,2) + l_ctast.Text = d.GetString("TOTAL_VISITAR") + d.Close + l_porvisitar.Text = e.GetString("POR_VISITAR") + L_CUANTOST.Text = l_cuantosc.Text + l_cuantosn.Text + drop = L_CUANTOST.Text / l_porvisitar.Text + l_drop.Text = Round(drop * 100) + If L_CUANTOST.Text < 40 Then + ImageView3.Bitmap = LoadBitmap(File.DirAssets, "tache_rojo.png") + Else If L_CUANTOST.Text > = 40 And L_CUANTOST.Text < 50 Then + ImageView3.bitmap = LoadBitmap(File.DirAssets, "alerta_amarilla.png") + Else + ImageView3.Bitmap = LoadBitmap(File.DirAssets, "palomita_verde.png") + End If + L_TICKPROM.Text = Round2((c.GetString("MONTO_DIA") / c.GetString("CLIENTES_DIA")),2) + If c.GetString("MONTO_DIA") < 4000 Then + ImageView5.Bitmap = LoadBitmap(File.DirAssets, "tache_rojo.png") + Else if c.GetString("MONTO_DIA") > = 4000 And c.GetString("MONTO_DIA") < 6250 Then + ImageView5.bitmap = LoadBitmap(File.DirAssets, "alerta_amarilla.png") + Else + ImageView5.Bitmap = LoadBitmap(File.DirAssets, "palomita_verde.png") + End If + b.Close + c.Close + End If + c.Close + b.Close + e.Close + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + C.Position =0 + ALMACEN = C.GetString("ID_ALMACEN") + c.Close + bu.Initialize + batterystatus = bu.BatteryInformation + + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + + B4XPages.MainPage.montoActual = L_MONTOD.Text + B4XPages.MainPage.clientestotal = L_CUANTOST.Text + B4XPages.MainPage.clientesventa = l_cuantosc.Text + B4XPages.MainPage.clientesvisitados = l_porvisitar.TEXT + B4XPages.MainPage.ALMACEN = ALMACEN + B4XPages.MainPage.rutapreventa = l_ruta.text + + '////// Para el usuario global - Chv + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + B4XPages.MainPage.usuario = usuario + c.Close + '/////// + CallSub(Starter, "ENVIA_ULTIMA_GPS") +End Sub + +Sub Subir_Click + CARGA = "SUBIR" + P1.Visible = True + P1.BringToFront + 'trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + L_P_1.Visible = False + S_CC.Visible = False + L_P_3.Visible = False + S_CH.Visible = False + PB1.Visible = False + Resumen.Visible= False + + L_P_2.Text = "Envio de Pedidos" + L_P_3.Text = "Envio de Pedidos" + S_CH.Text = "EN PROCESO" + S_CP.Text = "EN PROCESO" + PB1.Progress = 0 + PB2.Progress = 0 + 'c=skmt.ExecQuery("SELECT sum(IFNULL(PE_DESC,0)) as DESCUENTO FROM PEDIDO") + 'c.Position =0 + 'If c.GetString("DESCUENTO") > 0 And PASO = 0 Then + 'P1.Visible = True + 'ELSE IF c.GetString("DESCUENTO") = 0 Then + PASO = 1 + 'End If + If PASO =1 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE not In (select PE_CLIENTE from pedido)") + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select HGDATE, HGLAT, HGLON from HIST_GPS") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "UPDATE_GUNA_ACTUAL2_GPS" + cmd.Parameters = Array As Object(L_MONTOD.Text, L_CUANTOST.Text, l_cuantosc.Text,l_porvisitar.TEXT,c.GetString("hglat"),c.GetString("hglon"),batterystatus(0),LPT, STEYIN, STEYOUT,ALMACEN,l_ruta.Text ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_visitas") + Next + End If + c.Close + ' PEDIO_CLIENTE + + c=B4XPages.MainPage.skmt.ExecQuery("SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN FROM PEDIDO_CLIENTE ") + d=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDOSC FROM PEDIDO_CLIENTE ") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_pedidos_GV2" + cmd.Parameters = Array As Object(C.GetString("PC_CLIENTE"),C.GetString("PC_FECHA"),C.GetString("PC_USER"),C.GetString("PC_NOART"),C.GetString("PC_MONTO"),C.GetString("PC_LON"),C.GetString("PC_LAT"),ALMACEN,l_ruta.text,C.GetString("PC_COSTO_SIN") ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_pedidos") + Next + End If + c.Close + d.Position=0 + cuantos_pedidosc = D.GetString("CUANTOS_PEDIDOSC") + d.Close + + ' ENVIO DE LOS CODIGOS QR + 'c=skmt.ExecQuery2("SELECT CAT_CL_NUM_SERIEFISICO,CAT_CL_CODIGO ,CAT_CL_LONG,CAT_CL_LAT, CAT_CL_FOTO FROM kmt_info where CAT_CL_NUM_SERIEFISICO = ?", Array As String("OK")) + + + c=B4XPages.MainPage.skmt.ExecQuery("SELECT CODIGOKMTS, CODIGOB, LAT, LON FROM HIST_CODIGO_BARRAS" ) + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_QR_2_GV2" + cmd.Parameters = Array As Object(C.GetString("CODIGOKMTS"),C.GetString("CODIGOB"),C.GetString("LON"),C.GetString("LAT"),ALMACEN,l_ruta.text ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_QR") + Next + End If + c.Close + + + c=B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_CL_NUM_SERIEFISICO,CAT_CL_CODIGO ,CAT_CL_LONG,CAT_CL_LAT, CAT_CL_FOTO FROM kmt_info where CAT_CL_NUM_SERIEFISICO IS NOT NULL") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + 's=skmt.ExecQuery2("SELECT HIST_VI_IMAGEN FROM HIST_VISITAS WHERE HIST_VI_CREDITO =?", Array As String (c.GetString("HIST_VI_CREDITO"))) + 's.Position =0 + foto1 = c.GetBlob("CAT_CL_FOTO") + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_QR_GV2" + cmd.Parameters = Array As Object(C.GetString("CAT_CL_NUM_SERIEFISICO"),C.GetString("CAT_CL_CODIGO"),C.GetString("CAT_CL_LONG"),C.GetString("CAT_CL_LAT"),ALMACEN,l_ruta.text, foto1 ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_QR") + Next + End If + c.Close + + c=B4XPages.MainPage.skmt.ExecQuery("SELECT HE_CLIE, HE_RES, HE_FECHA, HE_TIPO FROM HIST_ENCUESTA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_encuesta" + cmd.Parameters = Array As Object(C.GetString("HE_CLIE"),C.GetString("HE_RES"),C.GetString("HE_FECHA"), c.GetString("HE_TIPO")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + Next + End If + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("SELECT PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO FROM PEDIDO") + d=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDO FROM PEDIDO") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_pedido_GV2" + cmd.Parameters = Array As Object(C.GetString("PE_CEDIS"),ALMACEN,C.GetString("PE_COSTO_TOT"),C.GetString("PE_COSTOU"),C.GetString("PE_CANT"),C.GetString("PE_PRONOMBRE"),C.GetString("PE_PROID"),C.GetString("PE_CLIENTE"),C.GetString("PE_FECHA"),C.GetString("PE_USUARIO"),C.GetString("PE_RUTA"), C.GetString("PE_COSTO_SIN"),C.GetString("PE_DESC"),c.GetString("PE_FOLIO")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_pedido") + Next + End If + c.Close + d.Position=0 + cuantos_pedido = D.GetString("CUANTOS_PEDIDO") + d.Close + + ' NOVENTA + c=B4XPages.MainPage.skmt.ExecQuery("SELECT NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON FROM NOVENTA") + D=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS_NOVENTA FROM NOVENTA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_noventa_GV2" + cmd.Parameters = Array As Object(C.GetString("NV_CLIENTE"),C.GetString("NV_FECHA"),C.GetString("NV_USER"),C.GetString("NV_MOTIVO"),C.GetString("NV_COMM"),C.GetString("NV_LAT"),C.GetString("NV_LON"), ALMACEN, l_ruta.Text) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + Next + End If + c.Close + d.Position=0 + cuantos_noventa = D.GetString("CUANTOS_NOVENTA") + d.Close + + ' GEO CERCA + + c=B4XPages.MainPage.skmt.ExecQuery("Select HGCLIENTE, HGDATE, HGLAT, HGLON from HIST_GEOCERCA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_geocerca_GV2" + cmd.Parameters = Array As Object(C.GetString("HGCLIENTE"),C.GetString("HGDATE"),C.GetString("HGLAT"),C.GetString("HGLON")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + Next + End If + c.Close + + ' LO DEL LIKE + + c=B4XPages.MainPage.skmt.ExecQuery("Select HFCLIENTE, HFALIAS,HFRUTA,HFALMACEN from HIST_FACE") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_face_like_GV2" + cmd.Parameters = Array As Object(C.GetString("HFCLIENTE"),C.GetString("HFALIAS"),C.GetString("HFRUTA"),C.GetString("HFALMACEN")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + Next + End If + c.Close' + ' DROP + t1.Initialize("T1", 30000) ' 1000 = 1 second + t1.Enabled = True + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name ="insert_drop_GV2_2" + cmd.Parameters = Array As Object(usuario,l_ruta.Text,sDate & sTime, l_porvisitar.Text,l_drop.Text,l_efectiva.Text,l_cuantosc.Text,l_cuantosn.Text, L_MONTOD.Text,"ENVIO",ALMACEN) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + img2.Visible =True + PORCENTAJE = Round(100/ (cuantos_noventa + cuantos_pedido + cuantos_pedidosc + 1)) + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Se Actualizaran los datos, Este proceso podria tardar hasta un minuto, gracias "& l_ruta.text , True) + End If +End Sub + +Sub cargar_Click + CARGA = "CARGAR" + img2.Visible =True + L_P_1.Visible = True + S_CC.Visible = True + Btn_Ubicar.Visible=False +' P1.Visible = True + p_principal.Visible = False + Subs.panelVisible(P1, 0, 0) + Subs.centraPanel(P1, Root.Width) + Subs.centraPanelV(P1, Root.Height) +' trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + L_P_3.Visible = True + S_CH.Visible = True + PB1.Visible = True + Resumen.Visible= False + + L_P_1.Text = "Catalogo de Clientes" + L_P_2.Text = "Catalogos de Productos" + L_P_3.Text = "Catalogos Historicos" + S_CC.Text = "EN PROCESO" + S_CH.Text = "EN PROCESO" + S_CP.Text = "EN PROCESO" + PB1.Progress = 0 + PB2.Progress = 0 + 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 cod_result") + B4XPages.MainPage.skmt.ExecNonQuery("delete from hist_gest") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + B4XPages.MainPage.skmt.ExecNonQuery("delete from telefonos") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VENTAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_CLIENTE_CANT_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROMOS_COMP") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_VERIFICACION") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM MARCAS_RUTAS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_STAY_STORE") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GEOCERCA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_MARCAS_CUOTAS") + + 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 + cmd.Initialize + cmd.Name ="insert_drop_GV2_2" + cmd.Parameters = Array As Object(usuario,e_ruta.text,sDate,imei,sTime,"","","","","CARGA",ALMACEN) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + + cmd.Initialize + cmd.Name = "select_cat_gunaprod_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprod") + + cmd.Initialize + cmd.Name = "select_resum_apk_guna" ''' va el nombre de archivo de config + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "resum_apk") ''' donde regresa la info ver job_done + + cmd.Initialize + cmd.Name = "select_cat_paquetes_GV3" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprodp") + + cmd.Initialize + cmd.Name = "select_cat_paquetess_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprodp") + + cmd.Initialize + cmd.Name = "select_cat_detallepa_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "detallepaq") + + cmd.Initialize + cmd.Name = "select_cat_clientes_guna_GV2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "kmt_datos") + + cmd.Initialize + cmd.Name = "select_hist_datos_GV2_2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN,e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_datos") + + cmd.Initialize + cmd.Name = "select_hist_promos_GV2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_promos") + + cmd.Initialize + cmd.Name = "select_hist_cliente_promos_GV2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_cliente_promos") + + cmd.Initialize + cmd.Name = "select_HIST_MARCAS_CUOTAS" + cmd.Parameters = Array As Object( ALMACEN, e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "HIST_MARCAS_CUOTAS") + + If E_RUTA2.text <> "" Then + cmd.Initialize + cmd.Name = "select_cat_clientes_guna_GV2" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "kmt_datos") + + cmd.Initialize + cmd.Name = "select_hist_datos_GV2" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_datos") + + cmd.Initialize + cmd.Name = "select_hist_promos_GV2" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_promos") + + cmd.Initialize + cmd.Name = "select_hist_cliente_promos_GV2" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_cliente_promos") + End If + + cmd.Initialize + cmd.Name = "select_promo_comp_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_comp_promos") + + cmd.Initialize + cmd.Name = "select_verificacion_GV2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "cat_verificacion") + + cmd.Initialize + cmd.Name = "select_fecha" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "fecha") + + cmd.Initialize + cmd.Name = "select_folio_GV2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "folio") + + cmd.Initialize + cmd.Name = "select_marcas_rutas" + cmd.Parameters = Array As Object( ALMACEN, e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "marcas_rutas") + + cmd.Initialize + cmd.Name = "select_CUEST_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "CUESTIONARIO") + + cmd.Initialize + cmd.Name = "select_HIST_CUOTAS" + cmd.Parameters = Array As Object( ALMACEN,e_ruta.text ) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "CUOTAS") + + cmd.Initialize + cmd.Name = "select_comis_cedex" + cmd.Parameters = Array As Object( ALMACEN,e_ruta.text ) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "COMISIONES") + + cargar.Visible = False + 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.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.Green) 'Mod por CHV - 211027 + 'Verificamos que el usuario guardado en BD sea VALIDO. + 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 + StartActivity(Main) + Else If n = "OKCancelado" Then + Msgbox("Usuario Cancelado llamar al administrador","") 'ignore + StartActivity(Main) + Else + Msgbox("Usuario o password No validos","") 'ignore + StartActivity(Main) + End If + Log("***************** "&n) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "kmt_datos" Then 'query tag + 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_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")) + 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)", 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)) + 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)) + Next + Listo1 = 1 + S_CC.Text = "LISTO" + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Catalogo Clientes Actualizados." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "resum_apk" Then 'query tag + 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)) + ' Msgbox("pasa","alo") + Next + Listo1 = 1 + S_CC.Text = "LISTO" + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Catalogo Resumen Actualizado." , True) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "hist_promos" Then 'query tag + 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 + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + 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 + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + 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 + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "hist_comp_promos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_PA_ID As String = records(RESULT.Columns.Get("CAT_PA_ID")) + Dim CAT_PA_MAXPROM As String = records(RESULT.Columns.Get("CAT_PA_MAXPROM")) + Dim CAT_PA_MAXPROMREC As String = records(RESULT.Columns.Get("CAT_PA_MAXPROMREC")) + Dim CAT_PA_MAXPROMCLIE As String = records(RESULT.Columns.Get("CAT_PA_MAXPROMCLIE")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROMOS_COMP(CAT_PA_ID, CAT_PA_MAXPROM, CAT_PA_MAXPROMREC, CAT_PA_MAXPROMCLIE) VALUES (?,?,?,?)", Array As Object (CAT_PA_ID, CAT_PA_MAXPROM,CAT_PA_MAXPROMREC,CAT_PA_MAXPROMCLIE)) + Next + 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 + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "cat_verificacion" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_VE_IDPROD As String = records(RESULT.Columns.Get("CAT_VE_IDPROD")) + Dim CAT_VE_NOMBRE As String = records(RESULT.Columns.Get("CAT_VE_NOMBRE")) + Dim CAT_VE_ORDEN As String = records(RESULT.Columns.Get("CAT_VE_ORDEN")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VERIFICACION(CAT_VE_IDPROD, CAT_VE_NOMBRE,CAT_VE_ORDEN) VALUES (?,?,?)", Array As Object (CAT_VE_IDPROD, CAT_VE_NOMBRE,CAT_VE_ORDEN)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "marcas_rutas" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HVD_MARCA As String = records(RESULT.Columns.Get("HVD_MARCA")) + Dim CLIENTES As String = records(RESULT.Columns.Get("CLIENTES")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO MARCAS_RUTAS(HVD_MARCA, CLIENTES) VALUES (?,?)", Array As Object (HVD_MARCA, CLIENTES)) + Next + End If + End If + + 'CUOTAS + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "CUOTAS" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HC_RUTA As String = records(RESULT.Columns.Get("HC_RUTA")) + Dim HC_CUOTA1 As String = records(RESULT.Columns.Get("HC_CUOTA1")) + Dim HC_CUOTA2 As String = records(RESULT.Columns.Get("HC_CUOTA2")) + Dim HC_CUOTA3 As String = records(RESULT.Columns.Get("HC_CUOTA3")) + Dim HC_CUOTA4 As String = records(RESULT.Columns.Get("HC_CUOTA4")) + Dim HC_CUOTA5 As String = records(RESULT.Columns.Get("HC_CUOTA5")) + Dim HC_CUOTA6 As String = records(RESULT.Columns.Get("HC_CUOTA6")) + Dim HC_META1 As String = records(RESULT.Columns.Get("HC_META1")) + Dim HC_META2 As String = records(RESULT.Columns.Get("HC_META2")) + Dim HC_META3 As String = records(RESULT.Columns.Get("HC_META3")) + Dim HC_META4 As String = records(RESULT.Columns.Get("HC_META4")) + Dim HC_META5 As String = records(RESULT.Columns.Get("HC_META5")) + Dim HC_META6 As String = records(RESULT.Columns.Get("HC_META6")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_CUOTAS(HC_RUTA, HC_CUOTA1,HC_CUOTA2,HC_CUOTA3,HC_CUOTA4,HC_CUOTA5,HC_CUOTA6,HC_META1,HC_META2,HC_META3,HC_META4,HC_META5,HC_META6) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (HC_RUTA, HC_CUOTA1,HC_CUOTA2,HC_CUOTA3,HC_CUOTA4,HC_CUOTA5,HC_CUOTA6,HC_META1,HC_META2,HC_META3,HC_META4,HC_META5,HC_META6)) + Next + + End If + End If + 'COMISIONES + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "COMISIONES" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HCM_TOTAL_V As String = records(RESULT.Columns.Get("HCM_TOTAL_V")) + Dim HCM_TOTAL_VIVE As String = records(RESULT.Columns.Get("HCM_TOTAL_VIVE")) + Dim HCM_TOTAL_GUNA As String = records(RESULT.Columns.Get("HCM_TOTAL_GUNA")) + Dim HCM_TOTAL_BEB As String = records(RESULT.Columns.Get("HCM_TOTAL_BEB")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_COMISIONES_MOVIL (HCM_TOTAL_V , HCM_TOTAL_VIVE , HCM_TOTAL_GUNA , HCM_TOTAL_BEB) VALUES (?,?,?,?)", Array As Object (HCM_TOTAL_V , HCM_TOTAL_VIVE , HCM_TOTAL_GUNA , HCM_TOTAL_BEB)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprod" Then 'query tag + If PB2.Progress < 30 Then S_CP.Text = "CARGANDO" 'Mod por CHV - 20211028 Agregue el "If PB2.Progress < 30 then" + For Each records() As Object In RESULT.Rows + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + ' Dim CAT_GP_DEV As String = records(RESULT.Columns.Get("CAT_GP_DEV")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + Dim CAT_GP_INICIATIVA As Int = records(RESULT.Columns.Get("CAT_GP_INICIATIVA")) +' CAT_GP_INICIATIVA = 5 +' skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_DEV) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_DEV)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_INICIATIVA) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD, CAT_GP_INICIATIVA)) + Next + Listo2=1 + 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 + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Productos Actualizados." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprodp" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + CAT_GP_TIPOPROD = "5" + If CAT_GP_ID = "PAQUNI003" Then + CAT_GP_ALMACEN = 60 + End If + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD)) + 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 + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Promociones Actualizados." , True) + Listo4=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 + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprodps" Then 'query tag + For Each records() As Object In RESULT.Rows + + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + ' + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD)) + Next + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + Log("C4") + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + Log("3") + End If + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Promociones especiales Actualizados." , True) + + Listo4=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 + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "detallepaq" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_DP_ALMACEN As String = records(RESULT.Columns.Get("CAT_DP_ALMACEN")) + Dim CAT_DP_ID As String = records(RESULT.Columns.Get("CAT_DP_ID")) + Dim CAT_DP_IDPROD As String = records(RESULT.Columns.Get("CAT_DP_IDPROD")) + Dim CAT_DP_TIPO As String = records(RESULT.Columns.Get("CAT_DP_TIPO")) + Dim CAT_DP_PZAS As String = records(RESULT.Columns.Get("CAT_DP_PZAS")) + Dim CAT_DP_USUARIO As String = records(RESULT.Columns.Get("CAT_DP_USUARIO")) + Dim CAT_DP_FECHA As String = records(RESULT.Columns.Get("CAT_DP_FECHA")) + Dim CAT_DP_REGALO As String = records(RESULT.Columns.Get("CAT_DP_REGALO")) + Dim CAT_DP_CLASIF As String = records(RESULT.Columns.Get("CAT_DP_CLASIF")) + Dim CAT_DP_PRECIO As String = records(RESULT.Columns.Get("CAT_DP_PRECIO")) + Dim CAT_DP_PRECIO_SIMPTOS As String = records(RESULT.Columns.Get("CAT_DP_PRECIO_SIMPTOS")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_DETALLES_PAQ(CAT_DP_ALMACEN,CAT_DP_ID,CAT_DP_IDPROD,CAT_DP_TIPO,CAT_DP_PZAS,CAT_DP_USUARIO,CAT_DP_FECHA,CAT_DP_REGALO,CAT_DP_CLASIF,CAT_DP_PRECIO,CAT_DP_PRECIO_SIMPTOS) VALUES (?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_DP_ALMACEN,CAT_DP_ID,CAT_DP_IDPROD,CAT_DP_TIPO,CAT_DP_PZAS,CAT_DP_USUARIO,CAT_DP_FECHA,CAT_DP_REGALO,CAT_DP_CLASIF,CAT_DP_PRECIO,CAT_DP_PRECIO_SIMPTOS)) + 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 + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "hist_datos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HVD_CLIENTE As String = records(RESULT.Columns.Get("HVD_CLIENTE")) + Dim HVD_PRONOMBRE As String = records(RESULT.Columns.Get("HVD_PRONOMBRE")) + Dim HVD_CANT As String = records(RESULT.Columns.Get("HVD_CANT")) + Dim HVD_COSTO_TOT As String = records(RESULT.Columns.Get("HVD_COSTO_TOT")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_VENTAS(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT) VALUES (?,?,?,?)", Array As Object (HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT)) + Next + Listo3 =1 + 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 + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Venta historico Actualizado." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "variables" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim Cat_Va_Descripcion As String = records(RESULT.Columns.Get("CAT_VA_DESCRIPCION")) + Dim Cat_Va_Valor As String = records(RESULT.Columns.Get("CAT_VA_VALOR")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object (Cat_Va_Descripcion, Cat_Va_Valor)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "CUESTIONARIO" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim Cat_Va_Valor As String = records(RESULT.Columns.Get("CAT_VALOR")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As Object ("CUESTIONARIO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("CUESTIONARIO", Cat_Va_Valor)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "valida_pedido" Then 'query tag + For Each records() As Object In RESULT.Rows + + Dim CUANTOSP As Int = records(RESULT.Columns.Get("CUANTOSP")) + + If cuantos_pedido < = CUANTOSP Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + S_CP.Text = "INFO OK" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info P. Sync Nuevamente" & CUANTOSP & " " & cuantos_pedido, True) + S_CP.Text = "ENVIAR DATOS (K-2)" + End If + + + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "valida_pedidoc" Then 'query tag + For Each records() As Object In RESULT.Rows + + Dim CUANTOSC As Int = records(RESULT.Columns.Get("CUANTOSC")) + + If cuantos_pedidosc = CUANTOSC Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info C. Sync Nuevamente" & CUANTOSC & " " & cuantos_pedidosc, True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "valida_noventa" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CUANTOSN As Int = records(RESULT.Columns.Get("CUANTOSN")) + If cuantos_noventa = CUANTOSN Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info N. Sync Nuevamente" & CUANTOSN & " " & cuantos_noventa, True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + 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 + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + 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 + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + 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 + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + 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 + 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 + Subir.Visible = False + inv.Visible = False + connecta.Visible = False + ToastMessageShow("Ruta invalida." , True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + 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 + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.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")) + 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 Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "folio" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim FOLIO As String = records(RESULT.Columns.Get("FOLIO")) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FOLIO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FOLIO",FOLIO)) + Next + End If + End If + End If + Job.Release +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + 'Return True to close, False to cancel + If SCROLL_RESDIA.Visible Then + SCROLL_RESDIA.Visible = False + B_OK_RES_Click + Return False + Else + Return True + End If +End Sub + +Sub connecta_Click + connecta1 = connecta1 + 1 + imei = p.GetDeviceId + conn = "1" + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_version_GV2" + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "version") + + ' Cuando nos conectamos verificamos que el usuario guardado en BD sea VALIDO. + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO, PASS from usuarioa") + c.Position=0 + If c.RowCount > 0 And c.GetString("USUARIO") <> "KMTS1" Then + Private usrT As String = c.GetString("USUARIO") + Private passT As String = c.GetString("PASS") + cmd.Initialize + cmd.Name = "select_usuario_guna_GV2_1" + cmd.Parameters = Array As Object(usrT, passT) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "usuarioA") + End If + c.Close + + If imei = "" Then + cmd.Initialize + cmd.Name = "select_ruta_GV2_5" + cmd.Parameters = Array As Object(ALMACEN,e_ruta.text,imei) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ruta") + Else + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_ruta_GV2_5" + cmd.Parameters = Array As Object(ALMACEN,e_ruta.text,imei) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ruta") + End If + + If e_ruta.Text = "KMTS1" Then + cargar.Visible = True + Subir.Visible = True + e_ruta.Text = "" + End If + + If e_ruta.Text = "BERNA1" Then + cargar.Visible = True + Subir.Visible = True + e_ruta.Text = "" + End If + + ToastMessageShow("Validando Conexión." , True) + + If connecta1 / 2 = 1 Then + 'SERVER = "http://177.244.63.54:1782" + 'SERVER = "http://keymon.com.mx:1782" + 'SERVER = "http://201.99.139.28:1782" +' B4XPages.MainPage.SERVER = "http://187.189.244.154:1782" +' SERVER = "http://10.0.0.205:1782" + B4XPages.MainPage.reqManager.Initialize(Me, B4XPages.MainPage.SERVER) + Else + 'SERVER = "http://keymon.com.mx:1782" + 'SERVER = "http://201.99.139.28:1782" + 'SERVER = "http://177.244.63.54:1782" +' B4XPages.MainPage.SERVER = "http://187.189.244.154:1782" +' SERVER = "http://10.0.0.205:1782" + B4XPages.MainPage.reqManager.Initialize(Me, B4XPages.MainPage.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 desa 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") + 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_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprod") + cmd.Initialize + cmd.Name = "select_cat_paquetes_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprodp") + + cmd.Initialize + cmd.Name = "select_cat_detallepa_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "detallepaq") + + cargar.Visible = False + 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_GV2" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "valida_pedido") + + cmd.Initialize + cmd.Name = "select_cuantos_noventa_GV2" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "valida_noventa") + + cmd.Initialize + cmd.Name = "select_cuantos_pedidoc_GV2" + 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 B_OK_PAS_Click + If CARGA = "SUBIR" And S_CP.Text = "INFO OK" Then + P1.Visible = False + Btn_Ubicar.Visible=True + 'trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + Else If CARGA = "SUBIR" And S_CP.Text = "ERROR" Then + Msgbox("Tiene que subir de nuevo la información","Atención") 'ignore + P1.Visible = False + ' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + Else if CARGA = "SUBIR" And S_CP.Text <> "INFO OK" Then + RES = Msgbox2("Seguro que desa abortar el proceso","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + P1.Visible = False +' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + ExitApplication + End If + End If + If CARGA = "CARGAR" And S_CP.Text = "LISTO" And S_CC.Text = "LISTO" And S_CH.Text = "LISTO" Then + P1.Visible = False + Btn_Ubicar.Visible=True + 'trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + Else if CARGA = "CARGAR" And (S_CP.Text <> "LISTO" Or S_CC.Text <> "LISTO" Or S_CH.Text <> "LISTO") Then + RES = Msgbox2("Seguro que desa abortar el proceso","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + P1.Visible = False +' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cod_result") + B4XPages.MainPage.skmt.ExecNonQuery("delete from hist_gest") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + B4XPages.MainPage.skmt.ExecNonQuery("delete from telefonos") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VENTAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_CLIENTE_CANT_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROMOS_COMP") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_VERIFICACION") + ExitApplication + End If + End If +End Sub + +Sub NUEVO_Click + B4XPages.ShowPage("NuevoCliente") +End Sub + +Sub B_OK_RES_Click + ' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel4.Visible = False + SCROLL_RESDIA.Visible = False + Btn_Ubicar.Visible=True + p_principal.Visible = True +End Sub + +Sub Resumen_Click + P_RESUMEN.Visible = True + +' NUEVO.Visible =False +' BUSCA.Visible=False +' connecta.Visible=False +' Subir.Visible=False +' cargar.Visible=False +' Resumen.Visible= False +End Sub + +Sub P_RESUMEN_click + +End Sub + + +Sub CARGA_Click + B4XPages.ShowPage("Productos") +End Sub + +Sub resdia_Click + p_principal.Visible = False + Btn_Ubicar.Visible=False + SCROLL_RESDIA.Visible = True + SCROLL_RESDIA.Panel.LoadLayout("RESDIA") + SCROLL_RESDIA.Panel.Height = Panel4.Height + Panel4.Visible = True + + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + Resumen.Visible= False + + d=B4XPages.MainPage.skmt.ExecQuery2("select COUNT(*) AS CUANTOS FROM HIST_ENCUESTA WHERE HE_TIPO = ?", Array As String("TELEFONO")) + d.Position = 0 + l_encuesta.Text = d.GetString("CUANTOS") + d.Close + + L_MARCAS.CLEAR + d=B4XPages.MainPage.skmt.ExecQuery2("select distinct HE_CLIE AS CLIENTE FROM HIST_ENCUESTA WHERE HE_TIPO = ?", Array As String("TELEFONO")) + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + c=B4XPages.MainPage.skmt.ExecQuery2("Select HE_RES from HIST_ENCUESTA where HE_CLIE = ? AND HE_TIPO = ?", Array As String(d.GetString("CLIENTE"), "TELEFONO")) + c.Position = 0 + Dim label1 As Label + label1 = L_MARCAS.TwoLinesLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = L_MARCAS.TwoLinesLayout.SecondLabel + label2.TextSize = 13 + label2.TextColor = Colors.Black + L_MARCAS.AddTwoLines(d.GetString("CLIENTE"),"TELEFONO :" & c.GetString("HE_RES") ) + c.Close + Next + End If + d.Close + + c=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = ? )", Array As String("RTEC")) + c.Position = 0 + l_monto_k.Text = c.GetString("MONTO_DIA") + If l_monto_k.Text = "null" Then + l_monto_k.Text = "0" + End If + c.Close + + c=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = ? )", Array As String("PING")) + c.Position = 0 + l_monto_kp.Text = c.GetString("MONTO_DIA") + If l_monto_kp.Text = "null" Then + l_monto_kp.Text = "0" + End If + c.Close + +' c=skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = ? )", Array As String("SALTY SNACKS")) +' c.Position = 0 +' l_monto_ks.Text = c.GetString("MONTO_DIA") +' If l_monto_ks.Text = "null" Then +' l_monto_ks.Text = "0" +' End If + ' +' c.Close + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 ") + c.Position = 0 + l_monto_ks.Text = c.GetString("MONTO_DIA") + If l_monto_ks.Text = "null" Then + l_monto_ks.Text = "0" + End If + c.Close + Dim cuantos_obj As String + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) AS TOTAL from HIST_MARCAS_CUOTAS ") + c.Position = 0 + cuantos_obj = c.GetString("TOTAL") + c.Close + + If cuantos_obj > 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("Select SUM( HMC_TOTAL) AS TOTAL from HIST_MARCAS_CUOTAS ") + c.Position = 0 + L_NES.Text = c.GetString("TOTAL") + c.Close + End If + L_REAL.Text = l_monto_ks.Text + L_ALCANCE.Text = Round2((L_NES.Text / L_REAL.Text + 1),2) + L_VPLAN.Text = l_porvisitar.Text + L_VREAL.Text = L_CUANTOST.text + L_EFEC_VIS.Text = Round2(L_VREAL.text / L_VPLAN.Text,2) + L_VISITCC.Text = l_cuantosc.text + L_EFEC_PV.Text = Round2(L_VISITCC.Text / L_VREAL.Text,2) + L_EFEC_PURA.Text = Round2(L_VISITCC.Text / L_VPLAN.Text,2) + L_LIN_TICK.Text = LPT + If l_monto_ks.Text <> "0" Then + + c=B4XPages.MainPage.skmt.ExecQuery2("Select COUNT(DISTINCT(PE_CLIENTE)) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = ? ", Array As String(ALMACEN)) + c.Position = 0 + L_CTE_PROMO.Text = c.GetString("CUANTOS") + c.Close + d=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPOPROD = ?) ", Array As String("PRIORITARIO")) + d.Position = 0 + '/////////////////////////////////////////////////////////////////////////////// + '//////////////////////////// ULTIMA LINEA ANTES DEL ERROR ////////////////// + '////////// java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference + ' + '/// Al parecer d.GetString("MONTO_DIA") regresa null y la funcion numberFormat truena + '///////////////////////////////////////////////////////////////////////////////// + Log("|"&d.GetString("MONTO_DIA")&"|") + 'L_PRIO.Text = NumberFormat(d.GetString("MONTO_DIA"),0,2) + L_PRIO.Text = d.GetString("MONTO_DIA") + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPOPROD = ?) ", Array As String("ESTRATEGICO")) + d.Position = 0 + L_SECUND.Text =d.GetString("MONTO_DIA") + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPOPROD = ?) ", Array As String("COMPLEMETARIO")) + d.Position = 0 + L_COMP.Text =d.GetString("MONTO_DIA") + d.Close + Else + L_PRIO.Text = "0" + L_SECUND.Text = "0" + L_COMP.Text = "0" + End If + + c=B4XPages.MainPage.skmt.ExecQuery("Select COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID ") + c.Position = 0 + If c.GetString("CUANTOS") > 0 Then + d=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID ") + d.Position = 0 + L_CTE_PROMO.Text = d.GetString("CUANTOS") + d.Close + L_REDEN_PROMO.TEXT = Round2(L_VISITCC.Text / L_CTE_PROMO.Text,2) + Else + L_CTE_PROMO.Text = 0 + L_REDEN_PROMO.Text = 0 + End If + c.Close + d=B4XPages.MainPage.skmt.ExecQuery("Select COUNT(*) AS CUANTOS FROM PEDIDO ") + d.Position = 0 + L_LIN_TICK.Text = Round2(d.GetString("CUANTOS") / L_VISITCC.Text,2) + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from HIST_CUOTAS ") + d.Position = 0 + If d.GetString("CUANTOS") > 0 Then + ' c=skmt.ExecQuery("Select HC_CUOTA1,HC_CUOTA2,HC_CUOTA3 from HIST_CUOTAS ") + ' c.Position = 0 + ' l_monto_c1.Text = Round( c.GetString("HC_CUOTA1") / 6) + ' l_monto_c2.Text = Round(c.GetString("HC_CUOTA2") / 6) + ' l_monto_c3.Text = Round(c.GetString("HC_CUOTA3") / 6) + ' c.Close + Else + l_monto_c1.Text = 4000 + l_monto_c2.Text = 2000 + l_monto_c3.Text = 1000 + End If + d.Close +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 + B4XPages.ShowPage("MapaRutas") +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 + +Sub B_COMM_Click + Btn_Ubicar.Visible=False + SCROLL_RESDIA.Visible = True + SCROLL_RESDIA.Panel.LoadLayout("COMIS") + SCROLL_RESDIA.Panel.Height = Panel_C.Height + Panel4.Visible = False + Panel_C.Visible = True + +' trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + Resumen.Visible= False +' + If l_ruta.Text <> 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("Select HCM_TOTAL_V , HCM_TOTAL_VIVE , HCM_TOTAL_GUNA , HCM_TOTAL_BEB from HIST_COMISIONES_MOVIL ") + c.Position = 0 + L_TOTAL_BA.Text = c.GetString("HCM_TOTAL_BEB") + L_TOTAL_GUNA.Text = c.GetString("HCM_TOTAL_GUNA") + L_TOTAL_MM.Text = c.GetString("HCM_TOTAL_V") + L_TOTAL_VIVE.Text = c.GetString("HCM_TOTAL_VIVE") + c.Close + L_TOTAL_COMIS.Text = 0 + Else + L_TOTAL_BA.Text = 0 + L_TOTAL_GUNA.Text = 0 + L_TOTAL_MM.Text = 0 + L_TOTAL_VIVE.Text = 0 + L_TOTAL_COMIS.Text = 0 + End If +End Sub + +Sub B_OK_COMISS_Click + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel_C.Visible = False + SCROLL_RESDIA.Visible = False + Btn_Ubicar.Visible=True +End Sub + + +Sub B_MARCAS_Click + + SCROLL_RESDIA.Visible = False + Panel5.Visible = True + pnlTitle.Visible = False + pnlTitle.SetLayoutAnimated(0, 0, 0, CLV1.AsView.Width, TitleHeight + DividerHeight) + pnlTitle.LoadLayout("CellTitle") + c=B4XPages.MainPage.skmt.ExecQuery("Select CAT_GP_CLASIF, SUM(TOTAL) AS TOTAL FROM TOTAL_MARCAS GROUP BY CAT_GP_CLASIF") + CLV1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + AddTitle(c.GetString("CAT_GP_CLASIF")) + If c.GetString("CAT_GP_CLASIF") = "PROMOS" Then + d=B4XPages.MainPage.skmt.ExecQuery("SELECT SUM(PE_CANT) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID") + d.Position=0 + CLV1.AddTextItem("CANTIDAD DE PROMOS = " & d.GetString("CUANTOS"),"1") + d.Close + Else + f=B4XPages.MainPage.skmt.ExecQuery2("select COUNT(*) AS CUANTOS from HIST_MARCAS_CUOTAS where HMC_MARCA = ?", Array As String(c.GetString("CAT_GP_CLASIF"))) + f.Position=0 + If f.GetString("CUANTOS") > 0 Then + e=B4XPages.MainPage.skmt.ExecQuery2("select HMC_MARCA, HMC_TOTAL from HIST_MARCAS_CUOTAS where HMC_MARCA = ?", Array As String(c.GetString("CAT_GP_CLASIF"))) + e.Position=0 + d=B4XPages.MainPage.skmt.ExecQuery2("SELECT count(distinct(PE_CLIENTE)) AS CUANTOS FROM PEDIDO WHERE PE_PROID in (select CAT_GP_ID from cat_gunaprod WHERE CAT_GP_CLASIF =?)", Array As String (c.GetString("CAT_GP_CLASIF"))) + d.Position=0 + CLV1.AddTextItem("TOTAL PREVENTA = $" & c.GetString("TOTAL"),"1") + CLV1.AddTextItem("M E T A = $" & e.GetString("HMC_TOTAL"),"1") + CLV1.AddTextItem("FALTA = $" & (e.GetString("HMC_TOTAL") - c.GetString("TOTAL")) ,"1") + CLV1.AddTextItem("CLIENTES = " & d.GetString("CUANTOS"),"1") + d.Close + e.Close + Else + d=B4XPages.MainPage.skmt.ExecQuery2("SELECT count(distinct(pe_cliente)) AS CUANTOS FROM PEDIDO WHERE PE_PROID in (select CAT_GP_ID from cat_gunaprod WHERE CAT_GP_CLASIF =?)", Array As String (c.GetString("CAT_GP_CLASIF"))) + d.Position=0 + CLV1.AddTextItem("TOTAL PREVENTA = $" & c.GetString("TOTAL"),"1") + CLV1.AddTextItem("M E T A = $" & "1000","1") + CLV1.AddTextItem("FALTA = $" & (1000 - c.GetString("TOTAL")) ,"1") + CLV1.AddTextItem("CLIENTES = " & d.GetString("CUANTOS"),"1") + d.Close + End If + f.Close + End If + Next + End If + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("Select HMC_MARCA, HMC_TOTAL from HIST_MARCAS_CUOTAS where HMC_MARCA not in (SELECT CAT_GP_CLASIF FROM TOTAL_MARCAS )") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + AddTitle(c.GetString("HMC_MARCA")) + CLV1.AddTextItem("TOTAL PREVENTA = $ 0.00","1") + CLV1.AddTextItem("M E T A = $" & C.GetString("HMC_TOTAL"),"1") + CLV1.AddTextItem("CLIENTES = 0","1") + Next + End If + c.Close +End Sub + +Sub AddTitle (Title As String) + Dim p_MARCAS As B4XView = xui.CreatePanel("") + p_MARCAS.SetLayoutAnimated(0, 0, 0, CLV1.AsView.Width, TitleHeight) + p_MARCAS.LoadLayout("CellTitle") + lblTitle.Text = Title + Dim td As TitleData + td.Title = Title + CLV1.Add(p_MARCAS, td) +End Sub + +Sub B_OK_PANEL5_Click + Panel5.Visible = False + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel4.Visible = False + SCROLL_RESDIA.Visible = False + Btn_Ubicar.Visible=True + p_principal.Visible = True + +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/B4XProductos.bas b/B4A/B4XProductos.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XProductos.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/B4XTicketsDia.bas b/B4A/B4XTicketsDia.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XTicketsDia.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/B4XUpdateAvailable.bas b/B4A/B4XUpdateAvailable.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XUpdateAvailable.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/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_Bitacora.bas b/B4A/C_Bitacora.bas new file mode 100644 index 0000000..6eb3dfe --- /dev/null +++ b/B4A/C_Bitacora.bas @@ -0,0 +1,240 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=12.8 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Dim db As SQL + Private Root2 As B4XView + Dim p_transparenteInicioFin2 As Panel + Dim b_Inicio_Fin_venta2 As Button + Dim contadorIniciarVenta, precision As Int + Dim IniVenNO, dentroDeGeocerca, enVenta As Boolean + Dim motivoNoVenta, motivoNoVisita As String + Dim banderaGeoCerca As String + Private reqManager As DBRequestManager +End Sub + +'You can add more parameters here. +Public Sub Initialize (vCallback As Object, vEventName As String, vRoot As B4XView, db1 As SQL, DBReq As DBRequestManager) As Object + db = db1 + Root2 = vRoot + reqManager = DBReq + db.ExecNonQuery("CREATE TABLE IF NOT EXISTS BITACORAGPS(fechab TEXT, usuariob TEXT, almacenb TEXT, rutab TEXT, eventob TEXT, clienteb TEXT, iniciob TEXT, finb TEXT, latitudb TEXT, longitudb TEXT, precision TEXT, motivonoventa TEXT, motivonovisita TEXT, BAN_GEOB TEXT)") + agregaColumna("BITACORAGPS", "BAN_GEOB", "TEXT") + contadorIniciarVenta = 0 + cargamosPanel + 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. + +'En geocerca si mete la contraseña poner 0 en precision gps y si esta dentro de los 50 mts poner 1 y 2 para eventos que no lo ocupen +'Mandar fecha de sync(sysdate) +Sub mandaBitacora(fechab As String, usuariob As String, almacenb As String, rutab As String, eventob As String, clienteb As String, iniciob As String, finb As String, latitudb As String, longitudb As String, precisionb As String, motivoNoVentab As String, motivoNoVisitab As String, BAN_GEOB As String) + Log(motivoNoVisitab) +' Log("bitacora") + Private cmd As DBCommand + cmd.Initialize + cmd.Name = "mandaBitacora3_GUNA" +' Log("BITACORA3") + Private nombreCliente As String = traeNombreCliente(clienteb) + If eventob = "Llega a almacen" Then + nombreCliente = "BOLETA" + clienteb = "" + finb = iniciob + End If + If eventob = "Salida almacen" Then nombreCliente = "CHECKLIST" + If eventob = "Fin Día" Then nombreCliente = "FIN DIA" + If eventob = "Carga día" Then nombreCliente = "CARGA DIA" + If eventob = "Carga día suplencia" Then nombreCliente = traeRutasSup + If eventob <> "Termina Venta" And eventob <> "No Venta" Then + db.ExecNonQuery($"INSERT INTO BITACORAGPS (fechab, usuariob , almacenb , rutab , eventob , clienteb , iniciob , finb , latitudb, longitudb , precision , motivonoventa , motivonovisita, BAN_GEOB) VALUES ('${fechab}' ,'${usuariob}' , '${almacenb}' , '${rutab}' , '${eventob}' , '${clienteb}' , '${iniciob}' , '${finb}' , '${latitudb}' , '${longitudb}' , '${precisionb}' , '${motivoNoVentab}' , '${motivoNoVisitab}', '${BAN_GEOB}')"$) + Else + Private e As Cursor = db.ExecQuery($"select fechab from BITACORAGPS where usuariob = '${usuariob}' and almacenb = '${almacenb}' and rutab = '${rutab}' and clienteb = '${clienteb}' and eventob = 'Inicia Venta' order by fechab desc"$) + If e.RowCount > 0 Then + e.Position = 0 + Log("ACTUALIZA BITACORA") + If eventob = "Termina Venta" Then + db.ExecNonQuery($"update BITACORAGPS set finb = '${finb}' where rutab = '${rutab}' and almacenb = '${almacenb}' and usuariob = '${usuariob}' and clienteb = '${clienteb}' and fechab = '${e.GetString("fechab")}' "$) + cmd.Parameters = Array As Object(finb, rutab, almacenb, usuariob, clienteb, "Inicia Venta", e.GetString("fechab")) + else if eventob = "No Venta" Then + db.ExecNonQuery($"update BITACORAGPS set finb = '${finb}', motivonoventa = '${motivoNoVentab}', motivonovisita = '${motivoNoVisitab}' where rutab = '${rutab}' and almacenb = '${almacenb}' and usuariob = '${usuariob}' and clienteb = '${clienteb}' and fechab = '${e.GetString("fechab")}' "$) + cmd.Parameters = Array As Object(finb, motivoNoVentab, motivoNoVisitab, rutab, almacenb, usuariob, clienteb, "Inicia Venta", e.GetString("fechab")) + End If + End If + End If + If eventob <> "Inicia Venta" Then + Private c As Cursor = db.ExecQuery($"select * from BITACORAGPS where usuariob = '${usuariob}' and almacenb = '${almacenb}' and rutab = '${rutab}' and clienteb = '${clienteb}' order by fechab desc"$) + If c.RowCount > 0 Then + c.Position = 0 + cmd.Parameters = Array As Object(c.GetString("almacenb"), c.GetString("usuariob"), c.GetString("rutab"), c.GetString("eventob"), c.GetString("clienteb"), nombreCliente, c.GetString("iniciob"), c.GetString("finb"), c.GetString("latitudb"), c.GetString("longitudb"), c.GetString("precision"), c.GetString("motivonoventa"), c.GetString("motivonovisita"), c.GetString("fechab"), c.GetString("BAN_GEOB")) + reqManager.ExecuteCommand(cmd , "mandaBitacora") + End If + End If +' Log("Mandamos bitacora") +End Sub + +'Regresa el nombre del cliente del id dado. +Sub traeNombreCliente(id As String) As String + Private c As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select CAT_CL_NOMBRE from kmt_info3 where CAT_CL_CODIGO = '${id}'"$) + Private n As String = "N/A" + Do While c.NextRow + n = c.GetString("CAT_CL_NOMBRE") + Loop + Return n +End Sub + +'Regresa la ruta actual de la base de datos. +Sub traeRutasSup As String + Dim c As Cursor + Dim rutas As String + rutas = "" + + c = B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_CL_RUTA FROM kmt_info3") + + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + rutas = rutas & c.GetString("CAT_CL_RUTA") & ", " + Next + If rutas.Length > 0 Then rutas = rutas.SubString2(0, rutas.Length - 2) + End If + + c.Close + Return rutas +End Sub + +'Muestra u oculta el boton de inicio y fin de venta +Sub inicioFin + LogColor($">>>>>>>>>>>> XX EN VENTA : ${enVenta} <<<<<<<<<<<<"$, Colors.Blue) + Log(b_Inicio_Fin_venta2.Text) + If enVenta = False Then + p_transparenteInicioFin2.BringToFront + p_transparenteInicioFin2.Visible = True +' b_Inicio_Fin_venta2.Text = "INICIAR VENTA" +' Log("Hacemos visible el boton de Inicio Venta") + Else + If b_Inicio_Fin_venta2.Text <> "TERMINAR VENTA" Then + p_transparenteInicioFin2.Visible = False +' b_Inicio_Fin_venta2.Visible = False + End If + End If +End Sub + +Private Sub b_Inicio_Fin_venta2_Click +' b_Inicio_Fin_venta.Visible = False +' Subs.bitacora(Subs.fechanormal(DateTime.Now), usuario, Subs.traeAlmacen, Subs.traeRuta, "Pre-venta", "0", Subs.fechanormal(DateTime.Now), Subs.fechanormal(DateTime.Now), B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, precision, "", "") + contadorIniciarVenta = 0 + IniVenNO = False + If dentroDeGeocerca Then precision = 1 +' LogColor("-------> "&contadorIniciarVenta & " <-------", Colors.Red) + LogColor($">>>>>>>>>>>> EN VENTA : ${enVenta} <<<<<<<<<<<<"$, Colors.Blue) + motivoNoVenta = "" + motivoNoVisita = "" + p_transparenteInicioFin2.Visible = False + If b_Inicio_Fin_venta2.Text = "TERMINAR VENTA" Then + mandaBitacora(Subs.fechanormal(DateTime.Now), Subs.traeUsuarioDeBD, Subs.traeAlmacen, Subs.traeRutaBitacora, "Termina Venta", Subs.traeCliente, "", Subs.fechanormal(DateTime.Now), B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, precision, motivoNoVenta, motivoNoVisita, banderaGeoCerca) + enVenta = False + LogColor($">>>>>> EN VENTA: ${enVenta}"$, Colors.red) + iniciamosVenta + B4XPages.ShowPageAndRemovePreviousPages("Principal") +' guardadoventa + Else if b_Inicio_Fin_venta2.Text = "INICIAR VENTA" Then + contadorIniciarVenta = 0 + IniVenNO = False + contadorIniciarVenta = contadorIniciarVenta + 1 + If contadorIniciarVenta = 1 And IniVenNO = False And motivoNoVenta <> "NO VENTA" Then + IniVenNO = True + mandaBitacora(Subs.fechanormal(DateTime.Now), Subs.traeUsuarioDeBD, Subs.traeAlmacen, Subs.traeRutaBitacora, "Inicia Venta", Subs.traeCliente, Subs.fechanormal(DateTime.Now), "", B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, precision, "", "", banderaGeoCerca) + enVenta = True + LogColor($">>>>>> EN VENTA: ${enVenta}"$, Colors.red) +' LogColor($">>>>>> INICIA VENTA: ${Starter.enVenta} - ${Subs.traeCliente}"$, Colors.red) + Else If contadorIniciarVenta = 1 And IniVenNO = False And motivoNoVenta = "NO VENTA" Then + IniVenNO = True + mandaBitacora(Subs.fechanormal(DateTime.Now), Subs.traeUsuarioDeBD, Subs.traeAlmacen, Subs.traeRutaBitacora, "Inicia Venta", Subs.traeCliente, Subs.fechanormal(DateTime.Now), "", B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, precision, motivoNoVenta, "", banderaGeoCerca) + enVenta = True + LogColor($">>>>>> EN VENTA: ${enVenta}"$, Colors.red) + Else If contadorIniciarVenta > 1 Then + p_transparenteInicioFin2.Visible = False + End If + End If + p_transparenteInicioFin2.Visible = False + LogColor($">>>>>>>>>>>> EN VENTA : ${enVenta} <<<<<<<<<<<<"$, Colors.Blue) +End Sub + +'Cargamos el layout del panel. +private Sub cargamosPanel + Log(p_transparenteInicioFin2.IsInitialized) +' Log(p_transparenteInicioFin2.) + If Not(p_transparenteInicioFin2.IsInitialized) Then + LogColor(">>>>>>> CARGAMOS PANEL BITACORA", Colors.red) + Root2.LoadLayout("inicioFinVenta") + p_transparenteInicioFin2.Width = Root2.Width + p_transparenteInicioFin2.Height = Root2.Height + b_Inicio_Fin_venta2.top = 700 + b_Inicio_Fin_venta2.Left = 5 + b_Inicio_Fin_venta2.Width = Root2.Width - 20 + b_Inicio_Fin_venta2.Text = "INICIAR VENTA" + p_transparenteInicioFin2.BringToFront + End If +End Sub + +Sub p_transparenteInicioFin2_click + +End Sub + +' Ponemos el texto del boton en "INICIAR VENTA" y enVenta en Falso . +Sub iniciamosVenta + enVenta = False + b_Inicio_Fin_venta2.Text = "INICIAR VENTA" +End Sub + +Sub agregaColumna(tabla As String, columna As String, tipo As String) 'ignore + 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 +' Log(1) + 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 + Log(2) + End Try +End Sub + +'Borra los datos de la tabla BITACORAGPS +Sub borraDatosBitacora + db.ExecNonQuery("DELETE FROM BITACORAGPS") +End Sub + +Sub JobDone(Job As HttpJob) + Log("JOBDONE BITACORA") + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + Log($"Tag: ${RESULT.tag}, success=${Job.Success}"$) + End If + 'Log(Job.Tag) + If Job.Success = False Then +' Log("JOBDONE ERROR") + LogColor("Error: " & Job.ErrorMessage, Colors.red) + Else 'If Job Success then ... +' Log("JOBDONE SUCCESS") + End If +End Sub diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas new file mode 100644 index 0000000..3be8ffc --- /dev/null +++ b/B4A/C_Cliente.bas @@ -0,0 +1,6178 @@ +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 + Private p_cliente As Panel + Dim cuest As C_Cuestionario + 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 + Dim MAC_IMPRESORA As String + Dim btAdmin As BluetoothAdmin + Dim Printer1 As EscPosPrinter + + 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 Guardar 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 + 'Private qr As QRCode + 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_GUARDA_C As Button + Private b_venta As Button + Dim ALMACEN As String + Dim 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 As RadioButton + Private RB2 As RadioButton + Private RB3 As RadioButton + Private RB4 As RadioButton + Private RB5 As RadioButton + + Private stay_hh As String + Private stay_mi As String + Private stay_ss As String + + Private LA_GEO As Label + Dim result As Int + Private cercavalor As String + Private LA_RUTA As String + + Private b_like As Button + Private B_GPS As Button + Dim sc As JhsIceZxing1 + Dim CODIGO As String + Private SV_ENCUESTA As ScrollView + Private RB1_E1 As RadioButton + Private RB2_E1 As RadioButton + Private RB3_E1 As RadioButton + Private CHB1 As CheckBox + Private CHB2 As CheckBox + Private CHB3 As CheckBox + Private Panel5 As Panel + Private B_guardaencuesta As Button + Private RadioButton1 As RadioButton + Private RadioButton2 As RadioButton + Private RadioButton3 As RadioButton + Private RadioButton4 As RadioButton + Private RadioButton5 As RadioButton + Private RadioButton6 As RadioButton + Private RadioButton7 As RadioButton + Private RadioButton8 As RadioButton + Private RadioButton9 As RadioButton + Private RadioButton10 As RadioButton + Private RadioButton11 As RadioButton + Private RadioButton12 As RadioButton + Private RadioButton13 As RadioButton + Private RadioButton14 As RadioButton + Private CheckBox1 As CheckBox + Private CheckBox2 As CheckBox + Private CheckBox3 As CheckBox + Private CheckBox4 As CheckBox + Private CheckBox5 As CheckBox + Private CheckBox6 As CheckBox + Private CheckBox7 As CheckBox + Private CheckBox8 As CheckBox + Dim encuentasmapa As Map + Private p6 As EditText + Private p7 As EditText + Private p8 As EditText + Private Panel7 As Panel + Private RadioButton17 As RadioButton + Private RadioButton16 As RadioButton + Private RadioButton15 As RadioButton + Private B_guardaencuesta_m2 As Button + Private et_p1_m2 As EditText + Private et_p2_m2 As EditText + Private RB7_P6_M2 As RadioButton + Private RB6_P6_M2 As RadioButton + Private RB5_P6_M2 As RadioButton + Private RB4_P6_M2 As RadioButton + Private RB3_P6_M2 As RadioButton + Private RB2_P6_M2 As RadioButton + Private RB1_P6_M2 As RadioButton + Private et_p5_m2 As EditText + Private rd3_p4_m2 As RadioButton + Private rd2_p4_m2 As RadioButton + Private rd1_p4_m2 As RadioButton + Private RB1_P3_M2 As RadioButton + Private RB2_P3_M2 As RadioButton + Private RB3_P3_M2 As RadioButton + Private RB4_P3_M2 As RadioButton + Private ET_P3_M2 As EditText + Private Panel7_M2 As Panel + Private P4_M2 As String + Private P3_M2 As String + Private P6_M2 As String + + Private CB1_P3_M2 As CheckBox + Private CB2_P3_M2 As CheckBox + Private CB3_P3_M2 As CheckBox + Private CB4_P3_M2 As CheckBox + Private CB5_P3_M2 As CheckBox + Private CB6_P3_M2 As CheckBox + Private EXISTE2 As String + Private EXISTE3 As String + Private EXISTE4 As String + Private EXISTE5 As String + Private et_p1_m3 As EditText + Private et_p2_m3 As EditText + Private CB1_P3_M3 As CheckBox + Private CB2_P3_M3 As CheckBox + Private CB3_P3_M3 As CheckBox + Private CB4_P3_M3 As CheckBox + Private CB5_P3_M3 As CheckBox + Private CB1_P4_M3 As CheckBox + Private CB2_P4_M3 As CheckBox + Private CB3_P4_M3 As CheckBox + Private CB4_P4_M3 As CheckBox + Private CB5_P4_M3 As CheckBox + Private rd1_p5_m3 As RadioButton + Private rd2_p5_m3 As RadioButton + Private CB1_P6_M3 As CheckBox + Private CB2_P6_M3 As CheckBox + Private CB3_P6_M3 As CheckBox + Private CB4_P6_M3 As CheckBox + Private CB5_P6_M3 As CheckBox + Private CB6_P6_M3 As CheckBox + Private ET_P6_M3 As EditText + Private CB1_P7_M3 As CheckBox + Private CB2_P7_M3 As CheckBox + Private CB3_P7_M3 As CheckBox + Private CB4_P7_M3 As CheckBox + Private CB1_P8_M3 As CheckBox + Private CB2_P8_M3 As CheckBox + Private CB4_P8_M3 As CheckBox + Private RB1_P9_M3 As RadioButton + Private RB2_P9_M3 As RadioButton + Private RB3_P9_M3 As RadioButton + Private RB4_P9_M3 As RadioButton + Private RB5_P9_M3 As RadioButton + Private B_guardaencuesta_m3 As Button + Private P_gallina As Panel + Private b_acepta_gallina As Button + Private B_CANCELA_GALLINA As Button + Private B_GALLINA As Button + Private la_cuenta_gallina As Label + Private cb_pregunta As B4XComboBox + Dim girotienda As String + Private p_pregunta1 As Panel + Private b_preguntag As Button + Private EN_QUE_ENCUESTA As String + Private ENCUESTA As String + Private et_p1_m4 As EditText + Private et_p2_m4 As EditText + Private cb_p3_m4 As B4XComboBox + Private cb_p4_1_m4 As B4XComboBox + Private cb_p4_2_m4 As B4XComboBox + Private cb_p4_3_m4 As B4XComboBox + Private cb_p4_4_m4 As B4XComboBox + Private cb_p4_5_m4 As B4XComboBox + Dim itemselect2 As String + Dim itemselect3 As String + Dim itemselect4 As String + Dim itemselect5 As String + Dim itemselect6 As String + Dim itemselect7 As String + Private B_guardaencuesta_m4 As Button + Private p_modulo5 As Panel + Private cb_p1_m5 As B4XComboBox + Private cb_p2_m5 As B4XComboBox + Private cb_p3_m5 As B4XComboBox + Private cb_p4_m5 As B4XComboBox + Private cb_p5_m5 As B4XComboBox + Private cb_p6_m5 As B4XComboBox + Private cb_p7_m5 As B4XComboBox + Private cb_p8_m5 As B4XComboBox + Private cb_p9_m5 As B4XComboBox + Dim itemselect8 As String + Dim itemselect9 As String + Dim itemselect10 As String + Dim itemselect11 As String + Dim itemselect12 As String + Dim itemselect13 As String + Dim itemselect14 As String + Dim itemselect15 As String + Dim itemselect16 As String + Private B_guardaencuesta_m5 As Button + Dim PASA As String + Private RB1_P4_M2 As RadioButton + Private RB2_P4_M2 As RadioButton + Private panel7_p4_m2 As Panel + Private CB1_P4_M2 As CheckBox + Private CB2_P4_M2 As CheckBox + Private CB3_P4_M2 As CheckBox + Private CB4_P4_M2 As CheckBox + Private Panel4 As Panel + Private B_GUARDA_CE_PED As Button + + + Private KP_01 As CheckBox + Private KP_02 As CheckBox + Private KP_03 As CheckBox + Private KP_04 As CheckBox + Private KP_05 As CheckBox + Private KP_06 As CheckBox + Private KP_07 As CheckBox + Private KP_08 As CheckBox + Private KP_09 As CheckBox + Private KP_10 As CheckBox + Private KP_11 As CheckBox + Private KP_12 As CheckBox + Private KP_13 As CheckBox + Private KP_14 As CheckBox + Private KP_15 As CheckBox + Private KP_16 As CheckBox + Private KP_17 As CheckBox + Private KP_18 As CheckBox + Private KP_19 As CheckBox + Private KP_20 As CheckBox + + Private KG_01 As CheckBox + Private KG_02 As CheckBox + Private KG_03 As CheckBox + Private KG_04 As CheckBox + Private KG_05 As CheckBox + Private KG_06 As CheckBox + + Private PK_01 As CheckBox + Private PK_02 As CheckBox + Private PK_03 As CheckBox + Private PK_04 As CheckBox + Private PK_05 As CheckBox + Private PK_06 As CheckBox + Private PK_07 As CheckBox + Private PK_08 As CheckBox + + Private HPG_01 As CheckBox + Private HPG_02 As CheckBox + Private HPG_03 As CheckBox + Private HPG_04 As CheckBox + Private HPG_05 As CheckBox + Private HPG_06 As CheckBox + Private HPG_07 As CheckBox + Private HPG_08 As CheckBox + Private HPG_09 As CheckBox + Private HPG_10 As CheckBox + + Private HC_01 As CheckBox + Private HC_02 As CheckBox + Private HC_03 As CheckBox + Private HC_04 As CheckBox + + Private B_01 As CheckBox + Private B_02 As CheckBox + + Private CH_FACTURA As CheckBox + Private que_modulo As String + Private CUENTA_MODULO As String + Private rb1_m3_p1 As RadioButton + Private RB2_M3_P1 As RadioButton + Private RB3_M3_P1 As RadioButton + Private RB4_M3_P1 As RadioButton + Private RB1_M3_P2 As RadioButton + Private RB2_M3_P2 As RadioButton + Private RB3_M3_P2 As RadioButton + Private RB4_M3_P2 As RadioButton + Private et_p2_m3_1 As EditText + Dim textemp2 As String ="" + Dim textemp3 As String ="" + Dim textemp4 As String ="" + Dim textemp5 As String ="" + Dim textemp6 As String ="" + Dim textemp7 As String ="" + Dim textemp8 As String ="" + Private CB3_P8_M3 As CheckBox + Private CB7_P6_M3 As CheckBox + Private p_m1 As Panel + Private p_m2 As Panel + Private p_m3 As Panel + Private p_m4 As Panel + Dim impresoraConectada As Boolean = False + Dim errorImpresora As Int = 0 + Dim idencuestaaguardar As String + 'Encuestas + Private botonPresionado As Int + Private encuestaRes As String + Dim indicePregunta As Int + Dim TOMAR_FOTO As String + Dim CURSOR_FOTO As Int + Dim id_encuesta As String + Private chk_1_valor As String + Private chk_2_valor As String + Private chk_3_valor As String + Private Panel10 As Panel + Private b_chk_e As Button + Private chk_3 As CheckBox + Private chk_2 As CheckBox + Private Chk_1 As CheckBox + Private l_chk_e As Label + Private Label28 As Label + Private p_encuesta As Panel + Private b_encuesta_continuar As Button + Private b_encuesta_3 As Button + Private b_encuesta_2 As Button + Private b_encuesta_1 As Button + Private et_encuesta As EditText + Private l_txtEncuesta As Label + Private l_titEncuesta As Label + Private ImageView11 As ImageView + Dim distance As Long + Private p_pideGeoPass As Panel + Private b_geopass As Button + Private et_geopass As EditText + Private l_geopass As Label + Dim reqManager As DBRequestManager + + Private camEx As CameraExClass + Dim frontCamera As Boolean = False + Private p_cam As Panel + Dim nombrefoto As String = "0" + Private p_camara As Panel + Private teclado As IME + Dim fototomada As String + Private b_foto As Button + Dim precision As String + Dim b_Inicio_Fin_venta As Button + + Dim dentroDeGeocerca As Boolean = False + Dim motivoNoVenta, motivoNoVisita As String + Dim contadorIniciarVenta As Int = 0 + Dim IniVenNO As Boolean = False + Private geoCont As Int = 0 + Private l_version As Label + +' Dim p_transparenteInicioFin As Panel +' Dim b_geo As String + + Private b_preventa As Button + Dim bitacora As C_Bitacora + Dim p_transparenteTicketImpreso As Panel + Private et_codigoAutorizacion As EditText + Private b_codigoAutorizacion As Button + Private b_cancelarCodigoAutorizacion As Button + Private p_ticketImpreso As Panel + Private b_enviarTicket As Button + Dim archivoTicketPDF As String + Private p_transparentePDF As Panel + Private p_envioPDF As Panel + Private b_cancelarEnvioPDF As Button + Private b_envioPDF As Button + Private et_numeroPDF As EditText + Private btnPlanLealtad As Button + Private pnl_btns As Panel + Private pnlPlanLealtad As Panel + Private imgPlanLealtad As ImageView + Private btnAceptaPlanLealtad As Button + Private btnCancelarPlanLealtad As Button + Private BCREDITO As String + + + Private p_comentarios As Panel + Private p_comentario As Panel + Private b_agregarcom As Button + Private b_cerarcom As Button + Private Label19 As Label + Private et_comentario As EditText + Private lv_comentarios As ListView + Private ImageView4 As ImageView + Private p_cliente_ 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 +' 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) + c=B4XPages.MainPage.skmt.ExecQuery("select 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 from kmt_info3 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + s=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + s.Position=0 + If c.RowCount>0 Then + c.Position=0 + la_cuenta.Text = c.GetString("CAT_CL_CODIGO") + cuenta = c.GetString("CAT_CL_CODIGO") + La_nombre.Text = c.GetString("CAT_CL_NOMBRE") + la_Calle.Text = c.GetString("CAT_CL_CALLE") & c.GetString("CAT_CL_NOEXT") + la_col.Text = c.GetString("CAT_CL_COLONIA") + la_edo.Text = c.GetString("CAT_CL_EDO") +' la_cp.Text = c.GetString("CAT_CL_CP") + l_entre1.Text = c.GetString("CAT_CL_CALLE1") + l_entre2.Text = c.GetString("CAT_CL_CALLE2") + l_atiende.Text = c.GetString("CAT_CL_ATIENDE1") + l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2") + la_saldotot.Text = c.GetString("CAT_CL_TELEFONO") + la_saldooper.Text = c.GetString("CAT_CL_EMAIL") + l_total.Text = s.GetString("TOTAL_CLIE") + total_cliente = s.GetString("TOTAL_CLIE") + MONTO_COMPRA = c.GetString("CAT_CL_MTOCOMPRA") + End If + c.Close + s.Close + File.Copy(File.DirAssets,"guna-fondo.jpg",xui.DefaultFolder,"guna-fondo.jpg") + TOMAR_FOTO = 0 + btAdmin.Initialize("BlueTeeth") + cmp20.Initialize("Printer") + SV_ENCUESTA.Height = Root.Height + SV_ENCUESTA.Width = Root.Height + p_pregunta1.Height = Root.Height + p_pregunta1.Width = Root.Height + p_transparenteTicketImpreso.Left = 0 : p_transparenteTicketImpreso.top = 0 + p_transparentePDF.Left = 0 : p_transparentePDF.top = 0 + p_transparenteTicketImpreso.Width = Root.Width : p_transparenteTicketImpreso.Height = Root.Height + p_transparentePDF.Width = Root.Width : p_transparentePDF.Height = Root.Height + Subs.centraPanel(p_ticketImpreso, p_transparenteTicketImpreso.Width) + Subs.centraPanel(p_envioPDF, p_transparentePDF.Width) + p_comentario.Left = 0 : p_comentario.top = 0 + p_comentario.Width = Root.Width : p_comentario.Height = Root.Height + Subs.centraPanel(p_comentarios, p_comentario.Width) + Tels.Visible = False + gest.Visible = False + l_version.Left = Root.Width - (l_version.Width + 10) + cuest.Initialize(Me, "cuest", Root, B4XPages.MainPage.skmt) + bitacora.Initialize("bitacora", "bitacora", Root, B4XPages.MainPage.skmt, reqManager) + l_version.Left = Root.Width - l_version.Width +' bitacora.cargamosPanel +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + btnPlanLealtad.Visible = False + bitacora.inicioFin +' iniciofin + que_modulo = 1 + dentroDeGeocerca = False + indicePregunta = 0 + + pnlPlanLealtad.Top = 0 + pnlPlanLealtad.Left = 0 + pnlPlanLealtad.Width = Root.Width + pnlPlanLealtad.Height = Root.Height + p_cliente.Width = Root.Width + p_cliente.Height = Root.Height + p_cliente_.Width = Root.Width + + If TOMAR_FOTO <> 0 Then Cuestionario + Starter.idCliente = Subs.traeCliente +' Log(Subs.traeCliente) + If Subs.traeCliente = "0" Then + tipo_venta = "ABORDO" + Log(1) + Log("ABORDO") + Else + tipo_venta = Subs.traeTipoVentaDeBD +' Log(2) + Log(Subs.traeTipoVentaDeBD) + End If + B4XPages.MainPage.tipo_venta = tipo_venta + Log($"TIPO_VENTA: ${tipo_venta}"$) + encuentasmapa.Initialize + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA) + Wait For B4XPage_PermissionResult (Permission As String, resultC As Boolean) + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) + Wait For B4XPage_PermissionResult (Permission As String, resultC As Boolean) + LA_GPS.TextColor = Colors.Red + LA_GPS.Text = "SIN UBICACION GPS" + cercavalor = 0 + l_version.Text = Application.VersionName + b_preventa.left = (Root.Width / 2) - (b_preventa.width / 2) +' p_transparenteInicioFin.Width = Root.Width : p_transparenteInicioFin.Height = Root.Height +' b_Inicio_Fin_venta.Left = 5 +' b_Inicio_Fin_venta.Width = Root.Width - 10 +' b_Inicio_Fin_venta.Text = "INICIAR VENTA" +' b_Inicio_Fin_venta.BringToFront +' LogColor(">>>>>> EN VENTA: " & Starter.enVenta, Colors.red) +' If Not(Starter.enVenta) Then +' b_Inicio_Fin_venta.Visible = True +' Log("EnVenta Visible") +' Else +' Log("EnVenta NO Visible") +' b_Inicio_Fin_venta.Visible = False +' End If + + If Subs.hayPedido Then 'Si hay pedido, deshabilitamos el boton de "No Venta" + Log(">>>>> HAY PEDIDO") + Tels.Enabled = False + Else + Tels.Enabled = True + End If + + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + skmt.Initialize(ruta,"kmt.db", True) + reqManager.Initialize(Me, Starter.server) + p_camara.Width = Root.Width + p_camara.Height = Root.Height + S2=B4XPages.MainPage.skmt.ExecQuery("select count(*) AS CUANTOS from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa)") + S2.Position =0 + CUANTOS = S2.GetString("CUANTOS") + S2.Close + If CUANTOS > 0 Then + c2=B4XPages.MainPage.skmt.ExecQuery("select sum(HVD_COSTO_TOT) AS TOTAL from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa)") + c2.Position =0 + MONTO_COMPRA = c2.GetString("TOTAL") + c2.Close + Else + MONTO_COMPRA = "0" + End If + la_saldotot.Text = MONTO_COMPRA + If MONTO_COMPRA <> "0" Then + META2 = 300 - MONTO_COMPRA + Else + META2 = 300 + End If + If META2 < 1 Then + META2 = "CUBIERTO" + End If + If IsNumber(META2) Then META2 = NumberFormat2(META2, 0, 2, 2, True) + la_saldooper.Text = META2 + c=B4XPages.MainPage.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 + If ALMACEN = "1" Then + Tels.Visible = False + gest.Visible = True + B_GPS.Visible = False + End If + If ALMACEN = "4" Then + b_like.Visible = False + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_VENTAS WHERE HVD_CLIENTE IN (Select cuenta from cuentaa) AND HVD_PRONOMBRE =?", Array As String("KNORR RINDE MAS 70 GR")) + DD.Position =0 + If DD.GetString("CUANTOS") = 0 Then + c=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) AND PE_PRONOMBRE =?", Array As String("KNORR RINDE MAS 70 GR")) + c.Position =0 + If c.GetString("CUANTOS") = 0 Then + b_like.Visible = False + Else + b_like.Visible = False + End If + c.Close + Else + b_like.Visible = False + End If + DD.Close + Else + b_like.Visible = False + End If + If ALMACEN = "16" Or ALMACEN = "13" Then + Tels.Visible = True + gest.Visible = True + End If + c = skmt.ExecQuery("SELECT PC_CLIENTE FROM PEDIDO_CLIENTE WHERE PC_CLIENTE IN (Select CUENTA from cuentaa)") + If c.RowCount > 0 Then + Tels.Visible = True + gest.Visible = True + Else If c.RowCount = 0 Then + Tels.Visible = False + gest.Visible = False + c = skmt.ExecQuery("SELECT NV_CLIENTE FROM NOVENTA CLIENTE WHERE NV_CLIENTE IN (Select CUENTA from cuentaa)") + If c.RowCount > 0 Then + Tels.Visible = True + gest.Visible = True + Else If c.RowCount = 0 Then + Tels.Visible = False + gest.Visible = False + LA_GEO.TextColor = Colors.Red + If ALMACEN = "1" Then + Tels.Visible = False + gest.Visible = True + End If + End If + LA_GEO.TextColor = Colors.Red + If ALMACEN = "1" Then + Tels.Visible = False + gest.Visible = True + End If + End If + CallSubDelayed(Tracker, "Track") + CallSubDelayed(Tracker, "StartFLPSmall") + If 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 + If ALMACEN = "1" Or ALMACEN = "2" Or ALMACEN = "4" Or ALMACEN = "5" Or ALMACEN = "25" Then + DD=skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_VENTAS WHERE HVD_CLIENTE IN (Select cuenta from cuentaa) AND HVD_PRONOMBRE =?", Array As String("KNORR SUIZA GALLINA")) + DD.Position =0 + If DD.GetString("CUANTOS") = 0 Then + c=skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) AND PE_PRONOMBRE =?", Array As String("KNORR SUIZA GALLINA")) + c.Position =0 + If c.GetString("CUANTOS") = 0 Then + B_GALLINA.Visible = True + Else + B_GALLINA.Visible = False + End If + c.Close + Else + B_GALLINA.Visible = False + End If + DD.Close + Else + B_GALLINA.Visible = False + End If + P_gallina.Visible = False + B_GALLINA.Visible = False + que_modulo = 1 + If ALMACEN = "2" Or ALMACEN = "4" Or ALMACEN = "5" Or ALMACEN = "4" Or ALMACEN = "53" Or ALMACEN = "64" Or ALMACEN = "25" Then + b_like.Visible = True + Else + b_like.Visible = False + End If + c = skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("MACIMP")) + If c.RowCount > 0 Then + c.Position = 0 + Starter.MAC_IMPRESORA = c.GetString("CAT_VA_VALOR") + End If + If Starter.MAC_IMPRESORA = "" Then Starter.MAC_IMPRESORA = "0" +' Log("|" & Starter.MAC_IMPRESORA & "|") + Printer1.Initialize(Me, "Printer1") + + If Printer1.IsConnected = False Then +' Printer1.Connect +' Log("1") + Else + Printer1.DisConnect + Printer1.Connect + Log("2") + End If + c = skmt.ExecQuery("SELECT HABILITADA FROM IMPRESORA") + If c.RowCount > 0 Then + c.Position = 0 + If c.GetString("HABILITADA") = 1 Then + B_IMP.Visible = True + Else If c.GetString("HABILITADA") = 0 Then + B_IMP.Visible = False + End If + Else If c.RowCount = 0 Then + B_IMP.Visible = False + End If +' Log(distance) +' LogColor(">>>>>> EN VENTA: " & Starter.enVenta, Colors.red) +' Log(Subs.InvSuficientePromoEsp) +' Log(Subs.traemontoprod) + If ALMACEN = 32 Then + If Subs.traemontoprod And Subs.InvSuficientePromoEsp And Not(Subs.vendidoPromoEsp) Then + Msgbox2Async("El cliente tiene derecho a una promo por la compra de mas de $120 en productos Helmanns, Maizena y/o Knorr" , "Promo disponible", "Aceptar", "", "", LoadBitmap(File.DirAssets,"alert2.png"), False) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + B4XPages.MainPage.productos.terminarpromoesp + End If + Else + End If + If Not(Subs.traemontoprod) And Subs.vendidoPromoEsp Then + Private j3 As Cursor + Log("SI PROMO") + j3 = B4XPages.MainPage.skmt.ExecQuery2("SELECT PE_CEDIS, PE_CANT,PE_PROID, PE_PRONOMBRE FROM PEDIDO WHERE PE_CEDIS IN (SELECT PE_CEDIS FROM PEDIDO WHERE PE_PROID = ?)",Array As String("PROUNI01")) + Log(j3.RowCount) + If j3.RowCount = 0 Then + Log("estoy aqui") + For i = 0 To j3.RowCount -1 + Log("aqui tronare?") + j3.Position = i + B4XPages.MainPage.skmt.ExecNonQuery($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen + ${j3.GetString("PE_CANT")} where cat_gp_id = '${j3.Getstring("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_cedis in (select pe_cedis from pedido where pe_pronombre = ?) and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(j3.GetString("PE_PRONOMBRE"), tipo_venta)) + Next + End If + j3.Close + Else + End If + End If + + If ALMACEN = 87 Or ALMACEN = 6 Then + If Subs.traemontoprod And Subs.traeCliente <> "0" Then + Msgbox2Async("El cliente tiene derecho a un descuento de 150 pesos por la compra de mas de $500 en productos participantes" , "Descuento disponible", "Aceptar", "", "", LoadBitmap(File.DirAssets,"alert2.png"), False) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT SUM(PE_CANT) AS PIEZAS FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA)") + If c.RowCount > 0 Then + c.Position = 0 + Private des As Float = NumberFormat2(150/c.GetString("PIEZAS"),0,2,2,False) + Log( NumberFormat2(des,0,2,2,False)) + Private c2 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT Ifnull(SUM(PE_CANT),0) AS PE_CANT FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA) AND PE_COSTOU < ?",Array As String(des)) + If c2.RowCount > 0 Then + c2.Position = 0 + Log(c2.GetString("PE_CANT")) + End If + Private c3 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT SUM(PE_CANT) AS PE_CANT FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA) AND PE_COSTOU >= ?",Array As String(des)) + If c3.RowCount > 0 Then + c3.Position = 0 + Log(c3.GetString("PE_CANT")) + Private rec As Float = (des * c2.GetString("PE_CANT"))/c3.GetString("PE_CANT") + Log( NumberFormat2(rec,0,2,2,False)) + Private cantres As Float = des + rec + Log( NumberFormat2(cantres,0,2,2,False)) + Private c5 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT Ifnull(SUM(PE_CANT),0) AS PE_CANT FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA) AND PE_COSTOU > ? and PE_COSTOU < ?",Array As String(des, cantres)) + If c5.RowCount > 0 Then + c5.Position = 0 + Log(c5.GetString("PE_CANT")) + If c5.GetString("PE_CANT") = "0" Then + Private c4 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT * FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA) AND PE_COSTOU >= ?",Array As String(NumberFormat2(cantres,0,2,2,False))) + If c4.RowCount > 0 Then + For i = 0 To c4.RowCount -1 + c4.Position = i + Private recalculo As Float = c4.GetString("PE_COSTOU") - NumberFormat2(cantres,0,2,2,False) + LogColor(recalculo,Colors.Blue) + Private recalculototal As Float = c4.GetString("PE_CANT") * NumberFormat2(recalculo,0,2,2,False) +' Log(recalculo&"|||||"&recalculototal) + skmt.ExecNonQuery2("UPDATE PEDIDO set PE_RECALCULO = ?, PE_RECALCULOTOT = ? WHERE PE_PROID = ? AND PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) ",Array As String(NumberFormat2(recalculo,0,2,2,False) ,NumberFormat2(recalculototal,0,2,2,False), c4.GetString("PE_PROID"))) + Next + End If + c4.Close + Else + Private c6 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT SUM(PE_CANT) AS PE_CANT FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA) AND PE_COSTOU >= ?",Array As String(cantres)) + If c6.RowCount > 0 Then + c6.Position = 0 + Log(c6.GetString("PE_CANT")) + Private rec1 As Float = (cantres * c5.GetString("PE_CANT"))/c6.GetString("PE_CANT") + Log( NumberFormat2(rec1,0,2,2,False)) + Private cantres1 As Float = cantres + rec1 + Log( NumberFormat2(cantres1,0,2,2,False)) + Private c4 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT * FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA) AND PE_COSTOU >= ?",Array As String(NumberFormat2(cantres1,0,2,2,False))) + If c4.RowCount > 0 Then + For i = 0 To c4.RowCount -1 + c4.Position = i + Private recalculo As Float = c4.GetString("PE_COSTOU") - NumberFormat2(cantres1,0,2,2,False) + LogColor(recalculo,Colors.Blue) + Private recalculototal As Float = c4.GetString("PE_CANT") * NumberFormat2(recalculo,0,2,2,False) +' Log(recalculo&"|||||"&recalculototal) + skmt.ExecNonQuery2("UPDATE PEDIDO set PE_RECALCULO = ?, PE_RECALCULOTOT = ? WHERE PE_PROID = ? AND PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) ",Array As String(NumberFormat2(recalculo,0,2,2,False) ,NumberFormat2(recalculototal,0,2,2,False), c4.GetString("PE_PROID"))) + Next + End If + c4.Close + End If + End If + End If + End If + End If + End If + c.Close + c2.Close + c3.Close + Else If Subs.traemontoprod2 And Subs.traeCliente <> "0" Then + Msgbox2Async("El cliente tiene derecho a un descuento de 70 pesos por la compra de mas de $350 en productos participantes" , "Descuento disponible", "Aceptar", "", "", LoadBitmap(File.DirAssets,"alert2.png"), False) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT SUM(PE_CANT) AS PIEZAS FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA)") + If c.RowCount > 0 Then + c.Position = 0 + Private des As Float = NumberFormat2(70/c.GetString("PIEZAS"),0,5,5,False) + Log(des) + Private c2 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT Ifnull(SUM(PE_CANT),0) AS PE_CANT FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA) AND PE_COSTOU < ?",Array As String(des)) + If c2.RowCount > 0 Then + c2.Position = 0 + Log(c2.GetString("PE_CANT")) + End If + Private c3 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT SUM(PE_CANT) AS PE_CANT FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA) AND PE_COSTOU >= ?",Array As String(des)) + If c3.RowCount > 0 Then + c3.Position = 0 + Log(c3.GetString("PE_CANT")) + Private rec As Float = (des * c2.GetString("PE_CANT"))/c3.GetString("PE_CANT") + Log( NumberFormat2(rec,0,2,2,False)) + Private cantres As Float = des + rec + Log( NumberFormat2(cantres,0,2,2,False)) + Private c5 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT Ifnull(SUM(PE_CANT),0) AS PE_CANT FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA) AND PE_COSTOU > ? and PE_COSTOU < ?",Array As String(des, cantres)) + If c5.RowCount > 0 Then + c5.Position = 0 + Log(c5.GetString("PE_CANT")) + If c5.GetString("PE_CANT") = "0" Then + Private c4 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT * FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA) AND PE_COSTOU >= ?",Array As String(NumberFormat2(cantres,0,2,2,False))) + If c4.RowCount > 0 Then + For i = 0 To c4.RowCount -1 + c4.Position = i + Private recalculo As Float = c4.GetString("PE_COSTOU") - NumberFormat2(cantres,0,2,2,False) + LogColor(recalculo,Colors.Blue) + Private recalculototal As Float = c4.GetString("PE_CANT") * NumberFormat2(recalculo,0,2,2,False) + Log(recalculo&"|||||"&recalculototal&"|||||||||||||||||||"&c4.GetString("PE_PROID")) + skmt.ExecNonQuery2("UPDATE PEDIDO set PE_RECALCULO = ?, PE_RECALCULOTOT = ? WHERE PE_PROID = ? AND PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) ",Array As String(NumberFormat2(recalculo,0,2,2,False) ,NumberFormat2(recalculototal,0,2,2,False), c4.GetString("PE_PROID"))) + Next + End If + c4.Close + Else + Private c6 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT SUM(PE_CANT) AS PE_CANT FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA) AND PE_COSTOU >= ?",Array As String(cantres)) + If c6.RowCount > 0 Then + c6.Position = 0 + Log(c6.GetString("PE_CANT")) + Private rec1 As Float = (cantres * c5.GetString("PE_CANT"))/c6.GetString("PE_CANT") + Log( NumberFormat2(rec1,0,2,2,False)) + Private cantres1 As Float = cantres + rec1 + Log( NumberFormat2(cantres1,0,2,2,False)) + Private c4 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT * FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA) AND PE_COSTOU >= ?",Array As String(NumberFormat2(cantres1,0,2,2,False))) + If c4.RowCount > 0 Then + For i = 0 To c4.RowCount -1 + c4.Position = i + Private recalculo As Float = c4.GetString("PE_COSTOU") - NumberFormat2(cantres1,0,2,2,False) + LogColor(recalculo,Colors.Blue) + Private recalculototal As Float = c4.GetString("PE_CANT") * NumberFormat2(recalculo,0,2,2,False) +' Log(recalculo&"|||||"&recalculototal) + skmt.ExecNonQuery2("UPDATE PEDIDO set PE_RECALCULO = ?, PE_RECALCULOTOT = ? WHERE PE_PROID = ? AND PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) ",Array As String(NumberFormat2(recalculo,0,2,2,False) ,NumberFormat2(recalculototal,0,2,2,False), c4.GetString("PE_PROID"))) + Next + End If + c4.Close + End If + End If + End If + End If + End If + End If + c.Close + c2.Close + c3.Close + + End If + If Not(Subs.traemontoprod) Then + If Not(Subs.traemontoprod2) Then + Private c4 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT * FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA) AND (PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL)",Array As String("null")) + If c4.RowCount > 0 Then + For i = 0 To c4.RowCount -1 + c4.Position = i +' Private recalculo As Float = c4.GetString("PE_COSTOU") - NumberFormat2(cantres,0,2,2,False) +' Private recalculototal As Float = c4.GetString("PE_CANT") * NumberFormat2(recalculo,0,2,2,False) +' Log(recalculo&"|||||"&recalculototal) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO set PE_RECALCULO = ?, PE_RECALCULOTOT = ? WHERE PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND PE_PROID = ? ",Array As String("","",c4.GetString("PE_PROID"))) + Next + End If + Else + + End If + Else + + End If + End If + + + + + 'AQUI CAMBIAR + Private s3 As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select * FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and PE_RECALCULO <> ? OR PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL",Array As String("","null")) +' LogColor(s3.RowCount,Colors.Yellow) + If s3.RowCount > 0 Then + '########################## CODIGO PARA CREDITOS #################### + c=B4XPages.MainPage.skmt.ExecQuery("select 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,IFNULL(CAT_CL_BCREDITO,0) AS CAT_CL_BCREDITO from kmt_info3 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + s=B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and (PE_RECALCULO = ? or PE_RECALCULO = ? or PE_RECALCULO IS NULL)",Array As String("","null")) + s.Position=0 + Private s5 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(PE_RECALCULOTOT),0) as TOTAL_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and (PE_RECALCULO <> ? or PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL)",Array As String("","null")) + s5.Position = 0 + If c.RowCount > 0 Then + c.Position = 0 + Log(">>>>>> " & c.GetString("CAT_CL_CODIGO")) + la_cuenta.Text = c.GetString("CAT_CL_CODIGO") + la_cuenta_gallina.Text = c.GetString("CAT_CL_CODIGO") + La_nombre.Text = c.GetString("CAT_CL_NOMBRE") + la_Calle.Text = c.GetString("CAT_CL_CALLE") & " " & c.GetString("CAT_CL_NOEXT") + la_col.Text = c.GetString("CAT_CL_COLONIA") + la_edo.Text = c.GetString("CAT_CL_EDO") + l_entre1.Text = c.GetString("CAT_CL_CALLE1") + l_entre2.Text = c.GetString("CAT_CL_CALLE2") + l_atiende.Text = c.GetString("CAT_CL_ATIENDE1") + l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2") + telefono = c.GetString("CAT_CL_TELEFONO") + Label19.Text = c.GetString("CAT_CL_TELEFONO") + BCREDITO = c.GetString("CAT_CL_BCREDITO") '########################## CODIGO PARA CREDITOS #################### + + If s.GetString("TOTAL_CLIE") = Null Then + l_total.Text = 0 + Else + l_total.Text =NumberFormat2((s.GetString("TOTAL_CLIE") + s5.GetString("TOTAL_CLIE")),0,2,2,False) + End If + total_cliente = s.GetString("TOTAL_CLIE") + s5.GetString("TOTAL_CLIE") + 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" + LA_RUTA = c.GetString("CAT_CL_RUTA") + ' ESTO ES PARA FORZAR A PEDIR LA FOTO Y EL GPS + If c.GetString("CAT_CL_NUM_SERIEFISICO") = "0" Then + L_QR.TEXT = "SIN CODIGO" + L_QR.TextColor = Colors.Red + If ALMACEN <> "32" And ALMACEN <> "33" And ALMACEN <> 6 Then gest.VISIBLE = True And Tels.Visible = True + BT_QR.Visible = True + Else + L_QR.TEXT = c.GetString("CAT_CL_NUM_SERIEFISICO") + L_QR.TextColor = Colors.Blue + BT_QR.Visible = False + End If + End If + c.Close + s.Close + Else If s3.RowCount = 0 Then + '########################## CODIGO PARA CREDITOS #################### + c=B4XPages.MainPage.skmt.ExecQuery("select 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,IFNULL(CAT_CL_BCREDITO,0) AS CAT_CL_BCREDITO from kmt_info3 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + s=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + s.Position=0 + If c.RowCount > 0 Then + c.Position=0 + la_cuenta.Text = c.GetString("CAT_CL_CODIGO") + la_cuenta_gallina.Text = c.GetString("CAT_CL_CODIGO") + La_nombre.Text = c.GetString("CAT_CL_NOMBRE") + la_Calle.Text = c.GetString("CAT_CL_CALLE") & " " & c.GetString("CAT_CL_NOEXT") + la_col.Text = c.GetString("CAT_CL_COLONIA") + la_edo.Text = c.GetString("CAT_CL_EDO") + l_entre1.Text = c.GetString("CAT_CL_CALLE1") + l_entre2.Text = c.GetString("CAT_CL_CALLE2") + l_atiende.Text = c.GetString("CAT_CL_ATIENDE1") + l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2") + telefono = c.GetString("CAT_CL_TELEFONO") + Label19.Text = c.GetString("CAT_CL_TELEFONO") + BCREDITO = c.GetString("CAT_CL_BCREDITO") '########################## CODIGO PARA CREDITOS #################### + +' Log(s.GetString("TOTAL_CLIE")) + If s.GetString("TOTAL_CLIE") = Null Then + l_total.Text = 0 + Else + l_total.Text =NumberFormat2(s.GetString("TOTAL_CLIE"),0,2,2,False) + End If + total_cliente = s.GetString("TOTAL_CLIE") + 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" + LA_RUTA = c.GetString("CAT_CL_RUTA") + ' ESTO ES PARA FORZAR A PEDIR LA FOTO Y EL GPS + If c.GetString("CAT_CL_NUM_SERIEFISICO") = "0" Then + L_QR.TEXT = "SIN CODIGO" + L_QR.TextColor = Colors.Red + If ALMACEN <> "32" And ALMACEN <> "33" And ALMACEN <> 6 Then gest.VISIBLE = True And Tels.Visible = True + BT_QR.Visible = True + Else + L_QR.TEXT = c.GetString("CAT_CL_NUM_SERIEFISICO") + L_QR.TextColor = Colors.Blue + BT_QR.Visible = False + End If + End If + c.Close + s.Close + End If +' ToastMessageShow(BCREDITO, False) + 'AQUI TERMINA + Starter.idCliente = la_cuenta.text + c = skmt.ExecQuery("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = 'GEOCERCA'") + If c.RowCount > 0 Then + c.Position = 0 + Dim geo As String = c.GetString("CAT_VA_VALOR") + End If + c.Close +' Log(geo) + If geo = "0" Then + gest.Visible = True + Tels.Visible = True +' b_Inicio_Fin_venta.Visible = True + precision = "1" +' Log("Hacemos visible el boton de Inicio Venta") + Else If geo = "1" And distance > 100 Then + gest.Visible = False + Tels.Visible = False + b_Inicio_Fin_venta.Visible = False +' ToastMessageShow("aaa", False) + End If + gest.Typeface =Typeface.CreateNew(Typeface.FONTAWESOME, Typeface.STYLE_BOLD) + gest.Text = " Preventa" + If Subs.traeTipoVentaDeBD = "VENTA" Then gest.Text = " Venta" +' Log($">>>>>>>>>> |${la_cuenta.Text.trim}|"$) + If la_cuenta.Text.trim = "0" Then gest.Text = "Carga Abordo" +' Log($"ALMACEN: ${ALMACEN}${CRLF}RUTA:${LA_RUTA}"$) + Log(Subs.traeRuta) + If Subs.hayPedido Then + B_IMP.Enabled = True + b_enviarTicket.Enabled = True + Else + B_IMP.Enabled = False + b_enviarTicket.Enabled = False + End If + + If ALMACEN = 46 Or ALMACEN = 6 Then + c = Starter.skmt.ExecQuery("SELECT IfNull(PL_BANDERA, 0) AS PL_BANDERA FROM PLAN_LEALTAD WHERE PL_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + If c.RowCount > 0 Then + c.Position = 0 + If c.GetString("PL_BANDERA") = 0 Then + btnPlanLealtad.Visible = True + Else + btnPlanLealtad.Visible = False + End If + Else + btnPlanLealtad.Visible = True + End If + Else + btnPlanLealtad.Visible = False + End If + +' fotomostrar.Position = 0 +' Private imagencompara() As Byte +' imagencompara = fotomostrar.GetBlob("foto") +'' Log(imagencompara.Length) +' If imagencompara.Length = Null Then +'' ImageView4 = fotomostrar.GetBlob("foto") +' Log("LO LOGRAMOS") +' End If + If ALMACEN = 88 Then + If Not(Subs.TraeMontoProd) Then + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_cedis = 'MYKONOS_01' and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(tipo_venta)) +' B4XPage_Appear + Private s3 As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select * FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and PE_RECALCULO <> ? OR PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL",Array As String("","null")) +' LogColor(s3.RowCount,Colors.Yellow) + If s3.RowCount > 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("select 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,IFNULL(CAT_CL_BCREDITO,0) AS CAT_CL_BCREDITO from kmt_info3 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + s=B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and (PE_RECALCULO = ? or PE_RECALCULO = ? or PE_RECALCULO IS NULL)",Array As String("","null")) + s.Position=0 + Private s5 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(PE_RECALCULOTOT),0) as TOTAL_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and (PE_RECALCULO <> ? or PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL)",Array As String("","null")) + s5.Position = 0 + If c.RowCount > 0 Then + c.Position = 0 + If s.GetString("TOTAL_CLIE") = Null Then + l_total.Text = 0 + Else + l_total.Text =NumberFormat2((s.GetString("TOTAL_CLIE") + s5.GetString("TOTAL_CLIE")),0,2,2,False) + End If + total_cliente = s.GetString("TOTAL_CLIE") + s5.GetString("TOTAL_CLIE") + End If + Else + c=B4XPages.MainPage.skmt.ExecQuery("select 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,IFNULL(CAT_CL_BCREDITO,0) AS CAT_CL_BCREDITO from kmt_info3 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + s=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + s.Position=0 + If c.RowCount > 0 Then + c.Position=0 + If s.GetString("TOTAL_CLIE") = Null Then + l_total.Text = 0 + Else + l_total.Text =NumberFormat2(s.GetString("TOTAL_CLIE"),0,2,2,False) + End If + total_cliente = s.GetString("TOTAL_CLIE") + End If + End If + End If + End If + + Dim fotomostrar As Cursor = Starter.skmt.ExecQuery("SELECT foto FROM kmt_info3 where CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") + If fotomostrar.RowCount > 0 Then + Dim fotomostrar1 As Cursor = Starter.skmt.ExecQuery("SELECT foto FROM kmt_info3 where CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA) AND foto IS NULL") + If fotomostrar1.RowCount > 0 Then + ImageView4.Bitmap = LoadBitmap(File.DirAssets,"images.png") + Log("aqui no hay foto") + Else + fotomostrar.Position = 0 + Private fotomostrarfinal() As Byte = fotomostrar.GetBlob("foto") + Dim InputStream1 As InputStream + InputStream1.InitializeFromBytesArray(fotomostrarfinal, 0, fotomostrarfinal.Length) + Dim Bitmap1 As Bitmap + Bitmap1.Initialize2(InputStream1) + InputStream1.Close + ImageView4.Bitmap = Bitmap1 + + Log("aqui si hay foto") + End If + + End If + SV_ENCUESTA.Visible = False + P_gallina.Visible = False + p_pregunta1.Visible = False + p_camara.Visible = False + Panel2.Visible = False + p_comentario.Visible = False + p_transparenteTicketImpreso.Visible = False + p_encuesta.Visible = False + pnlPlanLealtad.Visible = False + Panel10.Visible = False + p_transparentePDF.Visible = False + CH_FACTURA.Checked = False + Dim fac As Cursor=B4XPages.MainPage.skmt.ExecQuery("Select ifnull(SUM(PE_COSTO_TOT), 0) As TOTAL_CLIE, SUM(PE_CANT) As CANT_CLIE, PC_FACTURA FROM PEDIDO_CLIENTE INNER JOIN PEDIDO ON PEDIDO_CLIENTE.PC_CLIENTE = PEDIDO.PE_CLIENTE WHERE (PE_CLIENTE IN (Select cuenta from cuentaa))") + fac.Position = 0 + Private factura As String = 0 + If fac.GetString("PC_FACTURA") <> Null And IsNumber(fac.GetString("PC_FACTURA")) Then factura = fac.GetString("PC_FACTURA") + If factura = "1" Then CH_FACTURA.Checked = True + +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + LogColor($"Entrando a Cliente.GPS_LocationChanged"$, Colors.red) + 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 + If m_lat.Length > 0 And B4XPages.MainPage.lat_gps <> "0" Then + 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) + BT_QR.Enabled = True + LA_GPS.TextColor = Colors.Blue + LA_GPS.Text = "CON UBICACION GPS" + B_GPS.Enabled = True + '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 + c = skmt.ExecQuery("SELECT HABILITADO FROM GPS") + If c.RowCount > 0 Then + c.Position = 0 + Dim habi As String = c.GetString("HABILITADO") + End If + c.Close + c = skmt.ExecQuery("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = 'GEOCERCA'") + If c.RowCount > 0 Then + c.Position = 0 + Dim geo As String = c.GetString("CAT_VA_VALOR") + End If + c.Close + If gest.IsInitialized And Tels.IsInitialized Then + If geo = "0" Then + gest.Visible = True + Tels.Visible = True + iniciofin +' b_geo = "0" + bitacora.banderaGeoCerca = "0" + Else If geo = "1" Then + gest.Visible = False + Tels.Visible = False +' p_transparenteInicioFin.Visible = False +' Log(999) +' b_Inicio_Fin_venta.Visible = False + End If + End If + If geo = "1" Then + If distance < 10000000000000000000000000000000 Then + LA_GEO.TextColor = Colors.Blue + Tels.Visible = True + gest.Visible = True + bitacora.inicioFin + precision = "1" +' b_geo = "0" + bitacora.banderaGeoCerca = "0" + ToastMessageShow("DENTRO de rango GPS", False) + Else If habi = "1" Then + c = skmt.ExecQuery2("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("LATITUD")) + If c.RowCount > 0 Then + c.Position = 0 + Dim al_latitud As String = c.GetString("CAT_VA_VALOR") + End If + c.Close + c = skmt.ExecQuery2("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("LONGITUD")) + If c.RowCount > 0 Then + c.Position = 0 + Dim al_longitud As String = c.GetString("CAT_VA_VALOR") + End If + c.Close + Dim ubi1, ubi2 As Location + ubi1.Initialize2(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps) + ubi2.Initialize2(al_latitud, al_longitud) + Dim distancealm As Long + distancealm = ubi1.DistanceTo(ubi2) + If distancealm < 50 Then + precision = "0" + LA_GEO.TextColor = Colors.Blue + Tels.Visible = True + gest.Visible = True +' b_geo = "1" + bitacora.banderaGeoCerca = "1" + iniciofin + ToastMessageShow("DENTRO de rango GPS", False) + Else If distancealm > 50 Then + Tels.Visible = False + gest.Visible = False +' p_transparenteInicioFin.Visible = False + Log(998) +' b_Inicio_Fin_venta.Visible = False + c = skmt.ExecQuery("SELECT PC_CLIENTE FROM PEDIDO_CLIENTE WHERE PC_CLIENTE IN (Select CUENTA from cuentaa)") + If c.RowCount > 0 Then + precision = "0" + Tels.Visible = True + gest.Visible = True +' b_geo = "0" + bitacora.banderaGeoCerca = "0" + iniciofin + Else If c.RowCount = 0 Then + c = skmt.ExecQuery("SELECT NV_CLIENTE FROM NOVENTA CLIENTE WHERE NV_CLIENTE IN (Select CUENTA from cuentaa)") + If c.RowCount > 0 Then + Tels.Visible = True + gest.Visible = True + precision = "0" +' b_geo = "0" + iniciofin + Else If c.RowCount = 0 Then + Tels.Visible = False + gest.Visible = False +' p_transparenteInicioFin.Visible = False + Log(997) +' b_Inicio_Fin_venta.Visible = False + LA_GEO.TextColor = Colors.Red + If ALMACEN = "1" Then + Tels.Visible = False + gest.Visible = True +' b_geo = "0" + bitacora.banderaGeoCerca = "0" + iniciofin + End If + End If + End If + LA_GEO.TextColor = Colors.Red + If ALMACEN = "1" Then + Tels.Visible = False + gest.Visible = True +' b_geo = "0" + bitacora.banderaGeoCerca = "0" + iniciofin + End If + End If + Else If habi = 0 Then + c = skmt.ExecQuery("SELECT PC_CLIENTE FROM PEDIDO_CLIENTE WHERE PC_CLIENTE IN (Select CUENTA from cuentaa)") + If c.RowCount > 0 Then + Tels.Visible = True + gest.Visible = True +' b_geo = "0" + bitacora.banderaGeoCerca = "0" + iniciofin + Else If c.RowCount = 0 Then + Tels.Visible = False + gest.Visible = False +' p_transparenteInicioFin.Visible = False + Log(996) +' b_Inicio_Fin_venta.Visible = False + c = skmt.ExecQuery("SELECT NV_CLIENTE FROM NOVENTA CLIENTE WHERE NV_CLIENTE IN (Select CUENTA from cuentaa)") + If c.RowCount > 0 Then + Tels.Visible = True + gest.Visible = True +' b_geo = "0" + bitacora.banderaGeoCerca = "0" + iniciofin + Else If c.RowCount = 0 Then + Tels.Visible = False + gest.Visible = False +' p_transparenteInicioFin.Visible = False + Log(995) +' b_Inicio_Fin_venta.Visible = False + LA_GEO.TextColor = Colors.Red + If ALMACEN = "1" Then + Tels.Visible = False + gest.Visible = True +' b_geo = "0" + bitacora.banderaGeoCerca = "0" + iniciofin + End If + End If + LA_GEO.TextColor = Colors.Red + If ALMACEN = "1" Then + Tels.Visible = False + gest.Visible = True +' b_geo = "0" + bitacora.banderaGeoCerca = "0" + iniciofin + End If + End If + Else + Tels.Visible = False + gest.Visible = False +' p_transparenteInicioFin.Visible = False + Log(994) +' b_Inicio_Fin_venta.Visible = False + LA_GEO.TextColor = Colors.Red + If ALMACEN = "1" Then + Tels.Visible = False + gest.Visible = True +' b_geo = "0" + bitacora.banderaGeoCerca = "0" + iniciofin + End If + End If + End If + End If + +' 19.4846431, -99.1458691 -> Keymon + + If LA_GEO.IsInitialized Then LA_GEO.Text= $"$1.2{distance/1000} kms"$ + +' If distance > 100 Then ToastMessageShow("Fuera de rango GPS", False) + + 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") + +End Sub + +Private Sub p_pideGeoPass_Click + +End Sub + +'Muestra u oculta el boton de inicio y fin de venta +Private Sub iniciofin +' If Starter.enVenta = False Then +' p_transparenteInicioFin.BringToFront +' p_transparenteInicioFin.Visible = True +' b_Inicio_Fin_venta.Visible = True +'' Log("Hacemos visible el boton de Inicio Venta") +' Else +' If b_Inicio_Fin_venta.Text <> "TERMINAR VENTA" Then +' p_transparenteInicioFin.Visible = False +' b_Inicio_Fin_venta.Visible = False +' End If +' End If +End Sub + +Private Sub b_geopass_Click + If et_geopass.Text.trim = "KMTS1" Then + m_lat = B4XPages.MainPage.lat_gps + m_lon = B4XPages.MainPage.lon_gps + GPS_LocationChanged(Starter.ubicacionActual) + skmt.ExecNonQuery($"update kmt_info3 set CAT_CL_LAT = '${B4XPages.MainPage.lat_gps}', CAT_CL_LONG = '${B4XPages.MainPage.lon_gps}' where CAT_CL_CODIGO = '${Subs.traeCliente}'"$) + et_geopass.Text = "" + Else + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_geoPass_GUNA" + cmd.Parameters = Array As Object(et_geopass.Text.Trim, Subs.traeAlmacen, Subs.traeRuta) + reqManager.ExecuteQuery(cmd , 0, "traeGeoPass") + Log($"${Starter.server}, ${et_geopass.Text}, ${Subs.traeAlmacen}, ${Subs.traeRuta}"$) + et_geopass.Text = "" + End If + p_pideGeoPass.Visible = False +' ime.HideKeyboard +' Log("Guardamos coords") +' LATITUD = Starter.lat_gps +' LONGITUD = Starter.lon_gps +' GPS_LocationChanged(Starter.ubicacionActual) +' Starter.skmt.ExecNonQuery($b_geopass"update kmt_info3 set CAT_CL_LAT = '${Starter.lat_gps}', CAT_CL_LONG = '${Starter.lon_gps}' where CAT_CL_CODIGO = '${Subs.traeCliente}'"$) +End Sub + +Private Sub LA_GEO_LongClick +' If distance > 99 Then +' p_pideGeoPass.BringToFront +' p_pideGeoPass.Visible = True +' End If +End Sub + +Sub JobDone(Job As HttpJob) + If Job.Success = False Then +' ToastMessageShow("Error: " & Job.ErrorMessage, True) + LogColor("Error: " & Job.tag & " : " & Subs.parseHTTPError(Job.ErrorMessage), Colors.red) +' LogColor("Error: " & Job.ErrorMessage, Colors.red) + Else + LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211110 + If Job.JobName = "DBRequest" Then + Dim result1 As DBResult = reqManager.HandleJob(Job) + If result1.Tag = "traeGeoPass" Then 'query tag + Log("SIN REGISTROS " & result1.Rows.Size) + If result1.Rows.Size = 0 Then MsgboxAsync("Contraseña equivocada, por favor intente de nuevo.", "ATENCION") + For Each records() As Object In result1.Rows + For Each k As String In result1.Columns.Keys + Log(k & ": " & records(result1.Columns.Get(k))) + Next + Private permiso_geoPass As String = "KO" + Log($"|${result1.Columns.Get("'OK'")}|"$) +' Log($"|${records(result1.Columns.Get("'OK'"))}|"$) +' If result1.Columns.Get("'OK'") <> "null" And result1.Columns.Get("'OK'") <> Null Then + permiso_geoPass = result1.Columns.Get("'OK'") +' End If + If permiso_geoPass = "OK" Then + m_lat = B4XPages.MainPage.lat_gps + m_lon = B4XPages.MainPage.lon_gps + GPS_LocationChanged(Starter.ubicacionActual) + skmt.ExecNonQuery($"update kmt_info3 set CAT_CL_LAT = '${B4XPages.MainPage.lat_gps}', CAT_CL_LONG = '${B4XPages.MainPage.lon_gps}' where CAT_CL_CODIGO = '${Subs.traeCliente}'"$) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "delete_geoPass_GUNA" + cmd.Parameters = Array As Object( Subs.traeAlmacen, Subs.traeRuta) + reqManager.ExecuteQuery(cmd , 0, "traeGeoPass") + Else + MsgboxAsync("Contraseña equivocada, por favor intente de nuevo.", "ATENCION") + End If + Next + End If + + If result1.Tag = "codigoAutorizacion" Then + If result1.Rows.Size > 0 Then + Log("Si hay codigo de autorizaion") + For Each records() As Object In result1.Rows + For Each k As String In result1.Columns.Keys + Log(k & ": " & records(result1.Columns.Get(k))) + Next + Next + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "delete_codigoAutorizacion" + cmd.Parameters = Array As Object(et_codigoAutorizacion.Text.Trim, Subs.traeRuta, Subs.traeAlmacen) + reqManager.ExecuteCommand(cmd , "deleteCodigoAutorizacion") + DateTime.DateFormat = "YYYY/MM/dd HH:mm:ss" + cmd.Initialize + cmd.Name = "update_codigoAutorizacion" +' Log($"(${DateTime.Date(DateTime.Now)}, ${Subs.traeUsuarioDeBD}, ${et_codigoAutorizacion.Text.Trim}, ${Subs.traeRuta}, ${Subs.traeAlmacen}"$) + cmd.Parameters = Array As Object(DateTime.Date(DateTime.Now), Subs.traeUsuarioDeBD, et_codigoAutorizacion.Text.Trim, Subs.traeRuta, Subs.traeAlmacen) + reqManager.ExecuteCommand(cmd , "updateCodigoAutorizacion") + Starter.skmt.ExecNonQuery("delete from ticket_impreso where idCliente in (select cuenta from cuentaa)") + p_transparenteTicketImpreso.Visible = False + et_codigoAutorizacion.Text = "" + teclado.HideKeyboard + ToastMessageShow("Listo, ya se puede modificar la venta.", True) + Else + ToastMessageShow("El codigo es incorrecto, por favor revise y vuelva a intentar!!", True) + End If + End If + If result1.Tag = "delete_codigoAutorizacion" Then + Log("Codigo Borrado!!") + End If + If result1.Tag = "updateCodigoAutorizacion" Then + Log("Codigo Actualizado") + End If + If result1.Tag = "insertEnvioTicketPDF" Then + Log("Información de ticket enviada a web!!") + End If + End If + + + +' If Job.JobName = "DBRequest" Then +' Dim result1 As DBResult = reqManager.HandleJob(Job) +' If result1.Tag = "CHECAENCUESTA" Then 'query tag +' Log("SIN REGISTROS " & result1.Rows.Size) +' +' For Each records() As Object In result1.Rows +' Dim CUANTOSENCUESTA As String = records(result1.Columns.Get("CUANTOS")) +' Log(CUANTOSENCUESTA) +' If CUANTOSENCUESTA = "0" Then +' cmd.Initialize +' cmd.Name ="insert_drop_GV2_4" +' cmd.Parameters = Array As Object(usuario,B4XPages.MainPage.principal.e_ruta.text,sDate,"",sTime,"","","","","ENCUESTA",ALMACEN,Application.VersionName,Starter.encuesta) +' B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_drop") +' End If +' Next +' End If +' End If + + + End If + Job.Release +End Sub + +Sub ListView1_ItemLongClick (Position As Int, Value As Object) + +End Sub + +Sub gest_Click + + Dim pagarepen As Cursor = B4XPages.MainPage.skmt.ExecQuery("select FECHA, SALDO_PENDIENTE FROM ABONOSP WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + If pagarepen.RowCount > 0 Then + pagarepen.Position = 0 + DateTime.DateFormat="dd/MM/yyyy" + Dim FechaInicio As String = pagarepen.GetString("FECHA") ' Formato: dd/MM/yyyy +' Dim FechaHoy As String = DateTime.Date(DateTime.Now) ' Fecha actual en formato dd/MM/yyyy + Log(pagarepen.GetString("FECHA")) + + ' Convertir las fechas a milisegundos (desde 01/01/1970) + Dim TicksInicio As Long = DateTime.DateParse(FechaInicio) + Dim TicksHoy As Long = DateTime.DateParse(DateTime.Date(DateTime.Now)) + + ' Calcular diferencia en días + Dim DiferenciaDias As Int = (TicksHoy - TicksInicio) / DateTime.TicksPerDay + + ' Mostrar resultado + Log($"Días transcurridos: ${DiferenciaDias}"$) + + If DiferenciaDias <= 7 Then +' MsgboxAsync($"Favor de pagar su credito el día de mañana por un monto de $${pagarepen.GetString("SALDO_PENDIENTE")}"$, "Recordatorio") + + Msgbox2Async($"Favor de pagar su credito el día de mañana por un monto de $${pagarepen.GetString("SALDO_PENDIENTE")}"$, "Recordatorio", "Ok", "", "", LoadBitmap(File.DirAssets,"alert2.png"), False) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + gestionar + End If + Else If DiferenciaDias > 7 Then + MsgboxAsync($"No se puede realizar venta por que presenta ${(DiferenciaDias-7)} días de atraso en el credito, por un monto de $${pagarepen.GetString("SALDO_PENDIENTE")}"$, "Atención") + End If + + Else + + gestionar + + End If +End Sub + +Sub gestionar + If B_IMP.Visible = True Then + If Not(Subs.revisaImpreso) Then + c=B4XPages.MainPage.skmt.ExecQuery("select IFNULL(encuesta,0) AS encuesta from kmt_info3 where CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") + c.Position = 0 + If c.GetString("encuesta") = "0" Then + Dim Intent1 As Intent + Dim enviorutas As String = "guna://tienda360/config?clienteId="&la_cuenta.Text&"&almacen="&ALMACEN&"&ruta="&Subs.traeRuta + Log(enviorutas) + Intent1.Initialize(Intent1.ACTION_VIEW, enviorutas) + Try + Starter.encuesta = 1 + Dim cmd As DBCommand + skmt.ExecNonQuery2("UPDATE kmt_info3 SET encuesta = (?) WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)",Array As Object(1)) + StartActivity(Intent1) + compra + Catch + Starter.encuesta = 0 + Dim cmd As DBCommand + skmt.ExecNonQuery2("UPDATE kmt_info3 SET encuesta = (?) WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)",Array As Object(2)) + ToastMessageShow("La aplicación Tienda 360 no está instalada o no puede manejar la URL.", True) + compra + End Try + cmd.Initialize + cmd.Name = "SELECT_TMP_DROP_ENCUESTA_GUNA" + cmd.Parameters = Array As Object(usuario, B4XPages.MainPage.principal.e_ruta.text, ALMACEN, "ENCUESTA") + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "CHECAENCUESTA") + Else + compra + End If + Else + p_transparenteTicketImpreso.Visible = True + End If + Else + c=B4XPages.MainPage.skmt.ExecQuery("select IFNULL(encuesta,0) AS encuesta from kmt_info3 where CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") + c.Position = 0 + If c.GetString("encuesta") = "0" Then + Dim Intent1 As Intent + Dim enviorutas As String = "guna://tienda360/config?clienteId="&la_cuenta.Text&"&almacen="&ALMACEN&"&ruta="&Subs.traeRuta + Log(enviorutas) + Intent1.Initialize(Intent1.ACTION_VIEW, enviorutas) + Try + Starter.encuesta = 1 + Dim cmd As DBCommand + skmt.ExecNonQuery2("UPDATE kmt_info3 SET encuesta = (?) WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)",Array As Object(1)) + StartActivity(Intent1) + compra + Catch + Starter.encuesta = 0 + Dim cmd As DBCommand + skmt.ExecNonQuery2("UPDATE kmt_info3 SET encuesta = (?) WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)",Array As Object(2)) + ToastMessageShow("La aplicación Tienda 360 no está instalada o no puede manejar la URL.", True) + compra + End Try + cmd.Initialize + cmd.Name = "SELECT_TMP_DROP_ENCUESTA_GUNA" + cmd.Parameters = Array As Object(usuario, B4XPages.MainPage.principal.e_ruta.text, ALMACEN, "ENCUESTA") + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "CHECAENCUESTA") + Else + compra + End If + End If +End Sub + +Sub compra +' If ALMACEN = "4" Or ALMACEN = "36" Then +' Log(Subs.traeAlmacen) + +' Almacenes 6 y 79 de SCAT y Norte 45. +' En SCAT es ruta 3 +' Norte 45 (79) Rutas: 702, 703, 707, 718, 730, 732, 733, 734. + +' COACALCO- 35-- +' NORTE 45- 75-- +' ATIZAPAN- 56-- +' VALLEJO- 73-- +' IZTAPALAPA- 43-- +' CEDA- 54-- +' PACHUCA- 15-- + Private rutasEncuesta As List + rutasEncuesta.Initialize2(Array As Int(702, 703, 707, 718, 730, 732, 733, 734)) + Private alamcenesEncuesta As List + alamcenesEncuesta.Initialize2(Array As Int(15, 35, 43, 54, 56, 73, 75, 79)) ' Almacenes para la encuesta de Pedigree + +' ALMACEN = 79 +' LA_RUTA = 732 + ' Or (ALMACEN = 79 And rutasEncuesta.IndexOf(LA_RUTA.As(Int)) > -1) + + ' Encuesta Pedigree + If (alamcenesEncuesta.IndexOf(ALMACEN.As(Int)) > -1 ) Or (ALMACEN = 6 And LA_RUTA = 3) Then + Log($"${cuest.encuestaIniciada} - ${cuest.clienteConCuestionario(Subs.traeCliente)}"$) + If Not(cuest.encuestaIniciada) And Not(cuest.clienteConCuestionario(Subs.traeCliente)) Then + cuest.agregaPreguntaCheckbox("1", "¿Qué productos de Kileo Perro encuentras en esta tienda?", Array As String("Pedigree Adulto", "Pedigree Cachorro", "Pedigree Razas Pequeñas", "Champ", "PAL","DOG CHOW ADULTO","DOG CHOW CACHORRO","DOG CHOW RAZAS PEQUEÑAS","Campeon","Ganador","Poder canino","Perron","Silverkan","Woow","Chapetes","Dyno","Beriscan","Nogacan","Nutrescan","Fidus","Amigo Gourmet","Otros","Ninguno de los anteriores")) + Return False + End If + End If + + If TOMAR_FOTO = 0 Then + Cuestionario + Else + Dim Items As List + Items.Initialize + Items.Add("Selecciona una opción") + Items.Add("Tienda de Abarrotes (Abarrotes, Misceláneas, Minisupers, Particulares con Venta y Cremerías)") + Items.Add("Recaudería (Frutas y Verduras)") + Items.Add("Vinos y Licores") + Items.Add("Carnicería o Pollería") + Items.Add("Farmacia") + Items.Add("Jarciería (Productos de Limpieza)") + Items.Add("Papelería y Regalos") + Items.Add("Tortillería") + Items.Add("Escuelas") + Items.Add("Estanquillos (Puestos Semifijos)") + Items.Add("Fonda, Cocina Económica, Cafetería)") + Items.Add("Tlapalería, Ferretería") + Items.Add("Dulcería, Materias Primas") + Items.Add("Semillas y Chiles Secos") + Items.Add("Cybercafé") + Items.Add("Hotel") + Items.Add("Veterinaria") + Items.Add("Tienda de Mascotas") + Items.Add("Otros") + cb_pregunta.SetItems(Items) + girotienda = "Selecciona una opcion" + c=skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM HIST_ENCUESTA_CLIENTE WHERE HEC_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + CUENTA_MODULO = c.GetString("CUANTOS") + c.Close + If CUENTA_MODULO > 0 Then + c=skmt.ExecQuery("SELECT HEC_MODULO FROM HIST_ENCUESTA_CLIENTE WHERE HEC_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + que_modulo = c.GetString("HEC_MODULO") + c.Close + End If + Log(Subs.traeAlmacen) + c=skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM ENCUESTA_MODULO1 WHERE CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + EXISTE = c.GetString("CUANTOS") + c.Close + + c=skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM ENCUESTA_MODULO2 WHERE CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + EXISTE2 = c.GetString("CUANTOS") + c.Close + + c=skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM ENCUESTA_MODULO3 WHERE CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + EXISTE3 = c.GetString("CUANTOS") + c.Close + + c=skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM ENCUESTA_MODULO4 WHERE CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + EXISTE4 = c.GetString("CUANTOS") + c.Close + + c=skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM ENCUESTA_MODULO5 WHERE CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + EXISTE5 = c.GetString("CUANTOS") + c.Close + + ' esto para la primera encuesta m1 +' p_cliente.Visible = False +' SV_ENCUESTA.Visible = True +' SV_ENCUESTA.Panel.LoadLayout("ENCUESTA") +' Panel5.Width = Root.Width * 0.94 +' SV_ENCUESTA.Panel.Height = Panel5.Height + 60 +' Panel7.Visible = False + ' +' ' para la m2 +' p_cliente.Visible = False +' SV_ENCUESTA.Visible = True +' SV_ENCUESTA.Panel.LoadLayout("ESNCUESTA_m2") +' Panel5.Width = Root.Width * 0.94 +' SV_ENCUESTA.Panel.Height = Panel5.Height + 60 +' Panel7_M2.Visible = False +' +' ' para la m3 +' p_cliente.Visible = False +' SV_ENCUESTA.Visible = True +' SV_ENCUESTA.Panel.LoadLayout("ENCUESSTA_M3") +' Panel5.Width = Root.Width * 0.94 +' SV_ENCUESTA.Panel.Height = Panel5.Height + 60 + + If EXISTE = 0 And EXISTE2 = 0 And EXISTE3 = 0 And EXISTE4 = 0 And EXISTE5 = 0 Then + S = skmt.ExecQuery2("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("CUESTIONARIO")) + S.Position = 0 + If s.GetString("CAT_VA_VALOR") > "0" Then + '' If "3" > "0" Then + ENCUESTA = s.GetString("CAT_VA_VALOR") + ENCUESTA = "3" +' c=skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM HIST_ENCUESTA_PED_DIST_1 WHERE TIENDA IN (Select CUENTA from cuentaa)") +' c.Position=0 +' EXISTE = c.GetString("CUANTOS") +' c.Close +' If EXISTE = 0 Then +' Dim result As Int= -3 +' Do While result=-3 +' result = Msgbox2("Entiendo, acepto y consiento que GUNA usará mis datos Personales y serán tratados acorde con lo establecido en la Ley Federal de Protección de Datos Personales en Posesión de los Particulares (en lo sucesivo la “Ley”), y su respectivo Reglamento; bajo lo manifestado en el Aviso de Privacidad – Texto Completo – que se encuentra en la página www.guna.com.mx", "AVISO DE PRIVACIDAD","ACEPTO","", "NO ACEPTO",LoadBitmap(File.DirAssets,"alert2.png")) +' Select Case result +' Case DialogResponse.POSITIVE +' p_pregunta1.Visible = True +' Case DialogResponse.NEGATIVE +' ''HIST_ENCUESTA_AVISO_GIRO (HEAV_CLIENTE TEXT, HEAV_MODULO TEXT, HEAV_AVISO TEXT, HEAV_GIRO TEXT) +' skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA_AVISO_GIRO(HEAV_CLIENTE , HEAV_MODULO , HEAV_AVISO ) VALUES (?,?,?) ", Array As Object( clie_id, ENCUESTA, "NO ACEPTA")) +' +' B4XPages.ShowPage("productos") +' End Select +' +' +' Loop +' result = Msgbox2("Entiendo, acepto y consciento que GUNA usará mis datos Personales y serán tratados acorde con lo establecido en la Ley Federal de Protección de Datos Personales en Posesión de los Particulares (en lo sucesivo la “Ley”), y su respectivo Reglamento; bajo lo manifestado en el Aviso de Privacidad – Texto Completo – que se encuentra en la página www.guna.com.mx", "AVISO DE PRIVACIDAD","ACEPTO","", "NO ACEPTO",LoadBitmap(File.DirAssets,"alert2.png")) +' If result = DialogResponse.Positive Then + ' +' p_pregunta1.Visible = True +' +' Else +' ''HIST_ENCUESTA_AVISO_GIRO (HEAV_CLIENTE TEXT, HEAV_MODULO TEXT, HEAV_AVISO TEXT, HEAV_GIRO TEXT) +' skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA_AVISO_GIRO(HEAV_CLIENTE , HEAV_MODULO , HEAV_AVISO ) VALUES (?,?,?) ", Array As Object( clie_id, ENCUESTA, "NO ACEPTA")) +' +' B4XPages.ShowPage("productos") +' End If + Else + B4XPages.ShowPage("productos") + End If + Else + B4XPages.ShowPage("productos") + End If + s.Close + End If + + 'Else +' B4XPages.ShowPage("productos") + 'End If + + + +End Sub + + +Private Sub cb_pregunta_SelectedIndexChanged (Index As Int) + girotienda = Sender.As(B4XComboBox).SelectedItem + Log(girotienda) + Log(Index) +End Sub + +Private Sub b_preguntag_Click + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE kmt_info3 SET CAT_CL_GIRO = ? WHERE CAT_CL_CODIGO = ? And CAT_CL_NOMBRE = ?", Array As Object (girotienda, la_cuenta.text,La_nombre.Text)) + skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA_AVISO_GIRO(HEAV_CLIENTE , HEAV_MODULO , HEAV_AVISO ,HEAV_GIRO ) VALUES (?,?,?,?) ", Array As Object( clie_id, ENCUESTA, "ACEPTA",girotienda)) + If girotienda <> "Selecciona una opcion" Then + If girotienda = "Tienda de Abarrotes (Abarrotes, Misceláneas, Minisupers, Particulares con Venta y Cremerías)" Then + Dim result As Int= -3 + Do While result=-3 + result = Msgbox2("Entiendo, acepto y consiento que GUNA usará mis datos Personales y serán tratados acorde con lo establecido en la Ley Federal de Protección de Datos Personales en Posesión de los Particulares (en lo sucesivo la “Ley”), y su respectivo Reglamento; bajo lo manifestado en el Aviso de Privacidad – Texto Completo – que se encuentra en la página www.guna.com.mx", "AVISO DE PRIVACIDAD","ACEPTO","", "NO ACEPTO",LoadBitmap(File.DirAssets,"alert2.png")) + Select Case result + Case DialogResponse.POSITIVE +' If ALMACEN = "35" Or ALMACEN = "43" Or ALMACEN = "54" Or ALMACEN = "73" Or ALMACEN = "56" Then 'ALMACEN = "7" Then ' +' ''Or ALMACEN = "56" ATIZAPAN PEDIGRI +' p_pregunta1.Visible = False +' SV_ENCUESTA.Visible = True +' SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_PED") +' SV_ENCUESTA.Panel.Height = Panel4.Height +' Panel4.Visible = True +' b_like.Visible = False +' BT_QR.Visible = False +' B_GALLINA.Visible = False +' Tar.Visible = False +' Tels.Visible = False +' gest.Visible = False +' b_venta.Visible = False +' Guardar.Visible = False +' HIST.Visible = False +' Else + Log(que_modulo) + If que_modulo = Null Or que_modulo = " " Then que_modulo = "1" + ' Msgbox(que_modulo,"ALO") + If que_modulo < = ENCUESTA Then + If que_modulo = "1" Then + + + If p_m2.IsInitialized And p_m2.Visible Then + p_m2.Visible = False + Else If p_m3.IsInitialized And p_m3.Visible Then + p_m3.Visible = False + Else If p_m4.IsInitialized And p_m4.Visible Then + p_m4.Visible = False + Else If p_modulo5.IsInitialized And p_modulo5.Visible Then + p_modulo5.Visible = False + Else + End If + ' esto para la primera encuesta m1 + p_pregunta1.Visible = False + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + SV_ENCUESTA.Panel.LoadLayout("ENCUESTA") + p_m1.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_m1.Height + 60 + Panel7.Visible = False + + else if que_modulo = "2" Then + '' para la m2 + If p_m1.IsInitialized And p_m1.Visible Then + p_m1.Visible = False + Else + + End If + p_pregunta1.Visible = False + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + SV_ENCUESTA.Panel.LoadLayout("ESNCUESTA_m2") + p_m2.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_m2.Height + 60 + Panel7_M2.Visible = False + else if que_modulo = "3" Then + 'para la m3 + If p_m2.IsInitialized And p_m2.Visible Then + p_m2.Visible = False + Else + + End If + p_pregunta1.Visible = False + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + SV_ENCUESTA.Panel.LoadLayout("ENCUESSTA_M3") + + p_m3.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_m3.Height + 60 + else if que_modulo = "4" Then + '' para la m4 + If p_m3.IsInitialized And p_m3.Visible Then + + p_m3.Visible = False + Else + End If + p_pregunta1.Visible = False + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + p_pregunta1.Visible = False + SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M4") + p_m4.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_m4.Height + 60 + + Dim Items2 As List + Items2.Initialize + Items2.Add("Selecciona una opcion") + Items2.Add("Propio") + Items2.Add("Rentado") + cb_p3_m4.SetItems(Items2) + itemselect2 = "Selecciona una opcion" + + Dim Items3 As List + Items3.Initialize + Items3.Add("Selecciona una opcion") + Items3.Add("Completamente Surtido") + Items3.Add("Bien Surtido") + Items3.Add("Poco Surtido") + Items3.Add("Muy Poco Surtido") + Items3.Add("Sin Existencias") + cb_p4_1_m4.SetItems(Items3) + itemselect3 = "Selecciona una opcion" + cb_p4_2_m4.SetItems(Items3) + itemselect4 = "Selecciona una opcion" + cb_p4_3_m4.SetItems(Items3) + itemselect5 = "Selecciona una opcion" + cb_p4_4_m4.SetItems(Items3) + itemselect6 = "Selecciona una opcion" + cb_p4_5_m4.SetItems(Items3) + itemselect7 = "Selecciona una opcion" + else if que_modulo = "5" Then + '' 'MODULO 5 + If p_m4.IsInitialized And p_m4.Visible Then + p_m4.Visible = False + Else + End If + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + p_pregunta1.Visible = False + SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M5") + p_modulo5.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_modulo5.Height + 30 + Dim Items8 As List + Items8.Initialize + Items8.Add("Selecciona una opcion") + Items8.Add("Completamente Surtido") + Items8.Add("Bien Surtido") + Items8.Add("Poco Surtido") + Items8.Add("Muy Poco Surtido") + Items8.Add("Sin Existencias") + cb_p1_m5.SetItems(Items8) + itemselect8 = "Selecciona una opcion" + cb_p2_m5.SetItems(Items8) + itemselect9 = "Selecciona una opcion" + cb_p3_m5.SetItems(Items8) + itemselect10 = "Selecciona una opcion" + cb_p4_m5.SetItems(Items8) + itemselect11 = "Selecciona una opcion" + cb_p5_m5.SetItems(Items8) + itemselect12 = "Selecciona una opcion" + cb_p6_m5.SetItems(Items8) + itemselect13 = "Selecciona una opcion" + cb_p7_m5.SetItems(Items8) + itemselect14 = "Selecciona una opcion" + cb_p8_m5.SetItems(Items8) + itemselect15 = "Selecciona una opcion" + cb_p9_m5.SetItems(Items8) + itemselect16 = "Selecciona una opcion" + End If + Else + p_pregunta1.Visible = False + B4XPages.ShowPage("productos") + End If +' End IF + Case DialogResponse.NEGATIVE + B4XPages.ShowPage("productos") + End Select + Loop + 'fin modulos +' If girotienda = "Tienda de Abarrotes (Abarrotes, Misceláneas, Minisupers, Particulares con Venta y Cremerías)" Then +' If Subs.traeAlmacen = 36 And EXISTE4 = 0 Then +' p_cliente.Visible = False +' SV_ENCUESTA.Visible = True +' p_pregunta1.Visible = False +' SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M5") +' p_modulo5.Width = Root.Width * 0.94 +' SV_ENCUESTA.Panel.Height = p_modulo5.Height + 60 +' +' Dim Items8 As List +' Items8.Initialize +' Items8.Add("Selecciona una opcion") +' Items8.Add("Completamente Surtido") +' Items8.Add("Bien Surtido") +' Items8.Add("Poco Surtido") +' Items8.Add("Muy Poco Surtido") +' Items8.Add("Sin Existencias") +' cb_p1_m5.SetItems(Items8) +' itemselect8 = "Selecciona una opcion" +' cb_p2_m5.SetItems(Items8) +' itemselect9 = "Selecciona una opcion" +' cb_p3_m5.SetItems(Items8) +' itemselect10 = "Selecciona una opcion" +' cb_p4_m5.SetItems(Items8) +' itemselect11 = "Selecciona una opcion" +' cb_p5_m5.SetItems(Items8) +' itemselect12 = "Selecciona una opcion" +' cb_p6_m5.SetItems(Items8) +' itemselect13 = "Selecciona una opcion" +' cb_p7_m5.SetItems(Items8) +' itemselect14 = "Selecciona una opcion" +' cb_p8_m5.SetItems(Items8) +' itemselect15 = "Selecciona una opcion" +' cb_p9_m5.SetItems(Items8) +' itemselect16 = "Selecciona una opcion" +' +' ELSE IF Subs.traeAlmacen = 56 And EXISTE4 = 0 Then +' p_cliente.Visible = False +' SV_ENCUESTA.Visible = True +' p_pregunta1.Visible = False +' SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M5") +' p_modulo5.Width = Root.Width * 0.94 +' SV_ENCUESTA.Panel.Height = p_modulo5.Height + 60 +' +' Dim Items8 As List +' Items8.Initialize +' Items8.Add("Selecciona una opcion") +' Items8.Add("Completamente Surtido") +' Items8.Add("Bien Surtido") +' Items8.Add("Poco Surtido") +' Items8.Add("Muy Poco Surtido") +' Items8.Add("Sin Existencias") +' cb_p1_m5.SetItems(Items8) +' itemselect8 = "Selecciona una opcion" +' cb_p2_m5.SetItems(Items8) +' itemselect9 = "Selecciona una opcion" +' cb_p3_m5.SetItems(Items8) +' itemselect10 = "Selecciona una opcion" +' cb_p4_m5.SetItems(Items8) +' itemselect11 = "Selecciona una opcion" +' cb_p5_m5.SetItems(Items8) +' itemselect12 = "Selecciona una opcion" +' cb_p6_m5.SetItems(Items8) +' itemselect13 = "Selecciona una opcion" +' cb_p7_m5.SetItems(Items8) +' itemselect14 = "Selecciona una opcion" +' cb_p8_m5.SetItems(Items8) +' itemselect15 = "Selecciona una opcion" +' cb_p9_m5.SetItems(Items8) +' itemselect16 = "Selecciona una opcion" + ' +' Else If Subs.traeAlmacen = 4 And EXISTE5 = 0 Then +' p_cliente.Visible = False +' SV_ENCUESTA.Visible = True +' p_pregunta1.Visible = False +' SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M5") +' p_modulo5.Width = Root.Width * 0.94 +' SV_ENCUESTA.Panel.Height = p_modulo5.Height + 60 +' +' Dim Items8 As List +' Items8.Initialize +' Items8.Add("Selecciona una opcion") +' Items8.Add("Completamente Surtido") +' Items8.Add("Bien Surtido") +' Items8.Add("Poco Surtido") +' Items8.Add("Muy Poco Surtido") +' Items8.Add("Sin Existencias") +' cb_p1_m5.SetItems(Items8) +' itemselect8 = "Selecciona una opcion" +' cb_p2_m5.SetItems(Items8) +' itemselect9 = "Selecciona una opcion" +' cb_p3_m5.SetItems(Items8) +' itemselect10 = "Selecciona una opcion" +' cb_p4_m5.SetItems(Items8) +' itemselect11 = "Selecciona una opcion" +' cb_p5_m5.SetItems(Items8) +' itemselect12 = "Selecciona una opcion" +' cb_p6_m5.SetItems(Items8) +' itemselect13 = "Selecciona una opcion" +' cb_p7_m5.SetItems(Items8) +' itemselect14 = "Selecciona una opcion" +' cb_p8_m5.SetItems(Items8) +' itemselect15 = "Selecciona una opcion" +' cb_p9_m5.SetItems(Items8) +' itemselect16 = "Selecciona una opcion" + ' FIN MODULO 5 + + + ' ESTOI ES PARA MODULO 4 +' p_cliente.Visible = False +' SV_ENCUESTA.Visible = True +' p_pregunta1.Visible = False +' SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M4") +' Panel5.Width = Root.Width * 0.94 +' SV_ENCUESTA.Panel.Height = Panel5.Height + 60 +' +' Dim Items2 As List +' Items2.Initialize +' Items2.Add("Selecciona una opcion") +' Items2.Add("Propio") +' Items2.Add("Rentado") +' cb_p3_m4.SetItems(Items2) +' itemselect2 = "Selecciona una opcion" +' +' Dim Items3 As List +' Items3.Initialize +' Items3.Add("Selecciona una opcion") +' Items3.Add("Completamente Surtido") +' Items3.Add("Bien Surtido") +' Items3.Add("Poco Surtido") +' Items3.Add("Muy Poco Surtido") +' Items3.Add("Sin Existencias") +' cb_p4_1_m4.SetItems(Items3) +' itemselect3 = "Selecciona una opcion" +' cb_p4_2_m4.SetItems(Items3) +' itemselect4 = "Selecciona una opcion" +' cb_p4_3_m4.SetItems(Items3) +' itemselect5 = "Selecciona una opcion" +' cb_p4_4_m4.SetItems(Items3) +' itemselect6 = "Selecciona una opcion" +' cb_p4_5_m4.SetItems(Items3) +' itemselect7 = "Selecciona una opcion" +' End If + ' FIN MODULO 4 +' Else +' B4XPages.ShowPage("productos") +' End If + Else + p_pregunta1.Visible = False + B4XPages.ShowPage("productos") + End If + Else + Msgbox("Contesta la pregunta por favor","AVISO") + End If +End Sub + +Private Sub cb_p3_m4_SelectedIndexChanged (Index As Int) + itemselect2 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect2) + Log(Index) +End Sub + +Private Sub cb_p4_1_m4_SelectedIndexChanged (Index As Int) + itemselect3 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect3) + Log(Index) +End Sub + +Private Sub cb_p4_2_m4_SelectedIndexChanged (Index As Int) + itemselect4 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect4) + Log(Index) +End Sub + +Private Sub cb_p4_3_m4_SelectedIndexChanged (Index As Int) + itemselect5 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect5) + Log(Index) +End Sub + +Private Sub cb_p4_4_m4_SelectedIndexChanged (Index As Int) + itemselect6 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect6) + Log(Index) +End Sub + +Private Sub cb_p4_5_m4_SelectedIndexChanged (Index As Int) + itemselect7 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect7) + Log(Index) +End Sub + +Private Sub cb_p1_m5_SelectedIndexChanged (Index As Int) + itemselect8 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect8) + Log(Index) +End Sub + +Private Sub cb_p2_m5_SelectedIndexChanged (Index As Int) + itemselect9 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect9) + Log(Index) +End Sub + +Private Sub cb_p3_m5_SelectedIndexChanged (Index As Int) + itemselect10 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect10) + Log(Index) +End Sub + +Private Sub cb_p4_m5_SelectedIndexChanged (Index As Int) + itemselect11 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect11) + Log(Index) +End Sub + +Private Sub cb_p5_m5_SelectedIndexChanged (Index As Int) + itemselect12 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect12) + Log(Index) +End Sub + +Private Sub cb_p6_m5_SelectedIndexChanged (Index As Int) + itemselect13 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect13) + Log(Index) +End Sub + +Private Sub cb_p7_m5_SelectedIndexChanged (Index As Int) + itemselect14 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect14) + Log(Index) +End Sub + +Private Sub cb_p8_m5_SelectedIndexChanged (Index As Int) + itemselect15 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect15) + Log(Index) +End Sub + +Private Sub cb_p9_m5_SelectedIndexChanged (Index As Int) + itemselect16 = Sender.As(B4XComboBox).SelectedItem + Log(itemselect16) + Log(Index) +End Sub + + +Sub B_guardaencuesta_Click + Dim SI_GUARDAR As String + SI_GUARDAR = 1 + + If RB1_E1.Checked = False And RB2_E1.Checked = False And RB3_E1.Checked = False Then + SI_GUARDAR = 0 + End If + + If Panel7.Visible = True Then + If RadioButton15.Checked = False And RadioButton16.Checked = False And RadioButton17.Checked = False Then + SI_GUARDAR = 0 + End If + End If + + If RadioButton1.Checked = False And RadioButton2.Checked = False And RadioButton3.Checked = False And RadioButton4.Checked = False Then + SI_GUARDAR = 0 + End If + + If RadioButton5.Checked = False And RadioButton6.Checked = False And RadioButton7.Checked = False And RadioButton8.Checked = False And RadioButton9.Checked = False Then + SI_GUARDAR = 0 + End If + + If RadioButton10.Checked = False And RadioButton11.Checked = False And RadioButton12.Checked = False And RadioButton13.Checked = False And RadioButton14.Checked = False Then + SI_GUARDAR = 0 + End If + + If p6.Text = "" Then + SI_GUARDAR = 0 + End If + If p7.Text = "" Then + SI_GUARDAR = 0 + End If + If p8.Text = "" Then + SI_GUARDAR = 0 + End If + + If CheckBox1.Checked = False And CheckBox2.Checked = False And CheckBox3.Checked = False And CheckBox4.Checked = False And CheckBox5.Checked = False And CheckBox6.Checked = False And CheckBox7.Checked = False And CheckBox8.Checked = False Then + encuentasmapa.Put("P9", "") + Log(encuentasmapa) + End If + + If SI_GUARDAR = 1 Then + skmt.ExecNonQuery2("INSERT INTO ENCUESTA_MODULO1 (CLIENTE, ALMACEN,P1, P2, P3, P4, P5, P6, P7, P8, P9) VALUES (?,?,?,?,?,?,?,?,?,?,?)", Array As Object(Subs.traeCliente, ALMACEN, encuentasmapa.Get("P3"),encuentasmapa.Get("P1"),encuentasmapa.Get("P2"),encuentasmapa.Get("P4"),encuentasmapa.Get("P5"),p6.Text,p7.Text,p8.Text,encuentasmapa.Get("P9"))) +' SV_ENCUESTA.Visible = False +' p_cliente.Visible = True +' B4XPages.MainPage.tipo_venta = "PREVENTA" +' B4XPages.ShowPage("productos") +' MsgboxAsync("Encuesta guardada","") + RB1_E1.Checked = False + RB2_E1.Checked = False + RB3_E1.Checked = False + RadioButton15.Checked = False + RadioButton16.Checked = False + RadioButton17.Checked = False + RadioButton1.Checked = False + RadioButton2.Checked = False + RadioButton3.Checked = False + RadioButton4.Checked = False + RadioButton5.Checked = False + RadioButton6.Checked = False + RadioButton7.Checked = False + RadioButton8.Checked = False + RadioButton9.Checked = False + RadioButton10.Checked = False + RadioButton11.Checked = False + RadioButton12.Checked = False + RadioButton13.Checked = False + RadioButton14.Checked = False + p6.Text = "" + p7.Text = "" + p8.Text = "" + CheckBox1.Checked = False + CheckBox2.Checked = False + CheckBox3.Checked = False + CheckBox4.Checked = False + CheckBox5.Checked = False + CheckBox6.Checked = False + CheckBox7.Checked = False + CheckBox8.Checked = False + + If ENCUESTA > 1 Then + ' para la m2 + If p_m1.IsInitialized And p_m1.Visible Then + p_m1.Visible = False + Else + + End If + p_pregunta1.Visible = False + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + SV_ENCUESTA.Panel.LoadLayout("ESNCUESTA_m2") + p_m2.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_m2.Height + 60 + Panel7_M2.Visible = False + Else + p_pregunta1.Visible = False + SV_ENCUESTA.Visible = False + p_cliente.Visible = True +' tipo_venta = "PREVENTA" +' StartActivity(colonia2) + B4XPages.ShowPage("productos") + End If + Else + Msgbox("FALTAN DATOS DE CAPTURA FAVOR DE VALIDAR", "AVISO") + End If +End Sub + +Sub Tels_Click + B4XPages.ShowPage("NoVenta") +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel + cuest.encuestaIniciada = False + cuest.ocultPanelPregunta + If bitacora.p_transparenteInicioFin2.Visible And bitacora.b_Inicio_Fin_venta2.Text = "TERMINAR VENTA" Then + ToastMessageShow("Por favor presione el botón de TERMINAR VENTA", True) + Return False + Else if Subs.hayPedido Then + ToastMessageShow("Por favor presione el botón de GUARDAR", True) + Return False + else If p_encuesta.Visible Then + p_encuesta.Visible = False + Else iF p_camara.Visible Then + Return False +' p_camara.Visible = False +' StopCamera2 + else If p_pregunta1.Visible Then + p_pregunta1.Visible = False + Else if SV_ENCUESTA.Visible Then + SV_ENCUESTA.visible = False + p_cliente.Visible = True +' Else If B4XPages.MainPage.nota Then + + Else + B4XPages.ShowPage("Clientes") + End If +' Return True + Return False +End Sub + +Sub Tar_Click + B4XPages.ShowPage("Nota") +End Sub + +Sub DATOS_Click + B4XPages.ShowPage("telefonos") +End Sub + +Sub Guardar_Click + Guardar.SendToBack + bitacora.b_Inicio_Fin_venta2.Text = "TERMINAR VENTA" + bitacora.enVenta = False + bitacora.inicioFin + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + + 'AQUI CAMBIAR + Private s3 As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select * FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and PE_RECALCULO <> ? AND PE_RECALCULO <> ? AND PE_RECALCULO <> ?",Array As String("","null",Null)) +' LogColor(s3.RowCount,Colors.Yellow) + Private suma As Float = 0 + If s3.RowCount > 0 Then + Private s As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and PE_RECALCULO = ? AND PE_RECALCULO = ? AND PE_RECALCULO = ?",Array As String("","null",Null)) + s.Position = 0 + Private s5 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(PE_RECALCULOTOT),0) as TOTAL_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and PE_RECALCULO <> ? AND PE_RECALCULO <> ? AND PE_RECALCULO <> ?",Array As String("","null",Null)) + s5.Position = 0 + suma = s.GetString("TOTAL_CLIE") + s5.GetString("TOTAL_CLIE") + s.Close + Else If s3.RowCount = 0 Then + Private s As Cursor=B4XPages.MainPage.skmt.ExecQuery("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + s.Position=0 + suma = s.GetString("TOTAL_CLIE") + s.Close + End If + 'AQUI TERMINA + If c.GetString("CUANTOS") > 0 Then + Private cbFactura As Int = 0 + If CH_FACTURA.Checked Then cbFactura = 1 + B4XPages.MainPage.skmt.ExecNonQuery("delete from NOVENTA where NV_CLIENTE In (select cuenta from cuentaa)") + 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_FACTURA,PC_ALMACEN,PC_RUTA) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),NumberFormat2(suma,0,2,2,False), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,cbFactura,Subs.traeAlmacen,Subs.traeRuta)) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +' B4XPages.MainPage.skmt.ExecNonQuery("delete from TICKET_IMPRESO where idCliente In (select cuenta from cuentaa)") +' B4XPages.MainPage.skmt.ExecNonQuery($"insert into TICKET_IMPRESO (idCliente) values ('${Subs.traeCliente}')"$) + End If + c.Close + DateTime.TimeFormat = "HHmmss" + sTime=DateTime.Time(DateTime.Now) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_OUT = ? where HSS_OUT = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(sTime)) + ' B4XPages.MainPage.skmt.ExecNonQuery("UPDATE HIST_STAY_STORE set HSS_TOT = HSS_OUT - HSS_IN where HSS_CODIGO In (select cuenta from cuentaa)") + Try + c=B4XPages.MainPage.skmt.ExecQuery(" Select (substr(HSS_OUT,1,2) - substr(HSS_IN,1,2)) - Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then 1 Else 0 end HORAS_TOTALES, " & _ + "Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then (substr(HSS_OUT,3,2) + 60 - substr(HSS_IN,3,2)) " & _ + " Else (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) End - Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then 1 Else 0 end MINUTOS_TOTALES, " & _ + "Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then (substr(HSS_OUT,5,2) + 60 - substr(HSS_IN,5,2)) " & _ + " Else (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) end SEGUNDOS_TOTALES " & _ + " from HIST_STAY_STORE where HSS_CODIGO In (Select cuenta from cuentaa) ") + c.Position = 0 + stay_hh = c.GetString("HORAS_TOTALES") * 60 * 60 + stay_mi = c.GetString("MINUTOS_TOTALES") * 60 + stay_ss = c.GetString("SEGUNDOS_TOTALES") + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_TOT = ? where HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(stay_hh + stay_mi + stay_ss)) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_OUT set HSO_FIN = ? ", Array As Object(sTime)) + c.Close + Catch + ToastMessageShow(".",True) + End Try + DateTime.TimeFormat = "HH:mm:ss" + '########################## INICIA CODIGO PARA CREDITOS #################### + Log(BCREDITO) +' If BCREDITO = 1 And suma > 0 Then +' Msgbox2Async("¿La venta va a ser a crédito o contado?" , "AVISO", "Crédito", "", "Efectivo", LoadBitmap(File.DirAssets,"alert2.png"), False) +' Wait For Msgbox_Result (resultado As Int) +' If resultado = DialogResponse.POSITIVE Then +'' ToastMessageShow("Positivo", False) +' mandaWAMsgCredito(telefono.Trim, suma) +' Else +'' ToastMessageShow("Efectivo", False) +' End If +'' ToastMessageShow("ENVIAR MSG WA POR MONTO $XXX", False) +' End If + '########################## TERMINA CODIGO PARA CREDITOS #################### +' B4XPages.ShowPage("Principal") +End Sub + +Sub Guardar_LongClick +' bitacora.p_transparenteInicioFin2.Visible = True +' bitacora.b_Inicio_Fin_venta2.text = "TERMINAR VENTA" +End Sub + +Sub guardadoventa + +End Sub + +Sub NUEVO_Click + B4XPages.ShowPage("NuevoCliente") +End Sub + +Sub HIST_Click + B4XPages.ShowPage("Historico") +End Sub + +Sub BT_QR_Click + sc.isportrait = True + sc.timeoutDuration = 45 + sc.theViewFinderXfactor = 0.7 + sc.theViewFinderYfactor = 0.5 + sc.theResultColor = Colors.Green + sc.mustVibrate = True + sc.BeginScan("sc") +End Sub + +Sub sc_result(atype As String,Values As String, image As Bitmap) + 'Log("Type : " & atype) + 'Log("Value : " & Values) + CODIGO = Values + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM kmt_info3 WHERE CAT_CL_NUM_SERIEFISICO = ?", Array As String(CODIGO)) + DD.Position =0 + If DD.GetString("CUANTOS") > 0 Then + MsgboxAsync("Código ya asignado", "AVISO") + Else + If CODIGO.Length = 7 Then + Msgbox2Async("El código "& CODIGO & " es correcto?" , "Title", "Yes", "Cancel", "No", Null, False) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE kmt_info3 set CAT_CL_NUM_SERIEFISICO = ?, CAT_CL_LONG = ?, CAT_CL_LAT =? where CAT_CL_CODIGO In (select cuenta from cuentaa)", Array As Object(CODIGO, B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + L_QR.TEXT =CODIGO + L_QR.TextColor = Colors.Blue + B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_CODIGO_BARRAS(CODIGOKMTS, CODIGOB, LAT, LON) VALUES (?,?,?,?)", Array As Object(la_cuenta.Text,CODIGO, B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + End If + Else + MsgboxAsync("Código No Valido", "AVISO") + End If + End If + DD.Close +End Sub + +Sub sc_timedout(timedOut As Boolean) + Log("timedOut " & timedOut) +End Sub + +Sub sc_usercancelled(userCancelled As Boolean) + Log("userCancelled " & userCancelled) +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 + +Sub b_mapa_Click + B4XPages.ShowPage("mapas") +End Sub + +Sub Printer1_Connected (Success As Boolean) +' If Logger Then Log("Printer1_Connected") + If Success Then + ToastMessageShow("Impresora conectada", False) + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("MACIMP")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("MACIMP",Starter.mac_impresora)) + LogColor("Impresora conectada", Colors.Green) +' B_IMP2.Enabled = True + impresoraConectada = True + Else +' Msgbox(Printer1.ConnectedErrorMsg, "Error connecting.") 'ignore +' ToastMessageShow("Error conectando la impresora", False) + LogColor("Error conectando la impresora", Colors.Red) + errorImpresora = errorImpresora + 1 + If errorImpresora > 1 Then + Starter.MAC_IMPRESORA = "0" + errorImpresora = 0 + End If + End If +End Sub + +Sub B_IMP_Click +' Printer1.Connect2 +' c=Starter.skmt.ExecQuery2("select count(*) AS CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("PERFIL")) +' c.Position =0 +' perfil = c.GetString("CUANTOS") +' c.Close + +' If perfil > 0 Then +' c=Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("PERFIL")) +' If c.RowCount > 0 Then +' c.Position =0 +' perfil = c.GetString("CAT_VA_VALOR") +' c.Close +' End If +' LogColor(perfil,Colors.Magenta) +' End If + + If ALMACEN = 87 Or ALMACEN = 6 Then + If Subs.traemontoprod Then + Impresion2 + Else + Impresion + End If + Else + Impresion + End If + B4XPages.MainPage.skmt.ExecNonQuery("delete from TICKET_IMPRESO where idCliente In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery($"insert into TICKET_IMPRESO (idCliente) values ('${Subs.traeCliente}')"$) +End Sub + +Sub Impresion2 + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c.Close +' c=Starter.skmt.ExecQuery2("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION =?", Array As String ("SUCURSAL")) +' c.Position = 0 +' sucursal = c.GetString("CAT_VA_VALOR") +' c.Close + + ProgressDialogShow("Imprimiendo, un momento ...") + Printer1.DisConnect + If Not(Printer1.IsConnected) Then + Log("Conectando a impresora ...") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) + Sleep(1000) + Log("++++++ " & cont) + cont = cont + 1 + If cont = 2 Then Printer1.Connect 'Tratamos de reconectar + If cont > 3 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + Else + Log("conectando 2") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) Or Not(Printer1.IsConnected) + Sleep(1000) + Log("****** " & cont) + cont = cont + 1 + If cont = 2 Then Printer1.Connect + If cont > 3 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + End If + + TAMANO = 0 + ESPACIO = 21 + BLANCO = " " + Dim bmp As Bitmap + bmp.InitializeResize(File.DirAssets, "guna.png", 192, 192, True) 'ignore + Dim myimage As AnImage = Printer1.ImageToBWIMage(bmp) + + myimage = Printer1.DitherImage2D(myimage, 128) + + myimage= Printer1.PackImage(myimage) + Printer1.WriteString(CRLF) ' nudge the printer to show the user something is happening + Printer1.WriteString(Printer1.REVERSE) + + Printer1.PrintImage(myimage) + Printer1.WriteString(Printer1.UNREVERSE) + + 'Printer1.Justify = 1 + 'printer.Initialize(cmp20.OutputStream) +' Printer1.WriteString("DISTRIBUIDORA ROCHA TULA PACHUCA" & CRLF) + Printer1.WriteString("RFC: DRT-110316-9J1" & CRLF) +' Printer1.WriteString(sucursal & CRLF) + Printer1.WriteString(sDate & CRLF) + Printer1.WriteString(sTime & CRLF) + Printer1.WriteString("Vendedor:" & usuario & CRLF) + Printer1.WriteString("Tienda: " & La_nombre.Text & CRLF) + Printer1.WriteString("ID.Cliente: " & la_cuenta.Text & CRLF) + Printer1.WriteString("Calle: " & la_Calle.Text & CRLF) + Printer1.WriteString("Colonia: " & la_col.Text & CRLF) +' Printer1.WriteString("C.P.: " & la_cp.Text & CRLF) + Printer1.WriteString("Entre calle1: " & l_entre1.Text & CRLF) + Printer1.WriteString("Entre Calle2: " & l_entre2.Text & CRLF) + + Printer1.WriteString("-----------PREVENTA-----------" & CRLF) + ' aqui es donde esta el pedo de julieta de los descuentos quitar el precio2 pero meter un if para saber si es ruta especial o es normal o que show. + s=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_CEDIS <> ? AND LENGTH(PE_CEDIS) < 4 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PROID", Array As String("DUR")) + If S.RowCount>0 Then + For i=0 To S.RowCount -1 + S.Position=i + If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & CRLF) + + Else + + Printer1.WriteString(s.GetString("PE_CANT") & " " & s.GetString("PE_PRONOMBRE") & CRLF) + TAMANO = s.GetLong("L_CANT") + TAMANO + TAMANO = s.GetLong("L_COSTOU") + TAMANO + TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + + ESPACIO = ESPACIO - TAMANO + + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + Printer1.WriteString(BLANCO & s.GETSTRING("PE_CANT") & " X $" & s.GETSTRING("PE_COSTOU") & " $" & s.GETSTRING("PE_COSTO_TOT") & CRLF ) + TAMANO = 0 + ESPACIO = 21 + BLANCO = " " + End If + Next + End If + s.Close + Printer1.WriteString(" " & CRLF) + s=skmt.ExecQuery("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE LENGTH(PE_CEDIS) > 3 AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP ) AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_CEDIS, PE_COSTOU") + If S.RowCount>0 Then + Printer1.WriteString("------------PROMOS------------" & CRLF) + For i=0 To S.RowCount -1 + S.Position=i + If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & CRLF) + + Else + + Printer1.WriteString(s.GetString("PE_CANT") & " " & s.GetString("PE_PRONOMBRE") & CRLF) + TAMANO = s.GetLong("L_CANT") + TAMANO + TAMANO = s.GetLong("L_COSTOU") + TAMANO + TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + + ESPACIO = ESPACIO - TAMANO + + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + Printer1.WriteString(BLANCO & s.GETSTRING("PE_CANT") & " X $" & s.GETSTRING("PE_COSTOU") & " $" & s.GETSTRING("PE_COSTO_TOT") & CRLF ) + TAMANO = 0 + ESPACIO = 21 + BLANCO = " " + End If + Next + Printer1.WriteString(" " & CRLF) + End If + s.Close + +' Printer1.WriteString("-------------RMI..-----------" & CRLF) +' ' aqui es donde esta el pedo de julieta de los descuentos quitar el precio2 pero meter un if para saber si es ruta especial o es normal o que show. +' s=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_TIPO = ? AND PE_CEDIS = ? AND LENGTH(PE_CEDIS) < 4 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PROID", Array As String("PREVENTA","DUR")) +' If S.RowCount>0 Then +' For i=0 To S.RowCount -1 +' S.Position=i +' If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then +' Printer1.WriteString(s.GetString("PE_PRONOMBRE") & CRLF) +' +' Else +' +' Printer1.WriteString(s.GetString("PE_CANT") & " " & s.GetString("PE_PRONOMBRE") & CRLF) +' TAMANO = s.GetLong("L_CANT") + TAMANO +' TAMANO = s.GetLong("L_COSTOU") + TAMANO +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO +' +' ESPACIO = ESPACIO - TAMANO +' +' For E=0 To ESPACIO -1 +' BLANCO = " " & BLANCO +' Next +' Printer1.WriteString(BLANCO & s.GETSTRING("PE_CANT") & " X $" & s.GETSTRING("PE_COSTOU") & " $" & s.GETSTRING("PE_COSTO_TOT") & CRLF ) +' TAMANO = 0 +' ESPACIO = 21 +' BLANCO = " " +' End If +' Next +' End If +' s.Close + + s=skmt.ExecQuery("select SUM(PE_COSTO_TOT) AS TOTAL FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + s.Position =0 + ' If s.GetString("TOTAL") - s.GetString("TOTAL2") <> 0 Then + ' Printer1.WriteString("Descuento: $" & (s.GetString("TOTAL2") - s.GetString("TOTAL"))) + ' End If + Printer1.WriteString("Subtotal Preventa: $" & s.GetString("TOTAL") & CRLF) + s.Close + c= skmt.ExecQuery("select sum(PE_CANT) as PC_NOART from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP )") + C.Position=0 + Printer1.WriteString("Total Articulos: " & c.GetString("PC_NOART") & CRLF) + c.Close + s=skmt.ExecQuery("select SUM(PE_COSTO_TOT) AS TOTAL FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + s.Position =0 + ' If s.GetString("TOTAL") - s.GetString("TOTAL2") <> 0 Then + ' Printer1.WriteString("Descuento: $" & (s.GetString("TOTAL2") - s.GetString("TOTAL"))) + ' End If + Printer1.WriteString("Descuento: $" & 150 & CRLF) + Printer1.WriteString("Total Preventa: $" & (s.GetString("TOTAL") -150 )& CRLF) + + Printer1.WriteString(" " & CRLF) + Printer1.WriteString("------------------------------" & CRLF) + Printer1.WriteString("ENTREGA EN :" & CRLF) + Printer1.WriteString(la_Calle.Text & CRLF) + Printer1.WriteString("----ESTE TICKET NO ES UN -----" & CRLF) + Printer1.WriteString("--COMPROBANTE FISCAL, SOLO ES-" & CRLF) + Printer1.WriteString("--------INFORMATIVO-----------" & CRLF) + Printer1.WriteString("------------------------------" & CRLF) + Printer1.WriteString(" " & CRLF) + + Sleep(1000) + Printer1.DisConnect + + ProgressDialogHide +' printer.Flush + ' printer.Close +End Sub + +Sub Impresion + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c.Close +' c=Starter.skmt.ExecQuery2("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION =?", Array As String ("SUCURSAL")) +' c.Position = 0 +' sucursal = c.GetString("CAT_VA_VALOR") +' c.Close + + ProgressDialogShow("Imprimiendo, un momento ...") + Printer1.DisConnect + If Not(Printer1.IsConnected) Then + Log("Conectando a impresora ...") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) + Sleep(1000) + Log("++++++ " & cont) + cont = cont + 1 + If cont = 2 Then Printer1.Connect 'Tratamos de reconectar + If cont > 3 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + Else + Log("conectando 2") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) Or Not(Printer1.IsConnected) + Sleep(1000) + Log("****** " & cont) + cont = cont + 1 + If cont = 2 Then Printer1.Connect + If cont > 3 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + End If + + TAMANO = 0 + ESPACIO = 21 + BLANCO = " " + Dim bmp As Bitmap + bmp.InitializeResize(File.DirAssets, "guna.png", 192, 192, True) 'ignore + Dim myimage As AnImage = Printer1.ImageToBWIMage(bmp) + + myimage = Printer1.DitherImage2D(myimage, 128) + + myimage= Printer1.PackImage(myimage) + Printer1.WriteString(CRLF) ' nudge the printer to show the user something is happening + Printer1.WriteString(Printer1.REVERSE) + + Printer1.PrintImage(myimage) + Printer1.WriteString(Printer1.UNREVERSE) + + 'Printer1.Justify = 1 + 'printer.Initialize(cmp20.OutputStream) +' Printer1.WriteString("DISTRIBUIDORA ROCHA TULA PACHUCA" & CRLF) + Printer1.WriteString("RFC: DRT-110316-9J1" & CRLF) +' Printer1.WriteString(sucursal & CRLF) + Printer1.WriteString(sDate & CRLF) + Printer1.WriteString(sTime & CRLF) + Printer1.WriteString("Vendedor:" & usuario & CRLF) + Printer1.WriteString("Tienda: " & La_nombre.Text & CRLF) + Printer1.WriteString("ID.Cliente: " & la_cuenta.Text & CRLF) + Printer1.WriteString("Calle: " & la_Calle.Text & CRLF) + Printer1.WriteString("Colonia: " & la_col.Text & CRLF) +' Printer1.WriteString("C.P.: " & la_cp.Text & CRLF) + Printer1.WriteString("Entre calle1: " & l_entre1.Text & CRLF) + Printer1.WriteString("Entre Calle2: " & l_entre2.Text & CRLF) + + Printer1.WriteString("-----------PREVENTA-----------" & CRLF) + ' aqui es donde esta el pedo de julieta de los descuentos quitar el precio2 pero meter un if para saber si es ruta especial o es normal o que show. + s=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_CEDIS <> ? AND LENGTH(PE_CEDIS) < 4 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PROID", Array As String("DUR")) + If S.RowCount>0 Then + For i=0 To S.RowCount -1 + S.Position=i + If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & CRLF) + + Else + + Printer1.WriteString(s.GetString("PE_CANT") & " " & s.GetString("PE_PRONOMBRE") & CRLF) + TAMANO = s.GetLong("L_CANT") + TAMANO + TAMANO = s.GetLong("L_COSTOU") + TAMANO + TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + + ESPACIO = ESPACIO - TAMANO + + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + Printer1.WriteString(BLANCO & s.GETSTRING("PE_CANT") & " X $" & s.GETSTRING("PE_COSTOU") & " $" & s.GETSTRING("PE_COSTO_TOT") & CRLF ) + TAMANO = 0 + ESPACIO = 21 + BLANCO = " " + End If + Next + End If + s.Close + Printer1.WriteString(" " & CRLF) + s=skmt.ExecQuery("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE LENGTH(PE_CEDIS) > 3 AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP ) AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_CEDIS, PE_COSTOU") + If S.RowCount>0 Then + Printer1.WriteString("------------PROMOS------------" & CRLF) + For i=0 To S.RowCount -1 + S.Position=i + If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & CRLF) + + Else + + Printer1.WriteString(s.GetString("PE_CANT") & " " & s.GetString("PE_PRONOMBRE") & CRLF) + TAMANO = s.GetLong("L_CANT") + TAMANO + TAMANO = s.GetLong("L_COSTOU") + TAMANO + TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + + ESPACIO = ESPACIO - TAMANO + + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + Printer1.WriteString(BLANCO & s.GETSTRING("PE_CANT") & " X $" & s.GETSTRING("PE_COSTOU") & " $" & s.GETSTRING("PE_COSTO_TOT") & CRLF ) + TAMANO = 0 + ESPACIO = 21 + BLANCO = " " + End If + Next + Printer1.WriteString(" " & CRLF) + End If + s.Close + +' Printer1.WriteString("-------------RMI..-----------" & CRLF) +' ' aqui es donde esta el pedo de julieta de los descuentos quitar el precio2 pero meter un if para saber si es ruta especial o es normal o que show. +' s=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_TIPO = ? AND PE_CEDIS = ? AND LENGTH(PE_CEDIS) < 4 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PROID", Array As String("PREVENTA","DUR")) +' If S.RowCount>0 Then +' For i=0 To S.RowCount -1 +' S.Position=i +' If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then +' Printer1.WriteString(s.GetString("PE_PRONOMBRE") & CRLF) +' +' Else +' +' Printer1.WriteString(s.GetString("PE_CANT") & " " & s.GetString("PE_PRONOMBRE") & CRLF) +' TAMANO = s.GetLong("L_CANT") + TAMANO +' TAMANO = s.GetLong("L_COSTOU") + TAMANO +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO +' +' ESPACIO = ESPACIO - TAMANO +' +' For E=0 To ESPACIO -1 +' BLANCO = " " & BLANCO +' Next +' Printer1.WriteString(BLANCO & s.GETSTRING("PE_CANT") & " X $" & s.GETSTRING("PE_COSTOU") & " $" & s.GETSTRING("PE_COSTO_TOT") & CRLF ) +' TAMANO = 0 +' ESPACIO = 21 +' BLANCO = " " +' End If +' Next +' End If +' s.Close + + s=skmt.ExecQuery("select SUM(PE_COSTO_TOT) AS TOTAL FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + s.Position =0 + ' If s.GetString("TOTAL") - s.GetString("TOTAL2") <> 0 Then + ' Printer1.WriteString("Descuento: $" & (s.GetString("TOTAL2") - s.GetString("TOTAL"))) + ' End If + Printer1.WriteString("Total Preventa: $" & s.GetString("TOTAL") & CRLF) + s.Close + c= skmt.ExecQuery("select sum(PE_CANT) as PC_NOART from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP )") + C.Position=0 + Printer1.WriteString("Total Articulos: " & c.GetString("PC_NOART") & CRLF) + c.Close + + Printer1.WriteString(" " & CRLF) + Printer1.WriteString("------------------------------" & CRLF) + Printer1.WriteString("ENTREGA EN :" & CRLF) + Printer1.WriteString(la_Calle.Text & CRLF) + Printer1.WriteString("----ESTE TICKET NO ES UN -----" & CRLF) + Printer1.WriteString("--COMPROBANTE FISCAL, SOLO ES-" & CRLF) + Printer1.WriteString("--------INFORMATIVO-----------" & CRLF) + Printer1.WriteString("------------------------------" & CRLF) + Printer1.WriteString(" " & CRLF) + + Sleep(1000) + Printer1.DisConnect + + ProgressDialogHide +' printer.Flush + ' printer.Close +End Sub + +'Sub B_IMP_Click +' TAMANO = 0 +' ESPACIO = 21 +' BLANCO = " " +' printer.Initialize(cmp20.OutputStream) +' printer.WriteLine("DURAKELO S.A. de C.V.") +' printer.WriteLine("RFC: DUR-011025-T12") +' printer.WriteLine("Tel.: 618-826-0104") +' printer.WriteLine("Vendedor: KMTS ") +' printer.WriteLine("Tienda: " & La_nombre.Text) +' printer.WriteLine("-----------PREVENTA-----------") +' s=B4XPages.MainPage.skmt.ExecQuery("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU, PE_COSTO_TOT, length(PE_COSTO_TOT) as L_COSTO_TOT FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") +' If S.RowCount>0 Then +' For i=0 To S.RowCount -1 +' S.Position=i +' printer.WriteLine(s.GetString("PE_CANT") & " " & s.GetString("PE_PRONOMBRE")) +' TAMANO = s.GetLong("L_CANT") + TAMANO +' TAMANO = s.GetLong("L_COSTOU") + TAMANO +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO +' ESPACIO = ESPACIO - TAMANO +' For E=0 To ESPACIO -1 +' BLANCO = " " & BLANCO +' Next +' printer.WriteLine(BLANCO & s.GETSTRING("PE_CANT") & " X $" & s.GETSTRING("PE_COSTOU") & " $" & s.GETSTRING("PE_COSTO_TOT") ) +' TAMANO = 0 +' ESPACIO = 21 +' BLANCO = " " +' Next +' End If +' s.Close +' printer.WriteLine("Total Preventa: $" & total_cliente) +' printer.WriteLine("------------VENTA-------------") +' printer.WriteLine(" ") +' printer.WriteLine("TOTAL: $" & total_cliente) +' printer.WriteLine(" ") +' printer.WriteLine("----ESTE TICKET NO ES UN -----") +' printer.WriteLine("--COMPROBANTE FISCAL, SOLO ES-") +' printer.WriteLine("--------INFORMATIVO-----------") +' printer.WriteLine("------------------------------") +' printer.WriteLine(" ") +' printer.Flush +'' printer.Close +'End Sub + +Sub Printer_Connected (Success As Boolean) + If Success Then + B_IMP.Enabled = True + Else + B_IMP.Enabled = False + If Msgbox2("", "Printer Error","Reprint","Cancel","",Null) = DialogResponse.POSITIVE Then 'Ignore + StartPrinter + End If + End If +End Sub + +Sub StartPrinter + Dim PairedDevices As Map + Dim L As List + Dim resimp As Int + ToastMessageShow("Printing.....",True) + PairedDevices.Initialize + Try + PairedDevices = cmp20.GetPairedDevices + Catch + Msgbox("Getting Paired Devices","Printer Error") 'Ignore + printer.Close + cmp20.Disconnect + End Try + If PairedDevices.Size = 0 Then + Msgbox("Error Connecting to Printer - Printer Not Found","") 'Ignore + Return + End If + If PairedDevices.Size = 1 Then + Try + cmp20.ConnectInsecure(btAdmin,PairedDevices.Get(PairedDevices.GetKeyAt(0)),1) + Catch + Msgbox("Connecting","Printer Error") 'Ignore + printer.Close + cmp20.Disconnect + End Try + Else + L.Initialize + For i = 0 To PairedDevices.Size - 1 + L.Add(PairedDevices.GetKeyAt(i)) + Next + resimp = InputList(L, "Choose device", -1) 'Ignore + If resimp <> DialogResponse.CANCEL Then + cmp20.Connect(PairedDevices.Get(L.Get(resimp))) + End If + End If +End Sub + +Sub B_GUARDA_C_Click + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + 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) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object ("4",.01 , .01, 2, "KNORR RINDE MAS 70 GR", "GUNA2",la_cuenta.TEXT, sDate & sTime, usuario,LA_RUTA)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_FACE(HFCLIENTE, HFALIAS,HFRUTA,HFALMACEN) VALUES (?,?,?,?) ", Array As Object(la_cuenta.Text, I_COMPRA.Text,LA_RUTA,ALMACEN)) + Panel1.Visible = False + b_like.Visible = True + Tar.Visible = True + Tels.Visible = True + gest.Visible = True + b_like.Visible = False + Guardar.Visible = True +End Sub + +Sub b_venta_Click + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) +' s=B4XPages.MainPage.skmt.ExecQuery("select COUNT(*) AS CUANTOS from HIST_ENCUESTA where HE_CLIE In (Select cuenta from cuentaa)") +' s.Position= 0 +' If s.GetString("CUANTOS") = 0 Then +' c=B4XPages.MainPage.skmt.ExecQuery2("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String("CUESTIONARIO")) +' c.Position =0 +' If c.GetString("CAT_VA_VALOR") = "2" Then +' res = Msgbox2("El cliente maneja CAZARES ?","CAZARES", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'Ignore +' If res = DialogResponse.POSITIVE Then +' B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_RES, HE_FECHA, HE_TIPO) VALUES (?,?,?,?)", Array As Object(la_cuenta.Text, "SI",sDate & sTime,"TIENE")) +' Panel1.Visible =True +' I_COMPRA.Text = "" +' BT_QR.Visible= False +' Else +' B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_RES, HE_FECHA, HE_TIPO) VALUES (?,?,?,?)", Array As Object(la_cuenta.Text, "NO",sDate & sTime,"TIENE")) +' B4XPages.MainPage.tipo_venta = "VENTA" +' B4XPages.ShowPage("Productos") +' End If +' Else +' B4XPages.MainPage.tipo_venta = "VENTA" +' B4XPages.ShowPage("Productos") +' End If +' c.Close +' Else +' B4XPages.MainPage.tipo_venta = "VENTA" +' B4XPages.ShowPage("Productos") +' End If +' s.Close +End Sub + +Sub B_E_NEXT_Click + If E_RES_E.Text <> "" Then + B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_RES, HE_FECHA, HE_TIPO) VALUES (?,?,?,?)", Array As Object(la_cuenta.Text, E_RES_E.Text,sDate & sTime,"DONDE")) + Panel2.Visible = False + B4XPages.ShowPage("Productos") + Else + Msgbox("SIN RESPUESTA","AVISO") 'Ignore + End If +End Sub + +Sub RB1_CheckedChange(Checked As Boolean) + If RB1.Checked = True Then + E_RES_E.Text = "CENTRAL DE ABASTOS" + End If +End Sub + +Sub RB2_CheckedChange(Checked As Boolean) + If RB2.Checked = True Then + E_RES_E.Text = "AUTOSERVICIO" + End If +End Sub + +Sub RB3_CheckedChange(Checked As Boolean) + If RB3.Checked = True Then + E_RES_E.Text = "CLUB DE PRECIO" + End If +End Sub + +Sub RB4_CheckedChange(Checked As Boolean) + If RB4.Checked = True Then + E_RES_E.Text = "DIRECTO PEDEGREE" + End If +End Sub + +Sub b_like_Click + Panel1.Visible = True + b_like.Visible = False + Tar.Visible = False + Tels.Visible = False + gest.Visible = False ' : ToastMessageShow("bbbb", False) + b_venta.Visible = False + Guardar.Visible = False +End Sub + +Sub B_GPS_Click + Dim result As Int + result = Msgbox2("Esta seguro de cambiar las coordenadas de este cliente", "Aviso GPS", "SI", "", "NO", LoadBitmap(File.DirAssets, "alerta.jpg")) 'Ignore + If result = DialogResponse.Positive Then + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE kmt_info3 SET CAT_CL_LAT = ?, CAT_CL_LONG = ? where CAT_CL_CODIGO In (Select cuenta from cuentaa)", Array As Object(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + B4XPage_Appear + End If +End Sub + +Private Sub p_cliente_Click + 'Nada aqui, solo esta para que los clics no se pasen hacia atras. +End Sub + +Private Sub Panel5_Click + +End Sub + +' P2 M1 + +Private Sub RB1_E1_CheckedChange(Checked As Boolean) + Log($"RB1 Clicked - chk:${Sender.As(RadioButton).Checked}"$) + encuentasmapa.Put("P1", Sender.As(RadioButton).text) + encuentasmapa.Remove("P2") + Panel7.Visible = False + RadioButton17.Checked = False + RadioButton16.Checked = False + RadioButton15.Checked = False + encuentasmapa.Remove("P2") + Log(encuentasmapa) +End Sub + +Private Sub RB2_E1_CheckedChange(Checked As Boolean) + Log($"RB2 Clicked - chk:${Sender.As(RadioButton).Checked}"$) + encuentasmapa.Put("P1", Sender.As(RadioButton).text) + RadioButton17.Checked = False + encuentasmapa.Remove("P2") + RadioButton17.Checked = False + RadioButton16.Checked = False + RadioButton15.Checked = False + Panel7.Visible = False + encuentasmapa.Remove("P2") + Log(encuentasmapa) +End Sub + +Private Sub RB3_E1_CheckedChange(Checked As Boolean) + Log($"RB3 Clicked - chk:${Sender.As(RadioButton).Checked}"$) + encuentasmapa.Put("P1", Sender.As(RadioButton).text) + + Panel7.Visible = True + Log(encuentasmapa) +End Sub + +' FIN P2 M1 + +' p2_1 m1 +Private Sub RadioButton17_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P2", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton16_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P2", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton15_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P2", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub +' fin p2_1 m1 + +'PREGUNTA 1 MODULO 1 + +Private Sub RadioButton1_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P3", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton2_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P3", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton3_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P3", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton4_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P3", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +' FIN PREGUNTA 1 MODULO 1 + +' P3 M1 +Private Sub RadioButton5_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P4", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton6_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P4", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton7_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P4", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton8_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P4", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton9_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P4", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +' FIN P3 M1 + +'P4 M1 + +Private Sub RadioButton10_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P5", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton11_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P5", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton12_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P5", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton13_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P5", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +Private Sub RadioButton14_CheckedChange(Checked As Boolean) + encuentasmapa.Put("P5", Sender.As(RadioButton).text) + Log(encuentasmapa) +End Sub + +' FIN P4 M1 + +Private Sub CheckBox1_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox1.Text + If CheckBox2.Checked Then textemp = textemp & ", " & CheckBox2.Text + If CheckBox3.Checked Then textemp = textemp & ", " & CheckBox3.Text + If CheckBox4.Checked Then textemp = textemp & ", " & CheckBox4.Text + If CheckBox5.Checked Then textemp = textemp & ", " & CheckBox5.Text + If CheckBox6.Checked Then textemp = textemp & ", " & CheckBox6.Text + If CheckBox7.Checked Then textemp = textemp & ", " & CheckBox7.Text + If CheckBox8.Checked Then textemp = textemp & ", " & CheckBox8.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub CheckBox2_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox2.Text + If CheckBox1.Checked Then textemp = textemp & ", " & CheckBox1.Text + If CheckBox3.Checked Then textemp = textemp & ", " & CheckBox3.Text + If CheckBox4.Checked Then textemp = textemp & ", " & CheckBox4.Text + If CheckBox5.Checked Then textemp = textemp & ", " & CheckBox5.Text + If CheckBox6.Checked Then textemp = textemp & ", " & CheckBox6.Text + If CheckBox7.Checked Then textemp = textemp & ", " & CheckBox7.Text + If CheckBox8.Checked Then textemp = textemp & ", " & CheckBox8.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub CheckBox3_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox3.Text + If CheckBox1.Checked Then textemp = textemp & ", " & CheckBox1.Text + If CheckBox2.Checked Then textemp = textemp & ", " & CheckBox2.Text + If CheckBox4.Checked Then textemp = textemp & ", " & CheckBox4.Text + If CheckBox5.Checked Then textemp = textemp & ", " & CheckBox5.Text + If CheckBox6.Checked Then textemp = textemp & ", " & CheckBox6.Text + If CheckBox7.Checked Then textemp = textemp & ", " & CheckBox7.Text + If CheckBox8.Checked Then textemp = textemp & ", " & CheckBox8.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub CheckBox4_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox4.Text + If CheckBox1.Checked Then textemp = textemp & ", " & CheckBox1.Text + If CheckBox2.Checked Then textemp = textemp & ", " & CheckBox2.Text + If CheckBox3.Checked Then textemp = textemp & ", " & CheckBox3.Text + If CheckBox5.Checked Then textemp = textemp & ", " & CheckBox5.Text + If CheckBox6.Checked Then textemp = textemp & ", " & CheckBox6.Text + If CheckBox7.Checked Then textemp = textemp & ", " & CheckBox7.Text + If CheckBox8.Checked Then textemp = textemp & ", " & CheckBox8.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub CheckBox5_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox5.Text + If CheckBox1.Checked Then textemp = textemp & ", " & CheckBox1.Text + If CheckBox2.Checked Then textemp = textemp & ", " & CheckBox2.Text + If CheckBox3.Checked Then textemp = textemp & ", " & CheckBox3.Text + If CheckBox4.Checked Then textemp = textemp & ", " & CheckBox4.Text + If CheckBox6.Checked Then textemp = textemp & ", " & CheckBox6.Text + If CheckBox7.Checked Then textemp = textemp & ", " & CheckBox7.Text + If CheckBox8.Checked Then textemp = textemp & ", " & CheckBox8.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub CheckBox6_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox6.Text + If CheckBox1.Checked Then textemp = textemp & ", " & CheckBox1.Text + If CheckBox2.Checked Then textemp = textemp & ", " & CheckBox2.Text + If CheckBox3.Checked Then textemp = textemp & ", " & CheckBox3.Text + If CheckBox4.Checked Then textemp = textemp & ", " & CheckBox4.Text + If CheckBox5.Checked Then textemp = textemp & ", " & CheckBox5.Text + If CheckBox7.Checked Then textemp = textemp & ", " & CheckBox7.Text + If CheckBox8.Checked Then textemp = textemp & ", " & CheckBox8.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub CheckBox7_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox7.Text + If CheckBox1.Checked Then textemp = textemp & ", " & CheckBox1.Text + If CheckBox2.Checked Then textemp = textemp & ", " & CheckBox2.Text + If CheckBox3.Checked Then textemp = textemp & ", " & CheckBox3.Text + If CheckBox4.Checked Then textemp = textemp & ", " & CheckBox4.Text + If CheckBox5.Checked Then textemp = textemp & ", " & CheckBox5.Text + If CheckBox6.Checked Then textemp = textemp & ", " & CheckBox6.Text + If CheckBox8.Checked Then textemp = textemp & ", " & CheckBox8.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub CheckBox8_CheckedChange(Checked As Boolean) + Dim textemp As String ="" + textemp = CheckBox8.Text + If CheckBox1.Checked Then textemp = textemp & ", " & CheckBox1.Text + If CheckBox2.Checked Then textemp = textemp & ", " & CheckBox2.Text + If CheckBox3.Checked Then textemp = textemp & ", " & CheckBox3.Text + If CheckBox4.Checked Then textemp = textemp & ", " & CheckBox4.Text + If CheckBox5.Checked Then textemp = textemp & ", " & CheckBox5.Text + If CheckBox6.Checked Then textemp = textemp & ", " & CheckBox6.Text + If CheckBox7.Checked Then textemp = textemp & ", " & CheckBox7.Text + encuentasmapa.Put("P9", textemp) + Log(encuentasmapa) +End Sub + +Private Sub B_guardaencuesta_m2_Click + P3_M2 = "" + P6_M2 = "" + P4_M2 = "" + + PASA = "1" + If et_p1_m2.Text = "" Then PASA = "0" + If et_p2_m2.Text = "" Then PASA = "0" + P4_M2 = "" + If rd1_p4_m2.Checked Then P4_M2 = "ALTO" + If rd2_p4_m2.Checked Then P4_M2 = "MEDIO" + If rd3_p4_m2.Checked Then P4_M2 = "BAJO" + + If P4_M2 = "" Then PASA = "0" + + P6_M2 = "" + If RB1_P6_M2.Checked Then P6_M2 = "LUNES" + If RB2_P6_M2.Checked Then P6_M2 = "MARTES" + If RB3_P6_M2.Checked Then P6_M2 = "MIERCOLES" + If RB4_P6_M2.Checked Then P6_M2 = "JUEVES" + If RB5_P6_M2.Checked Then P6_M2 = "VIERNES" + If RB6_P6_M2.Checked Then P6_M2 = "SABADO" + If RB7_P6_M2.Checked Then P6_M2 = "DOMINGO" + + If P6_M2 = "" Then PASA = "0" + +' P3_M2 = CB1_P3_M2.Checked & "," & CB2_P3_M2.Checked & "," & CB3_P3_M2.Checked & "," & CB4_P3_M2.Checked & "," & CB5_P3_M2.Checked & "," & CB6_P3_M2.Checked & "," & RB1_P3_M2.Checked & "," & RB2_P3_M2.Checked & "," & RB3_P3_M2.Checked& "," & ET_P3_M2.TEXT & "," & CB1_P4_M2.Checked & "," & CB2_P4_M2.Checked & "," & CB3_P4_M2.Checked & "," & CB4_P4_M2.Checked + If CB1_P3_M2.Checked = False And CB2_P3_M2.Checked = False And CB3_P3_M2.Checked = False And CB4_P3_M2.Checked = False And CB5_P3_M2.Checked = False And CB6_P3_M2.Checked = False And RB1_P3_M2.Checked = False And RB2_P3_M2.Checked = False And RB3_P3_M2.Checked = False And ET_P3_M2.TEXT = False And CB1_P4_M2.Checked = False And CB2_P4_M2.Checked = False And CB3_P4_M2.Checked = False And CB4_P4_M2.Checked = False Then PASA = "0" + If et_p5_m2.Text = "" Then PASA = "0" + Log(textemp2) + If textemp2 <> "" And textemp2.SubString2(0,2) = ", " Then textemp2 = textemp2.SubString(2) + Log(textemp2) + P3_M2 = textemp2 + If RB2_P4_M2.Checked Then + P3_M2 = P3_M2 &"|" & "NO" + + Else if RB1_P4_M2.Checked Then + P3_M2 = P3_M2 &"|" & "SI" + If ET_P3_M2.Text = "" Then + If RB1_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Rappi" + If RB2_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Coca Cola" + If RB3_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Modelo" + If RB4_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Rabbit" + Else If ET_P3_M2.Text <> "" Then + If RB1_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Rappi" + If RB2_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Coca Cola" + If RB3_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Modelo" + If RB4_P3_M2.Checked Then P3_M2 = P3_M2 &"|" & "Rabbit" + P3_M2 = P3_M2 &", " & ET_P3_M2.Text + End If + End If + If textemp3 <> "" And textemp3.SubString2(0,2) = ", " Then textemp3 = textemp3.SubString(2) + + P3_M2 = P3_M2 &"|" & textemp3 + + If P3_M2 <> "" And P3_M2.SubString2(0,2) = ", " Then P3_M2 = P3_M2.SubString(2) + LogColor(P3_M2,Colors.BlUE) + If PASA = "1" Then + skmt.ExecNonQuery2("INSERT INTO ENCUESTA_MODULO2 (CLIENTE, ALMACEN,P1, P2, P3, P4, P5, P6) VALUES (?,?,?,?,?,?,?,?)", Array As Object(Subs.traeCliente, ALMACEN,et_p1_m2.Text,et_p2_m2.Text,P3_M2,P4_M2,et_p5_m2.Text,P6_M2 )) + SV_ENCUESTA.Visible = False + p_cliente.Visible = True + et_p1_m2.Text = "" + et_p2_m2.TEXT = "" + RB7_P6_M2.Checked = False + RB6_P6_M2.Checked = False + RB5_P6_M2.Checked = False + RB4_P6_M2.Checked = False + RB3_P6_M2.Checked = False + RB2_P6_M2.Checked = False + RB1_P6_M2.Checked = False + et_p5_m2.Text = "" + rd3_p4_m2.Checked = False + rd2_p4_m2.Checked = False + rd1_p4_m2.Checked = False + RB1_P3_M2.Checked = False + RB2_P3_M2.Checked = False + RB3_P3_M2.Checked = False + RB4_P3_M2.Checked = False + + CB1_P3_M2.Checked = False + CB2_P3_M2.Checked = False + CB3_P3_M2.Checked = False + CB4_P3_M2.Checked = False + CB5_P3_M2.Checked = False + CB6_P3_M2.Checked = False + + ET_P3_M2.Text = "" + P3_M2 = "" + P4_M2 = "" + P6_M2 = "" + + Panel7_M2.Visible = False + +' B4XPages.MainPage.tipo_venta = "PREVENTA" +' B4XPages.ShowPage("productos") + + If ENCUESTA > 2 Then + If p_m2.IsInitialized And p_m2.Visible Then + p_m2.Visible = False + Else + + End If + p_pregunta1.Visible = False + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + SV_ENCUESTA.Panel.LoadLayout("ENCUESSTA_M3") + p_m3.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_m3.Height + 60 + '35,36,45,46,47,54,64,65,71,3,25,27,38 + If Subs.traeAlmacen = 1 Or Subs.traeAlmacen = 2 Or Subs.traeAlmacen = 4 Or Subs.traeAlmacen = 5 Or Subs.traeAlmacen =35 Or Subs.traeAlmacen =36 Or Subs.traeAlmacen =45 Or Subs.traeAlmacen =46 Or Subs.traeAlmacen =47 Or Subs.traeAlmacen =54 Or Subs.traeAlmacen =64 Or Subs.traeAlmacen =65 Or Subs.traeAlmacen =71 Or Subs.traeAlmacen =3 Or Subs.traeAlmacen =25 Or Subs.traeAlmacen =27 Or Subs.traeAlmacen =38 Then + CB1_P6_M3.Text = "GARIS" + CB2_P6_M3.Text = "SAHUAYO" + CB3_P6_M3.Text = "ZORRO" + CB4_P6_M3.Text = "ESCORPION" + CB5_P6_M3.Text = "RABBIT" + CB6_P6_M3.Text = "SAMS" + + else If Subs.traeAlmacen = 12 Then ' + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "ZETA" + CB3_P6_M3.Text = "SAHUAYO" + CB4_P6_M3.Text = "DUERO" + CB5_P6_M3.Text = "HUGOSS" + CB6_P6_M3.Text = "ZORRO" + else If Subs.traeAlmacen = 13 Then ' + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "ZETA" + CB3_P6_M3.Text = "SAHUAYO" + CB4_P6_M3.Text = "SCORPION" + CB5_P6_M3.Text = "ZORRO" + CB6_P6_M3.Text = "GARIS" + else If Subs.traeAlmacen = 14 Or Subs.traeAlmacen =69 Or Subs.traeAlmacen =37 Then '69 -37 + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "ZETA" + CB3_P6_M3.Text = "SAHUAYO" + CB4_P6_M3.Text = "DUERO" + CB5_P6_M3.Text = "RIVERA/GRAN BODEGA" + CB6_P6_M3.Text = "ZORRO" + else If Subs.traeAlmacen = 16 Or Subs.traeAlmacen =70 Then '70 + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "ZETA" + CB3_P6_M3.Text = "SAHUAYO" + CB4_P6_M3.Text = "DUERO" + CB5_P6_M3.Text = "RIVERA/GRAN BODEGA" + CB6_P6_M3.Text = "SAMS" + else If Subs.traeAlmacen = 17 Then ' + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "SAHUAYO" + CB3_P6_M3.Text = "" + CB4_P6_M3.Text = "" + CB5_P6_M3.Text = "" + CB6_P6_M3.Text = "" + else If Subs.traeAlmacen = 29 Or Subs.traeAlmacen =31 Then '31 + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "ZETA" + CB3_P6_M3.Text = "SAHUAYO" + CB4_P6_M3.Text = "DUERO" + CB5_P6_M3.Text = "SAMS" + CB6_P6_M3.Text = "RIVERA/GRAN BODEGA" + else If Subs.traeAlmacen = 32 Or Subs.traeAlmacen =33 Then '33 + CB1_P6_M3.Text = "MAS BODEGA" + CB2_P6_M3.Text = "SAHUAYO" + CB3_P6_M3.Text = "TREVIÑO" + CB4_P6_M3.Text = "HUGOSS" + CB5_P6_M3.Text = "RABBIT" + CB6_P6_M3.Text = "SAMS" + else If Subs.traeAlmacen = 66 Or Subs.traeAlmacen =67 Then '67 + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "ZETA" + CB3_P6_M3.Text = "SAHUAYO" + CB4_P6_M3.Text = "DUERO" + CB5_P6_M3.Text = "SCORPION" + CB6_P6_M3.Text = "SAMS" + + else If Subs.traeAlmacen = 22 Or Subs.traeAlmacen =34 Then '34 + CB1_P6_M3.Text = "DECASA" + CB2_P6_M3.Text = "ZETA" + CB3_P6_M3.Text = "SAHUAYO" + CB4_P6_M3.Text = "MERZA/DUERO" + CB5_P6_M3.Text = "HUGOSS" + End If + Else + p_pregunta1.Visible = False + SV_ENCUESTA.Visible = False + p_cliente.Visible = True +' tipo_venta = "PREVENTA" + B4XPages.ShowPage("productos") + MsgboxAsync("Encuesta guardada","") + End If + Else + Msgbox("FAVOR DE CONTESTAR LA ENCUESTA","AVISO") + End If +End Sub + +Private Sub CB6_P3_M2_CheckedChange(Checked As Boolean) + If CB6_P3_M2.Checked = True Then + Panel7_M2.Visible = True + Else + Panel7_M2.Visible = False + End If + + +End Sub + +Private Sub B_guardaencuesta_m3_Click + + PASA = "1" +' textemp4 = "" +' textemp5 = "" +' textemp6 = "" +' textemp7 = "" +' textemp8 = "" + Private P3_M3 As String = "" + Private P4_M3 As String = "" + Private P5_M3 As String = "" + Private P6_M3 As String = "" + Private P7_M3 As String = "" + Private P8_M3 As String = "" + Private P9_M3 As String = "" + + +' If et_p1_m3.Text = "" Then PASA = "0" +' If et_p2_m3.Text = "" Then PASA = "0" + + If rd1_p5_m3.Checked Then P5_M3 = "SI" + If rd2_p5_m3.Checked Then P5_M3 = "NO" + + If RB1_P9_M3.Checked Then P9_M3 = "DIARIO" + If RB2_P9_M3.Checked Then P9_M3 = "BISEMANAL" + If RB3_P9_M3.Checked Then P9_M3 = "SEMANAL" + If RB4_P9_M3.Checked Then P9_M3 = "QUINCENAL" + If RB5_P9_M3.Checked Then P9_M3 = "MENSUAL" + If P9_M3 = "" Then PASA = "0" + If P5_M3 = "" Then PASA = "0" + +' P3_M3 = CB1_P3_M3.Checked & "," & CB2_P3_M3.Checked & "," & CB3_P3_M3.Checked & "," & CB4_P3_M3.Checked & "," & CB5_P3_M3.Checked + If CB1_P3_M3.Checked = False And CB2_P3_M3.Checked = False And CB3_P3_M3.Checked = False And CB4_P3_M3.Checked = False And CB5_P3_M3.Checked = False Then PASA = "0" +' P4_M3 = CB1_P4_M3.Checked & "," & CB2_P4_M3.Checked & "," & CB3_P4_M3.Checked & "," & CB4_P4_M3.Checked & "," & CB5_P4_M3.Checked + If CB1_P4_M3.Checked = False And CB2_P4_M3.Checked = False And CB3_P4_M3.Checked = False And CB4_P4_M3.Checked = False And CB5_P4_M3.Checked = False Then PASA = "0" + +' P6_M3 = CB1_P6_M3.Checked & "," & CB2_P6_M3.Checked & "," & CB3_P6_M3.Checked & "," & CB4_P6_M3.Checked & "," & CB5_P6_M3.Checked & "," & CB6_P6_M3.Checked & "," & ET_P6_M3.TEXT + +' P7_M3 = CB1_P7_M3.Checked & "," & CB2_P7_M3.Checked & "," & CB3_P7_M3.Checked & "," & CB4_P7_M3.Checked + If CB1_P7_M3.Checked = False And CB2_P7_M3.Checked = False And CB3_P7_M3.Checked = False And CB4_P7_M3.Checked = False Then PASA = "0" + +' P8_M3 = CB1_P8_M3.Checked & "," & CB2_P8_M3.Checked & "," & CB3_P8_M3.Checked & "," & CB4_P8_M3.Checked + If CB1_P8_M3.Checked = False And CB2_P8_M3.Checked = False And CB3_P8_M3.Checked = False And CB4_P8_M3.Checked = False Then PASA = "0" + If rb1_m3_p1.Checked Then P3_M3 = "7 A 9" + If RB2_M3_P1.Checked Then P3_M3 = "9 A 11" + If RB3_M3_P1.Checked Then P3_M3 = "11 A 13" + If RB4_M3_P1.Checked Then P3_M3 = "13 +" + + If RB1_M3_P2.Checked Then P4_M3 = "2 A 4" + If RB2_M3_P2.Checked Then P4_M3 = "4 A 6" + If RB3_M3_P2.Checked Then P4_M3 = "6 A 8" + If RB4_M3_P2.Checked Then P4_M3 = "8 +" + + If CB5_P4_M3.Checked = True And ( CB2_P4_M3.Checked = True Or CB3_P4_M3.Checked = True Or CB4_P4_M3.Checked = True Or CB1_P4_M3.Checked = True ) Then + PASA = "0" + CB5_P4_M3.Checked = False + CB2_P4_M3.Checked = False + CB3_P4_M3.Checked = False + CB4_P4_M3.Checked = False + CB1_P4_M3.Checked = False + End If + + + If PASA = "1" Then + If rb1_m3_p1.Checked Then P3_M3 = "7 A 9" + If RB2_M3_P1.Checked Then P3_M3 = "9 A 11" + If RB3_M3_P1.Checked Then P3_M3 = "11 A 13" + If RB4_M3_P1.Checked Then P3_M3 = "13 +" + + If RB1_M3_P2.Checked Then P4_M3 = "2 A 4" + If RB2_M3_P2.Checked Then P4_M3 = "4 A 6" + If RB3_M3_P2.Checked Then P4_M3 = "6 A 8" + If RB4_M3_P2.Checked Then P4_M3 = "8 +" + + If ET_P6_M3.Text <> "" Then + textemp6 = textemp6 & ", " & ET_P6_M3.Text + End If + + If textemp4 <> "" And textemp4.SubString2(0,2) = ", " Then textemp4 = textemp4.SubString(2) + If textemp5 <> "" And textemp5.SubString2(0,2) = ", " Then textemp5 = textemp5.SubString(2) + If textemp6 <> "" And textemp6.SubString2(0,2) = ", " Then textemp6 = textemp6.SubString(2) + If textemp7 <> "" And textemp7.SubString2(0,2) = ", " Then textemp7 = textemp7.SubString(2) + If textemp8 <> "" And textemp8.SubString2(0,2) = ", " Then textemp8 = textemp8.SubString(2) +' skmt.ExecNonQuery2("INSERT INTO ENCUESTA_MODULO2 (CLIENTE, ALMACEN,P1, P2, P3, P4, P5, P6) VALUES (?,?,?,?,?,?,?,?)", Array As Object(Subs.traeCliente, ALMACEN,et_p1_m2.Text,et_p2_m2.Text,P3_M2,P4_M2,et_p5_m2.Text,"MODULO_3" )) + + + skmt.ExecNonQuery2("INSERT INTO ENCUESTA_MODULO3 (CLIENTE, ALMACEN,P1, P2, P3, P4, P5, P6,P7,P8,P9,P10,P11) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object(Subs.traeCliente, ALMACEN,"x","x",P3_M3,P4_M3,textemp4,textemp5,P5_M3,textemp6,textemp7, textemp8, P9_M3)) + SV_ENCUESTA.Visible = False + p_cliente.Visible = True +' B4XPages.MainPage.tipo_venta = "PREVENTA" +' B4XPages.ShowPage("productos") + If ENCUESTA > 3 Then + If p_m3.IsInitialized And p_m3.Visible Then + p_m3.Visible = False + Else + + End If + p_pregunta1.Visible = False + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + p_pregunta1.Visible = False + SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M4") + p_m4.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_m4.Height + 60 + + Dim Items2 As List + Items2.Initialize + Items2.Add("Selecciona una opcion") + Items2.Add("Propio") + Items2.Add("Rentado") + cb_p3_m4.SetItems(Items2) + itemselect2 = "Selecciona una opcion" + + + Dim Items3 As List + Items3.Initialize + Items3.Add("Selecciona una opcion") + Items3.Add("Completamente Surtido") + Items3.Add("Bien Surtido") + Items3.Add("Poco Surtido") + Items3.Add("Muy Poco Surtido") + Items3.Add("Sin Existencias") + cb_p4_1_m4.SetItems(Items3) + itemselect3 = "Selecciona una opcion" + cb_p4_2_m4.SetItems(Items3) + itemselect4 = "Selecciona una opcion" + cb_p4_3_m4.SetItems(Items3) + itemselect5 = "Selecciona una opcion" + cb_p4_4_m4.SetItems(Items3) + itemselect6 = "Selecciona una opcion" + cb_p4_5_m4.SetItems(Items3) + itemselect7 = "Selecciona una opcion" + Else + p_pregunta1.Visible = False + SV_ENCUESTA.Visible = False + p_cliente.Visible = True +' tipo_venta = "PREVENTA" + B4XPages.ShowPage("productos") + MsgboxAsync("Encuesta guardada","") + End If + Else + Msgbox("FAVOR DE CONTESTAR LA ENCUESTA","AVISO") + End If +End Sub + +Private Sub B_guardaencuesta_m4_Click + + PASA = "1" + + If itemselect2 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect3 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect4 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect5 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect6 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect7 = "Selecciona una opcion" Then + PASA = "0" + End If + If et_p1_m4.Text.Length < 2 Then + + et_p1_m4.Text = "" + PASA = "0" + End If + If PASA = "1" Then + skmt.ExecNonQuery2("INSERT INTO ENCUESTA_MODULO4 (CLIENTE, ALMACEN,P1, P2, P3, P4, P5, P6, P7, P8) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(Subs.traeCliente, ALMACEN,et_p1_m4.Text,et_p2_m4.Text,itemselect2,itemselect3,itemselect4,itemselect5,itemselect6,itemselect7)) + SV_ENCUESTA.Visible = False + p_cliente.Visible = True +' + If ENCUESTA > 4 Then + If p_m4.IsInitialized And p_m4.Visible Then + p_m4.Visible = False + Else + + End If + p_cliente.Visible = False + SV_ENCUESTA.Visible = True + p_pregunta1.Visible = False + SV_ENCUESTA.Panel.LoadLayout("ENCUESTA_M5") + p_modulo5.Width = Root.Width * 0.94 + SV_ENCUESTA.Panel.Height = p_modulo5.Height + 60 + + Dim Items8 As List + Items8.Initialize + Items8.Add("Selecciona una opcion") + Items8.Add("Completamente Surtido") + Items8.Add("Bien Surtido") + Items8.Add("Poco Surtido") + Items8.Add("Muy Poco Surtido") + Items8.Add("Sin Existencias") + cb_p1_m5.SetItems(Items8) + itemselect8 = "Selecciona una opcion" + cb_p2_m5.SetItems(Items8) + itemselect9 = "Selecciona una opcion" + cb_p3_m5.SetItems(Items8) + itemselect10 = "Selecciona una opcion" + cb_p4_m5.SetItems(Items8) + itemselect11 = "Selecciona una opcion" + cb_p5_m5.SetItems(Items8) + itemselect12 = "Selecciona una opcion" + cb_p6_m5.SetItems(Items8) + itemselect13 = "Selecciona una opcion" + cb_p7_m5.SetItems(Items8) + itemselect14 = "Selecciona una opcion" + cb_p8_m5.SetItems(Items8) + itemselect15 = "Selecciona una opcion" + cb_p9_m5.SetItems(Items8) + itemselect16 = "Selecciona una opcion" + MsgboxAsync("Encuesta guardada","") + Else + B4XPages.MainPage.tipo_venta = tipo_venta +' tipo_venta = "PREVENTA" + p_pregunta1.Visible = False + SV_ENCUESTA.Visible = False + p_cliente.Visible = True + B4XPages.ShowPage("productos") + End If + Else + Msgbox("FAVOR DE CONTESTAR LA ENCUESTA","AVISO") + End If + +End Sub + +Private Sub B_guardaencuesta_m5_Click + + PASA = "1" + + If itemselect8 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect9 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect10 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect11 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect12 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect13 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect14 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect15 = "Selecciona una opcion" Then + PASA = "0" + End If + If itemselect16 = "Selecciona una opcion" Then + PASA = "0" + End If + + If PASA = "1" Then + skmt.ExecNonQuery2("INSERT INTO ENCUESTA_MODULO5 (CLIENTE, ALMACEN,P1, P2, P3, P4, P5, P6, P7, P8, P9) VALUES (?,?,?,?,?,?,?,?,?,?,?)", Array As Object(Subs.traeCliente, ALMACEN,itemselect8,itemselect9,itemselect10,itemselect11,itemselect12,itemselect13,itemselect14,itemselect15,itemselect16)) + SV_ENCUESTA.Visible = False + p_cliente.Visible = True + B4XPages.MainPage.tipo_venta = tipo_venta + B4XPages.ShowPage("productos") + MsgboxAsync("Encuesta guardada","") + Else + Msgbox("FAVOR DE CONTESTAR LA ENCUESTA","AVISO") + End If +End Sub + + +Private Sub B_ACEPTA_GALLINA_Click + + + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + c=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 + 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) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object ("PRO1771",0 , 0, 1, "1 KNORR SUIZA EXH C/50/22 GR +1 KNORR SUIZA GALLINA $279.00", "PRO1771",la_cuenta.TEXT, sDate & sTime, usuario,LA_RUTA)) + 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) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object ("PRO1771",139.5 , 139.5, 1, "KNORR SUIZA EXH C/50/22 GR", "UNI047",la_cuenta.TEXT, sDate & sTime, usuario,LA_RUTA)) + 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) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object ("PRO1771",139.5 , 139.5, 1, "KNORR SUIZA GALLINA", "UNI860",la_cuenta.TEXT, sDate & sTime, usuario,LA_RUTA)) + + c=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 + skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + 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(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,ALMACEN,LA_RUTA,c.GetString("TOTAL_CLIE_SIN"))) + skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + + + 'Panel5.Visible = False + B_GALLINA.Visible = False + b_like.Visible = True + Tar.Visible = True + Tels.Visible = True + gest.Visible = True + 'b_venta.Visible = True + b_like.Visible = False + Guardar.Visible = True + P_gallina.Visible = False +End Sub + +Private Sub B_CANCELA_GALLINA_Click + P_gallina.Visible = False + 'Panel5.Visible = False + B_GALLINA.Visible = False + b_like.Visible = True + Tar.Visible = True + Tels.Visible = True + gest.Visible = True + 'b_venta.Visible = True + b_like.Visible = False + Guardar.Visible = True +' tipo_venta = "PREVENTA" +' StartActivity(colonia2) +End Sub + +Private Sub B_GALLINA_Click + P_gallina.Visible = True + + B_GALLINA.Visible = False + b_like.Visible = False + BT_QR.Visible = False + 'Panel5.Visible = True + b_like.Visible = False + Tar.Visible = False + Tels.Visible = False + gest.Visible = False ': ToastMessageShow("ccc", False) + b_venta.Visible = False + Guardar.Visible = False + HIST.Visible = False +End Sub + +' P5 M1 +Private Sub p6_TextChanged (Old As String, New As String) + If p6.Text.Length > 2 Then + Msgbox("Valida tu respuesta, dato no valido1","Aviso") + p6.Text = "" + End If +End Sub +' FIN P5 M1 + +' P6 M1 +Private Sub p7_TextChanged (Old As String, New As String) + If p7.Text.Length > 2 Then + Msgbox("Valida tu respuesta, dato no valido2","Aviso") + p7.Text = "" + End If +End Sub +' FIN P6 M1 + +' P7 M1 +Private Sub p8_TextChanged (Old As String, New As String) + If p8.Text.Length > 2 Then + + Msgbox("Valida tu respuesta, dato no valido3","Aviso") + p8.Text = "" + End If +End Sub + +' FIN P7 M1 +''aqui + +'Private Sub et_p1_m3_TextChanged (Old As String, New As String) +' If et_p1_m3.Text.Length > 2 Or et_p1_m3.Text = 0 Then +' +' Msgbox("Valida tu respuesta, dato no valido","Aviso") +' et_p1_m3.Text = "" +' End If +'End Sub + +'Private Sub et_p2_m3_TextChanged (Old As String, New As String) +' If et_p2_m3.Text.Length > 2 Or et_p2_m3.Text = 0 Then +' +' Msgbox("Valida tu respuesta, dato no valido","Aviso") +' et_p2_m3.Text = "" +' +' End If +'End Sub + +Private Sub et_p1_m2_TextChanged (Old As String, New As String) + If et_p1_m2.Text.Length > 2 Or et_p1_m2.Text = 0 Then + + Msgbox("Valida tu respuesta, dato no valido","Aviso") + et_p1_m2.Text = "" + End If +End Sub + +Private Sub et_p2_m2_TextChanged (Old As String, New As String) + If et_p2_m2.Text.Length > 2 Or et_p2_m2.Text = 0 Then + + Msgbox("Valida tu respuesta, dato no valido","Aviso") + et_p2_m2.Text = "" + + End If +End Sub + +Private Sub et_p5_m2_TextChanged (Old As String, New As String) + If et_p5_m2.Text.Length > 4 Then + + Msgbox("Valida tu respuesta, dato no valido","Aviso") + et_p5_m2.Text = "" + End If +End Sub + +Private Sub et_p1_m4_TextChanged (Old As String, New As String) + If et_p1_m4.Text.Length > 5 Then + + Msgbox("Valida tu respuesta, dato no valido","Aviso") + et_p1_m4.Text = "" + End If +End Sub + + +Private Sub RB1_P4_M2_CheckedChange(Checked As Boolean) + If RB1_P4_M2.Checked = True Then + Panel7_M2.Visible = True + panel7_p4_m2.Visible = True + Else + Panel7_M2.Visible = False + panel7_p4_m2.Visible = False + + End If +End Sub + +Private Sub RB2_P4_M2_CheckedChange(Checked As Boolean) + If RB2_P4_M2.Checked = True Then + Panel7_M2.Visible = False + panel7_p4_m2.Visible = False + RB1_P3_M2.Checked = False + RB2_P3_M2.Checked = False + RB3_P3_M2.Checked = False + RB4_P3_M2.Checked = False + ET_P3_M2.Text = "" + CB1_P4_M2.Checked = False + CB2_P4_M2.Checked = False + CB3_P4_M2.Checked = False + CB4_P4_M2.Checked = False + textemp3 = "" + Else + Panel7_M2.Visible = True + panel7_p4_m2.Visible = True + + End If +End Sub + +Private Sub B_GUARDA_CE_PED_Click + + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + c=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 + +' +' If rdb_ch.Checked = True Then TAMANIO = "CHICA" +' If rdb_gd.Checked = True Then TAMANIO = "GRANDE" +' If rdb_md.Checked = True Then TAMANIO = "MEDIANA" +' If rdb_vt.Checked = True Then TAMANIO = "VENTANITA" +' +' If RDB_SI.Checked = True Then ENTRADA = "SI" +' +' If RDB_NO.Checked = True Then +' ENTRADA = "NO" +' TAMANIO = "VENTANITA" +' End If +' + 'la enecuesta actual + + skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA_PED_DIST_1(ALMACEN , TIENDA , KP_01 , KP_02 , KP_03 , KP_04 , KP_05 , KP_06 , KP_07 , KP_08 , KP_09 , KP_10 , KP_11 , KP_12 , KP_13 , KP_14 , KP_15 , KP_16 , KP_17 , KP_18 , KP_19 , KP_20 , KG_01 , KG_02 , KG_03 , KG_04 , KG_05 , KG_06 , PK_01 , PK_02 , PK_03 , PK_04 , PK_05 , PK_06 , PK_07 , PK_08) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object(ALMACEN, clie_id,KP_01.Checked,KP_02.Checked,KP_03.Checked,KP_04.Checked,KP_05.Checked,KP_06.Checked,KP_07.Checked,KP_08.Checked,KP_09.Checked,KP_10.Checked,KP_11.Checked,KP_12.Checked,KP_13.Checked,KP_14.Checked,KP_15.Checked,KP_16.Checked,KP_17.Checked,KP_18.Checked,KP_19.Checked,KP_20.Checked,KG_01.Checked,KG_02.Checked,KG_03.Checked,KG_04.Checked,KG_05.Checked,KG_06.Checked,PK_01.Checked,PK_02.Checked,PK_03.Checked,PK_04.Checked,PK_05.Checked,PK_06.Checked,PK_07.Checked,PK_08.Checked )) + + skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA_PED_DIST_2(ALMACEN , TIENDA , HPG_01 , HPG_02 , HPG_03 , HPG_04 , HPG_05 , HPG_06 , HPG_07 , HPG_08 , HPG_09 , HPG_10 , HC_01 , HC_02 , HC_03 , HC_04 , B_01 , B_02) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object(ALMACEN, clie_id, HPG_01.Checked,HPG_02.Checked,HPG_03.Checked,HPG_04.Checked,HPG_05.Checked,HPG_06.Checked,HPG_07.Checked,HPG_08.Checked,HPG_09.Checked,HPG_10.Checked,HC_01.Checked,HC_02.Checked,HC_03.Checked,HC_04.Checked,B_01.Checked,B_02.Checked)) + + 'la encuesta anterior + +' skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA_PED_SEG(ALMACEN , TIENDA , TAMANIO , ENTRADA , BULTOSP , BULTOSG) VALUES (?,?,?,?,?,?) ", Array As Object(ALMACEN, clie_id, TAMANIO,ENTRADA, I_COMPRA2.TEXT, I_COMPRA.TEXT)) + + + +' 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) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object ("4",.01 , .01, 2, "KNORR RINDE MAS 70 GR", "GUNA2",la_cuenta.TEXT, sDate & sTime, usuario,LA_RUTA)) + +' skmt.ExecNonQuery2("INSERT INTO HIST_FACE(HFCLIENTE, HFALIAS,HFRUTA,HFALMACEN) VALUES (?,?,?,?) ", Array As Object(la_cuenta.Text, I_COMPRA.Text,LA_RUTA,ALMACEN)) + + 'I_COMPRA2.TEXT = "" + I_COMPRA.TEXT = "" + SV_ENCUESTA.Visible = False + Panel1.Visible = False +' Panel4.Visible = False + b_like.Visible = True + Tar.Visible = True + Tels.Visible = True + gest.Visible = True + 'b_venta.Visible = True + b_like.Visible = False + Guardar.Visible = True +' tipo_venta = "PREVENTA" + B4XPages.ShowPage("productos") + +End Sub + + +Private Sub p_modulo5_Click + +End Sub + +Private Sub Panel4_Click + +End Sub + +Private Sub CB1_P3_M2_CheckedChange(Checked As Boolean) + textemp2 = "" + If CB1_P3_M2.Checked Then + textemp2 = CB1_P3_M2.Text + Else + textemp2 = "" + End If + If CB2_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB2_P3_M2.Text + If CB3_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB3_P3_M2.Text + If CB4_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB4_P3_M2.Text + If CB5_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB5_P3_M2.Text + Log(textemp2) +End Sub + +Private Sub CB2_P3_M2_CheckedChange(Checked As Boolean) + textemp2 = "" + If CB2_P3_M2.Checked Then + textemp2 = CB2_P3_M2.Text + Else + textemp2 = "" + End If + If CB1_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB1_P3_M2.Text + If CB3_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB3_P3_M2.Text + If CB4_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB4_P3_M2.Text + If CB5_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB5_P3_M2.Text + Log(textemp2) +End Sub + +Private Sub CB3_P3_M2_CheckedChange(Checked As Boolean) + textemp2 = "" + If CB3_P3_M2.Checked Then + textemp2 = CB3_P3_M2.Text + Else + textemp2 = "" + End If + If CB1_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB1_P3_M2.Text + If CB2_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB2_P3_M2.Text + If CB4_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB4_P3_M2.Text + If CB5_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB5_P3_M2.Text + Log(textemp2) +End Sub + +Private Sub CB4_P3_M2_CheckedChange(Checked As Boolean) + textemp2 = "" + If CB4_P3_M2.Checked Then + textemp2 = CB4_P3_M2.Text + Else + textemp2 = "" + End If + If CB1_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB1_P3_M2.Text + If CB2_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB2_P3_M2.Text + If CB3_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB3_P3_M2.Text + If CB5_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB5_P3_M2.Text + Log(textemp2) +End Sub + +Private Sub CB5_P3_M2_CheckedChange(Checked As Boolean) + textemp2 = "" + If CB5_P3_M2.Checked Then + textemp2 = CB5_P3_M2.Text + Else + textemp2 = "" + End If + If CB1_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB1_P3_M2.Text + If CB2_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB2_P3_M2.Text + If CB3_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB3_P3_M2.Text + If CB4_P3_M2.Checked Then textemp2 = textemp2 & ", " & CB4_P3_M2.Text + Log(textemp2) +End Sub + + + +Private Sub CB1_P4_M2_CheckedChange(Checked As Boolean) + textemp3 = "" + If CB1_P4_M2.Checked Then + textemp3 = CB1_P4_M2.Text + Else + textemp3 = "" + End If + If CB2_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB2_P4_M2.Text + If CB3_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB3_P4_M2.Text + If CB4_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB4_P4_M2.Text + Log(textemp3) +End Sub + +Private Sub CB2_P4_M2_CheckedChange(Checked As Boolean) + textemp3 = "" + If CB2_P4_M2.Checked Then + textemp3 = CB2_P4_M2.Text + Else + textemp3 = "" + End If + If CB1_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB1_P4_M2.Text + If CB3_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB3_P4_M2.Text + If CB4_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB4_P4_M2.Text + Log(textemp3) +End Sub + +Private Sub CB3_P4_M2_CheckedChange(Checked As Boolean) + textemp3 = "" + If CB3_P4_M2.Checked Then + textemp3 = CB3_P4_M2.Text + Else + textemp3 = "" + End If + If CB1_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB1_P4_M2.Text + If CB2_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB2_P4_M2.Text + If CB4_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB4_P4_M2.Text + Log(textemp3) +End Sub + +Private Sub CB4_P4_M2_CheckedChange(Checked As Boolean) + textemp3 = "" + If CB4_P4_M2.Checked Then + textemp3 = CB4_P4_M2.Text + Else + textemp3 = "" + End If + If CB1_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB1_P4_M2.Text + If CB2_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB2_P4_M2.Text + If CB3_P4_M2.Checked Then textemp3 = textemp3 & ", " & CB3_P4_M2.Text + Log(textemp3) +End Sub + + + + +Private Sub CB1_P3_M3_CheckedChange(Checked As Boolean) + textemp4 = "" + If CB1_P3_M3.Checked Then + textemp4 = CB1_P3_M3.Text + Else + textemp4 = "" + End If + If CB2_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB2_P3_M3.Text + If CB3_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB3_P3_M3.Text + If CB4_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB4_P3_M3.Text + If CB5_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB5_P3_M3.Text + Log(textemp4) +End Sub + +Private Sub CB2_P3_M3_CheckedChange(Checked As Boolean) + textemp4 = "" + If CB2_P3_M3.Checked Then + textemp4 = CB2_P3_M3.Text + Else + textemp4 = "" + End If + If CB1_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB1_P3_M3.Text + If CB3_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB3_P3_M3.Text + If CB4_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB4_P3_M3.Text + If CB5_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB5_P3_M3.Text + Log(textemp4) +End Sub + +Private Sub CB3_P3_M3_CheckedChange(Checked As Boolean) + textemp4 = "" + If CB3_P3_M3.Checked Then + textemp4 = CB3_P3_M3.Text + Else + textemp4 = "" + End If + If CB1_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB1_P3_M3.Text + If CB2_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB2_P3_M3.Text + If CB4_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB4_P3_M3.Text + If CB5_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB5_P3_M3.Text + Log(textemp4) +End Sub + +Private Sub CB4_P3_M3_CheckedChange(Checked As Boolean) + textemp4 = "" + If CB4_P3_M3.Checked Then + textemp4 = CB4_P3_M3.Text + Else + textemp4 = "" + End If + If CB1_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB1_P3_M3.Text + If CB2_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB2_P3_M3.Text + If CB3_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB3_P3_M3.Text + If CB5_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB5_P3_M3.Text + Log(textemp4) +End Sub + +Private Sub CB5_P3_M3_CheckedChange(Checked As Boolean) + textemp4 = "" + If CB5_P3_M3.Checked Then + textemp4 = CB5_P3_M3.Text + Else + textemp4 = "" + End If + If CB1_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB1_P3_M3.Text + If CB2_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB2_P3_M3.Text + If CB3_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB3_P3_M3.Text + If CB4_P3_M3.Checked Then textemp4 = textemp4 & ", " & CB4_P3_M3.Text + Log(textemp4) +End Sub + + + +Private Sub CB1_P4_M3_CheckedChange(Checked As Boolean) + textemp5 = "" + CB5_P4_M3.Checked = False + If CB1_P4_M3.Checked Then + textemp5 = CB1_P4_M3.Text + Else + textemp5 = "" + End If + If CB2_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB2_P4_M3.Text + If CB3_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB3_P4_M3.Text + If CB4_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB4_P4_M3.Text + If CB5_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB5_P4_M3.Text + Log(textemp5) +End Sub + +Private Sub CB2_P4_M3_CheckedChange(Checked As Boolean) + textemp5 = "" + CB5_P4_M3.Checked = False + If CB2_P4_M3.Checked Then + textemp5 = CB2_P4_M3.Text + Else + textemp5 = "" + End If + If CB1_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB1_P4_M3.Text + If CB3_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB3_P4_M3.Text + If CB4_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB4_P4_M3.Text + If CB5_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB5_P4_M3.Text + Log(textemp5) +End Sub + +Private Sub CB3_P4_M3_CheckedChange(Checked As Boolean) + textemp5 = "" + CB5_P4_M3.Checked = False + If CB3_P4_M3.Checked Then + textemp5 = CB3_P4_M3.Text + Else + textemp5 = "" + End If + If CB1_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB1_P4_M3.Text + If CB2_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB2_P4_M3.Text + If CB4_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB4_P4_M3.Text + If CB5_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB5_P4_M3.Text + Log(textemp5) +End Sub + +Private Sub CB4_P4_M3_CheckedChange(Checked As Boolean) + textemp5 = "" + CB5_P4_M3.Checked = False + If CB4_P4_M3.Checked Then + textemp5 = CB4_P4_M3.Text + Else + textemp5 = "" + End If + If CB1_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB1_P4_M3.Text + If CB2_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB2_P4_M3.Text + If CB3_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB3_P4_M3.Text + If CB5_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB5_P4_M3.Text + Log(textemp5) +End Sub + +Private Sub CB5_P4_M3_CheckedChange(Checked As Boolean) + textemp5 = "" + CB1_P4_M3.Checked = False + CB2_P4_M3.Checked = False + CB3_P4_M3.Checked = False + CB4_P4_M3.Checked = False + If CB5_P4_M3.Checked Then + textemp5 = CB5_P4_M3.Text + Else + textemp5 = "" + End If + If CB1_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB1_P4_M3.Text + If CB2_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB2_P4_M3.Text + If CB3_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB3_P4_M3.Text + If CB4_P4_M3.Checked Then textemp5 = textemp5 & ", " & CB4_P4_M3.Text + Log(textemp5) +End Sub + + + + +Private Sub CB1_P6_M3_CheckedChange(Checked As Boolean) + textemp6 = "" + If CB1_P6_M3.Checked Then + textemp6 = CB1_P6_M3.Text + Else + textemp6 = "" + End If + If CB2_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB2_P6_M3.Text + If CB3_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB3_P6_M3.Text + If CB4_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB4_P6_M3.Text + If CB5_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB5_P6_M3.Text + If CB6_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB6_P6_M3.Text + If CB7_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB7_P6_M3.Text + Log(textemp6) +End Sub + +Private Sub CB2_P6_M3_CheckedChange(Checked As Boolean) + textemp6 = "" + If CB2_P6_M3.Checked Then + textemp6 = CB2_P6_M3.Text + Else + textemp6 = "" + End If + If CB1_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB1_P6_M3.Text + If CB3_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB3_P6_M3.Text + If CB4_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB4_P6_M3.Text + If CB5_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB5_P6_M3.Text + If CB6_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB6_P6_M3.Text + If CB7_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB7_P6_M3.Text + Log(textemp6) +End Sub + +Private Sub CB3_P6_M3_CheckedChange(Checked As Boolean) + textemp6 = "" + If CB3_P6_M3.Checked Then + textemp6 = CB3_P6_M3.Text + Else + textemp6 = "" + End If + If CB1_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB1_P6_M3.Text + If CB2_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB2_P6_M3.Text + If CB4_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB4_P6_M3.Text + If CB5_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB5_P6_M3.Text + If CB6_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB6_P6_M3.Text + If CB7_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB7_P6_M3.Text + Log(textemp6) +End Sub + +Private Sub CB4_P6_M3_CheckedChange(Checked As Boolean) + textemp6 = "" + If CB4_P6_M3.Checked Then + textemp6 = CB4_P6_M3.Text + Else + textemp6 = "" + End If + If CB1_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB1_P6_M3.Text + If CB2_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB2_P6_M3.Text + If CB3_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB3_P6_M3.Text + If CB5_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB5_P6_M3.Text + If CB6_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB6_P6_M3.Text + If CB7_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB7_P6_M3.Text + Log(textemp6) +End Sub + +Private Sub CB5_P6_M3_CheckedChange(Checked As Boolean) + textemp6 = "" + If CB5_P6_M3.Checked Then + textemp6 = CB5_P6_M3.Text + Else + textemp6 = "" + End If + If CB1_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB1_P6_M3.Text + If CB2_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB2_P6_M3.Text + If CB3_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB3_P6_M3.Text + If CB4_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB4_P6_M3.Text + If CB6_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB6_P6_M3.Text + If CB7_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB7_P6_M3.Text + Log(textemp6) +End Sub + +Private Sub CB6_P6_M3_CheckedChange(Checked As Boolean) + textemp6 = "" + If CB6_P6_M3.Checked Then + textemp6 = CB6_P6_M3.Text + Else + textemp6 = "" + End If + If CB1_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB1_P6_M3.Text + If CB2_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB2_P6_M3.Text + If CB3_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB3_P6_M3.Text + If CB4_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB4_P6_M3.Text + If CB5_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB5_P6_M3.Text + If CB7_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB7_P6_M3.Text + Log(textemp6) +End Sub + +Private Sub CB7_P6_M3_CheckedChange(Checked As Boolean) + textemp6 = "" + If CB7_P6_M3.Checked Then + textemp6 = CB7_P6_M3.Text + Else + textemp6 = "" + End If + If CB1_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB1_P6_M3.Text + If CB2_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB2_P6_M3.Text + If CB3_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB3_P6_M3.Text + If CB4_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB4_P6_M3.Text + If CB5_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB5_P6_M3.Text + If CB6_P6_M3.Checked Then textemp6 = textemp6 & ", " & CB6_P6_M3.Text + Log(textemp6) +End Sub + +Private Sub CB1_P7_M3_CheckedChange(Checked As Boolean) + textemp7 = "" + If CB1_P7_M3.Checked Then + textemp7 = CB1_P7_M3.Text + Else + textemp7 = "" + End If + If CB2_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB2_P7_M3.Text + If CB3_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB3_P7_M3.Text + If CB4_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB4_P7_M3.Text + Log(textemp7) +End Sub + +Private Sub CB2_P7_M3_CheckedChange(Checked As Boolean) + textemp7 = "" + If CB2_P7_M3.Checked Then + textemp7 = CB2_P7_M3.Text + Else + textemp7 = "" + End If + If CB1_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB1_P7_M3.Text + If CB3_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB3_P7_M3.Text + If CB4_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB4_P7_M3.Text + Log(textemp7) +End Sub + +Private Sub CB3_P7_M3_CheckedChange(Checked As Boolean) + textemp7 = "" + If CB3_P7_M3.Checked Then + textemp7 = CB3_P7_M3.Text + Else + textemp7 = "" + End If + If CB1_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB1_P7_M3.Text + If CB2_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB2_P7_M3.Text + If CB4_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB4_P7_M3.Text + Log(textemp7) +End Sub + +Private Sub CB4_P7_M3_CheckedChange(Checked As Boolean) + textemp7 = "" + If CB4_P7_M3.Checked Then + textemp7 = CB4_P7_M3.Text + Else + textemp7 = "" + End If + If CB1_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB1_P7_M3.Text + If CB2_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB2_P7_M3.Text + If CB3_P7_M3.Checked Then textemp7 = textemp7 & ", " & CB3_P7_M3.Text + Log(textemp7) +End Sub + + + + + + +Private Sub CB1_P8_M3_CheckedChange(Checked As Boolean) + textemp8 = "" + textemp8 = CB1_P8_M3.Text + If CB2_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB2_P8_M3.Text + If CB3_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB3_P8_M3.Text + If CB4_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB4_P8_M3.Text + Log(textemp8) +End Sub + +Private Sub CB2_P8_M3_CheckedChange(Checked As Boolean) + textemp8 = "" + textemp8 = CB2_P8_M3.Text + If CB1_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB1_P8_M3.Text + If CB3_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB3_P8_M3.Text + If CB4_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB4_P8_M3.Text + Log(textemp8) +End Sub + +Private Sub CB3_P8_M3_CheckedChange(Checked As Boolean) + textemp8 = "" + textemp8 = CB3_P8_M3.Text + If CB1_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB1_P8_M3.Text + If CB2_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB2_P8_M3.Text + If CB4_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB4_P8_M3.Text + Log(textemp8) +End Sub + +Private Sub CB4_P8_M3_CheckedChange(Checked As Boolean) + textemp8 = "" + textemp8 = CB4_P8_M3.Text + If CB1_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB1_P8_M3.Text + If CB2_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB2_P8_M3.Text + If CB3_P8_M3.Checked Then textemp8 = textemp8 & ", " & CB3_P8_M3.Text + Log(textemp8) +End Sub + +'Esta subrutina muestra las encuestas. +Sub Cuestionario + Log("Entramos a Cuestionario") + Private logger As Boolean = True + b_encuesta_continuar.Visible = False + et_encuesta.Visible = False + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + Private fecha As String = $"${DateTime.Date(DateTime.Now)} ${DateTime.Time(DateTime.Now)}"$ + CUANTOS = 0 +' indicePregunta = 0 + If logger Then Log($"Tomar_Foto = ${TOMAR_FOTO}"$) + If TOMAR_FOTO = 0 Then + s = B4XPages.MainPage.skmt.ExecQuery("select COUNT(*) AS CUANTOS from HIST_ENCUESTA where HE_CLIE In (Select cuenta from cuentaa)") + s.Position= 0 + CUANTOS = s.GetString("CUANTOS") + Private CUANTOS2 As Int = 0 + s = B4XPages.MainPage.skmt.ExecQuery("select COUNT(*) AS CUANTOS2 from HIST_ENCUESTA2 where HE_CLIENTE In (Select cuenta from cuentaa)") + s.Position = 0 + CUANTOS2 = s.GetString("CUANTOS2") + If logger Then LogColor($"Hist:encuesta=${CUANTOS}, hist_encuesta2 = ${CUANTOS2}"$, Colors.Magenta) + End If +' CUANTOS = 0 +' CUANTOS2 = 0 + If logger Then Log(CUANTOS & "|" & CUANTOS2) + If CUANTOS = 0 And CUANTOS2 = 0 Then + Private enc As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_EP_ID, CAT_EP_IDTIPOPREGUNTA, CAT_CE_DESCRIPCION, CAT_EP_PREGUNTA, CAT_EP_RES1_PRED, CAT_EP_RES2_PRED, CAT_EP_RES3_PRED, CAT_EP_ORDEN_PREGUNTA FROM CAT_ENCUESTA_PREGUNTA ORDER BY CAT_CE_DESCRIPCION, CAST(CAT_EP_ORDEN_PREGUNTA AS DECIMAL)") + If enc.RowCount > 0 Then + enc.position = 0 + If logger Then Log($"CAT_EP_ID=${enc.GetString("CAT_EP_ID")}"$) + Private listaPreguntas As List + listaPreguntas.Initialize + For j = 0 To enc.RowCount - 1 'Ponemos en una lista los ID de las preguntas. + enc.Position = j + listaPreguntas.Add(enc.GetString("CAT_EP_ID")) + Next + If logger Then Log(listaPreguntas) + enc.position = 0 + For i = 0 To enc.RowCount - 1 + Log("########################################################") +' If logger Then Log($"ROWCOUNT: ${enc.RowCount}"$) +' If logger Then Log($"tipo: ${enc.GetString("CAT_EP_IDTIPOPREGUNTA")}"$) + If logger Then Log($"Tipo: ${enc.GetString("CAT_EP_IDTIPOPREGUNTA")}, CAT_EP_ID=${enc.GetString("CAT_EP_ID")}, CAT_EP_PREGUNTA=${enc.GetString("CAT_EP_PREGUNTA")}"$) + If enc.GetString("CAT_EP_IDTIPOPREGUNTA") <> 4 And indicePregunta <> 0 Then + indicePregunta = listaPreguntas.IndexOf(enc.GetString("CAT_EP_ID")) + 1 'Nos movemos a la posicion especificada por la respuesta, en las preguntas de tipo desicion, la respuesta nos indica a que pregunta movernos. + i = indicePregunta + Log($"i = ${i}"$) + End If + If logger Then Log("indicePregunta: " & indicePregunta & ", TIPO: " & enc.GetString("CAT_EP_IDTIPOPREGUNTA")) +' Log($"Tomar_Foto = ${TOMAR_FOTO}"$) + If logger Then Log($"EncuestaRes = ${encuestaRes}"$) + If logger Then Log(listaPreguntas) + If TOMAR_FOTO = 1 Then + If CURSOR_FOTO + 1 > enc.RowCount -1 Then + TOMAR_FOTO = 0 + LogColor("TOMAR FOTO = 1", Colors.Red) + Exit + Else + i = CURSOR_FOTO + 1 + End If + If logger Then Log($"i = ${i}"$) + TOMAR_FOTO = 0 + End If + If i > (enc.RowCount - 1) Then + LogColor("MAS DE ${enc.RowCount - 1}", Colors.Red) + Exit ' Si se contestó la ultima pregunta, entonces salimos. + End If + +' indicePregunta = listaPreguntas.IndexOf(enc.GetString("CAT_EP_ID")) 'Nos movemos a la posicion especificada por la respuesta, en las preguntas de tipo desicion, la respuesta nos indica a que pregunta movernos. + i = indicePregunta + + enc.Position = i + Log($"POSICION = ${enc.Position}"$) + If enc.GetString("CAT_EP_IDTIPOPREGUNTA") = 5 Then 'esto es para la foto + If logger Then Log("Pregunta tipo 5") + id_encuesta = enc.GetString("CAT_EP_ID") + idencuestaaguardar = enc.GetString("CAT_EP_ID") + LogColor(idencuestaaguardar,Colors.Blue) + TOMAR_FOTO = 1 + CURSOR_FOTO = i + LogColor("PREGUNTA TIPO 5 SALIMOS", Colors.Red) + + InitializeCamera2 + p_camara.Visible = True + + + ELSE IF enc.GetString("CAT_EP_IDTIPOPREGUNTA") = 3 Then ' Tipo SI/NO + If logger Then Log("Pregunta tipo 3") + botonPresionado = 0 ' Bandera para que espere a que se conteste la pregunta + l_titEncuesta.Text = enc.GetString("CAT_CE_DESCRIPCION") + l_txtEncuesta.Text = enc.GetString("CAT_EP_PREGUNTA") + Subs.centraEtiqueta(l_txtEncuesta, Root.Width) + muestraBoton(b_encuesta_1,"SI", enc.GetString("CAT_EP_ID"), centroPantalla-350, 580, 300, 160) + muestraBoton(b_encuesta_2, "NO", enc.GetString("CAT_EP_ID"), centroPantalla+50, 580, 300, 160) + muestraEncuesta + Log("Esperamos respuesta") + Do Until botonPresionado = 1 'Esperamos que respondan la pregunta + Sleep(0) + Loop + If logger Then Log("encuestaRes: " & encuestaRes) + If logger Then LogColor($"Guardamos tipo 3 : ${encuestaRes}"$, Colors.Green) + B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_RES, HE_FECHA, HE_TIPO, HE_LAT, HE_LON) VALUES (?,?,?,?,?,?)", Array As Object(la_cuenta.Text, encuestaRes, fecha, enc.GetString("CAT_EP_ID"), B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + ocultaPanelEncuesta + ELSE IF enc.GetString("CAT_EP_IDTIPOPREGUNTA") = 4 Then + If logger Then Log("Pregunta tipo 4") + botonPresionado = 0 ' Bandera para que espere a que se conteste la pregunta + l_titEncuesta.Text = enc.GetString("CAT_CE_DESCRIPCION") + l_txtEncuesta.Text = enc.GetString("CAT_EP_PREGUNTA") + If logger Then Log(enc.GetString("CAT_EP_PREGUNTA")) + Subs.centraEtiqueta(l_txtEncuesta, Root.Width) + muestraBoton(b_encuesta_1,"SI", enc.GetString("CAT_EP_ID"), centroPantalla-350, 580, 300, 160) + muestraBoton(b_encuesta_2, "NO", enc.GetString("CAT_EP_ID"), centroPantalla+50, 580, 300, 160) + muestraEncuesta + Log("Esperamos respuesta") + Do Until botonPresionado = 1 'Esperamos que respondan la pregunta + Sleep(0) + Loop + If logger Then Log("encuestaRes: " & encuestaRes) + If logger Then LogColor($"Guardamos tipo 4 : ${encuestaRes}"$, Colors.Green) + If encuestaRes = "SI" Then + B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_RES, HE_FECHA, HE_TIPO, HE_LAT, HE_LON) VALUES (?,?,?,?,?,?)", Array As Object(la_cuenta.Text, "SI", fecha, enc.GetString("CAT_EP_ID"), B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + indicePregunta = listaPreguntas.IndexOf(enc.GetString("CAT_EP_RES1_PRED")) 'Nos movemos a la posicion especificada por la respuesta, en las preguntas de tipo desicion, la respuesta nos indica a que pregunta movernos. + Log($"IndicePreg = ${indicePregunta}"$) + i = indicePregunta + else if encuestaRes = "NO" Then + B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_RES, HE_FECHA, HE_TIPO, HE_LAT, HE_LON) VALUES (?,?,?,?,?,?)", Array As Object(la_cuenta.Text, "NO", fecha, enc.GetString("CAT_EP_ID"), B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + indicePregunta = listaPreguntas.IndexOf(enc.GetString("CAT_EP_RES2_PRED")) 'Nos movemos a la posicion especificada por la respuesta, en las preguntas de tipo desicion, la respuesta nos indica a que pregunta movernos. + Log($"IndicePreg = ${indicePregunta}"$) + i = indicePregunta + Log($"I = ${i}"$) + If enc.GetString("CAT_EP_RES2_PRED") = "null" Or enc.GetString("CAT_EP_RES2_PRED") = Null Then + Exit + End If + End If + ELSE If enc.GetString("CAT_EP_IDTIPOPREGUNTA") = 2 Then ' Tipo 3 opciones. + Log("Pregunta tipo 2") + botonPresionado = 0 ' Bandera para que espere a que se conteste la pregunta. + l_titEncuesta.Text = enc.GetString("CAT_CE_DESCRIPCION") + l_txtEncuesta.Text = enc.GetString("CAT_EP_PREGUNTA") + If logger Then Log(enc.GetString("CAT_EP_PREGUNTA")) + muestraBoton(b_encuesta_1, enc.GetString("CAT_EP_RES1_PRED"), enc.GetString("CAT_EP_ID"), centroPantalla-250, 580, 500, 160) + muestraBoton(b_encuesta_2, enc.GetString("CAT_EP_RES2_PRED"), enc.GetString("CAT_EP_ID"), centroPantalla-250, 740, 500, 160) + muestraBoton(b_encuesta_3, enc.GetString("CAT_EP_RES3_PRED"), enc.GetString("CAT_EP_ID"), centroPantalla-250, 900, 500, 160) + muestraEncuesta + Log("Esperamos respuesta") + Do Until botonPresionado = 1 'Esperamos que respondan la pregunta. + Sleep(0) + Loop + Log("encuestaRes: " & encuestaRes) + If logger Then LogColor($"Guardamos tipo 2 : ${encuestaRes}"$, Colors.Green) + B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_RES, HE_FECHA, HE_TIPO, HE_LAT, HE_LON) VALUES (?,?,?,?,?,?)", Array As Object(la_cuenta.Text, encuestaRes, fecha, enc.GetString("CAT_EP_ID"), B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + + indicePregunta = listaPreguntas.IndexOf(enc.GetString("CAT_EP_ID")) 'Nos movemos a la posicion especificada por la respuesta, en las preguntas de tipo desicion, la respuesta nos indica a que pregunta movernos. + i = indicePregunta + 1 + If i = enc.RowCount - 1 Then i = i - 1 + Log($"i = ${i}"$) + ocultaPanelEncuesta + ELSE If enc.GetString("CAT_EP_IDTIPOPREGUNTA") = 6 Then + If logger Then Log("Pregunta tipo 6") + Panel10.Visible = True + l_chk_e.Text = enc.GetString("CAT_EP_PREGUNTA") + Chk_1.Checked = False + chk_2.Checked = False + chk_3.Checked = False + Chk_1.Text = enc.GetString("CAT_EP_RES1_PRED") + chk_2.Text = enc.GetString("CAT_EP_RES2_PRED") + chk_3.Text = enc.GetString("CAT_EP_RES3_PRED") + chk_1_valor = enc.GetString("CAT_EP_RES1_PRED") + chk_2_valor = enc.GetString("CAT_EP_RES2_PRED") + chk_3_valor = enc.GetString("CAT_EP_RES3_PRED") + Chk_1.Tag = enc.GetString("CAT_EP_ID") + chk_2.Tag = enc.GetString("CAT_EP_ID") + chk_3.Tag = enc.GetString("CAT_EP_ID") + TOMAR_FOTO = 1 + CURSOR_FOTO = i + Exit + ELSE If enc.GetString("CAT_EP_IDTIPOPREGUNTA") = 1 Then + Log("Pregunta tipo 1") + botonPresionado = 0 ' Bandera para que espere a que se conteste la pregunta + l_titEncuesta.Text = enc.GetString("CAT_CE_DESCRIPCION") + l_txtEncuesta.Text = enc.GetString("CAT_EP_PREGUNTA") + If logger Then Log(enc.GetString("CAT_EP_PREGUNTA") &"|"&enc.GetString("CAT_EP_ORDEN_PREGUNTA")) + Subs.centraEditText(et_encuesta, Root.Width) + et_encuesta.Visible = True + b_encuesta_continuar.Enabled = False + Private bTop = et_encuesta.Top + 130 + muestraBoton(b_encuesta_continuar,"Continuar", enc.GetString("CAT_EP_ID"), centroPantalla-250, bTop, 500, 160) + muestraEncuesta + Log("Esperamos respuesta") + Do Until botonPresionado = 1 'Esperamos que respondan la pregunta + Sleep(0) + Loop + Log($"Respuesta: ${encuestaRes}"$) + If logger Then LogColor($"Guardamos tipo 1 : ${encuestaRes}"$, Colors.Green) + B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_RES, HE_FECHA, HE_TIPO, HE_LAT, HE_LON) VALUES (?,?,?,?,?,?)", Array As Object(la_cuenta.Text, encuestaRes, fecha, enc.GetString("CAT_EP_ID"), B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + ocultaPanelEncuesta + Else +' Starter.tipov = "VENTA" + B4XPages.ShowPage("productos") + End If + If i = enc.RowCount - 1 Then + i = i - 1 + End If + Next + enc.Close + Else +' Starter.tipov = "VENTA" + B4XPages.ShowPage("productos") + End If + Else +' Starter.tipov = "VENTA" + B4XPages.ShowPage("productos") + End If + +End Sub + +'Muestra el panel de la encuesta, le da el alto y ancho de la pantalla y la pone en 0,0 +Sub muestraEncuesta + Log("Muestra Encuesta") + p_encuesta.Top = 0 + p_encuesta.left = 0 + p_encuesta.Height = GetDeviceLayoutValues.Height + p_encuesta.Width = GetDeviceLayoutValues.Width + p_encuesta.SetVisibleAnimated(200, True) + p_encuesta.Elevation = 90 'ignore + p_encuesta.BringToFront +' P_INF_GENERAL.Visible = False +' Log("Panel general="&P_INF_GENERAL.Visible) +End Sub + +' Oculta el panel de la encuesta y los botones de la misma. +Sub ocultaPanelEncuesta +' Log("Oculta Encuesta") + b_encuesta_1.Visible = False + b_encuesta_2.Visible = False + b_encuesta_3.Visible = False + p_encuesta.Visible = False +' P_INF_GENERAL.Visible = True +' If logger Then Log("Panel general="&P_INF_GENERAL.Visible) +End Sub + +'Regresa el valor de "left" para el centro de la pantalla +Sub centroPantalla As Int + Private anchoPantalla As Int = GetDeviceLayoutValues.Width + Private anchoPantalla As Int = Root.Width + Return anchoPantalla/2 +End Sub + +Private Sub b_encuesta_1_Click + Log("BOTON 1 CLICK") + Dim btn As Button = Sender + Log("BOTON 1 CLICKED "& " clicked - " & btn.Text & " - " & btn.Tag) + encuestaRes = btn.Text + indicePregunta = btn.Tag + ocultaPanelEncuesta + botonPresionado = 1 +End Sub + +Private Sub b_encuesta_2_Click + Log("BOTON 2 CLICK") + Dim btn As Button = Sender + Log("BOTON 2 CLICKED "& " clicked - " & btn.Text & " - " & btn.Tag) + encuestaRes = btn.Text + indicePregunta = btn.Tag + ocultaPanelEncuesta + botonPresionado = 1 +End Sub + +Private Sub b_encuesta_3_Click + Log("BOTON 3 CLICK") + Dim btn As Button = Sender + Log("BOTON 3 CLICKED "& " clicked - " & btn.Text & " - " & btn.Tag) + encuestaRes = btn.Text + indicePregunta = btn.Tag + ocultaPanelEncuesta + botonPresionado = 1 +End Sub + +Private Sub b_encuesta_continuar_Click + Dim btn As Button = Sender + Log("BOTON CONTINUAR CLICK - " & btn.Text & " - " & btn.Tag) + encuestaRes = et_encuesta.Text + indicePregunta = btn.Tag + et_encuesta.Text = "" + et_encuesta.Visible = False + b_encuesta_continuar.Visible = False + ocultaPanelEncuesta + botonPresionado = 1 +End Sub + +Private Sub et_encuesta_TextChanged (Old As String, New As String) +' Log($"|${Old}|,|${New}|"$) + If New.Length > 0 Then b_encuesta_continuar.Enabled = True + If New.Length < 1 Then b_encuesta_continuar.Enabled = False +End Sub + +'Muestra un boton con las dimensiones, posicion y texto especificados. +Sub muestraBoton (thisButton As Button, theText As String, theTag As String, Left As Int, Top As Int, width As Int, height As Int) + thisButton.Text = theText + thisButton.Tag = theTag + thisButton.Left = Left + thisButton.Top = Top + thisButton.Width = width + thisButton.Height = height + thisButton.Visible = True +End Sub + +'Muestra un boton con las dimensiones, posicion y texto especificados. +Sub muestraBotonCentrado (thisButton As Button, theText As String, theTag As String, Top As Int, width As Int, height As Int) 'ignore + Private anchoPantalla As Int + thisButton.Text = theText + thisButton.Tag = theTag + anchoPantalla = GetDeviceLayoutValues.Width + thisButton.Left = (anchoPantalla/2) - (width/2) + thisButton.Top = Top + thisButton.Width = width + thisButton.Height = height + thisButton.Visible = True +End Sub + +Private Sub l_chk_e_Click + +End Sub + +Private Sub b_chk_e_Click + +End Sub + +Private Sub Panel10_Click + +End Sub + +Private Sub p_encuesta_Click + +End Sub + +Sub cuest_preguntaContestada(m As Map) +' Recibimos el id de la pregunta, el id de la respuesta, el texto de la respuesta y el objeto del panelSombra para poder ocultarlo. + Log(m) +' If q.IsInitialized Then Log($"${q.encuestaIniciada}|${q.preguntaActual}"$) +' m.Get("panel").As(Panel).Visible = False 'Ocultamos el panel de la pregunta. + m.Get("panel").As(Panel).RemoveView 'Quitamos le panel de la pregunta + DateTime.DateFormat = "dd/MM/yyyy" + DateTime.TimeFormat = "HH:mm:ss" + B4XPages.MainPage.skmt.ExecNonQuery($"delete from CUESTIONARIO where Q_IDCLIENTE = '${Subs.traeCliente}' and Q_IDPREGUNTA = '${m.Get("idPregunta")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery($"insert into CUESTIONARIO (Q_RUTA, Q_ALMACEN, Q_IDCLIENTE, Q_IDPREGUNTA, Q_PREGUNTA, Q_IDRESPUESTA, Q_RESPUESTA, Q_FECHA) values ('${Subs.traeRuta}', '${Subs.traeAlmacen}', '${Subs.traeCliente}', '${m.Get("idPregunta")}', '${m.Get("pregunta")}', '${m.Get("idRespuesta")}', '${m.Get("respuesta")}', '${DateTime.Date(DateTime.now)} ${DateTime.time(DateTime.now)}')"$) + Log(">> RESP: " & m.Get("respuesta")) + Select Case m.Get("idPregunta") + Case "1" + If m.Get("respuesta") = "Ninguno de los anteriores" Then +' Log("Ninguno de los anteriores") +' ToastMessageShow("Ninguno de los anteriores", False) + cuest.agregaPreguntaCheckbox("3", "¿Qué productos de Kileo Gato encuentras en esta tienda?", Array As String("Whiskas","KITEKAT","PAL GATO","CAT CHOW","GATINA","MININO","MI MISHI","OTROS","Ninguno de los anteriores")) + Else +' Log(m.Get("idRespuesta")) + cuest.agregaPreguntaAbierta("2", "Captura el precio por kilo de los articulos seleccionados anteriormente", cuest.strToList(m.Get("idRespuesta")), cuest.strToList(m.Get("respuesta"))) + End If + Case "2" +' Log(m.Get("respuesta")) + cuest.agregaPreguntaCheckbox("3", "¿Qué productos de Kileo Gato encuentras en esta tienda?", Array As String("Whiskas","KITEKAT","PAL GATO","CAT CHOW","GATINA","MININO","MI MISHI","OTROS","Ninguno de los anteriores")) + Case "3" +' Log(m.Get("respuesta")) + If m.Get("respuesta") = "Ninguno de los anteriores" Then +' Log("Ninguno de los anteriores") +' ToastMessageShow("Ninguno de los anteriores", False) + cuest.agregaPreguntaCheckbox("5", "¿Qué productos de húmedo MARS encuentras en esta tienda?", Array As String("Pedigree Adulto res","Pedigree Adulto Pollo","Pedigree Cachorro res","Pedigree Cachorro Pollo","Pedigree Raz Peq res","Pedigree Raz Peq Pollo","Pedigree Adulto Cordero","Pedigree Adulto Lata res","Whiskas Atún","Whiskas Pollo","Whiskas res","Whiskas Salmón","Whiskas Parrillada Mixta","Whiskas Pescado BLANCO","Whiskas Souffle","Ninguno de los anteriores")) + Else + cuest.agregaPreguntaAbierta("4", "Captura el precio por kilo de los articulos seleccionados anteriormente", cuest.strToList(m.Get("idRespuesta")), cuest.strToList(m.Get("respuesta"))) + End If + Case "4" + cuest.agregaPreguntaCheckbox("5", "¿Qué productos de húmedo MARS encuentras en esta tienda?", Array As String("Pedigree Adulto res","Pedigree Adulto Pollo","Pedigree Cachorro res","Pedigree Cachorro Pollo","Pedigree Raz Peq res","Pedigree Raz Peq Pollo","Pedigree Adulto Cordero","Pedigree Adulto Lata res","Whiskas Atún","Whiskas Pollo","Whiskas res","Whiskas Salmón","Whiskas Parrillada Mixta","Whiskas Pescado BLANCO","Whiskas Souffle","Ninguno de los anteriores")) + Case "5" + cuest.agregaPreguntaCheckbox("6", "¿Qué productos de húmedo otros encuentras en esta tienda?", Array As String("Dog Chow (cualquier sabor)","Ganador (cualquier sabor)","Felix (cualquier sabor)","Minino plus (cualquier sabor)","Cat Chow (cualquier sabor)","Beneful (cualquier sabor)","Amigo Gourmet (cualquier sabor)","Ninguno de los anteriores")) + Case "6" + cuest.agregaPreguntaCheckbox("7", "¿Qué productos de botanas encuentras en esta tienda?", Array As String("Dentastix","Biscrok","Ninguno de los anteriores")) + Case "7" +' Log(m.Get("respuesta")) + ToastMessageShow(m.Get("respuesta"), False) + Log(">>>>>>>>>> " & cuest.encuestaIniciada) + cuest.encuestaIniciada = False + Log(">>>>>>>>>> " & cuest.encuestaIniciada) +' refrescarCliente = True +' Log($"#### REFRESCAR CLIENTE -> ${refrescarCliente}"$) + B4XPage_Appear +' Case 6 + End Select +End Sub + + +'tomar foto + +'Private Sub InitializeCamera2 +' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA) +' Wait For B4XPage_PermissionResult (Permission As String, resultC As Boolean) +' If resultC Then +' camEx.Initialize(p_cam, frontCamera, Me, "Camera1") +' frontCamera = camEx.Front +' Log("inicializamos Camara") +' Else +' ToastMessageShow("No permission!!!", 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("conpermisos para escritura") +'' Else +'' ToastMessageShow("No permission!!!", 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("conpermisos para escritura") +'' Else +'' ToastMessageShow("No permission!!!", True) +'' End If +'End Sub + +'Sub Camera1_Ready (Success As Boolean) +' Log("Camara ready") +' If Success Then +' camEx.SetJpegQuality(90) +' camEx.SetContinuousAutoFocus +' camEx.CommitParameters +' camEx.StartPreview +' Log(camEx.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 = DateTime.Now & "GUNA.jpg" +' Dim Dirp As String = File.DirInternal +' Dim Dir As String +' Dim Dir2 As String +' Try +' File.MakeDir(Dirp,"/guna") +' Dir = "/guna" +' 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 +' +' camEx.SavePictureToFile(Data, Dirp&Dir, filename) +' Log(Dirp&Dir &" ALGO BONITO COMO UN COLOR PARA GUERRA "& filename) +' camEx.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 +' +' Log(filename) +' +' +' If filename <> "0" Then +' Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 300, 450, True) +' Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, True) +' img.WriteToStream(out, 100, "PNG") +' out.Close +' Private fecha As String = $"${DateTime.Date(DateTime.Now)} ${DateTime.Time(DateTime.Now)}"$ +' B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_FOTO, HE_FECHA, HE_TIPO, HE_LAT, HE_LON,HE_RES) VALUES (?,?,?,?,?,?,?)", Array As Object(la_cuenta.Text, File.ReadBytes(File.DirInternal & Dir & Dir2, filename), fecha, idencuestaaguardar, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps,"FOTO")) +' End If +' StopCamera2 +'' nombrefoto = "0" +' ocultaPanelEncuesta +'End Sub +' +'Private Sub p_camara_Click +' +'End Sub +' +'Private Sub b_foto_Click +' camEx.TakePicture +' p_camara.Visible = False +'' StopCamera2 +'End Sub +' +'Private Sub StopCamera2 +'' Capturing = False +' If camEx.IsInitialized Then +' camEx.Release +' End If +'End Sub + +Private Sub b_Inicio_Fin_venta_Click +'' b_Inicio_Fin_venta.Visible = False +'' Subs.bitacora(Subs.fechanormal(DateTime.Now), usuario, Subs.traeAlmacen, Subs.traeRuta, "Pre-venta", "0", Subs.fechanormal(DateTime.Now), Subs.fechanormal(DateTime.Now), B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, precision, "", "") +' contadorIniciarVenta = 0 +' IniVenNO = False +' If dentroDeGeocerca Then precision = 1 +'' LogColor("-------> "&contadorIniciarVenta & " <-------", Colors.Red) +' motivoNoVenta = "" +' motivoNoVisita = "" +' p_transparenteInicioFin.Visible = False +' If b_Inicio_Fin_venta.Text = "TERMINAR VENTA" Then +' Subs.bitacora(Subs.fechanormal(DateTime.Now), Subs.traeUsuarioDeBD, Subs.traeAlmacen, Subs.traeRutaBitacora, "Termina Venta", Subs.traeCliente, "", Subs.fechanormal(DateTime.Now), B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, precision, motivoNoVenta, motivoNoVisita,b_geo) +' bitacora.enVenta = False +'' LogColor($">>>>>> TERMINA VENTA: ${Starter.enVenta} - ${Subs.traeCliente}"$, Colors.red) +' B4XPages.ShowPageAndRemovePreviousPages("Principal") +'' guardadoventa +' Else if b_Inicio_Fin_venta.Text = "INICIAR VENTA" Then +' contadorIniciarVenta = 0 +' IniVenNO = False +' contadorIniciarVenta = contadorIniciarVenta + 1 +' If contadorIniciarVenta = 1 And IniVenNO = False And motivoNoVenta <> "NO VENTA" Then +' IniVenNO = True +' Subs.bitacora(Subs.fechanormal(DateTime.Now), Subs.traeUsuarioDeBD, Subs.traeAlmacen, Subs.traeRutaBitacora, "Inicia Venta", Subs.traeCliente, Subs.fechanormal(DateTime.Now), "", B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, precision, "", "",b_geo) +' bitacora.enVenta = True +'' LogColor($">>>>>> INICIA VENTA: ${Starter.enVenta} - ${Subs.traeCliente}"$, Colors.red) +' Else If contadorIniciarVenta = 1 And IniVenNO = False And motivoNoVenta = "NO VENTA" Then +' IniVenNO = True +' Subs.bitacora(Subs.fechanormal(DateTime.Now), Subs.traeUsuarioDeBD, Subs.traeAlmacen, Subs.traeRutaBitacora, "Inicia Venta", Subs.traeCliente, Subs.fechanormal(DateTime.Now), "", B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, precision, motivoNoVenta, "",b_geo) +' bitacora.enVenta = True +' Else If contadorIniciarVenta > 1 Then +' b_Inicio_Fin_venta.Visible = False +' End If +' End If +' +' b_Inicio_Fin_venta.Visible = False +End Sub + +Private Sub LA_GEO_Click + Log(geoCont) + If geoCont = 3 Then + Subs.centraPanel(p_pideGeoPass, Root.Width) + geoCont = 0 + If distance > 99 Then + p_pideGeoPass.BringToFront + et_geopass.RequestFocus + p_pideGeoPass.Visible = True + End If + End If + geoCont = geoCont + 1 +End Sub + +Private Sub p_transparenteInicioFin_Click + +End Sub + +Private Sub b_preventa_Click + +End Sub + +Private Sub p_transparenteTicketImpreso_Click + +End Sub + +Private Sub b_codigoAutorizacion_Click + If et_codigoAutorizacion.Text <> "KMTS1" Then + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_codigoAutorizacion" + cmd.Parameters = Array As Object(et_codigoAutorizacion.Text.Trim, Subs.traeRuta, Subs.traeAlmacen) + reqManager.ExecuteQuery(cmd , 0, "codigoAutorizacion") + Else + Starter.skmt.ExecNonQuery("delete from ticket_impreso where idCliente in (select cuenta from cuentaa)") + p_transparenteTicketImpreso.Visible = False + et_codigoAutorizacion.Text = "" + End If + teclado.HideKeyboard +' p_transparenteTicketImpreso.Visible = False +End Sub + +Private Sub b_cancelarCodigoAutorizacion_Click + p_transparenteTicketImpreso.Visible = False +End Sub + +Private Sub PDFGENERAR + ESPACIO = 0 + DateTime.DateFormat = "MM/dd/yyyy" + DateTime.TimeFormat = "HH:mm:ss" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + Dim PDF As cPDF + 'initialize with mm unit + PDF.Initialize("mm") + 'set properties + PDF.sProperty(PDF.PropertyAuthor,"Keymonsoft"). _ + sProperty(PDF.PropertyTitle,"Ticket"). _ + sProperty(PDF.PropertyKeywords,"B4X,PDF,Cross platform") + 'add a page + + Dim s56 As Cursor=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_FOLIO = ? AND LENGTH(PE_CEDIS) < 4 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PROID", Array As String("PREVENTA")) + Dim s57 As Cursor = skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_FOLIO = ? AND LENGTH(PE_CEDIS) > 3 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_CEDIS, PE_COSTOU", Array As String("PREVENTA")) + + Dim pagina As Double = ((18 + (s56.RowCount*2) + (s57.RowCount*2)) * (6)) + 12 +' Dim pagina As Double = ((18 + s56.RowCount + s57.RowCount +2) * (6)) + 18 + Dim multiplicador As Int = 0 + PDF.pageAdd(-300,pagina) +' pdf.pageAdd(-350,-1900) + + PDF.sFont(PDF.fontHelvetica,0,10,PDF.colorBlack) + + PDF.outImage(xui.DefaultFolder,"guna-fondo.jpg",1,pagina-45,45,0) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"GUNA") + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,sDate& " " & sTime) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Vendedor:" & Subs.traeUsuarioDeBD) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Tienda: " & La_nombre.Text) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"ID.Cliente: " & la_cuenta.Text) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Calle: " & la_Calle.Text) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Colonia: " & la_col.Text) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6," ") + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6," ") + c = skmt.ExecQuery2("SELECT * FROM PEDIDO WHERE PE_FOLIO = ?",Array As String("PREVENTA")) + If c.RowCount > 0 Then + s=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_FOLIO = ? AND LENGTH(PE_CEDIS) < 4 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PROID", Array As String("PREVENTA")) + If S.RowCount>0 Then + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"------------------------------------PREVENTA-----------------------------------------") + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Cant. Precio Importe") + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"-----------------------------------------------------------------------------------------") + For i=0 To S.RowCount -1 + S.Position=i + If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,s.GetString("PE_PRONOMBRE") ) + Else + PDF.sFont(PDF.fontHelvetica,0,7,PDF.colorBlack) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,s.GetString("PE_PRONOMBRE")) +' LogColor(s.GetLong("L_CANT"),Colors.Magenta) +' LogColor(s.GetLong("L_COSTOU"),Colors.Magenta) +' LogColor(s.GetLong("L_COSTO_TOT"),Colors.Magenta) + TAMANO = s.GetLong("L_CANT") + s.GetLong("L_COSTOU") + s.GetLong("L_COSTO_TOT") + ESPACIO = 92 + BLANCO = " " + ESPACIO = ESPACIO - TAMANO + ESPACIO = ESPACIO / 2 + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + PDF.sFont(PDF.fontHelvetica,0,10,PDF.colorBlack) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6, s.GETSTRING("PE_CANT") & BLANCO & s.GETSTRING("PE_COSTOU") & BLANCO & s.GETSTRING("PE_COSTO_TOT")) +' pdf.outtext(1,108-9*6,s.GETSTRING("PE_COSTOU")) + +' pdf.outtext(1,108-9*6,s.GETSTRING("PE_COSTO_TOT") ) + End If + Next + PDF.outtext(1,108-9*6," " ) + End If + s.Close + s=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_FOLIO = ? AND LENGTH(PE_CEDIS) > 3 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_CEDIS, PE_COSTOU", Array As String("PREVENTA")) + If S.RowCount>0 Then + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"--------------------------PROMOS PREVENTA-------------------------------------") + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Cant. Precio Importe") + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"-----------------------------------------------------------------------------------------") + For i=0 To S.RowCount -1 + S.Position=i + If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,s.GetString("PE_PRONOMBRE") ) + Else + PDF.sFont(PDF.fontHelvetica,0,7,PDF.colorBlack) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,s.GetString("PE_PRONOMBRE")) + LogColor(s.GetLong("L_CANT"),Colors.Magenta) + LogColor(s.GetLong("L_COSTOU"),Colors.Magenta) + LogColor(s.GetLong("L_COSTO_TOT"),Colors.Magenta) + TAMANO = s.GetLong("L_CANT") + s.GetLong("L_COSTOU") + s.GetLong("L_COSTO_TOT") + ESPACIO = 92 + BLANCO = " " + ESPACIO = ESPACIO - TAMANO + ESPACIO = ESPACIO / 2 + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + PDF.sFont(PDF.fontHelvetica,0,10,PDF.colorBlack) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6, s.GETSTRING("PE_CANT") & BLANCO & s.GETSTRING("PE_COSTOU") & BLANCO & s.GETSTRING("PE_COSTO_TOT")) + End If + Next + End If + s.Close +' multiplicador = multiplicador +1 +' pdf.outtext(1,pagina-multiplicador*6," " ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6," " ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"-----------------------------------------------------------------------------------------") + s=skmt.ExecQuery2("select SUM(PE_COSTO_TOT) AS TOTAL FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As String("PREVENTA")) + s.Position =0 + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Total preventa: $" & s.GetString("TOTAL") ) + s.Close + c= skmt.ExecQuery2("select sum(PE_CANT) as PC_NOART from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP ) AND PE_FOLIO = ?", Array As String("PREVENTA")) + C.Position=0 + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Total articulos preventa: " & c.GetString("PC_NOART") ) + c.Close + End If +' multiplicador = multiplicador +1 +' pdf.outtext(1,pagina-multiplicador*6," " ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"-----------------------------------------------------------------------------------------" ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"--------------------------ESTE TICKET NO ES UN ---------------------------" ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"-------------------COMPROBANTE FISCAL, SOLO ES--------------------" ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"---------------------------------INFORMATIVO-----------------------------------" ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"-----------------------------------------------------------------------------------------" ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6," " ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6," " ) +' multiplicador = multiplicador +1 +' PDF.outtext(1,pagina-multiplicador*6," " ) +' multiplicador = multiplicador +1 +' PDF.outtext(1,pagina-multiplicador*6," " ) +' multiplicador = multiplicador +1 +' PDF.outtext(1,pagina-multiplicador*6,"-----------------------------------------------------------------------------------------" ) +' 'all combinations of font normal, bold,italic,underline and strikethrough +' For i=0 To 15 +' 'select a font +' pdf.sFont(pdf.fontHelvetica,s,30,pdf.colorBlack) +' 'draw a text at position 20 (from left) and 277 (from bottom) +' pdf.outtext(20,277-i*15,"Hello world!") +' Next + DateTime.DateFormat = "ddmmyyyy" + DateTime.TimeFormat = "HHmmss" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + archivoTicketPDF = sDate&sTime&".pdf" + 'save to file with compression if data compressed are smaller + savePDF(PDF, archivoTicketPDF, PDF.CompressAlways) + 'open with default viewer +' openPDF(sDate&sTime&".pdf") +End Sub + +Private Sub PDFGENERAR2 + ESPACIO = 0 + DateTime.DateFormat = "MM/dd/yyyy" + DateTime.TimeFormat = "HH:mm:ss" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + Dim PDF As cPDF + 'initialize with mm unit + PDF.Initialize("mm") + 'set properties + PDF.sProperty(PDF.PropertyAuthor,"Keymonsoft"). _ + sProperty(PDF.PropertyTitle,"Ticket"). _ + sProperty(PDF.PropertyKeywords,"B4X,PDF,Cross platform") + 'add a page + + Dim s56 As Cursor=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_FOLIO = ? AND LENGTH(PE_CEDIS) < 4 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PROID", Array As String("PREVENTA")) + Dim s57 As Cursor = skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_FOLIO = ? AND LENGTH(PE_CEDIS) > 3 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_CEDIS, PE_COSTOU", Array As String("PREVENTA")) + + Dim pagina As Double = ((18 + (s56.RowCount*2) + (s57.RowCount*2)) * (6)) + 12 +' Dim pagina As Double = ((18 + s56.RowCount + s57.RowCount +2) * (6)) + 18 + Dim multiplicador As Int = 0 + PDF.pageAdd(-300,pagina) +' pdf.pageAdd(-350,-1900) + + PDF.sFont(PDF.fontHelvetica,0,10,PDF.colorBlack) + + PDF.outImage(xui.DefaultFolder,"guna-fondo.jpg",1,pagina-45,45,0) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"GUNA") + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,sDate& " " & sTime) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Vendedor:" & Subs.traeUsuarioDeBD) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Tienda: " & La_nombre.Text) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"ID.Cliente: " & la_cuenta.Text) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Calle: " & la_Calle.Text) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Colonia: " & la_col.Text) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6," ") + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6," ") + c = skmt.ExecQuery2("SELECT * FROM PEDIDO WHERE PE_FOLIO = ?",Array As String("PREVENTA")) + If c.RowCount > 0 Then + s=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_FOLIO = ? AND LENGTH(PE_CEDIS) < 4 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PROID", Array As String("PREVENTA")) + If S.RowCount>0 Then + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"------------------------------------PREVENTA-----------------------------------------") + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Cant. Precio Importe") + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"-----------------------------------------------------------------------------------------") + For i=0 To S.RowCount -1 + S.Position=i + If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,s.GetString("PE_PRONOMBRE") ) + Else + PDF.sFont(PDF.fontHelvetica,0,7,PDF.colorBlack) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,s.GetString("PE_PRONOMBRE")) +' LogColor(s.GetLong("L_CANT"),Colors.Magenta) +' LogColor(s.GetLong("L_COSTOU"),Colors.Magenta) +' LogColor(s.GetLong("L_COSTO_TOT"),Colors.Magenta) + TAMANO = s.GetLong("L_CANT") + s.GetLong("L_COSTOU") + s.GetLong("L_COSTO_TOT") + ESPACIO = 92 + BLANCO = " " + ESPACIO = ESPACIO - TAMANO + ESPACIO = ESPACIO / 2 + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + PDF.sFont(PDF.fontHelvetica,0,10,PDF.colorBlack) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6, s.GETSTRING("PE_CANT") & BLANCO & s.GETSTRING("PE_COSTOU") & BLANCO & s.GETSTRING("PE_COSTO_TOT")) +' pdf.outtext(1,108-9*6,s.GETSTRING("PE_COSTOU")) + +' pdf.outtext(1,108-9*6,s.GETSTRING("PE_COSTO_TOT") ) + End If + Next + PDF.outtext(1,108-9*6," " ) + End If + s.Close + s=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_FOLIO = ? AND LENGTH(PE_CEDIS) > 3 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_CEDIS, PE_COSTOU", Array As String("PREVENTA")) + If S.RowCount>0 Then + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"--------------------------PROMOS PREVENTA-------------------------------------") + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Cant. Precio Importe") + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"-----------------------------------------------------------------------------------------") + For i=0 To S.RowCount -1 + S.Position=i + If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,s.GetString("PE_PRONOMBRE") ) + Else + PDF.sFont(PDF.fontHelvetica,0,7,PDF.colorBlack) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,s.GetString("PE_PRONOMBRE")) + LogColor(s.GetLong("L_CANT"),Colors.Magenta) + LogColor(s.GetLong("L_COSTOU"),Colors.Magenta) + LogColor(s.GetLong("L_COSTO_TOT"),Colors.Magenta) + TAMANO = s.GetLong("L_CANT") + s.GetLong("L_COSTOU") + s.GetLong("L_COSTO_TOT") + ESPACIO = 92 + BLANCO = " " + ESPACIO = ESPACIO - TAMANO + ESPACIO = ESPACIO / 2 + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + PDF.sFont(PDF.fontHelvetica,0,10,PDF.colorBlack) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6, s.GETSTRING("PE_CANT") & BLANCO & s.GETSTRING("PE_COSTOU") & BLANCO & s.GETSTRING("PE_COSTO_TOT")) + End If + Next + End If + s.Close +' multiplicador = multiplicador +1 +' pdf.outtext(1,pagina-multiplicador*6," " ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6," " ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"-----------------------------------------------------------------------------------------") + s=skmt.ExecQuery2("select SUM(PE_COSTO_TOT) AS TOTAL FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As String("PREVENTA")) + s.Position =0 + + + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Descuento: $" & 150) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Total preventa: $" & (s.GetString("TOTAL") -150)) + s.Close + c= skmt.ExecQuery2("select sum(PE_CANT) as PC_NOART from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP ) AND PE_FOLIO = ?", Array As String("PREVENTA")) + C.Position=0 + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"Total articulos preventa: " & c.GetString("PC_NOART") ) + c.Close + End If +' multiplicador = multiplicador +1 +' pdf.outtext(1,pagina-multiplicador*6," " ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"-----------------------------------------------------------------------------------------" ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"--------------------------ESTE TICKET NO ES UN ---------------------------" ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"-------------------COMPROBANTE FISCAL, SOLO ES--------------------" ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"---------------------------------INFORMATIVO-----------------------------------" ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"-----------------------------------------------------------------------------------------" ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6," " ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6," " ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6," " ) + multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6," " ) +' multiplicador = multiplicador +1 + PDF.outtext(1,pagina-multiplicador*6,"-----------------------------------------------------------------------------------------" ) +' 'all combinations of font normal, bold,italic,underline and strikethrough +' For i=0 To 15 +' 'select a font +' pdf.sFont(pdf.fontHelvetica,s,30,pdf.colorBlack) +' 'draw a text at position 20 (from left) and 277 (from bottom) +' pdf.outtext(20,277-i*15,"Hello world!") +' Next + DateTime.DateFormat = "ddmmyyyy" + DateTime.TimeFormat = "HHmmss" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + archivoTicketPDF = sDate&sTime&".pdf" + 'save to file with compression if data compressed are smaller + savePDF(PDF, archivoTicketPDF, PDF.CompressAlways) + 'open with default viewer +' openPDF(sDate&sTime&".pdf") +End Sub + +private Sub savePDF(apdf As cPDF,afile As String,acompress As Int) + Dim folder As String + #if B4J + folder=xui.DefaultFolder + #End If + #if B4A + folder = Starter.fFileProvider.SharedFolder + #End If + #if B4I + '...... + #End If +' Log("aaa:" & folder) +' Log("bbb:" & B4XPages.MainPage.Provider.SharedFolder) + apdf.saveToFile(folder, afile, acompress) +End Sub + +private Sub openPDF(afile As String) + #if B4J + fx.ShowExternalDocument(File.GetUri(xui.DefaultFolder,afile)) + #end if + #if B4A + Dim in As Intent + in.Initialize(in.ACTION_VIEW, "") + Starter.ffileProvider.SetFileUriAsIntentData(in, afile) + in.SetComponent("android/com.android.internal.app.ResolverActivity") + in.SetType("application/pdf") + StartActivity(in) + #end if + #if B4I + '...... + #End If +End Sub + +Private Sub b_enviarTicket_Click + et_numeroPDF.Text = telefono.trim + p_transparentePDF.Visible = True +' ProgressDialogShow("Enviando ticket, un momento por favor.") +' Log("Progress 1") +' PDFGENERAR +' enviaTicket +' Sleep(1500) +' Guardar_Click +' ProgressDialogHide + Log("Progress 2") +End Sub + +Private Sub b_enviarTicket_LongClick +' et_numeroPDF.Text = TELEFONO.trim +' p_transparentePDF.Visible = True +' PDFGENERAR +' EnviarPDFWhatsAppNumero(et_numeroPDF.Text) +' Guardar_Click +End Sub + +Sub enviaTicket + 'copy the shared file to the shared folder + Sleep(1000) + Dim email As Email + email.To.Add("cheveguerra@gmail.com") + email.Subject = "subject" + email.Attachments.Add(Starter.fFileProvider.GetFileUri(archivoTicketPDF)) + Dim in As Intent = email.GetIntent + in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION + StartActivity(in) +End Sub + +Sub EnviarPDFWhatsAppNumero(NumeroTelefono As String) + If NumeroTelefono.Length = 10 Then NumeroTelefono = "521" & NumeroTelefono ' Agregamos el 521 si es que falta. + ' Ruta del archivo PDF +' Dim RutaArchivo As String = Starter.fFileProvider.SharedFolder & "/" & archivoTicketPDF +' Log(RutaArchivo) + + ' Verificar si el archivo existe + If File.Exists(Starter.fFileProvider.SharedFolder, archivoTicketPDF) Then + + Dim fd As MultipartFileData + fd.Initialize + fd.KeyName = "file" + fd.Dir = Starter.fFileProvider.SharedFolder + fd.FileName = archivoTicketPDF + fd.ContentType = "application/pdf" + Private link As String = "http://keymon.lat:9000/v1/ticketpdf" + Private campos As Map = CreateMap( "message":"Tu compra de Guna va ser a *crédito* por el monto de $${NumberFormat2(monto, 1, 2, 2, True)}\n\nManda *1* para confirmar\nManda *0* para rechazar\n\n*Nota:* Si este mensaje no se contesta, se considerará que el pago es en *EFECTIVO*.\n\n(Solo el *número* por favor)") + campos.Put("number", NumeroTelefono) + campos.Put("message","Tu recibo") + Log(campos) + Private job As HttpJob + job.Initialize("", Me) + job.PostMultipart(link, campos, Array(fd)) +' job.GetRequest.SetContentType("application/json") + Log(5555) + Wait For (job) JobDone(job As HttpJob) + +' ' Obtener el URI del archivo usando FileProvider +' Dim Uri0 As Object = Starter.fFileProvider.GetFileUri(archivoTicketPDF) +' +' ' Crear un Intent para compartir el archivo +' Dim Intent1 As Intent +' Intent1.Initialize(Intent1.ACTION_SEND, "") +' +' ' Establecer el tipo MIME del archivo (PDF) +' Intent1.SetType("application/pdf") +' +' ' Agregar el URI del archivo al Intent +' Intent1.PutExtra("android.intent.extra.STREAM", Uri0) +' +' ' Establecer permisos de lectura para la aplicación que recibe el archivo +' Intent1.Flags = 1 ' FLAG_GRANT_READ_URI_PERMISSION +' +' ' Especificar el número de teléfono en el Intent +' Intent1.PutExtra("jid", NumeroTelefono & "@s.whatsapp.net") ' Formato de WhatsApp +' +' ' Especificar que se abra directamente en WhatsApp +' Intent1.SetPackage("com.whatsapp") +' +' ' Iniciar el Intent para compartir el archivo +' Log("Intent para compartir archivo") +' StartActivity(Intent1) + Else + ToastMessageShow("El archivo PDF no existe.", True) + End If +End Sub + +Sub EnviarPDFWhatsAppNumero2(NumeroTelefono As String) + If NumeroTelefono.Length = 10 Then NumeroTelefono = "521" & NumeroTelefono ' Agregamos el 521 si es que falta. + ' Ruta del archivo PDF + Dim RutaArchivo As String = Starter.fFileProvider.SharedFolder & "/" & archivoTicketPDF + Log(RutaArchivo) + + ' Verificar si el archivo existe + If File.Exists(Starter.fFileProvider.SharedFolder, archivoTicketPDF) Then + ' Paso 1: Abrir WhatsApp con el número específico + Dim UriWhatsApp As String = "https://wa.me/" & NumeroTelefono + Dim IntentWhatsApp As Intent + IntentWhatsApp.Initialize(IntentWhatsApp.ACTION_VIEW, UriWhatsApp) + + ' Verificar si WhatsApp está instalado +' If IntentWhatsApp.ResolveActivity(PackageManager) Is Nothing Then +' ToastMessageShow("WhatsApp no está instalado.", True) +' Return +' End If + + ' Iniciar el Intent para abrir WhatsApp + StartActivity(IntentWhatsApp) + + ' Paso 2: Mostrar un mensaje para compartir el archivo manualmente + ToastMessageShow("Por favor, comparte el archivo manualmente en WhatsApp.", True) + + ' Esperar un momento para que WhatsApp se abra + Sleep(3000) + + ' Paso 3: Compartir el archivo desde tu aplicación + Dim Uri0 As Object = Starter.fFileProvider.GetFileUri(archivoTicketPDF) + + ' Crear un Intent para compartir el archivo + Dim Intent1 As Intent + Intent1.Initialize(Intent1.ACTION_SEND, "") + + ' Establecer el tipo MIME del archivo (PDF) + Intent1.SetType("application/pdf") + + ' Agregar el URI del archivo al Intent + Intent1.PutExtra("android.intent.extra.STREAM", Uri0) + + ' Establecer permisos de lectura para la aplicación que recibe el archivo + Intent1.Flags = 1 ' FLAG_GRANT_READ_URI_PERMISSION + + ' Iniciar el Intent para compartir el archivo + StartActivity(Intent1) + Else + ToastMessageShow("El archivo PDF no existe.", True) + End If +End Sub + +Private Sub b_envioPDF_Click + If ALMACEN = 87 Or ALMACEN = 6 Then + If Subs.traemontoprod Then + PDFGENERAR2 + Else + PDFGENERAR + End If + Else + PDFGENERAR + End If + EnviarPDFWhatsAppNumero(et_numeroPDF.Text) + + B4XPages.MainPage.skmt.ExecNonQuery("delete from TICKET_IMPRESO where idCliente In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery($"insert into TICKET_IMPRESO (idCliente) values ('${Subs.traeCliente}')"$) + + DateTime.DateFormat = "YYYY/MM/dd HH:mm:ss" + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insertEnvioTicketPDF" + Log(DateTime.Date(DateTime.Now)) + cmd.Parameters = Array As Object(Subs.traeCliente, Subs.traeUsuarioDeBD, et_numeroPDF.text, DateTime.Date(DateTime.Now)) + reqManager.ExecuteCommand(cmd , "insertEnvioTicketPDF") + + cmd.Initialize + cmd.Name = "insertaTelefonoTicketPDF" + Log(DateTime.Date(DateTime.Now)) + cmd.Parameters = Array As Object(Subs.traeAlmacen, Subs.traeRuta, Subs.traeCliente, et_numeroPDF.text) + reqManager.ExecuteCommand(cmd , "insertTelefonoTicketPDF") + + Guardar_Click + p_transparentePDF.Visible = False +End Sub + +Private Sub b_cancelarEnvioPDF_Click + p_transparentePDF.Visible = False +End Sub + +Private Sub p_transparentePDF_Click + +End Sub + +Private Sub et_numeroPDF_TextChanged (Old As String, New As String) + If New.Length = 10 Then b_envioPDF.Enabled = True Else b_envioPDF.Enabled = False +End Sub + +Private Sub btnPlanLealtad_Click + Subs.centraPanel(pnl_btns, pnlPlanLealtad.Width) + pnlPlanLealtad.Visible = True +End Sub + +Private Sub btnCancelarPlanLealtad_Click + pnlPlanLealtad.Visible = False +End Sub + +Private Sub btnAceptaPlanLealtad_Click + + c = Starter.skmt.ExecQuery("SELECT * FROM PLAN_LEALTAD WHERE PL_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + c.Position = 0 + If c.RowCount = 0 Then +' Starter.skmt.ExecNonQuery($"INSERT INTO PLAN_LEALTAD (PL_BANDERA,PL_CLIENTE) VALUES (1,'${cuenta}')"$) + B4XPages.MainPage.skmt.ExecNonQuery($"insert into PLAN_LEALTAD (PL_BANDERA, PL_CLIENTE) values ('1','${Subs.traeCliente}')"$) + pnlPlanLealtad.Visible = False + Log("AQUI") + B4XPage_Appear + Else + Starter.skmt.ExecNonQuery($"UPDATE PLAN_LEALTAD SET PL_BANDERA = 1 where PL_CLIENTE IN (SELECT CUENTA FROM CUENTAA)"$) + pnlPlanLealtad.Visible = False + Log("AQUI2") + B4XPage_Appear + End If +End Sub + +'########################## INICIA CODIGO PARA CREDITOS #################### +Sub mandaWAMsgCredito(numTel As String, monto As String) + DateTime.DateFormat="MM/dd/yyyy HH:mm:ss" + Private Fecha As String=DateTime.Date(DateTime.now) + numTel = "521" & numTel + Private numTel As String = "5215554192439" +' Private monto As String = "1500" + Private idCliente As String = Subs.traeCliente '"10748" + Private ruta As String = Subs.traeRuta '"333" + Private ALMACEN As String = Subs.traeAlmacen '"1" + +' CON POST + Private link As String = "http://keymon.lat:9000/v1/messages" + Private elJSON As String = $"{ + "number":"${numTel}", + "message":"Tu compra de Guna va ser a *crédito* por el monto de $${NumberFormat2(monto, 1, 2, 2, True)}\n\nManda *1* para confirmar\nManda *0* para rechazar\n\n*Nota:* Si este mensaje no se contesta, se considerará que el pago es en *EFECTIVO*.\n\n(Solo el *número* por favor)", + "monto":"${monto}", + "idcliente":"${idCliente}", + "almacen":"${ALMACEN}", + "ruta": "${ruta}", + "fecha":"${Fecha}" + }"$ + Private job As HttpJob + job.Initialize("", Me) + job.PostString(link, elJSON) + job.GetRequest.SetContentType("application/json") + Wait For (job) JobDone(job As HttpJob) + +' CON GET +' Private retorno As String = "%0D%0A" +' Private link As String = $"http://keymon.lat:9000/v1/messages?number=${numTel}&message=Tu compra de Guna va ser a crédito por el monto de $${NumberFormat2(monto, 1, 2, 2, True)}${retorno}${retorno}Manda *1* para confirmar${retorno}Manda *0* para rechazar${retorno}${retorno}*Nota: Si este mensaje no se contesta, se considerará que el pago es en EFECTIVO*${retorno}${retorno}(Solo el *número* por favor)&monto=${monto}&idcliente=${idCliente}&almacen=1&ruta=333&fecha=${Fecha}"$ +' Private job As HttpJob +' job.Initialize("", Me) + '' job.PostString(link, elJSON) +' job.Download(link) + '' job.GetRequest.SetContentType("application/json") +' Wait For (job) JobDone(job As HttpJob) + + Log("Whatsapp enviado con exito: " & job.Success) +End Sub +'########################## TERMINA CODIGO PARA CREDITOS #################### + + + + +Private Sub p_comentario_Click + +End Sub + +Private Sub p_comentarios_Click + +End Sub + +Private Sub b_comentarios_Click + p_comentario.Visible = True + et_comentario.Text = "" + Dim label1 As Label + label1 = lv_comentarios.SingleLineLayout.Label + label1.TextSize = 16 + label1.TextColor = Colors.White + + + + + label1.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + + +' Subs.centraListView(lv_comentarios,Root.Width) + + Private c As Cursor = Starter.skmt.ExecQuery("select COMENTARTIO FROM COMENTARIOS WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + lv_comentarios.SingleLineLayout.Label.TextColor = Colors.BlacK + lv_comentarios.Clear + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Dim itemText As String + + itemText = $"${c.GetString("COMENTARTIO")}"$ + lv_comentarios.AddSingleLine(itemText) + + Next + Else + lv_comentarios.AddSingleLine("No hay datos disponibles.") + End If +' skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS COMENTARIOS (COMENTARTIO TEXT, CLIENTE TEXT, DESCARGADO TEXT)") + + +End Sub + +Private Sub b_cerarcom_Click + p_comentario.Visible = False + et_comentario.Text = "" +End Sub + +Private Sub b_agregarcom_Click + + If et_comentario.Text <> "" Then + B4XPages.MainPage.skmt.ExecNonQuery($"insert into COMENTARIOS (COMENTARTIO, CLIENTE) values ('${et_comentario.Text}','${Subs.traeCliente}')"$) + + Dim label1 As Label + label1 = lv_comentarios.SingleLineLayout.Label + label1.TextSize = 16 + label1.TextColor = Colors.White + + + + + label1.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + + +' Subs.centraListView(lv_comentarios,Root.Width) + + Private c As Cursor = Starter.skmt.ExecQuery("select COMENTARTIO FROM COMENTARIOS WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + lv_comentarios.SingleLineLayout.Label.TextColor = Colors.BlacK + lv_comentarios.Clear + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Dim itemText As String + + itemText = $"${c.GetString("COMENTARTIO")}"$ + lv_comentarios.AddSingleLine(itemText) + + Next + Else + lv_comentarios.AddSingleLine("No hay datos disponibles.") + End If + c.Close + et_comentario.Text = "" + End If + +End Sub + +Private Sub Label19_Click + +End Sub + +Private Sub Label19_LongClick + + Dim numeroTel As String = Label19.Text + + numeroTel = numeroTel.Replace(" ", "").Replace("-", "").Replace("(", "").Replace(")", "") + + If numeroTel.Length > 0 Then + Dim Intent1 As Intent + Intent1.Initialize("android.intent.action.DIAL", "tel:" & numeroTel) + StartActivity(Intent1) + Else + ToastMessageShow("Número no válido", False) + End If + + Return True + +End Sub + +Private Sub ImageView4_Click + InitializeCamera2 + p_camara.Visible = True + Subs.centraPanel(p_cam,p_camara.Width) + + p_camara.BringToFront +End Sub + + +Private Sub InitializeCamera2 + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA) + Wait For B4XPage_PermissionResult (Permission As String, resultC As Boolean) + If resultC Then + camEx.Initialize(p_cam, frontCamera, Me, "Camera1") + frontCamera = camEx.Front + Log("inicializamos Camara") + Else + ToastMessageShow("No permission Camara!!!", True) + End If +End Sub + +Sub Camera1_Ready (Success As Boolean) + Log("Camara ready") + If Success Then + camEx.SetJpegQuality(90) + camEx.SetContinuousAutoFocus + camEx.CommitParameters + camEx.StartPreview + Log(camEx.GetPreviewSize) + Else + ToastMessageShow("Cannot open camera.", True) + Log("Cannot open camera") + End If +End Sub + +Sub Camera1_PictureTaken (Data()As Byte) + + DateTime.DateFormat="ddMMyyyyHHmmss" + nombrefoto = DateTime.Now & "_FOTO1.jpg" + teclado.HideKeyboard + fototomada = nombrefoto + + + 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,"/md") + Dir = "/md" + 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 + + camEx.SavePictureToFile(Data, Dirp&Dir, filename) + camEx.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 + + Log(nombrefoto) + + Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 450, 600, True) + Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False) + img.WriteToStream(out, 100, "PNG") +' foto4 = File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto3) + + out.Close + ImageView4.Bitmap = LoadBitmap(File.DirInternal & Dir & Dir2,nombrefoto) + + skmt.ExecNonQuery2("UPDATE kmt_info3 SET foto = (?) WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)",Array As Object(File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto))) + StopCamera2 + +End Sub + +Private Sub p_camara_Click + +End Sub + +Private Sub b_foto_Click +' Log(nombrefoto) +' Dim Dirp As String = File.DirInternal +' Dim Dir As String +' Dim Dir2 As String +' Try +' File.MakeDir(Dirp,"/md") +' Dir = "/md" +' 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 + camEx.TakePicture + p_camara.Visible = False + +' skmt.ExecNonQuery2("UPDATE kmt_info3 SET foto = (?) WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)",Array As Object(File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto))) +' StopCamera2 +End Sub + +Private Sub StopCamera2 +' Capturing = False + If camEx.IsInitialized Then + camEx.Release + End If +End Sub + +Private Sub p_cliente__Click + +End Sub + +Private Sub pnlPlanLealtad_Click + +End Sub + +Private Sub CH_FACTURA_CheckedChange(Checked As Boolean) + +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..70cfae8 --- /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 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 + Private Panel4 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" + p_clientes.Height = Root.Height + p_clientes.Width = Root.Width + Panel4.Left = Round(Root.Width/2)-(Panel4.Width/2) + Panel4.Height = Root.Height * 0.70 + ListView1.Height = Panel4.Height * 0.95 + + ' 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 + busca.Text = "" + entro = "2" + colonia = 0 + c = B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info3 where gestion = 0 ORDER BY CAT_CL_CODIGO") + ListView1.Clear + lfila.Text = "NOMBRE" + Subs.SetDivider(ListView1, Colors.White, 2) + If c.RowCount>0 Then + For i = 0 To c.RowCount - 1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 20 + label1.TextColor = Colors.White + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 20 + label2.TextColor = Colors.White + label1.Height = 25dip + label2.Height = 60dip + + ListView1.TwoLinesLayout.ItemHeight = 95dip + label1.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + label2.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + ListView1.AddTwoLines(c.GetString("CAT_CL_CODIGO"), c.GetString("CAT_CL_NOMBRE")) + Next + End If + If B4XPages.MainPage.cliente.cuest.IsInitialized Then + 'Borramos las encuestas que no hayan respondido la pregunta 7, es decir que si no completaron la encuesta, se borra todo para que les vuelva a aparecer. + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUESTIONARIO where Q_IDCLIENTE not in (select Q_IDCLIENTE from CUESTIONARIO where Q_IDPREGUNTA = '7')") + Log("Borramos encuestas incompletas") + End If + entro = "4" +End Sub + +Sub ListView1_ItemClick (Position As Int, Value As Object) + If colonia = 0 Then + colonia = Value + End If + If entro = "2" Then + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_CALLE, CAT_CL_COLONIA, count(*) as cuantos from kmt_info3 where gestion = 0 and CAT_CL_COLONIA = ? GROUP BY CAT_CL_CALLE, CAT_CL_COLONIA order by CAT_CL_CALLE ", Array As String(Value)) + 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_info3 where gestion = 0 and CAT_CL_CALLE = ? AND CAT_CL_COLONIA = ? order by CAT_CL_NOMBRE ", Array As String(Value, 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(Value)) + 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 (Value)) + 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" +' Log(entro) + If B4XPages.MainPage.cliente.bitacora.IsInitialized Then + Log("VAMOS A CLIENTE CON ENVENTA = FALSO") + B4XPages.MainPage.cliente.bitacora.iniciamosVenta + Log(B4XPages.MainPage.cliente.bitacora.enVenta) + End If + B4XPages.ShowPage("Cliente") + End If + Log(entro) +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 + Return True +End Sub + +Sub BUSCA_TextChanged (Old As String, New As String) + q_buscar = "%" & busca.Text & "%" + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info3 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 + Subs.SetDivider(ListView1, Colors.White, 2) + lfila.text = "Nombre y Calle" + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 20 + label1.TextColor = Colors.White + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 20 + label2.TextColor = Colors.White + label1.Height = 25dip + label2.Height = 60dip + + ListView1.TwoLinesLayout.ItemHeight = 95dip + label1.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + label2.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + ListView1.AddTwoLines(c2.GetString("CAT_CL_CODIGO"), c2.GetString("CAT_CL_NOMBRE")& CRLF &"CALLE: "& c2.GetString("CAT_CL_CALLE")) + Next + End If + entro = "4" + c2.Close +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_info3 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_info3 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_Cuestionario.bas b/B4A/C_Cuestionario.bas new file mode 100644 index 0000000..001dac1 --- /dev/null +++ b/B4A/C_Cuestionario.bas @@ -0,0 +1,417 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=12.2 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Private bAceptarPregunta As Button + Dim encuestaIniciada As Boolean = False + Private Root2 As B4XView + Private EventName As String 'ignore + Private CallBack As Object 'ignore + Private vPreguntaActual As String + Private db As SQL +' Private clienteAnt As String = "" + Dim panelSombra As Panel 'Panel de sombra. + Dim cb_respuestas As String = "" + Dim panelActual As Panel + Dim bringToFrontCont As Int = 0 +End Sub + +'You can add more parameters here. +Public Sub Initialize (vCallback As Object, vEventName As String, vRoot As B4XView, skmt As SQL) As Object + Root2 = vRoot + EventName = vEventName + CallBack = vCallback + db = skmt + vPreguntaActual = 0 + db.ExecNonQuery("CREATE TABLE IF NOT EXISTS CUESTIONARIO (Q_RUTA TEXT, Q_ALMACEN TEXT, Q_IDCLIENTE TEXT, Q_IDPREGUNTA TEXT, Q_PREGUNTA TEXT, Q_IDRESPUESTA TEXT, Q_RESPUESTA TEXT, Q_FECHA TEXT, Q_ENVIO_OK INTEGER DEFAULT 0)") + agregaColumna("CUESTIONARIO", "Q_RUTA", "TEXT") + agregaColumna("CUESTIONARIO", "Q_ALMACEN", "TEXT") + 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 + +'Regresa verdadero o falso dependiendo de si ya se inició la encuesta. +'Sub encuestaIniciada As Boolean +' Return vEncuestaIniciada +'End Sub + +'Regresa el Id de la pregunta actual (read-only). +Sub preguntaActual As String 'ignore + Return vPreguntaActual +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +'Muestra una pregunta con sus posibles respuestas. +' La lista de respuestas puede ser directamente un array p. ej. Array As String("value1", "value2") +' Crear un Sub_Click con el nombre del evento para que reciba un mapa con la respuesta p. ej.: Sub questionario_Click +' Regresa un mapa con: +' idPregunta - El Id especificado de la pregunta. +' pregunta - El texto de la pregunta. +' idRespuesta - Un numero consecutivo empezando en 1 por cada pregunta. +' respuesta - El texto de la respuesta. +' panel - El panel del popup para poder ocultarlo al contestar la pregunta. ( p. ej.: m.Get("panel").As(Panel).Visible = false ) +'########################################### +' Sub questionario_Click +' if m.get("idPregunta") = "1" ..Then .. Else con nuevas preguntas +' End Sub +'########################################### +Sub agregaPreguntaCheckbox(id As String, pregunta As String, respuestas As List) 'ignore + encuestaIniciada = True + vPreguntaActual = id + bAceptarPregunta.Initialize("bAceptarPregunta") + bAceptarPregunta.Enabled = False + Private su As StringUtils + panelSombra.Initialize("pSombra") + Private cd As ColorDrawable + cd.Initialize(Colors.ARGB(125, 98, 98, 98), 0) + panelSombra.Background = cd + Private panelX As Panel 'Panel de la pregunta. + panelX.Initialize("pQuest") + panelActual = panelX + Private lbl As Label 'Etiqueta de la pregunta. + lbl.Initialize("") + lbl.Text = pregunta + lbl.TextSize = 16 + lbl.TextColor = Colors.Black + cd.Initialize2(Colors.white, 20, 1, Colors.Gray) 'Borde y esquinas redondeadas del panel de la pregunta. + panelX.Background = cd + panelSombra.AddView(panelX, 10dip, 0dip, 80%x, 200dip) + Root2.AddView(panelSombra, 0, 0, 100%x, 100%y) 'add the panel to the layout + panelX.AddView(lbl, 20dip, 20dip, (panelX.Width * 0.9), 40dip) 'Agregamos la etiqueta al panel. + lbl.Height = su.MeasureMultilineTextHeight(lbl, lbl.Text) + Private cb(respuestas.Size) As CheckBox + For p = 0 To respuestas.Size - 1 + cb(p).Initialize("cb") + cb(p).Text = respuestas.Get(p) + cb(p).Tag = CreateMap("id":id, "pregunta":pregunta, "panel":panelSombra, "idRespuesta":p + 1) + panelX.AddView(cb(p), 10dip, (70 * (p + 1)), (panelX.Width * 0.9), 10) 'Agegamos el radio al panel. + cb(p).Height = su.MeasureMultilineTextHeight(cb(p), cb(p).Text) + 1 'Calculamos el alto del radio de acuerdo al largo del texto. + Private newTop As Int = lbl.top + lbl.Height + 10 'Si es el primer radio, lo ponemos en top = alto de la "pregunta" + 10. + If p <> 0 Then newTop =cb(p - 1).Top + cb(p - 1).Height + 10 'Calculamos el Top del radio de acuerdo al top y alto del radio anterior. + cb(p).Top = newTop + Next + bAceptarPregunta.Text = "Continuar" +' panelX.AddView(bAceptarPregunta, 10, newTop + r(respuestas.Size - 1).Height + 20, 150dip, 50dip) 'Ponemos el boton de continuar despues del ultimo radio. + panelX.AddView(bAceptarPregunta, 10, newTop + cb(respuestas.Size - 1).Height + 20, 150dip, 50dip) 'Ponemos el boton de continuar despues del ultimo radio. + bAceptarPregunta.Left = (panelX.Width / 2) - (bAceptarPregunta.Width / 2) + panelX.Height = bAceptarPregunta.Top + bAceptarPregunta.Height + 15dip 'Calculamos el alto del panel de acuerdo al Top del boton. + panelX.left = (Root2.Width / 2) - (panelX.Width / 2) + panelX.top = (Root2.Height / 3) - (panelX.Height / 3) + panelSombra.Width = Root2.Width + panelSombra.Height = Root2.Height + panelSombra.Elevation = 100 + panelSombra.BringToFront +' panelSombra.Elevation = 0 +End Sub + +Sub agregaPreguntaRadio(id As String, pregunta As String, respuestas As List) 'ignore + encuestaIniciada = True + vPreguntaActual = id + bAceptarPregunta.Initialize("bAceptarPregunta") + Private su As StringUtils + panelSombra.Initialize("pSombra") + Private cd As ColorDrawable + cd.Initialize(Colors.ARGB(125, 98, 98, 98), 0) + panelSombra.Background = cd + Private panelX As Panel 'Panel de la pregunta. + panelX.Initialize("pQuest") + panelActual = panelX + Private lbl As Label 'Etiqueta de la pregunta. + lbl.Initialize("") + lbl.Text = pregunta + lbl.TextSize = 16 + lbl.TextColor = Colors.Black + cd.Initialize2(Colors.white, 20, 1, Colors.Gray) 'Borde y esquinas redondeadas del panel de la pregunta. + panelX.Background = cd + panelSombra.AddView(panelX, 10dip, 0dip, 80%x, 200dip) + Root2.AddView(panelSombra, 0, 0, 100%x, 100%y) 'add the panel to the layout + panelX.AddView(lbl, 20dip, 20dip, (panelX.Width * 0.9), 40dip) 'Agregamos la etiqueta al panel. + lbl.Height = su.MeasureMultilineTextHeight(lbl, lbl.Text) + Private r(respuestas.Size) As RadioButton + For p = 0 To respuestas.Size - 1 + r(p).Initialize("r") + r(p).Text = respuestas.Get(p) + r(p).Tag = CreateMap("id":id, "pregunta":pregunta, "panel":panelSombra, "idRespuesta":p + 1) + panelX.AddView(r(p), 10dip, (70 * (p + 1)), (panelX.Width * 0.9), 10) 'Agegamos el radio al panel. + r(p).Height = su.MeasureMultilineTextHeight(r(p), r(p).Text) + 25 'Calculamos el alto del radio de acuerdo al largo del texto. + Private newTop As Int = lbl.top + lbl.Height + 10 'Si es el primer radio, lo ponemos en top = alto de la "pregunta" + 10. + If p <> 0 Then newTop = r(p - 1).Top + r(p - 1).Height + 5 'Calculamos el Top del radio de acuerdo al top y alto del radio anterior. + r(p).Top = newTop + Next + r(0).Checked = True + bAceptarPregunta.Text = "Continuar" +' panelX.AddView(bAceptarPregunta, 10, newTop + r(respuestas.Size - 1).Height + 20, 150dip, 50dip) 'Ponemos el boton de continuar despues del ultimo radio. + panelX.AddView(bAceptarPregunta, 10, newTop + r(respuestas.Size - 1).Height + 20, 150dip, 50dip) 'Ponemos el boton de continuar despues del ultimo radio. + bAceptarPregunta.Left = (panelX.Width / 2) - (bAceptarPregunta.Width / 2) + panelX.Height = bAceptarPregunta.Top + bAceptarPregunta.Height + 15dip 'Calculamos el alto del panel de acuerdo al Top del boton. + panelX.left = (Root2.Width / 2) - (panelX.Width / 2) + panelX.top = (Root2.Height / 3) - (panelX.Height / 2) + panelSombra.Width = Root2.Width + panelSombra.Height = Root2.Height + panelSombra.Elevation = 100 + panelSombra.BringToFront +End Sub + +'Agrega preguntas de respuesta abierta, los ids y texto de las preguntas deben de ser listas. +Sub agregaPreguntaAbierta(id As String, pregunta As String, ids As List, respuestas As List) 'ignore + Log("Iniciamos PreguntaAbierta") + Log(ids) + Log(respuestas) + Private sv_cuest As ScrollView + sv_cuest.Initialize(500dip) + encuestaIniciada = True + vPreguntaActual = id + bAceptarPregunta.Initialize("bAceptarPregunta") + Private su As StringUtils + panelSombra.Initialize("pSombra") + Private cd As ColorDrawable + cd.Initialize(Colors.ARGB(125, 98, 98, 98), 0) + panelSombra.Background = cd + Private panelX As Panel 'Panel de la pregunta. + panelX.Initialize("pQuest") + Private sv_cuest As ScrollView + sv_cuest.Initialize(100dip) + Private panel2 As Panel 'Panel de la pregunta. + panel2.Initialize("panel2") + panel2.Color = Colors.Yellow + panelActual = panelX + Private lbl As Label 'Etiqueta de la pregunta. + lbl.Initialize("") + lbl.Text = pregunta + lbl.TextSize = 16 + lbl.TextColor = Colors.Black + cd.Initialize2(Colors.white, 20, 1, Colors.Gray) 'Borde y esquinas redondeadas del panel de la pregunta. + panelX.Background = cd + panelSombra.AddView(panelX, 10dip, 0dip, 80%x, 200dip) + Root2.AddView(panelSombra, 0, 0, 100%x, 100%y) 'add the panel to the layout + panelX.AddView(lbl, 20dip, 20dip, (panelX.Width * 0.9), 40dip) 'Agregamos la etiqueta al panel. + lbl.Height = su.MeasureMultilineTextHeight(lbl, lbl.Text) + Private et(respuestas.Size) As EditText + Private labelX(respuestas.Size) As Label + For p = 0 To respuestas.Size - 1 + et(p).Initialize("et") + labelX(p).Initialize("labelX") + labelX(p).Height = 60dip +' et(p).Color = Colors.red +' labelX(p).Color = Colors.Blue + et(p).As(B4XView).SetTextAlignment("CENTER", "CENTER") + labelX(p).As(B4XView).SetTextAlignment("CENTER", "CENTER") + et(p).SetTextSizeAnimated(0, 10) + et(p).Tag = CreateMap("id":id, "pregunta":pregunta, "panel":panelSombra, "idRespuesta":ids.Get(p)) + labelX(p).Text = respuestas.Get(p) + Private lx As Label = labelX(p) + et(p).Text = "" + Log($"Agregamos ET ${labelX(p).text} - ${(70*p)}"$) +' Private labelXHeight As String = + Log(labelX(p).Height) + sv_cuest.panel.AddView(labelX(p), 0, (70 * p), (panelX.Width * 0.72), 60) 'Agregamos la etiqueta al panel. + sv_cuest.panel.AddView(et(p), (labelX(p).Width + 5), (70 * p), (panelX.Width * 0.2), 115) 'Agregamos el edittext al panel. + Private newTop As Int = 0 'lbl.top + lbl.Height + 20 'Si es el primer radio, lo ponemos en top = alto de la "pregunta" + 10. + If p <> 0 Then newTop = et(p - 1).Top + et(p - 1).Height + 5 'Calculamos el Top del radio de acuerdo al top y alto del radio anterior. + et(p).Top = newTop + labelX(p).Top = newTop + Next + bAceptarPregunta.Text = "Continuar" + panelX.AddView(sv_cuest, 10, lbl.top + lbl.Height + 20, (panelX.Width * 0.95), 300dip) + sv_cuest.panel.Height = newTop + 40dip + panelX.Height = newTop + 80dip + 35dip 'Calculamos el alto del panel de acuerdo al Top del boton. + panelX.Height = 150dip + (respuestas.Size * 80) 'Calculamos el alto del panel de acuerdo al Top del boton. + + If panelX.Height > (Root2.Height * 0.7) Then ' Si el panel es mayor al 70%, lo regresamos al 70%. + panelX.Height = Root2.Height * 0.7 + End If + panelX.AddView(bAceptarPregunta, 10, (panelX.Height - 55dip), 150dip, 50dip) 'Ponemos el boton de continuar despues del ultimo radio. + bAceptarPregunta.Left = (panelX.Width / 2) - (bAceptarPregunta.Width / 2) + bAceptarPregunta.Enabled = False + sv_cuest.Height = panelX.Height - (lbl.Top + lbl.Height) - 55dip + panelX.left = (Root2.Width / 2) - (panelX.Width / 2) + panelX.top = (Root2.Height / 2) - (panelX.Height / 2) 'Centramos verticalmente el panel. + If respuestas.Size < 10 Then panelX.top = (Root2.Height / 3) - (panelX.Height / 2) ' Si hay mas de 9 productos en la lista, ponemos el panel a 1/3 de altura + panelSombra.Width = Root2.Width + panelSombra.Height = Root2.Height + panelSombra.Elevation = 100dip + panelSombra.BringToFront + bringToFrontCont = 0 +End Sub + +private Sub preguntaContestada(Success As Map) 'ignore + If SubExists(CallBack, EventName & "_preguntaContestada") Then + CallSubDelayed2(CallBack, EventName & "_preguntaContestada", Success) + End If +End Sub + +private Sub pSombra_Click +End Sub + +private Sub r_CheckedChange(Checked As Boolean) + bAceptarPregunta.tag = CreateMap("idPregunta":Sender.As(RadioButton).tag.As(Map).Get("id").As(String), "pregunta":Sender.As(RadioButton).tag.As(Map).Get("pregunta"), "idRespuesta":Sender.As(RadioButton).tag.As(Map).Get("idRespuesta").As(String), "respuesta":Sender.As(RadioButton).text, "panel":Sender.As(RadioButton).tag.As(Map).Get("panel")) +End Sub + +private Sub cb_CheckedChange(Checked As Boolean) + Private elCB As CheckBox = Sender.As(CheckBox) + Private elCBMap As Map = elCB.tag.As(Map) + Private cuantosChks As Int = 0 +' Log(panelActual.NumberOfViews) + If elCB.Text = "Ninguno de los anteriores" And elCB.Checked = True Then + For Each v As View In panelActual.GetAllViewsRecursive + If getViewType(v) = "CheckBox" Then + cuantosChks = cuantosChks + 1 + v.As(CheckBox).Checked = False + v.As(CheckBox).Enabled = False +' Log(v.As(CheckBox).Text) +' Log(v.As(CheckBox).Checked) + If v.As(CheckBox).Text = "Ninguno de los anteriores" Then + v.As(CheckBox).Enabled = True + v.As(CheckBox).Checked = True + End If + If v.As(CheckBox).Checked Then cb_respuestas = cb_respuestas &"|" & v.As(CheckBox).Text + End If + Next + else if elCB.Text = "Ninguno de los anteriores" And elCB.Checked = False Then + For Each v As View In panelActual.GetAllViewsRecursive + If getViewType(v) = "CheckBox" Then + v.As(CheckBox).Enabled = True + End If + Next + End If + If cuantosChks = 0 Then bAceptarPregunta.Enabled = False ' Si no hay opciones palomeadas, deshabilitamos el boton. + cb_respuestas = "" + Private cb_idRespuestas As String= "" + For Each v As View In panelActual.GetAllViewsRecursive +' Log(getViewType(v)) + If getViewType(v) = "CheckBox" Then +' Log(v.As(CheckBox).Text) +' Log(v.As(CheckBox).Checked) + If v.As(CheckBox).Checked Then +' Log(v.As(CheckBox).Tag.As(Map)) + If cb_respuestas = "" Then + cb_respuestas = v.As(CheckBox).Text + cb_idRespuestas = v.As(CheckBox).Tag.As(Map).Get("idRespuesta") + Else + cb_respuestas = cb_respuestas &"|" & v.As(CheckBox).Text + cb_idRespuestas = cb_idRespuestas &"|" & v.As(CheckBox).Tag.As(Map).Get("idRespuesta") + End If + bAceptarPregunta.Enabled = True ' Si hay opciones palomeadas, habilitamos el boton. + End If + End If + Next +' Log(cb_idRespuestas) +' Log(elCBMap) +' Log(cb_idRespuestas) + bAceptarPregunta.tag = CreateMap("idPregunta":elCBMap.Get("id").As(String), "pregunta":elCBMap.Get("pregunta"), "idRespuesta":cb_idRespuestas, "respuesta":cb_respuestas, "panel":elCBMap.Get("panel")) +End Sub + +Private Sub et_TextChanged(Old As String, New As String) + Log($"${Old}, ${New}"$) + Private etTotales As Int = 0 + Private etCont As Int = 0 + Private etResps As String = "" + Private etIdResps As String = "" + For Each v As View In panelActual.GetAllViewsRecursive +' Log(getViewType(v)) + If getViewType(v) = "EditText" Then + etTotales = etTotales + 1 +' Log($"Este ET: ${v.As(EditText).text}"$) + If v.As(EditText).text <> "" Then + etCont = etCont + 1 + If etResps = "" Then + etResps = v.As(EditText).Text + etIdResps = v.As(EditText).Tag.As(Map).Get("idRespuesta") + Else + etResps = etResps &"|" & v.As(EditText).Text + etIdResps = etIdResps &"|" & v.As(EditText).Tag.As(Map).Get("idRespuesta") + End If + End If + End If + Next +' Log($"${etResps}, ${etIdResps}"$) + Log($"${etCont}, ${etTotales}"$) + bAceptarPregunta.Tag = CreateMap("idPregunta":Sender.As(EditText).tag.As(Map).Get("id").As(String), "pregunta":Sender.As(EditText).tag.As(Map).Get("pregunta"), "idRespuesta":etIdResps, "respuesta":etResps, "panel":Sender.As(EditText).tag.As(Map).Get("panel")) + If etCont = etTotales Then bAceptarPregunta.Enabled = True Else bAceptarPregunta.Enabled = False +End Sub + +Private Sub bAceptarPregunta_Click + encuestaIniciada = True + Private m As Map = Sender.As(Button).tag.As(Map) 'Recibimos el id de la pregunta, el id de la respuesta, el texto de la respuesta y el objeto del panelSombra para poder ocultarlo. + preguntaContestada(m) + '' m.Get("panel").As(Panel).Visible = False 'Ocultamos el panel de la pregunta. +' m.Get("panel").As(Panel).RemoveView +' If m.Get("idPregunta") = "1" And m.Get("respuesta") = "No, está enrejado o no se tiene acceso" Then +' Log("Tiendajon / Ventana / Kiosko") +' else If m.Get("idPregunta") = "1" And m.Get("respuesta") = "Si se pude acceder" Then +' agregaPregunta("2", "¿Tiene al menos 2 pasillos con acceso directo a la mercancía?", Array As String("Si tiene al menos 2 pasillos con acceso directo a la mercancía", "No tiene pasillos o solo uno central")) +' End If +' If m.Get("idPregunta") = "2" And m.Get("respuesta") = "Si tiene al menos 2 pasillos con acceso directo a la mercancía" Then +' Log("Mini-Super") +' else If m.Get("idPregunta") = "2" And m.Get("respuesta") = "No tiene pasillos o solo uno central" Then +' agregaPregunta("3", "¿Cuenta con enfriador horizontal para venta de perecederos como queso, jamon, crema, etc.?", Array As String("Si", "No tiene enfriador horizontal. ¿El local esta enfocado a venta especializada?")) +' End If +End Sub + +'Regresa verdadero si el cliente dado tiene cuestionario contestado. +Sub clienteConCuestionario(idCliente As String) As Boolean 'ignore + Private r As Boolean = False + Private c As Cursor = db.ExecQuery($"select count(*) as q from CUESTIONARIO where Q_IDCLIENTE = '${idCliente}'"$) + c.Position = 0 + If c.GetInt("q") > 0 Then r = True + Return r +End Sub + +'Oculta el anel de la pregunta. +Sub ocultPanelPregunta + If panelSombra.IsInitialized Then panelSombra.RemoveView +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) 'ignore + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna en la tabla + Private c As Cursor = db.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 + db.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 + db.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 getViewType (v As View) As String 'ignore + Private t As String = GetType(v) +' Log(t) + Private t2() As String = Regex.Split("\.", t) +' Log(t2.Length) + If t2.Length = 3 Then + t = t2(2) + End If + Return t +End Sub + +'Regresa una lista de una cadena (separada por pipes) dada. +Sub strToList(str As String) As List 'ignore + Private resps() As String = Regex.Split("\|", str) + Private l As List + l.Initialize + For r = 0 To resps.Length - 1 + l.Add(resps(r)) + Next + Return l +End Sub \ No newline at end of file diff --git a/B4A/C_Historico.bas b/B4A/C_Historico.bas new file mode 100644 index 0000000..96b581e --- /dev/null +++ b/B4A/C_Historico.bas @@ -0,0 +1,128 @@ +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 g As GPS + Dim clie_id As String + Dim sDate,sTime As String + Dim usuario As String + + Dim c As Cursor + Dim ruta As String + Dim Regresar As Button + + + Dim ListView1 As ListView + Dim L_CANT As Label + Dim L_TOTAL As Label + Dim borra As Button + Dim Existe As String + Dim result As String + ' Dim lat_gps, lon_gps As String + + Private Titulo As Label + Private b_desc As Button + Private ListView2 As ListView + Dim tgl As Toggle + Private p_nota As Panel + Private Panel1 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 + ruta = File.DirInternal + Root.LoadLayout("nota") + borra.Visible = False + Titulo.Text = "Acumulado" + b_desc.Visible = False + 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 + p_nota.Height = Root.Height * 0.9 + p_nota.Width = Root.Width * 0.9 + Panel1.Visible = False + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + L_CANT.Text ="" + L_TOTAL.Text="" + c=B4XPages.MainPage.skmt.ExecQuery("select count(*) as EXISTE from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa)") + C.Position=0 + Existe = C.GetString("EXISTE") + C.Close + c=B4XPages.MainPage.skmt.ExecQuery("select HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) order by HVD_PRONOMBRE asc") + ListView1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(c.GetString("HVD_PRONOMBRE"),"Cantidad #"& c.GetString("HVD_CANT")& " SubTotal $"& c.GetString("HVD_COSTO_TOT")) + Next + End If + If Existe <> 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("select SUM(HVD_CANT) AS PC_NOART, SUM(HVD_COSTO_TOT) AS PC_MONTO from HIST_VENTAS where HVD_CLIENTE in (Select CUENTA from cuentaa)") + C.Position=0 + L_CANT.Text = c.GetString("PC_NOART") + L_TOTAL.Text = c.GetString("PC_MONTO") + End If +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + 'lat_gps=Location1.ConvertToSeconds(Location1.Latitude) + 'lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub Regresar_Click + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel + B4XPages.ShowPage("Cliente") + Return False +End Sub + +Sub ListView2_ItemClick (Position As Int, Value As Object) + ListView2.Visible = False + ListView1.Visible = True +End Sub + +Sub ListView1_ItemClick (Position As Int, Value As Object) + ListView2.Visible = True + ListView1.Visible = False + Dim label1 As Label + For i=0 To 20 + label1 = ListView2.SingleLineLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + ListView2.AddSingleLine(i) + Next +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..36fa8d1 --- /dev/null +++ b/B4A/C_Mapas.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/C_NoVenta.bas b/B4A/C_NoVenta.bas new file mode 100644 index 0000000..a8eda6e --- /dev/null +++ b/B4A/C_NoVenta.bas @@ -0,0 +1,145 @@ +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 g As GPS + Dim ruta As String + Dim skmt As SQL + Dim c As Cursor + + Dim CANCELA As Button + Dim GUARDA As Button + Dim r_1 As RadioButton + Dim r_2 As RadioButton + Dim r_3 As RadioButton + Dim e_comm As EditText + Dim motivo As String + Dim cuenta As String + Dim usuario As String + Dim sDate,sTime As String +' Dim lat_gps, lon_gps As String + Dim tgl As Toggle + Dim r_4 As RadioButton + + Private stay_hh As String + Private stay_mi As String + Private stay_ss As String + Private p_NoVenta As Panel + Dim tipo_venta = Subs.traeTipoVentaDeBD + Dim bitacora As C_Bitacora + Private Panel1 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("noventa") + + 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) + bitacora.Initialize("bitacora", "bitacora", Root, B4XPages.MainPage.skmt, Starter.reqManager) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + Panel1.Height = Root.Height + Panel1.Width = Root.Width + Subs.centraPanel(Panel1, Root.Width) + Subs.centraPanelV(Panel1, Root.Height) + e_comm.Text="" + tgl.Initialize + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + r_1.Checked = False + r_2.Checked = False + r_3.Checked = False + r_4.Checked = False +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + 'lat_gps=Location1.ConvertToSeconds(Location1.Latitude) + 'lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub CANCELA_Click + B4XPages.ShowPage("Cliente") +End Sub + +Sub GUARDA_Click + If r_1.Checked Then + motivo = "CERRADO" + Else If r_2.Checked Then + motivo = "NO COMPRA" + Else If r_3.Checked Then + motivo = "CON PRODUCTO" + Else + motivo = "NO ESTA EL ENCARGADO" + End If + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("select CUENTA from cuentaa") + c.Position = 0 + cuenta = c.GetString("CUENTA") + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c=B4XPages.MainPage.skmt.ExecQuery("select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?"$, Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) + Next + End If + + If B4XPages.MainPage.cliente.IsInitialized Then + B4XPages.MainPage.cliente.motivoNoVenta = motivo +' Subs.bitacora(Subs.fechanormal(DateTime.Now), usuario, Subs.traeAlmacen, Subs.traeRuta, "No Venta", Subs.traeCliente, "", Subs.fechanormal(DateTime.Now), B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, B4XPages.MainPage.cliente.precision, motivo, e_comm.text) + Starter.enVenta = False + 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.ExecNonQuery2("INSERT INTO NOVENTA (NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON) VALUES(?,?,?,?,?,?,?) ", Array As Object (cuenta,sDate & sTime, usuario, motivo,e_comm.text, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 3 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + DateTime.TimeFormat = "HHmmss" + sTime=DateTime.Time(DateTime.Now) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_OUT = ? where HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(sTime)) + ' B4XPages.MainPage.skmt.ExecNonQuery("UPDATE HIST_STAY_STORE set HSS_TOT = HSS_OUT - HSS_IN where HSS_CODIGO In (select cuenta from cuentaa)") + + c=B4XPages.MainPage.skmt.ExecQuery(" Select (substr(HSS_OUT,1,2) - substr(HSS_IN,1,2)) - Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then 1 Else 0 end HORAS_TOTALES, " & _ + "Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then (substr(HSS_OUT,3,2) + 60 - substr(HSS_IN,3,2)) " & _ + " Else (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) End - Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then 1 Else 0 end MINUTOS_TOTALES, " & _ + "Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then (substr(HSS_OUT,5,2) + 60 - substr(HSS_IN,5,2)) " & _ + " Else (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) end SEGUNDOS_TOTALES " & _ + " from HIST_STAY_STORE where HSS_CODIGO In (Select cuenta from cuentaa) ") + c.Position = 0 + stay_hh = c.GetString("HORAS_TOTALES") * 60 * 60 + stay_mi = c.GetString("MINUTOS_TOTALES") * 60 + stay_ss = c.GetString("SEGUNDOS_TOTALES") + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_TOT = ? where HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(stay_hh + stay_mi + stay_ss)) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_OUT set HSO_FIN = ? ", Array As Object(sTime)) + DateTime.TimeFormat = "HH:mm:ss" + bitacora.mandaBitacora(Subs.fechanormal(DateTime.Now), usuario, Subs.traeAlmacen, Subs.traeRutaBitacora, "NO VENTA", Subs.traeCliente,Subs.fechanormal(DateTime.Now), Subs.fechanormal(DateTime.Now), B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, 2, motivo, r_1.Checked, B4XPages.MainPage.cliente.bitacora.banderaGeoCerca) + B4XPages.ShowPage("Principal") +End Sub \ No newline at end of file diff --git a/B4A/C_Nota.bas b/B4A/C_Nota.bas new file mode 100644 index 0000000..88cc0e1 --- /dev/null +++ b/B4A/C_Nota.bas @@ -0,0 +1,565 @@ +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 skmt As SQL + Dim g As GPS + Dim clie_id As String + Dim sDate,sTime As String + Dim usuario As String + + Dim c As Cursor + Dim ruta As String + Dim Regresar As Button + + Dim ListView1 As ListView + Dim L_CANT As Label + Dim L_TOTAL As Label + Dim borra As Button + Dim Existe As String + Dim result As String + ' Dim lat_gps, lon_gps As String + Dim DESC As String + Dim c2, j3 As Cursor + Private Titulo As Label + Private b_desc As Button + Dim DESCUENTO As String + Dim folio As String + Dim tgl As Toggle + Private almacen As String + Private p_nota As Panel + Dim tipo_venta As String = Subs.traeTipoVentaDeBD + Private Panel1 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 + ruta = File.DirInternal + Root.LoadLayout("nota") + borra.Visible = True + Titulo.Text = "Pedido Actual" +' If Existe <> 0 Then +' c=B4XPages.MainPage.skmt.ExecQuery("select pc_noart, pc_monto from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") +' C.Position=0 +' L_CANT.Text = c.GetString("PC_NOART") +' L_TOTAL.Text = c.GetString("PC_MONTO") +' 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 + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + p_nota.Height = Root.Height * 0.9 + p_nota.Width = Root.Width * 0.9 + Panel1.Visible = True + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + C.Position =0 + almacen = C.GetString("ID_ALMACEN") + C.Close + L_CANT.Text ="" + L_TOTAL.Text="" + c=B4XPages.MainPage.skmt.ExecQuery("select count(*) as EXISTE from pedido_cliente WHERE pc_cliente IN (Select CUENTA from cuentaa)") + C.Position=0 + Existe = C.GetString("EXISTE") + C.Close + c=B4XPages.MainPage.skmt.ExecQuery("select PE_PRONOMBRE,PE_COSTO_TOT, PE_CANT, PE_FOLIO, PE_CEDIS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_CEDIS desc") + ListView1.Clear + ListView1.Height = Root.Height * 0.65 + Private cs As CSBuilder + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + cs.Initialize + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 20 + label1.TextColor = Colors.Black + label1.color = Colors.White + Private textColor As Int = Colors.White + If c.GetString("PE_CEDIS").Contains("PRO") Then textColor = Colors.Blue 'Si es promo, cambiamos el color del texto. + If Not(IsNumber(c.GetString("PE_CEDIS"))) Then textColor = Colors.Blue 'Si es promo, cambiamos el color del texto. + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 16 + label2.TextColor = Colors.White + + ListView1.AddSingleLine(cs.Color(textColor).Size(20).append(c.GetString("PE_PRONOMBRE") & " ").pop.Append(CRLF).Size(16).Color(Colors.White).Append("Cantidad #"& c.GetString("PE_CANT")).Append(" SubTotal $"& c.GetString("PE_COSTO_TOT")).Append(" " & c.GetString("PE_FOLIO")& " " &c.GetString("PE_CEDIS")).PopAll) + label1.Height = 90dip +' label2.Height = 60dip +' +' ListView1.TwoLinesLayout.ItemHeight = 120dip + ListView1.SingleLineLayout.ItemHeight = 90dip + label1.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + label2.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + folio = c.GetString("PE_FOLIO") + Next + End If + If Existe <> 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("select SUM(PE_CANT) AS PE_CANT from pedido where pe_cliente in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP ) ") + C.Position=0 + L_CANT.Text = c.GetString("PE_CANT") +' L_TOTAL.Text = NumberFormat2(c.GetString("PC_MONTO"), 1, 2, 2, True) + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select SUM(IFNULL(PE_DESC,0)) AS DESCUENTO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + DESC = c.GetString("DESCUENTO") + b_desc.Visible = False + + 'AQUI CAMBIAR + Private s3 As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select * FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and PE_RECALCULO <> ? OR PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL",Array As String("","null")) + LogColor(s3.RowCount,Colors.Yellow) + If s3.RowCount > 0 Then + + Private s As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and (PE_RECALCULO = ? or PE_RECALCULO = ? or PE_RECALCULO IS NULL)",Array As String("","null")) + s.Position=0 + Private s5 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(PE_RECALCULOTOT),0) as TOTAL_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and (PE_RECALCULO <> ? or PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL)",Array As String("","null")) + s5.Position = 0 + + + L_TOTAL.Text =NumberFormat2(s.GetString("TOTAL_CLIE") + s5.GetString("TOTAL_CLIE"),0,2,2,True) + + s.Close + + + Else If s3.RowCount = 0 Then + Private s As Cursor=B4XPages.MainPage.skmt.ExecQuery("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + s.Position=0 + + L_TOTAL.Text =NumberFormat2(s.GetString("TOTAL_CLIE"),0,2,2,True) + + s.Close + End If + 'AQUI TERMINA + + End If +End Sub + +Sub Activity_Pause (UserClosed As Boolean) + +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + 'lat_gps=Location1.ConvertToSeconds(Location1.Latitude) + 'lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub Regresar_Click + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel + B4XPages.ShowPage("Cliente") + Return False +End Sub + +Sub borra_Click +' c = B4XPages.MainPage.skmt.ExecQuery("SELECT HABILITADA FROM IMPRESORA") +' If c.RowCount > 0 Then +' c.Position = 0 +' If c.GetString("HABILITADA") = 1 Then + If Not(Subs.revisaImpreso) Then + If folio <> "" Then + result = Msgbox2("Seguro que desa borrar el pedido?","Cancelar pedido", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + c=B4XPages.MainPage.skmt.ExecQuery("select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?"$, Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (almacen,c.GetString("PE_PROID"),c.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_info3 set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPage_Appear + End If + Else + Msgbox("CLIENTE YA SE TRANSMITIO, FAVOR DE LLAMAR A SOPORTE PARA ASISTENCIA","AVISO") 'ignore + End If + Else + ToastMessageShow("La venta ya esta impresa, no se puede modificar!!", True) + B4XPages.MainPage.cliente.p_transparenteTicketImpreso.Visible = True + B4XPages.ShowPage("cliente") + End If +' Else If c.GetString("HABILITADA") = 0 Then +' If folio <> "" Then +' result = Msgbox2("Seguro que desa borrar el pedido?","Cancelar pedido", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore +' If result = DialogResponse.POSITIVE Then +' c=B4XPages.MainPage.skmt.ExecQuery("select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ") +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?"$, Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (almacen,c.GetString("PE_PROID"),c.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_info3 set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +' B4XPage_Appear +' End If +' Else +' Msgbox("CLIENTE YA SE TRANSMITIO, FAVOR DE LLAMAR A SOPORTE PARA ASISTENCIA","AVISO") 'ignore +' End If +' End If +' Else If c.RowCount = 0 Then +' If folio <> "" Then +' result = Msgbox2("Seguro que desa borrar el pedido?","Cancelar pedido", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore +' If result = DialogResponse.POSITIVE Then +' c=B4XPages.MainPage.skmt.ExecQuery("select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ") +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?"$, Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (almacen,c.GetString("PE_PROID"),c.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_info3 set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +' B4XPage_Appear +' End If +' Else +' Msgbox("CLIENTE YA SE TRANSMITIO, FAVOR DE LLAMAR A SOPORTE PARA ASISTENCIA","AVISO") 'ignore +' End If +' End If +End Sub + +Sub ListView1_ItemLongClick (Position As Int, Value As Object) + Log(Subs.traeTablaProds(tipo_venta)) + Log(Value) + Private X() As String = Regex.Split(" ", Value) + Log(X.Length) + Private nom As String = "" + For i = 0 To X.Length -1 + If X(i).Contains(CRLF) Then + End If + If Not(X(i).Contains(CRLF)) Then + nom = nom & " " & X(i) + Else + Exit + End If + Next + nom = nom.Trim + Private cedis As String = X(X.Length-1) + Log(nom) + Dim cx As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select PE_PROID,PE_CANT, PE_FOLIO, PE_CEDIS, PE_PRONOMBRE, PE_CEDIS/1 AS is_numeric FROM PEDIDO where (pe_pronombre = '${nom}' or pe_pronombre = '${nom} ') AND PE_CEDIS = '${cedis}' and is_numeric > 0 and pe_cliente in (Select CUENTA from cuentaa) and PE_RECALCULO > 0"$) + Log("Recalculados: " & cx.RowCount) + If cx.RowCount > 0 Then ' Si hay recalculo (producto con promocion), al borrar el produto hay que borrar TODO el pedido. + result = Msgbox2("Si se borra este producto, se va a borrar el pedido COMPLETO, ¿desea continuar?","Borrar pedido completo", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.NEGATIVE Then + Return + Else + Starter.skmt.ExecNonQuery("delete from pedido where pe_cliente in (Select CUENTA from cuentaa)") + Starter.skmt.ExecNonQuery("delete from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") + B4XPage_Appear + Return + End If + End If + c = B4XPages.MainPage.skmt.ExecQuery("SELECT HABILITADA FROM IMPRESORA") + If c.RowCount > 0 Then + c.Position = 0 + If c.GetString("HABILITADA") = 1 Then + If Not(Subs.revisaImpreso) Then + result = Msgbox2("Seguro que desea borrar este articulo?","Borrar Articulo", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + c=B4XPages.MainPage.skmt.ExecQuery($"select PE_PROID,PE_CANT, PE_FOLIO, PE_CEDIS, PE_PRONOMBRE FROM PEDIDO where (pe_pronombre = '${nom}' or pe_pronombre = '${nom} ') AND PE_CEDIS = '${cedis}' and pe_cliente in (Select CUENTA from cuentaa)"$) + Log($"select PE_PROID,PE_CANT, PE_FOLIO, PE_CEDIS FROM PEDIDO where pe_pronombre = '${nom}' AND PE_CEDIS = '${cedis}' and pe_cliente in (Select CUENTA from cuentaa)"$) + Log(c.RowCount) + c.Position=0 + ' If c.RowCount > 0 Then + ' B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?", Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD) VALUES(?,?,?) ", Array As Object (almacen,c.GetString("PE_PROID"),c.GetString("PE_CANT")* -1)) + ' c2=B4XPages.MainPage.skmt.ExecQuery($"select count(*) AS CUANTOS from CAT_GUNAPROD where CAT_GP_ID in (select pe_cedis from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa)) and CAT_GP_CLASIF = 'PROMOS' AND CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO = 'PROMOS'"$)'Con esto revisamos si el nombre es de una promo + ' c2=B4XPages.MainPage.skmt.ExecQuery($"select ISNUMERIC(pe_cedis) AS noEsPromo from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa) and pe_cedis = '${cedis}'"$)'Con esto revisamos si el nombre es de una promo + ' Log($"select count(*) AS CUANTOS from CAT_GUNAPROD where CAT_GP_ID in (select pe_cedis from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa)) and CAT_GP_CLASIF = 'PROMOS' AND CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO = 'PROMOS'"$) + ' Log($"select ISNUMERIC(pe_cedis) AS noEsPromo from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa) and pe_cedis = '${cedis}'"$) + ' c2.Position=0 + ' Log("Algo "&c2.GetString("noEsPromo")) + If Not(IsNumber(cedis)) Then + ' j3 = B4XPages.MainPage.skmt.ExecQuery2("SELECT PE_CEDIS, PE_CANT,PE_PROID, PE_PRONOMBRE FROM PEDIDO WHERE PE_CEDIS IN (SELECT PE_CEDIS FROM PEDIDO WHERE PE_PRONOMBRE = ?)",Array As String(nom)) + ' Log(j3.RowCount) + ' If j3.RowCount > 0 Then + Log("Soy promo") + ' For j = 0 To c.RowCount -1 + ' Log("aqui tronare?") + '' c.Position = j + B4XPages.MainPage.skmt.ExecNonQuery($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.GetString("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_cedis= ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(cedis, c.GetString("PE_FOLIO"))) + ' Next + ' End If + ' j3.Close + Else + B4XPages.MainPage.skmt.ExecNonQuery($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.Getstring("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_pronombre = ? and pe_cedis = ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(nom, cedis, c.GetString("PE_FOLIO"))) + End If + c.Close +' c2.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + If c.GetString("CUANTOS") > 0 Then + 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) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Else + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + End If + B4XPage_Appear + End If + Else + B4XPages.MainPage.cliente.p_transparenteTicketImpreso.Visible = True + B4XPages.ShowPage("cliente") + ToastMessageShow("La venta ya esta impresa, no se puede modificar!!", True) + End If + Else If c.GetString("HABILITADA") = 0 Then + If Not(Subs.revisaImpreso) Then + result = Msgbox2("Seguro que desea borrar este articulo?","Borrar Articulo", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + Private X() As String = Regex.Split(" ", Value) + Log(X) + Log(X.Length) + Private nom As String = "" + For i = 0 To X.Length -1 +' Log(X(i)) + If X(i).Contains(CRLF) Then +' Log("Retorno") + End If + If Not(X(i).Contains(CRLF)) Then + nom = nom & " " & X(i) + Else + Exit + End If +' Log(nom) + Next +' Log(nom) + nom = nom.Trim + If X(X.Length-1) <> ".01" Then + Private cedis As String = X(X.Length-1) + Else + Private cedis As String = (X(X.Length-2) &" " & X(X.Length-1)) + End If + Log(nom) + Log(cedis) + c=B4XPages.MainPage.skmt.ExecQuery($"select PE_PROID,PE_CANT, PE_FOLIO, PE_CEDIS, PE_PRONOMBRE FROM PEDIDO where (pe_pronombre = '${nom}' or pe_pronombre = '${nom} ') AND PE_CEDIS = '${cedis}' and pe_cliente in (Select CUENTA from cuentaa)"$) ' Se agregó el "pe_pronombre = '${nom} '" porque al nombre de los productos de promo se les agrega un "espacio al final" para que cuando exiiste en el pedido un mismo producto fuera de promocion, el "quitaduplicados" no los elimine. + Log($"select PE_PROID,PE_CANT, PE_FOLIO, PE_CEDIS FROM PEDIDO where (pe_pronombre = '${nom}' or pe_pronombre = '${nom} ') AND PE_CEDIS = '${cedis}' and pe_cliente in (Select CUENTA from cuentaa)"$) + Log(c.RowCount) + c.Position=0 +' If c.RowCount > 0 Then +' B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?", Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD) VALUES(?,?,?) ", Array As Object (almacen,c.GetString("PE_PROID"),c.GetString("PE_CANT")* -1)) +' c2=B4XPages.MainPage.skmt.ExecQuery($"select count(*) AS CUANTOS from CAT_GUNAPROD where CAT_GP_ID in (select pe_cedis from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa)) and CAT_GP_CLASIF = 'PROMOS' AND CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO = 'PROMOS'"$)'Con esto revisamos si el nombre es de una promo +' c2=B4XPages.MainPage.skmt.ExecQuery($"select ISNUMERIC(pe_cedis) AS noEsPromo from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa) and pe_cedis = '${cedis}'"$)'Con esto revisamos si el nombre es de una promo +' Log($"select count(*) AS CUANTOS from CAT_GUNAPROD where CAT_GP_ID in (select pe_cedis from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa)) and CAT_GP_CLASIF = 'PROMOS' AND CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO = 'PROMOS'"$) +' Log($"select ISNUMERIC(pe_cedis) AS noEsPromo from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa) and pe_cedis = '${cedis}'"$) +' c2.Position=0 +' Log("Algo "&c2.GetString("noEsPromo")) + If Not(IsNumber(cedis)) Then +' j3 = B4XPages.MainPage.skmt.ExecQuery2("SELECT PE_CEDIS, PE_CANT,PE_PROID, PE_PRONOMBRE FROM PEDIDO WHERE PE_CEDIS IN (SELECT PE_CEDIS FROM PEDIDO WHERE PE_PRONOMBRE = ?)",Array As String(nom)) +' Log(j3.RowCount) +' If j3.RowCount > 0 Then + Log("Soy promo") +' For j = 0 To c.RowCount -1 +' Log("aqui tronare?") +' ' c.Position = j + B4XPages.MainPage.skmt.ExecNonQuery($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.GetString("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_cedis= ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(cedis, c.GetString("PE_FOLIO"))) + ' Next + ' End If + ' j3.Close + Else + B4XPages.MainPage.skmt.ExecNonQuery($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.Getstring("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_pronombre = ? and pe_cedis = ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(nom, cedis, c.GetString("PE_FOLIO"))) + End If + c.Close +' c2.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + If c.GetString("CUANTOS") > 0 Then + 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) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Else + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + End If + B4XPage_Appear + End If + Else + B4XPages.MainPage.cliente.p_transparenteTicketImpreso.Visible = True + B4XPages.ShowPage("cliente") + ToastMessageShow("La venta ya esta impresa, no se puede modificar!!", True) + End If + End If + Else If c.RowCount = 0 Then + If Not(Subs.revisaImpreso) Then + result = Msgbox2("Seguro que desea borrar este articulo?","Borrar Articulo", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + Private X() As String = Regex.Split(" ", Value) + Log(X) + Log(X.Length) + Private nom As String = "" + For i = 0 To X.Length -1 +' Log(X(i)) + If X(i).Contains(CRLF) Then +' Log("Retorno") + End If + If Not(X(i).Contains(CRLF)) Then + nom = nom & " " & X(i) + Else + Exit + End If +' Log(nom) + Next +' Log(nom) + nom = nom.Trim + Private cedis As String = X(X.Length-1) + c=B4XPages.MainPage.skmt.ExecQuery($"select PE_PROID,PE_CANT, PE_FOLIO, PE_CEDIS, PE_PRONOMBRE FROM PEDIDO where (pe_pronombre = '${nom}' or pe_pronombre = '${nom} ') AND PE_CEDIS = '${cedis}' and pe_cliente in (Select CUENTA from cuentaa)"$) + Log($"select PE_PROID,PE_CANT, PE_FOLIO, PE_CEDIS FROM PEDIDO where pe_pronombre = '${nom}' AND PE_CEDIS = '${cedis}' and pe_cliente in (Select CUENTA from cuentaa)"$) + Log(c.RowCount) + c.Position=0 + ' If c.RowCount > 0 Then + ' B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?", Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD) VALUES(?,?,?) ", Array As Object (almacen,c.GetString("PE_PROID"),c.GetString("PE_CANT")* -1)) + ' c2=B4XPages.MainPage.skmt.ExecQuery($"select count(*) AS CUANTOS from CAT_GUNAPROD where CAT_GP_ID in (select pe_cedis from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa)) and CAT_GP_CLASIF = 'PROMOS' AND CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO = 'PROMOS'"$)'Con esto revisamos si el nombre es de una promo + ' c2=B4XPages.MainPage.skmt.ExecQuery($"select ISNUMERIC(pe_cedis) AS noEsPromo from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa) and pe_cedis = '${cedis}'"$)'Con esto revisamos si el nombre es de una promo + ' Log($"select count(*) AS CUANTOS from CAT_GUNAPROD where CAT_GP_ID in (select pe_cedis from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa)) and CAT_GP_CLASIF = 'PROMOS' AND CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO = 'PROMOS'"$) + ' Log($"select ISNUMERIC(pe_cedis) AS noEsPromo from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa) and pe_cedis = '${cedis}'"$) + ' c2.Position=0 + ' Log("Algo "&c2.GetString("noEsPromo")) + If Not(IsNumber(cedis)) Then + ' j3 = B4XPages.MainPage.skmt.ExecQuery2("SELECT PE_CEDIS, PE_CANT,PE_PROID, PE_PRONOMBRE FROM PEDIDO WHERE PE_CEDIS IN (SELECT PE_CEDIS FROM PEDIDO WHERE PE_PRONOMBRE = ?)",Array As String(nom)) + ' Log(j3.RowCount) + ' If j3.RowCount > 0 Then + Log("Soy promo") + ' For j = 0 To c.RowCount -1 + ' Log("aqui tronare?") + '' c.Position = j + B4XPages.MainPage.skmt.ExecNonQuery($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.GetString("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_cedis= ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(cedis, c.GetString("PE_FOLIO"))) + ' Next + ' End If + ' j3.Close + Else + B4XPages.MainPage.skmt.ExecNonQuery($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.Getstring("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_pronombre = ? and pe_cedis = ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(nom, cedis, c.GetString("PE_FOLIO"))) + End If + c.Close +' c2.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + If c.GetString("CUANTOS") > 0 Then + 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) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Else + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + End If + B4XPage_Appear + End If + Else + B4XPages.MainPage.cliente.p_transparenteTicketImpreso.Visible = True + B4XPages.ShowPage("cliente") + ToastMessageShow("La venta ya esta impresa, no se puede modificar!!", True) + End If + End If +End Sub + +Sub b_desc_Click + If DESCUENTO = "MENOS" Then + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + result = Msgbox2("Seguro que desa dar descuento del 5%?","Dar descuento", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE pedido SET PE_COSTO_TOT = PE_COSTO_TOT * .95, PE_DESC = 5 WHERE PE_CLIENTE In (select cuenta from cuentaa)") + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS 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) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + c.Close + B4XPage_Appear + End If + ELSE IF DESCUENTO = "MAS" Then + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + result = Msgbox2("Seguro que desa CANCELAR el descuento?","Cancelar descuento", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE pedido SET PE_COSTO_TOT = PE_COSTO_TOT / .95, PE_DESC = 0 WHERE PE_CLIENTE In (select cuenta from cuentaa)") + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS 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) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + c.Close + B4XPage_Appear + End If + End If +End Sub + +Private Sub p_nota_Click + +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..dd8ba71 --- /dev/null +++ b/B4A/C_NuevoCliente.bas @@ -0,0 +1,116 @@ +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 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) +' 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) + Subs.centraPanel(p_nuevoCliente, 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 + Starter.skmt.ExecNonQuery("delete from cuentaa") +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_info3") +' c.Position=0 + no_ruta= Subs.traeRuta + no_cliente= "N" & sTime & no_ruta + Log("++ ++ no_cliente = "&no_cliente) +' c.Close + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info3(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.ShowPage("Cliente") + End If +End Sub + + +Private Sub p_nuevoCliente_Click + +End Sub \ No newline at end of file diff --git a/B4A/C_Pedidos.bas b/B4A/C_Pedidos.bas new file mode 100644 index 0000000..0375a2f --- /dev/null +++ b/B4A/C_Pedidos.bas @@ -0,0 +1,585 @@ +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 g As GPS + Dim ruta As String + Dim skmt As SQL + Private t3 As Timer + Dim p As Phone + Dim sb As StringBuilder + + Dim c As Cursor + Dim e As Cursor + Dim f As Cursor + Dim h As Cursor + Dim CC As Cursor + Dim DD As Cursor + Dim l_tipo As Label + Dim l_sub As Label + Dim l_marca As Label + Dim l_desc As Label + Dim l_precio As Label + Dim l_bodega As Label + Dim cantidad As EditText + Dim guardar As Button + Dim Terminar As Button + Dim img_prod As ImageView + Dim IMG_PASO() As Byte + Dim L_PROID As Label + Dim clie_id As String + Dim sDate,sTime As String + Dim usuario As String + ' Dim lat_gps, lon_gps As String + Dim t_venta As Label + Dim PROMO_C As String + Dim i_fotol As ImageView + Private DESC_PROMO As Button + Private nopromo As Button + Dim TOT_ART_PROMO As String + Dim cambio As String + Dim COSTO_TOT As String + Dim ALMACEN As String + Dim preciosin As String + Dim cl_ruta As String + Dim d As Cursor + Dim TOT_ART_PROMOR As String + Dim PROMO_CR As String + Dim TOTAL_PROMO As String + Dim HCCP_CANT As String + Dim tgl As Toggle + Dim precio_Cero As String + Private BONSABOR As String + Private BONSABOR2 As String + Dim cmd As DBCommand + Private p_pedido As Panel + dim tipo_venta as string = Subs.traeTipoVentaDeBD +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("pedido") + i_fotol.Visible = False +' B4XPages.MainPage.reqManager.Initialize(Me, "http://177.244.63.54:1782") + 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 + tgl.Initialize + BONSABOR = 0 + BONSABOR2 = 0 + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + cantidad.Text = "" + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + C.Position =0 + ALMACEN = C.GetString("ID_ALMACEN") + C.Close + i_fotol.Visible = False + sb.Initialize + p.Shell("ping -c1 -W1 177.244.63.54",Null, sb,Null) + skmt.Initialize(ruta,"kmt.db", True) + c=B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_DEV from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_NOMBRE In (Select PDESC from PROID)"$) + c.Position=0 + L_PROID.Text = c.GetString("CAT_GP_ID") + l_tipo.Text = c.GetString("CAT_GP_TIPO") + l_sub.Text = c.GetString("CAT_GP_SUBTIPO") + l_marca.Text = c.GetString("CAT_GP_CLASIF") + l_desc.Text = c.GetString("CAT_GP_NOMBRE") + l_precio.Text = c.GetDouble("CAT_GP_PRECIO") + l_bodega.Text = c.GetString("CAT_GP_ALMACEN") + IMG_PASO = c.GetBlob("CAT_GP_IMG") + PROMO_C = c.GetString("CAT_GP_STS") + cambio = c.GetString("CAT_GP_DEV") + preciosin = c.GetString("CAT_GP_IMP2") + PROMO_CR = c.GetString("CAT_GP_IMP1") + cambio = "0" + + e=B4XPages.MainPage.skmt.ExecQuery2("select count(*) as CUANTOS FROM pedido WHERE PE_CEDIS = ? AND PE_CLIENTE IN (Select cuenta from cuentaa) ", Array As String(c.GetString("CAT_GP_ID"))) + e.Position =0 + If e.GetString("CUANTOS") = 0 Then + If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" Then + DESC_PROMO.Visible = True + CC=B4XPages.MainPage.skmt.ExecQuery2("select count(*) as CUANTOS FROM PROMOS_COMP WHERE CAT_PA_ID = ?", Array As String(c.GetString("CAT_GP_ID"))) + CC.Position =0 + If CC.GetString("CUANTOS") = 0 Then + l_bodega.Text = "0" ' se modifica a cero para evitar error en la promo especial de unilever mayo + Else + CC.Close + CC=B4XPages.MainPage.skmt.ExecQuery2("select CAT_PA_MAXPROM, CAT_PA_MAXPROMREC, CAT_PA_MAXPROMCLIE FROM PROMOS_COMP WHERE CAT_PA_ID = ?", Array As String(c.GetString("CAT_GP_ID"))) + CC.Position =0 + ' SE MODIFICA LA APLICACION PARA QUE VEA EL HISTORIAL DE VENTA DEL CLIENTE. + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_CLIENTE_CANT_PROMOS WHERE HCCP_CLIENTE IN (Select cuenta from cuentaa) AND HCCP_PROMO =?", Array As String(c.GetString("CAT_GP_ID"))) + DD.Position =0 + If DD.GetString("CUANTOS") = 0 Then + HCCP_CANT = 0 + Else + DD.Close + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT HCCP_CANT FROM HIST_CLIENTE_CANT_PROMOS WHERE HCCP_CLIENTE IN (Select cuenta from cuentaa) AND HCCP_PROMO =?", Array As String(c.GetString("CAT_GP_ID"))) + DD.Position =0 + HCCP_CANT = DD.GetString("HCCP_CANT") + DD.Close + End If + BONSABOR = HCCP_CANT + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_VENTAS WHERE HVD_CLIENTE IN (Select cuenta from cuentaa) AND HVD_PRONOMBRE =?", Array As String(c.GetString("CAT_GP_NOMBRE"))) + DD.Position =0 + If DD.GetString("CUANTOS") = 0 Then + HCCP_CANT = 0 + Else + DD.Close + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT SUM(HVD_CANT) AS HCCP_CANT FROM HIST_VENTAS WHERE HVD_CLIENTE IN (Select cuenta from cuentaa) AND HVD_PRONOMBRE =?", Array As String(c.GetString("CAT_GP_NOMBRE"))) + DD.Position =0 + HCCP_CANT = DD.GetString("HCCP_CANT") + DD.Close + End If + DD=B4XPages.MainPage.skmt.ExecQuery2($"Select COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) AND PE_PROID IN (select CAT_GP_ID from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_CLASIF = ?) "$,Array As String(c.GetString("CAT_GP_NOMBRE"))) + DD.Position =0 + BONSABOR2 = DD.GetString("CUANTOS") + DD.Close + TOTAL_PROMO = CC.GetString("CAT_PA_MAXPROMCLIE") - HCCP_CANT + If HCCP_CANT = 0 Then + l_bodega.Text = CC.GetString("CAT_PA_MAXPROM") + Else IF TOTAL_PROMO > CC.GetString("CAT_PA_MAXPROMREC") Then + l_bodega.Text = CC.GetString("CAT_PA_MAXPROMREC") + Else + l_bodega.Text = TOTAL_PROMO + End If + End If + Else + DESC_PROMO.Visible = False + End If + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CASE WHEN pe_costo_tot is null then 0 else sum( pe_costo_tot ) end as TOTAL_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + t_venta.Text = c.GetString("TOTAL_CLIE") + c.Close + Terminar.Visible = True + guardar.Visible = True + cantidad.Visible = True + If cambio = "1" Then + nopromo.Visible = True + Else + nopromo.Visible = False + End If + Dim out As OutputStream + out = File.OpenOutput(ruta, "1.jpg", False) + out.WriteBytes(IMG_PASO, 0, IMG_PASO.Length) + out.Close + img_prod.Bitmap = LoadBitmap(ruta,"1.jpg") + TOT_ART_PROMO = "0" + TOT_ART_PROMOR = "0" + If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And l_bodega.Text = "0" Then + Msgbox("ALERTA","EL CLIENTE NO PUEDE TENER ESTA PROMOCION") 'ignore + B4XPages.ShowPage("Productos") + ELSE IF l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And L_PROID.Text = "PROUNI1" And BONSABOR <> "1" And BONSABOR2 = 0 Then + Msgbox("ALERTA","EL CLIENTE NO PUEDE TENER ESTA PROMOCION") 'ignore + B4XPages.ShowPage("Productos") + End If + Else + Msgbox("ALERTA","EL CLIENTE YA COMPRO ESTE PRODUCTO REVISAR NOTA") 'ignore + B4XPages.ShowPage("Productos") + End If +End Sub + +Sub guardar_Click + If cantidad.Text = "" Then + B4XPages.ShowPage("Productos") + ELSE If cantidad.Text > l_bodega.Text Then + Msgbox("Exede la existencia", "ADVERTENCIA") 'ignore + Else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C > 0 And cantidad.Text > 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_TIPO = 1)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") 'ignore + Else + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 1)") + C.Position =0 + TOT_ART_PROMO = C.GetString("TOT_ART_PROMO") + COSTO_TOT = C.GetString("COSTO_TOT") + C.Close + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + TOT_ART_PROMOR = "0" 'Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") + Else + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1)") + C.Position =0 + TOT_ART_PROMOR = C.GetString("TOT_ART_PROMO") + End If + C.Close + PROMO_C = PROMO_C * cantidad.Text + PROMO_CR = PROMO_CR * cantidad.Text + If TOT_ART_PROMO = PROMO_C And TOT_ART_PROMOR = PROMO_CR Then + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_CEDIS = (?) WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID))", Array As Object(L_PROID.text)) + D=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + Next + End If + D.Close + D=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + Next + End If + D.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info3 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 ") + ' SE LO QUITE DE CONDICION AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS,CAT_DP_PRECIO FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 ") ' AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) + 'meter el otro + 'si jala copiar para guna y el resto + If f.RowCount>0 Then + For i=0 To f.RowCount -1 + f.Position=i + precio_Cero = f.GetString("CAT_DP_PRECIO") + h=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_NOMBRE from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_ID = ? "$, Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + '0 + 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) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,precio_Cero * f.GetString("CAT_DP_PZAS") * cantidad.text, precio_Cero, f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta)) + h.Close + Next + End If + f.Close + End If + e.Close + 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_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0 , 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? "$, Array As Object(cantidad.Text, L_PROID.Text)) + Else + Msgbox("Tiene " & TOT_ART_PROMO & " " & TOT_ART_PROMOR & " y necesita " & PROMO_C & " " & PROMO_CR & " Para la Promo. " , "ADVERTENCIA") 'ignore + End If + End If + cantidad.Text = "" + B4XPages.ShowPage("Productos") + else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C = 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info3 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + '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) VALUES(?,?,?,?,?,?,?,?,?) ", Array As Object ("COACALCO",cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario)) + 'para insertar la promo de ades el de regalo en 0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) ") + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS, CAT_DP_PRECIO FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID)") + For i =0 To f.RowCount -1 + F.Position =i + h=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_NOMBRE from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_ID = ? "$, Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + 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_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,f.GetString("CAT_DP_PRECIO") * cantidad.text * f.GetString("CAT_DP_PZAS"), f.GetString("CAT_DP_PRECIO"), f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + h.Close + Next + f.Close + End If + e.Close + '0 + 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_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? "$, Array As Object(cantidad.Text, L_PROID.Text)) + cantidad.Text = "" + 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(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPages.ShowPage("Productos") + Else + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info3 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + 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 (ALMACEN,cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,preciosin, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? "$, Array As Object(cantidad.Text, L_PROID.Text)) + 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(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (ALMACEN,L_PROID.Text,cantidad.text)) + B4XPages.ShowPage("Productos") + End If +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + 'lat_gps=Location1.ConvertToSeconds(Location1.Latitude) + 'lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub Terminar_Click + If cantidad.Text = "" Then + B4XPages.ShowPage("Cliente") + ELSE If cantidad.Text > l_bodega.Text Then + Msgbox("Exede la existencia", "ADVERTENCIA") 'ignore + Else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C > 0 And cantidad.Text > 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_TIPO = 1)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") 'ignore + Else + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 1)") + C.Position =0 + TOT_ART_PROMO = C.GetString("TOT_ART_PROMO") + COSTO_TOT = C.GetString("COSTO_TOT") + C.Close + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + TOT_ART_PROMOR = "0" 'Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") + Else + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1)") + C.Position =0 + TOT_ART_PROMOR = C.GetString("TOT_ART_PROMO") + End If + C.Close + PROMO_C = PROMO_C * cantidad.Text + PROMO_CR = PROMO_CR * cantidad.Text + If TOT_ART_PROMO = PROMO_C And TOT_ART_PROMOR = PROMO_CR Then + ' anterior a 29/06/2015 + 'B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID))", Array As Object(l_precio.text/(TOT_ART_PROMO/cantidad.Text),l_precio.text/(TOT_ART_PROMO/cantidad.Text))) + 'en pe_cedis meto el codigo de promocion para hacer esta validacion. + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_CEDIS = (?) WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID))", Array As Object(L_PROID.text)) + D=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + Next + End If + D.Close + D=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + Next + End If + D.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info3 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + 'para insertar la promo de ades el de regalo en 0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 ") + ' SE LO QUITE DE CONDICION AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS,CAT_DP_PRECIO FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 ") ' AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) + 'meter el otro + 'si jala copiar para guna y el resto + If f.RowCount>0 Then + For i=0 To f.RowCount -1 + f.Position=i + precio_Cero = f.GetString("CAT_DP_PRECIO") + h=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_NOMBRE from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_ID = ? "$, Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + Log(111) + 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_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,precio_Cero * f.GetString("CAT_DP_PZAS") * cantidad.text, precio_Cero, f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + h.Close + Next + End If + f.Close + End If + e.Close + Log(222) + 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_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0 , 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? "$, Array As Object(cantidad.Text, L_PROID.Text)) + Else + Msgbox("Tiene " & TOT_ART_PROMO & " " & TOT_ART_PROMOR & " y necesita " & PROMO_C & " " & PROMO_CR & " Para la Promo. " , "ADVERTENCIA") 'ignore + End If + End If + cantidad.Text = "" + B4XPages.ShowPage("Cliente") + else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C = 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info3 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + 'para insertar la promo de ades el de regalo en 0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) ") + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS, CAT_DP_PRECIO FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID)") + For i =0 To f.RowCount -1 + F.Position =i + h=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_NOMBRE from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_ID = ? "$, Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + Log(333) + 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_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,f.GetString("CAT_DP_PRECIO") * cantidad.text * f.GetString("CAT_DP_PZAS"), f.GetString("CAT_DP_PRECIO"), f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + h.Close + Next + f.Close + End If + e.Close + Log(444) + 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_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? "$, Array As Object(cantidad.Text, L_PROID.Text)) + cantidad.Text = "" + 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(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPages.ShowPage("Cliente") + Else + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info3 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + Log(555) + 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 (ALMACEN,cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,preciosin, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? "$, Array As Object(cantidad.Text, L_PROID.Text)) + 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(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (ALMACEN,L_PROID.Text,cantidad.text)) + B4XPages.ShowPage("Cliente") + End If +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel + Msgbox("Presione Boton Terminar.","ADVERTENCIA") 'ignore + Return False +End Sub + +Sub img_prod_Click + i_fotol.Visible = True + i_fotol.Bitmap = LoadBitmap(ruta,"1.jpg") + +End Sub +Sub i_fotol_Click + i_fotol.Visible = False + +End Sub + +Sub DESC_PROMO_Click + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + B4XPages.ShowPage("detalle_promo") +End Sub + +Sub nopromo_Click + If cantidad.Text = "" Then + Msgbox("Cantidad no puede ser 0","Cantidad") 'ignore + Else If cantidad.Text > l_bodega.Text Then + Msgbox("Exede la existencia", "ADVERTENCIA") 'ignore + Else + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + 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_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object ("COACALCO",0,0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? "$, Array As Object(cantidad.Text, L_PROID.Text)) + cantidad.Text = "" + B4XPages.ShowPage("Productos") + End If +End Sub + +Private Sub p_pedido_Click + +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..ce7a853 --- /dev/null +++ b/B4A/C_Principal.bas @@ -0,0 +1,3147 @@ +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 conectado As String + Dim t1, t2 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 c As Cursor + Dim d As Cursor + Dim b As Cursor + Dim e As Cursor + Dim f As Cursor + Dim ro 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 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 Rut_Rep As String + 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 p_ruta2 As Panel + 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 lblTitle As Label + Private B_OK_PANEL5 As Button + Private p_principal As Panel + + Private teclado As IME + Private panel5 As Panel + Private panel_5 As Panel + Private p_marcasRes As Panel + Private p_sombra As Panel + + Private Label22 As Label + Private l_rutasuplencia As Label + Dim l_ru_pri As Label + Private l_ru_sup As Label + Private Label4 As Label + Private Label2 As Label + Private Label25 As Label + Dim p_transparenteActualizacion As Panel + Private p_forzarActualizacion As Panel + Dim l_forzarActualizacion As Label + Dim tipo_venta As String = Subs.traeTipoVentaDeBD + Private b_abordo As Button + Dim bitacora As C_Bitacora + Private l_version As Label + Dim contadorSubir As Int = 0 + + Private p_somvra_2 As Panel + Private b_resdia As Button + Private b_hacerpedido As Button + Private b_nuevocliente As Button + Private b_clientesvisitados 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 + bitacora.Initialize("bitacora", "bitacora", Root, B4XPages.MainPage.skmt, Starter.reqManager) + 'load the layout to Root + Root.LoadLayout("principal") + SCROLL_RESDIA.Width = Root.Width + SCROLL_RESDIA.Height = Root.Height + B_OK_RES.color = Colors.Red + B_OK_RES.TextColor = Colors.White + l_version.Left = Root.Width - l_version.Width + l_version.Text = Application.VersionName + 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_info3 where gestion = 0") + d.Position=0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as POR_VISITAR from kmt_info3") + e.Position=0 + f=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CAT_CL_RUTA from kmt_info3") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + b_abordo.Left = (Root.Width / 2) - (b_abordo.Width / 2) + p_principal.Width = Root.Width : p_principal.Height = Root.Height +' ro = B4XPages.MainPage.skmt.ExecQuery("select count(*) as CAT_CL_RUTA from kmt_info3") +' ro.Position = 0 +' l_ru_pri.Text = ro.GetString("CAT_CL_RUTA") +' ro.Close +' If l_ru_pri.Text = 0 Then +' l_ru_pri.Text = 0 +' End If + If l_ruta.Text = 0 Then + l_ruta.Text = 0 + Else If l_ruta.Text > 0 Then + f=B4XPages.MainPage.skmt.ExecQuery("select distinct CAT_CL_RUTA from kmt_info3 where CAT_CL_RUTA not in (select * from ruta_suplencia)") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + End If + ' Log($"|${Subs.traeTipoVentaDeBD}|"$) + If Subs.traeTipoVentaDeBD = "VENTA" Or Subs.traeTipoVentaDeBD = "ABORDO" Then + If l_ruta.Text <> "0" Then + Log(999 & "|" & l_ruta.Text & "|") + b_abordo.Visible = False + End If + Else + b_abordo.Visible = False + End If +' If l_ruta.Text <> "0" Then +' b_abordo.Visible = True +' Else +' b_abordo.Visible = False +' 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(distinct NV_CLIENTE) as CUANTOS from noventa") + 'where pc_fecha = ?", Array As String(fecha) + c.Position=0 + b.Position=0 + L_MONTOD.Text = NumberFormat2(c.GetDouble("MONTO_DIA"), 0, 2, 2, False) + 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 + CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") + + Private s As Cursor = B4XPages.MainPage.skmt.ExecQuery("select count(RS_RUTA) as cuenta, RS_RUTA FROM RUTA_SUPLENCIA") + s.Position = 0 + If s.GetString("cuenta") = 0 Then + Label22.Visible = False + l_rutasuplencia.Visible = False + Else If s.GetString("cuenta") > 0 Then + Label22.Visible = True + l_rutasuplencia.Visible = True + l_rutasuplencia.Text = s.GetString("RS_RUTA") + End If + p_transparenteActualizacion.Width = Root.Width + p_transparenteActualizacion.Height = Root.Height + Subs.centraPanel(p_forzarActualizacion, p_transparenteActualizacion.Width) +' Subs.centraPanel(Panel4, Root.Width) +End Sub + +'Descargar: GP_https://keymon.lat/movil/guna/GP_4.10.10.EP_d.apk + +Sub B4XPage_Appear +' LogColor($"########## ${Subs.traeRuta} ##########"$, Colors.red) + p_principal.Visible = True + E_RUTA2.Text = "" + p_ruta2.Visible = False + E_RUTA2.Visible = False + p_somvra_2.Visible = False + Subs.validaPromoProcterPRO3009 + HORAINGRESO ="000000" + Btn_Ubicar.Left = (Panel4.Width/2) - (Btn_Ubicar.Width/2) +' B4XPages.MainPage.reqManager.Initialize(Me, B4XPages.MainPage.SERVER) + PASO = 0 + If Not(Starter.gps.GPSEnabled) Then + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + c=B4XPages.MainPage.skmt.ExecQuery2("select count(*) as CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position = 0 + 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 + If EJECUTANDO = 0 Then + Listo1 = 0 + Listo2 = 0 + Listo3 = 0 + Listo4 = 0 + Listo5 = 0 + inve = 0 + img2.Visible =False + End If + DateTime.DateFormat = "MM/dd/yyyy" + fecha=DateTime.Date(DateTime.Now) + b=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from pedido_cliente") + b.Position = 0 + Cuantos = b.GetString("CUANTOS") + b.Close + If Starter.marcaCel <> "Sony" Then ToastMessageShow(Cuantos , True) + d=B4XPages.MainPage.skmt.ExecQuery("select count(*) as TOTAL_VISITAR from kmt_info3 where gestion = 0") + d.Position=0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as POR_VISITAR from kmt_info3") + e.Position=0 + f=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CAT_CL_RUTA from kmt_info3") + 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 distinct CAT_CL_RUTA from kmt_info3 where CAT_CL_RUTA not in (select * from ruta_suplencia)") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + End If + If Cuantos = 0 Then + L_MONTOD.Text =0 + l_cuantosc.Text = 0 + l_cuantosn.Text = 0 + L_CUANTOST.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") + d.Close + e.Close + b=B4XPages.MainPage.skmt.ExecQuery("select count( distinct NV_CLIENTE) as CUANTOS from noventa") + b.Position=0 + l_cuantosn.Text = b.GetString("CUANTOS") + b.close + Else + c=B4XPages.MainPage.skmt.ExecQuery("select SUM(PE_COSTO_TOT) as MONTO_DIA, COUNT(DISTINCT(PE_CLIENTE)) AS CLIENTES_DIA from PEDIDO") + b=B4XPages.MainPage.skmt.ExecQuery("select count( distinct NV_CLIENTE) as CUANTOS from noventa") + c.Position=0 + b.Position=0 + L_MONTOD.Text = NumberFormat2(c.GetDouble("MONTO_DIA"), 0, 2, 2, False) + l_cuantosc.Text = c.GetString("CLIENTES_DIA") + D2=B4XPages.MainPage.skmt.ExecQuery("select COUNT(*) AS CUANTOS from PEDIDO ") + D2.Position = 0 + LPT = D2.GetString("CUANTOS") / l_cuantosc.Text + D2.Close + l_cuantosn.Text = b.GetString("CUANTOS") + efectiva = c.GetString("CLIENTES_DIA") / e.GetString("POR_VISITAR") + l_efectiva.text = Round2(efectiva*100,2) + l_ctast.Text = d.GetString("TOTAL_VISITAR") + d.Close + l_porvisitar.Text = e.GetString("POR_VISITAR") + L_CUANTOST.Text = l_cuantosc.Text + l_cuantosn.Text + drop = L_CUANTOST.Text / l_porvisitar.Text + l_drop.Text = Round(drop * 100) + If L_CUANTOST.Text < 40 Then + ImageView3.Bitmap = LoadBitmap(File.DirAssets, "tache_rojo.png") + Else If L_CUANTOST.Text > = 40 And L_CUANTOST.Text < 50 Then + ImageView3.bitmap = LoadBitmap(File.DirAssets, "alerta_amarilla.png") + Else + ImageView3.Bitmap = LoadBitmap(File.DirAssets, "palomita_verde.png") + End If + Log("|" & c.GetString("MONTO_DIA") & "|") + Log("|" & c.GetString("CLIENTES_DIA") & "|") +' L_TICKPROM.Text = Round2((c.GetString("MONTO_DIA") / c.GetString("CLIENTES_DIA")), 2) +' If c.GetString("MONTO_DIA") < 4000 Then +' ImageView5.Bitmap = LoadBitmap(File.DirAssets, "tache_rojo.png") +' Else if c.GetString("MONTO_DIA") > = 4000 And c.GetString("MONTO_DIA") < 6250 Then +' ImageView5.bitmap = LoadBitmap(File.DirAssets, "alerta_amarilla.png") +' Else +' ImageView5.Bitmap = LoadBitmap(File.DirAssets, "palomita_verde.png") +' End If + b.Close + c.Close + End If + c.Close + b.Close + e.Close + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + C.Position =0 + ALMACEN = C.GetString("ID_ALMACEN") + c.Close + bu.Initialize + batterystatus = bu.BatteryInformation + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + B4XPages.MainPage.montoActual = L_MONTOD.Text + B4XPages.MainPage.clientestotal = L_CUANTOST.Text + B4XPages.MainPage.clientesventa = l_cuantosc.Text + B4XPages.MainPage.clientesvisitados = l_porvisitar.TEXT + B4XPages.MainPage.ALMACEN = ALMACEN + B4XPages.MainPage.rutapreventa = l_ruta.text + + '////// Para el usuario global - Chv + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + B4XPages.MainPage.usuario = usuario + c.Close + '/////// + CallSub(Starter, "ENVIA_ULTIMA_GPS") +' panel_5.Visible = False +' 'Log("panel5 visible FALSE") + + Private s As Cursor = B4XPages.MainPage.skmt.ExecQuery("select count(RS_RUTA) as cuenta, RS_RUTA FROM RUTA_SUPLENCIA") + s.Position = 0 + If s.GetString("cuenta") = 0 Then + Label22.Visible = False + l_rutasuplencia.Visible = False + l_rutasuplencia.Text = "" + Else If s.GetString("cuenta") > 0 Then + Label22.Visible = True + l_rutasuplencia.Visible = True + l_rutasuplencia.Text = s.GetString("RS_RUTA") + End If +End Sub + +Sub Subir_Click + checaPedido + CARGA = "SUBIR" + P1.Visible = True + P1.BringToFront + 'trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + L_P_1.Visible = False + S_CC.Visible = False + L_P_3.Visible = False + S_CH.Visible = False + PB1.Visible = False + Resumen.Visible= False + + p_principal.Visible = False + Subs.panelVisible(P1, 0, 0) + Subs.centraPanel(P1, Root.Width) + Subs.centraPanelV(P1, Root.Height) + B4XPages.MainPage.reqManager.trackInit + + L_P_2.Text = "Envio de Pedidos" + L_P_3.Text = "Envio de Pedidos" + S_CH.Text = "EN PROCESO" + S_CP.Text = "EN PROCESO" + B_OK_PAS.Text = "ENVIANDO" + PB1.Progress = 0 + PB2.Progress = 0 + 'c=skmt.ExecQuery("SELECT sum(IFNULL(PE_DESC,0)) as DESCUENTO FROM PEDIDO") + 'c.Position =0 + 'If c.GetString("DESCUENTO") > 0 And PASO = 0 Then + 'P1.Visible = True + 'ELSE IF c.GetString("DESCUENTO") = 0 Then + PASO = 1 + 'End If + If PASO =1 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE not In (select PE_CLIENTE from pedido)") + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select HGDATE, HGLAT, HGLON from HIST_GPS") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "UPDATE_GUNA_ACTUAL2_GPS" + cmd.Parameters = Array As Object(L_MONTOD.Text, L_CUANTOST.Text, l_cuantosc.Text,l_porvisitar.TEXT,c.GetString("hglat"),c.GetString("hglon"),batterystatus(0),LPT, STEYIN, STEYOUT,ALMACEN,l_ruta.Text ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_visitas") + Next + End If + c.Close + + ' PEDIO_CLIENTE + c=B4XPages.MainPage.skmt.ExecQuery("SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_FACTURA FROM PEDIDO_CLIENTE ") + d=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDOSC FROM PEDIDO_CLIENTE ") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_pedidos_GV3" + cmd.Parameters = Array As Object(C.GetString("PC_CLIENTE"),C.GetString("PC_FECHA"),C.GetString("PC_USER"),C.GetString("PC_NOART"),C.GetString("PC_MONTO"),C.GetString("PC_LON"),C.GetString("PC_LAT"),ALMACEN,l_ruta.text,C.GetString("PC_COSTO_SIN"),C.GetString("PC_FACTURA") ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_pedidos") + Next + End If + c.Close + d.Position=0 + cuantos_pedidosc = D.GetString("CUANTOS_PEDIDOSC") + d.Close + + ' ENVIO DE LOS CODIGOS QR + 'c=skmt.ExecQuery2("SELECT CAT_CL_NUM_SERIEFISICO,CAT_CL_CODIGO ,CAT_CL_LONG,CAT_CL_LAT, CAT_CL_FOTO FROM kmt_info3 where CAT_CL_NUM_SERIEFISICO = ?", Array As String("OK")) + c=B4XPages.MainPage.skmt.ExecQuery("SELECT CODIGOKMTS, CODIGOB, LAT, LON FROM HIST_CODIGO_BARRAS" ) + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_QR_2_GV2" + cmd.Parameters = Array As Object(C.GetString("CODIGOKMTS"),C.GetString("CODIGOB"),C.GetString("LON"),C.GetString("LAT"),ALMACEN,l_ruta.text ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_QR2") + Next + End If + c.Close + + ' Plan Lealtad + c=B4XPages.MainPage.skmt.ExecQuery("SELECT * FROM PLAN_LEALTAD WHERE DESCARGADO IS NULL") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_plan_lealtad_GUNA" + cmd.Parameters = Array As Object(C.GetString("PL_BANDERA"),C.GetString("PL_CLIENTE"),Subs.traeAlmacen,Subs.traeRuta) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "insPlanLealtad") + Next + End If + c.Close + + ' Plan Lealtad + c=B4XPages.MainPage.skmt.ExecQuery("SELECT * FROM COMENTARIOS WHERE DESCARGADO IS NULL") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_coments_GUNA" + cmd.Parameters = Array As Object(C.GetString("COMENTARTIO"),C.GetString("CLIENTE"),Subs.traeAlmacen,Subs.traeRuta) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "INS_coment") + Next + End If + c.Close + + + Dim fotomostrar1 As Cursor = Starter.skmt.ExecQuery("SELECT * FROM kmt_info3 where foto is not NULL") + If fotomostrar1.RowCount>0 Then + For i=0 To fotomostrar1.RowCount -1 + fotomostrar1.Position=i + Dim fotoenvio() As Byte = fotomostrar1.GetBlob("foto") + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "UPDATE_FOTO_GUNA" + cmd.Parameters = Array As Object(fotoenvio,fotomostrar1.GetString("CAT_CL_CODIGO"),Subs.traeAlmacen,Subs.traeRuta) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "INS_coment") + Next + End If + fotomostrar1.Close + + c=B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_CL_NUM_SERIEFISICO,CAT_CL_CODIGO ,CAT_CL_LONG,CAT_CL_LAT, CAT_CL_FOTO FROM kmt_info3 where CAT_CL_NUM_SERIEFISICO IS NOT NULL and gestion <> '0'") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + 's=skmt.ExecQuery2("SELECT HIST_VI_IMAGEN FROM HIST_VISITAS WHERE HIST_VI_CREDITO =?", Array As String (c.GetString("HIST_VI_CREDITO"))) + 's.Position =0 + foto1 = c.GetBlob("CAT_CL_FOTO") + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_QR_GV2" + cmd.Parameters = Array As Object(C.GetString("CAT_CL_NUM_SERIEFISICO"),C.GetString("CAT_CL_CODIGO"),C.GetString("CAT_CL_LONG"),C.GetString("CAT_CL_LAT"),ALMACEN,l_ruta.text, foto1 ) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_QR") + Next + End If + c.Close + + 'BITACORA (PROYECTO GPS) + Private h As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select * from bitacoraGPS"$) + Do While h.nextrow + cmd.Initialize + Private eventob As String = h.GetString("eventob") + cmd.Name = "mandaBitacora3_GUNA" +' Log("BITACORA3") + Private clienteb As String = h.GetString("clienteb") + Private finb As String = h.GetString("finb") + Private nombreCliente As String =Subs. traeNombreCliente(h.GetString("clienteb")) + If eventob = "Llega a almacen" Then + nombreCliente = "BOLETA" + clienteb = "" + finb = h.GetString("iniciob") + End If +' Private VarXRu As String = ("R:"&e_ruta.Text & " R:" & E_RUTA2.Text) +' LogColor("----------->" & VarXRu, Colors.Red) + If eventob = "Salida almacen" Then nombreCliente = "CHECKLIST" + If eventob = "Fin Día" Then nombreCliente = "FIN DIA" + If eventob = "Carga día" Then nombreCliente = "CARGA DIA" + If eventob = "Carga día suplencia" Then nombreCliente = Subs.traeRutasSup +' If eventob = "Suplencia" Then nombreCliente = VarXRu +' Log($"'${almacenb}', '${usuariob}', '${rutab}', '${eventob}', '${clienteb}', '${nombreCliente}','${ iniciob}', '${finb}','${ latitudb}','${ longitudb}', '${precision}', '${motivonoventa}', '${motivonovisita}', '${fechab}'"$) +' TMP_ALMACEN, TMP_USUARIO, TMP_RUTA, TMP_EVENTO, TMP_ID_CLIENTE, TMP_NOMBRE_CLIENTE, TMP_INICIO, TMP_FINAL, TMP_LATITUD, TMP_LONGITUD, TMP_PRESICION, TMP_MOTIVO_NO_VENTA, TMP_MOTIVO_NO_VISITA, TMP_FECHA_SINC, TMP_FECHA_MOVIL + cmd.Parameters = Array As Object(h.GetString("almacenb"), h.GetString("usuariob"), h.GetString("rutab"), eventob, clienteb, nombreCliente, h.GetString("iniciob"), finb, h.GetString("latitudb"), h.GetString("longitudb"), h.GetString("precision"), h.GetString("motivonoventa"), h.GetString("motivonovisita"), h.GetString("fechab"),h.GetString("BAN_GEOB")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "mandaBitacora") + Loop + Log("MANDAMOS BITACORA") + + c=B4XPages.MainPage.skmt.ExecQuery("SELECT HE_CLIE, HE_RES, HE_FECHA, HE_TIPO, HE_LAT, HE_LON, HE_FOTO FROM HIST_ENCUESTA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_encuesta2_GUNA" + 'TMP_HE_CLIE, TMP_HE_RES, TMP_HE_FECHA, TMP_HE_TIPO, TMP_HE_IDALMACEN, TMP_HE_RUTA, TMP_HE_LONGITUD, TMP_HE_LATITUD, TMP_HE_EXISTE + cmd.Parameters = Array As Object(C.GetString("HE_CLIE"), C.GetString("HE_RES"), C.GetString("HE_FECHA"), c.GetString("HE_TIPO"), Subs.traeAlmacen, Subs.traeRuta, c.GetString("HE_LAT"), c.GetString("HE_LON"), "", c.GetBlob("HE_FOTO")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_encuesta") + Next + End If + c.Close + c=B4XPages.MainPage.skmt.ExecQuery2("SELECT PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO FROM PEDIDO WHERE (PE_RECALCULO = ? or PE_RECALCULO = ? or PE_RECALCULO IS NULL)",Array As String("","null")) + d=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDO FROM PEDIDO") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_pedido_GV2" + cmd.Parameters = Array As Object(C.GetString("PE_CEDIS"), ALMACEN, C.GetString("PE_COSTO_TOT"), C.GetString("PE_COSTOU"), C.GetString("PE_CANT"), C.GetString("PE_PRONOMBRE"), C.GetString("PE_PROID"), C.GetString("PE_CLIENTE"),C.GetString("PE_FECHA"),C.GetString("PE_USUARIO"),C.GetString("PE_RUTA"), C.GetString("PE_COSTO_SIN"),C.GetString("PE_DESC"),c.GetString("PE_FOLIO")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_pedido") + Next + End If + c.Close + d.Position=0 + cuantos_pedido = D.GetString("CUANTOS_PEDIDO") + d.Close + + c=B4XPages.MainPage.skmt.ExecQuery2("SELECT PE_RECALCULO,PE_RECALCULOTOT,PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO FROM PEDIDO WHERE PE_RECALCULO <> ? or PE_RECALCULO <> ? or PE_RECALCULO IS NOT NULL",Array As String("","null")) + d=B4XPages.MainPage.skmt.ExecQuery($"SELECT COUNT(*) as CUANTOS_PEDIDO FROM PEDIDO where PE_RUTA = '${Subs.traeRuta}'"$) + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_pedido_GV2" + cmd.Parameters = Array As Object(C.GetString("PE_CEDIS"), ALMACEN, C.GetString("PE_RECALCULOTOT"), C.GetString("PE_RECALCULO"), C.GetString("PE_CANT"), C.GetString("PE_PRONOMBRE"), C.GetString("PE_PROID"), C.GetString("PE_CLIENTE"),C.GetString("PE_FECHA"),C.GetString("PE_USUARIO"),C.GetString("PE_RUTA"), C.GetString("PE_COSTO_SIN"),C.GetString("PE_DESC"),c.GetString("PE_FOLIO")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_pedido") + Next + End If + c.Close + d.Position=0 + cuantos_pedido = D.GetString("CUANTOS_PEDIDO") + d.Close + +' 'CUESTIONARIO + c = B4XPages.MainPage.skmt.ExecQuery($"select * from cuestionario"$) + Private rutaActual As String = Subs.traeRuta + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_CUESTIONARIO_GUNA" + cmd.Parameters = Array As Object(c.GetString("Q_IDCLIENTE"), rutaActual, ALMACEN, c.GetString("Q_FECHA"), c.GetString("Q_IDPREGUNTA"), c.GetString("Q_PREGUNTA"), c.GetString("Q_IDRESPUESTA"), C.GetString("Q_RESPUESTA")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "ins_cuestionario") + Next + End If + c.Close + + ' NOVENTA + c=B4XPages.MainPage.skmt.ExecQuery("SELECT NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON FROM NOVENTA") + D=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS_NOVENTA FROM NOVENTA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_noventa_GV2" + cmd.Parameters = Array As Object(C.GetString("NV_CLIENTE"),C.GetString("NV_FECHA"),C.GetString("NV_USER"),C.GetString("NV_MOTIVO"),C.GetString("NV_COMM"),C.GetString("NV_LAT"),C.GetString("NV_LON"), ALMACEN, l_ruta.Text) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_noventa") + Next + End If + c.Close + d.Position=0 + cuantos_noventa = D.GetString("CUANTOS_NOVENTA") + d.Close + + ' DATOS DE KMTS PARA EL TIPO DE ABARROTE. + '''CAT_CL_GIRO = ? WHERE CAT_CL_CODIGO = ? And CAT_CL_NOMBRE = ? kmt_info3 +' c=B4XPages.MainPage.skmt.ExecQuery("Select CAT_CL_GIRO, CAT_CL_CODIGO from kmt_info3") +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_GIROS_ENC" +' cmd.Parameters = Array As Object(C.GetString("CAT_CL_CODIGO"),C.GetString("CAT_CL_GIRO")) +' B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_abarrote") +' Next +' End If +' c.Close + + ' GEO CERCA + c=B4XPages.MainPage.skmt.ExecQuery("Select HGCLIENTE, HGDATE, HGLAT, HGLON from HIST_GEOCERCA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_geocerca_GV2" + cmd.Parameters = Array As Object(C.GetString("HGCLIENTE"),C.GetString("HGDATE"),C.GetString("HGLAT"),C.GetString("HGLON")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_hist_geo") + Next + End If + c.Close + + ' LO DEL LIKE + c=B4XPages.MainPage.skmt.ExecQuery("Select HFCLIENTE, HFALIAS,HFRUTA,HFALMACEN from HIST_FACE") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_face_like_GV2" + cmd.Parameters = Array As Object(C.GetString("HFCLIENTE"),C.GetString("HFALIAS"),C.GetString("HFRUTA"),C.GetString("HFALMACEN")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_hist_face") + Next + End If + c.Close + + ' DROP + t1.Initialize("T1", 30000) ' 1000 = 1 second + t1.Enabled = True + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name ="insert_drop_GV2_3" + cmd.Parameters = Array As Object(usuario,l_ruta.Text,sDate & sTime, l_porvisitar.Text,l_drop.Text,l_efectiva.Text,l_cuantosc.Text,l_cuantosn.Text, L_MONTOD.Text,"ENVIO",ALMACEN,Application.VersionName) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_drop") + img2.Visible =False + PORCENTAJE = Round(100/ (cuantos_noventa + cuantos_pedido + cuantos_pedidosc + 1)) + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Se Actualizaran los datos, Este proceso podria tardar hasta un minuto, gracias "& l_ruta.text , True) + End If + + Private x As Cursor = B4XPages.MainPage.skmt.ExecQuery("Select CLIENTE, ALMACEN, P1, P2, P3, P4, P5, P6, P7, P8, P9 from ENCUESTA_MODULO1") + If x.RowCount>0 Then + For i=0 To x.RowCount -1 + x.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_ENCUESTA_MODULO1" + cmd.Parameters = Array As Object(x.GetString("CLIENTE"), x.GetString("ALMACEN"),x.GetString("P1"), x.GetString("P2"), x.GetString("P3"), x.GetString("P4"), x.GetString("P5"), x.GetString("P6"), x.GetString("P7"), x.GetString("P8"), x.GetString("P9")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "insert_ENCUESTA_MODULO1") + Next + End If + x.Close + + Private x1 As Cursor = B4XPages.MainPage.skmt.ExecQuery("Select CLIENTE, ALMACEN, P1, P2, P3, P4, P5, P6 from ENCUESTA_MODULO2") + If x1.RowCount>0 Then + For i=0 To x1.RowCount -1 + x1.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_ENCUESTA_MODULO2" + cmd.Parameters = Array As Object(x1.GetString("CLIENTE"), x1.GetString("ALMACEN"),x1.GetString("P1"), x1.GetString("P2"), x1.GetString("P3"), x1.GetString("P4"), x1.GetString("P5"), x1.GetString("P6")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "insert_ENCUESTA_MODULO2") + Next + End If + x1.Close + Private x2 As Cursor = B4XPages.MainPage.skmt.ExecQuery("Select CLIENTE, ALMACEN, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11 from ENCUESTA_MODULO3") + If x2.RowCount>0 Then + For i=0 To x2.RowCount -1 + x2.Position=i + 'Logcolor(x2.GetString("CLIENTE"),Colors.Red) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_ENCUESTA_MODULO3" + cmd.Parameters = Array As Object(x2.GetString("CLIENTE"), x2.GetString("ALMACEN"),x2.GetString("P1"), x2.GetString("P2"), x2.GetString("P3"), x2.GetString("P4"), x2.GetString("P5"), x2.GetString("P6"), x2.GetString("P7"), x2.GetString("P8"), x2.GetString("P9"), x2.GetString("P10"), x2.GetString("P11")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "insert_ENCUESTA_MODULO3") + Next + End If + x2.Close + Private x As Cursor = B4XPages.MainPage.skmt.ExecQuery("Select CLIENTE, ALMACEN, P1, P2, P3, P4, P5, P6, P7, P8 from ENCUESTA_MODULO4") + If x.RowCount>0 Then + For i=0 To x.RowCount -1 + x.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_ENCUESTA_MODULO4" + cmd.Parameters = Array As Object(x.GetString("CLIENTE"), x.GetString("ALMACEN"),x.GetString("P1"), x.GetString("P2"), x.GetString("P3"), x.GetString("P4"), x.GetString("P5"), x.GetString("P6"), x.GetString("P7"), x.GetString("P8")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "insert_ENCUESTA_MODULO4") + Next + End If + x.Close + Private x As Cursor = B4XPages.MainPage.skmt.ExecQuery("Select CLIENTE, ALMACEN, P1, P2, P3, P4, P5, P6, P7, P8, P9 from ENCUESTA_MODULO5") + If x.RowCount>0 Then + For i=0 To x.RowCount -1 + x.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_ENCUESTA_MODULO5" + cmd.Parameters = Array As Object(x.GetString("CLIENTE"), x.GetString("ALMACEN"),x.GetString("P1"), x.GetString("P2"), x.GetString("P3"), x.GetString("P4"), x.GetString("P5"), x.GetString("P6"), x.GetString("P7"), x.GetString("P8"), x.GetString("P9")) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "insert_ENCUESTA_MODULO5") + Next + End If + x.Close +End Sub + +Sub cargar_Click + Private i As Int = Regex.Replace("[^0-9.]", e_ruta.text,"") 'Quitamos alfanumericos y convertimos en entero. + e_ruta.text = i + + Private sup As Cursor = Starter.skmt.ExecQuery("SELECT RS_RUTA FROM RUTA_SUPLENCIA") + If E_RUTA2.Visible = False And E_RUTA2.text = "" And sup.RowCount > 0 Then 'Si hay ruta de suplencia, LA USAMOS. + sup.Position = 0 + E_RUTA2.text = sup.GetString("RS_RUTA") + E_RUTA2.Visible = True + End If + + If E_RUTA2.Visible = True Then + Private i2 As Int = Regex.Replace("[^0-9.]", E_RUTA2.text,"") 'Quitamos alfanumericos y convertimos en entero. + E_RUTA2.text = i2 + Rut_Rep = e_ruta.Text & " " & E_RUTA2.Text + Else + Rut_Rep = e_ruta.Text + End If + Log(Rut_Rep) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE GPS SET HABILITADO = (?)",Array As Object(0)) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("CARGA_DIA")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("pasword")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("LATITUD")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("GEOCERCA")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("LONGITUD")) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE GPS SET HABILITADO = (?)",Array As Object(0)) + CARGA = "CARGAR" +' img2.Visible =True + L_P_1.Visible = True + S_CC.Visible = True + Btn_Ubicar.Visible=False +' P1.Visible = True + p_principal.Visible = False + Subs.panelVisible(P1, 0, 0) + Subs.centraPanel(P1, Root.Width) + Subs.centraPanelV(P1, Root.Height) + Label4.Visible = False + l_ruta.Visible = False + Label22.Visible = False + l_rutasuplencia.Visible = False + +' trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + L_P_3.Visible = True + S_CH.Visible = True + PB1.Visible = True + Resumen.Visible= False + + L_P_1.Text = "Catalogo de Clientes" + L_P_2.Text = "Catalogos de Productos" + L_P_3.Text = "Catalogos Historicos" + S_CC.Text = "EN PROCESO" + S_CH.Text = "EN PROCESO" + S_CP.Text = "EN PROCESO" + PB1.Progress = 0 + PB2.Progress = 0 + EJECUTANDO = 1 + + 'c=skmt.ExecQuery("CREATE TABLE kmt_info3 (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_info3") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROMO_ESP") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cod_result") + B4XPages.MainPage.skmt.ExecNonQuery("delete from ABONOSP") + B4XPages.MainPage.skmt.ExecNonQuery("delete from hist_gest") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod2") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + B4XPages.MainPage.skmt.ExecNonQuery("delete from telefonos") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VENTAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_CLIENTE_CANT_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROMOS_COMP") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_VERIFICACION") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM MARCAS_RUTAS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_STAY_STORE") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GEOCERCA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_MARCAS_CUOTAS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_ENCUESTA_CLIENTE") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM CAT_ENCUESTA_PREGUNTA") + + 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) + cmd.Initialize + cmd.Name = "select_planLealtad_GUNA" + cmd.Parameters = Array As Object(ALMACEN, e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "planLealtad") + + Subs.guardaVariable("RUTA", e_ruta.text) + + Dim P As PhoneId + imei = "" + cmd.Initialize + cmd.Name ="insert_drop_GV2_3" + cmd.Parameters = Array As Object(usuario,e_ruta.text,sDate,imei,sTime,"","","","","CARGA",ALMACEN,Application.VersionName) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_drop") + + cmd.Initialize + cmd.Name = "select_TipoVenta" + cmd.Parameters = Array As Object(ALMACEN, e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "tipoVenta") + + cmd.Initialize + cmd.Name = "select_coments_GUNA" + cmd.Parameters = Array As Object(ALMACEN, e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "coments") + + cmd.Initialize + cmd.Name = "select_cat_gunaprod_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprod") + + cmd.Initialize + cmd.Name = "select_cat_gunaprod2_GV2" + cmd.Parameters = Array As Object(ALMACEN, e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprod2") + + cmd.Initialize + cmd.Name = "select_abonosp_GUNA_pre" + cmd.Parameters = Array As Object(ALMACEN, e_ruta.text, e_ruta.Text,ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "select_abonosp") + + cmd.Initialize + cmd.Name = "select_HIST_ESPECIAL_GUNA" +' cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "histespecial") + +' cmd.Initialize +' cmd.Name = "select_resum_apk_guna" ''' va el nombre de archivo de config +' cmd.Parameters = Array As Object(ALMACEN) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "resum_apk") ''' donde regresa la info ver job_done + + cmd.Initialize + cmd.Name = "select_cat_paquetes_GV6" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprodp") + + If ALMACEN = 32 Then 'Or ALMACEN = 6 + + cmd.Initialize + cmd.Name = "select_cat_promoesp_GUNA" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "promoesp") + + End If + + If ALMACEN = 87 Or ALMACEN = 6 Then + + cmd.Initialize + cmd.Name = "select_cat_promoesp_GUNA2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "promoesp") + + End If + + If ALMACEN = 88 Or ALMACEN = 6 Then + + cmd.Initialize + cmd.Name = "select_cat_promoesp_GUNA3" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "promoesp") + + End If + + cmd.Initialize + cmd.Name = "select_cat_paquetess_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprodp") + + cmd.Initialize + cmd.Name = "select_cat_detallepa_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "detallepaq") + + cmd.Initialize + cmd.Name = "select_cat_clientes2_guna_GV2" '########################## CODIGO PARA CREDITOS #################### + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "kmt_datos") + + + cmd.Initialize + cmd.Name = "select_hist_datos_GV2_2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN,e_ruta.text, ALMACEN,e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_datos") + + cmd.Initialize + cmd.Name = "select_hist_promos_GV2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_promos") + + cmd.Initialize + cmd.Name = "select_hist_cliente_promos_GV2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_cliente_promos") + + cmd.Initialize + cmd.Name = "select_HIST_MARCAS_CUOTAS" + cmd.Parameters = Array As Object( ALMACEN, e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "HIST_MARCAS_CUOTAS") + + cmd.Initialize + cmd.Name = "select_cat_encuesta_p_GUNA" + cmd.Parameters = Array As Object( ALMACEN,e_ruta.text ) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "carga_encuesta") + +' cmd.Initialize +' cmd.Name = "SELECT_HIST_ENCUESTA_GUNA" +' cmd.Parameters = Array As Object( e_ruta.text, ALMACEN) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "HIST_ENCUESTA2") + + cmd.Initialize + cmd.Name = "SELECT_HIST_PRODPROM_GUNA" + cmd.Parameters = Array As Object(ALMACEN, e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "HIST_PROM") + + 'Promo PRO3015 - 2 AXE AEROSOL 150 ML + 1 REXONA AEROSOL 150 ML $104.00 + ' Solo aplica para los que hayan comprado la PRO2265 durante Jul-Ago, el siguiente query trae esos clientes. + cmd.Initialize + cmd.Name = "selectPromo2265JulAgo_Guna" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_pro2265") + +' Dim reqManager9000 As DBRequestManager +' reqManager9000.Initialize(Me, "http://keymon.lat:9000/") + + 'Promo PRO3054 - Plan promocional Act II Cajitas (Conagra) + ' Solo aplica para los que hayan comprado la PRO3054 durante Jul-Sep, el siguiente query trae esos clientes. + cmd.Initialize + cmd.Name = "selectPromo3054Jul-Sep_Guna" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_pro3054") + + 'Promo PRO3055 - Plan promocional Act II Cajitas (Conagra) + ' Solo aplica para los que hayan comprado la PRO3055 durante Jul-Sep, el siguiente query trae esos clientes. + cmd.Initialize + cmd.Name = "selectPromo3055Jul-Sep_Guna" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_pro3055") + + 'SUPLENCIA + If E_RUTA2.text <> "" Then + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO RUTA_SUPLENCIA(RS_RUTA) VALUES(?)",Array As String(E_RUTA2.Text)) + E_RUTA2.Visible = False + p_ruta2.Visible = False + p_somvra_2.Visible = False + + cmd.Initialize + cmd.Name = "select_cat_clientes2_guna_GV2" '########################## CODIGO PARA CREDITOS #################### + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "kmt_datos2") + + cmd.Initialize + cmd.Name = "select_hist_datos_GV2_2" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN,E_RUTA2.text, ALMACEN,E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_datos") + + cmd.Initialize + cmd.Name = "select_hist_promos_GV2" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_promos") + + cmd.Initialize + cmd.Name = "select_hist_cliente_promos_GV2" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_cliente_promos") + + cmd.Initialize + cmd.Name = "SELECT_HIST_PRODPROM_GUNA" + cmd.Parameters = Array As Object(ALMACEN,E_RUTA2.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "HIST_PROM") + End If + + cmd.Initialize + cmd.Name = "select_promo_comp_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "hist_comp_promos") + + cmd.Initialize + cmd.Name = "select_coordenadas_GUNA" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "coordenadas") + + cmd.Initialize + cmd.Name = "select_PASS_GUNA" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "password") + +' cmd.Initialize +' cmd.Name = "select_verificacion_GV2" +' cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "cat_verificacion") + + cmd.Initialize + cmd.Name = "select_fecha" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "fecha") + +' cmd.Initialize +' cmd.Name = "select_folio_GV2" +' cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "folio") + + cmd.Initialize + cmd.Name = "select_marcas_rutas" + cmd.Parameters = Array As Object( ALMACEN, e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "marcas_rutas") + + cmd.Initialize + cmd.Name = "select_CUEST2_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "CUESTIONARIO") + +' cmd.Initialize +' cmd.Name = "select_CLIENTE_ENCUESTA" +' cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ENCUESTA_CLIENTE") + + +' cmd.Initialize +' cmd.Name = "select_HIST_CUOTAS" +' cmd.Parameters = Array As Object( ALMACEN,e_ruta.text ) +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "CUOTAS") + + cmd.Initialize + cmd.Name = "select_comis_cedex" + cmd.Parameters = Array As Object( ALMACEN,e_ruta.text ) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "COMISIONES") + + cargar.Visible = False + Subir.Visible = False + inv.Visible = False + E_RUTA2.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) + B4XPages.MainPage.reqManager.trackNext(Job) + Log("JOBDONE PRINCIPAL") +' If Job.JobName = "DBRequest" Then +' Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) +' 'Log($"Tag: ${RESULT.tag}, success=${Job.Success}"$) +' End If + 'Log(Job.Tag) + If Job.Success = False Then + If Job.ErrorMessage <> "STREAM" Then LogColor("Error: " & Job.tag & " : " & Subs.parseHTTPError(Job.ErrorMessage), Colors.red) + 'ToastMessageShow("Error: " & Job.ErrorMessage, True) + If Job.ErrorMessage = "STREAM" Then + If CARGA = "SUBIR" Then + 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.Green) 'Mod por CHV - 211027 + 'Verificamos que el usuario guardado en BD sea VALIDO. + 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 + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_ruta_GV2_70_10" + cmd.Parameters = Array As Object(ALMACEN,e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ruta") + 'Log("Usuario guardado en BD es 'Valido'") + Else + Msgbox("Usuario o password No validos","") 'ignore + B4XPages.MainPage.skmt.ExecNonQuery("delete from usuarioa") + ExitApplication + End If + 'Log("***************** "&n) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "select_abonosp" Then 'query tag + B4XPages.MainPage.skmt.ExecNonQuery("delete from ABONOSP") + For Each records() As Object In RESULT.Rows + Dim NOTA As String = records(RESULT.Columns.Get("NOTA")) + Dim CLIENTE As String = records(RESULT.Columns.Get("CLIENTE")) + Dim SALDO_PENDIENTE As String = records(RESULT.Columns.Get("SALDO_PENDIENTE")) +' Dim NOMBRE As String = records(RESULT.Columns.Get("NOMBRE")) + Dim FECHA_PAGARE As String = records(RESULT.Columns.Get("FECHA_PREVENTA")) + Starter.skmt.ExecNonQuery2("INSERT INTO ABONOSP(NOTA,CLIENTE,SALDO_PENDIENTE,FECHA) VALUES (?,?,?,?)", Array As Object (NOTA, CLIENTE,SALDO_PENDIENTE,FECHA_PAGARE)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result1 As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If result1.Tag = "CHECAENCUESTA" Then 'query tag + For Each records() As Object In result1.Rows + Dim CUANTOSENCUESTA As String = records(result1.Columns.Get("CUANTOS")) + Log(CUANTOSENCUESTA) + Next + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + If CUANTOSENCUESTA = "0" Then + cmd.Initialize + cmd.Name ="insert_drop_GV2_4" + cmd.Parameters = Array As Object(usuario,B4XPages.MainPage.principal.e_ruta.text,sDate,"",sTime,"","","","","ENCUESTA",ALMACEN,Application.VersionName,Starter.encuesta) + B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "inst_drop") + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "kmt_datos" Then 'query tag + 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_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_FOTO() As Byte = records(RESULT.Columns.Get("CAT_CL_FOTO")) + 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_TIPOCLIENTE As String = records(RESULT.Columns.Get("CAT_CL_TIPOCLIENTE")) + + '########################## INICIA CODIGO PARA CREDITOS #################### + Dim CAT_CL_BCREDITO As String = records(RESULT.Columns.Get("CAT_CL_BCREDITO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info3(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_BCREDITO,CAT_CL_TIPOCLIENTE,FOTO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,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_BCREDITO,CAT_CL_TIPOCLIENTE,CAT_CL_FOTO)) + '########################## TERMINA CODIGO PARA CREDITOS #################### + 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)) + Next + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info3(CAT_CL_CODIGO, CAT_CL_RUTA, CAT_CL_NOMBRE, CAT_CL_LONG, CAT_CL_LAT, CAT_CL_NUM_SERIEFISICO) VALUES (?,?,?,0,0,0)", Array As Object ("0", e_ruta.Text, "ABORDO")) + Listo1 = 1 + S_CC.Text = "LISTO" +' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Catalogo Clientes Actualizados." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then +' B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "kmt_datos2" Then 'query tag + 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_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_TIPOCLIENTE As String = records(RESULT.Columns.Get("CAT_CL_TIPOCLIENTE")) + Dim CAT_CL_FOTO() As Byte = records(RESULT.Columns.Get("CAT_CL_FOTO")) + '########################## INICIA CODIGO PARA CREDITOS #################### + Dim CAT_CL_BCREDITO As String = records(RESULT.Columns.Get("CAT_CL_BCREDITO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info3(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_BCREDITO,CAT_CL_TIPOCLIENTE,FOTO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,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_BCREDITO,CAT_CL_TIPOCLIENTE,CAT_CL_FOTO)) + '########################## TERMINA CODIGO PARA CREDITOS #################### +' Subs.bitacora(Subs.fechanormal(DateTime.Now),usuario,Subs.traeAlmacen, e_ruta.Text, "Suplencia", "",Subs.fechanormal(DateTime.Now),Subs.fechanormal(DateTime.Now),B4XPages.MainPage.lat_gps,B4XPages.MainPage.lon_gps,"2","","") + 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)) + Next + Listo1 = 1 + S_CC.Text = "LISTO" +' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Catalogo Clientes Actualizados." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then +' B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + +' If Job.JobName = "DBRequest" Then +' Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) +' If RESULT.Tag = "resum_apk" Then 'query tag +' 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)) +' ' Msgbox("pasa","alo") +' Next +' Listo1 = 1 +' S_CC.Text = "LISTO" +'' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Catalogo Resumen Actualizado." , True) +' End If +' End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "hist_promos" Then 'query tag + 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 + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "histespecial" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CLIENTE As String = records(RESULT.Columns.Get("CLIENTE")) + Dim PROMOCION As String = records(RESULT.Columns.Get("PRMOCION")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_PROMOS(HP_CLIENTE, HP_CODIGO_PROMOCION) VALUES (?,?)", Array As Object (CLIENTE, 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 + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + 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 + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "HIST_PROM" Then 'query tag + + For Each records() As Object In RESULT.Rows + Dim HVD_CLIENTE2 As String = records(RESULT.Columns.Get("HVD_CLIENTE")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROMO_ESP(HVD_CLIENTE) VALUES (?)", Array As Object (HVD_CLIENTE2)) + Next +' If Starter.marcaCel <> "Sony" Then ToastMessageShow(" Historico Clientes Promociones Actualizado." , True) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + 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 + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "coordenadas" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim latitud As String = records(RESULT.Columns.Get("CAT_AL_LATITUD")) + Dim longitud As String = records(RESULT.Columns.Get("CAT_AL_LONGITUD")) + Dim GEOCERCA As String = records(RESULT.Columns.Get("CAT_AL_GEOCERCA")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("LATITUD",latitud)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("LONGITUD",longitud)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("GEOCERCA",GEOCERCA)) + Next +' If Starter.marcaCel <> "Sony" Then ToastMessageShow(" Historico Marcas" , True) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "password" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim password As String = records(RESULT.Columns.Get("CAT_VA_VALOR")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("pasword",password)) + Next +' If Starter.marcaCel <> "Sony" Then ToastMessageShow(" Historico Marcas" , True) + End If + End If + + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "hist_comp_promos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_PA_ID As String = records(RESULT.Columns.Get("CAT_PA_ID")) + Dim CAT_PA_MAXPROM As String = records(RESULT.Columns.Get("CAT_PA_MAXPROM")) + Dim CAT_PA_MAXPROMREC As String = records(RESULT.Columns.Get("CAT_PA_MAXPROMREC")) + Dim CAT_PA_MAXPROMCLIE As String = records(RESULT.Columns.Get("CAT_PA_MAXPROMCLIE")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROMOS_COMP(CAT_PA_ID, CAT_PA_MAXPROM, CAT_PA_MAXPROMREC, CAT_PA_MAXPROMCLIE) VALUES (?,?,?,?)", Array As Object (CAT_PA_ID, CAT_PA_MAXPROM,CAT_PA_MAXPROMREC,CAT_PA_MAXPROMCLIE)) + Next + 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 + End If + +' If Job.JobName = "DBRequest" Then +' Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) +' If RESULT.Tag = "CAT_VERIFICACION" Then 'query tag +' For Each records() As Object In RESULT.Rows +' Dim CAT_VE_IDPROD As String = records(RESULT.Columns.Get("CAT_VE_IDPROD")) +' Dim CAT_VE_NOMBRE As String = records(RESULT.Columns.Get("CAT_VE_NOMBRE")) +' Dim CAT_VE_ORDEN As String = records(RESULT.Columns.Get("CAT_VE_ORDEN")) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VERIFICACION(CAT_VE_IDPROD, CAT_VE_NOMBRE, CAT_VE_ORDEN) VALUES (?,?,?)", Array As Object (CAT_VE_IDPROD, CAT_VE_NOMBRE, CAT_VE_ORDEN)) +' Next +' End If +' End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "marcas_rutas" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HVD_MARCA As String = records(RESULT.Columns.Get("HVD_MARCA")) + Dim CLIENTES As String = records(RESULT.Columns.Get("CLIENTES")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO MARCAS_RUTAS(HVD_MARCA, CLIENTES) VALUES (?,?)", Array As Object (HVD_MARCA, CLIENTES)) + Next + End If + End If + +' 'CUOTAS +' If Job.JobName = "DBRequest" Then +' Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) +' If RESULT.Tag = "CUOTAS" Then 'query tag +' For Each records() As Object In RESULT.Rows +' Dim HC_RUTA As String = records(RESULT.Columns.Get("HC_RUTA")) +' Dim HC_CUOTA1 As String = records(RESULT.Columns.Get("HC_CUOTA1")) +' Dim HC_CUOTA2 As String = records(RESULT.Columns.Get("HC_CUOTA2")) +' Dim HC_CUOTA3 As String = records(RESULT.Columns.Get("HC_CUOTA3")) +' Dim HC_CUOTA4 As String = records(RESULT.Columns.Get("HC_CUOTA4")) +' Dim HC_CUOTA5 As String = records(RESULT.Columns.Get("HC_CUOTA5")) +' Dim HC_CUOTA6 As String = records(RESULT.Columns.Get("HC_CUOTA6")) +' Dim HC_META1 As String = records(RESULT.Columns.Get("HC_META1")) +' Dim HC_META2 As String = records(RESULT.Columns.Get("HC_META2")) +' Dim HC_META3 As String = records(RESULT.Columns.Get("HC_META3")) +' Dim HC_META4 As String = records(RESULT.Columns.Get("HC_META4")) +' Dim HC_META5 As String = records(RESULT.Columns.Get("HC_META5")) +' Dim HC_META6 As String = records(RESULT.Columns.Get("HC_META6")) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_CUOTAS(HC_RUTA, HC_CUOTA1,HC_CUOTA2,HC_CUOTA3,HC_CUOTA4,HC_CUOTA5,HC_CUOTA6,HC_META1,HC_META2,HC_META3,HC_META4,HC_META5,HC_META6) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (HC_RUTA, HC_CUOTA1,HC_CUOTA2,HC_CUOTA3,HC_CUOTA4,HC_CUOTA5,HC_CUOTA6,HC_META1,HC_META2,HC_META3,HC_META4,HC_META5,HC_META6)) +' Next +' End If +' End If + 'COMISIONES + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "COMISIONES" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HCM_TOTAL_V As String = records(RESULT.Columns.Get("HCM_TOTAL_V")) + Dim HCM_TOTAL_VIVE As String = records(RESULT.Columns.Get("HCM_TOTAL_VIVE")) + Dim HCM_TOTAL_GUNA As String = records(RESULT.Columns.Get("HCM_TOTAL_GUNA")) + Dim HCM_TOTAL_BEB As String = records(RESULT.Columns.Get("HCM_TOTAL_BEB")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_COMISIONES_MOVIL (HCM_TOTAL_V , HCM_TOTAL_VIVE , HCM_TOTAL_GUNA , HCM_TOTAL_BEB) VALUES (?,?,?,?)", Array As Object (HCM_TOTAL_V , HCM_TOTAL_VIVE , HCM_TOTAL_GUNA , HCM_TOTAL_BEB)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "ENCUESTA_CLIENTE" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HEC_CLIENTE As String = records(RESULT.Columns.Get("HEC_CLIENTE")) + Dim HEC_MODULO As String = records(RESULT.Columns.Get("HEC_MODULO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA_CLIENTE (HEC_CLIENTE , HEC_MODULO) VALUES (?,?)", Array As Object (HEC_CLIENTE , HEC_MODULO )) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "promoesp" Then 'query tag + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_PROMO_ESP") + For Each records() As Object In RESULT.Rows + Dim CAT_PE_ID As String = records(RESULT.Columns.Get("CAT_PE_ID")) + Dim CAT_PE_IDPROMO As String = records(RESULT.Columns.Get("CAT_PE_IDPROMO")) + Dim CAT_PE_MONTO As String = records(RESULT.Columns.Get("CAT_PE_MONTO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_PROMO_ESP(CAT_PE_ID, CAT_PE_IDPROMO, CAT_PE_MONTO) VALUES (?,?,?)", Array As Object (CAT_PE_ID , CAT_PE_IDPROMO,CAT_PE_MONTO)) + Next + End If + End If + + 'HIST_ENCUESTA2 + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "HIST_ENCUESTA2" Then 'query tag + B4XPages.MainPage.skmt.BeginTransaction + For Each records() As Object In RESULT.Rows + Dim HE_CLIENTE As String = records(RESULT.Columns.Get("HE_CLIENTE")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_ENCUESTA2(HE_CLIENTE) VALUES (?)", Array As Object (HE_CLIENTE)) + Next + B4XPages.MainPage.skmt.TransactionSuccessful + B4XPages.MainPage.skmt.EndTransaction + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprod" Then 'query tag + If PB2.Progress < 30 Then S_CP.Text = "CARGANDO" 'Mod por CHV - 20211028 Agregue el "If PB2.Progress < 30 then" + For Each records() As Object In RESULT.Rows + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + ' Dim CAT_GP_DEV As String = records(RESULT.Columns.Get("CAT_GP_DEV")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + Dim CAT_GP_INICIATIVA As Int = records(RESULT.Columns.Get("CAT_GP_INICIATIVA")) +' CAT_GP_INICIATIVA = 5 +' skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_DEV) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_DEV)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_INICIATIVA) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD, CAT_GP_INICIATIVA)) + Next + Listo2=1 + 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 +' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Productos Actualizados." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then +' B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprod2" Then 'query tag + If PB2.Progress < 30 Then S_CP.Text = "CARGANDO" 'Mod por CHV - 20211028 Agregue el "If PB2.Progress < 30 then" + For Each records() As Object In RESULT.Rows + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + ' Dim CAT_GP_DEV As String = records(RESULT.Columns.Get("CAT_GP_DEV")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + Dim CAT_GP_INICIATIVA As Int = records(RESULT.Columns.Get("CAT_GP_INICIATIVA")) + Dim CAT_GP_CODPROMO As String = records(RESULT.Columns.Get("CAT_GP_CODPROMO")) +' CAT_GP_INICIATIVA = 5 +' skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_DEV) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_DEV)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_INICIATIVA,CAT_GP_CODPROMO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD, CAT_GP_INICIATIVA, CAT_GP_CODPROMO)) + Next + Listo2=1 + 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 +' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Productos Actualizados." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then +' B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprodp" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + Dim CAT_PA_BSEGMENTA As String = records(RESULT.Columns.Get("CAT_PA_BSEGMENTA")) + Dim CAT_PA_SEGMENTAV As String = records(RESULT.Columns.Get("CAT_PA_SEGMENTAV")) + CAT_GP_TIPOPROD = "5" + If CAT_GP_ID = "PAQUNI003" Then + CAT_GP_ALMACEN = 60 + End If + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_PA_BSEGMENTA,CAT_PA_SEGMENTAV) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_PA_BSEGMENTA,CAT_PA_SEGMENTAV)) +' If CAT_GP_ID.StartsWith("PRO") Then LogColor($"Metemos promo a gunaprod - ${CAT_GP_ID}, |${CAT_GP_TIPO}|"$, Colors.red) +' If CAT_GP_TIPO = "PROMOS" Then +' LogColor($"Agregamos Promo a gunaprod2 - ${CAT_GP_ID}, ${CAT_GP_NOMBRE}"$, Colors.Red) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_PA_BSEGMENTA,CAT_PA_SEGMENTAV) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_PA_BSEGMENTA,CAT_PA_SEGMENTAV)) +' End If + 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 +' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Promociones Actualizados." , True) + Listo4=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 + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprodps" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD)) + Next + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + 'Log("C4") + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + 'Log("3") + End If +' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Promociones especiales Actualizados." , True) + Listo4=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 + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "detallepaq" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_DP_ALMACEN As String = records(RESULT.Columns.Get("CAT_DP_ALMACEN")) + Dim CAT_DP_ID As String = records(RESULT.Columns.Get("CAT_DP_ID")) + Dim CAT_DP_IDPROD As String = records(RESULT.Columns.Get("CAT_DP_IDPROD")) + Dim CAT_DP_TIPO As String = records(RESULT.Columns.Get("CAT_DP_TIPO")) + Dim CAT_DP_PZAS As String = records(RESULT.Columns.Get("CAT_DP_PZAS")) + Dim CAT_DP_USUARIO As String = records(RESULT.Columns.Get("CAT_DP_USUARIO")) + Dim CAT_DP_FECHA As String = records(RESULT.Columns.Get("CAT_DP_FECHA")) + Dim CAT_DP_REGALO As String = records(RESULT.Columns.Get("CAT_DP_REGALO")) + Dim CAT_DP_CLASIF As String = records(RESULT.Columns.Get("CAT_DP_CLASIF")) + Dim CAT_DP_PRECIO As String = records(RESULT.Columns.Get("CAT_DP_PRECIO")) + Dim CAT_DP_PRECIO_SIMPTOS As String = records(RESULT.Columns.Get("CAT_DP_PRECIO_SIMPTOS")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_DETALLES_PAQ(CAT_DP_ALMACEN,CAT_DP_ID,CAT_DP_IDPROD,CAT_DP_TIPO,CAT_DP_PZAS,CAT_DP_USUARIO,CAT_DP_FECHA,CAT_DP_REGALO,CAT_DP_CLASIF,CAT_DP_PRECIO,CAT_DP_PRECIO_SIMPTOS) VALUES (?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_DP_ALMACEN,CAT_DP_ID,CAT_DP_IDPROD,CAT_DP_TIPO,CAT_DP_PZAS,CAT_DP_USUARIO,CAT_DP_FECHA,CAT_DP_REGALO,CAT_DP_CLASIF,CAT_DP_PRECIO,CAT_DP_PRECIO_SIMPTOS)) + 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 + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "hist_datos" Then 'query tag + Dim cont As Int = 0 + For Each records() As Object In RESULT.Rows + cont = cont +1 + Dim HVD_CLIENTE As String = records(RESULT.Columns.Get("HVD_CLIENTE")) + Dim HVD_PRONOMBRE As String = records(RESULT.Columns.Get("HVD_PRONOMBRE")) + Dim HVD_CANT As String = records(RESULT.Columns.Get("HVD_CANT")) + Dim HVD_COSTO_TOT As String = records(RESULT.Columns.Get("HVD_COSTO_TOT")) +' Log(cont &" " &HVD_CLIENTE&"--"&HVD_PRONOMBRE&"--"&HVD_CANT&"--"&HVD_COSTO_TOT) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_VENTAS(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT) VALUES (?,?,?,?)", Array As Object (HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT)) + Next + Listo3 =1 + 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 +' If Starter.marcaCel <> "Sony" Then ToastMessageShow("Venta historico Actualizado." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then +' B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "variables" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim Cat_Va_Descripcion As String = records(RESULT.Columns.Get("CAT_VA_DESCRIPCION")) + Dim Cat_Va_Valor As String = records(RESULT.Columns.Get("CAT_VA_VALOR")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object (Cat_Va_Descripcion, Cat_Va_Valor)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "CUESTIONARIO" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim Cat_Va_Valor As String = records(RESULT.Columns.Get("CAT_VALOR")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As Object ("CUESTIONARIO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("CUESTIONARIO", Cat_Va_Valor)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "carga_encuesta" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_EP_ID As String = records(RESULT.COLUMNS.GET("CAT_EP_ID")) + Dim CAT_EP_IDTIPOPREGUNTA As String = records(RESULT.COLUMNS.GET("CAT_EP_IDTIPOPREGUNTA")) + Dim CAT_CE_DESCRIPCION As String = records(RESULT.COLUMNS.GET("CAT_CE_DESCRIPCION")) + Dim CAT_EP_PREGUNTA As String = records(RESULT.COLUMNS.GET("CAT_EP_PREGUNTA")) + Dim CAT_EP_RES1_PRED As String = records(RESULT.COLUMNS.GET("CAT_EP_RES1_PRED")) + Dim CAT_EP_RES2_PRED As String = records(RESULT.COLUMNS.GET("CAT_EP_RES2_PRED")) + Dim CAT_EP_RES3_PRED As String = records(RESULT.COLUMNS.GET("CAT_EP_RES3_PRED")) + Dim CAT_EP_ORDEN_PREGUNTA As String = records(RESULT.COLUMNS.GET("CAT_EP_ORDEN_PREGUNTA")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_ENCUESTA_PREGUNTA (CAT_EP_ID ,CAT_EP_IDTIPOPREGUNTA ,CAT_CE_DESCRIPCION ,CAT_EP_PREGUNTA ,CAT_EP_RES1_PRED ,CAT_EP_RES2_PRED ,CAT_EP_RES3_PRED ,CAT_EP_ORDEN_PREGUNTA ) VALUES (?,?,?,?,?,?,?,?)", Array As Object (CAT_EP_ID ,CAT_EP_IDTIPOPREGUNTA ,CAT_CE_DESCRIPCION ,CAT_EP_PREGUNTA ,CAT_EP_RES1_PRED ,CAT_EP_RES2_PRED ,CAT_EP_RES3_PRED ,CAT_EP_ORDEN_PREGUNTA)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "valida_pedido" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CUANTOSP As Int = records(RESULT.Columns.Get("CUANTOSP")) +' Log(cuantos_pedido) +' Log(CUANTOSP) + If cuantos_pedido < = CUANTOSP Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + S_CP.Text = "INFO OK" + B_OK_PAS.Text = "OK" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info P. Sync Nuevamente" & CUANTOSP & " " & cuantos_pedido, True) + S_CP.Text = "ENVIAR DATOS (K-2)" + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "valida_pedidoc" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CUANTOSC As Int = records(RESULT.Columns.Get("CUANTOSC")) + If cuantos_pedidosc = CUANTOSC Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info C. Sync Nuevamente" & CUANTOSC & " " & cuantos_pedidosc, True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + If RESULT.Tag = "valida_noventa" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CUANTOSN As Int = records(RESULT.Columns.Get("CUANTOSN")) + If cuantos_noventa = CUANTOSN Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info N. Sync Nuevamente" & CUANTOSN & " " & cuantos_noventa, True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + 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 = "ENVIANDO" + 'Log("5") + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + 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 + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + 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 + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + 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 + 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 + Subir.Visible = False + inv.Visible = False + connecta.Visible = False + ToastMessageShow("Ruta invalida." , True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) + 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 + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.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")) + 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 Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = B4XPages.MainPage.reqManager.HandleJob(Job) +' If RESULT.Tag = "folio" Then 'query tag +' For Each records() As Object In RESULT.Rows +' Dim FOLIO As String = records(RESULT.Columns.Get("FOLIO")) +' B4XPages.MainPage.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FOLIO")) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FOLIO",FOLIO)) +' Next +' End If + + If RESULT.Tag = "hist_pro2265" Then 'query tag + Starter.skmt.ExecNonQuery("delete from HIST_PRO2265") + For Each records() As Object In RESULT.Rows + Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PRO2265(H_IDCLIENTE) VALUES (?)", Array As Object (records(RESULT.Columns.Get("HVD_CLIENTE")))) + Next + End If + If RESULT.Tag = "hist_pro3054" Then 'query tag + Starter.skmt.ExecNonQuery("delete from HIST_PRO3054") + For Each records() As Object In RESULT.Rows + Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PRO3054(H_IDCLIENTE) VALUES (?)", Array As Object (records(RESULT.Columns.Get("HVD_CLIENTE")))) + Next + End If + If RESULT.Tag = "hist_pro3055" Then 'query tag + Starter.skmt.ExecNonQuery("delete from HIST_PRO3055") + For Each records() As Object In RESULT.Rows + Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PRO3055(H_IDCLIENTE) VALUES (?)", Array As Object (records(RESULT.Columns.Get("HVD_CLIENTE")))) + Next + End If + If RESULT.Tag = "traeVersion" Then 'query tag + For Each records() As Object In RESULT.Rows + Private version As String = records(RESULT.Columns.Get("CAT_AL_VERSION")) + Private actualizarAplicacion As String = records(RESULT.Columns.Get("CAT_AL_ACTUALIZACION")) + Next + Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("VERSION_NUEVA")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("VERSION_NUEVA", version)) + Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FORZAR_ACTUALIZACION")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FORZAR_ACTUALIZACION", actualizarAplicacion)) + Log($">>>> GUARDAMOS NUEVA VERSION: ${version}, ${actualizarAplicacion}"$) + End If + If RESULT.Tag = "tipoVenta" Then 'query tag + For Each records() As Object In RESULT.Rows + Private tipoVenta As String = records(RESULT.Columns.Get("CAT_RU_CATEGORIA")) + Next + Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("TIPO_VENTA")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("TIPO_VENTA", tipoVenta)) + Log($">>>> GUARDAMOS TIPO_VENTA: ${tipoVenta}"$) + End If + If RESULT.Tag = "planLealtad" Then 'query tag + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM PLAN_LEALTAD WHERE DESCARGADO = 1") + For Each records() As Object In RESULT.Rows + Dim PL_CLIENTE As String = records(RESULT.Columns.Get("TMP_PL_CLIENTE")) + Dim PL_BANDERA As String = records(RESULT.Columns.Get("TMP_PL_BANDERA")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PLAN_LEALTAD(PL_CLIENTE, PL_BANDERA, DESCARGADO) VALUES (?,?,?)", Array As Object (PL_CLIENTE, PL_BANDERA,1)) + Next + End If + + If RESULT.Tag = "coments" Then 'query tag + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM COMENTARIOS WHERE DESCARGADO = 1") + For Each records() As Object In RESULT.Rows + Dim COMENTARIO As String = records(RESULT.Columns.Get("TMP_COM_COMENTARIO")) + Dim CLIENTECOM As String = records(RESULT.Columns.Get("TMP_COM_CLIENTE")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO COMENTARIOS(COMENTARTIO, CLIENTE, DESCARGADO) VALUES (?,?,?)", Array As Object (COMENTARIO, CLIENTECOM,1)) + Next + End If + + End If + End If + If B4XPages.MainPage.reqManager.reqsList.IsInitialized Then + LogColor($"REQUESTS: ${B4XPages.MainPage.reqManager.reqsList.Size}"$, Colors.red) +' Log($"CARGA=${CARGA}"$) + If B4XPages.MainPage.reqManager.reqsList.Size = 0 And CARGA = "SUBIR" Then + t1.Enabled = False + t1.Initialize("T1", 3000) ' 1000 = 1 second +' Log(999) + If contadorSubir < 3 Then ' Si no hacen click en el boton de OK despues de "Enviar", se puede quedar en loop el timer T1. + t1.Enabled = True + Log("TIMER ENABLED") + End If + contadorSubir = contadorSubir + 1 + End If + End If + Job.Release +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + 'Return True to close, False to cancel + If SCROLL_RESDIA.Visible Then + SCROLL_RESDIA.Visible = False + B_OK_RES_Click + Return False + Else + B4XPages.ShowPage("login") + End If + Return False +End Sub + +Sub connecta_Click + Log(">>> REVISAMOS ACTUALIZACION") + Private revisaActualizacion As Map = Subs.revisaForzarActualizacion + Log(revisaActualizacion) + If E_RUTA2.Text = e_ruta.Text And e_ruta.Text <> "" Then + Msgbox("La ruta principal y la de suplencia NO pueden ser la misma.","ERROR") + Else + If e_ruta.Text = "KMTS1" Then + cargar.Visible = True + Subir.Visible = True + e_ruta.Text = "" + B4XPages.MainPage.reqManager.Initialize(Me, Starter.server) + Else + If revisaActualizacion.Get("forzar") = 1 Then ' Hay actualización, la forzamos. +' Starter.newApp.appLink = $"https://keymon.lat/movil/guna/GP_${revisaActualizacion.Get("nuevaVersion")}.apk"$ 'Liga a nuevo apk +' Starter.newApp.newMsg = "Nueva version" 'Texto de que hay actualizacion +' Starter.newApp.okMsg = "Aceptar" 'Texto de app al corriente +' Starter.newApp.version = revisaActualizacion.Get("nuevaVersion") 'Version actual + l_forzarActualizacion.TextColor = Colors.black + l_forzarActualizacion.Text = "Hay una nueva actualización para la aplicación, por favor revise que tenga DATOS y espere mientras se descarga." + p_transparenteActualizacion.Visible = True + p_transparenteActualizacion.BringToFront + Starter.nuevoLink = $"https://keymon.lat/movil/guna/GP_${revisaActualizacion.Get("nuevaVersion")}.apk"$ + Log("Descargar: GP_" & Starter.newApp.appLink) + CallSubDelayed(appUpdater, "download_newApk") + else if revisaActualizacion.Get("forzar") = 2 Then ' No hay datos, regresamos al login y borramos usuario par que traiga los datos. + l_forzarActualizacion.TextColor = Colors.red + l_forzarActualizacion.Text = "Es necesaria una conexión a internet, por favor revise su conexión y vuelva a intentar." + p_transparenteActualizacion.Visible = True + p_transparenteActualizacion.BringToFront + Sleep(4500) + Starter.skmt.ExecNonQuery("delete from usuarioa") + p_transparenteActualizacion.Visible = False + B4XPages.ShowPage("Login") + Else ' No hay actualización, continuamos con la carga. + Try + Private i As Int = Regex.Replace("[^0-9.]", e_ruta.text,"") 'Quitamos alfanumericos y convertimos en entero. + Log($"|${i}|"$) + e_ruta.text = i + p_transparenteActualizacion.Visible = False + B4XPages.MainPage.reqManager.Initialize(Me, Starter.server) + teclado.HideKeyboard + connecta1 = connecta1 + 1 + 'imei = p.GetDeviceId + conn = "1" + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_version_GV2" + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "version") + ' Cuando nos conectamos verificamos que el usuario guardado en BD sea VALIDO. + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO, PASS from usuarioa") + c.Position=0 + If c.RowCount > 0 And c.GetString("USUARIO") <> "KMTS1" Then + Private usrT As String = c.GetString("USUARIO") + Private passT As String = c.GetString("PASS") + cmd.Initialize + cmd.Name = "select_usuario_guna_GV2_10" + cmd.Parameters = Array As Object(usrT, passT) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "usuarioA") + End If + c.Close + If e_ruta.Text = "BERNA1" Then + cargar.Visible = True + Subir.Visible = True + e_ruta.Text = "" + End If + ToastMessageShow("Validando Conexión." , True) + If connecta1 / 2 = 1 Then + 'SERVER = "http://177.244.63.54:1782" + 'SERVER = "http://keymon.com.mx:1782" + 'SERVER = "http://201.99.139.28:1782" +' B4XPages.MainPage.SERVER = "http://187.189.244.154:1782" +' SERVER = "http://10.0.0.205:1782" + B4XPages.MainPage.reqManager.Initialize(Me, Starter.server) + Else + 'SERVER = "http://keymon.com.mx:1782" + 'SERVER = "http://201.99.139.28:1782" + 'SERVER = "http://177.244.63.54:1782" +' B4XPages.MainPage.SERVER = "http://187.189.244.154:1782" +' SERVER = "http://10.0.0.205:1782" + B4XPages.MainPage.reqManager.Initialize(Me, Starter.server) + End If + Catch + Log(LastException) + End Try + + + End If + End If + End If + +End Sub + +Sub BUSCA_Click + B4XPages.ShowPage("TicketsDia") +End Sub + +Sub b_mapa_Click + 'Log("mapClic") + B4XPages.GetPage("Mapas") +End Sub + +Sub t2_tick +' e_ruta.Text = "" +Log("--------> BORRAMOS") + If B4XPages.MainPage.productos.lv_catalogos.IsInitialized Then B4XPages.MainPage.productos.lv_catalogos.Clear + 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 COMENTARIOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PLAN_LEALTAD") + B4XPages.MainPage.skmt.ExecNonQuery("delete from clie_act") + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info3") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod2") + 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_ENCUESTA2") + 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 ENCUESTA_MODULO1") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM ENCUESTA_MODULO2") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM ENCUESTA_MODULO3") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM ENCUESTA_MODULO4") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM ENCUESTA_MODULO5") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM BITACORAGPS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM RUTA_SUPLENCIA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM TICKET_IMPRESO") + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("CARGA_DIA")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("pasword")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("LATITUD")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("LONGITUD")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("RUTA")) +' B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("FORZAR_ACTUALIZACION")) +' B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?",Array As String("VERSION_NUEVA")) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE GPS SET HABILITADO = (?)",Array As Object(0)) + Subs.deleteFolder(Starter.fFileProvider.SharedFolder) +' B4XPage_Appear + E_RUTA2.Visible = False +' E_RUTA2.Text = "" + b_abordo.Visible = False + cargar.Visible = False + Subir.Visible = False + connecta.Visible = True +' B4XPages.ShowPage("Login") +' If PB2.Progress = 0 Then +' S_CP.Text = "ENVIAR DATOS (K-1)" +' End If +' img2.Visible=False + t2.Enabled = False + e_ruta.Text = "" + B4XPage_Appear +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 borrarán.", "Cierre", "Si", "", "No", LoadBitmap(File.DirAssets, "alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + bitacora.mandaBitacora(Subs.fechanormal(DateTime.Now), usuario, Subs.traeAlmacen, Subs.traeRuta, "Fin Día", "", Subs.fechanormal(DateTime.Now), Subs.fechanormal(DateTime.Now), B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, "2", "", "", "") + Label22.Visible = False + l_rutasuplencia.Visible = False + l_rutasuplencia.Text = "" + b_abordo.Visible = False + t2.Initialize("t2", 1000) ' 1000 ms = 1 segundo + t2.Enabled = True + 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_ruta.Text = "" + E_RUTA2.Visible = True + p_ruta2.Visible = True + p_somvra_2.Visible = False + 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_gunaprod2") + 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_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprod") + cmd.Initialize + cmd.Name = "select_cat_gunaprod2_GV2" + cmd.Parameters = Array As Object(ALMACEN, e_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprod2") + cmd.Initialize + cmd.Name = "select_cat_paquetes_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "gunaprodp") + + cmd.Initialize + cmd.Name = "select_cat_detallepa_GV2" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "detallepaq") + + cargar.Visible = False + 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 +' If CARGA = "SUBIR" Then + cmd.Initialize + cmd.Name = "select_cuantos_pedido_GV2" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "valida_pedido") + + cmd.Initialize + cmd.Name = "select_cuantos_noventa_GV2" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "valida_noventa") + + cmd.Initialize + cmd.Name = "select_cuantos_pedidoc_GV2" + 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 + Log("TIMER DISABLED") + img2.Visible=False + t1.Enabled = False +' CARGA = "" +' End If +End Sub + +Sub B_OK_PAS_Click + If CARGA = "SUBIR" And S_CP.Text = "INFO OK" Then + P1.Visible = False + Btn_Ubicar.Visible=True + 'trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + CARGA = "" +' Subs.panelVisible(p_principal, 0, 0) + E_RUTA2.Text = "" + e_ruta.Text = "" + Label4.Visible = True + l_ruta.Visible = True + B4XPage_Appear + Else If CARGA = "SUBIR" And S_CP.Text = "ERROR" Then + Msgbox("Tiene que subir de nuevo la información","Atención") 'ignore + P1.Visible = False + ' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False +' Subs.panelVisible(p_principal, 0, 0) + Else if CARGA = "SUBIR" And S_CP.Text <> "INFO OK" Then + RES = Msgbox2("Seguro que desa abortar el proceso","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + P1.Visible = False +' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False +' Subs.panelVisible(p_principal, 0, 0) + ExitApplication + End If + End If + If CARGA = "CARGAR" And S_CP.Text = "LISTO" And S_CC.Text = "LISTO" And S_CH.Text = "LISTO" Then + P1.Visible = False + Btn_Ubicar.Visible=True + 'trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + + Label4.Visible = True + l_ruta.Visible = True + B4XPage_Appear +' Subs.panelVisible(p_principal, 0, 0) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String("CARGA_DIA")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("CARGA_DIA",1)) + If E_RUTA2.Visible = True Then + bitacora.mandaBitacora(Subs.fechanormal(DateTime.Now),usuario,Subs.traeAlmacen, Subs.traeRuta,"Carga día suplencia", "",Subs.fechanormal(DateTime.Now),Subs.fechanormal(DateTime.Now),B4XPages.MainPage.lat_gps,B4XPages.MainPage.lon_gps,"2","","", "") + Else + bitacora.mandaBitacora(Subs.fechanormal(DateTime.Now),usuario,Subs.traeAlmacen, Subs.traeRuta,"Carga día", "",Subs.fechanormal(DateTime.Now),Subs.fechanormal(DateTime.Now),B4XPages.MainPage.lat_gps,B4XPages.MainPage.lon_gps,"2","","", "") + End If + Dim c11 As Cursor = Starter.skmt.ExecQuery("Select PE_PRONOMBRE, PE_PROID, PE_CANT FROM PEDIDO WHERE PE_FOLIO = 'PREVENTA'") + If c11.RowCount > 0 Then + For i = 0 To c11.RowCount - 1 + c11.Position = i + Starter.skmt.ExecNonQuery($"UPDATE CAT_GUNAPROD SET CAT_GP_ALMACEN = CAT_GP_ALMACEN - ${c11.GetString("PE_CANT")} WHERE CAT_GP_ID = '${c11.GetString("PE_PROID")}'"$) + Next + End If + c11.Close + + Dim c12 As Cursor = Starter.skmt.ExecQuery("Select PE_PRONOMBRE, PE_PROID, PE_CANT FROM PEDIDO WHERE PE_FOLIO = 'ABORDO'") + If c12.RowCount > 0 Then + For i = 0 To c12.RowCount - 1 + c12.Position = i + Starter.skmt.ExecNonQuery($"UPDATE CAT_GUNAPROD SET CAT_GP_ALMACEN = CAT_GP_ALMACEN - ${c12.GetString("PE_CANT")} WHERE CAT_GP_ID = '${c12.GetString("PE_PROID")}'"$) + Next + End If + c12.Close + + Dim c13 As Cursor = Starter.skmt.ExecQuery("Select PE_PRONOMBRE, PE_PROID, PE_CANT FROM PEDIDO WHERE PE_FOLIO = 'VENTA'") + If c13.RowCount > 0 Then + For i = 0 To c13.RowCount - 1 + c13.Position = i + Starter.skmt.ExecNonQuery($"UPDATE CAT_GUNAPROD2 SET CAT_GP_ALMACEN = CAT_GP_ALMACEN - ${c13.GetString("PE_CANT")} WHERE CAT_GP_ID = '${c13.GetString("PE_PROID")}'"$) + Next + End If + c13.Close + checaPedido + Else if CARGA = "CARGAR" And (S_CP.Text <> "LISTO" Or S_CC.Text <> "LISTO" Or S_CH.Text <> "LISTO") Then + RES = Msgbox2("Seguro que desa abortar el proceso","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + P1.Visible = False +' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False +' Subs.panelVisible(p_principal, 0, 0) + B4XPage_Appear + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info3") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cod_result") + B4XPages.MainPage.skmt.ExecNonQuery("delete from hist_gest") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + B4XPages.MainPage.skmt.ExecNonQuery("delete from telefonos") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VENTAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_CLIENTE_CANT_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROMOS_COMP") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_VERIFICACION") + ExitApplication + End If + End If + If Subs.traeTipoVentaDeBD = "VENTA" Or Subs.traeTipoVentaDeBD = "ABORDO" Then + If l_ruta.Text <> "0" Then + Log(888 & "|" & l_ruta.Text & "|") + b_abordo.Visible = False + End If + Else + b_abordo.Visible = False + End If +End Sub + +Sub NUEVO_Click + B4XPages.ShowPage("NuevoCliente") +End Sub + +Sub B_OK_RES_Click + ' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel4.Visible = False + SCROLL_RESDIA.Visible = False + Btn_Ubicar.Visible=True + p_principal.Visible = True +End Sub + +Sub Resumen_Click + P_RESUMEN.Visible = True + +' NUEVO.Visible =False +' BUSCA.Visible=False +' connecta.Visible=False +' Subir.Visible=False +' cargar.Visible=False +' Resumen.Visible= False +End Sub + +Sub P_RESUMEN_click + +End Sub + +Sub CARGA_Click + B4XPages.ShowPage("Productos") +End Sub + +Sub resdia_Click +' p_principal.Visible = False + Btn_Ubicar.Visible=False + SCROLL_RESDIA.Visible = True + SCROLL_RESDIA.Panel.LoadLayout("RESDIA") + SCROLL_RESDIA.Panel.Height = Panel4.Height + Panel4.Visible = True + + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + Resumen.Visible= False + + d=B4XPages.MainPage.skmt.ExecQuery2("select COUNT(*) AS CUANTOS FROM HIST_ENCUESTA WHERE HE_TIPO = ?", Array As String("TELEFONO")) + d.Position = 0 + l_encuesta.Text = d.GetString("CUANTOS") + d.Close + + L_MARCAS.CLEAR + d=B4XPages.MainPage.skmt.ExecQuery2("select distinct HE_CLIE AS CLIENTE FROM HIST_ENCUESTA WHERE HE_TIPO = ?", Array As String("TELEFONO")) + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + c=B4XPages.MainPage.skmt.ExecQuery2("Select HE_RES from HIST_ENCUESTA where HE_CLIE = ? AND HE_TIPO = ?", Array As String(d.GetString("CLIENTE"), "TELEFONO")) + c.Position = 0 + Dim label1 As Label + label1 = L_MARCAS.TwoLinesLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.Black + Dim Label2 As Label + Label2 = L_MARCAS.TwoLinesLayout.SecondLabel + Label2.TextSize = 13 + Label2.TextColor = Colors.Black + L_MARCAS.AddTwoLines(d.GetString("CLIENTE"),"TELEFONO :" & c.GetString("HE_RES") ) + c.Close + Next + End If + d.Close + + c=B4XPages.MainPage.skmt.ExecQuery2($"Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_TIPO = ? )"$, Array As String("RTEC")) + c.Position = 0 + l_monto_k.Text = c.GetString("MONTO_DIA") + If l_monto_k.Text = "null" Then + l_monto_k.Text = "0" + End If + c.Close + + c=B4XPages.MainPage.skmt.ExecQuery2($"Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_TIPO = ? )"$, Array As String("PING")) + c.Position = 0 + l_monto_kp.Text = c.GetString("MONTO_DIA") + If l_monto_kp.Text = "null" Then + l_monto_kp.Text = "0" + End If + c.Close + +' c=skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = ? )", Array As String("SALTY SNACKS")) +' c.Position = 0 +' l_monto_ks.Text = c.GetString("MONTO_DIA") +' If l_monto_ks.Text = "null" Then +' l_monto_ks.Text = "0" +' End If + ' +' c.Close + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 ") + c.Position = 0 + l_monto_ks.Text = c.GetString("MONTO_DIA") + If l_monto_ks.Text = "null" Then + l_monto_ks.Text = "0" + End If + c.Close + + 'AQUI CAMBIAR + Private s3 As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select * FROM PEDIDO WHERE PE_RECALCULO <> ? OR PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL",Array As String("","null")) + LogColor(s3.RowCount,Colors.Yellow) + If s3.RowCount > 0 Then + + Private s As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE (PE_RECALCULO = ? or PE_RECALCULO = ? or PE_RECALCULO IS NULL)",Array As String("","null")) + s.Position=0 + Private s5 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(PE_RECALCULOTOT),0) as TOTAL_CLIE FROM PEDIDO WHERE (PE_RECALCULO <> ? or PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL)",Array As String("","null")) + s5.Position = 0 + +' l_ru_pri.Text = NumberFormat2(s.GetString("TOTAL_CLIE") + s5.GetString("TOTAL_CLIE"),0,2,2,False) + + L_REAL.Text =NumberFormat2(s.GetString("TOTAL_CLIE") + s5.GetString("TOTAL_CLIE"),0,2,2,False) + s.Close + + Else If s3.RowCount = 0 Then + Private s As Cursor=B4XPages.MainPage.skmt.ExecQuery("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO ") + s.Position=0 + +' l_ru_pri.Text =NumberFormat2(s.GetString("TOTAL_CLIE"),0,2,2,False) + + L_REAL.Text =NumberFormat2(s.GetString("TOTAL_CLIE"),0,2,2,False) + + s.Close + End If + + 'Prueba0 + Private ru_o As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT IFNULL(PE_RUTA, 0) AS PE_RUTA, IFNULL(SUM(PE_COSTO_TOT), 0) AS TOTAL_CLIE FROM PEDIDO LEFT JOIN RUTA_SUPLENCIA ON PE_RUTA = RS_RUTA WHERE RS_RUTA IS NULL", Null) + ru_o.Position=0 + Log("------------->RutaOriginal "&ru_o) + If ru_o.GetString("PE_RUTA") = 0 Then + Label2.Text = "N/A" + Else if ru_o.RowCount >=1 Then + Private rutOr As String = ru_o.GetString("PE_RUTA") + Label2.Text = "Ruta " & rutOr + l_ru_pri.Text = NumberFormat2(ru_o.GetDouble("TOTAL_CLIE"), 0, 2, 2, False) + End If + ru_o.Close + + 'Prueba1 + Private ru_s As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT IFNULL(PE_RUTA, 0) As PE_RUTA, IFNULL(SUM(PE_COSTO_TOT), 0) As TOTAL_CLIE FROM PEDIDO LEFT JOIN RUTA_SUPLENCIA ON PE_RUTA = RS_RUTA WHERE RS_RUTA Is Not Null", Null) + ru_s.Position = 0 + If ru_s.GetString("PE_RUTA") = 0 Then + Label4.Text = "N/A" + Else + Private RuSu As String = ru_s.GetString("PE_RUTA") + Label4.Text = "Ruta " & RuSu + ru_s.Position = 0 + l_ru_sup.Text = NumberFormat2(ru_s.GetDouble("TOTAL_CLIE"), 0, 2, 2, False) + End If + ru_s.Close + + Dim cuantos_obj As String + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) AS TOTAL from HIST_MARCAS_CUOTAS ") + c.Position = 0 + cuantos_obj = c.GetString("TOTAL") + c.Close + + If cuantos_obj > 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("Select SUM(HMC_TOTAL) AS TOTAL from HIST_MARCAS_CUOTAS ") + c.Position = 0 + If c.GetString("TOTAL") > 0 Then + L_NES.Text = Round(c.GetString("TOTAL") / 25) + Else + L_NES.Text = c.GetString("TOTAL") + End If + c.Close + End If +' L_REAL.Text = l_monto_ks.Text + L_ALCANCE.Text = Round2((L_NES.Text / L_REAL.Text + 1),2) + L_VPLAN.Text = l_porvisitar.Text + L_VREAL.Text = L_CUANTOST.text + L_EFEC_VIS.Text = Round2(L_VREAL.text / L_VPLAN.Text,2) + L_VISITCC.Text = l_cuantosc.text + L_EFEC_PV.Text = Round2(L_VISITCC.Text / L_VREAL.Text,2) + L_EFEC_PURA.Text = Round2(L_VISITCC.Text / L_VPLAN.Text,2) + L_LIN_TICK.Text = LPT + If l_monto_ks.Text <> "0" Then + c=B4XPages.MainPage.skmt.ExecQuery2("Select COUNT(DISTINCT(PE_CLIENTE)) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = ? ", Array As String(ALMACEN)) + c.Position = 0 + L_CTE_PROMO.Text = c.GetString("CUANTOS") + c.Close + d=B4XPages.MainPage.skmt.ExecQuery2($"Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_TIPOPROD = ?) "$, Array As String("PRIORITARIO")) + d.Position = 0 + '/////////////////////////////////////////////////////////////////////////////// + '//////////////////////////// ULTIMA LINEA ANTES DEL ERROR ////////////////// + '////////// java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference + ' + '/// Al parecer d.GetString("MONTO_DIA") regresa null y la funcion numberFormat truena + '///////////////////////////////////////////////////////////////////////////////// + 'Log("|"&d.GetString("MONTO_DIA")&"|") + 'L_PRIO.Text = NumberFormat(d.GetString("MONTO_DIA"),0,2) + L_PRIO.Text = d.GetString("MONTO_DIA") + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery2($"Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_TIPOPROD = ?) "$, Array As String("ESTRATEGICO")) + d.Position = 0 + L_SECUND.Text =d.GetString("MONTO_DIA") + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery2($"Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_TIPOPROD = ?) "$, Array As String("COMPLEMENTARIO")) + d.Position = 0 + L_COMP.Text =d.GetString("MONTO_DIA") + d.Close + Else + L_PRIO.Text = "0" + L_SECUND.Text = "0" + L_COMP.Text = "0" + End If + + c=B4XPages.MainPage.skmt.ExecQuery("Select COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID ") + c.Position = 0 + If c.GetString("CUANTOS") > 0 Then + d=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID ") + d.Position = 0 + L_CTE_PROMO.Text = d.GetString("CUANTOS") + d.Close + L_REDEN_PROMO.TEXT = Round2(L_VISITCC.Text / L_CTE_PROMO.Text,2) + Else + L_CTE_PROMO.Text = 0 + L_REDEN_PROMO.Text = 0 + End If + c.Close + d=B4XPages.MainPage.skmt.ExecQuery("Select COUNT(*) AS CUANTOS FROM PEDIDO ") + d.Position = 0 + L_LIN_TICK.Text = Round2(d.GetString("CUANTOS") / L_VISITCC.Text,2) + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from HIST_CUOTAS ") + d.Position = 0 + If d.GetString("CUANTOS") > 0 Then + ' c=skmt.ExecQuery("Select HC_CUOTA1,HC_CUOTA2,HC_CUOTA3 from HIST_CUOTAS ") + ' c.Position = 0 + ' l_monto_c1.Text = Round( c.GetString("HC_CUOTA1") / 6) + ' l_monto_c2.Text = Round(c.GetString("HC_CUOTA2") / 6) + ' l_monto_c3.Text = Round(c.GetString("HC_CUOTA3") / 6) + ' c.Close + Else + l_monto_c1.Text = 4000 + l_monto_c2.Text = 2000 + l_monto_c3.Text = 1000 + End If + d.Close +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 + StartActivity(MAPA_RUTAS) +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 + +Sub e_ruta2_TextChanged (Old As String, New As String) +' Dim validChars As String ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 " +' 'Log("Antes: " & Old & " | " & New) + If New = e_ruta.text And New <> "" Then + cargar.Enabled = False + ToastMessageShow("Las rutas NO PUEDEN ser iguales!!", False) + Else + cargar.Enabled = True + End If +End Sub + +Sub B_COMM_Click + Btn_Ubicar.Visible=False + SCROLL_RESDIA.Visible = True + SCROLL_RESDIA.Panel.LoadLayout("COMIS") + SCROLL_RESDIA.Panel.Height = Panel_C.Height + Panel4.Visible = False + Panel_C.Visible = True + Panel_C.Width = Root.Width * 0.90 + + +' trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + Resumen.Visible= False + + If l_ruta.Text <> 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("Select HCM_TOTAL_V, HCM_TOTAL_VIVE, HCM_TOTAL_GUNA, HCM_TOTAL_BEB from HIST_COMISIONES_MOVIL") + If c.RowCount > 0 Then + c.Position = 0 + L_TOTAL_BA.Text = c.GetString("HCM_TOTAL_BEB") + L_TOTAL_GUNA.Text = c.GetString("HCM_TOTAL_GUNA") + L_TOTAL_MM.Text = c.GetString("HCM_TOTAL_V") + L_TOTAL_VIVE.Text = c.GetString("HCM_TOTAL_VIVE") + c.Close + L_TOTAL_COMIS.Text = 0 + End If + Else + L_TOTAL_BA.Text = 0 + L_TOTAL_GUNA.Text = 0 + L_TOTAL_MM.Text = 0 + L_TOTAL_VIVE.Text = 0 + L_TOTAL_COMIS.Text = 0 + End If + +End Sub + +Sub B_OK_COMISS_Click + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel_C.Visible = False + SCROLL_RESDIA.Visible = False + Btn_Ubicar.Visible=True + p_principal.Visible = True + SCROLL_RESDIA.Panel.RemoveAllViews +End Sub + +Sub B_MARCAS_Click + SCROLL_RESDIA.Visible = True + p_sombra.Width = Root.Width + p_sombra.Height = Root.Height + Subs.panelVisible(p_sombra, 0, 0) + p_marcasRes.Visible = True + p_marcasRes.Height = Root.Height * 0.8 + p_marcasRes.BringToFront +' Subs.panelVisible(p_marcasRes,0,0) + pnlTitle.Visible = False +' pnlTitle.SetLayoutAnimated(0, 5, 10, CLV1.AsView.Width-12, TitleHeight + DividerHeight - 15) +' pnlTitle.LoadLayout("CellTitle") +' pnlTitle.Height = 20dip + B_OK_PANEL5.Top = p_marcasRes.Height - (B_OK_PANEL5.Height + 20) + c=B4XPages.MainPage.skmt.ExecQuery("Select CAT_GP_CLASIF, SUM(TOTAL) AS TOTAL FROM TOTAL_MARCAS GROUP BY CAT_GP_CLASIF") + CLV1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount - 1 + c.Position=i + AddTitle(c.GetString("CAT_GP_CLASIF")) + If c.GetString("CAT_GP_CLASIF") = "PROMOS" Then + d=B4XPages.MainPage.skmt.ExecQuery("SELECT SUM(PE_CANT) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID") + d.Position=0 + CLV1.AddTextItem("CANTIDAD DE PROMOS = " & d.GetString("CUANTOS"),"1") + d.Close + Else + f=B4XPages.MainPage.skmt.ExecQuery2("select COUNT(*) AS CUANTOS from HIST_MARCAS_CUOTAS where HMC_MARCA = ?", Array As String(c.GetString("CAT_GP_CLASIF"))) + f.Position=0 + If f.GetString("CUANTOS") > 0 Then + e=B4XPages.MainPage.skmt.ExecQuery2("select HMC_MARCA, HMC_TOTAL from HIST_MARCAS_CUOTAS where HMC_MARCA = ?", Array As String(c.GetString("CAT_GP_CLASIF"))) + e.Position=0 + d=B4XPages.MainPage.skmt.ExecQuery2($"SELECT count(distinct(PE_CLIENTE)) AS CUANTOS FROM PEDIDO WHERE PE_PROID in (select CAT_GP_ID from ${Subs.traeTablaProds(tipo_venta)} WHERE CAT_GP_CLASIF =?)"$, Array As String (c.GetString("CAT_GP_CLASIF"))) + d.Position=0 + CLV1.AddTextItem("TOTAL PREVENTA = $" & c.GetString("TOTAL"),"1") + CLV1.AddTextItem("META MES= $" & e.GetString("HMC_TOTAL"),"1") + CLV1.AddTextItem("META DIA= $" & Round(e.GetString("HMC_TOTAL") / 25),"1") + CLV1.AddTextItem("FALTA DIA= $" & Round((e.GetString("HMC_TOTAL") / 25) - c.GetString("TOTAL")) ,"1") + CLV1.AddTextItem("CLIENTES = " & d.GetString("CUANTOS"),"1") + d.Close + e.Close + Else + d=B4XPages.MainPage.skmt.ExecQuery2($"SELECT count(distinct(pe_cliente)) AS CUANTOS FROM PEDIDO WHERE PE_PROID in (select CAT_GP_ID from ${Subs.traeTablaProds(tipo_venta)} WHERE CAT_GP_CLASIF =?)"$, Array As String (c.GetString("CAT_GP_CLASIF"))) + d.Position=0 + CLV1.AddTextItem("TOTAL PREVENTA = $" & c.GetString("TOTAL"),"1") + CLV1.AddTextItem("M E T A = $" & "1000","1") + CLV1.AddTextItem("FALTA = $" & (1000 - c.GetString("TOTAL")) ,"1") + CLV1.AddTextItem("CLIENTES = " & d.GetString("CUANTOS"),"1") + d.Close + End If + f.Close + End If + Next + End If + c.Close +' c=B4XPages.MainPage.skmt.ExecQuery("Select HMC_MARCA, HMC_TOTAL from HIST_MARCAS_CUOTAS where HMC_MARCA in (SELECT CAT_GP_CLASIF FROM TOTAL_MARCAS )") +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' AddTitle(c.GetString("HMC_MARCA")) +' CLV1.AddTextItem("TOTAL PREVENTA = $ 0.00","1") +' CLV1.AddTextItem("M E T A = $" & C.GetString("HMC_TOTAL"),"1") +' CLV1.AddTextItem("CLIENTES = 0","1") +' Next +' End If +' c.Close +End Sub + +Sub AddTitle (Title As String) + Dim p_marcas As B4XView = xui.CreatePanel("") + p_marcas.SetLayoutAnimated(0, 0, 0, CLV1.AsView.Width, TitleHeight) + p_marcas.LoadLayout("CellTitle") + lblTitle.Text = Title + Dim td As TitleData + td.Title = Title + CLV1.Add(p_marcas, td) +End Sub + +Sub B_OK_PANEL5_Click + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel4.Visible = False + SCROLL_RESDIA.Visible = False + p_marcasRes.Visible = False + p_sombra.Visible = False + Btn_Ubicar.Visible=True + p_principal.Visible = True +End Sub + +Sub e_ruta_Click + Private revisaActualizacion As Map = Subs.revisaForzarActualizacion + Log("revisaActualizacion = " & revisaActualizacion) + If revisaActualizacion.Get("forzar") = 2 Then + LogColor("No hay info de versión para actualizar en CAT_VARIABLES, traemos la información!", Colors.red) + cmd.Initialize + cmd.Name = "selectVersionAppGuna" + cmd.Parameters = Array As Object(ALMACEN) + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "traeVersion") + 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_marcasRes_Click + +End Sub + +Private Sub p_sombra_Click + +End Sub + +Private Sub p_transparenteActualizacion_Click + +End Sub + +Private Sub b_abordo_Click + Starter.skmt.ExecNonQuery($"delete from cuentaa"$) + Starter.skmt.ExecNonQuery($"insert into cuentaa (cuenta) values ('0')"$) + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub P1_Click + +End Sub + +Private Sub b_clientesvisitados_Click + tickets_dia_Click +End Sub + +Private Sub b_ubicar_Click + Btn_Ubicar_Click +End Sub + +Private Sub b_nuevocliente_Click + nvo_cliente_Click +End Sub + +Private Sub b_hacerpedido_Click + hacer_ped_Click +End Sub + +Private Sub b_resdia_Click + resdia_Click +End Sub + +Sub checaPedido + Private c As Cursor = Starter.skmt.ExecQuery("SELECT PC_CLIENTE FROM PEDIDO_CLIENTE") + If c.RowCount > 0 Then + Starter.skmt.ExecNonQuery("Update kmt_info3 set gestion = 2 WHERE CAT_CL_CODIGO IN (SELECT PC_CLIENTE FROM PEDIDO_CLIENTE)") + End If + Private c As Cursor = Starter.skmt.ExecQuery("SELECT NV_CLIENTE FROM NOVENTA") + If c.RowCount > 0 Then + Starter.skmt.ExecNonQuery("Update kmt_info3 set gestion = 3 WHERE CAT_CL_CODIGO IN (SELECT NV_CLIENTE FROM NOVENTA)") + End If +End Sub \ No newline at end of file diff --git a/B4A/C_Productos.bas b/B4A/C_Productos.bas new file mode 100644 index 0000000..6afaba5 --- /dev/null +++ b/B4A/C_Productos.bas @@ -0,0 +1,2877 @@ +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 ruta As String +' Dim q_buscar As String +' Dim forzarbusqueda As Boolean = False +' Dim skmt As SQL +' Dim c As Cursor +' Dim c2 As Cursor +' Dim C3 As Cursor +' Dim s As Cursor +' Dim lv_catalogos As ListView +' Dim lv_promos As ListView +' Dim entro As String +' Dim gest As Button +' Dim lfila As Label +' Dim marca As String +' Dim tipo As String +' Dim subtipo As String +' Private BUSCA As EditText +' Dim ya_entro As String +' Dim TIENE_PROMOS As String +' Dim RES As String +' Dim S1 As Cursor +' Dim bmp As Bitmap +' Dim ciclo As String +' Private b_qr As Button +' Private p_productos As Panel +' Dim clv_productos As CustomListView +' Private ImageView1 As ImageView +' Private Panel3 As Panel +' Private p_prods As Panel +' Private i_prod As ImageView +' Private l_prodX As Label +' Private b_prodMas As Button +' Private l_pCant As Label +' Private et_pCant As EditText +' Private b_prodMenos As Button +' Dim b_terminar1 As Button +' Dim b_continuar As Button +' Private l_total As Label +' Private l_totProds As Label +' Dim totalProds As Int = 0 +' Dim totalCompra As Float = 0 +' Dim etCantHasFocus As Boolean = False +' Dim prodsMap As Map +' Private l_Cargando As Label +' Private l_info As Label +' Private b_buscar As Button +' Private p_botonesVenta As Panel +' Dim tipo_venta As String = Subs.traeTipoVentaDeBD +' Dim rutaActual As String +' Dim Panel2 As Panel +' +' Dim P_CALATOLOS 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 +'' Activity.RemoveAllViews +' Root.LoadLayout("productos") +' ruta = File.DirInternal +' If File.Exists(ruta, "kmt.db") = False Then +' File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") +' End If +' ciclo = 1 +' l_info.Width = Root.Width * 0.8 +' l_info.Left = (Root.Width/2) - (l_info.Width/2) +'' llenaCatalogo(False) +'End Sub +' +''You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. +' +'Sub B4XPage_Appear +' P_CALATOLOS.Visible = True +' lv_catalogos.Visible = True +' tipo_venta = Subs.traeTipoVentaDeBD +' rutaActual = Subs.traeRuta +' clv_productos.Clear +' LogColor(tipo_venta, Colors.red) +' LogColor(Subs.traeTablaProds(tipo_venta), Colors.red) +' prodsMap.Initialize +' B4XPages.MainPage.skmt.ExecNonQuery2($"UPDATE ${Subs.traeTablaProds(tipo_venta)} SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?)"$,Array As Object("PRIORITARIO","1")) +' B4XPages.MainPage.skmt.ExecNonQuery2($"UPDATE ${Subs.traeTablaProds(tipo_venta)} SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?)"$,Array As Object("ESTRATEGICO","2")) +' B4XPages.MainPage.skmt.ExecNonQuery2($"UPDATE ${Subs.traeTablaProds(tipo_venta)} SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?)"$,Array As Object("COMPLEMENTARIO","3")) +' B4XPages.MainPage.skmt.ExecNonQuery2($"UPDATE ${Subs.traeTablaProds(tipo_venta)} SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?)"$,Array As Object("CATALOGO REGULAR","0")) +' B4XPages.MainPage.skmt.ExecNonQuery2($"UPDATE ${Subs.traeTablaProds(tipo_venta)} SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_CLASIF = (?)"$,Array As Object("PROMOS","PROMOS")) +' +'' Private left = (Root.Width/2) - ((clv_productos.AsView.Width)/2) +' clv_productos.GetBase.SetLayoutAnimated(100, 0dip, 140dip, Root.Width, Root.Height * 0.68) 'Cambiamos el tamaño y posición de la lista de productos +' clv_productos.Base_Resize(clv_productos.GetBase.Width, clv_productos.GetBase.Height) 'Cambiamos el tamaño del panel interno de la lista para que ajuste al nuevo tamaño. +'' Log($"ya_entro=${ya_entro}, entro=${entro}"$) +' If B4XPages.MainPage.bTerminarClicked Then +' P_CALATOLOS.Visible = True +' P_CALATOLOS.BringToFront +' lv_catalogos.Visible = True +' lv_promos.Visible = False +' Panel2.Visible = False +' clv_productos.AsView.Visible = False +' B4XPages.MainPage.bTerminarClicked = False +' Log(1) +' End If +' If ya_entro <> "1" Then +' Log("ya_entro <> 1") +' If BUSCA.Text <> "" Then BUSCA.Text ="" +' entro ="3" +' ya_entro = "1" : Log("ya_entro=1") +' lv_catalogos.Clear +' Sleep(100) +' lfila.Text = "CATALOGOS" +' p_productos.Height = Root.Height +' clv_productos.AsView.Visible = False +' P_CALATOLOS.Visible = True +' P_CALATOLOS.BringToFront +' lv_catalogos.Visible = True +' p_botonesVenta.Visible = False +' p_botonesVenta.Top = clv_productos.AsView.top + clv_productos.AsView.Height +' lv_promos.Visible = False +' Panel2.Visible = False +' Log(2) +' End If +' Dim label1 As Label +' label1 = lv_catalogos.SingleLineLayout.Label +' label1.TextSize = 18 +' label1.TextColor = Colors.White +' label1.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) +' lv_catalogos.Clear +' lv_catalogos.AddSingleLine("CATALOGO") +' P_CALATOLOS.Visible = True +' lv_catalogos.Visible = True +'' Panel1.BringToFront +' c = B4XPages.MainPage.skmt.ExecQuery($"select count(*) as hayPromos from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_TIPOPROD = 'PROMOS'"$) +' c.Position = 0 +' If c.GetInt("hayPromos") > 0 Then +' Log(">>>>>>>>>> " & Subs.traeCliente) +' If Not(Subs.traeCliente.StartsWith("N")) And Subs.traeCliente <> "0" Then +' lv_catalogos.AddSingleLine("PROMOS") 'No se venden promos a clientes nuevos. +' End If +' End If +' Subs.SetDivider(lv_catalogos, Colors.White, 2) +' Sleep(100) +' l_total.Visible = False +' l_totProds.Visible = False +' l_total.Left = 5dip +' l_totProds.Width = Root.Width * 0.19 +' l_total.Left = l_totProds.Width + 20 +' l_total.Width = Root.Width * 0.25 +' +'' llenaCatalogo(False) +'End Sub +' +'Sub lv_catalogos_ItemClick (Position As Int, Value As Object) +' clv_productos.AsView.Visible = False +' BUSCA.Text = "" +' Dim cliente As C_Cliente = B4XPages.GetPage("Cliente") +' Log($"value=${Value}"$) +' If Value = "PROMOS" And cliente.cuenta <> "N" Then +' entro = "3" +' marca = "PROMOS" +' tipo = "PROMOS" +' Else if Value = "PROMOS" And cliente.cuenta = "N" Then +' entro = "5" +' B4XPages.ShowPage("Cliente") +' End If +' If Value = "PROMOS" Then +'' If Subs.traemontoprod Then +'' c2 = B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from cat_gunaprod where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD = ? AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) )", Array As String(Value, marca, tipo)) +'' Else +' Private cd As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT HVD_CLIENTE FROM PROMO_ESP WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") +' If cd.RowCount = 0 Then +' LogColor("1- Promos" & " | " & marca & " | " & tipo, Colors.red) +' c2 = B4XPages.MainPage.skmt.ExecQuery2($"Select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, cat_pa_bsegmenta, cat_pa_segmentav from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_TIPOPROD = ? AND CAT_GP_ID NOT IN (SELECT DISTINCT CAT_PE_IDPROMO FROM CAT_PROMO_ESP) AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa))"$, Array As String(Value, marca, tipo)) +' Else If cd.RowCount > 0 Then +' LogColor("2- Promos" & " | " & marca & " | " & tipo, Colors.red) +' c2 = B4XPages.MainPage.skmt.ExecQuery2($"Select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, cat_pa_bsegmenta, cat_pa_segmentav from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_TIPOPROD = ? and CAT_GP_ID <> 'PRO2265' AND CAT_GP_ID NOT IN (SELECT DISTINCT CAT_PE_IDPROMO FROM CAT_PROMO_ESP) AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa))"$, Array As String(Value, marca, tipo)) +' End If +'' End If +' Else +' LogColor("Catalogo", Colors.red) +' c2=B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, CAT_GP_TIPOPROD, CAT_GP_INICIATIVA from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD <> 'PROMOS'"$) +' End If +' If Value = "CATALOGO" Then +' lv_catalogos.Visible = False +' P_CALATOLOS.Visible = False +' lv_promos.Visible = False +' Panel2.Visible = False +'' lv_catalogos.Clear +' lfila.text = "CATALOGO" +'' Dim ins As InputStream +'' Dim bmp As Bitmap +'' Dim jpeg() As Byte +' Log("PGS") +' ProgressDialogShow("Cargando catalogo ...") +' Sleep(100) +' Private inicioContador As String = DateTime.Now +' llenaCatalogo(False) +' clv_productos.AsView.Visible = True +' Log("PGH") +' LogColor("TIEMPO DE PROCESO DEL CATALOGO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red) +' ProgressDialogHide +' c2.Close +' Else +' Log("--PROMOS--") +' clv_productos.AsView.Visible = False +' lv_promos.Visible = True +' Panel2.Visible = True +' lv_catalogos.Visible = False +' P_CALATOLOS.Visible = False +' lv_promos.Clear +' lv_promos.Height = Root.Height * 0.70 +' Panel2.Height = lv_promos.Height +' lv_promos.Width = Root.Width +' Panel2.Width = Root.Width +' Dim label1 As Label +' label1 = lv_promos.TwoLinesLayout.Label +' label1.TextSize = 20 +' label1.TextColor = Colors.White +' Dim label2 As Label +' label2 = lv_promos.TwoLinesLayout.SecondLabel +' label2.TextSize = 20 +' label2.TextColor = Colors.White +' Dim label13 As Label +' label13 = lv_promos.TwoLinesAndBitmap.Label +' label13.TextSize = 20 +' label13.TextColor = Colors.White +' Dim label14 As Label +' label14 = lv_promos.TwoLinesAndBitmap.SecondLabel +' label14.TextSize = 20 +' label14.TextColor = Colors.White +' +' +' +' label1.TextColor = Colors.White +' label1.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) +' label2.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) +' +' lfila.text = "PROMOS" +'' Dim ins As InputStream +'' Dim bmp As Bitmap +'' Dim jpeg() As Byte +' Private yaComproPRO2265 As Boolean = Subs.revisaPRO2265(Subs.traeCliente) +' Private yaComproPRO3054 As Boolean = Subs.revisaPRO3054(Subs.traeCliente) +' Private yaComproPRO3055 As Boolean = Subs.revisaPRO3055(Subs.traeCliente) +' Private tipoCliente = Subs.traeTipoCliente +' If c2.RowCount > 0 Then +' For i=0 To c2.RowCount - 1 +' c2.Position = i +' Private muestraPromo As Boolean = True +' Log($"SEGMENTADA: ${c2.GetString("CAT_PA_BSEGMENTA")}"$) +' If c2.GetInt("CAT_PA_BSEGMENTA") = 1 Then +' LogColor("####### PROMO SEGMENTADA ####", Colors.Blue) +' LogColor($"####### SEGV: ${c2.GetString("CAT_PA_SEGMENTAV")} ####"$, Colors.Blue) +' LogColor($"####### TIPOCLIE: ${tipoCliente} ####"$, Colors.Blue) +' LogColor($"####### ¿ENTRA?: ${c2.GetString("CAT_PA_SEGMENTAV").Contains(tipoCliente)} ####"$, Colors.Blue) +' If Not(c2.GetString("CAT_PA_SEGMENTAV").Contains(tipoCliente)) Then muestraPromo = False +' End If +'' jpeg = c2.GetBlob("CAT_GP_IMG") +'' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +'' bmp.Initialize2(ins) +'' ListView1.AddTwoLinesAndBitmap(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO"),bmp) +' Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), Subs.traeCliente) +' Log($"TM=${tm}"$) +' If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto. +' If yaComproPRO2265 And c2.GetString("CAT_GP_ID") = "PRO3015" Then ' Si la promo es la PRO3015 y ya compro la PRO2265, NO la mostramos. +' LogColor("Ya compro la PRO2265, ya no se muestra la PRO3015", Colors.Red) +' Else +' If (yaComproPRO3054 And c2.GetString("CAT_GP_ID") = "PRO3054") Or _ +' (yaComproPRO3055 And c2.GetString("CAT_GP_ID") = "PRO3055") Then ' Si la promo es la PRO3054 o PRO3055 y ya compro, NO la mostramos. +' LogColor("Ya compro prods de la PRO3054 o PRO3055 o es cliente nuevo, ya no se muestra.", Colors.Red) +' Else +' Log($"################################${CRLF} ${muestraPromo}${CRLF}################################"$) +' If muestraPromo Then lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) +' End If +' End If +' End If +' Next +' End If +' yaComproPRO2265 = False +' c2.Close +' label1.Height = 50dip +' label2.Height = 45dip +' label2.Top = label1.Height +' +' lv_promos.TwoLinesLayout.ItemHeight = 95dip +' Subs.SetDivider(lv_promos, Colors.White, 2) +' End If +' entro = "4" +'' Else If entro = "4" Then +'' Log("Entro = 4") +'' B4XPages.MainPage.skmt.ExecNonQuery("delete from PROID") +'' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROID VALUES (?)", Array As Object(Value)) +'' Dim promos As C_Promos = B4XPages.GetPage("Promos") +'' promos.laPromo = Subs.traeProdIdDeBD.Get("id") +'' promos.elCliente = Subs.traeUsuarioDeBD +'' B4XPages.ShowPage("Promos") +'End Sub +' +'Sub lv_promos_ItemClick (Position As Int, Value As Object) +' clv_productos.AsView.Visible = False +' Dim cliente As C_Cliente = B4XPages.GetPage("Cliente") +'' Log($"Entro=${entro}, value=${Value}, cuenta=${cliente.cuenta}"$) +' LogColor("PROMOS CLIC", Colors.Magenta) +' If Value = "PROMOS" And cliente.cuenta <> "N" Then +' entro = "3" +' marca = "PROMOS" +' tipo = "PROMOS" +' Else if Value = "PROMOS" And cliente.cuenta = "N" Then +' entro = "5" +' B4XPages.ShowPage("Cliente") +' End If +' If entro = "3" Then +' LogColor("Promos YYY", Colors.red) +' c2=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD = ? AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) )"$, Array As String(Value, marca, tipo)) +' clv_productos.AsView.Visible = False +' lv_promos.Visible = True +' Panel2.Visible = True +' lv_catalogos.Visible = False +' P_CALATOLOS.Visible = False +' lv_promos.Clear +' Dim label1 As Label +' label1 = lv_promos.TwoLinesLayout.Label +' label1.TextSize = 13 +' label1.TextColor = Colors.Black +' Dim label2 As Label +' label2 = lv_promos.TwoLinesLayout.SecondLabel +' label2.TextSize = 13 +' label2.TextColor = Colors.Black +' Dim label13 As Label +' label13 = lv_promos.TwoLinesAndBitmap.Label +' label13.TextSize = 13 +' label13.TextColor = Colors.Black +' Dim label14 As Label +' label14 = lv_promos.TwoLinesAndBitmap.SecondLabel +' label14.TextSize = 13 +' label14.TextColor = Colors.Black +' lfila.text = "PROMOS" +'' Dim ins As InputStream +'' Dim bmp As Bitmap +'' Dim jpeg() As Byte +' If c2.RowCount > 0 Then +' For i=0 To c2.RowCount -1 +' c2.Position=i +'' jpeg = c2.GetBlob("CAT_GP_IMG") +'' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +'' bmp.Initialize2(ins) +'' ListView1.AddTwoLinesAndBitmap(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO"),bmp) +' +' Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), Subs.traeCliente) +' If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto. +' lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) +' End If +' Next +' End If +' c2.Close +' +' entro = "4" +' Else If entro = "4" Then +' Log("Entro = 4") +' B4XPages.MainPage.skmt.ExecNonQuery("delete from PROID") +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROID VALUES (?)", Array As Object(Value)) +' Dim promos As C_Promos = B4XPages.GetPage("Promos") +' promos.laPromo = Subs.traePromoIdDeBD.Get("id") +' Log(promos.laPromo) +' promos.elCliente = Subs.traeUsuarioDeBD +' B4XPages.ShowPage("Promos") +' lv_promos.Visible = False +' End If +'End Sub +' +'Sub llenaCatalogo(limpiar As Boolean) +' Log("LlenaCatalogo") +' If limpiar Then clv_productos.Clear +' Private c2 As Cursor +' c2 = B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, CAT_GP_TIPOPROD, CAT_GP_INICIATIVA from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD <> 'PROMOS' +' order by +' Case CAT_GP_TIPOPROD when 'PRIORITARIO' THEN 0 +' WHEN 'ESTRATEGICO' THEN 1 +' WHEN 'COMPLEMENTARIO' then 2 +' Else 3 +' End, CAT_GP_NOMBRE"$) +' +'' Select cAT_GP_ID, cat_gp_tipoprod from cat_gunaprod order by +'' Case CAT_GP_TIPOPROD +'' When 'PRIORITARIO' THEN 0 +'' WHEN 'ESTRATEGICO' THEN 1 +'' WHEN 'CATALOGO REGULAR' then 2 +'' Else 3 +'' End +' +' Private bgColor, textColor As Int +' If c2.RowCount > 0 And clv_productos.Size <> c2.RowCount Then +' clv_productos.Clear : Log("limpiamos productos") +' For i=0 To c2.RowCount -1 +' c2.Position=i +' If c2.GetString("CAT_GP_TIPOPROD") = "PRIORITARIO" Then +' bgColor = Colors.RGB(255, 212, 163) 'naranja +' Else If c2.GetString("CAT_GP_TIPOPROD") = "COMPLEMENTARIO" Then +' bgColor = Colors.RGB(177, 200, 249)'azul +' else If c2.GetString("CAT_GP_TIPOPROD") = "CATALOGO REGULAR" Then +' bgColor = Colors.White +' else If c2.GetString("CAT_GP_TIPOPROD") = "ESTRATEGICO" Then +' bgColor = Colors.RGB(241, 255, 163) 'amarillo +' End If +' textColor = Colors.Black +' If c2.GetString("CAT_GP_ID") <> "GUN141" And c2.GetString("CAT_GP_ID") <> "GUN142" Then ' No mostramos los productos del Plan promocional Act II Cajitas (Conagra) +'' Log(c2.GetString("CAT_GP_ID")) +' clv_productos.Add(CreateListItem(c2.GetString("CAT_GP_NOMBRE"), c2.GetString("CAT_GP_PRECIO"), c2.GetString("CAT_GP_ALMACEN"), clv_productos.AsView.Width, 50dip, bmp, c2.GetString("CAT_GP_ID"), bgColor, textColor), c2.GetString("CAT_GP_NOMBRE")) +' End If +' Next +' End If +' ponProdsEnCero +' c2.Close +'End Sub +' +'Private Sub B4XPage_CloseRequest As ResumableSub +'' BACK key pressed +'' Return True To close, False To cancel +'' ya_entro ="0" : Log("ya_entro=0") +' If lv_catalogos.visible = True Then +' B4XPages.ShowPage("Cliente") +' Return False +' ELSE If l_info.Visible Then +' l_info.Visible = False +' Return False +' else if lv_promos.visible Then +' lv_promos.Visible = False +' Panel2.Visible = False +' P_CALATOLOS.Visible = True +' P_CALATOLOS.BringToFront +' lv_catalogos.Visible = True +' p_botonesVenta.Visible = False +' l_total.Visible = False +' l_totProds.Visible = False +' Return False +' else if clv_productos.AsView.Visible Then +' clv_productos.AsView.Visible = False +' P_CALATOLOS.Visible = True +' P_CALATOLOS.BringToFront +' lv_catalogos.Visible = True +' p_botonesVenta.Visible = False +' l_total.Visible = False +' l_totProds.Visible = False +' Return False +' else If entro = "4" Then +' entro = "3" +' B4XPage_Appear +' Return True +' Else If entro = "3" Then +' B4XPages.ShowPage("Cliente") +' Return False +' Else +' B4XPages.ShowPage("Cliente") +' Return False +' End If +'End Sub +' +'Sub BUSCA_TextChanged (Old As String, New As String) +' q_buscar = "%" & BUSCA.Text & "%" +' Log($"old=${Old}, new=|${New}|"$) +' Private bgColor, textColor As Int +' Private se As Cursor +' If New.Length > 2 Or forzarbusqueda Then +' forzarbusqueda = False +' Log("searching") +' se = B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD, CAT_GP_IMG from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_NOMBRE like ? and CAT_GP_CLASIF <> ?"$, Array As String(q_buscar,"PROMOS")) ' order by CAT_GP_NOMBRE asc +'' lv_catalogos.Clear +' lv_catalogos.Visible = False +' P_CALATOLOS.Visible = False +' lv_promos.Visible = False +' Panel2.Visible = False +' clv_productos.AsView.Visible = True +' Log(se.RowCount) +' If se.RowCount > 0 Then +' If se.RowCount > 50 Then ProgressDialogShow("Buscando productos") +' Sleep(100) +' clv_productos.Clear +' For i = 0 To se.RowCount -1 +' se.Position=i +' If se.GetString("CAT_GP_TIPOPROD") = "PRIORITARIO" Then +' bgColor = Colors.RGB(255, 212, 163) 'naranja +' Else If se.GetString("CAT_GP_TIPOPROD") = "COMPLEMENTARIO" Then +' bgColor = Colors.RGB(177, 200, 249)'azul +' else If se.GetString("CAT_GP_TIPOPROD") = "CATALOGO REGULAR" Then +' bgColor = Colors.White +' else If se.GetString("CAT_GP_TIPOPROD") = "ESTRATEGICO" Then +' bgColor = Colors.RGB(241, 255, 163) 'amarillo +' End If +' textColor = Colors.Black +' If se.GetString("CAT_GP_ID") <> "GUN141" And se.GetString("CAT_GP_ID") <> "GUN142" Then ' No mostramos los productos del Plan promocional Act II Cajitas (Conagra) +'' Log(c2.GetString("CAT_GP_ID")) +' clv_productos.Add(CreateListItem(se.GetString("CAT_GP_NOMBRE"), se.GetString("CAT_GP_PRECIO"), se.GetString("CAT_GP_ALMACEN"), clv_productos.AsView.Width, 50dip, bmp, se.GetString("CAT_GP_ID"), bgColor, textColor), se.GetString("CAT_GP_NOMBRE")) +' End If +' Next +' If se.RowCount > 50 Then ProgressDialogHide +' ponProdsEnCero +' End If +' se.Close +' entro= "4" +' End If +'End Sub +' +'Sub b_QR_Click +' If ciclo = 1 Then +' ciclo = 2 +'' b_qr.Visible = False +' ya_entro = "0" +' 'entro = 3 +' B4XPage_Appear +' else if ciclo = 2 Then +' ciclo = 3 +' ' ya_entro = 0 +' ya_entro = "0" +' B4XPage_Appear +'' b_qr.Visible = False +' else if ciclo = 3 Then +' ciclo = 4 +' ' ya_entro = 0 +' ya_entro = "0" +' B4XPage_Appear +'' b_qr.Visible = False +' else if ciclo = 4 Then +' ciclo = 5 +' ' ya_entro = 0 +' ya_entro = "0" +' B4XPage_Appear +'' b_qr.Visible = False +' else if ciclo = 5 Then +' ciclo = 1 +' ' ya_entro = 0 +' ya_entro = "0" +' B4XPage_Appear +'' b_qr.Visible = False +' End If +'End Sub +' +''**************************************************************************** +''***************** PARA EL MAS/MENOS ************************************* +''**************************************************************************** +'Sub CreateListItem(Text As String, precioU As String, inv As Int, Width As Int, Height As Int, img As Bitmap, prodId As String, bc As Int, tc As Int) As Panel +' Dim p As B4XView = xui.CreatePanel("") +' p.SetLayoutAnimated(0, 0, 0, Width, Height) +' p.LoadLayout("prodItem") +' p_prods.Color = bc +' l_prodX.TextColor = tc +' l_prodX.Text = Text&CRLF&"# " & inv & " $ " & precioU +' l_prodX.Tag = $"ID: ${prodId}${CRLF}${Text}${CRLF}Precio: $$1.2{precioU}${CRLF}Inv: ${inv} pzs"$ +'' l_pCant.Text = 0 +' l_pCant.Tag = precioU&"|"&inv&"|"&prodId +' et_pCant.Tag = precioU&"|"&inv&"|"&prodId +'' Log(l_pCant.Tag) +' et_pCant.BringToFront +'' i_prod.Bitmap = img +' Return p +'End Sub +' +'Sub b_prodMenos_Click +' etCantHasFocus = False +' LogColor("b_prodMenos_Click", Colors.Magenta) +' Dim index As Int = clv_productos.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_productos.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(2).GetView(3) +' Dim esteTag As List = Regex.Split("\|", laCant.Tag) +'' Log($"precio|stock:${laCant.tag}"$) +'' laCant.Text = laCant.text.Replace (",", "") +' If laCant.Text = "" Then laCant.Text = 0 +' laCant.Text = NumberFormat2(laCant.Text - 1, 1, 0, 0, False) +' If laCant.Text < 0 Then laCant.Text = 0 +' Subs.actualizaProducto(Subs.traeAlmacen, esteTag.Get(0), laCant.Text, Subs.traeProdNombre(esteTag.Get(2)), esteTag.Get(2), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaActual, 0, B4XPages.MainPage.tipo_venta) +'' Dim chk As B4XView = pnl.GetView(2) +' cuentaProds +'End Sub +' +'Sub b_prodMas_Click +' etCantHasFocus = False +' LogColor("b_prodMas_Click", Colors.Magenta) +' Dim index As Int = clv_productos.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_productos.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(2).GetView(3) +'' laCant.Text = laCant.text.Replace (",", "") +'' Log($"precio|stock:${laCant.tag}"$) +'' Log($"Indice: ${index}, cant:${laCant.Text+1}, precioU: ${laCant.tag}"$) +' Dim esteTag As List = Regex.Split("\|", laCant.Tag) +'' LogColor(laCant.Tag&"|"&esteTag, Colors.Blue) +' If laCant.Text = "" Then laCant.Text = 0 +'' Log(laCant.Text + 1 <= esteTag.get(1)) +' If laCant.Text + 1 <= esteTag.get(1) Then +' laCant.Text = NumberFormat2(laCant.Text + 1, 1, 0, 0, False) +'' Subs.guardaProducto(Subs.traeAlmacen, esteTag.Get(0), laCant.Text + 1, Subs.traeProdNombre(esteTag.Get(2)), esteTag.Get(2), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) +' Subs.actualizaProducto(Subs.traeAlmacen, esteTag.Get(0), laCant.Text, Subs.traeProdNombre(esteTag.Get(2)), esteTag.Get(2), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaActual, 0, B4XPages.MainPage.tipo_venta) +' cuentaProds +' End If +'' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +'End Sub +' +'Private Sub et_pCant_TextChanged (Old As String, New As String) +'' LogColor($"txt changed: ${Old}|${New}, hasfocus=${etCantHasFocus}"$,Colors.Magenta) +'' Try +' Dim index As Int = clv_productos.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_productos.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(2).GetView(3) +' Dim esteTag As List = Regex.Split("\|", laCant.Tag) +'' Log($"${esteTag}, ${laCant.text}"$) +' If New = "" Then +' laCant.Text = "0" +' New = "0" +' End If +' If esteTag.Get(1) < New Then laCant.Text = esteTag.Get(1) +' If Not(Old = "0" And New = "") And etCantHasFocus Then +'' Log(esteTag) +' Subs.actualizaProducto(Subs.traeAlmacen, esteTag.Get(0), laCant.Text, Subs.traeProdNombre(esteTag.Get(2)), esteTag.Get(2), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaActual, 0, B4XPages.MainPage.tipo_venta) +' cuentaProds +' End If +'' Catch +'' Log(LastException) +'' End Try +'End Sub +' +'Sub et_pCant_Click +' Log("et_pCant clicked") +' etCantHasFocus = True ' Si se cambia la cantidad con los botnes y luego se regresa a editar la cantidad, el "focus" no cambia, con esto si forza el etCantHasFocus a verdadero. +'End Sub +' +'Private Sub et_pCant_FocusChanged (HasFocus As Boolean) +' LogColor($"focus changed=${HasFocus}"$, Colors.Magenta) +' etCantHasFocus = HasFocus +' If HasFocus Then +' Dim index As Int = clv_productos.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_productos.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(2).GetView(3) +' Log($"LaCant = ${laCant.text}"$) +' If laCant.Text = "" Then laCant.Text = "0" +' Dim esteTag As List = Regex.Split("\|", laCant.Tag) +' Log(esteTag) +' Log(laCant.text) +' Subs.actualizaProducto(Subs.traeAlmacen, esteTag.Get(0), laCant.Text, Subs.traeProdNombre(esteTag.Get(2)), esteTag.Get(2), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaActual, 0, B4XPages.MainPage.tipo_venta) +' cuentaProds +' End If +'End Sub +' +'Sub cuentaProds +' Log("-= CUENTAPRODS =-") +'' totalProds = 0 +'' totalCompra = 0 +' '' Private inicioContador As String = DateTime.Now +'' For i = 0 To clv_productos.GetSize - 1 +'' Private p0 As B4XView = clv_productos.GetPanel(i) +'' Private p As B4XView = p0.GetView(0) +'' Private cant1 As B4XView = p.GetView(2).GetView(3) +'' If cant1.Text = "" Then cant1.Text = 0 +' '' Private cant2 As Int = 0 +' '' If cant1.Text <> "" Then cant2 = cant1.Text +' '' Private laCant As Int = cant1.text.Replace (",", "") +' '' cant1.Text = cant1.text +' '' cant1.Text = laCant +'' Log($"${totalProds}, ${cant1.text}, ${cant1.text}"$) +'' totalProds = totalProds + cant1.text +'' Private esteTag As List = Regex.Split("\|", cant1.Tag) +'' If cant1.Text > esteTag.Get(1) Then +'' Log(123) +'' cant1.Text = esteTag.Get(1) +'' End If +'' If cant1.Text > 0 Then +'' Log(esteTag.Get(2) & "|" & cant1.Text) +'' totalCompra = totalCompra + (esteTag.get(0) * cant1.text) +'' Log($"Cant: ${cant1.Text}, Suma: ${totalCompra}"$) +'' Private m As Map +'' m=CreateMap("cant":cant1.Text, "precio":esteTag.get(0)) +'' prodsMap.Put(esteTag.Get(2), m) +'' Log("-= Agregamos producto =-") +'' Else +'' prodsMap.Remove(esteTag.Get(2)) +'' Log("-= Quitamos producto =-") +'' End If +'' l_total.Visible = True +'' l_totProds.Visible = True +'' l_total.Text = $"Total: $$1.2{totalCompra}"$ +'' l_totProds.text = $"Prods: ${totalProds}"$ +'' Next +'' LogColor("TIEMPO cuentaProds -=" & ((DateTime.Now-inicioContador)/1000), Colors.Red) +'' Subs.revisaPromoProcterPRO3009(prodsMap) +'' LogColor(prodsMap, Colors.blue) +' If Subs.hayPedido Then p_botonesVenta.Visible = True +'' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +'End Sub +' +'Sub ponProdsEnCero +' Private inicioContador As String = DateTime.Now +' Private prodsVendidosList As List +' prodsVendidosList.Initialize +' Private pr As Cursor = B4XPages.MainPage.skmt.ExecQuery($"Select PE_PROID from PEDIDO where PE_CLIENTE='${Subs.traeCliente}'"$) +' If pr.RowCount > 0 Then +' pr.Position = 0 +' For i = 0 To pr.RowCount - 1 +' pr.Position = i +' prodsVendidosList.Add(pr.GetString("PE_PROID")) +' Next +' End If +' pr.Close +' Log("prodsVendidos="&prodsVendidosList) +' For i = 0 To clv_productos.GetSize - 1 +' Private p0 As B4XView = clv_productos.GetPanel(i) +' Private lVendido As B4XView = p0.GetView(1) 'Label l_vendido +' Private pProds As B4XView = p0.GetView(0) 'Panel p_prods +' Private cant1 As B4XView = pProds.GetView(2).GetView(3) +' Private x() As String = Regex.Split("\|", cant1.tag) 'El ultimo dato de cant1.tag es el id del producto. +' If prodsVendidosList.IndexOf(x(x.Length-1)) > -1 And Subs.revisaProdFueraDePromo(x(x.Length-1)) Then 'Revisamos si el producto es en la tabla "PEDIDO" y si forma parte de una promoción. +' lVendido.Visible = True +' pProds.GetView(2).As(Panel).Visible = False +' Else +' lVendido.Visible = False +' pProds.GetView(2).As(Panel).Visible = True +' End If +' cant1.Text = 0 +' Next +' LogColor("TIEMPO DE PROCESO DEL PONEMOSENCERO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red) +' Log("Ponems en CERO") +'End Sub +' +'Private Sub b_terminar1_Click +' Log("b_terminar1_Click") +'' cuentaProds +'' Private p1 As Map +'' For Each p As String In prodsMap.Keys +'' p1 = prodsMap.Get(p) +'' Log(p & "|" & p1) +'' Private pn As String = Subs.traeProdNombre(p) +'' Subs.guardaProducto(Subs.traeAlmacen, p1.Get("precio"), p1.Get("cant"), pn, p, Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) +'' Next +' etCantHasFocus = False +' ya_entro = "0" : Log("ya_entro=1") +' lv_promos.Visible = False +' Panel2.Visible = False +' clv_productos.AsView.Visible = False +' P_CALATOLOS.Visible = True +' P_CALATOLOS.BringToFront +' lv_catalogos.Visible = True +' Log("Terminar") +'' clv_productos.Clear +' ponProdsEnCero +' prodsMap.Initialize +' B4XPages.ShowPage("Cliente") +'End Sub +' + +' +'Private Sub b_continuar_Click +' Log("b_continuar_Click") +'' cuentaProds +'' Private p1 As Map +'' For Each p As String In prodsMap.Keys +'' p1 = prodsMap.Get(p) +'' Log(p & "|" & p1) +'' Private pn As String = Subs.traeProdNombre(p) +'' If pn <> "N/A" Then +'' Subs.guardaProducto(Subs.traeAlmacen, p1.Get("precio"), p1.Get("cant"), pn, p, Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) +'' End If +'' Next +' etCantHasFocus = False +' Log("promos-inv, prods-inv, cat-vis") +' lv_promos.Visible = False +' Panel2.Visible = False +' P_CALATOLOS.Visible = True +' Subs.centraPanel(P_CALATOLOS,P_CALATOLOS.Width) +' P_CALATOLOS.BringToFront +' lv_catalogos.Visible = True +' clv_productos.AsView.Visible = False +' +'' clv_productos.Clear +' ponProdsEnCero +' prodsMap.Initialize +' Log("Continuar") +'' Activity_KeyPress(KeyCodes.KEYCODE_BACK) +'End Sub +' +'Private Sub l_prodX_LongClick +' Log("longclic = "&Sender.as(Label).tag) +' l_info.Text = Sender.as(Label).tag +' l_info.Visible = True +'End Sub +' +'Private Sub l_info_Click +' l_info.Visible = False +'End Sub +' +'Private Sub lv_promos_ItemLongClick (Position As Int, Value As Object) +' Log("Promo longclic = "&Value) +' Private id As String = "" +' +' Dim c As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_TIPO = 'PROMOS' and CAT_GP_NOMBRE = '${Value}'"$) +' If c.RowCount > 0 Then +' c.Position = 0 +' id = c.GetString("CAT_GP_ID") +' Log("ENTRE") +' End If +' +' l_info.Text = $"ID: ${id}${CRLF}${Value}"$ +' l_info.Visible = True +'End Sub +' +'Private Sub b_buscar_Click +' forzarbusqueda = True +' BUSCA_TextChanged("","") +'End Sub +' +'' almacenes: 1, 5, 25, 2, 4, 38, 64, 3, 16, 14, 12, 22, 32 +'' Basicas GUN003, GUN002, GUN001 +'' Sabores GUN003, GUN005, GUN004, GUN050 +'' Basicas PRO3054, GUN141 +'' Sabores PRO3055, GUN142 + + + +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Dim ruta As String + Dim q_buscar As String + Dim forzarBusqueda As Boolean = False + Dim skmt As SQL + Dim c As Cursor + Dim c2 As Cursor + Dim C3 As Cursor + Dim s As Cursor + Dim lv_catalogos As ListView + Dim lv_promos As ListView + Dim entro As String + Dim gest As Button + Dim lfila As Label + Dim marca As String + Dim tipo As String + Dim subtipo As String + Private BUSCA As EditText + Dim ya_entro As String + Dim TIENE_PROMOS As String + Dim RES As String + Dim S1 As Cursor + Dim bmp As Bitmap + Dim ciclo As String + Private b_qr As Button + Private p_productos As Panel + Dim clv_productos As CustomListView + Private ImageView1 As ImageView + Private Panel3 As Panel + Private p_prods As Panel + Private i_prod As ImageView + Private l_prodX As Label + Private b_prodMas As Button + Private l_pCant As Label + Private et_pCant As EditText + Private b_prodMenos As Button + Dim b_terminar1 As Button + Dim b_continuar As Button + Private l_total As Label + Private l_totProds As Label + Dim totalProds As Int = 0 + Dim totalCompra As Float = 0 + Dim etCantHasFocus As Boolean = False + Dim prodsMap As Map + Private l_Cargando As Label + Private l_info As Label + Private b_buscar As Button + Private p_botonesVenta As Panel + Private lv_tipo As ListView + Private lv_subtipo As ListView + Private p_vistaPreviaTrans As Panel + Private lv_prodsPedido As ListView + Private b_rechazar As Button + Private b_aceptar As Button + Private p_vistaPrevia As Panel + Dim folio As String + Dim result As String + Private l_cant As Label + Private l_total2 As Label + Dim prodsPedidoActual As String + Dim montoPedidoActual As String + Dim tipo_venta As String = Subs.traeTipoVentaDeBD + Dim clv_prods_ll As CustomListView + Private PCLV As PreoptimizedCLV + Dim listaProds As List +' Type AirportData (Name As String, AirportID As Int, IATA As String, ICAO As String, City As String, Latitude As Float, Longitude As Float, Altitude As String) + Dim pedidoMap As Map + Private p_botMasMen As Panel + Dim reiniciarlistaProds As Boolean= False +' Dim listaRenglones As List + Dim listaTiempos As List + Dim clienteId As String + Dim rutaUsuario As String + Dim hayPedido As Boolean + Dim listaHints As List + Dim r As Cursor + Dim vamoaver As List + Dim j3 As Cursor + Dim invTotal As Int + Private et_pCantc As EditText + Private b_prodMenosc As Button + Private b_prodMasc As Button + Dim totalcajasmaspiezas As Int + Dim cajas As Int + Dim piezas As Int + Dim P_CALATOLOS As Panel + + Dim Panel2 As Panel + Private p_botMasMenc 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 +' Activity.RemoveAllViews + Root.LoadLayout("productos") + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + PCLV.Initialize(Me, "PCLV", clv_prods_ll) + ciclo = 1 + l_info.Width = Root.Width * 0.8 + l_info.Left = (Root.Width/2) - (l_info.Width/2) + c = B4XPages.MainPage.skmt.ExecQuery("select distinct CAT_GP_TIPO from cat_gunaprod where CAT_GP_TIPO <> 'PROMOS' order by CAT_GP_TIPO") + If c.RowCount > 0 Then + Dim label1 As Label + label1 = lv_tipo.SingleLineLayout.Label + label1.TextSize = 17 + label1.TextColor = Colors.Black + lv_tipo.Clear + For i=0 To c.RowCount-1 + c.Position=i + Log("ENTRE AQUI EN PROMOS create") + lv_tipo.AddSingleLine(c.GetString("CAT_GP_TIPO")) + Next + End If + c.Close +' llenaCatalogo(False) +' listaRenglones.Initialize + listaTiempos.Initialize + listaProds.Initialize + pedidoMap.Initialize + listaHints.Initialize +' Log("Llamamos LlenaProdsLL") +' LlenaProdsLL(Null) + clv_prods_ll.Clear + prodsMap.Initialize +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + tipo_venta = Subs.traeTipoVentaDeBD + If B4XPages.MainPage.tipo_venta = "PREVENTA" Or B4XPages.MainPage.tipo_venta = "ABORDO" Then + Starter.tabla = "CAT_GUNAPROD" + Else If B4XPages.MainPage.tipo_venta = "VENTA" Then + Starter.tabla = "CAT_GUNAPROD2" + Else If B4XPages.MainPage.tipo_venta = "RECARGA" Then + Starter.tabla = "CAT_GUNAPROD3" + End If + Log(Starter.tabla) + clienteId = Subs.traeCliente + rutaUsuario = Subs.traeRuta + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("PRIORITARIO","1")) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("ESTRATEGICO","2")) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("COMPLEMENTARIO","3")) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("CATALOGO REGULAR","0")) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_CLASIF = (?) ",Array As Object("PROMOS","PROMOS")) + clv_prods_ll.GetBase.SetLayoutAnimated(0, 5dip, 130dip, Root.Width + 10, Root.Height * 0.74) 'Cambiamos el tamaño y posición de la lista de productos + clv_prods_ll.Base_Resize(clv_prods_ll.GetBase.Width, clv_prods_ll.GetBase.Height) 'Cambiamos el tamaño del panel interno de la lista para que ajuste al nuevo tamaño. + If B4XPages.MainPage.bTerminarClicked Then + lv_catalogos.Visible = True + lv_promos.Visible = False + lv_tipo.Visible = False + lv_subtipo.Visible = False + clv_prods_ll.AsView.Visible = False + B4XPages.MainPage.bTerminarClicked = False + End If + If ya_entro <> "1" Then + If BUSCA.Text <> "" Then BUSCA.Text ="" + entro ="3" + lv_catalogos.Clear + Sleep(100) + lfila.Text = "CATALOGOS" + p_productos.Height = Root.Height + clv_prods_ll.AsView.Visible = False + lv_catalogos.Visible = True + p_botonesVenta.Visible = False + p_botonesVenta.Top = clv_prods_ll.AsView.top + clv_prods_ll.AsView.Height - 10 + lv_promos.Visible = False + End If + Dim label1 As Label + label1 = lv_catalogos.SingleLineLayout.Label + label1.TextSize = 20 + label1.TextColor = Colors.White + label1.Color = Colors.ARGB(58,255,255,255) + label1.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + lv_catalogos.Width = Root.Width * 0.99 + lv_catalogos.Clear + lv_catalogos.AddSingleLine("CATALOGO") +' c = B4XPages.MainPage.skmt.ExecQuery($"select count(*) as hayPromos from ${Starter.tabla} where CAT_GP_TIPOPROD = 'PROMOS'"$) + c = B4XPages.MainPage.skmt.ExecQuery($"select count(*) as hayPromos from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_TIPO = 'PROMOS'"$) + c.Position = 0 + + c = B4XPages.MainPage.skmt.ExecQuery($"SELECT CUENTA FROM CUENTAA"$) + c.Position = 0 + If c.GetString("CUENTA") <> "0" And c.GetString("CUENTA") <> "1" Then + c2=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, IFNULL(CAT_GP_IMG,0) AS CAT_GP_IMG from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa))"$, Array As String("PROMOS", "PROMOS")) + LogColor($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, IFNULL(CAT_GP_IMG,0) AS CAT_GP_IMG from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa))"$,Colors.Cyan) 'Isaac +' Log($"res:${c2.RowCount}, ${Value}, ${marca}, ${tipo}"$) + Private hayPromos As Boolean = False + If c2.RowCount > 0 Then + Log("Esto es un conteo --->"&c2.RowCount) 'Isaac + For i=0 To c2.RowCount -1 + c2.Position = i + Log("Esto es i----->"& i)'Isaac + Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId) + If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto. + hayPromos = True + End If + Next + If hayPromos Then lv_catalogos.AddSingleLine("PROMOS") + Else + Log("NO HAY PROMOS") + End If + c2.Close + End If + + Sleep(100) + l_total.Visible =False + l_totProds.Visible = False + l_total.Left = 5dip + l_totProds.Width = Root.Width * 0.19 + l_total.Left = l_totProds.Width + 20 + l_total.Width = Root.Width * 0.25 +' Log(Subs.traeTotalesClienteActual) + Dim m As Map = Subs.traeTotalesClienteActual + prodsPedidoActual = m.Get("productos") + montoPedidoActual = m.Get("monto") + hayPedido = Subs.hayPedido +' LogColor("Pedido ant? - "&hayPedido, Colors.Magenta) + B4XPages.MainPage.productos.clv_prods_ll.Clear + If reiniciarlistaProds Then +' Log("Llamamos LlenaProdsLL") +' LlenaProdsLL(Null) + clv_prods_ll.Clear + else If hayPedido Then +' LogColor("HAY PEDIDO ANTERIOR", Colors.red) +' Log("Llamamos LlenaProdsLL") +' LlenaProdsLL(Null) + clv_prods_ll.Clear + End If + If clv_prods_ll.Size = 0 Then LlenaProdsLL(Null) + clv_prods_ll.JumpToItem(0) 'Vamos al primer artículo de la lista. + PCLV.lblHint.SetTextSizeAnimated(0,13) + PCLV.B4XSeekBar1.Color1=Colors.DarkGray + PCLV.B4XSeekBar1.Color2=Colors.DarkGray + PCLV.B4XSeekBar1.ThumbColor=Colors.red + PCLV.B4XSeekBar1.mBase.Left=Root.Width *0.91 +' PCLV.B4XSeekBar1.mBase.Top=-50 + PCLV.B4XSeekBar1.mBase.Height=clv_prods_ll.AsView.Height + PCLV.pnlOverlay.Height = clv_prods_ll.AsView.Height + PCLV.B4XSeekBar1.Update + + + +End Sub + +Sub PCLV_AddProds + +End Sub + +Sub lv_catalogos_ItemClick (Position As Int, Value As Object) + If Value = "CATALOGO" Then +' lfila.text = "TIPO" + lfila.text = "PRODUCTOS" + lv_catalogos.Visible = False +' lv_tipo.Visible = True + If clv_prods_ll.Size = 0 Then LlenaProdsLL(Null) + clv_prods_ll.AsView.Visible = True + If hayPedido Then p_botonesVenta.Visible = True 'Si ya hay pedido, entonces mostramos los botones. + Else + clv_prods_ll.AsView.Visible = False + lv_promos.Visible = True + lfila.text = "PROMOCIONES" + lv_catalogos.Visible = False +' lv_promos.Clear +' Dim label1 As Label +' label1 = lv_promos.TwoLinesLayout.Label +' label1.TextSize = 12 +' label1.TextColor = Colors.Black +' Dim label2 As Label +' label2 = lv_promos.TwoLinesLayout.SecondLabel +' label2.TextSize = 12 +' label2.TextColor = Colors.Black +' Dim label13 As Label +' label13 = lv_promos.TwoLinesAndBitmap.Label +' label13.TextSize = 12 +' label13.TextColor = Colors.Black +' Dim label14 As Label +' label14 = lv_promos.TwoLinesAndBitmap.SecondLabel +' label14.TextSize = 12 +' label14.TextColor = Colors.Black +' lfila.text = "PROMOS" + + lv_promos.Clear + lv_promos.Height = Root.Height * 0.65 + lv_promos.Width = Root.Width *0.96 + + Dim label1 As Label + label1 = lv_promos.TwoLinesLayout.Label + label1.TextSize = 20 + label1.TextColor = Colors.White + label1.Color = Colors.ARGB(58,255,255,255) + Dim label2 As Label + label2 = lv_promos.TwoLinesLayout.SecondLabel + label2.TextSize = 20 + label2.TextColor = Colors.White + label2.Color = Colors.ARGB(58,255,255,255) + Dim label13 As Label + label13 = lv_promos.TwoLinesAndBitmap.Label + label13.TextSize = 20 + label13.TextColor = Colors.White + label13.Color = Colors.ARGB(58,255,255,255) + Dim label14 As Label + label14 = lv_promos.TwoLinesAndBitmap.SecondLabel + label14.TextSize = 20 + label14.TextColor = Colors.White + label14.Color = Colors.ARGB(58,255,255,255) +' +' +' +' label1.TextColor = Colors.White +' label1.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) +' label2.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + + + +' c2=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from ${Starter.tabla} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD = ? AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) )"$, Array As String(Value, Value, Value)) + c2=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, CAT_PA_BSEGMENTA, CAT_PA_SEGMENTAV from ${Starter.tabla} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) )"$, Array As String(Value, Value)) +' Log($"res:${c2.RowCount}, ${Value}, ${marca}, ${tipo}"$) + + Private yaComproPRO2265 As Boolean = Subs.revisaPRO2265(Subs.traeCliente) + Private yaComproPRO3054 As Boolean = Subs.revisaPRO3054(Subs.traeCliente) + Private yaComproPRO3055 As Boolean = Subs.revisaPRO3055(Subs.traeCliente) + Private tipoCliente As Int = Subs.traeTipoCliente + Log(c2.RowCount) + If c2.RowCount > 0 Then +' For i=0 To c2.RowCount -1 +' c2.Position=i +' Log("AQUI ENTRAMOS CON LETRAS GRANDES") +' Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId) +' If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto. +' lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) +'' lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) +' End If +' Next + + + + + + + +' If c2.RowCount > 0 Then + For i=0 To c2.RowCount - 1 + c2.Position = i + Private muestraPromo As Boolean = True + Log($"SEGMENTADA: ${c2.GetString("CAT_PA_BSEGMENTA")}"$) + If c2.GetInt("CAT_PA_BSEGMENTA") = 1 Then + LogColor("####### PROMO SEGMENTADA #### "& c2.GetString("CAT_GP_ID"), Colors.Blue) + LogColor($"####### SEGV: ${c2.GetString("CAT_PA_SEGMENTAV")} ####"$, Colors.Blue) + LogColor($"####### TIPOCLIE: ${tipoCliente} ####"$, Colors.Blue) + LogColor($"####### ¿ENTRA?: ${c2.GetString("CAT_PA_SEGMENTAV").Contains(tipoCliente)} ####"$, Colors.Blue) + If Not(c2.GetString("CAT_PA_SEGMENTAV").Contains(tipoCliente)) Then muestraPromo = False + End If + ' jpeg = c2.GetBlob("CAT_GP_IMG") + ' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) + ' bmp.Initialize2(ins) + ' ListView1.AddTwoLinesAndBitmap(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO"),bmp) + Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), Subs.traeCliente) + Log($"TM=${tm}"$) + If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto. + If yaComproPRO2265 And c2.GetString("CAT_GP_ID") = "PRO3015" Then ' Si la promo es la PRO3015 y ya compro la PRO2265, NO la mostramos. + LogColor("Ya compro la PRO2265, ya no se muestra la PRO3015", Colors.Red) + Else + If (yaComproPRO3054 And c2.GetString("CAT_GP_ID") = "PRO3054") Or _ + (yaComproPRO3055 And c2.GetString("CAT_GP_ID") = "PRO3055") Then ' Si la promo es la PRO3054 o PRO3055 y ya compro, NO la mostramos. + LogColor("Ya compro prods de la PRO3054 o PRO3055 o es cliente nuevo, ya no se muestra.", Colors.Red) + Else + If Subs.traeAlmacen = 88 Then + Log("SI ENTRE1") + Log(c2.GetString("CAT_GP_ID")) + If c2.GetString("CAT_GP_ID") = "MYKONOS_01" And Subs.TraeMontoProd Then + Log("SI ENTRE") + If muestraPromo Then lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) + Else If c2.GetString("CAT_GP_ID") <> "MYKONOS_01" Then + Log("SI ENTRE2") + If muestraPromo Then lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) + End If + Else + Log("SI ENTRE3") + If muestraPromo Then lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) + End If + Log($"################################${CRLF} ${muestraPromo}${CRLF}################################"$) +' If muestraPromo Then lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) + + End If + End If + End If + Next +' End If +' yaComproPRO2265 = False + + + label1.Height = 50dip + label2.Height = 45dip + label2.Top = label1.Height + lv_promos.TwoLinesLayout.ItemHeight = 95dip + Subs.SetDivider(lv_promos, Colors.White, 2) + Else + ToastMessageShow("No hay promociones disponibles.", False) + End If + c2.Close + entro = "4" + End If +End Sub + +Sub lv_catalogos2_ItemClick (Position As Int, Value As Object) + clv_prods_ll.AsView.Visible = False + BUSCA.Text = "" + Dim cliente As C_Cliente = B4XPages.GetPage("Cliente") + Log($"value=${Value}"$) + If Value = "PROMOS" And cliente.cuenta <> "N" Then + entro = "3" + marca = "PROMOS" + tipo = "PROMOS" + Else if Value = "PROMOS" And cliente.cuenta = "N" Then + entro = "5" + B4XPages.ShowPage("Cliente") + End If + If Value = "PROMOS" Then + LogColor("Promos", Colors.red) + c2=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from ${Starter.tabla} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD = ? AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) ) ORDER BY 1"$, Array As String(Value, marca, tipo)) + Else + LogColor("Catalogo", Colors.red) + c2=B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, CAT_GP_TIPOPROD, CAT_GP_INICIATIVA from ${Starter.tabla} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD <> 'PROMOS' "$) + End If + +' If Value = "PROMOS" Then +' ' If Subs.traemontoprod Then +' ' c2 = B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from cat_gunaprod where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD = ? AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) )", Array As String(Value, marca, tipo)) +' ' Else +' Private cd As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT HVD_CLIENTE FROM PROMO_ESP WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") +' If cd.RowCount = 0 Then +' LogColor("1- Promos" & " | " & marca & " | " & tipo, Colors.red) +' +' c2 = B4XPages.MainPage.skmt.ExecQuery2($"Select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, cat_pa_bsegmenta, cat_pa_segmentav from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_TIPOPROD = ? AND CAT_GP_ID NOT IN (SELECT DISTINCT CAT_PE_IDPROMO FROM CAT_PROMO_ESP) AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa))"$, Array As String(Value, marca, tipo)) +' Else If cd.RowCount > 0 Then +' LogColor("2- Promos" & " | " & marca & " | " & tipo, Colors.red) +' c2 = B4XPages.MainPage.skmt.ExecQuery2($"Select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, cat_pa_bsegmenta, cat_pa_segmentav from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_TIPOPROD = ? and CAT_GP_ID <> 'PRO2265' AND CAT_GP_ID NOT IN (SELECT DISTINCT CAT_PE_IDPROMO FROM CAT_PROMO_ESP) AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa))"$, Array As String(Value, marca, tipo)) +' End If +' ' End If +' Else +' LogColor("Catalogo", Colors.red) +' c2=B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, CAT_GP_TIPOPROD, CAT_GP_INICIATIVA from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD <> 'PROMOS'"$) +' End If + + If Value = "CATALOGO" Then + lv_catalogos.Visible = False + lv_promos.Visible = False + lfila.text = "CATALOGO" + Log("PGS") + ProgressDialogShow("Cargando catalogo ...") + Sleep(100) + Private inicioContador As String = DateTime.Now + llenaCatalogo(False) + clv_prods_ll.AsView.Visible = True + Log("PGH") + LogColor("TIEMPO DE PROCESO DEL CATALOGO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red) + ProgressDialogHide + c2.Close + Else + Log("ENTRAMOS A PROMOS") + clv_prods_ll.AsView.Visible = False + lv_promos.Visible = True + lv_catalogos.Visible = False + lv_promos.Clear + Dim label1 As Label + label1 = lv_promos.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = lv_promos.TwoLinesLayout.SecondLabel + label2.TextSize = 15 + label2.TextColor = Colors.Black + Dim label13 As Label + label13 = lv_promos.TwoLinesAndBitmap.Label + label13.TextSize = 15 + label13.TextColor = Colors.Black + Dim label14 As Label + label14 = lv_promos.TwoLinesAndBitmap.SecondLabel + label14.TextSize = 15 + label14.TextColor = Colors.Black + lfila.text = "PROMOS" + If c2.RowCount > 0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId) + If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto. + lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) + End If + Next + End If + +'' Dim ins As InputStream +' ' Dim bmp As Bitmap +' ' Dim jpeg() As Byte +' Private yaComproPRO2265 As Boolean = Subs.revisaPRO2265(Subs.traeCliente) +' Private yaComproPRO3054 As Boolean = Subs.revisaPRO3054(Subs.traeCliente) +' Private yaComproPRO3055 As Boolean = Subs.revisaPRO3055(Subs.traeCliente) +' Private tipoCliente As String = Subs.traeTipoCliente +' Log(c2.RowCount) +' If c2.RowCount > 0 Then +' For i=0 To c2.RowCount - 1 +' c2.Position = i +' Private muestraPromo As Boolean = True +' Log($"SEGMENTADA: ${c2.GetString("CAT_PA_BSEGMENTA")}"$) +' If c2.GetInt("CAT_PA_BSEGMENTA") = 1 Then +' LogColor("####### PROMO SEGMENTADA ####", Colors.Blue) +' LogColor($"####### SEGV: ${c2.GetString("CAT_PA_SEGMENTAV")} ####"$, Colors.Blue) +' LogColor($"####### TIPOCLIE: ${tipoCliente} ####"$, Colors.Blue) +' LogColor($"####### ¿ENTRA?: ${c2.GetString("CAT_PA_SEGMENTAV").Contains(tipoCliente)} ####"$, Colors.Blue) +' If Not(c2.GetString("CAT_PA_SEGMENTAV").Contains(tipoCliente)) Then muestraPromo = False +' End If +' ' jpeg = c2.GetBlob("CAT_GP_IMG") +' ' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +' ' bmp.Initialize2(ins) +' ' ListView1.AddTwoLinesAndBitmap(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO"),bmp) +' Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), Subs.traeCliente) +' Log($"TM=${tm}"$) +' If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto. +' If yaComproPRO2265 And c2.GetString("CAT_GP_ID") = "PRO3015" Then ' Si la promo es la PRO3015 y ya compro la PRO2265, NO la mostramos. +' LogColor("Ya compro la PRO2265, ya no se muestra la PRO3015", Colors.Red) +' Else +' If (yaComproPRO3054 And c2.GetString("CAT_GP_ID") = "PRO3054") Or _ +' (yaComproPRO3055 And c2.GetString("CAT_GP_ID") = "PRO3055") Then ' Si la promo es la PRO3054 o PRO3055 y ya compro, NO la mostramos. +' LogColor("Ya compro prods de la PRO3054 o PRO3055 o es cliente nuevo, ya no se muestra.", Colors.Red) +' Else +' Log($"################################${CRLF} ${muestraPromo}${CRLF}################################"$) +' If muestraPromo Then lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) +' End If +' End If +' End If +' Next +' End If +' yaComproPRO2265 = False + + c2.Close + End If + entro = "4" +End Sub + +Sub lv_promos_ItemClick (Position As Int, Value As Object) + clv_prods_ll.AsView.Visible = False + Dim cliente As C_Cliente = B4XPages.GetPage("Cliente") +' Log($"Entro=${entro}, value=${Value}, cuenta=${cliente.cuenta}"$) + If Value = "PROMOS" And cliente.cuenta <> "N" Then + entro = "3" + marca = "PROMOS" + tipo = "PROMOS" + Else if Value = "PROMOS" And cliente.cuenta = "N" Then + entro = "5" + B4XPages.ShowPage("Cliente") + End If + If entro = "3" Then + 'xxxxxxxxxxxxxxxxxxxxx + Else If entro = "4" Then +' Log("Entro = 4") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROID VALUES (?)", Array As Object(Value)) + Dim promos As C_Promos = B4XPages.GetPage("Promos") + promos.laPromo = Subs.traeProdIdDeBD.Get("id") + promos.elCliente = Subs.traeUsuarioDeBD + B4XPages.ShowPage("Promos") + End If +End Sub + +'Generamos la lista de productos. +Sub llenaCatalogo(subtipo1 As String) +' Log("LlenaCatalogo") +' Private c2 As Cursor +' c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, CAT_GP_TIPOPROD, CAT_GP_INICIATIVA from cat_gunaprod where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD <> 'PROMOS' and CAT_GP_SUBTIPO = ? ", Array As String(subtipo1)) +' Private bgColor, textColor As Int +' If c2.RowCount > 0 And clv_productos.Size <> c2.RowCount Then +' clv_productos.Clear : Log("limpiamos productos") +' For i=0 To c2.RowCount -1 +' c2.Position=i +' If c2.GetString("CAT_GP_TIPOPROD") = "PRIORITARIO" Then +' bgColor = Colors.RGB(255, 212, 163) 'naranja +' Else If c2.GetString("CAT_GP_TIPOPROD") = "COMPLEMENTARIO" Then +' bgColor = Colors.RGB(177, 200, 249)'azul +' else If c2.GetString("CAT_GP_TIPOPROD") = "CATALOGO REGULAR" Then +' bgColor = Colors.White +' else If c2.GetString("CAT_GP_TIPOPROD") = "ESTRATEGICO" Then +' bgColor = Colors.RGB(241, 255, 163) 'amarillo +' End If +' textColor = Colors.Black +' clv_productos.Add(CreateListItem(c2.GetString("CAT_GP_NOMBRE"), c2.GetString("CAT_GP_PRECIO"), c2.GetString("CAT_GP_ALMACEN"), clv_productos.AsView.Width, 60dip, bmp, c2.GetString("CAT_GP_ID"), bgColor, textColor), c2.GetString("CAT_GP_NOMBRE")) +' Next +' End If +' c2.Close +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel + If l_info.Visible Then + l_info.Visible = False + Return False + else if p_vistaPreviaTrans.Visible Then + p_vistaPreviaTrans.Visible = False + Return False + else if lv_promos.visible Then + lv_promos.Visible = False + lv_catalogos.Visible = True + p_botonesVenta.Visible = False + l_total.Visible = False + l_totProds.Visible = False + Return False + else if clv_prods_ll.AsView.Visible Then + lfila.text = "CATALOGO" + clv_prods_ll.AsView.Visible = False + lv_subtipo.Visible = False + p_botonesVenta.Visible = False + l_total.Visible = False + l_totProds.Visible = False + lv_catalogos.Visible = True + Return False +' else if lv_subtipo.Visible Then +' lfila.text = "TIPO" +' lv_subtipo.Visible = False +' lv_tipo.Visible = False +' Return False +' else if lv_tipo.Visible Then +' lfila.text = "CATALOGO" +' lv_tipo.Visible = False +' lv_catalogos.Visible = True +' Return False + else If entro = "4" Then + entro = "3" + B4XPage_Appear + Return True + Else If entro = "3" Then + B4XPages.ShowPage("Cliente") + Return False + Else + B4XPages.ShowPage("Cliente") + Return False + End If +End Sub + + + +Sub b_QR_Click + If ciclo = 1 Then + ciclo = 2 + ya_entro = "0" + B4XPage_Appear + else if ciclo = 2 Then + ciclo = 3 + ya_entro = "0" + B4XPage_Appear + else if ciclo = 3 Then + ciclo = 4 + ya_entro = "0" + B4XPage_Appear + else if ciclo = 4 Then + ciclo = 5 + ya_entro = "0" + B4XPage_Appear + else if ciclo = 5 Then + ciclo = 1 + ya_entro = "0" + B4XPage_Appear + End If +End Sub + +'**************************************************************************** +'***************** PARA EL MAS/MENOS ************************************* +'**************************************************************************** +Sub CreateListItem(Text As String, precioU As String, inv As Int, Width As Int, Height As Int, img As Bitmap, prodId As String, bc As Int, tc As Int) As Panel +' Dim p As B4XView = xui.CreatePanel("") +' p.SetLayoutAnimated(0, 0, 0, Width, Height) +' p.LoadLayout("prodItem") +' p_prods.Color = bc +' l_prodX.TextColor = tc +' l_prodX.TextSize = 15 +' p_prods.Height = Height +' l_prodX.Height = Height +' l_prodX.Text = Text&CRLF&"# " & inv & " $ " & precioU +' l_prodX.Tag = $"ID: ${prodId}${CRLF}${Text}${CRLF}Precio: $$1.2{precioU}${CRLF}Inv: ${inv} pzs"$ +' l_pCant.Tag = precioU&"|"&inv&"|"&prodId +' et_pCant.Tag = precioU&"|"&inv&"|"&prodId +' et_pCant.BringToFront +' Return p +End Sub + +Sub b_prodMenos_Click + totalcajasmaspiezas = 0 + etCantHasFocus = False + Root.RequestFocus +' LogColor("b_prodMenos_Click", Colors.Magenta) + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(2) +' Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) + Dim panelbotonesc As B4XView = pnl.GetView(3) + Dim lProdX As B4XView = pnl.GetView(1) +' Dim panelcajas As B4XView = pnl.GetView(3) + Dim panelpiezas As B4XView = pnl.GetView(2) +' Log($"precio|stock:${laCant.tag}"$) + If laCant.Text = "" Then laCant.Text = 0 +' Log("lacant.text="&laCant.text) + laCant.Text = $"${NumberFormat2(laCant.Text-1,0,0,0,False)}"$ + If laCant.Text < 0 Then laCant.Text = 0 + Private tmpMap1 As Map = clv_prods_ll.GetValue(index).As(Map) + Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") + Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") + Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":Subs.traeAlmacen) + Private nombreX As String = Subs.traeProdNombre(id) + LogColor(tmpMap1,Colors.Magenta) +' prodsMap.Put(id, tmpMap) + If laCant.Text = 0 Then prodsMap.Remove(id) + +' If laCant.Text = 0 Then +' panelcajas.Visible = True +' Else If laCant.Text > 0 Then +' panelcajas.Visible = False +' End If +' If laCant2.IsInitialized Then +' totalcajasmaspiezas = laCant.Text + laCant2.Text +' Else +' totalcajasmaspiezas = laCant.Text +' End If + LogColor("prodsMap="&prodsMap, Colors.blue) +' (Subs.traeAlmacen, p1.Get("precio"), p1.Get("cant"), pn, p, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta) + Log($"${Subs.traeAlmacen}, ${precio}, ${laCant.text}, ${Subs.traeProdNombre(id)}, ${id}, ${clienteId}"$) + Subs.actualizaProducto(Subs.traeAlmacen, precio, laCant.Text, Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta) + cuentaProds + LogColor("prodsMap="&prodsMap, Colors.blue) + Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) + If 1 = 1 Then + Private cs As CSBuilder + cs.Initialize + Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_ID = '${id}'"$) + Private invActualizado As String = "0" + If o.RowCount > 0 Then + o.Position = 0 + invActualizado = o.GetString("CAT_GP_ALMACEN") + End If +' If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then +' Private maxcajas As Int = 0 +' Log("cajas a 0") +' Else +' Private maxcajas As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") +' Log("cajas no a 0") +' End If +' Private maxcajas As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") + If 2 = 2 Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}"$).Popall '${CRLF}Max. Cajas: ${maxcajas} +' Log(lProdX.Text) + End If + +' If laCant.Text = 0 Then +' If maxcajas > 0 Then +' panelcajas.Visible = True +' Else +' panelcajas.Visible = False +' End If +' Else If laCant.Text > 0 Then +' panelcajas.Visible = False +' End If + + If Subs.totalPedido < 1 Then laCant.Text = "0" + invTotal = totalcajasmaspiezas + Subs.traeinventario(id) + 'aqui si lo comentamos aparece la parte de cajas +' If tmpMap1.Get("conversion") = "1" Or tmpMap1.Get("precio_caja") = "0" Then +' Log("invisible") +' panelbotonesc.Visible = False +' End If + +' If clv_prods_ll.GetValue(index).As(Map).Get("almacen") < clv_prods_ll.GetValue(index).As(Map).Get("conversion") Then +' Log(clv_prods_ll.GetValue(index).As(Map).Get("cant")) +' If clv_prods_ll.GetValue(index).As(Map).Get("cant").As(Int) = 0 Then +' Log("Aqui debemos ponerlo invisible") +' panelcajas.Visible = False +' Else +' +' End If +'' p_botMasMenc.Visible = False +' End If + 'fin aparecer parte de cajas +' LogColor("InvTotal PRODMAS: " & invTotal, Colors.Red) +End Sub + +Sub b_prodMas_Click + totalcajasmaspiezas = 0 + etCantHasFocus = False + Root.RequestFocus +' LogColor("b_prodMas_Click", Colors.Magenta) + + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(2) +' Dim panelcajas As B4XView = pnl.GetView(3) + Dim panelpiezas As B4XView = pnl.GetView(2) +' Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) + Dim lProdX As B4XView = pnl.GetView(1) + +' Private tmpMap As Map = clv_prods_ll.GetValue(index).As(Map) + Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") + Private inv As String=clv_prods_ll.GetValue(index).As(Map).Get("almacen") + Private existencias As String = clv_prods_ll.GetValue(index).As(Map).Get("almacen") + Log($"Existencias: ${existencias}"$) + If laCant.Text = "" Then laCant.Text = 0 + Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") +' If laCant.Text + 1 <= inv Then + '' Log(NumberFormat2(laCant.Text+1,0,0,0,False)) +' laCant.Text = $"${NumberFormat2(laCant.Text+1,0,0,0,False)}"$ + '' Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") +' Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") + '' Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":Subs.traeAlmacen) + '' Log(tmpMap) + '' prodsMap.Put(id, tmpMap) + '' LogColor(prodsMap, Colors.blue) +' End If +' Log("Cantidad + exis " & (laCant.Text + existencias)) +' Log( (laCant.Text + 1 <= (laCant.Text + existencias))) +' Log("inventario "&Subs.traeinventario(id)) +' Log((Subs.totalPedido - precio > 1)) +' Log((Subs.totalPedido)) +' Log(precio) + LogColor(laCant.Text,Colors.Red) + + If Subs.traeinventario(id) > 0 And (laCant.Text <= (laCant.Text + Subs.traeinventario(id))) Then 'And (Subs.totalPedido - precio > 1) +' Log(clv_prods_ll.GetValue(index).As(Map)) + clv_prods_ll.GetValue(index).As(Map).Put("almacen", (inv - 1)) + inv = inv - 1 +' laCant.Text = $"$1.0{laCant.Text+1}"$ + laCant.Text = NumberFormat2((laCant.Text + 1), 1, 0, 0, False) +' Log(clv_prods_ll.GetValue(index).As(Map)) + End If + Private nombreX As String = Subs.traeProdNombre(id) +' Subs.actualizaProducto(Subs.traeAlmacen, laCant.text, id, clienteId) + +' If laCant.Text > 0 Then +' panelcajas.Visible = False +' Else If laCant.Text = 0 Then +' panelcajas.Visible = True +' End If + + LogColor(laCant.Text,Colors.Red) +' If laCant2.IsInitialized Then +' totalcajasmaspiezas = laCant.Text + laCant2.Text +' Else +' totalcajasmaspiezas = laCant.Text +' End If + Subs.actualizaProducto( Subs.traeAlmacen, precio, laCant.Text, Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta) + cuentaProds +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +' If 1 = 1 Then + Private cs As CSBuilder + cs.Initialize + Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Subs.traeTablaProds(B4XPages.MainPage.tipo_venta)} where CAT_GP_ID = '${id}'"$) + Private invActualizado As String = "0" + If o.RowCount > 0 Then + o.Position = 0 + invActualizado = o.GetString("CAT_GP_ALMACEN") + End If +' If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then +' Private maxcajas As Int = 0 +' Log("cajas a 0") +' Else +' Private maxcajas As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") +' Log("cajas no a 0") +' End If + If 2 = 2 Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}"$).Popall '${CRLF}Max. Cajas: ${maxcajas} +'' Log(lProdX.Text) +' End If + invTotal = totalcajasmaspiezas + Subs.traeinventario(id) +' LogColor("InvTotal PRODMAS: " & invTotal, Colors.Red) +End Sub + +Private Sub et_pCant_FocusChanged (HasFocus As Boolean) + LogColor($"focus changed=${HasFocus}"$, Colors.Magenta) + If et_pCant.Text = "" Then et_pCant.Text = "0" + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(2) + Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) + Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") + If laCant.Text = "" Then laCant.Text = "0" + etCantHasFocus = HasFocus + LogColor(laCant.Text,Colors.Red) + If laCant2.IsInitialized Then + totalcajasmaspiezas = laCant.Text + laCant2.Text + Else + totalcajasmaspiezas = laCant.Text + End If + invTotal = totalcajasmaspiezas + Subs.traeinventario(id) +' LogColor("InvTotal PRODMAS: " & invTotal, Colors.Red) + + cuentaProds +End Sub + +Private Sub et_pCant_TextChanged (Old As String, New As String) +' Log(etCantHasFocus) +' Log("InvTotal: " & invTotal) + If etCantHasFocus = True Then + LogColor($"txt changed: ${Old}|${New}, hasfocus=${etCantHasFocus}"$,Colors.Magenta) + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(2) +' Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) + Dim lProdX As B4XView = pnl.GetView(1) + Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") + Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") + Private inv As String=clv_prods_ll.GetValue(index).As(Map).Get("almacen") + Private inv As String=Subs.traeinventario(id) + Private nombreX As String = Subs.traeProdNombre(id) +' Dim panelcajas As B4XView = pnl.GetView(3) + Dim panelpiezas As B4XView = pnl.GetView(2) + + + If(New = "" Or New = Null Or New = "-") Then New = 0 +' If New < 0 Then New = 0 + If(New > invTotal) Then + Sender.As(EditText).text = invTotal + End If + ' Log($"inventario=${inv}"$) + + If New = "" Then New = 0 + If laCant.Text = "" Then laCant.Text = 0 + LogColor(laCant.Text,Colors.Red) + +' If New > 0 Then +' panelcajas.Visible = False +' Else If New = 0 Then +' +' panelcajas.Visible = True +' End If + +' If laCant2.IsInitialized Then +' totalcajasmaspiezas = laCant.Text + laCant2.Text +' Else +' totalcajasmaspiezas = laCant.Text +' End If + If Not(Old = "0" And New = "") And laCant.Text <> Null And laCant.Text <> "" And etCantHasFocus Then + Log("actualizamos producto") + Subs.actualizaProducto(Subs.traeAlmacen, precio, laCant.Text, Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta) + cuentaProds + End If + +' If New <> "" And New.SubString2(0,0) = "0" Then +' New.SubString(1) +' End If +' If New <> "" And New.SubString(1) <> "" Then +' Log(New.SubString(1)) +' New = New.SubString(1) +' laCant.Text = New.SubString(1) +' Log(laCant.Text) +' End If + + If 1 = 1 Then + Private cs As CSBuilder + cs.Initialize + Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_ID = '${id}'"$) + Private invActualizado As String = "0" +' If o.RowCount > 0 Then + o.Position = 0 + invActualizado = Subs.traeinventario(id) + Log(Subs.traeinventario(id)) +' End If + +' If New = "" Then New = 0 +' If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then +' Private maxcajas As Int = 0 +' Log("cajas a 0") +' Else +' Private maxcajas As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") +' Log("cajas no a 0") +' End If + lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & (Subs.traeinventario(id))).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}"$).Popall '${CRLF}Max. Cajas: ${maxcajas} + +' If New > 0 Then +' panelcajas.Visible = False +' Else If New = 0 Then +' If maxcajas = 0 Then +' panelcajas.Visible = False +' Else +' panelcajas.Visible = True +' End If +' End If + + End If + End If +End Sub + +Sub cuentaProds +' LogColor($"Productos de la orden: ${c_prods.GetString("cantProds")}, Total: ${c_prodsX.GetString("costoTotal")}"$, Colors.red) + Log("===========================") + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select sum(PE_COSTO_TOT) as total, sum(PE_CANT) as cant from PEDIDO where PE_CLIENTE = '${clienteId}'"$) +' LogColor("TIEMPO cuentaProds =" & ((DateTime.Now-inicioContador)/1000), Colors.Red) +' LogColor(prodsMap, Colors.Magenta) + p_botonesVenta.Visible = True + p_botonesVenta.BringToFront + c.Position=0 +' Log($"Total Prods: ${c.GetString("cant")}, Total Compra: $$1.2{c.GetString("total")}"$) + c.Close +' Log($"HAY PEDIDO: ${hayPedido}"$) +End Sub + +Sub b_terminar1_Click +' Log("b_terminar1_Click") +' ya_entro = "0" : Log("ya_entro=1") + B4XPages.MainPage.skmt.ExecNonQuery2("delete from PEDIDO WHERE PE_PRONOMBRE = ? ", Array As Object("N/A") ) + + lv_promos.Visible = False + clv_prods_ll.AsView.Visible = False + lv_catalogos.Visible = True + lv_prodsPedido.Clear + lv_prodsPedido.TwoLinesLayout.Label.Height = 35dip + lv_prodsPedido.TwoLinesLayout.SecondLabel.Height = 25dip + Private c_prods As Cursor=B4XPages.MainPage.skmt.ExecQuery("select PE_PRONOMBRE,PE_COSTO_TOT, PE_CANT, PE_FOLIO, PE_CEDIS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_CEDIS, PE_PRONOMBRE") + If c_prods.RowCount > 0 Then + Private cs As CSBuilder + + vamoaver.Initialize + For i=0 To c_prods.RowCount -1 + cs.Initialize + c_prods.Position=i + Dim label1 As Label + label1 = lv_prodsPedido.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + label1.color = Colors.White + Private textColor As Int = Colors.black + + If c_prods.GetString("PE_FOLIO") = "VENTA" Then + textColor = Colors.RGB(48,3,195) + Else If c_prods.GetString("PE_FOLIO") = "PREVENTA" Or c_prods.GetString("PE_FOLIO") = "ABORDO" Or c_prods.GetString("PE_FOLIO") = "RECARGA" Then + textColor = Colors.RGB(166,0,0) + End If + If Not(IsNumber(c_prods.GetString("PE_CEDIS"))) And c_prods.GetString("PE_FOLIO") = "VENTA" Then + textColor = Colors.RGB(154,131,231) 'Si es promo, cambiamos el color del texto. + Else If Not(IsNumber(c_prods.GetString("PE_CEDIS"))) And c_prods.GetString("PE_FOLIO") = "PREVENTA" Then + textColor = Colors.RGB(255,111,111) 'Si es promo, cambiamos el color del texto. + End If + Dim label2 As Label + label2 = lv_prodsPedido.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Blue + +' lv_prodsPedido.AddTwoLines(cs.Color(textColor).append(c_prods.GetString("PE_PRONOMBRE")).pop,"Cantidad #"& c_prods.GetString("PE_CANT")& " SubTotal $"& c_prods.GetString("PE_COSTO_TOT")& " Folio "& c_prods.GetString("PE_FOLIO")&"_____") + lv_prodsPedido.AddSingleLine(cs.Color(textColor).Size(15).append(c_prods.GetString("PE_PRONOMBRE") & " ").pop.Append(CRLF).Size(10).Color(Colors.Black).Append("Cantidad #"& c_prods.GetString("PE_CANT")).Append(" SubTotal $"& c_prods.GetString("PE_COSTO_TOT")).Append(" " & c_prods.GetString("PE_FOLIO")& " " &c_prods.GetString("PE_CEDIS")).PopAll) + label1.Height = 120dip + lv_prodsPedido.SingleLineLayout.ItemHeight = 90dip + vamoaver.Add(c_prods.GetString("PE_FOLIO")) + folio = c_prods.GetString("PE_FOLIO") + Next +' c=B4XPages.MainPage.skmt.ExecQuery("select pc_noart, pc_monto from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") +' c = B4XPages.MainPage.skmt.ExecQuery("SELECT SUM (PE_CANT) AS CANTIDAD FROM PEDIDO WHERE PE_PROID not like 'PRO%' and PE_CLIENTE IN (Select CUENTA from cuentaa)") +' r = B4XPages.MainPage.skmt.ExecQuery("SELECT SUM (PE_COSTO_TOT) AS MONTO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") +' r.Position = 0 + c = B4XPages.MainPage.skmt.ExecQuery("select sum(PE_CANT) as PC_NOART, sum (PE_COSTO_TOT) as PC_MONTO from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP )") + c.Position=0 + l_cant.Text = c.GetString("PC_NOART") + l_total2.Text = c.GetString("PC_MONTO") + c.Close +' r.Close + End If + c_prods.Close +' BUSCA.Text = "" + p_vistaPreviaTrans.Width = Root.Width + p_vistaPreviaTrans.Height = Root.Height + Subs.centraPanel(p_vistaPrevia, Root.Width) +' If Subs.pedidoGuardado Then b_rechazar.Enabled = False Else b_rechazar.Enabled = True + p_vistaPrevia.Visible=True + p_vistaPreviaTrans.Visible=True +End Sub + +Private Sub b_continuar_Click + Log("b_continuar_Click") + cuentaProds +' Private p1 As Map + Log($"prodsMap=${prodsMap}"$) +' For Each p As String In prodsMap.Keys +' p1 = prodsMap.Get(p) +' Log(p & "|" & p1) +' Private pn As String = Subs.traeProdNombre(p) +' Subs.guardaProductoSinGestion(Subs.traeAlmacen, p1.Get("precio"), p1.Get("cant"), pn, p, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta) +' Next +' BUSCA.Text = "" + Log("promos-inv, prods-inv, cat-vis") + lv_promos.Visible = False + clv_prods_ll.AsView.Visible = False + lv_subtipo.Visible = False + lv_tipo.Visible = False + lv_catalogos.Visible = True + Log("Continuar") + Dim m As Map = Subs.traeTotalesClienteActual + prodsPedidoActual = m.Get("productos") + montoPedidoActual = m.Get("monto") +End Sub + +Private Sub l_prodX_LongClick +' Log("longclic = "&Sender.as(Label).tag) +' l_info.Text = Sender.as(Label).tag +' l_info.Visible = True +End Sub + +Private Sub l_info_Click + l_info.Visible = False +End Sub + +Private Sub lv_promos_ItemLongClick (Position As Int, Value As Object) + Log("Promo longclic = "&Value) + Private id As String = "" + Dim c As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID from ${Starter.tabla} where CAT_GP_TIPO = 'PROMOS' and CAT_GP_NOMBRE = '${Value}'"$) + If c.RowCount > 0 Then + c.Position = 0 + id = c.GetString("CAT_GP_ID") + End If + l_info.Text = $"ID: ${id}${CRLF}${Value}"$ + l_info.Visible = True +End Sub + +'Private Sub b_buscar_Click +' forzarBusqueda = True +' Busca_TextChanged("",BUSCA.Text) +'End Sub + +Private Sub lv_tipo_ItemClick (Position As Int, Value As Object) +' lfila.text = "SUB TIPO" +' lv_tipo.Visible = False +' lv_subtipo.Height = Root.Height * 0.7 +' lv_subtipo.Visible = True +' Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery2("select distinct CAT_GP_SUBTIPO from cat_gunaprod where CAT_GP_TIPO = ? order by CAT_GP_SUBTIPO", Array As String(Value)) +' If c.RowCount > 0 Then +' Dim label1 As Label +' label1 = lv_subtipo.SingleLineLayout.Label +' label1.TextSize = 17 +' label1.TextColor = Colors.Black +' lv_subtipo.Clear +' For i=0 To c.RowCount-1 +' c.Position=i +' lv_subtipo.AddSingleLine(c.GetString("CAT_GP_SUBTIPO")) +' Next +' End If +' c.Close +End Sub + +Private Sub lv_subtipo_ItemClick (Position As Int, Value As Object) +' lfila.text = "SUB TIPO" +' LogColor("Catalogo", Colors.red) +' lv_catalogos.Visible = False +' lv_subtipo.Visible = False +' lv_promos.Visible = False +' lfila.text = "CATALOGO" +' ProgressDialogShow("Cargando catalogo ...") +' Sleep(100) +' Private inicioContador As String = DateTime.Now +' llenaCatalogo(Value) +' clv_prods_ll.AsView.Visible = True +' LogColor("TIEMPO DE PROCESO DEL CATALOGO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red) +' ProgressDialogHide +End Sub + +Private Sub p_vistaPreviaTrans_Click + +End Sub + +Private Sub b_rechazar_Click +' If folio <> "" Then + result = Msgbox2($"Seguro que desea borrar el pedido completo?${CRLF}Haciendo clic largo sobre un producto se pueden borrar articulos independientes."$,"Rechazar Pedido", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + Subs.borraPedidoClienteActual + prodsMap.Initialize +' B4XPages.MainPage.promos.promosMap.Initialize +' Log("Llamamos LlenaProdsLL") +' LlenaProdsLL(Null) + clv_prods_ll.Clear + Log("Positivo") + B4XPages.ShowPage("Cliente") + Else + Log("NO Positivo") + p_vistaPreviaTrans.Visible = False + End If +' Else +' Msgbox("CLIENTE YA SE TRANSMITIO, FAVOR DE LLAMAR A SOPORTE PARA ASISTENCIA","AVISO") 'ignore +' End If + p_vistaPreviaTrans.Visible=False + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub b_aceptar_Click + p_vistaPreviaTrans.Visible=False + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub lv_prodsPedido_ItemLongClick (Position As Int, Value As Object) + Log(Value) + Private X() As String = Regex.Split(" ", Value) + Log(X.Length) + Private nom As String = "" + For i = 0 To X.Length -1 + If X(i).Contains(CRLF) Then + End If + If Not(X(i).Contains(CRLF)) Then + nom = nom & " " & X(i) + Else + Exit + End If + Next + nom = nom.Trim + Private cedis As String = X(X.Length-1) + Log(nom) + Log(cedis) + Private sDate,sTime, clie_id, usuario As String +' If Not(Subs.pedidoGuardado) Then + result = Msgbox2("Seguro que desea borrar este articulo?","Borrar Articulo", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + c=B4XPages.MainPage.skmt.ExecQuery2("select PE_PROID,PE_CANT, PE_FOLIO FROM PEDIDO where pe_pronombre = ? and pe_cliente in (Select CUENTA from cuentaa) ", Array As String(Value)) + c.Position=0 + Log(vamoaver.Get(Position)) + If vamoaver.Get(Position) = "VENTA" Then + Log("CAT_GUNAPROD2") + Log(Position) + Log(Value) + Starter.tabla = "CAT_GUNAPROD2" + Else + Log("CAT_GUNAPROD") + Log(Position) + Log(Value) + Starter.tabla = "CAT_GUNAPROD" + End If +' B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Starter.tabla} set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?"$, Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) +' Log(c.GetString("PE_CANT")) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (Subs.traeAlmacen,c.GetString("PE_PROID"),c.GetString("PE_CANT")* -1)) +' c2=B4XPages.MainPage.skmt.ExecQuery2($"select count(*) AS CUANTOS from ${Starter.tabla} where CAT_GP_ID in (select pe_cedis from pedido where pe_pronombre = ? and pe_cliente in (Select CUENTA from cuentaa)) and CAT_GP_CLASIF = 'PROMOS' AND CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO = 'PROMOS'"$, Array As String(Value)) +' c2.Position=0 +' If c2.GetString("CUANTOS") > 0 Then +' j3 = B4XPages.MainPage.skmt.ExecQuery2("SELECT PE_CEDIS, PE_CANT,PE_PROID, PE_PRONOMBRE FROM PEDIDO WHERE PE_CEDIS IN (SELECT PE_CEDIS FROM PEDIDO WHERE PE_PRONOMBRE = ?)",Array As String(Value)) +' Log(j3.RowCount) +' If j3.RowCount > 0 Then +' Log("estoy aqui") +' For i = 0 To j3.RowCount -1 +' Log("aqui tronare?") +' j3.Position = i +' B4XPages.MainPage.skmt.ExecNonQuery($"update ${Starter.tabla} set cat_gp_almacen = cat_gp_almacen + ${j3.GetString("PE_CANT")} where cat_gp_id = '${j3.Getstring("PE_PROID")}'"$) +' B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_cedis in (select pe_cedis from pedido where pe_pronombre = ?) and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(j3.GetString("PE_PRONOMBRE"), c.GetString("PE_FOLIO"))) +' Next +' End If +' j3.Close +' Else +' B4XPages.MainPage.skmt.ExecNonQuery($"update ${Starter.tabla} set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.Getstring("PE_PROID")}'"$) +' B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_pronombre = ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(Value, c.GetString("PE_FOLIO"))) +' End If +' c.Close +' c2.Close +' DateTime.DateFormat = "MM/dd/yyyy" +' sDate=DateTime.Date(DateTime.Now) +' sTime=DateTime.Time(DateTime.Now) +' c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") +' c.Position=0 +' clie_id = c.GetString("CUENTA") +' c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") +' c.Position=0 +' usuario = c.GetString("USUARIO") +' c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") +' c.Position=0 +' If c.GetString("CUANTOS") > 0 Then +' Log("aqui5") +' 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) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) +' B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_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)") +' Private h As Cursor = B4XPages.MainPage.skmt.ExecQuery("select sum(PE_CANT) as PC_NOART, sum (PE_COSTO_TOT) as PC_MONTO from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP )") +' h.Position=0 +' l_cant.Text = h.GetString("PC_NOART") +' l_total2.Text = h.GetString("PC_MONTO") +' h.Close +' Else +' Log("aqui6") +' B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_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)") +' Private h As Cursor = B4XPages.MainPage.skmt.ExecQuery("select sum(PE_CANT) as PC_NOART, sum (PE_COSTO_TOT) as PC_MONTO from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP )") +' h.Position=0 +' l_cant.Text = 0 +' l_total2.Text = 0 +' h.Close +' End If + + c=B4XPages.MainPage.skmt.ExecQuery($"select PE_PROID,PE_CANT, PE_FOLIO, PE_CEDIS, PE_PRONOMBRE FROM PEDIDO where (pe_pronombre = '${nom}' or pe_pronombre = '${nom} ') AND PE_CEDIS = '${cedis}' and pe_cliente in (Select CUENTA from cuentaa)"$) + Log($"select PE_PROID,PE_CANT, PE_FOLIO, PE_CEDIS FROM PEDIDO where pe_pronombre = '${nom}' AND PE_CEDIS = '${cedis}' and pe_cliente in (Select CUENTA from cuentaa)"$) + Log(c.RowCount) + c.Position=0 + ' If c.RowCount > 0 Then + ' B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?", Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD) VALUES(?,?,?) ", Array As Object (Subs.traeAlmacen,c.GetString("PE_PROID"),c.GetString("PE_CANT")* -1)) + ' c2=B4XPages.MainPage.skmt.ExecQuery($"select count(*) AS CUANTOS from CAT_GUNAPROD where CAT_GP_ID in (select pe_cedis from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa)) and CAT_GP_CLASIF = 'PROMOS' AND CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO = 'PROMOS'"$)'Con esto revisamos si el nombre es de una promo + ' c2=B4XPages.MainPage.skmt.ExecQuery($"select ISNUMERIC(pe_cedis) AS noEsPromo from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa) and pe_cedis = '${cedis}'"$)'Con esto revisamos si el nombre es de una promo + ' Log($"select count(*) AS CUANTOS from CAT_GUNAPROD where CAT_GP_ID in (select pe_cedis from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa)) and CAT_GP_CLASIF = 'PROMOS' AND CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO = 'PROMOS'"$) + ' Log($"select ISNUMERIC(pe_cedis) AS noEsPromo from pedido where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa) and pe_cedis = '${cedis}'"$) + ' c2.Position=0 + ' Log("Algo "&c2.GetString("noEsPromo")) + If Not(IsNumber(cedis)) Then + j3 = B4XPages.MainPage.skmt.ExecQuery2("SELECT PE_CEDIS, PE_CANT,PE_PROID, PE_PRONOMBRE FROM PEDIDO WHERE PE_CEDIS IN (SELECT PE_CEDIS FROM PEDIDO WHERE PE_PRONOMBRE = ? AND PE_CEDIS = ?)",Array As String(nom,cedis)) + Log(j3.RowCount) + If j3.RowCount > 0 Then + Log("Soy promo") + For j = 0 To c.RowCount -1 + Log("aqui tronare?") + c.Position = j + B4XPages.MainPage.skmt.ExecNonQuery($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.GetString("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_cedis= ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(cedis, c.GetString("PE_FOLIO"))) + Next + c = B4XPages.MainPage.skmt.ExecQuery("select sum(PE_CANT) as PC_NOART, sum (PE_COSTO_TOT) as PC_MONTO from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP )") + c.Position=0 + If c.GetString("PC_NOART") = Null Then + l_cant.Text = 0 + l_total2.Text = 0 + Else + l_cant.Text = c.GetString("PC_NOART") + l_total2.Text = c.GetString("PC_MONTO") + End If + c.Close + End If + j3.Close + Else + + B4XPages.MainPage.skmt.ExecNonQuery($"update ${Subs.traeTablaProds(tipo_venta)} set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.Getstring("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_pronombre = ? and pe_cedis = ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(nom, cedis, c.GetString("PE_FOLIO"))) + c = B4XPages.MainPage.skmt.ExecQuery("select sum(PE_CANT) as PC_NOART, sum (PE_COSTO_TOT) as PC_MONTO from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP )") + c.Position=0 + If c.GetString("PC_NOART") = Null Then + l_cant.Text = 0 + l_total2.Text = 0 + Else + l_cant.Text = c.GetString("PC_NOART") + l_total2.Text = c.GetString("PC_MONTO") + End If + c.Close + End If + c.Close +' c2.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + If c.GetString("CUANTOS") > 0 Then + 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) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Else + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info3 set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + End If + + b_terminar1_Click + End If +' Else +' ToastMessageShow("Esta venta ya esta guardada, no se puede editar ni borrar.", False) +' End If +End Sub + +Private Sub clv_prods_ll_ItemClick (Index As Int, Value As Object) + +End Sub + +Sub l_prodx_click + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) + Private p0 As B4XView = clv_prods_ll.GetPanel(index) + Private p As B4XView = p0.GetView(0) + Private cant1 As B4XView = p.GetView(2).GetView(2) + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) +' Log(clv_prods_ll.GetValue(index)) + Log(cant1.Text) +End Sub + +Private Sub clv_prods_ll_VisibleRangeChanged (FirstIndex As Int, LastIndex As Int) + + ' Private c2 As Cursor +' c2 = B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, CAT_GP_TIPOPROD, CAT_GP_INICIATIVA from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD <> 'PROMOS' +' order by +' Case CAT_GP_TIPOPROD when 'PRIORITARIO' THEN 0 +' WHEN 'ESTRATEGICO' THEN 1 +' WHEN 'COMPLEMENTARIO' then 2 +' Else 3 +' End, CAT_GP_NOMBRE"$) +' + '' Select cAT_GP_ID, cat_gp_tipoprod from cat_gunaprod order by + '' Case CAT_GP_TIPOPROD + '' When 'PRIORITARIO' THEN 0 + '' WHEN 'ESTRATEGICO' THEN 1 + '' WHEN 'CATALOGO REGULAR' then 2 + '' Else 3 + '' End +' +' Private bgColor, textColor As Int +' If c2.RowCount > 0 And clv_productos.Size <> c2.RowCount Then +' clv_productos.Clear : Log("limpiamos productos") +' For i=0 To c2.RowCount -1 +' c2.Position=i +' +' textColor = Colors.Black +' If c2.GetString("CAT_GP_ID") <> "GUN141" And c2.GetString("CAT_GP_ID") <> "GUN142" Then ' No mostramos los productos del Plan promocional Act II Cajitas (Conagra) + '' Log(c2.GetString("CAT_GP_ID")) +' clv_productos.Add(CreateListItem(c2.GetString("CAT_GP_NOMBRE"), c2.GetString("CAT_GP_PRECIO"), c2.GetString("CAT_GP_ALMACEN"), clv_productos.AsView.Width, 50dip, bmp, c2.GetString("CAT_GP_ID"), bgColor, textColor), c2.GetString("CAT_GP_NOMBRE")) +' End If +' Next +' End If +' ponProdsEnCero +' c2.Close + + + + + + + + +' Private inicioContador As String = DateTime.Now +' Log($"clv_prods_ll_VisibleRangeChanged : ${FirstIndex}, ${LastIndex} "$) + Dim ExtraSize As Int = 15 'List size + For i = Max(0, FirstIndex - ExtraSize) To Min(LastIndex + ExtraSize, clv_prods_ll.Size - 1) + Dim Pnl As B4XView = clv_prods_ll.GetPanel(i) + If i > FirstIndex - ExtraSize And i < LastIndex + ExtraSize Then +' Log(listaRenglones) + If Pnl.NumberOfViews = 0 Then 'Add each item/layout to the list/main layout + Pnl.LoadLayout("proditem") +' Pnl.Color = Colors.Cyan + p_prods.Width = Root.Width * 0.92 + p_botMasMen.Left = p_prods.Width - (p_botMasMen.Width + 5) + p_botMasMenc.Left = p_prods.Width - (p_botMasMen.Width + 5) + p_prods.Height = 134dip +' b_prodMenos.Height = 50dip +' b_prodMas.Height = 50dip +' et_pCant.Height = 51dip +' l_pCant.Height = 44dip +' l_pCant.Top = l_pCant.Top + 8 +' Pnl.Height = p_prods.Height +' Pnl.Height = 300dip + Pnl.SetLayoutAnimated(0,0,0,Pnl.Width,145dip) + Private cs As CSBuilder + cs.Initialize + l_prodX.SetTextSizeAnimated(0, 13) + If clv_prods_ll.GetValue(i).As(Map).Get("cant") <> Null And clv_prods_ll.GetValue(i).As(Map).Get("cant") > 0 Then + p_prods.Color=0xFFE2EEFF + + + + + et_pCant.TextColor=Colors.Red + et_pCantc.TextColor=Colors.Red + If Subs.pedidoGuardado Then +' Log("YA SE GUARDO") + et_pCant.Enabled = False +' b_prodMas.Enabled = False + b_prodMenos.Enabled = False + End If + Else + If clv_prods_ll.GetValue(i).As(Map).Get("prioridad") = "PRIORITARIO" Then + p_prods.Color = Colors.RGB(255, 212, 163) 'naranja + + Else If clv_prods_ll.GetValue(i).As(Map).Get("prioridad") = "COMPLEMENTARIO" Then + p_prods.Color = Colors.RGB(177, 200, 249)'azul + + else If clv_prods_ll.GetValue(i).As(Map).Get("prioridad") = "CATALOGO REGULAR" Then + p_prods.Color = Colors.White + + else If clv_prods_ll.GetValue(i).As(Map).Get("prioridad") = "ESTRATEGICO" Then + p_prods.Color = Colors.RGB(241, 255, 163) 'amarillo + End If + End If + + Private precio As String=NumberFormat2(clv_prods_ll.GetValue(i).As(Map).Get("precio").As(Double),1,2,2,False) +' Log(clv_prods_ll.GetValue(i).As(Map)) + +' c = Starter.skmt.ExecQuery2("SELECT PE_BCAJAS FROM PEDIDO WHERE PE_PROID = ? AND PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND PE_FOLIO = ?",Array As String(clv_prods_ll.GetValue(i).As(Map).Get("id"), B4XPages.MainPage.tipo_venta)) +'' Log(clv_prods_ll.GetValue(i).As(Map).Get("id")) +' If c.RowCount = 0 Then +' p_botMasMen.Visible = True +'' p_botMasMenc.Visible = True +' Else If c.RowCount > 0 Then +' c.Position = 0 +' If c.GetString("PE_BCAJAS") = "0" Then + If clv_prods_ll.GetValue(i).As(Map).Get("cant") <> Null Then et_pCant.Text = clv_prods_ll.GetValue(i).As(Map).Get("cant") +' p_botMasMen.Visible = True +'' p_botMasMenc.Visible = False +' Else If c.GetString("PE_BCAJAS") = "1" Then +' If clv_prods_ll.GetValue(i).As(Map).Get("cant") <> Null Then et_pCantc.Text = clv_prods_ll.GetValue(i).As(Map).Get("cant") +' p_botMasMen.Visible = False +'' p_botMasMenc.Visible = True +' End If +' End If + +' If clv_prods_ll.GetValue(i).As(Map).Get("b_caja").As(String) = "0" Then +' If clv_prods_ll.GetValue(i).As(Map).Get("cant") <> Null Then et_pCant.Text = clv_prods_ll.GetValue(i).As(Map).Get("cant") +' p_botMasMen.Visible = True +' p_botMasMenc.Visible = False +' Else If clv_prods_ll.GetValue(i).As(Map).Get("b_caja").As(String) = "1" Then +' If clv_prods_ll.GetValue(i).As(Map).Get("cant") <> Null Then et_pCantc.Text = clv_prods_ll.GetValue(i).As(Map).Get("cant") +' p_botMasMen.Visible = False +' p_botMasMenc.Visible = True +' Log("visible verdadero") +' Else IF clv_prods_ll.GetValue(i).As(Map).Get("b_caja").As(String) = "null" Then +' p_botMasMen.Visible = True +' p_botMasMenc.Visible = True +' Log("visible verdadero") +' End If +' If clv_prods_ll.GetValue(i).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(i).As(Map).Get("conversion").As(Int) = 1 Then +' Private maxcajas As Int = 0 +' Log("cajas a 0") +' Else +' Private maxcajas As Int = clv_prods_ll.GetValue(i).As(Map).Get("almacen")/clv_prods_ll.GetValue(i).As(Map).Get("conversion") +'' Log("cajas no a 0") +' End If +' Private maxcajas As Int = clv_prods_ll.GetValue(i).As(Map).Get("almacen")/clv_prods_ll.GetValue(i).As(Map).Get("conversion") + l_prodX.Text = cs.Color(Colors.red).append(clv_prods_ll.GetValue(i).As(Map).Get("prod")).pop.append(CRLF).Append("Existencias: " & clv_prods_ll.GetValue(i).As(Map).Get("almacen")).Color(0xFF017F01).Append($" $${precio}"$).Popall '${CRLF}Max. Cajas: ${maxcajas} + 'aqui si lo comentamos aparece la parte de cajas + '' por aqui vamos a corregir + ''Or clv_prods_ll.GetValue(i).As(Map).Get("almacen") < clv_prods_ll.GetValue(i).As(Map).Get("conversion") +' If clv_prods_ll.GetValue(i).As(Map).Get("conversion") = "1" Or clv_prods_ll.GetValue(i).As(Map).Get("precio_caja") = "0.0" Then +' p_botMasMenc.Visible = False +' End If +' If clv_prods_ll.GetValue(i).As(Map).Get("almacen") < clv_prods_ll.GetValue(i).As(Map).Get("conversion") Then +' Log(clv_prods_ll.GetValue(i).As(Map).Get("cant")) +' If clv_prods_ll.GetValue(i).As(Map).Get("cant").As(Int) = 0 Then +' Log("Aqui debemos ponerlo invisible") +' p_botMasMenc.Visible = False +' Else +' +' End If +'' p_botMasMenc.Visible = False +' End If + 'fin aparecer parte de cajas + End If +' Log($"${i}, ${FirstIndex}, ${LastIndex}, ${Pnl.NumberOfViews}. ${clv_prods_ll.Size}"$) + Else 'Not visible + ' If Pnl.NumberOfViews > 0 Then + ' Pnl.RemoveAllViews 'Remove none visable item/layouts from the list/main layout + ' End If + End If + PCLV.B4XSeekBar1.Value = clv_prods_ll.Size - FirstIndex +' Log($"Bar value: ${PCLV.B4XSeekBar1.Value}"$) + Next +End Sub + +Sub Busca_TextChanged (Old As String, New As String) +' Private inicioContador As String = DateTime.Now + If Not(clv_prods_ll.AsView.Visible) Then clv_prods_ll.AsView.Visible = True + If (New.Length = 1 Or New.Length = 2) And Not(forzarBusqueda) Then Return + forzarBusqueda = False + clv_prods_ll.Clear + listaProds.Initialize + listaHints.Initialize + Sleep(0) +' Dim p As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} where CAT_GP_NOMBRE like '%${New}%' and CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_CLASIF <> 'PROMOS' order by CAT_GP_NOMBRE"$) + Dim p As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select DISTINCT CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} LEFT JOIN PEDIDO ON CAT_GP_ID = PE_PROID where CAT_GP_NOMBRE like '%${New}%' AND CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_CLASIF <> 'PROMOS' AND CAT_GP_TIPO <> 'PROMOCION' union all select DISTINCT CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} LEFT JOIN PEDIDO ON CAT_GP_ID = PE_PROID where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN = 0 And CAT_GP_CLASIF <> 'PROMOS' and cat_gp_id in (select pe_proid from pedido where pe_cliente in (select cuenta from cuentaa)) order by 2"$) + Log("Llamamos LlenaProdsLL") + LlenaProdsLL(p) +' Do While p.NextRow +' Dim tempMap As Map = CreateMap("prod":p.GetString("CAT_GP_NOMBRE"), "precio":p.GetString("CAT_GP_PRECIO"), "almacen":p.GetString("CAT_GP_ALMACEN"), "id":p.GetString("CAT_GP_ID")) +' listaProds.Add(tempMap) +' listaHints.Add(p.GetString("CAT_GP_NOMBRE")) +' Dim Pnl As B4XView = xui.CreatePanel("") +' Pnl.SetLayoutAnimated(0, 0, 0, clv_prods_ll.AsView.Width, 50dip) 'Panel height + 4 for drop shadow +' clv_prods_ll.Add(Pnl, tempMap) +' Loop +' LogColor(clv_prods_ll.Size, Colors.red) + '' Log(listaProds) +' p.Close +' PCLV.B4XSeekBar1.MaxValue = clv_prods_ll.Size +' PCLV.B4XSeekBar1.MinValue = 0 +' PCLV.B4XSeekBar1.Interval = clv_prods_ll.Size/10 +' PCLV.B4XSeekBar1.Value = clv_prods_ll.Size +' PCLV.B4XSeekBar1.Update +' Log($"Min:0, max:${clv_prods_ll.Size}, Interval:${clv_prods_ll.Size/10}"$) +' LogColor("TIEMPO DE PROCESO DEL TEXTCHANGED: " & ((DateTime.Now-inicioContador)/1000), Colors.Red) +End Sub + +Sub LlenaProdsLL(p As ResultSet) + Log("Iniciamos LlenaProdsLL") + listaProds.Initialize + If hayPedido Then 'Si hay pedido obtenemos las cantidades de los productos para agregarlos al CLV. + Dim cantsMap As Map + cantsMap.Initialize + Dim pe As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select PE_PROID, PE_CANT from PEDIDO where PE_CLIENTE = '${clienteId}' and PE_CEDIS = '${Subs.traeAlmacen}' and PE_FOLIO = '${B4XPages.MainPage.tipo_venta}'"$) +' LogColor("Ponemos productos de pedido anterior: "&pe.RowCount, Colors.red) + Do While pe.NextRow + Private cant As Int = 0 +' If pe.GetString("PE_BCAJAS") = 0 Then + cantsMap.put(pe.GetString("PE_PROID"), pe.GetString("PE_CANT")) +' Else If pe.GetString("PE_BCAJAS") = 1 Then +' cantsMap.put(pe.GetString("PE_PROID"), pe.GetString("PE_CANTC")) +' End If + Log(clienteId &"|||||"&pe.GetString("PE_PROID")&"|||||"& pe.GetString("PE_CANT")) + Loop + pe.Close + End If +' Log(p.IsInitialized) + If p.IsInitialized Then +' Log("YA HAY RESULSET") + Else + + + +' Log("NO HAY RESULSET") + LogColor(Starter.tabla,Colors.blue) +' Dim p As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_CLASIF <> 'PROMOS' order by CAT_GP_NOMBRE"$) + +' Dim p As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select distinct CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} LEFT JOIN PEDIDO ON CAT_GP_ID = PE_PROID where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_CLASIF <> 'PROMOS' union all select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} LEFT JOIN PEDIDO ON CAT_GP_ID = PE_PROID where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN = 0 And CAT_GP_CLASIF <> 'PROMOS' and cat_gp_id in (select pe_proid from pedido where pe_cliente in (select cuenta from cuentaa)) order by 2"$) + + Dim p As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select distinct CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, CAT_GP_TIPOPROD, CAT_GP_INICIATIVA from ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPO <> 'PROMOS' and CAT_GP_TIPO <> 'PROMOCION' + order by + Case CAT_GP_TIPOPROD when 'PRIORITARIO' THEN 0 + WHEN 'ESTRATEGICO' THEN 1 + WHEN 'COMPLEMENTARIO' then 2 + Else 3 + End, CAT_GP_NOMBRE"$) + End If + +' Do While p.NextRow +' Private cant As Int = 0 +' If hayPedido And cantsMap.ContainsKey(p.GetString("CAT_GP_ID")) Then +' Log(p.GetString("CAT_GP_ID")) +' cant = cantsMap.Get(p.GetString("CAT_GP_ID")) +' End If +' If p.GetString("CAT_GP_ID") <> "GUN141" And p.GetString("CAT_GP_ID") <> "GUN142" Then +' Log(p.GetString("CAT_GP_NOMBRE")) +' Dim tempMap As Map = CreateMap("prod":p.GetString("CAT_GP_NOMBRE"), "precio":p.GetString("CAT_GP_PRECIO"), "prioridad":p.GetString("CAT_GP_TIPOPROD"), "almacen":p.GetString("CAT_GP_ALMACEN"), "id":p.GetString("CAT_GP_ID"), "cant":cant, "conversion":1, "precio_caja":0, "b_caja":0) +' End If +'' Log(tempMap) +' listaProds.Add(tempMap) +' Loop + + Do While p.NextRow + Private cant As Int = 0 + If hayPedido And cantsMap.ContainsKey(p.GetString("CAT_GP_ID")) Then + Log(p.GetString("CAT_GP_ID")) + cant = cantsMap.Get(p.GetString("CAT_GP_ID")) + End If + + If p.GetString("CAT_GP_ID") <> "GUN141" And p.GetString("CAT_GP_ID") <> "GUN142" Then +' Log(p.GetString("CAT_GP_NOMBRE")) + ' ¡Importante! Crear un NUEVO mapa en cada iteración. + Dim tempMap As Map = CreateMap( _ + "prod": p.GetString("CAT_GP_NOMBRE"), _ + "precio": p.GetString("CAT_GP_PRECIO"), _ + "prioridad": p.GetString("CAT_GP_TIPOPROD"), _ + "almacen": p.GetString("CAT_GP_ALMACEN"), _ + "id": p.GetString("CAT_GP_ID"), _ + "cant": cant, _ + "conversion": 1, _ + "precio_caja": 0, _ + "b_caja": 0 _ + ) + listaProds.Add(tempMap) ' Agregar el nuevo mapa a la lista + End If + Loop +' p.Close +' Log(listaProds) + PCLV.Commit + clv_prods_ll.Clear + Private listaProdsConCant, listaProdsConCantIndex As List + listaProdsConCant.Initialize + listaProdsConCantIndex.Initialize + listaHints.Initialize + For q=0 To listaProds.Size-1' quitamos los productos con cantidad previa. + If listaProds.Get(q).As(Map).Get("cant").As(Int) <> 0 Then +' Log(listaProds.Get(q).As(Map).Get("cant")) + listaProdsConCant.Add(listaProds.Get(q)) + listaProdsConCantIndex.Add(q) + End If + Next +' Log(listaProdsConCantIndex) + Private cont As Int = 0 + For pr0=0 To listaProdsConCant.Size - 1 'Agregamos los productos con cantidad previa. + Private Pnl As B4XView = xui.CreatePanel("") +' Pnl.SetLayoutAnimated(0, 0, 0, clv_prods_ll.AsView.Width, 300dip) + Pnl.SetLayoutAnimated(0, 0, 0, clv_prods_ll.AsView.Width, 65dip) + clv_prods_ll.Add(Pnl, listaProdsConCant.Get(pr0)) + listaHints.Add(listaProdsConCant.get(pr0).As(Map).Get("prod")) + cont = cont + 1 + Next +' LogColor(clv_prods_ll.Size, Colors.red) +' Log(listaProds.Size) + For pr=0 To listaProds.Size-1 + If listaProdsConCantIndex.IndexOf(pr) = -1 Then + Private Pnl As B4XView = xui.CreatePanel("") + Pnl.SetLayoutAnimated(0, 0, 0, clv_prods_ll.AsView.Width, 65dip) + + + listaHints.Add(listaProds.get(pr).As(Map).Get("prod")) + clv_prods_ll.Add(Pnl, listaProds.Get(pr)) +' + cont = cont + 1 + End If + Next +' LogColor(clv_prods_ll.Size, Colors.red) +' PCLV.Commit +' Log("CONT=" & cont) +' Log("CLV_PRODSLL="&clv_prods_ll.Size) + PCLV.B4XSeekBar1.MaxValue = clv_prods_ll.Size + PCLV.B4XSeekBar1.MinValue = 0 + PCLV.B4XSeekBar1.Interval = clv_prods_ll.Size/20 + PCLV.B4XSeekBar1.Value = clv_prods_ll.Size + PCLV.B4XSeekBar1.Update +' Log($"Min:0, max:${clv_prods_ll.Size}, Interval:${clv_prods_ll.Size/20}"$) + reiniciarlistaProds = False +End Sub + +'Return the hint that will be displayed when the user fast scrolls the list. It can be a string or CSBuilder. +Sub PCLV_HintRequested(Index As Int) As Object + Dim word As String = listaHints.get(Index) + Return word +End Sub + + + + +'Sub b_prodMenosc_Click +' totalcajasmaspiezas = 0 +' etCantHasFocus = False +' Root.RequestFocus +'' LogColor("b_prodMenos_Click", Colors.Magenta) +' Dim index As Int = clv_prods_ll.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(2).GetView(2) +' Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) +' Dim lProdX As B4XView = pnl.GetView(1) +' Dim panelcajas As B4XView = pnl.GetView(3) +' Dim panelpiezas As B4XView = pnl.GetView(2) +'' Log($"precio|stock:${laCant.tag}"$) +' If laCant2.Text = "" Then laCant2.Text = 0 +'' Log("lacant.text="&laCant.text) +' laCant2.Text = $"${NumberFormat2(laCant2.Text-1,0,0,0,False)}"$ +' If laCant2.Text < 0 Then laCant2.Text = 0 +' Private tmpMap As Map = clv_prods_ll.GetValue(index).As(Map) +' Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") +' Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") +' Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant2.Text, "almacen":Subs.traeAlmacen) +' Private nombreX As String = Subs.traeProdNombre(id) +' Private conversion As String = clv_prods_ll.GetValue(index).As(Map).Get("conversion") +' Private preciocaja As String = clv_prods_ll.GetValue(index).As(Map).Get("precio_caja") +' +' Log(tmpMap) +'' prodsMap.Put(id, tmpMap) +' If laCant2.Text = 0 Then prodsMap.Remove(id) +' If laCant2.Text = 0 Then +' panelpiezas.Visible = True +' Else If laCant2.Text > 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion") < clv_prods_ll.GetValue(index).As(Map).Get("almacen") Then +' panelpiezas.Visible = False +' End If +'' If laCant.IsInitialized Then +'' totalcajasmaspiezas = laCant.Text + laCant2.Text +'' Else +'' totalcajasmaspiezas = laCant2.Text +'' End If +' LogColor("prodsMap="&prodsMap, Colors.blue) +'' (Subs.traeAlmacen, p1.Get("precio"), p1.Get("cant"), pn, p, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta) +' Log($"${Subs.traeAlmacen}, ${precio}, ${laCant2.text}, ${Subs.traeProdNombre(id)}, ${id}, ${clienteId}"$) +'' Subs.actualizaProducto(Subs.traeAlmacen, preciocaja,(laCant2.Text * conversion), Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,laCant2.Text,1) +' Subs.actualizaProducto2(Subs.traeAlmacen, preciocaja,(laCant2.Text * conversion), Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,laCant2.Text,1) +' cuentaProds +' LogColor("prodsMap="&prodsMap, Colors.blue) +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +' If 1 = 1 Then +' Private cs As CSBuilder +' cs.Initialize +' Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_ID = '${id}'"$) +' Private invActualizado As String = "0" +' If o.RowCount > 0 Then +' o.Position = 0 +' invActualizado = o.GetString("CAT_GP_ALMACEN") +' End If +' If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then +' Private maxcajas2 As Int = 0 +' Log("cajas a 0") +' Else +' Private maxcajas2 As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") +' Log("cajas no a 0") +' End If +' If 2 = 2 Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}${CRLF}Max. Cajas: ${maxcajas2}"$).Popall +'' Log(lProdX.Text) +' End If +' If Subs.totalPedido < 1 Then laCant2.Text = "0" +' invTotal = totalcajasmaspiezas + Subs.traeinventario(id) +'' LogColor("InvTotal PRODMAS: " & invTotal, Colors.Red) +' +'End Sub +' +'Sub b_prodMasc_Click +' etCantHasFocus = False +' Root.RequestFocus +'' LogColor("b_prodMas_Click", Colors.Magenta) +' +' Dim index As Int = clv_prods_ll.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(2).GetView(2) +' Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) +' Dim lProdX As B4XView = pnl.GetView(1) +' Dim panelcajas As B4XView = pnl.GetView(3) +' Dim panelpiezas As B4XView = pnl.GetView(2) +'' Private tmpMap As Map = clv_prods_ll.GetValue(index).As(Map) +' Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") +' Private inv As String=clv_prods_ll.GetValue(index).As(Map).Get("almacen") +' Private existencias As String = clv_prods_ll.GetValue(index).As(Map).Get("almacen") +' Private conversion As String = clv_prods_ll.GetValue(index).As(Map).Get("conversion") +' Private preciocaja As String = clv_prods_ll.GetValue(index).As(Map).Get("precio_caja") +' Log(conversion) +' Log($"Existencias: ${existencias}"$) +' If laCant2.Text = "" Then laCant2.Text = 0 +' Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") +'' If laCant.Text + 1 <= inv Then +' '' Log(NumberFormat2(laCant.Text+1,0,0,0,False)) +'' laCant.Text = $"${NumberFormat2(laCant.Text+1,0,0,0,False)}"$ +' '' Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") +'' Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") +' '' Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":Subs.traeAlmacen) +' '' Log(tmpMap) +' '' prodsMap.Put(id, tmpMap) +' '' LogColor(prodsMap, Colors.blue) +'' End If +'' Log("Cantidad + exis " & (laCant.Text + existencias)) +'' Log( (laCant.Text + 1 <= (laCant.Text + existencias))) +'' Log("inventario "&Subs.traeinventario(id)) +'' Log((Subs.totalPedido - precio > 1)) +'' Log((Subs.totalPedido)) +'' Log(precio) +' Log(Subs.traeinventario(id)) +' Log((laCant2.Text * conversion) + conversion) +' Log((laCant2.Text *conversion)+ Subs.traeinventario(id)) +' If Subs.traeinventario(id) > 0 And ((laCant2.Text * conversion) + conversion <= ((laCant2.Text *conversion)+ Subs.traeinventario(id))) Then 'And (Subs.totalPedido - precio > 1) +'' Log(clv_prods_ll.GetValue(index).As(Map)) +' clv_prods_ll.GetValue(index).As(Map).Put("almacen", (inv - conversion)) +' inv = inv - conversion +'' laCant.Text = $"$1.0{laCant.Text+1}"$ +' laCant2.Text = NumberFormat2((laCant2.Text + 1), 1, 0, 0, False) +'' Log(clv_prods_ll.GetValue(index).As(Map)) +' Log("cuando entro aqui?") +' End If +' Private nombreX As String = Subs.traeProdNombre(id) +'' Subs.actualizaProducto(Subs.traeAlmacen, laCant.text, id, clienteId) +' Log((laCant2.Text * conversion)) +' If laCant2.Text > 0 Then +' panelpiezas.Visible = False +' Else If laCant2.Text = 0 Then +' panelpiezas.Visible = True +' End If +' +'' LogColor(laCant.Text,Colors.Red) +'' If laCant.IsInitialized Then +'' totalcajasmaspiezas = laCant.Text + laCant2.Text +'' Else +'' totalcajasmaspiezas = laCant2.Text +'' End If +' +'' Subs.actualizaProducto(Subs.traeAlmacen,preciocaja,(laCant2.Text * conversion), Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,laCant2.Text,1) +' Subs.actualizaProducto2(Subs.traeAlmacen,preciocaja,(laCant2.Text * conversion), Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,laCant2.Text,1) +' cuentaProds +'' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +' If 1 = 1 Then +' Private cs As CSBuilder +' cs.Initialize +' Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_ID = '${id}'"$) +' Private invActualizado As String = "0" +' If o.RowCount > 0 Then +' o.Position = 0 +' invActualizado = o.GetString("CAT_GP_ALMACEN") +' End If +' If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then +' Private maxcajas2 As Int = 0 +' Log("cajas a 0") +' Else +' Private maxcajas2 As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") +' Log("cajas no a 0") +' End If +' If 2 = 2 Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}${CRLF}Max. Cajas: ${maxcajas2}"$).Popall +'' Log(lProdX.Text) +' End If +' invTotal = totalcajasmaspiezas + Subs.traeinventario(id) +'' LogColor("InvTotal PRODMAS: " & invTotal, Colors.Red) +' +'End Sub +' +'Private Sub et_pCantc_FocusChanged (HasFocus As Boolean) +' LogColor($"focus changed=${HasFocus}"$, Colors.Magenta) +' If et_pCantc.Text = "" Then et_pCantc.Text = "0" +' Dim index As Int = clv_prods_ll.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(2).GetView(2) +' Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) +' Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") +' If laCant2.Text = "" Then laCant2.Text = "0" +' etCantHasFocus = HasFocus +'' LogColor(laCant.Text,Colors.Red) +'' If laCant.IsInitialized Then +'' totalcajasmaspiezas = laCant.Text + laCant2.Text +'' Else +'' totalcajasmaspiezas = laCant2.Text +'' End If +' invTotal = totalcajasmaspiezas + Subs.traeinventario(id) +'' LogColor("InvTotal PRODMAS: " & invTotal, Colors.Red) +' +' cuentaProds +'End Sub +' +'Private Sub et_pCantc_TextChanged (Old As String, New As String) +'' Log(etCantHasFocus) +'' Log("InvTotal: " & invTotal) +' If etCantHasFocus = True Then +'' Sleep(500) +'' LogColor($"txt changed: ${Old}|${New}, hasfocus=${etCantHasFocus}"$,Colors.Magenta) +' Dim index As Int = clv_prods_ll.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(2).GetView(2) +' Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) +' Dim lProdX As B4XView = pnl.GetView(1) +' Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") +' Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") +' Private inv As String=clv_prods_ll.GetValue(index).As(Map).Get("almacen") +' Private inv As String=Subs.traeinventario(id) +' Private nombreX As String = Subs.traeProdNombre(id) +' Dim panelcajas As B4XView = pnl.GetView(3) +' Dim panelpiezas As B4XView = pnl.GetView(2) +' Private conversion As String = clv_prods_ll.GetValue(index).As(Map).Get("conversion") +' Private preciocaja As String = clv_prods_ll.GetValue(index).As(Map).Get("precio_caja") +' +' invTotal = Subs.traeinventario(id) +' Log("inventario total "& invTotal) +' If(New = "" Or New = Null Or New = "-") Then New = 0 +'' If New < 0 Then New = 0 +' Log(($"new*conversion ${New * conversion} > ${invTotal} = ${((New * conversion) > invTotal)}"$)) +' If((New * conversion) > invTotal) Then +'' Dim maximocajas As Int = invTotal / conversion +' Sender.As(EditText).text = 0 +' New = 0 +'' LogColor("cajas maximas "& maximocajas, Colors.Red) +' pnl.GetView(2).Visible = True +' Log("ponemos en 0") +' End If +' +' ' Log($"inventario=${inv}"$) +' Log("inventario total despues de max "& invTotal) +' +' If New = "" Then New = 0 +' If laCant2.Text = "" Then laCant2.Text = 0 +'' LogColor("la cant2 " &laCant2.Text,Colors.Red) +' +' If New > 0 Then +' Log("lo ocultamos") +' panelpiezas.Visible = False +' Else If New = 0 Then +' panelpiezas.Visible = True +' End If +' +'' If laCant.IsInitialized Then +'' totalcajasmaspiezas = laCant.Text + laCant2.Text +'' Else +'' totalcajasmaspiezas = laCant2.Text +'' End If +' Log("InvTotal: " & invTotal) +' +' If Not(Old = "0" And New = "") And laCant2.Text <> Null And laCant2.Text <> "" And etCantHasFocus Then +' If invTotal - (laCant2.Text * conversion) >= 0 Then +' LogColor("validacion inventariio " & (invTotal - (laCant2.Text * conversion)), Colors.Blue) +' Log("actualizamos producto") +' Subs.actualizaProducto2(Subs.traeAlmacen, preciocaja,(laCant2.Text * conversion), Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,laCant2.Text,1) +' cuentaProds +' Else +' Private totalcajaspermi As Int = invTotal / conversion +' laCant2.Text = totalcajaspermi +' Log("cajas permitidas total por guerra "& totalcajaspermi) +' End If +' End If +' LogColor("la cant2 " & laCant2.Text,Colors.Green) +' +' +'' If New <> "" And New.SubString2(0,0) = "0" Then +'' New.SubString(1) +'' End If +'' If New <> "" And New.SubString(1) <> "" Then +'' Log(New.SubString(1)) +'' New = New.SubString(1) +'' laCant.Text = New.SubString(1) +'' Log(laCant.Text) +'' End If +' +' If 1 = 1 Then +' Private cs As CSBuilder +' cs.Initialize +' Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_ID = '${id}'"$) +' Private invActualizado As String = "0" +'' If o.RowCount > 0 Then +' o.Position = 0 +' invActualizado = Subs.traeinventario(id) +' Log(Subs.traeinventario(id)) +'' End If +' +' If New = "" Then New = 0 +' If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then +' Private maxcajas2 As Int = 0 +' Log("cajas a 0") +' Else +' Private maxcajas2 As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") +' Log("cajas no a 0") +' End If +' lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & (Subs.traeinventario(id))).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}${CRLF}Max. Cajas: ${maxcajas2}"$).Popall +' End If +' End If +'End Sub + + +'Inserta la promo especial en pedido +Sub terminarpromoesp + c2 = B4XPages.MainPage.skmt.ExecQuery($"select * from ${Subs.traeTablaProds(tipo_venta)} WHERE CAT_GP_ID IN (SELECT DISTINCT CAT_PE_IDPROMO FROM CAT_PROMO_ESP)"$) + If c2.RowCount > 0 Then + c2.Position = 0 + Subs.guardaProducto(c2.GetString("CAT_GP_ID"), "0", 1,c2.GetString("CAT_GP_NOMBRE"), c2.GetString("CAT_GP_ID"), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta) + c = B4XPages.MainPage.skmt.ExecQuery("select * from CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (SELECT DISTINCT CAT_PE_IDPROMO FROM CAT_PROMO_ESP)") + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Private pn As String = Subs.traeProdNombre(c.GetString("CAT_DP_IDPROD")) + Subs.guardaProducto(c2.GetString("CAT_GP_ID"), c.GetString("CAT_DP_PRECIO"), c.GetString("CAT_DP_PZAS"), pn, c.GetString("CAT_DP_IDPROD"), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta) + Next + End If + c.Close + End If + c2.Close +End Sub \ No newline at end of file diff --git a/B4A/C_Promos.bas b/B4A/C_Promos.bas new file mode 100644 index 0000000..e7f5e99 --- /dev/null +++ b/B4A/C_Promos.bas @@ -0,0 +1,1051 @@ +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 +' Private l_promoDesc As Label +' Private lv_prodsFijos As ListView +' Private clv_prodsVariabes As CustomListView +' Private l_prodsFijos As Label +' Private l_prodsVariables As Label +' Private i_prod As ImageView +' Private l_prodX As Label +' Private b_prodMenos As Button +' Private et_pCant As EditText +' Private b_prodMas As Button +' Private l_pCant As Label +' Dim totalProds As Int = 0 +' Dim prodsVarReq As Int = 0 +' Dim prodsVarReq2 As Int = 0 +' Dim totalCompra As Float = 0 +' Dim prodsFijosTot As Float = 0 +' Dim tpf As Int = 0 +' Dim tpf2 As Int = 0 +' Dim maxCantPromos As Int = 1 +' Private l_totProds As Label +' Private l_total As Label +' Private b_terminar1 As Button +' Private p_promociones As Panel +' Dim prodsIds, prodsCants, prodsPrecios, prodsIds2, prodsCants2, prodsPrecios2 As List +' Dim estaPromo, esteCliente As String +' Private b_promoMas As Button +' Private b_promoMenos As Button +' Private et_promoCant As EditText +' Private l_promosCant As Label +' Private b_continuar As Button +' Private p_prodsVariables As Panel +' Dim laPromo = "", elCliente = "" As String +'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("promociones") +' p_promociones.Top=0 +' p_promociones.Left=0 +' p_promociones.Height=Root.Height +' p_promociones.Width=Root.Width +' b_terminar1.Left = Root.Width - (b_terminar1.Width + 10) +' b_continuar.Left = Root.Width - b_terminar1.Width - (b_continuar.Width + 20) +'End Sub +' +'Sub B4XPage_Appear +' prodsIds.Initialize +' prodsCants.Initialize +' prodsPrecios.Initialize +' prodsIds2.Initialize +' prodsCants2.Initialize +' prodsPrecios2.Initialize +' Log($"laPromo=${laPromo}, el cliente=${elCliente}"$) +' If laPromo <> "" Then muestraPromo(laPromo, elCliente) +'End Sub +''You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. +' +'Sub muestraPromo(promo As String, cliente As String) +' Private thisLog As Boolean = False +' Log(promo) +' estaPromo = promo +' esteCliente = cliente +' Private mp As Map = Subs.traePromo(promo, cliente) +' Private prodsPromo As Map = mp.Get("productos") 'Los productos de la promoción. +' Private invDispPromo As Map = Subs.traemosInventarioDisponibleParaPromo(promo) +'' If thisLog Then Log($"invDispPromo=${invDispPromo}"$) +' Log("Max promos por inv de prods FIJOS: " & Subs.revisaMaxPromosProdsFijosPorInventario(mp)) +' Log("Max promos por inv de prods VARIABLES: " & Subs.revisaMaxPromosProdsVariablesPorInventario(mp)) +' maxCantPromos = Subs.revisaMaxPromosProdsVariablesPorInventario(mp) +' et_promoCant.Text = 1 +' l_promosCant.text = "Max promos: " & maxCantPromos +' Private cs As CSBuilder +' cs.Initialize +' If thisLog Then Log(mp) +' If thisLog Then Log(prodsPromo) +' 'Ponemos la promo y descripción. +'' Dim desc As String = $"Promoción: ${promo}${CRLF}${mp.Get("descripcion")}"$ +'' Dim desc As String = cs.append("Promocion: ").Color(Colors.RGB(100,149,237)).Append(promo).pop.append(CRLF).Append(mp.Get("descripcion")).Popall +' l_promoDesc.Text = cs.Color(Colors.White).append("Promocion: ").pop.append(CRLF).Append(promo).append(CRLF).Append(mp.Get("descripcion")).Popall +' prodsFijosTot = 0 +' 'Ponemos el texto en las etiquetas de la cantidad de productos. +'' Dim pf As List = mp.Get("prodsFijos") +' Dim pv As List = mp.Get("prodsVariables") +' If thisLog Then Log(mp) +' tpf = 0 +' For Each pfp As Int In mp.Get("prodsFijosPiezas").As(List) +' tpf = tpf + pfp +' Next +' tpf2 = tpf +'' tpf = tpf * maxCantPromos +' l_prodsFijos.Text = $"Productos fijos (${tpf})"$ +' prodsVarReq = mp.Get("prodsVariablesRequeridos") +' prodsVarReq2 = prodsVarReq +' l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq}"$ +' If prodsVarReq = 0 Then +' p_prodsVariables.Visible = False +' Else +' p_prodsVariables.Visible = True +' End If +' 'Llenamos el listview con los productos fijos. +' Dim label1 As Label +' label1 = lv_prodsFijos.SingleLineLayout.Label +' label1.TextSize = 13 +' label1.TextColor = Colors.black +' lv_prodsFijos.SingleLineLayout.ItemHeight = 30dip +' lv_prodsFijos.Clear +'' If pf.Size < 1 Then pf.Add("Sin productos fijos.") +' lv_prodsFijos.Clear +' agregaFijosALista(mp, True) +' If thisLog Then Log("Total prods fijos = " & prodsFijosTot) +'' If thisLog Then Log("======="&prodsMap) +' l_totProds.text = $"Productos: ${tpf}"$ +' l_total.Text = $"Total: $$1.2{prodsFijosTot}"$ +'' Dim ins As InputStream +'' Dim bmp As Bitmap +'' Dim jpeg() As Byte +' +' 'Llenamos el listview con los productos variables. +' If thisLog Then Log(pv) +' If thisLog Then Log("invDisp=" & invDispPromo) +' clv_prodsVariabes.Clear +' For Each p As String In pv +' If invDispPromo.ContainsKey(p) Then 'Si no esta en la lista de productos con inventario no lo mostramos. +'' c2.Position=i +'' jpeg = c2.GetBlob("CAT_GP_IMG") +'' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +'' bmp.Initialize2(ins) +' Private thisProd As Map = prodsPromo.Get(p) +' If thisLog Then Log(thisProd) +' clv_prodsVariabes.Add(CreateListItem(Subs.traeProdNombre(p)&CRLF&"Hay " & invDispPromo.Get(p) & " $" & thisProd.Get("precio"), thisProd.Get("precio"), invDispPromo.Get(p), clv_prodsVariabes.AsView.Width, 50dip, Null, p), p) +' End If +' Next +' b_terminar1.Visible = False +' b_continuar.Visible = False +' cuentaProds +'End Sub +' +''Agregamos los productos fijos a una lista para despues meterlos en el pedido. +'Sub agregaFijosALista(mp As Map, addListItem As Boolean) +' Private thisLog As Boolean = False +' Private cont As Int = 0 +' prodsFijosTot = 0 +' Dim pf As List = mp.Get("prodsFijos") +' If pf.Size < 1 Then pf.Add("Sin productos fijos.") +'' Private m As Map +'' prodsMap.Put(estaPromo, CreateMap("cant":1, "precio":0)) +'' prodsIds.Add(estaPromo) +' prodsIds.clear +' prodsCants.clear +' prodsPrecios.clear +' prodsIds.Add(estaPromo) +' prodsCants.Add(et_promoCant.text.As(Int)) +' prodsPrecios.Add(0) +' For Each p As String In pf +' Log($"cont=${cont}, mp=${mp}"$) +' If mp.Get("prodsFijosPiezas").As(List).Size > 0 Then +' Private tpi As String = mp.Get("prodsFijosPiezas").As(List).Get(cont) +' Else +' Private tpi As String = 0 +' End If +' If mp.Get("prodsFijosPrecios").As(List).Size > 0 Then +' Private tpr As String = mp.Get("prodsFijosPrecios").As(List).Get(cont) +' Else +' Private tpr As String = 0 +' End If +' prodsFijosTot = prodsFijosTot + (tpi * tpr) +' If thisLog Then Log("|"&tpi&"|"&p) +' Private ntpi As Int = tpi * et_promoCant.text +' If addListItem And tpi > 0 Then lv_prodsFijos.AddSingleLine(ntpi & " " & Subs.traeProdNombre(p) & " - $" & tpr) +' cont = cont+1 +'' m=CreateMap("cant":tpi, "precio":tpr) +'' prodsMap.Put(p, m) +' prodsIds.Add(p) +' prodsCants.Add(tpi.As(Int)*et_promoCant.text.As(Int)) +' prodsPrecios.Add(tpr) '*et_promoCant.text.As(Int) +' Next +'End Sub +' +'Sub CreateListItem(Text As String, precioU As String, inv As Int, Width As Int, Height As Int, img As Bitmap, prodId As String) As Panel 'ignore +' Dim p As B4XView = xui.CreatePanel("") +' p.SetLayoutAnimated(0, 0, 0, Width, Height) +' p.LoadLayout("prodItem") +' l_prodX.TextSize = 12 +' l_prodX.Text = Text +'' l_pCant.Text = 0 +' l_pCant.Tag = precioU&"|"&inv&"|"&prodId +' et_pCant.Tag = precioU&"|"&inv&"|"&prodId +' et_pCant.BringToFront +'' i_prod.Bitmap = img +' Return p +'End Sub +' +'Sub b_prodMenos_Click +' Dim index As Int = clv_prodsVariabes.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_prodsVariabes.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +'' Dim laCant As B4XView = pnl.GetView(5) +' Dim laCant As B4XView = pnl.GetView(2).GetView(3) +'' Log($"precio|stock:${laCant.tag}"$) +' laCant.Text = $"$1.0{laCant.Text-1}"$ +' If laCant.Text < 0 Then laCant.Text = 0 +'' Dim chk As B4XView = pnl.GetView(2) +' cuentaProds +'' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +'' l_totProds.text = $"Total Productos: ${totalProds}"$ +'End Sub +' +'Sub b_prodMas_Click +' If totalProds < prodsVarReq + tpf Then +' Dim index As Int = clv_prodsVariabes.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_prodsVariabes.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +'' Dim laCant As B4XView = pnl.GetView(5) +' Dim laCant As B4XView = pnl.GetView(2).GetView(3) +'' Log($"precio|stock:${laCant.tag}"$) +'' Log($"Indice: ${index}, cant:${laCant.Text+1}, precioU: ${laCant.tag}"$) +' Dim esteTag As List = Regex.Split("\|", laCant.Tag) +'' Log(esteTag) +' If laCant.Text + 1 <= esteTag.get(1) Then +' laCant.Text = $"$1.0{laCant.Text+1}"$ +' cuentaProds +' End If +' End If +'' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +'' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +'' l_totProds.text = $"Total Productos: ${totalProds}"$ +'End Sub +' +'Private Sub et_pCant_TextChanged (Old As String, New As String) +'' LogColor("txt changed",Colors.Magenta) +' cuentaProds +'End Sub +' +'Sub cuentaProds +' Log("=====================================================") +' Log("Inicia cuentaProds") +' Private thisLog As Boolean = False +' If thisLog Then LogColor($"ProdsFijos=${tpf}, totalProds=${totalProds}, totalCompra=${totalCompra}"$, Colors.Red) +' prodsIds2.Clear +' prodsCants2.Clear +' prodsPrecios2.Clear +' lv_prodsFijos.Clear +' agregaFijosALista(Subs.traePromo(estaPromo, esteCliente), True) +'' Log(prodsIds) +' Private tcpf As Float = 0 'Total de compra de productos fijos. +' For pf = 0 To prodsIds.Size - 1 +' If thisLog Then Log($"${tcpf} + ${prodsCants.Get(pf)} * ${prodsPrecios.Get(pf)} = ${(prodsPrecios.Get(pf) * prodsCants.Get(pf))}"$) +' tcpf = tcpf + (prodsPrecios.Get(pf) * prodsCants.Get(pf)) +' Next +'' Log("Total compra pordsFijos = " & tcpf) +' totalCompra = tcpf +' totalProds = tpf 'Cantidad total de productos fijos. +' For i = 0 To clv_prodsVariabes.GetSize - 1 +' Private p0 As B4XView = clv_prodsVariabes.GetPanel(i) +' Private p As B4XView = p0.GetView(0) +' Private cant1 As B4XView = p.GetView(2).GetView(3) +' If cant1.Text = "" Then cant1.Text = 0 +' totalProds = totalProds + cant1.Text +' Private esteTag As List = Regex.Split("\|", cant1.Tag) +' If cant1.Text > esteTag.Get(1) Then cant1.Text = esteTag.Get(1) +' If cant1.Text > 0 Then +' Log(esteTag.Get(2) & "|" & cant1.Text) +' totalCompra = totalCompra + (esteTag.get(0) * cant1.text) +' If thisLog Then Log($"Cant: ${cant1.Text}, Suma: ${totalCompra}"$) +' prodsIds2.Add(esteTag.Get(2)) +' prodsCants2.Add(cant1.Text) +' prodsPrecios2.Add(esteTag.get(0)) +' End If +'' Log(esteTag) +'' Log($"Cant: ${cant1.Text}, Suma: ${totalCompra}"$) +'' totalCompra = totalCompra * et_promoCant.Text +'' totalProds = totalProds * et_promoCant.Text +' +' l_total.Text = $"Total: $$1.2{totalCompra}"$ +' l_totProds.text = $"Productos: ${totalProds}"$ +' Next +' If thisLog Then Log($"Total Prods: ${totalProds}, Total: $$1.2{totalCompra}"$) +' l_total.Text = $"Total: $$1.2{totalCompra}"$ +' l_totProds.text = $"Productos: ${totalProds}"$ +' If totalProds < prodsVarReq + tpf Or totalProds > prodsVarReq + tpf Then +'' Log("INCOMPLETA") +' b_terminar1.Visible = False +' b_continuar.Visible = False +' Else +'' Log("COMPLETA") +' b_terminar1.Visible = True +' b_continuar.Visible = True +' End If +' If thisLog Then LogColor($"${prodsIds}${CRLF}${prodsCants}${CRLF}${prodsPrecios}"$, Colors.blue) +' If thisLog Then LogColor($"${prodsIds2}${CRLF}${prodsCants2}${CRLF}${prodsPrecios2}"$, Colors.Magenta) +' LogColor($"Total Prods: ${totalProds}, Total: $$1.2{totalCompra}"$, Colors.Blue) +'End Sub +' +'Private Sub et_pCant_FocusChanged (HasFocus As Boolean) +' LogColor("focus changed", Colors.Magenta) +' cuentaProds +'End Sub +' +'Private Sub b_promoMenos_Click +' If et_promoCant.Text > 1 Then +' et_promoCant.Text = et_promoCant.Text.As(Int) - 1 +' End If +' l_prodsFijos.Text = $"Productos fijos (${tpf2 * et_promoCant.Text.As(Int)})"$ +' l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq2 * et_promoCant.Text.As(Int)}"$ +' tpf = tpf2 * et_promoCant.Text.As(Int) +' prodsVarReq = prodsVarReq2 * et_promoCant.Text.As(Int) +' Log($"Max promos=${et_promoCant.Text.As(Int)}, Prods fijos=${tpf}, "$) +' cuentaProds +'End Sub +' +'Private Sub b_promoMas_Click +' If et_promoCant.Text < maxCantPromos Then +' et_promoCant.Text = et_promoCant.Text.As(Int) + 1 +' l_prodsFijos.Text = $"Productos fijos (${tpf2 * et_promoCant.Text.As(Int)})"$ +' l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq2 * et_promoCant.Text.As(Int)}"$ +' tpf = tpf2 * et_promoCant.Text.As(Int) +' prodsVarReq = prodsVarReq2 * et_promoCant.Text.As(Int) +' Log($"Max promos=${et_promoCant.Text.As(Int)}, Prods fijos=${tpf}, "$) +' End If +' If et_promoCant.text > maxCantPromos Then et_promoCant.Text = maxCantPromos +' cuentaProds +'End Sub +' +'Private Sub b_terminar1_Click +' cuentaProds +' Log("====================================================================") +'' Log($"${prodsIds}${CRLF}${prodsCants}${CRLF}${prodsPrecios}"$) +' For t = 0 To prodsIds.Size - 1 'Guardamos los productos fijos de la promocion en pedido. +' Private pn As String = Subs.traeProdNombre(prodsIds.Get(t)) +' If prodsCants.Get(t) > 0 Then Subs.guardaProducto(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn&" ", prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) +' Next +' For t = 0 To prodsIds2.Size - 1 'Guardamos los productos variables de la promocion en pedido. +' Private pn As String = Subs.traeProdNombre(prodsIds2.Get(t)) +' Subs.guardaProducto(estaPromo, prodsPrecios2.Get(t), prodsCants2.Get(t), pn, prodsIds2.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) +' Next +' lv_prodsFijos.Clear +' B4XPages.MainPage.bTerminarClicked = True +' B4XPages.ShowPage("Cliente") +'End Sub +' +'Private Sub b_continuar_Click +' cuentaProds +' Log("====================================================================") +' Log($"${prodsIds}${CRLF}${prodsCants}${CRLF}${prodsPrecios}"$) +' For t = 0 To prodsIds.Size - 1 'Guardamos los productos fijos de la promocion en pedido. +' Private pn As String = Subs.traeProdNombre(prodsIds.Get(t)) +' LogColor(pn,Colors.Red) +' If pn <> "N/A" Then +' Subs.guardaProducto(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn, prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) +' End If +' Next +' Log(prodsIds2) +' For t = 0 To prodsIds2.Size - 1 'Guardamos los productos variables de la promocion en pedido. +' Private pn As String = Subs.traeProdNombre(prodsIds2.Get(t)) +' LogColor(pn,Colors.Green) +' If pn <> "N/A" Then +' Subs.guardaProducto(estaPromo, prodsPrecios2.Get(t), prodsCants2.Get(t), pn, prodsIds2.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) +' End If +' Next +' lv_prodsFijos.Clear +'' Activity_KeyPress(KeyCodes.KEYCODE_BACK) +'' CallSubDelayed2(productos, "Activity_KeyPress", KeyCodes.KEYCODE_BACK) +' Private prodspage As C_Productos +' If prodspage.IsInitialized Then +' prodspage.P_CALATOLOS.Visible = True +' prodspage.P_CALATOLOS.BringToFront +' prodspage.lv_catalogos.Visible = True +' prodspage.lv_promos.Visible = False +' prodspage.Panel2.Visible = False +' prodspage.clv_productos.AsView.Visible = False +' End If +' B4XPages.MainPage.bTerminarClicked = True +' B4XPages.ShowPage("productos") +'End Sub +' +''Sub Activity_KeyPress (key As Int) As Boolean 'ignore +'' ' BACK key pressed +'' Log("Keypress") +'' If key=KeyCodes.KEYCODE_BACK Then +'' Log("BACK") +'' Return False +'' End If +'' Return False +'' ' Returning False signals the system to handle the key +''End Sub + + +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI + Private l_promoDesc As Label + Private lv_prodsFijos As ListView + Private clv_prodsVariabes, clv_prodsVariabes2 As CustomListView + Private l_prodsFijos As Label + Private l_prodsVariables, l_prodsVariables2 As Label + Private i_prod As ImageView + Private l_prodX As Label + Private p_prods As Panel + Private b_prodMenos, b_prodMenos2 As Button + Private et_pCant As EditText + Private b_prodMas, b_prodMas2 As Button + Private l_pCant As Label + Dim totalProds As Int = 0 + Dim prodsVar1 As Int = 0 + Dim prodsVar2 As Int = 0 + Dim prodsVarReq As Int = 0 + Dim prodsVarReq_ As Int = 0 + Dim prodsVarReq2 As Int = 0 + Dim prodsVarReq2_ As Int = 0 + Dim totalCompra As Float = 0 + Dim prodsFijosTot As Float = 0 + Dim tpf As Int = 0 + Dim tpf2 As Int = 0 + Dim maxCantPromos As Int = 1 + Private l_totProds As Label + Private l_total As Label + Private b_terminar1 As Button + Private p_promociones As Panel + Dim prodsIds, prodsCants, prodsPrecios, prodsIds2, prodsCants2, prodsPrecios2 As List + Dim estaPromo, esteCliente As String + Private b_promoMas As Button + Private b_promoMenos As Button + Private et_promoCant As EditText + Private l_promosCant As Label + Private b_continuar As Button + Private p_prodsVariables, p_prodsVariables2 As Panel + Dim laPromo = "", elCliente = "" As String + Dim prodsPedidoActual As String + Dim montoPedidoActual As String + Dim promosMap As Map + Dim su As StringUtils +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("promociones") + + p_promociones.Height= Root.Height + p_promociones.Width= Root.Width + promosMap.Initialize + p_promociones.Top=0 + p_promociones.Left=0 + b_terminar1.Left = Root.Width - (b_terminar1.Width + 10) + b_continuar.Left = Root.Width - b_terminar1.Width - (b_continuar.Width + 20) + Subs.centraPanel(p_promociones,Root.Width) +End Sub + +Sub B4XPage_Appear +' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.blue) + prodsIds.Initialize + prodsCants.Initialize + prodsPrecios.Initialize + prodsIds2.Initialize + prodsCants2.Initialize + prodsPrecios2.Initialize + Dim m As Map = Subs.traeTotalesClienteActual + prodsPedidoActual = m.Get("productos") + montoPedidoActual = m.Get("monto") +' Log($"laPromo=${laPromo}, el cliente=${elCliente}"$) + If laPromo <> "" Then muestraPromo(laPromo, elCliente) + Log(laPromo) +End Sub +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub muestraPromo(promo As String, cliente As String) + Private thisLog As Boolean = False +' If thisLog Then Log(promo) + estaPromo = promo + esteCliente = cliente + Private mp As Map = Subs.traePromo(promo, cliente) + Private prodsPromo As Map = mp.Get("productos") 'Los productos de la promoción. + Private invDispPromo As Map = Subs.traemosInventarioDisponibleParaPromo(promo) +' If thisLog Then Log($"invDispPromo=${invDispPromo}"$) + If thisLog Then Log("Max promos por inv de prods FIJOS: " & Subs.revisaMaxPromosProdsFijosPorInventario(mp)) + If thisLog Then Log("Max promos por inv de prods VARIABLES: " & Subs.revisaMaxPromosProdsVariablesPorInventario(mp)) + maxCantPromos = Subs.revisaMaxPromosProdsVariablesPorInventario(mp) + et_promoCant.Text = 1 + + If laPromo = "MYKONOS_01" Then + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT ifnull( SUM (PE_COSTO_TOT),0) As suma FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA)") + If c.RowCount > 0 Then + c.Position = 0 + Private c2 As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT DISTINCT CAT_PE_MONTO FROM CAT_PROMO_ESP") + If c2.RowCount > 0 Then + c2.Position = 0 + + If c.GetString("suma") >= 300 And c.GetString("suma") < 600 Then + l_promosCant.text = "Max promos: " & 1 + Else If c.GetString("suma") >= 600 And c.GetString("suma") < 900 Then + l_promosCant.text = "Max promos: " & 2 + Else If c.GetString("suma") >= 900 Then + l_promosCant.text = "Max promos: " & 3 + End If + + End If + End If + Else + l_promosCant.text = "Max promos: " & maxCantPromos + End If + + + Private cs As CSBuilder + cs.Initialize + If thisLog Then Log(mp) + If thisLog Then Log(prodsPromo) + Private listaPV As List = mp.Get("prodsVariables") + Private listaPreciosPV As List = mp.Get("prodsVariablesPrecios") + Private listaPV2 As List = mp.Get("prodsVariables2") + Private listaPreciosPV2 As List = mp.Get("prodsVariablesPrecios2") +' Log("============ " & CRLF & listaPV) + 'Ponemos la promo y descripción. +' Dim desc As String = $"Promoción: ${promo}${CRLF}${mp.Get("descripcion")}"$ +' Dim desc As String = cs.append("Promocion: ").Color(Colors.RGB(100,149,237)).Append(promo).pop.append(CRLF).Append(mp.Get("descripcion")).Popall + l_promoDesc.Text = cs.Color(Colors.RGB(100,149,237)).append("Promocion: ").pop.append(CRLF).Append(promo).append(CRLF).Append(mp.Get("descripcion")).Popall + prodsFijosTot = 0 + 'Ponemos el texto en las etiquetas de la cantidad de productos. +' Dim pf As List = mp.Get("prodsFijos") + Dim pv As List = mp.Get("prodsVariables") + Dim pv2 As List = mp.Get("prodsVariables2") + If thisLog Then Log(mp) + tpf = 0 + For Each pfp As Int In mp.Get("prodsFijosPiezas").As(List) + tpf = tpf + pfp + Next + tpf2 = tpf +' tpf = tpf * maxCantPromos + l_prodsFijos.Text = $"Productos fijos (${tpf})"$ + prodsVarReq = mp.Get("prodsVariablesRequeridos") + prodsVarReq_ = prodsVarReq + prodsVarReq2 = mp.Get("prodsVariables2Requeridos") + prodsVarReq2_ = prodsVarReq2 +' Log("========= " & prodsVarReq2) + l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq}"$ + l_prodsVariables2.Text = $"Productos variables2 requeridos: ${prodsVarReq2}"$ + If prodsVarReq = 0 Then + p_prodsVariables.Visible = False + Else + p_prodsVariables.Visible = True + End If + 'Llenamos el listview con los productos fijos. + Dim label1 As Label + label1 = lv_prodsFijos.SingleLineLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.black + lv_prodsFijos.SingleLineLayout.ItemHeight = 30dip + lv_prodsFijos.Clear +' If pf.Size < 1 Then pf.Add("Sin productos fijos.") + lv_prodsFijos.Clear + agregaFijosALista(mp, True) + If thisLog Then Log("Total prods fijos = " & prodsFijosTot) +' If thisLog Then Log("======="&prodsMap) + l_totProds.text = $"Productos: ${tpf}"$ + l_total.Text = $"Total: $$1.2{prodsFijosTot}"$ +' Dim ins As InputStream +' Dim bmp As Bitmap +' Dim jpeg() As Byte + + 'Llenamos el listview con los productos variables. + If thisLog Then Log($"PV1: ${pv.Size}, ${pv}"$) + If thisLog Then Log($"PV2: ${pv2.Size}, ${pv2}"$) + If thisLog Then Log("invDisp=" & invDispPromo) + clv_prodsVariabes.Clear + clv_prodsVariabes2.Clear + For Each p As String In pv + If invDispPromo.ContainsKey(p) Then 'Si no esta en la lista de productos con inventario no lo mostramos. + Private indicePV = listaPV.IndexOf(p) +' Log(p & "|" & indicePV & "|" & listaPreciosPV.Get(indicePV)) + Private estePrecio = listaPreciosPV.Get(indicePV) +' c2.Position=i +' jpeg = c2.GetBlob("CAT_GP_IMG") +' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +' bmp.Initialize2(ins) + Private thisProd As Map = prodsPromo.Get(p) + If thisLog Then Log(thisProd) + clv_prodsVariabes.Add(CreateListItem(Subs.traeProdNombre(p)&CRLF&"Hay " & invDispPromo.Get(p) & " $" & estePrecio, estePrecio, invDispPromo.Get(p), clv_prodsVariabes.AsView.Width, 50dip, Null, p), p) + End If + Next + For Each p As String In pv2 + If invDispPromo.ContainsKey(p) Then 'Si no esta en la lista de productos con inventario no lo mostramos. +' Log(p) +' Log($"${invDispPromo}$"$) +' Log($"${listaPV2}"$) +' Log("listaPrecios:"&listaPreciosPV2) + Private indicePV2 = listaPV2.IndexOf(p) +' Log($"${indicePV2}"$) +' Log(p & "|" & indicePV & "|" & listaPreciosPV2.Get(indicePV2)) + Private estePrecio = listaPreciosPV2.Get(indicePV2) +' c2.Position=i +' jpeg = c2.GetBlob("CAT_GP_IMG") +' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +' bmp.Initialize2(ins) + Private thisProd As Map = prodsPromo.Get(p) + If thisLog Then Log(thisProd) + clv_prodsVariabes2.Add(CreateListItem2(Subs.traeProdNombre(p)&CRLF&"Hay " & invDispPromo.Get(p) & " $" & estePrecio, estePrecio, invDispPromo.Get(p), clv_prodsVariabes2.AsView.Width, 50dip, Null, p), p) + End If + Next + If pv2.Size = 0 Then +' Log("PV2 = 0") + l_prodsVariables2.Visible = False + p_prodsVariables2.Visible = False + + p_prodsVariables.Height = 410dip + clv_prodsVariabes.GetBase.Height = p_prodsVariables.Height - 20 +' p_prodsVariables.Height = 380dip +' clv_prodsVariabes.GetBase.Height = 380dip 'Cambiamos el tamaño y posición de la lista de productos + '' clv_prodsVariabes.GetBase.Width = + clv_prodsVariabes.Base_Resize(clv_prodsVariabes.GetBase.Width, p_prodsVariables.Height - 20) 'Cambiamos el tamaño del panel interno de la lista para que ajuste al nuevo tamaño. + Else + l_prodsVariables2.Visible = True + p_prodsVariables2.Visible = True + p_prodsVariables.Height = 210dip + clv_prodsVariabes.GetBase.Height = p_prodsVariables.Height - 20 + End If + b_terminar1.Visible = False + b_continuar.Visible = False + cuentaProds +End Sub + +'Agregamos los productos fijos a una lista para despues meterlos en el pedido. +Sub agregaFijosALista(mp As Map, addListItem As Boolean) + Private thisLog As Boolean = False + Private cont As Int = 0 + prodsFijosTot = 0 + Dim pf As List = mp.Get("prodsFijos") + If pf.Size < 1 Then pf.Add("Sin productos fijos.") +' Private m As Map +' prodsMap.Put(estaPromo, CreateMap("cant":1, "precio":0)) +' prodsIds.Add(estaPromo) + prodsIds.clear + prodsCants.clear + prodsPrecios.clear + prodsIds.Add(estaPromo) + prodsCants.Add(et_promoCant.text.As(Int)) + prodsPrecios.Add(0) + For Each p As String In pf +' Log($"cont=${cont}, mp=${mp}"$) + If mp.Get("prodsFijosPiezas").As(List).Size > 0 Then + Private tpi As String = mp.Get("prodsFijosPiezas").As(List).Get(cont) + Else + Private tpi As String = 0 + End If + If mp.Get("prodsFijosPrecios").As(List).Size > 0 Then + Private tpr As String = mp.Get("prodsFijosPrecios").As(List).Get(cont) + Else + Private tpr As String = 0 + End If + prodsFijosTot = prodsFijosTot + (tpi * tpr) + If thisLog Then Log("|"&tpi&"|"&p) + Private ntpi As Int = tpi * et_promoCant.text + If addListItem And tpi > 0 Then lv_prodsFijos.AddSingleLine(ntpi & " " & Subs.traeProdNombre(p) & " - $" & tpr) + cont = cont+1 +' m=CreateMap("cant":tpi, "precio":tpr) +' prodsMap.Put(p, m) + prodsIds.Add(p) + prodsCants.Add(tpi.As(Int)*et_promoCant.text.As(Int)) + prodsPrecios.Add(tpr) '*et_promoCant.text.As(Int) + Next +End Sub + +Sub CreateListItem(Text As String, precioU As String, inv As Int, Width As Int, Height As Int, img As Bitmap, prodId As String) As Panel 'ignore + Dim p As B4XView = xui.CreatePanel("") + p.SetLayoutAnimated(0, 0, 0, Width, Height) + p.LoadLayout("prodItem1") + l_prodX.TextSize = 15 + l_prodX.Text = Text + l_prodX.TextSize = 15 +' p_prods.Height = Height + 70 +' l_prodX.Height = Height + p_prods.height = su.MeasureMultilineTextHeight(l_prodX, l_prodX.Text) + 20 'Calculamos la altura del panel de acuerdo al texto contenido. + If p_prods.Height < Height Then p_prods.Height = Height + l_prodX.Height = p_prods.Height + l_pCant.Tag = precioU&"|"&inv&"|"&prodId + et_pCant.Tag = precioU&"|"&inv&"|"&prodId + et_pCant.BringToFront +' i_prod.Bitmap = img + p.Height = p_prods.Height + Return p +End Sub + +Sub CreateListItem2(Text As String, precioU As String, inv As Int, Width As Int, Height As Int, img As Bitmap, prodId As String) As Panel 'ignore + Dim p As B4XView = xui.CreatePanel("") + p.SetLayoutAnimated(0, 0, 0, Width, Height) + p.LoadLayout("prodItem2") + l_prodX.TextSize = 15 + l_prodX.Text = Text + l_prodX.TextSize = 15 +' p_prods.Height = Height +' l_prodX.Height = Height + p_prods.height = su.MeasureMultilineTextHeight(l_prodX, l_prodX.Text) + 20 'Calculamos la altura del panel de acuerdo al texto contenido. + If p_prods.Height < Height Then p_prods.Height = Height + l_prodX.Height = p_prods.Height +' l_pCant.Text = 0 + l_pCant.Tag = precioU&"|"&inv&"|"&prodId + et_pCant.Tag = precioU&"|"&inv&"|"&prodId + et_pCant.BringToFront +' i_prod.Bitmap = img + p.Height = p_prods.Height + Return p +End Sub + +Sub b_prodMenos_Click + Dim index As Int = clv_prodsVariabes.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prodsVariabes.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(5) + Dim laCant As B4XView = pnl.GetView(2).GetView(4) +' Log($"precio|stock:${laCant.tag}"$) + laCant.Text = $"$1.0{laCant.Text-1}"$ + If laCant.Text < 0 Then laCant.Text = 0 + +' Log(Regex.Split("\|", laCant.tag)(0)) + Private precio As String = Regex.Split("\|", laCant.tag)(0) +' Private inv As String = Regex.Split("\|", laCant.tag)(1) + Private prodId As String = Regex.Split("\|", laCant.tag)(2) + Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":estaPromo) +' Log(tmpMap) + promosMap.Put(prodId, tmpMap) + If laCant.Text = 0 Then promosMap.Remove(prodId) +' LogColor(promosMap, Colors.Magenta) + cuentaProds +' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +' l_totProds.text = $"Total Productos: ${totalProds}"$ +End Sub + +Sub b_prodMas_Click + If prodsVar1 < prodsVarReq Then + Dim index As Int = clv_prodsVariabes.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prodsVariabes.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(5) + Dim laCant As B4XView = pnl.GetView(2).GetView(4) +' Log($"precio|stock:${laCant.tag}"$) +' Log($"Indice: ${index}, cant:${laCant.Text+1}, precioU: ${laCant.tag}"$) + Dim esteTag As List = Regex.Split("\|", laCant.Tag) +' Log(esteTag) + + If laCant.Text + 1 <= esteTag.get(1) Then + laCant.Text = $"$1.0{laCant.Text+1}"$ + cuentaProds + End If + +' Log(Regex.Split("\|", laCant.tag)(0)) + Private precio As String = Regex.Split("\|", laCant.tag)(0) +' Private inv As String = Regex.Split("\|", laCant.tag)(1) + Private prodId As String = Regex.Split("\|", laCant.tag)(2) + Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":estaPromo) +' Log(tmpMap) + promosMap.Put(prodId, tmpMap) +' LogColor(promosMap, Colors.Magenta) + End If +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +' l_totProds.text = $"Total Productos: ${totalProds}"$ +End Sub + + +Sub b_prodMenos2_Click + Dim index As Int = clv_prodsVariabes2.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prodsVariabes2.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(5) + Dim laCant As B4XView = pnl.GetView(2).GetView(4) +' Log($"precio|stock:${laCant.tag}"$) + laCant.Text = $"$1.0{laCant.Text-1}"$ + If laCant.Text < 0 Then laCant.Text = 0 + +' Log(Regex.Split("\|", laCant.tag)(0)) + Private precio As String = Regex.Split("\|", laCant.tag)(0) +' Private inv As String = Regex.Split("\|", laCant.tag)(1) + Private prodId As String = Regex.Split("\|", laCant.tag)(2) + Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":estaPromo) +' Log(tmpMap) + promosMap.Put(prodId, tmpMap) + If laCant.Text = 0 Then promosMap.Remove(prodId) +' LogColor(promosMap, Colors.Magenta) + cuentaProds +' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +' l_totProds.text = $"Total Productos: ${totalProds}"$ +End Sub + +Sub b_prodMas2_Click +' Log(prodsVarReq & "|" & prodsVarReq2 & "|" & tpf & "|" & prodsVar2) + If prodsVar2 < prodsVarReq2 Then + Dim index As Int = clv_prodsVariabes2.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prodsVariabes2.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(5) + Dim laCant As B4XView = pnl.GetView(2).GetView(4) +' Log($"precio|stock:${laCant.tag}"$) +' Log($"Indice: ${index}, cant:${laCant.Text+1}, precioU: ${laCant.tag}"$) + Dim esteTag As List = Regex.Split("\|", laCant.Tag) +' Log(esteTag) + If laCant.Text + 1 <= esteTag.get(1) Then + laCant.Text = $"$1.0{laCant.Text+1}"$ + cuentaProds + End If + +' Log(Regex.Split("\|", laCant.tag)(0)) + Private precio As String = Regex.Split("\|", laCant.tag)(0) +' Private inv As String = Regex.Split("\|", laCant.tag)(1) + Private prodId As String = Regex.Split("\|", laCant.tag)(2) + Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":estaPromo) +' Log(tmpMap) + promosMap.Put(prodId, tmpMap) +' LogColor(promosMap, Colors.Magenta) + End If +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +' l_totProds.text = $"Total Productos: ${totalProds}"$ +End Sub + + +Private Sub et_pCant_TextChanged (Old As String, New As String) +' LogColor("txt changed",Colors.Magenta) + cuentaProds +End Sub + +Sub cuentaProds +' Log("=====================================================") +' Log("Inicia cuentaProds") + Private thisLog As Boolean = False +' LogColor($"ProdsFijos=${tpf}, totalProds=${totalProds}, totalCompra=${totalCompra}"$, Colors.Red) + prodsIds2.Clear + prodsCants2.Clear + prodsPrecios2.Clear + lv_prodsFijos.Clear + prodsVar1 = 0 + prodsVar2 = 0 + agregaFijosALista(Subs.traePromo(estaPromo, esteCliente), True) +' Log(prodsIds) + Private tcpf As Float = 0 'Total de compra de productos fijos. + For pf = 0 To prodsIds.Size - 1 + If thisLog Then Log($"${tcpf} + ${prodsCants.Get(pf)} * ${prodsPrecios.Get(pf)} = ${(prodsPrecios.Get(pf) * prodsCants.Get(pf))}"$) + tcpf = tcpf + (prodsPrecios.Get(pf) * prodsCants.Get(pf)) + Next +' Log("Total compra prodsFijos = " & tcpf) + totalCompra = tcpf + totalProds = tpf 'Cantidad total de productos fijos. + 'Variables1 + For i = 0 To clv_prodsVariabes.GetSize - 1 + Private p0 As B4XView = clv_prodsVariabes.GetPanel(i) + Private p As B4XView = p0.GetView(0) + Private cant1 As B4XView = p.GetView(2).GetView(4) + If cant1.Text = "" Then cant1.Text = 0 + totalProds = totalProds + cant1.Text + prodsVar1 = prodsVar1 + cant1.Text + Private esteTag As List = Regex.Split("\|", cant1.Tag) + If cant1.Text > esteTag.Get(1) Then cant1.Text = esteTag.Get(1) + If cant1.Text > 0 Then +' Log(esteTag.Get(2) & "|" & cant1.Text) + totalCompra = totalCompra + (esteTag.get(0) * cant1.text) + If thisLog Then Log($"Cant: ${cant1.Text}, Suma: ${totalCompra}"$) + prodsIds2.Add(esteTag.Get(2)) + prodsCants2.Add(cant1.Text) + prodsPrecios2.Add(esteTag.get(0)) + End If + l_total.Text = $"Total: $$1.2{totalCompra}"$ + l_totProds.text = $"Productos: ${totalProds}"$ + Next + 'Variables2 + For i = 0 To clv_prodsVariabes2.GetSize - 1 + Private p0 As B4XView = clv_prodsVariabes2.GetPanel(i) + Private p As B4XView = p0.GetView(0) + Private cant2 As B4XView = p.GetView(2).GetView(4) + totalProds = totalProds + cant2.Text + prodsVar2 = prodsVar2 + cant2.Text + Private esteTag As List = Regex.Split("\|", cant2.Tag) + If cant2.Text > esteTag.Get(1) Then cant2.Text = esteTag.Get(1) + If cant2.Text > 0 Then +' Log(esteTag.Get(2) & "|" & cant2.Text) + totalCompra = totalCompra + (esteTag.get(0) * cant2.text) + If thisLog Then Log($"Cant: ${cant2.Text}, Suma: ${totalCompra}"$) + prodsIds2.Add(esteTag.Get(2)) + prodsCants2.Add(cant2.Text) + prodsPrecios2.Add(esteTag.get(0)) + End If + l_total.Text = $"Total: $$1.2{totalCompra}"$ + l_totProds.text = $"Productos: ${totalProds}"$ + Next + + If thisLog Then Log($"Total Prods: ${totalProds}, Total: $$1.2{totalCompra}"$) + l_total.Text = $"Total: $$1.2{totalCompra}"$ + l_totProds.text = $"Productos: ${totalProds}"$ + If totalProds < prodsVarReq + prodsVarReq2 + tpf Or totalProds > prodsVarReq + prodsVarReq2 + tpf Then +' Log("INCOMPLETA") + b_terminar1.Visible = False + b_continuar.Visible = False + Else +' Log("COMPLETA") + b_terminar1.Visible = True + b_continuar.Visible = True + End If + If thisLog Then LogColor($"${prodsIds}${CRLF}${prodsCants}${CRLF}${prodsPrecios}"$, Colors.blue) + If thisLog Then LogColor($"${prodsIds2}${CRLF}${prodsCants2}${CRLF}${prodsPrecios2}"$, Colors.Magenta) +' LogColor($"Total Prods: ${totalProds}, Total: $$1.2{totalCompra}"$, Colors.Blue) +End Sub + +Private Sub et_pCant_FocusChanged (HasFocus As Boolean) + LogColor("focus changed", Colors.Magenta) + cuentaProds +End Sub + +Private Sub b_promoMenos_Click + If et_promoCant.Text > 1 Then + et_promoCant.Text = et_promoCant.Text.As(Int) - 1 + End If + l_prodsFijos.Text = $"Productos fijos (${tpf2 * et_promoCant.Text.As(Int)})"$ + l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq_ * et_promoCant.Text.As(Int)}"$ + l_prodsVariables2.Text = $"Productos variables2 requeridos: ${prodsVarReq2_ * et_promoCant.Text.As(Int)}"$ + tpf = tpf2 * et_promoCant.Text.As(Int) + prodsVarReq = prodsVarReq_ * et_promoCant.Text.As(Int) + prodsVarReq2 = prodsVarReq2_ * et_promoCant.Text.As(Int) + Log($"Max promos=${et_promoCant.Text.As(Int)}, Prods fijos=${tpf}, "$) + cuentaProds +End Sub + +Private Sub b_promoMas_Click + + If laPromo = "MYKONOS_01" Then + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT ifnull( SUM (PE_COSTO_TOT),0) As suma FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA)") + If c.RowCount > 0 Then + c.Position = 0 + Private c2 As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT DISTINCT CAT_PE_MONTO FROM CAT_PROMO_ESP") + If c2.RowCount > 0 Then + c2.Position = 0 + + If c.GetString("suma") >= 300 And c.GetString("suma") < 600 Then + maxCantPromos = 1 + Else If c.GetString("suma") >= 600 And c.GetString("suma") < 900 Then + maxCantPromos = 2 + Else If c.GetString("suma") >= 900 Then + maxCantPromos = 3 + End If + + End If + End If + + End If + + If et_promoCant.Text < maxCantPromos Then + et_promoCant.Text = et_promoCant.Text.As(Int) + 1 + l_prodsFijos.Text = $"Productos fijos (${tpf2 * et_promoCant.Text.As(Int)})"$ + l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq_ * et_promoCant.Text.As(Int)}"$ + l_prodsVariables2.Text = $"Productos variables2 requeridos: ${prodsVarReq2_ * et_promoCant.Text.As(Int)}"$ + tpf = tpf2 * et_promoCant.Text.As(Int) + prodsVarReq = prodsVarReq_ * et_promoCant.Text.As(Int) + prodsVarReq2 = prodsVarReq2_ * et_promoCant.Text.As(Int) + Log($"Max promos=${et_promoCant.Text.As(Int)}, Prods fijos=${tpf}, "$) + End If + If et_promoCant.text > maxCantPromos Then et_promoCant.Text = maxCantPromos + cuentaProds +End Sub + +Private Sub b_terminar1_Click + cuentaProds + Log("====================================================================") + For t = 0 To prodsIds.Size - 1 'Guardamos los productos fijos de la promocion en pedido. + Private pn As String = Subs.traeProdNombre(prodsIds.Get(t)) + If prodsCants.Get(t) > 0 Then Subs.guardaProductoSinGestion(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn, prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) + Next + For t = 0 To prodsIds2.Size - 1 'Guardamos los productos variables de la promocion en pedido. + Private pn As String = Subs.traeProdNombre(prodsIds2.Get(t)) + Subs.guardaProductoSinGestion(estaPromo, prodsPrecios2.Get(t), prodsCants2.Get(t), pn, prodsIds2.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) + Next +' Log(B4XPages.MainPage.productos.prodsMap) +' For o=0 To prodsIds.Size - 1 'Ponemos los productos fijos en el mapa de la compra. +' Private tmpMap As Map = CreateMap("precio":prodsPrecios.Get(o), "cant":prodsCants.Get(o), "almacen":estaPromo) + '' Log(tmpMap) +' If prodsCants.Get(o) > 0 Then B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds.Get(o), tmpMap) +' Next +' For o=0 To prodsIds2.Size - 1 'Ponemos los productos variables en el mapa de la compra. +' Private tmpMap As Map = CreateMap("precio":prodsPrecios2.Get(o), "cant":prodsCants2.Get(o), "almacen":estaPromo) + '' Log(tmpMap) +' B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds2.Get(o), tmpMap) +' Next +' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.red) + lv_prodsFijos.Clear + B4XPages.MainPage.bTerminarClicked = True + B4XPages.ShowPage("productos") + B4XPages.MainPage.productos.b_terminar1_Click +End Sub + +Private Sub b_continuar_Click + cuentaProds + Log("====================================================================") + For t = 0 To prodsIds.Size - 1 'Guardamos los productos fijos de la promocion en pedido. + Private pn As String = Subs.traeProdNombre(prodsIds.Get(t)) + Subs.guardaProductoSinGestion(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn, prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) + Next + For t = 0 To prodsIds2.Size - 1 'Guardamos los productos variables de la promocion en pedido. + Private pn As String = Subs.traeProdNombre(prodsIds2.Get(t)) + Subs.guardaProductoSinGestion(estaPromo, prodsPrecios2.Get(t), prodsCants2.Get(t), pn, prodsIds2.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, B4XPages.MainPage.tipo_venta) + Next +' Log(B4XPages.MainPage.productos.prodsMap) +' For o=0 To prodsIds.Size - 1 'Ponemos los productos fijos en el mapa de la compra. +' Private tmpMap As Map = CreateMap("precio":prodsPrecios.Get(o), "cant":prodsCants.Get(o), "almacen":estaPromo) + '' Log(tmpMap) +' If prodsCants.Get(o) > 0 Then B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds.Get(o), tmpMap) +' Next +' For o=0 To prodsIds2.Size - 1 'Ponemos los productos variables en el mapa de la compra. +' Private tmpMap As Map = CreateMap("precio":prodsPrecios2.Get(o), "cant":prodsCants2.Get(o), "almacen":estaPromo) + '' Log(tmpMap) +' B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds2.Get(o), tmpMap) +' Next +' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.red) + lv_prodsFijos.Clear +' Activity_KeyPress(KeyCodes.KEYCODE_BACK) +' CallSubDelayed2(productos, "Activity_KeyPress", KeyCodes.KEYCODE_BACK) + Private prodspage As C_Productos + If prodspage.IsInitialized Then + prodspage.lv_catalogos.Visible = True + prodspage.lv_promos.Visible = False + prodspage.clv_productos.AsView.Visible = False + End If + B4XPages.MainPage.bTerminarClicked = True + B4XPages.ShowPage("productos") +End Sub + +'Sub Activity_KeyPress (key As Int) As Boolean 'ignore +' ' BACK key pressed +' Log("Keypress") +' If key=KeyCodes.KEYCODE_BACK Then +' Log("BACK") +' Return False +' End If +' Return False +' ' Returning False signals the system to handle the key +'End Sub \ No newline at end of file diff --git a/B4A/C_TicketsDia.bas b/B4A/C_TicketsDia.bas new file mode 100644 index 0000000..d45ba43 --- /dev/null +++ b/B4A/C_TicketsDia.bas @@ -0,0 +1,276 @@ +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 + Private p_ticketsdia As Panel + + Dim c As Cursor + Dim S As Cursor + Dim ruta As String + Dim ListView1 As ListView + Dim b_noventa As Button + Dim nombre_boton As String + Dim STIME As String + + Private L_ventanoventa As Label +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 + ruta = File.DirInternal + Root.LoadLayout("ticketsdia") +' ListView1.Left = Round(Root.Width/2)-(ListView1.Width/2) + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + c=B4XPages.MainPage.skmt.ExecQuery("select PC_CLIENTE,PC_MONTO,PC_NOART FROM PEDIDO_CLIENTE ORDER BY PC_FECHA asc") + ListView1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim Label1 As Label + Label1 = ListView1.TwoLinesLayout.Label + Label1.TextSize = 20 + Label1.TextColor = Colors.White + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 20 + label2.TextColor = Colors.White + Label1.Height = 25dip + label2.Height = 60dip + + ListView1.TwoLinesLayout.ItemHeight = 95dip + Label1.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + label2.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + ListView1.AddTwoLines(c.GetString("PC_CLIENTE"),"Cantidad #"& c.GetString("PC_NOART")& " SubTotal $"& c.GetString("PC_MONTO")) + Next + 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 + nombre_boton = "NOVENTA" + L_ventanoventa.Text = "Clientes con venta" + ListView1.Clear + ListView1.Height = Root.Height * 0.70 + p_ticketsdia.Height = Root.Height * 0.80 + p_ticketsdia.Width = Root.Width * 0.90 + + c=B4XPages.MainPage.skmt.ExecQuery("select PC_CLIENTE,PC_MONTO,PC_NOART,(select CAT_CL_NOMBRE from kmt_info3 where cat_cl_codigo = pc_cliente ) as NOMBRE FROM PEDIDO_CLIENTE ORDER BY PC_FECHA asc") + + + ListView1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + + + Private s3 As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select * FROM PEDIDO WHERE PE_CLIENTE = ? and PE_RECALCULO <> ? OR PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL",Array As String(C.GetString("PC_CLIENTE"),"","null")) + LogColor(s3.RowCount,Colors.Yellow) + If s3.RowCount > 0 Then + + Private s As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, IFNULL(SUM(PE_CANT),0) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE = ? and (PE_RECALCULO = ? or PE_RECALCULO = ? or PE_RECALCULO IS NULL ) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP)",Array As String(C.GetString("PC_CLIENTE"),"","null")) + s.Position=0 + Private s5 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(PE_RECALCULOTOT),0) as TOTAL_CLIE, IFNULL(SUM(PE_CANT),0) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE = ? and (PE_RECALCULO <> ? or PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP)",Array As String(C.GetString("PC_CLIENTE"),"","null")) + s5.Position = 0 + + + + + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 20 + label1.TextColor = Colors.White + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 20 + label2.TextColor = Colors.White + label1.Height = 25dip + label2.Height = 60dip + + ListView1.TwoLinesLayout.ItemHeight = 95dip + label1.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + label2.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + ListView1.AddTwoLines(c.GetString("PC_CLIENTE"),c.GetString("NOMBRE") &" Cantidad #"& (s.GetString("CANT_CLIE") + s5.GetString("CANT_CLIE")) & " SubTotal $"& NumberFormat2(s.GetString("TOTAL_CLIE") + s5.GetString("TOTAL_CLIE"),0,2,2,True)) + + + + s.Close + + + Else If s3.RowCount = 0 Then + Private s As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE = ?", Array As String(C.GetString("PC_CLIENTE"))) + s.Position=0 + + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 20 + label1.TextColor = Colors.White + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 20 + label2.TextColor = Colors.White + label1.Height = 25dip + label2.Height = 60dip + + ListView1.TwoLinesLayout.ItemHeight = 95dip + label1.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + label2.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + ListView1.AddTwoLines(c.GetString("PC_CLIENTE"),c.GetString("NOMBRE") &" Cantidad #"& s.GetString("CANT_CLIE") & " SubTotal $"& NumberFormat2(s.GetString("TOTAL_CLIE"),0,2,2,True)) + + + + s.Close + End If + + + + + Next + End If + c.Close +End Sub + +Sub Regresar_Click + B4XPages.ShowPage("cliente") +End Sub +Sub Activity_KeyPress (key As Int) As Boolean + ' BACK key pressed + If key=KeyCodes.KEYCODE_BACK Then + ' I want to capture the key here so I return True + B4XPages.ShowPage("principal") + 'Return True + End If + ' Returning False signals the system to handle the key + Return False +End Sub +Sub ListView1_ItemLongClick (Position As Int, Value As Object) + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(Value)) + DateTime.TimeFormat = "HHmmss" + STIME=DateTime.Time(DateTime.Now) + s=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM HIST_STAY_STORE WHERE HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)") + 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 (Value)) + 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 + DateTime.TimeFormat = "HH:mm:ss" + B4XPages.ShowPage("cliente") +End Sub + +Sub b_noventa_Click + If nombre_boton = "NOVENTA" Then + nombre_boton = "VENTA" + b_noventa.Text ="VENTA" + L_ventanoventa.Text = "Clientes sin venta" + c=B4XPages.MainPage.skmt.ExecQuery("select NV_CLIENTE,NV_MOTIVO,NV_COMM, (select CAT_CL_NOMBRE from kmt_info where cat_cl_codigo = NV_CLIENTE ) as NOMBRE FROM NOVENTA ORDER BY NV_CLIENTE asc") + ListView1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(c.GetString("NV_CLIENTE"),c.GetString("NOMBRE") &" Motivo #"& c.GetString("NV_MOTIVO")& " Comentario $"& c.GetString("NV_COMM")) + Next + End If + Else + nombre_boton = "NOVENTA" + b_noventa.Text ="NO VENTA" + L_ventanoventa.Text = "Clientes con venta" + ListView1.Clear + c=B4XPages.MainPage.skmt.ExecQuery("select PC_CLIENTE,PC_MONTO,PC_NOART,(select CAT_CL_NOMBRE from kmt_info3 where cat_cl_codigo = pc_cliente ) as NOMBRE FROM PEDIDO_CLIENTE ORDER BY PC_FECHA asc") + + + ListView1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Private s3 As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select * FROM PEDIDO WHERE PE_CLIENTE = ? and PE_RECALCULO <> ? OR PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL",Array As String(C.GetString("PC_CLIENTE"),"","null")) + LogColor(s3.RowCount,Colors.Yellow) + If s3.RowCount > 0 Then + + Private s As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, IFNULL(SUM(PE_CANT),0) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE = ? and (PE_RECALCULO = ? or PE_RECALCULO = ? or PE_RECALCULO IS NULL ) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP)",Array As String(C.GetString("PC_CLIENTE"),"","null")) + s.Position=0 + Private s5 As Cursor = B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(PE_RECALCULOTOT),0) as TOTAL_CLIE, IFNULL(SUM(PE_CANT),0) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE = ? and (PE_RECALCULO <> ? or PE_RECALCULO <> ? OR PE_RECALCULO IS NOT NULL) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP)",Array As String(C.GetString("PC_CLIENTE"),"","null")) + s5.Position = 0 + + + + + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 20 + label1.TextColor = Colors.White + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 20 + label2.TextColor = Colors.White + label1.Height = 25dip + label2.Height = 60dip + + ListView1.TwoLinesLayout.ItemHeight = 95dip + label1.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + label2.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + ListView1.AddTwoLines(c.GetString("PC_CLIENTE"),c.GetString("NOMBRE") &" Cantidad #"& (s.GetString("CANT_CLIE") + s5.GetString("CANT_CLIE")) & " SubTotal $"& NumberFormat2(s.GetString("TOTAL_CLIE") + s5.GetString("TOTAL_CLIE"),0,2,2,True)) + + + + s.Close + + + Else If s3.RowCount = 0 Then + Private s As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE = ?", Array As String(C.GetString("PC_CLIENTE"))) + s.Position=0 + + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 20 + label1.TextColor = Colors.White + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 20 + label2.TextColor = Colors.White + label1.Height = 25dip + label2.Height = 60dip + + ListView1.TwoLinesLayout.ItemHeight = 95dip + label1.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + label2.Typeface = Typeface.CreateNew(Typeface.DEFAULT_BOLD, Typeface.STYLE_BOLD) + ListView1.AddTwoLines(c.GetString("PC_CLIENTE"),c.GetString("NOMBRE") &" Cantidad #"& s.GetString("CANT_CLIE") & " SubTotal $"& NumberFormat2(s.GetString("TOTAL_CLIE"),0,2,2,True)) + + + + s.Close + End If + + Next + End If + c.Close + End If +End Sub + +Private Sub p_ticketsdia_Click + +End Sub \ No newline at end of file diff --git a/B4A/C_UpdateAvailable.bas b/B4A/C_UpdateAvailable.bas new file mode 100644 index 0000000..a18de6b --- /dev/null +++ b/B4A/C_UpdateAvailable.bas @@ -0,0 +1,85 @@ +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 + Root.Color = Colors.Transparent +End Sub + +Sub B4XPage_Appear + Try + Do While Not(CanRequestPackageInstalls) + MsgboxAsync($"Por favor permita que ${Application.PackageName} instale actualizaciones"$, "Instalar actualización") + Wait For Msgbox_Result(Result As Int) + Dim in As Intent + in.Initialize("android.settings.MANAGE_UNKNOWN_APP_SOURCES", "package:" & Application.PackageName) + StartActivity(in) + Loop + Catch + Log("updateAvailable() Error - " & LastException.Message) + End Try + If appUpdater.newApp.update Then + ofreceActualizacion + Else + sinActualizacion + End If +End Sub + +'//////////////////////////////////////////////////////////////////////////////////////////// +'//// Esta es una actividad usada por el servicio appUpdater para mostrar notificaciones +'//// cuando hay alguna actualizacion de apk. +'//////////////////////////////////////////////////////////////////////////////////////////// + +public Sub CanRequestPackageInstalls As Boolean + ' // https://www.b4x.com/android/forum/threads/version-safe-apk-installation.87667/#content + Dim ctxt As JavaObject + ctxt.InitializeContext + Dim PackageManager As JavaObject = ctxt.RunMethod("getPackageManager", Null) + Return PackageManager.RunMethod("canRequestPackageInstalls", Null) +End Sub + +Sub ofreceActualizacion + If Msgbox2(appUpdater.newApp.newMsg,"Actualización disponible","Si","","No",Null) = DialogResponse.Positive Then 'ignore +' StartService(DownloadService) + CallSubDelayed(appUpdater, "download_newApk") + End If + B4XPages.MainPage.ocultaProgreso +' B4XPages.MainPage.buscandoActualizacion = False + StartActivity(Main) +' Activity.Finish + +' B4XPages.ShowPage("Login") +End Sub + +Sub sinActualizacion +' Log("#### buscandoActualizacion-" & B4XPages.MainPage.buscandoActualizacion) +' Log("#### actualizacionRevisada-" & B4XPages.MainPage.actualizacionRevisada) +' Log("Ponemos actualizacionRevisada en true") +' B4XPages.MainPage.login.actualizacionRevisada = True +' If B4XPages.MainPage.buscandoActualizacion = False Then + Msgbox(appUpdater.newApp.okMsg, "Aplicación al corriente") 'ignore +' MsgboxAsync(appUpdater.newApp.okMsg, "Aplicación al corriente") +' Else +' B4XPages.MainPage.Entrar.Enabled = True +' End If + B4XPages.MainPage.ocultaProgreso +' Log("Ponemos buscandoActualizacion en False") +' B4XPages.MainPage.login.buscandoActualizacion = False +' Sleep(500) + B4XPages.ShowPage("login") +End Sub \ No newline at end of file diff --git a/B4A/CameraExClass.bas b/B4A/CameraExClass.bas new file mode 100644 index 0000000..1743551 --- /dev/null +++ b/B4A/CameraExClass.bas @@ -0,0 +1,290 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=7.01 +@EndOfDesignText@ + +'Class module +'version 1.20 +'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 + Type CameraInfoAndId (CameraInfo As Object, Id As Int) + Type CameraSize (Width As Int, Height As Int) + Private parameters As Object +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 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) + 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 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 + 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 + +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 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 + +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 +'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 + + + diff --git a/B4A/DBRequestManager.bas b/B4A/DBRequestManager.bas new file mode 100644 index 0000000..fcbad74 --- /dev/null +++ b/B4A/DBRequestManager.bas @@ -0,0 +1,360 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=6.8 +@EndOfDesignText@ +''Class module +Sub Class_Globals + Private mTarget As Object + Type DBResult (Tag As Object, Columns As Map, Rows As List) + Type DBCommand (Name As String, Parameters() As Object) + Private link As String + Private bc As ByteConverter + Private T_NULL = 0, T_STRING = 1, T_SHORT = 2, T_INT = 3, T_LONG = 4, T_FLOAT = 5 _ + ,T_DOUBLE = 6, T_BOOLEAN = 7, T_BLOB = 8 As Byte + Private VERSION As Float = 0.9 + Private tempArray(1) As Object + Dim jobTagAnterior As String = "" 'Mod por CHV - 211109 + Dim reqsList, timesList As List + Dim inicioRequest As Long 'ignore + Dim inicioJobDone As Long 'ignore + Dim inicioRequestMap, inicioJobDoneMap As Map +End Sub + +'Target - The module that handles JobDone (usually Me). +'ConnectorLink - URL of the Java server. +Public Sub Initialize (Target As Object, ConnectorLink As String) + mTarget = Target + link = ConnectorLink +End Sub + +'Sends a query request. +'Command - Query name and parameters. +'Limit - Maximum rows to return or 0 for no limit. +'Tag - An object that will be returned in the result. +Public Sub ExecuteQuery(Command As DBCommand, Limit As Int, Tag As Object) + Dim j As HttpJob + Dim ms As OutputStream + Dim out2 As OutputStream = StartJob(j, ms, Tag) +' If reqsList.IsInitialized Then reqsList.Add(Tag) +' If timesList.IsInitialized Then timesList.Add(DateTime.now) + + WriteObject(Command.Name, out2) + WriteInt(Limit, out2) + WriteList(Command.Parameters, out2) + out2.Close + j.PostBytes(link & "?method=query", ms.ToBytesArray) +End Sub + +'Sends a query request. +'Command - Query name and parameters. +'Limit - Maximum rows to return or 0 for no limit. +'Tag - An object that will be returned in the result. +'Timeout - The http request timeout in ms, or 0 if default (30 secs) +Public Sub ExecuteQuery3(Command As DBCommand, Limit As Int, Tag As Object, Timeout As Int) 'Mod por CHV, agregué el parametro Timeout - 211229 + Dim j As HttpJob + Dim ms As OutputStream + Dim out2 As OutputStream = StartJob(j,ms, Tag) + WriteObject(Command.Name, out2) + WriteInt(Limit, out2) + WriteList(Command.Parameters, out2) + out2.Close + j.PostBytes(link & "?method=query", ms.ToBytesArray) + If Timeout <> 0 Then j.GetRequest.Timeout = Timeout +End Sub + +'Executes a batch of (non-select) commands. +'ListOfCommands - List of the commands that will be executes. +'Tag - An object that will be returned in the result. +Public Sub ExecuteBatch(ListOfCommands As List, Tag As Object) + Dim j As HttpJob + Dim ms As OutputStream + Dim out2 As OutputStream = StartJob(j, ms, Tag) + WriteInt(ListOfCommands.Size, out2) + For Each Command As DBCommand In ListOfCommands + WriteObject(Command.Name, out2) + WriteList(Command.Parameters, out2) + Next + out2.Close + j.PostBytes(link & "?method=batch", ms.ToBytesArray) +End Sub + +'Similar to ExecuteBatch. Sends a single command. +Public Sub ExecuteCommand(Command As DBCommand, Tag As Object) +' If reqsList.IsInitialized Then reqsList.Add(Tag) +' If timesList.IsInitialized Then timesList.Add(DateTime.now) + ExecuteBatch(Array As DBCommand(Command), Tag) +End Sub + +Private Sub StartJob(j As HttpJob, MemoryStream As OutputStream, Tag As Object) As OutputStream +' inicioRequest = DateTime.now + If reqsList.IsInitialized Then reqsList.Add(Tag) + If timesList.IsInitialized Then timesList.Add(DateTime.now) + j.Initialize("DBRequest", mTarget) + j.Tag = Tag + MemoryStream.InitializeToBytesArray(0) + Dim compress As CompressedStreams + Dim out As OutputStream = compress.WrapOutputStream(MemoryStream, "gzip") + WriteObject(VERSION, out) + Return out +End Sub + +Private Sub WriteList(Parameters As List, out As OutputStream) + Dim data() As Byte + If Parameters = Null Or Parameters.IsInitialized = False Then + Dim Parameters As List + Parameters.Initialize + End If + data = bc.IntsToBytes(Array As Int(Parameters.Size)) + out.WriteBytes(data, 0, data.Length) + For Each o As Object In Parameters + WriteObject(o, out) + Next +End Sub + +Private Sub WriteObject(o As Object, out As OutputStream) + Dim data() As Byte + tempArray(0) = o + If tempArray(0) = Null Then + out.WriteBytes(Array As Byte(T_NULL), 0, 1) + Else If tempArray(0) Is Short Then + out.WriteBytes(Array As Byte(T_SHORT), 0, 1) + data = bc.ShortsToBytes(Array As Short(o)) + Else If tempArray(0) Is Int Then + out.WriteBytes(Array As Byte(T_INT), 0, 1) + data = bc.IntsToBytes(Array As Int(o)) + Else If tempArray(0) Is Float Then + out.WriteBytes(Array As Byte(T_FLOAT), 0, 1) + data = bc.FloatsToBytes(Array As Float(o)) + Else If tempArray(0) Is Double Then + out.WriteBytes(Array As Byte(T_DOUBLE), 0, 1) + data = bc.DoublesToBytes(Array As Double(o)) + Else If tempArray(0) Is Long Then + out.WriteBytes(Array As Byte(T_LONG), 0, 1) + data = bc.LongsToBytes(Array As Long(o)) + Else If tempArray(0) Is Boolean Then + out.WriteBytes(Array As Byte(T_BOOLEAN), 0, 1) + Dim b As Boolean = 0 + Dim data(1) As Byte + If b Then data(0) = 1 Else data(0) = 0 + Else If GetType(tempArray(0)) = "[B" Then + data = o + out.WriteBytes(Array As Byte(T_BLOB), 0, 1) + WriteInt(data.Length, out) + Else 'If o Is String Then (treat all other values as string) + out.WriteBytes(Array As Byte(T_STRING), 0, 1) + data = bc.StringToBytes(o, "UTF8") + WriteInt(data.Length, out) + End If + If data.Length > 0 Then out.WriteBytes(data, 0, data.Length) +End Sub + +Private Sub ReadObject(In As InputStream) As Object + Dim data(1) As Byte + In.ReadBytes(data, 0, 1) + Select data(0) + Case T_NULL + Return Null + Case T_SHORT + Dim data(2) As Byte + Return bc.ShortsFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_INT + Dim data(4) As Byte + Return bc.IntsFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_LONG + Dim data(8) As Byte + Return bc.LongsFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_FLOAT + Dim data(4) As Byte + Return bc.FloatsFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_DOUBLE + Dim data(8) As Byte + Return bc.DoublesFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_BOOLEAN + Dim b As Byte = ReadByte(In) + Return b = 1 + Case T_BLOB + Dim len As Int = ReadInt(In) + Dim data(len) As Byte + Return ReadBytesFully(In, data, data.Length) + Case Else + Dim len As Int = ReadInt(In) + Dim data(len) As Byte + ReadBytesFully(In, data, data.Length) + Return BytesToString(data, 0, data.Length, "UTF8") + End Select +End Sub + +Private Sub ReadBytesFully(In As InputStream, Data() As Byte, Len As Int) As Byte() + Dim count = 0, read As Int + Do While count < Len And read > -1 + read = In.ReadBytes(Data, count, Len - count) + count = count + read + Loop + Return Data +End Sub + +Private Sub WriteInt(i As Int, out As OutputStream) + Dim data() As Byte + data = bc.IntsToBytes(Array As Int(i)) + out.WriteBytes(data, 0, data.Length) +End Sub + +Private Sub ReadInt(In As InputStream) As Int + Dim data(4) As Byte + Return bc.IntsFromBytes(ReadBytesFully(In, data, data.Length))(0) +End Sub + +Private Sub ReadByte(In As InputStream) As Byte + Dim data(1) As Byte + In.ReadBytes(data, 0, 1) + Return data(0) +End Sub + +'Handles the Job result and returns a DBResult. +Public Sub HandleJob(Job As HttpJob) As DBResult + If jobTagAnterior <> Job.Tag Then +' inicioJobDone = DateTime.Now 'ignore + If inicioJobDoneMap.IsInitialized Then inicioJobDoneMap.Put(Job.Tag, DateTime.Now) +' tiempos.Put(Job.taskId, CreateMap("inicioJobDone":inicioJobDone)) +' Log(tiempos) +' Log("############# " & Job.taskId) + End If + Dim In As InputStream = Job.GetInputStream + Dim cs As CompressedStreams + In = cs.WrapInputStream(In, "gzip") + Dim serverVersion As Float = ReadObject(In) 'ignore + Dim method As String = ReadObject(In) + Dim table As DBResult + table.Initialize + table.Columns.Initialize + table.rows.Initialize + table.Tag = Job.Tag + If method = "query" Then + Dim numberOfColumns As Int = ReadInt(In) + For i = 0 To numberOfColumns - 1 + table.Columns.Put(ReadObject(In), i) + Next + Do While ReadByte(In) = 1 + Dim rowObjects(numberOfColumns) As Object + table.rows.Add(rowObjects) + For col = 0 To numberOfColumns - 1 + Dim o As Object = ReadObject(In) + rowObjects(col) = o + Next + Loop + Else If method = "batch" Then + table.Columns.Put("AffectedRows", 0) + Dim rows As Int = ReadInt(In) + For i = 0 To rows - 1 + table.rows.Add(Array As Object(ReadInt(In))) + Next + End If + In.Close +' Log("HandleJob: " & (DateTime.Now - start))'Comentado por CHV - 211112 + If jobTagAnterior <> table.Tag Then + LogColor("HandleJob: '"&table.Tag&"'" & " - Registros: " & table.Rows.Size, Colors.RGB(115, 0, 140)) 'Mod por CHV - 211109 + End If + jobTagAnterior = table.Tag 'Mod por CHV - 211109 + Return table +End Sub + +'Reads a file and returns the file as a bytes array. +Public Sub FileToBytes(Dir As String, FileName As String) As Byte() + Dim out As OutputStream + out.InitializeToBytesArray(0) + Dim In As InputStream = File.OpenInput(Dir, FileName) + File.Copy2(In, out) + out.Close + Return out.ToBytesArray +End Sub + +'Converts an image to a bytes array (for BLOB fields). +Public Sub ImageToBytes(Image As Bitmap) As Byte() + Dim out As OutputStream + out.InitializeToBytesArray(0) + Image.WriteToStream(out, 100, "JPEG") + out.Close + Return out.ToBytesArray +End Sub + +'Converts a bytes array to an image (for BLOB fields). +Public Sub BytesToImage(bytes() As Byte) As Bitmap + Dim In As InputStream + In.InitializeFromBytesArray(bytes, 0, bytes.Length) + Dim bmp As Bitmap + bmp.Initialize2(In) + Return bmp +End Sub + +'Prints the table to the logs. +Public Sub PrintTable(Table As DBResult) + Log("Tag: " & Table.Tag & ", Columns: " & Table.Columns.Size & ", Rows: " & Table.Rows.Size) + Dim sb As StringBuilder + sb.Initialize + For Each col In Table.Columns.Keys + sb.Append(col).Append(TAB) + Next + Log(sb.ToString) + For Each row() As Object In Table.Rows + Dim sb As StringBuilder + sb.Initialize + For Each record As Object In row + sb.Append(record).Append(TAB) + Next + Log(sb.ToString) + Next +End Sub + +Sub requestTimes(tag As String) As Map 'ignore + Private times As Map + times.Initialize +' Log("###### " & tag) +' Log(reqsList.IsInitialized) + If reqsList.IsInitialized Then +' Log(reqsList) +' Private pos As Int = reqsList.IndexOf(tag) + If inicioRequestMap.ContainsKey(tag) Then + inicioRequest = inicioRequestMap.Get(tag) +' Log(">>>>>>> From inicioRequestMap") + End If + If inicioJobDoneMap.ContainsKey(tag) Then + inicioJobDone = inicioJobDoneMap.Get(tag) +' Log(">>>>>>> From inicioJobDoneMap") + End If + End If +' Log($"${inicioJobDone} - ${inicioRequest}"$) + Private requestTime As String = NumberFormat2(((inicioJobDone - inicioRequest) / 1000),1,5,0,False) + Private JobDoneTime As String = NumberFormat2(((DateTime.Now - inicioJobDone) / 1000),1,5,0,False) + times.Put("requestTime", requestTime) + times.Put("jobDoneTime", JobDoneTime) + times.Put("totalTime", NumberFormat2((JobDoneTime + requestTime),1,5,0,False)) + Return times +End Sub + +'Initializes request tracking +Sub trackInit 'ignore + Log(">>>>>>>>> TRACKINIT ") + reqsList.Initialize + timesList.Initialize + inicioRequestMap.Initialize + inicioJobDoneMap.Initialize +End Sub + +Sub trackNext(job As HttpJob) + If reqsList.IsInitialized Then 'Si tenemos lista de requests, la procesamos. + Private quitamos As String = "" + If reqsList.IndexOf(job.tag) <> -1 Then + Private pos As Int = reqsList.IndexOf(job.tag) + If pos <> -1 Then + inicioRequestMap.Put(job.Tag, timesList.Get(pos)) + reqsList.RemoveAt(pos) + timesList.RemoveAt(pos) + End If + quitamos = $"Quitamos ${job.tag} - "$ + End If + LogColor(">>>>>> Requests: " & reqsList.Size & " - " & quitamos & reqsList, Colors.Blue) + LogColor(">>>>>> inicioRequestMap:" & inicioRequestMap.Size & " - " & inicioRequestMap, Colors.Magenta) + End If +End Sub \ No newline at end of file diff --git a/B4A/EscPosPrinter.bas b/B4A/EscPosPrinter.bas new file mode 100644 index 0000000..f0a9536 --- /dev/null +++ b/B4A/EscPosPrinter.bas @@ -0,0 +1,1158 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=9.3 +@EndOfDesignText@ +#IgnoreWarnings: 9 +' 9 = unused variable + +Sub Class_Globals + ' 1.0 Initial version + ' 2.0 Added FeedPaper, changed many WriteString(.." & Chr(number)) instances to WriteBytes(params) + ' This is to avoid Unicode code page transformations on some numbers > 32 + ' Added PrintAndFeedPaper, setRelativePrintPosn, + ' Added user defined characters, DefineCustomCharacter, DeleteCustomCharacter and setUseCustomCharacters + ' Addedhelper methods CreateCustomCharacter, CreateLine, CreateBox and CreateCircle + Private Version As Double = 2.0 ' Printer class version + + Type AnImage(Width As Int, Height As Int, Data() As Byte) + + Private EventName As String 'ignore + Private CallBack As Object 'ignore + + Private Serial1 As Serial + Private Astream As AsyncStreams + Private Connected As Boolean + Private ConnectedError As String + + Dim ESC As String = Chr(27) + Dim FS As String = Chr(28) + Dim GS As String = Chr(29) + + 'Bold and underline don't work well in reversed text + Dim UNREVERSE As String = GS & "B" & Chr(0) + Dim REVERSE As String = GS & "B" & Chr(1) + + ' Character orientation. Print upside down from right margin + Dim UNINVERT As String = ESC & "{0" + Dim INVERT As String = ESC & "{1" + + ' Character rotation clockwise. Not much use without also reversing the printed character sequence + Dim UNROTATE As String = ESC & "V0" + Dim ROTATE As String = ESC & "V1" + + ' Horizontal tab + Dim HT As String = Chr(9) + + ' Character underline + Dim ULINE0 As String = ESC & "-0" + Dim ULINE1 As String = ESC & "-1" + Dim ULINE2 As String = ESC & "-2" + + ' Character emphasis + Dim BOLD As String = ESC & "E1" + Dim NOBOLD As String = ESC & "E0" + + ' Character height and width + Dim SINGLE As String = GS & "!" & Chr(0x00) + Dim HIGH As String = GS & "!" & Chr(0x01) + Dim WIDE As String = GS & "!" & Chr(0x10) + Dim HIGHWIDE As String = GS & "!" & Chr(0x11) + + ' Default settings + Private LEFTJUSTIFY As String = ESC & "a0" + Private LINEDEFAULT As String = ESC & "2" + Private LINSET0 As String = ESC & "$" & Chr(0x0) & Chr(0x0) + Private LMARGIN0 As String = GS & "L" & Chr(0x0) & Chr(0x0) + Private WIDTH0 As String = GS & "W" & Chr(0xff) & Chr(0xff) + Private CHARSPACING0 As String = ESC & " " & Chr(0) + Private CHARFONT0 As String = ESC & "M" & Chr(0) + Dim DEFAULTS As String = CHARSPACING0 & CHARFONT0 & LMARGIN0 & WIDTH0 & LINSET0 & LINEDEFAULT & LEFTJUSTIFY _ + & UNINVERT & UNROTATE & UNREVERSE & NOBOLD & ULINE0 + +End Sub + +'********** +'PUBLIC API +'********** + +'Initialize the object with the parent and event name +Public Sub Initialize(vCallback As Object, vEventName As String) + EventName = vEventName + CallBack = vCallback + Serial1.Initialize("Serial1") + Connected = False + ConnectedError = "" +End Sub + +' Returns any error raised by the last attempt to connect a printer +Public Sub ConnectedErrorMsg As String + Return ConnectedError +End Sub + +' Returns whether a printer is connected or not +Public Sub IsConnected As Boolean + Return Connected +End Sub + +' Returns whether Bluetooth is on or off +Public Sub IsBluetoothOn As Boolean + Return Serial1.IsEnabled +End Sub + +' Ask the user to connect to a printer and return whether she tried or not +' If True then a subsequent Connected event will indicate success or failure +Public Sub Connect As Boolean + 'leos +' Serial1.Connect("88:6B:0F:3E:53:9E") +' Return True + Try + If Starter.MAC_IMPRESORA = "0" Then + Dim PairedDevices As Map + PairedDevices = Serial1.GetPairedDevices + Dim l As List + l.Initialize + Log("aqui 1") + For i = 0 To PairedDevices.Size - 1 + l.Add(PairedDevices.GetKeyAt(i)) + Log("aqui 2") + DisConnect + Next + Dim Res As Int + Res = InputList(l, "Choose a printer", -1) 'show list with paired devices 'ignore + If Res <> DialogResponse.CANCEL Then + Serial1.Connect(PairedDevices.Get(l.Get(Res))) 'convert the name to mac address + 'Msgbox(PairedDevices.Get(l.Get(Res)),"mac") + Starter.mac_impresora = PairedDevices.Get(l.Get(Res)) + Return True + DisConnect + Log("aqui 3") + End If + Log("aqui 4") + Return False + Else + Serial1.Connect(Starter.mac_impresora) + ' Starter.mac_impresora = colonia.MAC_IMPRESORA + Return True + DisConnect + Log("aqui 5") + End If + Catch + Log(LastException) + Return False + End Try +End Sub + + +' Disconnect the printer +Public Sub DisConnect + Serial1.Disconnect + Connected = False +End Sub + +' Reset the printer to the power on state +Public Sub Reset + WriteString(ESC & "@") +End Sub + +'-------------- +' Text Commands +'-------------- + +' Print any outstanding characters then feed the paper the specified number of units of 0.125mm +' This is similar to changing LineSpacing before sending CRLF but this has a one off effect +' A full character height is always fed even if units = 0. Units defines the excess over this minimum +Public Sub PrintAndFeedPaper(units As Int) + WriteString(ESC & "J") + Dim params(1) As Byte + params(0) = units + WriteBytes(params) +End Sub + +' Set the distance between characters +Public Sub setCharacterSpacing(spacing As Int) + WriteString(ESC & " ") + Dim params(1) As Byte + params(0) = spacing + WriteBytes(params) +End Sub + +' Set the left inset of the next line to be printed +' Automatically resets to 0 for the following line +' inset is specified in units of 0.125mm +Public Sub setLeftInset(inset As Int) + Dim dh As Int = inset / 256 + Dim dl As Int = inset - dh + WriteString(ESC & "$" & Chr(dl) & Chr(dh)) + Dim params(2) As Byte + params(0) = dl + params(1) = dh + WriteBytes(params) +End Sub + +' Set the left margin of the print area, must be the first item on a new line +' margin is specified in units of 0.125mm +' This affects barcodes as well as text +Public Sub setLeftMargin(margin As Int) + Dim dh As Int = margin / 256 + Dim dl As Int = margin - dh + WriteString(GS & "L") + Dim params(2) As Byte + params(0) = dl + params(1) = dh + WriteBytes(params) +End Sub + +' Set the width of the print area, must be the first item on a new line +' margin is specified in units of 0.125mm +' This affects barcodes as well as text +' This appears to function more like a right margin than a print area width when used with LeftMargin +Public Sub setPrintWidth(width As Int) + Dim dh As Int = width / 256 + Dim dl As Int = width - dh + WriteString(GS & "W") + Dim params(2) As Byte + params(0) = dl + params(1) = dh + WriteBytes(params) +End Sub + +' Set the distance between lines in increments of 0.125mm +' If spacing is < 0 then the default of 30 is set +Public Sub setLineSpacing(spacing As Int) + If spacing < 0 Then + WriteString(ESC & "2") + Else + WriteString(ESC & "3") + Dim params(1) As Byte + params(0) = spacing + WriteBytes(params) + End If +End Sub + +' Set the line content justification, must be the first item on a new line +' 0 left, 1 centre, 2 right +Public Sub setJustify(justify As Int) + WriteString(ESC & "a" & Chr(justify + 48)) +End Sub + +' Set the codepage of the printer +' You need to look at the printer documentation to establish which codepages are supported +Public Sub setCodePage(codepage As Int) + WriteString(ESC & "t") + Dim params(1) As Byte + params(0) = codepage + WriteBytes(params) +End Sub + +' Select the size of the font for printing text. 0 = Font A (12 x 24), 1 = Font B (9 x 17) +' For font B you may want to set the line spacing to a lower value than the default of 30 +' This affects only the size of printed characters. The code page determines the actual character set +' On my printer setting UseCustomCharacters = while Font B is selected crashes the printer and turns it off +Public Sub setCharacterFont(font As Int) + WriteString(ESC & "M" & Chr(Bit.And(1,font))) +End Sub + +' Set the positions of the horizontal tabs +' Each tab is specified as a number of character widths from the beginning of the line +' There may be up to 32 tab positions specified each of size up to 255 characters +' The printer default is that no tabs are defined +Public Sub setTabPositions(tabs() As Int) + WriteString(ESC & "D") + Dim data(tabs.Length+1) As Byte + For i = 0 To tabs.Length - 1 + data(i) = tabs(i) + Next + data(tabs.Length) = 0 + WriteBytes(data) +End Sub + +' Set print position relative to the current position using horizontal units of 0.125mm +' relposn can be negative +' Unless I have misundertood this doesn't work as documented on my printer +' It only seems take effect at the beginning of a line as a one off effect +Public Sub setRelativePrintPosn(relposn As Int) + Dim dh As Int = relposn / 256 + Dim dl As Int = relposn - dh + WriteString(ESC & "\") + Dim params(2) As Byte + params(0) = dl + params(1) = dh + WriteBytes(params) +End Sub + +' Send the contents of an array of bytes to the printer +' Remember that if the printer is expecting text the bytes will be printed as characters in the current code page +Public Sub WriteBytes(data() As Byte) + If Connected Then + Astream.Write(data) + End If +End Sub + +' Send the string to the printer in IBM437 encoding which is the original PC DOS codepage +' This is usually the default codepage for a printer and is CodePage = 0 +' Beware of using WriteString with Chr() to send numeric values as they may be affected by Unicode to codepage translations +' Most character level operations are pre-defined as UPPERCASE string variables for easy concatenation with other string data +Public Sub WriteString(data As String) + WriteString2(data, "IBM437") +End Sub + +' Send the string to the printer in the specified encoding +' You also need to set the printer to a matching encoding using the CodePage property +' Beware of using WriteString2 with Chr() to send numeric values as they may be affected by codepage substitutions +' Most character level operations are pre-defined as UPPERCASE string variables for easy concatenatipon with other string data +Public Sub WriteString2(data As String, encoding As String) + Try + If Connected Then + Astream.Write(data.GetBytes(encoding)) + End If + Catch + Log("Printer error : " & LastException.Message) + AStream_Error + End Try +End Sub + +'----------------------------------------- +' User defined character commands commands +'----------------------------------------- + +' Delete the specified user defined character mode +' This command deletes the pattern defined for the specified code in the font selected by ESC ! +' If the code is subsequently printed in custom character mode the present code page character is printed instead +Public Sub DeleteCustomCharacter(charcode As Int) + WriteString(ESC & "?") + Dim params(1) As Byte + params(0) = charcode + WriteBytes(params) +End Sub + +' Enable the user defined character mode if custom is True, revert to normal if custom is False +' If a custom character has not been defined for a given character code then the default character for the present font is printed +' FontA and FontB have separate definitions for custom characters +' On my printer setting UseCustomCharacters = while Font B is selected crashes the printer and turns it off +' Therefore the cuatom character routines have not been tested on ont B +Public Sub setUseCustomCharacters(custom As Boolean) + If custom Then + WriteString(ESC & "%1") + Else + WriteString(ESC & "%0") + End If +End Sub + +' Define a user defined character +' The allowable character code range is the 95 characters) from ASCII code 32 (0x20) to 126 (0x7E) +' Characters can be defined in either font A (12*24) or font B (9*17) as selected by present setting of CharacterFont +' The programmer must ensure that the correct font size definition is used for the present setting of CharacterFont +' The user-defined character definition is cleared when Reset is invoked or the printer is turned off +' The vertical and horizontal printed resolution is approximaely 180dpi +' Characters are always defined by sets of three bytes in the vertical direction and up to 9 or 12 sets horizontally +' Each byte defines a vertical line of 8 dots. The MSB of each byte is the highest image pixel, the LSB is the lowest +' Byte(0+n) defines the topmost third of the vertical line, Byte(1+n) is below and Byte(2+n) is the lowest +' Set a bit to 1 to print a dot or 0 to not print a dot +' If the lines to the right of the character are blank then there set of three bytes can be omiited from the byte array +' When the user-defined characters are defined in font B (9*17) only the most significant bit of the 3rd byte of data is used +' charcode defines the character code for the character being defined +' bitdata is a Byte array containing the character definitiopn as described above. +' If the length of bitdata is not a multiple of 3 the definition is ignored and a value of -1 returned +Public Sub DefineCustomCharacter(charcode As Int, bitdata() As Byte) As Int + Dim excess As Int = bitdata.Length Mod 3 + If excess <> 0 Then Return -1 + Dim size As Int = bitdata.Length / 3 + WriteString(ESC & "&") + Dim params(4) As Byte + params(0) = 3 + params(1) = charcode + params(2) = charcode + params(3) = size + WriteBytes(params) + WriteBytes(bitdata) + Return 0 +End Sub + +' The third triangle point is hacked into spare bits keeping the generated Int human readable i hex for other shapes +' The shape array contains the character shapes and characterfont is 0 for a 12*24 character andd 1 for a 9*17 character +' Returns a Byte(36) for characterfont = 0 and a Byte(27) for characterfont = 1 +' The returned array can be directly passed to DefineCustomCharacter +' To define a custom character requires specifying up to 288 data points +' This is a lot of data and in most cases it is mainly white space +' This method takes a character definition that defines only the shapes in the character that are to be printed black +' It will be easier use the outputs from CreateLine, CreateTriangle, CreateBox and CreateCircle rather then building the actual Int values +' Each shape is defined by a single Int value containing four parameters in hex format plugs some single bit flags +' Taking the representation of the Int as eight hex characters numbered from the MS end as 0x01234567 +' 0 contains the shape to draw. 0 = Line, 1 = Box, 2 = Circle, 3 = Triangle +' 1 contains a value between 0 and 0xF. This is either an X coordinate or for a circle the radius +' 2 and 3 contain a value between 0 and 0x1F. This is either a Y coordinate or for a circle the quadrants to draw +' 4 contains a value between 0 and 0xF. This is 0 for an empty shope or 1 for a filled shape +' 5 contains a value between 0 and 0xF. This is an X coordinate +' 5 and 6 contain a value between 0 and 0x1F. This is a Y coordinate +' The coordinate 0,0 is at the top left of the character +' Line +' One point of the vector is contained in the top part of the Int and the other in the bottom half +' To define a single point place its coordinates as both sr=start and end of a line +' Box +' The two X,Y coordinates specify the top left and bottom right corners of the box +' Circle +' The left X parameter is now the radius of the circle, the left Y is the quadrants to be drawn +' The right X and Y parameters are the centre of the circle' +' The quadrants to draw are bit ORed together, UpperRight = 0x1, LowerRight = 0x2, LowerLeft = 0x4, Upper Left = 0x8 +' Triangle +' The left X and Y parameters are now one point of the triangle, the right X and Y parameters another point +' The third triangle point is hacked into spare bits keeping the generated Int human readable in hex for the other shapes +' The bit allocations of a shape are as follows. f = fill as 0 or 1, s = shape as 0 to 7, xn as 0 to 15, yn as 0 to 31 +' Shape 0 = line, 1 = box, 2 = triangle, 3 = circle, 4 to 7 = unused +' fsss xxxx -yyy yyyy xxxx xxxx yyyy yyyy +' 0000 220 0000 2222 1111 2221 1111 +' x0 y2 y0 x2 x1 y2 y1 +' The shape array contains the character shapes and characterfont is 0 for a 12*24 character andd 1 for a 9*17 character +' Returns a Byte(36) for characterfont = 0 and a Byte(27) for characterfont = 1 +' The returned array can be directly passed to DefineCustomCharacter +Public Sub CreateCustomCharacter(shapes() As Int, characterfont As Int) As Byte() + Dim masks(8) As Byte + masks(0) = 0x80 + masks(1) = 0x40 + masks(2) = 0x20 + masks(3) = 0x10 + masks(4) = 0x08 + masks(5) = 0x04 + masks(6) = 0x02 + masks(7) = 0x01 + ' rather than try to catch errors whenever we access this array we Dim it to the maximum possible values of X and Y + ' then copy the top left of it to the final character definition array of the correct size + Dim points(16,32) As Byte + ' initialise the character to all white + For x = 0 To 15 + For y = 0 To 31 + points(x,y) = 0 + Next + Next + Dim size As Int = 12 + If characterfont = 1 Then size = 9 + Dim charbyes(size * 3) As Byte + For c = 0 To charbyes.Length - 1 + charbyes(c) = 0 + Next + ' set the points array from the shapes provided + For i = 0 To shapes.Length -1 + Dim fill As Int = Bit.UnsignedShiftRight(Bit.And(0x80000000, shapes(i)), 31) + Dim shape As Int = Bit.UnsignedShiftRight(Bit.And(0x70000000, shapes(i)), 28) + Dim x0 As Int = Bit.UnsignedShiftRight(Bit.And(0x0f000000, shapes(i)), 24) + Dim y0 As Int = Bit.UnsignedShiftRight(Bit.And(0x001f0000, shapes(i)), 16) + Dim x1 As Int = Bit.UnsignedShiftRight(Bit.And(0x00000f00, shapes(i)), 8) + Dim y1 As Int = Bit.And(0x0000001f, shapes(i)) + Dim x2 As Int = Bit.UnsignedShiftRight(Bit.And(0x0000f000, shapes(i)), 12) + Dim y2 As Int = Bit.UnsignedShiftRight(Bit.And(0x00e00000, shapes(i)), 18) + Bit.UnsignedShiftRight(Bit.And(0x000000e0, shapes(i)), 5) + ' The bit allocations of a shape are as follows. f = fill as 0 or 1, s = shape as 0 to 7, xn as 0 to 15, yn as 0 to 31 + ' Shape 0 = line, 1 = box, 2 = triangle, 3 = circle, 4 to 7 = unused + ' fsss xxxx -yyy yyyy xxxx xxxx yyyy yyyy + ' 0000 220 0000 2222 1111 2221 1111 + ' x0 y2 y0 x2 x1 y2 y1 + Dim logmsg As String = ": Fill=" & fill & " : Points " & x0 & "," & y0 & " " & x1 & "," & y1 & " " & x2 & "," & y2 + If shape = 3 Then + Log("Triangle " & logmsg) + PlotTriangle(x0, y0, x1, y1, x2, y2, points, fill) + else If shape = 2 Then + Log("Circle " & logmsg) + PlotCircle(x0, y0, x1, y1, points, fill) + Else If shape = 1 Then + Log("Box " & logmsg) + PlotBox(x0, y0, x1, y1, points, fill) + Else + Log("Line " & logmsg) + PlotLine(x0, y0, x1, y1, points) + End If + ' map the points array onto the character definition array + For x = 0 To size -1 ' 9 or 12 horizontal bytes + For y = 0 To 2 ' 3 vertical bytes + Dim bits As Byte = 0 + For b = 0 To 7 ' 8 vertical bits + If points(x, y*8+b) <> 0 Then + bits = Bit.Or(bits, masks(b)) + End If + Next + charbyes(x*3+y) = bits + Next + Next + Next + Return charbyes +End Sub + +' This is a higher level method that builds the Int values to pass to CreateCustomCharacter in the shapes array +' Create the value to draw a line in a custom character +' The line starts at X0,Y0 and ends at X1,Y1 +Public Sub CreateLine(x0 As Int, y0 As Int, x1 As Int, y1 As Int) As Int + Dim line As Int = 0 + line = line + Bit.ShiftLeft(Bit.And(0xf,x0), 24) + line = line + Bit.ShiftLeft(Bit.And(0x1f,y0), 16) + line = line + Bit.ShiftLeft(Bit.And(0xf,x1), 8) + line = line + Bit.And(0x1f,y1) + Return line +End Sub + +' This is a higher level method that builds the Int values to pass to CreateCustomCharacter in the shapes array +' Create the value to draw a circle in a custom character +' The circle is centred on X1,Y1 and the quadrants to draw are bit ORed together +' UpperRight = 0x1, LowerRight = 0x2, LowerLeft = 0x4, Upper Left = 0x8 +Public Sub CreateCircle(radius As Int, quadrants As Int, x1 As Int, y1 As Int, fill As Boolean) As Int + Dim circle As Int = 0x20000000 + If fill Then circle = circle + 0x80000000 + circle = circle + Bit.ShiftLeft(radius, 24) + circle = circle + Bit.ShiftLeft(quadrants, 16) + circle = circle + Bit.ShiftLeft(x1, 8) + circle = circle + y1 + Return circle +End Sub + + +' This is a higher level method that builds the Int values to pass to CreateCustomCharacter in the shapes array +' Create the value to draw a triangle in a custom character +' The triangles corners are at X0,Y0 X1,Y1 and X2,Y2 +Public Sub CreateTriangle(x0 As Int, y0 As Int, x1 As Int, y1 As Int, x2 As Int, y2 As Int, fill As Boolean) As Int + Dim triangle As Int = 0x30000000 + If fill Then triangle = triangle + 0x80000000 + triangle = triangle + Bit.ShiftLeft(Bit.And(0xf,x0), 24) + triangle = triangle + Bit.ShiftLeft(Bit.And(0x1f,y0), 16) + triangle = triangle + Bit.ShiftLeft(Bit.And(0xf,x1), 8) + triangle = triangle + Bit.And(0x1f,y1) + triangle = triangle + Bit.ShiftLeft(Bit.And(0xf,x2), 12) ' extra X + triangle = triangle + Bit.ShiftLeft(Bit.And(0x7,y2), 5) ' extra Y lsbits * 3 + triangle = triangle + Bit.ShiftLeft(Bit.And(0x18,y2), 18) ' extra Y msbits * 2 + Return triangle +End Sub + +' This is a higher level method that builds the Int values to pass to CreateCustomCharacter in the shapes array +' Create the value to draw a box in a custom character +' The box top left start is X0,Y0 and bottom right is X1,Y1 +Public Sub CreateBox(x0 As Int, y0 As Int, x1 As Int, y1 As Int, fill As Boolean) As Int + Dim box As Int = 0x10000000 + If fill Then box = box + 0x80000000 + box = box + Bit.ShiftLeft(Bit.And(0xf,x0), 24) + box = box + Bit.ShiftLeft(Bit.And(0x1f,y0), 16) + box = box + Bit.ShiftLeft(Bit.And(0xf,x1), 8) + box = box + Bit.And(0x1f,y1) + Return box +End Sub + +'----------------------------------------- +' Private custom character drawing methods +'----------------------------------------- + +Private Sub PlotTriangle(x0 As Int, y0 As Int, x1 As Int, y1 As Int, x2 As Int, y2 As Int, points(,) As Byte, Fill As Int) + ' This is a pretty crude algorithm, but it is simple, works and it isn't invoked often + PlotLine(x0, y0, x1, y1, points) + PlotLine(x1, y1, x2, y2, points) + PlotLine(x2, y2, x0, y0, points) + If Fill > 0 Then + FillTriangle(x0, y0, x1, y1, x2, y2, points) + End If +End Sub + +Private Sub FillTriangle(x0 As Int, y0 As Int, x1 As Int, y1 As Int, x2 As Int, y2 As Int, points(,) As Byte) + ' first sort the three vertices by y-coordinate ascending so v0 Is the topmost vertice */ + Dim tx, ty As Int + If y0 > y1 Then + tx = x0 : ty = y0 + x0 = x1 : y0 = y1 + x1 = tx : y1 = ty + End If + If y0 > y2 Then + tx = x0 : ty = y0 + x0 = x2 : y0 = y2 + x2 = tx : y2 = ty + End If + If y1 > y2 Then + tx = x1 : ty = y1 + x1 = x2 : y1 = y2 + x2 = tx : y2 = ty + End If + + Dim dx0, dx1, dx2 As Double + Dim x3, x4, y3, y4 As Double + Dim inc As Int + + If y1 - y0 > 0 Then dx0=(x1-x0)/(y1-y0) Else dx0=0 + If y2 - y0 > 0 Then dx1=(x2-x0)/(y2-y0) Else dx1=0 + If y2 - y1 > 0 Then dx2=(x2-x1)/(y2-y1) Else dx2=0 + x3 = x0 : x4 = x0 + y3 = y0 : y4 = y0 + If dx0 > dx1 Then + While + Do While y3 <= y1 + If x3 > x4 Then inc = -1 Else inc = 1 + For x = x3 To x4 Step inc + points(x, y3) = 1 + Next + y3 = y3 + 1 : y4 = y4 + 1 : x3 = x3 + dx1 : x4 = x4 + dx0 + Loop + x4=x1 + y4=y1 + Do While y3 <= y2 + If x3 > x4 Then inc = -1 Else inc = 1 + For x = x3 To x4 Step inc + points(x ,y3) = 1 + Next + y3 = y3 + 1 : y4 = y4 + 1 : x3 = x3 + dx1 : x4 = x4 + dx2 + Loop + Else + While + Do While y3 <= y1 + If x3 > x4 Then inc = -1 Else inc = 1 + For x = x3 To x4 Step inc + points(x, y3) = 1 + Next + y3 = y3 + 1 : y4 = y4 + 1 : x3 = x3 + dx0 : x4 = x4 +dx1 + Loop + x3=x1 + y3=y1 + Do While y3<=y2 + If x3 > x4 Then inc = -1 Else inc = 1 + For x = x3 To x4 Step inc + points(x, y3) = 1 + Next + y3 = y3 + 1 : y4 = y4 + 1 : x3 = x3 + dx2 : x4 = x4 + dx1 + Loop + End If +End Sub + +Private Sub PlotBox(x0 As Int, y0 As Int, x1 As Int, y1 As Int, points(,) As Byte, Fill As Int) + ' This is a pretty crude algorithm, but it is simple, works and itsn't invoked often + PlotLine(x0, y0, x0, y1, points) + PlotLine(x0, y0, x1, y0, points) + PlotLine(x1, y0, x1, y1, points) + PlotLine(x0, y1, x1, y1, points) + If Fill > 0 Then + For x = x0 To x1 + PlotLine(x, y0, x, y1, points) + Next + End If +End Sub + + +Private Sub PlotCircle(radius As Int, quadrants As Int, x1 As Int, y1 As Int, points(,) As Byte, fill As Int) + ' This is a pretty crude algorithm, but it is simple, works and itsn't invoked often + Dim mask As Int = 1 + For q = 3 To 0 Step -1 + If Bit.And(quadrants, mask) <> 0 Then + For i = q*90 To q*90+90 Step 1 + Dim x,y As Double + x = x1 - SinD(i)*radius + y = y1 - CosD(i)*radius + If fill > 0 Then + PlotLine(x1, y1, x, y, points) + Else + points(Round(x), Round(y)) = 1 + End If + Next + End If + mask = Bit.ShiftLeft(mask, 1) + Next +End Sub + +' Bresenham's line algorithm - see Wikipedia +Private Sub PlotLine(x0 As Int, y0 As Int, x1 As Int, y1 As Int, points(,) As Byte ) + If Abs(y1 - y0) < Abs(x1 - x0) Then + If x0 > x1 Then + PlotLineLow(x1, y1, x0, y0, points) + Else + PlotLineLow(x0, y0, x1, y1, points) + End If + Else + If y0 > y1 Then + PlotLineHigh(x1, y1, x0, y0, points) + Else + PlotLineHigh(x0, y0, x1, y1, points) + End If + End If +End Sub + +Private Sub PlotLineHigh(x0 As Int, y0 As Int, x1 As Int, y1 As Int, points(,) As Byte ) + Dim dx As Int = x1 - x0 + Dim dy As Int = y1 - y0 + Dim xi As Int = 1 + If dx < 0 Then + xi = -1 + dx = -dx + End If + Dim D As Int = 2*dx - dy + Dim x As Int = x0 + For y = y0 To y1 + points(x,y) = 1 + If D > 0 Then + x = x + xi + D = D - 2*dy + End If + D = D + 2*dx + Next +End Sub + +Private Sub PlotLineLow(x0 As Int, y0 As Int, x1 As Int,y1 As Int, points(,) As Byte ) + Dim dx As Int = x1 - x0 + Dim dy As Int = y1 - y0 + Dim yi As Int = 1 + If dy < 0 Then + yi = -1 + dy = -dy + End If + Dim D As Int = 2*dy - dx + Dim y As Int = y0 + For x = x0 To x1 + points(x,y) = 1 + If D > 0 Then + y = y + yi + D = D - 2*dx + End If + D = D + 2*dy + Next +End Sub + + +'------------------- +' Image commands +'------------------- +' There are two different image printing options with different pixel formats. +' PrintImage prints an entire image at once with a maximum size of 576x512 +' PrintImage2 prints a slice of an image with a height of 8 or 24 and a maximum width of 576 +' One or other may look better on your particular printer + +' Printer support method for pre-processing images to print +' Convert the bitmap supplied to an array of pixel values representing the luminance value of each original pixel +Sub ImageToBWIMage(bmp As Bitmap) As AnImage + Dim BC As BitmapCreator 'ignore + Dim W As Int = bmp.Width + Dim H As Int = bmp.Height + Dim pixels(W * H) As Byte + + For y = 0 To H - 1 + For x = 0 To W - 1 + Dim j As Int = bmp.GetPixel(x, y) + ' convert color to approximate luminance value + Dim col As ARGBColor + BC.ColorToARGB(j, col ) + Dim lum As Int = col.r * 0.2 + col.b*0.1 + col.g*0.7 + If lum> 255 Then lum = 255 + ' save the pixel luminance + pixels(y*W + x) = lum + Next + Next + Dim ret As AnImage + ret.Width = bmp.Width + ret.Height = bmp.Height + ret.Data = pixels + Return ret +End Sub + +' Printer support method for pre-processing images to print +' Convert the array of luminance values to an array of 0s and 1s according to the threshold value +Sub ThresholdImage(img As AnImage, threshold As Int) As AnImage 'ignore + Dim pixels(img.Data.Length) As Byte + For i = 0 To pixels.Length - 1 + Dim lum As Int = Bit.And(img.Data(i), 0xff) ' bytes are signed values + If lum < threshold Then + lum = 1 + Else + lum = 0 + End If + pixels(i) = lum + Next + Dim ret As AnImage + ret.Width = img.Width + ret.Height = img.Height + ret.Data = pixels + Return ret +End Sub + +' Printer support method for pre-processing images to print +' Convert the array of luminance values to a dithered array of 0s and 1s according to the threshold value +' The dithering algorithm is the simplest one-dimensional error diffusion algorithm +' Normally threshold should be 128 but some images may look better with a little more or less. +' This algorithm tends to produce vertical lines. DitherImage2D will probably look far better +Sub DitherImage1D(img As AnImage, threshold As Int) As AnImage 'ignore + Dim pixels(img.Data.Length) As Byte + Dim error As Int + For y = 0 To img.Height - 1 + error = 0 ' reset on each new line + For x = 0 To img.Width - 1 + Dim lum As Int = Bit.And(img.Data(y*img.Width + x), 0xff) ' bytes are signed values + lum = lum + error + If lum < threshold Then + error = lum + lum = 1 + Else + error = lum - 255 + lum = 0 + End If + pixels(y*img.Width + x) = lum + Next + Next + Dim ret As AnImage + ret.Width = img.Width + ret.Height = img.Height + ret.Data = pixels + Return ret +End Sub + + +' Printer support method for pre-processing images to print +' Convert the array of luminance values to a dithered array of 0s and 1s according to the threshold value +' The dithering algorithm is the simplest two-dimensional error diffusion algorithm +' Normally threshold should be 128 but some images may look better with a little more or less. +' Anything more sophisticated might be overkill considering the image quality of most thermal printers +Sub DitherImage2D(img As AnImage, threshold As Int) As AnImage + Dim pixels(img.Data.Length) As Byte + Dim xerror As Int + Dim yerrors(img.Width) As Int + For i = 0 To yerrors.Length -1 + yerrors(0) = 0 + Next + For y = 0 To img.Height - 1 + xerror = 0 ' reset on each new line + For x = 0 To img.Width - 1 + Dim lum As Int = Bit.And(img.Data(y*img.Width + x), 0xff) ' bytes are signed values + lum = lum + xerror + yerrors(x) + If lum < threshold Then + xerror = lum/2 + yerrors(x) = xerror + lum = 1 + Else + xerror = (lum - 255)/2 + yerrors(x) = xerror + lum = 0 + End If + pixels(y*img.Width + x) = lum + Next + Next + Dim ret As AnImage + ret.Width = img.Width + ret.Height = img.Height + ret.Data = pixels + Return ret +End Sub + + +' GS v0 printing +'--------------- + +' Prints the given image at the specified height and width using the "GS v" command +' Image data is supplied as bytes each containing 8 bits of horizontal image data +' The top left of the image is Byte(0) and the bottom right is Byte(width*height-1) +' MSB of the byte is the leftmost image pixel, the LSB is the rightmost +' Maximum width is 72 bytes (576 bits), Maximum height is 512 bytes +' The printed pixels are square +' Returns status 0 : OK, -1 : too wide, -2 : too high, -3 : array too small +' The printer can take a long time to process the data and start printing +Public Sub PrintImage(img As AnImage) As Int + ' max width = 72 ' 72mm/576 bits wide + ' max height = 512 ' 64mm/512 bits high + If img.width > 72 Then Return -1 + If img.height > 512 Then Return -2 + If img.data.Length < img.width * img.height Then Return -3 + Dim xh As Int = img.width / 256 + Dim xl As Int = img.width - xh * 256 + Dim yh As Int = img.height / 256 + Dim yl As Int = img.height - yh * 256 + Dim params(5) As Byte + params(0) = 0 ' + params(1) = xl + params(2) = xh + params(3) = yl + params(4) = yh + WriteString(GS & "v0") + WriteBytes(params) + WriteBytes(img.data) + WriteString(CRLF) + Return 0 +End Sub + +' Printer support method for pre-processing images to print by PrintImage +' Takes an array of image pixels and packs it for use with PrintImage +' Each byte in the imagedata array is a single pixel valued zero or non-zero for white and black +' The returned array is 8 x smaller and packs 8 horizontal black or white pixels into each byte +' If the horizontal size of the image is not a multiple of 8 it will be truncated so that it is. +Public Sub PackImage(imagedata As AnImage) As AnImage + Dim xbytes As Int = imagedata.width/8 + Dim pixels(xbytes * imagedata.height) As Byte + Dim masks(8) As Byte + masks(0) = 0x80 + masks(1) = 0x40 + masks(2) = 0x20 + masks(3) = 0x10 + masks(4) = 0x08 + masks(5) = 0x04 + masks(6) = 0x02 + masks(7) = 0x01 + Dim index As Int = 0 + For y = 0 To imagedata.Height - 1 + For x = 0 To xbytes - 1 + Dim xbyte As Byte = 0 + For b = 0 To 7 + ' get a pixel + Dim pix As Byte = imagedata.Data(index) + If pix <> 0 Then + xbyte = xbyte + masks(b) + End If + index = index + 1 + Next + pixels(y*xbytes + x) = xbyte + Next + Next + Dim ret As AnImage + ret.Width = xbytes + ret.Height = imagedata.Height + ret.Data = pixels + Return ret +End Sub + + +' ESC * printing +'--------------- + +' Prints the given image slice at the specified height and width using the "ESC *" command +' Image data is supplied as bytes each containing 8 bits of vertical image data +' Pixels are not square, the width:height ratio varies with density and line height +' Returns status 0 = OK, -1 = too wide, -2 = too high, -3 = wrong array length +' Line spacing needs to be set to 0 if printing consecutive slices +' The printed pixels are not square, the ratio varies with the highdensity and dots24 parameter settings +' The highdensity parameter chooses high or low horizontal bit density when printed +' The dots24 parameter chooses 8 or 24 bit data slice height when printed +' Not(highdensity) +' Maximum width is 288 bits. Horizontal dpi is approximately 90 +' MSB of each byte is the highest image pixel, the LSB is the lowest +' highdensity +' Maximum width is 576 bits. Horizontal dpi is approximately 180 +' Not(dots24) +' Vertical printed height is 8 bits at approximately 60dpi +' One byte in the data Array represents one vertical line when printed +' Array size is the same as the width +' MSB of each byte is the highest image pixel, the LSB is the lowest +' dots24 +' Vertical printed height is 24 bits at approximately 180dpi +' Three consecutive bytes in the data array represent one vertical 24bit line when printed +' Array size is 3 times the width +' Byte(n+0) is the highest, byte (n+2) us the lowest +' MSB of each byte is the highest image pixel, the LSB is the lowest +Public Sub PrintImage2(width As Int, data() As Byte, highdensity As Boolean, dotds24 As Boolean) As Int + Dim d As String = Chr(0) + If Not(highdensity) And Not(dotds24 ) Then + d = Chr(0) + If width > 288 Then Return -1 + If data.Length <> width Then Return -3 + Else If highdensity And Not(dotds24) Then + d = Chr(1) + If width > 576 Then Return -1 + If data.Length <> width Then Return -3 + Else If Not(highdensity) And dotds24 Then + d = Chr(32) + If width > 288 Then Return -1 + If data.Length <> width*3 Then Return -3 + Else ' highdensity And dotds24 + d = Chr(33) + If width > 576 Then Return -1 + If data.Length <> width*3 Then Return -3 + End If + Dim xh As Int = width / 256 + Dim xl As Int = width - xh * 256 + Dim params(2) As Byte + params(0) = xl + params(1) = xh + WriteString(ESC & "*" & d) + WriteBytes(params) + WriteBytes(data) + WriteString(CRLF) + Return 0 +End Sub + +' Printer support method for pre-processing images to print by PrintImage2 +' Takes an array of image pixels and packs one slice of it for use with PrintImage2 +' Each byte in the imagedata array is a single pixel valued zero or non-zero for white and black +' The returned array packs 8 vertical black or white pixels into each byte +' If dots24 is True then the slice is 24 pixels high otherwise it is 8 pixels high +Public Sub PackImageSlice(img As AnImage, slice As Int, dots24 As Boolean) As Byte() + Dim bytes As Int = img.width + If dots24 Then + Dim pixels(bytes * 3) As Byte + Dim slicestart As Int = slice * bytes * 8 * 3 + Else + Dim pixels(bytes) As Byte + Dim slicestart As Int = slice * bytes * 8 + End If + + Dim masks(8) As Byte + masks(0) = 0x80 + masks(1) = 0x40 + masks(2) = 0x20 + masks(3) = 0x10 + masks(4) = 0x08 + masks(5) = 0x04 + masks(6) = 0x02 + masks(7) = 0x01 + ' You could compress this into a single code block but I left it as two to make it more obvious what's happening + If dots24 Then + For x = 0 To bytes - 1 + For s = 0 To 2 + Dim xbyte As Byte = 0 + For b = 0 To 7 + ' get a pixel + Dim pix As Byte = img.Data(slicestart + ((b + s*8) * bytes) + x) + If pix <> 0 Then + xbyte = xbyte + masks(b) + End If + Next + pixels(x*3+s) = xbyte + Next + Next + Else + For x = 0 To bytes - 1 + Dim xbyte As Byte = 0 + For b = 0 To 7 + ' get a pixel + Dim pix As Byte = img.Data(slicestart + (b * bytes) + x) + If pix <> 0 Then + xbyte = xbyte + masks(b) + End If + Next + pixels(x) = xbyte + Next + End If + Return pixels +End Sub + +'---------------- +'Barcode commands +'---------------- + +' Set the height of a 2D bar code as number of dots vertically, 1 to 255 +' Automatically resets to the default after printing the barcode +Public Sub setBarCodeHeight(height As Int) + WriteString(GS & "h") + Dim params(1) As Byte + params(0) = height + WriteBytes(params) +End Sub + +' Set the left inset of a 2D barcode, 0 to 255 +' This does not reset on receipt of RESET +Public Sub setBarCodeLeft(left As Int) + WriteString(GS & "x") + Dim params(1) As Byte + params(0) = left + WriteBytes(params) +End Sub + +' Set the width of each bar in a 2D barcode. width value is 2 to 6, default is 3 +' 2 = 0.250, 3 - 0.375, 4 = 0.560, 5 = 0.625, 6 = 0.75 +' Resets to default after printing the barcode +Public Sub setBarCodeWidth(width As Int) + WriteString(GS & "w") + Dim params(1) As Byte + params(0) = width + WriteBytes(params) +End Sub + +'Selects the printing position of HRI (Human Readable Interpretation) characters when printing a 2D bar code. +'0 Not printed, 1 Above the bar code, 2 Below the bar code, 3 Both above And below the bar code +' Automatically resets to the default of 0 after printing the barcode +' The docs say this can be Chr(0, 1 2 or 3) or "0" "1" "2" or "3" but the numeric characters don't work +Public Sub setHriPosn(posn As Int) + WriteString(GS & "H") + Dim params(1) As Byte + params(0) = posn + WriteBytes(params) +End Sub + +'Selects the font for HRI (Human Readable Interpretation) characters when printing a 2D bar code. +'0 Font A (12 x 24), 1 Font B (9 x 17) +' Automatically resets to the default of 0 after printing the barcode +' The docs say this can be Chr(0 or 1) or "0" or "1" but the numeric characters don't work +Public Sub setHriFont(font As Int) + WriteString(GS & "f" & Chr(font)) +End Sub + +' If given invalid data no barcode is printed, only strange characters +' CODABAR needs any of A,B,C or D at the start and end of the barcode. Some decoders may not like them anywhere else +' Bartype Code Number of characters Permitted values +' A | UPC-A | 11 or 12 characters | 0 to 9 | The 12th printed character is always the check digit +' B | UPC-E | 6 characters | 0 to 9 | The 12th printed character is always the check digit +' C | EAN13 | 12 or 13 characters | 0 to 9 | The 12th printed character is always the check digit +' D | EAN8 | 7 or 8 characters | 0 to 9 | The 8th printed character is always the check digit +' E | CODE39 | 1 or more characters | 0 to 9, A to Z, Space $ % + - . / +' F | ITF | 1 or more characters | 0 to 9 | even number of characters only +' G | CODABAR| 3 to 255 characters | 0 to 9, A to D, $ + - . / : | needs any of A,B,C or D at the start and end +' H | CODE93 | 1 to 255 characters | Same as CODE39 +' I | CODE128| 2 to 255 characters | entire 7 bit ASCII set +Public Sub WriteBarCode(bartype As String, data As String) + Dim databytes() As Byte = data.GetBytes("ASCII") + Dim dlow As Int = databytes.Length + Log("Barcode " & bartype & ", Size " & dlow & ", " & data) + WriteString(GS & "k" & bartype.ToUpperCase.CharAt(0)) + Dim params(1) As Byte + params(0) = dlow + WriteBytes(params) + WriteBytes(databytes) +End Sub + +' On my printer QR codes don't seem to be able to be decoded and on high ECs look obviously wrong :( +' size is 1 to 40, 0 is auto-size. Successive versions increase module size by 4 each side +' size = 1 is 21x21, 2 = 25x25 ... size 40 = 177x177 +' EC is error correction level, "L"(7%) or "M"(15%) or "Q"(25%) or "H"(30%) +' scale is 1 to 8, 1 is smallest, 8 is largest +Public Sub WriteQRCode(size As Int, EC As String, scale As Int, data As String) + Dim databytes() As Byte = data.GetBytes("ISO-8859-1") + Dim dhigh As Int = databytes.Length / 256 + Dim dlow As Int = databytes.Length - dhigh*256 + Log("QR Code : Size " & size & ", EC " & EC & ", Scale " & scale & ", Size " & dlow & " " & dhigh & " : Data = " & data) + Dim params(3) As Byte + params(0) = scale + params(1) = dlow + params(2) = dhigh + WriteString(ESC & "Z" & Chr(size) & EC.ToUpperCase.CharAt(0)) + WriteBytes(params) + WriteBytes(databytes) +End Sub + + +'**************** +' PRIVATE METHODS +'**************** + +'----------------------- +' Internal Serial Events +'----------------------- + +Private Sub Serial1_Connected (Success As Boolean) + If Success Then + Astream.Initialize(Serial1.InputStream, Serial1.OutputStream, "astream") + Connected = True + ConnectedError = "" + Serial1.Listen + Else + Connected = False + ConnectedError = LastException.Message + End If + If SubExists(CallBack, EventName & "_Connected") Then + CallSub2(CallBack, EventName & "_Connected", Success) + End If +End Sub + +'---------------------------- +' Internal AsyncStream Events +'---------------------------- + +Private Sub AStream_NewData (Buffer() As Byte) + If SubExists(CallBack, EventName & "_NewData") Then + CallSub2(CallBack, EventName & "_NewData", Buffer) + End If + Log("Data " & Buffer(0)) +End Sub + +Private Sub AStream_Error + If SubExists(CallBack, EventName & "_Error") Then + CallSub(CallBack, EventName & "_Error") + End If +End Sub + +Private Sub AStream_Terminated + Connected = False + If SubExists(CallBack, EventName & "_Terminated") Then + CallSub(CallBack, EventName & "_Terminated") + End If +End Sub 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.jpg b/B4A/Files/alerta.jpg new file mode 100644 index 0000000..5edc6ba Binary files /dev/null and b/B4A/Files/alerta.jpg 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/amarillo.png b/B4A/Files/amarillo.png new file mode 100644 index 0000000..44e8c49 Binary files /dev/null and b/B4A/Files/amarillo.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/bus-ar.png b/B4A/Files/bus-ar.png new file mode 100644 index 0000000..60678c7 Binary files /dev/null and b/B4A/Files/bus-ar.png 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..1d50cd3 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..5c9a311 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..75e1c6a Binary files /dev/null and b/B4A/Files/clientes.bal differ diff --git a/B4A/Files/comis.bal b/B4A/Files/comis.bal new file mode 100644 index 0000000..d43c901 Binary files /dev/null and b/B4A/Files/comis.bal differ diff --git a/B4A/Files/contrasena.png b/B4A/Files/contrasena.png new file mode 100644 index 0000000..97b3da2 Binary files /dev/null and b/B4A/Files/contrasena.png differ diff --git a/B4A/Files/datoscliente.bal b/B4A/Files/datoscliente.bal new file mode 100644 index 0000000..d122f9f Binary files /dev/null and b/B4A/Files/datoscliente.bal differ diff --git a/B4A/Files/detalle_promo.bal b/B4A/Files/detalle_promo.bal new file mode 100644 index 0000000..c36e1c7 Binary files /dev/null and b/B4A/Files/detalle_promo.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/durakelo1.png b/B4A/Files/durakelo1.png new file mode 100644 index 0000000..00cb434 Binary files /dev/null and b/B4A/Files/durakelo1.png differ diff --git a/B4A/Files/encuessta_m3.bal b/B4A/Files/encuessta_m3.bal new file mode 100644 index 0000000..8f29097 Binary files /dev/null and b/B4A/Files/encuessta_m3.bal differ diff --git a/B4A/Files/encuesta.bal b/B4A/Files/encuesta.bal new file mode 100644 index 0000000..b51d061 Binary files /dev/null and b/B4A/Files/encuesta.bal differ diff --git a/B4A/Files/encuesta_m4.bal b/B4A/Files/encuesta_m4.bal new file mode 100644 index 0000000..05159d4 Binary files /dev/null and b/B4A/Files/encuesta_m4.bal differ diff --git a/B4A/Files/encuesta_m5.bal b/B4A/Files/encuesta_m5.bal new file mode 100644 index 0000000..e472203 Binary files /dev/null and b/B4A/Files/encuesta_m5.bal differ diff --git a/B4A/Files/encuesta_ped.bal b/B4A/Files/encuesta_ped.bal new file mode 100644 index 0000000..154f5df Binary files /dev/null and b/B4A/Files/encuesta_ped.bal 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.png b/B4A/Files/engrane.png new file mode 100644 index 0000000..525542a Binary files /dev/null and b/B4A/Files/engrane.png differ diff --git a/B4A/Files/engrane18.png b/B4A/Files/engrane18.png new file mode 100644 index 0000000..ca5a013 Binary files /dev/null and b/B4A/Files/engrane18.png differ diff --git a/B4A/Files/engraneactual.png b/B4A/Files/engraneactual.png new file mode 100644 index 0000000..525542a Binary files /dev/null and b/B4A/Files/engraneactual.png differ diff --git a/B4A/Files/errormanager.bal b/B4A/Files/errormanager.bal new file mode 100644 index 0000000..ff0d659 Binary files /dev/null and b/B4A/Files/errormanager.bal differ diff --git a/B4A/Files/esncuesta_m2.bal b/B4A/Files/esncuesta_m2.bal new file mode 100644 index 0000000..f222718 Binary files /dev/null and b/B4A/Files/esncuesta_m2.bal differ diff --git a/B4A/Files/fondo-rojo.jpg b/B4A/Files/fondo-rojo.jpg new file mode 100644 index 0000000..ab87b73 Binary files /dev/null and b/B4A/Files/fondo-rojo.jpg differ diff --git a/B4A/Files/fondo-rojo.png b/B4A/Files/fondo-rojo.png new file mode 100644 index 0000000..ab87b73 Binary files /dev/null and b/B4A/Files/fondo-rojo.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/foto.bal b/B4A/Files/foto.bal new file mode 100644 index 0000000..19097a0 Binary files /dev/null and b/B4A/Files/foto.bal differ diff --git a/B4A/Files/gps20.png b/B4A/Files/gps20.png new file mode 100644 index 0000000..23bea1a Binary files /dev/null and b/B4A/Files/gps20.png differ diff --git a/B4A/Files/guardagestion.bal b/B4A/Files/guardagestion.bal new file mode 100644 index 0000000..6272b4e Binary files /dev/null and b/B4A/Files/guardagestion.bal differ diff --git a/B4A/Files/guna-fondo.jpg b/B4A/Files/guna-fondo.jpg new file mode 100644 index 0000000..d7c1cd6 Binary files /dev/null and b/B4A/Files/guna-fondo.jpg differ diff --git a/B4A/Files/guna-fondo.png b/B4A/Files/guna-fondo.png new file mode 100644 index 0000000..7d04d49 Binary files /dev/null and b/B4A/Files/guna-fondo.png differ diff --git a/B4A/Files/guna.png b/B4A/Files/guna.png new file mode 100644 index 0000000..bb22f3b Binary files /dev/null and b/B4A/Files/guna.png differ diff --git a/B4A/Files/guna18.png b/B4A/Files/guna18.png new file mode 100644 index 0000000..a8cfb51 Binary files /dev/null and b/B4A/Files/guna18.png differ diff --git a/B4A/Files/guna_192x192.jpg b/B4A/Files/guna_192x192.jpg new file mode 100644 index 0000000..4c14d2f Binary files /dev/null and b/B4A/Files/guna_192x192.jpg differ diff --git a/B4A/Files/guna_viejo.png b/B4A/Files/guna_viejo.png new file mode 100644 index 0000000..d937027 Binary files /dev/null and b/B4A/Files/guna_viejo.png 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/hacerpedido30.png b/B4A/Files/hacerpedido30.png new file mode 100644 index 0000000..ebb13a0 Binary files /dev/null and b/B4A/Files/hacerpedido30.png differ diff --git a/B4A/Files/ic_cloud_download_white_24dp.png b/B4A/Files/ic_cloud_download_white_24dp.png new file mode 100644 index 0000000..4c5d2d0 Binary files /dev/null and b/B4A/Files/ic_cloud_download_white_24dp.png differ diff --git a/B4A/Files/images.png b/B4A/Files/images.png new file mode 100644 index 0000000..d21dd9d Binary files /dev/null and b/B4A/Files/images.png differ diff --git a/B4A/Files/infonavit1.jpg b/B4A/Files/infonavit1.jpg new file mode 100644 index 0000000..b8cce4c Binary files /dev/null and b/B4A/Files/infonavit1.jpg differ diff --git a/B4A/Files/iniciofinventa.bal b/B4A/Files/iniciofinventa.bal new file mode 100644 index 0000000..9da7449 Binary files /dev/null and b/B4A/Files/iniciofinventa.bal 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/keymon_logo.png b/B4A/Files/keymon_logo.png new file mode 100644 index 0000000..945e546 Binary files /dev/null and b/B4A/Files/keymon_logo.png differ diff --git a/B4A/Files/kmt.db b/B4A/Files/kmt.db new file mode 100644 index 0000000..4930646 Binary files /dev/null and b/B4A/Files/kmt.db differ diff --git a/B4A/Files/login.bal b/B4A/Files/login.bal new file mode 100644 index 0000000..fb7c9f2 Binary files /dev/null and b/B4A/Files/login.bal differ diff --git a/B4A/Files/logo guna-01.png b/B4A/Files/logo guna-01.png new file mode 100644 index 0000000..3438338 Binary files /dev/null and b/B4A/Files/logo guna-01.png differ diff --git a/B4A/Files/logo guna_192x192.png b/B4A/Files/logo guna_192x192.png new file mode 100644 index 0000000..4dcd00c Binary files /dev/null and b/B4A/Files/logo guna_192x192.png differ diff --git a/B4A/Files/logo sanfer.jpg b/B4A/Files/logo sanfer.jpg new file mode 100644 index 0000000..791fe4f Binary files /dev/null and b/B4A/Files/logo sanfer.jpg differ diff --git a/B4A/Files/logo-guna-18.png b/B4A/Files/logo-guna-18.png new file mode 100644 index 0000000..4f5b73b Binary files /dev/null and b/B4A/Files/logo-guna-18.png differ diff --git a/B4A/Files/logo-guna-contorno.png b/B4A/Files/logo-guna-contorno.png new file mode 100644 index 0000000..aaee986 Binary files /dev/null and b/B4A/Files/logo-guna-contorno.png differ diff --git a/B4A/Files/logo_exitus1.jpg b/B4A/Files/logo_exitus1.jpg new file mode 100644 index 0000000..b8cce4c Binary files /dev/null and b/B4A/Files/logo_exitus1.jpg 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.bal b/B4A/Files/mapa.bal new file mode 100644 index 0000000..7ed1bb4 Binary files /dev/null and b/B4A/Files/mapa.bal differ diff --git a/B4A/Files/mapa_rutas.bal b/B4A/Files/mapa_rutas.bal new file mode 100644 index 0000000..02582ad Binary files /dev/null and b/B4A/Files/mapa_rutas.bal differ diff --git a/B4A/Files/maparutas.bal b/B4A/Files/maparutas.bal new file mode 100644 index 0000000..f12b8b6 Binary files /dev/null and b/B4A/Files/maparutas.bal differ diff --git a/B4A/Files/mas-azul-red.png b/B4A/Files/mas-azul-red.png new file mode 100644 index 0000000..2c9674d Binary files /dev/null and b/B4A/Files/mas-azul-red.png differ diff --git a/B4A/Files/mas-azul-red1.png b/B4A/Files/mas-azul-red1.png new file mode 100644 index 0000000..c17f050 Binary files /dev/null and b/B4A/Files/mas-azul-red1.png differ diff --git a/B4A/Files/mas-azul.png b/B4A/Files/mas-azul.png new file mode 100644 index 0000000..c3741aa Binary files /dev/null and b/B4A/Files/mas-azul.png differ diff --git a/B4A/Files/menos-red.png b/B4A/Files/menos-red.png new file mode 100644 index 0000000..d52b1c9 Binary files /dev/null and b/B4A/Files/menos-red.png differ diff --git a/B4A/Files/menos.png b/B4A/Files/menos.png new file mode 100644 index 0000000..9961ef2 Binary files /dev/null and b/B4A/Files/menos.png differ diff --git a/B4A/Files/menosred.png b/B4A/Files/menosred.png new file mode 100644 index 0000000..f13f1fd Binary files /dev/null and b/B4A/Files/menosred.png differ diff --git a/B4A/Files/nota (conflict 2022-07-08-00-16-40).bal b/B4A/Files/nota (conflict 2022-07-08-00-16-40).bal new file mode 100644 index 0000000..bbd9a5a Binary files /dev/null and b/B4A/Files/nota (conflict 2022-07-08-00-16-40).bal differ diff --git a/B4A/Files/nota.bal b/B4A/Files/nota.bal new file mode 100644 index 0000000..415d67f 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..a13f8b9 Binary files /dev/null and b/B4A/Files/noventa.bal differ diff --git a/B4A/Files/nuevo-cliente20.png b/B4A/Files/nuevo-cliente20.png new file mode 100644 index 0000000..e36a2dc Binary files /dev/null and b/B4A/Files/nuevo-cliente20.png differ diff --git a/B4A/Files/nuevocliente.bal b/B4A/Files/nuevocliente.bal new file mode 100644 index 0000000..e351d0b 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/p&g.png b/B4A/Files/p&g.png new file mode 100644 index 0000000..5580a2c Binary files /dev/null and b/B4A/Files/p&g.png 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/planfia_logo_old.png b/B4A/Files/planfia_logo_old.png new file mode 100644 index 0000000..4adb130 Binary files /dev/null and b/B4A/Files/planfia_logo_old.png differ diff --git a/B4A/Files/planfia_logo_old2.png b/B4A/Files/planfia_logo_old2.png new file mode 100644 index 0000000..316f337 Binary files /dev/null and b/B4A/Files/planfia_logo_old2.png differ diff --git a/B4A/Files/principal.bal b/B4A/Files/principal.bal new file mode 100644 index 0000000..4b9c512 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..c25469d Binary files /dev/null and b/B4A/Files/proditem.bal differ diff --git a/B4A/Files/proditem1.bal b/B4A/Files/proditem1.bal new file mode 100644 index 0000000..3aef6c8 Binary files /dev/null and b/B4A/Files/proditem1.bal differ diff --git a/B4A/Files/proditem2.bal b/B4A/Files/proditem2.bal new file mode 100644 index 0000000..4e2393c Binary files /dev/null and b/B4A/Files/proditem2.bal differ diff --git a/B4A/Files/proditem_.bal b/B4A/Files/proditem_.bal new file mode 100644 index 0000000..8f43a06 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..02c4f1c Binary files /dev/null and b/B4A/Files/productos.bal differ diff --git a/B4A/Files/productos_.bal b/B4A/Files/productos_.bal new file mode 100644 index 0000000..249a1bc 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..9cb1493 Binary files /dev/null and b/B4A/Files/promociones.bal differ diff --git a/B4A/Files/promociones_.bal b/B4A/Files/promociones_.bal new file mode 100644 index 0000000..155af45 Binary files /dev/null and b/B4A/Files/promociones_.bal differ diff --git a/B4A/Files/qr.bal b/B4A/Files/qr.bal new file mode 100644 index 0000000..0faca59 Binary files /dev/null and b/B4A/Files/qr.bal differ diff --git a/B4A/Files/qr_gallina.jpg b/B4A/Files/qr_gallina.jpg new file mode 100644 index 0000000..95bce80 Binary files /dev/null and b/B4A/Files/qr_gallina.jpg differ diff --git a/B4A/Files/qrplanlealtad.png b/B4A/Files/qrplanlealtad.png new file mode 100644 index 0000000..84daf12 Binary files /dev/null and b/B4A/Files/qrplanlealtad.png differ diff --git a/B4A/Files/resdia.bal b/B4A/Files/resdia.bal new file mode 100644 index 0000000..dd84a58 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/resdia20.png b/B4A/Files/resdia20.png new file mode 100644 index 0000000..d6fd3ef Binary files /dev/null and b/B4A/Files/resdia20.png differ diff --git a/B4A/Files/rojo.png b/B4A/Files/rojo.png new file mode 100644 index 0000000..81d363d Binary files /dev/null and b/B4A/Files/rojo.png 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/seleccion.bal b/B4A/Files/seleccion.bal new file mode 100644 index 0000000..d1fb79b Binary files /dev/null and b/B4A/Files/seleccion.bal 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/telefonos.bal b/B4A/Files/telefonos.bal new file mode 100644 index 0000000..1fe0b8b Binary files /dev/null and b/B4A/Files/telefonos.bal 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/ticketdia20.png b/B4A/Files/ticketdia20.png new file mode 100644 index 0000000..03e33ce Binary files /dev/null and b/B4A/Files/ticketdia20.png differ diff --git a/B4A/Files/ticketsdia.bal b/B4A/Files/ticketsdia.bal new file mode 100644 index 0000000..08e71c8 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/usuario.png b/B4A/Files/usuario.png new file mode 100644 index 0000000..f4cea64 Binary files /dev/null and b/B4A/Files/usuario.png 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/FirebaseMessaging.bas b/B4A/FirebaseMessaging.bas new file mode 100644 index 0000000..c3fe1e1 --- /dev/null +++ b/B4A/FirebaseMessaging.bas @@ -0,0 +1,226 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Service +Version=10.2 +@EndOfDesignText@ +'/////////////////////////////////////////////////////////////////////////////////////// +'/// Agregar estas lineas al editor de manifiestos +' +' CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase) +' CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase) +' CreateResourceFromFile(Macro, FirebaseAnalytics.FirebaseAnalytics) +' CreateResourceFromFile(Macro, FirebaseNotifications.FirebaseNotifications) +' +'/// Agregar modulo de servicio nuevo FirebaseMessaging y copiar este modulo +' +'/// Bajar el archivo google-services.json de la consola de Firebase (https://console.firebase.google.com/) +'/// El nombre de la app en el archivo json tiene que ser el mismo que el nombre del paquete (Proyecto/Conf de Compilacion/Paquete) +' +'/// En Starter agregar esta linea +' +' Sub Service_Create +' CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") +' End Sub +' +'/// En Main en Sub Process_Globals agregar esta linea +' +' Private const API_KEY As String = "AAAAv__xxxxxxxxxxxxx-xxxxxxxxxxxxxx-xxxxxxxxxxxx" +' +'/// Esta llave se consigue igualmente en la consola de Firebase, configuracion de proyecto, Cloud Messaging, +'/// es la clave de servidor. +'/// +'/// Se necesitan agregar las librerías: FirebaseAnalitics, FirebaseNotifications, JSON y OkHttpUtils2 +'/// ... JSON es necesario si se van a enviar mensajes, si solo se van a recibir, no es necesario. +' +'/////////////////////////////////////////////////////////////////////////////////////// + +Sub Process_Globals + Private fm As FirebaseMessaging + Private const API_KEY As String = "AAAAv1qt3Lk:APA91bECIR-pHn6ul53eYyoVlpPuOo85RO-0zcAgEXwE7vqw8DFSbBtCaCINiqWQAkBBZXxHtQMdpU6B-jHIqgFKVL196UgwHv0Gw6_IgmipfV_NiItjzlH9d2QNpGLp9y_JUKVjUEhP" 'Api_Key cheveguerra@gmail.com/Pusher + Dim locRequest As String +' Dim phn As Phone + Dim pe As PhoneEvents + Dim c As Cursor + Public GZip As GZipStrings + Dim Sprvsr As String = "Sprv-Cedex" ' El topico al que se mandan los mensajes push + Dim Subscrito As String + Dim au As String 'ignore +End Sub + +Sub Service_Create + fm.Initialize("fm") 'Inicializamos FirebaseMessaging + pe.Initialize("pe") 'Para obtener la bateria +End Sub + +Public Sub SubscribeToTopics +' fm.SubscribeToTopic("Trckr") 'Topico general Keymon + fm.SubscribeToTopic("Trckr") 'Tracker Global +' Log("Suscrito al tracker global") + fm.SubscribeToTopic("Trckr-Cedex") 'Topico de Guna + If "Cdx_"&B4XPages.MainPage.usuario <> Subscrito Then + fm.SubscribeToTopic("Cdx_"&B4XPages.MainPage.usuario) 'Propio (you can subscribe to more topics) + fm.UnsubscribeFromTopic(Subscrito) 'Unsubscribe from topic + End If +' Log("Subscrito a "&"Cdx_"&B4XPages.MainPage.usuario) + Subscrito = "Cdx_"&B4XPages.MainPage.usuario +' Log(fm.token) +' fm.UnsubscribeFromTopic("Sprvsr") 'Unsubscribe from topic +End Sub + +Sub Service_Start (StartingIntent As Intent) + If StartingIntent.IsInitialized Then fm.HandleIntent(StartingIntent) + Sleep(0) + Service.StopAutomaticForeground 'remove if not using B4A v8+. + StartServiceAt(Me, DateTime.Now + 15 * DateTime.TicksPerMinute, True) 'Iniciamos servicio cada XX minutos +End Sub + +Sub fm_MessageArrived (Message As RemoteMessage) + Log("Message arrived") + Log($"Message data: ${Message.GetData}"$) +' getPhnId + If Message.GetData.ContainsKey("t") Then + Dim tipos As List = Regex.Split(",",Message.GetData.Get("t")) + If tipos.IndexOf("pu") <> -1 Or tipos.IndexOf("au") <> -1 Then 'Si es una peticion de ubicacion + Log("Es una peticion de ubicacion") + locRequest="Activa" + Log("Llamamos StartFLPSmall") + CallSubDelayed(Tracker, "StartFLPSmall") + CallSubDelayed(Tracker, "StartFLP") + End If + If tipos.IndexOf("au") <> -1 Then 'Si es una actualizacion de ubicacion + au = 1 + End If + If tipos.IndexOf("ping") <> -1 Then 'Si es un ping + Log("Es un ping") + Log("Mandamos pong") + Dim params As Map = CreateMap("topic":Sprvsr,"title":"pong", "body":B4XPages.MainPage.usuario&" - Recibi mensaje "&Message.GetData.Get("title"), "t":"pong") + SendMessage(params) + End If + If tipos.IndexOf("bgps") <> -1 Then 'Si es una instruccion de borrar archivo gps + Log("Es una instruccion de borrar archivo gps") + Log("Borramos archivo gps") + borramosArchivoGPS + End If + If tipos.IndexOf("dr") <> -1 Then 'Si es una peticion de ruta gps + Log("Es una peticion de Ruta GPS") + Dim rutaGpsCmp As String = dameRuta + Dim params As Map = CreateMap("topic":Sprvsr,"title":"ruta", "body":B4XPages.MainPage.usuario&" - Recibi mensaje "&Message.GetData.Get("title"), "t":"ruta", "r":rutaGpsCmp) + SendMessage(params) + End If + If tipos.IndexOf("bgps2") <> -1 Then 'Si es una instruccion de borrar DB gps + Log("Es una instruccion de borrar BD gps") + Log("Borramos BD gps") + borraGPSHist + End If + If tipos.IndexOf("pu") = -1 And tipos.IndexOf("au") = -1 And tipos.IndexOf("ping") = -1 And tipos.IndexOf("dr") = -1 Then + Log("No es ping ni solicitud de ubicacion o ruta, entonces no hacemos nada") + End If + End If +' Dim n As Notification +' n.Initialize +' n.Icon = "icon" +' n.SetInfo("Guna", "Guna", Main) +' n.Notify(1) +End Sub + +Sub Service_Destroy + +End Sub + +Sub SendMessage(params As Map) + Dim topic As String= params.Get("topic") + Dim title As String= params.Get("title") + Dim body As String= params.Get("body") + Dim tipo As String= params.Get("t") + If params.ContainsKey("r") Then + Log("Con ruta") + Dim rutaGpsCmp As String= params.Get("r") + Else + Log("Sin ruta") + Dim rutaGpsCmp As String = "" + End If + Dim Job As HttpJob + Job.Initialize("fcm", Me) + Dim m As Map = CreateMap("to": $"/topics/${topic}"$) + Dim data As Map = CreateMap("title":title, "body":body, "d":B4XPages.MainPage.usuario, "t":tipo, "b":B4XPages.MainPage.batt, "mt":B4XPages.MainPage.montoActual, "r":rutaGpsCmp, "v":B4XPages.MainPage.v) + m.Put("data", data) + Dim jg As JSONGenerator + jg.Initialize(m) + Job.PostString("https://fcm.googleapis.com/fcm/send", jg.ToString) + Job.GetRequest.SetContentType("application/json;charset=UTF-8") + Job.GetRequest.SetHeader("Authorization", "key=" & API_KEY) + Log(m) 'ignore +End Sub + +Sub mandamosLoc(coords As String) +' Log("Iniciamos mandamosLoc "&coords) +' Log("locRequest="&locRequest) + If locRequest="Activa" Then 'Si hay solicitud de ubicacion, entonces la mandamos ... + Dim params As Map = CreateMap("topic":Sprvsr,"title":"ubicacionRecibida", "body":coords, "t":"u") + SendMessage(params) + locRequest="Enviada" + CallSubDelayed(Tracker,"CreateLocationRequest") + End If +End Sub + +Sub guardaInfoEnArchivo(coords As String) 'ignore 'Escribimos coordenadas y fecha a un archivo de texto + Log("Guardamos ubicacion en BD") + Dim latlon() As String = Regex.Split(",", coords) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO RUTA_GPS(FECHA, LAT, LON) VALUES (?,?,?)", Array As Object (latlon(2),latlon(0),latlon(1))) +End Sub + +Sub borramosArchivoGPS + 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 + +Sub pe_BatteryChanged (Level As Int, Scale As Int, Plugged As Boolean, Intent As Intent) + B4XPages.MainPage.batt=Level +End Sub + +Sub compress(str As String) As String + ' Compression + Private su As StringUtils + Dim compressed() As Byte = GZip.compress(str) + Log($"CompressedBytesLength: ${compressed.Length}"$) + Dim base64 As String = su.EncodeBase64(compressed) + Log($"CompressedBytes converted to base64 Length: ${base64.Length}"$) + Log($"CompressedBytes converted to base64: ${base64}"$) + Return base64 +End Sub + +Sub decompress(base64 As String) As String 'ignore + ' Decompression + Private su As StringUtils + Dim decompressedbytes() As Byte = su.DecodeBase64(base64) + Log($"decompressedbytesLength: ${decompressedbytes.Length}"$) + Dim bc As ByteConverter + Dim uncompressed As String = bc.StringFromBytes(decompressedbytes,"UTF8") + Log($"uncompressedLength: ${uncompressed.Length}"$) ' 6163 Bytes + Log($"Decompressed String = ${uncompressed}"$) + Return uncompressed +End Sub + +Sub dameRuta As String + Log("dameRuta") + Dim c As Cursor + c = B4XPages.MainPage.skmt.ExecQuery("select LAT, LON from RUTA_GPS order by FECHA desc limit 390") + 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") + Next + End If + c.Close + Return compress(ruta2) +End Sub + +Sub borraGPSHist + c = B4XPages.MainPage.skmt.ExecQuery("delete FROM RUTA_GPS") +End Sub \ No newline at end of file diff --git a/B4A/Guna Vistas V3.1.b4a b/B4A/Guna Vistas V3.1.b4a new file mode 100644 index 0000000..1944fd0 --- /dev/null +++ b/B4A/Guna Vistas V3.1.b4a @@ -0,0 +1,353 @@ +Build1=Default,gunav2.keymon.com.mx +File1=alert2.png +File10=clientes.bal +File100=tache_rojo.png +File101=telefonos.bal +File102=Ticket dia.jpg +File103=ticketdia20.png +File104=ticketsdia.bal +File105=Tiendita.jpg +File106=usuario.png +File107=verde.png +File11=comis.bal +File12=contrasena.png +File13=datoscliente.bal +File14=detalle_promo.bal +File15=durakelo.png +File16=durakelo1.png +File17=ENCUESSTA_M3.bal +File18=ENCUESTA.bal +File19=ENCUESTA_M4.bal +File2=alerta.jpg +File20=ENCUESTA_M5.bal +File21=ENCUESTA_PED.bal +File22=engrane.jpg +File23=engrane.png +File24=engrane18.png +File25=engraneactual.png +File26=errormanager.bal +File27=ESNCUESTA_M2.bal +File28=fondo_kmt.jpg +File29=fondo-rojo.jpg +File3=alerta_amarilla.png +File30=fondo-rojo.png +File31=foto.bal +File32=gps20.png +File33=guardagestion.bal +File34=guna.png +File35=guna_192x192.jpg +File36=guna_viejo.png +File37=guna18.png +File38=guna-fondo.jpg +File39=guna-fondo.png +File4=amarillo.png +File40=Hacer pedido.jpg +File41=hacerpedido30.png +File42=ic_cloud_download_white_24dp.png +File43=images.png +File44=infonavit1.jpg +File45=inicioFinVenta.bal +File46=intmex_logo_192x192.jpg +File47=itembuttonblue.png +File48=keymon_logo.png +File49=kmt.db +File5=anterior.jpg +File50=login.bal +File51=Logo Guna_192x192.png +File52=Logo Guna-01.png +File53=logo sanfer.jpg +File54=Logo_192x192.jpg +File55=logo_exitus1.jpg +File56=logo-guna-18.png +File57=logo-guna-contorno.png +File58=MainPage.bal +File59=Malo.jpg +File6=bus-ar.png +File60=mapa.bal +File61=mapa_rutas.bal +File62=maparutas.bal +File63=mas-azul.png +File64=mas-azul-red.png +File65=mas-azul-red1.png +File66=menos.png +File67=menosred.png +File68=menos-red.png +File69=nota (conflict 2022-07-08-00-16-40).bal +File7=carrito.png +File70=nota.bal +File71=noventa.bal +File72=nuevocliente.bal +File73=nuevo-cliente20.png +File74=Nvo Cliente.jpg +File75=p&g.png +File76=palomita_verde.png +File77=pedido.bal +File78=planfia_logo.png +File79=planfia_logo_old.png +File8=celltitle.bal +File80=planfia_logo_old2.png +File81=principal.bal +File82=proditem.bal +File83=proditem1.bal +File84=proditem2.bal +File85=productos.bal +File86=productos_.bal +File87=promociones.bal +File88=qr.bal +File89=qr_gallina.jpg +File9=cliente.bal +File90=QRPlanLealtad.png +File91=resdia.bal +File92=ResDia.jpg +File93=resdia20.png +File94=rojo.png +File95=salma.jpg +File96=salma.png +File97=seleccion.bal +File98=senial.jpg +File99=sync.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 +FileGroup11=Default Group +FileGroup12=Default Group +FileGroup13=Default Group +FileGroup14=Default Group +FileGroup15=Default Group +FileGroup16=Default Group +FileGroup17=Default Group +FileGroup18=Default Group +FileGroup19=Default Group +FileGroup2=Default Group +FileGroup20=Default Group +FileGroup21=Default Group +FileGroup22=Default Group +FileGroup23=Default Group +FileGroup24=Default Group +FileGroup25=Default Group +FileGroup26=Default Group +FileGroup27=Default Group +FileGroup28=Default Group +FileGroup29=Default Group +FileGroup3=Default Group +FileGroup30=Default Group +FileGroup31=Default Group +FileGroup32=Default Group +FileGroup33=Default Group +FileGroup34=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=contentresolver +Library11=core +Library12=fileprovider +Library13=firebaseanalytics +Library14=firebasenotifications +Library15=fusedlocationprovider +Library16=googlemaps +Library17=googlemapsextras +Library18=gps +Library19=ime +Library2=b4xpages +Library20=javaobject +Library21=jhsicezxing1 +Library22=json +Library23=okhttputils2 +Library24=phone +Library25=preoptimizedclv +Library26=randomaccessfile +Library27=rspopupmenu +Library28=runtimepermissions +Library29=serial +Library3=baqrcode +Library30=sql +Library31=togglelibrary +Library32=xcustomlistview +Library33=xui +Library34=xui views +Library4=batteryprogressview +Library5=bitmapcreator +Library6=byteconverter +Library7=camera +Library8=clipboard +Library9=compressstrings +ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~AddApplicationText(~\n~)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~ ~\n~ ''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~AddApplicationText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~)~\n~~\n~''CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~ AddManifestText(~\n~~\n~)~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~) 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~~\n~'///////////////////////// FLP Y PUSH /////////////~\n~ CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase)~\n~ CreateResourceFromFile(Macro, FirebaseAnalytics.FirebaseAnalytics)~\n~ CreateResourceFromFile(Macro, FirebaseNotifications.FirebaseNotifications)~\n~ SetServiceAttribute(Tracker, android:foregroundServiceType, "location")~\n~'//////////////////////////////////////////////////////~\n~~\n~'/////////////////////// App Updating ////////////////~\n~ AddManifestText(~\n~ )~\n~ AddApplicationText(~\n~ ~\n~ ~\n~ ~\n~ )~\n~ CreateResource(xml, provider_paths,~\n~ ~\n~ ~\n~ ~\n~ ~\n~ ~\n~ )~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~~\n~AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)~\n~AddPermission(android.permission.INTERNET)~\n~AddPermission(android.permission.INSTALL_PACKAGES)~\n~AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~CreateResourceFromFile(Macro, JhsIceZxing1.CaturePortrait)~\n~ ~\n~SetApplicationAttribute(android:largeHeap, "true")~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~AddPermission(android.permission.BLUETOOTH_ADVERTISE)~\n~AddPermission(android.permission.BLUETOOTH_CONNECT)~\n~AddPermission(android.permission.BLUETOOTH_SCAN)~\n~AddManifestText(~\n~ ~\n~ )~\n~AddManifestText()~\n~~\n~AddManifestText(~\n~ ~\n~ )~\n~ AddPermission(android.permission.MANAGE_EXTERNAL_STORAGE)~\n~ SetApplicationAttribute(android:allowBackup, "false")~\n~ ~\n~ ~\n~ AddManifestText(~\n~ )~\n~ AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~~\n~ 'Para que se registre para abrir bases de datos~\n~' AddActivityText(main,~\n~'~\n~'~\n~'~\n~'~\n~')~\n~~\n~ 'Para que se registre para abrir bases de datos~\n~ AddActivityText(main,~\n~~\n~~\n~~\n~~\n~~\n~)~\n~AddPermission(android.permission.CALL_PHONE)~\n~AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~AddPermission("android.permission.MANAGE_EXTERNAL_STORAGE")~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~ +Module1=appUpdater +Module10=C_Nota +Module11=C_NoVenta +Module12=C_NuevoCliente +Module13=C_Pedidos +Module14=C_Principal +Module15=C_Productos +Module16=C_Promos +Module17=C_TicketsDia +Module18=C_UpdateAvailable +Module19=CameraExClass +Module2=B4XMainPage +Module20=cPDF +Module21=DBRequestManager +Module22=EscPosPrinter +Module23=FirebaseMessaging +Module24=MAPA_RUTAS +Module25=Starter +Module26=Subs +Module27=Tracker +Module3=BatteryUtilities +Module4=C_Bitacora +Module5=C_Cliente +Module6=C_Clientes +Module7=C_Cuestionario +Module8=C_Historico +Module9=C_Mapas +NumberOfFiles=107 +NumberOfLibraries=34 +NumberOfModules=27 +Version=12.8 +@EndOfDesignText@ +#Region Project Attributes + #ApplicationLabel: Guna Preventa + #VersionCode: 1 + #VersionName: 5.05.07 + '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: False +#End Region + +Sub Process_Globals + Public ActionBarHomeClicked As Boolean +End Sub + +Sub Globals + +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/Guna Vistas V3.1.b4a.meta b/B4A/Guna Vistas V3.1.b4a.meta new file mode 100644 index 0000000..a7ecc7f --- /dev/null +++ b/B4A/Guna Vistas V3.1.b4a.meta @@ -0,0 +1,87 @@ +ModuleBookmarks0= +ModuleBookmarks1= +ModuleBookmarks10= +ModuleBookmarks11= +ModuleBookmarks12= +ModuleBookmarks13= +ModuleBookmarks14= +ModuleBookmarks15= +ModuleBookmarks16= +ModuleBookmarks17= +ModuleBookmarks18= +ModuleBookmarks19= +ModuleBookmarks2= +ModuleBookmarks20= +ModuleBookmarks21= +ModuleBookmarks22= +ModuleBookmarks23= +ModuleBookmarks24= +ModuleBookmarks25= +ModuleBookmarks26= +ModuleBookmarks27= +ModuleBookmarks3= +ModuleBookmarks4= +ModuleBookmarks5= +ModuleBookmarks6= +ModuleBookmarks7= +ModuleBookmarks8= +ModuleBookmarks9= +ModuleBreakpoints0= +ModuleBreakpoints1= +ModuleBreakpoints10= +ModuleBreakpoints11= +ModuleBreakpoints12= +ModuleBreakpoints13= +ModuleBreakpoints14= +ModuleBreakpoints15= +ModuleBreakpoints16= +ModuleBreakpoints17= +ModuleBreakpoints18= +ModuleBreakpoints19= +ModuleBreakpoints2= +ModuleBreakpoints20= +ModuleBreakpoints21= +ModuleBreakpoints22= +ModuleBreakpoints23= +ModuleBreakpoints24= +ModuleBreakpoints25= +ModuleBreakpoints26= +ModuleBreakpoints27= +ModuleBreakpoints3= +ModuleBreakpoints4= +ModuleBreakpoints5= +ModuleBreakpoints6= +ModuleBreakpoints7= +ModuleBreakpoints8= +ModuleBreakpoints9= +ModuleClosedNodes0= +ModuleClosedNodes1=11,13,14 +ModuleClosedNodes10= +ModuleClosedNodes11= +ModuleClosedNodes12= +ModuleClosedNodes13= +ModuleClosedNodes14= +ModuleClosedNodes15= +ModuleClosedNodes16= +ModuleClosedNodes17= +ModuleClosedNodes18=4 +ModuleClosedNodes19= +ModuleClosedNodes2= +ModuleClosedNodes20= +ModuleClosedNodes21= +ModuleClosedNodes22= +ModuleClosedNodes23= +ModuleClosedNodes24= +ModuleClosedNodes25=4,6,7,8,9 +ModuleClosedNodes26= +ModuleClosedNodes27= +ModuleClosedNodes3= +ModuleClosedNodes4= +ModuleClosedNodes5= +ModuleClosedNodes6= +ModuleClosedNodes7=6,8,9,10,11 +ModuleClosedNodes8= +ModuleClosedNodes9= +NavigationStack=C_Cliente,Guardar_Click,2438,6,C_Principal,Subir_Click,601,0,C_Cliente,B4XPage_Appear,1106,0,C_Promos,muestraPromo,495,0,C_Promos,b_promoMas_Click,935,0,C_Productos,lv_catalogos_ItemClick,1188,0,Starter,ENVIA_ULTIMA_GPS,110,0,C_Principal,resdia_Click,2774,0,C_Principal,B4XPage_Appear,457,1,C_Principal,B4XPage_Created,331,0 +SelectedBuild=0 +VisibleModules=25,2,14,26,5,10,11,20,19,16 diff --git a/B4A/MAPA_RUTAS.bas b/B4A/MAPA_RUTAS.bas new file mode 100644 index 0000000..ff7939d --- /dev/null +++ b/B4A/MAPA_RUTAS.bas @@ -0,0 +1,320 @@ +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_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 +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 + If(FirstTime) Then + GPS.Initialize("GPS") + End If + + 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 +' Activity.AddView(boton1, 40%x, 5dip, 25%x, 40dip) + 'Fin Boton velocidad' + 'MARK_CEDIS.IsInitialized + 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=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 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 - POR VISITAR + 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 from kmt_info3 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 +' Log("4") + + 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=skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info3 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=skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info3 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=skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info3 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") + CODIGO=c3.GetString("CAT_CL_CODIGO") + Tienda= c3.GetString("CAT_CL_NOMBRE") + MARK_ROJO = gmap.AddMarker2(LatitudRu, LongitudRU, CODIGO, gmap.HUE_RED) + MARK_ROJO.Snippet = Tienda + Next + Else + 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 from kmt_info3 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") + CODIGO=c3.GetString("CAT_CL_CODIGO") + Tienda= c3.GetString("CAT_CL_NOMBRE") + MARK_ROJO = gmap.AddMarker2(LatitudRu, LongitudRU, CODIGO, gmap.HUE_RED) + MARK_ROJO.Snippet = Tienda + Next + If MARK_ROJO.IsInitialized Then LIST_ROJO.Add(MARK_ROJO) + c3.Close + End If + 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.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_Resume + + 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 Activity_Pause (UserClosed As Boolean) + GPS.Stop +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 diff --git a/B4A/Starter.bas b/B4A/Starter.bas new file mode 100644 index 0000000..4487614 --- /dev/null +++ b/B4A/Starter.bas @@ -0,0 +1,160 @@ +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 + Dim skmt As SQL + 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://10.0.0.205:1782" + Dim Timer1 As Timer + Dim Interval As Int = 300 + Dim ruta As String = File.DirInternal + 'Para los Logs + Private logs As StringBuilder + Private logcat As LogCat + Dim logger As Boolean = False + Dim marcaCel As String = ph.manufacturer + Private BTAdmin As BluetoothAdmin + Dim MAC_IMPRESORA As String + Public BluetoothState As Boolean + Dim ubicacionActual As Location + Dim enVenta As Boolean = False + Dim muestraProgreso = 0 'Parte de la funcionalidad "appUpdater" + Public newApp As mNewVersion 'Parte de la funcionalidad "appUpdater" + Dim nuevoLink As String + Dim idCliente As String = "" + Dim encuesta As String = 0 + Public fFileProvider As FileProvider + Dim tabla As String +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 + BTAdmin.Initialize("admin") + 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 + fFileProvider.Initialize + CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") 'Para Push FirebaseMessaging + ubicacionActual.Initialize + If File.Exists(File.DirInternal, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", File.DirInternal, "kmt.db") + End If + skmt.Initialize(File.DirInternal,"kmt.db", True) +End Sub + +Private Sub BTAdmin_StateChanged (NewState As Int, OldState As Int) + If logger Then Log("BT state changed: " & NewState) + BluetoothState = NewState = BTAdmin.STATE_ON +' StateChanged +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) + Private s As Cursor = skmt.ExecQuery("select * from cat_variables where cat_va_descripcion = 'DBReqServer'") + If s.RowCount > 0 Then 'Si tenemso valor en BD lo tomamos. + s.Position = 0 + server = s.GetString("CAT_VA_VALOR") + Else 'Si no hay valor de BD usamos el defaut. + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("DBReqServer")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("DBReqServer", server)) + End If + reqManager.Initialize(Me, server) +End Sub + +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 + LogColor("Iniciamos ENVIA_ULTIMA_GPS", Colors.Magenta) + Dim skmt As SQL + Dim cmd As DBCommand + skmt.Initialize(ruta,"kmt.db", True) +' cmd.Initialize +' cmd.Name = "select_fechat" +' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "fechat") + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "UPDATE_GUNA_ACTUAL2_GPS2" + cmd.Parameters = Array As Object(B4XPages.MainPage.montoActual, B4XPages.MainPage.clientestotal, B4XPages.MainPage.clientesventa,B4XPages.MainPage.clientesvisitados,B4XPages.MainPage.lat_gps,B4XPages.MainPage.lon_gps,B4XPages.MainPage.batt,0, 0, 0,encuesta,B4XPages.MainPage.ALMACEN,B4XPages.MainPage.rutapreventa) +' Log($"montoActual: ${B4XPages.MainPage.montoActual}, cTotal: ${B4XPages.MainPage.clientestotal}, cVenta: ${B4XPages.MainPage.clientesventa}, cVisitados: ${B4XPages.MainPage.clientesvisitados}, ${B4XPages.MainPage.lat_gps}, ${B4XPages.MainPage.lon_gps}, Batt: ${B4XPages.MainPage.batt}, 0, 0, 0, Almacen: ${B4XPages.MainPage.ALMACEN}, Ruta: ${B4XPages.MainPage.rutapreventa}"$) + reqManager.ExecuteCommand(cmd, "actualizaUltimaGPS") + skmt.ExecNonQuery2("Update cat_variables set CAT_VA_VALOR = ? WHERE CAT_VA_DESCRIPCION = ?" , Array As String(DateTime.Time(DateTime.Now),"HoraIngreso")) + '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("JOBDONE STARTER") +' Log(Job.Tag) + If Job.Success = False Then ' Si hay unerror en el request... +' Log("JOBDONE ERROR") + LogColor("Error: " & Job.ErrorMessage, Colors.red) + Else 'If Job Success then ... + 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 SUCCESS") + End If +End Sub \ No newline at end of file diff --git a/B4A/Subs.bas b/B4A/Subs.bas new file mode 100644 index 0000000..50fdb8c --- /dev/null +++ b/B4A/Subs.bas @@ -0,0 +1,2192 @@ +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 + Dim skmt As SQL + Dim in As Intent + Dim intentUsado As Boolean = False +End Sub + +'Pone el valor de phn.Model en la variable global "devModel" +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 + +Sub SetDivider(lv As ListView, Color As Int, Height As Int) 'ignore + Dim r As Reflector + r.Target = lv + Dim CD As ColorDrawable + CD.Initialize(Color, 0) + r.RunMethod4("setDivider", Array As Object(CD), Array As String("android.graphics.drawable.Drawable")) + r.RunMethod2("setDividerHeight", Height, "java.lang.int") +End Sub + +'Centra un listview dentro de un elemento superior +Sub centraListView(elemento As ListView, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +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 + If Not(File.Exists(Starter.ruta, "kmt.db")) Then File.Copy(File.DirAssets, "kmt.db", Starter.ruta, "kmt.db") + 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 + '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 + +Sub fechanormal(fecha As String) As String 'ignore +' Log(fecha) + Dim OrigFormat As String = DateTime.DateFormat 'save orig date format + DateTime.DateFormat = "YYYY/MM/dd HH:mm:ss" + Dim nuevaFecha As String=DateTime.Date(fecha) + DateTime.DateFormat = OrigFormat 'return to orig date format +' Log(nuevaFecha) + Return nuevaFecha +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 + If Starter.logger Then LogColor("Recortamos la tabla de la Bitacora, limite de 600", Colors.Magenta) + Private c As Cursor + c = B4XPages.MainPage.skmt.ExecQuery("select fecha from bitacora") + c.Position = 0 + If c.RowCount > 650 Then + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM bitacora WHERE fecha NOT in (SELECT fecha FROM bitacora ORDER BY fecha desc LIMIT 599 )") + B4XPages.MainPage.skmt.ExecNonQuery("vacuum;") +' if starter.logger then Log("Borramos mas de 600 de bitacora") + End If + c.Close +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 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 + +Sub centraEditText(elemento As EditText, 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_info3 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 = "NA" + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + If c.RowCount > 0 Then + c.Position = 0 + a = C.GetString("ID_ALMACEN") + End If + 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 ${traeTablaProds(traeTipoVentaDeBD)} 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 + +''Regresa la ruta actual de la base de datos, de acuerdo al cliente actual en CUENTAA. +'Si hay cliente definido (en CUENTAA), trae la ruta de ese cliente, si no, trae la primera ruta de kmt_info3. (esto es por las suplencias) +Sub traeRuta As String 'ignore + Private c As Cursor + Private r As String = "0" + Private idCliente As String = "" + Try + Private elCc As Cursor = Starter.skmt.ExecQuery($"select CUENTA from CUENTAA"$) + If elCc.RowCount > 0 Then + elCc.Position = 0 + idCliente = elCc.GetString("CUENTA") + Log("|"&elCc.GetString("CUENTA")&"|") + End If +' Log($"#########################${CRLF}HAY USUARIO EN CUENTAA: ${elCc.RowCount}${CRLF}#########################"$) + If idCliente <> "" Then +' Log(1) + c = B4XPages.MainPage.skmt.ExecQuery($"select distinct CAT_CL_RUTA from kmt_info3 where CAT_CL_CODIGO = '${idCliente}'"$) + Else +' Log(2) + c = B4XPages.MainPage.skmt.ExecQuery("select distinct CAT_CL_RUTA from kmt_info3 where CAT_CL_RUTA not in (select * from ruta_suplencia)") + End If +' Log($"#########################${CRLF}ENCONTRAMOS RUTA EN kmt_info3: ${c.RowCount}${CRLF}#########################"$) + If c.RowCount > 0 Then +' Log(3) + c.Position=0 + r = c.GetString("CAT_CL_RUTA") + End If + c.Close + Catch + Log(LastException) + End Try +' Log($"#########################${CRLF}RUTA ENCONTRADA: |${r}|${CRLF}#########################"$) + Return r +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_info3 where CAT_CL_CODIGO in (Select CUENTA from cuentaa)") + If g.RowCount > 0 Then + g.Position=0 + If g.GetString("gestion") = "2" Or g.GetString("gestion") = "3" Then guardado = True + End If +' Log($"Guardado=${guardado}"$) + Return guardado +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 ${Starter.tabla} 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 + Private thisC As Cursor +' Private tablaProds As String = "cat_gunaprod2" + thisC=Starter.skmt.ExecQuery("select PE_PROID, PE_CANT, PE_FOLIO 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 +' Log(thisC.GetString("PE_TIPO") & "|" & traeTablaProds(thisC.GetString("PE_TIPO"))) + Starter.skmt.ExecNonQuery($"update ${traeTablaProds(thisC.GetString("PE_FOLIO"))} set cat_gp_almacen = cat_gp_almacen + ${thisC.GetString("PE_CANT")} where cat_gp_id = '${thisC.GetString("PE_PROID")}'"$) + LogColor($"update ${traeTablaProds(thisC.GetString("PE_FOLIO"))} set cat_gp_almacen = cat_gp_almacen + ${thisC.GetString("PE_CANT")} where cat_gp_id = '${thisC.GetString("PE_PROID")}'"$, Colors.red) +' Starter.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 + Starter.skmt.ExecNonQuery("delete from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") + Starter.skmt.ExecNonQuery("delete from pedido where pe_cliente in (Select CUENTA from cuentaa)") + Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Return 1 +End Sub + +'Regresa el total del pedido en la tabla "PEDIDO" del cliente actual. +Sub totalPedido As String + Private cT As Cursor = Starter.skmt.ExecQuery($"select sum(PE_COSTO_TOT) as total from PEDIDO where PE_CLIENTE = '${traeCliente}'"$) + Private pTotal As String = "0" + If cT.RowCount > 0 Then + cT.Position = 0 +' Log("|"&cT.GetLong("total")&"|"&pTotal) + Private tempT As String = cT.GetLong("total") + If tempT <> "null" And tempT <> Null Then +' Log("|"&cT.GetLong("total")&"|") + pTotal = tempT + End If +' Log($"Cliente actual=${traeCliente}, hayPedido=${hay}"$) + End If + cT.Close + Return pTotal +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 + +Sub traeRutaBitacora As String 'ignore + Private c As Cursor + Private r As String + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info3 WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") + r = "0" + If c.RowCount > 0 Then + c.Position=0 + r = c.GetString("CAT_CL_RUTA") + End If + c.Close + Return r +End Sub + +'Regresa la ruta actual de la base de datos. +Sub traeRutasSup As String + Dim c As Cursor + Dim rutas As String + rutas = "" + + c = B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_CL_RUTA FROM kmt_info3") + + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + rutas = rutas & c.GetString("CAT_CL_RUTA") & ", " + Next + If rutas.Length > 0 Then rutas = rutas.SubString2(0, rutas.Length - 2) + End If + + c.Close + Return rutas +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 + +'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 + +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&" - TV:"&tipoVenta, 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, traeRutaBitacora, precioSin, tipoVenta)) + B4XPages.MainPage.skmt.ExecNonQuery2($"update ${traeTablaProds(traeTipoVentaDeBD)} 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_info3 set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +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 +' LogColor($"TRAE PROMO = ${promo}"$, Colors.Red) +' 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 = B4XPages.MainPage.skmt.ExecQuery("Select * from CAT_DETALLES_PAQ where CAT_DP_ID = '"& promo & "' order by cat_dp_tipo asc") +' 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 ${traeTablaProds(traeTipoVentaDeBD)} 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 ${traeTablaProds(traeTipoVentaDeBD)} 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 = True '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 + If thisLog Then Log(maxPromos) + 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 = True '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. +' 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 ${traeTablaProds(traeTipoVentaDeBD)} 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 + + +'Regresa un mapa con los datos del producto desde la base de datos. +'el mapa incluye: Id, nombre, tipo y subtipo del producto. +Sub traePromoIdDeBD As Map 'ignore + Private c As Cursor + Private m As Map + + Log("ENTRE") + c=B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_TIPO, CAT_GP_SUBTIPO from ${traeTablaProds(traeTipoVentaDeBD)} where CAT_GP_NOMBRE In (Select PDESC from PROID) and CAT_GP_TIPO = 'PROMOS'"$) + 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 + +Sub agregaColumna(tabla As String, columna As String, tipo As String) 'ignore + 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 +' Log(1) + 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 + Log(2) + End Try +End Sub + +'Guarda el nombre y version de la app en CAT_VARIABLES. +Sub guardaAppInfo 'ignore + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'EMPRESA' or CAT_VA_DESCRIPCION = 'APP_NAME' or CAT_VA_DESCRIPCION = 'APP_VERSION'") + B4XPages.MainPage.skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('APP_NAME', '${Application.LabelName}')"$) + B4XPages.MainPage.skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('APP_VERSION', '${Application.VersionName}')"$) +End Sub + +Sub TraeMontoProd As Boolean + Private x As Boolean = False + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT ifnull( SUM (PE_COSTO_TOT),0) As suma FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA)") + If c.RowCount > 0 Then + c.Position = 0 + Private c2 As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT DISTINCT CAT_PE_MONTO FROM CAT_PROMO_ESP") + If c2.RowCount > 0 Then + c2.Position = 0 + + If c.GetString("suma") >= c2.GetString("CAT_PE_MONTO") Then + x = True +' Log("verdadero") + Else + x = False +' Log("Falso") + End If + + End If + End If + Return x +End Sub + +Sub TraeMontoProd2 As Boolean + 'This subrutine checks if the total cost of a product is between 350 and 499.99 + Private x As Boolean = False + 'Declares a boolean variable + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT ifnull( SUM (PE_COSTO_TOT),0) As suma FROM PEDIDO JOIN CAT_PROMO_ESP ON CAT_PE_ID = PE_PROID WHERE PE_CLIENTE IN (Select CUENTA FROM CUENTAA)") + 'Executes a query to get the sum of PE_COSTO_TOT from the PEDIDO table, joined with CAT_PROMO_ESP table on CAT_PE_ID = PE_PROID where PE_CLIENTE is in the CUENTA column from CUENTAA table + If c.RowCount > 0 Then + 'Checks if the query returned any rows + c.Position = 0 + 'Sets the cursor position to the first row + Private c2 As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT DISTINCT CAT_PE_MONTO FROM CAT_PROMO_ESP") + 'Executes a query to get distinct values of CAT_PE_MONTO from CAT_PROMO_ESP table + If c2.RowCount > 0 Then + 'Checks if the query returned any rows + c2.Position = 0 + 'Sets the cursor position to the first row + If c.GetString("suma") >= 350 And c.GetString("suma") <= 499.99 Then + 'Checks if the sum is between 350 and 499.99 + x = True + 'Sets x to true if the condition is met + Else + x = False + 'Sets x to false if the condition is not met +' Log("Falso") + End If + End If + End If + Return x + 'Returns the value of x +End Sub + +Sub InvSuficientePromoEsp As Boolean + Private y As Boolean = False + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select CAT_DP_IDPROD, CAT_DP_PZAS, ifnull(CAT_GP_ALMACEN, 0) As CAT_GP_ALMACEN from CAT_DETALLES_PAQ left JOIN ${traeTablaProds(traeTipoVentaDeBD)} ON CAT_DP_IDPROD = CAT_GP_ID WHERE CAT_DP_ID IN (SELECT DISTINCT CAT_PE_IDPROMO FROM CAT_PROMO_ESP)"$) + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + If c.GetString("CAT_GP_ALMACEN") >= c.GetString("CAT_DP_PZAS") Then + y = True +' Log("verdadero "& c.GetString("CAT_DP_IDPROD")) +' Log(c.GetString("CAT_GP_ALMACEN") &" "& c.GetString("CAT_DP_PZAS")) + Else + y = False +' Log("falso "& c.GetString("CAT_DP_IDPROD")) +' Log(c.GetString("CAT_GP_ALMACEN") &" "& c.GetString("CAT_DP_PZAS")) + Exit + End If + Next + End If + c.Close + Return y +End Sub + +Sub vendidoPromoEsp As Boolean + Private w As Boolean = False + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery("select HP_CLIENTE, HP_CODIGO_PROMOCION from HIST_PROMOS WHERE HP_CODIGO_PROMOCION IN (SELECT DISTINCT CAT_PE_IDPROMO FROM CAT_PROMO_ESP) AND HP_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + If c.RowCount > 0 Then + w = True + End If + Log(w) + c.Close + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery("select PE_PROID from PEDIDO WHERE PE_PROID IN (SELECT DISTINCT CAT_PE_IDPROMO FROM CAT_PROMO_ESP) AND PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + If c.RowCount > 0 Then + w = True + End If + c.Close + Log(w) + Return w +End Sub + +'En geocerca si mete la contraseña poner 0 en precision gps y si esta dentro de los 50 mts poner 1 y 2 para eventos que no lo ocupen +'Mandar fecha de sync(sysdate) +Sub bitacora(fechab As String, usuariob As String, almacenb As String, rutab As String, eventob As String, clienteb As String, iniciob As String, finb As String, latitudb As String, longitudb As String, precision As String, motivonoventa As String, motivonovisita As String, BAN_GEOB As String) +' Log(motivonovisita) +'' Log("bitacora") +' Private cmd As DBCommand +' cmd.Initialize +' cmd.Name = "mandaBitacora3_GUNA" +'' Log("BITACORA3") +' Private nombreCliente As String = traeNombreCliente(clienteb) +' If eventob = "Llega a almacen" Then +' nombreCliente = "BOLETA" +' clienteb = "" +' finb = iniciob +' End If +' If eventob = "Salida almacen" Then nombreCliente = "CHECKLIST" +' If eventob = "Fin Día" Then nombreCliente = "FIN DIA" +' If eventob = "Carga día" Then nombreCliente = "CARGA DIA" +' If eventob = "Carga día suplencia" Then nombreCliente = traeRutasSup +' If eventob <> "Termina Venta" And eventob <> "No Venta" Then +' B4XPages.MainPage.skmt.ExecNonQuery($"INSERT INTO BITACORAGPS (fechab, usuariob , almacenb , rutab , eventob , clienteb , iniciob , finb , latitudb, longitudb , precision , motivonoventa , motivonovisita, BAN_GEOB) VALUES ('${fechab}' ,'${usuariob}' , '${almacenb}' , '${rutab}' , '${eventob}' , '${clienteb}' , '${iniciob}' , '${finb}' , '${latitudb}' , '${longitudb}' , '${precision}' , '${motivonoventa}' , '${motivonovisita}', '${BAN_GEOB}')"$) +' Else +' Private e As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select fechab from BITACORAGPS where usuariob = '${usuariob}' and almacenb = '${almacenb}' and rutab = '${rutab}' and clienteb = '${clienteb}' and eventob = 'Inicia Venta' order by fechab desc"$) +' If e.RowCount > 0 Then +' e.Position = 0 +' Log("ACTUALIZA BITACORA") +' If eventob = "Termina Venta" Then +' B4XPages.MainPage.skmt.ExecNonQuery($"update BITACORAGPS set finb = '${finb}' where rutab = '${rutab}' and almacenb = '${almacenb}' and usuariob = '${usuariob}' and clienteb = '${clienteb}' and fechab = '${e.GetString("fechab")}' "$) +' cmd.Parameters = Array As Object(finb, rutab, almacenb, usuariob, clienteb, "Inicia Venta", e.GetString("fechab")) +' else if eventob = "No Venta" Then +' B4XPages.MainPage.skmt.ExecNonQuery($"update BITACORAGPS set finb = '${finb}', motivonoventa = '${motivonoventa}', motivonovisita = '${motivonovisita}' where rutab = '${rutab}' and almacenb = '${almacenb}' and usuariob = '${usuariob}' and clienteb = '${clienteb}' and fechab = '${e.GetString("fechab")}' "$) +' cmd.Parameters = Array As Object(finb, motivonoventa, motivonovisita, rutab, almacenb, usuariob, clienteb, "Inicia Venta", e.GetString("fechab")) +' End If +' End If +' End If +' If eventob <> "Inicia Venta" Then +' Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select * from BITACORAGPS where usuariob = '${usuariob}' and almacenb = '${almacenb}' and rutab = '${rutab}' and clienteb = '${clienteb}' order by fechab desc"$) +' If c.RowCount > 0 Then +' c.Position = 0 +' cmd.Parameters = Array As Object(c.GetString("almacenb"), c.GetString("usuariob"), c.GetString("rutab"), c.GetString("eventob"), c.GetString("clienteb"), nombreCliente, c.GetString("iniciob"), c.GetString("finb"), c.GetString("latitudb"), c.GetString("longitudb"), c.GetString("precision"), c.GetString("motivonoventa"), c.GetString("motivonovisita"), c.GetString("fechab"), c.GetString("BAN_GEOB")) +' Starter.reqManager.ExecuteCommand(cmd , "mandaBitacora") +' End If +' End If +' Log("Mandamos bitacora") +End Sub + +'En geocerca si mete la contraseña poner 0 en precision gps y si esta dentro de los 50 mts poner 1 y 2 para eventos que no lo ocupen +''Mandar fecha de sync(sysdate) +'Sub bitacoraX(fechab As String, usuariob As String, almacenb As String, rutab As String, eventob As String, clienteb As String, iniciob As String, finb As String, latitudb As String, longitudb As String, precision As String, motivonoventa As String, motivonovisita As String ) +' Log("bitacora") +' B4XPages.MainPage.skmt.ExecNonQuery($"INSERT INTO BITACORAGPS (fechab, usuariob , almacenb , rutab , eventob , clienteb , iniciob , finb , latitudb, longitudb , precision , motivonoventa , motivonovisita) VALUES ('${fechab}' ,'${usuariob}' , '${almacenb}' , '${rutab}' , '${eventob}' , '${clienteb}' , '${iniciob}' , '${finb}' , '${latitudb}' , '${longitudb}' , '${precision}' , '${motivonoventa}' , '${motivonovisita}')"$) +' Private cmd As DBCommand +' cmd.Initialize +' If eventob <> "Termina Venta" And eventob <> "No Venta" Then +' cmd.Name = "mandaBitacora3_GUNA" +' Log("BITACORA3") +' Private nombreCliente As String = traeNombreCliente(clienteb) +' If eventob = "Llega a almacen" Then +' nombreCliente = "BOLETA" +' clienteb = "" +' finb = iniciob +' End If +' If eventob = "Salida almacen" Then nombreCliente = "CHECKLIST" +' If eventob = "Fin Día" Then nombreCliente = "FIN DIA" +' If eventob = "Carga día" Then nombreCliente = "CARGA DIA" +' Log($"'${almacenb}', '${usuariob}', '${rutab}', '${eventob}', '${clienteb}', '${nombreCliente}','${ iniciob}', '${finb}','${ latitudb}','${ longitudb}', '${precision}', '${motivonoventa}', '${motivonovisita}', '${fechab}'"$) +'' TMP_ALMACEN, TMP_USUARIO, TMP_RUTA, TMP_EVENTO, TMP_ID_CLIENTE, TMP_NOMBRE_CLIENTE, TMP_INICIO, TMP_FINAL, TMP_LATITUD, TMP_LONGITUD, TMP_PRESICION, TMP_MOTIVO_NO_VENTA, TMP_MOTIVO_NO_VISITA, TMP_FECHA_SINC, TMP_FECHA_MOVIL +' cmd.Parameters = Array As Object(almacenb, usuariob, rutab, eventob, clienteb, nombreCliente, iniciob, finb, latitudb, longitudb, precision, motivonoventa, motivonovisita, fechab) +' Starter.reqManager.ExecuteCommand(cmd , "mandaBitacora") +' Else +' Private e As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select fechab from BITACORAGPS where usuariob = '${usuariob}' and almacenb = '${almacenb}' and rutab = '${rutab}' and clienteb = '${clienteb}' and eventob = 'Inicia Venta' order by fechab desc"$) +' If e.RowCount > 0 Then +' e.Position = 0 +' Log("ACTUALIZA BITACORA") +' If eventob = "Termina Venta" Then +' cmd.Name = "actualizaSalidaBitacora" +'' TMP_FINAL = to_date((?),'YYYY/MM/DD HH24:MI:ss') where TMP_RUTA = (?) and tmp_almacen = (?) and tmp_usuario = (?) and tmp_id_cliente = (?) and tmp_evento = (?) and tmp_fecha_movil = to_date((?),'YYYY/MM/DD HH24:MI:ss'); +' cmd.Parameters = Array As Object(finb, rutab, almacenb, usuariob, clienteb, "Inicia Venta", e.GetString("fechab")) +' Log($"${finb}, ${rutab}, ${almacenb}, ${usuariob}, ${clienteb}, 'Inicia Venta', ${e.GetString("fechab")}, "$) +' Starter.reqManager.ExecuteCommand(cmd , "mandaBitacora") +' else if eventob = "No Venta" Then +' cmd.Name = "actualizaNoVentaBitacora" +'' TMP_FINAL = to_date((?),'YYYY/MM/DD HH24:MI:ss') where TMP_RUTA = (?) and tmp_almacen = (?) and tmp_usuario = (?) and tmp_id_cliente = (?) and tmp_evento = (?) and tmp_fecha_movil = to_date((?),'YYYY/MM/DD HH24:MI:ss'); +' cmd.Parameters = Array As Object(finb, motivonoventa, motivonovisita, rutab, almacenb, usuariob, clienteb, "Inicia Venta", e.GetString("fechab")) +' Log($"${finb}, ${rutab}, ${almacenb}, ${usuariob}, ${clienteb}, 'Inicia Venta', ${e.GetString("fechab")}, "$) +' Starter.reqManager.ExecuteCommand(cmd , "mandaBitacora") +' End If +' End If +' End If +' Log("Mandamos bitacora") +'End Sub + +'Regresa el nombre del cliente del id dado. +Sub traeNombreCliente(id As String) As String + Private c As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select CAT_CL_NOMBRE from kmt_info3 where CAT_CL_CODIGO = '${id}'"$) + Private n As String = "N/A" + Do While c.NextRow + n = c.GetString("CAT_CL_NOMBRE") + Loop + Return n +End Sub + +'Guarda el nombre de la pagina en base de datos la muestra. +Sub iniciaActividad(ia As String) + If ia <> "" And ia <> Null Then +' If B4XPages.MainPage.logger Then LogColor($"Guardamos en BD '${ia}'"$, Colors.Yellow) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("ULTIMOMODULO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("ULTIMOMODULO", ia)) + B4XPages.ShowPage(ia) +' If B4XPages.MainPage.logger Then LogColor("Iniciamos --> " & ia, Colors.Blue) + End If +End Sub + +'Revisa si en el pedido hay $150 o mas de los 2 productos especificados, y si si, entonces agrega el producto de regalo a la tabla pedido. +Sub revisaPromoProcterPRO3009(prodsMap1 As Map) + Log("entramos a promo Procter") + Dim almacenes As List + almacenes.Initialize2(Array As String("3", "17", "37", "31", "68", "71", "33", "80")) + Log("Posicion de almacen: " & almacenes.IndexOf(traeAlmacen)) +' ("3", "17", "37", "31", "68", "71", "33", "80") + If almacenes.IndexOf(traeAlmacen) >= 0 Then ' Si el almacen actual esta dentro de la lista de almacenes autorizados para la promocion, entonces continuamos ... + Private idRegalo As String = "PYG1016" + Private newProdsMap As Map = prodsMap1 + Private monto As String = 0 + Private invRegalo As Int = 0 + Private totalRegalos As Int = 0 + Private r As ResultSet = Starter.skmt.ExecQuery($"select ifnull(cat_gp_almacen, 0) as CAT_GP_ALMACEN from ${traeTablaProds(traeTipoVentaDeBD)} where cat_gp_id = '${idRegalo}'"$) ' Traemos el inventario del regalo. + Do While r.NextRow + Log(r.GetString("CAT_GP_ALMACEN")) + If r.GetString("CAT_GP_ALMACEN") > 0 Then invRegalo = r.GetString("CAT_GP_ALMACEN") + Loop + Log("INV REGALO: " & invRegalo) + r = Starter.skmt.ExecQuery($"select pe_proid from pedido where pe_proid = '${idRegalo}' and pe_cedis = 'PRO3009' and pe_cant = 1 and pe_cliente = '${traeCliente}' "$) 'Revisamos si el regalo ya existe en el pedido. + If r.RowCount > 0 Then totalRegalos = r.RowCount + Log($"TOTAL REGALOS: ${totalRegalos}"$) + If prodsMap1.ContainsKey("PYG1014") Then ' Calculamos el monto del producto 1 + Private m1 As Map = prodsMap1.Get("PYG1014") + monto = monto + m1.Get("cant") * m1.Get("precio") + End If + If prodsMap1.ContainsKey("PYG1025") Then ' Calculamos el monto del producto 2 + Private m2 As Map = prodsMap1.Get("PYG1025") + monto = monto + m2.Get("cant") * m2.Get("precio") + End If + Private r2 As ResultSet = Starter.skmt.ExecQuery($"select ifnull(sum(pe_costo_tot),0) as monto from pedido where pe_cliente = '${traeCliente}' and PE_PROID in ("PYG1014", "PYG1025")"$) + Do While r2.NextRow + monto = monto + r2.GetString("monto") + Loop + Log($"Monto: ${monto}"$) +' Log("PM: " & prodsMap) + Log("prodsMap.Size: " & prodsMap1.Size) + If prodsMap1.Size > 0 Then + If monto > 149 Then + Log("Mas de 149") + If invRegalo > 0 Then + Log("Hay inventario para regalo") + If totalRegalos = 0 Then + guardaProducto("PRO3009", 1, 1, traeProdNombre(idRegalo), idRegalo, traeCliente, traeFecha, traeUsuarioDeBD, traeRuta, 0, B4XPages.MainPage.tipo_venta) +' ToastMessageShow("Agregamos regalo", False) + Private cs As CSBuilder + cs.Initialize + Msgbox(cs.Color(Colors.red).append("PRO3009:").Pop.append(" En la compra de $150 de la linea Oral B Procter & Gamble se agrega 1 Salvo Multiusuos 500 ml.").Color(Colors.red).Append(" con precio de $1.00").popall, "Producto de regalo agregado") 'ignore + End If + Else + LogColor("NO hay inventario para regalo PRO3009 Procter & Gamble.", Colors.red) + End If + Else + Log("Menos de 149") + If totalRegalos > 0 Then + Log("Quitamos regalo") + Starter.skmt.ExecNonQuery($"delete from pedido where pe_cedis = 'PRO3009' and pe_proid = '${idRegalo}' and pe_cliente = '${traeCliente}' and pe_cant = 1 "$) + Log($"Borramos pe_cedis='PRO3009' and pe_proid='${idRegalo}' and pe_cliente='${traeCliente}'"$) + Private pe As Cursor = Starter.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 + Log("###### delete from pedido_cliente - " & traeCliente & "|" & traeCliente) + Log($"delete from pedido_cliente where PC_CLIENTE = '${traeCliente}'"$) + Starter.skmt.ExecNonQuery($"delete from pedido_cliente where PC_CLIENTE = '${traeCliente}'"$) + End If + ToastMessageShow("Quitamos regalo PRO3009", False) + End If + End If + End If + Else + LogColor("El almacen actual NO esta en la lista para la promo de Procter & Gamble.", Colors.Magenta) + End If +' Return newProdsMap +End Sub + +'Valida que si hay un regalo de la promo, tambien existan productos en el pedido para respaldarla. +Sub validaPromoProcterPRO3009 + Private idRegalo As String = "PYG1016" + Private r As ResultSet = Starter.skmt.ExecQuery($"select pe_cliente from pedido where pe_proid = '${idRegalo}' and pe_cedis = 'PRO3009'"$) +' Private cont As Int = 0 + Do While r.NextRow + Private monto As String = 0 + Private r2 As ResultSet = Starter.skmt.ExecQuery($"select ifnull(sum(pe_costo_tot),0) as monto from pedido where pe_cliente = '${r.GetString("PE_CLIENTE")}' and PE_PROID in ("PYG1014", "PYG1025")"$) + Do While r2.NextRow + Log($"Cliente: ${r.GetString("PE_CLIENTE")}, monto: ${r2.GetString("monto")}"$) +' cont = cont + 1 +' Log("CONT = " & cont & " , MONTO: " & r2.GetString("monto")) + If r2.GetString("monto") < 150 Then + Starter.skmt.ExecNonQuery($"delete from pedido where pe_cedis = 'PRO3009' and pe_proid = '${idRegalo}' and pe_cliente = '${r.GetString("PE_CLIENTE")}' and pe_cant = 1 "$) +' If cont = 1 Then + Msgbox($"Regalo de la promoción PRO3009 borrado por no cumplir con los requisitos mínimos."$, "Regalo Borrado") 'ignore +' End If + End If + Loop + r2 = Starter.skmt.ExecQuery($"select count(pe_proid) as cuantos from pedido where pe_cliente = '${r.GetString("PE_CLIENTE")}'"$) 'Revisamos si es que hay mas pedido del cliente, y si no, borramos el header. + Do While r2.NextRow +' Log(">>>> CUANTOS: " & r2.GetString("cuantos")) + If r2.GetString("cuantos") = 0 Then + Starter.skmt.ExecNonQuery($"delete from pedido_cliente where pc_cliente = '${r.GetString("PE_CLIENTE")}'"$) + Starter.skmt.ExecNonQuery($"update kmt_info3 set gestion = 0 where cat_cl_codigo = '${r.GetString("PE_CLIENTE")}'"$) + End If + Loop + Loop +End Sub + +'Regresa TRUE si el cliente especificado existe en el historico de compra de la promo. +Sub revisaPRO2265(idCliente As String) As Boolean + Private r As ResultSet = Starter.skmt.ExecQuery($"select * from HIST_PRO2265 where H_IDCLIENTE = '${idCliente}'"$) + Private x As Boolean = False + Do While r.NextRow + x = True + Loop + Log($">>>> revisaPRO2265 ${idCliente} = ${x}"$) + Return x +End Sub + +'Regresa TRUE si el cliente especificado existe en el historico de compra de la promo. +Sub revisaPRO3054(idCliente As String) As Boolean + Private r As ResultSet = Starter.skmt.ExecQuery($"select * from HIST_PRO3054 where H_IDCLIENTE = '${idCliente}'"$) + Private x As Boolean = False + Do While r.NextRow + x = True + Loop + Log($">>>> revisaPRO3054 ${idCliente} = ${x}"$) + Return x +End Sub + +'Regresa TRUE si el cliente especificado existe en el historico de compra de la promo. +Sub revisaPRO3055(idCliente As String) As Boolean + Private r As ResultSet = Starter.skmt.ExecQuery($"select * from HIST_PRO3055 where H_IDCLIENTE = '${idCliente}'"$) + Private x As Boolean = False + Do While r.NextRow + x = True + Loop + Log($">>>> revisaPRO3055 ${idCliente} = ${x}"$) + Return x +End Sub + +'Revisa si hay actualizacion, si es necesario relaizarla y cual es la liga del APK de la actualización. +' Regresa 0, 1 o 2 dependiendo de CAT_VARIABLES (Sin actualizacion, Forzar actualizacion, Sin adtos, forzar descarga de datos) +Sub revisaForzarActualizacion As Map + Private ra As ResultSet = Starter.skmt.ExecQuery($"select * from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'VERSION_NUEVA' or CAT_VA_DESCRIPCION = 'FORZAR_ACTUALIZACION'"$) + Private nuevaVersion As String = "" + Private forzarActualizacion As Int = 2 + Private m As Map + m.Initialize + Do While ra.NextRow + If ra.GetString("CAT_VA_DESCRIPCION") = "VERSION_NUEVA" Then nuevaVersion = ra.GetString("CAT_VA_VALOR") + If ra.GetString("CAT_VA_DESCRIPCION") = "FORZAR_ACTUALIZACION" Then forzarActualizacion = ra.GetInt("CAT_VA_VALOR") + Loop +' Log(nuevaVersion) +' Log(forzarActualizacion) + If nuevaVersion <> Application.VersionName And forzarActualizacion = 1 Then + m.Put("forzar", 1) + m.Put("nuevaVersion", nuevaVersion) + else if forzarActualizacion = 2 Then 'Si no existen los datos en CAT_VARIABLES, entonces los recargamos + m.Put("forzar", 2) + m.Put("nuevaVersion", "Recargar") + Else + m.Put("forzar", 0) + m.Put("nuevaVersion", nuevaVersion) + End If + If nuevaVersion = "" Or nuevaVersion = Null Or nuevaVersion = "null" Then + m.Put("forzar", 0) + m.Put("nuevaVersion", "") + End If + Return m +End Sub + +Sub parseHTTPError(error As String) As String + Private nuevoError As String = error + Private inicio As Int = error.IndexOf("") + Private final As Int = error.IndexOf("") + Log("|" & inicio & "|" & final & "|") + If inicio > 0 And final > 0 Then + nuevoError = error.SubString2(inicio + 17, final) +' LogColor(error.SubString2(inicio + 17, final), Colors.Blue) + End If + Return nuevoError +End Sub + +' Se revisa si hay una intención (intent) de abrir una base de datos y si es así, entonces se importa esa base de datos. +Sub importaBDDesdeWhatsApp +' Private tmpBDWA As Boolean = traeUsarIntentBDWA + Log("Revisamos intent de importar desde whatsapp") + Log(B4XPages.MainPage.intentUsado) + Log(in) + If Not(in.IsInitialized) Then in = B4XPages.GetNativeParent(B4XPages.MainPage).GetStartingIntent ' Si se usa esta funcion en Mainpage, se pone "Me" en lugar de B4XPages.MainPage. + If Not(B4XPages.MainPage.intentUsado) And in <> Null Then +' Log(in) + LogColor("Importamos base de datos desde Whatsapp.", Colors.blue) + B4XPages.MainPage.intentUsado = True +' Log(in.As(String)) + If in.GetData <> Null Then + Dim XmlData As String + XmlData = in.GetData + Try + Dim OutStr As OutputStream = File.OpenOutput(File.DirInternal,"kmt.db",False) + Dim InStr As InputStream = File.OpenInput("ContentDir",XmlData) + File.Copy2(InStr,OutStr) + LogColor("BD copiada a interna.", Colors.Blue) + OutStr.Close + If in.As(String).Contains("whatsapp") Then ToastMessageShow("BD cargada desde Whatsapp", False) + Catch + Log(LastException) + End Try +' ExitApplication +' Starter.skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'IMPORTAR_BD_WA'") +' Starter.skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('IMPORTAR_BD_WA', '${tmpBDWA}')"$) + Private a As Cursor = Starter.skmt.ExecQuery($"select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'APP_NAME'"$) + If a.RowCount > 0 Then + a.Position = 0 + ToastMessageShow($"BD de "${a.GetString("CAT_VA_VALOR")}" cargada."$, True) + End If + a = Starter.skmt.ExecQuery($"select * from usuarioa"$) + If a.RowCount > 0 Then + a.Position = 0 + B4XPages.MainPage.user.Text = a.GetString("USUARIO") + B4XPages.MainPage.pass.Text = a.GetString("PASS") + End If + End If + End If +End Sub + +'Regresa si se debe de usar el intent de importar la base d datos desde Whatsapp. +Sub traeUsarIntentBDWA As Boolean 'ignore + Private BDWA As Boolean = False + Private x As Cursor = Starter.skmt.ExecQuery($"select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'IMPORTAR_BD_WA'"$) + If x.RowCount > 0 Then + x.Position = 0 + If x.GetString("CAT_VA_VALOR") = "true" Then BDWA = True + End If +' Log($"cb_importarBDWA = ${BDWA}"$) + Return BDWA +End Sub + +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) + If nombre.Length < 6 Then ToastMessageShow("(actualizaProducto) El nombre del producto no es valido " & nombre, True) + precioSin = NumberFormat2(precioSin, 1, 2, 2, False) + costoU = NumberFormat2(costoU, 1, 2, 2, False) + LogColor($"actualizaProducto, c=${clienteId}, p=${prodId}, nombre=${nombre}, cant=${cant}, cedis=${cedis}, tipo=${tipoVenta}"$, Colors.Magenta) +' Private tablaProds As String = "cat_gunaprod2" +' If tipoVenta = "ABORDO" Then tablaProds = "cat_gunaprod" + Private c As Cursor=Starter.skmt.ExecQuery($"select * from pedido where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}'"$) + If c.RowCount > 0 Then +' LogColor("ACTUALIZAMOS PROD - " & traeTablaProds(tipoVenta), Colors.Blue) + 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 + Starter.skmt.ExecNonQuery($"update pedido set pe_cant = ${cant}, pe_costo_tot = ${NumberFormat2((cant*c.GetString("PE_COSTOU")), 1, 2, 2, False)}, pe_folio = '${tipoVenta}' where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}' "$) + If cedis <> "DUR" Then Starter.skmt.ExecNonQuery($"update ${traeTablaProds(tipoVenta)} set cat_gp_almacen = cat_gp_almacen - (${difCant}) where cat_gp_id = '${prodId}' "$) + If cant = 0 Then + LogColor($"BORRAMOS PRODUCTO - ${prodId}"$, Colors.Red) + Starter.skmt.ExecNonQuery($"delete from pedido where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}' "$) + Log($"Borramos pe_cedis='${cedis}' and pe_proid='${prodId}' and pe_cliente='${clienteId}'"$) + Private pe As Cursor = Starter.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 + Log("###### delete from pedido_cliente - " & traeCliente & "|" & clienteId) + Log($"delete from pedido_cliente where PC_CLIENTE = '${traeCliente}'"$) + Starter.skmt.ExecNonQuery($"delete from pedido_cliente where PC_CLIENTE = '${traeCliente}'"$) + End If + End If + Else + 'INSERTAMOS +' LogColor("INSERTAMOS PROD", Colors.red) + If cant > 0 Then guardaProductoSinGestion(cedis, costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoVenta) + End If + c.Close +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) + If nombre.Length < 6 Then ToastMessageShow("(guardaProductoSinGestion) El nombre del producto no es valido " & nombre, True) + precioSin = NumberFormat2(precioSin, 1, 2, 2, False) + costoU = NumberFormat2(costoU, 1, 2, 2, False) +' LogColor("guardaProductoSinGestion: "&prodId&", cant="&cant&", tipo="&tipoVenta, Colors.Magenta) + Private c As Cursor +' Private tablaProds As String = "cat_gunaprod2" +' If tipoVenta = "ABORDO" Then tablaProds = "cat_gunaprod" + Starter.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)) + 'Actualizamos el inventario en cat_gunaprod solo si no es RMI + If cedis <> "DUR" Then Starter.skmt.ExecNonQuery2($"update ${traeTablaProds(tipoVenta)} set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? "$, Array As Object(cant, prodId)) + c=Starter.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 +' Log("###### delete from pedido_cliente - " & traeCliente & "|" & clienteId) +' Log($"delete from pedido_cliente where PC_CLIENTE = '${traeCliente}'"$) + Starter.skmt.ExecNonQuery($"delete from pedido_cliente where PC_CLIENTE = '${traeCliente}'"$) + Starter.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, rutaV, c.GetString("TOTAL_CLIE_SIN"))) +End Sub + +'Regresa la tabla de productos (cat_gunaprod o cat_gunaprod2) dependiendo del tipo de venta. +Sub traeTablaProds(tipoventa As String) As String + Log(tipoventa) + Private tablaProds As String = "cat_gunaprod2" + If tipoventa = "ABORDO" Or tipoventa = "PREVENTA" Then tablaProds = "cat_gunaprod" +' LogColor($"Tipo= ${tipoventa}, tabla=${tablaProds}"$, Colors.RGB(200,136,0)) + Return tablaProds +End Sub + +'Revisa si el producto dado se encuentra en el pedido sin formar parte de una promoción. +'Regresa verdadero o falso. +Sub revisaProdFueraDePromo(prodId As String) As Boolean + Private fueraDePromo As Boolean = False + Private p As Cursor = Starter.skmt.ExecQuery($"select PE_CEDIS from PEDIDO where PE_PROID = '${prodId}' and PE_CEDIS in (select id_almacen from CAT_ALMACEN) and PE_CLIENTE = '${B4XPages.MainPage.cliente.la_cuenta.text}'"$) + Log("rowcount: " & p.RowCount) + If p.RowCount > 0 Then + p.Position = 0 + Log($"|${p.GetString("PE_CEDIS")}|${prodId}|"$) + fueraDePromo = True + End If + Return fueraDePromo +End Sub + +'Trae el tipo de venta (VENTA o PREVENTA) desde CAT_VARIABLES, o "PREVENTA" por default. +Sub traeTipoVentaDeBD As String + Private tipoVenta As String = "PREVENTA" + Private r As ResultSet = Starter.skmt.ExecQuery("select * from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'TIPO_VENTA' ") + Do While r.NextRow + tipoVenta = r.GetString("CAT_VA_VALOR").As(String).ToUpperCase + Loop + If Starter.idCliente = "0" Then + tipoVenta = "ABORDO" + End If +' Log(">>>>>>> " & tipoVenta) + Return tipoVenta +End Sub + +'Guarda una variable en CAT_VARIABLES +Sub guardaVariable(nombre As String, valor As String) + B4XPages.MainPage.skmt.ExecNonQuery($"delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = '${nombre}'"$) + B4XPages.MainPage.skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('${nombre}', '${valor}')"$) +End Sub + +'Regresa el valor de la variable especificada desde CAT_VARIABLES +Sub traeVariable(nombre As String) As String + Private valor As String = "" + Private laVc As Cursor = Starter.skmt.ExecQuery($"select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = '${nombre}'"$) + If laVc.RowCount > 0 Then + laVc.Position = 0 + valor = laVc.GetString("CAT_VA_VALOR") + End If + Return valor +End Sub + +Sub revisaImpreso As Boolean 'ignore + Private impreso As Boolean = False + Private c As Cursor = Starter.skmt.ExecQuery("select idCliente from ticket_impreso where idCliente in (select cuenta from cuentaa)") + If c.RowCount > 0 Then impreso = True + Return impreso +End Sub + +Sub deleteFolder(folder As String) + Log("Borrando " & folder) + For Each f As String In File.ListFiles(folder) + Log(f) + If File.IsDirectory(folder, f) Then + deleteFolder(File.Combine(folder, f)) + Log($"Borramos ${File.Combine(folder, f)}"$) + End If + File.Delete(folder, f) + Next +End Sub + +Sub enviaWhatsappMsg() +' DateTime.DateFormat="MM/dd/yyyy HH:mm:ss" +' Private Fecha As String=DateTime.Date(DateTime.now) +' Private telefono As String = "5215554192439" +' Private monto As String = "1500" +' Private idCliente As String = "10748" +' +'' CON POST +' Dim link As String = "http://keymon.lat:9000/v1/messages" +' Dim elJSON As String = $"{ +' "number":"${telefono}", +' "message":"Tu compra de Guna va ser a crédito por el monto de $${NumberFormat2(monto, 1, 2, 2, True)}${retorno}${retorno}Manda *1* para confirmar${retorno}Manda *0* para rechazar${retorno}${retorno}(Solo el *número* por favor), +' "monto":${monto}, +' "idcliente":${idCliente}, +' "almacen":"1", +' "ruta": "333", +' "fecha":${Fecha} +' }"$ +' Dim job As HttpJob +' job.Initialize("", Me) +' job.PostString(link, elJSON) +' job.GetRequest.SetContentType("application/json") +' Wait For (job) JobDone(job As HttpJob) +' +'' CON GET +' Dim retorno As String = "%0D%0A" +' Dim link As String = $"http://keymon.lat:9000/v1/messages?number=${telefono}&message=Tu compra de Guna va ser a crédito por el monto de $${NumberFormat2(monto, 1, 2, 2, True)}${retorno}${retorno}Manda *1* para confirmar${retorno}Manda *0* para rechazar${retorno}${retorno}(Solo el *número* por favor)&monto=${monto}&idcliente=${idCliente}&almacen=1&ruta=333&fecha=${Fecha}"$ +' Dim job As HttpJob +' job.Initialize("", Me) +'' job.PostString(link, elJSON) +' job.Download(link) +'' job.GetRequest.SetContentType("application/json") +' Wait For (job) JobDone(job As HttpJob) +' +' Log("Whatsapp enviado con exito: " & job.Success) +End Sub + + +'Regresa el tipo de cliente: +' - 1 = platinum +' - 2 = oro +' - 3 = bronze +Sub traeTipoCliente As Int + Private x As Cursor + Private tc As Int = 3 + x = Starter.skmt.ExecQuery($"select IFNULL(cat_cl_tipocliente,3) AS CAT_CL_TIPOCLIENTE from kmt_info3 where cat_cl_codigo in (select cuenta from cuentaa)"$) + If x.RowCount > 0 Then + x.Position = 0 + Log("ESTO LO HIZO GUERRA ------> "&x.GetInt("CAT_CL_TIPOCLIENTE")) + tc = x.GetInt("CAT_CL_TIPOCLIENTE") + End If + Log("ESTO LO HIZO GUERRA X2------> "&tc) + Return tc +End Sub + +Sub traeinventario(id As String) As String + Dim c As Cursor + Dim inventario As String = "0" + c=B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${traeTablaProds(B4XPages.MainPage.tipo_venta)} where CAT_GP_ID = '${id}'"$) +' Log($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_NOMBRE = '${id}'"$) + If c.RowCount > 0 Then + c.Position = 0 + inventario = c.GetString("CAT_GP_ALMACEN") + End If + c.Close + Return inventario +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 + + +'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, prodsVariables2, prodsVariablesPrecios, prodsVariablesPrecios2 As List + promoMap.Initialize + prodsFijos.Initialize + prodsFijosPrecios.Initialize + prodsFijosPiezas.Initialize + prodsVariables.Initialize + prodsVariables2.Initialize + prodsVariablesPrecios.Initialize + prodsVariablesPrecios2.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")) + prodsVariablesPrecios.Add(c.GetString("CAT_DP_PRECIO")) + End If + If c.GetString("CAT_DP_TIPO") = "2" Then +' LogColor(c.GetString("CAT_DP_IDPROD") & "|" & c.GetString("CAT_DP_TIPO"), Colors.Blue) + prodsVariables2.Add(c.GetString("CAT_DP_IDPROD")) + prodsVariablesPrecios2.Add(c.GetString("CAT_DP_PRECIO")) + End If +' Log($"id:${c.GetString("CAT_DP_IDPROD")}, tipo:${c.GetString("CAT_DP_TIPO")}"$) +' If prodsVariables2.Size > 0 Then LogColor(c.GetString("CAT_DP_ID") & "|" & prodsVariables2, Colors.red) + 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("prodsVariables2", prodsVariables2) + promoMap.Put("prodsFijosCant", prodsFijos.Size) + promoMap.Put("prodsFijosPrecios", prodsFijosPrecios) + promoMap.Put("prodsFijosPiezas", prodsFijosPiezas) + promoMap.Put("prodsVariablesCant", prodsVariables.Size) + promoMap.Put("prodsVariables2Cant", prodsVariables2.Size) + promoMap.Put("prodsVariablesPrecios", prodsVariablesPrecios) + promoMap.Put("prodsVariablesPrecios2", prodsVariablesPrecios2) + promoMap.Put("resultado", "ok") + Else + promoMap.Put("resultado", "No hay datos de la promoción.") + End If + c = B4XPages.MainPage.skmt.ExecQuery2($"Select CAT_GP_STS, CAT_GP_IMP1, CAT_GP_NOMBRE from ${Starter.tabla} where CAT_GP_ID = ?"$,Array As String(promo)) 'Obtenemos las piezas requeridas de productos variables para la promoción. + c.Position = 0 + Private pvr As String = 0 + Private pvr2 As String = 0 + If c.RowCount > 0 Then + c.Position = 0 + pvr = c.GetString("CAT_GP_STS") + pvr2 = c.GetString("CAT_GP_IMP1") + If pvr = Null Or pvr = "null" Then pvr = 0 + If pvr2 = Null Or pvr2 = "null" Then pvr2 = 0 + promoMap.Put("prodsVariablesRequeridos", pvr) 'Cantidad de productos variables requeridos para la promoción. + promoMap.Put("prodsVariables2Requeridos", pvr2) + 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 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 + Private totalProdsVariables2Disponibles 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 idProdsVariables2 As List = pm.Get("prodsVariables2") + Private prodsVariablesRequeridos As Int = pm.Get("prodsVariablesRequeridos") + Private prodsVariables2Requeridos As Int = pm.Get("prodsVariables2Requeridos") + 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($"prodsVariables2=${idProdsVariables2}${CRLF}Variables2 Req=${prodsVariables2Requeridos} "$, Colors.Blue) + If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue) + If thisLog Then Log($"Prods variables disponibles = ${totalProdsVariablesDisponibles}"$) + If thisLog Then Log($"Prods variables2 disponibles = ${totalProdsVariables2Disponibles}"$) + Private maxPromosXVariables As Int = 0 + Private maxPromosXVariables2 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 + totalProdsVariables2Disponibles = 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 + For i = 0 To idProdsVariables2.Size - 1 'Obtenemos total de productos variables disponibes. + If invDispParaPromo.ContainsKey(idProdsVariables2.Get(i)) Then + totalProdsVariables2Disponibles = totalProdsVariables2Disponibles + invDispParaPromo.Get(idProdsVariables2.Get(i)) + End If + Next + 'Revisamos variables. + If thisLog Then Log($"Var disponibles - var requeridos : ${totalProdsVariablesDisponibles} - ${prodsVariablesRequeridos*x}"$) + totalProdsVariablesDisponibles = totalProdsVariablesDisponibles - (prodsVariablesRequeridos*x) + totalProdsVariables2Disponibles = totalProdsVariables2Disponibles - (prodsVariables2Requeridos*x) + If thisLog Then Log("prodsVariables disponibles despues de promo = " & totalProdsVariablesDisponibles) + If thisLog Then Log("prodsVariables2 disponibles despues de promo = " & totalProdsVariables2Disponibles) + If totalProdsVariablesDisponibles < 0 Then Exit 'Ya no hay inventario disponible. + If totalProdsVariables2Disponibles < 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 + +'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 totalProdsVariables2 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 una lista con los productos variables de la promoción. + Private prodsVariables2 As List = promoMap.get("prodsVariables2") + 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. +' Log("inventarioSinFijos: " & inventarioSinFijos) + 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. +' Log(p2) + totalProdsVariables = totalProdsVariables + p2 +' Log(totalProdsVariables) + If thisLog Then Log($"prod ${t}, hay: ${p2}"$) 'Producto y piezas requeridas + End If + Next + For p = 0 To prodsVariables2.Size - 1 + Private t As String = prodsVariables2.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. + totalProdsVariables2 = totalProdsVariables2 + 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")) + If thisLog Then Log("Total prods variables2=" & totalProdsVariables2 & ", requeridos2=" & promoMap.Get("prodsVariables2Requeridos")) + Private res As Boolean = False + Private res1 As Boolean = False + Private res2 As Boolean = False + +' Log($"${totalProdsVariables} >= ${promoMap.Get("prodsVariablesRequeridos")}"$) +' Log($"${totalProdsVariables2} >= ${promoMap.Get("prodsVariables2Requeridos")}"$) + + If totalProdsVariables > 0 And totalProdsVariables >= promoMap.Get("prodsVariablesRequeridos") Then + res1 = True 'Si el total de inventario de productos variables (totalProdsVariables) es mayor o igual a los productos requeridos entonces regresamos TRUE + End If + If promoMap.Get("prodsVariablesRequeridos").As (Int) = 0 Then res1 = True + If totalProdsVariables2 > 0 And totalProdsVariables2 >= promoMap.Get("prodsVariables2Requeridos") Then + res2 = True 'Si el total de inventario de productos variables (totalProdsVariables) es mayor o igual a los productos requeridos entonces regresamos TRUE + End If + If promoMap.Get("prodsVariables2Requeridos").As(Int) = 0 Then res2 = True + If res1 And res2 Then 'Solo si son verdadero los dos el resultado es verdadero. + res = True + Else + res = False + End If +' Log(res) + Return res +End Sub \ No newline at end of file diff --git a/B4A/Tracker.bas b/B4A/Tracker.bas new file mode 100644 index 0000000..31a58cb --- /dev/null +++ b/B4A/Tracker.bas @@ -0,0 +1,308 @@ +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("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(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 + 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(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) + LogColor($"Loc changed:${Location1.Longitude},${Location1.Latitude}"$, Colors.Red) + B4XPages.MainPage.lat_gps = Location1.Latitude + B4XPages.MainPage.lon_gps = Location1.Longitude + UUGCoords = Location1 +' Starter.ubicacionActual = 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 + If B4XPages.MainPage.lat_gps = 0 Or B4XPages.MainPage.lat_gps = Null And FLP.GetLastKnownLocation.IsInitialized Then + B4XPages.MainPage.lat_gps = FLP.GetLastKnownLocation.Latitude + B4XPages.MainPage.lon_gps = FLP.GetLastKnownLocation.Longitude + Starter.ubicacionActual = FLP.GetLastKnownLocation + LogColor("Coords en CERO - Guardamos ultima ubicacion conocida", Colors.red) + 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 + If B4XPages.MainPage.cliente.LA_GPS.IsInitialized Then + B4XPages.MainPage.cliente.LA_GPS.Text = "CON UBICACION GPS" + B4XPages.MainPage.cliente.LA_GPS.TextColor = Colors.Black + End If +' LogColor(Location1.Latitude, Colors.red) + 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("GUNA", 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..7c2a0d4 --- /dev/null +++ b/B4A/appUpdater.bas @@ -0,0 +1,304 @@ +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/gunaPreventa.ver" +' Public lnk As String = "https://10.0.0.205/Movil/Guna/cedex.ver" + '########################################## + '## La ruta en el servidor es: ## + '## \\10.0.0.205\e$\Cargas\Movil\Guna ## + '########################################## + '/// 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") + B4XPages.MainPage.muestraProgreso("Buscando actualizaciones, un momento por favor.") + Log("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",C_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_file_download_white_24dp", Main, False, True) +' CallSubDelayed2(Main, "muestraProgreso", "Descargando actualización") + Log("Descargando actualización") +' B4XPages.ShowPage("login") + Starter.muestraProgreso = 1 + B4XPages.MainPage.muestraProgreso("Descargando nueva versión, un momento por favor.") + Dim job_newAPP As HttpJob + If job_newAPP.IsInitialized Then job_newAPP.Release + Log(">>>> LOGIN LINK2: " & Starter.nuevoLink) + If Starter.nuevoLink <> "" Then newApp.appLink = Starter.nuevoLink + job_newAPP.Initialize("job_newAPP",Me) + Log(newApp.appLink & "?dummy=" & DateTime.Now) + job_newAPP.Download(newApp.appLink & "?dummy=" & DateTime.Now) + Log("Vamos a descargar: " & newApp.appLink & "?dummy=" & DateTime.Now) + Wait for (job_newAPP) JobDone (job_newAPP As HttpJob) + Private downladSuccess As Boolean = False + If job_newAPP.Success = True Then + ' // Delete existing file + downladSuccess = True + If File.Exists(SharedFolder,"newapp.apk") Then +' Log(">>>>>> Borramos achivo anterior") + File.Delete(SharedFolder,"newapp.apk") + End If + ' // Save new file + Dim outNewAPK As OutputStream = File.OpenOutput(SharedFolder,"newapp.apk", False) + File.Copy2(job_newAPP.GetInputStream, outNewAPK) + outNewAPK.Close + Log("APK dir: "&SharedFolder) + End If + job_newAPP.Release + n2.Cancel(nNewAppnID) + B4XPages.MainPage.ocultaProgreso + If downladSuccess Then + ' // Install the app + Dim in As Intent + in.Initialize(in.ACTION_VIEW,"" ) + SetFileUriAsIntentData(in, "newapp.apk") + ' // Type must be set after calling SetFileUriAsIntentData + in.SetType("application/vnd.android.package-archive") + StartActivity(in) + Else + B4XPages.MainPage.principal.l_forzarActualizacion.TextColor = Colors.red + B4XPages.MainPage.principal.l_forzarActualizacion.text = "Hubo un error en la descarga, por favor revise que tenga conexion a internet e intente de nuevo." + Log("ERROR EN CONEXION") + Sleep(5000) + ExitApplication + End If + Starter.muestraProgreso = 0 + B4XPages.MainPage.principal.p_transparenteActualizacion.Visible = False +' Service.StopForeground(nNewAppnID) + StopService(Me) +' CallSubDelayed(Main,"ocultaProgreso") +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/cPDF.bas b/B4A/cPDF.bas new file mode 100644 index 0000000..85bb6d2 --- /dev/null +++ b/B4A/cPDF.bas @@ -0,0 +1,1004 @@ +B4J=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=9.8 +@EndOfDesignText@ +'releases +'0.1 : first version +'0.2 : add support fo image PNG with colorspace Indexed (palette) +'0.3 : add raw command to enter PDF command directly +'0.4 : add strikeThrough style for font +' add constants for font style +' add constants for colors +' add methods gMultilineTextSize and outTextFlow +' add setter/getter sX, sY, sY and gY to get/set the current position +'0.5 : add suport for all images type. image is convert to PNG before inserted. a temp file is created, insert into the pdf and deleted +'0.6 : add justify align +Sub Class_Globals + Type TPDFContext(fX As Double,fY As Double, _ + fFontFamily As String,fFontSize As Double,fFontStyle As Int,fFontColor(3) As Double, _ + fDrawWidth As Double,fDrawColor(3) As Double,fFillColor(3) As Double) + Type TPDFPage(fWidth As Double,fHeight As Double,fBuffer As String) + Type TPDFImageInfo(fError As Int,fWidth As Int,fHeight As Int,fBPP As Int,fColorSpace As Int,fCompression As Int,fFilter As Int,fInterlacing As Int,fData() As Byte,fPalette() As Byte) + Type TPDFFontInfo(fCharsWidths(256) As Int,fYUnderline As Int,fHUnderline As Int,fYStrikeThrough As Int,fHStrikeThrough As Int,fYBottom As Int,fYTop As Int) + Type TPDFTextSize(fWidth As Double,fTop As Double,fBottom As Double,fHeight As Double) + Type TPDFMultilineTextSize(fWidth As Double,fHeight As Double,fParagraphs As List) + + 'use to convert image to png + Private fXUI As XUI + + 'encoding file + Private const fTextEncoding As String="cp1252" + 'versions + Private fLibVersion As String + Private fPDFVersion As String + 'factor between user unit and pt + Private fUnitFactor As Double + 'current context + Private fContext As TPDFContext + 'properties of PDF document + Private fProperties As Map + 'list of objects in the PDF + Private fObjs As List + 'current page + Private fPage As Int + 'liste of pages (TPDFPage) + Private fPages As List + 'list of used images in the document, each item in a map (path,imageinfo) + Private fUsedImages As List + 'list of used fonts in the document + Private fUsedFonts As List + 'font info for all the stadards fonts (TPDFFontInfo) + Private fFontsInfos As Map + + 'constants for page size + Public const pageSizeA3PortraitWidth As Double=-841.89 + Public const pageSizeA3PortraitHeight As Double=-1190.55 +' Public const pageSizeA4PortraitWidth As Double=-595.28 +' Public const pageSizeA4PortraitHeight As Double=-841.89 + Public const pageSizeA4PortraitWidth As Double=-370 + Public const pageSizeA4PortraitHeight As Double=-72 + Public const pageSizeA5PortraitWidth As Double=-420.94 + Public const pageSizeA5PortraitHeight As Double=-595.28 + Public const pageSizeLetterPortraitWidth As Double=-612 + Public const pageSizeLetterPortraitHeight As Double=-792 + Public const pageSizeLegalPortraitWidth As Double=-612 + Public const pageSizeLegalPortraitHeight As Double=-1008 + Public const pageSizeA3LandscapeWidth As Double=-1190.55 + Public const pageSizeA3LandscapeHeight As Double=-841.89 + Public const pageSizeA4LandscapeWidth As Double=-841.89 + Public const pageSizeA4LandscapeHeight As Double=-595.28 + Public const pageSizeA5LandscapeWidth As Double=-595.28 + Public const pageSizeA5LandscapeHeight As Double=-420.94 + Public const pageSizeLetterLandscapeWidth As Double=-792 + Public const pageSizeLetterLandscapeHeight As Double=-612 + Public const pageSizeLegalLandscapeWidth As Double=-1008 + Public const pageSizeLegalLandscapeHeight As Double=-612 + + 'constants for standards fonts + Public const fontCourier As String="Courier" + Public const fontHelvetica As String="Helvetica" + Public const fontTimes As String="Times" + Public const fontSymbol As String="Symbol" + Public const fontZapfdingbats As String="zapfdingbats" + + 'constants for fonts styles + Public const fontNormal As Int=0 + Public const fontBold As Int=1 + Public const fontItalic As Int=2 + Public const fontUnderline As Int=4 + Public const fontStrikeThrough As Int=8 + + 'constants for properties + Public const PropertyAuthor As String="Author" + Public const PropertyCreator As String="Creator" + Public const PropertyProducer As String="Producer" + Public const PropertyTitle As String="Title" + Public const PropertySubject As String="Subject" + Public const PropertyKeywords As String="Keywords" + + 'constants for rectangle style + Public const RectangleBorderOnly As String="S" + Public const RectangleFillOnly As String="f" + Public const RectangleBorderAndFill As String="B" + + 'constants for text align + Public const AlignLeft As String="L" + Public const AlignCenter As String="C" + Public const AlignRight As String="R" + Public const AlignJusify As String="J" + + 'constants for compression + Public const CompressAlways As Int=0 + Public const CompressIfSmaller As Int=1 + Public const CompressNever As Int=2 + + Public const colorBlack(3) As Double=Array As Double(0,0,0) + Public const colorWhite(3) As Double=Array As Double(1,1,1) + Public const colorGray(3) As Double=Array As Double(0.5,0.5,0.5) + Public const colorRed(3) As Double=Array As Double(1,0,0) + Public const colorGreen(3) As Double=Array As Double(0,1,0) + Public const colorBlue(3) As Double=Array As Double(0,0,1) + +End Sub + +'initialize and set unit to use : mm, cm, pt, in +Public Sub Initialize(aunit As String) As cPDF + fLibVersion="0.6" + fPDFVersion="1.3" + sUnit(aunit) + fProperties=CreateMap("Producer":"B4XPDF","CreationDate":gCreationDate,"ModDate":gCreationDate) + fContext.Initialize + fObjs.Initialize + fPages.Initialize + fPage=0 + fUsedImages.Initialize + fUsedFonts.Initialize + initFontsInfos + Return Me +End Sub + +private Sub createFontInfo(acharsWidths() As Int,ayunderline As Int,ahunderline As Int,aystrikethrough As Int,ahstrikethrough As Int,aytop As Int,aybottom As Int) As TPDFFontInfo + Dim fi As TPDFFontInfo + fi.Initialize + 'width of each 256 chars + fi.fCharsWidths=acharsWidths + 'bottom of underline rectangle + fi.fYUnderline=ayunderline + 'height of underine rectangle + fi.fHUnderline=ahunderline + 'bottom of strikethrough rectangle + fi.fYStrikeThrough=aystrikethrough + 'height of strikethrough rectangle + fi.fHStrikeThrough=ahstrikethrough + 'distance between baseline and top + fi.fYTop=aytop + 'distance between baseline and bottom + fi.fybottom=aybottom + Return fi +End Sub + +private Sub initFontsInfos + fFontsInfos.Initialize + fFontsInfos.Put(calcFontKey("Courier",fontNormal),createFontInfo(Array As Int(600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600),-60,40,220,40,800,-230)) + fFontsInfos.Put(calcFontKey("Courier",fontBold),createFontInfo(Array As Int(600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600),-60,40,220,40,800,-230)) + fFontsInfos.Put(calcFontKey("Courier",fontItalic),createFontInfo(Array As Int(600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600),-60,40,220,40,800,-230)) + fFontsInfos.Put(calcFontKey("Courier",fontBold+fontItalic),createFontInfo(Array As Int(600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600),-60,40,220,40,800,-230)) + fFontsInfos.Put(calcFontKey("Helvetica",fontNormal),createFontInfo(Array As Int(278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,350,556,350,222,556,333,1000,556,556,333,1000,667,333,1000,350,611,350,350,222,222,333,333,350,556,1000,333,1000,500,333,944,350,500,667,278,333,556,556,556,556,260,556,333,737,370,556,584,333,737,333,400,584,333,333,333,556,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1000,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,584,611,556,556,556,556,500,556,500),-60,40,220,40,800,-230)) + fFontsInfos.Put(calcFontKey("Helvetica",fontBold),createFontInfo(Array As Int(278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,350,556,350,278,556,500,1000,556,556,333,1000,667,333,1000,350,611,350,350,278,278,500,500,350,556,1000,333,1000,556,333,944,350,500,667,278,333,556,556,556,556,280,556,333,737,370,556,584,333,737,333,400,584,333,333,333,611,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1000,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,584,611,611,611,611,611,556,611,556),-60,40,220,40,800,-230)) + fFontsInfos.Put(calcFontKey("Helvetica",fontItalic),createFontInfo(Array As Int(278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,350,556,350,222,556,333,1000,556,556,333,1000,667,333,1000,350,611,350,350,222,222,333,333,350,556,1000,333,1000,500,333,944,350,500,667,278,333,556,556,556,556,260,556,333,737,370,556,584,333,737,333,400,584,333,333,333,556,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1000,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,584,611,556,556,556,556,500,556,500),-60,40,220,40,800,-230)) + fFontsInfos.Put(calcFontKey("Helvetica",fontBold+fontItalic),createFontInfo(Array As Int(278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,350,556,350,278,556,500,1000,556,556,333,1000,667,333,1000,350,611,350,350,278,278,500,500,350,556,1000,333,1000,556,333,944,350,500,667,278,333,556,556,556,556,280,556,333,737,370,556,584,333,737,333,400,584,333,333,333,611,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1000,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,584,611,611,611,611,611,556,611,556),-60,40,220,40,800,-230)) + fFontsInfos.Put(calcFontKey("Times",fontNormal),createFontInfo(Array As Int(250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,333,408,500,500,833,778,180,333,333,500,564,250,333,250,278,500,500,500,500,500,500,500,500,500,500,278,278,564,564,564,444,921,722,667,667,722,611,556,722,722,333,389,722,611,889,722,722,556,722,667,556,611,722,722,944,722,722,611,333,278,333,469,500,333,444,500,444,500,444,333,500,500,278,278,500,278,778,500,500,500,500,333,389,278,500,500,722,500,500,444,480,200,480,541,350,500,350,333,500,444,1000,500,500,333,1000,556,333,889,350,611,350,350,333,333,444,444,350,500,1000,333,980,389,333,722,350,444,722,250,333,500,500,500,500,200,500,333,760,276,500,564,333,760,333,400,564,300,300,333,500,453,250,333,300,310,500,750,750,750,444,722,722,722,722,722,722,889,667,611,611,611,611,333,333,333,333,722,722,722,722,722,722,722,564,722,722,722,722,722,722,556,500,444,444,444,444,444,444,667,444,444,444,444,444,278,278,278,278,500,500,500,500,500,500,500,564,500,500,500,500,500,500,500,500),-60,40,2200,40,800,-230)) + fFontsInfos.Put(calcFontKey("Times",fontBold),createFontInfo(Array As Int(250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,333,555,500,500,1000,833,278,333,333,500,570,250,333,250,278,500,500,500,500,500,500,500,500,500,500,333,333,570,570,570,500,930,722,667,722,722,667,611,778,778,389,500,778,667,944,722,778,611,778,722,556,667,722,722,1000,722,722,667,333,278,333,581,500,333,500,556,444,556,444,333,500,556,278,333,556,278,833,556,500,556,556,444,389,333,556,500,722,500,500,444,394,220,394,520,350,500,350,333,500,500,1000,500,500,333,1000,556,333,1000,350,667,350,350,333,333,500,500,350,500,1000,333,1000,389,333,722,350,444,722,250,333,500,500,500,500,220,500,333,747,300,500,570,333,747,333,400,570,300,300,333,556,540,250,333,300,330,500,750,750,750,500,722,722,722,722,722,722,1000,722,667,667,667,667,389,389,389,389,722,722,778,778,778,778,778,570,778,722,722,722,722,722,611,556,500,500,500,500,500,500,722,444,444,444,444,444,278,278,278,278,500,556,500,500,500,500,500,570,500,556,556,556,556,500,556,500),-60,40,220,40,800,-230)) + fFontsInfos.Put(calcFontKey("Times",fontItalic),createFontInfo(Array As Int(250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,333,420,500,500,833,778,214,333,333,500,675,250,333,250,278,500,500,500,500,500,500,500,500,500,500,333,333,675,675,675,500,920,611,611,667,722,611,611,722,722,333,444,667,556,833,667,722,611,722,611,500,556,722,611,833,611,556,556,389,278,389,422,500,333,500,500,444,500,444,278,500,500,278,278,444,278,722,500,500,500,500,389,389,278,500,444,667,444,444,389,400,275,400,541,350,500,350,333,500,556,889,500,500,333,1000,500,333,944,350,556,350,350,333,333,556,556,350,500,889,333,980,389,333,667,350,389,556,250,389,500,500,500,500,275,500,333,760,276,500,675,333,760,333,400,675,300,300,333,500,523,250,333,300,310,500,750,750,750,500,611,611,611,611,611,611,889,667,611,611,611,611,333,333,333,333,722,667,722,722,722,722,722,675,722,722,722,722,722,556,611,500,500,500,500,500,500,500,667,444,444,444,444,444,278,278,278,278,500,500,500,500,500,500,500,675,500,500,500,500,500,444,500,444),-60,40,220,40,800,-230)) + fFontsInfos.Put(calcFontKey("Times",fontBold+fontItalic),createFontInfo(Array As Int(250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,389,555,500,500,833,778,278,333,333,500,570,250,333,250,278,500,500,500,500,500,500,500,500,500,500,333,333,570,570,570,500,832,667,667,667,722,667,667,722,778,389,500,667,611,889,722,722,611,722,667,556,611,722,667,889,667,611,611,333,278,333,570,500,333,500,500,444,500,444,333,500,556,278,278,500,278,778,556,500,500,500,389,389,278,556,444,667,500,444,389,348,220,348,570,350,500,350,333,500,500,1000,500,500,333,1000,556,333,944,350,611,350,350,333,333,500,500,350,500,1000,333,1000,389,333,722,350,389,611,250,389,500,500,500,500,220,500,333,747,266,500,606,333,747,333,400,570,300,300,333,576,500,250,333,300,300,500,750,750,750,500,667,667,667,667,667,667,944,667,667,667,667,667,389,389,389,389,722,722,722,722,722,722,722,570,722,722,722,722,722,611,611,500,500,500,500,500,500,500,722,444,444,444,444,444,278,278,278,278,500,556,500,500,500,500,500,570,500,556,556,556,556,444,500,444),-60,40,220,40,800,-230)) + fFontsInfos.Put(calcFontKey("Symbol",fontNormal),createFontInfo(Array As Int(250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,333,713,500,549,833,778,439,333,333,500,549,250,549,250,278,500,500,500,500,500,500,500,500,500,500,278,278,549,549,549,444,549,722,667,722,612,611,763,603,722,333,631,722,686,889,722,722,768,741,556,592,611,690,439,768,645,795,611,333,863,333,658,500,500,631,549,549,494,439,521,411,603,329,603,549,549,576,521,549,549,521,549,603,439,576,713,686,493,686,494,480,200,480,549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,750,620,247,549,167,713,500,753,753,753,753,1042,987,603,987,603,400,549,411,549,549,713,494,460,549,549,549,549,1000,603,1000,658,823,686,795,987,768,768,823,768,768,713,713,713,713,713,713,713,768,713,790,790,890,823,549,250,713,603,603,1042,987,603,987,603,494,329,790,790,786,713,384,384,384,384,384,384,494,494,494,494,0,329,274,686,686,686,384,384,384,384,384,384,494,494,494,0),-60,10,220,40,800,-230)) + fFontsInfos.Put(calcFontKey("zapfdingbats",fontNormal),createFontInfo(Array As Int(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278,974,961,974,980,719,789,790,791,690,960,939,549,855,911,933,911,945,974,755,846,762,761,571,677,763,760,759,754,494,552,537,577,692,786,788,788,790,793,794,816,823,789,841,823,833,816,831,923,744,723,749,790,792,695,776,768,792,759,707,708,682,701,826,815,789,789,707,687,696,689,786,787,713,791,785,791,873,761,762,762,759,759,892,892,788,784,438,138,277,415,392,392,668,668,0,390,390,317,317,276,276,509,509,410,410,234,234,334,334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,732,544,544,910,667,760,760,776,595,694,626,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,894,838,1016,458,748,924,748,918,927,928,928,834,873,828,924,924,917,930,931,463,883,836,836,867,867,696,696,874,0,874,760,946,771,865,771,888,967,888,831,873,927,970,918,0),-60,40,220,40,800,-230)) +End Sub + +'set factor to convert user unit to pt +private Sub sUnit(aunit As String) As cPDF + Select aunit.ToLowerCase + Case "pt" + fUnitFactor=1.0 + Case "mm" + fUnitFactor=72.0/25.4 + Case "cm" + fUnitFactor=72.0/2.54 + Case "in" + fUnitFactor=72.0 + Case Else + fUnitFactor=1.0 + End Select + Return Me +End Sub + +'return current date and time in format D:YYYYMMDDHHMMSS±hh'mm' +private Sub gCreationDate As String + DateTime.DateFormat="yyyyMMdd" + DateTime.TimeFormat="hhmmss" + Dim z As String=NumberFormat2(DateTime.TimeZoneOffset,2,2,2,False) + z=IIf(z.SubString2(0,1)<>"-","+","") & z + z=z.SubString2(0,3) & "'" & z.SubString(4) & "'" + Return "D:" & DateTime.Date(DateTime.Now) & DateTime.Time(DateTime.Now) & z +End Sub + +'all the ....write methods write a part of the pdf +private Sub headerWrite As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + bb.Append($"%PDF-${NumberFormat2(fPDFVersion,1,1,1,False)}${Chr(10)}"$.getBytes(fTextEncoding)) + Return bb.toarray +End Sub + +private Sub catalogWrite As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + bb.Append($"${fObjs.Size+1} 0 obj <> endobj${Chr(10)}"$.getBytes(fTextEncoding)) + fObjs.Add(bb.Length) + Return bb.toarray +End Sub + +private Sub kidsWrite As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + bb.Append($"${fObjs.Size+1} 0 obj <> endobj${Chr(10)}"$.getbytes(fTextEncoding)) + fObjs.Add(bb.Length) + Return bb.ToArray +End Sub + +private Sub pagesWrite As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + Dim r As Int=fObjs.Size+1+fPages.Size*2 + For i=0 To fPages.Size-1 + bb.append(pageWrite(i,r)) + Next + Return bb.ToArray +End Sub + +private Sub pageWrite(apage As Int,aresource As Int) As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + Dim p As TPDFPage=fPages.Get(apage) + bb.Append($"${fObjs.Size+1} 0 obj <> endobj${Chr(10)}"$.getbytes(fTextEncoding)) + fObjs.Add(bb.Length) + Return bb.ToArray +End Sub + +private Sub contentsWrite(acompress As Int) As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + For i=0 To fPages.Size-1 + bb.append(contentWrite(acompress,i)) + Next + Return bb.toarray +End Sub + +private Sub contentWrite(acompress As Int,apage As Int) As Byte() + Dim const compress As String="/Filter/FlateDecode" + Dim bb As B4XBytesBuilder + bb.Initialize + + Dim c() As Byte=fPages.Get(apage).As(TPDFPage).fBuffer.GetBytes(fTextEncoding) + Dim filter As String="" + + If acompress<>CompressNever Then + Dim cs As CompressedStreams + Dim b() As Byte=cs.CompressBytes(c,"zlib") + If acompress=CompressAlways Or b.Length+compress.length>${Chr(10)}stream${Chr(10)}"$.getbytes(fTextEncoding)) + bb.Append(c) + bb.Append($"${Chr(10)}endstream${Chr(10)}endobj${Chr(10)}"$.getBytes(fTextEncoding)) + fObjs.Add(bb.Length) + Return bb.ToArray +End Sub + +private Sub resourcesWrite As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + bb.Append($"${fObjs.size+1} 0 obj << "$.getBytes(fTextEncoding)) + + bb.Append($"/ProcSet [/PDF /Text /ImageB /ImageC /ImageI] ${Chr(10)}"$.getBytes(fTextEncoding)) + + bb.append($"/Font << ${Chr(10)}"$.getBytes(fTextEncoding)) + For i=0 To fUsedFonts.Size-1 + bb.Append($"/F${i} ${fObjs.Size+1+i+1} 0 R "$.getBytes(fTextEncoding)) + Next + bb.append($" >> ${Chr(10)}"$.getBytes(fTextEncoding)) + + bb.append($"/XObject << ${Chr(10)}"$.getBytes(fTextEncoding)) + For i=0 To fUsedImages.Size-1 + bb.Append($"/I${i} ${fObjs.Size+1+i+1+fUsedFonts.size} 0 R "$.getBytes(fTextEncoding)) + Next + bb.append($" >> ${Chr(10)}"$.getBytes(fTextEncoding)) + + bb.Append($" >> endobj${Chr(10)}"$.getBytes(fTextEncoding)) + fObjs.Add(bb.Length) + Return bb.ToArray +End Sub + +private Sub fontsWrite As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + For i=0 To fUsedFonts.Size-1 + bb.append(fontWrite(i)) + Next + Return bb.ToArray +End Sub + +private Sub fontWrite(afont As Int) As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + Dim c As String=fUsedFonts.Get(afont) + bb.Append($"${fObjs.Size+1} 0 obj << /Type /Font /Subtype /Type1 /BaseFont /${c} /Encoding /WinAnsiEncoding>> endobj${Chr(10)}"$.getbytes(fTextEncoding)) + fObjs.Add(bb.Length) + Return bb.ToArray +End Sub + +private Sub imagesWrite As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + For i=0 To fUsedImages.Size-1 + bb.append(imageWrite(i)) + Next + Return bb.toarray +End Sub + +private Sub imageWrite(aimage As Int) As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + Dim ii As TPDFImageInfo=fUsedImages.Get(aimage).As(Map).Get("info") + bb.Append($"${fObjs.Size+1} 0 obj${Chr(10)}<>${Chr(10)}"$.getBytes(fTextEncoding)) + bb.Append($"/Length ${ii.fData.length}>>${Chr(10)}stream${Chr(10)}"$.getBytes(fTextEncoding)) + bb.Append(ii.fdata) + bb.Append($"${Chr(10)}endstream${Chr(10)}endobj${Chr(10)}"$.getBytes(fTextEncoding)) + fObjs.Add(bb.Length) + If cs="Indexed" Then + bb.Append(paletteWrite(ii.fPalette)) + End If + Return bb.ToArray +End Sub + +private Sub paletteWrite(apalette() As Byte) As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + bb.Append($"${fObjs.Size+1} 0 obj${Chr(10)}<>${Chr(10)}stream${Chr(10)}"$.getbytes(fTextEncoding)) + bb.Append(apalette) + bb.Append($"${Chr(10)}endstream${Chr(10)}endobj${Chr(10)}"$.getBytes(fTextEncoding)) + fObjs.Add(bb.Length) + Return bb.ToArray +End Sub + +private Sub propertiesWrite As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + bb.Append($"${fObjs.Size+1} 0 obj <<${Chr(10)}"$.getBytes(fTextEncoding)) + For Each k As String In fProperties.keys + bb.Append($"/${k}(${escapeText(fProperties.Get(k))})${Chr(10)}"$.getBytes(fTextEncoding)) + Next + bb.Append($" >> endobj${Chr(10)}"$.getBytes(fTextEncoding)) + fObjs.Add(bb.Length) + Return bb.ToArray +End Sub + +private Sub refWrite(astart As Long,ageneration As Int,astatus As String) As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + bb.Append($"${NumberFormat2(astart,10,0,0,False)} ${NumberFormat2(ageneration,5,0,0,False)} ${astatus}${Chr(10)}"$.getBytes(fTextEncoding)) + Return bb.ToArray +End Sub + +private Sub xrefWrite As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + Dim s As Long=headerWrite.length + bb.Append($"xref${Chr(10)}"$.getBytes(fTextEncoding)) + bb.Append($"0 ${fObjs.Size+1}${Chr(10)}"$.getBytes(fTextEncoding)) + bb.Append(refWrite(0,65535,"f")) + For i=0 To fObjs.Size-1 + Dim l As Int=fObjs.Get(i) + bb.Append(refWrite(s,0,"n")) + s=s+l + Next + Return bb.ToArray +End Sub + +private Sub trailerWrite As Byte() + Dim bb As B4XBytesBuilder + bb.Initialize + Dim s As Long=headerWrite.length + For i=0 To fObjs.Size-1 + Dim l As Int=fObjs.Get(i) + s=s+l + Next + bb.Append($"trailer <<${Chr(10)}"$.getBytes(fTextEncoding)) + bb.Append($"/Size ${fObjs.Size+1}${Chr(10)}"$.getBytes(fTextEncoding)) + bb.Append($"/Info ${fObjs.Size} 0 R${Chr(10)}"$.getBytes(fTextEncoding)) + bb.Append($"/Root 1 0 R${Chr(10)}"$.getBytes(fTextEncoding)) + bb.Append($">>${Chr(10)}"$.getBytes(fTextEncoding)) + bb.Append($"startxref${Chr(10)}"$.getBytes(fTextEncoding)) + bb.Append($"${s}${Chr(10)}"$.getBytes(fTextEncoding)) + Return bb.ToArray +End Sub + +private Sub footerWrite As Byte() + Return "%%EOF".GetBytes(fTextEncoding) +End Sub + +'calc a unique key for a specific font (family ans style (bold, italic)) +private Sub calcFontKey(afamily As String,astyle As Int) As String + If afamily="zapfdingbats" Or afamily="Symbol" Then + astyle=Bit.And(astyle,Bit.Not(Bit.Or(fontBold,fontItalic))) + End If + If Bit.And(astyle,fontBold)<>0 And Bit.And(astyle,fontItalic)<>0 Then + Return afamily & "-BoldOblique" + End If + If Bit.And(astyle,fontBold)<>0 Then + Return afamily & "-Bold" + End If + If Bit.And(astyle,fontItalic)<>0 Then + Return afamily & "-Oblique" + End If + If afamily="Times" Then + Return "Times-Roman" + End If + Return afamily +End Sub + +'add content to a page +private Sub contentAdd(apage As Int,acontent As String) + Dim sb As StringBuilder + sb.Initialize + sb.Append(fPages.Get(apage).As(TPDFPage).fbuffer) + sb.Append(acontent) + fPages.Get(apage).As(TPDFPage).fbuffer=sb.ToString +End Sub + +'escape characters ( ) \ +private Sub escapeText(atext As String) As String + Return atext.Replace("\","\\").Replace("(","\(").Replace(")","\)") +End Sub + +'initialize, set properties and return a TPDFPage +private Sub createPage(awidth As Double,aheight As Double,abuffer As String) As TPDFPage + Dim p As TPDFPage + p.Initialize + p.fWidth=awidth + p.fHeight=aheight + p.fBuffer=abuffer + Return p +End Sub + +private Sub rafReadString(araf As RandomAccessFile,astart As Long,acount As Long) As String + Dim s As String + For i=0 To acount-1 + s=s & Chr(araf.ReadUnsignedByte(astart+i)) + Next + Return s +End Sub + +'calc a unique key for a specific image (adir & afile) +private Sub imageKey(adir As String,afile As String) As String + Return adir & afile +End Sub + +'parse png file +private Sub imageInfo(adir As String,afile As String) As TPDFImageInfo + Dim ii As TPDFImageInfo + Dim raf As RandomAccessFile + Dim rafpos As Long + Dim bbData As B4XBytesBuilder + Dim bbPalette As B4XBytesBuilder + + bbData.Initialize + bbPalette.Initialize + ii.Initialize + ii.fError=0 + raf.Initialize(adir,afile,True) + rafpos=0 + + + 'signture PNG + If rafReadString(raf,rafpos,8)<>Chr(137) & "PNG" & Chr(13) & Chr(10) & Chr(26) & Chr(10) Then + ii.fError=1 + End If + rafpos=rafpos+8 + + 'chunks (length, type, data, CRC) + Dim chunkLength As Int + Dim chunkType As String + Do While (ii.fError=0) And (chunkType<>"IEND") + chunkLength=raf.ReadInt(rafpos) + rafpos=rafpos+4 + chunkType=rafReadString(raf,rafpos,4) + rafpos=rafpos+4 + Select chunkType + 'header + Case "IHDR" + ii.fWidth=raf.ReadInt(rafpos) + rafpos=rafpos+4 + + ii.fHeight=raf.ReadInt(rafpos) + rafpos=rafpos+4 + + ii.fBPP=raf.ReadUnsignedByte(rafpos) + If ii.fBPP>8 Then + ii.fError=2 + End If + rafpos=rafpos+1 + + ii.fColorSpace=raf.ReadUnsignedByte(rafpos) + If ii.fColorSpace<>0 And ii.fColorSpace<>2 And ii.fColorSpace<>3 And ii.fColorSpace<>4 Then + ii.FError=3 + End If + rafpos=rafpos+1 + + ii.FCompression=raf.ReadUnsignedByte(rafpos) + If ii.FCompression<>0 Then + ii.FError=4 + End If + rafpos=rafpos+1 + + ii.FFilter=raf.ReadUnsignedByte(rafpos) + If ii.FFilter<>0 Then + ii.FError=5 + End If + rafpos=rafpos+1 + + ii.FInterlacing=raf.ReadUnsignedByte(rafpos) + If ii.FInterlacing<>0 Then + ii.FError=6 + End If + rafpos=rafpos+1 + 'data + Case "IDAT" + Dim b(chunkLength) As Byte + raf.ReadBytes(b,0,chunkLength,rafpos) + bbData.Append(b) + rafpos=rafpos+chunkLength + 'palette + Case "PLTE" + Dim b(chunkLength) As Byte + raf.ReadBytes(b,0,chunkLength,rafpos) + bbPalette.Append(b) + rafpos=rafpos+chunkLength + 'ignore other chunktype + Case Else + 'skip Data + rafpos=rafpos+chunkLength + End Select + 'skip CRC + rafpos=rafpos+4 + Loop + + raf.close + ii.fData=bbData.ToArray + ii.fPalette=bbPalette.ToArray + + Return ii +End Sub + + + +'save to stream +public Sub saveToStream(aoutputstream As OutputStream,acompress As Int) As cPDF + Dim b() As Byte=headerWrite + aoutputstream.WriteBytes(b,0,b.length) + Dim b() As Byte=catalogWrite + aoutputstream.WriteBytes(b,0,b.length) + Dim b() As Byte=kidsWrite + aoutputstream.WriteBytes(b,0,b.length) + Dim b() As Byte=pagesWrite + aoutputstream.WriteBytes(b,0,b.length) + Dim b() As Byte=contentsWrite(acompress) + aoutputstream.WriteBytes(b,0,b.length) + Dim b() As Byte=resourcesWrite + aoutputstream.WriteBytes(b,0,b.length) + Dim b() As Byte=fontsWrite + aoutputstream.WriteBytes(b,0,b.length) + Dim b() As Byte=imagesWrite + aoutputstream.WriteBytes(b,0,b.length) + Dim b() As Byte=propertiesWrite + aoutputstream.WriteBytes(b,0,b.length) + Dim b() As Byte=xrefWrite + aoutputstream.WriteBytes(b,0,b.length) + Dim b() As Byte=trailerWrite + aoutputstream.WriteBytes(b,0,b.length) + Dim b() As Byte=footerWrite + aoutputstream.WriteBytes(b,0,b.length) + Return Me +End Sub + +'save pdf to a file +public Sub saveToFile(adir As String, afile As String, acompress As Int) As cPDF + Log(afile) + File.Delete(adir,afile) + Dim outputstream As OutputStream=File.OpenOutput(adir,afile,False) + saveToStream(outputstream,acompress) + outputstream.Close + Return Me +End Sub + + +'return the index of the image with path=akey in fUSedImages +'return -1 if not found +private Sub findImageKey(akey As String) As Int + For i=0 To fUsedImages.Size-1 + If fUsedImages.Get(i).As(Map).Get("path")=akey Then + Return i + End If + Next + Return -1 +End Sub + + +'get the number of pages in the pdf +public Sub gPagesCount As Int + Return fPages.size +End Sub + +'get the width of the page +'apage : 1 to n +public Sub gPageWidth(apage As Int) As Double + Return fPages.Get(apage-1).As(TPDFPage).fWidth/fUnitFactor +End Sub + +'get the height of the page +'apage : 1 to n +public Sub gPageHeight(apage As Int) As Double + Return fPages.Get(apage-1).As(TPDFPage).fHeight/fUnitFactor +End Sub + +'add a new page with width and height +'use predefined constants pageSize... +'or enter custom size (unit is unit defined in intialize method) +'the new page becomes the current page +public Sub pageAdd(awidth As Double,aheight As Double) As cPDF + fPages.Add(createPage(IIf(awidth<0,-awidth,awidth*fUnitFactor),IIf(aheight<0,-aheight,aheight*fUnitFactor),"")) + fPage=fPages.Size-1 + sFont(fContext.fFontFamily,fContext.fFontStyle,fContext.fFontSize,fContext.fFontColor) + sDrawColor(fContext.fDrawColor) + sDrawWidth(fContext.fDrawWidth) + sFillColor(fContext.fFillColor) + Return Me +End Sub + +'get current page +public Sub gPage As Int + Return fPage+1 +End Sub + +'set current page +'apage : 1 to n +public Sub sPage(apage As Int) As cPDF + fPage=apage-1 + Return Me +End Sub + +'set draw color for line +'argb : Red Green Blue +'values from 0.000 to 1.000 +public Sub sDrawColor(argb() As Double) As cPDF + fContext.fDrawColor=argb + contentAdd(fPage,$"${NumberFormat2(argb(0),1,3,3,False)} ${NumberFormat2(argb(1),1,3,3,False)} ${NumberFormat2(argb(2),1,3,3,False)} RG${Chr(10)}"$) + Return Me +End Sub + +'set draw width for line +public Sub sDrawWidth(awidth As Double) As cPDF + fContext.fDrawWidth=awidth + contentAdd(fPage,$"${NumberFormat2(awidth*fUnitFactor,1,3,3,False)} w${Chr(10)}"$) + Return Me +End Sub + +'set fill color +'argb : Red Green Blue +'values from 0.000 to 1.000 +public Sub sFillColor(argb() As Double) As cPDF + fContext.fFillColor=argb + Return Me +End Sub + +'set font +'family : Helvetica,Times,Courier,Symbol,zapfdingbats (use predefined constants font...) +'size in pts +'font uses cp-1252 windows encoding +public Sub sFont(afamily As String,astyle As Int,asize As Double,acolor() As Double) As cPDF + Dim k As String=calcFontKey(afamily,astyle) + Dim i As Int=fUsedFonts.IndexOf(k) + If i=-1 Then + fUsedFonts.Add(k) + i=fUsedFonts.Size-1 + End If + contentAdd(fPage,$"BT /F${i} ${NumberFormat2(asize,1,3,3,False)} Tf ET${Chr(10)}"$) + fContext.fFontFamily=afamily + fContext.fFontStyle=astyle + fContext.fFontSize=asize + fContext.fFontColor=acolor + Return Me +End Sub + +'draw text on current page at position ax,ay with current font and current text color +'(0,0) is bottom left of the page +'(w,h) if top right of the page +public Sub outText(ax As Double,ay As Double,atext As String) As cPDF + contentAdd(fPage,$"${NumberFormat2(fContext.fFontColor(0),1,3,3,False)} ${NumberFormat2(fContext.fFontColor(1),1,3,3,False)} ${NumberFormat2(fContext.fFontColor(2),1,3,3,False)} rg${Chr(10)}"$) + contentAdd(fPage,$"BT ${NumberFormat2(ax*fUnitFactor,1,3,3,False)} ${NumberFormat2(ay*fUnitFactor,1,3,3,False)} Td (${escapeText(atext)})Tj ET${Chr(10)}"$) + If Bit.And(fContext.fFontstyle,fontUnderline+fontStrikeThrough)<>0 Then + Dim fi As TPDFFontInfo=fFontsInfos.Get(calcFontKey(fContext.fFontFamily,fContext.fFontStyle)).As(TPDFFontInfo) + Dim ts As TPDFTextSize=gTextSize(atext) + End If + If Bit.And(fContext.fFontstyle,fontUnderline)<>0 Then + contentAdd(fPage,$"${NumberFormat2(ax*fUnitFactor,1,3,3,False)} ${NumberFormat2(ay*fUnitFactor+fi.fYUnderline*fContext.fFontSize/1000,1,3,3,False)} ${NumberFormat2(ts.fWidth*fUnitFactor,1,3,3,False)} ${NumberFormat2((fi.fHUnderline)*fContext.fFontSize/1000,1,3,3,False)} re f ${Chr(10)}"$) + End If + If Bit.And(fContext.fFontstyle,fontStrikeThrough)<>0 Then + contentAdd(fPage,$"${NumberFormat2(ax*fUnitFactor,1,3,3,False)} ${NumberFormat2(ay*fUnitFactor+fi.fYStrikeThrough*fContext.fFontSize/1000,1,3,3,False)} ${NumberFormat2(ts.fWidth*fUnitFactor,1,3,3,False)} ${NumberFormat2((fi.fHStrikeThrough)*fContext.fFontSize/1000,1,3,3,False)} re f ${Chr(10)}"$) + End If + Return Me +End Sub + +'draw text on current page at position ax,ay with current font and current text color +'explicit CRLF in atext +'automatic CRLF when awidth is reached +'(0,0) is bottom left of the page +'(w,h) if top right of the page +public Sub outTextFlow(aleftMargin As Double,arightMargin As Double,aalign As String,atext As String) As cPDF + Dim mts As TPDFMultilineTextSize=gMultilineTextSize(arightMargin-aleftMargin,atext) + Dim ts As TPDFTextSize + For p=0 To mts.fParagraphs.Size-1 + Dim lines As List=mts.fParagraphs.Get(p).As(List) + For i=0 To lines.Size-1 + Dim l As String=lines.Get(i) + ts=gTextSize(l) + Select Case aalign + Case "L" + outText(aleftMargin,fContext.fy,l) + Case "C" + outText(aleftMargin+(arightMargin-aleftMargin-ts.fWidth)/2,fContext.fy,l) + Case "R" + outText(arightMargin-ts.fWidth,fContext.fy,l) + Case "J" + If i=lines.Size-1 Then + 'last line if left aligned + outText(aleftMargin,fContext.fy,l) + Else + 'other lines are justified + Dim w() As String=Regex.split(" ",l) + Dim x As Double=aleftMargin + 'calc space between each word + Dim s As Double=((arightMargin-aleftMargin)-ts.fWidth+(gTextSize(" ").fWidth*(w.Length-1)))/(w.Length-1) + For j=0 To w.Length-1 + Dim ww As TPDFTextSize=gTextSize(w(j)) + outText(x,fContext.fy,w(j)) + x=x+s+ww.fWidth + Next + End If + End Select + fContext.fX=aleftMargin + fContext.fy=fContext.fy+ts.fHeight + Next + Next + Return Me +End Sub + +'draw a line on current page from ax1,ay1 to ax2,ay2 with current width and color +'(0,0) is bottom left of the page +'(w,h) if top right of the page +public Sub outLine(ax1 As Double,ay1 As Double,ax2 As Double,ay2 As Double) As cPDF + contentAdd(fPage,$"${NumberFormat2(ax1*fUnitFactor,1,3,3,False)} ${NumberFormat2(ay1*fUnitFactor,1,3,3,False)} m ${NumberFormat2(ax2*fUnitFactor,1,3,3,False)} ${NumberFormat2(ay2*fUnitFactor,1,3,3,False)} l h S${Chr(10)}"$) + Return Me +End Sub + +'draw a rectangle on current page starting at ax,ay with dimension aw,ah,current width, color and textAndFillColor are used +'(0,0) is bottom left of the page +'(w,h) if top right of the page +'astyle : use predefined constants RectangleBorderOnly,RectangleFillOnly,RectangleBorderAndFill +public Sub outRectangle(ax As Double,ay As Double,aw As Double,ah As Double,astyle As String) As cPDF + If astyle=RectangleBorderAndFill Or astyle=RectangleFillOnly Then + contentAdd(fPage,$"${NumberFormat2(fContext.fFillColor(0),1,3,3,False)} ${NumberFormat2(fContext.fFillColor(1),1,3,3,False)} ${NumberFormat2(fContext.fFillColor(2),1,3,3,False)} rg${Chr(10)}"$) + End If + contentAdd(fPage,$"${NumberFormat2(ax*fUnitFactor,1,3,3,False)} ${NumberFormat2(ay*fUnitFactor,1,3,3,False)} ${NumberFormat2(aw*fUnitFactor,1,3,3,False)} ${NumberFormat2(ah*fUnitFactor,1,3,3,False)} re ${astyle} ${Chr(10)}"$) + Return Me +End Sub + +private Sub convertImage(adir As String,afile As String) As String + 'convert to JPG + Dim img As B4XBitmap + img=fXUI.LoadBitmap(adir,afile) + Dim out As OutputStream=File.OpenOutput(adir,afile & ".jpg",False) + img.WriteToStream(out,100,"JPEG") + out.close + + 'then convert to PNG + Dim img As B4XBitmap + img=fXUI.LoadBitmap(adir,afile & ".jpg") + Dim out As OutputStream=File.OpenOutput(adir,afile & ".png",False) + img.WriteToStream(out,100,"PNG") + out.close + + File.Delete(adir,afile & ".jpg") + Return afile & ".png" +End Sub + +'draw an image +'only PNG +public Sub outImage(adir As String,afile As String,ax As Double,ay As Double,aw As Double,ah As Double) As cPDF + Dim ii As TPDFImageInfo + afile=convertImage(adir,afile) + 'check if this image is already used + Dim k As String=imageKey(adir,afile) + Dim i As Int=findImageKey(k) + 'if not add it to the list + If i=-1 Then + 'get informations about the image + ii=imageInfo(adir,afile) + 'store it in the list + fUsedImages.add(CreateMap("path":k,"info":ii)) + i=fUsedImages.Size-1 + Else + ii=fUsedImages.Get(i).As(Map).Get("info") + End If + + File.Delete(adir,afile) + + If ii.fError=0 Then + 'originals width and height + If aw=0 And ah=0 Then + aw=-96 + ah=-96 + End If + + '-aw is horizontal resolution in dpi + If aw<0 Then + aw=-ii.fWidth*72/aw/fUnitFactor + End If + '-ah is vertical resolution in dpi + If ah<0 Then + ah=-ii.fHeight*72/ah/fUnitFactor + End If + + 'calc aw proportionnaly to ah + If aw=0 Then + aw=ah*ii.fWidth/ii.fHeight + End If + 'calc ah proportionnaly to aw + If ah=0 Then + ah=aw*ii.fHeight/ii.fWidth + End If + + contentAdd(fPage,$"q ${NumberFormat2(aw*fUnitFactor,1,3,3,False)} 0 0 ${NumberFormat2(ah*fUnitFactor,1,3,3,False)} ${NumberFormat2(ax*fUnitFactor,1,3,3,False)} ${NumberFormat2(ay*fUnitFactor,1,3,3,False)} cm /I${i} Do Q${Chr(10)}"$) + End If + Return Me +End Sub + +'add raw content to the current page +'all the positions and dimensions are in user unit +'LF is added at the end of text +public Sub outRaw(atext As String) As cPDF + If fUnitFactor<>1 Then + 'convert user unit in atext to pt + Dim shift As Int=0 + atext=atext & Chr(10) + Dim m As Matcher = Regex.Matcher("([+-]?[0-9]{1,}[\.]{0,1}[0-9]{0,})",atext) + Do While m.Find + For g=1 To m.GroupCount + Dim v As String=NumberFormat2(fUnitFactor*m.Group(g),1,3,3,False) + atext=atext.SubString2(0,m.getstart(g)+shift) & v & atext.SubString(m.GetEnd(g)+shift) + shift=shift+v.Length-m.Group(g).Length + Next + Loop + End If + contentAdd(fPage,atext) + Return Me +End Sub + +'set a document's property +'use predefined constants propertyAuthor.... +public Sub sProperty(aproperty As String,avalue As String) As cPDF + fProperties.Put(aproperty,avalue) + Return Me +End Sub + +'convert signed byte to unsigned +private Sub ToUnsigned(b As Byte) As Int + Return Bit.And(0xFF, b) +End Sub + +'get the text size with the current font and size +'fwidth : width of the text +'fTop : distance between baseline and top of the text +'fBottom : distance between baseline and bottom of the text +'fHeight : total height of the text +public Sub gTextSize(atext As String) As TPDFTextSize + Dim bb As B4XBytesBuilder + Dim ts As TPDFTextSize + bb.Initialize + bb.Append(atext.GetBytes(fTextEncoding)) + ts.Initialize + Dim fi As TPDFFontInfo=fFontsInfos.Get(calcFontKey(fContext.fFontFamily,fContext.fFontStyle)).As(TPDFFontInfo) + Dim w As Double + For i=0 To bb.Length-1 + w=w+fi.fCharsWidths(ToUnsigned(bb.InternalBuffer(i))) + Next + ts.fWidth=w*fContext.fFontSize/1000/fUnitFactor + ts.fTop=fi.fYTop*fContext.fFontSize/1000/fUnitFactor + ts.fBottom=fi.fYBottom*fContext.fFontSize/1000/fUnitFactor + ts.fHeight=ts.fBottom-ts.fTop + Return ts +End Sub + + + +'add line to TPDFMultilineTextSize and return rest of line +private Sub MultilineTextSizeAddLine(amts As TPDFMultilineTextSize,ats As TPDFTextSize,atext As String,awidth As Double) As String + Dim s As String + If ats.fWidth>awidth Then + Dim p As Int=atext.LastIndexOf(" ") + If p=-1 Then + p=atext.Length-1 + End If + s=atext.SubString(p+1) + atext=atext.SubString2(0,p) + Else + s="" + End If + amts.fparagraphs.Get(amts.fParagraphs.Size-1).As(List).Add(atext) + amts.fHeight=amts.fHeight+ats.fHeight + Return s +End Sub + +'get the size of multiline text with the current font and size +public Sub gMultilineTextSize(awidth As Double,atext As String) As TPDFMultilineTextSize + Dim mts As TPDFMultilineTextSize + Dim ts As TPDFTextSize + Dim c As Char + Dim l As String="" + mts.Initialize + mts.fParagraphs.Initialize + mts.fWidth=awidth + 'split text with CRLF + Dim paragraphs() As String=Regex.Split(CRLF,atext) + Dim p As String + For j=0 To paragraphs.Length-1 + Dim lines As List + lines.Initialize + mts.fParagraphs.Add(lines) + p=paragraphs(j) + l="" + For i=0 To p.Length-1 + c=p.CharAt(i) + If Asc(c)>31 Then + l=l & c + ts=gTextSize(l) + If ts.fWidth>awidth Then + l=MultilineTextSizeAddLine(mts,ts,l,awidth) + End If + End If + Next + ts=gTextSize(l) + l=MultilineTextSizeAddLine(mts,ts,l,awidth) + Next + + Return mts +End Sub + +public Sub sX(avalue As Double) As cPDF + fContext.fX=avalue + Return Me +End Sub + +public Sub sY(avalue As Double) As cPDF + fContext.fy=avalue + Return Me +End Sub + +public Sub gX As Double + Return fContext.fX +End Sub + +public Sub gy As Double + Return fContext.fy +End Sub + +'get the lib version +public Sub glibversion As String + Return fLibVersion +End Sub \ No newline at end of file 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/test.bas b/B4A/test.bas new file mode 100644 index 0000000..8dec78a --- /dev/null +++ b/B4A/test.bas @@ -0,0 +1,66 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Service +Version=11.5 +@EndOfDesignText@ +#Region Service Attributes + #StartAtBoot: False + +#End Region + +Sub Process_Globals + 'These global variables will be declared once when the application starts. + 'These variables can be accessed from all modules. + Dim timer As Timer +' Dim reqManager As DBRequestManager +End Sub + +Sub Service_Create + +End Sub + +Sub Service_Start (StartingIntent As Intent) + Service.StopAutomaticForeground 'Call this when the background task completes (if there is one) + timer.Initialize("Timer", 5000) + timer.Enabled = True + Starter.reqManager.Initialize(Me, Starter.server) +End Sub + +Private Sub Timer_Tick +' ToastMessageShow("Timer",False) +' Log("Next run " & DateTime.Time(DateTime.Now + Interval * 1000)) + testJobdone +End Sub + +Sub testJobdone + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_fechat" + Starter.reqManager.ExecuteQuery(cmd , 0, "fechat") + Log("sent......") +End Sub + +Sub JobDone(Job As HttpJob) + If Job.Success = False Then +' ToastMessageShow("Error: " & Job.ErrorMessage, True) + Log("Success NOT") + Else + LogColor("JobDone: '" & Starter.reqManager.HandleJob(Job).tag & "' - Registros: " & Starter.reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211110 + If Job.JobName = "DBRequest" Then + Dim result As DBResult = Starter.reqManager.HandleJob(Job) + If result.Tag = "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 + End If + Job.Release +End Sub + +Sub Service_Destroy + +End Sub 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