486 lines
14 KiB
Plaintext
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
|