402 lines
12 KiB
Plaintext
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 |