Files
MBS/PROYECTO/nodir/noprmt028.4gl
T

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