347 lines
14 KiB
Plaintext
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 |