Files
MBS/PROYECTO/vedir/veprmt016.4gl
T

618 lines
22 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : VEPRMT016
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Itinerario de Visitas a Clientes
PROGRAMADOR : Lic. Abner Montalvo Z.
FECHA REALIZACION : Diciembre 7, 1992.
------------------------------------------------------------------
}
GLOBALS "veprgb000.4gl"
FUNCTION veprmt016()
# WHENEVER ERROR CONTINUE
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
HELP FILE "vepray000.exe",
HELP KEY CONTROL-W,
MESSAGE LINE 24,
COMMENT LINE 21
OPEN FORM vefmmt016 FROM "vefmmt016"
DISPLAY FORM vefmmt016
CALL pantalla()
CALL ayuda()
DISPLAY "veprmt016" AT 4,3
DISPLAY "Itinerario de Visitas" AT 6,29
MENU "OPCIONES"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Supr> Cancela Operacion"
HELP 5
LET int_flag = FALSE
CLEAR FORM
CALL vepcad016()
COMMAND "Consultar-modificar"
"<Esc> Realiza Busqueda <Supr> Cancela Operacion"
HELP 6
LET int_flag = FALSE
CALL vepcmf016()
COMMAND "Salir" "Retorna Menu Anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION vepcad016()
## Captura los datos que va a contener el registro
# WHENEVER ERROR CONTINUE
MESSAGE ""
LET int_flag = false
INPUT BY NAME visitas.fecha_ini_sem,visitas.fecha_fin_sem,visitas.sec_vend,
visitas.tipo_cliente,visitas.sec_cliente,visitas.fecha_visita,
visitas.hora_visita,visitas.compra,visitas.persona_contacto,
visitas.observacion
ON KEY (CONTROL-W)
CASE
{WHEN INFIELD (cod_vend)
CALL consulta_empleados()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
NEXT FIELD cod_vend
END IF
IF NOT int_flag THEN
LET visitas.sec_vend = transportista.sec_transp
DISPLAY transportista.cod_transp TO cod_vend
DISPLAY transportista.sec_transp TO sec_vend
DISPLAY descrip6 TO descrip6
NEXT FIELD tipo_cliente
END IF
LET int_flag = FALSE}
WHEN INFIELD (sec_vend)
CALL consulta_empleados()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
NEXT FIELD sec_vend
END IF
IF NOT int_flag THEN
LET visitas.sec_vend = transportista.sec_transp
DISPLAY transportista.sec_transp TO sec_vend
DISPLAY descrip6 TO descrip6
NEXT FIELD tipo_cliente
END IF
LET int_flag = FALSE
WHEN INFIELD (tipo_cliente)
CALL consulta_clientes()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
IF NOT int_flag THEN
LET visitas.tipo_cliente = cliente_dir.tipo_cliente
LET visitas.sec_cliente = cliente_dir.sec_cliente
INITIALIZE visitas.fecha_visita, visitas.hora_visita, visitas.compra
TO NULL
DISPLAY BY NAME visitas.fecha_visita,visitas.hora_visita,visitas.compra
DISPLAY BY NAME cliente_dir.tipo_cliente,cliente_dir.sec_cliente
DISPLAY descrip1 TO nombre
NEXT FIELD fecha_visita
END IF
LET int_flag = FALSE
WHEN INFIELD (sec_cliente)
CALL consulta_clientes()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
IF NOT int_flag THEN
LET visitas.tipo_cliente = cliente_dir.tipo_cliente
LET visitas.sec_cliente = cliente_dir.sec_cliente
DISPLAY BY NAME cliente_dir.tipo_cliente, cliente_dir.sec_cliente
DISPLAY descrip1 TO nombre
INITIALIZE visitas.fecha_visita,visitas.hora_visita,visitas.compra
TO NULL
DISPLAY BY NAME visitas.fecha_visita,visitas.hora_visita,visitas.compra
NEXT FIELD fecha_visita
END IF
LET int_flag = FALSE
END CASE
LET visitas.fecha_ini_sem = NULL
LET visitas.fecha_fin_sem = NULL
AFTER FIELD fecha_ini_sem
IF visitas.fecha_ini_sem IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_ini_sem
END IF
AFTER FIELD fecha_fin_sem
IF visitas.fecha_fin_sem IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_fin_sem
END IF
LET p_cantidad = 0
LET p_cantidad = visitas.fecha_fin_sem - visitas.fecha_ini_sem
LET p_cantidad = p_cantidad + 1
IF p_cantidad < 5 THEN
LET numero_msg = 98
CALL msg(numero_msg)
NEXT FIELD fecha_fin_sem
END IF
IF p_cantidad > 6 THEN
LET numero_msg = 97
CALL msg(numero_msg)
NEXT FIELD fecha_fin_sem
END IF
AFTER FIELD sec_vend
IF visitas.sec_vend = 0 or
visitas.sec_vend is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD sec_vend
ELSE
SELECT i.nom1_emp, i.apell1_emp, i.status_t
INTO descrip1, descrip2, status_reg
FROM adtb00003 i
WHERE i.num_emp = visitas.sec_vend AND i.status_t is null
IF status >= 0 THEN
IF status != NOTFOUND THEN
IF status_reg = "E" THEN
LET numero_msg = 67
CALL msg(numero_msg)
NEXT FIELD sec_vend
END IF
LET descrip6 = descrip1 clipped," ",descrip2 clipped
DISPLAY descrip6 TO descrip6
ELSE
LET numero_msg = 68
CALL msg(numero_msg)
NEXT FIELD sec_vend
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
END IF
AFTER FIELD tipo_cliente
IF visitas.tipo_cliente is null or
visitas.tipo_cliente = 0 then
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
AFTER FIELD sec_cliente
IF visitas.sec_cliente is null or
visitas.sec_cliente = 0 then
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD sec_cliente
END IF
SELECT nombre, status_t INTO descrip1, status_reg
FROM vetb00004
WHERE tipo_cliente = visitas.tipo_cliente AND
sec_cliente = visitas.sec_cliente AND status_t IS NULL
IF status != NOTFOUND THEN
IF status_reg = "E" THEN
LET numero_msg = 69
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
DISPLAY descrip1 TO nombre
INITIALIZE visitas.fecha_visita,visitas.hora_visita,
visitas.compra TO NULL
DISPLAY BY NAME visitas.fecha_visita,visitas.hora_visita,
visitas.compra
ELSE
LET numero_msg = 70
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
AFTER FIELD fecha_visita
IF visitas.fecha_visita < visitas.fecha_ini_sem or
visitas.fecha_visita > visitas.fecha_fin_sem THEN
LET numero_msg = 99
CALL msg(numero_msg)
NEXT FIELD fecha_visita
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 vetb00024
VALUES (visitas.fecha_ini_sem,visitas.fecha_fin_sem,null,
visitas.sec_vend,visitas.tipo_cliente,visitas.sec_cliente,
visitas.fecha_visita,visitas.hora_visita,visitas.compra,
visitas.persona_contacto,visitas.observacion,
null, USER, CURRENT, null, null)
# Verifica el Status que retorna luego de insertar el registro en la tabla.
# Si el Status es diferente de cero quiere decir que hubo problemas durante
# la creacion del registro, entonces despliega un mensaje .
LET numero_msg = 1
CALL msg(numero_msg)
INITIALIZE visitas.fecha_visita,visitas.hora_visita,
visitas.compra TO NULL
DISPLAY BY NAME visitas.fecha_visita, visitas.hora_visita,
visitas.compra
END FUNCTION
FUNCTION vepcmf016()
# WHENEVER ERROR CONTINUE
MESSAGE ""
LET int_flag = false
## Aqui se prepara para la captura del criterio de seleccion
LET descrip1 = NULL
LET descrip6 = NULL
DISPLAY descrip1 TO nombre
DISPLAY descrip6 TO descrip6
CONSTRUCT criterio ON fecha_ini_sem,fecha_fin_sem,sec_vend,tipo_cliente,
sec_cliente
FROM fecha_ini_sem,fecha_fin_sem,sec_vend,tipo_cliente,
sec_cliente
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CALL ayuda()
RETURN
END IF
LET SELEC = "SELECT fecha_ini_sem,fecha_fin_sem,sec_vend,tipo_cliente, ",
" sec_cliente,fecha_visita,hora_visita,compra, ",
" persona_contacto,observacion ",
"FROM vetb00024 WHERE status_t is null and ",criterio clipped,
" ORDER BY 1,3,4,5"
PREPARE busca FROM selec
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos INTO visitas.fecha_ini_sem,visitas.fecha_fin_sem,
visitas.sec_vend,visitas.tipo_cliente,visitas.sec_cliente,
visitas.fecha_visita,visitas.hora_visita,visitas.compra,
visitas.persona_contacto,visitas.observacion
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
LET bandera = 0
RETURN
END IF
END IF
DISPLAY BY NAME visitas.fecha_ini_sem,visitas.fecha_fin_sem,
visitas.sec_vend,visitas.tipo_cliente,
visitas.sec_cliente,visitas.fecha_visita,
visitas.hora_visita,visitas.compra,
visitas.persona_contacto,visitas.observacion
LET comisiones.sec_vend = visitas.sec_vend
CALL busca_vendedor()
LET cliente_dir.tipo_cliente = visitas.tipo_cliente
LET cliente_dir.sec_cliente = visitas.sec_cliente
CALL busca_nombre_cliente()
MENU "OPCIONES "
COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO visitas.fecha_ini_sem,visitas.fecha_fin_sem,
visitas.sec_vend,visitas.tipo_cliente,
visitas.sec_cliente,visitas.fecha_visita,
visitas.hora_visita,visitas.compra,
visitas.persona_contacto,visitas.observacion
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
DISPLAY BY NAME visitas.fecha_ini_sem,visitas.fecha_fin_sem,
visitas.sec_vend,visitas.tipo_cliente,
visitas.sec_cliente,visitas.fecha_visita,
visitas.hora_visita,visitas.compra,
visitas.persona_contacto,visitas.observacion
LET comisiones.sec_vend = visitas.sec_vend
CALL busca_vendedor()
LET cliente_dir.tipo_cliente = visitas.tipo_cliente
LET cliente_dir.sec_cliente = visitas.sec_cliente
CALL busca_nombre_cliente()
COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO visitas.fecha_ini_sem,
visitas.fecha_fin_sem,visitas.sec_vend,
visitas.tipo_cliente,visitas.sec_cliente,
visitas.fecha_visita,visitas.hora_visita,
visitas.compra,visitas.persona_contacto,
visitas.observacion
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
DISPLAY BY NAME visitas.fecha_ini_sem,visitas.fecha_fin_sem,
visitas.sec_vend,visitas.tipo_cliente,
visitas.sec_cliente,visitas.fecha_visita,
visitas.hora_visita,visitas.compra,
visitas.persona_contacto,visitas.observacion
LET comisiones.sec_vend = visitas.sec_vend
CALL busca_vendedor()
LET cliente_dir.tipo_cliente = visitas.tipo_cliente
LET cliente_dir.sec_cliente = visitas.sec_cliente
CALL busca_nombre_cliente()
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO visitas.fecha_ini_sem,visitas.fecha_fin_sem,
visitas.sec_vend,visitas.tipo_cliente,
visitas.sec_cliente,visitas.fecha_visita,
visitas.hora_visita,visitas.compra,
visitas.persona_contacto,visitas.observacion
DISPLAY BY NAME visitas.fecha_ini_sem,visitas.fecha_fin_sem,
visitas.sec_vend,visitas.tipo_cliente,
visitas.sec_cliente,visitas.fecha_visita,
visitas.hora_visita,visitas.compra,
visitas.persona_contacto,visitas.observacion
LET comisiones.sec_vend = visitas.sec_vend
CALL busca_vendedor()
LET cliente_dir.tipo_cliente = visitas.tipo_cliente
LET cliente_dir.sec_cliente = visitas.sec_cliente
CALL busca_nombre_cliente()
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO visitas.fecha_ini_sem,visitas.fecha_fin_sem,
visitas.sec_vend,visitas.tipo_cliente,
visitas.sec_cliente,visitas.fecha_visita,
visitas.hora_visita,visitas.compra,
visitas.persona_contacto,visitas.observacion
DISPLAY BY NAME visitas.fecha_ini_sem,visitas.fecha_fin_sem,
visitas.sec_vend,visitas.tipo_cliente,
visitas.sec_cliente,visitas.fecha_visita,
visitas.hora_visita,visitas.compra,
visitas.persona_contacto,visitas.observacion
LET comisiones.sec_vend = visitas.sec_vend
CALL busca_vendedor()
LET cliente_dir.tipo_cliente = visitas.tipo_cliente
LET cliente_dir.sec_cliente = visitas.sec_cliente
CALL busca_nombre_cliente()
LET numero_msg = 4
CALL msg(numero_msg)
{ COMMAND "Escoger"
"<Esc> Actualiza Registro <Supr> Cancela Operacion"
LET idx = visitas.tipo_desc
IF visitas.status_t= "E" THEN
LET numero_msg= 36
CALL msg(numero_msg)
RETURN
END IF
INPUT BY NAME visitas.tipo_desc, visitas.persona_contacto,
visitas.observacion, visitas.us_mod,
visitas.fech_mod WITHOUT DEFAULTS
ON KEY (CONTROL-W)
CASE
WHEN INFIELD (tipo_desc)
CALL consulta_descuentos()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
NEXT FIELD tipo_desc
END IF
IF NOT int_flag THEN
SELECT status_t INTO status_reg FROM vetb00007
WHERE tipo_cliente = visitas.tipo_cliente AND
sec_cliente = visitas.sec_cliente AND
tipo_desc = visitas.tipo_desc
IF status >= 0 THEN
IF status != NOTFOUND THEN
IF status_reg = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD tipo_desc
END IF
LET numero_msg = 92
CALL msg(numero_msg)
NEXT FIELD tipo_desc
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
DISPLAY descuento.tipo_desc TO tipo_desc
DISPLAY descrip1 TO descrip
END IF
LET int_flag = FALSE
END CASE
AFTER FIELD tipo_desc
IF visitas.tipo_desc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_desc
END IF
SELECT status_t INTO status_reg FROM vetb00007
WHERE tipo_cliente = visitas.tipo_cliente AND
sec_cliente = visitas.sec_cliente AND
tipo_desc = visitas.tipo_desc
IF status >= 0 THEN
IF status != NOTFOUND THEN
IF status_reg = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD tipo_desc
END IF
LET numero_msg = 92
CALL msg(numero_msg)
NEXT FIELD tipo_desc
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CALL ayuda()
RETURN
END IF
IF visitas.tipo_desc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_desc
END IF
SELECT status_t INTO status_reg FROM vetb00007
WHERE tipo_cliente = visitas.tipo_cliente AND
sec_cliente = visitas.sec_cliente AND
tipo_desc = visitas.tipo_desc
IF status >= 0 THEN
IF status != NOTFOUND THEN
IF status_reg = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD tipo_desc
END IF
LET numero_msg = 92
CALL msg(numero_msg)
NEXT FIELD tipo_desc
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
AFTER FIELD fech_mod
EXIT INPUT
END INPUT
#### Verifica si el usuario presiono la tecla <Supr>
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CALL ayuda()
RETURN
END IF
IF idx != visitas.tipo_desc THEN
UPDATE vetb00007 SET tipo_desc = visitas.tipo_desc,
persona_contacto = visitas.persona_contacto,
observacion = visitas.observacion,
us_mod = USER,
fech_mod = CURRENT
WHERE tipo_cliente = visitas.tipo_cliente AND
sec_cliente = visitas.sec_cliente AND
tipo_desc = idx
LET numero_msg = 13
CALL msg(numero_msg)
END IF
}
COMMAND KEY ("L") "eLiminar"
"Elimina registro que esta en la pantalla"
UPDATE vetb00024 SET status_t ="E"
WHERE fecha_ini_sem = visitas.fecha_ini_sem AND
fecha_fin_sem = visitas.fecha_fin_sem AND
sec_vend = visitas.sec_vend AND
tipo_cliente = visitas.tipo_cliente AND
sec_cliente = visitas.sec_cliente
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
"Retorna al menu anterior"
CALL ayuda()
EXIT MENU
END MENU
END FUNCTION