Files
MBS/PROYECTO/codir/coprmt018.4gl
T

553 lines
18 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : COPRMT018
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Poliza de Seguro.
PROGRAMADOR : JUAN SOTO
FECHA REALIZACION : AGOSTO 1997
DIRECTOR PROYECTO : JOSE ALFREDO PAULINO ALEJO
------------------------------------------------------------------
}
GLOBALS "coprgb000.4gl"
DEFINE nombre_pt CHAR(30)
DEFINE nombre_via CHAR(10)
FUNCTION coprmt018()
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM cofmmt018 FROM "cofmmt018"
DISPLAY FORM cofmmt018
CALL pantalla()
DISPLAY "coprmt018" AT 4,3
DISPLAY "Poliza de Seguro" AT 6,32
MENU "OPCIONES"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Delete> Cancela Operacion"
let int_flag = false
CLEAR FORM
CALL copcad018()
COMMAND "Consultar-modificar"
"<Esc> Realiza Busqueda <Delete> Cancela Operacion"
let int_flag = false
CALL copcmf018()
COMMAND "Salir" "Retorna Menu Anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION copcad018()
WHENEVER ERROR CONTINUE
## Captura los datos que va a contener el registro
INPUT BY NAME polizas.*
ON KEY (CONTROL-W)
CASE
WHEN INFIELD (cod_pt)
CALL busca_puerto()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_pt
END IF
IF existe = "N" THEN
LET numero_msg = 3
CALL msg(numero_msg)
LET existe = null
NEXT FIELD cod_pt
END IF
LET polizas.cod_pt = puertos.cod_pt
DISPLAY BY NAME puertos.cod_pt,nombre_pt
LET identifica = NULL
NEXT FIELD via_t
END CASE
## Verifica que el codigo no exista en el catalogo de articulos. Si existe,
## entonces despliega los datos del registro existente.
AFTER FIELD cod_n
IF polizas.cod_n IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
AFTER FIELD cod_tipo
IF polizas.cod_tipo is null then
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_tipo
END IF
AFTER FIELD cod_grupo
IF polizas.cod_grupo is null then
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_grupo
END IF
AFTER FIELD cod_sec
IF (polizas.cod_n is null AND polizas.cod_grupo is null AND
polizas.cod_tipo is null AND polizas.cod_sec is null) THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
ELSE
SELECT descrip_esp,status_t INTO descrip1,polizas.status_t
FROM intb00001
WHERE cod_n = polizas.cod_n AND
cod_grupo = polizas.cod_grupo AND
cod_tipo = polizas.cod_tipo AND
cod_sec = polizas.cod_sec
IF status >= 0 THEN
IF polizas.status_t = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
DISPLAY BY NAME polizas.*
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
DISPLAY BY NAME descrip1
END IF
AFTER FIELD procedencia
IF polizas.procedencia IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD procedencia
END IF
AFTER FIELD cod_pt
IF polizas.cod_pt IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_pt
ELSE
SELECT nom_pt INTO nombre_pt FROM cotb00019
WHERE cod_pt = polizas.cod_pt and
status_t is null
END IF
DISPLAY BY NAME nombre_pt
AFTER FIELD via_t
IF polizas.via_t IS NOT NULL THEN
SELECT * FROM cotb00017
WHERE cod_n = polizas.cod_n and
cod_grupo = polizas.cod_grupo and
cod_tipo = polizas.cod_tipo and
cod_sec = polizas.cod_sec and
cod_pt = polizas.cod_pt and
via_t = polizas.via_t
IF STATUS != NOTFOUND THEN
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
IF polizas.via_t = "01" THEN
LET nombre_via = "MARITIMA"
END IF
IF polizas.via_t = "02" THEN
LET nombre_via = "AEREA"
END IF
IF polizas.via_t = "03" THEN
LET nombre_via = "TERRESTRE"
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD via_t
END IF
DISPLAY BY NAME nombre_via
AFTER FIELD seguro
IF polizas.seguro IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD seguro
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
## Verifica que el codigo del articulo no sea cero o nulo.
IF (polizas.cod_n is null AND polizas.cod_grupo is null AND
polizas.cod_tipo is null AND polizas.cod_sec is null) THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
ELSE
INSERT INTO cotb00017 VALUES (polizas.cod_n,polizas.cod_grupo,
polizas.cod_tipo,polizas.cod_sec,polizas.procedencia,
polizas.cod_pt,polizas.via_t,polizas.seguro,null,user,
current,null,null)
END IF
LET numero_msg = 1
CALL msg(numero_msg)
INITIALIZE polizas.* to null
CLEAR FORM
NEXT FIELD cod_n
AFTER FIELD fech_mod
EXIT INPUT
END INPUT
END FUNCTION
FUNCTION copcmf018()
## Aqui se prepara para la captura del criterio de seleccion
WHENEVER ERROR CONTINUE
CONSTRUCT criterio ON cotb00017.* FROM cotb00017.*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET SELEC = " SELECT UNIQUE * FROM cotb00017 where ",
" status_t is null and ",
criterio clipped,
" ORDER BY 1,2,3,4"
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 polizas.*
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 descrip_esp INTO descrip1 FROM intb00001
WHERE cod_n = polizas.cod_n and
cod_grupo = polizas.cod_grupo and
cod_tipo = polizas.cod_tipo and
cod_sec = polizas.cod_sec
SELECT nom_pt INTO nombre_pt FROM cotb00019
WHERE cod_pt = polizas.cod_pt
IF polizas.via_t = "01" THEN
LET nombre_via = "MARITIMA"
END IF
IF polizas.via_t = "02" THEN
LET nombre_via = "AEREA"
END IF
DISPLAY BY NAME polizas.*,descrip1,nombre_pt,nombre_via
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO polizas.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
SELECT descrip_esp INTO descrip1 FROM intb00001
WHERE cod_n = polizas.cod_n and
cod_grupo = polizas.cod_grupo and
cod_tipo = polizas.cod_tipo and
cod_sec = polizas.cod_sec
SELECT nom_pt INTO nombre_pt FROM cotb00019
WHERE cod_pt = polizas.cod_pt
IF polizas.via_t = "01" THEN
LET nombre_via = "MARITIMA"
END IF
IF polizas.via_t = "02" THEN
LET nombre_via = "AEREA"
END IF
DISPLAY BY NAME polizas.*,descrip1,nombre_pt,nombre_via
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO polizas.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
SELECT descrip_esp INTO descrip1 FROM intb00001
WHERE cod_n = polizas.cod_n and
cod_grupo = polizas.cod_grupo and
cod_tipo = polizas.cod_tipo and
cod_sec = polizas.cod_sec
SELECT nom_pt INTO nombre_pt FROM cotb00019
WHERE cod_pt = polizas.cod_pt
IF polizas.via_t = "01" THEN
LET nombre_via = "MARITIMA"
END IF
IF polizas.via_t = "02" THEN
LET nombre_via = "AEREA"
END IF
DISPLAY BY NAME polizas.*,descrip1,nombre_pt,nombre_via
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO polizas.*
SELECT descrip_esp INTO descrip1 FROM intb00001
WHERE cod_n = polizas.cod_n and
cod_grupo = polizas.cod_grupo and
cod_tipo = polizas.cod_tipo and
cod_sec = polizas.cod_sec
SELECT nom_pt INTO nombre_pt FROM cotb00019
WHERE cod_pt = polizas.cod_pt
IF polizas.via_t = "01" THEN
LET nombre_via = "MARITIMA"
END IF
IF polizas.via_t = "02" THEN
LET nombre_via = "AEREA"
END IF
DISPLAY BY NAME polizas.*,descrip1,nombre_pt,nombre_via
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO polizas.*
SELECT descrip_esp INTO descrip1 FROM intb00001
WHERE cod_n = polizas.cod_n and
cod_grupo = polizas.cod_grupo and
cod_tipo = polizas.cod_tipo and
cod_sec = polizas.cod_sec
SELECT nom_pt INTO nombre_pt FROM cotb00019
WHERE cod_pt = polizas.cod_pt
IF polizas.via_t = "01" THEN
LET nombre_via = "MARITIMA"
END IF
IF polizas.via_t = "02" THEN
LET nombre_via = "AEREA"
END IF
DISPLAY BY NAME polizas.*,descrip1,nombre_pt,nombre_via
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger"
"<Esc> Actualiza Registro <Delete> Cancela Operacion"
IF polizas.status_t = "E" THEN
LET numero_msg = 39
CALL msg(numero_msg)
RETURN
END IF
INPUT BY NAME polizas.procedencia,
polizas.cod_pt,
polizas.via_t,
polizas.seguro,
polizas.us_crea,
polizas.fech_crea,
polizas.us_mod,
polizas.fech_mod WITHOUT DEFAULTS
ON KEY (CONTROL-W)
CASE
WHEN INFIELD (cod_pt)
CALL busca_puerto()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_pt
END IF
IF existe = "N" THEN
LET numero_msg = 3
CALL msg(numero_msg)
LET existe = null
NEXT FIELD cod_pt
END IF
LET polizas.cod_pt = puertos.cod_pt
DISPLAY BY NAME puertos.cod_pt,nombre_pt
LET identifica = NULL
NEXT FIELD via_t
END CASE
AFTER FIELD procedencia
IF polizas.procedencia IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD procedencia
END IF
AFTER FIELD cod_pt
IF polizas.cod_pt IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_pt
ELSE
SELECT nom_pt INTO nombre_pt FROM cotb00019
WHERE cod_pt = polizas.cod_pt and
status_t is null
END IF
DISPLAY BY NAME nombre_pt
AFTER FIELD via_t
IF polizas.via_t IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD via_t
END IF
IF polizas.via_t = "01" THEN
LET nombre_via = "MARITIMA"
END IF
IF polizas.via_t = "02" THEN
LET nombre_via = "AEREA"
END IF
IF polizas.via_t = "03" THEN
LET nombre_via = "TERRESTRE"
END IF
AFTER FIELD seguro
IF polizas.seguro IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD seguro
END IF
#### Verifica si el usuario presiono la tecla <Delete>
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
UPDATE cotb00017 SET procedencia = polizas.procedencia,
cod_pt = polizas.cod_pt,
via_t = polizas.via_t,
seguro = polizas.seguro,
us_mod = USER,
fech_mod = CURRENT
WHERE cod_n = polizas.cod_n and
cod_grupo = polizas.cod_grupo and
cod_tipo = polizas.cod_tipo and
cod_sec = polizas.cod_sec
LET numero_msg = 13
CALL msg(numero_msg)
EXIT INPUT
END INPUT
COMMAND KEY ("L") "eLiminar"
UPDATE cotb00017 SET status_t = "E"
WHERE cod_n = polizas.cod_n and
cod_grupo = polizas.cod_grupo and
cod_tipo = polizas.cod_tipo and
cod_sec = polizas.cod_sec and
cod_pt = polizas.cod_pt and
via_t = polizas.via_t
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
"Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION
FUNCTION busca_puerto()
OPEN WINDOW busqueda_p AT 10,10 WITH FORM "cofmwd010"
ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last -1)
CONSTRUCT criterio ON cotb00019.nom_pt
FROM cotb00019.nom_pt
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET selec = "SELECT cod_pt,nom_pt FROM cotb00019 ",
" WHERE ",
" status_t is null AND ",
criterio clipped,
"ORDER BY 1 "
PREPARE localiza_p FROM selec
DECLARE puerto CURSOR FOR localiza_p
LET idx = 1
FOREACH puerto INTO puerto_wd[idx].*
IF status = NOTFOUND THEN
LET existe = "N"
EXIT FOREACH
END IF
LET puertos_wd[idx].cod_pt = puerto_wd[idx].cod_pt
LET puertos_wd[idx].nom_pt = puerto_wd[idx].nom_pt clipped
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
DISPLAY ARRAY puertos_wd TO consart.*
LET curr1 = arr_curr()
LET puertos.cod_pt = puertos_wd[curr1].cod_pt
LET puertos.nom_pt = puertos_wd[curr1].nom_pt
LET nombre_pt = puertos_wd[curr1].nom_pt
CLOSE WINDOW busqueda_p
END FUNCTION