From 1a3a6d5ed94c2286196afc2158a484bf586d7ae6 Mon Sep 17 00:00:00 2001 From: cvaldes1201 Date: Tue, 1 Jul 2025 11:33:47 -0600 Subject: [PATCH] .... --- B4A/B4XMainPage.bas | 15 +- B4A/C_Cliente.bas | 508 ++++- B4A/C_Clientes.bas | 38 +- B4A/C_Historico.bas | 5 + B4A/C_NoVenta.bas | 10 +- B4A/C_Nota.bas | 45 +- B4A/C_NuevoCliente.bas | 13 +- B4A/C_Principal.bas | 198 +- B4A/C_Productos.bas | 3052 +++++++++++++++++++++++++----- B4A/C_Promos.bas | 759 +++++++- B4A/C_TicketsDia.bas | 186 +- B4A/Files/cliente.bal | Bin 63289 -> 63537 bytes B4A/Files/clientes.bal | Bin 5887 -> 6205 bytes B4A/Files/comis.bal | Bin 11331 -> 11769 bytes B4A/Files/contrasena.png | Bin 0 -> 293 bytes B4A/Files/fondo-rojo.jpg | Bin 0 -> 196715 bytes B4A/Files/fondo-rojo.png | Bin 0 -> 196715 bytes B4A/Files/iniciofinventa.bal | Bin 2452 -> 2450 bytes B4A/Files/login.bal | Bin 18802 -> 19876 bytes B4A/Files/logo-guna-contorno.png | Bin 0 -> 5355 bytes B4A/Files/mapa_rutas.bal | Bin 5796 -> 6246 bytes B4A/Files/nota.bal | Bin 7343 -> 7507 bytes B4A/Files/noventa.bal | Bin 6910 -> 7202 bytes B4A/Files/nuevocliente.bal | Bin 5697 -> 6091 bytes B4A/Files/principal.bal | Bin 51666 -> 58145 bytes B4A/Files/proditem.bal | Bin 5658 -> 8262 bytes B4A/Files/proditem1.bal | Bin 0 -> 5594 bytes B4A/Files/proditem_.bal | Bin 0 -> 5658 bytes B4A/Files/productos.bal | Bin 11312 -> 16658 bytes B4A/Files/productos_.bal | Bin 0 -> 12363 bytes B4A/Files/promociones.bal | Bin 9382 -> 11209 bytes B4A/Files/promociones_.bal | Bin 0 -> 9828 bytes B4A/Files/resdia.bal | Bin 46108 -> 46164 bytes B4A/Files/ticketsdia.bal | Bin 2909 -> 3609 bytes B4A/Files/usuario.png | Bin 0 -> 295 bytes B4A/Guna Vistas V3.1.b4a | 250 +-- B4A/Guna Vistas V3.1.b4a.meta | 6 +- B4A/Starter.bas | 3 +- B4A/Subs.bas | 665 +++++-- B4A/Tracker.bas | 2 +- 40 files changed, 4753 insertions(+), 1002 deletions(-) create mode 100644 B4A/Files/contrasena.png create mode 100644 B4A/Files/fondo-rojo.jpg create mode 100644 B4A/Files/fondo-rojo.png create mode 100644 B4A/Files/logo-guna-contorno.png create mode 100644 B4A/Files/proditem1.bal create mode 100644 B4A/Files/proditem_.bal create mode 100644 B4A/Files/productos_.bal create mode 100644 B4A/Files/promociones_.bal create mode 100644 B4A/Files/usuario.png diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index aedcdb9..5eae53a 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -148,8 +148,13 @@ Private Sub B4XPage_Created (Root1 As B4XView) 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)") @@ -193,8 +198,10 @@ Private Sub B4XPage_Created (Root1 As B4XView) 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_LIMITECREDITO", "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_LISTAPRECIO", "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") @@ -817,12 +824,13 @@ 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") + lv_server.AddSingleLine("http://keymon.net: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)) @@ -839,7 +847,8 @@ Sub i_engrane_Click End Sub Sub b_regesar_Click - Subs.panelVisible(p_Main,0,0) +' 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 @@ -898,6 +907,8 @@ Private Sub B4XSwitch2_ValueChanged (Value2 As Boolean) 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 diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas index 263526b..f4d0c5d 100644 --- a/B4A/C_Cliente.bas +++ b/B4A/C_Cliente.bas @@ -460,6 +460,9 @@ Sub Class_Globals Private et_comentario As EditText Private lv_comentarios As ListView Private ImageView4 As ImageView + Private p_cliente_ As Panel + Private l_limite As Label + Private l_credito As Label End Sub 'You can add more parameters here. @@ -537,11 +540,15 @@ Sub B4XPage_Appear que_modulo = 1 dentroDeGeocerca = False indicePregunta = 0 - + l_credito.Visible = False + l_limite.Visible = False 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 @@ -935,13 +942,16 @@ Sub B4XPage_Appear 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,CAT_CL_BCREDITO from kmt_info3 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + 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")) @@ -992,7 +1002,7 @@ Sub B4XPage_Appear 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,CAT_CL_BCREDITO from kmt_info3 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + 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 @@ -1062,8 +1072,9 @@ Sub B4XPage_Appear b_Inicio_Fin_venta.Visible = False ' ToastMessageShow("aaa", False) End If - gest.Text = "PreVenta" - If Subs.traeTipoVentaDeBD = "VENTA" Then gest.Text = "Venta" + 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}"$) @@ -1100,7 +1111,43 @@ Sub B4XPage_Appear '' 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 @@ -1122,7 +1169,36 @@ Sub B4XPage_Appear 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 +' If l_credito.IsInitialized Then + c=B4XPages.MainPage.skmt.ExecQuery("select IFNULL(CAT_CL_BCREDITO,0) AS CAT_CL_BCREDITO, CAT_CL_LIMITECREDITO from kmt_info3 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position = 0 + If c.GetInt("CAT_CL_BCREDITO") = 1 Then + l_credito.Visible = True + l_limite.Visible = True + l_limite.Text = c.GetInt("CAT_CL_LIMITECREDITO") + Else If c.GetInt("CAT_CL_BCREDITO") = 0 Then + l_credito.Visible = False + l_limite.Visible = False + End If +' End If End Sub @@ -1173,7 +1249,7 @@ Sub GPS_LocationChanged (Location1 As Location) End If End If If geo = "1" Then - If distance < 100 Then + If distance < 10000000000000000000000000000000 Then LA_GEO.TextColor = Colors.Blue Tels.Visible = True gest.Visible = True @@ -1325,6 +1401,7 @@ Sub GPS_LocationChanged (Location1 As Location) ' 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") @@ -1489,6 +1566,45 @@ 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)") @@ -2323,24 +2439,27 @@ Sub Guardar_Click '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 - Private suma As Float = s.GetString("TOTAL_CLIE") + s5.GetString("TOTAL_CLIE") + 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 - Private suma As Float = s.GetString("TOTAL_CLIE") + 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) 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)) + 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}')"$) @@ -2370,17 +2489,17 @@ Sub Guardar_Click 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 +' 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 @@ -2464,27 +2583,6 @@ 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")) @@ -2531,28 +2629,26 @@ Sub Impresion2 ProgressDialogShow("Imprimiendo, un momento ...") Printer1.DisConnect If Not(Printer1.IsConnected) Then - Log("Conectando a impresora ...") +' If logger Then Log("conectando 1") 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 + If cont = 7 Then Printer1.Connect 'Tratamos de reconectar + If cont > 15 Then impresoraConectada = True Loop Sleep(500) impresoraConectada = False Else - Log("conectando 2") +' If logger Then 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 + If cont > 4 Then impresoraConectada = True Loop Sleep(500) impresoraConectada = False @@ -2733,28 +2829,26 @@ Sub Impresion ProgressDialogShow("Imprimiendo, un momento ...") Printer1.DisConnect If Not(Printer1.IsConnected) Then - Log("Conectando a impresora ...") +' If logger Then Log("conectando 1") 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 + If cont = 7 Then Printer1.Connect 'Tratamos de reconectar + If cont > 15 Then impresoraConectada = True Loop Sleep(500) impresoraConectada = False Else - Log("conectando 2") +' If logger Then 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 + If cont > 4 Then impresoraConectada = True Loop Sleep(500) impresoraConectada = False @@ -2794,16 +2888,17 @@ Sub Impresion 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")) +' 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")) + s=skmt.ExecQuery2("select PE_PRONOMBRE, SUM(PE_CANT) AS PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,SUM(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 PE_CLIENTE IN (Select CUENTA from cuentaa) AND PE_COSTOU > 0.01 GROUP 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 +' If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then Printer1.WriteString(s.GetString("PE_PRONOMBRE") & CRLF) - Else +' Else - Printer1.WriteString(s.GetString("PE_CANT") & " " & s.GetString("PE_PRONOMBRE") & CRLF) +' 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 @@ -2817,22 +2912,24 @@ Sub Impresion TAMANO = 0 ESPACIO = 21 BLANCO = " " - End If +' 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") +' 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") + s=skmt.ExecQuery2("select PE_PRONOMBRE, SUM(PE_CANT) AS PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,SUM(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 PE_CLIENTE IN (Select CUENTA from cuentaa) AND PE_COSTOU = 0.01 GROUP by PE_PROID", Array As String("DUR")) + If S.RowCount>0 Then - Printer1.WriteString("------------PROMOS------------" & CRLF) + Printer1.WriteString("--------BONIFICACIONES--------" & CRLF) For i=0 To S.RowCount -1 S.Position=i - If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then +' If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then Printer1.WriteString(s.GetString("PE_PRONOMBRE") & CRLF) - Else +' Else - Printer1.WriteString(s.GetString("PE_CANT") & " " & s.GetString("PE_PRONOMBRE") & CRLF) +' 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 @@ -2846,7 +2943,7 @@ Sub Impresion TAMANO = 0 ESPACIO = 21 BLANCO = " " - End If +' End If Next Printer1.WriteString(" " & CRLF) End If @@ -2956,12 +3053,38 @@ End Sub '' printer.Close 'End Sub +Sub Printer1_Connected (Success As Boolean) +' If Logger Then Log("Printer1_Connected") + If Success Then + ToastMessageShow("Impresora conectada", False) + Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("MACIMP")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("MACIMP",Starter.mac_impresora)) +' If logger Then 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 Printer1_Error + Log("error printer") +End Sub + Sub Printer_Connected (Success As Boolean) If Success Then - B_IMP.Enabled = True +' B_IMP.Enabled = True +' PASA_IMP = "1" Else - B_IMP.Enabled = False - If Msgbox2("", "Printer Error","Reprint","Cancel","",Null) = DialogResponse.POSITIVE Then 'Ignore +' B_IMP.Enabled = False + If Msgbox2("", "Printer Error","Reprint","Cancel","",Null) = DialogResponse.POSITIVE Then 'ignore StartPrinter End If End If @@ -2969,37 +3092,39 @@ End Sub Sub StartPrinter Dim PairedDevices As Map - Dim L As List + Dim L1 As List Dim resimp As Int ToastMessageShow("Printing.....",True) PairedDevices.Initialize Try PairedDevices = cmp20.GetPairedDevices Catch - Msgbox("Getting Paired Devices","Printer Error") 'Ignore + 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 + 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) + cmp20.Connect(PairedDevices.Get(PairedDevices.GetKeyAt(0))) Catch - Msgbox("Connecting","Printer Error") 'Ignore + Msgbox("Connecting","Printer Error") 'ignore printer.Close cmp20.Disconnect End Try Else - L.Initialize + L1.Initialize For i = 0 To PairedDevices.Size - 1 - L.Add(PairedDevices.GetKeyAt(i)) + L1.Add(PairedDevices.GetKeyAt(i)) Next - resimp = InputList(L, "Choose device", -1) 'Ignore + resimp = InputList(L1, "Choose device", -1) 'ignore If resimp <> DialogResponse.CANCEL Then - cmp20.Connect(PairedDevices.Get(L.Get(resimp))) + cmp20.Connect(PairedDevices.Get(L1.Get(resimp))) End If End If End Sub @@ -4809,6 +4934,7 @@ Sub Cuestionario ' 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 @@ -5192,7 +5318,7 @@ Private Sub PDFGENERAR 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)) + 18 + 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) @@ -5221,14 +5347,14 @@ Private Sub PDFGENERAR PDF.outtext(1,pagina-multiplicador*6," ") c = skmt.ExecQuery2("SELECT * FROM PEDIDO WHERE PE_FOLIO = ?",Array As String("PREVENTA")) If c.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,"-----------------------------------------------------------------------------------------") 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 @@ -5257,9 +5383,9 @@ Private Sub PDFGENERAR ' pdf.outtext(1,108-9*6,s.GETSTRING("PE_COSTO_TOT") ) End If Next + PDF.outtext(1,108-9*6," " ) End If s.Close - PDF.outtext(1,108-9*6," " ) 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 @@ -5328,9 +5454,193 @@ Private Sub PDFGENERAR 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 @@ -5525,7 +5835,15 @@ Sub EnviarPDFWhatsAppNumero2(NumeroTelefono As String) End Sub Private Sub b_envioPDF_Click - PDFGENERAR + 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)") @@ -5726,7 +6044,7 @@ Private Sub Label19_Click End Sub Private Sub Label19_LongClick - + Dim numeroTel As String = Label19.Text numeroTel = numeroTel.Replace(" ", "").Replace("-", "").Replace("(", "").Replace(")", "") @@ -5868,4 +6186,16 @@ Private Sub StopCamera2 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 index 1e48481..70cfae8 100644 --- a/B4A/C_Clientes.bas +++ b/B4A/C_Clientes.bas @@ -42,9 +42,11 @@ Private Sub B4XPage_Created (Root1 As B4XView) Root.LoadLayout("clientes") 'Dim ruta As String entro ="2" - p_clientes.Height = Root.Height + 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 @@ -70,17 +72,24 @@ Sub B4XPage_Appear 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 = 13 - label1.TextColor = Colors.Black + label1.TextSize = 20 + label1.TextColor = Colors.White Dim label2 As Label label2 = ListView1.TwoLinesLayout.SecondLabel - label2.TextSize = 13 - label2.TextColor = Colors.Black + 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 @@ -135,7 +144,7 @@ Sub ListView1_ItemClick (Position As Int, Value As Object) 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 + 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) @@ -159,19 +168,26 @@ 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 = 9 - label1.TextColor = Colors.Gray + label1.TextSize = 20 + label1.TextColor = Colors.White Dim label2 As Label label2 = ListView1.TwoLinesLayout.SecondLabel - label2.TextSize = 17 - label2.TextColor = Colors.Gray - ListView1.AddTwoLines(c2.GetString("CAT_CL_CODIGO"), c2.GetString("CAT_CL_NOMBRE") &" CALLE: "& c2.GetString("CAT_CL_CALLE")) + 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" diff --git a/B4A/C_Historico.bas b/B4A/C_Historico.bas index a277a14..96b581e 100644 --- a/B4A/C_Historico.bas +++ b/B4A/C_Historico.bas @@ -30,6 +30,8 @@ Sub Class_Globals 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. @@ -55,6 +57,9 @@ 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) diff --git a/B4A/C_NoVenta.bas b/B4A/C_NoVenta.bas index 73aa460..a8eda6e 100644 --- a/B4A/C_NoVenta.bas +++ b/B4A/C_NoVenta.bas @@ -33,6 +33,7 @@ Sub Class_Globals 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. @@ -58,13 +59,20 @@ 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 = True + r_1.Checked = False + r_2.Checked = False + r_3.Checked = False + r_4.Checked = False End Sub Sub GPS_LocationChanged (Location1 As Location) diff --git a/B4A/C_Nota.bas b/B4A/C_Nota.bas index acd5e02..88cc0e1 100644 --- a/B4A/C_Nota.bas +++ b/B4A/C_Nota.bas @@ -35,6 +35,7 @@ Sub Class_Globals 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. @@ -64,6 +65,9 @@ Sub B4XPage_Appear 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") @@ -76,6 +80,7 @@ Sub B4XPage_Appear 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 @@ -83,25 +88,33 @@ Sub B4XPage_Appear c.Position=i Dim label1 As Label label1 = ListView1.TwoLinesLayout.Label - label1.TextSize = 15 + label1.TextSize = 20 label1.TextColor = Colors.Black label1.color = Colors.White - Private textColor As Int = Colors.black - If c.GetString("PE_CEDIS").Contains("PRO") Then textColor = Colors.RGB(210,105,30) 'Si es promo, cambiamos el color del texto. - If Not(IsNumber(c.GetString("PE_CEDIS"))) Then textColor = Colors.RGB(210,105,30) 'Si es promo, cambiamos el color del texto. + 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 = 10 - label2.TextColor = Colors.Blue - ListView1.AddSingleLine(cs.Color(textColor).Size(12).append(c.GetString("PE_PRONOMBRE") & " ").pop.Append(CRLF).Size(8).Color(Colors.Blue).Append("Cantidad #"& c.GetString("PE_CANT")).Append(" SubTotal $"& c.GetString("PE_COSTO_TOT")).Append(" " & c.GetString("PE_FOLIO")& " " &c.GetString("PE_CEDIS")).PopAll) + 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 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 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("PC_NOART") - L_TOTAL.Text = NumberFormat2(c.GetString("PC_MONTO"), 1, 2, 2, True) + 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 @@ -121,8 +134,6 @@ Sub B4XPage_Appear L_TOTAL.Text =NumberFormat2(s.GetString("TOTAL_CLIE") + s5.GetString("TOTAL_CLIE"),0,2,2,True) - - s.Close @@ -234,6 +245,8 @@ Sub borra_Click 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 = "" @@ -349,7 +362,13 @@ Sub ListView1_ItemLongClick (Position As Int, Value As Object) Next ' Log(nom) nom = nom.Trim - Private cedis As String = X(X.Length-1) + 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) diff --git a/B4A/C_NuevoCliente.bas b/B4A/C_NuevoCliente.bas index bcdc4cd..dd8ba71 100644 --- a/B4A/C_NuevoCliente.bas +++ b/B4A/C_NuevoCliente.bas @@ -55,12 +55,13 @@ Sub B4XPage_Appear StartActivity(Starter.gps.LocationSettingsIntent) End If GUARDA.Visible = False - Subs.panelVisible(p_nuevoCliente, 0, 0) - p_nuevoCliente.Height = Root.Height - p_nuevoCliente.Width = Root.Width - Subs.centraEtiqueta(Label1, Root.Width) - Subs.centraEtiqueta(l_sinUbicacion, Root.Width) - Subs.centraPanel(p_botones, Root.Width) +' 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. diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index 6c30838..c28dd45 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -241,6 +241,12 @@ Sub Class_Globals 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. @@ -303,7 +309,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) If Subs.traeTipoVentaDeBD = "VENTA" Or Subs.traeTipoVentaDeBD = "ABORDO" Then If l_ruta.Text <> "0" Then Log(999 & "|" & l_ruta.Text & "|") - b_abordo.Visible = True + b_abordo.Visible = False End If Else b_abordo.Visible = False @@ -329,7 +335,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) 'where pc_fecha = ?", Array As String(fecha) c.Position=0 b.Position=0 - L_MONTOD.Text = c.GetString("MONTO_DIA") + 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") @@ -368,6 +374,8 @@ Sub B4XPage_Appear 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) @@ -453,7 +461,7 @@ Sub B4XPage_Appear b=B4XPages.MainPage.skmt.ExecQuery("select count( distinct NV_CLIENTE) as CUANTOS from noventa") c.Position=0 b.Position=0 - L_MONTOD.Text = c.GetString("MONTO_DIA") + 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 @@ -477,14 +485,14 @@ Sub B4XPage_Appear 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 +' 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 @@ -533,6 +541,7 @@ Sub B4XPage_Appear End Sub Sub Subir_Click + checaPedido CARGA = "SUBIR" P1.Visible = True P1.BringToFront @@ -549,6 +558,10 @@ Sub Subir_Click 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" @@ -585,15 +598,15 @@ Sub Subir_Click 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 ") + 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_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") ) + 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 @@ -644,6 +657,21 @@ Sub Subir_Click 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 @@ -825,7 +853,7 @@ Sub Subir_Click 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 =True + 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 @@ -921,7 +949,7 @@ Sub cargar_Click 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 +' img2.Visible =True L_P_1.Visible = True S_CC.Visible = True Btn_Ubicar.Visible=False @@ -930,6 +958,11 @@ Sub cargar_Click 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 @@ -956,6 +989,7 @@ Sub cargar_Click 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") @@ -1027,6 +1061,11 @@ Sub cargar_Click 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) @@ -1060,6 +1099,15 @@ Sub cargar_Click 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) @@ -1075,6 +1123,7 @@ Sub cargar_Click 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) @@ -1139,6 +1188,7 @@ Sub cargar_Click 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 #################### @@ -1229,6 +1279,8 @@ Sub cargar_Click 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") @@ -1276,6 +1328,21 @@ Sub JobDone(Job As HttpJob) 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 @@ -1319,12 +1386,15 @@ Sub JobDone(Job As HttpJob) 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")) + Dim CAT_CL_LIMITECREDITO As String = records(RESULT.Columns.Get("CAT_CL_LIMITECREDITO")) + '########################## 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) 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)) + 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,CAT_CL_LIMITECREDITO) 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,CAT_CL_LIMITECREDITO)) '########################## 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 @@ -1333,7 +1403,7 @@ Sub JobDone(Job As HttpJob) 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 +' B4XPage_Appear img2.Visible=False EJECUTANDO=0 End If @@ -1366,9 +1436,10 @@ Sub JobDone(Job As HttpJob) 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) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,?,?)", Array As Object (CAT_CL_CODIGO,E_RUTA2.Text,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)) + 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)) @@ -1377,7 +1448,7 @@ Sub JobDone(Job As HttpJob) 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 +' B4XPage_Appear img2.Visible=False EJECUTANDO=0 End If @@ -1688,9 +1759,11 @@ Sub JobDone(Job As HttpJob) ' 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_LISTAPRECIO As Int = records(RESULT.Columns.Get("CAT_LISTAPRECIO")) + Dim CAT_LISTAPRECIO As Int = 10 ' 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)) + 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,CAT_LISTAPRECIO) 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_LISTAPRECIO)) Next Listo2=1 If PB2.Progress = 0 Then @@ -1704,7 +1777,7 @@ Sub JobDone(Job As HttpJob) 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 +' B4XPage_Appear img2.Visible=False EJECUTANDO=0 End If @@ -1747,7 +1820,7 @@ Sub JobDone(Job As HttpJob) 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 +' B4XPage_Appear img2.Visible=False EJECUTANDO=0 End If @@ -1795,11 +1868,11 @@ Sub JobDone(Job As HttpJob) ' 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 +' B4XPage_Appear img2.Visible=False EJECUTANDO=0 Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then - B4XPage_Appear +' B4XPage_Appear img2.Visible=False EJECUTANDO=0 End If @@ -1838,11 +1911,11 @@ Sub JobDone(Job As HttpJob) ' 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 +' B4XPage_Appear img2.Visible=False EJECUTANDO=0 Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then - B4XPage_Appear +' B4XPage_Appear img2.Visible=False EJECUTANDO=0 End If @@ -1877,11 +1950,11 @@ Sub JobDone(Job As HttpJob) End If Listo3 =1 If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then - B4XPage_Appear +' B4XPage_Appear img2.Visible=False EJECUTANDO=0 Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then - B4XPage_Appear +' B4XPage_Appear img2.Visible=False EJECUTANDO=0 End If @@ -1913,7 +1986,7 @@ Sub JobDone(Job As HttpJob) 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 +' B4XPage_Appear img2.Visible=False EJECUTANDO=0 End If @@ -2295,6 +2368,7 @@ Log("--------> BORRAMOS") 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") @@ -2371,6 +2445,7 @@ Sub e_ruta_EnterPressed e_ruta.Text = "" E_RUTA2.Visible = True p_ruta2.Visible = True + p_somvra_2.Visible = False End If End Sub @@ -2448,9 +2523,12 @@ Sub B_OK_PAS_Click Resumen.Visible= True img2.Visible=False CARGA = "" - Subs.panelVisible(p_principal, 0, 0) +' 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 @@ -2460,7 +2538,7 @@ Sub B_OK_PAS_Click connecta.Visible=True Resumen.Visible= True img2.Visible=False - Subs.panelVisible(p_principal, 0, 0) +' 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 @@ -2471,7 +2549,7 @@ Sub B_OK_PAS_Click connecta.Visible=True Resumen.Visible= True img2.Visible=False - Subs.panelVisible(p_principal, 0, 0) +' Subs.panelVisible(p_principal, 0, 0) ExitApplication End If End If @@ -2484,7 +2562,11 @@ Sub B_OK_PAS_Click connecta.Visible=True Resumen.Visible= True img2.Visible=False - Subs.panelVisible(p_principal, 0, 0) + + 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 @@ -2518,6 +2600,7 @@ Sub B_OK_PAS_Click 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 @@ -2528,7 +2611,8 @@ Sub B_OK_PAS_Click connecta.Visible=True Resumen.Visible= True img2.Visible=False - Subs.panelVisible(p_principal, 0, 0) +' 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") @@ -2546,7 +2630,7 @@ Sub B_OK_PAS_Click If Subs.traeTipoVentaDeBD = "VENTA" Or Subs.traeTipoVentaDeBD = "ABORDO" Then If l_ruta.Text <> "0" Then Log(888 & "|" & l_ruta.Text & "|") - b_abordo.Visible = True + b_abordo.Visible = False End If Else b_abordo.Visible = False @@ -2590,7 +2674,7 @@ Sub CARGA_Click End Sub Sub resdia_Click - p_principal.Visible = False +' p_principal.Visible = False Btn_Ubicar.Visible=False SCROLL_RESDIA.Visible = True SCROLL_RESDIA.Panel.LoadLayout("RESDIA") @@ -2697,7 +2781,7 @@ Sub resdia_Click 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.GetString("TOTAL_CLIE"), 0, 2, 2, False) + l_ru_pri.Text = NumberFormat2(ru_o.GetDouble("TOTAL_CLIE"), 0, 2, 2, False) End If ru_o.Close @@ -2710,7 +2794,7 @@ Sub resdia_Click Private RuSu As String = ru_s.GetString("PE_RUTA") Label4.Text = "Ruta " & RuSu ru_s.Position = 0 - l_ru_sup.Text = NumberFormat2(ru_s.GetString("TOTAL_CLIE"), 0, 2, 2, False) + l_ru_sup.Text = NumberFormat2(ru_s.GetDouble("TOTAL_CLIE"), 0, 2, 2, False) End If ru_s.Close @@ -2862,6 +2946,8 @@ Sub B_COMM_Click 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 @@ -2870,7 +2956,7 @@ Sub B_COMM_Click 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 @@ -2889,6 +2975,7 @@ Sub B_COMM_Click L_TOTAL_VIVE.Text = 0 L_TOTAL_COMIS.Text = 0 End If + End Sub Sub B_OK_COMISS_Click @@ -3029,4 +3116,35 @@ 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 index 571d1ff..ddb9153 100644 --- a/B4A/C_Productos.bas +++ b/B4A/C_Productos.bas @@ -4,13 +4,836 @@ 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 forzarBusqueda As Boolean = False Dim skmt As SQL Dim c As Cursor Dim c2 As Cursor @@ -55,8 +878,47 @@ Sub Class_Globals 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 rutaActual As String + 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. @@ -74,79 +936,317 @@ Private Sub B4XPage_Created (Root1 As B4XView) 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 - 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.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 - clv_productos.AsView.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 - 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 + clv_prods_ll.AsView.Visible = False lv_catalogos.Visible = True p_botonesVenta.Visible = False - p_botonesVenta.Top = clv_productos.AsView.top + clv_productos.AsView.Height + 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 = 13 - label1.TextColor = Colors.Black + 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 ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_TIPOPROD = 'PROMOS'"$) +' 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 - 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. + + 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_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 -' llenaCatalogo(False) + + +End Sub + +Sub PCLV_AddProds + End Sub Sub lv_catalogos_ItemClick (Position As Int, Value As Object) - clv_productos.AsView.Visible = False + 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}"$) @@ -159,122 +1259,131 @@ Sub lv_catalogos_ItemClick (Position As Int, Value As Object) 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 + 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 ${Subs.traeTablaProds(tipo_venta)} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD <> 'PROMOS'"$) + 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 -' 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 + 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("--PROMOS--") - clv_productos.AsView.Visible = False + 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 = 13 + label1.TextSize = 15 label1.TextColor = Colors.Black Dim label2 As Label label2 = lv_promos.TwoLinesLayout.SecondLabel - label2.TextSize = 13 + label2.TextSize = 15 label2.TextColor = Colors.Black Dim label13 As Label label13 = lv_promos.TwoLinesAndBitmap.Label - label13.TextSize = 13 + label13.TextSize = 15 label13.TextColor = Colors.Black Dim label14 As Label label14 = lv_promos.TwoLinesAndBitmap.SecondLabel - label14.TextSize = 13 + label14.TextSize = 15 label14.TextColor = Colors.Black 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}"$) + 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. - 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 + 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 - yaComproPRO2265 = False + +'' 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" -' 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 + clv_prods_ll.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" @@ -284,115 +1393,53 @@ Sub lv_promos_ItemClick (Position As Int, Value As Object) 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 - lv_catalogos.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" + 'xxxxxxxxxxxxxxxxxxxxx Else If entro = "4" Then - Log("Entro = 4") +' 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.laPromo = Subs.traeProdIdDeBD.Get("id") promos.elCliente = Subs.traeUsuarioDeBD B4XPages.ShowPage("Promos") 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 +'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 -' ya_entro ="0" : Log("ya_entro=0") - If lv_catalogos.visible = True Then - B4XPages.ShowPage("Cliente") - Return False - ELSE If l_info.Visible Then + 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 @@ -400,13 +1447,25 @@ Private Sub B4XPage_CloseRequest As ResumableSub l_total.Visible = False l_totProds.Visible = False Return False - else if clv_productos.AsView.Visible Then - clv_productos.AsView.Visible = False - lv_catalogos.Visible = True + 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 @@ -420,80 +1479,29 @@ Private Sub B4XPage_CloseRequest As ResumableSub 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 - lv_promos.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 @@ -501,258 +1509,437 @@ 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 +' 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 - LogColor("b_prodMenos_Click", Colors.Magenta) - Dim index As Int = clv_productos.GetItemFromView(Sender) - Dim pnl0 As B4XView = clv_productos.GetPanel(index) + 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(3) - Dim esteTag As List = Regex.Split("\|", laCant.Tag) + 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}"$) -' laCant.Text = laCant.text.Replace (",", "") If laCant.Text = "" Then laCant.Text = 0 - laCant.Text = NumberFormat2(laCant.Text - 1, 1, 0, 0, False) +' Log("lacant.text="&laCant.text) + laCant.Text = $"${NumberFormat2(laCant.Text-1,0,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) + 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 - LogColor("b_prodMas_Click", Colors.Magenta) - Dim index As Int = clv_productos.GetItemFromView(Sender) - Dim pnl0 As B4XView = clv_productos.GetPanel(index) + 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(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) + 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 -' 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 + 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}"$) -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" +' 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 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. +' 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 - If HasFocus Then - Dim index As Int = clv_productos.GetItemFromView(Sender) - Dim pnl0 As B4XView = clv_productos.GetPanel(index) + 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(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 + 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 - 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}"$) +' 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 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") +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_productos.AsView.Visible = False + clv_prods_ll.AsView.Visible = False lv_catalogos.Visible = True - Log("Terminar") -' clv_productos.Clear - ponProdsEnCero - prodsMap.Initialize - B4XPages.ShowPage("Cliente") -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, rutaActual, 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, rutaActual, 0, B4XPages.MainPage.tipo_venta) - Next - End If + 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 - c2.Close + 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 + 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) -' 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 +' Subs.guardaProductoSinGestion(Subs.traeAlmacen, p1.Get("precio"), p1.Get("cant"), pn, p, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta) ' Next - etCantHasFocus = False +' BUSCA.Text = "" Log("promos-inv, prods-inv, cat-vis") lv_promos.Visible = False - clv_productos.AsView.Visible = False + clv_prods_ll.AsView.Visible = False + lv_subtipo.Visible = False + lv_tipo.Visible = False lv_catalogos.Visible = True -' clv_productos.Clear - ponProdsEnCero - prodsMap.Initialize Log("Continuar") -' Activity_KeyPress(KeyCodes.KEYCODE_BACK) + 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 +' Log("longclic = "&Sender.as(Label).tag) +' l_info.Text = Sender.as(Label).tag +' l_info.Visible = True End Sub Private Sub l_info_Click @@ -762,25 +1949,962 @@ 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}'"$) + 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") - 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("","") +'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 -' 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 +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"$) + + If Subs.traeTipoCliente = "4" Then + Dim p As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select distinct CAT_GP_ID, CAT_GP_NOMBRE, CAT_LISTAPRECIO, 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"$) + Else + 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 + + + + 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 Subs.traeTipoCliente = "4" Then + 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_LISTAPRECIO"), _ + "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 + Else + 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 + 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 index 9c80a1d..e7f5e99 100644 --- a/B4A/C_Promos.bas +++ b/B4A/C_Promos.bas @@ -4,23 +4,425 @@ 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 As CustomListView + Private clv_prodsVariabes, clv_prodsVariabes2 As CustomListView Private l_prodsFijos As Label - Private l_prodsVariables As Label + Private l_prodsVariables, l_prodsVariables2 As Label Private i_prod As ImageView Private l_prodX As Label - Private b_prodMenos As Button + Private p_prods As Panel + Private b_prodMenos, b_prodMenos2 As Button Private et_pCant As EditText - Private b_prodMas As Button + 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 @@ -37,8 +439,12 @@ Sub Class_Globals Private et_promoCant As EditText Private l_promosCant As Label Private b_continuar As Button - Private p_prodsVariables As Panel + 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. @@ -51,44 +457,80 @@ 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 - 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) + 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 - Log($"laPromo=${laPromo}, el cliente=${elCliente}"$) + 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 - Log(promo) +' 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}"$) - Log("Max promos por inv de prods FIJOS: " & Subs.revisaMaxPromosProdsFijosPorInventario(mp)) - Log("Max promos por inv de prods VARIABLES: " & Subs.revisaMaxPromosProdsVariablesPorInventario(mp)) + 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 - l_promosCant.text = "Max promos: " & maxCantPromos + + 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 @@ -97,6 +539,7 @@ Sub muestraPromo(promo As String, cliente As String) '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) @@ -106,8 +549,12 @@ Sub muestraPromo(promo As String, cliente As String) ' tpf = tpf * maxCantPromos l_prodsFijos.Text = $"Productos fijos (${tpf})"$ prodsVarReq = mp.Get("prodsVariablesRequeridos") - prodsVarReq2 = prodsVarReq + 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 @@ -132,20 +579,61 @@ Sub muestraPromo(promo As String, cliente As String) ' Dim jpeg() As Byte 'Llenamos el listview con los productos variables. - If thisLog Then Log(pv) + 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_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) + 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 @@ -168,7 +656,7 @@ Sub agregaFijosALista(mp As Map, addListItem As Boolean) prodsCants.Add(et_promoCant.text.As(Int)) prodsPrecios.Add(0) For Each p As String In pf - Log($"cont=${cont}, mp=${mp}"$) +' 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 @@ -195,14 +683,41 @@ 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 + 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 @@ -211,23 +726,89 @@ Sub b_prodMenos_Click 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) + 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 -' Dim chk As B4XView = pnl.GetView(2) + +' 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 totalProds < prodsVarReq + tpf Then + 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(3) + 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) @@ -236,26 +817,38 @@ Sub b_prodMas_Click 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") +' Log("=====================================================") +' Log("Inicia cuentaProds") Private thisLog As Boolean = False - If thisLog Then LogColor($"ProdsFijos=${tpf}, totalProds=${totalProds}, totalCompra=${totalCompra}"$, Colors.Red) +' 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. @@ -263,37 +856,55 @@ Sub cuentaProds 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) +' 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(3) + 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) +' 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 + '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 + tpf Or totalProds > prodsVarReq + tpf Then + If totalProds < prodsVarReq + prodsVarReq2 + tpf Or totalProds > prodsVarReq + prodsVarReq2 + tpf Then ' Log("INCOMPLETA") b_terminar1.Visible = False b_continuar.Visible = False @@ -304,7 +915,7 @@ Sub cuentaProds 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) +' LogColor($"Total Prods: ${totalProds}, Total: $$1.2{totalCompra}"$, Colors.Blue) End Sub Private Sub et_pCant_FocusChanged (HasFocus As Boolean) @@ -317,20 +928,46 @@ Private Sub b_promoMenos_Click 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)}"$ + 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 = prodsVarReq2 * 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: ${prodsVarReq2 * 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 = prodsVarReq2 * 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 @@ -340,39 +977,55 @@ 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) + 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.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) + 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("Cliente") + B4XPages.ShowPage("productos") + B4XPages.MainPage.productos.b_terminar1_Click 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 + 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 - 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 + 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) diff --git a/B4A/C_TicketsDia.bas b/B4A/C_TicketsDia.bas index 5430749..d45ba43 100644 --- a/B4A/C_TicketsDia.bas +++ b/B4A/C_TicketsDia.bas @@ -16,6 +16,8 @@ Sub Class_Globals 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. @@ -29,7 +31,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) 'load the layout to Root ruta = File.DirInternal Root.LoadLayout("ticketsdia") - ListView1.Left = Round(Root.Width/2)-(ListView1.Width/2) +' 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 @@ -38,14 +40,20 @@ Private Sub B4XPage_Created (Root1 As B4XView) 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 = 10 - label1.TextColor = Colors.Black + 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 = 15 - label2.TextColor = Colors.Blue + 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 @@ -55,39 +63,82 @@ End Sub Sub B4XPage_Appear nombre_boton = "NOVENTA" - 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") + L_ventanoventa.Text = "Clientes con venta" ListView1.Clear - If c.RowCount > 0 Then - For i = 0 To c.RowCount - 1 - c.Position = i - - 'AQUI CAMBIAR + 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") - 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) + + 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, 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")) + + 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 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")) + 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 - Private suma As Float =NumberFormat2( s.GetString("TOTAL_CLIE") + s5.GetString("TOTAL_CLIE"),0,2,2,False) + + + + + 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"))) + Private s As Cursor=B4XPages.MainPage.skmt.ExecQuery2("select iFNULL(sum(pe_costo_tot),0) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE = ?", Array As String(C.GetString("PC_CLIENTE"))) s.Position=0 - Private suma As Float = NumberFormat2( s.GetString("TOTAL_CLIE"),0,2,2,False) + + 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 - 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("PC_CLIENTE"),c.GetString("NOMBRE") &" Cantidad #"& c.GetString("PC_NOART")& " SubTotal $"& NumberFormat2(suma,0,2,2,False)) + + + Next End If c.Close @@ -127,7 +178,8 @@ Sub b_noventa_Click If nombre_boton = "NOVENTA" Then nombre_boton = "VENTA" b_noventa.Text ="VENTA" - c=B4XPages.MainPage.skmt.ExecQuery("select NV_CLIENTE,NV_MOTIVO,NV_COMM, (select CAT_CL_NOMBRE from kmt_info3 where cat_cl_codigo = NV_CLIENTE ) as NOMBRE FROM NOVENTA ORDER BY NV_CLIENTE asc") + 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 @@ -146,21 +198,73 @@ Sub b_noventa_Click Else nombre_boton = "NOVENTA" b_noventa.Text ="NO VENTA" - 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") + 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 - 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("PC_CLIENTE"),c.GetString("NOMBRE") &" Cantidad #"& c.GetString("PC_NOART")& " SubTotal $"& c.GetString("PC_MONTO")) + 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 diff --git a/B4A/Files/cliente.bal b/B4A/Files/cliente.bal index 10b7ab360a356c3d1606797da5affdc397339a49..44587ee37c7ad1286fd3ac04f972c2c3faa2e29f 100644 GIT binary patch literal 63537 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�T4dj8~`wVqw(6t4C*B+>Xx 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 literal 63289 zcmeHw34B{unXi>Pi`;a9Zh2?;I>7MC47@j;QkwVwe^>XM zd!&1%D@%##Q04bseP{d5IsflF-`TE}`Atnt&mG^?)PnCn0xbeX#|o)^sls)LZfbV| zm**1G)5#p;M&pUGG)Bml#c^iwz{|5~diHt&=@Z$EhG0sbI?>CK71?TF50kTzscp zUlCcFWIDbrnaL;iB<-QrI|ZZ5X9;K@jF~M;#|x=KtT?QxQ;C>KXN?ken+n-NB3&$W zKoznp-IvVe;fka+iFh|WpA55f0?kiL7H~5hhg24$CE)l-4oO5N$Ft<<`eFkPH#p4l zeTjG`J2je1(qfP`pGc2qvv9f8r4vRAr4&)_V50@!j#Zj<#R}4PhSfU58qKcN>^jY^ z*X#z(p0DcFVmo!cof}m8YQ?Ql+*-x0Q`~yR>9S&D>3zV|8C-c8r+uk>!R0)t1t*GD z*1tWrV}Q(bd@L~~hB%nW7=|cemXj=rT!NT`Ps4T#f;j@JR*Gbl>~2cYFVUV)* zZWrI<;$z@9fi{D-xcFWdztzQG>f-xc{5BWg@8Sns{Gf}!%*7A6_+b}6;^Mcv_#H0( zauIe)@z=Qcoi0A^;&-|Dgo___@nbH2+{Gtd{B9RN;o>JlNx%iBW&${?&7k{mb&$;-#i!Xqm0qq0r2RSx;0Q_~J>p?fT_}9DmH@Ns4 zUHlte{7o+YW*2{pi@(*yzsbeF*~Q=H;%|5HZ*lQ&b@6X=@priRJ6-(SUHm&-{5!$l z1$r0gZWn)#i+{I^zt_dz2mU>v_k!LBa>m{J!8_RA@8ai!KNf_2RN~y-+01yheL5ri zsT5b~d4^tz^i&}^H7Z--(ezA`u`G3M&RHI`@0p%>1!686a?P*ImJc;Gz2=TZNaAGm z=6n8W&(~I+c>Cu+7X6d9^+QX#_xx`4`nx{ymQUUMmLKidclqPL`RL7S&h9Pz{JTF) zfAYs4JZEa={<|h0{Ps_O`}{Y1AOH0mezN(_2iM+rV*V3%wcUO4_kaDtdrw|{%d6h~ z_wj4n{{6HsY`SvEUoBpG^^LKohaWs~<-xmtwB@`|@>3sf9{ltVUc2X_5B6v@Om@Ed^XEOiUp;nB*O!m`-WwkJLUzx{dy`#9|MJBr-*NYf$dw=b#tGMb z>)+;$KC$`q`yYRH-NrAidEfnSz53Tz$M1de$tNDZ?y38K`@MJmV&|rZn!28O_i5KZ z|BAnObk`F`#oQlgq)E3hybVVOf>V z=A6(e6z>!>la5BxXf`*V#4!m<=-}n4@xmmn6x)$(Zm}>qw4ZCR8CitlIEC92Hm?QA zeX&g=@uA+$TSgWll+3V+<6*Kq5$I1$CE0kV=Pa>%CY{C-ESbzud@3`Ro*Bo+tB{tQ zdlLH+#E=+eP@1UPYgjNcrf>kk24X*!PM!>=H?upNo5BgtqYr1S!5jpprW0w_Bw3_` zY}>w6K841yIs0&KlgJcSv66IhcY#B-ke#O3{RDuOP9{?mld`{_#A(H3HYYM{mKiVD zn;Pe6Yg+XxJW4e}b<0Be7$mj}SKQ8ac;t38W-ICPRAI6^OVsmDf&iLM?i1LlS91xk zR`+b?8M?Gwny}YJ7F%R3$_Q>y4-#!e5C)3zHF$N%>%HrdW)k!KhQcivv z_IN5Uw&27ahq$77xTCn!&L_v6D7&NS)O0>|z1TqiK!1!LaWr0fP(`DK3oS(VW3O(T z8G|fHZ7Ywo_3?bc%W4F9OXE%n$^MEj& z>`P^mRCc~_oxM@-9~jye?UMnF^Bx+o-7ISd2L)SSK)l!-4UMCGH;y?eyeGCPy1j3N z!uP4R5tU-wcEpB8db^{2w5bk1o05IF*pzUtBa%dVdQuMW?DGLOkz3y zQO^Jq^d5WtJOsN387YT1`kaMPYl(rJe6ds8aL}?lHI`t?I;P0JnIYMWkH&dq$RV`7 z3;h{lf^5xY6m)WX;5Ay*u@lu*c1m@YM=8f<+PhK(ROtklu>81Vn`RnO*_}!!z2{hJ zX(E^4p*6LnTGYYL*!x5Z=o;wj@pJLcv7fkhCs5Q9#TQQvX(;eoW67RuM$CLNl_@Zi z-(o!sq%zYp1v*1oNl&c17p52Q-@dIYHZ)8{@Q`;uyf_=R9|!ASOVYEpPBWAM?dpfBIQM%O=>$AH1dO3!;i}O;SYmEnlo^PkGrNDuap#f_fjt+VU`lHmgeaJy8&`1$ z=a`iW7{Td3OA2^vCAG)egt31KhgQcbZiT&o)29*acDoK1t%mw>9cwU{%3yBTBJ-2T zmZNI4b8uL|!QpqbulLHRg$PNP15b6dRKAilI<}g4mEO&;WA2rTUP6vy~ zu_I%0VKA8E2`J8&^XDSYOAEU2N}KIT6cU?rsc~Xs3*kVt5aQZ>UuXN?p8RBDG?h-_ zc9I!z&w<;`u|&JHWj#HUb9l|V>{~?YOkyRI*wmN<^@=Q9PrT?%aoERx{ zKAQ^>_DMK1nVVeJH7KXV?ETp@R=U^-0M!L-l5~t+gFg-5szu0bRj3mi@ zhA67XnXfKT33B1kKd`N9D5fLj-b!W%x_%wMjt%G@=o{$ojq2F*85 za>0TN6`Gq9q_Ud$4N^A|{t z;>8#?8N7&-sMYe+H!vIMqeghaWwBZqTiWV*^b-lmCKo{%(@d6#b!<8BB)MhTff+q& zMZ33e+uj%LiOQm4TTEuC&h^a5yEe9ZxVPWhG%zwCA~sONUA$AKlYjQ+JF%A0)ZHbS zddGCSaZ- zYh8+E|B&R7ThDHF#mu#4w{7v(Q1V)=wg4$6edmOJt+B^< z@kWr{lx?)6iLaEIVITJuEIXJ>isB`G9mkjXet@k~`VGszypfFSC8Ke#&c!58jjW!e zRlJs$tYQ?HJ=E=$Z1*v9u?2k3L2{k1?N(d~ZcCEbc4e8k#)a|u5+PT{ILs&>Z5h+X z8g3%ZeXMco#C9UteXn&AqC78N*-N`HeG)Hkc{1RAt^3DF=}TAwtaV)iD~!UU4_YZH zmawj~GFdC1w5Dg0ScOa#w>r6VtbEGKIT}{c>BKqKwDQV;ZYGnu7V}Ng!VF+xY~*L) z3UKm(JmQ?QqquEK=9o10=)-(Ng^QhpdP@ao813vOCWrF-Y)&#>_uOKIKGN)osazI) z4wUWtvJ6eGxTMR`f0>FZzBi*UFSS*yrQSG!NzZKc>C|->BXu}w?MqldUZy!>VP`{x zC1*K>tc4mZI2oLt6}K>%N59B-A1da6;wGV9h+=1>b_k~D3|YUGpL6L=XW8xqifcRqWL}*Upxudl z!QPt0>?1zHUc7*2qs3mGYL&V>WvQxN2)A8LO*dT<0rMj}&=lr3okf^a8s~w~U5KJT zWJFV#otAWpr4|+(Vl+r3Q0WT};lue@Vu($cjpC=7{h1%4QHI%Fc4mGP;hG=fTqdwL-{-)*?c(8z6H5B`PHiD`t76PGz zcnAWlQuRcjVCL6?77HGPP2r(>s=8z2Aswek4GaP{Fk~b>2Oum2LjCBgYK@Y_e5Jsw zM4SL~4j2v0xlVLDnDan3j6v|C4o$pP)mHw{QB6{wQ1R2;fk!>{i;zw{!>jRd8SEMa z*D{_axef%a?uxEw%mzFZf))Z|b)ruqCHi~;%=sWGE{dfT9o1QPX(_uPj zrR|LfgfGD(0+LZC`u`;K7-doy9^GVm@KAbmSp)}%wg~D^1bhzy#3DG`q2R~Iyd2uOM&P%;z+Ro8_%I?wp+p+h2I1q!RtYat-* zmYxterB(1nU0e!o&NR@6%1bp639bS5!qfl-)}VoH$Q}VLI5d9mFKg6*IU1fR(*V;g zP*n}|Bh#E|U;vdjR09-Pg9ZkXJp$4im_#Vp7%(+(tD}J>uyh#%fi-X$s+=?5vbDi!0E-D9%@`Q zJf1p3Rt@EXYFs|t(PS?_$_1f`P0e1j)(8?x?ZtN;u>zURbp&fNeI^B(_7Y$nu^ojX zAX!C==iG^5S8d$tajDl4k2_XFV=~7rTi*%_LA2N0wFA+Ah*tBNwl*L010dd3b2$>~ zu$l~tn^r@CHCqh}ML_ji%|XX%j)iU1W;Iu!0WVt(7MW^W4M4oD=51pn4SKZh(wkw* zm919`7;ebI%&dD)EX>|BqiVD7R+gfq_v=E%-ZNx@LY#r6HSCy@1irX^ih;Ac8Ds;y z2)QdQOemKh&xt>Ygwnxyliy~EQ>VFIB^0I$r$7@t*LHO`5*3yk5s-t22$%(jj^Fl( zz(tW!CUxP_O{NDAg;I6AiLMO8z<6JZ5;oow;HZ@FBp$BOlR~f*rd`oJh@IcGp82=p zAu7eUt>lZq>;*{|(_qBYOfiNNpWw(^lMS3(nq7B!;zS%{ow z6|R%ZI&8QfqHIi8f)h;7p>!1;ggGZKrJUt!yWcyfP9CU?L!o32_F|HH<`Vzs2}&3l&EqV=Pc;DIPLRXb^3T0m-MC z&*s`T&5KZE)}C)43YQM)qUS3=I#sBvgSr+JH&LfR6ZMLoZ$Gj}Kn?VKY?JBvsD?^- z42uL4~60|6&`h0UIa-9aUZ*`P!q&GKFr?pfE521HLAxWq^3vqQg+2{ zWI#=_)v^umAcA`8Ye7h|^AJT06W?~-bj#8j_E||{as%(}w?N!~{cXYR=%vrV+JGcM z8Q(VUG)>u3R@fF$pjJLjp=?{A7EEeeKqdn6*cNmlx*HU5gU)r5GBU9m##o@L11pA1 zwmZ8998Igf4`O`}DQGr6hZJu^k{~h(MiAjH&fM~_MiZK{LkeY4CnN7h zkn70DIi%piI?AM~7UgwFQ3s~_kb*+Qt~P_AzqQTnEGK#)m@ObNi$!2$q6s@OEfQ1P zn<96hOsTpeen)TIZHPA5K4qV#HYm{4#)XLSeN%*}M?m_P{Aq-O>49!uTQ#jnteP;0 z)ziE!P>9j3WC(5>8IXMJ4L@0%dpkHA^ml+0UAz;Fk1k9VP=c)j_iKKLG!B99LRi|u z1PdfH<-5rI2F((9S*5^BaRfcgQX19rDU%sh$9$(uWU?V5BM@yxl@)sO!v-jmb z#B1?DcO+)P?BYY(;4>@)LS$5H6plzKyHTpchiqX@hw$(-8)yC_sHP97)tQ{oAZLOp z(Z{`^iQYG2??XZz&g4lHH=PLun#%WgChteyji4}@2&n#Lw^|;(9yTIYa}nfPpsLQ~ zQe?87$;(y)D4fB>#ZBpp*!Lr@p;kkIL9OPGkXNjROa#y@lUf;oR3(jK?H0&mIlv1+SyVH#MzwrV{VAlYj?HFK{UT~otx=L7 zwd@=!$j-0Ygh#pjcwT%xfP_+${HUKvQnj*(Q2V^g5o4Mp1#0jJrOPCDBd8V^8xaUU zh(`pZP4Z6>ih`<}B-b?BB-H{$onEK~h%!kO(3)ewHpCb>+YtX7xOt%P2l4ojie{T6 znj`4LpzufV_$Zk_!-Jn@6+IszTiWcFvtAzjA;>IMlkfc`aS=7K6SCI(7#LGc6lkhR z^~R;Ii;>IJmv$k}`N*e{r!IYQha*m0>1z-%KH~!^P0cS){iRD-fyK*ksCgg539|bv zUocXjX*m81#*ZVfjPg8~2uSZfgSN0Q%O@UYY@-a2{{;vW1)?j^GJ%MTYYVZV zRftioQIc4o^aA7>#36H?N7sGwa?H3*~yGJ1vM&ZI)@*%Rn|Emt?;M zjP#yYWflVZ%|-;YBnF!05yR6q3ks3mbE5Mxi!DeBwBbZP`FPI1TuYRW&zpkJzr@6J z>=bCC=v$As+Dn-~S5`weE>=?j69IW_x{Z2c=H}12>$4E3G&eJ|37DEjWU?h5ZIl7BS0)wb=7Y#pTkm(E zL?e6udB{^}TL@I@Ju^43_su}5w%%WX1{|Rg_XSjS7)Bh$nh?7D+z}aZwcFfPM-KJ> zet1x)*ttc$c3Vf2i_5|Ero+-O@UjZ3dH5u=z{SO39cR+JF0VJ=+ zscA&EY0RuqE#IcKAl-C^_Hd_2Jr(e`L&SIT*JQ*U>~j79P5r(M`>Z5^FWaVZK4GSC zg^kK0r0WS7wfen{z!|9Y>flR=3+xVvtYB7Q!9#%r@96nZB>$a+K$wtT2=aX&em{LCWEF2q4?hp^vX5YDH335qx+K%*| zAqx~DqgtaRA+k8v=nc;V;-vSJV2%Y9e-rQPV9TA|9%iur?6-U};RLrA}Z$q?T z!CDj+<~+k1O;ECkG5+lLVnisUHX;znmS`mk13}Y9i(B|n~3w;Gd z*%nooPyB0$DF=Q%VgvoI9Zko?l>$v%=Vq4qE`Y3UmO;ad_DXHo*e(Mn_PQL59<66N z(F?&W0##a*vKT+kor)E88UEiOK@A-X0gpQsf-D1>nKibvU98hMWgs5_BM@<8V<8}Q ztJWwZMoQUYeFAX;42PJjKi@#G+@AIz_HYek)~G=tM2Br4+e>h-fxH6M3a0D82&T+s zf$Cp~*Ynn~^P(UcBA@0}__9sg!-lcFEIHU*`Ti%4MhSUqnF1>Rz-D>*rk!`22|q0uuizaLpEPI!GnJ zbo^W?_;@v>6n(yMe~0I69X|!I@e3ZpLyVp={5X!^aFpLhf@+k7fQRG16uKA3&&(Rt za>xIVNN=MIP=L#H<`Re^C}1HF;{Q6JTB9T}U+HD~O2i>^Q`kH$IC4&kb%UgmDkYFiL&^nm%SBD{!qT9!Ibh zgfBr}1d9;wia*ka;o*#`KgFSeFKtKtM1J97Im7fnkJ10}(Ky zf%CvvpsE_^N2WQ`02kX0)c^(7r2#HHf@$Cpp z0Sc^319i{DcZP}@cnD3gKvm~~E0D<^19j}M7D0&D%4lY0=4dv8bCkI~Ywo#y| z2iL-RHxkvhL^SZvh>3voZ_or^G>oI1UNk5Ts71pINVh;$hwH7#G-n$4->AHy8lb=$ zH1JbokASoWf-jtXG(d4O1_Eo~?IHjznFfA_${VTy3ami`KS%ZmNNXVYvdu>WlMq+i7`PWD=1c>>K;;e900q{dfqzBz z2uN$-!w5w|)elg7H1MY=T$=_yfD*wqun4(5)@M!byMx8-z%h96yy(;KukcYaKf{=uA#5aB%|{Tc~AW)fs;o?TT@moI4d^SIU$4kIiivQbmxsE$j`vV;a-BJ6G z<^5mOP=~S1M{(0wD6nQ@`F|)B0o7(KAz7sOtRDXXrXcADAlCv_ee>i=WD4%mw@@U= z_jInd3()_7q*6W9aE`-S($oV5ntE`Z;{;hoz8(Uipz7;)&V_nX9Y#ooD+P!K&I4nC zv~Qn>kjHR+4$*U_f&WD14b=bz)}?{FAfPS{P(W=O;7bB?rh(t0@;WrY(P)kV3iQ=L z`NHxAWRHOK`X=}o@bN-w3{bWOsyYUKhfH&(ffrGE9U4fYxTygO^wmHRFBJR~!N&`! zQ-r`?=#bLD@AV3E4u4@c?_nmz9bk|ZCMR0cOeoMa6aN+F$B}m0Sm z`l7+dVSW(;WXj@B-2#PPg-0tHke3FILc*MBfPdjshXy9lC37TDU=14Jb}Is!jRqb- zxzj-Qo5>8x7*HCx88H^9ss`qx&9(;WaG0{5rt4h<@;H_~|8fIk`~UP{CD^ka^8x@C_0!+$!m7*L7590O(@ zTCuRHzF!igK+|3V3|H;saWy4AS`F73w5b~u@RtM^!6ZZgf8CoC+K_MTj z;ZG901g)mrHy?hhISx>X)f^9|5mrNiHCxS(q09(K{~AybtFf)ZT%1|ZyI2iR2gGW= z^t*t6bn*&iHJebDrd8=zm}CurJXO~K%wzfjuRkhyrK1N9prRh03cfr}qLk_FDbUnI zMQ?usvPU2UtC`;a5CA#zMM2fQ{UgYw7iTR9DFLDZb*i}(Nv$BiaeE>f@lqPMbGWTN z2~gRq12Bykw-jjFO8{@L$89a%-fP^Bpn9>IgRl>=nmrI{(O9Z^`%_TVwwi~LUB>Na z!O)x9(ShzGoFzL-$;Wd|#y^0xQAeI4>b`3-dXXDI)qlQ}VomHTj@4Hodjx{@Mv7xD z3aUO~>_8A*xQE-h~(oRCS1+jz-wV5@c%ivx-1N zl&3mAsJ{kDt!yr+$s$A7Vs4u_lFW&e0*N{o_Tp4d!gu&7JY0jc((y2wEwBY2q~?<5 z2dGK}a7LCv%5)19T8c+28Iae$)k4BcV35w?-v+b-As=&@-SIF51|6gyht@WN!fhxN z0aM!{hc*TekIrAS5M#LyaxIV^qzHH!%ThGrWn;l<4Ds=t{?7zL4K)@Dtl3zWp-==( ztj$=wPQ+dbDdJg_vAhv67DyWlD)Tay<%oaTSSlIISwN_v#zKKXjpbx$O+3pA6pA3w zKx0Wco+Yrcoc*$~Kn0bI<+Y7A77DD{SXMU7SX$6q@hlaLg^09)P^tZ~9q%~^+ny!J zT5*dbAjqPz`Z3J8sJwL0*6?Z*`(dsgDbUn|Yt^_L*-rtG7Xy+c3kXspi%g6J#=+>Y$s!161M6i!$jQWJw^vFvO21Fl*gSv5?CH7zz;E zVP*{sVKRYXMiUr&U1|cO-f^L&i0yELWFZjZ?9fUEq$M#>3JlFnEM_y9+AK!h-%~C> zp1T45SGlF0s`~j3TO;F*P?&QC1#0jJWyQH-Ju*ZfL|>XvWE52ET)_(oF+>UwydME$ zf%HBAffBqK(;UMi_*@ZWk`}RES0o$IUmv`;qEIUcIb7|ocCtf(zId0<4Cf>2 zC|AyUG{EDh#%U(iY?uN~>?`_=i;z76v9m#)lbT-L5NpBvBVYvY?}M>GRei=~$YkTa z5}epDRiu6NxlVLD7%rOZ+-Et_3&Hrg66flGa|l0`f9)9=N`45{`Job3ewKIes=PG9 z%b)QN`2yR5TCWi)pZS9VO&Bgf}+YA}FwCi?{@ZB2Y;E7O@OcW@!;9S+*N^9&xsnP_X!o!?hcT0E1Rkg0G?p z9|R-Lm{rOEq;+$YhnZQUJloyCbLfzOrT+i0-^blRGypJkAOZ|CYhVadgLebmTegBA zxpZbFW^=k~-BamG`-fWx<{PNuZRnZDUU8VNTnC9xcflVk{ZkBsccs9F% z&5$Nea1sK1Rw1m>#BnZn1EXl@YJ;y21^CY(xG-!*b@(bya0kJdtJ7~b z7Z+j7tWhpsoqh%D&NfHbsbJ>Y4wEAFcK>dOt9x~N4Md{0>X#XpqRnH-=y{pZhs0JU zf|@Kc%Khv_NT#K`!N?MnnRV}pg}DTsM2y*cuNNg+AWnKuMy8X;!C0UWnN~6&Er|gj zhKD{Ntz**?%q+H{4XP;?D)%_4|2m=t7-p^n4A1VpfHBPi(rjS(-lzbhHZ4?&YK@Y_ z0;MPQf6()6KY%M=pw%(YQlM5W)f`}+9YD4SR8#++pB_Yp3avpbf`(v$s-6Prq4Ec9 z5&ZMShFSy#)@%`%HOwOZ2D+c6MWAHaJbMUnb0va)Z9}>}m6gU?F#jLw(WR8YPMON*!wLGYv%7awk0OZiBC9 zT7Y3@4Gdv2r(kAO-4S3a-U(Bt_?0$DvJeP82Bwt^NK0a%6qr9~zcK=R8tPXlP%D;d z4lvVfN45x5Q~ykJAEbz1c^^c+JktOTj-&;L?kKu84itWx<-wz*@M=6kB-6LNsX+_2cI`iTlueYZ%RaLFr1Am?TjDK3H54sQ!M22m^Uos5n!0P5-|LGT`yqF9SU0~ zHjzSh0ft)@shh%E*$9x9#6ao1F@ZQy{v;Tey01ae@&U95nTn^YTfwR-ECfPq%U+P{ zzidZniZO4)LyUyAh>ua} z3e;NQ%y%L3%y05}*Cmb&5oFMJ1>BZJ5mOz1bC|cFj36I@fZFCflq_3In{lD0{|_=0 BUqAo= diff --git a/B4A/Files/clientes.bal b/B4A/Files/clientes.bal index 389373c7b61e650ffaceb7557332af5bfab11db2..75e1c6a5a3b75c85947aae84712e60967c2edf36 100644 GIT binary patch literal 6205 zcmcIneQaA-6@Omiv~IhR^3@eayMAOJr7=xg%GlO5j_o!9H(3+6*|I|VVn5q2yu4@L zdrsO3Az;#mv zpL@T51LsB?Vd%N7nSO90Mv~N->1;+6at(+;n`=tXgMnYk7DZMrl24 ziKp5{sMx94j(I&r3+BA#w8S_gW6BroAQX+VzZ$jeuUOo_K38&V%MGnSl-_H)9ZF?P z*Mu0>)FDkB*3=PA9o>o*{3W7~0fdbWXoQcpQgS02(V)q+WD6SC(GJ4<8Z>%9TwaUz zI<(if(Qjy@-`GZPZ=-K)qq#5jRy?=t4f)=JmtLq>so4&##d(S4ywkAKb+^iW9k1#Q zRU583G<=8R)g9BV*ybGP$fNCn=`5O5bqRxAkJ2SNI`pw0ZT`r}z{CG|Y5Es~PYm4u zc((8K7m_V=y+{%w~Jocr=muUqN==D_Bg#&&=A*MI!vi%&nl zVej$5pMUS67jMf>eEToC?bYv}{lS2F;3pqA_u!NE=YRI82QH@{zqz^N!;7a+kH6$y zdgQs;mEV7E(+_t(^4q2{yZd)nehh0D&=`_ZP`p^TZUU8?Hv_wr&RKz7buB-A$_h<& z6d1%1a*|$(*-9@4%XIBUGqgQ7*YM>_NXovsY|cB@tzDGoT65`9J6tsDYRKTF)w)%4 zv;ilp7lJ3zqD_h6&ts$@Fd04G&V4V^u;P ziO{Qa@v>bGYgApc>}oCK!kX!pYAqcRNx?hcXO{z>tAngp-QpxibjiR6rzJU0;3qV2gn0D6v9uw9Eb z2jN9W5_V#8>Qtsc6GGfYv~Sw3Hl*-#K&FI|S<16rF-sOT=kg~qX9`7XUeboq2$kp4N}Vo+{E6b+)cDDkZOrK)p2x1)AZoLtz z8d1#OS0s#eGYFP(K)8MxuLrJ|qj~5ppt@zZzWf>aHBSNFaq*pm(1$oyatkp!dTosT zkzQD+`(Ln7gBBLIbg@mPbyOzQh>okp@_4D3L5MQyIZi$*x(tY6eCYTHh(AXIBgHSD z11a?$NPGe;29pdUMVMrs=|>z>+=wnFmeKLo$Gk`;SXxr*wUCteLNY<0L^Uy#S>Es| z^>`41F9(?-r2Wk+|7x<%B@?`GHZVgIWpu1TLa<&4K|Fr9O(^fW3?4Z1A~c+@2|u7D${!71&J z)&!>fAu#$*f{KFue?K#0?WXiNGcQ0!5T$S@q8dE$^j(sn04F`-TA0nAq*BfwBN28J+o0`o0!)(7TGkP;kO^97hsgOI&> zYPB_56PT|eV^E)@%ChuGl?5Xz7FPv^LDr_M2MmQ@JuqK{76GOY#LENb-B=MFr2;6a zvZp{KHG8jO?*k#_6yIwqrxTD%O;Q@at|jeWOspNGl?b|d7l6h_4ikre=$M_Eo?rI;lI;Tv!!<6^cMYeWGFng2Kli9YSt z`Oqabr!XHyU>cM}pa^0MTI=3E19CM?=QC$1U`YL+0jampo8AX*>V9;yX#LHVm6Zp` zIfqVg4~pl(*nRu><_ zYfqEr>R0%Fbw3bp{<>bAw7wIlwP~_3(E^IXF;HvM%A`CgEhsm4u=Noe9MyF-}CS o^El0dqrGdxi8#bnd=sQ3mAH%GbQtrp_nzK3LAE`WdJPTZzYnKdhX4Qo literal 5887 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 literal 0 HcmV?d00001 diff --git a/B4A/Files/fondo-rojo.jpg b/B4A/Files/fondo-rojo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab87b739ae9858d39309b1a21fe1501466a070a3 GIT binary patch literal 196715 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