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

541 lines
20 KiB
Plaintext

{
------------------------------------------------------------------------
PROGRAMA : ADPRMT015
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Experiencias de Trabajo
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Junio 07, 1993
------------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
DEFINE cuento INTEGER
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 adprmt015()
END MAIN
FUNCTION adprmt015()
CLEAR SCREEN
OPTIONS
FORM LINE 8,
ERROR LINE 24,
COMMENT LINE 23
OPEN FORM adfmmt015 FROM "adfmmt015"
DISPLAY FORM adfmmt015
DISPLAY "EXPERIENCIA LABORAL" AT 4,33 ATTRIBUTE(RED)
# DISPLAY "Experiencias de Trabajo" AT 6,32 ATTRIBUTE(BLACK)
DISPLAY "Job Experience" AT 6,35 ATTRIBUTE(BLACK)
MENU
ON ACTION nuevo
let int_flag = false
INITIALIZE emplea.* TO NULL
CALL adpcad015()
ON ACTION buscar
let int_flag = false
CALL adpcmf015()
ON ACTION Salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION adpcad015()
# # WHENEVER ERROR CONTINUE
## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO
LABEL vuelve:
INPUT BY NAME labor.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 labor.cod_sol IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sol
ELSE
SELECT UNIQUE cod_sol INTO labor.cod_sol FROM adtb00016
WHERE cod_sol = labor.cod_sol
IF status >= 0 THEN
IF status != NOTFOUND THEN
IF labor.status_t = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD cod_sol
END IF
DISPLAY BY NAME labor.cod_sol
LET numero_msg = 12
CALL msg(numero_msg)
LET labor.cod_sol = NULL
CLEAR FORM
NEXT FIELD cod_sol
END IF
ELSE
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
END IF
SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol
INTO nombre1,nombre2,apellido1,apellido2
FROM adtb00012
WHERE cod_sol = labor.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
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 REFERENTE A LAS EXPERIENCIAS LABORALES Y LOS
## RETIROS DE EMPLEOS ANTERIORES
FOR idx = 1 to 2
LET arr_labor[idx].nom_empr = NULL
LET arr_labor[idx].calle = NULL
LET arr_labor[idx].casa_num = NULL
LET arr_labor[idx].barrio = NULL
LET arr_labor[idx].urbanizacion = NULL
LET arr_labor[idx].cod_puesto = NULL
LET arr_labor[idx].nom_puesto = NULL
LET arr_labor[idx].sueldo = NULL
LET arr_labor[idx].ano_ini = NULL
LET arr_labor[idx].ano_fin = NULL
LET arr_labor[idx].desc_retiro = NULL
DISPLAY arr_labor[idx].nom_empr to consart[idx].nom_empr
DISPLAY arr_labor[idx].calle to consart[idx].calle
DISPLAY arr_labor[idx].casa_num to consart[idx].casa_num
DISPLAY arr_labor[idx].barrio to consart[idx].barrio
DISPLAY arr_labor[idx].urbanizacion to consart[idx].urbanizacion
DISPLAY arr_labor[idx].cod_puesto to consart[idx].cod_puesto
DISPLAY arr_labor[idx].nom_puesto to consart[idx].nom_puesto
DISPLAY arr_labor[idx].sueldo to consart[idx].sueldo
DISPLAY arr_labor[idx].ano_ini to consart[idx].ano_ini
DISPLAY arr_labor[idx].ano_fin to consart[idx].ano_fin
DISPLAY arr_labor[idx].desc_retiro to consart[idx].desc_retiro
END FOR
INPUT ARRAY arr_labor FROM consart.*
## VENTANA QUE BUSCA EL PUESTO
ON KEY (CONTROL-W)
LET curr1 = arr_curr()
LET scr_l = scr_line()
CASE
WHEN INFIELD (cod_puesto)
CALL busca_puesto()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
NEXT FIELD cod_puesto
END IF
LET arr_labor[curr1].cod_puesto = req_per.cod_puesto_r
SELECT @nom_puesto INTO puesto.nom_puesto
FROM adtb00004
WHERE @cod_puesto = arr_labor[curr1].cod_puesto and
status_t is null
LET arr_labor[curr1].nom_puesto = puesto.nom_puesto
DISPLAY arr_labor[curr1].cod_puesto to consart[scr_l].cod_puesto
DISPLAY arr_labor[curr1].nom_puesto to consart[scr_l].nom_puesto
NEXT FIELD sueldo
END CASE
BEFORE ROW
LET curr1 = arr_curr()
LET scr_l = scr_line()
## VERIFICA QUE EL PUESTO EXISTA EN EL CATALOGO DE PUESTOS
AFTER FIELD cod_puesto
IF arr_labor[curr1].cod_puesto IS NOT NULL THEN
SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004
WHERE @cod_puesto = arr_labor[curr1].cod_puesto
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_puesto
END IF
LET arr_labor[curr1].nom_puesto = puesto.nom_puesto
DISPLAY arr_labor[curr1].nom_puesto to consart[scr_l].nom_puesto
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()
INSERT INTO adtb00016
VALUES (labor.cod_sol,arr_labor[idx].nom_empr,arr_labor[idx].calle,
arr_labor[idx].casa_num,arr_labor[idx].barrio,
arr_labor[idx].urbanizacion,arr_labor[idx].cod_puesto,
arr_labor[idx].sueldo,arr_labor[idx].ano_ini,
arr_labor[idx].ano_fin,arr_labor[idx].desc_retiro,null,
SUSER_SNAME (),GETDATE (),null,null)
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 adpcmf015()
## 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 adtb00016.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 adtb00016 ",
"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 labor.*
IF status >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
END IF
SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol
INTO nombre1,nombre2,apellido1,apellido2
FROM adtb00012
WHERE cod_sol = labor.cod_sol
LET nombre =
nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped
SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004
WHERE @cod_puesto = labor.cod_puesto
DISPLAY BY NAME labor.cod_sol,nombre,puesto.nom_puesto
MENU "OPCION"
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO labor.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol
INTO nombre1,nombre2,apellido1,apellido2
FROM adtb00012
WHERE cod_sol = labor.cod_sol
LET nombre =
nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped
SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004
WHERE @cod_puesto = labor.cod_puesto
DISPLAY BY NAME labor.cod_sol,nombre,puesto.nom_puesto
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO labor.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol
INTO nombre1,nombre2,apellido1,apellido2
FROM adtb00012
WHERE cod_sol = labor.cod_sol
LET nombre =
nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped
SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004
WHERE @cod_puesto = labor.cod_puesto
DISPLAY BY NAME labor.cod_sol,nombre,puesto.nom_puesto
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO labor.*
SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol
INTO nombre1,nombre2,apellido1,apellido2
FROM adtb00012
WHERE cod_sol = labor.cod_sol
LET nombre =
nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped
SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004
WHERE @cod_puesto = labor.cod_puesto
DISPLAY BY NAME labor.cod_sol,nombre,puesto.nom_puesto
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO labor.*
SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol
INTO nombre1,nombre2,apellido1,apellido2
FROM adtb00012
WHERE cod_sol = labor.cod_sol
LET nombre =
nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped
SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004
WHERE @cod_puesto = labor.cod_puesto
DISPLAY BY NAME labor.cod_sol,nombre,puesto.nom_puesto
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger"
"<Esc> Actualiza Registro <Ctrl-C> Cancela Operacion"
## AQUI SE MODIFICAN LOS CAMPOS DEL ARREGLO
FOR idx = 1 to 2
LET arr_labor[idx].nom_empr = NULL
LET arr_labor[idx].calle = NULL
LET arr_labor[idx].casa_num = NULL
LET arr_labor[idx].barrio = NULL
LET arr_labor[idx].urbanizacion = NULL
LET arr_labor[idx].cod_puesto = NULL
LET arr_labor[idx].nom_puesto = NULL
LET arr_labor[idx].sueldo = NULL
LET arr_labor[idx].ano_ini = NULL
LET arr_labor[idx].ano_fin = NULL
LET arr_labor[idx].desc_retiro = NULL
DISPLAY arr_labor[idx].nom_empr to consart[idx].nom_empr
DISPLAY arr_labor[idx].calle to consart[idx].calle
DISPLAY arr_labor[idx].casa_num to consart[idx].casa_num
DISPLAY arr_labor[idx].barrio to consart[idx].barrio
DISPLAY arr_labor[idx].urbanizacion to consart[idx].urbanizacion
DISPLAY arr_labor[idx].cod_puesto to consart[idx].cod_puesto
DISPLAY arr_labor[idx].nom_puesto to consart[idx].nom_puesto
DISPLAY arr_labor[idx].sueldo to consart[idx].sueldo
DISPLAY arr_labor[idx].ano_ini to consart[idx].ano_ini
DISPLAY arr_labor[idx].ano_fin to consart[idx].ano_fin
DISPLAY arr_labor[idx].desc_retiro to consart[idx].desc_retiro
END FOR
## SE SELECCIONAN LOS CAMPOS DEL ARREGLO
DECLARE localizar CURSOR FOR
SELECT a.nom_empr,a.cod_puesto,b.nom_puesto,a.calle,a.casa_num,
a.barrio,a.urbanizacion,a.sueldo,a.ano_ini,a.ano_fin,
a.desc_retiro
FROM adtb00016 a,adtb00012 c,adtb00004 b
WHERE a.cod_sol = c.cod_sol and a.cod_sol = labor.cod_sol and
a.cod_puesto = b.cod_puesto and a.status_t is null
LET idx = 1
FOREACH localizar INTO arr_labor[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_labor WITHOUT DEFAULTS FROM consart.*
## VENTANA QUE BUSCA LOS PUESTOS
ON KEY (CONTROL-W)
LET curr1 = arr_curr()
LET scr_l = scr_line()
CASE
WHEN INFIELD (cod_puesto)
CALL busca_puesto()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
NEXT FIELD cod_puesto
END IF
LET arr_labor[curr1].cod_puesto = req_per.cod_puesto_r
SELECT @nom_puesto INTO puesto.nom_puesto
FROM adtb00004
WHERE @cod_puesto = arr_labor[curr1].cod_puesto and
status_t is null
LET arr_labor[curr1].nom_puesto = puesto.nom_puesto
DISPLAY arr_labor[curr1].cod_puesto to consart[scr_l].cod_puesto
DISPLAY arr_labor[curr1].nom_puesto to consart[scr_l].nom_puesto
NEXT FIELD sueldo
END CASE
BEFORE ROW
LET curr1 = arr_curr()
LET scr_l = scr_line()
## VERIFICA QUE EL PUESTO EXISTA EN EL CATALOGO DE PUESTOS
AFTER FIELD cod_puesto
IF arr_labor[curr1].cod_puesto IS NOT NULL THEN
SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004
WHERE @cod_puesto = arr_labor[curr].cod_puesto
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_puesto
END IF
LET arr_labor[curr1].nom_puesto = puesto.nom_puesto
DISPLAY arr_labor[curr1].nom_puesto to consart[scr_l].nom_puesto
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 adtb00016
WHERE cod_sol = labor.cod_sol
LET cuento = arr_count()
IF cuento > 0 THEN
FOR idx = 1 to arr_count()
INSERT INTO adtb00016 VALUES (labor.cod_sol,arr_labor[idx].nom_empr,
arr_labor[idx].calle,arr_labor[idx].casa_num,
arr_labor[idx].barrio,arr_labor[idx].urbanizacion,
arr_labor[idx].cod_puesto,arr_labor[idx].sueldo,
arr_labor[idx].ano_ini,arr_labor[idx].ano_fin,
arr_labor[idx].desc_retiro,null,SUSER_SNAME (),GETDATE (),null,null)
END FOR
ELSE
INSERT INTO adtb00016 VALUES (labor.cod_sol,arr_labor[idx].nom_empr,
arr_labor[idx].calle,arr_labor[idx].casa_num,
arr_labor[idx].barrio,arr_labor[idx].urbanizacion,
arr_labor[idx].cod_puesto,arr_labor[idx].sueldo,
arr_labor[idx].ano_ini,arr_labor[idx].ano_fin,
arr_labor[idx].desc_retiro,null,SUSER_SNAME (),GETDATE (),null,null)
END IF
LET numero_msg = 13
CALL msg(numero_msg)
IF status < 0 THEN
END IF
## AQUI SE ELIMINAN LOS REGISTROS
COMMAND KEY ("L") "eLiminar"
UPDATE adtb00016 SET status_t = "E"
WHERE cod_sol = labor.cod_sol
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
"Retorna al menu anterior"
CLEAR FORM
FOR idx = 1 to 2
LET arr_labor[idx].nom_empr = NULL
LET arr_labor[idx].calle = NULL
LET arr_labor[idx].casa_num = NULL
LET arr_labor[idx].barrio = NULL
LET arr_labor[idx].urbanizacion = NULL
LET arr_labor[idx].cod_puesto = NULL
LET arr_labor[idx].nom_puesto = NULL
LET arr_labor[idx].sueldo = NULL
LET arr_labor[idx].ano_ini = NULL
LET arr_labor[idx].ano_fin = NULL
LET arr_labor[idx].desc_retiro = NULL
DISPLAY arr_labor[idx].nom_empr to consart[idx].nom_empr
DISPLAY arr_labor[idx].calle to consart[idx].calle
DISPLAY arr_labor[idx].casa_num to consart[idx].casa_num
DISPLAY arr_labor[idx].barrio to consart[idx].barrio
DISPLAY arr_labor[idx].urbanizacion to consart[idx].urbanizacion
DISPLAY arr_labor[idx].cod_puesto to consart[idx].cod_puesto
DISPLAY arr_labor[idx].nom_puesto to consart[idx].nom_puesto
DISPLAY arr_labor[idx].sueldo to consart[idx].sueldo
DISPLAY arr_labor[idx].ano_ini to consart[idx].ano_ini
DISPLAY arr_labor[idx].ano_fin to consart[idx].ano_fin
DISPLAY arr_labor[idx].desc_retiro to consart[idx].desc_retiro
END FOR
EXIT MENU
END MENU
END FUNCTION