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

258 lines
7.5 KiB
Plaintext

{
------------------------------------------------------------------------
PROGRAMA : ADPRMT013
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Datos Familiares y Dependientes del Solicitante
PROGRAMADOR : Tadeo A. Ferreras F.
FECHA REALIZACION : Noviembre 02, 1995
------------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
DEFINE datos_p13 RECORD
cod_sol INTEGER,
nombre1 CHAR(30)
END RECORD,
arr_reg13 ARRAY[200] OF RECORD
cod_par INTEGER,
sec_par INTEGER,
nombre CHAR(30),
cedula CHAR(20),
sexo CHAR(1),
fecha DATE
END RECORD
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 adprmt013()
END MAIN
FUNCTION adprmt013()
CLEAR SCREEN
OPTIONS
FORM LINE 8,
ERROR LINE 24,
COMMENT LINE 23
DISPLAY "adprmt013" AT 4,3 ATTRIBUTE (RED)
# DISPLAY "Dependientes de Solicitante" AT 6,26 ATTRIBUTE(BLACK)
DISPLAY "Applicant's Dependents" AT 6,30 ATTRIBUTE(BLACK)
OPEN FORM adfmmt013 FROM "adfmmt013"
DISPLAY FORM adfmmt013
MENU
ON ACTION buscar
let int_flag = false
CALL adpcad013()
ON ACTION Salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION adpcmf013()
## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA CONSULTA Y
## MODIFICACION DE REGISTROS
# # WHENEVER ERROR CONTINUE
CONSTRUCT criterio ON a.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 a.cod_sol,a.nombre ",
"FROM adtb00013 a ",
"WHERE (a.status_t IS NULL) AND ",criterio CLIPPED," AND ",
" (a.cod_par = 0 AND a.sec_par = 0) ORDER BY 1"
PREPARE comando FROM selec
DECLARE datos SCROLL CURSOR FOR comando
OPEN datos
FETCH FIRST datos INTO datos_p13.*
IF status >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
END IF
DISPLAY BY NAME datos_p13.*
MENU "OPCION"
COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO datos_p13.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
DISPLAY BY NAME datos_p13.*
COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO datos_p13.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
DISPLAY BY NAME datos_p13.*
COMMAND "Primero" "Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO datos_p13.*
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO datos_p13.*
LET numero_msg = 4
CALL msg(numero_msg)
DISPLAY BY NAME datos_p13.*
COMMAND "Escoger" "<Esc> Actualiza Registro <Ctrl-C> Cancela Operacion"
## SE SELECCIONAN LOS CAMPOS QUE PUEDEN SER MODIFICABLES
DECLARE busca CURSOR FOR
SELECT a.cod_par,a.sec_par,a.nombre,a.cedula,a.sexo,a.fecha_nac
FROM adtb00013 a
WHERE (a.status_t IS NULL ) AND (a.cod_sol = datos_p13.cod_sol) AND
(a.cod_par > 0 AND a.sec_par > 0) ORDER BY 1,2
LET idx = 1
FOREACH busca INTO arr_reg13[idx].*
LET idx = idx + 1
END FOREACH
CALL SET_COUNT(idx - 1)
INPUT ARRAY arr_reg13 WITHOUT DEFAULTS FROM scr_reg13.*
BEFORE ROW
LET curr = ARR_CURR()
LET fila = SCR_LINE()
AFTER FIELD cod_par
IF arr_reg13[curr].cod_par IS NOT NULL THEN
IF arr_reg13[curr].cod_par = 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_par
END IF
SELECT UNIQUE a.cod_par FROM adtb00025 a
WHERE a.cod_par = arr_reg13[curr].cod_par
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_par
END IF
END IF
AFTER FIELD sec_par
IF arr_reg13[curr].sec_par IS NOT NULL THEN
IF arr_reg13[curr].sec_par = 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD sec_par
END IF
FOR idx = 1 TO ARR_COUNT()
IF idx <> curr THEN
IF arr_reg13[idx].cod_par = arr_reg13[curr].cod_par AND
arr_reg13[idx].sec_par = arr_reg13[curr].sec_par THEN
ERROR "CODIGO EXISTE EN LA LINEA ",idx USING "<<<"
NEXT FIELD cod_par
END IF
END IF
END FOR
END IF
AFTER FIELD nombre
IF arr_reg13[curr].cod_par IS NOT NULL THEN
IF arr_reg13[curr].nombre IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD nombre
END IF
END IF
AFTER FIELD sexo
IF arr_reg13[curr].cod_par IS NOT NULL THEN
IF arr_reg13[curr].sexo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD sexo
END IF
END IF
### Controlando que la fecha no sea nula ni mayor a la fecha actual
AFTER FIELD fecha
IF arr_reg13[curr].cod_par IS NOT NULL AND
arr_reg13[curr].cod_par = 4 THEN
IF arr_reg13[curr].fecha IS NULL OR arr_reg13[curr].fecha>TODAY THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
END IF
END INPUT
#### Proceso Para Cancelar La Operacion
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET INT_FLAG = FALSE
RETURN
END IF
DELETE FROM adtb00013 WHERE @cod_sol = datos_p13.cod_sol AND @cod_par > 0
## AQUI SE MODIFICA Y ACTUALIZA LA INFORMACION DE LOS HIJOS DE LOS EMPLEADOS
FOR idx = 1 TO ARR_COUNT()
IF arr_reg13[idx].cod_par IS NOT NULL AND
arr_reg13[idx].sec_par IS NOT NULL THEN
INSERT INTO adtb00013
VALUES (datos_p13.cod_sol,arr_reg13[idx].cod_par,arr_reg13[idx].sec_par,
arr_reg13[idx].nombre,arr_reg13[idx].cedula,arr_reg13[idx].sexo,
arr_reg13[idx].fecha,NULL,SUSER_SNAME (),GETDATE (),NULL,NULL)
END IF
END FOR
LET numero_msg = 13
CALL msg(numero_msg)
COMMAND KEY ("L") "eLiminar"
UPDATE adtb00013 SET status_t = "E" WHERE cod_sol = datos_p13.cod_sol AND
cod_par > 0 AND sec_par > 0
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar" "Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION