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

486 lines
14 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : ADPRCS001
OBJETIVO : Calcular el monto de liquidacion de empleados
PROGRAMADOR : Tadeo A. Ferreras F.
FECHA REALIZACION : Febrero 02, 1996
------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
DEFINE cons_1 RECORD
num_emp SMALLINT,
nivel_emp SMALLINT,
tipo_emp CHAR(1),
nom1_emp CHAR(15),
apell1_emp CHAR(15),
fecha DATE,
sueldo_ac DECIMAL(12,2)
END RECORD,
nombrer CHAR(31),
fecha1,fecha2 DATE,
dias_a,dias_b,dias_l,dias_t1,dias_t,dias_p,dias_v,dias_1,dias_2,cant_mes,
mesc,cant_mesc,cant_anos INTEGER,
diario,regalia,preaviso,vacacion,cesantia,bonificacion,monto1,
monto2,dedu1,promedio,ahorro,sueldo2,bonificacion1,deduccion,
total_p DECIMAL(12,2)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
let usuarios = "kpolanco"
let clave = "RevolutionX3"
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL adprcs001()
END MAIN
FUNCTION adprcs001()
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM adfmcs001 FROM "adfmcs001"
DISPLAY FORM adfmcs001
DISPLAY "adprcs001" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Calculo de Liquidacion" AT 6,29 ATTRIBUTE(BLACK)
## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA LA
## MODIFICACION DE REGISTROS
INPUT BY NAME decide,fecha1
AFTER FIELD decide
IF decide IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD decide
END IF
AFTER FIELD fecha1
IF fecha1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha1
END IF
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
CONSTRUCT criterio ON a.num_emp FROM num_emp
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET SELEC = "SELECT a.num_emp,a.nivel_emp,a.nomina,a.nom1_emp, ",
" a.apell1_emp,CONVERT(char(10),a.fech_efec,101),a.sueldo_ac ",
"FROM adtb00003 a ",
"WHERE (a.status_t IS NULL OR a.status_t = 'I') AND ",
criterio CLIPPED, " ORDER BY 1 "
PREPARE busca FROM selec
DECLARE dato SCROLL CURSOR FOR busca
OPEN dato
FETCH FIRST dato INTO cons_1.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL despliegue()
MENU "OPCIONES "
COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado"
FETCH NEXT dato INTO cons_1.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
CALL despliegue()
COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS dato INTO cons_1.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
CALL despliegue()
COMMAND "Primero" "Presenta en pantalla el primer registro encontrado"
FETCH FIRST dato INTO cons_1.*
CALL despliegue()
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado"
FETCH LAST dato INTO cons_1.*
CALL despliegue()
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Imprimir" "Imprimir Datos Despleagados"
START REPORT datos_d TO PRINTER
OUTPUT TO REPORT datos_d()
FINISH REPORT datos_d
COMMAND "Retornar" "Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION
FUNCTION despliegue()
LET nombrer = cons_1.nom1_emp CLIPPED," ",cons_1.apell1_emp CLIPPED
LET diario = cons_1.sueldo_ac/23.83
IF YEAR(cons_1.fecha) < YEAR(fecha1) THEN
LET mesc = MONTH(fecha1)
ELSE
LET mesc = MONTH(fecha1) - MONTH(cons_1.fecha)
END IF
LET mesc = mesc - 1
# Calculo de la regalia
LET regalia= (cons_1.sueldo_ac/12)
LET regalia= (regalia*mesc) + ((regalia/30)*DAY(fecha1))
# Calculo de la Bonificacion
LET bonificacion1 = 0
IF YEAR(fecha1) = YEAR(TODAY) THEN
SELECT a.valor INTO bonificacion1 FROM notb00008 a
WHERE YEAR(a.fecha) = YEAR(fecha1) AND a.status_t IS NULL AND
a.num_emp = cons_1.num_emp AND a.cod_mov = 33
ELSE
SELECT a.valor INTO bonificacion1 FROM notb00016 a
WHERE YEAR(a.fecha) = YEAR(fecha1) AND a.status_t IS NULL AND
a.num_emp = cons_1.num_emp AND a.cod_mov = 33
END IF
IF bonificacion1 IS NULL THEN
LET bonificacion1 = 0
END IF
IF bonificacion1 > 0 THEN
LET bonificacion1 = 0
ELSE
SELECT MAX(a.valor) INTO sueldo2 FROM notb00016 a
WHERE YEAR(a.fecha) = YEAR(fecha1) - 1 AND a.status_t IS NULL AND
a.num_emp = cons_1.num_emp AND a.cod_mov = 1
IF cons_1.tipo_emp = "Q" THEN
LET sueldo2 = sueldo2 * 2
ELSE
LET sueldo2 = (sueldo2 * 52)/12
END IF
IF YEAR(fecha1) - YEAR(cons_1.fecha) >= 4 THEN
LET bonificacion1 = ((sueldo2/23.83)*60)
ELSE
IF YEAR(fecha1) - YEAR(cons_1.fecha) >= 2 THEN
LET bonificacion1 = ((sueldo2/23.83)*45)
ELSE
LET bonificacion1=(((sueldo2/23.83)*45)/12)*(12-MONTH(cons_1.fecha))
END IF
END IF
END IF
IF bonificacion1 IS NULL THEN
LET bonificacion1 = 0
END IF
IF fecha1 - cons_1.fecha < 1095 THEN
LET bonificacion= (((cons_1.sueldo_ac/23.83)*45)/12)
ELSE
LET bonificacion= (((cons_1.sueldo_ac/23.83)*60)/12)
END IF
LET bonificacion= (bonificacion*mesc) + ((bonificacion/30)*DAY(fecha1))
LET bonificacion= bonificacion + bonificacion1
# Calculo de Cesantia y Preaviso
LET monto2 = 0
IF YEAR(cons_1.fecha) < YEAR(fecha1) THEN
SELECT SUM(a.valor) INTO monto1 FROM notb00016 a
WHERE a.num_emp = cons_1.num_emp AND a.fecha BETWEEN (fecha1-364) AND
fecha1 AND a.status_t IS NULL AND a.cod_mov IN (1,31,34)
END IF
IF YEAR(fecha1) = YEAR(TODAY) THEN
SELECT SUM(a.valor) INTO monto2 FROM notb00008 a
WHERE a.num_emp = cons_1.num_emp AND a.status_t IS NULL AND
a.cod_mov IN (1,31,34) AND a.fecha <= fecha1
END IF
IF monto1 IS NULL THEN
LET monto1 = 0
END IF
IF monto2 IS NULL THEN
LET monto2 = 0
END IF
IF cons_1.tipo_emp = "S" THEN
LET monto2 = monto2 + ((cons_1.sueldo_ac*12)/52)
END IF
LET monto2 = monto2 + monto1
LET dias_1 = 0
LET dias_2 = 0
LET dias_a = 0
LET dias_b = 0
LET dias_l = 0
LET dias_t = 0
LET dias_t1 = 0
LET dias_v = 0
LET cant_mes = 0
LET cant_mesc = 0
LET cant_anos = 0
LET cant_anos = (fecha1 - cons_1.fecha)/365
IF cant_anos IS NULL OR cant_anos < 1 THEN
LET cant_anos = 0
END IF
LET cant_mes = (fecha1 - cons_1.fecha)
LET cant_mes = (cant_mes/30)
IF DAY(fecha1) < DAY(cons_1.fecha) THEN
LET cant_mes = cant_mes - 1
END IF
IF cant_mes >=12 THEN
LET dias_p = 28
ELSE
IF cant_mes >= 6 AND cant_mes < 12 THEN
LET dias_p = 14
ELSE
IF cant_mes >= 3 AND cant_mes < 6 THEN
LET dias_p = 7
ELSE
LET dias_p = 0
END IF
END IF
END IF
IF cant_mes >= 12 THEN
LET monto2 = monto2/12
LET cant_mes = cant_mes - (cant_anos*12)
ELSE
LET monto2 = monto2/cant_mes
END IF
LET monto2 = monto2/23.83
LET promedio= monto2
#DISPLAY cant_mes AT 21,2
IF cant_anos >= 5 THEN
LET dias_l = 5 * 21
LET dias_l = dias_l + ((cant_anos-5) * 23)
ELSE
LET dias_l = cant_anos * 21
END IF
IF dias_l IS NULL THEN
LET dias_l = 0
END IF
IF cant_mes < 3 THEN
LET dias_a = 0
ELSE
IF cant_mes >= 3 AND cant_mes < 6 THEN
LET dias_a = 6
ELSE
LET dias_a = 13
END IF
END IF
LET dias_l = dias_l + dias_a
IF cons_1.fecha <= "311292" THEN
LET dias_1 = ("311292" - cons_1.fecha)/365
IF dias_1 IS NULL THEN
LET dias_1 = 0
END IF
LET dias_2 = (fecha1 - "311292")/365
IF ((fecha1 - cons_1.fecha)/365) >= 5 THEN
LET dias_2 = (3 * 21) + ((dias_2-3) * 23) + (dias_1 * 15)
ELSE
LET dias_2 = (dias_2 * 21) + (dias_1 * 15)
END IF
LET dias_l = dias_2 + dias_a
END IF
LET cesantia = dias_l * monto2
IF decide = "N" THEN
LET preaviso = 0
ELSE
LET preaviso = dias_p * monto2
END IF
# Calculo de Vacaciones
IF cons_1.fecha <= "010192" THEN
LET fecha2 = "010192"
ELSE
LET fecha2 = cons_1.fecha
END IF
IF ((fecha1 - cons_1.fecha)/365) >= 5 THEN
LET dias_v = 18
ELSE
LET dias_v = 14
END IF
IF cons_1.nivel_emp = 1 THEN
LET dias_v = 21
END IF
IF dias_v IS NULL THEN
LET dias_v = 0
END IF
IF cons_1.tipo_emp = "S" THEN
LET dias_v = 0
END IF
{LET cant_mes = (fecha1 - cons_1.fecha)/30
IF cant_mes >= 12 THEN
LET cant_mesc= cant_mes/12
LET cant_mes = cant_mes - (cant_mesc*12)
END IF}
IF cant_mes >= 5 AND cant_mes < 12 THEN
LET dias_v = dias_v + (cant_mes+1)
END IF
SELECT SUM(a.num_dia) INTO dias_t1 FROM adtb00032 a
WHERE (a.num_emp = cons_1.num_emp) AND (a.status_t IS NULL) AND
(a.cod_mov = 3 AND a.sec_mov = 1) AND
(YEAR(a.fecha) =YEAR(fecha1) - 1 AND MONTH(a.fecha) >=
MONTH(cons_1.fecha))
SELECT SUM(a.num_dia) INTO dias_t FROM adtb00032 a
WHERE (a.num_emp = cons_1.num_emp) AND (a.status_t IS NULL) AND
(a.cod_mov = 3 AND a.sec_mov = 1) AND
(YEAR(a.fecha) = YEAR(fecha1) AND a.fecha <= fecha1)
IF dias_t IS NULL THEN
LET dias_t = 0
END IF
IF dias_t1 IS NULL THEN
LET dias_t1 = 0
END IF
LET dias_t = dias_t + dias_t1
IF dias_t > 10 AND dias_t < 15 THEN
LET dias_t = 10
END IF
IF dias_t > 15 THEN
LET dias_t = 15
END IF
IF cons_1.tipo_emp = "S" THEN
LET dias_t = 0
END IF
IF dias_t > 0 AND cons_1.nivel_emp != 1 THEN
LET dias_t = dias_t + 4
END IF
IF dias_t > 0 AND cons_1.nivel_emp = 1 THEN
LET dias_t = dias_t + 6
END IF
LET dias_v = dias_v - dias_t
LET vacacion = dias_v * diario
# Calculo de Ahorro
IF YEAR(fecha1) = YEAR(TODAY) THEN
SELECT SUM(a.valor)*-1 INTO ahorro FROM notb00008 a
WHERE a.cod_mov IN (11,14) AND a.valor IS NOT NULL AND a.valor < 0 AND
a.num_emp = cons_1.num_emp AND a.fecha <= fecha1
ELSE
SELECT SUM(a.valor)*-1 INTO ahorro FROM notb00016 a
WHERE a.cod_mov IN (11,14) AND a.valor IS NOT NULL AND a.valor < 0 AND
a.num_emp = cons_1.num_emp AND a.fecha <= fecha1
END IF
IF ahorro IS NULL THEN
LET ahorro = 0
END IF
# Calculo de Deducciones
LET deduccion = 0
LET dedu1 = 0
IF YEAR(fecha1) < YEAR(TODAY) THEN
SELECT SUM(a.monto) INTO dedu1 FROM notb00011 a, notb00014 b
WHERE (a.cod_mov=b.cod_mov) AND (a.cod_mov IN (12,13,19,25,26)) AND
(a.num_emp = cons_1.num_emp) AND (a.fecha <= fecha1) AND
(a.status_t IS NULL)
IF dedu1 IS NULL THEN
LET dedu1 = 0
END IF
SELECT SUM(a.valor) INTO deduccion FROM notb00016 a, notb00014 b
WHERE (a.cod_mov=b.cod_mov) AND (a.cod_mov IN (12,13,19,25,26)) AND
(a.valor < 0) AND (a.num_emp = cons_1.num_emp) AND
(a.fecha <= fecha1) AND (a.status_t IS NULL)
IF deduccion IS NULL THEN
LET deduccion = 0
END IF
DISPLAY dedu1," ",deduccion AT 22,2
LET dedu1 = dedu1 + deduccion
LET deduccion = dedu1
ELSE
SELECT SUM(a.valor) INTO deduccion FROM notb00008 a, notb00014 b
WHERE (a.cod_mov=b.cod_mov) AND (a.cod_mov IN (12,13,19,25,26)) AND
(a.valor IS NOT NULL) AND (a.num_emp = cons_1.num_emp) AND
(a.fecha <= fecha1)
END IF
IF deduccion IS NULL OR deduccion < 0 THEN
LET deduccion = 0
END IF
LET total_p = regalia + bonificacion + vacacion + cesantia + preaviso -
deduccion + ahorro
DISPLAY BY NAME cons_1.num_emp,nombrer,cons_1.sueldo_ac,cons_1.fecha,
diario,promedio,regalia,bonificacion,vacacion,dias_v,
cesantia,dias_l,preaviso,dias_p,ahorro,deduccion,total_p
END FUNCTION
REPORT datos_d()
OUTPUT
LEFT MARGIN 0
FORMAT
PAGE HEADER
PRINT COLUMN 1, "adprcs001",
COLUMN 17, "R A Y . O . V A C D O M I N I C A N A, C. X A.",
COLUMN 73, "Pag. ",PAGENO USING "###"
PRINT COLUMN 17, " Sistema de Administracion de Personal",
COLUMN 73, TODAY USING "dd/mm/yyyy"
PRINT COLUMN 17, " Calculo de Liquidacion de Personal",
COLUMN 73, TIME
SKIP 1 LINE
PRINT COLUMN 4, "Fecha Efectiva: ", fecha1 USING "dd/mm/yyyy"
PRINT COLUMN 4, "Empleado : ", cons_1.num_emp USING "<<<<"," ",
nombrer CLIPPED
PRINT COLUMN 4, "Fecha Entrada : ", cons_1.fecha USING "dd/mm/yyyy"
PRINT COLUMN 4, "Sueldo Mensual: ", cons_1.sueldo_ac USING "###,###,###.##",
" ","Diario: ", diario USING "###,###.##",
" ","Promedio: ", promedio USING "###,###.##"
SKIP 1 LINE
PRINT COLUMN 4, "Doble Sueldo : ", regalia USING "###,###,###.##"
PRINT COLUMN 4, "Bonificacion : ", bonificacion USING "###,###,###.##"
PRINT COLUMN 4, "Vacacion : ", vacacion USING "###,###,###.##", " ",
"Cantidad de Dias: ", dias_v USING "###"
PRINT COLUMN 4, "Cesantia : ", cesantia USING "###,###,###.##", " ",
"Cantidad de Dias: ", dias_l USING "###"
PRINT COLUMN 4, "Preaviso : ", preaviso USING "###,###,###.##", " ",
"Cantidad de Dias: ", dias_p USING "###"
PRINT COLUMN 4, "Ahorro : ", Ahorro USING "###,###,###.##"
PRINT COLUMN 4, "Deduccion : ", deduccion USING "###,###,###.##"
PRINT COLUMN 4, " ", "=============="
PRINT COLUMN 4, "Total Calculo : ", total_p USING "###,###,###.##"
END REPORT