305 lines
8.6 KiB
Plaintext
305 lines
8.6 KiB
Plaintext
{
|
|
========================================================================
|
|
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 |