753 lines
30 KiB
Plaintext
753 lines
30 KiB
Plaintext
{
|
|
================================================================================
|
|
FUNCION : VECONVIERTEORDEN
|
|
OBJETIVO : PASAR LAS COTIZACIONES DE FORMA AUTOAMTICA A ORDEN DE PEDIDOS
|
|
PROGRAMADOR : ING. JUAN SOTO
|
|
FECHA REALIZACION: 19/12/2011
|
|
|
|
|
|
================================================================================
|
|
}
|
|
SCHEMA smarmotech
|
|
GLOBALS
|
|
|
|
DEFINE normal,negrilla_on,negrillas_of,comp_on,comp_off,
|
|
doce,doble_on,doble_off CHAR(3),
|
|
cmd,imprime,copia,copia1 CHAR(150),
|
|
archivo,archivo1 CHAR(80),
|
|
p_compania RECORD LIKE companias.*,
|
|
p_prtb14 RECORD LIKE prtb00014.*,
|
|
prtb08 RECORD LIKE prtb00012.*,
|
|
pvetb50 RECORD LIKE vetb00050.*,
|
|
ult_numero INT,
|
|
producto,file_impresora STRING,
|
|
printers DYNAMIC ARRAY OF SMALLINT,
|
|
id_file,printers_ant,i SMALLINT,
|
|
xnombre_file STRING,
|
|
exito BOOLEAN,
|
|
contenido_final BYTE,
|
|
pbodega INT,
|
|
identificacion VARCHAR(25),
|
|
tipoNcf VARCHAR(2),
|
|
monto_cotizacion DEC(12,2),
|
|
pmensaje_error STRING
|
|
|
|
END GLOBALS
|
|
|
|
FUNCTION convierteorden(xcotizacion_no,xorden,xusuario,xclave,ximpresor,xcopia,xtipo_orden,xcomentario,xnosolicitud,archivos)
|
|
|
|
DEFINE xcotizacion_no,xsecvend_a INT,
|
|
actualizar STRING,
|
|
psolicitud_sql STRING,
|
|
sb_sol base.StringBuffer,
|
|
xnosolicitud VARCHAR(200),
|
|
pagaITBIS VARCHAR(1),
|
|
xcomentario VARCHAR(100),
|
|
xtipo_orden VARCHAR(50),
|
|
xusuario,xclave,pdescripcion,punidad CHAR(50),
|
|
pcosto DEC(12,5),
|
|
xorden CHAR(25),
|
|
pcodn,parea,pcodgrupo,pcodtipo,pcodsec,idx,ximpresor,xcopia SMALLINT,
|
|
pcantidad1,pcantidad DEC(12,5),
|
|
pvetb22 RECORD
|
|
etiqueta INT,
|
|
cotizacion_no INT,
|
|
secuencia INT,
|
|
area INT,
|
|
cod_n INT,
|
|
cod_grupo INT,
|
|
cod_tipo INT,
|
|
cod_sec INT,
|
|
lado_1 DEC(12,5) ,
|
|
lado_2 DEC(12,5),
|
|
lado_3 DEC(12,5),
|
|
cantidad DEC(12,5),
|
|
medida DEC(12,5)
|
|
END RECORD,
|
|
|
|
|
|
pprecio DEC(12,2),
|
|
pdesc DEC(8,2),
|
|
pkit INT,
|
|
pfecha_compromiso DATE,
|
|
|
|
archivos DYNAMIC ARRAY OF RECORD
|
|
tipo_file VARCHAR(3),
|
|
contenido STRING,
|
|
nombre_arch STRING
|
|
END RECORD
|
|
|
|
|
|
CALL STARTLOG("veconvierte.txt")
|
|
# Sin esto, el default WHENEVER ERROR STOP aborta el proceso ante cualquier
|
|
# error SQL y NUNCA se ejecutan los ROLLBACK/RETURN de abajo (la conexion
|
|
# queda colgada -> el proximo request falla con "la conexion se esta usando").
|
|
WHENEVER ANY ERROR CONTINUE
|
|
|
|
# CONTROL DESPIECE
|
|
LET pcantidad = 0
|
|
LET pcantidad1 = 0
|
|
# IMPORTANTE: estas son variables GLOBALS. En el servidor de proceso unico
|
|
# conservan el valor del request anterior; hay que reinicializarlas para que
|
|
# un SELECT que no encuentre fila (NOTFOUND) no arrastre datos de otra orden.
|
|
LET pmensaje_error = NULL
|
|
LET identificacion = NULL
|
|
LET monto_cotizacion = NULL
|
|
LET tipoNcf = NULL
|
|
LET pbodega = NULL
|
|
INITIALIZE pvetb50.* TO NULL
|
|
|
|
LET xsecvend_a = NULL
|
|
SELECT a.tipo_cliente,a.nombre_cliente,a.nombre_proyecto,a.cotizacion_no,
|
|
CONVERT(CHAR(10),a.fecha_entrega,103),a.sec_vend_aux,a.bodega,a.rnc,a.total_neto,b.codigo_dgii
|
|
INTO pvetb50.tipo_cliente,pvetb50.nombre_cliente,pvetb50.nombre_proyecto,pvetb50.cotizacion_no,
|
|
pfecha_compromiso,xsecvend_a,pbodega,identificacion,monto_cotizacion,tipoNcf
|
|
FROM vetb00050 a,vetb00060 b
|
|
WHERE a.cotizacion_no =xcotizacion_no AND a.tipo_cliente = b.tipo_cliente
|
|
|
|
# Si no hay fila (cotizacion inexistente o tipo_cliente sin config NCF en
|
|
# vetb00060) no podemos continuar: reportar en vez de fallar en silencio.
|
|
IF STATUS = NOTFOUND THEN
|
|
LET pmensaje_error =
|
|
SFMT("Cotizacion %1 sin datos o su tipo de cliente no tiene configuracion NCF/DGII (vetb00060).",
|
|
xcotizacion_no)
|
|
RETURN 0,false
|
|
END IF
|
|
|
|
IF identificacion IS NULL AND monto_cotizacion > 25000 THEN
|
|
LET pmensaje_error =
|
|
SFMT("La cotizacion %1 requiere RNC/Cedula porque el monto (%2) supera 25,000.",
|
|
xcotizacion_no, monto_cotizacion)
|
|
RETURN 0,false
|
|
END IF
|
|
IF identificacion IS NULL AND monto_cotizacion < 25000 THEN
|
|
LET identificacion = '12345670901'
|
|
UPDATE vetb00050 SET rnc = identificacion WHERE cotizacion_no = xcotizacion_no
|
|
END IF
|
|
IF tipoNcf = '31' AND identificacion IS NULL THEN
|
|
LET pmensaje_error =
|
|
SFMT("La cotizacion %1 usa NCF de Credito Fiscal (31) y requiere RNC/Cedula del cliente.",
|
|
xcotizacion_no)
|
|
RETURN 0,false
|
|
END IF
|
|
SELECT num_oc INTO ult_numero FROM prtb00020
|
|
IF ult_numero IS NULL THEN
|
|
LET ult_numero = 0
|
|
END IF
|
|
LET ult_numero = ult_numero + 1
|
|
|
|
BEGIN WORK
|
|
UPDATE prtb00020 set num_oc = ult_numero,
|
|
us_crea = xusuario,
|
|
fech_crea = GETDATE()
|
|
DISPLAY "ACTUALICE ULTIMO NUMERO: ",ult_numero USING "<<<<<<<"," ",CURRENT
|
|
|
|
LET p_prtb14.observacion = xcomentario CLIPPED
|
|
DISPLAY "BUSQUE LA DATA DE LA COTIZACION EN LA TABLA MASTER COTIZACION: ",xcotizacion_no USING "<<<<<<<"," ",CURRENT
|
|
IF pbodega IS NULL THEN
|
|
LET pmensaje_error =
|
|
SFMT("La cotizacion %1 no tiene bodega / lugar de entrega asignado.", xcotizacion_no)
|
|
ROLLBACK WORK
|
|
RETURN 0,FALSE
|
|
END IF
|
|
LET xtipo_orden = 'GENERAL'
|
|
|
|
# Numero de solicitud (instalacion) enviado por el CRM -> columna prtb00012.num_solicitud.
|
|
# Se arma como literal SQL: NULL si no viene; se duplican comillas simples para no romper el INSERT.
|
|
IF xnosolicitud IS NULL OR LENGTH(xnosolicitud CLIPPED) = 0 THEN
|
|
LET psolicitud_sql = "NULL"
|
|
ELSE
|
|
LET sb_sol = base.StringBuffer.create()
|
|
CALL sb_sol.append(xnosolicitud CLIPPED)
|
|
CALL sb_sol.replace("'", "''", 0) # escapa comillas simples (0 = todas)
|
|
LET psolicitud_sql = "'", sb_sol.toString(), "'"
|
|
END IF
|
|
|
|
IF xsecvend_a IS NULL OR xsecvend_a = 0 THEN
|
|
LET actualizar =
|
|
" INSERT INTO prtb00012
|
|
(ventas,cotizacion_no,num_oc,fecha_oc,nombre_file,sec_vend,tipo_cliente,
|
|
sec_cliente,direccion,telefono,fax,cond_pago,ubicacion,cerrada,us_crea,fech_crea,tipo_orden,num_emp_inst,bodega,titulo_bodega,prima_us,num_solicitud)
|
|
SELECT a.ventas,'",xcotizacion_no, "','",ult_numero, "','",CURRENT,"','",
|
|
xorden CLIPPED,"',a.sec_vend,tipo_cliente,a.sec_cliente,a.direccion_cliente, ",
|
|
"a.telefono_r,a.fax,a.cond_pago,a.direccion_proyecto,'N',SUSER_SNAME(),GETDATE(), '",xtipo_orden CLIPPED,"', a.num_emp_inst,a.bodega,a.titulo_bodega,b.tasa,",psolicitud_sql," ",
|
|
"FROM vetb00050 a,vetb00061 b WHERE cotizacion_no=",xcotizacion_no," and a.ventas = b.ventas"
|
|
ELSE
|
|
LET actualizar =
|
|
" INSERT INTO prtb00012
|
|
(ventas,cotizacion_no,num_oc,fecha_oc,nombre_file,sec_vend,tipo_cliente,
|
|
sec_cliente,direccion,telefono,fax,cond_pago,ubicacion,cerrada,us_crea,fech_crea,tipo_orden,num_emp_inst,bodega,titulo_bodega,prima_us,precio_mo,num_solicitud)
|
|
SELECT a.ventas,'",xcotizacion_no, "','",ult_numero, "','",CURRENT,"','",
|
|
xorden CLIPPED,"','",xsecvend_a,"',a.tipo_cliente,a.sec_cliente,a.direccion_cliente, ",
|
|
"a.telefono_r,a.fax,a.cond_pago,a.direccion_proyecto,'N',SUSER_SNAME(),GETDATE(), '",xtipo_orden CLIPPED,
|
|
"', a.num_emp_inst,a.bodega,a.titulo_bodega,b.tasa,a.sub_total,",psolicitud_sql," ",
|
|
"FROM vetb00050 a,vetb00061 b WHERE a.cotizacion_no=",xcotizacion_no," and a.ventas = b.ventas"
|
|
END IF
|
|
PREPARE xvetb50 FROM actualizar
|
|
EXECUTE xvetb50
|
|
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
DISCONNECT CURRENT
|
|
RETURN 0,FALSE
|
|
END IF
|
|
|
|
DISPLAY "SE ADICIONO EN LA TABLA MASTER DE LA ORDEN: ",ult_numero USING "<<<<<<<"," ",CURRENT
|
|
|
|
LET idx = 1
|
|
LET actualizar=
|
|
"SELECT a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),a.direccion,a.sec_vend,a.tipo_cliente,a.sec_cliente, ",
|
|
" a.ubicacion,a.cond_pago,a.nombre_file ",
|
|
"FROM prtb00012 a WHERE a.num_oc ='", ult_numero,"'"
|
|
|
|
PREPARE xprtb12 FROM actualizar
|
|
EXECUTE xprtb12
|
|
INTO prtb08.num_oc,prtb08.fecha_oc,prtb08.direccion,prtb08.sec_vend,
|
|
prtb08.tipo_cliente,prtb08.sec_cliente,prtb08.ubicacion,
|
|
prtb08.cond_pago,prtb08.nombre_file
|
|
|
|
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
DISCONNECT CURRENT
|
|
RETURN 0,FALSE
|
|
END IF
|
|
DISPLAY "BUSQUEDA DE LA TABLA MASTER DE LA ORDEN: ",ult_numero USING "<<<<<<<"," ",CURRENT
|
|
|
|
|
|
DECLARE xvetb22 CURSOR FOR
|
|
SELECT a.* FROM vetb00022 a
|
|
WHERE a.cotizacion_no = xcotizacion_no
|
|
|
|
FOREACH xvetb22 INTO pvetb22.*
|
|
IF pvetb22.etiqueta IS NOT NULL THEN
|
|
INSERT INTO prtb00022 (num_oc,etiqueta,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,
|
|
lado_1,lado_2,lado_3,cantidad,medida,us_crea)
|
|
VALUES (ult_numero,pvetb22.etiqueta,pvetb22.secuencia,pvetb22.area,
|
|
pvetb22.cod_n,pvetb22.cod_grupo,
|
|
pvetb22.cod_tipo,pvetb22.cod_sec,pvetb22.lado_1,
|
|
pvetb22.lado_2,pvetb22.lado_3,pvetb22.cantidad,pvetb22.medida,xusuario)
|
|
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
DISCONNECT CURRENT
|
|
RETURN 0,FALSE
|
|
END IF
|
|
END IF
|
|
END FOREACH
|
|
DISPLAY "INSERTE EN LA TABLA IPTB00022: ",ult_numero USING "<<<<<<<"," ",CURRENT
|
|
# ACTUALIZA ESTADO
|
|
UPDATE vetb00050 SET estado = 'LOGRADA',fech_mod = getdate(),us_mod=xusuario
|
|
WHERE cotizacion_no =xcotizacion_no
|
|
|
|
CALL defecto(xusuario,xclave,ximpresor) RETURNING imprime,negrilla_on,negrillas_of,
|
|
doble_on,doble_off,comp_on,comp_off,
|
|
doce,normal,archivo,copia1
|
|
|
|
START REPORT o_pedido1 TO archivo
|
|
|
|
CALL oc_detalles() RETURNING exito
|
|
IF NOT exito THEN
|
|
ROLLBACK WORK
|
|
DISCONNECT CURRENT
|
|
RETURN 0, FALSE
|
|
END IF
|
|
DISPLAY "GENERE EL FILE PARA LA IMPRESION: ",ult_numero USING "<<<<<<<"," ",CURRENT
|
|
|
|
DECLARE xvetb51 CURSOR FOR
|
|
SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad_1,a.cantidad,
|
|
b.descrip_esp,b.unidad_med,a.precio,a.porc_Desc,a.id_kit,c.impresora
|
|
FROM vetb00051 a,iptb00002 b,iptb00020 c
|
|
WHERE (a.cotizacion_no = xcotizacion_no) AND
|
|
(a.cod_n = b.cod_n AND a.cod_Grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_Sec) AND #(a.id_kit IS NULL OR a.id_kit = 0) AND
|
|
(a.cod_n = c.cod_n)
|
|
{ UNION
|
|
SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad,a.cantidad,
|
|
b.descrip_esp,b.unidad_med,a.precio,a.porc_Desc,a.id_kit,c.impresora
|
|
FROM vetb00031 a,iptb00002 b,iptb00020 c
|
|
WHERE a.cotizacion_no = xcotizacion_no AND
|
|
(a.cod_n = c.cod_n AND
|
|
a.cod_n = b.cod_n AND a.cod_Grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_Sec) AND
|
|
(a.cod_n = b.cod_n AND a.cod_Grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_Sec) AND
|
|
|
|
a.id_kit IS NOT NULL}
|
|
ORDER BY c.impresora
|
|
LET idx = 1
|
|
|
|
CALL printers.clear()
|
|
|
|
FOREACH xvetb51 INTO parea,pcodn,pcodgrupo,pcodtipo,pcodsec,
|
|
pcantidad1,pcantidad,pdescripcion,punidad,pprecio,
|
|
pdesc,pkit,printers[idx]
|
|
#BUSCA COSTO
|
|
LET pcosto = 0
|
|
IF pcodn <> 25 OR pcodn <> 12 OR pcodn <> 5 THEN
|
|
{ SELECT AVG(a.material+a.labor+gastos) INTO pcosto FROM iptb00004 a
|
|
WHERE a.ano = YEAR(today) AND
|
|
(a.cod_n = pcodn AND a.cod_grupo = pcodgrupo AND a.cod_tipo = pcodtipo AND a.cod_Sec = pcodsec) AND
|
|
a.status_t IS NULL
|
|
|
|
IF pcosto = 0 THEN
|
|
ROLLBACK WORK
|
|
LET producto = pcodn USING "&&&&","-",pcodgrupo USING "&&&&", pcodtipo USING "&&&&",
|
|
pcodsec USING "&&&&", " NO TIENE COSTO, FAVOR DE INFORMAR A FINANZAS, NO SE ADICIONO LA ORDEN"
|
|
CALL fgl_winmessage("INFO",producto,"info")
|
|
RETURN 0,FALSE
|
|
END IF}
|
|
ELSE
|
|
LET pcosto = (pprecio * (pdesc/100)) - pprecio
|
|
END IF
|
|
|
|
INSERT INTO prtb00013 (num_oc,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,
|
|
cantidad,us_crea,fech_crea,precio,descuento,id_kit,costo)
|
|
VALUES
|
|
(ult_numero,idx,parea,pcodn,pcodgrupo,pcodtipo,pcodsec,
|
|
pcantidad,xusuario,GETDATE(),pprecio,pdesc,pkit,pcosto)
|
|
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
DISCONNECT CURRENT
|
|
RETURN 0,FALSE
|
|
END IF
|
|
#verifica la categoria de los productos en la orden
|
|
SELECT DISTINCT a.cod_cat FROM iptb00035 a WHERE a.cod_n = pcodn AND a.cod_cat = 3
|
|
IF STATUS <> NOTFOUND THEN
|
|
UPDATE prtb00012 SET tipo_orden = 'COCINAS MODULARES, PUERTAS, BANOS' WHERE num_oc = ult_numero
|
|
END IF
|
|
# DISPLAY "adicione en prtb00013 ",ult_numero
|
|
INSERT INTO prtb00023 (num_oc,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,
|
|
cantidad_1,cantidad,id_kit)
|
|
VALUES (ult_numero,idx,parea,pcodn,pcodgrupo,pcodtipo,pcodsec,
|
|
pcantidad1,pcantidad,pkit)
|
|
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
DISCONNECT CURRENT
|
|
RETURN 0,FALSE
|
|
END IF
|
|
# FILES ORDENES
|
|
DISPLAY "INSERTE EN EL DETALLE DE LA ORDEN: ",ult_numero USING "<<<<<<<"," ",CURRENT
|
|
|
|
|
|
IF archivos.getLength() > 0 THEN
|
|
DISPLAY "ESTOY EN DIBUJO ",archivos.getLength()," ",CURRENT
|
|
LOCATE contenido_final IN MEMORY
|
|
FOR i = 1 TO archivos.getLength()
|
|
IF archivos[i].tipo_file IS NOT NULL THEN
|
|
LET id_file = i
|
|
LET xnombre_file = ult_numero USING "<<<<<<<<","-",id_file USING "&&&",".",
|
|
archivos[i].tipo_file CLIPPED
|
|
CALL b64_to_file(archivos[i].contenido,xnombre_file)
|
|
CALL contenido_final.readFile(xnombre_file)
|
|
INSERT INTO prtb00029
|
|
(num_oc
|
|
,documento
|
|
,nombre_file
|
|
,tipo_file
|
|
,id
|
|
,us_crea
|
|
,fech_crea
|
|
)
|
|
VALUES
|
|
(ult_numero,contenido_final,xnombre_file,'DI',id_file,xusuario,getdate())
|
|
|
|
|
|
# CALL gen_nombre_archivo(rusuario.tipo_file) RETURNING nombre_file
|
|
# CALL rusuario.imagen.writeFile(nombre_file)
|
|
# CALL file_to_b64(nombre_file) RETURNING rusuario.imagen
|
|
# CALL documento(rusuario.imagen,r_out.orden)
|
|
END IF
|
|
FREE contenido_final
|
|
END FOR
|
|
END IF
|
|
|
|
# DESAUTORIZA LAS RESERVAS
|
|
UPDATE vetb00051 SET autorizada = 'NO' WHERE cotizacion_no = xcotizacion_no AND
|
|
cod_n = pcodn AND cod_grupo = pcodgrupo AND
|
|
cod_tipo = pcodtipo AND cod_Sec = pcodsec
|
|
OUTPUT TO REPORT o_pedido1(ult_numero,idx,parea,pcodn,pcodgrupo,pcodtipo,
|
|
pcodsec,pdescripcion,punidad,pcantidad1,pcantidad,
|
|
pprecio,pdesc,p_prtb14.*,xcotizacion_no,pkit)
|
|
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
DISPLAY "TERMINE EL PROCESO DE GENERAR EL FILE DE LA ORDEN Y LA ACTUALIZACION DE LA COTIZACION PARA LA DESAUTORIZACION DE LA RESERVA: ",xcotizacion_no USING "<<<<<<<<"," ",CURRENT
|
|
|
|
{CREACION REGISTRO EN LA TABLA CODIGOS MADRES KIT EN LA ORDEN DE PEDIDOS}
|
|
LET actualizar =
|
|
" INSERT INTO prtb00031 ",
|
|
" (num_oc ",
|
|
" ,cotizacion_no ",
|
|
" ,id_kit ",
|
|
" ,secuencia ",
|
|
" ,area ",
|
|
" ,cod_n ",
|
|
" ,cod_grupo ",
|
|
" ,cod_tipo ",
|
|
" ,cod_sec ",
|
|
" ,cantidad ",
|
|
" ,us_crea ",
|
|
" ,fech_crea) ",
|
|
"SELECT '",
|
|
ult_numero USING "<<<<<<<<","'",
|
|
",a.cotizacion_no ",
|
|
",a.id_kit ",
|
|
",a.secuencia ",
|
|
",a.area ",
|
|
",a.cod_n ",
|
|
",a.cod_grupo ",
|
|
",a.cod_tipo ",
|
|
",a.cod_sec ",
|
|
",a.cantidad ",
|
|
",a.us_crea ",
|
|
",a.fech_crea ",
|
|
" FROM vetb00051 a WHERE a.cotizacion_no = ",xcotizacion_no,
|
|
" and a.id_kit IS NOT NULL "
|
|
PREPARE kits_orden FROM actualizar
|
|
EXECUTE kits_orden
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
DISCONNECT CURRENT
|
|
RETURN 0,FALSE
|
|
END IF
|
|
DISPLAY "INSERTE ORDEN EN LA TABLA MAESTRA DE LOS KITS: ",xcotizacion_no USING "<<<<<<<<"," ",CURRENT
|
|
|
|
INSERT INTO prordenstatus(fecha_trx,num_oc,cerrada,observacion,fecha_compromiso,usuario)
|
|
VALUES (GETDATE(),ult_numero,'N','CREACION ORDEN',pfecha_compromiso,xusuario)
|
|
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
DISCONNECT CURRENT
|
|
RETURN 0,FALSE
|
|
END IF
|
|
DISPLAY "INSERTE EL LOG DE LA ORDEN: ",xcotizacion_no USING "<<<<<<<<"," ",CURRENT
|
|
|
|
|
|
COMMIT WORK
|
|
DISPLAY "COMMIT WORK: ",xcotizacion_no USING "<<<<<<<<"," ",CURRENT
|
|
|
|
FINISH REPORT o_pedido1
|
|
|
|
# ------------------------------------------------------------------------
|
|
# IMPRESION FISICA DESACTIVADA EN EL WEB SERVICE (CRM -> ERP).
|
|
# El "RUN TYPE <archivo> \\impresora" era SINCRONO y BLOQUEANTE: si la
|
|
# impresora / ruta de red no respondia, congelaba TODO el servidor (proceso
|
|
# unico) y el request del CRM nunca terminaba. La orden se imprime desde
|
|
# Genero cuando el usuario la necesite. El file de spool queda generado en
|
|
# 'archivo' por si se requiere reimpresion manual.
|
|
# ------------------------------------------------------------------------
|
|
LET file_impresora = archivo
|
|
DISPLAY "ORDEN GENERADA (impresion diferida a Genero): ",ult_numero USING "<<<<<<<"," ",CURRENT
|
|
|
|
RETURN ult_numero,TRUE
|
|
END FUNCTION
|
|
|
|
# Devuelve el motivo del ultimo fallo de convierteorden (NULL si no hubo).
|
|
# Lo usa el wrapper (orden_insert) para incluir el error en la respuesta al CRM.
|
|
FUNCTION convierte_error()
|
|
RETURN pmensaje_error
|
|
END FUNCTION
|
|
|
|
REPORT o_pedido1(xnumero,z,y,jcotizacion_no,xkit)
|
|
DEFINE z RECORD
|
|
fila SMALLINT,
|
|
area SMALLINT,
|
|
cod_n LIKE prtb00013.cod_n,
|
|
cod_grupo LIKE prtb00013.cod_grupo,
|
|
cod_tipo LIKE prtb00013.cod_tipo,
|
|
cod_sec LIKE prtb00013.cod_sec,
|
|
descrip_esp LIKE iptb00002.descrip_esp,
|
|
unidad_med LIKE iptb00002.unidad_med,
|
|
cantidad_1 DEC(12,4),
|
|
cantidad DEC(12,4),
|
|
precio DEC(12,2),
|
|
porc_desc DEC(8,2)
|
|
END RECORD,
|
|
y RECORD LIKE prtb00014.*,
|
|
l smallint,
|
|
jcotizacion_no,xkit INT,
|
|
i,xnumero INTEGER,
|
|
normal,comp_on,comp_off,doce,negrillas_on,negrillas_off,
|
|
doble_on,doble_off CHAR(2),raya CHAR(120),rayita CHAR(35),
|
|
total_gral,total_inst,subtotal,descuento,total_p DEC(12,2),
|
|
ult_pago INTEGER,
|
|
plado1,plado2,plado3,pcantidad,pmedida,total_unidades DEC(12,5),
|
|
etiqueta,prnc,ptelefono,xnumrnc CHAR(20),
|
|
descrip_p,nombres,apellidos CHAR(50),
|
|
descrip_area CHAR(40)
|
|
OUTPUT
|
|
LEFT MARGIN 0
|
|
|
|
ORDER BY z.area,z.cod_n,z.cod_grupo,z.cod_tipo,z.cod_sec
|
|
FORMAT
|
|
PAGE HEADER
|
|
LET normal = ASCII 27, ASCII 80
|
|
LET comp_on = ASCII 15
|
|
LET comp_off = ASCII 18
|
|
LET doce = ASCII 27, ascii 77
|
|
LET negrillas_on = ASCII 27, ASCII 69
|
|
LET negrillas_off = ASCII 27, ASCII 70
|
|
LET doble_on = ASCII 14
|
|
LET doble_off = ASCII 20
|
|
|
|
SELECT a.* INTO p_compania.* FROM companias a
|
|
|
|
LET l = (90 - LENGTH(p_compania.nombre CLIPPED))/2
|
|
PRINT comp_on
|
|
PRINT COLUMN l, p_compania.nombre CLIPPED,
|
|
COLUMN 72, TODAY USING "DD/MM/YYYY"
|
|
LET l = (100 - LENGTH("Ordenes de Pedido Corte a la Medida"))/2
|
|
PRINT COLUMN l, "ORDENES DE PEDIDOS",
|
|
COLUMN 72, TIME
|
|
|
|
LET prnc ="RNC:",p_compania.rnc
|
|
LET l = (90 - LENGTH(prnc))/2
|
|
PRINT COLUMN l, prnc
|
|
|
|
LET l = (90 - LENGTH(p_compania.direccion))/2
|
|
PRINT COLUMN l, p_compania.direccion
|
|
|
|
LET ptelefono = p_compania.telefono
|
|
LET l = (90 - LENGTH(ptelefono))/2
|
|
PRINT COLUMN l, ptelefono
|
|
|
|
|
|
|
|
PRINT COLUMN 001, "ORDEN NO.: ",doble_on,xnumero USING "<<<<<<",doble_off
|
|
SKIP 1 LINE
|
|
PRINT COLUMN 001, "Fecha de la Orden : ",prtb08.fecha_oc USING "DD/MMM/YYYY",
|
|
COLUMN 62, "Fecha de Entrega : ",prtb08.fecha_entrega USING "DD/MM/YYYY"
|
|
# Busca el ultimo pago realizado
|
|
LET ult_pago = NULL
|
|
{ 23/06/2017 NO PUEDE SER ESE NUMERO SELECT MAX(a.num_doc) INTO ult_pago
|
|
FROM cctb00001 a
|
|
WHERE a.tipo_doc IN ("AV","PG") AND
|
|
a.tipo_cliente = prtb08.tipo_cliente AND
|
|
a.sec_cliente = prtb08.sec_cliente AND
|
|
a.status_t IS NULL
|
|
}
|
|
# VENDEDOR
|
|
LET nombres = null
|
|
LET apellidos = null
|
|
SELECT a.nom1_emp,a.apell1_emp INTO nombres,apellidos
|
|
FROM adtb00003 a
|
|
WHERE a.num_emp = prtb08.sec_vend
|
|
IF prtb08.nombre_file IS NULL THEN
|
|
SELECT a.nombre_file INTO prtb08.nombre_file
|
|
FROM prtb00012 a
|
|
WHERE a.num_oc = xnumero
|
|
END IF
|
|
LET xnumrnc = NULL
|
|
SELECT a.num_rnc INTO xnumrnc FROM vetb00004 a
|
|
WHERE a.tipo_cliente = prtb08.tipo_cliente AND
|
|
a.sec_cliente = prtb08.sec_cliente
|
|
|
|
PRINT COLUMN 001, "CLIENTE : ",pvetb50.nombre_cliente CLIPPED
|
|
|
|
PRINT COLUMN 001, "CODIGO CLIENTE : ",prtb08.tipo_cliente USING "&&","-",
|
|
prtb08.sec_cliente USING "&&&&&&&&"
|
|
PRINT COLUMN 001, "Direccion : ",prtb08.direccion CLIPPED,
|
|
COLUMN 062, "Ubicacion : ",prtb08.ubicacion CLIPPED
|
|
PRINT COLUMN 001,"NUM RNC : ",xnumrnc
|
|
|
|
PRINT COLUMN 1, "Proyecto : ",pvetb50.nombre_proyecto CLIPPED
|
|
PRINT COLUMN 001, "Telefono : ",prtb08.telefono CLIPPED,
|
|
COLUMN 62, "Fax : ",prtb08.fax CLIPPED
|
|
PRINT COLUMN 001, "Condiciones : ", descrip_p CLIPPED,
|
|
COLUMN 62, "Vendedor : ", prtb08.sec_vend USING "<<<<"," ",
|
|
nombres CLIPPED," ",apellidos CLIPPED
|
|
PRINT COLUMN 1, "COTIZACION NO. : ", jcotizacion_no USING "&&&&&&",
|
|
2 SPACES, "Documento Referencia : ",prtb08.nombre_file CLIPPED
|
|
|
|
|
|
FOR i = 1 TO 120
|
|
LET raya[i] = "-"
|
|
END FOR
|
|
FOR i = 1 TO 35
|
|
LET rayita[i] = "-"
|
|
END FOR
|
|
|
|
# PRINT "Nombre Archivo dibujo: ",parchivo
|
|
LET subtotal = 0
|
|
LET descuento = 0
|
|
LET total_p = 0
|
|
LET total_gral = 0
|
|
|
|
PRINT doce
|
|
PRINT raya
|
|
PRINT COLUMN 033, "|ALTURA",
|
|
COLUMN 040, "|TERMINACION",
|
|
COLUMN 64,"|CANTIDAD"
|
|
|
|
PRINT COLUMN 001, " CODIGO ",
|
|
COLUMN 012, "|DESCRIPCION",
|
|
COLUMN 033, "|ZOCALO|",
|
|
# COLUMN 047, "|TERMINACION",
|
|
COLUMN 048, "|BISEL",
|
|
COLUMN 55, "|UNID.",
|
|
COLUMN 64, "|UNIDADES",
|
|
COLUMN 78, "|CANTIDAD",
|
|
COLUMN 91, "|PRECIO",
|
|
COLUMN 101, "|%DESC.",
|
|
COLUMN 108, " |TOTAL"
|
|
PRINT raya
|
|
BEFORE GROUP OF z.area
|
|
SELECT a.nombre_Area INTO descrip_Area FROM prtb00016 a
|
|
WHERE a.area_num = z.area
|
|
|
|
PRINT "AREA: ",descrip_area CLIPPED
|
|
|
|
ON EVERY ROW
|
|
LET descuento = (z.precio * z.cantidad) * (z.porc_desc/100)
|
|
LET subtotal = subtotal + (z.precio*z.cantidad)
|
|
LET total_p = subtotal - descuento
|
|
LET total_gral = total_p + total_gral
|
|
|
|
PRINT COLUMN 1, z.cod_n USING "&&&&","-",z.cod_grupo USING "&&&&&","-",
|
|
z.cod_tipo USING "&&&&&","-",z.cod_sec USING "&&&&&&&"," ",
|
|
COLUMN 12, z.descrip_esp wordwrap right margin 40,
|
|
COLUMN 57, z.unidad_med clipped,
|
|
COLUMN 63, z.cantidad_1 USING "##,###.####",
|
|
COLUMN 75, z.cantidad USING "#,###,###.#&&&"
|
|
# COLUMN 90, z.precio USING "$,$$$,$##.##",
|
|
# COLUMN 103, z.porc_desc USING "###.##","%",
|
|
# COLUMN 111, total_p USING "$$,$$$,$##.##"
|
|
# BUSCA DESPIECE
|
|
DECLARE busca_d1 CURSOR FOR
|
|
SELECT b.descripcion,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida
|
|
FROM prtb00022 a,vetb00026 b
|
|
WHERE a.etiqueta = b.codid AND
|
|
a.area = z.area AND
|
|
#a.secuencia = z.fila AND
|
|
a.cod_n = z.cod_n AND
|
|
a.cod_grupo = z.cod_grupo AND
|
|
a.cod_tipo = z.cod_tipo AND
|
|
a.cod_sec = z.cod_sec AND
|
|
a.num_oc = xnumero
|
|
LET total_unidades = 0
|
|
FOREACH busca_d1 INTO etiqueta,plado1,plado2,plado3,pcantidad,pmedida
|
|
PRINT COLUMN 5,pcantidad USING "<,<<<"," ",etiqueta clipped," DE ",plado1 USING "<<.#####"," X ",
|
|
plado2 USING "<<.#####"," X ",plado3 USING "<<.#####"," = ",pmedida USING "<<<.#####"
|
|
LET total_unidades = total_unidades + pcantidad
|
|
END FOREACH
|
|
IF total_unidades > 0 THEN
|
|
|
|
PRINT COLUMN 19, "TOTAL UNIDADES ",total_unidades USING "<,<<<"
|
|
END IF
|
|
{# BUSCA COMPOSICION KIT
|
|
DECLARE busca_kit CURSOR FOR
|
|
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad,b.descrip_esp
|
|
FROM prtb00030 a,iptb00002 b
|
|
WHERE a.num_oc = xnumero AND
|
|
a.id_kit = xkit AND
|
|
a.cod_n = b.cod_n AND
|
|
a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND
|
|
a.cod_sec = b.cod_sec
|
|
|
|
LET l = 1
|
|
FOREACH busca_kit INTO kit.cod_n,kit.cod_grupo,kit.cod_tipo,kit.cod_sec,kit.cantidad,descrip_p
|
|
PRINT COLUMN 5, kit.cantidad USING "<<<"," ",kit.cod_n USING "&&&&","-",
|
|
kit.cod_grupo USING "&&&&","-",
|
|
kit.cod_tipo USING "&&&&","-",
|
|
kit.cod_sec USING "&&&&"," ",descrip_p
|
|
LET l = l + 1
|
|
END FOREACH
|
|
}
|
|
ON LAST ROW
|
|
SKIP 1 LINE
|
|
PRINT COLUMN 075, "INSTALACION"
|
|
|
|
PRINT COLUMN 065, rayita
|
|
|
|
PRINT COLUMN 065,"|"," Cantidad |",
|
|
COLUMN 075, " Precio |",
|
|
COLUMN 085," Total "
|
|
|
|
PRINT COLUMN 045, "Instalacion Tope",
|
|
COLUMN 068, prtb08.cantidad_i USING "####.#&",
|
|
COLUMN 078, prtb08.precio_i USING "#,###.#&",
|
|
COLUMN 088,(prtb08.cantidad_i * prtb08.precio_i) USING "#,###,###.#&"
|
|
|
|
PRINT COLUMN 045, "Mano de Obra",
|
|
COLUMN 068, prtb08.cantidad_mo USING "####.#&",
|
|
COLUMN 078, prtb08.precio_mo USING "#,###.#&",
|
|
COLUMN 088,(prtb08.cantidad_mo * prtb08.precio_mo) USING "#,###,###.#&"
|
|
PRINT COLUMN 065, rayita
|
|
|
|
LET total_inst = (prtb08.cantidad_i * prtb08.precio_i) +
|
|
(prtb08.cantidad_mo * prtb08.precio_mo)
|
|
|
|
PRINT COLUMN 065, "Total Instalacion",
|
|
COLUMN 088, total_inst USING "#,###,###.#&"
|
|
|
|
PRINT COLUMN 060, "Transporte",
|
|
COLUMN 088, prtb08.transporte USING "#,###,###.#&"
|
|
|
|
#PRINT COLUMN 060, "Sub-Total",
|
|
# COLUMN 088, prtb08.sub_total + total_inst USING "#,###,###.#&"
|
|
|
|
#PRINT COLUMN 060, "Itbis",
|
|
# COLUMN 088, prtb08.itbis USING "#,###,###.#&"
|
|
#PRINT COLUMN 060, "Total Ventas",
|
|
# COLUMN 088, total_gral USING "$$$,$$$,$##.##"
|
|
PRINT normal
|
|
|
|
SKIP 2 LINES
|
|
PRINT COLUMN 003, y.observacion wordwrap right margin 50
|
|
|
|
PAGE TRAILER
|
|
PRINT COLUMN 10, "-------------------",
|
|
COLUMN 35, "-------------------",
|
|
COLUMN 57, "-------------------"
|
|
|
|
PRINT COLUMN 13, "VENDEDOR",
|
|
COLUMN 39, "CLIENTE",
|
|
COLUMN 61, "APROBADO POR"
|
|
END REPORT
|
|
FUNCTION oc_detalles()
|
|
DEFINE pcomentario VARCHAR(80)
|
|
SELECT a.comentario iNTO pcomentario FROM vetb00050 a
|
|
WHERE a.cotizacion_no = pvetb50.cotizacion_no
|
|
|
|
LET p_prtb14.observacion = pcomentario CLIPPED,p_prtb14.observacion CLIPPED
|
|
INSERT INTO prtb00014 (num_oc,observacion,us_crea,fech_crea)
|
|
VALUES (ult_numero,p_prtb14.observacion,SUSER_SNAME(),GETDATE())
|
|
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
RETURN FALSE
|
|
END IF
|
|
RETURN TRUE
|
|
END FUNCTION
|
|
FUNCTION verificacodigo(qcodn,qcodgrupo,qcodtipo,qcodsec,qcotizacion)
|
|
DEFINE qcodn,qcodgrupo,qcodtipo,qcodsec SMALLINT,
|
|
qcotizacion INT,
|
|
estado BOOLEAN
|
|
|
|
LET estado = FALSE
|
|
SELECT DISTINCT a.cod_n FROM iptb00027 a
|
|
WHERE a.cod_n = qcodn AND
|
|
a.cod_grupo = qcodgrupo AND
|
|
a.cod_tipo = qcodtipo AND
|
|
a.cod_Sec = qcodsec
|
|
|
|
IF STATUS <> NOTFOUND THEN
|
|
SELECT DISTINCT a.cotizacion_no FROM vetb00052 a
|
|
WHERE a.cotizacion_no = qcotizacion AND
|
|
a.cod_n = qcodn AND
|
|
a.cod_tipo = qcodtipo AND
|
|
a.cod_sec = qcodsec
|
|
IF STATUS <> NOTFOUND THEN
|
|
CALL fgl_winmessage("ERROR", "NO PUEDE CONVERTIR COTIZACION EN ORDEN, EXISTE UN ITEM QUE SE DESPIEZA Y NO SE ENCUENTRA EN TABLA, VERIFIQUE DESPIECE","INFO")
|
|
|
|
LET estado = TRUE
|
|
END IF
|
|
END IF
|
|
RETURN estado
|
|
|
|
|
|
END FUNCTION |