{ ------------------------------------------------------------------ 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