{ ---------------------------------------------------------------------------- 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" " Actualiza Registro 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 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