Files
MBS/WEBSERVICES/rep_cotizacion_1.4gl
T

495 lines
17 KiB
Plaintext

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