274 lines
13 KiB
Plaintext
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
|