Files
MBS/PROYECTO/addir/adprmt012.4gl
T

457 lines
15 KiB
Plaintext

{
------------------------------------------------------------------------
PROGRAMA : ADPRMT012
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Referencias Personales del Solicitante
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Junio 02, 1993
------------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
let usuarios = "kpolanco"
let clave = "RevolutionX3"
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL adprmt012()
END MAIN
FUNCTION adprmt012()
CLEAR SCREEN
OPTIONS
FORM LINE 8,
ERROR LINE 24,
COMMENT LINE 23
OPEN FORM adfmmt012 FROM "adfmmt012"
DISPLAY FORM adfmmt012
DISPLAY "REFERENCIAS PERSONALES" AT 4,30 ATTRIBUTE(RED)
# DISPLAY "Referencias Personales" AT 6,32 ATTRIBUTE(BLACK)
DISPLAY "Personal Reference" AT 6,32 ATTRIBUTE(BLACK)
MENU
ON ACTION buscar
let int_flag = false
CALL adpcad012()
ON ACTION Salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION adpcad012()
# WHENEVER ERROR CONTINUE
## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO
LABEL vuelve:
INPUT BY NAME refiere.cod_sol
## VERIFICA QUE EL REGISTRO NO ESTE DUPLICADO Y ADEMAS QUE EL SOLICITANTE
## EXISTA EN LA TABLA DE DATOS BASICOS
AFTER FIELD cod_sol
IF refiere.cod_sol IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sol
ELSE
SELECT UNIQUE cod_sol INTO refiere.cod_sol FROM adtb00014
WHERE cod_sol = refiere.cod_sol
IF STATUS >= 0 THEN
IF STATUS != NOTFOUND THEN
IF refiere.status_t = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD cod_sol
END IF
DISPLAY BY NAME refiere.cod_sol
LET numero_msg = 12
CALL msg(numero_msg)
LET refiere.cod_sol = NULL
CLEAR FORM
NEXT FIELD cod_sol
END IF
ELSE
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
END IF
SELECT UNIQUE cod_sol INTO basico.cod_sol FROM adtb00012
WHERE cod_sol = refiere.cod_sol and status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_sol
END IF
SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol
INTO nombre1,nombre2,apellido1,apellido2
FROM adtb00012
WHERE cod_sol = refiere.cod_sol and status_t IS NULL
LET nombre = nombre1 clipped," ",nombre2 clipped," ",
apellido1 clipped," ",apellido2 clipped
DISPLAY BY NAME nombre
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
END INPUT
## INTRODUCE LA INFORMACION DE LAS REFERENCIAS PERSONALES
FOR idx = 1 to 4
LET arr_ref[idx].nom_ref = NULL
LET arr_ref[idx].anos_rel = NULL
LET arr_ref[idx].telefono = NULL
LET arr_ref[idx].calle = NULL
LET arr_ref[idx].casa_num = NULL
LET arr_ref[idx].barrio = NULL
LET arr_ref[idx].urbanizacion = NULL
DISPLAY arr_ref[idx].nom_ref to consart[idx].nom_ref
DISPLAY arr_ref[idx].anos_rel to consart[idx].anos_rel
DISPLAY arr_ref[idx].telefono to consart[idx].telefono
DISPLAY arr_ref[idx].calle to consart[idx].calle
DISPLAY arr_ref[idx].casa_num to consart[idx].casa_num
DISPLAY arr_ref[idx].barrio to consart[idx].barrio
DISPLAY arr_ref[idx].urbanizacion to consart[idx].urbanizacion
END FOR
INPUT ARRAY arr_ref FROM consart.*
AFTER FIELD nom_ref
LET curr = arr_curr()
LET scr_l = scr_line()
IF arr_ref[curr].nom_ref IS NOT NULL THEN
LET control = "N"
CALL repita()
IF control = "S" THEN
NEXT FIELD nom_ref
END IF
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
EXIT INPUT
END INPUT
## SI NO OCURRE NINGUN ERROR SE PROCEDE A INSERTAR EL REGISTRO
FOR idx = 1 to arr_count()
IF arr_ref[idx].nom_ref IS not NULL THEN
INSERT INTO adtb00014
VALUES (refiere.cod_sol,arr_ref[idx].nom_ref,
arr_ref[idx].anos_rel,arr_ref[idx].telefono,
arr_ref[idx].calle,arr_ref[idx].casa_num,
arr_ref[idx].barrio,arr_ref[idx].urbanizacion,null,SUSER_SNAME (),
GETDATE,null,null)
END IF
END FOR
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
IF STATUS < 0 THEN
CLEAR FORM
END IF
GOTO vuelve
END FUNCTION
FUNCTION adpcmf012()
## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA LA
## MODIFICACION DE REGISTROS
DEFINE usuarios RECORD
us_crea CHAR(9),
fech_crea LIKE adtb00014.fech_crea
END RECORD
# WHENEVER ERROR CONTINUE
CONSTRUCT criterio ON cod_sol FROM cod_sol
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET SELEC =
"SELECT UNIQUE cod_sol FROM adtb00014 ",
"WHERE status_t IS NULL and ",criterio clipped,
" ORDER BY 1"
PREPARE busca FROM selec
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos INTO refiere.*
IF STATUS >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
END IF
## SELECCIONA EL NOMBRE DEL SOLICITANTE Y LO DESPLEGA
SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol
INTO nombre1,nombre2,apellido1,apellido2
FROM adtb00012
WHERE cod_sol = refiere.cod_sol
LET nombre =
nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped
DISPLAY BY NAME refiere.cod_sol,nombre
MENU "OPCION"
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO refiere.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
## SELECCIONA EL NOMBRE DEL SOLICITANTE Y LO DESPLEGA
SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol
INTO nombre1,nombre2,apellido1,apellido2
FROM adtb00012
WHERE cod_sol = refiere.cod_sol
LET nombre =
nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped
DISPLAY BY NAME refiere.cod_sol,nombre
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO refiere.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
## SELECCIONA EL NOMBRE DEL SOLICITANTE Y LO DESPLEGA
SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol
INTO nombre1,nombre2,apellido1,apellido2
FROM adtb00012
WHERE cod_sol = refiere.cod_sol
LET nombre =
nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped
DISPLAY BY NAME refiere.cod_sol,nombre
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO refiere.*
## SELECCIONA EL NOMBRE DEL SOLICITANTE Y LO DESPLEGA
SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol
INTO nombre1,nombre2,apellido1,apellido2
FROM adtb00012
WHERE cod_sol = refiere.cod_sol
LET nombre =
nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped
DISPLAY BY NAME refiere.cod_sol,nombre
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO refiere.*
## SELECCIONA EL NOMBRE DEL SOLICITANTE Y LO DESPLEGA
SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol
INTO nombre1,nombre2,apellido1,apellido2
FROM adtb00012
WHERE cod_sol = refiere.cod_sol
LET nombre =
nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped
DISPLAY BY NAME refiere.cod_sol,nombre
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger" "<Esc> Actualiza Registro <Ctrl-C> Cancela Operacion"
## AQUI SE PROCEDE A MODIFICAR EL REGISTRO
FOR idx = 1 to 4
LET arr_ref[idx].nom_ref = NULL
LET arr_ref[idx].anos_rel = NULL
LET arr_ref[idx].telefono = NULL
LET arr_ref[idx].calle = NULL
LET arr_ref[idx].casa_num = NULL
LET arr_ref[idx].barrio = NULL
LET arr_ref[idx].urbanizacion = NULL
DISPLAY arr_ref[idx].nom_ref to consart[idx].nom_ref
DISPLAY arr_ref[idx].anos_rel to consart[idx].anos_rel
DISPLAY arr_ref[idx].telefono to consart[idx].telefono
DISPLAY arr_ref[idx].calle to consart[idx].calle
DISPLAY arr_ref[idx].barrio to consart[idx].barrio
DISPLAY arr_ref[idx].urbanizacion to consart[idx].urbanizacion
END FOR
## SE SELECCIONAN LOS CAMPOS DEL ARREGLO
DECLARE buscando CURSOR FOR
SELECT a.nom_ref,a.anos_rel,a.telefono,a.calle,a.casa_num,
a.barrio,a.urbanizacion
FROM adtb00014 a,adtb00012 b
WHERE a.cod_sol = b.cod_sol and a.cod_sol = refiere.cod_sol and
a.status_t IS NULL
LET idx = 1
FOREACH buscando INTO arr_ref[idx].*
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
EXIT FOREACH
END IF
LET idx = idx + 1
END FOREACH
CALL SET_COUNT(idx - 1)
INPUT ARRAY arr_ref WITHOUT DEFAULTS FROM consart.*
AFTER FIELD nom_ref
LET curr = arr_curr()
LET scr_l = scr_line()
## VERIFICA QUE NO SE REPITA EL NOMBRE DE LA REFERENCIA PERSONAL
IF arr_ref[curr].nom_ref IS NOT NULL THEN
LET control = "N"
CALL repita()
IF control = "S" THEN
NEXT FIELD nom_ref
END IF
END IF
AFTER INPUT
IF STATUS < 0 THEN
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
EXIT INPUT
END INPUT
## AQUI SE ACTUALIZAN LOS REGISTROS
DELETE FROM adtb00014
WHERE cod_sol = refiere.cod_sol
FOR idx = 1 to arr_count()
IF arr_ref[idx].nom_ref IS not NULL THEN
INSERT INTO adtb00014
VALUES (refiere.cod_sol,arr_ref[idx].nom_ref,arr_ref[idx].anos_rel,
arr_ref[idx].telefono,arr_ref[idx].calle,
arr_ref[idx].casa_num,arr_ref[idx].barrio,
arr_ref[idx].urbanizacion,null,SUSER_SNAME (),GETDATE,null,null)
END IF
END FOR
LET numero_msg = 13
CALL msg(numero_msg)
IF STATUS < 0 THEN
END IF
## AQUI SE ELIMINAN LOS REGISTROS
COMMAND KEY ("L") "eLiminar"
UPDATE adtb00014 SET status_t = "E"
WHERE cod_sol = refiere.cod_sol
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar" "Retorna al menu anterior"
CLEAR FORM
FOR idx = 1 to 4
LET arr_ref[idx].nom_ref = NULL
LET arr_ref[idx].anos_rel = NULL
LET arr_ref[idx].telefono = NULL
LET arr_ref[idx].calle = NULL
LET arr_ref[idx].casa_num = NULL
LET arr_ref[idx].barrio = NULL
LET arr_ref[idx].urbanizacion = NULL
DISPLAY arr_ref[idx].nom_ref to consart[idx].nom_ref
DISPLAY arr_ref[idx].anos_rel to consart[idx].anos_rel
DISPLAY arr_ref[idx].telefono to consart[idx].telefono
DISPLAY arr_ref[idx].calle to consart[idx].calle
DISPLAY arr_ref[idx].casa_num to consart[idx].casa_num
DISPLAY arr_ref[idx].barrio to consart[idx].barrio
DISPLAY arr_ref[idx].urbanizacion to consart[idx].urbanizacion
END FOR
EXIT MENU
END MENU
END FUNCTION
## VERIFICA QUE NO SE REPITA LA PERSONA DE REFERENCIA
FUNCTION repita()
DEFINE ref_ant RECORD
nom_ref CHAR(30)
END RECORD
LET ref_ant.nom_ref = arr_ref[curr].nom_ref
FOR idx = 1 to arr_count()
IF idx != curr THEN
IF arr_ref[idx].nom_ref IS NOT NULL THEN
IF arr_ref[idx].nom_ref = ref_ant.nom_ref THEN
LET numero_msg = 136
CALL msg(numero_msg)
LET control = "S"
ELSE
IF control != "S" THEN
LET control = "N"
END IF
END IF
END IF
END IF
END FOR
END FUNCTION