{===================================================== 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