From 267a0e7bf9ef855a7ec71deb8638f03195d1069b Mon Sep 17 00:00:00 2001 From: Jose Alberto Guerra Ugalde Date: Tue, 4 Mar 2025 13:25:42 -0600 Subject: [PATCH] =?UTF-8?q?-=20VERSION=205.03.02=20-=20Se=20agreg=C3=B3=20?= =?UTF-8?q?c=C3=B3digo=20para=20las=20promos=20por=20monto.=20-=20Se=20agr?= =?UTF-8?q?eg=C3=B3=20codigo=20para=20validar=20la=20hora=20del=20telefono?= =?UTF-8?q?=20con=20la=20hora=20del=20servidor.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B4A/B4XMainPage.bas | 13 +++- B4A/C_Cliente.bas | 47 +++++++++++++- B4A/C_Principal.bas | 39 ++++++++++-- B4A/C_Productos.bas | 16 ++++- B4A/C_Promos.bas | 2 +- B4A/Files/productos.bal | Bin 21698 -> 21698 bytes B4A/KelloggsV4.b4a | 4 +- B4A/KelloggsV4.b4a.meta | 16 ++--- B4A/MAPA_RUTAS.bas | 95 +++++++++++++++++++++++++++- B4A/ManageExternalStorage.bas | 14 +++-- B4A/Starter.bas | 18 +++++- B4A/Subs.bas | 113 ++++++++++++++++++++++++---------- B4A/kms_helperSubs.bas | 2 + 13 files changed, 318 insertions(+), 61 deletions(-) diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index 349771e..15e7e81 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -160,6 +160,8 @@ Private Sub B4XPage_Created (Root1 As B4XView) ''' FIN DOE kh.agregaColumna(Starter.skmt, "kmt_info", "IMPRESION", "INTEGER") kh.agregaColumna(Starter.skmt, "USUARIOA", "FECHA", "TEXT") + kh.agregaColumna(Starter.skmt, "PROMOS_COMP", "CAT_PA_PORCENTAJE_PAQUETE", "TEXT") + kh.agregaColumna(Starter.skmt, "PROMOS_COMP", "CAT_PA_PRECIO1", "TEXT") kh.agregaColumna(Starter.skmt, "PROMOS_COMP", "CAT_PA_PRECIO2", "TEXT") kh.agregaColumna(Starter.skmt, "PROMOS_COMP", "CAT_PA_TIPO_PROMONTO", "TEXT") kh.agregaColumna(Starter.skmt, "CAT_GUNAPROD", "CAT_GP_TIPOPROD2", "TEXT") @@ -380,6 +382,7 @@ End Sub Sub B4XPage_Appear Log(">>>>>> INICIAMOS MAIN PAGE <<<<<<<<<") + Log(DateTime.GetDayOfWeek(DateTime.Now)) kh.RD_Init kh.SetButtonTintList(cb_geocerca, Colors.LightGray, Colors.RGB(43, 154, 211)) kh.SetButtonTintList(cb_cartaPorte, Colors.LightGray, Colors.RGB(43, 154, 211)) @@ -751,13 +754,19 @@ End Sub 'Ej: CL1532-2 Serìa restaurar el respaldo del dìa 3 de agosto (5-2), puede haber espacios entre la clave y el numero de dìas. Private Sub b_cargaLocalOk_Click Private pass1 As String = "CL" & (3 * DateTime.GetDayOfMonth(DateTime.now)) & (DateTime.GetMonth(DateTime.now) * 4) - If et_cargaLocal.Text.StartsWith(pass1) Then + If et_cargaLocal.Text.StartsWith(pass1) Then p_cargaLocal.Visible = False ' Log(et_cargaLocal.Text.Length > pass1.Length) Log(et_cargaLocal.text) - If et_cargaLocal.Text.Length = pass1.Length Then et_cargaLocal.text = et_cargaLocal.text & "-1" + If et_cargaLocal.Text.Length = pass1.Length Then ' Si no se especifica nada, la fecha es hoy MENOS un día. + et_cargaLocal.text = et_cargaLocal.text & "-1" + If DateTime.GetDayOfWeek(DateTime.Now) = 2 Then ' Si hoy es LUNES, la fecha es hoy menos 2 dias. + et_cargaLocal.text = et_cargaLocal.text & "-2" + End If + End If Log(et_cargaLocal.text) + Log(DateTime.GetDayOfWeek(DateTime.Now)) ' RD_fechaRestauracion - Si esta en blanco, la fecha de restauracion es HOY, si no, es la especificada en "ticks". kh.RD_fechaRestauracion = "" diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas index 0c914b4..87734ab 100644 --- a/B4A/C_Cliente.bas +++ b/B4A/C_Cliente.bas @@ -598,7 +598,7 @@ Sub B4XPage_Appear End If la_saldooper.Text = META2 c=Starter.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM HIST_CLIENTE_CANT_PROMOS WHERE HCCP_CLIENTE IN (Select cuenta from cuentaa)") - c.Position =0 + c.Position = 0 If c.GetString("CUANTOS") > 0 Then C1 = Starter.skmt.ExecQuery("SELECT HCCP_PROMO FROM HIST_CLIENTE_CANT_PROMOS WHERE HCCP_CLIENTE IN (Select cuenta from cuentaa) ") C1.Position = 0 @@ -647,7 +647,7 @@ Sub B4XPage_Appear If l_total.Text = "" Or l_total.Text = "null" Then l_total.Text = "0" If Not(l_total.Text > 0) Then Guardar.Visible = True ' And Not(kh.traeTotalClienteDOE > 0 ' If la_cuenta.text = "0" Then Guardar.Visible = True 'Abordo - Log($"L_TOTAL = ${l_total.text}"$) +' Log($"L_TOTAL = ${l_total.text}"$) If l_total.Text = Null Or l_total.Text = "null" Or l_total.text = "0" Then Guardar.Visible = True 'Si no hay venta entonces "Guardar" es visible. 'Promo Especial @@ -760,6 +760,49 @@ Sub B4XPage_Appear End If If Subs.revisaImpresa Then Guardar.Visible = True + 'PROMOS POR MONTO + Private mPromoXMonto As Map = Subs.revisaPromoPorMonto + LogColor("PROMOXMONTO:" & mPromoXMonto, Colors.Blue) + If mPromoXMonto.Size > 0 And clienteId <> 0 Then ' El "clienteId <> 0" es para que no la promo cuando se pida ABORDO + If l_total.Text > mPromoXMonto.Get("rangoMin") And l_total.Text < mPromoXMonto.Get("precio1") Then + Log("Eres candidato a una promocion") + MsgboxAsync($"Si agregas venta para que supere los $${mPromoXMonto.Get("precio1")}, la promoción "${Subs.traeProdNombre(mPromoXMonto.Get("id"))}" se agregará automáticamente."$, "AGREGA VENTA") + else if l_total.Text >= mPromoXMonto.Get("precio1") Then + 'Agregamos la promocion y sus productos FIJOS. + Private dp As Cursor = Starter.skmt.ExecQuery($"select * from cat_detalles_paq where cat_dp_id = '${mPromoXMonto.Get("id")}'"$) + If dp.RowCount > 0 Then + Subs.guardaProductoSinGestion(mPromoXMonto.Get("id"), 0, 1, Subs.traeProdNombre(mPromoXMonto.Get("id")), mPromoXMonto.Get("id"), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, Starter.tipov) + For i = 0 To dp.RowCount - 1 + dp.Position = i + If dp.GetString("CAT_DP_TIPO") = "0" Then + Subs.guardaProductoSinGestion(mPromoXMonto.Get("id"), dp.GetString("CAT_DP_PRECIO"), dp.GetString("CAT_DP_PZAS"), Subs.traeProdNombre(dp.GetString("CAT_DP_IDPROD")), dp.GetString("CAT_DP_IDPROD"), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, Starter.tipov) + End If + Next + MsgboxAsync($"Promo por monto "${Subs.traeProdNombre(mPromoXMonto.Get("id"))}" agregada."$,"AVISO") + B4XPage_Appear + End If + End If + End If + Private ppm As Cursor = Starter.skmt.ExecQuery($"select (select ifnull(sum(PE_COSTO_TOT),0) from pedido where CAT_PA_ID <> pe_cedis) as CT, ifnull((select pe_cedis from pedido where pe_cedis = CAT_PA_ID), 0) as existe, * from PROMOS_COMP where CAT_PA_TIPO_PROMONTO = '1' and CT < cast(cat_pa_precio1 as integer)"$) 'Traemos las promos por monto donde la venta es menor al precio1 para borrarlas. + Log("REGISTROS DE PPM: " & ppm.RowCount) + If ppm.RowCount > 0 Then + Private existe As String = 0 + For i = 0 To ppm.RowCount - 1 + ppm.Position = i + Log(ppm.GetString("existe")) + existe = ppm.GetString("existe") + Log($"BORRAMOS PROMO ${ppm.GetString("CAT_PA_ID")} or monto menor a ${ppm.GetString("CAT_PA_PRECIO1")}"$) + Starter.skmt.ExecNonQuery($"delete from pedido where pe_cedis = '${ppm.GetString("CAT_PA_ID")}' and pe_cliente = '${Subs.traeCliente}'"$) + Next + If existe <> "0" Then + MsgboxAsync($"Promoción "${Subs.traeProdNombre(ppm.GetString("CAT_PA_ID"))}" eliminada por no cumplir con el monto mínimo."$, "AVISO") + B4XPage_Appear + End If + End If + If Not(Subs.revisaHora) Then + Log("***************** HORA INCORRECTA") + MsgboxAsync("La hora del equipo NO coincide con la hora del servidor, es necesario corregirla", "AVISO IMPORTANTE") + End If End Sub Sub Printer1_Connected (Success As Boolean) diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index d2586a2..254252f 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -627,6 +627,8 @@ Sub cargar_Click DateTime.DateFormat = "yyyyMMdd" Dim hoy As String = DateTime.Date(DateTime.Now) ' If Logger Then Log(DateTime.Date(File.LastModified(File.DirInternal,"cartaPorte.pdf")) & " - " & hoy ) + B_OK_PAS.TextSize = 24 + B_OK_PAS.Text = "CANCELAR" If kh.traeUsarCartaPorte Then 'Si se requiere la carta porte para cagar dia ... If Not(File.Exists(File.DirInternal,"cartaPorte.pdf")) Then 'Si no existe la descargamos ... If logger Then LogColor("No hay carta porte.", Colors.Red) @@ -748,7 +750,7 @@ Sub cargar_Click DateTime.TimeFormat = "HHmmss" inicioContador = DateTime.Now reqManager.trackInit - + cmd.Initialize cmd.Name = "SELECT_HIST_ENCUESTA_KELL" cmd.Parameters = Array As Object( e_ruta.text, ALMACEN) @@ -887,6 +889,11 @@ Sub cargar_Click ' cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) reqManager.ExecuteQuery(cmd , 0, "fecha") + cmd.Initialize + cmd.Name = "select_hora" +' cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "hora") + cmd.Initialize cmd.Name = "select_folio_KELL" cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) @@ -1114,9 +1121,11 @@ Sub JobDone(Job As HttpJob) Dim CAT_PA_MAXPROM As String = records(RESULT.Columns.Get("CAT_PA_MAXPROM")) Dim CAT_PA_MAXPROMREC As String = records(RESULT.Columns.Get("CAT_PA_MAXPROMREC")) Dim CAT_PA_MAXPROMCLIE As String = records(RESULT.Columns.Get("CAT_PA_MAXPROMCLIE")) + Dim CAT_PA_PORCENTAJE_PAQUETE As String = records(RESULT.Columns.Get("CAT_PA_PORCENTAJE_PAQUETE")) + Dim CAT_PA_PRECIO1 As String = records(RESULT.Columns.Get("CAT_PA_PRECIO1")) Dim CAT_PA_PRECIO2 As String = records(RESULT.Columns.Get("CAT_PA_PRECIO2")) Dim CAT_PA_TIPO_PROMONTO As String = records(RESULT.Columns.Get("CAT_PA_TIPO_PROMONTO")) - Starter.skmt.ExecNonQuery2("INSERT INTO PROMOS_COMP(CAT_PA_ID, CAT_PA_MAXPROM, CAT_PA_MAXPROMREC, CAT_PA_MAXPROMCLIE, CAT_PA_PRECIO2, CAT_PA_TIPO_PROMONTO) VALUES (?,?,?,?,?,?)", Array As Object (CAT_PA_ID, CAT_PA_MAXPROM,CAT_PA_MAXPROMREC,CAT_PA_MAXPROMCLIE,CAT_PA_PRECIO2,CAT_PA_TIPO_PROMONTO)) + Starter.skmt.ExecNonQuery2("INSERT INTO PROMOS_COMP(CAT_PA_ID, CAT_PA_MAXPROM, CAT_PA_MAXPROMREC, CAT_PA_MAXPROMCLIE, CAT_PA_PORCENTAJE_PAQUETE, CAT_PA_PRECIO1, CAT_PA_PRECIO2, CAT_PA_TIPO_PROMONTO) VALUES (?,?,?,?,?,?,?,?)", Array As Object (CAT_PA_ID, CAT_PA_MAXPROM,CAT_PA_MAXPROMREC,CAT_PA_MAXPROMCLIE,CAT_PA_PORCENTAJE_PAQUETE,CAT_PA_PRECIO1, CAT_PA_PRECIO2,CAT_PA_TIPO_PROMONTO)) Next Starter.skmt.TransactionSuccessful Starter.skmt.EndTransaction @@ -1767,6 +1776,21 @@ Sub JobDone(Job As HttpJob) End If End If + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "hora" Then 'query tag + For Each records() As Object In RESULT.Rows + Starter.HORA = records(RESULT.Columns.Get("HORA")) + Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("HORA")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("HORA", Starter.HORA)) + Next + If Not(Subs.revisaHora) Then + Log("***************** HORA INCORRECTA") + MsgboxAsync("La hora del equipo NO coincide con la hora del servidor, es necesario corregirla", "AVISO IMPORTANTE") + End If + End If + End If + If Job.JobName = "DBRequest" Then Dim RESULT As DBResult = reqManager.HandleJob(Job) If RESULT.Tag = "folio" Then 'query tag @@ -2056,9 +2080,14 @@ Sub JobDone(Job As HttpJob) ' if carga = "SUBIR" then logcolor(reqManager.reqsList, Colors.blue) - Log($"tiempo Request "${Job.Tag}": ${((reqManager.inicioJobDone - reqManager.inicioRequest)/1000)}"$) - Log($"tiempo JobDone "${Job.Tag}": ${((DateTime.Now - reqManager.inicioJobDone)/1000)}"$) - Log($"tiempo Total "${Job.Tag}": ${((DateTime.Now - inicioContador)/1000)}"$) + If Starter.Logger Then Log($"tiempo Request "${Job.Tag}": ${((reqManager.inicioJobDone - reqManager.inicioRequest)/1000)}"$) + If Starter.Logger Then Log($"tiempo JobDone "${Job.Tag}": ${((DateTime.Now - reqManager.inicioJobDone)/1000)}"$) + If Starter.Logger Then Log($"tiempo Total "${Job.Tag}": ${((DateTime.Now - inicioContador)/1000)}"$) + + If CARGA = "CARGAR" And S_CP.Text = "LISTO" And S_CC.Text = "LISTO" And S_CH.Text = "LISTO" Then + LogColor("TERMINAMOS", Colors.red) + B_OK_PAS.Text = "OK" + End If Log(reqManager.requestTimes(Job.Tag)) diff --git a/B4A/C_Productos.bas b/B4A/C_Productos.bas index 3efbdee..dd9d50f 100644 --- a/B4A/C_Productos.bas +++ b/B4A/C_Productos.bas @@ -323,7 +323,12 @@ Sub lv_catalogos_ItemClick (Position As Int, Value As Object) label14.TextColor = Colors.Black ' lfila.text = "PROMOS" ' c2=Starter.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from " & query & " where CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_TIPOPROD <> 1 and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID)", Array As String(Value, Value)) - c2=Starter.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_TIPOPROD2, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from " & Subs.traeTablaProds(Starter.tipov) & " where CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO =? AND CAT_GP_TIPOPROD <> 1 and length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID ORDER BY CAT_GP_TIPOPROD2 DESC, CAT_GP_NOMBRE", Array As String( Value, Value)) +' c2=Starter.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_TIPOPROD2, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from " & Subs.traeTablaProds(Starter.tipov) & " where CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO =? AND CAT_GP_TIPOPROD <> 1 and length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID ORDER BY CAT_GP_TIPOPROD2 DESC, CAT_GP_NOMBRE", Array As String( Value, Value)) + + c2 = Starter.skmt.ExecQuery($"select CAT_PA_TIPO_PROMONTO, CAT_PA_PORCENTAJE_PAQUETE, CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_TIPOPROD2, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from ${Subs.traeTablaProds(Starter.tipov)} left join PROMOS_COMP on CAT_GP_ID = CAT_PA_ID where CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = '${Value}' AND CAT_GP_SUBTIPO = '${Value}' AND CAT_GP_TIPOPROD <> 1 and length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID ORDER BY CAT_GP_TIPOPROD2 DESC, CAT_GP_NOMBRE"$) + + Log($"select CAT_PA_TIPO_PROMONTO, CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_TIPOPROD2, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from ${Subs.traeTablaProds(Starter.tipov)} left join PROMOS_COMP on CAT_GP_ID = CAT_PA_ID where CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = '${Value}' AND CAT_GP_SUBTIPO = '${Value}' AND CAT_GP_TIPOPROD <> 1 and length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID ORDER BY CAT_GP_TIPOPROD2 DESC, CAT_GP_NOMBRE"$) + ' Log($"Resultados : ${c2.RowCount}, ${Value}, ${marca}, ${tipo}"$) If c2.RowCount > 0 Then For i=0 To c2.RowCount -1 @@ -331,7 +336,14 @@ Sub lv_catalogos_ItemClick (Position As Int, Value As Object) Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId) ' promosC.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId) If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto. - lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) + + Log(c2.GetString("CAT_GP_ID")) + Log(c2.GetString("CAT_PA_TIPO_PROMONTO")) + Log(c2.GetString("CAT_PA_PORCENTAJE_PAQUETE")) + If c2.GetString("CAT_PA_TIPO_PROMONTO") = "0" Then ' Si NO es promo por monto entonces la mostamos. + lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) + + End If End If Next Else diff --git a/B4A/C_Promos.bas b/B4A/C_Promos.bas index c3d7407..45c0294 100644 --- a/B4A/C_Promos.bas +++ b/B4A/C_Promos.bas @@ -35,7 +35,7 @@ Sub Class_Globals Dim estaPromo, esteCliente As String Private b_promoMas As Button Private b_promoMenos As Button - Private et_promoCant As EditText + dim et_promoCant As EditText Private l_promosCant As Label Private b_continuar As Button Private p_prodsVariables As Panel diff --git a/B4A/Files/productos.bal b/B4A/Files/productos.bal index 7763d8bec1178d6586c05fa6eea59e88640beaf3..d1cc6eb492cbe0cdad3ffbce92cd1ed9d9161883 100644 GIT binary patch delta 3694 zcmb_fYfw~G9N%N^%H3#r>{ZwY;(`n)$ikxR;@u=rf(2PIh}A4HrH8rb3Th9qbO2u| zI{vIt^Mx;TDuJ9n)fD-`4^1=KOf!9{nVjiEUz({8HGRmj|G9S`_p)4~rky#5|2gOW z-@pI=9PZp?cW$z=9&>7n!C=@D-qX?DwY3NR<_Ts)xsY``{AepPGCK3z{ycS&F+DZ< zS)_YMXHQ2seEa8&2eZuev^$H2(14x(tgI0ei|p10I&#uroivI3yGHyV zm18X1grTffa}#aJ?5puxj-55*maEPfq|G&G$#%L{6D70LUxl5Y`DvuirHOLjsq zO)t=<(SVwTj^K+#3iD`siH7OnuYW##neS|+$;t`N@1()D(iXgQ5z9GiNM@iUbsa;#f?ZF+I9Pa}?>X~lUF&XdG9;v#j6xtABSD_+dpO*yf> zlSBsd`^*}&hFBlrs08;~1wti-FRf3*(#uiF_TqzuLj^indXpIBZsZm%X8okW&Nd;DqJFIoTFEJ51GrZdKv$c9^g@q2QPTfa^I($ZK^@HpNb`WI zq;(^GP$$v{wSp1M&qtZdgsOlA=duJyi~TbWU?tC={F}`qS&5%Yd=$wPbS}wbhmw3c zM4u*b!wpG}rhxX6ivPs`>?(F>l6hE1Jr8LB?WK~KNTe2fIIzTl1+@-B-UFW<-z~AQ zgEHRU#$LBN8!9&C63bynRj?)Iw4+)pWHHC^OWBY+(Mo3wBSZ?_$o6E&5MJk5%!ZPJ zKBUpd>r4sy@i>GxRCrWfQ{}>NMTnhHna`{4gjQViF37}@r9EPzPilm0L*KGIrDzdY zYGF#Lp2S4cG8uUnyjhSc{US)T(%>}gA$E#vu%!8ZT#Em(nF{UwUj2U6CoxOu$ zcY$1@AA9|5J-!$HDD|CY?~N_FakB0Qz7nijo5N0H zV)=lW$eXGdhbzi)SjvpPVb18hVb0JS=7{#`vr=KfsN|TUPoC9ye1@vmD|@l(@tId` zDSoWUnAG~-n~WR$?$2ZjQqIXpX|ArDaam5K;rwI`*7F))xMzyK3$nhB8vS}?7fG1< zF1V-_B?H0T+=#Dhb)P>W7;7t|sBEvbu(NTd>Q#~|ry4|ruzRJ0U5>tu2!gn~GRn%X z5TFAXt&{YN>8cz96?@v%WW(7tSx|1hq$()wTLy>fZNhb8T|>i&OP*|N{DB+4Qm^9= zzZV^CS;%jAQe~3{q#WXzc;6p;Y>(&wb%cOghx$OB`c{s$xEtiwl=XQ-VCt?NwGCBGN!1%^Dq=BP2B)t5829LE zF=|4*>6~n~M7b{p2a6N6|Ihx=(-65q&7FiuQ0>o$a^|I$X&`hfT1Ihu(rzUM`P#pI zvEqJ<#w_coR%SflW4IK23Z_<%>NTn=kQgAw^#C!hl^X}do;E+*PA&RdTxsPIw_(&H W;4hzpeMF7=Q*>3DO~gw7t^5tUN46UP delta 4012 zcmb_fTTl~c6wa>(vypPk22FxO0$463BtayQw15sG;Z9nE77O0mYEc4Fdl9vrqJ>(e za%xAxdPi_9HkQXaQ}nGx4v}j`TtyYf7tDiX*2WxoISgHzH|A` z*`Eiu$b(xX9MY#HYc!f&y@$Jl1AV(g-MzhVTtAngiz)~9?+p=@T_$h}D`x{M{ABi< zh+&XcQcX6Y?WwJ1~LjNjrJ~hE3Z$*s^8LzfMcvU6*w$jrs z=3Xt8BE+(R*z_SC)!znXKbZ{ba5 z@of~6o4mVxXWWn15zIvp=m0*fMj(1m z27?3|DDI0J52C~Z>PJDM&_GNbg1d&Stb=%2flD}qn;RFlLQgEA!8|kRheuwsfj%aK z!mDkNR&9ft4n6dUI=vn>8*mASq1I`K$~7J%CFG*Rd=DR13zOcHVPlvTup`@Jd_NI@ z5B>#!-kT3FlH(DN!~qf*9fNdq=;Nb94`*$eqzSB^3TQ15;I`GP=ZGC3M`e@CLb_?b zQ;%{k4I)=_$T9fAb|z1ytjF;MR_zZ_0OBo$d->_`!rD@Bc+<(p(C)WG&|5@?Vqjzk zNaY>k;qZ!;mz)6W%MH-y6rd#EWtT?7e{|xcq7x@oocM$}vHnGmY&IlNkYQR7t5gs~ zVdG$!hr?=vpO3;x6hhFl?K9=)1dMZ{i{JK((ww0JuPw|m3j(!H?B}1}0ab{xQ z+|}f?g1OTQ=FWh=^o)Hc-ib_-gn3u)h>`!0qlk>gV7ZEna=?Rl6{*PQQSy64X<~En z1mHxO7(H@C8y9{lOChvfi|AN{DOX68CNlpr8DrjDD6>U-evJ2n*R@W#S(!l^;c=B+ z;iNSV+4Xf$T~(*&UZNCAS3I&!sI>V6mxOU_^TEY;)-z{%w6$Y2qBHcOB8@I`KomAY zqpy%g35;!J$V-ZlmsB7xGv*Fft2Z=^)vk}S0KQzQADQsyFA?RK%?|YbPNFmeFI@U19o^JM9Rc0rD9)yQJHV5Pb5>_{+ zXs6NZ7@uiX*7{V*B{}D9TIk&AruoiYZgi=UO)@pyOuu09*#=LVwVp`yP)@>%u7y=xyNj+3iPCYK g8_-e)Z}=A!BlTO}B*z)RFT?0MEnP|Yn1*Qn0Z-WL(f|Me diff --git a/B4A/KelloggsV4.b4a b/B4A/KelloggsV4.b4a index 12b0470..7ebdbe1 100644 --- a/B4A/KelloggsV4.b4a +++ b/B4A/KelloggsV4.b4a @@ -887,7 +887,7 @@ Version=12.8 #Region Project Attributes #ApplicationLabel: Kelloggs Venta #VersionCode: 3000 - #VersionName: 4.11.14 + #VersionName: 5.03.02 #SupportedOrientations: portrait #CanInstallToExternalStorage: False #BridgeLogger:true @@ -920,7 +920,7 @@ Sub Activity_Create(FirstTime As Boolean) pm.Initialize(Activity) Log("***********************************************") MES1.Initialize(Me, "MES1") -' Log("SDK: " & device.SdkVersion) + Log("SDK: " & device.SdkVersion) ' Get the device SDK version Dim SdkVersion As Int = device.SdkVersion ' Choose which permission to request in order to access external storgage diff --git a/B4A/KelloggsV4.b4a.meta b/B4A/KelloggsV4.b4a.meta index e1631a3..9cdbf33 100644 --- a/B4A/KelloggsV4.b4a.meta +++ b/B4A/KelloggsV4.b4a.meta @@ -61,11 +61,11 @@ ModuleBreakpoints7= ModuleBreakpoints8= ModuleBreakpoints9= ModuleClosedNodes0= -ModuleClosedNodes1= +ModuleClosedNodes1=4 ModuleClosedNodes10= ModuleClosedNodes11= -ModuleClosedNodes12=3,5,6,7,8,9 -ModuleClosedNodes13=1,5 +ModuleClosedNodes12=5,7,8,9 +ModuleClosedNodes13= ModuleClosedNodes14= ModuleClosedNodes15= ModuleClosedNodes16= @@ -76,14 +76,14 @@ ModuleClosedNodes2= ModuleClosedNodes20= ModuleClosedNodes21= ModuleClosedNodes22= -ModuleClosedNodes23=1,3,5,6,7,8,9,11,12,13,14,15,17,18,19,21,22,24,25,26,27,28,29,30,31,32,33,35 +ModuleClosedNodes23=1,3,4,5,6,7,8,9,11,12,13,14,15,17,18,21,22,24,25,26,27,28,29,30,31,32,33,35 ModuleClosedNodes24= -ModuleClosedNodes25= +ModuleClosedNodes25=4 ModuleClosedNodes26= ModuleClosedNodes27= ModuleClosedNodes28= ModuleClosedNodes29= -ModuleClosedNodes3= +ModuleClosedNodes3=1,3,5,6,7 ModuleClosedNodes30= ModuleClosedNodes4= ModuleClosedNodes5= @@ -91,6 +91,6 @@ ModuleClosedNodes6= ModuleClosedNodes7= ModuleClosedNodes8= ModuleClosedNodes9= -NavigationStack=C_Cliente,gest_Click,866,0,C_Principal,B_PROXIMA_Click,2696,0,C_Cliente,B_VENTA_Click,2170,0,C_Cliente,B_IMP_INVBAK_Click,3230,0,Subs,traeTablaProds,1624,0,Visual Designer,checklist.bal,-100,3,Subs,guardaCambiosDeProducto,1607,0,Subs,traeFechaDeBD,1620,0,C_Principal,JobDone,2052,0,B4XMainPage,B4XPage_Created,169,0,B4XMainPage,b_cargaLocalOk_Click,752,6 +NavigationStack=C_Principal,cargar_Click,796,0,C_Principal,JobDone,1486,0,MAPA_RUTAS,MapFragment1_Ready,174,6,MAPA_RUTAS,CreateBitmapWithNumber,376,6,MAPA_RUTAS,inicio,361,0,Subs,procesaPromocion,1250,0,C_Principal,Class_Globals,0,0,C_Clientes,Class_Globals,0,0,Subs,revisaPromoPorMonto,1926,0,C_Cliente,B4XPage_Appear,758,6 SelectedBuild=0 -VisibleModules=1,28,11,3,29,12,4,13,23,7 +VisibleModules=1,28,11,3,29,12,4,13,7,9 diff --git a/B4A/MAPA_RUTAS.bas b/B4A/MAPA_RUTAS.bas index 272d09c..b7c0ce0 100644 --- a/B4A/MAPA_RUTAS.bas +++ b/B4A/MAPA_RUTAS.bas @@ -59,6 +59,10 @@ Sub Globals Private SEMANA As String Private p_header As Panel Private p_mapa As Panel + + + Dim Canvas1 As Canvas + Dim Counter As Int End Sub Sub Activity_Create(FirstTime As Boolean) @@ -170,7 +174,13 @@ Sub MapFragment1_Ready CODIGO=c2.GetString("CAT_CL_CODIGO") Tienda= c2.GetString("CAT_CL_NOMBRE") NumSerie=c2.GetInt("CAT_CL_NUM_SERIEFISICO") - MARK_VERDE = gmap.AddMarker3(LatitudRU,LongitudRU,CODIGO, LoadBitmap(File.DirAssets, "marker-verde-"&NumSerie&".png")) + + Log("Ponemos marcador verde") +' Antes +' MARK_VERDE = gmap.AddMarker3(LatitudRU,LongitudRU,CODIGO, LoadBitmap(File.DirAssets, "marker-verde-"&NumSerie&".png")) +' Despues + MARK_VERDE = gmap.AddMarker3(LatitudRU,LongitudRU,CODIGO, CreateBitmapWithNumber(LoadBitmap(File.DirAssets, "marker-verde.png"), i+350)) + MARK_VERDE.Snippet = Tienda Next c2 .Close @@ -293,4 +303,85 @@ Sub Activity_KeyPress (key As Int) As Boolean 'ignore 'End If End If ' Returning False signals the system to handle the key -End Sub \ No newline at end of file +End Sub + + + + + + + +Sub inicio +' Dim Bitmap1, Bitmap2 As Bitmap +'' Dim Canvas1 As Canvas +'' Dim Counter As Int +' +' Counter = 1 +' +' ' Cargar la imagen del globito +' Bitmap1 = LoadBitmap(File.DirAssets, "marker-azul-1.png") +' +' ' Crear un nuevo Bitmap con el número dibujado +' Bitmap2 = CreateBitmapWithNumber(Bitmap1, Counter) +' Counter = Counter + 1 +' +' ' Agregar el marker con el Bitmap personalizado +' Dim Marker1 As Marker +' Marker1 = gmap.AddMarker2(Latitud1, Longitud1, Bitmap2) +' +' ' Repetir para el siguiente marker +' Bitmap2 = CreateBitmapWithNumber(Bitmap1, Counter) +' Counter = Counter + 1 +' +' Dim Marker2 As Marker +' Marker2 = gmap.AddMarker2(Latitud2, Longitud2, Bitmap2) +End Sub + +' Función para crear un Bitmap con el número dibujado +'Sub CreateBitmapWithNumber2(OriginalBitmap As Bitmap, Number As Int) As Bitmap +' Dim NewBitmap As Bitmap +' NewBitmap.InitializeMutable(OriginalBitmap.Width, OriginalBitmap.Height) +' +' Dim Canvas As Canvas +' Canvas.Initialize2(NewBitmap) +' +' ' Definir el rectángulo donde se dibujará el Bitmap +' Dim DestRect(4) As Float +' DestRect(0) = 0 ' Left +' DestRect(1) = 0 ' Top +' DestRect(2) = OriginalBitmap.Width ' Right +' DestRect(3) = OriginalBitmap.Height ' Bottom +' +' ' Dibujar la imagen original +' Canvas.DrawBitmap(OriginalBitmap, Null, DestRect) +' +' ' Configurar el estilo del texto +' Canvas.DrawColor(Colors.Transparent) ' Fondo transparente +'' Canvas.TextSize = 24 ' Tamaño del texto +'' Canvas.DrawText( = "CENTER" ' Alinear el texto al centro +' Canvas.DrawText(Number, (OriginalBitmap.Width / 2), (OriginalBitmap.Height / 2), Typeface.DEFAULT, 20, Colors.Blue, "CENTER") +' +' ' Dibujar el número en el centro del Bitmap +'' Canvas.DrawText(Number, OriginalBitmap.Width / 2, OriginalBitmap.Height / 2) +' Return NewBitmap +'End Sub + +Sub CreateBitmapWithNumber(OriginalBitmap As Bitmap, Number As Int) As Bitmap + Dim NewBitmap As Bitmap + NewBitmap.InitializeMutable(OriginalBitmap.Width, OriginalBitmap.Height) + + Dim Canvas As Canvas + Canvas.Initialize2(NewBitmap) + + ' Definir el rectángulo donde se dibujará el Bitmap + Dim DestRect As Rect + DestRect.Initialize(0, 0, OriginalBitmap.Width, OriginalBitmap.Height) + + ' Dibujar la imagen original + Canvas.DrawBitmap(OriginalBitmap, Null, DestRect) + + ' Dibujar el número en el centro del Bitmap y configurar el estilo del texto + Canvas.DrawText(Number, (OriginalBitmap.Width / 2), (OriginalBitmap.Height / 2.4), Typeface.DEFAULT, 20, Colors.White, "CENTER") + + Return NewBitmap +End Sub \ No newline at end of file diff --git a/B4A/ManageExternalStorage.bas b/B4A/ManageExternalStorage.bas index 0f44a22..e5c9fbb 100644 --- a/B4A/ManageExternalStorage.bas +++ b/B4A/ManageExternalStorage.bas @@ -29,10 +29,16 @@ End Sub ' Determine if the app already has MANAGE_EXTERNAL_STORAGE call Environment.isExternalStorageManager() ' Return True if this app already has MANAGE_EXTERNAL_STORAGE permission Public Sub HasPermission As Boolean - Dim has As Boolean - Dim jo As JavaObject - jo.InitializeStatic("android.os.Environment") - has = jo.RunMethod("isExternalStorageManager", Null) + Dim has As Boolean = False + Try + Dim jo As JavaObject + jo.InitializeStatic("android.os.Environment") + If jo.RunMethod("isExternalStorageManager", Null) <> Null Then + has = jo.RunMethod("isExternalStorageManager", Null) + End If + Catch + Log(LastException) + End Try Return has End Sub diff --git a/B4A/Starter.bas b/B4A/Starter.bas index 34e35e8..2abf9b6 100644 --- a/B4A/Starter.bas +++ b/B4A/Starter.bas @@ -25,7 +25,7 @@ Sub Process_Globals Dim GPS As GPS 'Para ENVIA_ULTIMA_GPS Dim Timer1 As Timer - Dim Interval As Int = 300 + Dim Interval As Int = 20 Dim DBReqServer As String Dim pe As PhoneEvents Dim ph As Phone @@ -39,6 +39,7 @@ Sub Process_Globals Dim lat_gps, lon_gps As String Dim ubicacionActual As Location Dim FECHA_HOY As String + Dim HORA As String Dim usuario As String Dim tipov As String Dim MAC_IMPRESORA As String @@ -192,6 +193,11 @@ Sub ENVIA_ULTIMA_GPS cmd.Parameters = Array As Object(montoActual, clientesVisitaHoy, clientesVenta, clientesVisitados, lat_gps, lon_gps, batt, 0, 0, 0, Application.VersionName, rtec, ping, salty, Subs.dameClientesFueraDeFrecuencia, almacen, rutaPreventa) ' If Logger Then LogColor(montoActual&","&clientesVisitaHoy&","&clientesVenta&","&clientesVisitados&","&lat_gps&","&lon_gps&","&batt&","&0&","&0&","&0&","&Application.VersionName&","&rtec&","&ping&","&salty&","& Subs.dameClientesFueraDeFrecuencia&","&almacen&","&rutaPreventa, Colors.Magenta) reqManager.ExecuteCommand(cmd,"updateKell_UTR") + + cmd.Name = "select_hora" + reqManager.ExecuteQuery(cmd , 0, "hora") + log(subs.revisaHora) + ' If Logger Then Log(reqManager) ' If Logger Then Log("++ ++ ++ Envia_Ultima GPS - Inst_visitas - server: "& server) skmt.ExecNonQuery2("Update cat_variables set CAT_VA_VALOR = ? WHERE CAT_VA_DESCRIPCION = ?" , Array As String(DateTime.Time(DateTime.Now),"HoraIngreso")) @@ -216,6 +222,16 @@ Sub JobDone(Job As HttpJob) ' Next ' Next End If + If result.Tag = "hora" Then 'query tag + For Each records() As Object In result.Rows + HORA = records(result.Columns.Get("HORA")) + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("HORA")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("HORA", HORA)) + DateTime.DateFormat = "HH" + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("HORASRVR")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("HORASRVR", DateTime.Date(DateTime.Now))) + Next + End If End If End If Job.Release diff --git a/B4A/Subs.bas b/B4A/Subs.bas index 51d3de4..140d5db 100644 --- a/B4A/Subs.bas +++ b/B4A/Subs.bas @@ -845,6 +845,7 @@ Sub traeRuta As String 'ignore Return r End Sub +'Trae el cliente de CUENTAA Sub traeCliente As String 'ignore Private c As Cursor Private cl As String @@ -955,39 +956,43 @@ Sub guardaProductoSin(cedis As String, costoTot As String, costoU As String, can End Sub Sub actualizaProducto(cedis As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoVenta As String) - If nombre.Length < 6 Then ToastMessageShow("(actualizaProducto) El nombre del producto no es valido " & nombre, True) - precioSin = NumberFormat2(precioSin, 1, 2, 2, False) - costoU = NumberFormat2(costoU, 1, 2, 2, False) - LogColor($"actualizaProducto, c=${clienteId}, p=${prodId}, nombre=${nombre}, cant=${cant}, cedis=${cedis}, tipo=${tipoVenta}"$, Colors.Magenta) + If revisaHora Then + If nombre.Length < 6 Then ToastMessageShow("(actualizaProducto) El nombre del producto no es valido " & nombre, True) + precioSin = NumberFormat2(precioSin, 1, 2, 2, False) + costoU = NumberFormat2(costoU, 1, 2, 2, False) + LogColor($"actualizaProducto, c=${clienteId}, p=${prodId}, nombre=${nombre}, cant=${cant}, cedis=${cedis}, tipo=${tipoVenta}"$, Colors.Magenta) ' Private tablaProds As String = "cat_gunaprod2" ' If tipoVenta = "ABORDO" Then tablaProds = "cat_gunaprod" - Private c As Cursor=Starter.skmt.ExecQuery($"select * from pedido where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}'"$) - If c.RowCount > 0 Then - LogColor("ACTUALIZAMOS PROD - " & traeTablaProds(tipoVenta), Colors.Blue) - c.Position = 0 - Private antCant As Int = 0 - If IsNumber(c.GetInt("PE_CANT")) Then antCant=c.GetInt("PE_CANT") - Private difCant As Int = cant - antCant - Starter.skmt.ExecNonQuery($"update pedido set pe_cant = ${cant}, pe_costo_tot = ${NumberFormat2((cant*c.GetString("PE_COSTOU")), 1, 2, 2, False)}, pe_tipo = '${tipoVenta}' where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}' "$) - If cedis <> "DUR" Then Starter.skmt.ExecNonQuery($"update ${traeTablaProds(tipoVenta)} set cat_gp_almacen = cat_gp_almacen - (${difCant}) where cat_gp_id = '${prodId}' "$) - If cant = 0 Then - LogColor($"BORRAMOS PRODUCTO - ${prodId}"$, Colors.Red) - Starter.skmt.ExecNonQuery($"delete from pedido where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}' "$) - Log($"Borramos pe_cedis='${cedis}' and pe_proid='${prodId}' and pe_cliente='${clienteId}'"$) - Private pe As Cursor = Starter.skmt.ExecQuery("select count(pe_cliente) as cuantosPedidos from pedido where pe_cliente In (select cuenta from cuentaa)") - pe.Position=0 - If pe.GetString("cuantosPedidos") = 0 Then - Log("###### delete from pedido_cliente - " & traeCliente & "|" & clienteId) - Log($"delete from pedido_cliente where PC_CLIENTE = '${traeCliente}'"$) - Starter.skmt.ExecNonQuery($"delete from pedido_cliente where PC_CLIENTE = '${traeCliente}'"$) + Private c As Cursor=Starter.skmt.ExecQuery($"select * from pedido where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}'"$) + If c.RowCount > 0 Then + LogColor("ACTUALIZAMOS PROD - " & traeTablaProds(tipoVenta), Colors.Blue) + c.Position = 0 + Private antCant As Int = 0 + If IsNumber(c.GetInt("PE_CANT")) Then antCant=c.GetInt("PE_CANT") + Private difCant As Int = cant - antCant + Starter.skmt.ExecNonQuery($"update pedido set pe_cant = ${cant}, pe_costo_tot = ${NumberFormat2((cant*c.GetString("PE_COSTOU")), 1, 2, 2, False)}, pe_tipo = '${tipoVenta}' where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}' "$) + If cedis <> "DUR" Then Starter.skmt.ExecNonQuery($"update ${traeTablaProds(tipoVenta)} set cat_gp_almacen = cat_gp_almacen - (${difCant}) where cat_gp_id = '${prodId}' "$) + If cant = 0 Then + LogColor($"BORRAMOS PRODUCTO - ${prodId}"$, Colors.Red) + Starter.skmt.ExecNonQuery($"delete from pedido where pe_cedis = '${cedis}' and pe_proid = '${prodId}' and pe_cliente = '${clienteId}' "$) + Log($"Borramos pe_cedis='${cedis}' and pe_proid='${prodId}' and pe_cliente='${clienteId}'"$) + Private pe As Cursor = Starter.skmt.ExecQuery("select count(pe_cliente) as cuantosPedidos from pedido where pe_cliente In (select cuenta from cuentaa)") + pe.Position=0 + If pe.GetString("cuantosPedidos") = 0 Then + Log("###### delete from pedido_cliente - " & traeCliente & "|" & clienteId) + Log($"delete from pedido_cliente where PC_CLIENTE = '${traeCliente}'"$) + Starter.skmt.ExecNonQuery($"delete from pedido_cliente where PC_CLIENTE = '${traeCliente}'"$) + End If End If - End If - Else - 'INSERTAMOS + Else + 'INSERTAMOS ' LogColor("INSERTAMOS PROD", Colors.red) - If cant > 0 Then guardaProductoSinGestion(cedis, costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoVenta) + If cant > 0 Then guardaProductoSinGestion(cedis, costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoVenta) + End If + c.Close + Else + Msgbox("La hora del equipo NO coincide con la hora del servidor, el producto NO se agregó al pedido", "AVISO IMPORTANTE") End If - c.Close End Sub 'Regresa un mapa con la información de la promo. @@ -1175,6 +1180,8 @@ Sub alcanzanLosVariablesParaPromo(promoMap As Map, inventarioSinFijos As Map) As Return res End Sub +'prodsFijos=[1000000126, 1008013885] + '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. @@ -1314,7 +1321,7 @@ 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 thisLog As Boolean = True Private invFijoXpromo As Map Private t As List t.Initialize @@ -1329,9 +1336,9 @@ Sub revisaMaxPromosProdsFijosPorInventario(pm As Map) As Int Private thisInvDisp As Int = 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))}"$) +' 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)) +' 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. @@ -1349,7 +1356,7 @@ End Sub '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 + Private thisLog As Boolean = True If thisLog Then Log("======================================================") If thisLog Then Log("======================================================") Private invFijoXpromo As Map @@ -1920,4 +1927,46 @@ Sub parseHTTPError(error As String) As String ' LogColor(error.SubString2(inicio + 17, final), Colors.Blue) End If Return nuevoError +End Sub + +'Regresa un mapa con la promocion por monto, siempre y cuando esta tenga existencias y no exista en el pedido del cliente. +Sub revisaPromoPorMonto As Map + Private m As Map + Private rangoMin As String = "0" + Private promoId As String = "" + m.Initialize + Private pm As Cursor = Starter.skmt.ExecQuery("select CAT_PA_ID, ifNull(CAT_PA_PORCENTAJE_PAQUETE, 0) as CAT_PA_PORCENTAJE_PAQUETE, ifNull(CAT_PA_PRECIO1, 0) as CAT_PA_PRECIO1, ifNull(CAT_PA_PRECIO2, 0) as CAT_PA_PRECIO2 from promos_comp where CAT_PA_TIPO_PROMONTO = '1' and CAT_PA_ID not in (select PE_CEDIS from PEDIDO where PE_CEDIS = PE_PROID)") 'Traemos las "promos por monto" que no existen en el "PEDIDO" del cliente. + If pm.RowCount > 0 Then + Private clienteId As String = traeCliente + For i = 0 To pm.RowCount - 1 + pm.Position = i + Private tm As Map = procesaPromocion(pm.GetString("CAT_PA_ID"), clienteId) + Log(pm.GetString("CAT_PA_ID")) + Log("STATUS PROMO: " & tm.Get("status")) + If tm.Get("status") = "ok" And pm.GetString("CAT_PA_PORCENTAJE_PAQUETE") <> "0" And pm.GetString("CAT_PA_PRECIO2") <> "0" Then + rangoMin = pm.GetString("CAT_PA_PRECIO1") - ((pm.GetString("CAT_PA_PORCENTAJE_PAQUETE") / 100) * pm.GetString("CAT_PA_PRECIO1")) + promoId = pm.GetString("CAT_PA_ID") + m.Put("id", promoId) + m.Put("rangoMin", rangoMin) + m.Put("precio1", pm.GetString("CAT_PA_PRECIO1")) + m.Put("precio2", pm.GetString("CAT_PA_PRECIO2")) + End If + Next + End If + Return m +End Sub + +Sub revisaHora As Boolean + Private horaCorrecta As Boolean = False + Private h As Cursor = Starter.skmt.ExecQuery("select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'HORA'") + If h.RowCount > 0 Then + h.Position = 0 + DateTime.DateFormat = "HH" + Private ahora As String = DateTime.Date(DateTime.Now) + Log($"${h.GetInt("CAT_VA_VALOR")} >= ${(ahora - 2)} and ${h.GetInt("CAT_VA_VALOR")} <= ${(ahora + 2)}"$) + If h.GetInt("CAT_VA_VALOR") >= ahora - 2 And h.GetInt("CAT_VA_VALOR") <= ahora + 2 Then + horaCorrecta = True + End If + End If + Return horaCorrecta End Sub \ No newline at end of file diff --git a/B4A/kms_helperSubs.bas b/B4A/kms_helperSubs.bas index b3845fe..5d14c09 100644 --- a/B4A/kms_helperSubs.bas +++ b/B4A/kms_helperSubs.bas @@ -79,6 +79,8 @@ Sub RD_Init agregaColumna(rkmt, "kmt_info", "CAT_CL_LIMITECREDITO", "TEXT") If chkIfTableExists(skmt, "kmt_info") Then rkmt.ExecNonQuery($"create table if not exists kmt_info (${getTableColumnList(skmt, "kmt_info")}, FECHA TEXT)"$) If chkIfTableExists(skmt, "PROMOS_COMP") Then rkmt.ExecNonQuery($"create table if not exists PROMOS_COMP (${getTableColumnList(skmt, "PROMOS_COMP")}, FECHA TEXT)"$) + agregaColumna(rkmt, "PROMOS_COMP", "CAT_PA_PORCENTAJE_PAQUETE", "TEXT") + agregaColumna(rkmt, "PROMOS_COMP", "CAT_PA_PRECIO1", "TEXT") If chkIfTableExists(skmt, "CAT_VARIABLES") Then rkmt.ExecNonQuery($"create table if not exists CAT_VARIABLES (${getTableColumnList(skmt, "CAT_VARIABLES")}, FECHA TEXT)"$) If chkIfTableExists(skmt, "CAT_RMI") Then rkmt.ExecNonQuery($"create table if not exists CAT_RMI (${getTableColumnList(skmt, "CAT_RMI")}, FECHA TEXT)"$) DateTime.DateFormat = "yyyyMMdd"