Files
MBS/PROYECTO/vedir/veprmt025.4gl
T

347 lines
14 KiB
Plaintext

{
PROGRAMA : VEPRMT025
DESARROLLADO POR : ING. JUAN SOTO
FECHA : 03/05/2019
OBJETIVO : AGRUPAR CLIENTES A UNA CUENTA CORPORATIVA
}
GLOBALS
DEFINE usuarios,clave VARCHAR(50),
arr_lista DYNAMIC ARRAY OF RECORD
grupo VARCHAR(100),
limite_cr1 DEC(12,2),
condiciones VARCHAR(60),
estado VARCHAR(30),
pcod_grupo INT,
pdescripcion VARCHAR(100)
END RECORD,
idx INT,curr,scr_l SMALLINT,
pcondicion ui.ComboBox
END GLOBALS
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL STARTLOG("vecorporativo.txt")
CONNECT to "smarmotech" USER usuarios USING clave
CALL corporacion()
END MAIN
FUNCTION corporacion()
DEFINE centra RECORD
codigo_grupo INT,
descripcion VARCHAR(100),
tipo_grupo SMALLINT,
limite_cr_grupo DEC(12,2),
cond_pago INT
END RECORD,
secuencia INT,
total_cr DEC(12,2)
DEFINE arr_entra DYNAMIC ARRAY OF RECORD
idrow INT,
tipo_cliente smallint,
sec_cliente int,
nombre VARCHAR(100),
limite_cr_cliente DEC(12,2),
tasa DEC(12,2),
limite_cr_rd DEC(12,2),
pventas CHAR(1),
borrar CHAR(1)
END RECORD,
operacion CHAR(1)
OPEN WINDOW sucursales AT 7,12 WITH FORM "vefmwd022"
ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST)
CALL ui.Interface.LoadStyles("mbsStyle")
DIALOG ATTRIBUTE(UNBUFFERED)
DISPLAY ARRAY arr_lista TO s_lista.*
BEFORE DISPLAY
LET operacion = "M"
CALL lista_grupos()
ON ACTION desactivar
CALL desactiva(arr_lista[arr_curr()].pcod_grupo)
CALL lista_grupos()
ON ACTION activar
CALL activar(arr_lista[arr_curr()].pcod_grupo)
CALL lista_grupos()
AFTER DISPLAY
LET centra.codigo_grupo = arr_lista[arr_curr()].pcod_grupo
LET centra.descripcion = arr_lista[arr_curr()].pdescripcion
LET centra.limite_cr_grupo = arr_lista[arr_curr()].limite_cr1
DECLARE busca_clientes CURSOR FOR
SELECT a.idrow, a.tipo_cliente,a.sec_cliente,b.nombre,b.limite_credito,a.ventas,a.tasa,a.limite_cr_rd
FROM vetb00052 a,vetb00004 b,vetb00060 c
WHERE a.codigo_grupo = centra.codigo_grupo AND a.tipo_cliente = b.tipo_cliente AND
a.sec_cliente = b.sec_cliente AND
b.tipo_cliente = c.tipo_cliente
LET idx = 1
FOREACH busca_clientes INTO arr_entra[idx].idrow, arr_entra[idx].tipo_cliente,arr_entra[idx].sec_cliente,
arr_entra[idx].nombre,arr_entra[idx].limite_cr_cliente,
arr_entra[idx].pventas,arr_entra[idx].tasa,arr_entra[idx].limite_cr_rd
LET arr_entra[idx].borrar='N'
LET idx = idx +1
END FOREACH
END DISPLAY
INPUT BY NAME centra.* ATTRIBUTE(WITHOUT DEFAULTS)
AFTER FIELD descripcion
IF centra.descripcion IS NULL THEN
CALL msg(16)
NEXT FIELD descripcion
END IF
BEFORE INPUT
{ IF operacion = "N" THEN
INITIALIZE centra.* TO NULL
DISPLAY BY NAME centra.*
CALL arr_entra.clear()
END IF}
IF centra.tipo_grupo IS NULL THEN
LET centra.tipo_grupo = 1
END IF
IF centra.descripcion IS NULL AND operacion <> "N" THEN
CALL fgl_winmessage("INFO","NO ESTAS ELIJIENDO UN GRUPO DE CLIENTES PARA MODIFICAR, FAVOR DE USAR LA OPCION <NUEVO> DEL MENU","INFO")
EXIT PROGRAM
END IF
LET pcondicion = ui.combobox.forname("formonly.cond_pago")
CALL ccondicion()
AFTER FIELD limite_cr_grupo
IF centra.limite_cr_grupo IS NULL THEN
CALL msg(16)
NEXT FIELD limite_cr_grupo
END IF
AFTER INPUT
DECLARE buscate CURSOR FOR
SELECT a.idrow,a.tipo_cliente,a.sec_cliente,b.nombre,b.limite_credito,c.ventas,
a.tasa,a.limite_cr_rd
FROM vetb00052 a,vetb00004 b,vetb00060 c
WHERE a.tipo_cliente = b.tipo_cliente AND a.tipo_cliente = c.tipo_cliente AND
a.sec_cliente = b.sec_cliente AND a.codigo_grupo = centra.codigo_grupo
ORDER BY a.tipo_cliente,a.sec_cliente
LET idx = 1
FOREACH buscate INTO arr_entra[idx].idrow,arr_entra[idx].tipo_cliente,arr_entra[idx].sec_cliente,
arr_entra[idx].nombre,arr_entra[idx].limite_cr_cliente,
arr_entra[idx].pventas,arr_entra[idx].tasa,arr_entra[idx].limite_cr_rd
LET arr_entra[idx].borrar='N'
LET idx = idx + 1
END FOREACH
END INPUT
INPUT ARRAY arr_entra FROM s_datos.* ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
CALL DIALOG.setactionactive("delete",FALSE)
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
AFTER FIELD sec_cliente
IF arr_entra[curr].sec_cliente IS NOT NULL THEN
SELECT a.nombre,a.limite_credito,b.ventas
INTO arr_entra[curr].nombre,arr_entra[curr].limite_cr_cliente,arr_entra[curr].pventas
FROM vetb00004 a,vetb00060 b
WHERE a.tipo_cliente = arr_entra[curr].tipo_cliente AND
a.sec_cliente = arr_entra[curr].sec_cliente AND
a.tipo_cliente = b.tipo_cliente AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD tipo_cliente
END IF
LET arr_entra[curr].borrar='N'
DISPLAY arr_entra[curr].nombre TO s_datos[scr_l].nombre
END IF
AFTER FIELD limite_cr_cliente
IF arr_entra[curr].limite_cr_cliente IS NOT NULL THEN
IF arr_entra[curr].pventas = 1 THEN
LET arr_entra[curr].tasa = 1
ELSE
SELECT a.prima INTO arr_entra[curr].tasa FROM vetb00019 a
WHERE disponible = "S"
END IF
LET arr_entra[curr].limite_cr_rd = arr_entra[curr].tasa * arr_entra[curr].limite_cr_cliente
END IF
ON ACTION guardar
# LET total_cr = 0
# FOR idx = 1 TO arr_Entra.getLength()
# IF arr_entra[idx].nombre IS NOT NULL AND arr_entra[idx].borrar = 'N' THEN
# LET total_cr = arr_entra[idx].limite_cr_rd + total_cr
# END IF
# END FOR
# IF total_cr <> centra.limite_cr_grupo THEN
# CALL fgl_winmessage("INFO","LIMITE DE CREDITO CLIENTES DIFIERE DEL TOTAL","INFO")
# NEXT FIELD limite_cr_grupo
# END IF
#LET centra.limite_cr_grupo = total_cr
IF operacion = "N" THEN
SELECT MAX(a.codigo_grupo) INTO secuencia FROM vetb00054 a
IF secuencia IS NULL THEN
LET secuencia = 0
END IF
LET centra.codigo_grupo = secuencia + 1
IF centra.limite_cr_grupo IS NULL THEN
LET centra.limite_cr_grupo = 0
END IF
IF centra.tipo_grupo IS NULL THEN
LET centra.tipo_grupo=1
END IF
BEGIN WORK
INSERT INTO vetb00054 (codigo_grupo,tipo_grupo,limite_cr_grupo,descripcion,us_crea,fech_crea,cond_pago)
VALUES (centra.codigo_grupo,centra.tipo_grupo,centra.limite_cr_grupo,centra.descripcion,usuarios,getdate(),
centra.cond_pago)
FOR idx =1 TO arr_count()
IF arr_entra[idx].sec_cliente IS NOT NULL THEN
IF arr_entra[idx].borrar = "S" THEN
CALL borra_row(arr_entra[idx].idrow)
END IF
SELECT DISTINCT a.tipo_cliente FROM vetb00052 a WHERE a.tipo_cliente = arr_entra[idx].tipo_cliente AND
a.sec_cliente = arr_entra[idx].sec_cliente AND
a.codigo_grupo <> centra.codigo_grupo
IF STATUS <> NOTFOUND THEN
ROLLBACK WORK
CALL fgl_winmessage("INFO","CLIENTE ESTA ASIGNADO A OTRO GRUPO, NO PUEDES ADICIONARLO A ESTE","INFO")
NEXT FIELD tipo_cliente
END IF
INSERT INTO vetb00052 (codigo_grupo,tipo_cliente,sec_cliente,centra.descripcion,us_crea,
fech_crea,tasa,limite_cr_rd,ventas)
VALUES (centra.codigo_grupo,arr_entra[idx].tipo_cliente,
arr_entra[idx].sec_cliente,centra.descripcion,
usuarios,getdate(),arr_entra[idx].tasa,arr_entra[idx].limite_cr_rd,
arr_entra[idx].pventas)
# UPDATE vetb00004 SET limite_credito = arr_entra[idx].limite_cr_cliente
# WHERE tipo_cliente = arr_entra[idx].tipo_cliente AND sec_cliente = arr_entra[idx].sec_cliente
END IF
END FOR
CALL msg(13)
COMMIT WORK
ELSE
IF centra.tipo_grupo IS NULL THEN
LET centra.tipo_grupo = 1
END IF
IF centra.limite_cr_grupo IS NULL THEN
LET centra.limite_cr_grupo = 0
END IF
BEGIN WORK
UPDATE vetb00054 SET cond_pago = centra.cond_pago,
limite_cr_grupo = centra.limite_cr_grupo,
descripcion = centra.descripcion,
tipo_grupo = centra.tipo_grupo,
us_mod = usuarios,
fech_mod = getdate()
WHERE codigo_grupo = centra.codigo_grupo
FOR idx =1 TO arr_count()
IF arr_entra[idx].sec_cliente IS NOT NULL THEN
IF arr_entra[idx].borrar = "S" THEN
CALL borra_row(arr_entra[idx].idrow)
ELSE
SELECT DISTINCT a.tipo_cliente FROM vetb00052 a WHERE a.tipo_cliente = arr_entra[idx].tipo_cliente
AND a.sec_cliente=arr_entra[idx].sec_cliente
IF STATUS = NOTFOUND THEN
SELECT a.tipo_cliente FROM vetb00052 a WHERE a.tipo_cliente = arr_entra[idx].tipo_cliente AND
a.sec_cliente = arr_entra[idx].sec_cliente AND
a.codigo_grupo <> centra.codigo_grupo
IF STATUS <> NOTFOUND THEN
ROLLBACK WORK
CALL fgl_winmessage("INFO","CLIENTE ESTA ASIGNADO A OTRO GRUPO, NO PUEDES ADICIONARLO A ESTE","INFO")
NEXT FIELD tipo_cliente
END IF
INSERT INTO vetb00052 (codigo_grupo,tipo_cliente,sec_cliente,centra.descripcion,us_crea,
fech_crea,ventas,tasa,limite_cr_rd)
VALUES (centra.codigo_grupo,arr_entra[idx].tipo_cliente,
arr_entra[idx].sec_cliente,centra.descripcion,
usuarios,getdate(),arr_entra[idx].pventas,arr_entra[idx].tasa,arr_entra[idx].limite_cr_rd)
ELSE
UPDATE vetb00052 SET limite_cr_rd = arr_entra[idx].limite_cr_rd
WHERE codigo_grupo = centra.codigo_grupo AND tipo_cliente = arr_entra[idx].tipo_cliente AND
sec_cliente = arr_entra[idx].sec_cliente
END IF
# UPDATE vetb00004 SET limite_credito = arr_entra[idx].limite_cr_cliente
# WHERE tipo_cliente = arr_entra[idx].tipo_cliente AND sec_cliente = arr_entra[idx].sec_cliente
END IF
END IF
END FOR
CALL msg(13)
COMMIT WORK
END IF
CALL lista_grupos()
END INPUT
ON ACTION nuevo
LET operacion = "N"
CALL arr_entra.clear()
INITIALIZE centra.* TO NULL
NEXT FIELD descripcion
ON ACTION CANCEL
EXIT PROGRAM
END DIALOG
CLOSE WINDOW sucursales
END FUNCTION
FUNCTION lista_grupos()
CALL arr_lista.clear()
DECLARE busca_grupos CURSOR FOR
SELECT CAST(a.codigo_grupo AS varchar(12))+'-'+a.descripcion,a.limite_cr_GRUPO,b.descrip,
a.status_t,a.codigo_grupo,a.descripcion
FROM vetb00054 a LEFT OUTER JOIN vetb00012 b ON a.cond_pago = b.cond_pago
ORDER BY a.descripcion
LET idx = 1
FOREACH busca_grupos INTO arr_lista[idx].*
IF arr_lista[idx].estado IS NULL THEN
LET arr_lista[idx].estado = 'ACTIVO'
ELSE
LET arr_lista[idx].estado = 'DESACTIVADO'
END IF
LET idx = idx + 1
END FOREACH
END FUNCTION
FUNCTION borra_row(id1)
DEFINE id1 INT
DISPLAY "borrar ",id1
DELETE FROM vetb00052 WHERE idrow = id1
END FUNCTION
FUNCTION desactiva(codigo_Grupo1)
DEFINE codigo_grupo1 INT
UPDATE vetb00054 SET status_t = 'E',fech_mod = getdate() WHERE codigo_grupo = codigo_grupo1
CALL fgl_winmessage("INFO","GRUPO DESACTIVADO","INFO")
END FUNCTION
FUNCTION activar(codigo_Grupo1)
DEFINE codigo_grupo1 INT
UPDATE vetb00054 SET status_t = NULL,fech_mod = getdate() WHERE codigo_grupo = codigo_grupo1
CALL fgl_winmessage("INFO","GRUPO ACTIVADO","INFO")
END FUNCTION