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

274 lines
13 KiB
Plaintext

{=====================================================
PROGRAMA : veprmt050
OBJETIVO : AUTORIZACION RESERVAS COTIZACIONES VENTAS
PROGRAMADOR : Valentin Rodribues
FECHA : 11/8/2018
MODIFICADO POR : Ing. Juan Soto
=====================================================}
SCHEMA "smarmotech"
GLOBALS
DEFINE datos RECORD
cotizacion_no LIKE vetb00102.cotizacion_no,
nombre_cliente LIKE vetb00050.nombre_cliente,
sec_cliente LIKE vetb00050.sec_cliente,
tipo_cliente LIKE vetb00050.tipo_cliente,
nombre_vend LIKE vetb00102.sec_cliente,
sec_vend LIKE vetb00050.sec_vend,
fecha_cot DATE
END RECORD,
selec STRING,
usuarios,clave CHAR(50),
idx INT,
respuesta STRING,
codigo_vendedor INT,
prod_autorizados varchar(500)
DEFINE arr_productos DYNAMIC ARRAY OF RECORD
cod_area LIKE vetb00103.cod_n,
cod_producto LIKE vetb00103.cod_n,
descrip_ing LIKE vetb00103.descrip_ing,
cantidad_prod LIKE vetb00103.cantidad,
unidad_med LIKE vetb00103.unidad_med,
fecha_inicio LIKE vetb00103.fecha_inicio,
fecha_final LIKE vetb00103.fecha_final,
autorizada LIKE vetb00103.autorizada,
usuario_autoriza LIKE vetb00103.usuario_autoriza,
cod_n LIKE vetb00051.cod_n,
cod_grupo LIKE vetb00051.cod_grupo,
cod_tipo LIKE vetb00051.cod_tipo,
cod_sec LIKE vetb00051.cod_sec
END RECORD
END GLOBALS
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" USER usuarios USING clave
CALL reservasCotizadas()
END MAIN
FUNCTION reservasCotizadas()
OPEN WINDOW HOME_FRM WITH FORM 'vefmmt050'
DIALOG ATTRIBUTE(UNBUFFERED)
INPUT BY NAME datos .*
BEFORE INPUT
LET datos.fecha_cot = today
DISPLAY BY NAME datos.fecha_cot
AFTER FIELD cotizacion_no
IF datos.cotizacion_no IS NOT NULL THEN
{ SELECT a.nombre_cliente,a.sec_cliente,a.tipo_cliente,a.sec_vend, b.nombre
INTO datos.nombre_cliente, datos.sec_cliente, datos.tipo_cliente, datos.sec_vend, datos.nombre_vend
FROM vetb00050 a
INNER JOIN seg0000 b
ON
a.sec_vend = b.sec_vend AND
a.cotizacion_no = 143070 AND
a.status_t IS NULL
}
SELECT a.nombre_cliente,a.sec_cliente,a.tipo_cliente,a.sec_vend
INTO datos.nombre_cliente, datos.sec_cliente, datos.tipo_cliente, datos.sec_vend
FROM vetb00050 a
WHERE a.cotizacion_no = datos.cotizacion_no AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("INFO","COTIZACION NO EXISTE","INFO")
NEXT FIELD cotizacion_no
ELSE
DISPLAY BY NAME datos.*
END IF
SELECT a.sec_vend FROM seg0007 a
WHERE a.sec_vend = datos.sec_vend
AND a.usuario = usuarios
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("INFO","USTED NO PUEDE AUTORIZAR ESTA COTIZACION","INFO")
NEXT FIELD cotizacion_no
END IF
SELECT DISTINCT cotizacion_no FROM vetb00051
WHERE fecha_vence_reserva >= TODAY
AND cotizacion_no = datos.cotizacion_no
IF STATUS = NOTFOUND THEN # JSOTO: AQUI MODIFIQUE LA VALUACION DEL QUERY, TENIAS STATUS != NOTFOUND
CALL fgl_winmessage("INFO", "ESTA COTIZACION AUN ESTA RESERVADA", "INFO")
NEXT FIELD cotizacion_no
END IF
SELECT a.cotizacion_no FROM prtb00012 a, vetb00050 b
WHERE a.cotizacion_no = datos.cotizacion_no AND b.cotizacion_no = datos.cotizacion_no
IF STATUS != NOTFOUND THEN #JSOTO: AQUI TENIAS STATUS = NOTFOUND
CALL fgl_winmessage("INFO", "ESTA COTIZACION YA HA SIDO CONVERTIDA EN ORDEN", "INFO")
NEXT FIELD cotizacion_no
END IF
END IF
AFTER INPUT
# JSOTO: ADICIONE ESTA VALIDACION PARA QUE EL PROGRAMA ESTE ENTERADO CUANDO UNA COTIZACION YA TIENE UNA AUTORIZACION O NO
SELECT a.cotizacion_no FROM vetb00102 a WHERE a.cotizacion_no = datos.cotizacion_no
IF STATUS = NOTFOUND THEN
LET selec =
" SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
b.descrip_esp,a.cantidad,b.unidad_med,a.fecha_inicio_reserva,a.fecha_vence_reserva, a.autorizada
FROM vetb00051 a,iptb00002 b
WHERE a.cotizacion_no =", datos.cotizacion_no," AND ",
" a.cod_n = b.cod_n AND ",
" a.cod_grupo = b.cod_grupo AND ",
" a.cod_tipo = b.cod_tipo AND ",
" a.cod_sec = b.cod_sec "
#," AND datediff(day, a.fecha_inicio_reserva, a.fecha_vence_reserva) > 7 " JSOTO: AQUI DEBES DEJAR QUE EL PROGRAMA BUSQUE LOS PRODUCTOS, LAS VALIDACIONES DE CONTROL LA ESTAS REALIZANDO ANTES
ELSE
LET selec =
" SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
b.descrip_esp,a.cantidad,b.unidad_med,a.fecha_inicio,a.fecha_final, a.autorizada
FROM vetb00103 a,iptb00002 b
WHERE a.cotizacion_no =", datos.cotizacion_no," AND ",
" a.cod_n = b.cod_n AND ",
" a.cod_grupo = b.cod_grupo AND ",
" a.cod_tipo = b.cod_tipo AND ",
" a.cod_sec = b.cod_sec "
#," AND datediff(day, a.fecha_inicio_reserva, a.fecha_vence_reserva) > 7 " JSOTO: AQUI DEBES DEJAR QUE EL PROGRAMA BUSQUE LOS PRODUCTOS, LAS VALIDACIONES DE CONTROL LA ESTAS REALIZANDO ANTES
END IF
PREPARE comando FROM selec
DECLARE busca_items CURSOR FOR comando
LET idx = 1
FOREACH busca_items INTO arr_productos[idx].cod_area,
arr_productos[idx].cod_n,
arr_productos[idx].cod_grupo,
arr_productos[idx].cod_tipo,
arr_productos[idx].cod_sec,
arr_productos[idx].descrip_ing,
arr_productos[idx].cantidad_prod,
arr_productos[idx].unidad_med,
arr_productos[idx].fecha_inicio,
arr_productos[idx].fecha_final,
arr_productos[idx].autorizada
LET idx = idx +1
END FOREACH
END INPUT
INPUT ARRAY arr_productos FROM scr_productos.*
ON ACTION actualiza
LET respuesta = fgl_winquestion("ACTUALIZA","ESTA SEGURO DE AUTORIZAR ESTA RESERVA?","NO","YES|NO","QUESTION",0)
IF respuesta = "YES" THEN
SELECT a.cotizacion_no FROM vetb00102 a
WHERE a.cotizacion_no = datos.cotizacion_no
IF STATUS = NOTFOUND THEN
BEGIN WORK
INSERT INTO vetb00102 (cotizacion_no, tipo_cliente, sec_cliente, nombre, fecha_aprobacion)
VALUES (datos.cotizacion_no, datos.tipo_cliente,datos.sec_cliente,datos.nombre_cliente, getdate())
FOR idx = 1 TO arr_productos.getLength()
IF arr_productos[idx].cod_area IS NOT NULL THEN
IF arr_productos[idx].autorizada = "SI" THEN
INSERT INTO vetb00103 (area, cod_n, cod_grupo, cod_tipo, cod_Sec, descrip_ing, cantidad, unidad_med, fecha_inicio, fecha_final, autorizada, usuario_autoriza,cotizacion_no)
VALUES (arr_productos[idx].cod_area, arr_productos[idx].cod_n, arr_productos[idx].cod_grupo, arr_productos[idx].cod_tipo, arr_productos[idx].cod_sec, arr_productos[idx].descrip_ing,
arr_productos[idx].cantidad_prod, arr_productos[idx].unidad_med, arr_productos[idx].fecha_inicio, arr_productos[idx].fecha_final, arr_productos[idx].autorizada,usuarios, datos.cotizacion_no)
LET prod_autorizados = prod_autorizados CLIPPED," -)", arr_productos[idx].descrip_ing
DISPLAY prod_autorizados
UPDATE vetb00051 set autorizada = arr_productos[idx].autorizada
WHERE cotizacion_no = datos.cotizacion_no
END IF
END IF
END FOR
COMMIT WORK
--ENVIO DE CORREO
LET codigo_vendedor = datos.sec_vend
CALL send_mail(codigo_vendedor, prod_autorizados)
ELSE
BEGIN WORK
FOR idx = 1 TO arr_productos.getLength()
IF arr_productos[idx].cod_area IS NOT NULL THEN
UPDATE vetb00103
SET area = arr_productos[idx].cod_area, cod_n = arr_productos[idx].cod_n, cod_grupo = arr_productos[idx].cod_grupo, cod_tipo = arr_productos[idx].cod_tipo, cod_Sec = arr_productos[idx].cod_sec,
descrip_ing = arr_productos[idx].descrip_ing, cantidad = arr_productos[idx].cantidad_prod, unidad_med = arr_productos[idx].unidad_med, fecha_inicio = arr_productos[idx].fecha_inicio,
fecha_final = arr_productos[idx].fecha_final, autorizada = arr_productos[idx].autorizada, usuario_autoriza = usuarios, cotizacion_no = datos.cotizacion_no
WHERE cotizacion_no = datos.cotizacion_no
IF arr_productos[idx].autorizada = "SI" THEN
LET prod_autorizados = prod_autorizados CLIPPED," -)", arr_productos[idx].descrip_ing
END IF
UPDATE vetb00051 set autorizada = arr_productos[idx].autorizada
WHERE cotizacion_no = datos.cotizacion_no
END IF
END FOR
--ENVIO DE CORREO
LET codigo_vendedor = datos.sec_vend
CALL send_mail(codigo_vendedor, prod_autorizados)
COMMIT WORK
END IF
END IF
END INPUT
ON ACTION CANCEL
CALL msg(2)
LET INT_FLAG = FALSE
EXIT PROGRAM
END DIALOG
CLOSE WINDOW HOME_FRM
END FUNCTION
FUNCTION send_mail(codigo_vendedor, prod_autorizados)
DEFINE codigo_vendedor INT
DEFINE gerenteEmail,vendedorEmail, chmensaje varchar(50)
DEFINE cuerpo_correo, subject varchar(200)
DEFINE prod_autorizados varchar(500)
DEFINE procedimiento STRING
SELECT email INTO vendedorEmail
FROM seg0000
WHERE sec_vend = codigo_vendedor
IF STATUS = NOTFOUND THEN
DISPLAY "ESTE USUARIO NO EXISTE"
END IF
IF vendedorEmail IS NOT NULL THEN
SELECT a.email INTO gerenteEmail FROM seg0001 a #JSOTO: ES NECESARIO QUE SE LE ENVIE EL CORREO AL GERENTE TAMBIEN
WHERE a.usuario =usuarios
LET chmensaje = "NUMERO COTIZACION: ",datos.cotizacion_no USING "<<<<<<"
LET subject = "AUTORIZACION RESERVA COTIZACION NO. ",datos.cotizacion_no USING "&&&&&&"
--LET cuerpo_correo = "VENDEDOR : ",nombre_ven CLIPPED
-- LET cuerpo_correo = cuerpo_correo CLIPPED," FECHA : ",TODAY USING "DD/MM/YYYY"
--LET cuerpo_correo = cuerpo_correo CLIPPED," RECIBO : ",recibo_nc.num_doc USING "&&&&&&"
LET cuerpo_correo = cuerpo_correo CLIPPED," CLIENTE: ",datos.nombre_cliente CLIPPED
LET cuerpo_correo = cuerpo_correo CLIPPED," PRODUCTOS AUTORIZADOS: ",prod_autorizados CLIPPED
LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
CALL envia_correo(gerenteEmail,vendedorEmail,cuerpo_correo,
subject, procedimiento )
END IF
END FUNCTION
FUNCTION error_handler()
CALL fgl_winmessage("WARNING",STATUS,"WARNING")
END FUNCTION