{ ======================================================================= PROGRAMA : AUTORIZACIONES DESPACHOS OBJETIVO : VISUALIZAR LAS REQUISICIONES DESPACHOS PARA AUTORIZAR POSTERIORMENTE PROGRAMADOR : ING. JUAN SOTO FECHA REALIZACION: OCTUBRE 2011 ======================================================================== } GLOBALS "ccprgb000.4gl" DEFINE str_autoriza,nombre_usuario VARCHAR(100) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(4) RETURNING impresor CONNECT to "smarmotech" USER usuarios USING clave DECLARE buscacorreo CURSOR FOR SELECT a.correo FROM seg0003 a WHERE a.autorizaciondespacho = 'SI' LET idx = 1 FOREACH buscacorreo INTO copiacorreo[idx] LET copiaemail = copiaemail CLIPPED,";",copiacorreo[idx] LET idx = idx + 1 END FOREACH SELECT a.sec_vend,RTRIM(b.nom1_emp)||' '||b.apell1_emp, a.email INTO requisicion.sec_vend,requisicion.nombre_vendedor,vendedoremail FROM seg0000 a,adtb00003 b WHERE a.usuario = usuarios AND a.sec_vend = b.num_emp SELECT a.* INTO p_companias.* FROM companias a CALL ccprmt009() END MAIN FUNCTION ccprmt009() DEFINE actualice BOOLEAN, registros SMALLINT OPTIONS INPUT WRAP OPEN WINDOW w1 AT 5,5 WITH FORM "ccfmmt009" CALL ui.Interface.LoadStyles("mbsStyle") DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM) CONSTRUCT criterio ON a.estado,a.num_req,a.fecha,c.cotizacion_no,c.num_oc,e.nombre FROM estado,num_req,fecha,cotizacion_no,num_oc,cliente BEFORE CONSTRUCT CLEAR FORM AFTER CONSTRUCT IF int_flag THEN CALL fgl_winmessage("WARNING","OPERACION CANCELADA","STOP") LET int_flag = FALSE CLEAR FORM EXIT PROGRAM END IF END CONSTRUCT ON ACTION procesar ATTRIBUTE(TEXT="Buscar",IMAGE="find") CLEAR FORM CALL arr_autoriza.clear() CALL carga_ordenes() LET registros = arr_autoriza.getLength() DISPLAY BY NAME registros INPUT ARRAY arr_autoriza FROM s_autoriza.* ATTRIBUTE(WITHOUT DEFAULTS) ON ACTION visualiza_log ATTRIBUTE (TEXT="Visualiza Log",IMAGE="download") LET curr=arr_curr() CALL visualiza_log(arr_autoriza[curr].num_req,arr_autoriza[curr].tipo_cliente, arr_autoriza[curr].sec_cliente) BEFORE INPUT #CALL DIALOG.setactionactive("accept",FALSE) CALL DIALOG.setactionactive("insert",FALSE) CALL DIALOG.setactionactive("append",FALSE) CALL DIALOG.setactionactive("delete",FALSE) AFTER INPUT #WHENEVER ERROR CONTINUE IF int_flag THEN EXIT INPUT END IF LET respuesta = fgl_winquestion("ADVERTENCIA","ESTA SEGURO DE ACTUALIZAR ESTAS REQUISICIONES?","no","yes|no","question",0) IF respuesta = "yes" THEN SELECT rtrim(a.nom1_emp)||' '||a.apell1_emp INTO nombre_usuario FROM adtb00003 a,seg0001 b WHERE a.num_emp = b.num_emp AND b.usuario = usuarios IF STATUS = NOTFOUND THEN LET nombre_usuario = usuarios END IF BEGIN WORK FOR idx = 1 TO arr_count() IF arr_autoriza[idx].num_req IS NOT NULL THEN IF arr_autoriza[idx].inserta = 'SI' THEN UPDATE cctb00025 set sec_vend_aprobado = requisicion.sec_vend, fecha_autorizacion = getdate(), estado = arr_autoriza[idx].estado, us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE num_req = arr_autoriza[idx].num_req IF SQLSTATE > 02 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","LA REQUISICION NO PUDO SER AUTORIZADA","STOP") LET actualice = FALSE CLOSE WINDOW w1 EXIT PROGRAM END IF # INSERTA EN EL LOG DEL USUARIO. LET str_autoriza= "LA REQUISICION ",arr_autoriza[idx].num_req USING "<<<<<<", " CONTIENE EL STATUS ",arr_autoriza[idx].estado CLIPPED, " ACTUALIZADO POR EL USUARIO ",nombre_usuario INSERT INTO cctb00031 (fecha,us_crea,sec_vend,tipo_cliente,sec_cliente,num_req, monto_cotizacion,balance,estado,tipo_doc_ref,descrip_estado,num_oc,cotizacion_no, nombrevendedor,nombrecliente) VALUES (GETDATE(),usuarios,requisicion.sec_vend,arr_autoriza[idx].tipo_cliente, arr_autoriza[idx].sec_cliente,arr_autoriza[idx].num_req, arr_autoriza[idx].valor_cotizacion,arr_autoriza[idx].balance, arr_autoriza[idx].estado,'AU',str_autoriza,arr_autoriza[idx].num_oc, arr_autoriza[idx].cotizacion_no,requisicion.nombre_vendedor,arr_autoriza[idx].cliente) SELECT a.sec_vend,RTRIM(b.nom1_emp)||' '||b.apell1_emp, a.email INTO requisicion.sec_vend,requisicion.nombre_vendedor,vendedoremail FROM seg0000 a,adtb00003 b WHERE a.sec_vend = b.num_emp AND b.num_emp = arr_autoriza[idx].sec_vend LET subject = arr_autoriza[idx].estado CLIPPED," DESPACHO NO. ",arr_autoriza[idx].num_req USING "&&&&&&" LET cuerpo_correo = "'VENDEDOR : ",requisicion.nombre_vendedor CLIPPED LET cuerpo_correo = " ESTA REQUISICION ESTA ",arr_autoriza[idx].estado CLIPPED LET cuerpo_correo = cuerpo_correo CLIPPED," ORDEN NO: ", arr_autoriza[idx].num_oc USING "&&&&&&"," ", " CLIENTE: ",arr_autoriza[idx].cliente CLIPPED," ", " COTIZACION NO: ",arr_autoriza[idx].cotizacion_no USING "<<<<<<" LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED CALL envia_correo(vendedorEmail,copiaemail,cuerpo_correo, subject, procedimiento ) # LOG AUTORIZACIONES DESPACHOS INSERT INTO cctb00035 (inserta ,estado ,estado_despacho ,vendedor ,sec_vend_sp ,num_req ,fecha ,cotizacion_no ,num_oc ,tipo_venta ,cliente ,valor_cotizacion ,valor_autorizar ,sec_vend ,tipo_cliente ,sec_cliente ,balance ,balance_restante ,us_crea ,fech_crea) VALUES (arr_autoriza[idx].inserta ,arr_autoriza[idx].estado ,arr_autoriza[idx].estado_despacho ,arr_autoriza[idx].vendedor ,arr_autoriza[idx].sec_vend_sp ,arr_autoriza[idx].num_req ,arr_autoriza[idx].fecha ,arr_autoriza[idx].cotizacion_no ,arr_autoriza[idx].num_oc ,arr_autoriza[idx].tipo_venta ,arr_autoriza[idx].cliente ,arr_autoriza[idx].valor_cotizacion ,arr_autoriza[idx].valor_autorizar ,arr_autoriza[idx].sec_vend ,arr_autoriza[idx].tipo_cliente ,arr_autoriza[idx].sec_cliente ,arr_autoriza[idx].balance ,arr_autoriza[idx].balance_restante ,usuarios ,getdate()) END IF END IF END FOR IF NOT INT_FLAG THEN COMMIT WORK CALL fgl_winmessage("INFORMACION","ACTUALIZACION EXITOSA","STOP") CLEAR FORM EXIT INPUT END IF END IF END INPUT IF int_Flag THEN CALL fgl_winmessage("WARNING","OPERACION CANCELADA","STOP") LET int_flag = FALSE CLEAR FORM CONTINUE DIALOG LET int_flag = FALSE END IF # ON ACTION mensaje # CALL entramensaje(arr_autoriza[idx].num_req,'M') ON ACTION CANCEL ATTRIBUTE(TEXT="Cancela Operacion",IMAGE="quit") CALL fgl_winmessage("WARNING","OPERACION CANCELADA","STOP") LET int_flag = FALSE CLEAR FORM EXIT PROGRAM END DIALOG CLOSE WINDOW w1 END FUNCTION FUNCTION carga_ordenes() DEFINE pbalance,valor_avances,valor_s_avances DEC(12,2) LET selec = " SELECT 'NO',a.estado,a.estado_despacho,RTRIM(CAST(a.sec_vend AS CHAR))+' '+RTRIM(b.nom1_emp)+' '+b.apell1_emp , ", " (SELECT TOP 1 RTRIM(CAST(x1.sec_vend AS CHAR))+' '+RTRIM(x2.nom1_emp)+' '+x2.apell1_emp FROM vetb00093 x1,adtb00003 x2 ", " WHERE x1.cotizacion_no = d.cotizacion_no AND x1.sec_vend = x2.num_emp),", " a.num_req,CONVERT(CHAR(10),a.fecha,103),c.cotizacion_no,c.num_oc,g.descripcion as tipo_venta, ", " CAST(e.tipo_cliente AS CHAR(2))+'-'+CAST(e.sec_cliente AS CHAR(6))+' '+RTRIM(e.nombre) ", " AS cliente,d.total_neto as valor_cotizacion, ", " SUM(c.valor),a.sec_vend,d.tipo_cliente,d.sec_cliente ", " FROM cctb00025 a,adtb00003 b,cctb00026 c,vetb00050 d,vetb00004 e,vetb00061 g,vetb00060 h,seg0007 x ", "WHERE ", # " ( a.sec_vend = d.sec_vend )and ", " ( a.sec_vend = b.num_emp) and ", " ( a.num_req = c.num_req) and ", " ( c.cotizacion_no = d.cotizacion_no AND ", " d.tipo_cliente = e.tipo_cliente AND ", " d.sec_cliente = e.sec_cliente) AND ", " ( d.tipo_cliente = h.tipo_cliente) AND ", # " a.estado_despacho not in ('DESPACHADA') AND ", " x.usuario ='",usuarios CLIPPED,"' AND ", " (x.sec_vend = a.sec_vend ) AND ", " h.ventas = g.ventas and ",criterio CLIPPED," AND ", " a.status_t is null ", " GROUP BY a.estado,RTRIM(CAST(a.sec_vend AS CHAR))+' '+RTRIM(b.nom1_emp)+' '+b.apell1_emp, ", " a.num_req,c.cotizacion_no,g.descripcion, ", " CAST(e.tipo_cliente AS CHAR(2))+'-'+CAST(e.sec_cliente AS CHAR(6))+' '+RTRIM(e.nombre) ", " ,d.total_neto,a.fecha,a.sec_vend,c.num_oc, ", " a.estado_despacho,d.tipo_cliente,d.sec_cliente,d.cotizacion_no ", " ORDER BY a.fecha" PREPARE comando FROM selec DECLARE busca_requisi CURSOR FOR comando LET idx = 1 FOREACH busca_requisi INTO arr_autoriza[idx].* LET valor_avances = 0 LET valor_s_avances = 0 # SUMA LOS AVANCES SELECT SUM(a.valor+a.monto_desc) INTO valor_avances FROM cctb00001 a WHERE a.fecha_orig <= today AND a.tipo_cliente = arr_autoriza[idx].tipo_cliente AND a.sec_cliente = arr_autoriza[idx].sec_cliente AND a.tipo_doc IN ("AV") AND a.num_doc = a.aplica_a AND a.status_t IS NULL IF valor_avances IS NULL THEN LET valor_avances = 0 END IF # SUMA SIN AVANCES SELECT SUM(a.valor+a.monto_desc) INTO valor_s_avances FROM cctb00001 a WHERE a.fecha_orig <= today AND a.tipo_cliente = arr_autoriza[idx].tipo_cliente AND a.sec_cliente = arr_autoriza[idx].sec_cliente AND a.tipo_doc NOT IN ("AV","AP") AND a.status_t IS NULL IF valor_s_avances IS NULL THEN LET valor_s_avances = 0 END IF CALL pendiente_ordenes(arr_autoriza[idx].tipo_cliente,arr_autoriza[idx].sec_cliente) RETURNING pbalance LET arr_autoriza[idx].balance = valor_s_avances - valor_avances LET arr_autoriza[idx].balance_restante = pbalance #+ arr_autoriza[idx].balance LET idx = idx + 1 END FOREACH IF idx = 1 THEN CALL fgl_winmessage("ERROR","NO EXISTEN REQUISICIONES CON ESA CONDICION ","STOP") RETURN END IF END FUNCTION FUNCTION visualiza_log(xnumreq,xtipocliente,xseccliente) DEFINE xnumreq INT, arr_trx DYNAMIC ARRAY OF RECORD fecha VARCHAR(40), usuario VARCHAR(50), estado VARCHAR(250), num_req INT, limite_cr DEC(12,2), monto_cotizacion DEC(12,2), num_recibo INT, tipo_Doc VARCHAR(2), cotizacion_no INT, monto_avance, balance DEC(12,2) END RECORD, l SMALLINT, xtipocliente,xseccliente INT OPEN WINDOW w2 WITH FORM "ccfmwd010" DECLARE busca_log CURSOR FOR SELECT a.fecha,a.us_crea,a.descrip_estado,a.num_req,a.limite_cr,a.monto_cotizacion,a.num_recibo,a.tipo_Doc,a.cotizacion_no,a.monto_avance,a.balance FROM cctb00031 a WHERE a.num_req = xnumreq AND a.tipo_cliente = xtipocliente AND a.sec_cliente = xseccliente ORDER BY a.fecha LET l=1 FOREACH busca_log INTO arr_trx[l].* LET l=l+1 END FOREACH DISPLAY ARRAY arr_trx TO record1.* CLOSE WINDOW w2 END FUNCTION