Files
MBS/PROYECTO/PRDIR/prprmt001.4gl
T

368 lines
11 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : PRPRMT001
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Periodo de Semana
PROGRAMPROR : Tpreo A. Ferreras F.
FECHA REALIZACION : Sept., 14, 1994.
------------------------------------------------------------------
}
GLOBALS "prprgb000.4gl"
DEFINE dia_sem SMALLINT
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "smarmotech" USER usuarios USING clave
CALL prprmt001()
END MAIN
FUNCTION prprmt001()
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM prfmmt001 FROM "prfmmt001"
DISPLAY FORM prfmmt001
MENU "OPCIONES"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Supr> Cancela Operacion"
let int_flag = false
CLEAR FORM
CALL prpcpr001()
COMMAND "Consultar-modificar"
"<Esc> Realiza Busqueda <Supr> Cancela Operacion"
let int_flag = false
CALL prpcmf001()
COMMAND "Salir" "Retorna Menu Anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION prpcpr001()
# WHENEVER ERROR CONTINUE
## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO
INPUT BY NAME prtb02.*
## VERIFICA QUE EL CODIGO NO EXISTA EN EL CATALOGO DE DEPARTAMENTO. SI EXISTE,
## ENTONCES DESPLEGA LOS DATOS DEL REGISTRO EXISTENTE.
BEFORE FIELD num_semana
SELECT MAX(num_semana) + 1 INTO prtb02.num_semana FROM prtb00002
DISPLAY BY NAME prtb02.num_semana
AFTER FIELD ano
IF LENGTH(prtb02.ano) <> 4 THEN
CALL msg(77)
NEXT FIELD ano
END IF
AFTER FIELD num_semana
IF prtb02.num_semana IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_semana
ELSE
SELECT a.* INTO prtb02.* FROM prtb00002 a
WHERE a.num_semana = prtb02.num_semana
IF status >= 0 THEN
IF status != NOTFOUND THEN
IF prtb02.status_t = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD num_semana
END IF
DISPLAY BY NAME prtb02.*
LET numero_msg = 12
CALL msg(numero_msg)
LET prtb02.semana_del = NULL
NEXT FIELD num_semana
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
END IF
END IF
AFTER FIELD mes
IF prtb02.mes is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD mes
END IF
BEFORE FIELD semana_del
SELECT MAX(a.semana_al) + 1 INTO prtb02.semana_del FROM prtb00002 a
DISPLAY BY NAME prtb02.semana_del
AFTER FIELD semana_del
IF prtb02.semana_del IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD semana_del
END IF
SELECT MAX(a.semana_del) INTO fecha_c FROM prtb00002 a
WHERE a.num_semana < prtb02.num_semana AND
a.status_t IS NULL
IF fecha_c > prtb02.semana_del THEN
LET numero_msg = 300
CALL msg(numero_msg)
NEXT FIELD semana_del
END IF
{
LET dia_sem = WEEKDAY(prtb02.semana_del)
IF dia_sem != 6 THEN
LET numero_msg = 220
CALL msg(numero_msg)
NEXT FIELD semana_del
END IF
}
BEFORE FIELD semana_al
LET prtb02.semana_al = prtb02.semana_del + 6
DISPLAY BY NAME prtb02.semana_al
AFTER FIELD semana_al
IF prtb02.semana_al IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD semana_al
END IF
IF prtb02.semana_del > prtb02.semana_al THEN
LET numero_msg = 53
CALL msg(numero_msg)
NEXT FIELD semana_del
END IF
LET fecha_c = NULL
SELECT MAX(a.semana_al) INTO fecha_c FROM prtb00002 a
WHERE a.num_semana < prtb02.num_semana AND
a.status_t IS NULL
IF fecha_c > prtb02.semana_al THEN
LET numero_msg = 300
CALL msg(numero_msg)
NEXT FIELD semana_al
END IF
LET dia_sem = WEEKDAY(prtb02.semana_al)
{ IF dia_sem != 5 THEN
LET numero_msg = 221
CALL msg(numero_msg)
NEXT FIELD semana_del
END IF}
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
INSERT INTO prtb00002 VALUES (prtb02.*)
UPDATE prtb00002 SET (us_crea,fech_crea) = (SUSER_SNAME(),GETDATE())
WHERE @num_semana = prtb02.num_semana
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
END FUNCTION
FUNCTION prpcmf001()
## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA LA
## MODIFICACION DE REGISTROS
# WHENEVER ERROR CONTINUE
CONSTRUCT BY NAME criterio ON a.num_semana,a.ano,a.mes,a.semana_del,
a.semana_al
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET SELEC = " SELECT UNIQUE a.* FROM prtb00002 a ",
" WHERE a.status_t is null and ",criterio clipped," ORDER BY a.num_semana"
PREPARE busca FROM selec
CALL integridad()
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
DECLARE dato SCROLL CURSOR FOR busca
OPEN dato
FETCH FIRST dato INTO prtb02.*
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
DISPLAY BY NAME prtb02.*
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrpro"
FETCH NEXT dato INTO prtb02.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
DISPLAY BY NAME prtb02.*
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrpro"
FETCH PREVIOUS dato INTO prtb02.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
DISPLAY BY NAME prtb02.*
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrpro"
FETCH FIRST dato INTO prtb02.*
DISPLAY BY NAME prtb02.*
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrpro"
FETCH LAST dato INTO prtb02.*
DISPLAY BY NAME prtb02.*
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger"
"<Esc> Actualiza Registro <Supr> Cancela Operacion"
IF prtb02.status_t = "E" THEN
LET numero_msg = 39
CALL msg(numero_msg)
RETURN
END IF
## SE SELECCIONAN LOS CAMPOS QUE SON MODIFICABLES
INPUT BY NAME prtb02.ano,
prtb02.mes,
prtb02.semana_del,
prtb02.semana_al,
prtb02.descripcion,
prtb02.status_t,
prtb02.us_crea,
prtb02.fech_crea,
prtb02.us_mod,
prtb02.fech_mod WITHOUT DEFAULTS
AFTER FIELD semana_del
IF prtb02.semana_del IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD semana_del
END IF
{
LET dia_sem = WEEKDAY(prtb02.semana_del)
IF dia_sem != 6 THEN
LET numero_msg = 220
CALL msg(numero_msg)
NEXT FIELD semana_del
END IF
}
BEFORE FIELD semana_al
LET prtb02.semana_al = prtb02.semana_del + 6
DISPLAY BY NAME prtb02.semana_al
AFTER FIELD semana_al
IF prtb02.semana_al IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD semana_al
END IF
IF prtb02.semana_del > prtb02.semana_al THEN
LET numero_msg = 53
CALL msg(numero_msg)
NEXT FIELD semana_del
END IF
LET dia_sem = WEEKDAY(prtb02.semana_al)
{
IF dia_sem != 5 THEN
LET numero_msg = 221
CALL msg(numero_msg)
NEXT FIELD semana_del
END IF}
#### Verifica si el usuario presiono la tecla <Supr>
END 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
## AQUI SE ACTUALIZA EL REGISTRO
UPDATE prtb00002 SET mes = prtb02.mes,
ano = prtb02.ano,
semana_del = prtb02.semana_del,
semana_al = prtb02.semana_al,
descripcion = prtb02.descripcion,
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE @num_semana = prtb02.num_semana
LET numero_msg = 13
CALL msg(numero_msg)
## AQUI SE ELIMINAN LOS REGISTROS
COMMAND KEY ("L") "eLiminar"
UPDATE prtb00002 SET status_t = "E"
WHERE a.num_semana = prtb02.num_semana
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
"Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION