{ ======================================================================== PROGRAMA : noprmt028 DESAROLLADO POR: Miguel Pinales / Ing. Juan Soto FECHA :1/10/2019 ========================================================================= } GLOBALS "noprgb000.4gl" DEFINE data_master RECORD text_ndocumento INT, fecha1,fecha2 DATE, departamento INT, text_sup VARCHAR(100) END RECORD, num_emp_super INT, actualiza char(2), xnumdoc INT, xfecha_cierre DATE DEFINE DATARR DYNAMIC ARRAY OF RECORD fecha_extra DATE, ficha_empleado INT, nom_empleado VARCHAR(100), sueldo FLOAT, cantidad SMALLINT, valor FLOAT, nombre_mov VARCHAR(50), cod_mov smallint END RECORD, xnombre_mov VARCHAR(50) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" USER usuarios USING clave CALL noprmt028() END MAIN FUNCTION noprmt028() OPEN WINDOW HOME_FRM WITH FORM 'nofmmt028' MENU ON ACTION nuevo LET actualiza="NO" CALL noprmtad028() ON ACTION modifica LET actualiza="SI" CALL noprmtmf028() ON ACTION salir EXIT MENU END MENU CLOSE WINDOW HOME_FRM END FUNCTION FUNCTION noprmtad028() DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME data_master.* ATTRIBUTE (WITHOUT DEFAULTS) BEFORE INPUT CALL departamento() AFTER FIELD departamento SELECT '('||cast(a.num_emp AS varchar(10))||') '||RTRIM(a.nom1_emp)||' '||RTRIM(a.apell1_Emp)||' '||a.apell2_emp ,a.num_Emp INTO data_master.text_sup,num_emp_super FROM adtb00003 a,adtb00001 b WHERE a.departamento = b.departamento AND a.num_emp = b.num_emp_supervisa SELECT min(fecha_cierre_nomina) INTO xfecha_cierre FROM notb00010 a WHERE fecha_del <=today and status_t is NULL LET xfecha_cierre = xfecha_cierre + 1 DISPLAY BY NAME data_master.text_sup,xfecha_cierre NEXT FIELD fecha1 AFTER INPUT IF actualiza="NO" THEN DECLARE buscar CURSOR FOR SELECT ' ', a.num_emp,RTRIM(a.nom1_emp)||' '||RTRIM(a.apell1_Emp),a.sueldo_ac FROM adtb00003 a LEFT OUTER JOIN checkinout b ON a.num_emp = b.num_emp WHERE a.departamento = data_master.departamento AND b.checktime BETWEEN data_master.fecha1 AND data_master.fecha2 AND a.status_t IS NULL LET idx =1 FOREACH buscar INTO DATARR[idx].* LET IDX = IDX +1 --CALL calcula35(DATARR[idx].sueldo) RETURNING resultado END FOREACH END IF END INPUT INPUT ARRAY DATARR FROM adetalle.* ATTRIBUTE (WITHOUT DEFAULTS) AFTER FIELD cantidad IF DATARR[arr_curr()].ficha_empleado IS NOT NULL THEN IF WEEKDAY(DATARR[arr_curr()].fecha_extra) = 0 THEN CALL busca_mov(2) RETURNING xnombre_mov LET datarr[arr_curr()].cod_mov=2 LET datarr[arr_curr()].nombre_mov=xnombre_mov CALL calcula100(datarr[arr_curr()].sueldo,datarr[arr_curr()].cantidad) RETURNING DATARR[ARR_CURR()].valor ELSE CALL busca_mov(3) RETURNING xnombre_mov LET datarr[arr_curr()].cod_mov=3 LET datarr[arr_curr()].nombre_mov=xnombre_mov CALL calcula35(datarr[arr_curr()].sueldo,datarr[arr_curr()].cantidad) RETURNING DATARR[ARR_CURR()].valor END IF END IF AFTER FIELD fecha_extra IF DATARR[arr_curr()].fecha_extra IS NOT NULL THEN IF DATARR[arr_curr()].fecha_extra > xfecha_cierre THEN CALL msg(57) NEXT FIELD fecha_extra END IF IF DATARR[arr_curr()].fecha_extra > TODAY THEN CALL msg(241) NEXT FIELD fecha_extra END IF END IF ON ACTION guardar CALL salvaInformacion() AFTER INPUT FOR idx = 1 TO datarr.getLength() IF DATARR[idx].ficha_empleado IS NULL AND DATARR[idx].cantidad > 0 THEN CALL msg(16) NEXT FIELD ficha_empleado END IF END FOR END INPUT ON ACTION CANCEL EXIT PROGRAM END DIALOG END FUNCTION FUNCTION calcula35(salario,cantidad) DEFINE salario, resultado,cantidad DECIMAL(12,2) LET resultado = (((salario/23.83)/8) * cantidad)* 1.35 RETURN resultado END FUNCTION FUNCTION calcula100(salario,cantidad) DEFINE salario,cantidad, resultado2 DECIMAL(12,2) LET resultado2 = (((salario/23.83)/8) * cantidad)* 2 RETURN resultado2 END FUNCTION FUNCTION salvaInformacion() DEFINE idx INT BEGIN WORK IF actualiza ="NO" THEN INSERT INTO notb00028 (supervisor ,fecha ,num_emp ,fech_crea ,us_crea ) VALUES (data_master.text_sup, data_master.h_fecha, num_emp_super, getdate(), usuarios ) LET xnumdoc = sqlca.sqlerrd[2] DISPLAY xnumdoc TO text_ndocumento END IF DELETE FROM notb00029 WHERE num_doc=xnumdoc FOR idx = 1 TO DATARR.getLength() IF DATARR[idx].cantidad > 0 THEN INSERT INTO notb00029 (num_doc, fecha, num_emp ,nombre ,sueldo ,cantidad ,valor ,descrip_mov ,cod_mov ,us_crea ,fech_crea ) VALUES (xnumdoc, datarr[idx].fecha_extra, DATARR[idx].ficha_empleado, DATARR[idx].nom_empleado, DATARR[idx].sueldo, DATARR[idx].cantidad, DATARR[idx].valor, DATARR[idx].nombre_mov, datarr[idx].cod_mov, usuarios, getdate() ) END IF END FOR COMMIT WORK CALL fgl_winmessage("INFO","INFORMACION SALVADA","INFO") END FUNCTION FUNCTION noprmtmf028() DEFINE criterio, pquery STRING CONSTRUCT criterio ON a.num_doc, a.fecha FROM text_ndocumento, h_fecha LET pquery = "SELECT a.num_doc, a.fecha ,Cast(a.num_emp as char(10)) +' '+ b.nom1_emp+' '+RTRIM(b.apell1_emp) ", "from notb00028 a, adtb00003 b, seg0001 c ", "where ",criterio clipped," and ", " c.usuario='", usuarios CLIPPED,"' and ", "c.num_emp=b.num_emp" PREPARE comando FROM pquery DECLARE busca SCROLL CURSOR FOR comando OPEN busca FETCH FIRST busca INTO xnumdoc,data_master.h_fecha,data_master.text_sup IF STATUS = NOTFOUND THEN CALL msg(3) RETURN END IF LET data_master.text_ndocumento = xnumdoc DISPLAY BY NAME data_master.* MENU ON ACTION Primero FETCH FIRST busca INTO xnumdoc,data_master.h_fecha,data_master.text_sup IF STATUS = NOTFOUND THEN CALL msg(5) CONTINUE MENU END IF ON ACTION siguiente FETCH NEXT busca INTO xnumdoc,data_master.h_fecha,data_master.text_sup IF STATUS = NOTFOUND THEN CALL msg(4) CONTINUE MENU END IF LET data_master.text_ndocumento = xnumdoc DISPLAY BY NAME data_master.* ON ACTION anterior FETCH NEXT busca INTO xnumdoc,data_master.h_fecha,data_master.text_sup IF STATUS = NOTFOUND THEN CALL msg(5) CONTINUE MENU END IF LET data_master.text_ndocumento = xnumdoc DISPLAY BY NAME data_master.* ON ACTION actualiza DECLARE busca_detalle CURSOR FOR SELECT a.fecha,a.num_emp,a.nombre, a.sueldo,a.cantidad,a.valor,a.descrip_mov,a.cod_mov FROM notb00029 a WHERE a.num_doc = xnumdoc LET i = 1 FOREACH busca_detalle INTO DATARR[i].* LET i = i + 1 END FOREACH CALL noprmtad028() ON ACTION retornar EXIT MENU END MENU END FUNCTION FUNCTION busca_mov(codigo) DEFINE nombre_mov VARCHAR(50), codigo SMALLINT LET nombre_mov = NULL SELECT a.descrip_mov INTO nombre_mov FROM notb00002 a WHERE a.cod_mov = codigo RETURN nombre_mov END FUNCTION