Files
2026-09-22 20:38:51 -04:00

139 lines
4.1 KiB
Plaintext

{
PROGRAMA : VEPRMT024
DESARROLLADO POR : ING. JUAN SOTO
FECHA : 01/01/2017
OBJETIVO : ACTUALIZAR PRECIOS DE VENTAS A LA TASA VIGENTE
}
GLOBALS "veprgb000.4gl"
MAIN
DEFER INTERRUPT
CALL STARTLOG("veprmt024.log")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "decomarmol" AS "MSSQL" USER usuarios USING clave
CALL veprmt024()
END MAIN
FUNCTION veprmt024()
DEFINE datos_c RECORD
ventas SMALLINT,
descripcion VARCHAR(50),
tasa DEC(12,2)
END RECORD,
progreso SMALLINT,
no_registros,idx INT,
xfecha DATETIME YEAR TO MINUTE,
xusuario VARCHAR(50),
respuesta VARCHAR(3),
vetb25 RECORD
ventas CHAR(1),
cod_lista SMALLINT,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
precio DEC(12,2)
END RECORD,
exito BOOLEAN
OPEN WINDOW w1 AT 1,1 WITH FORM "vefmmt024"
INPUT BY NAME datos_c.*
BEFORE INPUT
SELECT MAX(a.fecha) INTO xfecha FROM vetb00096 a
SELECT a.tasa,a.usuario INTO datos_c.tasa,xusuario FROM vetb00096 a WHERE a.fecha = xfecha
DISPLAY BY NAME datos_c.tasa,xusuario
AFTER FIELD ventas
SELECT a.descripcion INTO datos_c.descripcion FROM vetb00061 a
WHERE a.ventas = datos_c.ventas
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD ventas
END IF
DISPLAY BY NAME datos_c.descripcion
AFTER INPUT
IF INT_FLAG THEN
CALL msg(2)
LET INT_FLAG = FALSE
EXIT INPUT
END IF
LET respuesta=fgl_winquestion("ACTUALIZA","USTED VA ACTUALIZAR EN MASA TODOS LOS PRECIOS EN USD$ A RD$, ESTA SEGURO?","NO","YES|NO","QUESTION",0)
IF respuesta = "YES" THEN
IF datos_c.tasa IS NOT NULL THEN
LET progreso = 0
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
LET exito = TRUE
BEGIN WORK
UPDATE vetb00019 SET prima = datos_c.tasa WHERE disponible = "S"
SELECT COUNT(*) INTO no_registros FROM vetb00025
WHERE ventas = '3'
DECLARE busca_p CURSOR FOR
SELECT a.ventas,a.cod_lista,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.precio
FROM vetb00025 a,iptb00002 b
WHERE a.ventas = 3 AND
a.cod_n = b.cod_n AND
a.cod_grupo = b.cod_grupo AND
a.cod_tipo = b.cod_tipo AND
a.cod_sec = b.cod_sec AND b.status_t IS NULL
LET idx = 1
FOREACH busca_p INTO vetb25.*
SELECT DISTINCT ventas FROM vetb00025
WHERE cod_n = vetb25.cod_n AND
cod_Grupo = vetb25.cod_grupo AND
cod_tipo = vetb25.cod_tipo AND
cod_sec = vetb25.cod_sec AND
ventas = 1
IF STATUS <> NOTFOUND THEN
UPDATE vetb00025 SET precio = vetb25.precio* datos_c.tasa,
us_mod = usuarios,
fech_mod = getdate()
WHERE cod_n = vetb25.cod_n AND
cod_Grupo = vetb25.cod_grupo AND
cod_tipo = vetb25.cod_tipo AND
cod_sec = vetb25.cod_sec AND
ventas = 1
ELSE
INSERT INTO vetb00025 (ventas,cod_lista,cod_n,cod_grupo,cod_tipo,cod_sec,precio,us_crea,fech_crea)
VALUES ('1',vetb25.cod_lista,vetb25.cod_n,vetb25.cod_grupo,vetb25.cod_tipo,vetb25.cod_sec,
vetb25.precio*datos_c.tasa,usuarios,getdate())
IF STATUS <0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR", "PROCESO ACTUALIZACION PRECIOS FALLO","INFO")
LET exito = FALSE
EXIT FOREACH
END IF
END IF
LET progreso = (idx /no_registros )*100
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
LET idx = idx + 1
END FOREACH
INSERT INTO vetb00096 (fecha,usuario,ventas,tasa)
VALUES (getdate(),usuarios,datos_c.ventas,datos_c.tasa)
IF exito THEN
COMMIT WORK
END IF
CALL fgl_winmessage("INFO","ACTUALIZACION EXITOSA","INFO")
END IF
END IF
END INPUT
CLOSE WINDOW w1
END FUNCTION