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

1152 lines
43 KiB
Plaintext

{
----------------------------------------------------------------------------
PROGRAMA : ADPRMT016
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Proceso Seleccion y Contratacion de Personal
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Junio 07, 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 adprmt016()
END MAIN
FUNCTION adprmt016()
CLEAR SCREEN
OPTIONS
FORM LINE 8,
ERROR LINE 24,
COMMENT LINE 23
OPEN FORM adfmmt016 FROM "adfmmt016"
DISPLAY FORM adfmmt016
DISPLAY "adprmt016" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Control Proceso de Seleccion y Contratacion" AT 6,18 ATTRIBUTE(BLACK)
MENU
ON ACTION nuevo
let int_flag = false
INITIALIZE emplea.* TO NULL
CALL adpcad016()
ON ACTION buscar
let int_flag = false
CALL adpcmf016()
ON ACTION Salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION adpcad016()
{WHENEVER ERROR CONTINUE}
## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO
LABEL vuelve:
INPUT BY NAME proceso.*
## VENTANA QUE BUSCA LOS EMPLEADOS
ON KEY (CONTROL-W)
LET curr1 = arr_curr()
CASE
WHEN INFIELD (num_emp)
CALL busca_empleado()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
NEXT FIELD num_emp
END IF
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
LET descrip1 = nombre
LET proceso.num_emp = despl_emp[curr1].num_emp
LET proceso.departamento = despl_emp[curr1].departamento
LET proceso.nivel_emp = despl_emp[curr1].nivel_emp
LET proceso.cod_puesto = despl_emp[curr1].cod_puesto
DISPLAY BY NAME proceso.num_emp,proceso.departamento,
proceso.nivel_emp,proceso.cod_puesto,descrip1
NEXT FIELD num3_emp
WHEN INFIELD (num3_emp)
CALL busca_empleado()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
NEXT FIELD num3_emp
END IF
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num3_emp
END IF
LET descrip2 = nombre
LET proceso.num3_emp = despl_emp[curr1].num_emp
LET proceso.departamento3 = despl_emp[curr1].departamento
LET proceso.nivel3_emp = despl_emp[curr1].nivel_emp
LET proceso.cod3_puesto = despl_emp[curr1].cod_puesto
DISPLAY BY NAME proceso.num3_emp,proceso.departamento3,
proceso.nivel3_emp,proceso.cod3_puesto,
descrip2
NEXT FIELD recomendacion
WHEN INFIELD (num1_emp)
CALL busca_empleado()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
NEXT FIELD num1_emp
END IF
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num1_emp
END IF
LET descrip4 = nombre
LET proceso.num1_emp = despl_emp[curr1].num_emp
LET proceso.departamento1 = despl_emp[curr1].departamento
LET proceso.nivel1_emp = despl_emp[curr1].nivel_emp
LET proceso.cod1_puesto = despl_emp[curr1].cod_puesto
DISPLAY BY NAME proceso.num1_emp,proceso.departamento1,
proceso.nivel1_emp,proceso.cod1_puesto,
descrip4
NEXT FIELD num2_emp
WHEN INFIELD (num2_emp)
CALL busca_empleado()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
NEXT FIELD num2_emp
END IF
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num2_emp
END IF
LET descrip5 = nombre
LET proceso.num2_emp = despl_emp[curr1].num_emp
LET proceso.departamento2 = despl_emp[curr1].departamento
LET proceso.nivel2_emp = despl_emp[curr1].nivel_emp
LET proceso.cod2_puesto = despl_emp[curr1].cod_puesto
DISPLAY BY NAME proceso.num2_emp,proceso.departamento2,
proceso.nivel2_emp,proceso.cod2_puesto,
descrip5
NEXT FIELD cod2_puesto
END CASE
BEFORE FIELD fecha
LET proceso.fecha = today using "dd/mm/yyyy"
DISPLAY BY NAME proceso.fecha
## VERIFICA QUE EL REGISTRO NO ESTE DUPLICADO Y ADEMAS QUE EL SOLICITANTE
## EXISTA EN LA TABLA DE DATOS BASICOS
AFTER FIELD cod_sol
IF proceso.cod_sol IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sol
ELSE
SELECT UNIQUE fecha,cod_sol,num_emp,departamento,nivel_emp,
cod_puesto,num3_emp,departamento3,nivel3_emp,
cod3_puesto,recomendacion,otros_com,num1_emp,
departamento1,nivel1_emp,cod1_puesto,num2_emp,
departamento2,nivel2_emp,cod2_puesto,status_t
INTO proceso.*,p_status
FROM adtb00018
WHERE cod_sol = proceso.cod_sol
IF status >= 0 THEN
IF status != NOTFOUND THEN
IF p_status = "E" THEN
LET numero_msg = 36
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 = proceso.cod_sol and status_t is null
LET descrip3 = nombre1 clipped," ",nombre2 clipped," ",
apellido1 clipped," ",apellido2 clipped
SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
INTO nombre1,nombre2,apellido1,apellido2
FROM adtb00003
WHERE num_emp = proceso.num_emp and status_t is null
LET descrip1 = nombre1 clipped," ",nombre2 clipped," ", apellido1 clipped," ",apellido2 clipped
SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
INTO nombre3,nombre4,apellido3,apellido4
FROM adtb00003
WHERE num_emp = proceso.num3_emp and status_t is null
LET descrip2 = nombre3 clipped," ",nombre4 clipped," ",
apellido3 clipped," ",apellido4 clipped
SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
INTO nombre5,nombre6,apellido5,apellido6
FROM adtb00003
WHERE num_emp = proceso.num1_emp and status_t is null
LET descrip4 = nombre5 clipped," ",nombre6 clipped," ", apellido5 clipped," ",apellido6 clipped
SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
INTO nombre7,nombre8,apellido7,apellido8
FROM adtb00003
WHERE num_emp = proceso.num2_emp and status_t is null
LET descrip5 = nombre7 clipped," ",nombre8 clipped," ",
apellido7 clipped," ",apellido8 clipped
DISPLAY BY NAME proceso.*,descrip3,descrip1,descrip2,
descrip4,descrip5
LET numero_msg = 12
CALL msg(numero_msg)
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 = proceso.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 = proceso.cod_sol and status_t is null
LET descrip3 = nombre1 clipped," ",nombre2 clipped," ",
apellido1 clipped," ",apellido2 clipped
DISPLAY BY NAME descrip3
END IF
AFTER FIELD num_emp
IF proceso.num_emp IS NOT NULL THEN
SELECT departamento,nivel_emp,cod_puesto,nom1_emp,nom2_emp,
apell1_emp,apell2_emp
INTO proceso.departamento,proceso.nivel_emp,
proceso.cod_puesto,nombre1,nombre2,apellido1,apellido2
FROM adtb00003
WHERE num_emp = proceso.num_emp and status_t is null
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
LET descrip1 = nombre1 clipped," ",nombre2 clipped," ",
apellido1 clipped," ",apellido2 clipped
DISPLAY BY NAME proceso.departamento,proceso.nivel_emp,
proceso.cod_puesto,descrip1
NEXT FIELD num3_emp
AFTER FIELD num3_emp
IF proceso.num3_emp IS NOT NULL THEN
SELECT departamento,nivel_emp,cod_puesto,nom1_emp,nom2_emp,
apell1_emp,apell2_emp
INTO proceso.departamento3,proceso.nivel3_emp,
proceso.cod3_puesto,nombre3,nombre4,apellido3,apellido4
FROM adtb00003
WHERE num_emp = proceso.num3_emp and status_t is null
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num3_emp
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num3_emp
END IF
LET descrip2 = nombre3 clipped," ",nombre4 clipped," ",
apellido3 clipped," ",apellido4 clipped
DISPLAY BY NAME proceso.departamento3,proceso.nivel3_emp,
proceso.cod3_puesto,descrip2
NEXT FIELD recomendacion
AFTER FIELD recomendacion
IF proceso.recomendacion IS NOT NULL THEN
IF proceso.recomendacion = 1 THEN
LET verdad = "N"
CALL contrato()
IF verdad = "S" THEN
NEXT FIELD recomendacion
END IF
LET descrip = "ACEPTARLO"
END IF
IF proceso.recomendacion = 2 THEN
LET descrip = "MANTENERLO EN ARCHIVO"
END IF
IF proceso.recomendacion = 3 THEN
LET descrip = "NO LE INTERESA"
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD recomendacion
END IF
DISPLAY BY NAME descrip
AFTER FIELD num1_emp
IF proceso.num1_emp IS NOT NULL THEN
SELECT departamento,nivel_emp,cod_puesto,nom1_emp,nom2_emp,
apell1_emp,apell2_emp
INTO proceso.departamento1,proceso.nivel1_emp,
proceso.cod1_puesto,nombre5,nombre6,apellido5,apellido6
FROM adtb00003
WHERE num_emp = proceso.num1_emp and status_t is null
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num1_emp
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num1_emp
END IF
LET descrip4 = nombre5 clipped," ",nombre6 clipped," ",
apellido5 clipped," ",apellido6 clipped
DISPLAY BY NAME proceso.departamento1,proceso.nivel1_emp,
proceso.cod1_puesto,descrip4
NEXT FIELD num2_emp
AFTER FIELD num2_emp
IF proceso.num2_emp IS NOT NULL THEN
SELECT departamento,nivel_emp,cod_puesto,nom1_emp,nom2_emp,
apell1_emp,apell2_emp
INTO proceso.departamento2,proceso.nivel2_emp,
proceso.cod2_puesto,nombre7,nombre8,apellido7,apellido8
FROM adtb00003
WHERE num_emp = proceso.num2_emp and status_t is null
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num2_emp
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num2_emp
END IF
LET descrip5 = nombre7 clipped," ",nombre8 clipped," ",
apellido7 clipped," ",apellido8 clipped
DISPLAY BY NAME proceso.departamento2,proceso.nivel2_emp,
proceso.cod2_puesto,descrip5
EXIT INPUT
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
END INPUT
FOR idx = 1 to 3
LET arr_proceso[idx].cod_requi = NULL
LET arr_proceso[idx].requisito = NULL
LET arr_proceso[idx].ind_requi = NULL
DISPLAY arr_proceso[idx].cod_requi to consart[idx].cod_requi
DISPLAY arr_proceso[idx].requisito to consart[idx].requisito
DISPLAY arr_proceso[idx].ind_requi to consart[idx].ind_requi
END FOR
INPUT ARRAY arr_proceso FROM consart.*
## VENTANA QUE BUSCA LOS REQUISITOS DE SELECCION Y CONTRATACION
ON KEY (CONTROL-W)
LET curr = arr_curr()
LET scr_l = scr_line()
CASE
WHEN INFIELD (cod_requi)
CALL busca_requisito()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
NEXT FIELD cod_requi
END IF
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_requi
END IF
SELECT requisito INTO seleccion.requisito
FROM adtb00008
WHERE cod_requi = arr_proceso[curr].cod_requi and
status_t is null
LET arr_proceso[curr].requisito = seleccion.requisito
DISPLAY arr_proceso[curr].cod_requi to consart[scr_l].cod_requi
DISPLAY arr_proceso[curr].requisito to consart[scr_l].requisito
LET control = "N"
CALL repeticion()
IF control = "S" THEN
NEXT FIELD cod_requi
END IF
NEXT FIELD ind_requi
END CASE
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
## VERIFICA QUE LA ACCION A TOMAR EXISTA EN EL CATALOGO DE ACCIONES DE
## CONTRATACION Y SELECCION Y ADEMAS QUE LA ACCION NO SE REPITA
AFTER FIELD cod_requi
IF arr_proceso[curr].cod_requi IS NOT NULL THEN
LET control = "N"
CALL repeticion()
IF control = "S" THEN
NEXT FIELD cod_requi
END IF
SELECT @requisito INTO seleccion.requisito
FROM adtb00008
WHERE @cod_requi = arr_proceso[curr].cod_requi and status_t is null
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_requi
END IF
LET arr_proceso[curr].requisito = seleccion.requisito
DISPLAY arr_proceso[curr].requisito to consart[scr_l].requisito
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 DURANTE EL PROCESO SE PROCEDE A INSERTAR EL
## REGISTRO
FOR idx = 1 to arr_count()
IF arr_proceso[idx].cod_requi is not null and
arr_proceso[idx].requisito is not null and
arr_proceso[idx].ind_requi is not null THEN
INSERT INTO adtb00018
VALUES (proceso.fecha,proceso.cod_sol,proceso.num_emp,
proceso.departamento,proceso.nivel_emp,proceso.cod_puesto,
proceso.num3_emp,proceso.departamento3,proceso.nivel3_emp,
proceso.cod3_puesto,proceso.recomendacion,proceso.otros_com,
proceso.num1_emp,proceso.departamento1,proceso.nivel1_emp,
proceso.cod1_puesto,proceso.num2_emp,proceso.departamento2,
proceso.nivel2_emp,proceso.cod2_puesto,
arr_proceso[idx].cod_requi,arr_proceso[idx].ind_requi,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 adpcmf016()
## 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 adtb00018.fech_crea
END RECORD
{WHENEVER ERROR CONTINUE}
CONSTRUCT criterio ON fecha FROM adtb00018.fecha
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET SELEC =
"SELECT UNIQUE fecha,cod_sol,num_emp,departamento,nivel_emp,cod_puesto,",
" num3_emp,departamento3,nivel3_emp,cod3_puesto,recomendacion, ",
" otros_com,num1_emp,departamento1,nivel1_emp,cod1_puesto, ",
" num2_emp,departamento2,nivel2_emp,cod2_puesto ",
"FROM adtb00018 ",
"WHERE status_t is null and ",criterio clipped," ORDER BY 2"
PREPARE busca FROM selec
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos INTO proceso.*
IF status >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
END IF
CALL selecto()
MENU "OPCION"
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO proceso.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
CALL selecto()
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO proceso.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
CALL selecto()
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO proceso.*
CALL selecto()
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO proceso.*
CALL selecto()
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger"
"<Esc> Actualiza Registro <Ctrl-C> Cancela Operacion"
LET modifica = "S"
IF p_status = "E" THEN
LET numero_msg = 39
CALL msg(numero_msg)
RETURN
END IF
## SE SELECCIONAN LOS CAMPOS MODIFICABLES
INPUT BY NAME proceso.fecha,proceso.num_emp,proceso.departamento,
proceso.nivel_emp,proceso.cod_puesto,
proceso.num3_emp,proceso.departamento3,
proceso.nivel3_emp,proceso.cod3_puesto,
proceso.recomendacion,proceso.otros_com,
proceso.num1_emp,proceso.departamento1,
proceso.nivel1_emp,proceso.cod1_puesto,
proceso.num2_emp,proceso.departamento2,
proceso.nivel2_emp,proceso.cod2_puesto
WITHOUT DEFAULTS
## VENTANA QUE BUSCA LOS EMPLEADOS
ON KEY (CONTROL-W)
LET curr1 = arr_curr()
CASE
WHEN INFIELD (num_emp)
CALL busca_empleado()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
NEXT FIELD num_emp
END IF
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
LET descrip1 = nombre
LET proceso.num_emp = despl_emp[curr1].num_emp
LET proceso.departamento = despl_emp[curr1].departamento
LET proceso.nivel_emp = despl_emp[curr1].nivel_emp
LET proceso.cod_puesto = despl_emp[curr1].cod_puesto
DISPLAY BY NAME proceso.num_emp,proceso.departamento,
proceso.nivel_emp,proceso.cod_puesto,descrip1
NEXT FIELD num3_emp
WHEN INFIELD (num3_emp)
CALL busca_empleado()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
NEXT FIELD num3_emp
END IF
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num3_emp
END IF
LET descrip2 = nombre
LET proceso.num3_emp = despl_emp[curr1].num_emp
LET proceso.departamento3 = despl_emp[curr1].departamento
LET proceso.nivel3_emp = despl_emp[curr1].nivel_emp
LET proceso.cod3_puesto = despl_emp[curr1].cod_puesto
DISPLAY BY NAME proceso.num3_emp,proceso.departamento3,
proceso.nivel3_emp,proceso.cod3_puesto,
descrip2
NEXT FIELD recomendacion
WHEN INFIELD (num1_emp)
CALL busca_empleado()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
NEXT FIELD num1_emp
END IF
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num1_emp
END IF
LET descrip4 = nombre
LET proceso.num1_emp = despl_emp[curr1].num_emp
LET proceso.departamento1 = despl_emp[curr1].departamento
LET proceso.nivel1_emp = despl_emp[curr1].nivel_emp
LET proceso.cod1_puesto = despl_emp[curr1].cod_puesto
DISPLAY BY NAME proceso.num1_emp,proceso.departamento1,
proceso.nivel1_emp,proceso.cod1_puesto,
descrip4
NEXT FIELD num2_emp
WHEN INFIELD (num2_emp)
CALL busca_empleado()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
NEXT FIELD num2_emp
END IF
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num2_emp
END IF
LET descrip5 = nombre
LET proceso.num2_emp = despl_emp[curr1].num_emp
LET proceso.departamento2 = despl_emp[curr1].departamento
LET proceso.nivel2_emp = despl_emp[curr1].nivel_emp
LET proceso.cod2_puesto = despl_emp[curr1].cod_puesto
DISPLAY BY NAME proceso.num2_emp,proceso.departamento2,
proceso.nivel2_emp,proceso.cod2_puesto,
descrip5
NEXT FIELD cod2_puesto
END CASE
## CHEQUEA QUE LOS CAMPOS MODIFICABLES NO ESTEN EN BLANCO
AFTER FIELD num_emp
IF proceso.num_emp IS NOT NULL THEN
SELECT departamento,nivel_emp,cod_puesto,nom1_emp,nom2_emp,
apell1_emp,apell2_emp
INTO proceso.departamento,proceso.nivel_emp,proceso.cod_puesto,
nombre1,nombre2,apellido1,apellido2
FROM adtb00003
WHERE num_emp = proceso.num_emp and status_t is null
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
LET descrip1 = nombre1 clipped," ",nombre2 clipped," ",
apellido1 clipped," ",apellido2 clipped
DISPLAY BY NAME proceso.departamento,proceso.nivel_emp,
proceso.cod_puesto,descrip1
NEXT FIELD num3_emp
AFTER FIELD num3_emp
IF proceso.num3_emp IS NOT NULL THEN
SELECT departamento,nivel_emp,cod_puesto,nom1_emp,nom2_emp,
apell1_emp,apell2_emp
INTO proceso.departamento3,proceso.nivel3_emp,
proceso.cod3_puesto,nombre3,nombre4,apellido3,
apellido4 FROM adtb00003
WHERE num_emp = proceso.num3_emp and
status_t is null
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num3_emp
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num3_emp
END IF
LET descrip2 =
nombre3 clipped," ",nombre4 clipped," ",apellido3 clipped," ",apellido4 clipped
DISPLAY BY NAME proceso.departamento3,proceso.nivel3_emp,proceso.cod3_puesto,
descrip2
NEXT FIELD recomendacion
AFTER FIELD recomendacion
IF proceso.recomendacion IS NOT NULL THEN
IF proceso.recomendacion = 1 THEN
LET verdad = "N"
CALL contrato()
IF verdad = "S" THEN
NEXT FIELD recomendacion
END IF
LET descrip = "ACEPTARLO"
END IF
IF proceso.recomendacion = 2 THEN
LET descrip = "MANTENERLO EN ARCHIVO"
END IF
IF proceso.recomendacion = 3 THEN
LET descrip = "NO LE INTERESA"
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD recomendacion
END IF
DISPLAY BY NAME descrip
AFTER FIELD num1_emp
IF proceso.num1_emp IS NOT NULL THEN
SELECT departamento,nivel_emp,cod_puesto,nom1_emp,nom2_emp,
apell1_emp,apell2_emp
INTO proceso.departamento1,proceso.nivel1_emp,
proceso.cod1_puesto,nombre5,nombre6,apellido5,
apellido6 FROM adtb00003
WHERE num_emp = proceso.num1_emp and
status_t is null
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num1_emp
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num1_emp
END IF
LET descrip4 =
nombre5 clipped," ",nombre6 clipped," ",apellido5 clipped," ",apellido6 clipped
DISPLAY BY NAME proceso.departamento1,proceso.nivel1_emp,proceso.cod1_puesto,
descrip4
NEXT FIELD num2_emp
AFTER FIELD num2_emp
IF proceso.num2_emp IS NOT NULL THEN
SELECT departamento,nivel_emp,cod_puesto,nom1_emp,nom2_emp,
apell1_emp,apell2_emp
INTO proceso.departamento2,proceso.nivel2_emp,
proceso.cod2_puesto,nombre7,nombre8,apellido7,
apellido8 FROM adtb00003
WHERE num_emp = proceso.num2_emp and
status_t is null
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num2_emp
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num2_emp
END IF
LET descrip5 =
nombre7 clipped," ",nombre8 clipped," ",apellido7 clipped," ",apellido8 clipped
DISPLAY BY NAME proceso.departamento2,proceso.nivel2_emp,proceso.cod2_puesto,
descrip5
EXIT INPUT
#### Verifica si el usuario presiono la tecla <Ctrl-C>
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
END INPUT
## AQUI SE MODIFICAN LOS CAMPOS DEL ARREGLO
FOR idx = 1 to 3
LET arr_proceso[idx].cod_requi = NULL
LET arr_proceso[idx].requisito = NULL
LET arr_proceso[idx].ind_requi = NULL
DISPLAY arr_proceso[idx].cod_requi to consart[idx].cod_requi
DISPLAY arr_proceso[idx].requisito to consart[idx].requisito
DISPLAY arr_proceso[idx].ind_requi to consart[idx].ind_requi
END FOR
## SE SELECCIONAN LOS CAMPOS DEL ARREGLO
DECLARE buscando CURSOR FOR
SELECT a.cod_requi,b.requisito,a.ind_requi
FROM adtb00018 a,adtb00008 b
WHERE a.cod_requi = b.cod_requi and
a.cod_sol = proceso.cod_sol and
a.status_t is null
ORDER BY 1
LET idx = 1
FOREACH buscando INTO arr_proceso[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_proceso WITHOUT DEFAULTS FROM consart.*
## VENTANA QUE BUSCA LOS REQUISITOS DE SELECCION Y CONTRATACION
ON KEY (CONTROL-W)
LET curr = arr_curr()
LET scr_l = scr_line()
CASE
WHEN INFIELD (cod_requi)
CALL busca_requisito()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
NEXT FIELD cod_requi
END IF
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_requi
END IF
SELECT requisito INTO seleccion.requisito
FROM adtb00008
WHERE cod_requi = arr_proceso[curr].cod_requi and
status_t is null
LET arr_proceso[curr].requisito = seleccion.requisito
DISPLAY arr_proceso[curr].cod_requi to consart[scr_l].cod_requi
DISPLAY arr_proceso[curr].requisito to consart[scr_l].requisito
LET control = "N"
CALL repeticion()
IF control = "S" THEN
NEXT FIELD cod_requi
END IF
NEXT FIELD ind_requi
END CASE
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
## VERIFICA QUE LA ACCION EXISTA EN EL CATALOGO DE ACCIONES Y ADEMAS QUE NO
## SE REPITA
AFTER FIELD cod_requi
IF arr_proceso[curr].cod_requi IS NOT NULL THEN
LET control = "N"
CALL repeticion()
IF control = "S" THEN
NEXT FIELD cod_requi
END IF
SELECT @requisito INTO seleccion.requisito
FROM adtb00008
WHERE @cod_requi = arr_proceso[curr].cod_requi and
status_t is null
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_requi
END IF
LET arr_proceso[curr].requisito = seleccion.requisito
DISPLAY arr_proceso[curr].requisito to consart[scr_l].requisito
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 ACTUALIZA EL REGISTRO
DELETE FROM adtb00018
WHERE cod_sol = proceso.cod_sol
FOR idx = 1 to arr_count()
IF arr_proceso[idx].cod_requi is not null and
arr_proceso[idx].requisito is not null and
arr_proceso[idx].ind_requi is not null THEN
INSERT INTO adtb00018 VALUES (proceso.fecha,proceso.cod_sol,
proceso.num_emp,proceso.departamento,proceso.nivel_emp,
proceso.cod_puesto,proceso.num3_emp,proceso.departamento3,
proceso.nivel3_emp,proceso.cod3_puesto,proceso.recomendacion,
proceso.otros_com,proceso.num1_emp,proceso.departamento1,
proceso.nivel1_emp,proceso.cod1_puesto,proceso.num2_emp,
proceso.departamento2,proceso.nivel2_emp,proceso.cod2_puesto,
arr_proceso[idx].cod_requi,arr_proceso[idx].ind_requi,null,
SUSER_SNAME (),GETDATE(),null,null)
END IF
END FOR
LET numero_msg = 13
CALL msg(numero_msg)
IF status < 0 THEN
END IF
COMMAND KEY ("L") "eLiminar"
UPDATE adtb00018 SET status_t = "E"
WHERE cod_sol = proceso.cod_sol
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
"Retorna al menu anterior"
CLEAR FORM
FOR idx = 1 to 3
LET arr_proceso[idx].cod_requi = NULL
LET arr_proceso[idx].requisito = NULL
LET arr_proceso[idx].ind_requi = NULL
DISPLAY arr_proceso[idx].cod_requi to consart[idx].cod_requi
DISPLAY arr_proceso[idx].requisito to consart[idx].requisito
DISPLAY arr_proceso[idx].ind_requi to consart[idx].ind_requi
END FOR
EXIT MENU
END MENU
END FUNCTION
## VENTANA DE LOS EMPLEADOS DE LA EMPRESA
## VENTANA DE LAS ACCIONES DE SELECCION Y CONTRATACION
FUNCTION busca_requisito()
OPEN WINDOW busqueda1 AT 10,10 WITH FORM "adfmwd005"
ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last)
CONSTRUCT criterio ON adtb00008.requisito FROM adtb00008.requisito
LET selec = "SELECT cod_requi,requisito FROM adtb00008 ",
" WHERE ",
" status_t is null AND ",
criterio clipped,
"ORDER BY 1 "
PREPARE busco FROM selec
DECLARE local CURSOR FOR busco
LET idx = 1
FOREACH local INTO buscar_requi[idx].*
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
EXIT FOREACH
END IF
LET despl_requi[idx].cod_requi = buscar_requi[idx].cod_requi
LET despl_requi[idx].requisito = buscar_requi[idx].requisito clipped
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
DISPLAY ARRAY despl_requi TO s_requisito.*
LET curr = arr_curr()
LET arr_proceso[curr1].cod_requi = despl_requi[curr].cod_requi
LET seleccion.requisito = despl_requi[curr].requisito
CLOSE WINDOW busqueda1
END FUNCTION
## VERIFICA QUE NO SE REPITA LA ACCION DE SELECCION Y CONTRATACION
FUNCTION repeticion()
DEFINE requi_ant RECORD
cod_requi SMALLINT
END RECORD
LET requi_ant.cod_requi = arr_proceso[curr].cod_requi
FOR idx = 1 to arr_count()
IF idx != curr THEN
IF arr_proceso[idx].cod_requi IS NOT NULL THEN
IF arr_proceso[idx].cod_requi = requi_ant.cod_requi THEN
LET numero_msg = 135
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
## SELECCIONA Y DESPLEGA LOS DATOS DEL REGISTRO ESCOGIDO
FUNCTION selecto()
SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00003
WHERE num_emp = proceso.num_emp and
departamento = proceso.departamento and
nivel_emp = proceso.nivel_emp and
cod_puesto = proceso.cod_puesto
LET descrip1 =
nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped
SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
INTO nombre3,nombre4,apellido3,apellido4 FROM adtb00003
WHERE num_emp = proceso.num3_emp and
departamento = proceso.departamento3 and
nivel_emp = proceso.nivel3_emp and
cod_puesto = proceso.cod3_puesto
LET descrip2 =
nombre3 clipped," ",nombre4 clipped," ",apellido3 clipped," ",apellido4 clipped
SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol
INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00012
WHERE cod_sol = proceso.cod_sol
LET descrip3 =
nombre1 clipped," ",nombre2 clipped," ",apellido1 clipped," ",apellido2 clipped
SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
INTO nombre5,nombre6,apellido5,apellido6 FROM adtb00003
WHERE num_emp = proceso.num1_emp and
departamento = proceso.departamento1 and
nivel_emp = proceso.nivel1_emp and
cod_puesto = proceso.cod1_puesto
LET descrip4 =
nombre5 clipped," ",nombre6 clipped," ",apellido5 clipped," ",apellido6 clipped
SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
INTO nombre7,nombre8,apellido7,apellido8 FROM adtb00003
WHERE num_emp = proceso.num2_emp and
departamento = proceso.departamento2 and
nivel_emp = proceso.nivel2_emp and
cod_puesto = proceso.cod2_puesto
LET descrip5 =
nombre7 clipped," ",nombre8 clipped," ",apellido7 clipped," ",apellido8 clipped
IF proceso.recomendacion = 1 THEN
LET descrip = "ACEPTARLO"
END IF
IF proceso.recomendacion = 2 THEN
LET descrip = "MANTENERLO EN ARCHIVO"
END IF
IF proceso.recomendacion = 3 THEN
LET descrip = "NO LE INTERESA"
END IF
DISPLAY BY NAME proceso.*,descrip,descrip1,descrip2,descrip3,
descrip4,descrip5
END FUNCTION