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

2112 lines
83 KiB
Plaintext

{
------------------------------------------------------------------
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"
DEFINE fecha1 date
#### VARIABLES PARA MODULO DE CALCULO DE VACACIONES ##########
DEFINE cantidad_d INTEGER,
realiza_vacaciones BOOLEAN ,
estado_accion VARCHAR(20),
fecha_inicial,fecha_final DATE
DEFINE vacacion RECORD
fecha_sal DATE,
fecha_ent DATE,
pano SMALLINT,
num_nomi INT,
dias_tomados DEC(12,2),
dias_vac INTEGER,
cod_mov1 SMALLINT,
cod_mov2 SMALLINT,
cod_mov3 SMALLINT,
# num_nomi_no SMALLINT,
valor_vacaciones DEC(12,2),
descrip_mov1 CHAR(50),
descrip_mov2 CHAR(50),
descrip_mov3 CHAR(50)
END RECORD
DEFINE nombre_a CHAR(31),
cedula1 CHAR(20),
tipo_sexo CHAR(9),
xtipo VARCHAR(25)
DEFINE fecha5 DATE
DEFINE necesario RECORD LIKE adtb00012.*
DEFINE personal RECORD LIKE adtb00003.*
DEFINE dias2,vacac,pnis,xcod_mov,xcod_mov2,xcod_mov3 INTEGER
DEFINE tipo_sangre,optt CHAR(3),
tipo_sueldo CHAR(20),
proporcion_vacaciones,salario_quincenal DEC(12,2)
#### MODULO MENU GENERAL DE ACCION DE NOMINA #####
MAIN
DEFER INTERRUPT
CALL STARTLOG("adprmt17.log")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL adprmt017()
END MAIN
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
DISPLAY "adprmt017" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Accion de Personal" AT 6,34 ATTRIBUTE(BLACK)
MENU
ON ACTION nuevo
let int_flag = false
INITIALIZE emplea.* TO NULL
CALL adpcad017()
ON ACTION buscar
let int_flag = false
CALL adpcmf017()
ON ACTION Salir
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.*,pnis
BEFORE INPUT
LET acc_per.fecha=TODAY
CALL codigos_accion()
## 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() RETURNING req_per.depart,nombre_dpto
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() RETURNING acc_per.cod_puesto,puesto.nom_puesto
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
NEXT FIELD cod_puesto
END IF
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
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
SELECT a.cod_mov,a.cod_mov2,a.cod_mov3,a.tipo_mov
INTO xcod_mov,xcod_mov2,xcod_mov3,xtipo FROM adtb00009 a
WHERE a.cod_mto = acc_per.cod_mto
## CHEQUEA QUE NO SE REPITA EL MOVIMIENTO DE EMPLEO PARA EL MISMO SOLICITANTE
AFTER FIELD cod_sol
IF xtipo = "INGRESO" 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
## SELECCIONA LA FECHA DE INGRESO Y EL SUELDO DE LA TABLA DE CONTRATACION
## Y SELECCION DE EMPLEADOS
SELECT UNIQUE convert(char(10),a.fech_efec,101),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 xtipo <> 'INGRESO' 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 cod_sol,convert(char(10),fecha,101),nom1_sol,nom2_sol,apell1_sol,
apell2_sol,calle,casa_num,barrio,urbanizacion,telefono,
cod_provincia,convert(char(10),fech_nac,101),cod_nac,estado_civil,estatura,
peso,cedula,licencia,tipo_sangre,cod_puesto,
cod_prof,sexo,status_t,us_crea,fech_crea,us_mod,fech_mod,
serie
INTO necesario.cod_sol,necesario.fecha,necesario.nom1_sol,
necesario.nom2_sol,necesario.apell1_sol,necesario.apell2_sol,
necesario.calle,necesario.casa_num,necesario.barrio,
necesario.urbanizacion,necesario.telefono,necesario.cod_provincia,
necesario.fech_nac,necesario.cod_nac,necesario.estado_civil,
necesario.estatura,necesario.peso,necesario.cedula,necesario.licencia,
necesario.tipo_sangre,necesario.cod_puesto,
necesario.cod_prof,necesario.sexo,necesario.status_t,
necesario.us_crea,necesario.fech_crea,necesario.us_mod,
necesario.fech_mod,necesario.serie 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 xtipo <> 'INGRESO' 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,
b.cedula,b.cuenta_no,CONVERT(char(10),b.fech_efec,103),b.tipo_sueldo
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,
acc_per.cedula,personal.cuenta_no,fecha5,tipo_sueldo
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
SELECT a.nis INTO pnis FROM adtb00030 a
WHERE a.num_emp = acc_per.num_emp
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,
nombre_dpto,puesto.nom_puesto,pnis,
personal.cuenta_no,acc_per.cedula,
acc_per.sexo,fecha5
ATTRIBUTE(blue)
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,b.tipo_sueldo
INTO nombre9,nombre10,apellido9,apellido10,tipo_sueldo
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
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 xtipo = "VACACIONES" THEN
LET vacacion.fecha_sal=acc_per.fech_efec
CALL vacaciones('A') RETURNING realiza_vacaciones
IF NOT realiza_vacaciones THEN
RETURN
END IF
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
## 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,b.tipo_sueldo
INTO acc_per.departamento1,acc_per.nivel1_emp,
acc_per.cod1_puesto,nombre1,nombre2,apellido1,apellido2,tipo_sueldo
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,b.tipo_sueldo
INTO acc_per.departamento2,acc_per.nivel2_emp,
acc_per.cod2_puesto,nombre3,nombre4,apellido3,apellido4,tipo_sueldo
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,b.tipo_sueldo
INTO acc_per.departamento3,acc_per.nivel3_emp,
acc_per.cod3_puesto,nombre5,nombre6,apellido5,apellido6,tipo_sueldo
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.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
SELECT max(a.num_trx) INTO acc_per.num_trx FROM adtb00020 a
if acc_per.num_trx IS NULL OR acc_per.num_trx=0 THEN
LET acc_per.num_trx=0
END IF
LET acc_per.num_trx=acc_per.num_trx+1
DISPLAY BY NAME acc_per.num_trx
BEGIN WORK
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.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,SUSER_SNAME (),GETDATE(),
null,null,acc_per.sueldo_lq)
SELECT a.num_emp
FROM adtb00038 a
WHERE a.num_emp = acc_per.num_emp
IF STATUS = NOTFOUND THEN
INSERT INTO adtb00038
VALUES (acc_per.num_emp,acc_per.cedula)
END IF
SELECT a.num_emp
FROM adtb00030 a
WHERE a.num_emp = acc_per.num_emp
IF STATUS = NOTFOUND THEN
INSERT INTO adtb00030
VALUES (acc_per.num_emp,acc_per.sexo,pnis)
END IF
IF xtipo = "VACACIONES" THEN
INSERT INTO adtb00032
(num_trx
,num_emp
,cod_mov
,cod_mov2
,fecha
,num_dia
,us_crea
,fech_crea
,fecha_sal
,fecha_ent
,num_nomi
,num_dias_pagados
# ,num_nomi_no
,num_dias_disfrute
,periodo
,valor_vacaciones,
proporcion_vacaciones)
VALUES (acc_per.num_trx,acc_per.num_emp,vacacion.cod_mov1,vacacion.cod_mov2,
acc_per.fech_efec,vacacion.dias_tomados,
usuarios,GETDATE(),vacacion.fecha_sal,vacacion.fecha_ent,
vacacion.num_nomi,dias2,
vacacion.dias_vac, vacacion.pano,vacacion.valor_vacaciones,proporcion_vacaciones)
IF vacacion.cod_mov1 IS NOT NULL AND vacacion.num_nomi IS NOT NULL THEN
INSERT INTO notb00007 (num_nomi,tipo_emp,num_emp,departamento,departamento_afecta,nivel_emp,cod_puesto,cod_mov,valor,us_crea,
fech_crea,num_trx,cod_mto)
VALUES (vacacion.num_nomi,acc_per.nomina,acc_per.num_emp,acc_per.departamento,acc_per.departamento,acc_per.nivel_emp,
acc_per.cod_puesto,vacacion.cod_mov1,proporcion_vacaciones,usuarios,getdate(),
acc_per.num_trx,acc_per.cod_mto)
END IF
IF vacacion.cod_mov2 IS NOT NULL AND vacacion.num_nomi IS NOT NULL THEN
INSERT INTO notb00007 (num_nomi,tipo_emp,num_emp,departamento,departamento_afecta,nivel_emp,cod_puesto,cod_mov,valor,us_crea,
fech_crea,num_trx,cod_mto)
VALUES (vacacion.num_nomi,acc_per.nomina,acc_per.num_emp,acc_per.departamento,acc_per.departamento,acc_per.nivel_emp,
acc_per.cod_puesto,vacacion.cod_mov2,salario_quincenal,usuarios,getdate(),
acc_per.num_trx,acc_per.cod_mto)
END IF
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 xtipo = "INGRESO" THEN
LET personal.paga_seg = "N"
SELECT UNIQUE num_emp FROM adtb00003
WHERE num_emp = acc_per.num_emp
IF STATUS = NOTFOUND THEN
IF personal.cuenta_no IS NULL THEN
LET personal.cuenta_no = 0
END IF
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,SUSER_SNAME (),GETDATE(),SUSER_SNAME (),GETDATE())
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,SUSER_SNAME (),GETDATE(),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 xtipo = "ACTUALIZACION EMPLEADO" THEN
UPDATE adtb00003 SET estado_civil = acc_per.estado_civil
WHERE num_emp = acc_per.num_emp
END IF
IF xtipo="ACTUALIZACION EMPLEADO" 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 xtipo = "ACTUALIZACION EMPLEADO" THEN
UPDATE adtb00003 SET status_t="I"
WHERE num_emp=acc_per.num_emp
END IF
COMMIT WORK
END IF
## ACTUALIZA LA TABLA DE EMPLEADOS EN CUANTO AL MOVIMIENTO DE LAS TERMINACIONES
## DE LA ACCION DE PERSONAL
IF xtipo = "TERMINO" 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"
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
CALL configureoutput("PDF") RETURNING handler
START REPORT imp_accion TO XML HANDLER handler
OUTPUT TO REPORT imp_accion()
FINISH REPORT imp_accion
RUN imprime
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.num_emp
FROM num_trx,cod_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.cod_sol,convert(char(10),a.fecha,103), ",
" CONVERT(CHAR(10),a.fech_efec,103),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_lq,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,a.us_crea,a.fech_crea,a.us_mod, ",
" a.fech_mod,CASE a.status_t WHEN 'E' THEN 'ANULADO' ELSE 'ACTIVO' END, CONVERT(CHAR(10),c.fech_nac,103) ",
"FROM adtb00020 a,adtb00003 c LEFT OUTER JOIN adtb00021 b ON b.num_emp = c.num_emp ",
"WHERE a.num_emp = c.num_emp AND ",criterio clipped,
" ORDER BY a.num_emp"
PREPARE busca FROM selec
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos INTO acc_per.num_trx,acc_per.cod_mto,
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.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,personal.us_crea,personal.fech_crea,
personal.us_mod,personal.fech_mod,estado_accion,personal.fech_nac
IF status >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
ELSE
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 "
ON ACTION imprimir
LET r_filename = 'adprmt017.4rp'
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
LET r_output='PDF'
LET preview=1
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
START REPORT imp_accion TO XML HANDLER handler
OUTPUT TO REPORT imp_accion()
FINISH REPORT imp_accion
COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO acc_per.num_trx,acc_per.cod_mto,
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.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,personal.us_crea,personal.fech_crea,
personal.us_mod,personal.fech_mod,estado_accion,personal.fech_nac
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.num_trx,acc_per.cod_mto,
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.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,personal.us_crea,personal.fech_crea,
personal.us_mod,personal.fech_mod,estado_accion,personal.fech_nac
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.num_trx,acc_per.cod_mto,
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.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,personal.us_crea,personal.fech_crea,
personal.us_mod,personal.fech_mod,estado_accion,personal.fech_nac
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.num_trx,acc_per.cod_mto,
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.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,personal.us_crea,personal.fech_crea,
personal.us_mod,personal.fech_mod,estado_accion,personal.fech_nac
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" "<Esc> Actualiza Registro <Ctrl-C> 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,pnis WITHOUT DEFAULTS
## VENTANAS PARA BUSCAR LOS DEPARTAMENTOS, NIVELES, PUESTOS Y EMPLEADOS
ON KEY (CONTROL-W)
CASE
WHEN INFIELD (departamento)
CALL busca_depto() RETURNING req_per.depart,nombre_dpto
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
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
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 <Ctrl-C>
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 = SUSER_SNAME (),
fech_mod = GETDATE()
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,
nis = pnis
WHERE @num_emp = acc_per.num_emp
IF acc_per.cod_mto = 3 THEN
UPDATE adtb00032 SET (num_dia,us_mod,fech_mod)=
(cantidad_d,SUSER_SNAME (),GETDATE())
WHERE @num_trx = acc_per.num_trx AND @num_emp = acc_per.num_emp AND
@cod_mov = acc_per.cod_mto AND
@status_t IS NULL
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
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
CALL configureoutput('PDF') RETURNING HANDLER
START REPORT imp_accion TO XML HANDLER handler
OUTPUT TO REPORT imp_accion()
FINISH REPORT imp_accion
END IF
}
COMMAND KEY ("L") "eLiminar"
IF estado_accion <> 'ANULADO' THEN
LET optt = fgl_winquestion("ELIMINAR","ESTA SEGURIO DE ANULAR ESTE DOCUMENTO?","NO","YES|NO","QUESTION",0)
IF optt = "YES" THEN
BEGIN WORK
UPDATE adtb00020 SET status_t = "E",
us_mod = usuarios,
fech_mod = getdate()
WHERE num_trx = acc_per.num_trx AND cod_mto = acc_per.cod_mto
UPDATE adtb00017 SET status_t = "E",
us_mod = usuarios,
fech_mod = getdate()
WHERE num_trx = acc_per.num_trx AND cod_mto = acc_per.cod_mto
UPDATE adtb00032 SET status_t ="E",
us_mod = usuarios,
fech_mod = getdate()
WHERE num_trx = acc_per.num_trx
UPDATE notb00007 SET status_t ="E",
us_mod = usuarios,
fech_mod = getdate()
WHERE num_trx = acc_per.num_trx AND cod_mto = acc_per.cod_mto
COMMIT WORK
LET numero_msg = 39
CALL msg(numero_msg)
END IF
ELSE
CALL fgl_winmessage("INFO","EL REGISTRO ESTA ANULADO, NO LO PUEDES ANULAR NUEVA VEZ","INFO")
CONTINUE MENU
END IF
COMMAND "Retornar" "Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION
FUNCTION desplegar()
SELECT a.cod_mov,a.cod_mov2,a.cod_mov3,a.tipo_mov
INTO xcod_mov,xcod_mov2,xcod_mov3,xtipo FROM adtb00009 a
WHERE a.cod_mto = acc_per.cod_mto
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 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,
b.cedula,b.cuenta_no,CONVERT(char(10),b.fech_efec,103),
b.sueldo_ac
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,
acc_per.cedula,personal.cuenta_no,fecha5
FROM adtb00003 b
WHERE b.num_emp = acc_per.num_emp AND (b.status_t IS NULL OR
b.status_t != "E")
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.estado_civil = "U" THEN
LET estado = "UNION LIBRE"
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 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
DISPLAY BY NAME acc_per.*
DISPLAY BY NAME descrip1,descrip2,nombre_dpto,puesto.nom_puesto,
acc_per.cedula,personal.cuenta_no,fecha5,estado_accion
ATTRIBUTE(blue)
## DATOS VACACIONES
IF xtipo = 'VACACIONES' THEN
INITIALIZE vacacion.* TO NULL
SELECT a.cod_mov,a.cod_mov2,a.num_dias_disfrute,CONVERT(CHAR(10),a.fecha_sal,103),CONVERT(CHAR(10),a.fecha_ent,103),
a.num_nomi,
a.num_dias_disfrute,a.periodo,a.valor_vacaciones,a.num_dias_pagados,a.proporcion_vacaciones
INTO vacacion.cod_mov1,vacacion.cod_mov2,vacacion.dias_vac,vacacion.fecha_sal,vacacion.fecha_ent,
vacacion.num_nomi,vacacion.dias_tomados,vacacion.pano ,
vacacion.valor_vacaciones ,dias2, proporcion_vacaciones
FROM adtb00032 a
WHERE a.num_trx = acc_per.num_trx
LET vacacion.descrip_mov1 =NULL
IF vacacion.cod_mov1 IS NOT NULL THEN
SELECT a.descrip_mov INTO vacacion.descrip_mov1 FROM notb00002 a
WHERE a.cod_mov = vacacion.cod_mov1
END IF
IF vacacion.cod_mov2 IS NOT NULL THEN
SELECT a.descrip_mov INTO vacacion.descrip_mov2 FROM notb00002 a
WHERE a.cod_mov = vacacion.cod_mov2
END IF
CALL vacaciones('C') RETURNING realiza_vacaciones # CUANDO ESTA CONSULTANDO ES 'C' Y ADICIONANDO ES 'A'
END IF
END FUNCTION
## FUNCION PARA EL CALCULO Y REGISTRO DE LAS VACACIONES
FUNCTION vacaciones(operacion)
DEFINE fecha_nom CHAR(10),
dias_tomados_real,balance_dias,psueldo,salario,salario_acumulado DEC(12,2),
pfecha,fecha_inicio,fecha_entrada_emp DATE,
dias_sueldo SMALLINT,
sale,operacion VARCHAR(1)
LET int_flag = FALSE
OPEN WINDOW adwindow7 AT 10,12 WITH FORM "adfmwd007"
ATTRIBUTE(BORDER,FORM LINE FIRST + 2)
DISPLAY BY NAME tipo_sueldo
IF operacion ='A' THEN
INPUT BY NAME vacacion.* WITHOUT DEFAULTS
BEFORE INPUT
LET sale = 'N'
LET vacacion.cod_mov1=xcod_mov
LET vacacion.cod_mov2 = NULL
LET vacacion.cod_mov3=xcod_mov3
LET vacacion.descrip_mov1=NULL
LET vacacion.descrip_mov2=NULL
LET vacacion.descrip_mov3=NULL
SELECT a.descrip_mov INTO vacacion.descrip_mov1
FROM notb00002 a WHERE a.cod_mov = vacacion.cod_mov1
SELECT a.descrip_mov INTO vacacion.descrip_mov2
FROM notb00002 a WHERE a.cod_mov = vacacion.cod_mov2
SELECT a.descrip_mov INTO vacacion.descrip_mov3
FROM notb00002 a WHERE a.cod_mov = vacacion.cod_mov3
LET vacacion.pano = YEAR(acc_per.fecha)
DISPLAY BY NAME vacacion.descrip_mov1,vacacion.cod_mov1,vacacion.pano,
vacacion.descrip_mov2,vacacion.descrip_mov3
AFTER FIELD cod_mov1
IF vacacion.cod_mov1 IS NOT NULL THEN
SELECT DISTINCT a.periodo FROM adtb00032 a WHERE a.num_emp = acc_per.num_emp AND
a.periodo = vacacion.pano AND a.status_t IS NULL
IF STATUS <> NOTFOUND THEN
CALL fgl_winmessage("INFO","NO PUEDES PAGARLE VACACIONES A ESTE EMPLEADO EN EL MISMO PERIODO","INFO")
NEXT FIELD cod_mov1
END IF
DISPLAY BY NAME vacacion.dias_tomados,vacacion.valor_vacaciones
END IF
AFTER FIELD fecha_sal
IF vacacion.fecha_sal IS NULL THEN
LET vacacion.fecha_sal = today
END IF
LET vacac = vacacion.fecha_sal - fecha5
IF vacac < 365 THEN
CALL fgl_winmessage("INFO","EMPLEADO NO TIENE EL PERIODO COMPLETO PARA EL PAGO DE VACACIONES","INFO")
LET sale = 'S'
EXIT INPUT
END IF
LET vacacion.fecha_ent = vacacion.fecha_sal + 14
DISPLAY BY NAME vacacion.fecha_ent
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
IF vacacion.fecha_ent - vacacion.fecha_sal > 20 THEN
CALL fgl_winmessage("INFO","FECHA EXCEDE AL LIMITE DISFRUTE","INFO")
NEXT FIELD fecha_sal
END IF
####### CALCULO DE LOS DIAS VACACIONADOS ###########
LET vacacion.dias_tomados = vacacion.fecha_ent - vacacion.fecha_sal
LET dias_tomados_real=0
LET pfecha = vacacion.fecha_sal
FOR idx= 1 TO (vacacion.dias_tomados+1)
IF WEEKDAY(pfecha) <> 6 THEN
IF WEEKDAY(pfecha) <> 0 THEN
LET dias_tomados_real = dias_tomados_real + 1
END IF
END IF
IF WEEKDAY(pfecha) = 0 THEN
LET dias_tomados_real =dias_tomados_real + .5
END IF
LET pfecha = pfecha+1
END FOR
LET vacacion.dias_vac = dias_tomados_real
DISPLAY BY NAME vacacion.dias_vac
AFTER FIELD pano
IF vacacion.pano IS NOT NULL THEN
SELECT SUM(a.num_dia) INTO vacacion.dias_tomados
FROM adtb00032 a
WHERE a.periodo = vacacion.pano AND
a.num_emp = acc_per.num_emp AND
a.status_t IS NULL
IF vacacion.dias_tomados IS NULL THEN
LET vacacion.dias_tomados=0
END IF
LET balance_dias = vacacion.dias_vac - vacacion.dias_tomados
DISPLAY BY NAME vacacion.dias_tomados,balance_Dias
END IF
AFTER FIELD num_nomi
IF vacacion.num_nomi IS NOT NULL THEN
SELECT CONVERT(CHAR(10),a.fecha_al,103) INTO fecha_nom FROM notb00010 a
WHERE a.tipo_emp = acc_per.nomina AND a.num_nomi = vacacion.num_nomi
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("INFO","NOMINA NO EXISTE","INFO")
NEXT FIELD num_nomi
END IF
# SELECT MIN(a.num_nomi) INTO vacacion.num_nomi_no
# FROM notb00010 a
# WHERE a.num_nomi > vacacion.num_nomi AND a.tipo_emp = acc_per.nomina
IF vacac < 1825 THEN
LET dias2=14
ELSE
LET dias2=18
END IF
LET salario_acumulado = 0
IF vacacion.cod_mov1 = 36 THEN
LET salario = 0
SELECT CONVERT(CHAR(10),a.fech_efec,103),a.sueldo_ac INTO fecha_entrada_emp,salario
FROM adtb00003 a
WHERE a.num_emp = acc_per.num_emp
LET salario_quincenal = salario /2
LET dias_sueldo = fecha_nom - fecha_entrada_emp
DISPLAY "dias ",dias_sueldo," tipo ",tipo_sueldo
IF dias_sueldo > 30 AND tipo_sueldo = "VARIABLE" THEN
CALL calcula_salarios(acc_per.nomina,acc_per.num_emp,fecha_nom) RETURNING psueldo,salario_acumulado
DISPLAY BY NAME psueldo,salario_acumulado
ELSE
DISPLAY acc_per.sueldo_ac
LET psueldo = acc_per.sueldo_ac/23.83
DISPLAY "sueldo ",acc_per.sueldo_ac," dias ",dias2
END IF
DISPLAY "DATA ",psueldo," dias ",dias2," salario q ",salario_quincenal
LET proporcion_vacaciones=0
LET vacacion.valor_vacaciones = psueldo*dias2
LET proporcion_vacaciones = vacacion.valor_vacaciones - salario_quincenal
DISPLAY BY NAME fecha_nom,vacacion.valor_vacaciones,proporcion_vacaciones,
salario,salario_quincenal,psueldo,dias2
END IF
END IF
{ AFTER FIELD num_nomi_no
IF vacacion.num_nomi_no IS NOT NULL THEN
SELECT CONVERT(CHAR(10),a.fecha_al,103) FROM notb00010 a
WHERE a.tipo_emp = acc_per.nomina AND a.num_nomi = vacacion.num_nomi_no
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("INFO","NOMINA NO EXISTE","INFO")
NEXT FIELD num_nomi
END IF
END IF
}
AFTER INPUT
## VERIFICA QUE LA FECHA DE REGRESO DE VACACIONES NO SEA MENOR QUE LA FECHA
## DE INICIO DE LAS VACACIONES
IF INT_FLAG THEN
INITIALIZE vacacion.* TO NULL
EXIT INPUT
END IF
IF vacacion.fecha_ent < vacacion.fecha_sal THEN
LET numero_msg = 51
CALL msg(numero_msg)
NEXT FIELD fecha_ent
END IF
IF vacacion.cod_mov1 IS NOT NULL THEN
############## PROCESO PARA CALCULAR LOS DIAS QUE DEBE VACACIONAR #######
IF vacac < 1825 THEN
LET dias2=14
ELSE
LET dias2=18
END IF
DISPLAY BY NAME vacacion.dias_tomados
END IF
#CONTROLA QUE NO PUEDA REALIZAR LA ACCION DE NOMINA EN CASO QUE SE HAYA PAGADO LAS VACACIONES EN EL MISMO PERIODO
SELECT MIN(a.fecha_del) INTO fecha_inicial FROM notb00010 a WHERE a.ano = vacacion.pano
SELECT MAX(a.fecha_al) INTO fecha_final FROM notb00010 a WHERE a.ano = vacacion.pano
SELECT DISTINCT a.num_emp FROM notb00008 a WHERE a.num_emp =acc_per.num_emp AND
a.fecha BETWEEN fecha_inicial AND fecha_final
and a.cod_mov = 36
IF STATUS <> NOTFOUND THEN
CALL msg(144)
NEXT FIELD num_nomi
END IF
LET opt = fgl_Winquestion("INFO","TODA LA INFORMACION ESTA CORRECTA?","NO","YES|NO","QUESTION",0)
IF opt = 'NO' THEN
CONTINUE INPUT
END IF
END INPUT
ELSE
LET salario = 0
SELECT CONVERT(CHAR(10),a.fech_efec,103),a.sueldo_ac INTO fecha_entrada_emp,salario
FROM adtb00003 a
WHERE a.num_emp = acc_per.num_emp
LET salario_quincenal = salario /2
DISPLAY BY NAME proporcion_vacaciones,fecha_nom,tipo_sueldo,salario,salario_quincenal
INPUT BY NAME vacacion.*,dias2 WITHOUT DEFAULTS
END IF
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
RETURN false
END IF
CLOSE WINDOW adwindow7
IF sale = 'N' THEN
RETURN TRUE
ELSE
RETURN FALSE
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].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 mov_emp.desc_mto = despl_movi[curr].desc_mto
CLOSE WINDOW busqueda1
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 CHAR(11),
depende,codigo_s,cod_provincia,codigo_n,serie SMALLINT,
fecha_nac DATE,
provincia,nombre_nac CHAR(30),
hoy VARCHAR(25)
OUTPUT
TOP MARGIN 4
LEFT MARGIN 0
BOTTOM MARGIN 0
FORMAT
ON EVERY ROW
{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
}
LET hoy=CURRENT
LET hoy=hoy[1,16]
# 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
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 a.cod_provincia,CONVERT(CHAR(10),a.fech_nac,103),a.cod_nac
INTO cod_provincia,fecha_nac,codigo_n
FROM adtb00012 a
WHERE a.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 mov_emp.desc_mto
FROM adtb00009
WHERE @cod_mto = acc_per.cod_mto
PRINTX acc_per.num_trx,mov_emp.desc_mto,
acc_per.fecha ,acc_per.fech_efec,apellido9,nombre9 ,
direccion,dias2,
telefono,apellido10,
nombre10 ,
direccion,
provincia ,
personal.fech_nac,
nombre_nac ,
estado,
depende,
cedula,serie,
acc_per.num_emp,
puesto.nom_puesto ,
acc_per.sueldo_ac,
descr,
nombre_dpto,
acc_per.cod_mto ,
mov_emp.desc_mto,
acc_per.observacion,vacacion.*,p_companias.nombre,hoy,descrip3,descrip4,descrip5
END REPORT