From 3a3ac503c5f9e80f2b30dd95a20b385f891f9c10 Mon Sep 17 00:00:00 2001 From: Jose Alberto Guerra Ugalde Date: Tue, 17 Oct 2023 19:44:32 -0600 Subject: [PATCH] - Archivos de cambios --- B4A/C_Productos.bas.old | 1113 +++++++++++++++++++++++++++ B4A/C_Promos.bas | 431 +++++++++++ B4A/Files/pedidoitem.bal | Bin 0 -> 2013 bytes B4A/Files/proditem.bal | Bin 0 -> 5141 bytes B4A/Files/productos.bal.old | Bin 0 -> 14466 bytes B4A/Files/promociones.bal | Bin 0 -> 9382 bytes B4A/Subs.bas | 1413 +++++++++++++++++++++++++++++++++++ 7 files changed, 2957 insertions(+) create mode 100644 B4A/C_Productos.bas.old create mode 100644 B4A/C_Promos.bas create mode 100644 B4A/Files/pedidoitem.bal create mode 100644 B4A/Files/proditem.bal create mode 100644 B4A/Files/productos.bal.old create mode 100644 B4A/Files/promociones.bal create mode 100644 B4A/Subs.bas diff --git a/B4A/C_Productos.bas.old b/B4A/C_Productos.bas.old new file mode 100644 index 0000000..ef40fbe --- /dev/null +++ b/B4A/C_Productos.bas.old @@ -0,0 +1,1113 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + '//Process Globals + 'These global variables will be declared once when the application starts. + 'These variables can be accessed from all modules. + ' Dim g As GPS + Dim ruta As String + Dim q_buscar As String + Dim skmt As SQL + 'These global variables will be redeclared each time the activity is created. + 'These variables can only be accessed from this module. + Dim c As Cursor + Dim c2 As Cursor + Dim ListView1 As ListView + Dim entro As String + Dim lfila As Label + Dim marca As String + Dim tipo As String + Private BUSCA As EditText + Dim ya_entro As String + Dim bmp As Bitmap + + Dim c As Cursor + Dim e As Cursor + Dim f As Cursor + Dim h As Cursor + Dim CC As Cursor + Dim DD As Cursor + Dim l_tipo As Label + Dim l_sub As Label + Dim l_marca As Label + Dim l_desc As Label + Dim l_precio As Label + Dim l_bodega As Label + Dim cantidad As EditText + Dim guardar As Button + Dim Terminar As Button + Dim img_prod As ImageView + Dim IMG_PASO() As Byte + Dim L_PROID As Label + Dim clie_id As String + Dim sDate,sTime As String + Dim usuario As String +' Dim lat_gps, lon_gps As String + Dim t_venta As Label + Dim PROMO_C As String + Dim i_fotol As ImageView + Private DESC_PROMO As Button + Private nopromo As Button + Dim TOT_ART_PROMO As String + Dim cambio As String + Dim COSTO_TOT As String + Dim ALMACEN As String + Dim preciosin As String + Dim cl_ruta As String + Dim d As Cursor + Dim TOT_ART_PROMOR As String + Dim PROMO_CR As String + Dim TOTAL_PROMO As String + Dim HCCP_CANT As String + Private Panel1 As Panel + Dim query As String + Private t_precio As Label + Private LV_PRECIOS As ListView + Private PERFIL As String + Private EXISTE_CAMBIO As String + Private QUERY2 As String + Dim CAMBIOS As String + Dim precio2 As String + Dim PROMOS_VENTAS As String + +End Sub + +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'Do not forget to load the layout file created with the visual designer. For example: + 'Activity.LoadLayout("Layout1") + Root.RemoveAllViews + Root.LoadLayout("PRODUCTOS") + 'Dim ruta As String + ' valido donde escribo el archivo de la base de datos de kmt + ruta = File.DirInternal + Panel1.Visible= False + ' se crea o no el archivo de la base de ddatos de kmt + 'NOTAS SI SE MODIFICA LA ESTRUCTURA SE QUITA EL IF Y SE VA DIRECTO A LA SENTENCIA FILE.COPY PARA QUE + 'TOME LA NUEVA ESTRUCTURA ES MUY IMPORTANTE TENER EL IF DE LO CONTRARIO SOLO LO ESCRIBE UNA VEZ Y LO BORRA + 'SI SE REGRESA A ESTE ACTIVIDAD. + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + skmt.Initialize(ruta,"kmt.db", True) +End Sub + +Sub B4XPage_Appear + If Main.tipov = "PREVENTA" Then + query = "cat_gunaprod" + QUERY2 = "COUNT_GUNAPROD" + Else IF Main.tipov = "VENTA" Then + query = "cat_gunaprod2" + QUERY2= " COUNT_GUNAPROD2" + ELSE IF Main.tipov = "ABORDO" Then + query = "cat_gunaprod" + QUERY2 = "COUNT_GUNAPROD" + Else + query = "cat_gunaprod" + QUERY2 = "COUNT_GUNAPROD" + ya_entro = 0 + End If + Log(Main.tipov) + If ya_entro <> "1" Then + 'BUSCA.Text ="" + 'SE COMENTO LA LINEA DE ARRIBA YA QUE DISPARA EL EVENTO DEL TEXTCHANGE Y PUEDE HACER LENTO EL SISTEMA + skmt.Initialize(ruta,"kmt.db", True) + entro ="1" + ya_entro ="1" + c=skmt.ExecQuery("select CAT_GP_CLASIF, COUNT(*) AS CUANTOS from " & query & " where (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID) GROUP BY CAT_GP_CLASIF order by CAT_GP_CLASIF asc") + + 'ESTO ES PARA NO VER PROCTER + 'c=skmt.ExecQuery2("select CAT_GP_CLASIF, count(*) as cuantos from cat_gunaprod where CAT_GP_ALMACEN > 0 and cat_gp_clasif NOT IN (?,?,?,?,?,?,?,?,?,?) group by CAT_GP_CLASIF order by CAT_GP_CLASIF asc", Array As String("PROCTER","PROMOS","TRES MONTES","CAMPARI","CAMPARI-PRO","CLOROX DE MEXICO","MARS","CONAGRA","VERDE VALLE","MEAD JOHNSON")) + ListView1.Clear + lfila.Text = "MARCA" + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 10 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Black + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + ListView1.AddTwoLines(c.GetString("CAT_GP_CLASIF"),c.GetString("CUANTOS")) + Next + End If + End If + + c=skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("PERFIL")) + c.Position =0 + If c.RowCount > 0 Then + PERFIL = c.GetString("CAT_VA_VALOR") + Else + PERFIL = 0 + End If + c.Close + + If PERFIL = "V-COSTO" Then + skmt.ExecNonQuery("DELETE FROM CAT_GUNAPROD WHERE CAT_GP_ID IN (SELECT CAT_GP_ID FROM LISTA_PRECIOS WHERE NLISTA = '9' AND PRECIO = '0')") + End If +End Sub + +Sub ListView1_ItemClick (Position As Int, Value As Object) + 'Sub ListView1_ItemLongClick (Position As Int, Value As Object) + 'que_colonia = Value + 'StartActivity(fila) + + +' If Value = "PROMOS" And fila.cuenta <> "N" Then +' entro = "3" +' marca = "PROMOS" +' tipo = "PROMOS" +' Else if Value = "PROMOS" And fila.cuenta = "N" Then +' entro = "5" +'' StartActivity(fila) +' End If + If entro = "1" Then + marca = Value + skmt.Initialize(ruta,"kmt.db", True) + c2=skmt.ExecQuery2("select COUNT(*) AS CUANTOS, CAT_GP_TIPO from " & query & " where CAT_GP_ALMACEN > 0 and CAT_GP_CLASIF = ? and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID) GROUP BY CAT_GP_TIPO ORDER BY CAT_GP_TIPO ASC", Array As String(Value)) + ListView1.Clear + lfila.text = "TIPO" + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + ListView1.AddTwoLines(c2.GetString("CAT_GP_TIPO"),c2.GetString("CUANTOS")) + Next + End If + entro = "3" + Else If entro = "2" Then + tipo = Value + skmt.Initialize(ruta,"kmt.db", True) + c2=skmt.ExecQuery2("select COUNT(*) AS CUANTOS, CAT_GP_SUBTIPO from " & query & " where CAT_GP_ALMACEN > 0 and CAT_GP_CLASIF = ? and CAT_GP_TIPO = ? and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID) GROUP BY CAT_GP_SUBTIPO ORDER BY CAT_GP_SUBTIPO ASC ", Array As String(marca, Value)) + ListView1.Clear + lfila.text = "SUB-TIPO" + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + ListView1.AddTwoLines(c2.GetString("CAT_GP_SUBTIPO"),c2.GetString("CUANTOS")) + Next + End If + entro = "3" + + Else If entro = "3" Then + skmt.Initialize(ruta,"kmt.db", True) + c2=skmt.ExecQuery2("select CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from " & query & " where CAT_GP_ALMACEN > 0 and CAT_GP_CLASIF = ? AND CAT_GP_TIPO = ? and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID) ", Array As String(marca, Value)) + ListView1.Clear + lfila.text = "PRODUCTO" + 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.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO")) + Next + End If + entro = "4" + Else If entro = "4" Then + + skmt.ExecNonQuery("delete from PROID") + skmt.ExecNonQuery2("INSERT INTO PROID VALUES (?)", Array As Object(Value)) + 'StartActivity(pedidos) + HACER_PEDIDO + End If +End Sub + +Sub Activity_KeyPress (key As Int) As Boolean + ' BACK key pressed + If key=KeyCodes.KEYCODE_BACK Then + ya_entro ="0" + + If entro = "4" Then + entro = "3" + B4XPage_Appear + Return True + Else If entro = "3" Then + ' entro = "2" + ' B4XPage_Appear + ' Return True + ' Else If entro = "2" Then + ' entro = "1" + ' B4XPage_Appear + ' Return True + 'Else If entro = "1" Then + + ' I want to capture the key here so I return True + +' StartActivity(fila) + Return False + End If + End If + ' Returning False signals the system to handle the key +End Sub + +Sub BUSCA_TextChanged (Old As String, New As String) + q_buscar = "%" & BUSCA.Text & "%" + skmt.Initialize(ruta,"kmt.db", True) + ' c=skmt.ExecQuery2("select CAT_GP_NOMBRE from cat_gunaprod where CAT_GP_ALMACEN > 0 and CAT_GP_NOMBRE like ? AND cat_gp_clasif NOT IN (?,?,?,?,?,?,?,?,?,?) order by CAT_GP_NOMBRE asc", Array As String(q_buscar, "PROCTER","PROMOS","TRES MONTES","CAMPARI","CAMPARI-PRO","CLOROX DE MEXICO","MARS","CONAGRA","VERDE VALLE","MEAD JOHNSON")) + c=skmt.ExecQuery2("select CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO,CAT_GP_IMG from " & query & " where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_NOMBRE like ? and CAT_GP_CLASIF <> ? and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID) order by CAT_GP_NOMBRE asc", Array As String(q_buscar,"PROMOS")) + 'and CAT_GP_CLASIF <> ? group by CAT_GP_CLASIF order by CAT_GP_CLASIF asc", Array As String("PROMOS") ) + ListView1.Clear + Dim ins As InputStream + Dim bmp As Bitmap + Dim jpeg() As Byte + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + jpeg = c.GetBlob("CAT_GP_IMG") + ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) + bmp.Initialize2(ins) + + ListView1.AddTwoLines(c.GetString("CAT_GP_NOMBRE"),"Existencia " & c.GetString("CAT_GP_ALMACEN") & " Precio $" & c.GetString("CAT_GP_PRECIO")) + Next + End If + c.Close + entro= "4" +End Sub + +Sub HACER_PEDIDO + c=skmt.ExecQuery("Select SUBSTR(CUENTA,1,1) AS CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + Panel1.Visible= True + cambio = "0" + cantidad.Text = "" + c=skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + C.Position =0 + ALMACEN = C.GetString("ID_ALMACEN") + C.Close + c=skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + i_fotol.Visible = False + + skmt.Initialize(ruta,"kmt.db", True) + c=skmt.ExecQuery("select CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_DEV from " & query & " where CAT_GP_NOMBRE In (Select PDESC from PROID)") + + c.Position=0 + L_PROID.Text = c.GetString("CAT_GP_ID") + l_tipo.Text = c.GetString("CAT_GP_TIPO") + l_sub.Text = c.GetString("CAT_GP_SUBTIPO") + l_marca.Text = c.GetString("CAT_GP_CLASIF") + l_desc.Text = c.GetString("CAT_GP_NOMBRE") + + If PERFIL = "V-SUPER" Then + c2=skmt.ExecQuery("select PRECIO, NLISTA FROM LISTA_PRECIOS WHERE NLISTA = '10' AND CAT_GP_ID =" & "'" &L_PROID.TEXT&"' ORDER BY NLISTA ASC") + c2.Position=0 + l_precio.Text = c2.GetString("PRECIO") + c2.Close + + Else IF ALMACEN = "6" And cl_ruta = "16" Then + c2=skmt.ExecQuery("select PRECIO, NLISTA FROM LISTA_PRECIOS WHERE NLISTA = '11' AND CAT_GP_ID =" & "'" &L_PROID.TEXT&"' ORDER BY NLISTA ASC") + c2.Position=0 + l_precio.Text = c2.GetString("PRECIO") + c2.Close + Else + l_precio.Text = c.GetDouble("CAT_GP_PRECIO") + End If + l_bodega.Text = c.GetString("CAT_GP_ALMACEN") + PROMOS_VENTAS = c.GetString("CAT_GP_ALMACEN") + IMG_PASO = c.GetBlob("CAT_GP_IMG") + PROMO_C = c.GetString("CAT_GP_STS") + cambio = c.GetString("CAT_GP_DEV") + preciosin = c.GetString("CAT_GP_IMP2") + PROMO_CR = c.GetString("CAT_GP_IMP1") + precio2 = l_precio.Text + + If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" Then + DESC_PROMO.Visible = True + CC=skmt.ExecQuery2("select count(*) as CUANTOS FROM PROMOS_COMP WHERE CAT_PA_ID = ?", Array As String(c.GetString("CAT_GP_ID"))) + CC.Position =0 + If CC.GetString("CUANTOS") = 0 Then + l_bodega.Text = "4" + Else + CC.Close + CC=skmt.ExecQuery2("select CAT_PA_MAXPROM, CAT_PA_MAXPROMREC, CAT_PA_MAXPROMCLIE FROM PROMOS_COMP WHERE CAT_PA_ID = ?", Array As String(c.GetString("CAT_GP_ID"))) + CC.Position =0 + + DD=skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_CLIENTE_CANT_PROMOS WHERE HCCP_CLIENTE IN (Select cuenta from cuentaa) AND HCCP_PROMO =?", Array As String(c.GetString("CAT_GP_ID"))) + DD.Position =0 + If DD.GetString("CUANTOS") = 0 Then + HCCP_CANT = 0 + Else + DD.Close + + DD=skmt.ExecQuery2("SELECT HCCP_CANT FROM HIST_CLIENTE_CANT_PROMOS WHERE HCCP_CLIENTE IN (Select cuenta from cuentaa) AND HCCP_PROMO =?", Array As String(c.GetString("CAT_GP_ID"))) + DD.Position =0 + HCCP_CANT = DD.GetString("HCCP_CANT") + DD.Close + End If + TOTAL_PROMO = CC.GetString("CAT_PA_MAXPROMCLIE") - HCCP_CANT + If HCCP_CANT = 0 Then + + l_bodega.Text = CC.GetString("CAT_PA_MAXPROM") + Else IF TOTAL_PROMO > CC.GetString("CAT_PA_MAXPROMREC") Then + l_bodega.Text = CC.GetString("CAT_PA_MAXPROMREC") + Else + l_bodega.Text = TOTAL_PROMO + End If + End If + Else + DESC_PROMO.Visible = False + End If + + c.Close + c=skmt.ExecQuery("select CASE WHEN pe_costo_tot is null then 0 else sum( pe_costo_tot ) end as TOTAL_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + t_venta.Text = c.GetString("TOTAL_CLIE") + c.Close + Terminar.Visible = True + guardar.Visible = True + cantidad.Visible = True + If cambio = "1" Then + nopromo.Visible = True + If clie_id = "N" Then + nopromo.Visible = False + End If + Else + nopromo.Visible = False + End If + Dim out As OutputStream + out = File.OpenOutput(ruta, "1.jpg", False) + out.WriteBytes(IMG_PASO, 0, IMG_PASO.Length) + out.Close + img_prod.Bitmap = LoadBitmap(ruta,"1.jpg") + TOT_ART_PROMO = "0" + TOT_ART_PROMOR = "0" + If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And l_bodega.Text = "0" Then + Msgbox("ALERTA","EL CLIENTE YA NO PUEDE TENER ESTA PROMOCION") + Panel1.Visible= False + End If + + If marca <> "PROMOS" Then + If PERFIL = "PREVENTA" Then + t_precio.Visible = False + LV_PRECIOS.Visible = False + ELSE IF PERFIL = "V-ESPECIAL" Then + c=skmt.ExecQuery("select PRECIO, NLISTA FROM LISTA_PRECIOS WHERE NLISTA IN ('5','6','7','8','10') AND CAT_GP_ID =" & "'" &L_PROID.TEXT&"' ORDER BY NLISTA ASC") + LV_PRECIOS.Clear + Dim label1 As Label + label1 = LV_PRECIOS.TwoLinesLayout.Label + label1.TextSize = 10 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = LV_PRECIOS.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Black + + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + LV_PRECIOS.AddTwoLines(c.GetString("NLISTA"),c.GetString("PRECIO")) + Next + End If + ELSE IF PERFIL = "V-MINI" Then + t_precio.Visible = False + LV_PRECIOS.Visible = False + + c=skmt.ExecQuery("select PRECIO, NLISTA FROM LISTA_PRECIOS WHERE NLISTA = '2' AND CAT_GP_ID =" & "'" &L_PROID.TEXT&"' ORDER BY NLISTA ASC") + c.Position=0 + l_precio.Text = c.GetString("PRECIO") + c.Close + ELSE IF PERFIL = "V-COSTO" Then + + t_precio.Visible = False + LV_PRECIOS.Visible = False + + c=skmt.ExecQuery("select PRECIO, NLISTA FROM LISTA_PRECIOS WHERE NLISTA = '9' AND CAT_GP_ID =" & "'" &L_PROID.TEXT&"' ORDER BY NLISTA ASC") + c.Position=0 + l_precio.Text = c.GetString("PRECIO") + c.Close + ELSE IF PERFIL = "V-SUPER" Then + t_precio.Visible = False + LV_PRECIOS.Visible = False + + c=skmt.ExecQuery("select PRECIO, NLISTA FROM LISTA_PRECIOS WHERE NLISTA ='9' AND CAT_GP_ID =" & "'" &L_PROID.TEXT&"' ORDER BY NLISTA ASC") + c.Position=0 + l_precio.Text = c.GetString("PRECIO") + c.Close + End If + End If + '' ESTO ES PARA NO PASAR DE LAS PROMOS ABORDO Y MANDARLAS AL MINIMO INICIO + If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" Then + If query = "cat_gunaprod2" Then + l_bodega.Text = PROMOS_VENTAS + e=skmt.ExecQuery2("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID = ? ", Array As String(L_PROID.Text) ) + e.Position = 0 + If e.GetString("CUANTOS") > 0 Then + F=skmt.ExecQuery2("select CAT_DP_IDPROD, CAT_DP_PZAS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID = ? ", Array As String(L_PROID.Text) ) + 'se coloco el if por la mala promocion. + + For i=0 To F.RowCount -1 + F.Position=i + c=skmt.ExecQuery2("select count(*) as CUANTOS from cat_gunaprod2 where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + c.Position=0 + If c.GetString("CUANTOS") > 0 Then + h=skmt.ExecQuery2("select CAT_GP_NOMBRE, CAT_GP_ALMACEN from cat_gunaprod2 where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + If h.GetString("CAT_GP_ALMACEN") < l_bodega.Text * f.GetString("CAT_DP_PZAS") Then + l_bodega.Text = "1" + End If + 'skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta,Main.tipov,precio2)) + h.Close + else if c.GetString("CUANTOS") = 0 Then + l_bodega.Text = "0" + End If + c.Close + Next + f.Close + End If + e.Close + End If + '' ESTO ES PARA NO PASAR DE LAS PROMOS ABORDO Y MANDARLAS AL MINIMO FIN + End If + If clie_id="0" Then + nopromo.Visible = False + End If +End Sub + +Sub guardar_Click + If cantidad.Text = "" Then + Panel1.Visible= False + ELSE If cantidad.Text > l_bodega.Text Then + Msgbox("Exede la existencia", "ADVERTENCIA") + Else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C > 0 And cantidad.Text > 0 Then + skmt.ExecNonQuery("delete from PROIDID") + skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 0)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") + Else + c=skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 0)") + C.Position =0 + TOT_ART_PROMO = C.GetString("TOT_ART_PROMO") + COSTO_TOT = C.GetString("COSTO_TOT") + C.Close + + c=skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_PRECIO = 0 AND CAT_DP_TIPO = 1)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + TOT_ART_PROMOR = "0" 'Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") + Else + c=skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_PRECIO = 0 AND CAT_DP_TIPO = 1)") + C.Position =0 + TOT_ART_PROMOR = C.GetString("TOT_ART_PROMO") + End If + C.Close + PROMO_C = PROMO_C * cantidad.Text + PROMO_CR = PROMO_CR * cantidad.Text + + If TOT_ART_PROMO = PROMO_C And TOT_ART_PROMOR = PROMO_CR Then + ' anterior a 29/06/2015 + 'skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID))", Array As Object(l_precio.text/(TOT_ART_PROMO/cantidad.Text),l_precio.text/(TOT_ART_PROMO/cantidad.Text))) + 'en pe_cedis meto el codigo de promocion para hacer esta validacion. + skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_CEDIS = (?) WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID))", Array As Object(L_PROID.text)) + D=skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 0") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + Next + End If + D.Close + D=skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND CAT_DP_PRECIO = 0 AND CAT_DP_TIPO = 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + Next + End If + D.Close + + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + + c=skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + + c.Close + + If Main.tipov = "ABORDO" Then + c=skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + + Else + c=skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + End If + + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + 'skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO) VALUES(?,?,?,?,?,?,?,?,?) ", Array As Object ("COACALCO",cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario)) + 'para insertar la promo de ades el de regalo en 0 + e=skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 AND CAT_DP_PRECIO = 0") + + If e.GetString("CUANTOS") > 0 Then + + F=skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 AND CAT_DP_PRECIO = 0") + 'se coloco el if por la mala promocion. + + For i=0 To F.RowCount -1 + F.Position=i + h=skmt.ExecQuery2("select CAT_GP_NOMBRE from " & query & " where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta,Main.tipov,precio2)) + skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(f.GetString("CAT_DP_PZAS") * cantidad.text, f.GetString("CAT_DP_IDPROD"))) + h.Close + Next + f.Close + End If + e.Close + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,Main.tipov,precio2)) + skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + Else + Msgbox("Tiene " & TOT_ART_PROMO & " " & TOT_ART_PROMOR & " y necesita " & PROMO_C & " " & PROMO_CR & " Para la Promo. " , "ADVERTENCIA") + End If + End If + + cantidad.Text = "" + Panel1.Visible= False + + skmt.ExecNonQuery("delete from pedido3") + skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = 0 where PE_FOLIO IS NULL") + + skmt.ExecNonQuery("INSERT INTO PEDIDO3 (PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, " & _ + " PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_FOLIO ) Select PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, " & _ + " SUM(PE_COSTO_TOT) As PE_COSTO_TOT, PE_COSTOU, SUM(PE_CANT) As PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_FOLIO " & _ + " FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) GROUP BY PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, " & _ + " PE_COSTOU, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FOLIO ") + c=skmt.ExecQuery("select PE_PRECIO2,PE_TIPO,PE_FOLIO,PE_DESC,PE_COSTO_SIN,PE_RUTA,PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID, " & _ + " PE_CLIENTE, PE_FECHA,PE_USUARIO FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa)") + + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + skmt.ExecNonQuery2("UPDATE PEDIDO3 SET PE_FECHA= ? WHERE PE_CLIENTE = ? AND PE_PRONOMBRE = ? AND PE_PROID = ? AND PE_CEDIS = ? " _ + , Array As Object(c.GetString("PE_FECHA"), c.GetString("PE_CLIENTE"),c.GetString("PE_PRONOMBRE"),c.GetString("PE_PROID"),c.GetString("PE_CEDIS"))) + + Next + End If + skmt.ExecNonQuery("delete from pedido WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) ") + skmt.ExecNonQuery("INSERT INTO PEDIDO SELECT * FROM PEDIDO3") + + + else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C = 0 Then + skmt.ExecNonQuery("delete from PROIDID") + + skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + + c.Close + + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + + c=skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + 'skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO) VALUES(?,?,?,?,?,?,?,?,?) ", Array As Object ("COACALCO",cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario)) + 'para insertar la promo de ades el de regalo en 0 + e=skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) ") + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS, CAT_DP_PRECIO FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID)") + For i =0 To f.RowCount -1 + F.Position =i + h=skmt.ExecQuery2("select CAT_GP_NOMBRE from " & query & " where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,f.GetString("CAT_DP_PRECIO") * cantidad.text * f.GetString("CAT_DP_PZAS"), f.GetString("CAT_DP_PRECIO"), f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta,Main.tipov,precio2)) + skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(f.GetString("CAT_DP_PZAS") * cantidad.text, f.GetString("CAT_DP_IDPROD"))) + + h.Close + Next + f.Close + End If + e.Close + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,Main.tipov,precio2)) + skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + cantidad.Text = "" + c=skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), Main.lon_gps, Main.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + If Main.tipov <> "ABORDO" Then + skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + End If + + Panel1.Visible= False + + skmt.ExecNonQuery("delete from pedido3") + skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = 0 where PE_FOLIO IS NULL") + + skmt.ExecNonQuery("INSERT INTO PEDIDO3 (PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, " & _ + " PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_FOLIO ) Select PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, " & _ + " SUM(PE_COSTO_TOT) As PE_COSTO_TOT, PE_COSTOU, SUM(PE_CANT) As PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_FOLIO " & _ + " FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) GROUP BY PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, " & _ + " PE_COSTOU, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FOLIO ") + c=skmt.ExecQuery("select PE_PRECIO2,PE_TIPO,PE_FOLIO,PE_DESC,PE_COSTO_SIN,PE_RUTA,PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID, " & _ + " PE_CLIENTE, PE_FECHA,PE_USUARIO FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa)") + + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + skmt.ExecNonQuery2("UPDATE PEDIDO3 SET PE_FECHA= ? WHERE PE_CLIENTE = ? AND PE_PRONOMBRE = ? AND PE_PROID = ? AND PE_CEDIS = ? " _ + , Array As Object(c.GetString("PE_FECHA"), c.GetString("PE_CLIENTE"),c.GetString("PE_PRONOMBRE"),c.GetString("PE_PROID"),c.GetString("PE_CEDIS"))) + + Next + End If + skmt.ExecNonQuery("delete from pedido WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) ") + skmt.ExecNonQuery("INSERT INTO PEDIDO SELECT * FROM PEDIDO3") + + + Else + + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + If Main.tipov = "ABORDO" Then + c=skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + + Else + c=skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + End If + + + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN,PE_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (ALMACEN,cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,preciosin,Main.tipov,precio2)) + skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + c=skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), Main.lon_gps, Main.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + If Main.tipov <> "ABORDO" Then + skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + + End If + Panel1.Visible= False + + skmt.ExecNonQuery("delete from pedido3") + skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = 0 where PE_FOLIO IS NULL") + + skmt.ExecNonQuery("INSERT INTO PEDIDO3 (PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, " & _ + " PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_FOLIO ) Select PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, " & _ + " SUM(PE_COSTO_TOT) As PE_COSTO_TOT, PE_COSTOU, SUM(PE_CANT) As PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_FOLIO " & _ + " FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) GROUP BY PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, " & _ + " PE_COSTOU, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FOLIO ") + c=skmt.ExecQuery("select PE_PRECIO2,PE_TIPO,PE_FOLIO,PE_DESC,PE_COSTO_SIN,PE_RUTA,PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID, " & _ + " PE_CLIENTE, PE_FECHA,PE_USUARIO FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa)") + + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + skmt.ExecNonQuery2("UPDATE PEDIDO3 SET PE_FECHA= ? WHERE PE_CLIENTE = ? AND PE_PRONOMBRE = ? AND PE_PROID = ? AND PE_CEDIS = ? " _ + , Array As Object(c.GetString("PE_FECHA"), c.GetString("PE_CLIENTE"),c.GetString("PE_PRONOMBRE"),c.GetString("PE_PROID"),c.GetString("PE_CEDIS"))) + + Next + End If + skmt.ExecNonQuery("delete from pedido WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) ") + skmt.ExecNonQuery("INSERT INTO PEDIDO SELECT * FROM PEDIDO3") + + End If +End Sub +Sub GPS_LocationChanged (Location1 As Location) +' lat_gps=Location1.ConvertToSeconds(Location1.Latitude) +' lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub Terminar_Click + + If cantidad.Text = "" Then +' StartActivity(fila) + + ELSE If cantidad.Text > l_bodega.Text Then + Msgbox("Exede la existencia", "ADVERTENCIA") + Else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C > 0 And cantidad.Text > 0 Then + skmt.ExecNonQuery("delete from PROIDID") + + skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 0)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") + Else + c=skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 0)") + C.Position =0 + TOT_ART_PROMO = C.GetString("TOT_ART_PROMO") + COSTO_TOT = C.GetString("COSTO_TOT") + C.Close + + c=skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_PRECIO = 0 AND CAT_DP_TIPO = 1)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + TOT_ART_PROMOR = "0" 'Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") + Else + c=skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_PRECIO = 0 AND CAT_DP_TIPO = 1)") + C.Position =0 + TOT_ART_PROMOR = C.GetString("TOT_ART_PROMO") + End If + C.Close + + + PROMO_C = PROMO_C * cantidad.Text + PROMO_CR = PROMO_CR * cantidad.Text + + If TOT_ART_PROMO = PROMO_C And TOT_ART_PROMOR = PROMO_CR Then + ' anterior a 29/06/2015 + 'skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID))", Array As Object(l_precio.text/(TOT_ART_PROMO/cantidad.Text),l_precio.text/(TOT_ART_PROMO/cantidad.Text))) + 'en pe_cedis meto el codigo de promocion para hacer esta validacion. + skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_CEDIS = (?) WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID))", Array As Object(L_PROID.text)) + D=skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 0") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + + skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + + Next + End If + D.Close + D=skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND CAT_DP_PRECIO = 0 AND CAT_DP_TIPO = 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + + skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + + Next + End If + D.Close + + + + 'skmt.ExecNonQuery("UPDATE PEDIDO SET PE_COSTO_TOT = 0.01 WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID))") + + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + + c=skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + + c.Close + + c=skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + 'skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO) VALUES(?,?,?,?,?,?,?,?,?) ", Array As Object ("COACALCO",cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario)) + 'para insertar la promo de ades el de regalo en 0 + e=skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 AND CAT_DP_PRECIO = 0") + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 AND CAT_DP_PRECIO = 0") + 'meter el otro + F.Position =0 + h=skmt.ExecQuery2("select CAT_GP_NOMBRE from " & query & " where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta,Main.tipov,precio2)) + skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object( f.GetString("CAT_DP_PZAS") * cantidad.text, f.GetString("CAT_DP_IDPROD"))) + + + h.Close + f.Close + End If + e.Close + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,Main.tipov,precio2)) + skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + Else + Msgbox("Tiene " & TOT_ART_PROMO & " " & TOT_ART_PROMOR & " y necesita " & PROMO_C & " " & PROMO_CR & " Para la Promo. " , "ADVERTENCIA") + End If + End If + + cantidad.Text = "" + Panel1.Visible= False + + skmt.ExecNonQuery("delete from pedido3") + skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = 0 where PE_FOLIO IS NULL") + + skmt.ExecNonQuery("INSERT INTO PEDIDO3 (PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, " & _ + " PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_FOLIO ) Select PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, " & _ + " SUM(PE_COSTO_TOT) As PE_COSTO_TOT, PE_COSTOU, SUM(PE_CANT) As PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_FOLIO " & _ + " FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) GROUP BY PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, " & _ + " PE_COSTOU, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FOLIO ") + c=skmt.ExecQuery("select PE_PRECIO2,PE_TIPO,PE_FOLIO,PE_DESC,PE_COSTO_SIN,PE_RUTA,PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID, " & _ + " PE_CLIENTE, PE_FECHA,PE_USUARIO FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa)") + + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + skmt.ExecNonQuery2("UPDATE PEDIDO3 SET PE_FECHA= ? WHERE PE_CLIENTE = ? AND PE_PRONOMBRE = ? AND PE_PROID = ? AND PE_CEDIS = ? " _ + , Array As Object(c.GetString("PE_FECHA"), c.GetString("PE_CLIENTE"),c.GetString("PE_PRONOMBRE"),c.GetString("PE_PROID"),c.GetString("PE_CEDIS"))) + + Next + End If + skmt.ExecNonQuery("delete from pedido WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) ") + skmt.ExecNonQuery("INSERT INTO PEDIDO SELECT * FROM PEDIDO3") + +' StartActivity(fila) + else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C = 0 Then + skmt.ExecNonQuery("delete from PROIDID") + + skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + + c.Close + + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + + c=skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + 'skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO) VALUES(?,?,?,?,?,?,?,?,?) ", Array As Object ("COACALCO",cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario)) + 'para insertar la promo de ades el de regalo en 0 + e=skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) ") + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS, CAT_DP_PRECIO FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID)") + For i =0 To f.RowCount -1 + F.Position =i + h=skmt.ExecQuery2("select CAT_GP_NOMBRE from " & query & " where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,f.GetString("CAT_DP_PRECIO") * cantidad.text * f.GetString("CAT_DP_PZAS"), f.GetString("CAT_DP_PRECIO"), f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta,Main.tipov,precio2)) + skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(f.GetString("CAT_DP_PZAS") * cantidad.text, f.GetString("CAT_DP_IDPROD"))) + + + h.Close + Next + f.Close + End If + e.Close + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,Main.tipov,precio2)) + skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + cantidad.Text = "" + c=skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), Main.lon_gps, Main.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + + + skmt.ExecNonQuery("delete from pedido3") + skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = 0 where PE_FOLIO IS NULL") + + skmt.ExecNonQuery("INSERT INTO PEDIDO3 (PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, " & _ + " PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_FOLIO ) Select PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, " & _ + " SUM(PE_COSTO_TOT) As PE_COSTO_TOT, PE_COSTOU, SUM(PE_CANT) As PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_FOLIO " & _ + " FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) GROUP BY PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, " & _ + " PE_COSTOU, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FOLIO ") + c=skmt.ExecQuery("select PE_PRECIO2,PE_TIPO,PE_FOLIO,PE_DESC,PE_COSTO_SIN,PE_RUTA,PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID, " & _ + " PE_CLIENTE, PE_FECHA,PE_USUARIO FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa)") + + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + skmt.ExecNonQuery2("UPDATE PEDIDO3 SET PE_FECHA= ? WHERE PE_CLIENTE = ? AND PE_PRONOMBRE = ? AND PE_PROID = ? AND PE_CEDIS = ? " _ + , Array As Object(c.GetString("PE_FECHA"), c.GetString("PE_CLIENTE"),c.GetString("PE_PRONOMBRE"),c.GetString("PE_PROID"),c.GetString("PE_CEDIS"))) + + Next + End If + skmt.ExecNonQuery("delete from pedido WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) ") + skmt.ExecNonQuery("INSERT INTO PEDIDO SELECT * FROM PEDIDO3") +' +' StartActivity(fila) + + Else + + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN,PE_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (ALMACEN,cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,preciosin,Main.tipov,precio2)) + skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + c=skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), Main.lon_gps, Main.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Panel1.Visible= False + + skmt.ExecNonQuery("delete from pedido3") + skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = 0 where PE_FOLIO IS NULL") + + skmt.ExecNonQuery("INSERT INTO PEDIDO3 (PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, " & _ + " PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_FOLIO ) Select PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, " & _ + " SUM(PE_COSTO_TOT) As PE_COSTO_TOT, PE_COSTOU, SUM(PE_CANT) As PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_FOLIO " & _ + " FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) GROUP BY PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, " & _ + " PE_COSTOU, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FOLIO ") + c=skmt.ExecQuery("select PE_PRECIO2,PE_TIPO,PE_FOLIO,PE_DESC,PE_COSTO_SIN,PE_RUTA,PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID, " & _ + " PE_CLIENTE, PE_FECHA,PE_USUARIO FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa)") + + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + skmt.ExecNonQuery2("UPDATE PEDIDO3 SET PE_FECHA= ? WHERE PE_CLIENTE = ? AND PE_PRONOMBRE = ? AND PE_PROID = ? AND PE_CEDIS = ? " _ + , Array As Object(c.GetString("PE_FECHA"), c.GetString("PE_CLIENTE"),c.GetString("PE_PRONOMBRE"),c.GetString("PE_PROID"),c.GetString("PE_CEDIS"))) + + Next + End If + skmt.ExecNonQuery("delete from pedido WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) ") + skmt.ExecNonQuery("INSERT INTO PEDIDO SELECT * FROM PEDIDO3") + +' StartActivity(fila) + End If +End Sub +Sub i_fotol_Click + i_fotol.Visible = False + +End Sub + +Sub DESC_PROMO_Click + skmt.ExecNonQuery("delete from PROIDID") + skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + +' StartActivity(detalle_promo) +End Sub +Sub nopromo_Click + c=skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("CAMBIOS")) + c.Position =0 + CAMBIOS = c.GetString("CAT_VA_VALOR") + c.Close + If CAMBIOS = "1" Then + c=skmt.ExecQuery("select COUNT(*) AS CUANTOS from HIST_RMI WHERE HR_CLIENTE IN (Select CUENTA from cuentaa) and HR_PROID = '" & L_PROID.Text & "'") + c.Position =0 + EXISTE_CAMBIO = c.GetString("CUANTOS") + c.Close + If EXISTE_CAMBIO = 0 Then + EXISTE_CAMBIO = 0 + Else + c=skmt.ExecQuery("select SUM(HR_CANT) AS CUANTOS from HIST_RMI WHERE HR_CLIENTE IN (Select CUENTA from cuentaa) and HR_PROID = '" & L_PROID.Text & "'") + c.Position =0 + EXISTE_CAMBIO = c.GetString("CUANTOS") + c.Close + + End If + If EXISTE_CAMBIO = 0 Then + Msgbox("NO SE VENDIO ESTE PRODUCTO, NO SE PUEDE CAMBIAR","ALERTA") + ELSE If cantidad.Text = "" Then + Msgbox("Cantidad no puede ser 0","Cantidad") + Else If cantidad.Text > EXISTE_CAMBIO Then + Msgbox("Exede la existencia", "ADVERTENCIA") + Else + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object ("DUR",0,0, cantidad.text,"CAMBIO" & l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,Main.tipov,precio2)) + skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + + + cantidad.Text = "" + Panel1.Visible= False + + + End If + + Else + If cantidad.Text > 15 Then + Msgbox("Exede la existencia", "ADVERTENCIA") + Else + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + + skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object ("DUR",0,0, cantidad.text,"CAMBIO" & l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,Main.tipov,precio2)) + skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + + + cantidad.Text = "" + Panel1.Visible= False + + + End If + + End If + +End Sub + +Sub LV_PRECIOS_ItemClick (Position As Int, Value As Object) + c=skmt.ExecQuery("select PRECIO, NLISTA FROM LISTA_PRECIOS WHERE NLISTA = " & "'" & Value &"' AND CAT_GP_ID =" & "'" &L_PROID.TEXT&"' ORDER BY NLISTA ASC") + c.Position=0 + l_precio.Text = c.GetString("PRECIO") + c.Close +End Sub \ No newline at end of file diff --git a/B4A/C_Promos.bas b/B4A/C_Promos.bas new file mode 100644 index 0000000..d89cf27 --- /dev/null +++ b/B4A/C_Promos.bas @@ -0,0 +1,431 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI + Private l_promoDesc As Label + Private lv_prodsFijos As ListView + Private clv_prodsVariabes As CustomListView + Private l_prodsFijos As Label + Private l_prodsVariables As Label + Private i_prod As ImageView + Private l_prodX As Label + Private p_prods As Panel + 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 + Dim prodsPedidoActual As String + Dim montoPedidoActual As String + Dim promosMap As Map +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("promociones") + 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) +End Sub + +Sub B4XPage_Appear +' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.blue) + prodsIds.Initialize + prodsCants.Initialize + prodsPrecios.Initialize + prodsIds2.Initialize + prodsCants2.Initialize + prodsPrecios2.Initialize + Dim m As Map = Subs.traeTotalesClienteActual + prodsPedidoActual = m.Get("productos") + montoPedidoActual = m.Get("monto") + Log($"laPromo=${laPromo}, el cliente=${elCliente}"$) + Logcolor(">>>>>>>> " & laPromo, Colors.Magenta) + 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) + Log("muestraPromo:"&promo) + Private thisLog As Boolean = False +' If thisLog Then Log(promo) + estaPromo = promo + esteCliente = cliente + Private mp As Map = Subs.traePromo(promo, cliente) + If thisLog Then LogColor(mp, Colors.blue) + Private prodsPromo As Map = mp.Get("productos") 'Los productos de la promoción. +' Private invDispPromo As Map = Subs.traemosInventarioDisponibleParaPromo(promo) + Private invDispPromo As Map = Subs.restaFijosPromo(mp) + If thisLog Then Log($"invDispPromo=${invDispPromo}"$) + If thisLog Then Log("Max promos por inv de prods FIJOS: " & Subs.revisaMaxPromosProdsFijosPorInventario(mp)) + If thisLog Then Log("Max promos por inv de prods VARIABLES: " & Subs.revisaMaxPromosProdsVariablesPorInventario(mp)) + maxCantPromos = Subs.revisaMaxPromosProdsVariablesPorInventario(mp) + et_promoCant.Text = 1 + 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.RGB(100,149,237)).append("Promocion: ").pop.append(CRLF).Append(promo).append(CRLF).Append(mp.Get("descripcion")).Popall + prodsFijosTot = 0 + 'Ponemos el texto en las etiquetas de la cantidad de productos. +' Dim pf As List = mp.Get("prodsFijos") + Dim pv As List = mp.Get("prodsVariables") + Dim listaPreciosPV As List = mp.Get("prodsVariablesPrecios") +' Logcolor(listaPreciosPV, Colors.red) + 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("Prods variables: " & 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. + If thisLog Then Log("Prod Variable: " & invDispPromo.get(p)) + Private existenciaProdVariable As String = invDispPromo.get(p) +' c2.Position=i +' jpeg = c2.GetBlob("CAT_GP_IMG") +' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +' bmp.Initialize2(ins) + Private indicePV = pv.IndexOf(p) + Private estePrecio = listaPreciosPV.Get(indicePV) + Private thisProd As Map = prodsPromo.Get(p) + If thisLog Then Log(thisProd) + If existenciaProdVariable > 0 Then 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 + 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.Text = Text + l_prodX.Tag = inv + l_prodX.TextSize = 13 + p_prods.Height = Height + l_prodX.Height = Height +' 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(4) +' Log($"precio|stock:${laCant.tag}"$) + laCant.Text = $"$1.0{laCant.Text-1}"$ + If laCant.Text < 0 Then laCant.Text = 0 + +' Log(Regex.Split("\|", laCant.tag)(0)) + Private precio As String = Regex.Split("\|", laCant.tag)(0) +' Private inv As String = Regex.Split("\|", laCant.tag)(1) + Private prodId As String = Regex.Split("\|", laCant.tag)(2) + Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":estaPromo) + Log(tmpMap) + promosMap.Put(prodId, tmpMap) + If laCant.Text = 0 Then promosMap.Remove(prodId) + LogColor(promosMap, Colors.Magenta) + cuentaProds +' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +' l_totProds.text = $"Total Productos: ${totalProds}"$ +End Sub + +Sub b_prodMas_Click +' LogColor($"prodmas clic - ${Starter.cp_running}"$,Colors.Magenta) + 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(4) +' Log($"precio|stock:${laCant.tag}"$) +' Log($"Indice: ${index}, cant:${laCant.Text+1}, precioU: ${laCant.tag}"$) + Dim esteTag As List = Regex.Split("\|", laCant.Tag) +' Log(esteTag) + If laCant.Text + 1 <= esteTag.get(1) Then + laCant.Text = $"$1.0{laCant.Text+1}"$ + cuentaProds + End If +' Log(Regex.Split("\|", laCant.tag)(0)) + Private precio As String = Regex.Split("\|", laCant.tag)(0) +' Private inv As String = Regex.Split("\|", laCant.tag)(1) + Private prodId As String = Regex.Split("\|", laCant.tag)(2) + Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":estaPromo) +' Log(tmpMap) + promosMap.Put(prodId, tmpMap) +' LogColor(promosMap, Colors.Magenta) + End If +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +' l_totProds.text = $"Total Productos: ${totalProds}"$ +End Sub + +Private Sub et_pCant_TextChanged (Old As String, New As String) +' LogColor($"txt changed - ${Starter.cp_running}"$,Colors.Magenta) + cuentaProds +' Starter.cp_running = False +End Sub + +Sub cuentaProds +' Log("=====================================================") +' Log($"Inicia cuentaProds - ${Starter.cp_running}"$) +' Starter.cp_running = True + 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 prodsFijos = " & 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(4) +' 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 + 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) +' Log($"Termina cuentaProds - ${Starter.cp_running}"$) +End Sub + +Private Sub et_pCant_FocusChanged (HasFocus As Boolean) +' LogColor("Focus changed", Colors.Magenta) + cuentaProds +' Starter.cp_running = False +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.guardaProductoSinGestion(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn, prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, Starter.tipov) + Next + For t = 0 To prodsIds2.Size - 1 'Guardamos los productos variables de la promocion en pedido. + Private pn As String = Subs.traeProdNombre(prodsIds2.Get(t)) + Subs.guardaProductoSinGestion(estaPromo, prodsPrecios2.Get(t), prodsCants2.Get(t), pn, prodsIds2.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, Starter.tipov) + Next + lv_prodsFijos.Clear + B4XPages.MainPage.bTerminarClicked = True + B4XPages.ShowPage("productos") + B4XPages.MainPage.productos.b_terminar1_Click +End Sub + +Private Sub b_continuar_Click + cuentaProds + Log("====================================================================") +' 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)) + Subs.guardaProductoSinGestion(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn, prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, Starter.tipov) + Next + For t = 0 To prodsIds2.Size - 1 'Guardamos los productos variables de la promocion en pedido. + Private pn As String = Subs.traeProdNombre(prodsIds2.Get(t)) + Subs.guardaProductoSinGestion(estaPromo, prodsPrecios2.Get(t), prodsCants2.Get(t), pn, prodsIds2.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, Starter.tipov) + 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.lv_catalogos.Visible = True + prodspage.lv_promos.Visible = False + prodspage.clv_productos.AsView.Visible = False + End If + B4XPages.MainPage.bTerminarClicked = True + B4XPages.ShowPage("productos") +End Sub + +'Sub Activity_KeyPress (key As Int) As Boolean 'ignore +' ' BACK key pressed +' Log("Keypress") +' If key=KeyCodes.KEYCODE_BACK Then +' Log("BACK") +' Return False +' End If +' Return False +' ' Returning False signals the system to handle the key +'End Sub \ No newline at end of file diff --git a/B4A/Files/pedidoitem.bal b/B4A/Files/pedidoitem.bal new file mode 100644 index 0000000000000000000000000000000000000000..4edaba3c0838c8229c79a8bb33eee2507e9af681 GIT binary patch literal 2013 zcmb7EOK%iM5T3=mh6VEq5D0mgcML3xF#!@dgcWNfU|Acp#J50urtR%8o*B)w*O(Jh zE)gUW5)$IdJ=Yv^$SD`Fd?Tlv$Uh*r+?MaF@r>BeZv(03zqDaTI@oz`kGhVov=M6Qb{pG_F6tbsPwAyN11#7Hi-v=vx z2ru6{aO#R6y6Ok52l2ZD8hk{*Jij?Hzx49P(6!29W9j(OZ-$!H#mdlMaplCzt9Ua)Fn$--G<;bp1&-wmM zH`Y2Bz|I7&Kj-O|vA$S-r#gz&vYG(5S%0Kr_<|tauxf^ZEN{@C2$CXu(=mxbJq+4W zu~C5?rYm1hTei}M5iidh&$j8ht<6l^@?u*BZaa*{M=H|r{9WTEoQL6$ztT}ci;Te#p)E9NSTpXe92)$N(I&>zP3={=~fDSg?x1)d_aLmJ3!)ZCxlXA7kJ-? zUVptgD%zK+S z-EQ|_rorkI4}tN5a~M=ANbUSfy)#rHRmFDH7cu3)N zxdIF}DKHe|oZXbzUVbY|x=}-~U5m3oF4PO2NEXVW=H4J|i tBr_%`)AczXeF^pzh4WxJTB~s92(IAHsNw)?iu=j;z@5f?wmq5SyajXaSquOG literal 0 HcmV?d00001 diff --git a/B4A/Files/proditem.bal b/B4A/Files/proditem.bal new file mode 100644 index 0000000000000000000000000000000000000000..dc03e73111bfa830da24504b33a924948f6b94e6 GIT binary patch literal 5141 zcmbtW&vO(-6rMG^ffW!`Q2a>%g#ckq0*ZhNo9rTi%?370f~bVaZYMiBnc13|WQ7w| zUMzo9QAL&I)w@SMc<|&!e%$n6dD8ztZ@IrH8z zw(SW`dlKJWXq(Zp70*~Qyqh~9XM(}Bqu1-oNkca~Q+Mp@xb8khgONqgv#sWIFEqYl zOJt}l+ofOS&D2MA%M-u(s^OK@XI^t5=K~d;7_!IHkTPQn`n;MlRHG$?P`3#drtfwe zjSKp$GMk1eC}i9;LeN(kzd5s{tg2D98Do8B*7lIgxU$5-CEbcSkTD(9B_fwV@t5#F z8nDxP(2{7}Fp!x9moYJJ%5~gtD;hTa_97|nrhK6sS{rs1nJO624{Pf4KefM{L zxutaX*zd!4zyIrponL>m^>ATetM_I0*21=*wcX!+d*C|!&Y&^=id()}S1&`#&FZdE z$>fx4%v;LIj4MwMn8D0F*ma@{Gtn($LH7*X$}KwbW$;x;Z|Jk8I?%y+t~r+(wN2Xz zM$f}C6D*5Q5%&sh3ADoDdPRLfaho7UqCdB2nv)erDT`-dSQT@zs>+6EisdKzlFn?I zjfK_Bzpgv*1wl^L)91O7#})J^f`rI(UNT$*`Eb)E-7!G(LAo;4oJUG{cAbkGM%Am) zbxj%bHIEBxx>c#!j`;9J8lL*psJi6X;0x$F!7s#YqwG)z>i|I?v}wbujoJ=Q(G4c# zuG&sjIg(B^oMyO0t0D_ZdevBT1!Pk#$yqXNW$`4d6q}bsM7>%ytoc_u1Vr|PH@M>+ zKiFYa5N&3}@D}uXFx(B(h!^oWp1_=8D#kPK=qzdk-!Cpicc>e>Qa1$M){5e%ZW?vh zxFt*}P89QWjuOP`LgeOb%gZ*DYx@l3kk({OEoW;EIPEX-e zL{C%sVs0!q!AVWKeda8Lzx{!h=9f=RI(T0acc3CasL;}+wan8IW9eP_cX10l02jy)&)QGS0PF0dmuy^^#y8Xv=^;+<-vmo`yeFf)6a2bWo17#X!1+G zh7T8LucM_BlKTOOVJH&ZZ_o$=+%n8WprG+Vw5@^%VGHpHGY!-6@sPynG6Dtz9~cTU z&(oB>Pe2n!6MCZEYGC@I6JQQOh=4g9sEo>?3s$}O(BdXo;_x?$x-iNxZo!PvgqWSAF_#N<=r9i6 zDQHsKXS37;-f9M7!13Fb|y&@f?JRi0=pL^APw;b|TprCRUTI&nMXhOvUlwsR|z4 zsSC;IFam}!T|`T1Yf`NM6Q62$6uMAt95x{iEr>Fx2vGtNry6-9h=y0Y9Z{G(-qohd z&1k(V%gf9AAy6T|j;I$gwPDm5_j*^G4&$h=iFb6h9~bXFY%F;9LJ$UrcvBGmbiq5i z+7qx8248~EQUNbx*bY+(+LU$zeY%~ZEMt?LVv1!n`Co8_nkjUGBX<$@@{*q96piIt zbH_N2)6g{8n>bC|_Cm?O3UT(*alBA=WABf!yo%QPucZ%T!E_UZN5k|3tnka_V^xJ~ zaMKQa7sxkK73eUI>jtXAhgcNHm0N8L*LYQ+7eSO%j3c^URrm-id_)H!2}_3{M0K_= zQ1i6*qRD%?4}#PHzbfFGtzQ*B#+ucr-^g}BeIr$Y4&$h=Srx9s{L%6D@r>gQN2~Bw P&}^s*b7^wTPSgGeCHSGS literal 0 HcmV?d00001 diff --git a/B4A/Files/productos.bal.old b/B4A/Files/productos.bal.old new file mode 100644 index 0000000000000000000000000000000000000000..51d45cc1786a119b84d80f18d53d58ea74893232 GIT binary patch literal 14466 zcmc&)TW}o36GwOX%SzBtfgy+7{?xq_qrAf*9?NR%1r9o7s_M zlLrnELP8!6;gMHW_~7BkSbn3RFR)R<;OYa&Q8y?G%L+Y zj!;$4-oAbN_U&_T-@dz}bSjm4q&bzk1fQK~7o%kgo;7cIr!FTi=p1v6O2u^3;PoFJ z&t_yWSG2smdD5#5a&o{TT`(NaDjG#9AIOboCy$Jc4v%g^ud{#7^U6+bUJE!r<04R{ zIm0a)E=g;0y6lzhD>!3t)+m`1mbp-y)C#8JaRt@s)_Of!ua|aNv!%(3TP~8eC#T9q zvt)c0bmx#UW!jOQN}tx*lSQ*yph@=Rtl<_6e`>`w3s#xzA?|H(fbiIp)wwBul4n)Q zq(o1*$Z>`4u8@pydqQrnn$@GI{fasu%S>CgK@f(lsz+S9#U(*6;*x+xAciJjXf8WA zI?lzMGGLe$6OR}U3=|T8`mvg$Vze{EyTId~QTT zc%^7@Kyx2lohrG3fTn$)LAw-fz6o@IPdn%xXg8zn zL<{uniqIXP19|#^GL~n~PRV(jvggdsic@+5-0L1E{`AhB6AN#=c31nIyIvo9W9N>E z_L0ulceVe^-PQ5hWg{bR45sgJ&A+|)?lbSa|3Ui2r$2e_g{Stv_k6SYLg~qw%^z&O zcJtYZnQc2Se(jdj>$ko8%#-iD-+y)fL{HD@zK8#^@yx$dkG=elSKI!x6_-lw}Z`JPsqqtjT2p8yV5lbGAKRa81);Tw6}To-3Mp%d|` z+1!7{aG?u?oEXn2aUqX0s80wnk$#@HsuuRcMduCILc;B$D%+g)c-*{lg_9SoqBld; zGp1FV@i=kDa0)YJ$+Gi4Nx@t1w~AH9O&0@uF+zl2W!c!Id{fM<0LjjN%bPVSL6@g4 z1Xds87LeY|_~@niCD-5;MbdQWQMqK4ags_aMzLr)CCVUgRjX!^JL|3&SV5YMOQXcb zuq!hL^UYM*Et;;lAnYC^#Po2X>>^ahjG{GH<#5@xm?#;Ebl*_!V19CJ@X+DBmb;1O zv{CgCDP`Nv`CFp7Jrt`N_N>u)qEey;waIRd_cCL}IZE!FCAV64jC9};Ke~@u-b_~Z zPz?qozHQs8RILXjQb$Hda)iX@9mGvemmM#&U{=e1{Ig40nmd!Rad>Be0r!~AjpTD< zlZQvg29J-9DmF z!xSdJ4p_M0{MhU^& zM}}Bbww(Xylk==B(@m@?H?o*)D&oNcK?q)GLhvXE!Sf~?VD(tr2@GPo*~t6VH=Sjp zn9iCp+)-P=-U?zHTI=!Avz)C60{jIA#h8Q@I5^<`L@s~h|1yrhRQkuY&uLP;)9iV&+ZU!Y7 z>;w^Fpm}u{hMMTo4zv~$o#dd^91aKF5^%aewDPj!Ulb>z(u~nuIyGjQJNrMJFP>Yd=CtR5)X`k zh`=<8?qZnk%NzkWo$AB0^)5Wr5^B*g4sna)Xp(31!{G*3eE7?+6L0yIn15M06ZB@k+RYQr&@-VH$?(|bS(rpH0liRumv z#U(!6bSm*dB-Q+NJP@LqbH0JDGDVC#2aW*DB?aIjh)rm%6xMN70VzABpxRC( zsBk5TiIX7u(Zb|Kg>mpKo5Bj1bO=q(w*5yoq$A4nq9aO$4I|1)KB5~^e-}XRNq}gRLM%iSidKv0K1}r!*qRVE zp=J$;GT-WmQenf0PGgcDqpL-f5xL434X@cPP_h9{3i$BUw*~C2AhvOwcjpagv0n^I z7*JOKM?7Bpi>*`zdK zv{q`|4a$$I{h$Pc10X^SZVlKMf#^VsxfVH3U5j0i3BM1-rO6pc)Cs|*WeZ&+5YjA3 zlY2q*qlIab3Uw@(O^|frAvD>E;KpwvhtXE9@pRyMvxx$x9s&N(AOv{Yy&Uis#@8G8 z6IgQ%z%zDr;HmIa0e)K$@d|i`ej?!Shv0exZ)43h0AI#*9e65S6Y%^FlPu!TK{8A= zOe_-dmw=Fn=XfIEXCb)W!1D{kV&MBSec;A?Lt>SvrCz#oTX2s}M5z&{H@ zfaiE3;J*dI^#nimv!DqIurZ$iOpfX6f+_=i9=27DDW)*E;aYbFMsrJNq|U@S^C zRM-IUa}Ym-wwkJjbxauX==i|5gAm|3E)h?=m#b>#F}~iwFJR3z0RJqe>p7kZ8vy9(n#O@Yg{kWe`~z5X4ZvgeBH*d80pPz4aUJ;NRgGT9Gs6h*s;c35qKN+v z1lJq*?_$jh3Op4y0Q~nLt^=REsyTwWF{wsXH5^X_{DTl&Z{Sa3%?k=V6*d6;_aUwW ze-@l%m#ZG}s;X)Ha^;Nm2L55Jc|n1v!UlkU1mZgI$*US2cqsBy4Lu;2YvNS%1I+M& z9|pAnt#t&C8_{a7rXK~l6eb?2y03-!rDqH+=C#ld!ImP0tH@6;mxAaIgg24kiaL%H z;57VN=t_K-Ngl?>xJ2Z&5V}65uYk}oUFnzq$1o##Fz+AT@6v2;rr7U>}gj6FGj)UzA z@MRg<6gmlBswoU8u46z8lua=&)trn(8Sk)Zxs6Q@5V_Ed~#vg+IZ4jNW0iMqezdONEXR54;CLrH|!20J++` JU7bp${s%ke5_i7X6&~STMVmMYKM4ddcpV&L$MRy?&W}Y%w9>9)*{hW!tz`%hd9*vS#+jX2 zW@aVZKrk4pa1yFgm4c$UapxEg95``tT)u@W3Jw$;IZy=`isB-^@AdS|&i*(n*{F)G z>X|ohx?jKdy{}*QNLj-$j_)#z2XWtvHilNLhxWQ1Ui~QKf_}K*o2{1RKLp*%a@})7 z+ijcvBkVHW4nxn4I*dZ26g0WA-15DqH)jUBJDx1p3zVVI@|(76`V$|+>$|c#aWq79E{T zD{fZoAnXW?ZfX@Rx4PXtXSyjj<(ZbEp0S&pPIOJLZhNjJ=tl~1l*sZoqHe}Va0d&F z3>pE@GP9{=2B&4ZnnPoh%p~3Aq~yb+XmpAx)iUSP@+Ugv$2#Q4JLFG7{uJ61XrD&= z4BBVW_H@Xf>ySU+Awx7SqV0W)UNWY|g^fG!zjE;G`0dJ_!-tj*RtvYs5B}93Kl1*g z)#{zu>=}RJ*!8I!zuooDKaC&%`uD%f-+uhfhZf#F{=u<#fBC0hJ@)obc0XMi-yObL zyw-g9H^vh`|Ji}pVE0F8#HSwAuC^?CR$4IwyIue@>`SiY7v`+c)a!@HhUh1W*UE@; zM9OsSrWqnxrM543I^Xck4Rgh@4)ifziry7wJje6(6G1EJVd+=QYn^?WIBVTZY| zIE{9P*<5Wq&SKrSESEX8-MZ6mST#Fzq~~RG-DI?k#>HsH-!gsJf*|Y&%}bmp?`*a(k4taHt~;Za(4tksZA3%wR?ZP<-)jWexT_N6shWNW5dU-Nvi zp+t6^eBEvYr1Vj8re8K>#mJKHTuT#udTT%xh8OH`ZN~GF)Ih(G0_OP*%a?GH#|w0q z;MHZog4wX!fne@f>ylc!ZMjTrqi3b^UCV4VZ1+;Xl})1e3oI#!{fj1T)uoamA*kb_ zZ3Ra@)Yf5Twq%Cp%f8)U0+kVRfa`JPgjukzn9Y`B9WSU?4vN}3sx=WPVIR=|G1BPy zwB(Ugopl5FQtakFO9d<8yl;bA@p4$A-*wZW>2tmn1Xe?^C%6IV5YjD{Amz5MrJQ+j z&D#L2J;#|g)dFxFyA{~igv!+zgKX{KDQl^2$m$_usGnPP?HpBO}b+12P^YQJNM9a|dLU2Xmx4ILxS zoqHuo#OFZ; z>CnR(_teS!{-XtX{Vd0H?vI1YujT+fEa-=*>=KI9rc4T~nn9?DQdTRJ-aNS#1g3*=(dQ$^XxR8>XEpO?m?oZbnb|B?K>zMkef^@1{YEfvF)THIq z87tz;>G_4(SLds>VnynW8b;F9q5~PDem({{I^Gv+cxQlY~i7T`y@^ z9}RgJLNrXc)9Js3IOc^1p*gVxA9P_b%IVdS_A%6ocFmq$1M@$XICjSP+F z=rJeF%84vHLbt>gDJpNtoE)Jf*+t-nk>hIRVNC4tB$gfF8EhAe^hg62p2S38VnyJZ z5P|%a0GPoj5;(;3*)Hx^%5{ESi0gR>Nksd!nh`yTHp+0mfHp!?D#p#t&HdD%$uIL1 zZX96nWRx9|*uMxdc14`K1&tt(hY&|1P_XkswB3RSVTXAx8uMZ!lbb)1Arj{0t`DRz!0W1FzgtIGY}Z&S8#j)cnC0OG%y(m zu{W_L^zQ-YY3PJ8harrkDIy)wYAFbK$bAWyqiCa>fBeIrCm@V)*f9#@nC&=(+zDKs zK^xtCCUNQD=9lsK0`>IyD`+6^ z#o~+9yo5`Phh&G#O=!!wg|-BJ3QdMfnrJXd6O$IlRK!Epm}d7GT;lYVsNwu&G+AYm zA=*C0S1;pon!+qDabh}BOurKD$0?>DDW)I+WFSaLOoLdWz#rdqUe4fAW%Vp1_R3Xo zp(Ul>r_}(gt2{uFl)(LXkUUbG>6d~zycjwKgjP~OZw91*29p$UrQ9>}RT%kjhj5fO2`03wcxbBJR--J2A`w>u0 z@Fwu_;*B#0Wkm7?NIQi0BBr{pc+=n(@UEfzea8E5Fu66n&tt?6;k|^Zy78VGRMLCv zNdv>D(2|l)gImD+0=g@_Aqc-|ay$GcU}As;RPcTk!T^5jBCG1jSJ82Y@ctU6y03WC z;1=*ECie&LZ@^L-Z)R>NyuXf)3h)21&wTqc?j{QD8~_YPGcD#J0wzW zS$oigJsn31n(T9=xCXTlF+Mdq(8S)vmZ0o8HL^&{LE<$CSu};$s8;hJF@`25H{6ZP z0bHVQh-HWu`It;5p))}eI*q17=a3|H0x?|ZG}$L~dMu$+kh$r27{BmtogApwDNirRv(il%z+)9Sk&vTokIxgY&TXpO(jC0w>J{_rn8NRMCJ+W5WZ zjr4eN;v}x!hix0W7pUi9H+|T?3{6ayzHi2UL6L8p8y-N6sD@4?G%)VJ`VK+;X2CAEPD)2J7riT>ns9b#NVOL)kA9~Xu9y?zM8kivTm zf-snwOK(8zvjcIBG_C02uXS^_OgNo$%<_qQhtbmiX+%TWl0TR>*!pv7c*gEfCLbZoQ06)2ww?D PG)Xd0^bjT18ODDBZbf~9 literal 0 HcmV?d00001 diff --git a/B4A/Subs.bas b/B4A/Subs.bas new file mode 100644 index 0000000..0453ff6 --- /dev/null +++ b/B4A/Subs.bas @@ -0,0 +1,1413 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=StaticCode +Version=11 +@EndOfDesignText@ +'Code module +'Subs in this code module will be accessible from all modules. +Sub Process_Globals + 'These global variables will be declared once when the application starts. + 'These variables can be accessed from all modules. +' Public GZip As GZipStrings 'Usa la libreria CompressStrings + Private su As StringUtils 'Usa la libreria StringUtils + Dim phn As Phone + Dim devModel As String + Dim errorLog As SQL 'Requiere la libreria "SQL" +' Dim wifi As MLwifi + Dim ssid As String 'ignore + Dim rutaMaxPoints As Int = 3000 + Dim rutaHrsAtras As Int = 48 +' Dim rutaInicioHoy As String = "" + dim ruta as string = File.DirInternal +End Sub + +'Pone el valor de phn.Model en la variable global "devModel" +Sub getPhnId As String 'ignore + 'Requiere la libreria "Phone" + devModel = phn.Model + If devModel.Length <= 3 Then 'Si phn.Model esta en blanco ... + Dim t As String = phn.GetSettings("android_id") 'Intentamos con "android_id" + devModel = t + End If + If devModel.Length >= 3 Then 'Si tenemos valor para phn.Model + File.WriteString(File.DirInternal, "phnId.txt", devModel) 'Sobreescribimos archivo phnId.txt with deviceId +' if starter.logger then Log("Tenemos phnId: "&devModel&" "&File.DirInternal&"/phn.txt sobreescrito") + Else If devModel.Length < 3 Then ' Si no tenemos valor, lo leemos de phnId.txt + Dim s As String = File.ReadString(File.DirInternal, "phnId.txt") + devModel = s +' if starter.logger then Log("Leemos id de "&File.DirInternal&"/phnId.txt") +' if starter.logger then Log(devModel) + End If + Return devModel +End Sub + +'Comprime y regresa un texto (str) en base64 +Sub compress(str As String) As String 'ignore + 'Requiere la libreria "CompressStrings" +' Dim compressed() As Byte = GZip.compress(str) +' Dim base64 As String = su.EncodeBase64(compressed) +' if starter.logger then Log($"Comprimido: ${base64.Length}"$) +' Return base64 +End Sub + +'Descomprime y regresa un texto en base64 +Sub decompress(base64 As String) As String 'ignore + Dim decompressedbytes() As Byte = su.DecodeBase64(base64) +' if starter.logger then Log($"decompressedbytesLength: ${decompressedbytes.Length}"$) + Dim bc As ByteConverter + Dim uncompressed As String = bc.StringFromBytes(decompressedbytes,"UTF8") + Log($"Descomprimido: ${uncompressed.Length}"$) +' if starter.logger then Log($"Decompressed String = ${uncompressed}"$) + Return uncompressed +End Sub + +'Convierte una fecha al formato yyMMddHHmmss +Sub fechaKMT(fecha As String) As String 'ignore +' if starter.logger then Log(fecha) + Dim OrigFormat As String = DateTime.DateFormat 'save orig date format + DateTime.DateFormat="yyMMddHHmmss" + Dim nuevaFecha As String=DateTime.Date(fecha) + DateTime.DateFormat=OrigFormat 'return to orig date format +' if starter.logger then Log(nuevaFecha) + Return nuevaFecha +End Sub + +'Genera una notificacion con importancia alta +Sub notiHigh(title As String, body As String, activity As Object) 'ignore + Private notif As Notification + notif.Initialize2(notif.IMPORTANCE_HIGH) + notif.Icon = "icon" + notif.Vibrate = False + notif.Sound = False + notif.AutoCancel = True + Log("notiHigh: "&title) + notif.SetInfo(title, body, activity) +' if starter.logger then Log("notiHigh SetInfo") + notif.Notify(777) +End Sub + +'Regresa el objeto de una notificacion con importancia baja +Sub notiLowReturn(title As String, Body As String, id As Int) As Notification 'ignore + Private notification As Notification + notification.Initialize2(notification.IMPORTANCE_LOW) + If Starter.logger Then Log("notiLowReturn: "&title) + notification.Icon = "icon" + notification.Sound = False + notification.Vibrate = False + notification.SetInfo(title, Body, Main) + notification.Notify(id) +' if starter.logger then Log("notiLowReturn SetInfo") + Return notification +End Sub + +'Escribimos las coordenadas y fecha a un archivo de texto +Sub guardaInfoEnArchivo(coords As String) 'ignore + ' Cambiamos el formato de la hora + Dim OrigFormat As String=DateTime.DateFormat 'save orig date format + DateTime.DateFormat="MMM-dd HH:mm:ss" + Dim lastUpdate As String=DateTime.Date(DateTime.Now) + DateTime.DateFormat=OrigFormat 'return to orig date format + + Dim ubic As String = coords&","&lastUpdate + Dim out As OutputStream = File.OpenOutput(File.DirInternal, "gps.txt", True) + Dim s As String = ubic & CRLF + Dim t() As Byte = s.GetBytes("UTF-8") + out.WriteBytes(t, 0, t.Length) + out.Close +End Sub + +'Escribimos las coordenadas (latitud, longitud, fecha) y fecha a una BD +Sub guardaInfoEnBD(coords As String) 'ignore + Log("Guardamos ubicacion en BD - "&coords) + Try + Dim latlon() As String = Regex.Split("\|", coords) + If latlon.Length < 2 Then latlon = Regex.Split(",", coords) 'Si son menos de 2, entonces estan separadas por comas y no por "|" +' If Main.Logger Then Log("LatLon="&latlon) + If Not(Starter.skmt.IsInitialized) Then revisaBD + Starter.skmt.ExecNonQuery2("INSERT INTO RUTA_GPS(fecha, lat, lon) VALUES (?,?,?)", Array As Object (latlon(2),latlon(0),latlon(1))) + Catch + If Starter.logger Then Log(LastException) + End Try +End Sub + +'Regresa la ruta gps solicitada comprimida y en base64 +Sub dameRutaGPS(inicioRuta As String, origenRuta As String) As String 'ignore +' 'Requiere la libreria "SQL" +' Dim fechaInicio As String +' Try 'incioRuta es numero +' inicioRuta = inicioRuta * 1 +'' Log("fechaInicio numerica="&fechaInicio) +' fechaInicio = fechaKMT(DateTime.Now - (DateTime.TicksPerHour * inicioRuta)) +' Catch 'inicioRuta es string +' fechaInicio = fechaInicioHoy +'' Log("fechaInicio string="&fechaInicio) +' End Try +' If Starter.logger Then Log("fechaInicio: "&fechaInicio&" | rutaHrsAtras="&rutaHrsAtras) 'fechaKMT(DateTime.Now) +' Dim c As Cursor +' If Starter.skmt.IsInitialized = False Then Starter.skmt.Initialize(ruta, "kmt.db", True) +' If Starter.logger Then Log("select FECHA, LAT, LON from "& origenRuta &" where FECHA > " & fechaInicio & " order by FECHA desc limit " & rutaMaxPoints) +' c = Starter.skmt.ExecQuery("select FECHA, LAT, LON from "& origenRuta &" where FECHA > " & fechaInicio & " order by FECHA desc limit " & rutaMaxPoints) +' c.Position = 0 +' Dim ruta2 As String = "" +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' ruta2=ruta2&CRLF&c.GetString("LAT")&","&c.GetString("LON")&","&c.GetString("FECHA") +' Starter.fechaRuta = c.GetString("FECHA") +' Next +' End If +' c.Close +' Return compress(ruta2) +End Sub + +'Limpiamos la tabla RUTA_GPS de la BD +Sub deleteGPS_DB 'ignore + Starter.skmt.ExecNonQuery("delete from RUTA_GPS") + Starter.skmt.ExecNonQuery("vacuum;") +End Sub + +'Limpiamos la tabla errorLog de la BD +Sub deleteErrorLog_DB 'ignore +' If Not(Starter.errorLog.IsInitialized) Then revisaBD +' Starter.errorLog.ExecNonQuery("delete from errores") +' Starter.errorLog.ExecNonQuery("vacuum;") +'' ToastMessageShow("Borrada", False) +End Sub + +'Borramos el archio "gps.txt" +Sub borramosArchivoGPS 'ignore + Dim out As OutputStream = File.OpenOutput(File.DirInternal, "gps.txt", False) + Dim s As String = "" + Dim t() As Byte = s.GetBytes("UTF-8") + out.WriteBytes(t, 0, t.Length) + out.Close +End Sub + +'Revisa que exista la BD y si es necesario crea algunas tablas dentro de ella +Sub revisaBD 'ignore +'' if starter.logger then Log("subs.revisaBD") +' Starter.ruta = File.DirInternal +' If Not(File.Exists(Starter.ruta, "kmt.db")) Then File.Copy(File.DirAssets, "kmt.db", Starter.ruta, "kmt.db") +' If Not(Starter.skmt.IsInitialized) Then Starter.skmt.Initialize(Starter.ruta, "kmt.db", True) +' Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS RUTA_GPS(fecha INTEGER, lat TEXT, lon TEXT)") +' Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_ENCUESTA2(HE_CLIENTE TEXT)") +'' Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS UUC(fecha INTEGER, lat TEXT, lon TEXT)") 'LastKnownLocation +' Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS bitacora(fecha INTEGER, texto TEXT)") 'Bitacora +' Try 'Si no existe la columna CAT_CL_CATEGORIA la agregamos. +' Starter.skmt.ExecQuery("select count(CAT_CL_CATEGORIA) from kmt_info") +' Catch +' Try +' Starter.skmt.ExecNonQuery("ALTER TABLE kmt_info ADD COLUMN CAT_CL_CATEGORIA TEXT") +' Catch +' If Starter.logger Then LogColor("No pudimos agregar la columna CAT_CL_CATEGORIA.", Colors.Red) +' If Starter.logger Then LogColor(LastException, Colors.Red) +' End Try +' End Try +' Try 'Si no existe la columna CAT_CL_SEGMENTO la agregamos. +' Starter.skmt.ExecQuery("select count(CAT_CL_SEGMENTO) from kmt_info") +' Catch +' Try +' Starter.skmt.ExecNonQuery("ALTER TABLE kmt_info ADD COLUMN CAT_CL_SEGMENTO TEXT") +' Catch +' If Starter.logger Then LogColor("No pudimos agregar la columna CAT_CL_SEGMENTO.", Colors.Red) +' If Starter.logger Then LogColor(LastException, Colors.Red) +' End Try +' End Try +' 'Tabla para la bitacora de errores +' If Not(Starter.errorLog.IsInitialized) Then Starter.errorLog.Initialize(Starter.ruta, "errorLog.db", True) +' Starter.errorLog.ExecNonQuery("CREATE TABLE IF NOT EXISTS errores(fecha INTEGER, error TEXT)") +End Sub + +'Obtiene el ssid al que esta conectado el telefono +Sub getSSID 'ignore +' 'Requiere la libreria "MLWifi400" +' If wifi.isWifiConnected Then +' ssid = wifi.WifiSSID +' End If +End Sub + +'Convierte un texto en formato JSON a un objeto "Map" +Sub JSON2Map(theJson As String) As Map 'ignore + 'Requiere la libreria "JSON" + Try + Private json As JSONParser + json.Initialize(theJson) + Return json.NextObject + Catch + Log(LastException) + log2DB("JSON2Map: "&LastException) + Private m As Map = CreateMap("title":"Error generating JSON", "t":"Error", "Message":LastException, "text" : LastException) + Return m + End Try +End Sub + +'Convierte un mapa a formato JSON +Sub map2JSON(m As Map) As String 'ignore + 'Requiere la libreria "JSON" + 'Convierte un objecto "Map" a JSON + Dim jg As JSONGenerator + jg.Initialize(m) + Dim t As String = jg.ToString + Return t +End Sub + +'Mandamos "coords" en un mensaje a "Sprvsr" +Sub mandamosLoc(coords As String) 'ignore +'' Log("Iniciamos mandamosLoc "&coords) + '' if starter.logger then Log("locRequest="&Tracker.locRequest) +' guardaInfoEnBD(coords)'Escribimos coordenadas y fecha a una bd +' Dim t As String +' If Tracker.locRequest="Activa" Then +' If PushService.au = 1 Then +' t = "au" ' es una actualizacion +' Else +' t = "u" ' es una peticion +' End If +' Dim params As Map = CreateMap("topic":"Sprvsr", "coords":coords, "t":t, "b":PushService.battery) +' CallSub2(PushService, "mandaMensaje",params) +' Tracker.locRequest="Enviada" +' CallSubDelayed(Tracker,"CreateLocationRequest") +' End If +End Sub + +'Regresa la fecha y hora de hoy a las 00:00 en el formato "yyMMddHHMMSS" +Sub fechaInicioHoy As String 'ignore + Dim OrigFormat As String = DateTime.DateFormat 'save orig date format + DateTime.DateFormat="yyMMdd" + Private h As String = DateTime.Date(DateTime.Now)&"000000" + DateTime.DateFormat=OrigFormat 'return to orig date format + If Starter.logger Then Log("Hoy="&h) + Return h +End Sub + +'Guardamos "texto" a la bitacora +Sub log2DB(texto As String) 'ignore + If Starter.logger Then LogColor(fechaKMT(DateTime.Now)&" - log2BD: '"&texto&"'", Colors.Magenta) + If Starter.skmt.IsInitialized Then Starter.skmt.ExecNonQuery2("INSERT INTO bitacora(fecha, texto) VALUES (?,?)", Array As Object (fechaKMT(DateTime.now), texto)) +End Sub + +'Regresa verdadero si ya pasaron XX minutos de la fecha dada +Sub masDeXXMins(hora As Int, mins As Int) As Boolean 'ignore + If (hora + mins * DateTime.TicksPerMinute) < DateTime.Now Then + Return True + Else + Return False + End If +End Sub + +'Regresa verdadero si ya pasaron XX minutos de la fechaKMT dada +Sub masDeXXMinsKMT(hora As String, mins As Int) As Boolean 'ignore + Try + ' if starter.logger then LogColor($"Hora=${fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute)}, Mins=${mins}, Actual=${fechaKMT(DateTime.Now)}"$,Colors.red) + If fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute < DateTime.Now Then +' if starter.logger then Log("+++ +++ "&fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute) & " < " & fechaKMT(DateTime.Now)) + Return True + Else + ' if starter.logger then Log("+++ +++ "&fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute) & " > " & fechaKMT(DateTime.Now)) + Return False + End If + Catch + Log(LastException) + End Try +End Sub + +'Limpiamos la tabla "bitacora" de la BD +Sub borraLogDB 'ignore + If Starter.logger Then LogColor("Borramos BD de log", Colors.Magenta) + Starter.skmt.ExecNonQuery("delete from bitacora") + Starter.skmt.ExecNonQuery("vacuum;") +End Sub + +'Monitoreamos los servicios PushService y Tracker para ver si estan activos (No pausados), y si no, los reniciamos +Sub Monitor 'ignore +' Private monitorStatus As Boolean = True +' if starter.logger then LogColor("Corriendo Subs.Monitor", Colors.RGB(161,150,0)) +' If IsPaused(Tracker) Then +' log2DB("Reiniciando 'Tracker Pausado' desde Subs.Monitor") +' StartService(Tracker) +' monitorStatus = False +' Else +' revisaFLP +' End If +' If IsPaused(PushService) Then +' log2DB("Reiniciando 'PushService Pausado' desde Subs.Monitor") +' StartService(PushService) +' monitorStatus = False +' Else +' revisaPushService +' End If +' If monitorStatus Then LogColor(" +++ +++ Servicios Activos", Colors.Green) +End Sub + +'Borramos renglones extra de la tabla de bitacora +Sub borraArribaDe600RenglonesBitacora 'ignore + revisaBD + If Starter.logger Then LogColor("Recortamos la tabla de la Bitacora, limite de 600", Colors.Magenta) + Private c As Cursor + c = Starter.skmt.ExecQuery("select fecha from bitacora") + c.Position = 0 + If c.RowCount > 650 Then + Starter.skmt.ExecNonQuery("DELETE FROM bitacora WHERE fecha NOT in (SELECT fecha FROM bitacora ORDER BY fecha desc LIMIT 599 )") + Starter.skmt.ExecNonQuery("vacuum;") +' if starter.logger then Log("Borramos mas de 600 de bitacora") + End If + c.Close +End Sub + +'Regresa la tabla "errores" en una lista de mapas convertida a JSON +Sub dameErroresJSON(SQL As SQL, maxErrores As Int, comprimido As Boolean) As String 'ignore + If Starter.logger Then Log("dameErroresJSON") + Private j As JSONGenerator + Private lim As String + Private cur As ResultSet + Private l As List + Private i As Int = 0 + l.Initialize + Dim m, m2 As Map + m2.Initialize + If maxErrores = 0 Then lim = "" Else lim = "limit "&maxErrores + cur = SQL.ExecQuery("select * from errores order by fecha desc "&lim) + Do While cur.NextRow + m.Initialize + m.Put("fecha", cur.GetString("fecha")) + m.Put("error", cur.GetString("error")) + m2.Put(i,m) + i = i + 1 + Loop + cur.Close + j.Initialize(m2) + If Starter.logger Then Log(j.ToString) + If comprimido Then + Return compress(j.ToString) + Else + Return j.ToString + End If +End Sub + +'Convierte una fecha en formato YYMMDDHHMMSS a Ticks +Sub fechaKMT2Ticks(fKMT As String) As Long 'ignore + Try + If fKMT.Length = 12 Then + Private parteFecha As String = fKMT.SubString2(0,6) + Private parteHora As String = fKMT.SubString(6) + Private OrigFormat As String = DateTime.DateFormat 'save original date format + DateTime.DateFormat="yyMMdd" + DateTime.TimeFormat="HHmmss" + Private ticks As Long = DateTime.DateTimeParse(parteFecha,parteHora) +' Log(" +++ +++ pFecha:"&parteFecha&" | pHora:"&parteHora) + DateTime.DateFormat=OrigFormat 'return to original date format + Return ticks + Else + Log("Formato de fecha incorrecto, debe de ser 'yyMMddHHmmss', no '"&fKMT&"' largo="&fKMT.Length) + Return 0 + End If + Catch + Log(LastException) + If Starter.logger Then LogColor($"Fecha dada: ${fKMT}, Parte Fecha: ${parteFecha}, Parte Hora: ${parteHora}"$, Colors.Red) + Return 0 + End Try +End Sub + +'Sub InstallAPK(dir As String, apk As String) 'ignore +' If File.Exists(dir, apk) Then +' Dim i As Intent +' i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(dir, apk)) +' i.SetType("application/vnd.android.package-archive") +' StartActivity(i) +' End If +'End Sub + +'Hace visible el panel con los parametros "Top" y "Left" dados +Sub panelVisible(panel As Panel, top As Int, left As Int) 'ignore + panel.BringToFront + panel.Visible = True + panel.Top = top + panel.Left = left +End Sub + +'Hace visible el panel usando toda la pantalla +Sub panelVisibleCompleto(panel As Panel, a As Activity) 'ignore + panel.BringToFront + panel.Visible = True + panel.Top = 0 + panel.Left = 0 + panel.Width = a.Width + panel.Height = a.Height +End Sub + +'Oculta el panel especificado y lo manda al fondo +Sub panelOculto(panel As Panel) 'ignore + panel.SendToBack + panel.Visible = False +End Sub + +'Centra una etiqueta dentro de un elemento superior +Sub centraEtiqueta(elemento As Label, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +End Sub + +'Centra un panel dentro de un elemento superior +Sub centraPanel(elemento As Panel, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +End Sub + +Sub centraEditText(elemento As EditText, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +End Sub + +'Centra una barra de progreso dentro de un elemento superior +Sub centraProgressBar(elemento As ProgressBar, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +End Sub + +'Saca el usuario de la tabla USUARIOA +Sub dameUsuarioDeDB As String 'ignore + Private c As Cursor + Private u As String = "SinUsuario" + If Not(Starter.skmt.IsInitialized) Then revisaBD + c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + If c.RowCount > 0 Then u = c.GetString("USUARIO") + c.Close + Return u +End Sub + +'Regresa el tiempo transcurrido entre la primera vez que se llama (paso 1) y la segunda (paso 2), usa el mapa global "Main.tiempos" +Sub cronoX(thisCrono As String, paso As Int) As String 'ignore +' If paso = 1 Then +' Starter.tiempos.Put(thisCrono, DateTime.Now) +' Else +' Return $"Tiempo transcurrido ${thisCrono}: ${DateTime.Now-Starter.tiempos.Get(thisCrono)} "$ +' End If +End Sub + +'Cierra todas las actividades y sale de la aplicacion (Android 4.1+ - API 16+) +Sub cierraActividades + If Starter.logger Then Log("closing activities") + Dim jo As JavaObject + jo.InitializeContext + jo.RunMethod("finishAffinity", Null) +End Sub + +'Regresa el cliente actual de CUENTAA como un string, y si no encuenta nada regresa "". +Sub clienteActual As String + Private x As String = "" + Private c As Cursor = Starter.skmt.ExecQuery("Select CUENTA from cuentaa") + If c.RowCount > 0 Then + c.Position = 0 + x = c.GetString("CUENTA") + End If + c.Close + Return x +End Sub + +'Marca un cliente como impreso, lo agrega a la tabla "CLIENTE_IMPRESO" y lo actualiza en "kmt_info" (IMPRESION). +Sub ponImpreso (cliente As String) + Starter.skmt.ExecNonQuery2("UPDATE kmt_info set IMPRESION = 1 where CAT_CL_CODIGO = ?", Array As String(cliente)) + Starter.skmt.ExecNonQuery2("insert into CLIENTE_IMPRESO (CI_CUENTA) values (?)",Array As String(cliente)) + If Starter.logger Then Log($"Cliente ${cliente} agegado a CLIENTE_IMPRESO y actualizado en kmt_info."$) +End Sub + +'Guarda el nombre de la ultima actividad mostrada "ultimaActividad(Me)". +Sub ultimaActividad(ea As String) 'ignore +' Private x() As String = Regex.Split("\.", ea) +' Starter.ultimaActividad = "" +' If x.Length = 4 Then +' Starter.ultimaActividad = x(3) +' File.WriteString(File.DirInternal, "ua.txt", Starter.ultimaActividad) +' End If +End Sub + +'Guarda el nombre de la ultima actividad en base de datos "ultimaActividad(Me)". +Sub guardaUltimaActividadBD(ua As String) +' if starter.logger then LogColor($"Guardamos ultima actividad '${ua}'"$, Colors.Blue) + Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("ULTIMOMODULO")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("ULTIMOMODULO", ua)) +End Sub + +'Regresa la ultima actividad guardada en base de datos. +Sub traeUltimaActividadBD As String +' If Starter.logger Then LogColor("Buscamos ultima actividad en BD", Colors.Magenta) + Private c As Cursor + Private x As String + c = Starter.skmt.ExecQuery("select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'ULTIMOMODULO'") + If c.RowCount > 0 Then + c.Position = 0 + x = c.GetString("CAT_VA_VALOR") +' If Starter.logger Then Log("Encontramos: " & x) + End If + c.Close + Return x +End Sub + +'Guarda el nombre de la pagina en base de datos la muestra. +Sub iniciaActividad(ia As String) + If ia <> "" And ia <> Null Then +' If Starter.logger Then LogColor($"Guardamos en BD '${ia}'"$, Colors.Yellow) + Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("ULTIMOMODULO")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("ULTIMOMODULO", ia)) + B4XPages.ShowPage(ia) +' If Starter.logger Then LogColor("Iniciamos --> " & ia, Colors.Blue) + End If +End Sub + +'Guarda el nombre de la actividad en base de datos e inicia la actividad. +Sub iniciaActividad2(ia As String) +' if starter.logger then LogColor($"Guardamos en BD '${ia}'"$, Colors.Yellow) + Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("ULTIMOMODULO")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("ULTIMOMODULO", ia)) + StartActivity(ia) +' B4XPages.ShowPage(ia) +' if starter.logger then LogColor("Iniciamos --> " & ia, Colors.Blue) +End Sub + +'Regresa una lista con las coordenadas ( latitud y longitud) guardadas en BD. +Sub traeCoordsDeBD As List + Private c As Cursor + c=Starter.skmt.ExecQuery("SELECT HGLAT as HGLAT, HGLON as HGLON FROM HIST_GPS") + c.Position=0 + Private lon As String = c.GetString("HGLON") + Private lat As String = c.GetString("HGLAT") + c.Close + Private coords As List + coords.Initialize + coords.Add(lat) + coords.Add(lon) + Return coords +End Sub + +'Modifica el ancho y alto de un panel dado con el ancho y alto proporcionados. +Sub panelAnchoAlto(p As Panel, w As Int, h As Int) +' If Starter.logger Then Log($"panel:${p}, alncho=${w}, alto=${h}"$) + p.Top = 0 + p.Left = 0 + p.Width = w + p.Height = h +End Sub + +'Regresa el dia de HOY como string, en español y mayusculas. +Sub dameDiaSemana As String + Private ds As String = DateTime.GetDayOfWeek(DateTime.Now) + If ds = "1" Then + ds = "DOMINGO" + else if ds = "2" Then + ds = "LUNES" + else if ds = "3" Then + ds = "MARTES" + else if ds = "4" Then + ds = "MIERCOLES" + else if ds = "5" Then + ds = "JUEVES" + else if ds = "6" Then + ds = "VIERNES" + Else + ds = "SABADO" + End If + Return ds +End Sub + +'Regresa cuentos clientes fuera de frecuencia hay con venta. +Sub dameClientesFueraDeFrecuencia As String + Private dia_visita As String = dameDiaSemana + Private f As Cursor = Starter.skmt.ExecQuery("SELECT CAT_VA_VALOR as dia_visita FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = 'DIA_VISITA'") + If f.RowCount > 0 Then + f.Position=0 + dia_visita = f.GetString("dia_visita") + End If +' Log("-> "&dia_visita) + f = Starter.skmt.ExecQuery("Select count(distinct PE_CLIENTE) as cff FROM kmt_info INNER JOIN PEDIDO ON kmt_info.CAT_CL_CODIGO = PEDIDO.PE_CLIENTE WHERE kmt_info.CAT_CL_DIAS_VISITA <> '"&dia_visita&"'") + f.Position=0 +' Log(f.GetString("cff")) + Private cff As String = f.GetString("cff") + f.Close + Return cff +End Sub + +'Regresa el almacen actual de la base de datos. +Sub traeAlmacen As String 'ignore + Private c As Cursor + Private a As String + c=Starter.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + c.Position = 0 + a = C.GetString("ID_ALMACEN") + c.Close + Return a +End Sub + +'Regresa el nombre del producto desde CAT_GUNAPROD +Sub traeProdNombre(id As String) As String + Private h As Cursor + Private n As String + h=Starter.skmt.ExecQuery($"select CAT_GP_NOMBRE from ${traeTablaProds(Starter.tipov)} where CAT_GP_ID = '${id.Trim}' union select CAT_GP_NOMBRE from CAT_GUNAPROD2 where CAT_GP_ID = '${id.Trim}'"$) + If h.RowCount > 0 Then + h.Position = 0 + n = h.GetString("CAT_GP_NOMBRE") +' Log(h.RowCount&"|"&id&"|"&n&"|") + End If + h.Close + If n = Null Or n="" Then n = "N/A" +' Log(h.RowCount&"|"&id&"|"&n&"|") + Return n +End Sub + +'Regresa el nombre del RMI desde CAT_RMI +Sub traeRMINombre(id As String) As String + Private h As Cursor + Private n As String + h=Starter.skmt.ExecQuery2("select CAT_GP_NOMBRE from CAT_RMI where CAT_GP_ID = ? ", Array As String(id.Trim)) + If h.RowCount > 0 Then + h.Position = 0 + n = h.GetString("CAT_GP_NOMBRE") +' Log(h.RowCount&"|"&id&"|"&n&"|") + End If + h.Close + If n = Null Or n="" Then n = "N/A" +' Log(h.RowCount&"|"&id&"|"&n&"|") + Return n +End Sub + +'Regresa la ruta actual de la base de datos. +Sub traeRuta As String 'ignore + Private c As Cursor + Private r As String + c=Starter.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + r = "0" + If c.RowCount > 0 Then + c.Position=0 + r = c.GetString("CAT_CL_RUTA") + End If + c.Close + Return r +End Sub + +Sub traeCliente As String 'ignore + Private c As Cursor + Private cl As String + c=Starter.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + cl = c.GetString("CUENTA") + c.Close + Return cl +End Sub + +Sub traeFecha As String 'ignore + DateTime.DateFormat = "MM/dd/yyyy" + Private sDate As String =DateTime.Date(DateTime.Now) + Private sTime As String =DateTime.Time(DateTime.Now) + Return sDate & sTime +End Sub + +'Regresa el usuario de la tabla USUARIOA +Sub traeUsuarioDeBD As String 'ignore + Private c As Cursor + Private u As String = "SinUsuario" + If Not(Starter.skmt.IsInitialized) Then revisaBD + c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + If c.RowCount > 0 Then u = c.GetString("USUARIO") + c.Close + Return u +End Sub + +'Inserta un producto en la tabla "pedido" y "pedido_cliente". +'Actualiza "cat_gunaprod" y la columna "gestion" en la tabla "kmt_info". +'Sub guardaProducto(cedis As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoVenta As String) +'' LogColor("guardaProducto: "&prodId&", cant="&cant, Colors.Magenta) +' Private c As Cursor +' Starter.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, (cant * costoU), costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoVenta)) +' Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cant, prodId)) +' c=Starter.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") +' c.Position=0 +' Starter.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") +' Starter.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clienteId, fecha, usuario, c.GetString("CANT_CLIE"), c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps, cedis, c.GetString("TOTAL_CLIE_SIN"))) +' Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +'End Sub + +'Inserta un producto en la tabla "PEDIDO" +Sub guardaProducto(cedis As String, costoTot As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, tipoV As String, precio2 As String, query As String) 'ignore + If nombre.Length < 6 Then ToastMessageShow("(guardaProducto) El nombre del producto no es valido " & nombre, True) + LogColor("guardaProducto", Colors.Magenta) + Log($"Guardamos producto ${prodId}"$) + LogColor("TIPO VENTA="&tipoV, Colors.Magenta) + Starter.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_TIPO, PE_PRECIO2, PE_RUTA) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, costoTot, costoU, cant, nombre, prodId, clienteId, fecha, usuario, tipoV, precio2, Starter.rutaV)) + Starter.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cant, prodId)) + ToastMessageShow("guardaProd", False) +End Sub + +'Inserta un producto en la tabla "pedido" y "pedido_cliente" y actualiza "cat_gunaprod". +'NO ACTUALIZA LA BANDERA DE GESTION EN LA TABLA "kmt_info". +'Si "gestion=2" entonces el sistema considera que el pedido ya se guardó y ya no se debe modificar. +Sub guardaProductoSinGestion(cedis As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoVenta As String) + If nombre.Length < 6 Then ToastMessageShow("(guardaProductoSinGestion) El nombre del producto no es valido " & nombre, True) + LogColor("guardaProductoSinGestion: "&prodId&", cant="&cant&", tipo="&tipoVenta, Colors.Magenta) + Private c As Cursor +' Private tablaProds As String = "cat_gunaprod2" +' If tipoVenta = "ABORDO" Then tablaProds = "cat_gunaprod" + Starter.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_RUTA, PE_COSTO_SIN, PE_TIPO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, (cant * costoU), costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoVenta)) + 'Actualizamos el inventario en cat_gunaprod solo si no es RMI + If cedis <> "DUR" Then Starter.skmt.ExecNonQuery2($"update ${traeTablaProds(tipoVenta)} set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? "$, Array As Object(cant, prodId)) + c=Starter.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + Starter.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + Starter.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clienteId, fecha, usuario, c.GetString("CANT_CLIE"), c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps, cedis, rutaV, c.GetString("TOTAL_CLIE_SIN"))) +End Sub + +Sub guardaProductoSin(cedis As String, costoTot As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoV As String, precio2 As String, query As String) 'ignore + If nombre.Length < 6 Then ToastMessageShow("(guardaProductoSin) El nombre del producto no es valido " & nombre, True) + LogColor("guardaProductoSin", Colors.Magenta) + Starter.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_RUTA, PE_COSTO_SIN, PE_TIPO, PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, costoTot, costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoV, precio2)) + Starter.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cant, prodId)) + DateTime.DateFormat = "MM/dd/yyyy" + Private sDate As String =DateTime.Date(DateTime.Now) + Private sTime As String =DateTime.Time(DateTime.Now) + Private c As Cursor = Starter.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + Starter.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + Starter.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clienteId, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), Starter.lon_gps, Starter.lat_gps, cedis, rutaV, c.GetString("TOTAL_CLIE_SIN"))) + Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + c.Close + ToastMessageShow("guardaProdSin", False) +End Sub + +Sub actualizaProducto(cedis As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoVenta As String) + If nombre.Length < 6 Then ToastMessageShow("(actualizaProducto) El nombre del producto no es valido " & nombre, True) + LogColor($"actualizaProducto, p=${prodId}, nombre=${nombre}, cant=${cant}, cedis=${cedis}, tipo=${tipoVenta}"$, Colors.Magenta) +' Private tablaProds As String = "cat_gunaprod2" +' If tipoVenta = "ABORDO" Then tablaProds = "cat_gunaprod" + Private c As Cursor=Starter.skmt.ExecQuery($"select * from pedido where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}'"$) + If c.RowCount > 0 Then + LogColor("ACTUALIZAMOS PROD", Colors.Blue) + c.Position=0 + Private antCant As Int = 0 + If IsNumber(c.GetInt("PE_CANT")) Then antCant=c.GetInt("PE_CANT") + Private difCant As Int = cant - antCant + Starter.skmt.ExecNonQuery($"update pedido set pe_cant = ${cant}, pe_costo_tot = ${(cant*c.GetString("PE_COSTOU"))} where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}' "$) + Starter.skmt.ExecNonQuery($"update ${traeTablaProds(tipoVenta)} set cat_gp_almacen = cat_gp_almacen - (${difCant}) where cat_gp_id = '${prodId}' "$) + If cant = 0 Then + LogColor($"BORRAMOS PRODUCTO - ${prodId}"$, Colors.Red) + Starter.skmt.ExecNonQuery($"delete from pedido where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}' "$) + Log($"Borramos pe_cedis='${cedis}' and pe_proid='${prodId}' and pe_cliente='${clienteId}'"$) + Private pe As Cursor = Starter.skmt.ExecQuery("select count(pe_cliente) as cuantosPedidos from pedido where pe_cliente In (select cuenta from cuentaa)") + pe.Position=0 + If pe.GetString("cuantosPedidos") = 0 Then Starter.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + End If + Else + 'INSERTAMOS + LogColor("INSERTAMOS PROD", Colors.red) + If cant > 0 Then guardaProductoSinGestion(cedis, costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoVenta) + End If + c.Close +End Sub + +'Regresa un mapa con la información de la promo. +'Regresa: {id, maxXcliente, maxRecurrente, maxPromos, historico, +' productos={idProducto={idProducto, preciosimptos, precio, almacen, tipo, piezas, usuario, fecha, regalo, clasif}} 'Mapa con los productos de la promo y los datos de cada uno. +' tipos={idProducto=tipo} 'Mapa con id y tipo del producto, 0 si es fijo y 1 si es variable. +' prodsFijos={idProducto,idProducto} 'Lista con los ids de los productos fijos. +' prodsVariables={idProducto,idProducto} 'Lista con los ids de los productos variables. +' resultado="OK" 'Ok si existe la promocion. +' prodsVariablesRequeridos=5} 'Cantidad de productos variables requeridos para la promoción. +Sub traePromo(promo As String, cliente As String) As Map + Private thisLog As Boolean = True + If thisLog Then Log("traePromo:"&promo) + Private inicioContador As String = DateTime.Now + Private c As Cursor = Starter.skmt.ExecQuery("Select * from promos_comp where cat_pa_id = '"& promo&"'") 'Obtenemos las el maximo de promocioones a otorgar. + Private siHistorico As String = 0 + Private promoMap As Map + Private prodsFijos, prodsFijosPrecios, prodsFijosPiezas, prodsVariables, prodsVariablesPrecios As List + promoMap.Initialize + prodsFijos.Initialize + prodsFijosPrecios.Initialize + prodsFijosPiezas.Initialize + prodsVariables.Initialize + prodsVariablesPrecios.Initialize + c.Position = 0 + If c.RowCount > 0 Then promoMap = CreateMap("id":promo, "maxXcliente":c.GetString("CAT_PA_MAXPROMCLIE"), "maxRecurrente":c.GetString("CAT_PA_MAXPROMREC"), "maxPromos":c.GetString("CAT_PA_MAXPROM")) + c = Starter.skmt.ExecQuery("Select count(*) as hist from HIST_PROMOS where HP_CLIENTE = '"& cliente & "' and HP_CODIGO_PROMOCION = '" & promo & "'") 'Revisamos si hay historico de la promoción. + c.Position = 0 + If c.GetString("hist") > 0 Then siHistorico = 1 + promoMap.Put("historico", siHistorico) + c = Starter.skmt.ExecQuery("Select * from CAT_DETALLES_PAQ where CAT_DP_ID = '"& promo & "'") 'Obtenemos los detalles de la promoción. + c.Position = 0 + If c.RowCount > 0 Then + Private prods, tipos As Map + prods.Initialize + tipos.Initialize + For i=0 To c.RowCount -1 + c.Position=i + prods.Put(c.GetString("CAT_DP_IDPROD"), CreateMap("idProducto":c.GetString("CAT_DP_IDPROD"), "precioSimptos":c.GetString("CAT_DP_PRECIO_SIMPTOS"), "precio":c.GetString("CAT_DP_PRECIO"), "tipo":c.GetString("CAT_DP_TIPO"), "piezas":c.GetString("CAT_DP_PZAS"), "regalo":c.GetString("CAT_DP_REGALO"), "clasif":c.GetString("CAT_DP_CLASIF"))) + tipos.Put(c.GetString("CAT_DP_IDPROD"), c.GetString("CAT_DP_TIPO")) + If c.GetString("CAT_DP_TIPO") = "0" Then + prodsFijos.Add(c.GetString("CAT_DP_IDPROD")) + prodsFijosPrecios.Add(c.GetString("CAT_DP_PRECIO")) + prodsFijosPiezas.Add(c.GetString("CAT_DP_PZAS")) + End If + If c.GetString("CAT_DP_TIPO") = "1" Then + prodsVariables.Add(c.GetString("CAT_DP_IDPROD")) + prodsVariablesPrecios.Add(c.GetString("CAT_DP_PRECIO")) + End If + If thisLog Then Log($"id:${c.GetString("CAT_DP_IDPROD")}, tipo:${c.GetString("CAT_DP_TIPO")}"$) + Next + promoMap.Put("productos", prods) 'Mapa con los productos de la promocion (id, precio, almacen, tipo, piezas, etc.) + promoMap.Put("tipos", tipos) 'Mapa con los productos de la promoción y su tipo (fijo o variable). + promoMap.Put("prodsFijos", prodsFijos) 'Lista de los productos fijos de la promoción. + promoMap.Put("prodsVariables", prodsVariables) 'Lista de los productos variables de la promoción. + promoMap.Put("prodsFijosCant", prodsFijos.Size) + promoMap.Put("prodsFijosPrecios", prodsFijosPrecios) + promoMap.Put("prodsFijosPiezas", prodsFijosPiezas) + promoMap.Put("prodsVariablesCant", prodsVariables.Size) + promoMap.Put("prodsVariablesPrecios", prodsVariablesPrecios) + promoMap.Put("resultado", "ok") + Else + promoMap.Put("resultado", "No hay datos de la promoción.") + End If + c = Starter.skmt.ExecQuery($"Select CAT_GP_STS, CAT_GP_NOMBRE from ${traeTablaProds(Starter.tipov)} where CAT_GP_ID = '${promo}'"$) 'Obtenemos las piezas requeridas de productos variables para la promoción. + c.Position = 0 + Private pvr As String = 0 + If c.RowCount > 0 Then + c.Position = 0 + pvr = c.GetString("CAT_GP_STS") + If pvr = "null" Or pvr = Null Or Not(IsNumber(pvr)) Then pvr = 0 + promoMap.Put("prodsVariablesRequeridos", pvr) 'Cantidad de productos variables requeridos para la promoción. + LogColor($">> ${pvr} - ${promoMap.Get("prodsVariablesRequeridos")} <<"$, Colors.Red) + promoMap.put("descripcion", c.GetString("CAT_GP_NOMBRE")) + End If + c.Close + If thisLog Then Log($"Inv variables: ${cuantosVariablesTengoBD(promo)}"$) + If thisLog Then Log($"Inv dispo: ${traemosInventarioDisponibleParaPromo(promo)}"$) + If thisLog Then LogColor($"Promo ${promo}: ${promoMap}"$, Colors.Blue) + If thisLog Then LogColor("TIEMPO para traePromo -=" & promo & "=- : " & ((DateTime.Now-inicioContador)/1000), Colors.Red) + Return promoMap +End Sub + +'Regresa un mapa con el inventario disponible por producto para la promoción (desde la base de datos). +Sub traemosInventarioDisponibleParaPromo(promo As String) As Map 'ignore + Private c As Cursor + c = Starter.skmt.ExecQuery2($"SELECT CAT_GP_ID, CAT_GP_ALMACEN FROM ${traeTablaProds(Starter.tipov)} WHERE CAT_GP_ID IN (select CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID = ?)"$, Array As String(promo)) +' Private prodInv As Map +' prodInv.Initialize + Private prods As Map + prods.Initialize + If c.RowCount > 0 Then + For i=0 To c.RowCount -1 + c.Position=i + prods.Put(c.GetString("CAT_GP_ID"), c.GetString("CAT_GP_ALMACEN")) +' Log($"prod:${c.GetString("CAT_GP_ID")}, inventario:${c.GetString("CAT_GP_ALMACEN")}"$) + Next +' prodInv.Put("inventarios", prods) + End If + Return prods +End Sub + +'Resta los productos fijos del inventario de la promoción (mapa) y regresa un mapa con el nuevo inventario. +'Hay que darle como parametro un mapa (traePromo(promo)) con toda la informacion de la promocion. +'Regresa en el mapa la llave "resultado" que nos da "ok" o "No hay suficiente producto para la promocion". +Sub restaFijosPromo(promoMap As Map) As Map 'ignore + Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub. + Private inventariosDisponiblesParaEstaPromo As Map = traemosInventarioDisponibleParaPromo(promoMap.Get("id")) 'Obtenemos un mapa con el inventario disponible para cada producto de la promocion desde la base de datos. + If thisLog Then LogColor(inventariosDisponiblesParaEstaPromo, Colors.red) + If thisLog Then LogColor("Inventario inicial antes de FIJOS: "&inventariosDisponiblesParaEstaPromo, Colors.Gray) 'Inventario inicial. + Private i As Int + Private prodsmap As Map = promoMap.Get("productos") 'Obtenemos un mapa con todos los productos de la promoción. + Private prodsFijos As List = promoMap.get("prodsFijos") 'Obtenemos un a lista con los productos fijos de la promoción. + For p = 0 To prodsFijos.Size - 1 + Private t As String = prodsFijos.Get(p) 'Obtenemos el Id de este producto desde la lista de productos fijos. + Private p2 As Map = prodsmap.Get(t) 'Obtenemos un mapa con los datos de este producto (id, precio, almacen, tipo, piezas, etc.) + If thisLog Then Log($"T: ${t}, prod ${p2.Get("idProducto")}, piezas: ${p2.Get("piezas")}"$) 'Producto y piezas requeridas + If thisLog Then Log("inventariosDisponiblesParaEstaPromo="&inventariosDisponiblesParaEstaPromo) + If inventariosDisponiblesParaEstaPromo.ContainsKey(t) Then 'Si el mapa del inventario contiene el id del producto entonces ... + i = inventariosDisponiblesParaEstaPromo.get(t) 'Obtenemos del mapa el inventario de este producto. + Private nuevoInv As Int = NumberFormat2((i - promoMap.Get("prodsFijosPiezas").As(List).get(p)), 1, 0,0,False) + If thisLog Then Log($"Nuevo inventario de ${t}: ${i}-${promoMap.Get("prodsFijosPiezas").As(List).get(p)} = ${nuevoInv}"$) 'El nuevo inventario. + inventariosDisponiblesParaEstaPromo.Put(t, $"${nuevoInv}"$) 'Restamos del inventario las piezas requeridas para la promoción y guardamos el nuevo inventario en el mapa. + inventariosDisponiblesParaEstaPromo.Put("resultado", "ok") + Else 'Si en el mapa no esta el id del producto, entonces no tenemos inventario. + inventariosDisponiblesParaEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") + If thisLog Then LogColor("Sin suficiente inventario fijo: " & t, Colors.Blue) + Exit + End If + If i - p2.Get("piezas") < 0 Then + inventariosDisponiblesParaEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") 'Si el inventario de este producto sale negativo, quiere decir que no tenemos suficiente inventario para la promoción. + Exit + End If + Next + If thisLog Then LogColor("Inventario final depues de FIJOS: "&inventariosDisponiblesParaEstaPromo, Colors.blue) 'Inventario final. + Return inventariosDisponiblesParaEstaPromo +End Sub + +'Revisa si tenemos los productos variables requeridos para la promoción (mapa). +'Hay que darle como parametro un mapa (traePromo(promo)) con toda la informacion de la promocion. +Sub alcanzanLosVariablesParaPromo(promoMap As Map, inventarioSinFijos As Map) As Boolean 'ignore + Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub. + If thisLog Then LogColor("Inventario inicial: "&inventarioSinFijos, Colors.Gray) 'Inventario inicial. + Private totalProdsVariables As Int = 0 +' Private prodsmap As Map = promoMap.Get("productos") 'Obtenemos un mapa con todos los productos de la promoción. + Private prodsVariables As List = promoMap.get("prodsVariables") 'Obtenemos un a lista con los productos variables de la promoción. + For p = 0 To prodsVariables.Size - 1 + Private t As String = prodsVariables.Get(p) 'Obtenemos el Id de este producto desde la lista de productos fijos. + If inventarioSinFijos.ContainsKey(t) Then 'Si existe el producto en la lista del inventario, entonces ... + Private p2 As Int = inventarioSinFijos.Get(t) 'Obtenemos el inventario disponible este producto. + If thisLog Then Log($"prod ${t}, hay: ${p2}"$) 'Producto y piezas requeridas + totalProdsVariables = totalProdsVariables + p2 + End If + Next + If thisLog Then Log("Total prods variables=" & totalProdsVariables & ", requeridos=" & promoMap.Get("prodsVariablesRequeridos")) + Private res As Boolean = False + Log($"${totalProdsVariables} - |${promoMap.Get("prodsVariablesRequeridos")}| - ${Not(IsNumber(promoMap.Get("prodsVariablesRequeridos")))}"$) + If Not(promoMap.ContainsKey("prodsVariablesRequeridos")) Or Not(IsNumber(promoMap.Get("prodsVariablesRequeridos"))) Then + res = False + Else If totalProdsVariables >= promoMap.Get("prodsVariablesRequeridos") Then + res = True 'Si el total de inventario de productos variables (totalProdsVariables) es mayor o igual a los productos requeridos entonces regresamos TRUE + End If + + Return res +End Sub + +'Regresa el numero máximo de promociones permitidas, tomando en cuenta recurrentes, clientes y maxPromos. +Sub traeMaxPromos(pm As Map) As Int + Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub. + Private maxPromos As List + Private mp0, mp As String = "0" + maxPromos.Initialize + Private hccp As Cursor = Starter.skmt.ExecQuery($"select HCCP_CANT from HIST_CLIENTE_CANT_PROMOS where HCCP_CLIENTE = '${traeCliente}' and HCCP_PROMO = '${pm.Get("id")}'"$) +' Log($"select HCCP_CANT from HIST_CLIENTE_CANT_PROMOS where HCCP_CLIENTE = '${traeCliente}' and HCCP_PROMO = '${pm.Get("id")}'"$) +' If hccp.RowCount > 0 Then +' hccp.Position = 0 +' LogColor(hccp.GetString("HCCP_CANT"), Colors.Magenta) +' Else +' LogColor("SIN HCCP CANT", Colors.Magenta) +' End If + If thisLog Then LogColor("==== HISTORICO:"&pm.Get("historico"), Colors.Red) + If thisLog Then Log(pm) + If pm.Get("historico") = "1" Then maxPromos.Add(pm.Get("maxRecurrente")) 'Si hay historico, agregamos maxRecurrente + maxPromos.Add(pm.Get("maxPromos")) 'Agregamos maxPromos + maxPromos.Add(pm.Get("maxXcliente")) 'Agregamos maxXcliente + If hccp.RowCount > 0 Then 'Agregamos promos HCCP + hccp.Position = 0 + maxPromos.Add(hccp.GetString("HCCP_CANT")) + End If + maxPromos.Sort(True) + If thisLog Then Log(maxPromos) + mp0 = maxPromos.Get(0) + mp = mp0 - traePromosVendidas(pm.Get("id"), traeCliente) + If thisLog Then Log($"Max Promos (${mp0}) - promos vendidas (${(traePromosVendidas(pm.Get("id"), traeCliente)).As(Int)}) = ${mp}"$) + Return mp 'Regresamos el numero mas pequeño de las opciones. +End Sub + +'Regresa la cantidad de promos que se le han vendido al cliente. +Sub traePromosVendidas(promo As String, cliente As String) As Int + Private c As Cursor + Private pv As Int = 0 + c=Starter.skmt.ExecQuery($"select sum(PE_CANT) as cuantas from PEDIDO where PE_PROID = '${promo}' and PE_CLIENTE = '${cliente}'"$) + If c.RowCount > 0 Then + c.Position = 0 + If c.GetString("cuantas") <> Null Then pv = c.GetString("cuantas") + End If + Return pv +End Sub + +Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore + Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub. + Private inicioContador As String = DateTime.Now + Private mp As String = 0 + If thisLog Then LogColor($"********* Iniciamos revision de Promo ${idPromo} *********"$, Colors.red) + 'Obtenemos el mapa con toda la info de la promoción. + Private pm As Map = traePromo(idPromo, cliente) + If thisLog Then LogColor(pm, Colors.Blue) +' If thisLog Then LogColor("|" & pm.Get("maxPromos") & "|", Colors.Blue) +' Log("|"&revisaMaxPromosProdsFijosPorInventario(pm)&"|") + If revisaMaxPromosProdsFijosPorInventario(pm) < 1 Then pm.Put("resultado", 0) + Log($"resultado = ${pm.Get("resultado")}"$) + If pm.Get("resultado") = "ok" Then 'Si encontramos la promoción, entonces ... + 'Buscamos el máximo de promociones permitidas. + mp = traeMaxPromos(pm) +' If thisLog Then LogColor($"Promociones permitidas=${mp}"$, Colors.Blue) +' If thisLog Then Log("Promos vendidas: " & traePromosVendidas(idPromo, cliente)) + If mp < 1 Then + If thisLog Then LogColor("Ya se vendieron las promos PERMITIDAS para el cliente", Colors.red) + Return CreateMap("status":"ko", "mp":pm) + End If + 'Restamos del inventario (mapa) las piezas necesarias para los productos fijos. + Private inventarioSinFijos As Map = restaFijosPromo(pm) + If thisLog Then LogColor("inventariosfijos="&inventarioSinFijos, Colors.Magenta) + If inventarioSinFijos.Get("resultado") = "ok" Then + 'Revisamos que los productos variables requeridos sean menos que el inventario total (mapa). + Private pv As Boolean = alcanzanLosVariablesParaPromo(pm, inventarioSinFijos) + If thisLog Then Log("Alcanzan los variables? --> " & pv) + If pv Then Return CreateMap("status":"ok", "mp":pm) Else Return CreateMap("status":"ko", "mp":pm) + Else + If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red) + Return CreateMap("status":"ko", "mp":pm) + End If + Else + Return CreateMap("status":"ko", "mp":pm) + End If + ' Si tenemos suficiente inventario para los variables mostramos la promocion, si no ... + ' break 'NO HAY INVENTARIO SUFICIENTE PARA LA PROMOCION. + + LogColor("TIEMPO DE PROCESO ESTA PROMO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red) 'ignore +End Sub + +'Regresa cuantas promos alcanzan con los productos FIJOS que hay en inventario. +Sub revisaMaxPromosProdsFijosPorInventario2(pm As Map) As Int 'ignore + Private thisLog As Boolean = False + If thisLog Then Log($"pm=${pm}"$) +' Private prodsFijos As List = pm.get("prodsFijos") + Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id")) + If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$) + Private maxPromos As String = traeMaxPromos(pm) + Private maxPromosFijosXinv As Int = 1 + Private fpf2, pdp2 As Int + Private salir As Boolean = False + Private pf As List = pm.Get("prodsFijos") + Private pfp As List = pm.Get("prodsFijosPiezas") + If thisLog Then Log($"maxPromos=${maxPromos}, prodsFijos=${pf}, piezas=${pfp}"$) + If thisLog Then LogColor($"InvFijo disponible=${invDispParaPromo}"$, Colors.Blue) + Private invFijoXpromo As Map + invFijoXpromo.Initialize + For p = 0 To pf.Size -1 'Generamos mapa con los productos fijo y piezas requeridos por promo. + invFijoXpromo.Put(pf.Get(p), pfp.Get(p)) + Next + If thisLog Then LogColor("Inv req. de prods fijos x promo" & invFijoXpromo, Colors.Green) + For i = 1 To maxPromos 'Revisamos cuantas promociones alcanzan, hasta llegar al máximo de promos permitadas. + If thisLog Then LogColor("Prods para promo " & (i+1), Colors.Magenta) + For q = 0 To pf.Size - 1 + Private q2 As String = pf.Get(q) + If thisLog Then Log("q="&q2) +' fpf2 = invFijoXpromo.Get(q2) * i 'Multiplicamos las piezas requeridas por la cantidad de promos. + fpf2 = pfp.Get(q) * i 'Multiplicamos las piezas requeridas por la cantidad de promos. + pdp2 = invDispParaPromo.Get(q2) + If thisLog Then Log($"pf=${q2}, Actual=${(i)}, max promos: ${pdp2}-${fpf2}=${pdp2 - fpf2}"$) + If pdp2 - fpf2 < 0 Then 'Si el inventario es negativo, entonces ya no alcanza para este producto. + salir=True + Exit + End If + Next + If salir Then Exit + maxPromosFijosXinv = i + Next + If thisLog Then LogColor("InvFijo requerido x promo="&invFijoXpromo, Colors.blue) + LogColor("Maximo de promociones de prodsFijos POR inventario = " & maxPromosFijosXinv, Colors.Red) + Return maxPromosFijosXinv +End Sub + +'Regresa cuantas promos alcanzan con los productos FIJOS que hay en inventario. +Sub revisaMaxPromosProdsFijosPorInventario(pm As Map) As Int + Private thisLog As Boolean = False + Private invFijoXpromo As Map + Private t As List + t.Initialize + t.Add(traeMaxPromos(pm)) ' Agregamos a la lista las promos maximas permitidas (recurrente, cliente y promo). + invFijoXpromo.Initialize + If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue) + Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id")) + If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$) + Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas") + Private idProdsFijos As List = pm.Get("prodsFijos") + For p = 0 To idProdsFijos.Size -1 'Generamos una lista con las promos disponibles por producto (dividimos el inventario total entre las piezas requeridas). + Private thisInvDisp As String = 0 + If invDispParaPromo.Get(idProdsFijos.Get(p)) <> Null Then thisInvDisp = invDispParaPromo.Get(idProdsFijos.Get(p)) + If thisLog Then Log($"id=${idProdsFijos.Get(p)}, inv=${thisInvDisp}, pzas=${prodsFijosPiezas.Get(p)}"$) + If thisLog Then Log($"${(thisInvDisp / prodsFijosPiezas.Get(p))}"$) + Private x() As String = Regex.Split("\.", $"${(thisInvDisp / prodsFijosPiezas.Get(p))}"$) 'Separamos el resultado de la division por el punto decimal. + If thisLog Then Log(x(0)) + t.Add(x(0).As(Int)) 'Solo guardamos la parte del entero de la division. + Next + t.Sort(True) 'Ordenamos la lista para que en el lugar 0 este el resultao mas pequeño. + If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue) + If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue) + If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue) + If thisLog Then LogColor("Max promos de prodsFijos POR inventario = " & t.Get(0), Colors.red) + Return t.Get(0) 'Regresamos el resultado mas pequeño. +End Sub + +'Regresa cuantas promos alcanzan con los productos VARIABLES que hay en inventario. +'La cantidad de promos disponibles se calcula DESPUES de descontar los productos fijos, y si las +'promos por productos fijos llega al maximo, aunque se puedan mas de producos variables, solo se +'regresa el maximo por productos fijos. Ej. si las promos por variables es 10, pero el maximo por +'fijos es 5, entonces regresamos 5. +Sub revisaMaxPromosProdsVariablesPorInventario(pm As Map) As Int 'ignore + Private thisLog As Boolean = False + If thisLog Then Log("======================================================") + If thisLog Then Log("======================================================") + Private invFijoXpromo As Map + invFijoXpromo.Initialize + Private totalProdsVariablesDisponibles As Int = 0 + If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue) + Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id")) + If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$) + Private maxPromos As String = traeMaxPromos(pm) + Private maxPromosXFijos As Int = revisaMaxPromosProdsFijosPorInventario(pm) + Private idProdsVariables As List = pm.Get("prodsVariables") + Private prodsVariablesRequeridos As Int = pm.Get("prodsVariablesRequeridos") + Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas") + Private idProdsFijos As List = pm.Get("prodsFijos") + For p = 0 To idProdsFijos.Size -1 'Generamos mapa con los productos fijos y piezas requeridas por promo. + invFijoXpromo.Put(idProdsFijos.Get(p), prodsFijosPiezas.Get(p)) + Private idEsteProd As String = idProdsFijos.Get(p) + Private invEsteProd As Int = invDispParaPromo.Get(idEsteProd) + Private pzasReqEsteProd As Int = prodsFijosPiezas.Get(p) + If thisLog Then Log($"id=${idEsteProd}, inv=${invEsteProd}, pzas=${pzasReqEsteProd}"$) +' invDispParaPromo.Put( idEsteProd, (invEsteProd - (1)) ) + Next + If thisLog Then LogColor($"MaxPromos=${maxPromos}, promosXFijos=${maxPromosXFijos}"$, Colors.Blue) + If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue) + If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue) + If thisLog Then LogColor($"prodsVariables=${idProdsVariables}${CRLF}Variables Req=${prodsVariablesRequeridos} "$, Colors.Blue) + If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue) + If thisLog Then Log($"Prods variables disponibles = ${totalProdsVariablesDisponibles}"$) + Private maxPromosXVariables As Int = 0 + For x = 1 To maxPromosXFijos + If thisLog Then Log("=====================================================") + If thisLog Then Log("=====================================================") + For i = 0 To idProdsFijos.Size - 1 + If thisLog Then Log($"FIJO - ${idProdsFijos.Get(i)}, ${invDispParaPromo.Get(idProdsFijos.Get(i))} - ${prodsFijosPiezas.Get(i).As(Int)*(i+1)}"$) + invDispParaPromo.Put(idProdsFijos.Get(i), invDispParaPromo.Get(idProdsFijos.Get(i)).As(Int) - prodsFijosPiezas.Get(i).As(Int)*(i+1)) 'Restamos las piezas de los productos fijos del inventario disponible. + Next + If thisLog Then LogColor("Inv disponible despues de restar fijos = " & invDispParaPromo, Colors.Blue) + + totalProdsVariablesDisponibles = 0 + For i = 0 To idProdsVariables.Size - 1 'Obtenemos total de productos variables disponibes. + If invDispParaPromo.ContainsKey(idProdsVariables.Get(i)) Then + totalProdsVariablesDisponibles = totalProdsVariablesDisponibles + invDispParaPromo.Get(idProdsVariables.Get(i)) + End If + Next + 'Revisamos variables. + If thisLog Then Log($"Var disponibles - var requeridos : ${totalProdsVariablesDisponibles} - ${prodsVariablesRequeridos*x}"$) + totalProdsVariablesDisponibles = totalProdsVariablesDisponibles - (prodsVariablesRequeridos*x) + If thisLog Then Log("prodsVariables disponibles despues de promo = " & totalProdsVariablesDisponibles) + If totalProdsVariablesDisponibles < 0 Then Exit 'Ya no hay inventario disponible. + maxPromosXVariables = x + Next + 'Restamos fijos. +' LogColor("Max promos de prodsVariables POR inventario = " & maxPromosXVariables, Colors.red) + Return maxPromosXVariables +End Sub + +'Regresa la suma del inventario de los productos variables de la promoción dada desde la base de datos. +Sub cuantosVariablesTengoBD(promo As String) As String 'ignore +' Private x As String = "0" +' If promo <> "" Then +' Private c As Cursor +' c = Starter.skmt.ExecQuery2("Select SUM(CAT_GP_ALMACEN) as variables FROM CAT_GUNAPROD2 WHERE CAT_GP_ID IN (Select CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID = ? and cat_dp_tipo = 1 GROUP BY CAT_DP_IDPROD)", Array As String (promo)) +' If c.RowCount > -1 Then +' c.Position = 0 +' If c.GetString("variables") <> Null Then x = c.GetString("variables") +' End If +' End If +' Return x +End Sub + +'Regresa un mapa con los datos del producto desde la base de datos. +'el mapa incluye: Id, nombre, tipo y subtipo del producto. +Sub traeProdIdDeBD As Map 'ignore + Private c As Cursor + Private m As Map + c=Starter.skmt.ExecQuery($"select CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_TIPO,CAT_GP_SUBTIPO from ${traeTablaProds(Starter.tipov)} where CAT_GP_NOMBRE In (Select PDESC from PROID)"$) + If c.RowCount > 0 Then + c.Position = 0 + m = CreateMap("id":c.GetString("CAT_GP_ID"), "nombre":c.GetString("CAT_GP_NOMBRE"), "tipo":c.GetString("CAT_GP_TIPO"), "subtipo":c.GetString("CAT_GP_SUBTIPO")) + Else + m = CreateMap("id":"N/A", "nombre":"N/A", "tipo":"N/A", "subtipo":"N/A") + End If + c.Close + Return m +End Sub + +'Guarda en la base de datos la hora inicial y final de la vista. +Sub guardaClienteHoraInicio(cliente As String) 'ignore + Starter.skmt.ExecNonQuery2("insert into PEDIDO_INICIO_FINAL(PIF_CLIENTE, PIF_HORA_INICIO, PIF_HORA_FINAL) VALUES(?,?,?) ", Array As Object (cliente, DateTime.Now, 0)) +' LogColor($"insertamos ${cliente}, hora_inicio=${DateTime.Now}, hora_final=0"$,Colors.Red) +End Sub + +'Actualizamos el tiempo que el vendedor estuvo en la tienda, desde que entra a la pantalla del cliente hasta que hace clic en "Guardar". +Sub actualizaTET(cliente As String) 'ignore + Dim c As Cursor = Starter.skmt.Execquery2("select * from PEDIDO_INICIO_FINAL where PIF_CLIENTE = ?", Array As String(cliente)) + Dim total As Long = 0 + If c.RowCount > 0 Then + c.Position=0 + For i = 0 To c.RowCount-1 + c.Position=i +' LogColor($"cliente=${c.GetString("PIF_CLIENTE")}, inicio=${c.GetString("PIF_HORA_INICIO")}, final=${c.GetString("PIF_HORA_FINAL")}"$, Colors.Magenta) + Dim subtotal As Long = c.GetString("PIF_HORA_FINAL") - c.GetString("PIF_HORA_INICIO") + total = total + subtotal +' Log($" Subtotal=${subtotal}, total=${total}"$) + Next +' Log($"Total=${(total/1000)/60}"$) + Starter.skmt.ExecNonQuery2("update PEDIDO_CLIENTE set PC_TIEMPO_TIENDA = ? where PC_CLIENTE = ?", Array As String(((total/1000)/60), cliente)) + End If +End Sub + +'Regresa el total de productos y monto del pedido del cliente actual. +Sub traeTotalesClienteActual As Map + Private m As Map + m.Initialize + Private c_prodsX As Cursor=Starter.skmt.ExecQuery("select ifnull(sum(PE_CANT), 0) as cantProds, ifnull(sum(PE_COSTO_TOT), 0) as costoTotal FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PRONOMBRE asc") + c_prodsX.Position=0 +' LogColor($"Productos de la orden: ${c_prodsX.GetString("cantProds")}, Total: ${c_prodsX.GetString("costoTotal")}"$, Colors.red) + m = CreateMap("productos": c_prodsX.GetString("cantProds"), "monto" : c_prodsX.GetString("costoTotal")) + Return m +End Sub + +'Borra el pedido del cliente actual. +'Borra los registros de la tabla "pedido" y "pedido_cliente" +'Actualiza las tablas "cat_gunaprod" o "cat_gunaprod2" y "kmt_info". +Sub borraPedidoClienteActual As String + Private thisC As Cursor +' Private tablaProds As String = "cat_gunaprod2" + thisC=Starter.skmt.ExecQuery("select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ") + If thisC.RowCount>0 Then + For i=0 To thisC.RowCount -1 + thisC.Position=i + Starter.skmt.ExecNonQuery2($"update ${traeTablaProds(Starter.tipov)} set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?"$, Array As Object(thisC.GetString("PE_CANT"),thisC.GetString("PE_PROID"))) +' Starter.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (traeAlmacen, thisC.GetString("PE_PROID"),thisC.GetString("PE_CANT")* -1)) + Next + End If + Starter.skmt.ExecNonQuery("delete from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") + Starter.skmt.ExecNonQuery("delete from pedido where pe_cliente in (Select CUENTA from cuentaa)") + Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Return 1 +End Sub + +'Regresa verdadero si la columna gestion en la tabla "kmt_info" tene valor 2. +'si no, entonces regresa falso. +Sub pedidoGuardado As Boolean 'ignore + Private guardado As Boolean = False + Private g As Cursor = Starter.skmt.ExecQuery("select gestion from kmt_info where CAT_CL_CODIGO in (Select CUENTA from cuentaa)") + If g.RowCount > 0 Then + g.Position=0 + If g.GetString("gestion") = "2" Then guardado = True + End If + Log($"Guardado=${guardado}"$) + Return guardado +End Sub + +'Regresa verdadero si hay pedido en la tabla "PEDIDO" del cliente actual. +Sub hayPedido As Boolean + Private thisC As Cursor=Starter.skmt.ExecQuery($"select count(PE_CLIENTE) as hayPedido from PEDIDO where PE_CLIENTE = '${traeCliente}'"$) + thisC.Position=0 + Private hay As Boolean = False + If thisC.GetString("hayPedido") > 0 Then hay = True +' Log($"Cliente actual=${traeCliente}, hayPedido=${hay}"$) +thisC.Close + Return hay +End Sub + +'Regresa el total del pedido en la tabla "PEDIDO" del cliente actual. +Sub totalPedido As String + Private cT As Cursor = Starter.skmt.ExecQuery($"select sum(PE_COSTO_TOT) as total from PEDIDO where PE_CLIENTE = '${traeCliente}'"$) + Private pTotal As String = "0" + If cT.RowCount > 0 Then + cT.Position = 0 +' Log("|"&cT.GetLong("total")&"|"&pTotal) + Private tempT As String = cT.GetLong("total") + If tempT <> "null" And tempT <> Null Then +' Log("|"&cT.GetLong("total")&"|") + pTotal = tempT + End If +' Log($"Cliente actual=${traeCliente}, hayPedido=${hay}"$) + End If + cT.Close + Return pTotal +End Sub + +'Regresa verdadero si el usuario actual ya imprimio su venta +Sub revisaImpresa As Boolean + Dim imp As Boolean = False +' Dim i As Cursor = Starter.skmt.ExecQuery("select count(*) as CUANTOS from CLIENTE_IMPRESO where CI_CUENTA in (Select CUENTA from cuentaa)") + Dim i As Cursor = Starter.skmt.ExecQuery("select count(*) as CUANTOS from kmt_info where (impresion = 1 or cat_cl_codigo in (select ci_cuenta from cliente_impreso)) and CAT_CL_CODIGO in (Select CUENTA from cuentaa)") + i.Position = 0 + If i.GetString("CUANTOS") > 0 Then imp = True Else imp = False + Return imp +End Sub + +'Guarda RMI's (Cambios) en la base de datos +Sub guardaCambiosDeProducto(cantidad, prodNombre, prodId, precio2, query) 'ignore + Log($"${cantidad}, ${prodNombre}, ${prodId}, ${precio2}"$) + Dim sDate, sTime, clie_id, usuario As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate = DateTime.Date(DateTime.Now) + sTime = DateTime.Time(DateTime.Now) + Private a As Cursor = Starter.skmt.ExecQuery("Select CUENTA from cuentaa") + a.Position=0 + clie_id = a.GetString("CUENTA") + a = Starter.skmt.ExecQuery("select USUARIO from usuarioa") + a.Position=0 + usuario = a.GetString("USUARIO") + Starter.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_TIPO, PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object ("DUR", (precio2 * -1), ((precio2/cantidad) * -1), cantidad, "CAMBIO" & prodNombre, prodId, clie_id, sDate & sTime, usuario, Starter.tipov, precio2)) + Starter.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad, prodId)) +End Sub + +'Regresa la fecha guardada en la base de datos con el formato "YYYYMMDD" +'La fecha es de la última vez que se haya cargado día. +Sub traeFechaDeBD As String 'ignore + Private f As String + Private cf As Cursor = Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + If cf.RowCount > 0 Then + cf.Position = 0 + f = cf.GetString("CAT_VA_VALOR") + End If + cf.Close + Return f +End Sub + +'Regresa la tabla de productos (cat_gunaprod o cat_gunaprod2) dependiendo del tipo de venta. +Sub traeTablaProds(tipoventa As String) As String + Private tablaProds As String = "cat_gunaprod2" + If tipoventa = "ABORDO" Or tipoventa = "PREVENTA" Then tablaProds = "cat_gunaprod" +' LogColor($"Tipo= ${tipoventa}, tabla=${tablaProds}"$, Colors.RGB(200,136,0)) + Return tablaProds +End Sub + +Sub agrupador() + Private c As Cursor + Private YA_IMPRIMIO As String + If traeCliente <> "0" Then + c=Starter.skmt.ExecQuery("SELECT SUM(PE_FOLIO) AS FOLIO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position = 0 + If c.GetString("FOLIO") <> Null And c.GetString("FOLIO") > 0 Then + YA_IMPRIMIO = 1 + Else + YA_IMPRIMIO = 0 + End If + c.Close + End If +' Log($"Ya imprimio=${YA_IMPRIMIO}"$) + Starter.skmt.ExecNonQuery("delete from pedido3") + Starter.skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = 0 where PE_FOLIO IS NULL") + Starter.skmt.ExecNonQuery("INSERT INTO PEDIDO3 (PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO ) SELECT PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, SUM(PE_COSTO_TOT) AS PE_COSTO_TOT, PE_COSTOU, SUM(PE_CANT) As PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) GROUP BY PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTOU, PE_PRONOMBRE, PE_PROID, PE_CLIENTE ") +' Log("update pedido3") + Starter.skmt.ExecNonQuery2("UPDATE PEDIDO3 SET PE_FOLIO = ? WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)", Array As Object(YA_IMPRIMIO)) + Starter.skmt.ExecNonQuery("delete from pedido WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + Starter.skmt.ExecNonQuery("INSERT INTO PEDIDO SELECT * FROM PEDIDO3") + Starter.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_FECHA = ? where PE_CLIENTE IN (Select CUENTA from cuentaa) and PE_FECHA IS NULL", Array As Object(traeFecha)) +End Sub + +Sub esPromo(promoId) As Boolean 'ignore + Private hay As Boolean = False + Private c_ep As Cursor = Starter.skmt.ExecQuery($"select count(CAT_DP_ID) as cuantos from CAT_DETALLES_PAQ where CAT_DP_ID = '${promoId}'"$) + If c_ep.RowCount > 0 Then + c_ep.Position = 0 + If c_ep.GetInt("cuantos") > 0 Then hay = True + End If + Return hay +End Sub + +Sub fechanormal(fecha As String) As String 'ignore +' Log(fecha) + Dim OrigFormat As String = DateTime.DateFormat 'save orig date format + DateTime.DateFormat="yyyy/MM/dd HH:mm:ss" + Dim nuevaFecha As String=DateTime.Date(fecha) + DateTime.DateFormat=OrigFormat 'return to orig date format +' Log(nuevaFecha) + Return nuevaFecha +End Sub + + 'En geocerca si mete la contraseña poner 0 en precision gps y si esta dentro de los 50 mts poner 1 y 2 para eventos que no lo ocupen + 'Mandar fecha de sync(sysdate) +Sub bitacora(usuariob As String, almacenb As String, rutab As String, eventob As String, clienteb As String, iniciob As String, finb As String, latitudb As String, longitudb As String, precision As String, motivonoventa As String, motivonovisita As String ) + + Starter.skmt.ExecNonQuery($"INSERT INTO BITACORAGPS (usuariob , almacenb , rutab , eventob , clienteb , iniciob , finb , latitudb , longitudb , precision , motivonoventa , motivonovisita) VALUES ('${usuariob}' , '${almacenb}' , '${rutab}' , '${eventob}' , '${clienteb}' , '${iniciob}' , '${finb}' , '${latitudb}' , '${longitudb}' , '${precision}' , '${motivonoventa}' , '${motivonovisita}')"$) + +End Sub \ No newline at end of file