{ ------------------------------------------------------------------ PROGRAMA : ADPRMT017 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Accion de Personal PROGRAMADOR : Tadeo A. Ferreras F. FECHA REALIZACION : Junio 09, 1993 ------------------------------------------------------------------ } GLOBALS "adprgb000.4gl" #### VARIABLES PARA MODULO DE CALCULO DE VACACIONES ########## DEFINE cantidad_d INTEGER DEFINE vacacion RECORD fecha_sal DATE, fecha_ent DATE, dias_tomados INTEGER, dias_vac INTEGER END RECORD DEFINE nombre_a CHAR(31), cedula1 CHAR(20), tipo_sexo CHAR(9) DEFINE fech1,fecha5 DATE DEFINE optt CHAR(1) DEFINE dia INTEGER DEFINE sueldo1,sueldo2 DECIMAL(10,2) DEFINE necesario RECORD LIKE adtb00012.* DEFINE personal RECORD LIKE adtb00003.* DEFINE trx LIKE adtb00028.num_trx DEFINE act_dep,depende,z SMALLINT DEFINE dias1,dias2,vacac INTEGER DEFINE tipo_sangre CHAR(3) #### MODULO MENU GENERAL DE ACCION DE NOMINA ##### FUNCTION adprmt017() CLEAR SCREEN OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 23, PROMPT LINE 23 OPEN FORM adfmmt017 FROM "adfmmt017" DISPLAY FORM adfmmt017 CALL pantalla() DISPLAY "adprmt017" AT 4,3 ATTRIBUTE(RED) DISPLAY "Accion de Personal" AT 6,34 ATTRIBUTE(BLACK) MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" let int_flag = false SELECT num_trx INTO trx FROM adtb00028 WHERE clave = "AN" IF trx IS NULL THEN LET trx = 0 END IF LET trx = trx + 1 CLEAR FORM CALL adpcad017() COMMAND "Consultar-modificar" " Realiza Busqueda Cancela Operacion" let int_flag = false CALL adpcmf017() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU END FUNCTION ##### PARA INSERTAR INFORMACION #### FUNCTION adpcad017() # WHENEVER ERROR CONTINUE ## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO INPUT BY NAME acc_per.* ## VENTANAS PARA BUSCAR LOS DEPARTAMENTOS, NIVELES, PUESTOS, EMPLEADOS ## Y LOS MOVIMIENTOS DE LOS EMPLEADOS ON KEY (CONTROL-W) CASE WHEN INFIELD (departamento) CALL busca_depto() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD departamento END IF IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD departamento END IF LET acc_per.departamento = req_per.depart DISPLAY BY NAME acc_per.departamento NEXT FIELD nivel_emp WHEN INFIELD (nivel_emp) CALL busca_nivel() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD nivel_emp END IF IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD nivel_emp END IF DISPLAY BY NAME acc_per.nivel_emp NEXT FIELD cod_puesto WHEN INFIELD (cod_mto) CALL busca_movi() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD cod_mto END IF IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mto END IF DISPLAY BY NAME acc_per.cod_mto,acc_per.sec_mto, mov_emp.desc_mto 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 descrip3 = nombre LET acc_per.num1_emp = despl_emp[curr1].num_emp LET acc_per.departamento1 = despl_emp[curr1].departamento LET acc_per.nivel1_emp = despl_emp[curr1].nivel_emp LET acc_per.cod1_puesto = despl_emp[curr1].cod_puesto DISPLAY BY NAME acc_per.num1_emp,acc_per.departamento1, acc_per.nivel1_emp,acc_per.cod1_puesto DISPLAY BY NAME descrip3 ATTRIBUTE(blue) 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 descrip4 = nombre LET acc_per.num2_emp = despl_emp[curr1].num_emp LET acc_per.departamento2 = despl_emp[curr1].departamento LET acc_per.nivel2_emp = despl_emp[curr1].nivel_emp LET acc_per.cod2_puesto = despl_emp[curr1].cod_puesto DISPLAY BY NAME acc_per.num2_emp,acc_per.departamento2, acc_per.nivel2_emp,acc_per.cod2_puesto DISPLAY BY NAME descrip4 ATTRIBUTE(blue) 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 descrip5 = nombre LET acc_per.num3_emp = despl_emp[curr1].num_emp LET acc_per.departamento3 = despl_emp[curr1].departamento LET acc_per.nivel3_emp = despl_emp[curr1].nivel_emp LET acc_per.cod3_puesto = despl_emp[curr1].cod_puesto DISPLAY BY NAME acc_per.num3_emp,acc_per.departamento3, acc_per.nivel3_emp,acc_per.cod3_puesto DISPLAY BY NAME descrip5 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 acc_per.cod_puesto = req_per.cod_puesto_r SELECT k.nom_puesto INTO puesto.nom_puesto FROM adtb00004 k WHERE k.cod_puesto = acc_per.cod_puesto DISPLAY BY NAME acc_per.cod_puesto DISPLAY BY NAME puesto.nom_puesto ATTRIBUTE(blue) NEXT FIELD sueldo_ac END CASE ## NUMERACION AUTOMATICA DEL FORMULARIO DE ACCION DE PERSONAL BEFORE FIELD cod_mto LET acc_per.num_trx = trx DISPLAY BY NAME acc_per.num_trx ATTRIBUTE(blue) AFTER FIELD cod_mto IF acc_per.cod_mto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_mto END IF ## CHEQUEA QUE EXISTA EL MOVIMIENTO EN LA TABLA DE MOVIMIENTOS DE EMPLEADOS AFTER FIELD sec_mto IF acc_per.sec_mto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sec_mto END IF SELECT q.desc_mto INTO mov_emp.desc_mto FROM adtb00009 q WHERE q.cod_mto = acc_per.cod_mto AND q.sec_mto = acc_per.sec_mto AND q.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mto END IF ## CHEQUEA QUE EL REGISTRO NO EXISTA EN LA TABLA DE ACCION DE PERSONAL. SELECT * FROM adtb00020 WHERE cod_sol = acc_per.cod_sol AND cod_mto = acc_per.cod_mto AND sec_mto = acc_per.sec_mto IF STATUS != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cod_sol END IF DISPLAY BY NAME mov_emp.desc_mto ATTRIBUTE(blue) IF acc_per.cod_mto > 1 THEN LET acc_per.cod_sol = NULL NEXT FIELD fecha END IF IF acc_per.cod_mto = 3 THEN IF acc_per.sec_mto > 1 AND acc_per.sec_mto <> 20 THEN CALL cantidad_dias() END IF END IF ## CHEQUEA QUE NO SE REPITA EL MOVIMIENTO DE EMPLEO PARA EL MISMO SOLICITANTE AFTER FIELD cod_sol IF acc_per.cod_mto = 1 THEN IF acc_per.sec_mto != 6 THEN SELECT UNIQUE j.cod_sol FROM adtb00020 j WHERE j.cod_sol = acc_per.cod_sol IF STATUS != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cod_sol END IF END IF ## SELECCIONA LA FECHA DE INGRESO Y EL SUELDO DE LA TABLA DE CONTRATACION ## Y SELECCION DE EMPLEADOS SELECT UNIQUE a.fech_efec,a.sueldo,b.cod_sol INTO contra.fech_efec,contra.sueldo,parece.cod_sol FROM adtb00019 a,adtb00018 b WHERE a.cod_sol = b.cod_sol and b.cod_sol = acc_per.cod_sol and a.status_t is null LET acc_per.fech_efec = contra.fech_efec LET acc_per.sueldo_ac = contra.sueldo DISPLAY BY NAME acc_per.fech_efec,acc_per.sueldo_ac END IF IF acc_per.cod_mto > 1 THEN LET acc_per.cod_sol = NULL NEXT FIELD fecha END IF ## VERIFICA QUE EL SOLICITANTE EXISTE EN LA TABLA DE SOLICITANTES. SI EXISTE ## LO PRESENTA EN PANTALLA. SELECT * INTO necesario.* FROM adtb00012 WHERE @cod_sol = acc_per.cod_sol IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sol END IF LET nombre9 = necesario.nom1_sol LET nombre10 = necesario.nom2_sol LET apellido9 = necesario.apell1_sol LET apellido10 = necesario.apell2_sol LET descrip1 = nombre9 clipped," ",nombre10 clipped LET descrip2 = apellido9 clipped," ",apellido10 clipped LET tipo_sangre = necesario.tipo_sangre LET acc_per.tipo_sangre = tipo_sangre DISPLAY BY NAME descrip1,descrip2 ATTRIBUTE(blue) DISPLAY BY NAME acc_per.tipo_sangre ## SELECCIONA LOS DATOS FAMILIARES DEL SOLICITANTE PARA INTRODUCIRLOS EN LA ## TABLA DE ACTUALIZACION DE INFORMACION PERSONAL AFTER FIELD fecha IF acc_per.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF AFTER FIELD fech_efec IF acc_per.fech_efec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_efec END IF AFTER FIELD num_emp IF acc_per.num_emp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_emp END IF ## CHEQUEA QUE EL EMPLEADO EXISTA EN LA TABLA DE EMPLEADOS. SI EXISTE ## DESPLEGA TODA LA INFORMACION REFERENTE AL EMPLEADO. IF acc_per.cod_mto > 1 THEN SELECT b.departamento,b.nivel_emp,b.cod_puesto,b.nom1_emp, b.nom2_emp,b.apell1_emp,b.apell2_emp,b.sueldo_ac, b.nomina,b.estado_civil,b.tipo_sangre INTO acc_per.departamento,acc_per.nivel_emp,acc_per.cod_puesto, nombre9,nombre10,apellido9,apellido10,acc_per.sueldo_ac, acc_per.nomina,acc_per.estado_civil,acc_per.tipo_sangre FROM adtb00003 b WHERE b.num_emp = acc_per.num_emp AND (b.status_t IS NULL OR b.status_t != "E") IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_emp END IF ## VERIFICA QUE EL DEPARTAMENTO EXISTA EN LA TABLA DE DEPARTAMENTOS SELECT nom_dpto INTO nombre_dpto FROM adtb00001 WHERE departamento = acc_per.departamento ## VERIFICA QUE EL PUESTO EXISTA EN LA TABLA DE PUESTOS SELECT k.nom_puesto INTO puesto.nom_puesto FROM adtb00004 k WHERE k.cod_puesto = acc_per.cod_puesto and k.status_t is null SELECT UNIQUE a.sexo INTO acc_per.sexo FROM adtb00021 a WHERE a.num_emp = acc_per.num_emp AND a.cod_par = 0 AND a.sec_par = 0 IF acc_per.sexo = "M" THEN LET tipo_sexo = "MASCULINO" END IF IF acc_per.sexo = "F" THEN LET tipo_sexo = "FEMENINO" END IF DISPLAY BY NAME acc_per.sexo,tipo_sexo IF acc_per.nomina IS NOT NULL THEN IF acc_per.nomina = "S" THEN LET descr = "SEMANAL" END IF IF acc_per.nomina = "Q" THEN LET descr = "QUINCENAL" END IF END IF IF acc_per.estado_civil = "S" THEN LET estado = "SOLTERO" END IF IF acc_per.estado_civil = "C" THEN LET estado = "CASADO" END IF LET descrip1 = nombre9 clipped," ",nombre10 clipped LET descrip2 = apellido9 clipped," ",apellido10 clipped DISPLAY BY NAME acc_per.departamento,acc_per.nivel_emp, acc_per.cod_puesto,acc_per.sueldo_ac, acc_per.nomina,acc_per.estado_civil, acc_per.tipo_sangre,descrip1,descrip2,estado, nombre_dpto,puesto.nom_puesto,descr ATTRIBUTE(blue) END IF ## VERIFICA QUE EL SOLICITANTE YA HA SIDO INCLUIDO COMO EMPLEADO. SI YA ## FUE INCLUIDO CHEQUEA QUE EXISTA EN LA TABLA DE EMPLEADOS IF acc_per.cod_mto = 1 and acc_per.sec_mto != 6 THEN SELECT num_emp from adtb00003 where num_emp = acc_per.num_emp IF status != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD num_emp END IF END IF IF acc_per.cod_mto > 1 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_emp END IF END IF IF acc_per.cod_mto = 3 THEN IF acc_per.sec_mto > 1 AND acc_per.sec_mto <> 20 THEN CALL cantidad_dias() END IF END IF ## CHEQUEA QUE EL DEPARTAMENTO EXISTA EN LA TABLA DE DEPARTAMENTOS AFTER FIELD departamento IF acc_per.departamento IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD departamento END IF SELECT nom_dpto INTO nombre_dpto FROM adtb00001 WHERE departamento = acc_per.departamento IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD departamento END IF DISPLAY BY NAME nombre_dpto ATTRIBUTE(blue) AFTER FIELD nivel_emp IF acc_per.nivel_emp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nivel_emp END IF ## CHEQUEA QUE EL PUESTO EXISTA EN LA TABLA DE PUESTOS AFTER FIELD cod_puesto IF acc_per.cod_puesto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_puesto ELSE SELECT k.nom_puesto INTO puesto.nom_puesto FROM adtb00004 k WHERE k.cod_puesto =acc_per.cod_puesto and k.status_t is null IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_puesto END IF ## SELECCIONA EL NOMBRE DEL EMPLEADO DE LA TABLA DE EMPLEADOS IF acc_per.cod_sol IS NULL THEN SELECT b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp INTO nombre9,nombre10,apellido9,apellido10 FROM adtb00003 b WHERE b.num_emp = acc_per.num_emp and (b.status_t is null or b.status_t != "E") IF status >= 0 THEN IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_emp END IF ELSE CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF END IF ELSE LET nombre9 = necesario.nom1_sol LET nombre10 = necesario.nom2_sol LET apellido9 = necesario.apell1_sol LET apellido10 = necesario.apell2_sol END IF END IF LET descrip1 = nombre9 clipped," ",nombre10 clipped LET descrip2 = apellido9 clipped," ",apellido10 clipped DISPLAY BY NAME descrip1,descrip2,puesto.nom_puesto ATTRIBUTE(blue) ## LLAMA LA VENTANA DE LAS VACACIONES IF acc_per.cod_mto = 3 AND acc_per.sec_mto = 1 THEN CALL vacaciones() IF vacacion.fecha_sal IS NOT NULL THEN NEXT FIELD observacion ELSE RETURN END IF END IF AFTER FIELD sueldo_ac IF acc_per.sueldo_ac IS NULL OR acc_per.sueldo_ac < 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sueldo_ac END IF AFTER FIELD nomina IF acc_per.nomina IS NOT NULL THEN IF acc_per.nomina = "S" THEN LET descr = "SEMANAL" END IF IF acc_per.nomina = "Q" THEN LET descr = "QUINCENAL" END IF ELSE LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nomina END IF DISPLAY BY NAME descr ATTRIBUTE(blue) AFTER FIELD sexo IF acc_per.sexo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sexo END IF IF acc_per.sexo = "M" THEN LET tipo_sexo = "MASCULINO" ELSE IF acc_per.sexo = "F" THEN LET tipo_sexo = "FEMENINO" ELSE NEXT FIELD sexo END IF END IF DISPLAY BY NAME tipo_sexo ATTRIBUTE(blue) AFTER FIELD estado_civil IF acc_per.estado_civil IS NOT NULL THEN IF acc_per.estado_civil = "S" THEN LET estado = "SOLTERO" END IF IF acc_per.estado_civil = "C" THEN LET estado = "CASADO" END IF ELSE LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD estado_civil END IF DISPLAY BY NAME estado ATTRIBUTE(blue) ## AQUI SE INCLUYE EL EMPLEADO QUE SOLICITA LA ACCION DE PERSONAL AFTER FIELD num1_emp IF acc_per.num1_emp IS NOT NULL THEN SELECT b.departamento,b.nivel_emp,b.cod_puesto, b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp INTO acc_per.departamento1,acc_per.nivel1_emp, acc_per.cod1_puesto,nombre1,nombre2,apellido1,apellido2 FROM adtb00003 b WHERE b.num_emp = acc_per.num1_emp AND (b.status_t IS NULL or b.status_t != "E") 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 descrip3 = nombre1 clipped," ",nombre2 clipped," ", apellido1 clipped," ",apellido2 clipped DISPLAY BY NAME acc_per.departamento1,acc_per.nivel1_emp, acc_per.cod1_puesto,descrip3 ATTRIBUTE(blue) ## AQUI SE INCLUYE EL EMPLEADO QUE AUTORIZA LA ACCION DE PERSONAL AFTER FIELD num2_emp IF acc_per.num2_emp IS NOT NULL THEN SELECT b.departamento,b.nivel_emp,b.cod_puesto, b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp INTO acc_per.departamento2,acc_per.nivel2_emp, acc_per.cod2_puesto,nombre3,nombre4,apellido3,apellido4 FROM adtb00003 b WHERE b.num_emp = acc_per.num2_emp AND (b.status_t IS NULL OR b.status_t != "E") 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 descrip4 = nombre3 clipped," ",nombre4 clipped," ", apellido3 clipped," ",apellido4 clipped DISPLAY BY NAME acc_per.departamento2,acc_per.nivel2_emp, acc_per.cod2_puesto,descrip4 ATTRIBUTE(blue) ## AQUI SE INCLUYE EL EMPLEADO QUE APRUEBA LA ACCION DE PERSONAL AFTER FIELD num3_emp IF acc_per.num3_emp IS NOT NULL THEN SELECT b.departamento,b.nivel_emp,b.cod_puesto, b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp INTO acc_per.departamento3,acc_per.nivel3_emp, acc_per.cod3_puesto,nombre5,nombre6,apellido5,apellido6 FROM adtb00003 b WHERE b.num_emp = acc_per.num3_emp AND (b.status_t IS NULL or b.status_t != "E") 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 descrip5 = nombre5 clipped," ",nombre6 clipped," ", apellido5 clipped," ",apellido6 clipped DISPLAY BY NAME acc_per.departamento3,acc_per.nivel3_emp, acc_per.cod3_puesto,descrip5 ATTRIBUTE(blue) AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF IF acc_per.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF IF acc_per.fech_efec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_efec END IF IF acc_per.num_emp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_emp END IF IF acc_per.departamento IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD departamento END IF IF acc_per.nivel_emp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nivel_emp END IF IF acc_per.cod_puesto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_puesto END IF IF acc_per.sueldo_ac IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sueldo_ac END IF IF acc_per.nomina IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nomina END IF IF acc_per.estado_civil IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD estado_civil END IF IF acc_per.cod_mto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_mto END IF IF acc_per.sec_mto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sec_mto END IF IF acc_per.num1_emp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num1_emp END IF IF acc_per.num2_emp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num2_emp END IF IF acc_per.num3_emp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num3_emp END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF ## SE ASEGURA DE QUE TODA LA INFORMACION ESTE CORRECTA PROMPT "Informacion Correcta? (S/N).." FOR CHAR opt LET opt = UPSHIFT(opt) ## SI NO HA OCURRIDO NINGUN PROBLEMA SE PROCEDE A INSERTAR LA INFORMACION ## EN LA TABLA DE ACCION DE PERSONAL IF opt = "S" THEN INSERT INTO adtb00020 VALUES(acc_per.num_trx,acc_per.cod_sol,acc_per.fecha,acc_per.fech_efec, acc_per.num_emp,acc_per.departamento,acc_per.nivel_emp, acc_per.cod_puesto,acc_per.sueldo_ac,acc_per.nomina, acc_per.estado_civil,acc_per.tipo_sangre,acc_per.cod_mto, acc_per.sec_mto,acc_per.observacion,acc_per.num1_emp, acc_per.departamento1,acc_per.nivel1_emp,acc_per.cod1_puesto, acc_per.num2_emp,acc_per.departamento2,acc_per.nivel2_emp, acc_per.cod2_puesto,acc_per.num3_emp,acc_per.departamento3, acc_per.nivel3_emp,acc_per.cod3_puesto,null,USER,CURRENT, null,null) INSERT INTO adtb00038 VALUES (acc_per.num_emp,acc_per.cedula) INSERT INTO adtb00030 VALUES (acc_per.num_emp,acc_per.sexo) IF acc_per.cod_mto = 3 AND (acc_per.sec_mto > 1 AND acc_per.sec_mto <> 20) THEN INSERT INTO adtb00032 VALUES (acc_per.num_trx,acc_per.num_emp,acc_per.cod_mto, acc_per.sec_mto,acc_per.fech_efec,cantidad_d, NULL,USER,CURRENT,NULL,NULL) END IF ################## DATOS PARA INSERTAR O MODIFICAR PETB00003 ############ LET personal.num_emp = acc_per.num_emp LET personal.departamento = acc_per.departamento LET personal.nivel_emp = acc_per.nivel_emp LET personal.cod_puesto = acc_per.cod_puesto LET personal.apell1_emp = necesario.apell1_sol clipped LET personal.apell2_emp = necesario.apell2_sol clipped LET personal.nom1_emp = necesario.nom1_sol clipped LET personal.nom2_emp = necesario.nom2_sol clipped LET personal.calle = necesario.calle clipped LET personal.casa_num = necesario.casa_num clipped LET personal.barrio = necesario.barrio clipped LET personal.urbanizacion = necesario.urbanizacion clipped LET personal.telefono = necesario.telefono LET personal.fech_nac = necesario.fech_nac LET personal.cod_nac = necesario.cod_nac LET personal.estado_civil = necesario.estado_civil LET personal.tipo_sangre = necesario.tipo_sangre LET personal.cedula = necesario.cedula LET personal.serie = necesario.serie LET personal.licencia = necesario.licencia LET personal.sueldo_ac = acc_per.sueldo_ac LET personal.nomina = acc_per.nomina LET personal.estado_civil = acc_per.estado_civil LET personal.tipo_sangre = acc_per.tipo_sangre LET personal.fech_efec = acc_per.fech_efec ## SE SELECCIONAN LOS NOMBRES Y LAS FECHAS DE NACIMIENTO DE LOS HIJOS PARA ## INTRODUCIRLOS EN LA TABLA DE ACTUALIZACION DE INFORMACION PERSONAL ################## DATOS PARA INSERTAR PETB00021 ############ LET actual.apell1_emp = necesario.apell1_sol clipped LET actual.apell2_emp = necesario.apell2_sol clipped LET actual.nom1_emp = necesario.nom1_sol clipped LET actual.nom2_emp = necesario.nom2_sol clipped LET actual.telefono = necesario.telefono LET actual.calle = necesario.calle clipped LET actual.casa_num = necesario.casa_num clipped LET actual.barrio = necesario.barrio clipped LET actual.urbanizacion = necesario.urbanizacion clipped LET actual.estado_civil = necesario.estado_civil LET actual.licencia = necesario.licencia LET actual.num_emp = acc_per.num_emp LET actual.departamento = acc_per.departamento LET actual.nivel_emp = acc_per.nivel_emp LET actual.cod_puesto = acc_per.cod_puesto ## AQUI SE INSERTA O ACTUALIZA INFORMACION EN LA TABLA DE EMPLEADOS IF acc_per.cod_mto = 1 THEN LET personal.paga_seg = "N" SELECT UNIQUE num_emp FROM adtb00003 WHERE num_emp = acc_per.num_emp IF STATUS = NOTFOUND THEN INSERT INTO adtb00003 VALUES(personal.*) ELSE UPDATE adtb00003 SET (departamento,nivel_emp,cod_puesto, nomina,status_t,us_crea,fech_crea, us_mod,fech_mod) = (acc_per.departamento,acc_per.nivel_emp, acc_per.cod_puesto,acc_per.nomina, null,user,current,user,current) WHERE num_emp = personal.num_emp END IF ## AQUI SE INSERTA LA INFORMACION EN LA TABLA DE REGISTRO DE INFORMACION ## PERSONAL LET nombre_a = personal.nom1_emp CLIPPED," ", personal.apell1_emp CLIPPED LET cedula1 = personal.cedula USING "############","-", personal.serie USING "<<<" SELECT UNIQUE num_emp FROM adtb00021 WHERE num_emp = acc_per.num_emp AND cod_par = 0 AND sec_par = 0 IF STATUS = NOTFOUND THEN DECLARE hijos CURSOR FOR SELECT a.cod_par,a.sec_par,a.nombre,a.cedula,a.sexo, a.fecha_nac FROM adtb00013 a WHERE a.cod_sol = acc_per.cod_sol and a.status_t is null ORDER BY 1,2 FOREACH hijos INTO adtb13.* INSERT INTO adtb00021 VALUES(acc_per.num_emp, adtb13.*, NULL,USER,CURRENT,NULL,NULL) END FOREACH END IF END IF ## ACTUALIZA LA INFORMACION DEL EMPLEADO EN CUANTO A LOS MOVIMIENTOS DE LOS ## CAMBIOS DE LA ACCION DE PERSONAL IF acc_per.cod_mto = 2 THEN IF acc_per.sec_mto = 4 THEN UPDATE adtb00003 SET estado_civil = acc_per.estado_civil WHERE num_emp = acc_per.num_emp END IF IF acc_per.sec_mto = 7 THEN UPDATE adtb00003 SET nivel_emp = acc_per.nivel_emp WHERE num_emp = acc_per.num_emp END IF END IF ## INDICA EN LA MAESTRA DE EMPLEADOS SI EL EMPLEADO ESTA INCAPACITADO IF acc_per.cod_mto = 3 THEN IF acc_per.sec_mto=2 OR acc_per.sec_mto=3 OR acc_per.sec_mto=4 THEN UPDATE adtb00003 SET status_t="I" WHERE num_emp=acc_per.num_emp END IF ## ACTUALIZA LA TABLA DE LAS VACACIONES. IF acc_per.sec_mto = 1 THEN INSERT INTO adtb00032 VALUES(acc_per.num_trx,acc_per.num_emp,3,1, vacacion.fecha_sal,vacacion.dias_tomados, null,USER,CURRENT,null,null) END IF END IF ## ACTUALIZA LA TABLA DE EMPLEADOS EN CUANTO AL MOVIMIENTO DE LAS TERMINACIONES ## DE LA ACCION DE PERSONAL IF acc_per.cod_mto = 4 THEN UPDATE adtb00003 SET status_t = "T" WHERE num_emp = acc_per.num_emp UPDATE adtb00021 SET status_t = "T" WHERE num_emp = acc_per.num_emp END IF ## ACTUALIZA LA TABLA DE SECUENCIA NUMERICA UPDATE adtb00028 SET num_trx = acc_per.num_trx WHERE clave = "AN" ## ACTUALIZA LA TABLA DE HISTORICO DEL EMPLEADO DELETE FROM adtb00017 WHERE num_trx = acc_per.num_trx INSERT INTO adtb00017 VALUES (acc_per.num_trx,acc_per.cod_sol,acc_per.num_emp, acc_per.departamento,acc_per.nivel_emp, acc_per.cod_puesto,acc_per.fech_efec,acc_per.sueldo_ac, acc_per.cod_mto,acc_per.sec_mto,puesto.nivel_sal, acc_per.sueldo_lq,null,user,current,null,null) LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM LABEL preg: PROMPT "Desea Imprimir Este Documento (S/N)?..." FOR CHAR optt LET optt = UPSHIFT(optt) IF optt IS NULL OR (optt != "S" AND optt != "N") THEN GOTO preg END IF IF optt = "S" THEN START REPORT imp_accion TO PRINTER OUTPUT TO REPORT imp_accion() FINISH REPORT imp_accion END IF END IF END FUNCTION FUNCTION adpcmf017() ## Aqui se prepara para la captura del criterio de seleccion # WHENEVER ERROR CONTINUE CONSTRUCT criterio ON a.num_trx,a.cod_mto,a.sec_mto,a.num_emp FROM num_trx,cod_mto,sec_mto,num_emp IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET selec = "SELECT UNIQUE a.num_trx,a.cod_mto,a.sec_mto,a.cod_sol,a.fecha, ", " a.fech_efec,a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ", " a.sueldo_ac,a.nomina,a.estado_civil,b.sexo,a.tipo_sangre, ", " a.sueldo_ac,a.observacion,a.num1_emp,a.departamento1, ", " a.nivel1_emp,a.cod1_puesto,a.num2_emp,a.departamento2, ", " a.nivel2_emp,a.cod2_puesto,a.num3_emp,a.departamento3, ", " a.nivel3_emp,a.cod3_puesto,c.cedula_n,a.us_crea,a.fech_crea,a.us_mod, ", " a.fech_mod ", "FROM adtb00020 a,adtb00021 b,adtb00038 c ", "WHERE a.num_emp=b.num_emp AND a.num_emp = c.num_emp AND a.status_t is null AND ",criterio clipped, " AND b.cod_par = 0 AND b.sec_par = 0 ORDER BY 5" PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO acc_per.*,personal.us_crea,personal.fech_crea, personal.us_mod,personal.fech_mod IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF ELSE CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF END IF DISPLAY BY NAME personal.us_crea,personal.fech_crea,personal.us_mod, personal.fech_mod CALL desplegar() MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO acc_per.*,personal.us_crea,personal.fech_crea, personal.us_mod,personal.fech_mod IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME personal.us_crea,personal.fech_crea,personal.us_mod, personal.fech_mod CALL desplegar() COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO acc_per.*,personal.us_crea,personal.fech_crea, personal.us_mod,personal.fech_mod IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME personal.us_crea,personal.fech_crea,personal.us_mod, personal.fech_mod CALL desplegar() COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO acc_per.*,personal.us_crea,personal.fech_crea, personal.us_mod,personal.fech_mod CALL desplegar() LET numero_msg = 5 CALL msg(numero_msg) DISPLAY BY NAME personal.us_crea,personal.fech_crea,personal.us_mod, personal.fech_mod CALL desplegar() COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO acc_per.*,personal.us_crea,personal.fech_crea, personal.us_mod,personal.fech_mod CALL desplegar() LET numero_msg = 4 CALL msg(numero_msg) DISPLAY BY NAME personal.us_crea,personal.fech_crea,personal.us_mod, personal.fech_mod CALL desplegar() COMMAND "Escoger" " Actualiza Registro Cancela Operacion" INPUT BY NAME acc_per.fecha,acc_per.fech_efec,acc_per.departamento, acc_per.nivel_emp,acc_per.cod_puesto,acc_per.sueldo_ac, acc_per.nomina,acc_per.estado_civil,acc_per.sexo, acc_per.tipo_sangre,acc_per.sueldo_lq, acc_per.observacion,acc_per.num1_emp, acc_per.departamento1,acc_per.nivel1_emp, acc_per.cod1_puesto,acc_per.num2_emp, acc_per.departamento2,acc_per.nivel2_emp, acc_per.cod2_puesto,acc_per.num3_emp, acc_per.departamento3,acc_per.nivel3_emp, acc_per.cod3_puesto,acc_per.cedula WITHOUT DEFAULTS ## VENTANAS PARA BUSCAR LOS DEPARTAMENTOS, NIVELES, PUESTOS Y EMPLEADOS ON KEY (CONTROL-W) CASE WHEN INFIELD (departamento) CALL busca_depto() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD departamento END IF IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD departamento END IF LET acc_per.departamento = req_per.depart DISPLAY BY NAME acc_per.departamento NEXT FIELD nivel_emp WHEN INFIELD (nivel_emp) CALL busca_nivel() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD nivel_emp END IF IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD nivel_emp END IF DISPLAY BY NAME acc_per.nivel_emp NEXT FIELD cod_puesto 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 descrip3 = nombre LET acc_per.num1_emp = despl_emp[curr1].num_emp LET acc_per.departamento1 = despl_emp[curr1].departamento LET acc_per.nivel1_emp = despl_emp[curr1].nivel_emp LET acc_per.cod1_puesto = despl_emp[curr1].cod_puesto DISPLAY BY NAME acc_per.num1_emp,acc_per.departamento1, acc_per.nivel1_emp,acc_per.cod1_puesto DISPLAY BY NAME descrip3 ATTRIBUTE(blue) 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 descrip4 = nombre LET acc_per.num2_emp = despl_emp[curr1].num_emp LET acc_per.departamento2 = despl_emp[curr1].departamento LET acc_per.nivel2_emp = despl_emp[curr1].nivel_emp LET acc_per.cod2_puesto = despl_emp[curr1].cod_puesto DISPLAY BY NAME acc_per.num2_emp,acc_per.departamento2, acc_per.nivel2_emp,acc_per.cod2_puesto DISPLAY BY NAME descrip4 ATTRIBUTE(blue) 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 descrip5 = nombre LET acc_per.num3_emp = despl_emp[curr1].num_emp LET acc_per.departamento3 = despl_emp[curr1].departamento LET acc_per.nivel3_emp = despl_emp[curr1].nivel_emp LET acc_per.cod3_puesto = despl_emp[curr1].cod_puesto DISPLAY BY NAME acc_per.num3_emp,acc_per.departamento3, acc_per.nivel3_emp,acc_per.cod3_puesto DISPLAY BY NAME descrip5 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 acc_per.cod_puesto = req_per.cod_puesto_r SELECT k.nom_puesto INTO puesto.nom_puesto FROM adtb00004 k WHERE k.cod_puesto = acc_per.cod_puesto DISPLAY BY NAME acc_per.cod_puesto DISPLAY BY NAME puesto.nom_puesto ATTRIBUTE(blue) NEXT FIELD sueldo_ac END CASE AFTER FIELD fecha IF acc_per.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF AFTER FIELD fech_efec IF acc_per.fech_efec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_efec END IF IF acc_per.cod_mto = 3 THEN IF acc_per.sec_mto > 1 AND acc_per.sec_mto <> 20 THEN CALL cantidad_dias() END IF END IF AFTER FIELD departamento IF acc_per.departamento IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD departamento ELSE SELECT b.nom_dpto INTO nombre_dpto FROM adtb00001 b WHERE b.departamento = acc_per.departamento and b.status_t is null DISPLAY BY NAME nombre_dpto END IF AFTER FIELD nivel_emp IF acc_per.nivel_emp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nivel_emp END IF AFTER FIELD cod_puesto IF acc_per.cod_puesto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_puesto ELSE SELECT a.nom1_emp,a.nom2_emp,a.apell1_emp,a.apell2_emp INTO nombre9,nombre10,apellido9,apellido10 FROM adtb00003 a WHERE a.num_emp = acc_per.num_emp and (a.status_t is null OR a.status_t != "E") IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD departamento END IF IF status >= 0 THEN IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD departamento END IF ELSE CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF END IF SELECT a.nom_puesto INTO puesto.nom_puesto FROM adtb00004 a WHERE a.cod_puesto = acc_per.cod_puesto and a.status_t is null LET descrip1 = nombre9 clipped," ",nombre10 clipped LET descrip2 = apellido9 clipped," ",apellido10 clipped DISPLAY BY NAME descrip1,descrip2,puesto.nom_puesto END IF AFTER FIELD sueldo_ac IF acc_per.sueldo_ac IS NULL OR acc_per.sueldo_ac < 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sueldo_ac END IF AFTER FIELD nomina IF acc_per.nomina IS NOT NULL THEN IF acc_per.nomina = "S" THEN LET descr = "SEMANAL" END IF IF acc_per.nomina = "Q" THEN LET descr = "QUINCENAL" END IF ELSE LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nomina END IF DISPLAY BY NAME descr ATTRIBUTE(blue) AFTER FIELD sexo IF acc_per.sexo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sexo END IF IF acc_per.sexo = "M" THEN LET tipo_sexo = "MASCULINO" ELSE IF acc_per.sexo = "F" THEN LET tipo_sexo = "FEMENINO" ELSE NEXT FIELD sexo END IF END IF DISPLAY BY NAME tipo_sexo ATTRIBUTE(blue) AFTER FIELD estado_civil IF acc_per.estado_civil IS NOT NULL THEN IF acc_per.estado_civil = "S" THEN LET estado = "SOLTERO" END IF IF acc_per.estado_civil = "C" THEN LET estado = "CASADO" END IF ELSE LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD estado_civil END IF DISPLAY BY NAME estado ATTRIBUTE(blue) ## AQUI SE MODIFICA EL EMPLEADO QUE SOLICITA LA ACCION DE PERSONAL AFTER FIELD num1_emp IF acc_per.num1_emp IS NOT NULL THEN SELECT b.departamento,b.nivel_emp,b.cod_puesto, b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp INTO acc_per.departamento1,acc_per.nivel1_emp, acc_per.cod1_puesto,nombre1,nombre2,apellido1, apellido2 FROM adtb00003 b WHERE b.num_emp = acc_per.num1_emp AND (b.status_t IS NULL OR b.status_t != "E") 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 descrip3 = nombre1 clipped," ",nombre2 clipped," ", apellido1 clipped," ",apellido2 clipped DISPLAY BY NAME acc_per.departamento1,acc_per.nivel1_emp, acc_per.cod1_puesto,descrip3 ATTRIBUTE(blue) NEXT FIELD num2_emp ## AQUI SE MODIFICA EL EMPLEADO QUE AUTORIZA LA ACCION DE PERSONAL AFTER FIELD num2_emp IF acc_per.num2_emp IS NOT NULL THEN SELECT b.departamento,b.nivel_emp,b.cod_puesto, b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp INTO acc_per.departamento2,acc_per.nivel2_emp, acc_per.cod2_puesto,nombre3,nombre4,apellido3, apellido4 FROM adtb00003 b WHERE b.num_emp = acc_per.num2_emp AND (b.status_t IS NULL OR b.status_t != "E") 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 descrip4 = nombre3 clipped," ",nombre4 clipped," ", apellido3 clipped," ",apellido4 clipped DISPLAY BY NAME acc_per.departamento2,acc_per.nivel2_emp, acc_per.cod2_puesto,descrip4 ATTRIBUTE(blue) NEXT FIELD num3_emp ## AQUI SE MODIFICA EL EMPLEADO QUE APRUEBA LA ACCION DE PERSONAL AFTER FIELD num3_emp IF acc_per.num3_emp IS NOT NULL THEN SELECT b.departamento,b.nivel_emp,b.cod_puesto, b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp INTO acc_per.departamento3,acc_per.nivel3_emp, acc_per.cod3_puesto,nombre5,nombre6,apellido5, apellido6 FROM adtb00003 b WHERE b.num_emp = acc_per.num3_emp AND (b.status_t IS NULL OR b.status_t != "E") 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 descrip5 = nombre5 clipped," ",nombre6 clipped," ", apellido5 clipped," ",apellido6 clipped DISPLAY BY NAME acc_per.departamento3,acc_per.nivel3_emp, acc_per.cod3_puesto,descrip5 ATTRIBUTE(blue) #### Verifica si el usuario presiono la tecla END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF UPDATE adtb00020 SET fecha = acc_per.fecha, fech_efec = acc_per.fech_efec, departamento = acc_per.departamento, nivel_emp = acc_per.nivel_emp, cod_puesto = acc_per.cod_puesto, sueldo_ac = acc_per.sueldo_ac, nomina = acc_per.nomina, estado_civil = acc_per.estado_civil, tipo_sangre = acc_per.tipo_sangre, observacion = acc_per.observacion, num1_emp = acc_per.num1_emp, departamento1 = acc_per.departamento1, nivel1_emp = acc_per.nivel1_emp, cod1_puesto = acc_per.cod1_puesto, num2_emp = acc_per.num2_emp, departamento2 = acc_per.departamento2, nivel2_emp = acc_per.nivel2_emp, cod2_puesto = acc_per.cod2_puesto, num3_emp = acc_per.num3_emp, departamento3 = acc_per.departamento3, nivel3_emp = acc_per.nivel3_emp, cod3_puesto = acc_per.cod3_puesto, us_mod = USER, fech_mod = CURRENT WHERE num_emp = acc_per.num_emp and num_trx = acc_per.num_trx UPDATE adtb00038 SET cedula_n = acc_per.cedula WHERE @num_emp = acc_per.num_emp UPDATE adtb00030 SET sexo = acc_per.sexo WHERE @num_emp = acc_per.num_emp IF acc_per.cod_mto = 3 THEN IF acc_per.sec_mto > 1 AND acc_per.sec_mto <> 20 THEN UPDATE adtb00032 SET (num_dia,us_mod,fech_mod)= (cantidad_d,USER,CURRENT) WHERE @num_trx = acc_per.num_trx AND @num_emp = acc_per.num_emp AND @cod_mov = acc_per.cod_mto AND @sec_mov = acc_per.sec_mto AND @status_t IS NULL END IF END IF IF acc_per.cod_mto = 1 THEN UPDATE adtb00003 SET departamento = acc_per.departamento, nivel_emp = acc_per.nivel_emp, cod_puesto = acc_per.cod_puesto, estado_civil = acc_per.estado_civil, tipo_sangre = acc_per.tipo_sangre, sueldo_ac = acc_per.sueldo_ac, nomina = acc_per.nomina, fech_efec = acc_per.fech_efec WHERE @num_emp = acc_per.num_emp END IF UPDATE adtb00021 SET sexo = acc_per.sexo WHERE num_emp = acc_per.num_emp AND cod_par = 0 AND sec_par=0 UPDATE adtb00017 SET departamento = acc_per.departamento, nivel_emp = acc_per.nivel_emp, cod_puesto = acc_per.cod_puesto, fech_efec = acc_per.fech_efec, salario = acc_per.sueldo_ac, liquidacion = acc_per.sueldo_lq WHERE num_emp = acc_per.num_emp and num_trx = acc_per.num_trx and cod_mto = acc_per.cod_mto and sec_mto = acc_per.sec_mto LET numero_msg = 13 CALL msg(numero_msg) LABEL preg: PROMPT "Desea Imprimir Este Documento (S/N)?..." FOR CHAR optt LET optt = UPSHIFT(optt) IF optt IS NULL OR (optt != "S" AND optt != "N") THEN GOTO preg END IF IF optt = "S" THEN START REPORT imp_accion TO PRINTER OUTPUT TO REPORT imp_accion() FINISH REPORT imp_accion END IF COMMAND KEY ("L") "eLiminar" UPDATE adtb00020 SET status_t = "E" WHERE num_trx = acc_per.num_trx UPDATE adtb00017 SET status_t = "E" WHERE num_trx = acc_per.num_trx LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM EXIT MENU END MENU END FUNCTION FUNCTION desplegar() IF acc_per.cod_sol is not null THEN SELECT nom1_sol,nom2_sol,apell1_sol,apell2_sol INTO nombre9,nombre10,apellido9,apellido10 FROM adtb00012 WHERE cod_sol = acc_per.cod_sol ELSE SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp INTO nombre9,nombre10,apellido9,apellido10 FROM adtb00003 WHERE num_emp = acc_per.num_emp END IF LET descrip1 = nombre9 clipped," ",nombre10 clipped LET descrip2 = apellido9 clipped," ",apellido10 clipped IF acc_per.nomina = "S" THEN LET descr = "SEMANAL" END IF IF acc_per.nomina = "Q" THEN LET descr = "QUINCENAL" END IF IF acc_per.nomina = "V" THEN LET descr = "VENDEDOR" END IF IF acc_per.estado_civil = "S" THEN LET estado = "SOLTERO" END IF IF acc_per.estado_civil = "C" THEN LET estado = "CASADO" END IF IF acc_per.sexo = "M" THEN LET tipo_sexo = "MASCULINO" END IF IF acc_per.sexo = "F" THEN LET tipo_sexo = "FEMENINO" END IF SELECT a.desc_mto INTO desc_mto FROM adtb00009 a WHERE a.cod_mto = acc_per.cod_mto and a.sec_mto = acc_per.sec_mto SELECT nom_dpto INTO nombre_dpto FROM adtb00001 WHERE departamento = acc_per.departamento SELECT b.nom_puesto INTO puesto.nom_puesto FROM adtb00004 b WHERE b.cod_puesto = acc_per.cod_puesto SELECT c.nom1_emp,c.nom2_emp,c.apell1_emp,c.apell2_emp INTO nombre1,nombre2,apellido1,apellido2 FROM adtb00003 c WHERE c.num_emp = acc_per.num1_emp and c.departamento = acc_per.departamento1 and c.nivel_emp = acc_per.nivel1_emp and c.cod_puesto = acc_per.cod1_puesto LET descrip3 = 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 = acc_per.num2_emp and departamento = acc_per.departamento2 and nivel_emp = acc_per.nivel2_emp and cod_puesto = acc_per.cod2_puesto LET descrip4 = 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 = acc_per.num3_emp and departamento = acc_per.departamento3 and nivel_emp = acc_per.nivel3_emp and cod_puesto = acc_per.cod3_puesto LET descrip5 = nombre5 clipped," ",nombre6 clipped," ",apellido5 clipped," ",apellido6 clipped # Busqueda del empleado en la table historica del empleado SELECT liquidacion INTO acc_per.sueldo_lq FROM adtb00017 WHERE num_trx = acc_per.num_trx and num_emp = acc_per.num_emp IF acc_per.sueldo_lq is null THEN LET acc_per.sueldo_lq = 0 END IF SELECT a.cedula_n INTO acc_per.cedula FROM adtb00038 a WHERE a.num_emp = acc_per.num_emp DISPLAY BY NAME acc_per.* DISPLAY BY NAME descrip1,descrip2,nombre_dpto,puesto.nom_puesto,descr, desc_mto,estado,tipo_sexo,descrip3,descrip4,descrip5 ATTRIBUTE(blue) END FUNCTION ## FUNCION PARA EL CALCULO Y REGISTRO DE LAS VACACIONES FUNCTION vacaciones() LET int_flag = FALSE OPEN WINDOW adwindow7 AT 10,12 WITH FORM "adfmwd007" ATTRIBUTE(BORDER,FORM LINE FIRST + 2) LABEL vorver: INPUT BY NAME vacacion.* AFTER FIELD fecha_sal IF vacacion.fecha_sal IS NULL THEN LET vacacion.fecha_sal = today END IF AFTER FIELD fecha_ent IF vacacion.fecha_ent IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_ent END IF ## VERIFICA QUE LA FECHA DE REGRESO DE VACACIONES NO SEA MENOR QUE LA FECHA ## DE INICIO DE LAS VACACIONES IF vacacion.fecha_ent < vacacion.fecha_sal THEN LET numero_msg = 51 CALL msg(numero_msg) NEXT FIELD fecha_ent END IF ####### CALCULO DE LOS DIAS VACACIONADOS ########### LET vacacion.dias_tomados = vacacion.fecha_ent - vacacion.fecha_sal SELECT a.fech_efec INTO fecha5 FROM adtb00003 a WHERE a.num_emp = acc_per.num_emp ############## PROCESO PARA CALCULAR LOS DIAS QUE DEBE VACACIONAR ####### LET vacac = vacacion.fecha_sal - fecha5 LET dias1 = vacac/365 SELECT sum(a.num_dia) INTO dia FROM adtb00032 a WHERE a.num_emp = acc_per.num_emp AND a.cod_mov = 3 AND a.sec_mov = 1 AND a.fecha <= vacacion.fecha_ent AND a.status_t IS NULL IF dia IS NULL THEN LET dia = 0 END IF IF acc_per.nivel_emp = 1 THEN LET dias2= (dias1 * 17) ELSE IF vacac < 365 THEN LET dias2 = 7 END IF IF vacac >= 365 AND vacac < 1825 THEN LET dias2= 10 * dias1 ELSE IF vacac >= 1825 AND vacac < 3650 THEN LET dias1= dias1 - 4 LET dias2= (dias1 * 14) + 40 ELSE LET dias1= (dias1 - 9) LET dias2= (dias1 * 17) + 110 END IF END IF END IF LET dias2 = dias2 - dia LET vacacion.dias_vac = dias2 LET vacacion.dias_vac = dia DISPLAY BY NAME vacacion.dias_tomados,vacacion.dias_vac IF vacacion.dias_vac != 0 THEN IF vacacion.dias_vac <= 0 THEN LET numero_msg= 144 CALL msg(numero_msg) NEXT FIELD fecha_sal END IF END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) INITIALIZE vacacion.* TO NULL LET numero_msg = 4 LET int_flag = FALSE CLOSE WINDOW adwindow7 END IF # IF numero_msg != 4 THEN PROMPT "Informacion Correcta? (S/N).." FOR CHAR opt LET opt = UPSHIFT(opt) IF opt = "S" THEN CLOSE WINDOW adwindow7 ELSE GOTO vorver END IF #END IF END FUNCTION ## VENTANA DE LOS NIVELES DEL LOS EMPLEADOS FUNCTION busca_nivel() OPEN WINDOW busqueda AT 10,10 WITH FORM "adfmwd008" ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last) CONSTRUCT criterio ON adtb00024.nivel_emp FROM adtb00024.nivel_emp LET selec = "SELECT nivel_emp,desc_nivel FROM adtb00024 ", "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_nivel[idx].* IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) EXIT FOREACH END IF LET despl_nivel[idx].nivel_emp = buscar_nivel[idx].nivel_emp LET despl_nivel[idx].desc_nivel = buscar_nivel[idx].desc_nivel clipped LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY despl_nivel TO s_nivel.* LET curr = arr_curr() LET acc_per.nivel_emp = despl_nivel[curr].nivel_emp LET nivelar.desc_nivel = despl_nivel[curr].desc_nivel CLOSE WINDOW busqueda END FUNCTION ## VENTANA DE LOS MOVIMIENTOS DE LA ACCION DE PERSONAL FUNCTION busca_movi() OPEN WINDOW busqueda1 AT 10,10 WITH FORM "adfmwd009" ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last) CONSTRUCT criterio ON adtb00009.cod_mto,adtb00009.sec_mto FROM adtb00009.cod_mto,adtb00009.sec_mto LET selec1 = "SELECT cod_mto,sec_mto,desc_mto FROM adtb00009 ", "WHERE status_t is null AND ",criterio clipped, " ORDER BY 1,2 " PREPARE busco1 FROM selec1 DECLARE local1 CURSOR FOR busco1 LET idx = 1 FOREACH local1 INTO buscar_movi[idx].* IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) EXIT FOREACH END IF LET despl_movi[idx].cod_mto = buscar_movi[idx].cod_mto LET despl_movi[idx].sec_mto = buscar_movi[idx].sec_mto LET despl_movi[idx].desc_mto = buscar_movi[idx].desc_mto clipped LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY despl_movi TO s_movi.* LET curr = arr_curr() LET acc_per.cod_mto = despl_movi[curr].cod_mto LET acc_per.sec_mto = despl_movi[curr].sec_mto LET mov_emp.desc_mto = despl_movi[curr].desc_mto CLOSE WINDOW busqueda1 END FUNCTION FUNCTION cantidad_dias() OPEN WINDOW ca_dia AT 10,10 WITH FORM "adfmwd015" ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last) SELECT a.num_dia INTO cantidad_d FROM adtb00032 a WHERE a.num_trx = acc_per.num_trx AND a.num_emp = acc_per.num_emp AND a.cod_mov = acc_per.cod_mto AND a.sec_mov = acc_per.sec_mto AND a.status_t IS NULL INPUT BY NAME cantidad_d WITHOUT DEFAULTS AFTER FIELD cantidad_d IF cantidad_d IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad_d END IF AFTER INPUT IF cantidad_d IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad_d END IF END INPUT IF int_flag THEN LET int_flag = FALSE END IF CLOSE WINDOW ca_dia END FUNCTION REPORT imp_accion() DEFINE doble_of,doble_on,doble_off,negrillas_on,negrillas_off,comp_on,comp_of, normal,doce CHAR(2), direccion CHAR(80), calle CHAR(10), casa_num CHAR(10), barrio CHAR(20), urbanizacion,descrip CHAR(20), telefono CHAR(8), cedula INTEGER, depende,codigo_s,cod_provincia,codigo_n,serie SMALLINT, fecha_nac DATE, provincia,nombre_nac CHAR(30) OUTPUT TOP MARGIN 4 LEFT MARGIN 0 BOTTOM MARGIN 0 FORMAT PAGE HEADER LET doble_on = ASCII 14 LET doble_of = ASCII 20 LET negrillas_on = ASCII 27, ASCII 69 LET negrillas_off = ASCII 27, ASCII 70 LET comp_on = ASCII 15 LET comp_of = ASCII 18 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 # Busca Informaciones Complementarias para el documento SELECT a.calle,a.casa_num,a.barrio,a.urbanizacion,a.telefono,a.cedula, a.serie INTO calle,casa_num,barrio,urbanizacion,telefono,cedula,serie FROM adtb00003 a WHERE a.num_emp = acc_per.num_emp LET direccion = calle clipped," ",casa_num clipped,",",barrio clipped," ", urbanizacion clipped SELECT UNIQUE cod_sol INTO codigo_s FROM adtb00017 WHERE num_emp = acc_per.num_emp and cod_sol is not null SELECT COUNT(*) INTO depende FROM adtb00013 WHERE cod_sol = codigo_s AND cod_par = 4 SELECT @cod_provincia,fech_nac,cod_nac INTO cod_provincia,fecha_nac,codigo_n FROM adtb00012 WHERE cod_sol = codigo_s SELECT nombre_provincia INTO provincia FROM vetb00020 WHERE @cod_provincia = cod_provincia SELECT nom_nac INTO nombre_nac FROM adtb00007 WHERE cod_nac = codigo_n SELECT @desc_mto INTO descrip FROM adtb00009 WHERE @cod_mto = acc_per.cod_mto and @sec_mto = acc_per.cod_mto PRINT doble_on,negrillas_on,"RAYOVAC",doble_of, COLUMN 54, acc_per.num_trx using "&&&&&&",negrillas_off PRINT COLUMN 54,"-------------------------------" PRINT COLUMN 24, negrillas_on,"AVISO DE ACCION EN NOMINAS",negrillas_off, comp_on, COLUMN 62,"|Fecha solicitud", COLUMN 99,"|Fecha efectiva" PRINT COLUMN 92,"|"," ",acc_per.fecha using "dd/mm/yyyy", COLUMN 129,"|"," ",acc_per.fech_efec using "dd/mm/yyyy" PRINT COLUMN 92,"|", COLUMN 129,"|",comp_of PRINT "--------------------------------------------------------------", "---------------------",comp_on PRINT COLUMN 1, "|Apellidos", COLUMN 32, "|Nombres", COLUMN 70, "|Direccion", COLUMN 129, "|Telefono" PRINT COLUMN 1, "|",apellido9 clipped, COLUMN 32, "|",nombre9 clipped, COLUMN 70, "| ",direccion[1,50] clipped, COLUMN 129, "|"," ",telefono PRINT COLUMN 1, "|",apellido10 clipped, COLUMN 32, "|",nombre10 clipped, COLUMN 70, "| ",direccion[51,70] clipped, COLUMN 129, "|",comp_of PRINT "----------------------------------------------------------------", "-------------------",comp_on PRINT COLUMN 1, "|Lugar de Nacimiento", COLUMN 32, "|Fecha de nacimiento", COLUMN 54, "|Nacionalidad", COLUMN 70, "|Estado Civil", COLUMN 90, "|Dependientes", COLUMN 110, "|Cedula No. Serie", COLUMN 129, "|Ficha No." PRINT COLUMN 1, "|"," ",provincia clipped, COLUMN 32, "|"," ",fecha_nac using "dd/mm/yyyy", COLUMN 54, "|"," ",nombre_nac clipped, COLUMN 70, "|"," ",estado, COLUMN 90, "|"," ", depende using "##", COLUMN 110, "|"," ",cedula using "&&&&&","-",serie using "###", COLUMN 129, "|"," ",acc_per.num_emp using "###" PRINT COLUMN 1, "|", COLUMN 32, "|", COLUMN 54, "|", COLUMN 70, "|", COLUMN 90, "|", COLUMN 110, "|", COLUMN 129, "|",comp_of PRINT "---------------------------------------------------------------", "--------------------",comp_on PRINT COLUMN 1, "|Titulo del puesto de trabajo", COLUMN 54, "|Sueldo", COLUMN 70, "|Nomina", COLUMN 90, "|Departamento y seccion" PRINT COLUMN 1, "|"," ",puesto.nom_puesto clipped, COLUMN 54, "|"," ",acc_per.sueldo_ac using "##,###.##", COLUMN 70, "|",descr clipped, COLUMN 90, "|"," ",nombre_dpto PRINT COLUMN 1, "|", COLUMN 54, "|", COLUMN 70, "|", COLUMN 90, "|",comp_of PRINT "---------------------------------------------------------------", "--------------------" SKIP 1 LINES LET mov_emp.desc_mto = " " SELECT a.desc_mto INTO mov_emp.desc_mto FROM adtb00009 a WHERE a.cod_mto = acc_per.cod_mto AND a.sec_mto = acc_per.sec_mto AND a.status_t IS NULL PRINT COLUMN 1, "Descripcion Documento: ",acc_per.cod_mto using "##", acc_per.sec_mto using "###"," ", mov_emp.desc_mto SKIP 1 LINES PRINT COLUMN 1, negrillas_on,"OBSERVACION: ",negrillas_off, acc_per.observacion CLIPPED SKIP 1 LINE PRINT COLUMN 20, "SOLICITADO", COLUMN 40, "AUTORIZADO", COLUMN 60, "APROBADO" SKIP 2 LINE PRINT COLUMN 17, "-------------------", COLUMN 37, "-------------------", COLUMN 57, "-------------------" PRINT COLUMN 1, COLUMN 25, "Firma", COLUMN 43, "Firma", COLUMN 65, "Firma" PRINT comp_of SKIP 1 LINE PRINT COLUMN 17, "-------------------", COLUMN 37, "-------------------", COLUMN 57, "-------------------" PRINT COLUMN 1, COLUMN 22, "Departamento", COLUMN 41, "Departamento", COLUMN 61, "Administracion" PRINT COLUMN 1, "Distribucion:" PRINT COLUMN 1, "-------------" PRINT COLUMN 1, "Original : DEPTO. PERSONAL" PRINT COLUMN 1, "Copia Rosada : NOMINAS" PRINT COLUMN 1, "Copia Amarilla: DEPTO. SOLIC." END REPORT