mirror of
https://github.com/KeymonSoft/Kelloggs_v4.git
synced 2026-04-18 02:29:13 +00:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f0116e375d | |||
| 409c224820 | |||
| 72ce7c8806 | |||
| 7a88acaf4c | |||
| 749cf6e7fe | |||
| bca0d31469 | |||
| 6fc81fcf0d | |||
| ceaa5246e5 |
@@ -167,6 +167,12 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS VERSIONES (VERSION TEXT, FECHA TEXT)")
|
||||
Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_INVENTARIO(CI_IDPROD TEXT, CI_INVENTARIO TEXT)")
|
||||
''' FIN DOE
|
||||
Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_NOTIFICACIONES(CN_CODIGO TEXT, CN_ID TEXT,CN_CLIENTE TEXT, CN_NOTIFICACION TEXT)")
|
||||
Starter.skmt.ExecNonQuery("CREATE TABLE If Not EXISTS HIST_NOTIFICACIONES (HN_CODIGO TEXT, HN_ID TEXT, HN_FECHA TEXT)")
|
||||
Starter.skmt.ExecNonQuery("CREATE TABLE If Not EXISTS CAT_GUNAPROD5 (CAT_GP_ID TEXT, CAT_GP_ALMACEN TEXT)")
|
||||
Starter.skmt.ExecNonQuery("CREATE INDEX IF NOT EXISTS idx_pedido_proid ON PEDIDO(PE_PROID)")
|
||||
Starter.skmt.ExecNonQuery("CREATE INDEX IF NOT EXISTS idx_pedido_cliente ON PEDIDO(PE_CLIENTE)")
|
||||
Starter.skmt.ExecNonQuery("CREATE INDEX IF NOT EXISTS idx_cat5_id ON CAT_GUNAPROD5(CAT_GP_ID)")
|
||||
kh.agregaColumna(Starter.skmt, "kmt_info", "IMPRESION", "INTEGER")
|
||||
kh.agregaColumna(Starter.skmt, "kmt_info", "CREDITO", "INTEGER")
|
||||
kh.agregaColumna(Starter.skmt, "PEDIDO", "PE_ENVIADO", "INTEGER DEFAULT 0")
|
||||
@@ -183,6 +189,9 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
kh.agregaColumna(Starter.skmt, "CAT_GUNAPROD2", "CAT_GP_PROMOCION", "TEXT")
|
||||
kh.agregaColumna(Starter.skmt, "TREND_SPENDING", "TIPO", "TEXT")
|
||||
kh.agregaColumna(Starter.skmt, "CAT_DETALLES_PAQ", "CAT_DP_PRECIOB", "TEXT")
|
||||
kh.agregaColumna(Starter.skmt, "PEDIDO", "PE_ARCH", "TEXT")
|
||||
kh.agregaColumna(Starter.skmt, "PEDIDO_CLIENTE", "PC_ARCH", "TEXT")
|
||||
kh.agregaColumna(Starter.skmt, "PEDIDO3", "PE_ARCH", "TEXT")
|
||||
Root = Root1
|
||||
' Root.LoadLayout("MainPage")
|
||||
Root.LoadLayout("login")
|
||||
@@ -262,7 +271,7 @@ Log(111)
|
||||
End If
|
||||
' reqManager.Initialize(Me, Starter.server)
|
||||
' Activity.LoadLayout("login")
|
||||
Label1.Text = Application.VersionName
|
||||
Label1.Text = Application.VersionName & " "
|
||||
|
||||
' Log("Pedimos permisos de almacenamiento externo")
|
||||
' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
|
||||
@@ -1065,7 +1074,7 @@ Private Sub ImageView1_LongClick
|
||||
reqManagerX.Initialize(Me, "http://keymon.net:9010/SALMA")
|
||||
Private cmdX As DBCommand
|
||||
cmdX.Initialize
|
||||
cmdX.Name = "traeConexion4"
|
||||
cmdX.Name = "update_usuario_guna_nobajas"
|
||||
cmdX.Parameters = Array As Object("CDAZA", 2, 3, 4)
|
||||
reqManagerX.ExecuteQuery(cmdX, 0, "prueba")
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ Sub Class_Globals
|
||||
Dim g As GPS
|
||||
Dim kh As kms_helperSubs
|
||||
Dim reqManager As DBRequestManager
|
||||
Dim cmd As DBCommand
|
||||
Dim ruta As String
|
||||
Dim clie_id As String
|
||||
Dim sDate,sTime As String
|
||||
@@ -48,6 +49,8 @@ Sub Class_Globals
|
||||
Dim C1 As Cursor
|
||||
Dim C3 As Cursor
|
||||
Dim C4, C5, C6, C8 As Cursor
|
||||
Dim c2 As Cursor
|
||||
Dim S2 As Cursor
|
||||
Dim RMI As String
|
||||
Dim ListView1 As ListView
|
||||
Dim la_cuenta As Label
|
||||
@@ -79,9 +82,6 @@ Sub Class_Globals
|
||||
Dim Guardar As Button
|
||||
' Dim NUEVO As Button
|
||||
Dim l_total As Label
|
||||
Dim c2 As Cursor
|
||||
Dim S2 As Cursor
|
||||
Private s As Cursor
|
||||
Dim res As String
|
||||
Private HIST As Button
|
||||
Private MONTO_COMPRA As String
|
||||
@@ -295,6 +295,12 @@ Sub Class_Globals
|
||||
Private e_comm As EditText
|
||||
Private p_infoGral2 As Panel
|
||||
Dim indicePregunta As Int
|
||||
Private p_transparenciaNoti As Panel
|
||||
Private p_Notificacion As Panel
|
||||
Private l_notificacionTexto As Label
|
||||
Private l_notificacionTitulo As Label
|
||||
Private b_notificacion As Button
|
||||
Dim reqManagerW As DBRequestManagerW
|
||||
End Sub
|
||||
|
||||
'You can add more parameters here.
|
||||
@@ -375,6 +381,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
Else
|
||||
RutaBoleta=Starter.rutaV
|
||||
End If
|
||||
If s.IsInitialized Then s.Close
|
||||
End If
|
||||
c=Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("MACIMP"))
|
||||
c.Position = 0
|
||||
@@ -390,7 +397,6 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
c.Close
|
||||
Panel_INV_A.Left = 0 : Panel_INV_A.top = 0
|
||||
Panel10.Left = 0 : Panel10.top = 0
|
||||
If s.IsInitialized Then s.Close
|
||||
' Log("################# PERMISOS BT: " & Starter.rp.Check("android.permission.BLUETOOTH_CONNECT"))
|
||||
' Log("Permisos BT: " & Starter.rp.Check("android.permission.BLUETOOTH_CONNECT"))
|
||||
' Log("REVISAMOS PERMISOS DE BT")
|
||||
@@ -411,7 +417,7 @@ Sub B4XPage_Appear
|
||||
clienteId = kh.traeCliente
|
||||
P_DOE.Visible = False
|
||||
dentroDeGeocerca = False
|
||||
|
||||
|
||||
' Log($"TOTAL VENTA: ${kh.traeTotalCliente}"$)
|
||||
B_VENTA.Visible = False
|
||||
b_noVenta.Visible = False
|
||||
@@ -421,11 +427,12 @@ Sub B4XPage_Appear
|
||||
' Log(Starter.rp.Check("android.permission.BLUETOOTH_CONNECT"))
|
||||
|
||||
reqManager.Initialize(Me, Starter.DBReqServer)
|
||||
reqManagerW.Initialize
|
||||
usarGeocerca = kh.traeUsarGeocerca
|
||||
|
||||
|
||||
'Para el almacen 12 (GDL) no se usa la geocerca
|
||||
' If kh.traeAlmacen = 12 Then usarGeocerca = False
|
||||
|
||||
|
||||
' Log(Subs.traeUltimaActividadBD)
|
||||
c = Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("MACIMP"))
|
||||
c.Position = 0
|
||||
@@ -494,10 +501,8 @@ Sub B4XPage_Appear
|
||||
l_atiende.Text = "N/A"
|
||||
If c.GetString("CAT_CL_ATIENDE1") <> Null And c.GetString("CAT_CL_ATIENDE1") <> "null" Then l_atiende.Text = c.GetString("CAT_CL_ATIENDE1")
|
||||
l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2")
|
||||
|
||||
l_segmento2.text = "N/A"
|
||||
If c.GetString("CAT_CL_SEGMENTO") <> Null Then l_segmento2.text = c.GetString("CAT_CL_SEGMENTO")
|
||||
|
||||
b_inicioFinVenta.Text = "INICIAR VENTA"
|
||||
b_inicioFinVenta.BringToFront
|
||||
' LogColor(">>>>>> EN VENTA: " & Starter.enVenta, Colors.red)
|
||||
@@ -509,7 +514,7 @@ Sub B4XPage_Appear
|
||||
b_inicioFinVenta.Visible = False
|
||||
End If
|
||||
' LogColor(">>>>>> EN VENTA: " & Starter.enVenta, Colors.red)
|
||||
|
||||
|
||||
' LONGITUD = 0
|
||||
' If c.GetString("CAT_CL_LONG") <> Null And c.GetString("CAT_CL_LONG") <> "null" And IsNumber(c.GetString("CAT_CL_LONG")) Then LONGITUD = c.GetString("CAT_CL_LONG")
|
||||
' LATITUD = 0
|
||||
@@ -774,7 +779,7 @@ Sub B4XPage_Appear
|
||||
Private mPromoXMonto As Map = Subs.revisaPromoPorMonto
|
||||
Private elMontoTSDeLaVenta As String = 0
|
||||
' 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 mPromoXMonto.Size > 0 And clienteId <> 0 Then ' El "clienteId <> 0" es para que no de la promo cuando sea 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")
|
||||
@@ -782,10 +787,12 @@ Sub B4XPage_Appear
|
||||
'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
|
||||
Log(">>>> GUARDAMOS PROMOXMONTO HEADER")
|
||||
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
|
||||
Log(">>>> GUARDAMOS PROMOXMONTO PRODS")
|
||||
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)
|
||||
' Traemos el monto de las bonificacionos a guardar. -- Trade Spending
|
||||
Log("Monto Bonificacion -->> " & B4XPages.MainPage.promos.ts.traeMontoBonificacion(dp.GetString("CAT_DP_IDPROD"), dp.GetString("CAT_DP_PRECIO"), mPromoXMonto.Get("id")))
|
||||
@@ -797,6 +804,7 @@ Sub B4XPage_Appear
|
||||
MsgboxAsync($"Promo por monto "${Subs.traeProdNombre(mPromoXMonto.Get("id"))}" agregada."$,"AVISO")
|
||||
B4XPage_Appear
|
||||
End If
|
||||
dp.Close
|
||||
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.
|
||||
@@ -815,10 +823,41 @@ Sub B4XPage_Appear
|
||||
B4XPage_Appear
|
||||
End If
|
||||
End If
|
||||
ppm.Close
|
||||
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
|
||||
c = Starter.skmt.ExecQuery($"select * from cat_notificaciones where CN_CLIENTE = '${Subs.traeCliente}'"$)
|
||||
Log("###############################################################")
|
||||
Log(c.RowCount)
|
||||
Log("###############################################################")
|
||||
If c.RowCount > 0 Then
|
||||
c.Position = 0
|
||||
l_notificacionTexto.Text = c.GetString("CN_NOTIFICACION")
|
||||
p_transparenciaNoti.Top = 0 : p_transparenciaNoti.Left = 0
|
||||
p_transparenciaNoti.Height = Root.Height
|
||||
p_transparenciaNoti.Width = Root.Width
|
||||
Subs.centraPanel(p_Notificacion, Root.Width)
|
||||
p_transparenciaNoti.Visible = True
|
||||
Log(c.GetString("CN_ID") & "|" & c.GetString("CN_CODIGO"))
|
||||
b_notificacion.Tag = c.GetString("CN_ID") & "|" & c.GetString("CN_CODIGO")
|
||||
p_transparenciaNoti.BringToFront
|
||||
End If
|
||||
c.Close
|
||||
|
||||
' Este codigo es para hacer que el Label de las notificaciones tenga SCROLLVERTICAL.
|
||||
Dim labeljo, scrollerjo As JavaObject
|
||||
labeljo = l_notificacionTexto
|
||||
scrollerjo.InitializeNewInstance("android.text.method.ScrollingMovementMethod", Null)
|
||||
labeljo.RunMethod("setMovementMethod", Array(scrollerjo)) ' Asigna el método de movimiento para permitir scroll
|
||||
labeljo.RunMethod("setHorizontallyScrolling", Array(False)) ' CAMBIO: Para scroll vertical, esto DEBE ser False
|
||||
labeljo.RunMethod("setVerticalScrollBarEnabled", Array(True)) ' Opcional: Forzar a que el scroll sea vertical explícitamente si el contenido es grande
|
||||
' Forzar el scroll al inicio (0,0)
|
||||
Sleep(0)
|
||||
' El primer 0 es la posición X (horizontal), el segundo es la posición Y (vertical)
|
||||
labeljo.RunMethod("scrollTo", Array(0, 0))
|
||||
'Termina codigo de label horzontal
|
||||
End Sub
|
||||
|
||||
Sub Printer1_Connected (Success As Boolean)
|
||||
@@ -894,7 +933,7 @@ Sub GPS_LocationChanged (Location1 As Location)
|
||||
If c.RowCount > 0 Then
|
||||
gps_boton_doe = c.GetString("CAT_CL_EMAIL")
|
||||
End If
|
||||
|
||||
c.Close
|
||||
' gest.Visible = True
|
||||
' gps_boton_doe ="1"
|
||||
' LogColor($"Distancia actual: ${distance}"$, Colors.Blue)
|
||||
@@ -907,6 +946,7 @@ Sub GPS_LocationChanged (Location1 As Location)
|
||||
clienteConPromo = x.GetString("clienteConPromo")
|
||||
' Log($"${x.GetString("clienteConPromo")}"$)
|
||||
End If
|
||||
x.Close
|
||||
' If pgs_boton_noventa = "1" Then b_noVenta.Visible = True
|
||||
' If gps_boton_doe ="1" Then b_whats.Visible = True
|
||||
|
||||
@@ -1000,7 +1040,7 @@ Sub Guardar_Click
|
||||
Starter.skmt.ExecNonQuery("delete from NOVENTA where NV_CLIENTE In (select cuenta from cuentaa)")
|
||||
Starter.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)")
|
||||
If logger Then LogColor($"Insertamos coordenadas en pedido: ${Starter.lon_gps}, ${Starter.lat_gps}"$, Colors.Magenta)
|
||||
Starter.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), Starter.lon_gps, Starter.lat_gps))
|
||||
Starter.skmt.ExecNonQuery2("insert into pedido_cliente(PC_RUTA, PC_ALMACEN, PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?,?,?)", Array As Object(Subs.traeAlmacen, Subs.traeRuta, clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), Starter.lon_gps, Starter.lat_gps))
|
||||
Log("Actualizamos gestion")
|
||||
Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)")
|
||||
End If
|
||||
@@ -1042,6 +1082,8 @@ Sub Guardar_Click
|
||||
b_inicioFinVenta.Text = "TERMINAR VENTA"
|
||||
Log("RESPALDO")
|
||||
kh.RD_respaldoBatch
|
||||
|
||||
' Subir_Pedido_Con_Integridad(clie_id)
|
||||
|
||||
mandaPendientes
|
||||
|
||||
@@ -1058,8 +1100,9 @@ Sub Guardar_Click
|
||||
End Sub
|
||||
|
||||
Sub mandaPendientes
|
||||
B4XPages.MainPage.principal.enviaPedido(Null)
|
||||
B4XPages.MainPage.principal.enviaPedidoCliente(Null)
|
||||
' B4XPages.MainPage.principal.enviaPedido(Null)
|
||||
' B4XPages.MainPage.principal.enviaPedidoCliente(Null)
|
||||
B4XPages.MainPage.principal.enviaPedidoBatch(Null)
|
||||
End Sub
|
||||
|
||||
Sub NUEVO_Click
|
||||
@@ -1110,24 +1153,26 @@ End Sub
|
||||
|
||||
Sub B_IMP_Click
|
||||
' Buscamos los clientes que tienen pedido y NO estan impresos.
|
||||
Private t As Cursor = Starter.skmt.ExecQuery("Select cat_cl_codigo from kmt_info where impresion = 0 and cat_cl_codigo not in (select ci_cuenta from cliente_impreso) and cat_cl_codigo in (select distinct pe_cliente from pedido)")
|
||||
If t.RowCount > 0 Then
|
||||
For i = 0 To t.RowCount - 1
|
||||
t.Position = i ' Y los BORRAMOS.
|
||||
Log(t.GetString("CAT_CL_CODIGO"))
|
||||
Starter.skmt.ExecNonQuery($"update CUENTAA set CUENTA = '${t.GetString("CAT_CL_CODIGO")}'"$)
|
||||
Subs.borraPedidoClienteActual
|
||||
' Msgbox2Async($"El pedido del cliente ${t.GetString("CAT_CL_CODIGO")} no está impreso, se va a borrar"$, "PEDIDO NO IMPRESO", "Aceptar", "", "", Null, True)
|
||||
Next
|
||||
End If
|
||||
|
||||
' Private t As Cursor = Starter.skmt.ExecQuery("Select cat_cl_codigo from kmt_info where impresion = 0 and cat_cl_codigo not in (select ci_cuenta from cliente_impreso) and cat_cl_codigo in (select distinct pe_cliente from pedido)")
|
||||
' If t.RowCount > 0 Then
|
||||
' For i = 0 To t.RowCount - 1
|
||||
' t.Position = i ' Y los BORRAMOS.
|
||||
' Log(t.GetString("CAT_CL_CODIGO"))
|
||||
' Starter.skmt.ExecNonQuery($"update CUENTAA set CUENTA = '${t.GetString("CAT_CL_CODIGO")}'"$)
|
||||
' Subs.borraPedidoClienteActual
|
||||
'' Msgbox2Async($"El pedido del cliente ${t.GetString("CAT_CL_CODIGO")} no está impreso, se va a borrar"$, "PEDIDO NO IMPRESO", "Aceptar", "", "", Null, True)
|
||||
' Next
|
||||
' End If
|
||||
|
||||
Sleep(1000)
|
||||
|
||||
|
||||
Starter.skmt.Close : Log("Cerramos BD") : Starter.revisaBD
|
||||
Subs.panelAnchoAlto(Panel_INV_A, Root.Width, Root.Height)
|
||||
Panel_INV_A.Visible = True
|
||||
P_INF_GENERAL.Visible = False
|
||||
If logger Then Log("Panel general="&P_INF_GENERAL.Visible)
|
||||
L_INVA.Left = 5dip
|
||||
L_INVA.Width = Root.Width * 0.98
|
||||
L_INVA.Clear
|
||||
Dim label1 As Label
|
||||
label1 = L_INVA.TwoLinesLayout.Label
|
||||
@@ -1139,10 +1184,10 @@ Sub B_IMP_Click
|
||||
label2.TextColor = Colors.Black
|
||||
' Aqui es donde esta el pedo de julieta de los descuentos, quitar el precio2 pero meter un if para saber si es ruta especial o es normal o que show.
|
||||
s=Starter.skmt.ExecQuery2 ("select CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_ALMACEN from cat_gunaprod2 where CAT_GP_CLASIF <> ? ORDER BY CAT_GP_NOMBRE ", Array As String("PROMOS"))
|
||||
If s.RowCount>0 Then
|
||||
For i=0 To S.RowCount -1
|
||||
If s.RowCount > 0 Then
|
||||
For i = 0 To S.RowCount - 1
|
||||
s.Position=i
|
||||
S1=Starter.skmt.ExecQuery2("select CAT_GP_ALMACEN from cat_gunaprod5 where CAT_GP_ID = ?", Array As String(s.GetString("CAT_GP_ID")))
|
||||
S1=Starter.skmt.ExecQuery2("select CAT_GP_ALMACEN from cat_gunaprod2 where CAT_GP_ID = ?", Array As String(s.GetString("CAT_GP_ID")))
|
||||
S1.Position=0
|
||||
S3=Starter.skmt.ExecQuery2("select count(*) as CUANTOS from HIST_ABORDO where HIST_PROID = ?", Array As String(s.GetString("CAT_GP_ID")))
|
||||
S3.Position=0
|
||||
@@ -1167,6 +1212,7 @@ Sub B_IMP_Click
|
||||
C3.Position=0
|
||||
a_venta = C3.GetString("CANTIDAD")
|
||||
a_VENTA_F = C3.GetString("TOTAL")
|
||||
C3.Close
|
||||
Else
|
||||
a_venta = 0
|
||||
a_VENTA_F = 0
|
||||
@@ -1189,6 +1235,10 @@ Sub B_IMP_Click
|
||||
Next
|
||||
End If
|
||||
s.Close
|
||||
If S1.IsInitialized Then S1.Close
|
||||
If S3.IsInitialized Then S3.Close
|
||||
If S2.IsInitialized Then S2.Close
|
||||
If C4.IsInitialized Then C4.Close
|
||||
End Sub
|
||||
|
||||
Sub B_IMP2_Click
|
||||
@@ -1313,6 +1363,7 @@ Sub Imprime_ticket
|
||||
cr.Position = 0
|
||||
If cr.GetInt("CREDITO") = 1 Then formaPago = "Crédito"
|
||||
End If
|
||||
cr.Close
|
||||
If la_cuenta.Text = "0" Then
|
||||
LogColor(123, Colors.red)
|
||||
Try
|
||||
@@ -3941,6 +3992,7 @@ Sub revisaPromoEspecial As Map
|
||||
y.Position = 0
|
||||
nombreProd = y.GetString("nombreProd")
|
||||
End If
|
||||
y.Close
|
||||
Log("El cliente tiene asignada la promo especial.")
|
||||
Private p As Cursor
|
||||
p=Starter.skmt.ExecQuery("select count(*) as hayInventario from CAT_GUNAPROD where CAT_GP_ALMACEN > 0 and CAT_GP_ID = " & x.GetString("CPM_PROID"))
|
||||
@@ -4415,4 +4467,156 @@ Sub revisaExistenciasDOE As Boolean 'ignore
|
||||
' 1, "LECHE ALL BRAN NUEZ 236ML", "1008027228"
|
||||
' 1, "LECHE CHOCO MELVIN 236ML", "1008013799"
|
||||
Return suficiente
|
||||
End Sub
|
||||
|
||||
Private Sub p_transparenciaNoti_Click
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub b_notificacion_Click
|
||||
Private tag As String = Sender.As(Button).Tag
|
||||
Log("-" & tag & "-")
|
||||
Private tag1() As String = Regex.Split("\|", tag)
|
||||
Log(tag1.Length & "-" & tag1(0) & "-" & tag1(1))
|
||||
Private CODIGO As String = tag1(0)
|
||||
Private ID As String = tag1(1)
|
||||
p_transparenciaNoti.Visible = False
|
||||
DateTime.DateFormat = "yyyy-MM-dd HH:mm:ss"
|
||||
Starter.skmt.ExecNonQuery($"insert into HIST_NOTIFICACIONES (HN_CODIGO, HN_ID, HN_FECHA) values ('${CODIGO}', '${ID}', '${DateTime.Date(DateTime.Now)}')"$)
|
||||
Log(123)
|
||||
cmd.Initialize
|
||||
cmd.Name = "updateHistNotificacionesMotivo"
|
||||
cmd.Parameters = Array As Object("", DateTime.Date(DateTime.Now), Subs.traeRuta, usuario, Subs.traeAlmacen, clienteId)
|
||||
reqManager.ExecuteCommand(cmd , "updateHistNotificacionesMotivo")
|
||||
End Sub
|
||||
|
||||
' Subrutina principal para subir pedidos con validación de integridad ARCH
|
||||
' Llama a esto desde tu botón Subir_Click
|
||||
' Devuelve un ResumableSub que puedes esperar con Wait For
|
||||
Sub Subir_Pedido_Con_Integridad(cliente As String) As ResumableSub
|
||||
|
||||
Log("--- Iniciando Envío Seguro para Cliente: " & cliente & " ---")
|
||||
|
||||
' 1. Generar ARCH (Identificador Único del Paquete)
|
||||
Dim Arch As String = Subs.traeAlmacen & "_" & Subs.traeRuta & "_" & cliente & "_" & DateTime.Now
|
||||
|
||||
' 2. Marcar registros pendientes con este ARCH localmente
|
||||
' CORRECCIÓN CRÍTICA: El orden es (Valor_a_Asignar, Filtro) -> (Arch, cliente)
|
||||
Starter.skmt.ExecNonQuery2($"UPDATE PEDIDO SET PE_ARCH = ? WHERE PE_CLIENTE = ? AND PE_ENVIADO = 0"$, Array As Object(Arch, cliente))
|
||||
Starter.skmt.ExecNonQuery2($"UPDATE PEDIDO_CLIENTE SET PC_ARCH = ? WHERE PC_CLIENTE = ? AND PC_ENVIADO = 0"$, Array As Object(Arch, cliente))
|
||||
|
||||
' 3. Contar qué vamos a enviar
|
||||
Dim cCheck As Cursor = Starter.skmt.ExecQuery($"SELECT COUNT(*) as total FROM PEDIDO WHERE PE_ARCH = '${Arch}'"$)
|
||||
cCheck.Position = 0
|
||||
Dim TotalProductosLocal As Int = cCheck.GetInt("total")
|
||||
cCheck.Close
|
||||
|
||||
If TotalProductosLocal = 0 Then
|
||||
Log("Nada pendiente para enviar con este ARCH.")
|
||||
Return "Vacio"
|
||||
End If
|
||||
|
||||
Log($"Total a enviar: ${TotalProductosLocal} productos. ID Paquete: ${Arch}"$)
|
||||
|
||||
Dim envioCorrecto As Boolean = True
|
||||
|
||||
' 4. Enviar Encabezados (PEDIDO_CLIENTE)
|
||||
Log("Enviando encabezado con ARCH: " & Arch)
|
||||
Private cx As Cursor = Starter.skmt.ExecQuery($"SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_ENVIADO, PC_ARCH FROM PEDIDO_CLIENTE WHERE PC_ARCH = '${Arch}'"$)
|
||||
|
||||
If cx.RowCount > 0 Then
|
||||
For i = 0 To cx.RowCount - 1
|
||||
cx.Position = i
|
||||
Dim cmd As DBCommand
|
||||
cmd.Initialize
|
||||
cmd.Name = "insert_pedidos_KELL_arch"
|
||||
|
||||
cmd.Parameters = Array As Object(cx.GetString("PC_CLIENTE"), cx.GetString("PC_FECHA"), cx.GetString("PC_USER"), cx.GetString("PC_NOART"), cx.GetString("PC_MONTO"), cx.GetString("PC_LON"), cx.GetString("PC_LAT"), cx.GetString("PC_ALMACEN"), cx.GetString("PC_RUTA"), cx.GetString("PC_COSTO_SIN"), cx.GetString("PC_ARCH"))
|
||||
Log($"insert_pedidos_KELL_arch: ${cx.GetString("PC_CLIENTE")}, ${cx.GetString("PC_FECHA")}, ${cx.GetString("PC_USER")}, ${cx.GetString("PC_NOART")}, ${cx.GetString("PC_MONTO")}, ${cx.GetString("PC_LON")}, ${cx.GetString("PC_LAT")}, ${cx.GetString("PC_ALMACEN")}, ${cx.GetString("PC_RUTA")}, ${cx.GetString("PC_COSTO_SIN")}, ${cx.GetString("PC_ARCH")}"$)
|
||||
|
||||
reqManagerW.ExecuteCommand(Starter.DBReqServer, cmd, Me, "header_envio")
|
||||
|
||||
Wait For header_envio_Completed (ResultHeader As TResultado)
|
||||
|
||||
If ResultHeader.Success = False Then
|
||||
Log("Error crítico enviando encabezado: " & ResultHeader.ErrorMessage)
|
||||
envioCorrecto = False
|
||||
Exit
|
||||
End If
|
||||
Next
|
||||
cx.Close
|
||||
End If
|
||||
|
||||
If envioCorrecto = False Then
|
||||
Msgbox("Error al enviar encabezado del pedido. Intente nuevamente.", "Error de Conexión")
|
||||
Return "Error PC"
|
||||
End If
|
||||
|
||||
' 5. Enviar Detalles (PEDIDO)
|
||||
Log("Enviando detalle con ARCH: " & Arch)
|
||||
Private cPed As Cursor = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO, PE_ARCH FROM PEDIDO WHERE PE_ARCH = '${Arch}'"$)
|
||||
|
||||
If cPed.RowCount > 0 Then
|
||||
For i = 0 To cPed.RowCount - 1
|
||||
cPed.Position = i
|
||||
Dim cmd As DBCommand
|
||||
cmd.Initialize
|
||||
cmd.Name = "insert_pedido_KELL_arch"
|
||||
|
||||
cmd.Parameters = Array As Object(cPed.GetString("PE_CEDIS"), Subs.traeAlmacen, cPed.GetString("PE_COSTO_TOT"), cPed.GetString("PE_COSTOU"), cPed.GetString("PE_CANT"), cPed.GetString("PE_PRONOMBRE"), cPed.GetString("PE_PROID"), cPed.GetString("PE_CLIENTE"), cPed.GetString("PE_FECHA"), cPed.GetString("PE_USUARIO"), cPed.GetString("PE_RUTA"), cPed.GetString("PE_COSTO_SIN"), cPed.GetString("PE_DESC"), cPed.GetString("PE_FOLIO"), cPed.GetString("PE_TIPO"), cPed.GetString("PE_ARCH"))
|
||||
|
||||
reqManagerW.ExecuteCommand(Starter.DBReqServer, cmd, Me, "detalle_envio")
|
||||
|
||||
Wait For detalle_envio_Completed (ResultDet As TResultado)
|
||||
|
||||
If ResultDet.Success = False Then
|
||||
Log("Error enviando producto " & cPed.GetString("PE_PRONOMBRE"))
|
||||
envioCorrecto = False
|
||||
Exit
|
||||
End If
|
||||
Next
|
||||
cPed.Close
|
||||
End If
|
||||
|
||||
If envioCorrecto = False Then
|
||||
Return "Error PE"
|
||||
End If
|
||||
|
||||
' 6. VALIDACIÓN FINAL
|
||||
Log("Validando integridad con Oracle...")
|
||||
|
||||
Dim cmdVal As DBCommand
|
||||
cmdVal.Initialize
|
||||
cmdVal.Name = "validar_integridad_arch"
|
||||
cmdVal.Parameters = Array As Object(Arch, TotalProductosLocal)
|
||||
|
||||
reqManagerW.ExecuteQuery(Starter.DBReqServer, cmdVal, Me, "validacion_integridad")
|
||||
Wait For validacion_integridad_Completed (ResultVal As TResultado)
|
||||
|
||||
If ResultVal.Success Then
|
||||
Dim estado As String = ""
|
||||
For Each row() As Object In ResultVal.resultado.Rows
|
||||
estado = row(ResultVal.resultado.Columns.Get("ESTADO"))
|
||||
Next
|
||||
|
||||
If estado = "COMPLETO" Then
|
||||
Log("¡Validación Exitosa! Marcando pedido como enviado.")
|
||||
|
||||
' Marcamos como enviado localmente usando el ARCH
|
||||
Starter.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_ENVIADO = 1 WHERE PE_ARCH = ?", Array As Object(Arch))
|
||||
Starter.skmt.ExecNonQuery2("UPDATE PEDIDO_CLIENTE SET PC_ENVIADO = 1 WHERE PC_ARCH = ?", Array As Object(Arch))
|
||||
|
||||
ToastMessageShow("Pedido enviado y verificado correctamente", False)
|
||||
Return "Validado OK"
|
||||
Else
|
||||
Log("ERROR DE INTEGRIDAD: El servidor reporta " & estado)
|
||||
Msgbox("El servidor recibió datos incompletos. El pedido NO se marcó como enviado. Por favor intente subir de nuevo.", "Error de Integridad")
|
||||
Return "Error Validacion"
|
||||
End If
|
||||
Else
|
||||
Log("Error al ejecutar query de validación: " & ResultVal.ErrorMessage)
|
||||
Msgbox("No se pudo verificar el pedido por error de red. Intente de nuevo.", "Error de Red")
|
||||
Return "Error Validacion (Red)"
|
||||
End If
|
||||
|
||||
End Sub
|
||||
@@ -98,7 +98,7 @@ Sub Class_Globals
|
||||
Private PORCENTAJE As Int
|
||||
Private P_RESUMEN As Panel
|
||||
Private B_OK_RES As Button
|
||||
Private Resumen As Button
|
||||
Dim Resumen As Button
|
||||
Private L_CUANTOST As Label
|
||||
Private img3 As ImageView
|
||||
Private ImageView3 As ImageView
|
||||
@@ -150,7 +150,7 @@ Sub Class_Globals
|
||||
Private Panel2 As Panel
|
||||
Dim ENVIADA As String
|
||||
Dim PORENVIAR As String
|
||||
Private Btn_CheckList As Button
|
||||
Dim Btn_CheckList As Button
|
||||
Dim Cedis_Check As String = "0"
|
||||
Private TIEMPO As String
|
||||
Private RUTA1 As Label
|
||||
@@ -220,6 +220,7 @@ Sub Class_Globals
|
||||
Dim ts As C_TrendSpending
|
||||
Dim linker As C_deviceLinker
|
||||
Dim kb As IME
|
||||
Dim reqTotales As Int
|
||||
End Sub
|
||||
|
||||
'You can add more parameters here.
|
||||
@@ -274,6 +275,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
L_MONTOD.Text = 0
|
||||
l_cuantosc.Text = 0
|
||||
l_cuantosn.Text = 0
|
||||
Log(">>>> Ponemos en CERO!!")
|
||||
drop = 0
|
||||
l_drop.Text = 0
|
||||
efectiva = 0
|
||||
@@ -288,7 +290,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
b.Position = 0
|
||||
L_MONTOD.Text = c.GetString("MONTO_DIA")
|
||||
l_cuantosc.Text = c.GetString("CLIENTES_DIA")
|
||||
l_cuantosn.Text = b.GetString("CUANTOS")
|
||||
l_cuantosn.Text = b.GetString("CUANTOS")
|
||||
Try
|
||||
drop = c.GetString("MONTO_DIA") / c.GetString("CLIENTES_DIA")
|
||||
Catch
|
||||
@@ -593,6 +595,9 @@ Sub B4XPage_Appear
|
||||
If n.GetString("cuantos") >= kh.traeMaxClientesNuevos Then NUEVO.Enabled = False
|
||||
' LogColor(">>>>>>>> REVISAMOS GUID <<<<<<<<<", Colors.red)
|
||||
' Subs.generaGUID_EnExterno
|
||||
|
||||
|
||||
Subs.RecalcularInventario
|
||||
End Sub
|
||||
|
||||
Sub trabajar_Click
|
||||
@@ -621,7 +626,6 @@ Sub trabajar_Click
|
||||
End Sub
|
||||
|
||||
Sub Subir_Click
|
||||
|
||||
' Buscamos los clientes que tienen pedido y NO estan impresos.
|
||||
Private t As Cursor = Starter.skmt.ExecQuery("Select cat_cl_codigo from kmt_info where impresion = 0 and cat_cl_codigo not in (select ci_cuenta from cliente_impreso) and cat_cl_codigo in (select distinct pe_cliente from pedido)")
|
||||
If t.RowCount > 0 Then
|
||||
@@ -633,9 +637,8 @@ Sub Subir_Click
|
||||
' Msgbox2Async($"El pedido del cliente ${t.GetString("CAT_CL_CODIGO")} no está impreso, se va a borrar"$, "PEDIDO NO IMPRESO", "Aceptar", "", "", Null, True)
|
||||
Next
|
||||
End If
|
||||
|
||||
Sleep(1000)
|
||||
|
||||
|
||||
CARGA = "SUBIR"
|
||||
' P1.Visible = True
|
||||
trabajar.Visible = False
|
||||
@@ -651,12 +654,15 @@ Sub Subir_Click
|
||||
S_CH.Visible = False
|
||||
PB1.Visible = False
|
||||
Resumen.Visible= False
|
||||
L_P_2.Text = "Envio de Pedidos"
|
||||
L_P_2.Text = "Envio de información"
|
||||
'L_P_3.Text = "Envio de Pedidos"
|
||||
'S_CH.Text = "EN PROCESO"
|
||||
S_CP.Text = "EN PROCESO"
|
||||
PB1.Progress = 0
|
||||
PB2.Progress = 0
|
||||
PB2.Color = Colors.RGB(180,203,36)
|
||||
PB2.Height = 15dip
|
||||
PB2.Padding = Array As Int (10dip, 10dip, 10dip, 10dip)
|
||||
contador_env = 0
|
||||
contador_strem = 0
|
||||
e_ruta.Text = ruta_valida
|
||||
@@ -677,7 +683,7 @@ Sub Subir_Click
|
||||
SUBIR_INFO_PEDIDO
|
||||
Else
|
||||
Dim result As Int
|
||||
result = Msgbox2("QUE VA A ENVIAR?", "ENVIO DE INFO.", "BOLETA", "VALIDAR", "VTA/PED", LoadBitmap(File.DirAssets, "alert2.png")) 'ignore
|
||||
result = Msgbox2("QUE VA A ENVIAR?", "ENVIO DE INFO.", "BOLETA", "VALIDAR", "VENTA/PEDIDO", LoadBitmap(File.DirAssets, "alert2.png")) 'ignore
|
||||
If result = DialogResponse.Positive Then
|
||||
SUBIR_INFO_BOLETA
|
||||
ELSE IF result = DialogResponse.NEGATIVE Then
|
||||
@@ -687,6 +693,18 @@ Sub Subir_Click
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
Private hn As Cursor = Starter.skmt.ExecQuery($"select distinct HN_CODIGO, HN_ID from hist_notificaciones"$)
|
||||
If hn.RowCount > 0 Then
|
||||
For i = 0 To hn.RowCount - 1
|
||||
hn.Position = i
|
||||
cmd.Initialize
|
||||
cmd.Name = "borraHistNotificaciones"
|
||||
cmd.Parameters = Array As Object( hn.GetString("HN_CODIGO"), hn.GetString("HN_ID"))
|
||||
reqManager.ExecuteCommand(cmd , "borraHistNotificaciones_"&hn.GetString("HN_CODIGO")&"_"&hn.GetString("HN_ID"))
|
||||
Next
|
||||
End If
|
||||
hn.Close
|
||||
End Sub
|
||||
|
||||
Sub cargar_Click
|
||||
@@ -778,7 +796,7 @@ Sub cargar_Click
|
||||
bcarga3 = 0
|
||||
e_ruta.Text = ruta_valida
|
||||
' NUEVOS CLIENTE
|
||||
|
||||
|
||||
Starter.skmt.ExecNonQuery2("delete from kmt_info where substr(CAT_CL_CODIGO,1,1) <> ?", Array As Object ("N"))
|
||||
Starter.skmt.ExecNonQuery("delete from cod_result")
|
||||
Starter.skmt.ExecNonQuery("delete from hist_gest")
|
||||
@@ -805,6 +823,7 @@ Sub cargar_Click
|
||||
Starter.skmt.ExecNonQuery("delete from DESC_CLIENTES")
|
||||
Starter.skmt.ExecNonQuery("delete from CAT_ENCUESTA_PREGUNTA")
|
||||
Starter.skmt.ExecNonQuery("delete from CAT_PROMO_MONTO")
|
||||
Starter.skmt.ExecNonQuery("delete from CAT_NOTIFICACIONES")
|
||||
''' PEDIDO DOE
|
||||
Starter.skmt.ExecNonQuery("delete from CAT_GUNAPROD_DOE")
|
||||
Starter.skmt.ExecNonQuery("delete from PEDIDO_DOE")
|
||||
@@ -1024,17 +1043,17 @@ Sub cargar_Click
|
||||
cmd.Name = "select_cat_clientes_guna_KELL2"
|
||||
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN)
|
||||
' reqManager.ExecuteQuery(cmd , 0, "kmt_datos")
|
||||
|
||||
|
||||
cmd.Initialize
|
||||
cmd.Name = "select_hist_datos_KELL"
|
||||
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN,e_ruta.text, ALMACEN)
|
||||
reqManager.ExecuteQuery(cmd , 0, "hist_datos")
|
||||
|
||||
|
||||
cmd.Initialize
|
||||
cmd.Name = "select_hist_promos_KELL"
|
||||
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN)
|
||||
reqManager.ExecuteQuery(cmd , 0, "hist_promos")
|
||||
|
||||
|
||||
cmd.Initialize
|
||||
cmd.Name = "select_hist_cliente_promos_KELL"
|
||||
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN)
|
||||
@@ -1151,18 +1170,23 @@ Sub cargar_Click
|
||||
cmd.Name = "select_pedido_doe"
|
||||
cmd.Parameters = Array As Object( ALMACEN,e_ruta.text )
|
||||
reqManager.ExecuteQuery(cmd , 0, "pedido_doe")
|
||||
|
||||
|
||||
cmd.Initialize
|
||||
cmd.Name = "select_cat_gunaprod_doe"
|
||||
cmd.Parameters = Array As Object( ALMACEN,e_ruta.text )
|
||||
reqManager.ExecuteQuery(cmd , 0, "cat_gunaprod_doe")
|
||||
''' FIN DOE
|
||||
|
||||
|
||||
cmd.Initialize
|
||||
cmd.Name = "select_cat_devoluciones_KELL"
|
||||
cmd.Parameters = Array As Object(ALMACEN)
|
||||
reqManager.ExecuteQuery(cmd , 0, "prods_rmi")
|
||||
|
||||
|
||||
cmd.Initialize
|
||||
cmd.Name = "selectNotificaciones"
|
||||
cmd.Parameters = Array As Object(ALMACEN, e_ruta.Text)
|
||||
reqManager.ExecuteQuery(cmd , 0, "selectNotificaciones")
|
||||
|
||||
cargar.Visible = False
|
||||
Subir.Visible = False
|
||||
trabajar.Visible=False
|
||||
@@ -1520,6 +1544,7 @@ Sub JobDone(Job As HttpJob)
|
||||
Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD"))
|
||||
' Dim CAT_GP_DEV As String = records(RESULT.Columns.Get("CAT_GP_DEV"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_DEV,CAT_GP_CODPROMO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,0)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD,"0"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD5(CAT_GP_ID,CAT_GP_ALMACEN) VALUES (?,?)", Array As Object (CAT_GP_ID,CAT_GP_ALMACEN))
|
||||
' skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_DEV,CAT_GP_CODPROMO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,0)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD,"0"))
|
||||
Next
|
||||
Starter.skmt.TransactionSuccessful
|
||||
@@ -1564,6 +1589,7 @@ Sub JobDone(Job As HttpJob)
|
||||
Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN"))
|
||||
Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD5(CAT_GP_ID,CAT_GP_ALMACEN) VALUES (?,?)", Array As Object (CAT_GP_ID,CAT_GP_ALMACEN))
|
||||
' skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD))
|
||||
Next
|
||||
Starter.skmt.TransactionSuccessful
|
||||
@@ -1800,9 +1826,27 @@ Sub JobDone(Job As HttpJob)
|
||||
End If
|
||||
|
||||
If RESULT.Tag.As(String).StartsWith("ins_pedido_") Then 'query tag
|
||||
|
||||
' If L_P_2.Text = "Envio de Pedidos" Then
|
||||
' L_P_2.Text = "Envio de Pedidos --"
|
||||
' Log(1)
|
||||
' else if L_P_2.Text = "Envio de Pedidos --" Then
|
||||
' Log(2)
|
||||
' L_P_2.Text = "Envio de Pedidos \"
|
||||
' else if L_P_2.Text = "Envio de Pedidos \" Then
|
||||
' Log(3)
|
||||
' L_P_2.Text = "Envio de Pedidos |"
|
||||
' else if L_P_2.Text = "Envio de Pedidos |" Then
|
||||
' Log(4)
|
||||
' L_P_2.Text = "Envio de Pedidos /"
|
||||
' else if L_P_2.Text = "Envio de Pedidos /" Then
|
||||
' Log(5)
|
||||
' L_P_2.Text = "Envio de Pedidos --"
|
||||
' End If
|
||||
|
||||
For Each records() As Object In RESULT.Rows
|
||||
Private temp() As String = Regex.Split("_", RESULT.Tag)
|
||||
Log(temp(2))
|
||||
' Log(temp(2))
|
||||
If temp.Length > 1 Then
|
||||
Starter.skmt.ExecNonQuery($"update pedido set pe_enviado = 1 where pe_cliente = '${temp(2)}'"$)
|
||||
Log($"update pedido set pe_enviado = 1 where pe_cliente = '${temp(2)}'"$)
|
||||
@@ -1810,7 +1854,7 @@ Sub JobDone(Job As HttpJob)
|
||||
PB2.Progress = PB2.Progress + 5
|
||||
S_CP.Text = "SUBIENDO"
|
||||
Next
|
||||
PB2.Progress = 100
|
||||
' PB2.Progress = 100
|
||||
S_CP.Text = "VALIDANDO"
|
||||
End If
|
||||
|
||||
@@ -1826,6 +1870,19 @@ Sub JobDone(Job As HttpJob)
|
||||
PB2.Progress = 100
|
||||
S_CP.Text = "VALIDANDO"
|
||||
End If
|
||||
|
||||
If RESULT.Tag.As(String).StartsWith("pedido_completo_") Then 'query tag
|
||||
For Each records() As Object In RESULT.Rows
|
||||
Private temp() As String = Regex.Split("_", RESULT.Tag)
|
||||
' Log(temp(2))
|
||||
If temp.Length > 1 Then
|
||||
Starter.skmt.ExecNonQuery($"update pedido_cliente set pc_enviado = 1 where pc_cliente = '${temp(2)}'"$)
|
||||
Log($"update pedido_cliente set pc_enviado = 1 where pc_cliente = '${temp(2)}'"$)
|
||||
Starter.skmt.ExecNonQuery($"update pedido set pe_enviado = 1 where pe_cliente = '${temp(2)}'"$)
|
||||
Log($"update pedido set pe_enviado = 1 where pe_cliente = '${temp(2)}'"$)
|
||||
End If
|
||||
Next
|
||||
End If
|
||||
|
||||
If RESULT.Tag = "version" Then 'query tag
|
||||
connecta.TextColor = Colors.White
|
||||
@@ -1862,9 +1919,12 @@ Sub JobDone(Job As HttpJob)
|
||||
End If
|
||||
|
||||
If RESULT.Tag = "ruta" Then 'query tag
|
||||
Log(654)
|
||||
Subs.logJobDoneResultados(RESULT)
|
||||
e_ruta.Enabled = True
|
||||
' Log(RESULT)
|
||||
' Log(RESULT.Columns.Get("VALIDO"))
|
||||
Log(RESULT)
|
||||
Log(RESULT.Columns.Get("VALIDO"))
|
||||
' Log(RESULT.Rows.Size)
|
||||
If RESULT.Columns.Get("VALIDO") = "0" Then ToastMessageShow("Ruta incorrecta", True)
|
||||
If RESULT.Rows.Size = 0 Then ToastMessageShow("No hay ruta para ese usuario", True)
|
||||
For Each records() As Object In RESULT.Rows
|
||||
@@ -2161,7 +2221,7 @@ Sub JobDone(Job As HttpJob)
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_RMI (CAT_ID, CAT_DESCRIPCION, CAT_MONTO) VALUES (?,?,?)", Array As Object (CAT_ID, CAT_DESCRIPCION, CAT_MONTO))
|
||||
Next
|
||||
End If
|
||||
|
||||
|
||||
If RESULT.Tag = "semanaCalLaboral" Then 'query tag
|
||||
' Subs.logJobDoneResultados(RESULT)
|
||||
For Each records() As Object In RESULT.Rows
|
||||
@@ -2171,6 +2231,17 @@ Sub JobDone(Job As HttpJob)
|
||||
Next
|
||||
End If
|
||||
|
||||
If RESULT.Tag = "selectNotificaciones" Then 'query tag
|
||||
Subs.logJobDoneResultados(RESULT)
|
||||
For Each records() As Object In RESULT.Rows
|
||||
Dim CN_CLIENTE As String = records(RESULT.COLUMNS.GET("HIST_NTC_IDCLIENTE"))
|
||||
Dim CN_NOTIFICACION As String = records(RESULT.COLUMNS.GET("HIST_NTC_NOTIFICACION"))
|
||||
Dim CN_CODIGO As String = records(RESULT.COLUMNS.GET("HIST_NTC_CODIGO"))
|
||||
Dim CN_ID As String = records(RESULT.COLUMNS.GET("HIST_NTC_ID"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_NOTIFICACIONES (CN_CODIGO, CN_ID, CN_CLIENTE, CN_NOTIFICACION) VALUES (?,?,?,?)", Array As Object (CN_CODIGO, CN_ID, CN_CLIENTE, CN_NOTIFICACION))
|
||||
Next
|
||||
End If
|
||||
|
||||
If RESULT.Tag = "trendSpending" Then 'query tag
|
||||
' Subs.logJobDoneResultados(RESULT)
|
||||
Starter.skmt.ExecNonQuery("delete from HIST_TREND_SPENDING_SEMANAL")
|
||||
@@ -2197,6 +2268,10 @@ Sub JobDone(Job As HttpJob)
|
||||
' Subs.logJobDoneResultados(RESULT)
|
||||
ts.Initialize(Me, "ts", Starter.skmt)
|
||||
End If
|
||||
|
||||
' If RESULT.Tag = "borraHistNotificaciones" Then enviaHistNotificaciones
|
||||
' If RESULT.Tag = "insertHistNotificaciones" Then revisaHistNotificaciones
|
||||
|
||||
End If
|
||||
End If
|
||||
|
||||
@@ -2205,22 +2280,85 @@ Sub JobDone(Job As HttpJob)
|
||||
End If
|
||||
Job.Release
|
||||
|
||||
' if carga = "SUBIR" then logcolor(reqManager.reqsList, Colors.blue)
|
||||
If reqManager.reqsList.IsInitialized Then
|
||||
LogColor(reqManager.reqsList, Colors.blue)
|
||||
LogColor(reqManager.reqsList.Size, Colors.blue)
|
||||
If CARGA = "SUBIR" Then actualizaProgressBar
|
||||
|
||||
'Si ya se procesaron TODAS las peticiones, entonces realizamos validaciones.
|
||||
If reqManager.reqsList.Size = 0 Then
|
||||
If CARGA = "SUBIR" Then revisaHistNotificaciones
|
||||
End If
|
||||
End If
|
||||
' LogColor(reqTotales, Colors.blue)
|
||||
|
||||
|
||||
' 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"
|
||||
copiaCatGPPromocion
|
||||
End If
|
||||
|
||||
Log(reqManager.requestTimes(Job.Tag))
|
||||
' Log(reqManager.requestTimes(Job.Tag))
|
||||
' Log($"tiempo Total "${Job.Tag}": ${((DateTime.Now - inicioContador)/1000)}"$)
|
||||
' reqManager.PrintTable(RESULT)2
|
||||
End Sub
|
||||
|
||||
'Envia el historial de notificaciones despues de haberlas borrado para que no se dupliquen.
|
||||
Sub enviaHistNotificaciones
|
||||
Private hn As Cursor = Starter.skmt.ExecQuery($"select * from hist_notificaciones"$)
|
||||
If hn.RowCount > 0 Then
|
||||
For i = 0 To hn.RowCount - 1
|
||||
hn.Position = i
|
||||
cmd.Initialize
|
||||
cmd.Name = "insertHistNotificaciones"
|
||||
cmd.Parameters = Array As Object( hn.GetString("HN_CODIGO"), hn.GetString("HN_ID"), hn.GetString("HN_FECHA"))
|
||||
reqManager.ExecuteCommand(cmd , "insertHistNotificaciones")
|
||||
Next
|
||||
hn.Close
|
||||
End If
|
||||
End Sub
|
||||
|
||||
' Revisa que en web haya el numero correcto de notificaciones en el historial
|
||||
Sub revisaHistNotificaciones
|
||||
LogColor("####################### REVISA NOTIS ########", Colors.red)
|
||||
Private cn As Cursor = Starter.skmt.ExecQuery("select count(HN_CODIGO) as cuantos, HN_CODIGO, HN_ID from HIST_NOTIFICACIONES")
|
||||
If cn.RowCount > 0 Then
|
||||
cn.Position = 0
|
||||
Private CuantasN As Int = cn.GetInt("cuantos")
|
||||
cmd.Name = "selectCuantasNotificaciones"
|
||||
cmd.Parameters = Array As Object(cn.GetString("HN_ID"), cn.GetString("HN_CODIGO"))
|
||||
reqManagerW.ExecuteQuery(Starter.DBReqServer, cmd, Me, "selectCuantasNotificaciones")
|
||||
Wait For selectCuantasNotificaciones_Completed (r As TResultado)
|
||||
If r.Success Then
|
||||
LogColor("####################### selectCuantasNotificaciones ########", Colors.red)
|
||||
Subs.logJobDoneResultados(r.resultado)
|
||||
For Each records() As Object In r.resultado.Rows
|
||||
Dim CuantasN As Int = records(r.resultado.Columns.Get("CUANTOS"))
|
||||
If cn.GetInt("cuantos") > CuantasN Then
|
||||
enviaHistNotificaciones
|
||||
End If
|
||||
Next
|
||||
Else
|
||||
Log(r.ErrorMessage)
|
||||
End If
|
||||
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Sub actualizaProgressBar
|
||||
Log($"Porcentaje = ${(((reqTotales-reqManager.reqsList.Size)/reqTotales)*100).As(Int)}"$)
|
||||
Private porcentajePB2 As Int = (((reqTotales-reqManager.reqsList.Size)/reqTotales)*100).As(Int)
|
||||
If PB2.IsInitialized And PB2.Visible Then
|
||||
Sleep(0)
|
||||
PB2.Progress = porcentajePB2
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Sub copiaCatGPPromocion
|
||||
Log(">>>>>>>>> COPIAMOS CAT_GP_PROMOCION a CAT_GUNAPROD2")
|
||||
Starter.skmt.ExecNonQuery("UPDATE CAT_GUNAPROD2 SET CAT_GP_PROMOCION = '0'")
|
||||
@@ -2325,6 +2463,8 @@ Sub connecta_Click
|
||||
|
||||
reqManager.trackInit
|
||||
|
||||
' EL EVENTO DE CONECTAR AHORA SE DISPARA DESPUES DE REVISAR SI LA RUTA ESTA LIGADA O NO AL DISPOSITIVO (verifyDevice).
|
||||
' REVISAR EL SUB "Linker_Response"
|
||||
linker.verifyDevice(Subs.traeAlmacen, e_ruta.text)
|
||||
|
||||
' Else
|
||||
@@ -2341,22 +2481,25 @@ Sub connecta2
|
||||
If vv.GetString("CAT_VA_VALOR") = 0 Then revisaVersion = False
|
||||
End If
|
||||
If revisaVersion Then ' Si VALIDA_VERSION no está en CERO ... revisamos.
|
||||
Log(123)
|
||||
Dim cmd As DBCommand
|
||||
cmd.Initialize
|
||||
cmd.Name = "select_version_KELL"
|
||||
cmd.Parameters = Array As Object(ALMACEN, e_ruta.text)
|
||||
reqManager.ExecuteQuery(cmd , 0, "version")
|
||||
Else ' Si está en CERO (Validacion deshabilitada), continuamos a connecta3.
|
||||
' Log(456)
|
||||
connecta3
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Sub connecta3
|
||||
' Log(789)
|
||||
Dim cmd As DBCommand
|
||||
cmd.Initialize
|
||||
cmd.Name = "select_ruta5_KELL"
|
||||
cmd.Parameters = Array As Object(ALMACEN, e_ruta.text, usuario)
|
||||
' Log($"******* Almacen: ${ALMACEN}, ${e_ruta.text}, ${usuario}"$)
|
||||
Log($"******* Almacen: ${ALMACEN}, ${e_ruta.text}, ${usuario}"$)
|
||||
reqManager.ExecuteQuery(cmd , 0, "ruta")
|
||||
e_ruta.Enabled = False
|
||||
If e_ruta.Text = "KMTSKLL1" Then e_ruta.Enabled = True
|
||||
@@ -2377,6 +2520,7 @@ Private Sub connecta_LongClick
|
||||
' Loop
|
||||
'' End If
|
||||
' Log("MANDAMOS BITACORA")
|
||||
If e_ruta.Text = "KMTKLL1" Then Subs.deshabilitaValidaciones
|
||||
End Sub
|
||||
|
||||
Sub BUSCA_Click
|
||||
@@ -2402,17 +2546,17 @@ Sub e_ruta_EnterPressed
|
||||
res = Msgbox2("Seguro que desea hacer el cierre? ... todos los datos se borraran","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore
|
||||
If res = DialogResponse.POSITIVE Then
|
||||
e_ruta.Text = ""
|
||||
Starter.skmt.ExecNonQuery("delete from pedido")
|
||||
Starter.skmt.ExecNonQuery("delete from pedido_cliente")
|
||||
Starter.skmt.ExecNonQuery("delete from pedido_sugerido")
|
||||
Starter.skmt.ExecNonQuery("delete from pedido")
|
||||
Starter.skmt.ExecNonQuery("delete from BITACORAGPS")
|
||||
Starter.skmt.ExecNonQuery("delete from noventa")
|
||||
Starter.skmt.ExecNonQuery("delete from clie_act")
|
||||
Starter.skmt.ExecNonQuery("delete from kmt_info")
|
||||
Starter.skmt.ExecNonQuery("delete from cat_gunaprod")
|
||||
Starter.skmt.ExecNonQuery("delete from cat_gunaprod2")
|
||||
Starter.skmt.ExecNonQuery("delete from cat_inventario")
|
||||
Starter.skmt.ExecNonQuery("delete from cat_rmi")
|
||||
Starter.skmt.ExecNonQuery("delete from cat_gunaprod2")
|
||||
Starter.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ")
|
||||
Starter.skmt.ExecNonQuery("delete from HIST_VENTAS")
|
||||
Starter.skmt.ExecNonQuery("delete from HIST_VERIFICACION")
|
||||
@@ -2680,6 +2824,7 @@ Sub B_OK_RES_Click
|
||||
End Sub
|
||||
|
||||
Sub Resumen_Click
|
||||
Log("###############")
|
||||
L_ABORDO.Text = "0"
|
||||
P_RESUMEN.Visible = True
|
||||
P_RESUMEN.BringToFront
|
||||
@@ -2715,10 +2860,14 @@ Sub Resumen_Click
|
||||
l_ruta.Text = f.GetString("CAT_CL_RUTA")
|
||||
f.Close
|
||||
End If
|
||||
b = Starter.skmt.ExecQuery("select count(*) as CUANTOS from noventa")
|
||||
b.Position = 0
|
||||
l_cuantosn.Text = b.GetString("CUANTOS")
|
||||
If Cuantos = 0 Then
|
||||
L_MONTOD.Text = 0
|
||||
l_cuantosc.Text = 0
|
||||
l_cuantosn.Text = 0
|
||||
' l_cuantosn.Text = 0
|
||||
' Log(">>>> Ponemos en CERO!!")
|
||||
drop = 0
|
||||
l_drop.Text = 0
|
||||
efectiva = 0
|
||||
@@ -2789,10 +2938,8 @@ Sub Resumen_Click
|
||||
End If
|
||||
DDD.Close
|
||||
c = Starter.skmt.ExecQuery("select sum(pc_monto) as MONTO_DIA, count(pc_cliente) AS CLIENTES_DIA from pedido_cliente where pc_cliente <> 0")
|
||||
b = Starter.skmt.ExecQuery("select count(*) as CUANTOS from noventa")
|
||||
'where pc_fecha = ?", Array As String(fecha)
|
||||
c.Position = 0
|
||||
b.Position = 0
|
||||
' L_MONTOD.Text = c.GetString("MONTO_DIA")
|
||||
L_MONTOD.Text = Subs.sumaPedido(Subs.traeCliente) 'Trae el monto sin el redondeo que a veces hace el SUM().
|
||||
|
||||
@@ -2805,7 +2952,8 @@ Sub Resumen_Click
|
||||
' Log(Subs.sumaPedido(Subs.traeCliente) & " - " & L_MONTOD.Text)
|
||||
' Subs.sumaPedido(Subs.traeCliente)
|
||||
l_cuantosc.Text = c.GetString("CLIENTES_DIA")
|
||||
l_cuantosn.Text = b.GetString("CUANTOS")
|
||||
|
||||
Log(">>>> Ponemos en " & b.GetString("CUANTOS"))
|
||||
l_porvisitar.Text = NumberFormat2((l_cuantosc.Text + l_cuantosn.Text), 1, 0, 0, False)
|
||||
' efectiva = L_CUANTOST.Text / e.GetString("POR_VISITAR")
|
||||
efectiva = l_porvisitar.Text / L_CUANTOST.text ' Efectividad = Visitados de hoy / Totales de hoy
|
||||
@@ -3135,7 +3283,7 @@ Sub SUBIR_INFO_PEDIDO
|
||||
If d.GetString("MONTO") <> Null And d.GetString("MONTO") <> "" Then monto1 = d.GetString("MONTO")
|
||||
Private abordo1 As String = L_ABORDO.Text
|
||||
If abordo1 = "" Then abordo1 = "0"
|
||||
Log($"${monto1}, ${abordo1}"$)
|
||||
' Log($"${monto1}, ${abordo1}"$)
|
||||
monto1 = monto1 - abordo1
|
||||
|
||||
reqManager.trackInit
|
||||
@@ -3145,6 +3293,8 @@ Sub SUBIR_INFO_PEDIDO
|
||||
cmd.Name ="insert_drop2_KELL"
|
||||
cmd.Parameters = Array As Object(usuario, l_ruta.Text, fecha, l_porvisitar.Text, l_drop.Text, l_efectiva.Text, l_cuantosc.Text, l_cuantosn.Text, monto1, "ENVIO", ALMACEN, abordo1)
|
||||
reqManager.ExecuteCommand(cmd , "inst_noventa_ins_drop_kell")
|
||||
' Log($"${usuario}, ${l_ruta.Text}, ${fecha}, ${l_porvisitar.Text}, ${l_drop.Text}, ${l_efectiva.Text}, ${l_cuantosc.Text}, ${l_cuantosn.Text}, ${monto1}, "ENVIO", ${ALMACEN}, ${abordo1}"$)
|
||||
Log("################## inst_noventa_ins_drop_kell")
|
||||
img2.Visible =True
|
||||
contador_env = contador_env + 1
|
||||
S_CP.Text = "Envio Cabecera"
|
||||
@@ -3165,7 +3315,7 @@ Sub SUBIR_INFO_PEDIDO
|
||||
cmd.Initialize
|
||||
Private eventob As String = h.GetString("eventob")
|
||||
cmd.Name = "mandaBitacora3"
|
||||
Log("BITACORA3")
|
||||
' Log("BITACORA3")
|
||||
Private clienteb As String = h.GetString("clienteb")
|
||||
Private finb As String = h.GetString("finb")
|
||||
Private nombreCliente As String =Subs. traeNombreCliente(h.GetString("clienteb"))
|
||||
@@ -3246,7 +3396,7 @@ Sub SUBIR_INFO_PEDIDO
|
||||
PB2.Progress = 1
|
||||
|
||||
' PEDIO_CLIENTE
|
||||
enviaPedidoCliente("Todos")
|
||||
' enviaPedidoCliente("Todos")
|
||||
|
||||
d = Starter.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDOSC FROM PEDIDO_CLIENTE ")
|
||||
d.Position=0
|
||||
@@ -3258,7 +3408,12 @@ Sub SUBIR_INFO_PEDIDO
|
||||
PORENVIAR = 0
|
||||
|
||||
' PEDIDO
|
||||
enviaPedido("Todos")
|
||||
' t3.Initialize("T3", 500) ' 1000 = 1 second
|
||||
' t3.Enabled = True
|
||||
' Wait For t3_tick
|
||||
' enviaPedido("Todos")
|
||||
|
||||
enviaPedidoBatch("Todos") ' ****** AQUI VA PEDIDO_CLIENTE Y PEDIDO JUNTOS *****
|
||||
|
||||
d = Starter.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDO FROM PEDIDO")
|
||||
d.Position=0
|
||||
@@ -3353,9 +3508,77 @@ Sub SUBIR_INFO_PEDIDO
|
||||
End If
|
||||
' ToastMessageShow("Se Actualizaran los datos. Este proceso podria tardar hasta un minuto, gracias "& l_ruta.text , True)
|
||||
S_CP.Text = "SUBIENDO"
|
||||
Log(reqManager.reqsList.Size)
|
||||
reqTotales = reqManager.reqsList.Size
|
||||
DateTime.TimeFormat = "HH:mm:ss"
|
||||
End Sub
|
||||
|
||||
Sub enviaPedidoBatch(filtro As String)
|
||||
' Crear una lista para almacenar TODAS las operaciones de UN pedido
|
||||
Dim BatchCommands As List
|
||||
BatchCommands.Initialize
|
||||
|
||||
' DE PEDIDO_CLIENTE
|
||||
Log($"enviaPedidoBatch(${filtro})"$)
|
||||
Private condicion As String = ""
|
||||
If filtro <> "Todos" Then condicion = "where PC_ENVIADO = 0"
|
||||
Private cx As Cursor = Starter.skmt.ExecQuery($"SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_ENVIADO FROM PEDIDO_CLIENTE ${condicion}"$)
|
||||
Log($"SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_ENVIADO FROM PEDIDO_CLIENTE ${condicion}"$)
|
||||
Log("pedido_cliente: " & cx.RowCount)
|
||||
|
||||
' DE PEDIDO
|
||||
Private condicion As String = ""
|
||||
If filtro <> "Todos" Then condicion = "where PE_ENVIADO = 0"
|
||||
c = Starter.skmt.ExecQuery2("SELECT COUNT(*) as CANTIDAD FROM HIST_ENVIOS WHERE HE_TIPO = ?",Array As String("ABORDO") )
|
||||
c.Position = 0
|
||||
If c.GetString("CANTIDAD") > 0 Then
|
||||
Log($"pe_cedis_0"$)
|
||||
Starter.skmt.ExecNonQuery2("update PEDIDO set PE_CEDIS = ? where PE_CLIENTE =? AND PE_FOLIO IS NULL ", Array As Object("RECARGA", "0"))
|
||||
End If
|
||||
Starter.skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = rowid where PE_FOLIO = 0 or PE_FOLIO = 1")
|
||||
|
||||
If cx.RowCount > 0 Then ' Si hay pedido entonces lo enviamos.
|
||||
For j = 0 To cx.RowCount - 1
|
||||
Log("===== ENVIAMOS PRODUCTOS DE PEDIDO =====")
|
||||
cx.Position = j
|
||||
Dim Arch As String = Subs.traeAlmacen & "_" & Subs.traeRuta & "_" & cx.GetString("PC_CLIENTE") & "_" & DateTime.Now
|
||||
' 1. Agregar comando del Encabezado (PEDIDO_CLIENTE)
|
||||
Dim cmdHeader As DBCommand
|
||||
cmdHeader.Initialize
|
||||
cmdHeader.Name = "insert_pedidos_KELL_arch"
|
||||
cmdHeader.Parameters = Array As Object(cx.GetString("PC_CLIENTE"),cx.GetString("PC_FECHA"),cx.GetString("PC_USER"),cx.GetString("PC_NOART"),cx.GetString("PC_MONTO"),cx.GetString("PC_LON"),cx.GetString("PC_LAT"),ALMACEN,l_ruta.text,cx.GetString("PC_COSTO_SIN"), Arch)
|
||||
BatchCommands.Add(cmdHeader)
|
||||
|
||||
' 2. Agregar comandos del Detalle (PEDIDO) dentro del bucle
|
||||
Private cPed As Cursor = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO, PE_ARCH FROM PEDIDO ${condicion} ${(IIf(condicion = "","where", "and"))} pe_cliente = '${cx.GetString("PC_CLIENTE")}' "$)
|
||||
' Log($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO, PE_ARCH FROM PEDIDO ${condicion} ${(IIf(condicion = "","where ", "and"))} pe_cliente = '${cx.GetString("PC_CLIENTE")}' "$)
|
||||
If cPed.RowCount > 0 Then
|
||||
For i = 0 To cPed.RowCount - 1
|
||||
Log("==== ENVIAMOS PRODS ====")
|
||||
cPed.Position = i
|
||||
Dim cmdDetail As DBCommand
|
||||
cmdDetail.Initialize
|
||||
If PERFIL = "V-ESPECIAL" Then
|
||||
Log("===== V-ESPECIAL =====")
|
||||
cmd.Name = "insert_pedido_esp_KELL"
|
||||
cmd.Parameters = Array As Object(cPed.GetString("PE_CEDIS"),ALMACEN,cPed.GetString("PE_COSTO_TOT"),cPed.GetString("PE_COSTOU"),cPed.GetString("PE_CANT"),cPed.GetString("PE_PRONOMBRE"),cPed.GetString("PE_PROID"),cPed.GetString("PE_CLIENTE"),cPed.GetString("PE_FECHA"),cPed.GetString("PE_USUARIO"),cPed.GetString("PE_RUTA"),cPed.GetString("PE_COSTO_SIN"),cPed.GetString("PE_DESC"),cPed.GetString("PE_FOLIO"),cPed.GetString("PE_TIPO"),NUMERO_PEDIDO)
|
||||
Else
|
||||
cmdDetail.Name = "insert_pedido_KELL_arch"
|
||||
cmdDetail.Parameters = Array As Object (cPed.GetString("PE_CEDIS"),ALMACEN,cPed.GetString("PE_COSTO_TOT"),cPed.GetString("PE_COSTOU"),cPed.GetString("PE_CANT"),cPed.GetString("PE_PRONOMBRE"),cPed.GetString("PE_PROID"),cPed.GetString("PE_CLIENTE"),cPed.GetString("PE_FECHA"),cPed.GetString("PE_USUARIO"),cPed.GetString("PE_RUTA"), cPed.GetString("PE_COSTO_SIN"),cPed.GetString("PE_DESC"),cPed.GetString("PE_FOLIO"), cPed.GetString("PE_TIPO"), Arch)
|
||||
End If
|
||||
BatchCommands.Add(cmdDetail)
|
||||
Next
|
||||
End If
|
||||
Next
|
||||
|
||||
' 3. Enviar TODO junto en una sola petición HTTP
|
||||
' Si esto falla, no se guarda nada en Oracle y el pedido sigue pendiente en local.
|
||||
reqManager.ExecuteBatch(BatchCommands, "pedido_completo_" & cx.GetString("PC_CLIENTE"))
|
||||
End If
|
||||
c.Close
|
||||
cx.Close
|
||||
End Sub
|
||||
|
||||
'Envio de la tabla pedido
|
||||
Sub enviaPedido(filtro As String)
|
||||
Log($"enviaPedido(${filtro})"$)
|
||||
@@ -3368,6 +3591,11 @@ Sub enviaPedido(filtro As String)
|
||||
Starter.skmt.ExecNonQuery2("update PEDIDO set PE_CEDIS = ? where PE_CLIENTE =? AND PE_FOLIO IS NULL ", Array As Object("RECARGA", "0"))
|
||||
End If
|
||||
Starter.skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = rowid where PE_FOLIO = 0 or PE_FOLIO = 1")
|
||||
|
||||
Log("####################################################")
|
||||
Log(PERFIL)
|
||||
Log("####################################################")
|
||||
|
||||
If PERFIL = "V-ESPECIAL" Then
|
||||
Log($"pe_cedis_1"$)
|
||||
c = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion} ORDER BY PE_CLIENTE"$)
|
||||
@@ -3388,17 +3616,15 @@ Sub enviaPedido(filtro As String)
|
||||
Else
|
||||
' Log($"pe_cedis_3"$)
|
||||
Private cPed As Cursor = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion}"$)
|
||||
Log($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion}"$)
|
||||
TIEMPO = 0
|
||||
t3.Initialize("T3", 500) ' 1000 = 1 second
|
||||
t3.Enabled = True
|
||||
Wait For t3_tick
|
||||
' Log($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion}"$)
|
||||
' TIEMPO = 0
|
||||
S_CP.Text = "Envio de Pedidos"
|
||||
PB2.Progress = 1
|
||||
Log("pedido:" & cPed.RowCount)
|
||||
If cPed.RowCount>0 Then
|
||||
If cPed.RowCount > 0 Then
|
||||
For i = 0 To cPed.RowCount - 1
|
||||
cPed.Position = i
|
||||
' LogColor($"##### ${i} #### "$, Colors.magenta)
|
||||
Dim cmd As DBCommand
|
||||
cmd.Initialize
|
||||
cmd.Name = "insert_pedido_KELL"
|
||||
@@ -3406,26 +3632,31 @@ Sub enviaPedido(filtro As String)
|
||||
cmd.Parameters = Array As Object(cPed.GetString("PE_CEDIS"),ALMACEN,cPed.GetString("PE_COSTO_TOT"),cPed.GetString("PE_COSTOU"),cPed.GetString("PE_CANT"),cPed.GetString("PE_PRONOMBRE"),cPed.GetString("PE_PROID"),cPed.GetString("PE_CLIENTE"),cPed.GetString("PE_FECHA"),cPed.GetString("PE_USUARIO"),cPed.GetString("PE_RUTA"), cPed.GetString("PE_COSTO_SIN"),cPed.GetString("PE_DESC"),cPed.GetString("PE_FOLIO"), cPed.GetString("PE_TIPO"))
|
||||
reqManager.ExecuteCommand(cmd , $"ins_pedido_${cPed.GetString("PE_CLIENTE")}"$)
|
||||
contador_env = contador_env + 1
|
||||
TIEMPO = TIEMPO + 1
|
||||
PB2.Progress = PB2.Progress + 1
|
||||
If TIEMPO > 20 Then
|
||||
' Msgbox("M","A") 'ignore
|
||||
If L_P_2.Text = "Envio de Pedidos" Then
|
||||
L_P_2.Text = "Envio de Pedidos --"
|
||||
else if L_P_2.Text = "Envio de Pedidos --" Then
|
||||
L_P_2.Text = "Envio de Pedidos \"
|
||||
else if L_P_2.Text = "Envio de Pedidos \" Then
|
||||
L_P_2.Text = "Envio de Pedidos |"
|
||||
else if L_P_2.Text = "Envio de Pedidos |" Then
|
||||
L_P_2.Text = "Envio de Pedidos /"
|
||||
else if L_P_2.Text = "Envio de Pedidos /" Then
|
||||
L_P_2.Text = "Envio de Pedidos --"
|
||||
End If
|
||||
t3.Initialize("T3", 2000) ' 1000 = 1 second
|
||||
t3.Enabled = True
|
||||
Wait For t3_tick
|
||||
TIEMPO = 0
|
||||
End If
|
||||
' TIEMPO = TIEMPO + 1
|
||||
' PB2.Progress = PB2.Progress + 1
|
||||
' If i Mod 10 = 1 Then
|
||||
' ' Msgbox("M","A") 'ignore
|
||||
' If L_P_2.Text = "Envio de Pedidos" Then
|
||||
' L_P_2.Text = "Envio de Pedidos --"
|
||||
' Log(1)
|
||||
' else if L_P_2.Text = "Envio de Pedidos --" Then
|
||||
' Log(2)
|
||||
' L_P_2.Text = "Envio de Pedidos \"
|
||||
' else if L_P_2.Text = "Envio de Pedidos \" Then
|
||||
' Log(3)
|
||||
' L_P_2.Text = "Envio de Pedidos |"
|
||||
' else if L_P_2.Text = "Envio de Pedidos |" Then
|
||||
' Log(4)
|
||||
' L_P_2.Text = "Envio de Pedidos /"
|
||||
' else if L_P_2.Text = "Envio de Pedidos /" Then
|
||||
' Log(5)
|
||||
' L_P_2.Text = "Envio de Pedidos --"
|
||||
' End If
|
||||
'' t3.Initialize("T3", 2000) ' 1000 = 1 second
|
||||
'' t3.Enabled = True
|
||||
'' Wait For t3_tick
|
||||
' TIEMPO = 0
|
||||
' End If
|
||||
Next
|
||||
cPed.Close
|
||||
End If
|
||||
@@ -3802,9 +4033,11 @@ End Sub
|
||||
Sub borraClientesNuevosSinVenta 'ignore
|
||||
Private x As Cursor = Starter.skmt.ExecQuery("Select CAT_CL_CODIGO from kmt_info where CAT_CL_CODIGO like 'N%' and CAT_CL_CODIGO not in (Select pe_cliente from pedido)")
|
||||
If x.RowCount > 0 Then
|
||||
x.Position = 0
|
||||
' x.Position = 0
|
||||
For i = 0 To x.RowCount - 1
|
||||
x.Position = i
|
||||
Starter.skmt.ExecNonQuery($"delete from kmt_info where CAT_CL_CODIGO = '${x.GetString("CAT_CL_CODIGO")}'"$)
|
||||
' Log($"delete from kmt_info where CAT_CL_CODIGO = '${x.GetString("CAT_CL_CODIGO")}'"$)
|
||||
LogColor($"Cliente nuevo "${x.GetString("CAT_CL_CODIGO")}" SIN VENTA -> BORRADO!!"$, Colors.red)
|
||||
Next
|
||||
End If
|
||||
@@ -3884,10 +4117,17 @@ Private Sub b_noVisita_Click
|
||||
Do While mnv.NextRow
|
||||
Subs.bitacora(Subs.fechanormal(DateTime.Now), usuario, alm, rut, "NO VISITADO", mnv.GetString("CAT_CL_CODIGO"), fech, fech, Starter.lat_gps, Starter.lon_gps, 2, "", r_razonNoVisita)
|
||||
Log($"NO VISITADO - ${mnv.GetString("CAT_CL_CODIGO")}"$)
|
||||
DateTime.DateFormat = "yyyy-MM-dd HH:mm:ss"
|
||||
' Actualizamos HIST_NOTIFICACIONES con la hora y el motivo.
|
||||
cmd.Initialize
|
||||
cmd.Name = "updateHistNotificacionesMotivo"
|
||||
|
||||
|
||||
' ("", DateTime.Date(DateTime.Now), Subs.traeRuta, usuario, Subs.traeAlmacen, clienteId)
|
||||
cmd.Parameters = Array As Object(r_razonNoVisita, DateTime.Date(DateTime.Now), Subs.traeRuta, usuario, ALMACEN, mnv.GetString("CAT_CL_CODIGO"))
|
||||
reqManager.ExecuteCommand(cmd , "insertHistNotificaciones")
|
||||
Loop
|
||||
|
||||
|
||||
|
||||
|
||||
' b_motivoNoVisita.Color = Colors.RGB(247, 94, 0)
|
||||
Private cd1 As ColorDrawable
|
||||
cd1.Initialize(Colors.RGB(247, 94, 0), 5dip)
|
||||
|
||||
@@ -13,10 +13,7 @@ Sub Class_Globals
|
||||
Dim q_buscar As String
|
||||
Dim forzarBusqueda As Boolean = False
|
||||
Dim skmt As SQL
|
||||
Dim c As Cursor
|
||||
Dim c2 As Cursor
|
||||
Dim C3 As Cursor
|
||||
Dim s As Cursor
|
||||
Dim ab, c, c2, c3, c_prods, pPromo, p1, prod, pPromos, s, s1 As Cursor
|
||||
Dim lv_catalogos As ListView
|
||||
Dim lv_promos As ListView
|
||||
Dim entro As String
|
||||
@@ -29,7 +26,6 @@ Sub Class_Globals
|
||||
Dim ya_entro As String
|
||||
Dim TIENE_PROMOS As String
|
||||
Dim RES As String
|
||||
Dim S1 As Cursor
|
||||
Dim bmp As Bitmap
|
||||
Dim ciclo As String
|
||||
Private b_qr As Button
|
||||
@@ -243,10 +239,24 @@ Sub B4XPage_Appear
|
||||
' Log(Starter.tipov)
|
||||
c = Starter.skmt.ExecQuery("select count(*) as hayPromos from promos_comp")
|
||||
c.Position = 0
|
||||
|
||||
Private mx As Map = ts.traeInfoTrendSpending
|
||||
TS_RMI = Regex.Split(",", mx.Get("RMI"))
|
||||
TS_DESCUENTOS = Regex.Split(",", mx.Get("DESCUENTOS"))
|
||||
TS_BONIFICACIONES = Regex.Split(",", mx.Get("BONIFICACIONES"))
|
||||
Dim bonificacionesDisp As String = TS_BONIFICACIONES(0)
|
||||
Log(">>>>>>>>>>>>> TRADESPENDING: " & mx)
|
||||
Log("RMI: " & TS_RMI(0) & "|" & TS_RMI(1))
|
||||
Log("DESCUENTOS: " & TS_DESCUENTOS(0) & "|" & TS_DESCUENTOS(1))
|
||||
Log("BONIFICACIONES: " & TS_BONIFICACIONES(0) & "|" & TS_BONIFICACIONES(1))
|
||||
|
||||
Log("revisaImpresa: " & Subs.revisaImpresa)
|
||||
If c.GetInt("hayPromos") > 0 And Subs.traeCliente <> 0 And Subs.revisaImpresa = False Then
|
||||
Log("bonificacionesDisp: " & bonificacionesDisp)
|
||||
If bonificacionesDisp = 0 Then ToastMessageShow("¡No hay presupuesto para promociones!", False)
|
||||
If bonificacionesDisp > 0 And c.GetInt("hayPromos") > 0 And Subs.traeCliente <> 0 And Subs.revisaImpresa = False Then
|
||||
lv_catalogos.AddSingleLine("PROMOS")
|
||||
End If
|
||||
c.Close
|
||||
Sleep(100)
|
||||
' l_total.Visible = False
|
||||
' l_totProds.Visible = False
|
||||
@@ -289,14 +299,6 @@ Sub B4XPage_Appear
|
||||
End If
|
||||
If B4XPages.MainPage.cliente.la_cuenta.text = "0" Then b_rmi.Visible = False
|
||||
' Log(Starter.tipov)
|
||||
Private mx As Map = ts.traeInfoTrendSpending
|
||||
TS_RMI = Regex.Split(",", mx.Get("RMI"))
|
||||
TS_DESCUENTOS = Regex.Split(",", mx.Get("DESCUENTOS"))
|
||||
TS_BONIFICACIONES = Regex.Split(",", mx.Get("BONIFICACIONES"))
|
||||
Log(">>>>>>>>>>>>> TRADESPENDING: " & mx)
|
||||
Log("RMI: " & TS_RMI(0) & "|" & TS_RMI(1))
|
||||
Log("DESCUENTOS: " & TS_DESCUENTOS(0) & "|" & TS_DESCUENTOS(1))
|
||||
Log("BONIFICACIONES: " & TS_BONIFICACIONES(0) & "|" & TS_BONIFICACIONES(1))
|
||||
End Sub
|
||||
|
||||
Sub PCLV_AddProds
|
||||
@@ -345,7 +347,7 @@ Sub lv_catalogos_ItemClick (Position As Int, Value As Object)
|
||||
|
||||
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($"select CAT_PA_TIPO_PROMONTO, CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_TIPOPROD2, CAT_GP_PRECIO, CAT_GP_ALMACEN, 1 as 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
|
||||
@@ -495,6 +497,11 @@ Sub llenaCatalogo(subtipo1 As String)
|
||||
End Sub
|
||||
|
||||
Private Sub B4XPage_CloseRequest As ResumableSub
|
||||
If c.IsInitialized Then c.Close
|
||||
If c2.IsInitialized Then c2.Close
|
||||
If c3.IsInitialized Then c3.Close
|
||||
If s.IsInitialized Then s.Close
|
||||
If s1.IsInitialized Then s1.Close
|
||||
' BACK key pressed
|
||||
' Return True To close, False To cancel
|
||||
If p_rmi.Visible Then p_rmi.Visible = False
|
||||
@@ -661,6 +668,7 @@ Sub b_prodMenos_Click
|
||||
invActualizado = i.GetString("CAT_GP_ALMACEN")
|
||||
End If
|
||||
If Starter.tipov <> "ABORDO" Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}"$).Popall
|
||||
i.Close
|
||||
End If
|
||||
If kh.totalPedido < 1 Then laCant.Text = "0"
|
||||
' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$)
|
||||
@@ -717,11 +725,12 @@ Sub b_prodMas_Click
|
||||
' Subs.modTrendSpending("resta", "bonificaciones", laBonificacion)
|
||||
' Log(Subs.traeAcumuladoHoyTS("bonificaciones"))
|
||||
' End If
|
||||
' Log("BONIFCACIONES RESTANTES: " & (TS_BONIFICACIONES(0) - TS_BONIFICACIONES(1) - Subs.traeAcumuladoHoyTS("bonificaciones")))
|
||||
Log("BONIFCACIONES RESTANTES: " & (TS_BONIFICACIONES(0) - TS_BONIFICACIONES(1) - ts.traeAcumuladoHoyTS("bonificaciones")))
|
||||
Private tsMonto As String = 0
|
||||
Private tsMaximas As Int = 0
|
||||
If lfila.Text = "PRODUCTOS" Then
|
||||
Log(">>>>>>>>>> PRODUCTOS <<<<<<<<<<<<<<")
|
||||
Log($"${TS_DESCUENTOS(0)} - ${TS_DESCUENTOS(1)} - ${ts.traeAcumuladoHoyTS("descuentos")}"$)
|
||||
Private tsRestantes As String = (TS_DESCUENTOS(0) - TS_DESCUENTOS(1) - ts.traeAcumuladoHoyTS("descuentos")) ' Traemos monto restante de Trend Spending para bonificaciones.
|
||||
tsMonto = NumberFormat2(ts.traePrecio(id)*(ts.traeDescXSku(clienteId, id)/100), 1, 2, 2, False) ' Traemos el monto (descuento total) del producto actual.
|
||||
tsMaximas = ((laCant.text * tsMonto) + tsRestantes) / tsMonto ' Traemos la cantidad maxima de descuentos por presupuesto de Trend Spending.
|
||||
@@ -844,6 +853,7 @@ Sub b_prodMas_Click
|
||||
invActualizado = i.GetString("CAT_GP_ALMACEN")
|
||||
End If
|
||||
If Starter.tipov <> "ABORDO" Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}"$).Popall
|
||||
i.Close
|
||||
End If
|
||||
Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$)
|
||||
Sleep(300)
|
||||
@@ -1116,6 +1126,7 @@ Sub b_terminar1_Click
|
||||
If Subs.revisaImpresa Then b_rechazar.Visible = False Else b_rechazar.Visible = True
|
||||
p_vistaPrevia.Visible=True
|
||||
p_vistaPreviaTrans.Visible=True
|
||||
Subs.RecalcularInventario
|
||||
End Sub
|
||||
|
||||
Private Sub b_continuar_Click
|
||||
@@ -1144,6 +1155,7 @@ Private Sub b_continuar_Click
|
||||
montoPedidoActual = m.Get("monto")
|
||||
' LlenaProdsLL(Null)
|
||||
' BUSCA.Text = " "
|
||||
Subs.RecalcularInventario
|
||||
End Sub
|
||||
|
||||
Private Sub l_info_Click
|
||||
@@ -1160,6 +1172,7 @@ Private Sub lv_promos_ItemLongClick (Position As Int, Value As Object)
|
||||
End If
|
||||
l_info.Text = $"ID: ${id}${CRLF}${Value}"$
|
||||
l_info.Visible = True
|
||||
c.Close
|
||||
End Sub
|
||||
|
||||
Private Sub b_buscar_Click
|
||||
@@ -1240,6 +1253,7 @@ Private Sub b_aceptar_Click
|
||||
' LogColor(p.GetString("total"), Colors.red)
|
||||
If p.GetString("total") < 1 Then LlenaProdsLL(Null, Null)
|
||||
p_vistaPreviaTrans.Visible=False
|
||||
p.Close
|
||||
Subs.iniciaActividad("Cliente")
|
||||
' B4XPages.ShowPage("Cliente")
|
||||
End Sub
|
||||
@@ -1337,6 +1351,7 @@ Sub l_prodX_Click
|
||||
Log(Sender.as(Label).tag)
|
||||
l_info.BringToFront
|
||||
l_info.Visible = True
|
||||
i.Close
|
||||
' Dim index As Int = clv_prods_ll.GetItemFromView(Sender)
|
||||
' Private p0 As B4XView = clv_prods_ll.GetPanel(index)
|
||||
' Private p As B4XView = p0.GetView(0)
|
||||
@@ -1409,6 +1424,7 @@ Private Sub clv_prods_ll_VisibleRangeChanged (FirstIndex As Int, LastIndex As In
|
||||
prioridad = p1.GetInt("CAT_GP_TIPOPROD2")
|
||||
' Log(prioridad)
|
||||
End If
|
||||
p1.Close
|
||||
' Log("NIVEL: " & lfila.Text)
|
||||
If lfila.Text = "RMI" Then ' Si es RMI, la cantidad solo se puede cambiar con los botones.
|
||||
et_pCant.Enabled = False
|
||||
@@ -1441,8 +1457,8 @@ Private Sub clv_prods_ll_VisibleRangeChanged (FirstIndex As Int, LastIndex As In
|
||||
If clv_prods_ll.GetValue(i).As(Map).Get("almacen").As(Int) = Subs.traeExistenciasPorId(clv_prods_ll.GetValue(i).As(Map).Get("id")) Then
|
||||
' Log("|"&clv_prods_ll.GetValue(i).As(Map).Get("almacen") & "|" & Subs.traeExistenciasPorId(clv_prods_ll.GetValue(i).As(Map).Get("id"))&"|")
|
||||
Else
|
||||
LogColor("|"&clv_prods_ll.GetValue(i).As(Map).Get("almacen") & "|" & Subs.traeExistenciasPorId(clv_prods_ll.GetValue(i).As(Map).Get("id"))&"|"&clv_prods_ll.GetValue(i).As(Map).Get("prod")&"|", Colors.red)
|
||||
LogColor("#### ERROR DE INVENTARIO ####" , Colors.red)
|
||||
' LogColor("|"&clv_prods_ll.GetValue(i).As(Map).Get("almacen") & "|" & Subs.traeExistenciasPorId(clv_prods_ll.GetValue(i).As(Map).Get("id"))&"|"&clv_prods_ll.GetValue(i).As(Map).Get("prod")&"|", Colors.red)
|
||||
' LogColor("#### ERROR DE INVENTARIO ####" , Colors.red)
|
||||
End If
|
||||
'#######################################################
|
||||
|
||||
@@ -1557,6 +1573,7 @@ Sub LlenaProdsLL(p As ResultSet, extra As String)
|
||||
invAbordo = ab.GetString("CAT_GP_ALMACEN")
|
||||
' Log(invAbordo)
|
||||
End If
|
||||
ab.Close
|
||||
End If
|
||||
Private precio As String = NumberFormat2(p.GetDouble("CAT_GP_PRECIO"),1,2,2,False)
|
||||
'Descuentos de condiciones comerciales por TIPO
|
||||
|
||||
@@ -4,6 +4,74 @@ ModulesStructureVersion=1
|
||||
Type=Class
|
||||
Version=11.5
|
||||
@EndOfDesignText@
|
||||
Sub Descripcion
|
||||
' *** FLUJO DE LAS PROMOCIONES ***
|
||||
' Aquí está el desglose del flujo actual de decisión para mostrar una promoción, calculando los máximos y aplicando las restricciones de Segmentación, Inventario y Trade Spending (Bonificaciones).
|
||||
'
|
||||
' ### Flujo Maestro: ¿Se muestra la promo y cuántas alcanzan?
|
||||
'
|
||||
' El proceso se ejecuta secuencialmente. Si en algún punto el resultado es 0, la promoción no se muestra o se marca como agotada.
|
||||
'
|
||||
' #### 1. Cálculo de Límites Administrativos (La Base)
|
||||
'
|
||||
' Lo primero que hace el sistema es determinar el "Techo Teórico" de cuántas promociones se pueden vender Sin mirar inventario ni dinero aún.
|
||||
' * **Paso A: Datos Generales:** Se obtienen los límites configurados en `PROMOS_COMP`: Máximo por Cliente, Máximo Recurrente y Máximo Global.
|
||||
' * **Paso B: Lógica de Promociones Segmentadas:** Aquí entra el filtro crítico.
|
||||
' * El sistema consulta `HIST_CLIENTE_CANT_PROMOS`.
|
||||
' * **Si la promo es segmentada:**
|
||||
' * Si el cliente **NO** está en la lista: Se establecen todos los máximos a 0. La promo se oculta.
|
||||
' * Si el cliente **SÍ** está en la lista: Se ignoran los límites generales y se usan los específicos asignados al cliente.
|
||||
' * **Fórmula:** `MaxDisponible = Asignado - Vendido`.
|
||||
' * **Paso C: Cálculo del Mínimo:** Se comparan todos los límites (Global, Recurrente, Cliente/Segmentado) y se toma el **valor más pequeño** como el `MaxPromos` inicial.
|
||||
'
|
||||
' #### 2. Restricción por Inventario de Productos FIJOS
|
||||
'
|
||||
' Una vez que sabemos cuántas *podríamos* vender administrativamente, revisamos si tenemos los productos obligatorios (Fijos).
|
||||
' * El sistema itera sobre cada producto fijo de la promoción.
|
||||
' * **Cálculo:** `InventarioDisponible / PiezasRequeridasPorPromo`.
|
||||
' * **Resultado:** El `MaxPromos` se actualiza al **mínimo** entre el valor del Paso 1 y lo que permite el inventario de cada producto fijo.
|
||||
' * *Nota Crítica:* Si este valor es 0, la promo se marca como "KO" (No disponible).
|
||||
'
|
||||
' #### 3. El Cruce de Inventarios (La Resta)
|
||||
'
|
||||
' Este es el punto que mencionaste y es vital en el flujo actual. Antes de evaluar si alcanzan los productos variables, el código **simula la venta de los productos fijos**.
|
||||
' * Se toma el mapa de inventario actual.
|
||||
' * Se ejecuta `restaFijosDePromo`.
|
||||
' * **Acción:** Para cada producto fijo, se resta: `(MaxPromosCalculado * PiezasRequeridas)`.
|
||||
' * **Resultado:** Se genera un *Nuevo Mapa de Inventario Virtual* que contiene solo lo que sobró después de apartar lo necesario para la parte fija. Este mapa es el que se pasa a la siguiente etapa.
|
||||
'
|
||||
' #### 4. Cálculo de Variables y Restricción de Trade Spending (TS)
|
||||
'
|
||||
' Aquí es donde la lógica se vuelve compleja y utiliza los bucles iterativos para validar tanto existencia física como presupuesto financiero (Bonificaciones).
|
||||
' Se ejecuta `revisaMaxPromosProdsVariablesPorInventario`, que usa el *Inventario Virtual* del paso anterior.
|
||||
' **El Bucle de Validación (Paso a Paso):**
|
||||
' El código prueba vender 1 promo, luego 2, hasta llegar al `MaxPromos` calculado en el paso 2.
|
||||
' 1. **Iteración `x` (Número de promos a probar):**
|
||||
' 2. **Consumo de Fijos en Variables:** Si un producto variable *también* es fijo, el código descuenta (otra vez) el inventario necesario para la parte fija dentro de este bucle para asegurar integridad.
|
||||
' 3. **Suma de Inventario Variable:** Se suman las existencias de todos los productos que califican como variables para esta promo.
|
||||
' 4. **Validación de Trade Spending (El Presupuesto):**
|
||||
' * Dentro del bucle, para cada producto variable disponible, se llama a `ts.traeBonificacionesMaximas`.
|
||||
' * **La Lógica de ts:** El sistema verifica si el producto actual califica como bonificación (precio especial/cero).
|
||||
' * **Si califica:** Verifica si hay saldo en el presupuesto de "BONIFICACIONES". Si no hay saldo, este producto variable **no se cuenta** como disponible para armar la promo en esta iteración.
|
||||
' * **Si NO califica:** (Es un producto de precio normal dentro de la promo), no consume presupuesto y se cuenta libremente según su inventario físico.
|
||||
' 5. **Prueba de Fuego:**
|
||||
' * Se compara: `InventarioVariableValidado (Físico + Financiero)` vs `(PiezasVariablesRequeridas * x)`.
|
||||
' * Si alcanza, el ciclo continúa para probar `x + 1`.
|
||||
' * Si no alcanza, el ciclo se rompe y se define el máximo posible.
|
||||
'
|
||||
' ### Resumen del Factor TS en el Flujo
|
||||
'
|
||||
' El presupuesto de ts no bloquea la promo "per se", sino que **filtra qué productos variables están disponibles**.
|
||||
' * Si la promo pide 3 variables.
|
||||
' * Tienes 5 opciones en inventario físico.
|
||||
' * 2 opciones son "Bonificación" (consumen presupuesto) y 3 son venta normal.
|
||||
' * **Escenario Sin Presupuesto:** Al iterar, `ts.traeBonificacionesMaximas` devolverá 0 para los 2 productos de bonificación. El sistema solo verá 3 productos disponibles (los normales).
|
||||
' * **Resultado:** Como la promo pide 3 y el sistema "ve" 3 disponibles, la promo **SÍ SE MUESTRA**.
|
||||
' * **Bloqueo:** Solo se bloquearía si la promo pidiera 4 variables, ya que Sin presupuesto ts solo "vemos" 3 productos disponibles, insuficientes para armar el paquete.
|
||||
'
|
||||
' ### Este flujo garantiza que la promo se muestre siempre que sea *físicamente* posible armarla, restringiendo la parte financiera solo a los ítems que realmente cuestan dinero al presupuesto de bonificaciones.
|
||||
End Sub
|
||||
|
||||
Sub Class_Globals
|
||||
Private Root As B4XView 'ignore
|
||||
Private xui As XUI
|
||||
|
||||
@@ -63,6 +63,7 @@ Sub Class_Globals
|
||||
' - KeyValueStore2
|
||||
' - DBRequestManager
|
||||
' - XUI
|
||||
Dim dlDB As SQL
|
||||
End Sub
|
||||
|
||||
' Inicializa la clase DeviceLinker.
|
||||
@@ -77,6 +78,9 @@ Public Sub Initialize (PageObject As Object, NameOfEvent As String, AppLogger As
|
||||
' Inicializamos el KeyValueStore para almacenamiento seguro del GUID
|
||||
kvs.Initialize(File.DirInternal, "DeviceKeyStore.b4xkey")
|
||||
If logger Then Log("B4XKeyStore 'DeviceKeyStore' inicializado.")
|
||||
|
||||
dlDB.Initialize(File.DirInternal, "deviceLink.db", True)
|
||||
dlDB.ExecNonQuery("CREATE TABLE IF NOT EXISTS Registro (GUID_KEY_ALIAS TEXT)") ' Creamos la tabla si no existe
|
||||
|
||||
' Inicializamos el DBRequestManager para las comunicaciones con el servidor.
|
||||
' 'Me' indica que el evento JobDone de esta clase se encargará de las respuestas de reqManager.
|
||||
@@ -145,17 +149,34 @@ Sub linkDevice(Almacen_ As String, Ruta_ As String)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'244500
|
||||
|
||||
' Obtiene el GUID único del dispositivo desde B4XKeyStore.
|
||||
' Si no existe, lo genera y lo guarda utilizando Subs.GUID.
|
||||
Private Sub GetDeviceGUID As String
|
||||
If kvs.ContainsKey(GUID_KEY_ALIAS) = False Then
|
||||
' If kvs.ContainsKey(GUID_KEY_ALIAS) = False Then
|
||||
' ' Corrección: Usamos la función GUID ya existente en el módulo Subs [1].
|
||||
' Dim NewGUID As String = generaGUID
|
||||
' kvs.Put(GUID_KEY_ALIAS, NewGUID) ' Lo guardamos de forma segura en el KeyStore.
|
||||
' If logger Then LogColor($"Nuevo GUID generado y guardado: ${NewGUID}"$, Colors.Blue)
|
||||
' Return NewGUID
|
||||
' Else
|
||||
' Dim ExistingGUID As String = kvs.Get(GUID_KEY_ALIAS) ' Recuperamos el GUID existente.
|
||||
' If logger Then LogColor($"GUID existente cargado: ${ExistingGUID}"$, Colors.Blue)
|
||||
' Return ExistingGUID
|
||||
' End If
|
||||
|
||||
If deviceLinked = False Then
|
||||
' Corrección: Usamos la función GUID ya existente en el módulo Subs [1].
|
||||
Dim NewGUID As String = generaGUID
|
||||
kvs.Put(GUID_KEY_ALIAS, NewGUID) ' Lo guardamos de forma segura en el KeyStore.
|
||||
dlDB.ExecNonQuery($"insert into registro ('GUID_KEY_ALIAS') values ('${NewGUID}')"$) ' Guardamos nuevo registro
|
||||
If logger Then LogColor($"Nuevo GUID generado y guardado: ${NewGUID}"$, Colors.Blue)
|
||||
Return NewGUID
|
||||
Else
|
||||
Dim ExistingGUID As String = kvs.Get(GUID_KEY_ALIAS) ' Recuperamos el GUID existente.
|
||||
Dim ExistingGUID As String
|
||||
Private e As Cursor = dlDB.ExecQuery("select GUID_KEY_ALIAS from registro")
|
||||
e.Position = 0
|
||||
ExistingGUID = e.GetString("GUID_KEY_ALIAS")
|
||||
If logger Then LogColor($"GUID existente cargado: ${ExistingGUID}"$, Colors.Blue)
|
||||
Return ExistingGUID
|
||||
End If
|
||||
@@ -207,6 +228,7 @@ Public Sub JobDone(Job As HttpJob) ' El nombre del sub debe ser 'JobDone' o el q
|
||||
For Each records() As Object In result.Rows
|
||||
Dim Status As String = "" 'records(result.Columns.Get("ESTATUS"))
|
||||
Dim CAT_RU_IDTELEFONO As String = records(result.Columns.Get("CAT_RU_IDTELEFONO"))
|
||||
deviceId = GetDeviceGUID
|
||||
Log($"|${deviceId}|${CAT_RU_IDTELEFONO}|"$)
|
||||
' If deviceId <> CAT_RU_IDTELEFONO Then Status = "YA_REGISTRADO" ' Ya existe OTRO registro.
|
||||
If CAT_RU_IDTELEFONO = 0 Or CAT_RU_IDTELEFONO.Length < 5 Then
|
||||
@@ -275,4 +297,14 @@ Sub generaGUID As String
|
||||
Next
|
||||
Next
|
||||
Return sb.ToString
|
||||
End Sub
|
||||
|
||||
'Regresa true si existe registro
|
||||
Sub deviceLinked As Boolean
|
||||
Private e As Cursor = dlDB.ExecQuery("select * from registro")
|
||||
If e.RowCount > 0 Then
|
||||
Return True
|
||||
Else
|
||||
Return False
|
||||
End If
|
||||
End Sub
|
||||
@@ -99,6 +99,8 @@ End Sub
|
||||
|
||||
'This sub will be called by the DBRequestManager when the job is done
|
||||
Public Sub JobDone(job As HttpJob)
|
||||
Log("===== JDDBRW =====")
|
||||
LogColor("JobDone: '" & reqManager.HandleJob(job).tag & "' - Registros: " & reqManager.HandleJob(job).Rows.Size, Colors.Green) 'Mod por CHV - 211110
|
||||
'<<< Obtenemos el Tag único que asignamos al job
|
||||
Dim currentJobTag As String = job.Tag
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -917,7 +917,7 @@ Version=12.8
|
||||
#Region Project Attributes
|
||||
#ApplicationLabel: Kelloggs Venta
|
||||
#VersionCode: 3000
|
||||
#VersionName: 5.10.02
|
||||
#VersionName: 5.12.14
|
||||
#SupportedOrientations: portrait
|
||||
#CanInstallToExternalStorage: False
|
||||
#BridgeLogger:true
|
||||
@@ -933,6 +933,8 @@ Version=12.8
|
||||
#IncludeTitle: False
|
||||
#End Region
|
||||
|
||||
'222543
|
||||
|
||||
' Version que estaba en la tabla CAT_VERSION antes -> 2.95
|
||||
' 5.08.30 --> corrige que en la barra de busqeda en productos no hacia nada!
|
||||
|
||||
|
||||
@@ -67,19 +67,19 @@ ModuleBreakpoints7=
|
||||
ModuleBreakpoints8=
|
||||
ModuleBreakpoints9=
|
||||
ModuleClosedNodes0=
|
||||
ModuleClosedNodes1=6,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,37,38,39,40,41,42,43,45,46,47
|
||||
ModuleClosedNodes1=2,3,6,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,31,33,34,35,37,38,39,40,41,42,43,45,46,47
|
||||
ModuleClosedNodes10=
|
||||
ModuleClosedNodes11=
|
||||
ModuleClosedNodes12=1
|
||||
ModuleClosedNodes13=1,7,8,9,10,11,12
|
||||
ModuleClosedNodes14=6,7,8,9,12,13
|
||||
ModuleClosedNodes12=
|
||||
ModuleClosedNodes13=8,9,11,12
|
||||
ModuleClosedNodes14=1,2
|
||||
ModuleClosedNodes15=
|
||||
ModuleClosedNodes16=3,8,17
|
||||
ModuleClosedNodes17=
|
||||
ModuleClosedNodes18=
|
||||
ModuleClosedNodes19=7,8,9,10,11,12,13,14
|
||||
ModuleClosedNodes2=
|
||||
ModuleClosedNodes20=
|
||||
ModuleClosedNodes20=3,4
|
||||
ModuleClosedNodes21=
|
||||
ModuleClosedNodes22=
|
||||
ModuleClosedNodes23=
|
||||
@@ -89,10 +89,10 @@ ModuleClosedNodes26=24,26,31,32,33,35
|
||||
ModuleClosedNodes27=
|
||||
ModuleClosedNodes28=4
|
||||
ModuleClosedNodes29=
|
||||
ModuleClosedNodes3=3,5,6
|
||||
ModuleClosedNodes3=
|
||||
ModuleClosedNodes30=
|
||||
ModuleClosedNodes31=
|
||||
ModuleClosedNodes32=101,116
|
||||
ModuleClosedNodes32=116
|
||||
ModuleClosedNodes33=
|
||||
ModuleClosedNodes4=
|
||||
ModuleClosedNodes5=
|
||||
@@ -100,6 +100,6 @@ ModuleClosedNodes6=
|
||||
ModuleClosedNodes7=
|
||||
ModuleClosedNodes8=
|
||||
ModuleClosedNodes9=
|
||||
NavigationStack=C_Cliente,B4XPage_Appear,774,0,B4XMainPage,B4XPage_Appear,407,0,kms_helperSubs,traeMaxClientesNuevos,1034,0,C_Principal,cargar_Click,881,0,C_Productos,Class_Globals,0,0,C_Promos,revisaInvProdsVariables,472,0,C_Promos,b_terminar1_Click,511,0,C_Promos,b_continuar_Click,551,0,C_TrendSpending,traeMontoBonificacion,360,0,C_Productos,b_terminar1_Click,1080,0,C_Productos,LlenaProdsLL,1507,0
|
||||
NavigationStack=C_Principal,JobDone,2227,0,Diseñador Visual,cliente.bal,-100,2,C_Cliente,Guardar_Click,1083,0,C_Cliente,mandaPendientes,1089,1,C_Principal,enviaPedidoBatch,3521,6,Main,Globals,34,0,Main,Process_Globals,28,0,C_Cliente,Class_Globals,0,0,C_Cliente,B4XPage_Created,399,6,C_Cliente,B4XPage_Appear,850,0
|
||||
SelectedBuild=0
|
||||
VisibleModules=31,1,12,5,16,3,32,13,14,9,8,26
|
||||
VisibleModules=31,1,12,3,32,13,14,20,19,33
|
||||
|
||||
@@ -186,9 +186,9 @@ Sub MapFragment1_Ready
|
||||
Next
|
||||
c2 .Close
|
||||
End If
|
||||
|
||||
|
||||
'''''''---------------------------- MARKER ROJO - NO VENTA
|
||||
|
||||
|
||||
If rojo =1 Or todos = 1 Then
|
||||
c3.IsInitialized
|
||||
c3=Starter.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT ,CAT_CL_NUM_SERIEFISICO from kmt_info where CAT_CL_NOMBRE <>'VENTA ABORDO' AND CAT_CL_CODIGO In (Select NV_CLIENTE from NOVENTA ) AND CAT_CL_CODIGO NOT IN (Select PE_CLIENTE from PEDIDO) and CAT_CL_DIAS_VISITA = (SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = 'DIA_VISITA')order by CAT_CL_NUM_SERIEFISICO")
|
||||
@@ -200,7 +200,8 @@ Sub MapFragment1_Ready
|
||||
CODIGO=c3.GetString("CAT_CL_CODIGO")
|
||||
Tienda= c3.GetString("CAT_CL_NOMBRE")
|
||||
NumSerie=c3.GetInt("CAT_CL_NUM_SERIEFISICO")
|
||||
MARK_ROJO = gmap.AddMarker3(LatitudRU,LongitudRU,CODIGO, LoadBitmap(File.DirAssets, "marker-rojo-" & NumSerie &".png"))
|
||||
' MARK_ROJO = gmap.AddMarker3(LatitudRU,LongitudRU,CODIGO, LoadBitmap(File.DirAssets, "marker-rojo-" & NumSerie &".png"))
|
||||
MARK_ROJO = gmap.AddMarker3(LatitudRU, LongitudRU, CODIGO, CreateBitmapWithNumber(LoadBitmap(File.DirAssets, "marker-rojo.png"), NumSerie))
|
||||
MARK_ROJO.Snippet = Tienda
|
||||
Next
|
||||
c3.Close
|
||||
|
||||
@@ -4,6 +4,11 @@ ModulesStructureVersion=1
|
||||
Type=Class
|
||||
Version=12.8
|
||||
@EndOfDesignText@
|
||||
'##############################################################################################
|
||||
' CODIGO DE PRUEBA, NO HABILITADO, NO TERMINADO
|
||||
' PRETENDE UTILIZAR MENOS MAPAS Y MAS QUERIES PARA EL CALCULO DE LAS PROMOCIONES
|
||||
'##############################################################################################
|
||||
|
||||
Sub Class_Globals
|
||||
Dim ruta As String
|
||||
Dim almacen As String
|
||||
|
||||
179
B4A/Subs.bas
179
B4A/Subs.bas
@@ -863,6 +863,7 @@ Sub traeNombreCliente(id As String) As String
|
||||
Do While c.NextRow
|
||||
n = c.GetString("CAT_CL_NOMBRE")
|
||||
Loop
|
||||
c.Close
|
||||
Return n
|
||||
End Sub
|
||||
|
||||
@@ -915,17 +916,20 @@ End Sub
|
||||
'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)
|
||||
Log($"Guarda producto ${nombre}, cant: ${cant}"$)
|
||||
Log($"Guarda producto ${nombre}, cant: ${cant}, cedis: ${cedis}"$)
|
||||
If nombre.Length < 6 Then ToastMessageShow("(guardaProductoSinGestion) El nombre del producto no es valido " & nombre, True)
|
||||
precioSin = NumberFormat2(precioSin, 1, 2, 2, False)
|
||||
costoU = NumberFormat2(costoU, 1, 2, 2, False)
|
||||
' LogColor("guardaProductoSinGestion: "&prodId&", cant="&cant&", tipo="&tipoVenta, Colors.Magenta)
|
||||
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, PE_ENVIADO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,0) ", 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))
|
||||
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))
|
||||
Log($"update ${traeTablaProds(tipoVenta)} set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? -- ${cant}, ${prodId}"$)
|
||||
End If
|
||||
c=Starter.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)")
|
||||
c.Position=0
|
||||
' Log("###### delete from pedido_cliente - " & traeCliente & "|" & clienteId)
|
||||
@@ -1005,7 +1009,7 @@ End Sub
|
||||
' 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
|
||||
Private thisLog As Boolean = false
|
||||
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 el maximo de promociones a otorgar.
|
||||
@@ -1027,7 +1031,7 @@ Sub traePromo(promo As String, cliente As String) As Map
|
||||
' Si la promo esta en la lista, SOLO los clientes que la tengan la pueden ver.
|
||||
Private ps As Cursor = Starter.skmt.ExecQuery($"select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}'"$) ' and HCCP_CLIENTE = '${cliente}'
|
||||
' Log($"select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}'"$)
|
||||
If thisLog Then Log($"PROMOS SEGMENTADAS DISPONIBLES: ${ps.RowCount}"$)
|
||||
If thisLog Then Log($"PROMOS SEGMENTADAS ENCONTRADAS: ${ps.RowCount}"$)
|
||||
If thisLog Then Log(promoMap)
|
||||
If ps.RowCount > 0 Then
|
||||
ps.Position = 0
|
||||
@@ -1035,20 +1039,23 @@ Sub traePromo(promo As String, cliente As String) As Map
|
||||
If thisLog Then Log($">>> PROMO "${promo}" SEGMENTADA PARA EL CLIENTE ${ps.GetString("HCCP_CLIENTE")}"$)
|
||||
' Select hccp_cliente As valido from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${traecliente}'
|
||||
Private ps2 As Cursor = Starter.skmt.ExecQuery($"Select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${traeCliente}' and HCCP_CANT > HCCP_CANT_VENDIDA"$)
|
||||
' Log($"Select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${traeCliente}' and HCCP_CANT > HCCP_CANT_VENDIDA"$)
|
||||
' Log($"registros:${ps2.RowCount}"$)
|
||||
Log($"Select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${traeCliente}' and HCCP_CANT > HCCP_CANT_VENDIDA"$)
|
||||
Log($"registros:${ps2.RowCount}"$)
|
||||
If ps2.RowCount > 0 Then
|
||||
ps2.Position = 0
|
||||
If thisLog Then Log($"registros:${ps2.RowCount}, cliente: ${ps2.GetString("HCCP_CLIENTE")} cant:${ps2.GetString("HCCP_CANT")}"$)
|
||||
promoMap = CreateMap("id":promo, "maxXcliente":(ps2.GetString("HCCP_CANT")-ps2.GetString("HCCP_CANT_VENDIDA")), "maxRecurrente":ps2.GetString("HCCP_CANT"), "maxPromos":ps2.GetString("HCCP_CANT")) 'Si es segmentada SOLO le aparece a ciertos clientes.
|
||||
End If
|
||||
ps2.Close
|
||||
End If
|
||||
ps.Close
|
||||
If thisLog Then Log(promoMap)
|
||||
' ########## TERMINA PROMOS SEGMENTADAS ##########
|
||||
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.Close
|
||||
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
|
||||
@@ -1087,6 +1094,7 @@ Sub traePromo(promo As String, cliente As String) As Map
|
||||
Else
|
||||
promoMap.Put("resultado", "No hay datos de la promoción.")
|
||||
End If
|
||||
c.Close
|
||||
c = Starter.skmt.ExecQuery("Select CAT_GP_STS, CAT_GP_NOMBRE from CAT_GUNAPROD2 where CAT_GP_ID = '"& promo & "'") 'Obtenemos las piezas requeridas de productos variables para la promoción.
|
||||
c.Position = 0
|
||||
Private pvr As String = 0
|
||||
@@ -1100,13 +1108,13 @@ Sub traePromo(promo As String, cliente As String) As Map
|
||||
If thisLog Then Log($"Inv variables: ${cuantosVariablesDisponiblesDB(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)
|
||||
' 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 thisLog As Boolean = True
|
||||
Private thisLog As Boolean = False
|
||||
Private c As Cursor
|
||||
c = Starter.skmt.ExecQuery2("SELECT CAT_GP_ID, CAT_GP_ALMACEN FROM CAT_GUNAPROD2 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
|
||||
@@ -1126,6 +1134,7 @@ Sub traemosInventarioDisponibleParaPromo(promo As String) As Map 'ignore
|
||||
Next
|
||||
' prodInv.Put("inventarios", prods)
|
||||
End If
|
||||
c.Close
|
||||
Return prods
|
||||
End Sub
|
||||
|
||||
@@ -1144,7 +1153,7 @@ Sub restaFijosPromo(promoMap As Map) As Map 'ignore
|
||||
Private prodsFijos As List = promoMap.get("prodsFijos") 'Obtenemos un a lista con los productos fijos de la promoción.
|
||||
If thisLog Then LogColor("ProdsFijos -> " & prodsFijos, Colors.red)
|
||||
inventariosDisponiblesParaEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") 'Valor por default
|
||||
Log($"Prods fijos requeridos ${prodsFijos.Size}"$)
|
||||
If thisLog Then Log($"Prods fijos requeridos ${prodsFijos.Size}"$)
|
||||
If prodsFijos.Size = 0 Then inventariosDisponiblesParaEstaPromo.Put("resultado", "ok") 'Si no lleva prods fijos la promo, entonces ponemos FIJOS OK.
|
||||
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.
|
||||
@@ -1221,14 +1230,15 @@ Sub traeMaxPromos(pm As Map) As Int
|
||||
maxPromos.Add(hccp.GetInt("HCCP_CANT"))
|
||||
End If
|
||||
maxPromos.Sort(True)
|
||||
If thisLog Then Log($">>>>> Max promos : ${maxPromos}"$)
|
||||
If thisLog Then Log($" >>>>> MAX PROMOS X CONF : ${maxPromos} <==> ${maxPromos.Get(0)}"$)
|
||||
mp = 0
|
||||
If maxPromos.Size > 0 Then
|
||||
mp0 = maxPromos.Get(0)
|
||||
' Log(mp0)
|
||||
mp = mp0 - traePromosVendidas(pm.Get("id"), traeCliente)
|
||||
If thisLog Then Log($"Max Promos (${mp0}) - promos vendidas (${(traePromosVendidas(pm.Get("id"), traeCliente)).As(Int)}) = ${mp}"$)
|
||||
If thisLog Then Log($" >>>>> MAX PROMOS - PROMOS VENDIDAS <==> ${mp0} - ${(traePromosVendidas(pm.Get("id"), traeCliente)).As(Int)} = ${mp}"$)
|
||||
End If
|
||||
hccp.Close
|
||||
Return mp 'Regresamos el numero mas pequeño de las opciones.
|
||||
End Sub
|
||||
|
||||
@@ -1241,16 +1251,17 @@ Sub traePromosVendidas(promo As String, cliente As String) As Int
|
||||
c.Position = 0
|
||||
If c.GetString("cuantas") <> Null Then pv = c.GetString("cuantas")
|
||||
End If
|
||||
c.Close
|
||||
Return pv
|
||||
End Sub
|
||||
|
||||
Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore
|
||||
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub.
|
||||
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub.
|
||||
Private inicioContador As String = DateTime.Now
|
||||
Private mp As Int = 0
|
||||
If thisLog Then LogColor($"****************************************************************"$, Colors.red)
|
||||
If thisLog Then LogColor($"********* Iniciamos revision de Promo ${idPromo} *********"$, Colors.red)
|
||||
If thisLog Then LogColor($"****************************************************************"$, Colors.red)
|
||||
If thisLog Then LogColor($"****************************************************************"$, Colors.RGB(142,0,255))
|
||||
If thisLog Then LogColor($"********* Iniciamos revision de Promo ${idPromo} *********"$, Colors.RGB(142,0,255))
|
||||
If thisLog Then LogColor($"****************************************************************"$, Colors.RGB(142,0,255))
|
||||
Try
|
||||
'Obtenemos el mapa con toda la info de la promoción.
|
||||
Private pm As Map = traePromo(idPromo, cliente)
|
||||
@@ -1260,7 +1271,9 @@ Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore
|
||||
' Log("|"&revisaMaxPromosProdsFijosPorInventario(pm)&"|")
|
||||
Private maxPromosXprodsFijos As Int = revisaMaxPromosProdsFijosPorInventario(pm)
|
||||
If maxPromosXprodsFijos < 1 Then pm.Put("resultado", 0)
|
||||
LogColor($">>> Promos disponibles por productos fijos = ${maxPromosXprodsFijos}"$, Colors.Magenta)
|
||||
If thisLog Then LogColor($"***********************************************************************"$, Colors.Blue)
|
||||
LogColor($"*** PROMOS DISPONIBLES X PRODS FIJOS (${idPromo}) = ${maxPromosXprodsFijos} ***"$, Colors.Blue)
|
||||
If thisLog Then LogColor($"***********************************************************************"$, Colors.Blue)
|
||||
If pm.Get("resultado") = "ok" Then 'Si encontramos la promoción, entonces ...
|
||||
'Buscamos el máximo de promociones permitidas.
|
||||
mp = traeMaxPromos(pm)
|
||||
@@ -1276,7 +1289,9 @@ Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore
|
||||
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 thisLog Then LogColor($"****************************************************"$, Colors.Blue)
|
||||
If thisLog Then LogColor($"***** ¿ALCANZAN LOS VARIABLES? ==> ${IIf(pv, "SI", "NO")} *****"$, Colors.Blue)
|
||||
If thisLog Then LogColor($"****************************************************"$, Colors.Blue)
|
||||
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)
|
||||
@@ -1293,6 +1308,8 @@ Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore
|
||||
Log($"Promo ${idPromo} mal configurada"$)
|
||||
ToastMessageShow($"Promo ${idPromo} mal configurada"$, True)
|
||||
Log(LastException)
|
||||
' Agregamos esta línea para evitar el NullPointerException
|
||||
Return CreateMap("status":"ko", "mp":Null)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
@@ -1341,45 +1358,47 @@ 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 = True
|
||||
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).
|
||||
If thisLog Then LogColor($"### T: ${t}"$, Colors.Green)
|
||||
If thisLog Then LogColor($"============ INICIA MAX PROMOS X PRODS FIJOS X INV ========"$, Colors.RGB(176,0,0))
|
||||
If thisLog Then LogColor($" ### MAX PROMOS (recurrente, cliente y promo): ${t}"$, Colors.Green)
|
||||
invFijoXpromo.Initialize
|
||||
If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue)
|
||||
If thisLog Then LogColor($" pm=${pm}"$, Colors.Blue)
|
||||
Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id"))
|
||||
If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$)
|
||||
If thisLog Then Log($" invDispParaPromo=${invDispParaPromo}"$)
|
||||
Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas")
|
||||
Private idProdsFijos As List = pm.Get("prodsFijos")
|
||||
Private idProdsFijosPrecios As List = pm.Get("prodsFijosPrecios")
|
||||
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 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}, pzasReq=${prodsFijosPiezas.Get(p)}"$)
|
||||
|
||||
LogColor($"====== ${idProdsFijos.Get(p)} - Inv1:${thisInvDisp}, inv2: ${traeExistenciasPorId(idProdsFijos.Get(p))}"$, Colors.Magenta)
|
||||
If thisInvDisp <> traeExistenciasPorId(idProdsFijos.Get(p)) Then
|
||||
LogColor("#### ERROR DE INVENTARIO ####" , Colors.red)
|
||||
End If
|
||||
|
||||
If thisLog Then Log($" id=${idProdsFijos.Get(p)}, inv=${thisInvDisp}, pzasReq=${prodsFijosPiezas.Get(p)}"$)
|
||||
' LogColor($" ====== ${idProdsFijos.Get(p)} - Inv1:${thisInvDisp}, inv2: ${traeExistenciasPorId(idProdsFijos.Get(p))}"$, Colors.Magenta)
|
||||
' If thisInvDisp <> traeExistenciasPorId(idProdsFijos.Get(p)) Then
|
||||
' LogColor(" #### ERROR DE INVENTARIO ####" , Colors.red)
|
||||
' End If
|
||||
' 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.
|
||||
t.Add(x(0).As(Int)) 'Solo guardamos la parte del entero de la division. (promos por inventario)
|
||||
If thisLog Then LogColor($"### T: ${t}"$, Colors.Green) 'promos por inventario
|
||||
If thisLog Then Log(">> Promos x Prods Fijos: " & x(0))
|
||||
Log(">>>>> Monto Bonificacion: " & B4XPages.MainPage.promos.ts.traeMontoBonificacion(idProdsFijos.Get(p), idProdsFijosPrecios.Get(p), pm.Get("id")))
|
||||
If thisLog Then LogColor(">> Max prods fijos x Bonificaciones: " & B4XPages.MainPage.promos.ts.traeBonificacionesMaximas("bonificaciones", clienteActual, idProdsFijos.Get(p), prodsFijosPiezas.Get(p), idProdsFijosPrecios.Get(p), pm.Get("id")), Colors.blue)
|
||||
' If thisLog Then LogColor($" ### T: ${t}"$, Colors.Green) 'promos por inventario
|
||||
If thisLog Then LogColor($" >>>>> PROMOS X PRODS FIJOS (${idProdsFijos.Get(p)}): ${x(0)} <<<<<"$, Colors.red)
|
||||
Log($" >>>>> Monto Bonificacion FIJOS (${idProdsFijos.Get(p)}): "$ & B4XPages.MainPage.promos.ts.traeMontoBonificacion(idProdsFijos.Get(p), idProdsFijosPrecios.Get(p), pm.Get("id")))
|
||||
If thisLog Then LogColor(" >> MAX PRODS FIJOS X BONIFICACIONES: " & B4XPages.MainPage.promos.ts.traeBonificacionesMaximas("bonificaciones", clienteActual, idProdsFijos.Get(p), prodsFijosPiezas.Get(p), idProdsFijosPrecios.Get(p), pm.Get("id")), Colors.blue)
|
||||
t.Add(B4XPages.MainPage.promos.ts.traeBonificacionesMaximas("bonificaciones", clienteActual, idProdsFijos.Get(p), prodsFijosPiezas.Get(p), idProdsFijosPrecios.Get(p), pm.Get("id"))) 'Agregamos las promos disponibles por Trade Spending
|
||||
If thisLog Then LogColor($"### T: ${t}"$, Colors.Green)
|
||||
If thisLog Then LogColor($" ### PROMOS X INV: ${t}"$, Colors.Green) 'promos por inventario
|
||||
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(">>>>>> T: " & t, Colors.red)
|
||||
If thisLog Then LogColor("Max promos x inv de prodsFijos = " & t.Get(0), Colors.red)
|
||||
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(" >>>>>> T: " & t, Colors.Magenta)
|
||||
LogColor(" ***********************************************************************", Colors.RGB(156,0,0))
|
||||
LogColor($" ****** MAX PROMOS X INV DE PRODS FIJOS (${pm.get("id")}): "$ & t.Get(0) & " ******", Colors.RGB(156,0,0))
|
||||
LogColor(" ***********************************************************************", Colors.RGB(156,0,0))
|
||||
If thisLog Then LogColor($"============ TERMINA MAX PROMOS X PRODS FIJOS X INV ========"$, Colors.RGB(176,0,0))
|
||||
Return t.Get(0) 'Regresamos el resultado mas pequeño.
|
||||
End Sub
|
||||
|
||||
@@ -1433,7 +1452,7 @@ Sub revisaMaxPromosProdsVariablesPorInventario(pm As Map) As Int 'ignore
|
||||
|
||||
' Log(pm.Get("prodsFijos").As(List).Size)
|
||||
' Log(maxPromosXFijos)
|
||||
|
||||
|
||||
For x = 1 To maxPromosXFijos
|
||||
If thisLog Then Log("==================== maxPromosXFijos "& x &" ========================")
|
||||
If thisLog Then Log("=====================================================")
|
||||
@@ -1456,7 +1475,7 @@ Sub revisaMaxPromosProdsVariablesPorInventario(pm As Map) As Int 'ignore
|
||||
totalProdsVariablesDisponibles = totalProdsVariablesDisponibles + invDispParaPromo.Get(idProdsVariables.Get(i))
|
||||
End If
|
||||
Next
|
||||
If thisLog Then Log($"prodsVariablesXPresupuestoBonificaciones: ${prodsVariablesXPresupuestoBonificaciones}"$)
|
||||
If thisLog Then Log($"1924: ${prodsVariablesXPresupuestoBonificaciones}"$)
|
||||
'Revisamos variables.
|
||||
If thisLog Then Log($"Var disponibles - var requeridos : ${totalProdsVariablesDisponibles} - ${prodsVariablesRequeridos*x}"$)
|
||||
totalProdsVariablesDisponibles = totalProdsVariablesDisponibles - (prodsVariablesRequeridos*x)
|
||||
@@ -1498,6 +1517,7 @@ Sub cuantosVariablesDisponiblesDB(promo As String)
|
||||
If c.GetString("CAT_GP_ALMACEN") <> Null Then x = c.GetString("CAT_GP_ALMACEN")
|
||||
Next
|
||||
End If
|
||||
c.Close
|
||||
End If
|
||||
Return x
|
||||
End Sub
|
||||
@@ -2112,12 +2132,14 @@ Sub comparaVersiones(versionMinima As String, versionActual As String) As Int
|
||||
Dim partesMin() As String = Regex.Split("\.", versionMinima)
|
||||
Dim partesAct() As String = Regex.Split("\.", versionActual)
|
||||
If partesMin.Length < 2 Then
|
||||
ToastMessageShow("Version incorrecta", False)
|
||||
' ToastMessageShow("Version incorrecta", False)
|
||||
LogColor("VERSION INCORRECTA", Colors.red)
|
||||
Return -1 ' ← Actual no cumple el formato mínimo
|
||||
End If
|
||||
' Si la actual tiene MENOS partes que la mínima, es inválida (opcional)
|
||||
If partesAct.Length < partesMin.Length Then
|
||||
ToastMessageShow("Version incorrecta", False)
|
||||
' ToastMessageShow("Version incorrecta", False)
|
||||
LogColor("VERSION INCORRECTA", Colors.red)
|
||||
Return -1 ' ← Actual no cumple el formato mínimo
|
||||
End If
|
||||
' Compara solo las partes que existen en la versión mínima
|
||||
@@ -2410,7 +2432,7 @@ Sub traeExistenciasPorId(id As String) As Int
|
||||
existencias = inv.GetString("CAT_GP_ALMACEN").As(Int)
|
||||
End If
|
||||
' Log("ex:" & existencias)
|
||||
Private inv As Cursor = Starter.skmt.ExecQuery($"Select ifnull(SUM(pe_cant),0) As total_vendido FROM pedido WHERE pe_tipo = 'VENTA' and pe_proid = '${id}'"$)
|
||||
inv = Starter.skmt.ExecQuery($"Select ifnull(SUM(pe_cant),0) As total_vendido FROM pedido WHERE pe_tipo = 'VENTA' and pe_proid = '${id}'"$)
|
||||
inv.Position = 0
|
||||
vendido = inv.GetInt("total_vendido")
|
||||
' Log("ven:" & vendido)
|
||||
@@ -2438,4 +2460,73 @@ Sub EstaEnHorarioPermitido As Boolean
|
||||
Else
|
||||
Return False
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'Desahabilita validaciones de Ruta y Version
|
||||
Sub deshabilitaValidaciones
|
||||
Log("Deshabilitamos VERIFY_DEVICE")
|
||||
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("VERIFY_DEVICE"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("VERIFY_DEVICE", 0))
|
||||
Log("Deshabilitamos VALIDA_VERSION")
|
||||
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("VALIDA_VERSION"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("VALIDA_VERSION", 0))
|
||||
Log("Espeificamos LIGADO")
|
||||
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("LIGADO"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("LIGADO", 1))
|
||||
' B4XPages.MainPage.principal.Btn_CheckList.Enabled = True
|
||||
' B4XPages.MainPage.principal.trabajar.Enabled = True
|
||||
' B4XPages.MainPage.principal.Resumen.Enabled = True
|
||||
' B4XPages.MainPage.principal.BUSCA.Enabled = True
|
||||
ToastMessageShow("REALIZADO", False)
|
||||
End Sub
|
||||
|
||||
' Recalcula en inventario actual, utiliza la tabla CAT_GUNAPROD5 que tiene el inventario INICIAL y le resta
|
||||
' lo que hay en PEDIDO, y actualiza CAT_GUNAPROD2 con el valor calculado.
|
||||
Public Sub RecalcularInventario
|
||||
Private inicial As Long = DateTime.Now
|
||||
' 1. Índices: ESTO ES CRUCIAL. Si no tienes estos índices, ningún query será rápido.
|
||||
' Ejecuta esto una sola vez al crear la BD o al iniciar la app, no en cada cálculo.
|
||||
' skmt.ExecNonQuery("CREATE INDEX IF NOT EXISTS idx_pedido_proid ON PEDIDO(PE_PROID)")
|
||||
' skmt.ExecNonQuery("CREATE INDEX IF NOT EXISTS idx_pedido_cliente ON PEDIDO(PE_CLIENTE)")
|
||||
' skmt.ExecNonQuery("CREATE INDEX IF NOT EXISTS idx_cat5_id ON CAT_GUNAPROD5(CAT_GP_ID)")
|
||||
|
||||
Starter.skmt.BeginTransaction
|
||||
Try
|
||||
' Lógica del Query:
|
||||
' 1. Toma el inventario inicial del día desde CAT_GUNAPROD5 (T5).
|
||||
' 2. Le resta SOLO las ventas reales de la tabla PEDIDO.
|
||||
' 3. FILTRA (Ignora) los RMIs usando PE_CEDIS <> 'DUR' y el nombre '%CAMBIO%'.
|
||||
' 4. Actualiza CAT_GUNAPROD2 masivamente.
|
||||
|
||||
Dim sql As String = _
|
||||
"UPDATE CAT_GUNAPROD2 " & _
|
||||
"SET CAT_GP_ALMACEN = ( " & _
|
||||
" SELECT (IFNULL(T5.CAT_GP_ALMACEN, 0) - IFNULL(Ventas.CantidadVendida, 0)) " & _
|
||||
" FROM CAT_GUNAPROD5 T5 " & _
|
||||
" LEFT JOIN ( " & _
|
||||
" SELECT PE_PROID, SUM(PE_CANT) AS CantidadVendida " & _
|
||||
" FROM PEDIDO " & _
|
||||
" WHERE PE_CLIENTE <> '0' " & _
|
||||
" AND PE_CEDIS <> 'DUR' " & _
|
||||
" AND PE_PRONOMBRE NOT LIKE '%CAMBIO%' " & _
|
||||
" GROUP BY PE_PROID " & _
|
||||
" ) Ventas ON T5.CAT_GP_ID = Ventas.PE_PROID " & _
|
||||
" WHERE T5.CAT_GP_ID = CAT_GUNAPROD2.CAT_GP_ID " & _
|
||||
") " & _
|
||||
"WHERE EXISTS ( " & _ '<-- ESTA ES LA CLAVE QUE EVITA LOS NULLS
|
||||
" SELECT 1 FROM CAT_GUNAPROD5 T5 " & _
|
||||
" WHERE T5.CAT_GP_ID = CAT_GUNAPROD2.CAT_GP_ID " & _
|
||||
")"
|
||||
|
||||
' Ejecutamos el cálculo masivo
|
||||
Starter.skmt.ExecNonQuery(sql)
|
||||
|
||||
Starter.skmt.TransactionSuccessful
|
||||
If Starter.Logger Then Log("Inventario Sincronizado (Excluyendo RMIs)")
|
||||
|
||||
Catch
|
||||
Log("Error al recalcular inventario: " & LastException)
|
||||
End Try
|
||||
Starter.skmt.EndTransaction
|
||||
LogColor(">>>>> Tiempo de RecalcularInventario: " & ((DateTime.Now - inicial)/1000), Colors.red)
|
||||
End Sub
|
||||
28
B4A/_juntaBas.ps1
Normal file
28
B4A/_juntaBas.ps1
Normal file
@@ -0,0 +1,28 @@
|
||||
# SCRIPT: _juntaBas.ps1 - Versión Saneada y Optimizada para LLM
|
||||
$OutputFile="_CODIGO_COMPLETO_PARA_LLM.txt"
|
||||
|
||||
# Eliminar el archivo anterior si existe (IMPORTANTE)
|
||||
Remove-Item -Path $OutputFile -ErrorAction SilentlyContinue
|
||||
|
||||
Write-Host "Iniciando fusion para LLM..."
|
||||
|
||||
# Itera sobre los archivos .bas, .b4a, .b4j
|
||||
Get-ChildItem -Path ".\*" -Include @("*.bas", "*.b4a", "*.b4j") | ForEach-Object {
|
||||
$currentFile = $_.Name
|
||||
Write-Host "Procesando: $currentFile"
|
||||
|
||||
# --- ENCABEZADO ESTRUCTURADO Y COMENTADO EN B4X (Agregado al archivo) ---
|
||||
Add-Content -Path $OutputFile -Value "`n'======================================================================================"
|
||||
Add-Content -Path $OutputFile -Value $"// ARCHIVO_INICIO: ${currentFile}"
|
||||
Add-Content -Path $OutputFile -Value "'======================================================================================`n"
|
||||
|
||||
# Vuelca el contenido del archivo
|
||||
Get-Content -Encoding UTF8 -Path $_.FullName -Raw | Add-Content -Path $OutputFile
|
||||
|
||||
# --- DELIMITADOR DE FIN DE ARCHIVO (Agregado al archivo) ---
|
||||
Add-Content -Path $OutputFile -Value "`n'======================================================================================"
|
||||
Add-Content -Path $OutputFile -Value $"// ARCHIVO_FIN: ${currentFile}"
|
||||
Add-Content -Path $OutputFile -Value "'======================================================================================`n"
|
||||
}
|
||||
|
||||
Write-Host "`nProceso terminado. Se ha creado el archivo: $OutputFile"
|
||||
@@ -101,6 +101,8 @@ Sub RD_Init
|
||||
agregaColumna(rkmt, "CAT_DETALLES_PAQ", "CAT_DP_PRECIOB", "TEXT")
|
||||
agregaColumna(rkmt, "kmt_info", "CREDITO", "INTEGER")
|
||||
agregaColumna(rkmt, "PEDIDO", "PE_ENVIADO", "INTEGER")
|
||||
agregaColumna(rkmt, "PEDIDO", "PE_ARCH", "TEXT")
|
||||
agregaColumna(rkmt, "PEDIDO_CLIENTE", "PC_ARCH", "TEXT")
|
||||
If chkIfTableExists(khdb, "CAT_VARIABLES") Then rkmt.ExecNonQuery($"create table if not exists CAT_VARIABLES (${getTableColumnList(khdb, "CAT_VARIABLES")}, FECHA TEXT)"$)
|
||||
If chkIfTableExists(khdb, "CAT_RMI") Then rkmt.ExecNonQuery($"create table if not exists CAT_RMI (${getTableColumnList(khdb, "CAT_RMI")}, FECHA TEXT)"$)
|
||||
DateTime.DateFormat = "yyyyMMdd"
|
||||
|
||||
@@ -13,6 +13,11 @@ Version=12.8
|
||||
' el presupuesto de bonificaciones ya se agoto, ya no aparecen promociones, o si el de descuentos se agoto, ya no se pueden agregar
|
||||
' mas productos con descuento.
|
||||
|
||||
' Descuento es TODO lo que tenga un precio diferente al precio de lista y NO esta en promo.
|
||||
' Bonificacion es lo que tiene precio diferente al orginal y esta en promo y NO es regalo o exhibidor.
|
||||
|
||||
|
||||
|
||||
Sub Class_Globals
|
||||
Private EventName As String 'ignore
|
||||
Private CallBack As Object 'ignore
|
||||
@@ -77,7 +82,7 @@ Sub traeInfoTrendSpending As Map
|
||||
End If
|
||||
If semana > 0 Then
|
||||
c = tsdb.ExecQuery($"select HIST_TSS_TIPO, HIST_TSS_SEMANA${semana}, ifnull(HIST_TSS_SEMANA${semana}_ACUM,0) as HIST_TSS_SEMANA${semana}_ACUM from HIST_TREND_SPENDING_SEMANAL"$)
|
||||
Log($"select HIST_TSS_TIPO, HIST_TSS_SEMANA${semana}, ifnull(HIST_TSS_SEMANA${semana}_ACUM,0) as HIST_TSS_SEMANA${semana}_ACUM from HIST_TREND_SPENDING_SEMANAL"$)
|
||||
' Log($"select HIST_TSS_TIPO, HIST_TSS_SEMANA${semana}, ifnull(HIST_TSS_SEMANA${semana}_ACUM,0) as HIST_TSS_SEMANA${semana}_ACUM from HIST_TREND_SPENDING_SEMANAL"$)
|
||||
If c.RowCount > 0 Then
|
||||
For i = 0 To c.RowCount - 1
|
||||
c.Position = i
|
||||
@@ -340,22 +345,26 @@ Sub traeBonificacionesMaximas(tipo As String, clienteId As String, id As String,
|
||||
TS_DESCUENTOS = Regex.Split(",", mx.Get("DESCUENTOS"))
|
||||
TS_BONIFICACIONES = Regex.Split(",", mx.Get("BONIFICACIONES"))
|
||||
|
||||
If thisLog Then LogColor($"Presupuesto: ${TS_BONIFICACIONES(0)} - Acumulado ayer: ${TS_BONIFICACIONES(1)} - Hoy: ${traeAcumuladoHoyTS("bonificaciones")}"$, Colors.Red)
|
||||
If thisLog Then LogColor($" ============ INICIA BONIFICACIONES MAXIMAS (${id}) ========"$, Colors.RGB(0,197,110))
|
||||
If thisLog Then LogColor($" Presupuesto: ${TS_BONIFICACIONES(0)} - Acumulado ayer: ${TS_BONIFICACIONES(1)} - Hoy: ${traeAcumuladoHoyTS("bonificaciones")}"$, Colors.Magenta)
|
||||
If tipo.ToUpperCase = "BONIFICACIONES" Then
|
||||
tsMonto = NumberFormat2(traeMontoBonificacion(id, elPrecioVenta, promoId), 1, 2, 2, False)
|
||||
tsRestantes = (TS_BONIFICACIONES(0) - TS_BONIFICACIONES(1) - traeAcumuladoHoyTS("bonificaciones")) ' Traemos monto restante de Trend Spending para bonificaciones.
|
||||
Log("TS_BONIFICACIONES(0) - TS_BONIFICACIONES(1) - traeAcumuladoHoyTS('bonificaciones')")
|
||||
Log($"${TS_BONIFICACIONES(0)} - ${TS_BONIFICACIONES(1)} - ${traeAcumuladoHoyTS("bonificaciones")}"$)
|
||||
Log($" PresupuestoBonifs: ${TS_BONIFICACIONES(0)}, AcumuladoBonifs: ${TS_BONIFICACIONES(1)}, traeAcumuladoHoyTS('bonificaciones'): ${traeAcumuladoHoyTS("bonificaciones")}"$)
|
||||
' Log($" ${TS_BONIFICACIONES(0)} - ${TS_BONIFICACIONES(1)} - ${traeAcumuladoHoyTS("bonificaciones")}"$)
|
||||
End If
|
||||
If thisLog Then Log($"Monto de bonificacion: ${tsMonto}"$)
|
||||
If thisLog Then Log($"Presupuesto disponible: ${tsRestantes}"$)
|
||||
If thisLog Then Log($"Cantidad: ${laCant}"$)
|
||||
If thisLog Then Log($"Floor(tsRestantes / (tsMonto * laCant))= ${Floor(tsRestantes / (tsMonto * laCant))}"$)
|
||||
If thisLog Then Log($"Floor(${tsRestantes} / (${tsMonto} * ${laCant}))= ${Floor(tsRestantes / (tsMonto * laCant))}"$)
|
||||
If thisLog Then Log($" Monto de bonificacion: ${tsMonto}"$)
|
||||
If thisLog Then Log($" Presupuesto disponible: ${tsRestantes}"$)
|
||||
' If thisLog Then Log($"Cantidad: ${laCant}"$)
|
||||
If thisLog Then Log($" Floor(tsRestantes / (tsMonto * laCant)) <==> Floor(${tsRestantes} / (${tsMonto} * ${laCant})) = ${Floor(tsRestantes / (tsMonto * laCant))}"$)
|
||||
' If thisLog Then Log($"Floor(${tsRestantes} / (${tsMonto} * ${laCant}))= ${Floor(tsRestantes / (tsMonto * laCant))}"$)
|
||||
If tsMonto > 0 Then
|
||||
tsMaximas = Floor(tsRestantes / (tsMonto * laCant))
|
||||
End If
|
||||
If thisLog Then Log(">>> tsMaximas: " & tsMaximas)
|
||||
If thisLog Then LogColor(" ************************************************", Colors.red)
|
||||
If thisLog Then LogColor(" ***** BONIFICACIONES MAXIMAS: " & tsMaximas & " *****", Colors.red)
|
||||
If thisLog Then LogColor(" ************************************************", Colors.red)
|
||||
If thisLog Then LogColor(" ============ TERMINA BONIFICACIONNES MAXIMAS ========", Colors.RGB(0,197,110))
|
||||
Return tsMaximas
|
||||
End Sub
|
||||
|
||||
@@ -364,22 +373,27 @@ End Sub
|
||||
' - Si CAT_DP_PRECIOB es 0, la bonificacion es: Precio original.
|
||||
Sub traeMontoBonificacion(id As String, precio As String, promoId As String) As String
|
||||
Private thisLog As Boolean = True
|
||||
LogColor($">>>>>>> ${promoId}, ${precio}, ${id}"$, Colors.Magenta)
|
||||
If thisLog Then LogColor($" ============ INICIA MONTO BONIFICACION (${id}) ========"$, Colors.RGB(151,0,171))
|
||||
If thisLog Then LogColor($" ###### ${promoId}, ${precio}, ${id}"$, Colors.Magenta)
|
||||
Private tsMonto As String = 0
|
||||
Private c As Cursor = tsdb.ExecQuery($"SELECT CAT_DP_ID, CAT_DP_IDPROD, CAT_DP_PRECIO, CAT_DP_TIPO, CAT_GP_PRECIO, CAT_DP_PRECIOB FROM CAT_DETALLES_PAQ join ${traeTablaProds(Starter.tipov)} on CAT_GP_ID = CAT_DP_IDPROD where CAT_GP_ID = '${id}' and CAT_DP_PRECIO = '${precio}' and CAT_DP_ID = '${promoId}'"$)
|
||||
Log($"SELECT CAT_DP_ID, CAT_DP_IDPROD, CAT_DP_PRECIO, CAT_DP_TIPO, CAT_GP_PRECIO, CAT_DP_PRECIOB FROM CAT_DETALLES_PAQ join ${traeTablaProds(Starter.tipov)} on CAT_GP_ID = CAT_DP_IDPROD where CAT_GP_ID = '${id}' and CAT_DP_PRECIO = '${precio}' and CAT_DP_ID = '${promoId}'"$)
|
||||
Log($"rowcount: ${c.RowCount}"$)
|
||||
If c.RowCount > 0 Then
|
||||
c.Position = 0
|
||||
If c.GetInt("CAT_DP_PRECIOB") = 1 Or (c.GetInt("CAT_DP_PRECIOB") = 0 And c.GetString("CAT_GP_PRECIO") = c.GetString("CAT_DP_PRECIO")) Then
|
||||
tsMonto = c.GetString("CAT_GP_PRECIO") - c.GetString("CAT_DP_PRECIO") ' Precio original - precio de venta.
|
||||
Else
|
||||
tsMonto = c.GetString("CAT_GP_PRECIO") ' Precio original.
|
||||
End If
|
||||
Private re As Cursor = Starter.skmt.ExecQuery($"select cat_gp_id from cat_gunaprod2 where (cat_gp_tipo like 'REGALO%' or cat_gp_tipo like 'EXHIBIDOR%') and cat_gp_id = '${id}'"$) ' Revisamos si el producto es regalo o exhibidor.
|
||||
If re.RowCount = 0 Then' No es regalo ni exhibidor.
|
||||
Private c As Cursor = tsdb.ExecQuery($"SELECT CAT_DP_ID, CAT_DP_IDPROD, CAT_DP_PRECIO, CAT_DP_TIPO, CAT_GP_PRECIO, CAT_DP_PRECIOB FROM CAT_DETALLES_PAQ join ${traeTablaProds(Starter.tipov)} on CAT_GP_ID = CAT_DP_IDPROD where CAT_GP_ID = '${id}' and CAT_DP_PRECIO = '${precio}' and CAT_DP_ID = '${promoId}'"$)
|
||||
' Log($"SELECT CAT_DP_ID, CAT_DP_IDPROD, CAT_DP_PRECIO, CAT_DP_TIPO, CAT_GP_PRECIO, CAT_DP_PRECIOB FROM CAT_DETALLES_PAQ join ${traeTablaProds(Starter.tipov)} on CAT_GP_ID = CAT_DP_IDPROD where CAT_GP_ID = '${id}' and CAT_DP_PRECIO = '${precio}' and CAT_DP_ID = '${promoId}'"$)
|
||||
If thisLog Then Log($" Rowcount DP y CGP2: ${c.RowCount}"$)
|
||||
If c.RowCount > 0 Then
|
||||
c.Position = 0
|
||||
If c.GetInt("CAT_DP_PRECIOB") = 1 Or (c.GetInt("CAT_DP_PRECIOB") = 0 And c.GetString("CAT_GP_PRECIO") = c.GetString("CAT_DP_PRECIO")) Then
|
||||
tsMonto = c.GetString("CAT_GP_PRECIO") - c.GetString("CAT_DP_PRECIO") ' Precio original - precio de venta.
|
||||
Else
|
||||
tsMonto = c.GetString("CAT_GP_PRECIO") ' Precio original.
|
||||
End If
|
||||
' Log("PRECIOB: " & c.GetInt("CAT_DP_PRECIOB"))
|
||||
If thisLog Then Log($"Precio normal: ${c.GetString("CAT_GP_PRECIO")}, Precio desc: ${c.GetString("CAT_DP_PRECIO")}, Monto bonificacion: ${tsMonto}"$)
|
||||
If thisLog Then Log($" Precio normal: ${c.GetString("CAT_GP_PRECIO")}, Precio desc: ${c.GetString("CAT_DP_PRECIO")}, Monto bonificacion: ${tsMonto}"$)
|
||||
End If
|
||||
' Log("ROWCOUNT: " & c.RowCount)
|
||||
End If
|
||||
' Log("ROWCOUNT: " & c.RowCount)
|
||||
If thisLog Then LogColor($" ============ TERMINA MONTO BONIFICACION ========"$, Colors.RGB(151,0,171))
|
||||
Return tsMonto
|
||||
End Sub
|
||||
|
||||
@@ -391,7 +405,7 @@ End Sub
|
||||
' se agoto el presupuesto.
|
||||
' Aunque si hay suficiente para mostrar algunas promos ... pues que si las muestre.
|
||||
Sub maxPromosPorProdsVariables(idProdsVariables As List, promo As String)As Int
|
||||
Private logger As Boolean = True
|
||||
Private logger As Boolean = False
|
||||
Private Maxs As Int = 10000000
|
||||
Private prodsVariablesXPresupuestoBonificaciones As List
|
||||
Private prodsVariablesRequeridos As Int = traeProdsVariablesRequeridos(promo)
|
||||
|
||||
Reference in New Issue
Block a user