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

632 lines
19 KiB
Plaintext

GLOBALS "noprgb000.4gl"
DEFINE main_r RECORD
num_emp SMALLINT,
departamento SMALLINT,
nivel_emp SMALLINT,
cod_puesto SMALLINT,
descrip1 STRING,
num_doc SMALLINT,
cod_mov SMALLINT,
descrip_mov STRING,
moneda INT,
monto DECIMAL(10, 2),
monto2 DECIMAL(10, 2),
porciento DECIMAL(5, 2),
fecha DATE,
status_t CHAR(1),
us_crea STRING,
fech_crea DATE,
us_mod STRING,
fech_mod DATE
END RECORD
DEFINE p_nomina CHAR(1)
DEFINE num_ctrl, num_ctrl1 CHAR(8)
DEFINE monto1 DECIMAL(12, 2)
DEFINE
checker DECIMAL(12, 2),
num_nomi SMALLINT,
pfecha, fecha1 DATE
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL noprmt040()
END MAIN
FUNCTION noprmt040()
OPEN FORM nofmmt040 FROM "nofmmt040"
DISPLAY FORM nofmmt040
MENU
ON ACTION nuevo
INITIALIZE main_r.* TO NULL
CALL agregar()
ON ACTION consultar
CALL consultar_editar()
ON ACTION Salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION agregar()
INPUT BY NAME main_r.* ATTRIBUTES(WITHOUT DEFAULTS)
AFTER FIELD num_emp
IF main_r.num_emp IS NOT NULL THEN
SELECT departamento,
nivel_emp,
cod_puesto,
nom1_emp,
apell1_emp,
nomina
INTO main_r.departamento,
main_r.nivel_emp,
main_r.cod_puesto,
nombre1,
apellido1,
p_nomina
FROM adtb00003
WHERE num_emp = main_r.num_emp
AND (status_t IS NULL OR status_t = "I")
IF status = NOTFOUND THEN
LET numero_msg = 159
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_puesto
END IF
LET main_r.descrip1 = nombre1 CLIPPED, " ", apellido1 CLIPPED
DISPLAY BY NAME main_r.departamento,
main_r.nivel_emp,
main_r.cod_puesto,
main_r.descrip1
AFTER FIELD num_doc
IF main_r.num_doc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
LET num_ctrl = main_r.num_doc USING "<<<<<<<<"
LET num_ctrl1 = YEAR(TODAY) USING "&&&&"
IF num_ctrl[1, 2] = num_ctrl1[3, 4] THEN
LET numero_msg = 216
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
AFTER FIELD cod_mov
SELECT UNIQUE @num_doc
FROM notb00022
WHERE @num_emp = main_r.num_emp
AND @num_doc = main_r.num_doc
AND @cod_mov = main_r.cod_mov
IF status >= 0 THEN
IF status != NOTFOUND THEN
IF main_r.status_t = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
SELECT *
INTO main_r.*
FROM notb00022
WHERE num_emp = main_r.num_emp
AND num_doc = main_r.num_doc
AND cod_mov = main_r.cod_mov
DISPLAY BY NAME main_r.*
LET numero_msg = 12
CALL msg(numero_msg)
INITIALIZE main_r.* TO NULL
SLEEP 2
NEXT FIELD num_emp
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
END IF
IF main_r.cod_mov IS NOT NULL THEN
SELECT descrip_mov
INTO main_r.descrip_mov
FROM notb00002
WHERE cod_mov = main_r.cod_mov AND status_t IS NULL
IF status = NOTFOUND THEN
LET numero_msg = 34
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
DISPLAY BY NAME main_r.descrip_mov
AFTER FIELD fecha
IF main_r.fecha IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
AFTER FIELD monto
IF main_r.monto IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD monto
END IF
BEFORE FIELD porciento
LET main_r.porciento = 0
LET main_r.monto2 = 0
DISPLAY BY NAME main_r.porciento, main_r.monto2
AFTER FIELD porciento
IF main_r.porciento IS NOT NULL THEN
LET monto1 = (main_r.monto * main_r.porciento) / 100
LET main_r.monto2 = main_r.monto - monto1
END IF
DISPLAY BY NAME main_r.monto2
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
BEGIN WORK
# Inserta en nomina los main_r de los empleados
DELETE FROM notb00008
WHERE num_emp = main_r.num_emp
AND cod_mov = main_r.cod_mov
AND num_nomi = main_r.num_doc
INSERT INTO notb00008(
num_emp,
departamento,
nivel_emp,
cod_puesto,
cod_mov,
valor,
fecha,
num_nomi,
tipo_emp,
clase_mov,
us_crea,
fech_crea)
VALUES(main_r.num_emp,
main_r.departamento,
main_r.nivel_emp,
main_r.cod_puesto,
main_r.cod_mov,
main_r.monto2,
main_r.fecha,
main_r.num_doc,
p_nomina,
"F",
SUSER_SNAME(),
GETDATE())
INSERT INTO notb00022
VALUES(main_r.num_emp,
main_r.departamento,
main_r.nivel_emp,
main_r.cod_puesto,
main_r.num_doc,
main_r.cod_mov,
main_r.fecha,
main_r.monto,
main_r.porciento,
NULL,
SUSER_SNAME(),
GETDATE(),
NULL,
NULL,
NULL)
COMMIT WORK
LET numero_msg = 1
CALL msg(numero_msg)
END FUNCTION
FUNCTION consultar_editar()
CONSTRUCT criterio
ON a.num_emp, a.num_doc, a.cod_mov
FROM num_emp, num_doc, cod_mov
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET SELEC =
"SELECT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto,",
"num_doc,a.cod_mov,CONVERT(CHAR(10),a.fecha,103),a.monto,a.porciento,a.status_t,a.us_crea,",
" a.fech_crea,a.us_mod,a.fech_mod FROM notb00022 a WHERE a.status_t is null and ",
criterio CLIPPED,
" ORDER BY a.cod_mov,a.num_emp,a.fecha"
PREPARE busca FROM selec
CALL integridad()
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos
INTO main_r.num_Emp,
main_r.departamento,
main_r.nivel_emp,
main_r.cod_puesto,
main_r.num_doc,
main_r.cod_mov,
main_r.fecha,
main_r.monto,
main_r.porciento,
main_r.status_t,
main_r.us_Crea,
main_r.fech_crea,
main_r.us_mod,
main_r.fech_mod
IF status >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
END IF
CALL buscadata()
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO main_r.num_Emp,
main_r.departamento,
main_r.nivel_emp,
main_r.cod_puesto,
main_r.num_doc,
main_r.cod_mov,
main_r.fecha,
main_r.monto,
main_r.porciento,
main_r.status_t,
main_r.us_Crea,
main_r.fech_crea,
main_r.us_mod,
main_r.fech_mod
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
CALL buscadata()
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO main_r.num_Emp,
main_r.departamento,
main_r.nivel_emp,
main_r.cod_puesto,
main_r.num_doc,
main_r.cod_mov,
main_r.fecha,
main_r.monto,
main_r.porciento,
main_r.status_t,
main_r.us_Crea,
main_r.fech_crea,
main_r.us_mod,
main_r.fech_mod
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
CALL buscadata()
COMMAND "Primero" "Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO main_r.num_Emp,
main_r.departamento,
main_r.nivel_emp,
main_r.cod_puesto,
main_r.num_doc,
main_r.cod_mov,
main_r.fecha,
main_r.monto,
main_r.porciento,
main_r.status_t,
main_r.us_Crea,
main_r.fech_crea,
main_r.us_mod,
main_r.fech_mod
CALL buscadata()
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO main_r.num_Emp,
main_r.departamento,
main_r.nivel_emp,
main_r.cod_puesto,
main_r.num_doc,
main_r.cod_mov,
main_r.fecha,
main_r.monto,
main_r.porciento,
main_r.status_t,
main_r.us_Crea,
main_r.fech_crea,
main_r.us_mod,
main_r.fech_mod
CALL buscadata()
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger"
"<Esc> Actualiza Registro <CTRL-C> Cancela Operacion"
IF main_r.status_t = "E" THEN
LET numero_msg = 39
CALL msg(numero_msg)
RETURN
END IF
PREPARE query2
FROM "select top 1 fecha_del, fecha_al from notb00010 where fecha_cierre_nomina < getdate() and status_t is null
order by fecha_cierre_nomina DESC"
EXECUTE query2 INTO pfecha, fecha1
IF main_r.fecha < pfecha OR main_r.fecha > fecha1 THEN
CALL fgl_winmessage(
"FUERA DE RANGO",
"Este documento se encuentra fuera de nomina",
"fa-minus-circle" )
RETURN
END IF
INPUT BY NAME main_r.num_doc,
main_r.monto,
main_r.porciento,
main_r.us_crea,
main_r.fech_crea,
main_r.us_mod,
main_r.fech_mod
WITHOUT DEFAULTS
AFTER FIELD num_doc
IF main_r.num_doc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
LET num_ctrl = main_r.num_doc USING "<<<<<<<<"
LET num_ctrl1 = YEAR(TODAY) USING "&&&&"
IF num_ctrl[1, 2] = num_ctrl1[3, 4] THEN
LET numero_msg = 216
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
AFTER FIELD monto
IF main_r.monto IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD monto
END IF
BEFORE FIELD porciento
LET main_r.monto2 = 0
DISPLAY BY NAME main_r.monto2
AFTER FIELD porciento
IF main_r.porciento IS NOT NULL THEN
LET monto1 = (main_r.monto * main_r.porciento) / 100
LET main_r.monto2 = main_r.monto - monto1
END IF
DISPLAY BY NAME main_r.monto2
#### Verifica si el usuario presiono la tecla <CTRL-C>
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
SELECT nomina
INTO p_nomina
FROM adtb00003
WHERE num_emp = main_r.num_emp
AND (status_t IS NULL OR status_t = "I")
BEGIN WORK
DELETE FROM notb00008
WHERE num_emp = main_r.num_emp
AND cod_mov = main_r.cod_mov
AND num_nomi = main_r.num_doc
SELECT UNIQUE valor
INTO checker
FROM notb00008
WHERE cod_mov = main_r.cod_mov
ORDER BY fech_crea ASC
IF checker > 0 THEN
LET main_r.monto2 = main_r.monto2 * -1
END IF
INSERT INTO notb00008(
num_emp,
departamento,
nivel_emp,
cod_puesto,
cod_mov,
valor,
fecha,
num_nomi,
tipo_emp,
clase_mov,
us_crea,
fech_crea)
VALUES(main_r.num_emp,
main_r.departamento,
main_r.nivel_emp,
main_r.cod_puesto,
main_r.cod_mov,
main_r.monto2,
main_r.fecha,
main_r.num_doc,
p_nomina,
"F",
SUSER_SNAME(),
GETDATE())
CALL integridad()
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
UPDATE notb00022
SET cod_mov = main_r.cod_mov,
fecha = main_r.fecha,
monto = main_r.monto,
porciento = main_r.porciento,
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE num_emp = main_r.num_emp
AND num_doc = main_r.num_doc
AND cod_mov = main_r.cod_mov
CALL integridad()
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
COMMIT WORK
LET numero_msg = 13
CALL msg(numero_msg)
EXIT INPUT
END INPUT
COMMAND KEY("L") "eLiminar"
LET opcion =
fgl_winquestion(
"ELIMINAR",
"ESTA SEGURO DE ELIMINAR ESTE REGISTRO?",
"YES",
"YES|NO",
"question",
0)
DISPLAY opcion
IF opcion = "Y" THEN
BEGIN WORK
UPDATE notb00022
SET status_t = "E",
us_mod = suser_sname(),
fech_mod = getdate()
WHERE notb00022.num_emp = main_r.num_emp
AND notb00022.num_doc = main_r.num_doc
AND notb00022.cod_mov = main_r.cod_mov
UPDATE notb00008
SET status_t = "E",
us_mod = suser_sname(),
fech_mod = getdate()
WHERE notb00008.num_emp = main_r.num_emp
AND notb00008.num_nomi = main_r.num_doc
AND notb00008.cod_mov = main_r.cod_mov
AND notb00008.clase_mov = 'F'
COMMIT WORK
LET numero_msg = 39
CALL msg(numero_msg)
END IF
COMMAND "Retornar" "Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION
FUNCTION buscadata()
SELECT descrip_mov
INTO mov_nomi.descrip_mov
FROM notb00002
WHERE cod_mov = main_r.cod_mov
SELECT nom1_emp, apell1_emp
INTO nombre1, apellido1
FROM adtb00003
WHERE num_emp = main_r.num_emp
LET descrip1 = nombre1 CLIPPED, " ", apellido1 CLIPPED
IF main_r.porciento IS NOT NULL THEN
LET monto1 = (main_r.monto * main_r.porciento) / 100
LET main_r.monto2 = main_r.monto - monto1
END IF
DISPLAY BY NAME main_r.monto2
DISPLAY BY NAME main_r.*, descrip1, mov_nomi.descrip_mov
END FUNCTION