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

562 lines
20 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : NOPRMT009
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Control Periodos de la Nomina
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Agosto 24, 1993
------------------------------------------------------------------
}
GLOBALS "noprgb000.4gl"
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
# LET usuarios = 'jsoto'
# LET clave = 'lmmjvsd2009'
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL noprmt009()
END MAIN
FUNCTION noprmt009()
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
LET formulario = formulario CLIPPED,"nofmmt009"
OPEN FORM nofmmt009 FROM "nofmmt009"
DISPLAY FORM nofmmt009
# CALL pantalla()
# DISPLAY "noprmt009" AT 4,3
# DISPLAY "Control Periodos de la Nomina" AT 6,25
MENU
ON ACTION nuevo
let int_flag = false
CLEAR FORM
CALL nopcad009()
ON ACTION buscar
let int_flag = false
CALL nopcmf009()
ON ACTION Salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION nopcad009()
# WHENEVER ERROR CONTINUE
## Captura los datos que va a contener el registro
INPUT BY NAME per_nomi.*
## Verifica que el periodo de la nomina no exista en el catalogo de periodos.
## Si existe entonces despliega los dato del registro existente.
AFTER FIELD tipo_emp
IF per_nomi.tipo_emp IS NOT NULL THEN
IF per_nomi.tipo_emp = "Q" THEN
LET descr = "QUINCENAL"
END IF
IF per_nomi.tipo_emp = "S" THEN
LET descr = "SEMANAL"
END IF
IF per_nomi.tipo_emp = "V" THEN
LET descr = "VENDEDOR"
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_emp
END IF
AFTER FIELD h_normal
IF per_nomi.h_normal is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_emp
END IF
AFTER FIELD num_nomi
IF per_nomi.num_nomi IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_nomi
ELSE
SELECT a.num_nomi INTO per_nomi.num_nomi FROM notb00010 a
WHERE a.tipo_emp = per_nomi.tipo_emp and
a.num_nomi = per_nomi.num_nomi
IF status >= 0 THEN
IF status != NOTFOUND THEN
IF per_nomi.status_t = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD tipo_emp
END IF
DISPLAY BY NAME per_nomi.*
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD tipo_emp
ELSE
LET per_nomi.mes = NULL
LET per_nomi.ano = NULL
LET per_nomi.num_sem = NULL
LET per_nomi.fecha_del = NULL
LET per_nomi.fecha_al = NULL
DISPLAY BY NAME per_nomi.mes,per_nomi.ano,per_nomi.num_sem,
per_nomi.fecha_del,per_nomi.fecha_al
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
END IF
END IF
AFTER FIELD mes
IF per_nomi.mes IS NOT NULL THEN
SELECT a.descrip INTO nombre_mes FROM mestable a
WHERE a.mes = per_nomi.mes and
a.status_t is null
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD mes
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD mes
END IF
DISPLAY BY NAME nombre_mes
AFTER FIELD ano
IF per_nomi.ano IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ano
END IF
AFTER FIELD num_sem
IF per_nomi.num_sem IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_sem
END IF
AFTER FIELD fecha_del
IF per_nomi.fecha_del IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_del
END IF
AFTER FIELD fecha_al
IF per_nomi.fecha_al IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_al
END IF
IF per_nomi.fecha_al < per_nomi.fecha_del THEN
CALL msg(51)
NEXT FIELD fecha_del
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
IF per_nomi.tipo_emp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_emp
END IF
IF per_nomi.h_normal IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD h_normal
END IF
IF per_nomi.num_nomi IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_nomi
END IF
IF per_nomi.mes IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD mes
END IF
IF per_nomi.ano IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ano
END IF
IF per_nomi.num_sem IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_sem
END IF
IF per_nomi.fecha_del IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_del
END IF
IF per_nomi.fecha_inicio_trabajadas > per_nomi.fecha_final_trabajadas THEN
CALL msg(149)
NEXT FIELD fecha_inicio_trabajadas
END IF
IF per_nomi.fecha_al IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_al
ELSE
INSERT INTO notb00010
(tipo_emp
,h_normal
,num_nomi
,mes
,ano
,num_sem
,fecha_del
,fecha_al
,us_crea
,fech_crea
,fecha_cierre_nomina
,estado_legal
,fecha_inicio_trabajadas
,fecha_final_trabajadas
)
VALUES
(per_nomi.tipo_emp,per_nomi.h_normal,
per_nomi.num_nomi,
per_nomi.mes,per_nomi.ano,
per_nomi.num_sem,
per_nomi.fecha_del,per_nomi.fecha_al,
usuarios,GETDATE(),
per_nomi.fecha_cierre_nomina,per_nomi.estado_legal,
per_nomi.fecha_inicio_trabajadas,per_nomi.fecha_final_trabajadas)
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
NEXT FIELD tipo_emp
END IF
AFTER FIELD fech_mod
EXIT INPUT
END INPUT
END FUNCTION
FUNCTION nopcmf009()
## Aqui se prepara para la captura del criterio de seleccion para modificar
## el registro
# WHENEVER ERROR CONTINUE
CONSTRUCT criterio ON a.tipo_emp,a.num_nomi,a.mes,a.ano FROM tipo_emp,num_nomi,mes,ano
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET SELEC = " SELECT a.tipo_emp,a.h_normal,",
" a.num_nomi,a.mes,a.ano,a.num_sem,CONVERT(CHAR(10),a.fecha_del,103),CONVERT(CHAR(10),a.fecha_al,103), ",
" a.status_t,CONVERT(CHAR(10),a.fecha_cierre_nomina,103),a.estado_legal,a.monto,
a.fecha_inicio_trabajadas,a.fecha_final_trabajadas FROM notb00010 a where ",
criterio clipped,
" ORDER BY 1,2"
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 per_nomi.tipo_emp,per_nomi.h_normal,
per_nomi.num_nomi,per_nomi.mes,
per_nomi.ano,per_nomi.num_sem,
per_nomi.fecha_del,per_nomi.fecha_al,
per_nomi.status_t,
per_nomi.fecha_cierre_nomina,
per_nomi.estado_legal,
per_nomi.monto,
per_nomi.fecha_inicio_trabajadas,
per_nomi.fecha_final_trabajadas
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
SELECT a.descrip INTO nombre_mes FROM mestable a
WHERE a.mes = per_nomi.mes
DISPLAY BY NAME per_nomi.*,nombre_mes
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO per_nomi.tipo_emp,per_nomi.h_normal,
per_nomi.num_nomi,per_nomi.mes,
per_nomi.ano,per_nomi.num_sem,
per_nomi.fecha_del,per_nomi.fecha_al,
per_nomi.status_t,per_nomi.fecha_cierre_nomina,
per_nomi.estado_legal,per_nomi.monto,
per_nomi.fecha_inicio_trabajadas,
per_nomi.fecha_final_trabajadas
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
SELECT a.descrip INTO nombre_mes FROM mestable a
WHERE a.mes = per_nomi.mes
DISPLAY BY NAME per_nomi.*,nombre_mes
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO per_nomi.tipo_emp,per_nomi.h_normal,
per_nomi.num_nomi,per_nomi.mes,
per_nomi.ano,per_nomi.num_sem,
per_nomi.fecha_del,per_nomi.fecha_al,
per_nomi.status_t,per_nomi.fecha_cierre_nomina,
per_nomi.estado_legal,per_nomi.monto,
per_nomi.fecha_inicio_trabajadas,
per_nomi.fecha_final_trabajadas
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
SELECT a.descrip INTO nombre_mes FROM mestable a
WHERE a.mes = per_nomi.mes
DISPLAY BY NAME per_nomi.*,nombre_mes
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO per_nomi.tipo_emp,per_nomi.h_normal,
per_nomi.num_nomi,per_nomi.mes,
per_nomi.ano,per_nomi.num_sem,
per_nomi.fecha_del,per_nomi.fecha_al,
per_nomi.status_t,per_nomi.fecha_cierre_nomina,
per_nomi.estado_legal,per_nomi.monto,
per_nomi.fecha_inicio_trabajadas,
per_nomi.fecha_final_trabajadas
SELECT a.descrip INTO nombre_mes FROM mestable a
WHERE a.mes = per_nomi.mes
DISPLAY BY NAME per_nomi.*,nombre_mes
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO per_nomi.tipo_emp,per_nomi.h_normal,
per_nomi.num_nomi,per_nomi.mes,
per_nomi.ano,per_nomi.num_sem,
per_nomi.fecha_del,per_nomi.fecha_al,
per_nomi.status_t,per_nomi.fecha_cierre_nomina,
per_nomi.estado_legal,per_nomi.monto,
per_nomi.fecha_inicio_trabajadas,
per_nomi.fecha_final_trabajadas
SELECT a.descrip INTO nombre_mes FROM mestable a
WHERE a.mes = per_nomi.mes
DISPLAY BY NAME per_nomi.*,nombre_mes
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger"
"<Esc> Actualiza Registro <CTRL-C> Cancela Operacion"
IF per_nomi.status_t = "P" THEN
LET numero_msg = 199
CALL msg(numero_msg)
RETURN
END IF
IF per_nomi.status_t = "E" THEN
LET numero_msg = 39
CALL msg(numero_msg)
RETURN
END IF
IF per_nomi.status_t = "P" THEN
LET numero_msg = 199
CALL msg(numero_msg)
RETURN
END IF
INPUT BY NAME per_nomi.h_normal,per_nomi.mes,per_nomi.ano,
per_nomi.num_sem,
per_nomi.fecha_del,per_nomi.fecha_al,
per_nomi.fecha_cierre_nomina,
per_nomi.fecha_inicio_trabajadas,
per_nomi.fecha_final_trabajadas,
per_nomi.estado_legal,
per_nomi.us_crea,per_nomi.fech_crea,
per_nomi.us_mod,per_nomi.fech_mod WITHOUT DEFAULTS
AFTER FIELD h_normal
IF per_nomi.h_normal is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_emp
END IF
AFTER FIELD mes
IF per_nomi.mes IS NOT NULL THEN
SELECT a.descrip INTO nombre_mes FROM mestable a
WHERE a.mes = per_nomi.mes and
status_t is null
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD mes
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD mes
END IF
DISPLAY BY NAME nombre_mes
AFTER FIELD ano
IF per_nomi.ano IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ano
END IF
AFTER FIELD num_sem
IF per_nomi.num_sem IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_sem
END IF
AFTER FIELD fecha_del
IF per_nomi.fecha_del IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_del
END IF
AFTER FIELD fecha_al
IF per_nomi.fecha_al IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_al
END IF
IF per_nomi.fecha_al < per_nomi.fecha_del THEN
CALL msg(51)
NEXT FIELD fecha_del
END IF
#### 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
CALL integridad()
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
IF per_nomi.fecha_inicio_trabajadas > per_nomi.fecha_final_trabajadas THEN
CALL msg(149)
NEXT FIELD fecha_inicio_trabajadas
END IF
UPDATE notb00010 SET h_normal = per_nomi.h_normal,
mes = per_nomi.mes,
ano = per_nomi.ano,
num_sem = per_nomi.num_sem,
fecha_del = per_nomi.fecha_del,
fecha_al = per_nomi.fecha_al,
fecha_cierre_nomina = per_nomi.fecha_cierre_nomina,
us_mod = SUSER_SNAME(),
fech_mod = GETDATE(),
estado_legal = per_nomi.estado_legal,
fecha_inicio_trabajadas = per_nomi.fecha_inicio_trabajadas,
fecha_final_trabajadas = per_nomi.fecha_final_trabajadas
WHERE tipo_emp = per_nomi.tipo_emp and
num_nomi = per_nomi.num_nomi
LET numero_msg = 13
CALL msg(numero_msg)
EXIT INPUT
END INPUT
COMMAND KEY ("L") "eLiminar"
UPDATE notb00010 SET status_t = "E",
us_mod = usuarios,
fech_mod = getdate()
WHERE tipo_emp = per_nomi.tipo_emp and
num_nomi = per_nomi.num_nomi
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND KEY ("C") "Activa"
UPDATE notb00010 SET status_t = NULL,
us_mod = suser_sname(),
fech_mod = getdate()
WHERE num_nomi = per_nomi.num_nomi AND
tipo_emp = per_nomi.tipo_emp
CALL fgl_winmessage("Warning","Registro Activado","stop")
COMMAND "Retornar"
"Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION