IMPORT util IMPORT os TYPE t_sync_cmd RECORD oper STRING, data STRING END RECORD FUNCTION gen_nombre_archivo(tip_sal) DEFINE tip_sal,nom_arc STRING, nro_rep INT LET nro_rep=nro_rep+1 LET nom_arc="./ArchEnviados/rep_",fgl_getpid() USING "<<<<<<<<<&", "-",nro_rep USING "<<<<<<<<<&",".",DOWNSHIFT(tip_sal) RETURN nom_arc END FUNCTION FUNCTION rep_cotizacion(s) DEFINE s,s_out STRING DEFINE p RECORD cotizaciones RECORD cotizacion_no INT, fecha DATE, ventas VARCHAR(1), tipo_cliente SMALLINT, sec_cliente INT, nombre VARCHAR(80), rnc VARCHAR(11), nombre_proyecto VARCHAR(50), direccion_proyecto VARCHAR(50), direccion_cliente VARCHAR(50), cond_pago SMALLINT, descripcion VARCHAR(50), celular VARCHAR(15), email VARCHAR(60), sec_vend INT, total_bruto DEC(12,2), monto_desc DEC(12,2), monto_itbis DEC(12,2), total_cotizacion DEC(12,2), etiqueta_cotizacion VARCHAR(60), contacto VARCHAR(60), nombre_ciudad VARCHAR(60), telefono_o VARCHAR(20), telefono_r VARCHAR(20), celular1 VARCHAR(20), soporte VARCHAR(200), instalador VARCHAR(200), vendedor_aux VARCHAR(100), sec_vend_aux INT, cod_provincia SMALLINT, nombre_vend VARCHAR(60), porc_itbis DEC(8,2), plazo_entrega VARCHAR(100), comentario VARCHAR(100) END RECORD, detalles DYNAMIC ARRAY OF RECORD area SMALLINT, descripcion_area CHAR(50), codid VARCHAR(25), codigo VARCHAR(20), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descripcion VARCHAR(100), cantidad DEC(12,5), cantidad1 DEC(12,5), precio DEC(12,2), porc_desc DEC(12,2), itbis DEC(12,2), valor DEC(12,2), imagen STRING END RECORD, pprima,pitbis DEC(12,2), puser,pfecha_crea VARCHAR(50) END RECORD DEFINE cotizacion RECORD cotizacion_no INT, fecha DATE, ventas VARCHAR(1), tipo_cliente SMALLINT, sec_cliente INT, nombre VARCHAR(80), rnc VARCHAR(11), nombre_proyecto VARCHAR(50), direccion_proyecto VARCHAR(50), direccion_cliente VARCHAR(50), cond_pago SMALLINT, descripcion VARCHAR(50), celular VARCHAR(15), email VARCHAR(60), sec_vend INT, total_bruto DEC(12,2), monto_desc DEC(12,2), monto_itbis DEC(12,2), total_cotizacion DEC(12,2), etiqueta_cotizacion VARCHAR(60), contacto VARCHAR(60), nombre_ciudad VARCHAR(60), telefono_o VARCHAR(20), telefono_r VARCHAR(20), celular1 VARCHAR(20), soporte VARCHAR(200), instalador VARCHAR(200), vendedor_aux VARCHAR(100), sec_vend_aux INT, cod_provincia SMALLINT, nombre_vend VARCHAR(60), porc_itbis DEC(8,2) , plazo_entrega VARCHAR(100), comentario VARCHAR(100) END RECORD, detalle RECORD area SMALLINT, descripcion_area CHAR(50), codid VARCHAR(25), codigo VARCHAR(20), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descripcion VARCHAR(100), cantidad DEC(12,5), cantidad1 DEC(12,5), precio DEC(12,2), porc_desc DEC(12,2), itbis DEC(12,2), valor DEC(12,2), imagen STRING END RECORD DEFINE rep_out RECORD cotizcion_no INT, contenido STRING, nomb_arch STRING END RECORD, pcotizacion_no INT DEFINE r RECORD ERROR STRING END RECORD DEFINE tip_sal,arc_sal STRING DEFINE p_hand om.SaxDocumentHandler DEFINE i INT TRY CALL util.JSON.parse(s, p) CATCH LET r.error = "FGL ERROR: ", err_get(status) RETURN util.JSON.stringify(r) END TRY IF p.cotizaciones.cotizacion_no =0 OR p.cotizaciones.cotizacion_no IS NULL THEN SELECT a.cotizacion_no INTO pcotizacion_no FROM vetb00053 a IF pcotizacion_no IS NULL THEN LET pcotizacion_no = 0 END IF LET pcotizacion_no = pcotizacion_no + 1 BEGIN WORK UPDATE vetb00053 SET cotizacion_no =pcotizacion_no ELSE BEGIN WORK END IF DECLARE det1 CURSOR FOR INSERT INTO cotizacion_detalle ( cotizacion_no_mob , area , descripcion_area , cod_n , cod_grupo , cod_tipo , cod_sec , descripcion , cantidad , cantidad1 , precio , porc_desc , itbis , valor , codid, us_crea, fech_crea , cotizacion_no ) VALUES(cotizacion.cotizacion_no,detalle.area,detalle.descripcion_area, detalle.cod_n,detalle.cod_grupo,detalle.cod_tipo,detalle.cod_sec, detalle.descripcion,detalle.cantidad,detalle.cantidad1,detalle.precio, detalle.porc_desc,detalle.itbis,detalle.valor,detalle.codid, p.puser,p.pfecha_crea, pcotizacion_no) OPEN det1 FOR i = 1 TO p.detalles.getLength() IF p.detalles[i].area IS NOT NULL THEN LET detalle.* = p.detalles[i].* INSERT INTO vetb00051 (cod_cia,ventas,cotizacion_no,area,descripcion_area, cod_n,cod_grupo,cod_tipo,cod_Sec,descripcion, cantidad_1,cantidad,porc_desc,precio,us_crea,fech_crea) VALUES ('1',cotizacion.ventas,pcotizacion_no,p.detalles[i].area,p.detalles[i].descripcion_area, p.detalles[i].cod_n,p.detalles[i].cod_grupo, p.detalles[i].cod_tipo,p.detalles[i].cod_sec,p.detalles[i].descripcion, p.detalles[i].cantidad,p.detalles[i].cantidad1, p.detalles[i].porc_desc,p.detalles[i].precio,p.puser,p.pfecha_crea) PUT det1 IF STATUS < 0 THEN ROLLBACK WORK LET rep_out.cotizcion_no = 0 LET rep_out.contenido = 'VACIO' LET rep_out.nomb_arch='notiene.pdf' LET s_out=util.JSON.stringify(rep_out) RETURN s_out END IF END IF END FOR CLOSE det1 DECLARE ma1 CURSOR FOR INSERT INTO cotizacion ( cotizacion_no, fecha , ventas , tipo_cliente , sec_cliente , nombre , rnc , nombre_proyecto , direccion_proyecto , direccion_cliente , cond_pago , descripcion , celular , email , sec_vend , total_bruto , monto_desc , monto_itbis , total_cotizacion , etiqueta_cotizacion , contacto , nombre_ciudad , telefono_o , telefono_r , celular1 , soporte , instalador , vendedor_aux , sec_vend_aux , cod_provincia , nombre_vend , porc_itbis , plazo_entrega , comentario , us_crea, fech_crea ) VALUES(cotizacion.*,p.puser,p.pfecha_crea) OPEN ma1 LET cotizacion.* = p.cotizaciones.* PUT ma1 CLOSE ma1 UPDATE cotizacion SET cotizacion_no = pcotizacion_no WHERE cotizacion_no_mob = cotizacion.cotizacion_no AND cotizacion_no IS NULL UPDATE cotizacion_detalle SET cotizacion_no = pcotizacion_no WHERE cotizacion_no_mob = cotizacion.cotizacion_no AND cotizacion_no IS NULL INSERT INTO vetb00050 ( cod_cia , ventas ,cotizacion_no ,tipo_cliente ,sec_cliente ,nombre_cliente ,rnc ,nombre_proyecto , direccion_cliente , direccion_proyecto ,email ,celular ,prima, porc_itbi, fecha , comentario ,cond_pago , sec_vend , total_bruto , sub_total , monto_desc , monto_itbi , total_neto , us_crea , fech_crea,cod_provincia,telefono_o,telefono_r,celular1,sec_vend_aux,contacto, plazo_entrega) VALUES ("1",cotizacion.ventas,pcotizacion_no,cotizacion.tipo_cliente,cotizacion.sec_cliente, cotizacion.nombre,cotizacion.rnc,cotizacion.nombre_proyecto,cotizacion.direccion_cliente, cotizacion.direccion_proyecto,cotizacion.email,cotizacion.celular,P.pprima,P.pitbis,cotizacion.fecha, cotizacion.descripcion,cotizacion.cond_pago,cotizacion.sec_vend,cotizacion.total_bruto, cotizacion.total_bruto-cotizacion.monto_desc,cotizacion.monto_desc,cotizacion.monto_itbis, cotizacion.total_cotizacion, P.puser,p.pfecha_crea,cotizacion.cod_provincia,cotizacion.telefono_o, cotizacion.telefono_r,cotizacion.celular1,cotizacion.sec_vend_aux,cotizacion.contacto, cotizacion.plazo_entrega ) COMMIT WORK LET tip_sal = "PDF" IF NOT fgl_report_loadCurrentSettings("veprmt049_mob.4rp") THEN EXIT PROGRAM END IF LET arc_sal=gen_nombre_archivo(tip_sal) CALL fgl_report_selectDevice(UPSHIFT(tip_sal)) CALL fgl_report_selectPreview(false) CALL fgl_report_setOutputFileName(arc_sal) LET p_hand=fgl_report_commitCurrentSettings() IF p_hand IS NOT NULL THEN START REPORT imprimeO TO XML HANDLER p_hand FOR i = 1 TO p.detalles.getLength() IF p.detalles[i].area IS NOT NULL THEN LET detalle.area = p.detalles[i].area LET detalle.cantidad = p.detalles[i].cantidad LET detalle.cantidad1=p.detalles[i].cantidad1 LET detalle.cod_grupo=p.detalles[i].cod_grupo LET detalle.cod_n=p.detalles[i].cod_n LET detalle.cod_sec=p.detalles[i].cod_sec LET detalle.cod_tipo=p.detalles[i].cod_tipo LET detalle.descripcion=p.detalles[i].descripcion LET detalle.descripcion_area=p.detalles[i].descripcion_area LET detalle.precio = p.detalles[i].precio LET detalle.porc_desc = p.detalles[i].porc_desc LET detalle.valor = p.detalles[i].valor OUTPUT TO REPORT imprimeO(cotizacion.*,detalle.*) END IF END FOR FINISH REPORT imprimeO END IF IF os.Path.exists(arc_sal) THEN CALL file_to_b64(arc_sal) RETURNING rep_out.contenido LET rep_out.nomb_arch=os.path.basename(arc_sal) LET rep_out.cotizcion_no= pcotizacion_no # DISPLAY "GRW file '",rep_out.nomb_arch,"' sent." ELSE LET rep_out.nomb_arch="ERROR" DISPLAY "Error generating the GRW report" END IF LET s_out=util.JSON.stringify(rep_out) #DISPLAY "data ",s_out RETURN s_out END FUNCTION REPORT imprimeO(y,z) DEFINE y RECORD cotizacion_no INT, fecha DATE, ventas VARCHAR(1), tipo_cliente SMALLINT, sec_cliente INT, nombre VARCHAR(80), rnc VARCHAR(11), nombre_proyecto VARCHAR(50), direccion_proyecto VARCHAR(50), direccion_cliente VARCHAR(50), cond_pago SMALLINT, descripcion VARCHAR(50), celular VARCHAR(15), email VARCHAR(60), sec_vend INT, sub_total DEC(12,2), monto_desc DEC(12,2), monto_itbis DEC(12,2), total_cotizacion DEC(12,2), etiqueta_cotizacion VARCHAR(60), contacto VARCHAR(60), nombre_ciudad VARCHAR(60), telefono_o VARCHAR(20), telefono_r VARCHAR(20), celular1 VARCHAR(20), soporte VARCHAR(200), instalador VARCHAR(200), vendedor_aux VARCHAR(100), sec_vend_aux INT, cod_provincia SMALLINT, nombre_vend VARCHAR(60), porc_itbis DEC(8,2), plazo_entrega VARCHAR(100), comentario VARCHAR(100) END RECORD, z RECORD area SMALLINT, descripcion_area CHAR(50), codid VARCHAR(25), codigo VARCHAR(20), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descripcion VARCHAR(100), cantidad DEC(12,5), cantidad1 DEC(12,5), precio DEC(12,2), porc_desc DEC(12,2), itbis DEC(12,2), valor DEC(12,2), imagen VARCHAR(250) END RECORD , xnombre_a CHAR(30), xnombre_p CHAR(50), xmedida CHAR(3), xtotal_p,bruto,descuento,neto,total_area DEC(12,2), pfecha,hora,etiqueta,etiqueta1,etiqueta2,etiqueta3,etiqueta4,etiqueta5 CHAR(100), xorden INT, p_companias RECORD nombre CHAR(60), direccion VARCHAR(80), rnc VARCHAR(11), telefono VARCHAR(20), fax VARCHAR(20), paginaweb VARCHAR(80), telefono1 VARCHAR(20), fax1 VARCHAR(20) END RECORD, nombre_vend VARCHAR(60), psimbolo VARCHAR(4), xarch STRING, imagen BYTE OUTPUT LEFT MARGIN 0 ORDER BY z.area,z.cod_n,z.cod_grupo,z.cod_tipo,z.cod_sec FORMAT FIRST PAGE HEADER LET pfecha = TODAY USING "DD/MM/YYYY" LET hora = TIME LET etiqueta = "FORMA DE PAGO: "#,y.descrip LET etiqueta3 = "PLAZO ENTREGA: "#,y.plazo_entrega LET etiqueta4 = "COMENTARIO: " LET etiqueta5 = "Entre la empresa ",p_companias.nombre CLIPPED," de una parte y de la otra parte:" LET etiqueta1 = "Las variaciones en las tonalidades y vetas se entienden como parte de la naturaleza de las piedras naturales." LET etiqueta2 = " No somos responsables en las tardanzas en la entrega cuando esten sujetas a especificaciones de medidas y/o terminaciones. " LOCATE imagen IN MEMORY SELECT a.simbolo INTO psimbolo FROM vetb00061 a WHERE a.ventas = y.ventas SELECT ISNULL(a.nom1_emp,' ')||" "||ISNULL(a.apell1_emp,' ') INTO nombre_vend FROM adtb00003 a WHERE a.num_emp = y.sec_vend SELECT a.nombre,a.direccion,a.rnc,a.telefono,a.telefono1,a.fax,a.fax1,a.paginaweb INTO p_companias.nombre,p_companias.direccion,p_companias.rnc,p_companias.telefono, p_companias.telefono1,p_companias.fax,p_companias.fax1,p_companias.paginaweb FROM companias a BEFORE GROUP OF z.area LET total_area = 0 ON EVERY ROW # BUSCA ORDEN LET xorden = null #SELECT a.num_oc INTO xorden #FROM prtb00012 a #WHERE a.cotizacion_no = y.cotizacion_no AND a.status_t IS NULL LET bruto = 0 LET descuento = 0 LET bruto = z.cantidad1 * z.precio LET descuento = (z.cantidad1*z.precio*(z.porc_Desc/100)) LET xtotal_p = bruto - descuento # LET y.sub_total = y.sub_total + y.monto_desc LET xnombre_p = z.descripcion LET xnombre_a = z.descripcion_area IF z.imagen IS NOT NULL THEN CALL file_to_b64(z.imagen) RETURNING xarch CALL imagen.readFile(xarch) END IF PRINTX p_companias.*,y.*,z.*,bruto,descuento,neto, etiqueta,etiqueta2,etiqueta3,etiqueta4,etiqueta5, xnombre_a,xnombre_p,xmedida,xtotal_p,xorden,nombre_vend,psimbolo,imagen AFTER GROUP OF z.area LET total_area = GROUP SUM(z.cantidad1*z.precio) PRINTX total_area END REPORT