{ ======================================================================= PROGRAMA : AUTORIZACIONES DESPACHOS OBJETIVO : VISUALIZAR LAS REQUISICIONES DESPACHOS PARA AUTORIZAR POSTERIORMENTE PROGRAMADOR : ING. JUAN SOTO FECHA REALIZACION: OCTUBRE 2011 ======================================================================== } GLOBALS "ccprgb000.4gl" MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(4) RETURNING impresor CONNECT to "decomarmol" 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 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 LET curr=arr_curr() CALL visuliza_log(arr_autoriza[curr].num_oc) 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 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. INSERT INTO cctb00031 (fecha,us_crea,sec_vend,tipo_cliente,sec_cliente,num_req, monto_cotizacion,balance,estado,documento_ref,tipo_doc_ref) 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,arr_autoriza[idx].num_oc,'R') 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 ) 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 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,'0','0','0','0',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","PC") 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(xorden) DEFINE xorden INT, arr_trx DYNAMIC ARRAY OF RECORD fecha VARCHAR(16), usuario VARCHAR(50), num_req INT, limite_cr DEC(12,2), monto_cotizacion DEC(12,2), balance DEC(12,2), estado VARCHAR(30) END RECORD, l SMALLINT OPEN WINDOW w1 WITH FORM "ccfmwd010" DECLARE busca_log CURSOR FOR SELECT a.fecha,a.us_crea,a.num_req,a.limite_cr,a.monto_cotizacion,a.balance,a.estado FROM cctb00031 a WHERE a.documento_ref = xorden LET l=1 FOREACH busca_log INTO arr_trx[l].* END FOREACH END FUNCTION