Files
DECOMARMOL/PROYECTO/nodirback/noprmt028.4gl
T
2026-09-22 20:38:51 -04:00

402 lines
12 KiB
Plaintext

{
========================================================================
PROGRAMA : noprmt028
DESAROLLADO POR: Miguel Pinales / Ing. Juan Soto
FECHA :1/10/2019
=========================================================================
}
GLOBALS "noprgb000.4gl"
DEFINE empleado char(50)
DEFINE data_master RECORD
text_ndocumento INT,
h_fecha DATE,
text_sup VARCHAR(100),
xfecha_cierre DATE,
comentario VARCHAR(100)
END RECORD,
num_emp_super INT,
actualiza char(2),
xnumdoc INT,
xfecha_cierre DATE,
pcompanias RECORD LIKE companias.*
DEFINE DATARR DYNAMIC ARRAY OF RECORD
fecha_extra DATE,
ficha_empleado INT,
nom_empleado VARCHAR(100),
departamento INT,
sueldo FLOAT,
cantidad SMALLINT,
valor FLOAT,
nombre_mov SMALLINT,
cod_mov SMALLINT
END RECORD,
xnombre_mov VARCHAR(50)
DEFINE depart char(20)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "decomarmol" USER usuarios USING clave
SELECT * INTO pcompanias.* FROM companias
--LET usuarios = 'bisaac'
CALL noprmt028()
END MAIN
FUNCTION noprmt028()
OPEN WINDOW HOME_FRM WITH FORM 'nofmmt028.4fd'
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
LET data_master.h_fecha = TODAY
DISPLAY BY NAME data_master.h_fecha
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
FROM adtb00003 a, seg0001 b WHERE b.usuario=usuarios AND b.num_emp=a.num_emp
SELECT CONVERT(CHAR(10),MAX(a.fecha_cierre_nomina),103) INTO xfecha_cierre FROM notb00010 a
WHERE a.fecha_del < today
DISPLAY BY NAME data_master.text_sup,xfecha_cierre
NEXT FIELD h_fecha
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 WHERE a.status_t IS NULL
LET idx =1
FOREACH buscar INTO DATARR[idx].fecha_extra,DATARR[idx].ficha_empleado,DATARR[idx].nom_empleado,
DATARR[idx].sueldo
LET IDX = IDX +1
END FOREACH
END IF
END INPUT
INPUT ARRAY DATARR FROM adetalle.* ATTRIBUTE (WITHOUT DEFAULTS)
BEFORE FIELD departamento
CALL departamentos()
AFTER FIELD DEPARTAMENTO
SELECT a.nom_dpto INTO depart FROM adtb00001 a
WHERE a.status_t IS NULL AND a.departamento=DATARR[ARR_CURR()].departamento
AFTER FIELD ficha_empleado
IF DATARR[arr_curr()].ficha_empleado IS NOT NULL THEN
SELECT RTRIM(a.nom1_emp)||' '||RTRIM(a.apell1_Emp),a.sueldo_ac
INTO DATARR[arr_curr()].nom_empleado,DATARR[arr_curr()].sueldo
FROM adtb00003 a,adtb00004 b
WHERE a.num_emp =DATARR[arr_curr()].ficha_empleado AND a.cod_puesto = b.cod_puesto AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD ficha_empleado
END IF
DISPLAY DATARR[arr_curr()].nom_empleado TO adetalle[arr_curr()].nom_empleado
# DISPLAY DATARR[arr_curr()].sueldo TO adetalle[arr_curr()].sueldo
END IF
AFTER FIELD cantidad
IF DATARR[arr_curr()].ficha_empleado IS NOT NULL THEN
DISPLAY DATARR[arr_curr()].ficha_empleado
DISPLAY WEEKDAY(DATARR[arr_curr()].fecha_extra)
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
DISPLAY 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
# DISPLAY datarr[arr_curr()].sueldo
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()
ON ACTION reporte
CALL reporte()
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 calcula15(salario,cantidad)
DEFINE salario, resultado,cantidad DECIMAL(12,2)
LET resultado = (((salario/23.83)/3) * cantidad)* 1.15
DISPLAY resultado
RETURN resultado
END FUNCTION
FUNCTION calcula35(salario,cantidad)
DEFINE salario, resultado,cantidad DECIMAL(12,2)
LET resultado = (((salario/23.83)/8) * cantidad)* 1.35
DISPLAY resultado
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,pagado, comentario)
VALUES(data_master.text_sup ,data_master.h_fecha ,num_emp_super,
getdate(),usuarios,'NO',data_master.comentario)
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, departamento_labor)
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(), DATARR[idx].departamento)
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
FUNCTION reporte()
DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings()
r_filename STRING, -- filename of Report Design Document including .4rp extension
r_output STRING, -- output format option
preview INTEGER -- TRUE/FALSE, to set preview option
LET r_filename ="noprrp028.4rp"
LET idx = 1
DISPLAY DATARR[1].valor
FOR idx = 1 TO DATARR.getLength()
IF DATARR[idx].cantidad > 0 THEN
IF idx = 1 THEN
IF fgl_report_loadCurrentSettings(r_filename) THEN
LET preview=1
CALL seleccionarsalida() RETURNING r_output -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
--LET idx = 2
START REPORT reporteHoras_rpt TO XML HANDLER HANDLER
DISPLAY "reporte inicio"
END IF
OUTPUT TO REPORT reporteHoras_rpt(DATARR[idx].*, data_master.text_sup, data_master.h_fecha)
END IF
END FOR
IF idx > 1 THEN
FINISH REPORT reporteHoras_rpt
ELSE
CALL fgl_winmessage("INFO", "NO HAY REGISTROS EN ESTE RANGO DE FECHA Y CON LOS PARAMETROS INDICADOS", "INFO")
END IF
END FUNCTION
REPORT reporteHoras_rpt(x, supervisor, fecha_doc)
DEFINE x RECORD
fecha_extra DATE,
ficha_empleado INT,
nom_empleado VARCHAR(100),
departamento INT,
sueldo FLOAT,
cantidad SMALLINT,
valor FLOAT,
nombre_mov SMALLINT,
cod_mov SMALLINT
END RECORD,
fecha_reporte char(30),
fecha char(30),
total_horas INT,
total_valor_horas DECIMAL(12,2),
supervisor VARCHAR(50),
fecha_doc DATE,
departamento char(20)
FORMAT
BEFORE GROUP OF supervisor
PRINTX supervisor
ON EVERY ROW
SELECT a.nom_dpto INTO departamento FROM adtb00001 a WHERE a.departamento = x.departamento
LET fecha_reporte = today USING "mm/dd/yyyy"
LET fecha = data_master.h_fecha USING "mm/dd/yyyy",'--',xfecha_cierre USING "mm/dd/yyyy"
PRINTX fecha, fecha_reporte, pcompanias.nombre, x.nom_empleado,
x.fecha_extra, x.cantidad , x.valor, x.nombre_mov, xnumdoc,
x.fecha_extra, supervisor, fecha_doc,departamento
ON LAST ROW
LET total_horas = SUM(x.cantidad)
LET total_valor_horas = SUM(x.valor)
PRINTX total_horas, total_valor_horas
END REPORT