GLOBALS "svglobals.4gl" DEFINE quejas RECORD num_doc INT, num_oc INT, cotizacion_no INT, tipo_cliente SMALLINT, sec_cliente INT, nombre VARCHAR(100), rnc VARCHAR(11), telefono CHAR(25), fecha DATE, correo VARCHAR(100), sec_vend INT, vendedor VARCHAR(50), comentario VARCHAR(100), via VARCHAR(60), pcodn SMALLINT, pcodgrupo SMALLINT, pcodtipo SMALLINT, pcodsec SMALLINT, producto VARCHAR(100), lote VARCHAR(100), fecha_compra DATE, sucid SMALLINT, pestado1 VARCHAR(50) END RECORD, documento BYTE, noexiste BOOLEAN DEFINE representante VARCHAR(100), arr_documentos DYNAMIC ARRAY OF RECORD pnum_doc INT, fecha DATE, cliente VARCHAR(100), pestado VARCHAR(50) END RECORD, respuesta STRING DEFINE arr_quejas DYNAMIC ARRAY OF RECORD factura INT, fecha_factura DATE, codigo VARCHAR(25), descripcion VARCHAR(180), cantidad DEC(12,5), precio DEC(12,2), descuento DEC(12,2), valor DEC(12,2), pcod_n SMALLINT, pcod_grupo SMALLINT, pcod_tipo SMALLINT, pcod_sec SMALLINT, sucid1 SMALLINT END RECORD MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave OPTIONS INPUT WRAP CONNECT to "decomarmol" AS "IFMX" USER usuarios USING clave CALL svprmt003() END MAIN FUNCTION svprmt003() OPEN WINDOW w1 WITH FORM "svfmmt003" MENU ON ACTION adicionar CALL svprad003() ON ACTION consultar CALL svprmf003() ON ACTION salir EXIT MENU END MENU END FUNCTION FUNCTION svprad003() DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME quejas.* BEFORE INPUT CALL localidades() LET quejas.fecha = TODAY SELECT a.nom1_emp || ' '|| a.apell1_emp INTO representante FROM adtb00003 a,seg0001 b WHERE b.usuario = usuarios AND a.num_emp = b.num_emp DISPLAY BY NAME representante,usuarios,quejas.fecha LET selec = "SELECT TOP 20 a.num_doc,a.fecha,a.nombre,a.estado FROM svtb00004 a ", "ORDER BY a.fecha " PREPARE comando1 FROM selec DECLARE busca_doc1 CURSOR FOR comando1 LET idx = 1 FOREACH busca_doc1 INTO arr_documentos[idx].* LET idx = idx +1 END FOREACH ON ACTION cliente CALL busca_cliente() RETURNING quejas.tipo_cliente,quejas.sec_cliente,quejas.nombre DISPLAY BY NAME quejas.tipo_cliente,quejas.sec_cliente,quejas.nombre AFTER FIELD num_oc IF quejas.num_oc IS NOT NULL THEN CALL busca_datos() END IF AFTER FIELD sec_cliente IF quejas.tipo_cliente IS NOT NULL THEN DECLARE busca_doc CURSOR FOR SELECT a.factura,a.fecha_factura,c.descrip_esp,b.cantidad,b.precio, (b.precio*b.cantidad)*(b.cantidad_2/100), b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_Sec,a.sucid FROM vetb00002 a,vetb00003 b,iptb00002 c WHERE a.factura = b.factura AND b.cod_n = c.cod_n AND b.cod_grupo = c.cod_grupo AND b.cod_tipo = c.cod_tipo AND b.cod_sec = c.cod_sec AND a.tipo_cliente = quejas.tipo_cliente AND a.sec_cliente = quejas.sec_cliente LET idx = 1 FOREACH busca_doc INTO arr_quejas[idx].factura,arr_quejas[idx].fecha_factura, arr_quejas[idx].descripcion,arr_quejas[idx].cantidad, arr_quejas[idx].precio,arr_quejas[idx].descuento, arr_quejas[idx].pcod_n,arr_quejas[idx].pcod_grupo, arr_quejas[idx].pcod_tipo,arr_quejas[idx].pcod_sec LET arr_quejas[idx].codigo = arr_quejas[idx].pcod_n USING "&&&&","-", arr_quejas[idx].pcod_grupo USING "&&&&","-", arr_quejas[idx].pcod_tipo USING "&&&&&","-",arr_quejas[idx].pcod_sec USING "&&&&&" LET arr_quejas[idx].valor = arr_quejas[idx].cantidad* arr_quejas[idx].precio END FOREACH END IF AFTER INPUT END INPUT DISPLAY ARRAY arr_quejas TO squejas.* BEFORE ROW LET quejas.pcodn = arr_quejas[arr_curr()].pcod_n LET quejas.pcodgrupo = arr_quejas[arr_curr()].pcod_grupo LET quejas.pcodtipo = arr_quejas[arr_curr()].pcod_tipo LET quejas.pcodsec = arr_quejas[arr_curr()].pcod_sec LET quejas.producto = arr_quejas[arr_curr()].descripcion LET quejas.sucid = arr_quejas[arr_curr()].sucid1 DISPLAY BY NAME quejas.pcodn,quejas.pcodgrupo,quejas.pcodtipo,quejas.pcodsec, quejas.producto END DISPLAY DISPLAY ARRAY arr_documentos TO sdocumentos.* END DISPLAY ON ACTION guardar CALL actualiza_datos() ON ACTION CANCEL EXIT PROGRAM END DIALOG CLOSE WINDOW w1 END FUNCTION FUNCTION svprmf003() DIALOG ATTRIBUTE(UNBUFFERED) CONSTRUCT criterio ON a.num_doc,a.nombre,a.num_oc,a.cotizacion_no,a.rnc,a.telefono FROM num_doc,nombre,num_oc,cotizacion_no,rnc,telefono BEFORE CONSTRUCT CALL localidades() LET quejas.fecha = TODAY SELECT a.nom1_emp || ' '|| a.apell1_emp INTO representante FROM adtb00003 a,seg0001 b WHERE b.usuario = usuarios AND a.num_emp = b.num_emp DISPLAY BY NAME representante,usuarios,quejas.fecha LET selec = "SELECT TOP 20 a.num_doc,a.fecha,a.nombre,a.estado FROM svtb00004 a ", "ORDER BY a.fecha " PREPARE comando11 FROM selec DECLARE busca_doc11 CURSOR FOR comando11 LET idx = 1 FOREACH busca_doc11 INTO arr_documentos[idx].* LET idx = idx +1 END FOREACH ON ACTION buscar LET selec = "SELECT a.num_doc ,a.num_oc ,a.cotizacion_no ,a.tipo_cliente ,a.sec_cliente ,a.nombre ,a.rnc ,a.telefono ,CONVERT(DATE,a.fecha,103) ,a.correo ,a.sec_vend ,RTRIM(b.nom1_emp)+ ' '+b.apell1_emp ,a.comentario ,a.via ,a.cod_n ,a.cod_grupo ,a.cod_tipo ,a.cod_sec ,a.producto ,a.lote ,CONVERT(DATE,a.fecha_compra,103) ,a.sucid ,a.estado ,a.us_crea ,a.fech_crea FROM svtb00004 a LEFT OUTER JOIN adtb00003 b ON a.sec_vend = b.num_emp WHERE ",criterio CLIPPED PREPARE comando10 FROM selec DECLARE busca_f1 SCROLL CURSOR FOR comando10 OPEN busca_f1 FETCH FIRST busca_f1 INTO quejas.* IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS CON ESTA CONDICION","INFO") RETURN END IF DISPLAY BY NAME quejas.* MENU "NAVEGACION" COMMAND "Siguiente" FETCH NEXT busca_f1 INTO quejas.* IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS EN ESTA DIRECCION","INFO") EXIT MENU END IF DISPLAY BY NAME quejas.* COMMAND "Anterior" FETCH PREVIOUS busca_f1 INTO quejas.* IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS EN ESTA DIRECCION","INFO") EXIT MENU END IF DISPLAY BY NAME quejas.* COMMAND "Primero" FETCH FIRST busca_f1 INTO quejas.* IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS EN ESTA DIRECCION","INFO") EXIT MENU END IF DISPLAY BY NAME quejas.* COMMAND "Ultimo" FETCH LAST busca_f1 INTO quejas.* IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS EN ESTA DIRECCION","INFO") EXIT MENU END IF DISPLAY BY NAME quejas.* COMMAND KEY("N") "ANULAR" IF fgl_winquestion("INFO","ESTA SEGURO QUE DESEA ANULAR ESTA INFORMACION?","NO","YES|NO","QUESTION",0) THEN UPDATE svtb00004 SET estado = 'ANULADO',us_mod =usuarios,fech_mod = getedate() WHERE num_Doc = quejas.num_doc END IF COMMAND "Retornar" EXIT MENU END MENU AFTER CONSTRUCT IF INT_FLAG THEN RETURN LET INT_FLAG = FALSE END IF END CONSTRUCT ON ACTION CANCEL LET INT_FLAG = FALSE RETURN END DIALOG END FUNCTION FUNCTION busca_cliente() DEFINE selec, criterio STRING, arr_clientes DYNAMIC ARRAY OF RECORD tipo_cliente SMALLINT, sec_cliente INT, nombre1 VARCHAR(100) END RECORD, ptipo_cliente SMALLINT, psec_cliente INT, pnombre VARCHAR(100) OPEN WINDOW w2 WITH FORM "svfmwd001" CONSTRUCT BY NAME criterio ON a.nombre,a.num_rnc LET selec = "SELECT a.tipo_cliente,a.sec_cliente,a.nombre,a.num_rnc FROM vetb00004 a WHERE ",criterio CLIPPED, " AND a.status_t IS NULL" PREPARE comando FROM selec DECLARE busca_cli CURSOR FOR comando LET idx = 1 FOREACH busca_cli INTO arr_clientes[idx].* LET idx = idx + 1 END FOREACH DISPLAY ARRAY arr_clientes TO sclientes.* AFTER DISPLAY LET ptipo_cliente = arr_clientes[arr_curr()].tipo_cliente LET psec_cliente = arr_clientes[arr_curr()].sec_cliente LET pnombre = arr_clientes[arr_curr()].nombre1 EXIT DISPLAY END DISPLAY CLOSE WINDOW w2 RETURN ptipo_cliente,psec_cliente,pnombre END FUNCTION FUNCTION actualiza_datos() DEFINE ultimo,prowid INT SELECT a.num_Doc INTO ultimo FROM svtb00006 a IF STATUS = NOTFOUND THEN LET ultimo = 1 INSERT INTO svtb00006 (num_doc,us_crea,fech_crea) VALUES (ultimo,usuarios,getdate()) ELSE LET ultimo = ultimo + 1 UPDATE svtb00006 SET num_doc = ultimo,us_crea = usuarios,fech_crea = getdate() END IF LET quejas.num_doc = ultimo BEGIN WORK INSERT INTO svtb00004 (num_doc ,fecha ,num_oc ,cotizacion_no ,tipo_cliente ,sec_cliente ,nombre ,rnc ,telefono ,correo ,sec_vend ,comentario ,via ,cod_n ,cod_grupo ,cod_tipo ,cod_sec ,producto ,lote ,fecha_compra ,sucid ,estado ,us_crea ,fech_crea) VALUES (quejas.num_doc ,quejas.fecha ,quejas.num_oc ,quejas.cotizacion_no ,quejas.tipo_cliente ,quejas.sec_cliente ,quejas.nombre ,quejas.rnc ,quejas.telefono ,quejas.correo ,quejas.sec_vend ,quejas.comentario ,quejas.via ,quejas.pcodn ,quejas.pcodgrupo ,quejas.pcodtipo ,quejas.pcodsec ,quejas.producto ,quejas.lote ,quejas.fecha_compra ,quejas.sucid ,'PENDIENTE' ,usuarios ,getdate() ) LET prowid = 1 FOR idx = 1 TO arr_quejas.getLength() IF arr_quejas[idx].factura IS NOT NULL THEN IF arr_quejas[idx].pcod_sec IS NOT NULL THEN INSERT INTO svtb00005 (num_doc ,factura ,fecha_factura ,codigo ,descripcion ,cantidad ,precio ,descuento ,valor ,cod_n ,cod_grupo ,cod_tipo ,cod_sec, rowid) VALUES (quejas.num_doc ,arr_quejas[idx].factura ,arr_quejas[idx].fecha_factura ,arr_quejas[idx].codigo ,arr_quejas[idx].descripcion ,arr_quejas[idx].cantidad ,arr_quejas[idx].precio ,arr_quejas[idx].descuento ,arr_quejas[idx].valor ,arr_quejas[idx].pcod_n ,arr_quejas[idx].pcod_grupo ,arr_quejas[idx].pcod_tipo ,arr_quejas[idx].pcod_sec ,prowid) LET prowid = prowid +1 END IF END IF END FOR COMMIT WORK CALL fgl_winmessage("INFO","ADICION EXITOSA","INFO") END FUNCTION FUNCTION busca_Datos() SELECT a.tipo_cliente,a.sec_cliente,b.nombre,a.cotizacion_no,b.num_rnc,a.sec_vend,RTRIM(c.nom1_emp)||' '||c.apell1_Emp INTO quejas.tipo_cliente,quejas.sec_cliente,quejas.nombre,quejas.cotizacion_no,quejas.rnc, quejas.sec_vend,quejas.vendedor FROM prtb00012 a,vetb00004 b,adtb00003 c WHERE a.num_oc = quejas.num_oc AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND a.sec_vend = c.num_emp IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","ORDEN PEDIDOS NO EXISTE","INFO") LET noexiste = TRUE RETURN ELSE LET noexiste = FALSE END IF DISPLAY BY NAME quejas.tipo_cliente,quejas.sec_cliente,quejas.nombre,quejas.cotizacion_no,quejas.rnc, quejas.sec_vend,quejas.vendedor SELECT DISTINCT a.num_oc FROM svtb00004 a WHERE a.num_oc = quejas.num_oc AND a.estado <> 'ANULADO' IF STATUS <> NOTFOUND THEN LET respuesta = fgl_winquestion("EXISTE","NUMERO DE ORDEN TIENE DOCUMENTO DE QUEJAS, DESEAS ADICIONAR ESTE DE TODAS FORMAS?","NO","YES|NO","QUESTION",0) IF respuesta = "NO" THEN LET noexiste = TRUE RETURN END IF END IF END FUNCTION FUNCTION localidades() DEFINE klocalidad SMALLINT,kdescripcion CHAR(30), plocalidad ui.combobox LET plocalidad = ui.combobox.forname("formonly.sucid") DECLARE busca_local CURSOR FOR SELECT a.sucid,a.nombre_display FROM sucursales a WHERE localidad_venta = "SI" CALL plocalidad.clear() FOREACH busca_local INTO klocalidad,kdescripcion CALL plocalidad.additem(klocalidad,kdescripcion) END FOREACH END FUNCTION