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

508 lines
16 KiB
Plaintext

{
----------------------------------------------------------------------------
PROGRAMA : ADPRMT022
OBJETIVO : Modificar y Eliminar registros de la
Tabla de Maestra de Empleados
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Noviembre 19, 1993
----------------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
DEFINE tipo_sexo CHAR(9)
DEFINE p_sexo CHAR(1)
DEFINE m_descrip LIKE adtb00040.plan_descrip
DEFINE corp1 RECORD LIKE adtb00042.*,
dias RECORD LIKE adtb00044.*,
pnis 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 adprmt022()
END MAIN
FUNCTION adprmt022()
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 24,
COMMENT LINE 23
OPEN FORM adfmmt022 FROM "adfmmt022"
DISPLAY FORM adfmmt022
DISPLAY "adprmt022" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Maestra de Empleados" AT 6,33 ATTRIBUTE(BLACK)
MENU
ON ACTION nuevo
let int_flag = false
INITIALIZE emplea.* TO NULL
CALL adpcmf022()
ON ACTION buscar
let int_flag = false
CALL adpcad022()
ON ACTION Salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION adpcmf022()
## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA CONSULTA Y
## MODIFICACION DE REGISTROS
DEFINE ant RECORD
num_emp SMALLINT,
departamento SMALLINT,
nivel_emp SMALLINT,
cod_puesto SMALLINT
END RECORD
# # WHENEVER ERROR CONTINUE
CONSTRUCT criterio ON a.num_emp,a.departamento FROM num_emp,departamento
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET SELEC =
"SELECT UNIQUE a.* FROM adtb00003 a ",
"WHERE (a.status_t is null OR a.status_t NOT IN('T','E')) AND ",
criterio clipped," ORDER BY a.num_emp "
PREPARE busca FROM selec
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos INTO emplea.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL selecta1()
MENU "OPCION"
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO emplea.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
LET tipo_sexo = " "
CALL selecta1()
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO emplea.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
LET tipo_sexo = " "
CALL selecta1()
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO emplea.*
CALL selecta1()
LET tipo_sexo = " "
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO emplea.*
CALL selecta1()
LET tipo_sexo = " "
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger" "<Esc> Actualiza Registro <Ctrl-C> Cancela Operacion"
## SE SELECCIONAN LOS CAMPOS QUE PUEDEN SER MODIFICABLES
INPUT BY NAME emplea.departamento,emplea.nivel_emp,emplea.cod_puesto,
{emplea.cod_plan,emplea.monto_asegurado,
emplea.clase_emp,emplea.monto_seg_dental}
emplea.calle,emplea.casa_num,emplea.barrio,
emplea.urbanizacion,emplea.cedula,emplea.serie,
emplea.telefono,emplea.fech_nac,emplea.cod_nac,
emplea.estado_civil,emplea.tipo_sangre,emplea.sueldo_ac,
emplea.nomina,emplea.paga_seg,emplea.cod_seg1,
emplea.cod_seg2,emplea.cod_seg3,emplea.cuenta_no,p_sexo,
corp1.dep_corp,dias.dias_pend,pnis,
emplea.monto_seg_med,emplea.monto_seg_int,
emplea.monto_care WITHOUT DEFAULTS
## VERIFICA QUE LOS CAMPOS MODIFICABLES NO ESTEN EN BLANCO
AFTER FIELD dep_corp
IF corp1.dep_corp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD dep_corp
END IF
SELECT a.nombre_depto
INTO corp1.nombre_depto
FROM adtb00042 a
WHERE a.dep_corp = corp1.dep_corp
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD dep_corp
END IF
DISPLAY BY NAME corp1.nombre_depto
AFTER FIELD departamento
IF emplea.departamento IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD departamento
END IF
SELECT nom_dpto INTO depto.nom_dpto FROM adtb00001
WHERE departamento = emplea.departamento
DISPLAY BY NAME depto.nom_dpto
AFTER FIELD cod_puesto
IF emplea.cod_puesto IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_puesto
END IF
SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004
WHERE @cod_puesto = emplea.cod_puesto
DISPLAY BY NAME puesto.nom_puesto
AFTER FIELD nivel_emp
IF emplea.nivel_emp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD nivel_emp
END IF
AFTER FIELD estado_civil
IF emplea.estado_civil IS NOT NULL THEN
IF emplea.estado_civil = "S" THEN
LET descr = "SOLTERO"
END IF
IF emplea.estado_civil = "C" THEN
LET descr = "CASADO"
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD estado_civil
END IF
DISPLAY BY NAME descr
AFTER FIELD sueldo_ac
IF emplea.sueldo_ac IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD sueldo_ac
END IF
AFTER FIELD cod_plan
IF emplea.cod_plan IS NULL THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_plan
END IF
LET m_descrip = null
SELECT a.plan_descrip
INTO m_descrip
FROM adtb00040 a
WHERE a.cod_plan = emplea.cod_plan
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_plan
END IF
DISPLAY BY NAME m_descrip
AFTER FIELD monto_asegurado
IF emplea.monto_asegurado IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD monto_asegurado
END IF
AFTER FIELD monto_seg_dental
IF emplea.monto_seg_dental IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD monto_seg_dental
END IF
AFTER FIELD clase_emp
IF emplea.clase_emp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD clase_emp
END IF
AFTER FIELD fech_nac
IF emplea.fech_nac IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_nac
END IF
IF YEAR(emplea.fech_nac) >= YEAR(today) THEN
ERROR "FECHA INCORRECTA"
NEXT FIELD fech_nac
END IF
AFTER FIELD nomina
IF emplea.nomina IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD nomina
END IF
IF emplea.nomina = "Q" THEN
LET descrip = "QUINCENAL"
END IF
IF emplea.nomina = "S" THEN
LET descrip = "SEMANAL"
END IF
IF emplea.nomina = "V" THEN
LET descrip = "VENDEDOR"
END IF
DISPLAY BY NAME descrip
AFTER FIELD p_sexo
IF p_sexo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD p_sexo
END IF
IF p_sexo = "M" THEN
LET tipo_sexo = "MASCULINO"
ELSE
IF p_sexo = "F" THEN
LET tipo_sexo = "FEMENINO"
END IF
END IF
DISPLAY BY NAME tipo_sexo
#### 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 ACTUALIZA EL REGISTRO
UPDATE adtb00003 SET (departamento,cod_puesto,nivel_emp,nom1_emp,nom2_emp,
apell1_emp,apell2_emp,calle,casa_num,barrio,
urbanizacion,telefono,cedula,serie,cod_nac,estado_civil,
tipo_sangre,sueldo_ac,nomina,paga_seg,cod_plan,
monto_asegurado,monto_seg_dental,clase_emp,us_mod,fech_mod,
cod_seg1,cod_seg2,cod_seg3,cuenta_no,monto_seg_int,monto_care,monto_seg_med)=
(emplea.departamento,emplea.cod_puesto,emplea.nivel_emp,
emplea.nom1_emp,emplea.nom2_emp,emplea.apell1_emp,
emplea.apell2_emp,emplea.calle,emplea.casa_num,
emplea.barrio,emplea.urbanizacion,emplea.telefono,
emplea.cedula,emplea.serie,emplea.cod_nac,
emplea.estado_civil,emplea.tipo_sangre,emplea.sueldo_ac,
emplea.nomina,emplea.paga_seg,emplea.cod_plan,
emplea.monto_asegurado,emplea.monto_seg_dental,
emplea.clase_emp,SUSER_SNAME (),GETDATE (),emplea.cod_seg1,
emplea.cod_seg2,emplea.cod_seg3,emplea.cuenta_no,emplea.monto_seg_int,emplea.monto_care,
emplea.monto_seg_med)
WHERE @num_emp = emplea.num_emp
UPDATE adtb00021 SET sexo = p_sexo WHERE num_emp = emplea.num_emp AND
cod_par = 0 AND sec_par = 0
SELECT a.*
FROM adtb00043 a
WHERE a.num_emp = emplea.num_emp
IF STATUS = NOTFOUND THEN
INSERT INTO adtb00043 VALUES (emplea.num_emp,corp1.dep_corp,null,
SUSER_SNAME (),GETDATE (),null,null)
ELSE
UPDATE adtb00043 SET dep_corp = corp1.dep_corp,
us_mod = SUSER_SNAME (),
fech_mod = GETDATE ()
WHERE @num_emp = emplea.num_emp
END IF
SELECT a.*
FROM adtb00044 a
WHERE a.num_emp = emplea.num_emp
IF STATUS = NOTFOUND THEN
INSERT INTO adtb00044 VALUES (emplea.num_emp,dias.dias_pend)
ELSE
UPDATE adtb00044
SET dias_pend = dias.dias_pend
WHERE @num_emp = emplea.num_emp
END IF
UPDATE adtb00030 SET nis = pnis
WHERE @num_emp = emplea.num_emp
LET numero_msg = 13
CALL msg(numero_msg)
IF status < 0 THEN
END IF
## AQUI SE ELIMINAN LOS REGISTROS
COMMAND KEY ("L") "eLiminar"
UPDATE adtb00003 SET status_t = "E",
us_mod = SUSER_SNAME (),
fech_mod = GETDATE ()
WHERE num_emp = emplea.num_emp
UPDATE adtb00043 SET status_t = "E",
us_mod = SUSER_SNAME (),
fech_mod = GETDATE ()
WHERE num_emp = emplea.num_emp
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar" "Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION
FUNCTION selecta1()
SELECT a.sexo INTO p_sexo FROM adtb00021 a
WHERE a.num_emp = emplea.num_emp AND a.cod_par = 0 AND a.sec_par = 0
LET descrip1 = emplea.nom1_emp CLIPPED," ",emplea.nom2_emp CLIPPED," ",
emplea.apell1_emp CLIPPED," ",emplea.apell2_emp CLIPPED
LET pnis = NULL
SELECT a.nis INTO pnis FROM adtb00030 a
WHERE a.num_emp = emplea.num_emp
SELECT nom_dpto INTO depto.nom_dpto FROM adtb00001
WHERE departamento = emplea.departamento
SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004
WHERE @cod_puesto = emplea.cod_puesto
LET m_descrip = null
SELECT a.plan_descrip
INTO m_descrip
FROM adtb00040 a
WHERE a.cod_plan = emplea.cod_plan
IF emplea.estado_civil = "S" THEN
LET descr = "SOLTERO"
END IF
IF emplea.estado_civil = "C" THEN
LET descr = "CASADO"
END IF
IF p_sexo = "M" THEN
LET tipo_sexo = "MASCULINO"
END IF
IF p_sexo = "F" THEN
LET tipo_sexo = "FEMENINO"
END IF
IF emplea.nomina = "Q" THEN
LET descrip = "QUINCENAL"
END IF
IF emplea.nomina = "S" THEN
LET descrip = "SEMANAL"
END IF
SELECT nom_nac INTO nacion.nom_nac FROM adtb00007
WHERE cod_nac = emplea.cod_nac
SELECT a.dep_corp
INTO corp1.dep_corp
FROM adtb00043 a
WHERE a.num_emp = emplea.num_emp
AND a.status_t IS NULL
SELECT a.nombre_depto
INTO corp1.nombre_depto
FROM adtb00042 a
WHERE a.dep_corp = corp1.dep_corp
AND a.status_t IS NULL
SELECT a.*
INTO dias.*
FROM adtb00044 a
WHERE a.num_emp = emplea.num_emp
IF dias.dias_pend IS NULL THEN
LET dias.dias_pend = 0
END IF
DISPLAY BY NAME emplea.num_emp,emplea.departamento,emplea.nivel_emp,
emplea.cod_puesto,descrip1,emplea.calle,emplea.casa_num,
emplea.barrio,emplea.urbanizacion,emplea.cedula,
emplea.serie,emplea.fech_nac,emplea.cod_nac,
emplea.licencia,emplea.telefono,emplea.estado_civil,
emplea.tipo_sangre,emplea.sueldo_ac,emplea.nomina,
emplea.fech_efec,descr,descrip,nacion.nom_nac,
depto.nom_dpto,puesto.nom_puesto,p_sexo,tipo_sexo,
emplea.paga_seg,emplea.cod_seg1,emplea.cod_seg2,
emplea.cod_seg3,emplea.cod_plan,m_descrip,
emplea.monto_asegurado,emplea.clase_emp,
emplea.monto_seg_dental,corp1.dep_corp,corp1.nombre_depto,
dias.dias_pend,emplea.cuenta_no,pnis,
emplea.monto_seg_med,emplea.monto_seg_int,
emplea.monto_care
END FUNCTION