632 lines
19 KiB
Plaintext
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
|