345 lines
14 KiB
Plaintext
345 lines
14 KiB
Plaintext
|
|
{
|
|
FUNCION : requisiciondespacho()
|
|
OBJETIVO : hacer la requisicion de despacho automatica
|
|
FECHA : 27/08/2011
|
|
DESARROLLADO POR : Ing. Juan Soto
|
|
}
|
|
IMPORT util
|
|
|
|
FUNCTION requisiciondespacho(xparametro)
|
|
DEFINE data RECORD
|
|
xnum_oc INT,
|
|
xtipo_cliente SMALLINT,
|
|
xsec_cliente INT,
|
|
xcondpago SMALLINT,
|
|
xmonto DEC(12,2),
|
|
xfecha_oc DATE,
|
|
xsec_vend INT,
|
|
mensaje VARCHAR(200),
|
|
usuario VARCHAR(50),
|
|
clave VARCHAR(50)
|
|
END RECORD,
|
|
r_out RECORD
|
|
numero_doc INT,
|
|
estado STRING,
|
|
cod_msg SMALLINT,
|
|
monto DEC(12,2)
|
|
END RECORD,
|
|
xparametro STRING
|
|
|
|
DEFINE xkit INT,
|
|
pcotizacion,xnumreq INT,
|
|
idx smallint,
|
|
chmensaje,procedimiento,cuerpo_correo,subject STRING,
|
|
vendedorEmail,nombre_vendedor CHAR(60),
|
|
selec,s STRING
|
|
|
|
DEFINE arr_requisicion DYNAMIC ARRAY OF RECORD
|
|
procesa CHAR(3),
|
|
num_oc INT,
|
|
fecha CHAR(10),
|
|
cotizacion_no INT,
|
|
tipo_cliente SMALLINT,
|
|
sec_cliente INT,
|
|
nombre CHAR(30),
|
|
cantidad_1 DEC(12,5),
|
|
cantidad DEC(12,5),
|
|
area SMALLINT,
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
descripcion CHAR(30),
|
|
unidad_med CHAR(3),
|
|
cantidad_ord1 DEC(12,5),
|
|
cantidad_ord DEC(12,5),
|
|
cantidad_pendiente DEC(12,5),
|
|
precio DEC(12,2),
|
|
descuento DEC(12,2),
|
|
descvalor DEC(12,2),
|
|
valor DEC(12,2)
|
|
END RECORD,
|
|
pitbis,xmonto,monto_cotizacion DEC(12,2),
|
|
estado_req varchar(30),
|
|
cuenta SMALLINT
|
|
|
|
CALL util.JSON.parse(xparametro,data)
|
|
|
|
LET monto_cotizacion = data.xmonto
|
|
# WHENEVER ERROR CONTINUE
|
|
DISPLAY "USUARIO REQ DESPACHO ",data.usuario,' ',data.clave
|
|
LET r_out.cod_msg=404
|
|
LET r_out.numero_doc=0
|
|
LET r_out.estado='FAVOR DE COLOCAR LA REQUISICION VIA GENERO'
|
|
RETURN util.JSON.stringify(r_out)
|
|
# LET r_out.cod_msg=400
|
|
# LET r_out.estado='SERVICIO ESTA DETENIDO, REALIZAR REQUISICION DESPACHO VIA GENERO'
|
|
# LET s =util.JSON.stringify(r_out)
|
|
# DISCONNECT CURRENT
|
|
# RETURN s
|
|
|
|
LET r_out.cod_msg = 400
|
|
LET r_out.estado = 'FAVOR DE UTILIZAR PROGRAMA EN GENERO, ESTA OPCION NO ESTA DISPONIBLE POR EL MOMENTO'
|
|
DISCONNECT CURRENT
|
|
RETURN util.JSON.stringify(r_out)
|
|
|
|
CONNECT TO "smarmotech" USER data.usuario USING data.clave
|
|
IF STATUS <0 THEN
|
|
LET r_out.cod_msg = STATUS
|
|
LET r_out.estado = 'ERROR EN USUARIO CONECTANDOSE A LA BASE DE DATOS'
|
|
DISCONNECT CURRENT
|
|
RETURN util.JSON.stringify(r_out)
|
|
END IF
|
|
|
|
# CHEQUEAR QUE LA ORDEN EXISTA
|
|
SELECT a.cond_pago FROM prtb00012 a WHERE a.num_oc = data.xnum_oc AND a.status_t IS NULL
|
|
IF STATUS =NOTFOUND THEN
|
|
LET r_out.cod_msg=-3
|
|
LET r_out.estado='ORDEN NO EXISTE EN BASE DE DATOS',' ',SQLCA.SQLERRD[2]
|
|
LET s =util.JSON.stringify(r_out)
|
|
DISCONNECT CURRENT
|
|
RETURN s
|
|
END IF
|
|
IF data.xcondpago IS NULL THEN
|
|
LET r_out.cod_msg=-16
|
|
LET r_out.estado='CONDICION DE PAGO ESTA EN BLANCO',' ',SQLCA.SQLERRD[2]
|
|
LET s =util.JSON.stringify(r_out)
|
|
DISCONNECT CURRENT
|
|
RETURN s
|
|
END IF
|
|
{ IF data.xcondpago = 4 THEN
|
|
LET r_out.cod_msg=404
|
|
LET r_out.estado='NO PUEDES GENERAR REQUISICION CUANDO LA COTIZACION ES AL CONTADO'
|
|
LET s =util.JSON.stringify(r_out)
|
|
DISCONNECT CURRENT
|
|
RETURN s
|
|
END IF
|
|
}
|
|
SELECT b.nom1_emp || ' '||b.apell1_emp,a.email
|
|
INTO nombre_vendedor,vendedorEmail
|
|
FROM seg0000 a,adtb00003 b
|
|
WHERE a.sec_vend = data.xsec_vend and
|
|
a.sec_vend = b.num_emp
|
|
# BUSCA ITBIS
|
|
LET pitbis=1
|
|
SELECT a.itbi INTO pitbis FROM vetb00019 a WHERE a.disponible = 'S'
|
|
#VERIFICA QUE LA ORDEN NO TENGA REQUISICION DESPACHO
|
|
SELECT DISTINCT a.num_req INTO r_out.numero_doc FROM cctb00026 a WHERE a.num_oc =data.xnum_oc AND a.status_t IS NULL
|
|
|
|
IF STATUS <> NOTFOUND THEN
|
|
LET r_out.estado='NUMERO ORDEN, TIENE REQUISICION NO PUEDO HACER REQUISICION'
|
|
LET r_out.cod_msg = -1
|
|
LET s = util.JSON.stringify(r_out)
|
|
DISCONNECT CURRENT
|
|
RETURN s
|
|
END IF
|
|
SELECT a.num_req INTO xnumreq FROM cctb00019 a
|
|
IF xnumreq IS NULL THEN
|
|
LET xnumreq = 0
|
|
END IF
|
|
LET xnumreq = xnumreq + 1
|
|
|
|
#BEGIN WORK
|
|
# EXECUTE s INTO xnumreq
|
|
UPDATE cctb00019 SET num_req = xnumreq,us_crea=data.usuario,fech_crea=getdate()
|
|
|
|
LET selec =
|
|
"INSERT INTO cctb00034 (id_kit,cotizacion_no,num_oc,num_req,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad)",
|
|
"SELECT a.id_kit,a.cotizacion_no,a.num_oc,'",xnumreq USING "<<<<<<","',a.secuencia,a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad ",
|
|
"FROM prtb00031 a ",
|
|
" WHERE ",
|
|
" a.num_oc ='", data.xnum_oc USING "<<<<<<","'"
|
|
PREPARE xcctb34 FROM selec
|
|
EXECUTE xcctb34
|
|
|
|
LET estado_req = 'NO AUTORIZADA'
|
|
DECLARE insertaReq CURSOR FOR
|
|
SELECT a.num_oc,a.cotizacion_no,b.secuencia,b.area,b.cod_n,b.cod_grupo,b.cod_tipo,
|
|
b.cod_Sec,b.cantidad_1,b.cantidad,b.cantidad_1,b.cantidad,c.precio,
|
|
c.porc_Desc,(c.precio*c.cantidad) * (c.porc_desc/100),a.tipo_cliente,a.sec_cliente,
|
|
d.nombre_cliente,d.porc_itbi,c.id_kit
|
|
FROM prtb00012 a,prtb00023 b,vetb00051 c,vetb00050 d
|
|
WHERE a.num_oc = b.num_oc and
|
|
a.cotizacion_no = c.cotizacion_no and
|
|
a.cotizacion_no = d.cotizacion_no and
|
|
a.num_oc = data.xnum_oc 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
|
|
b.area = c.area
|
|
UNION
|
|
SELECT a.num_oc,a.cotizacion_no,b.secuencia,b.area,b.cod_n,b.cod_grupo,b.cod_tipo,
|
|
b.cod_Sec,b.cantidad_1,b.cantidad,b.cantidad_1,b.cantidad,c.precio,
|
|
c.porc_Desc,(c.precio*c.cantidad) * (c.porc_desc/100),a.tipo_cliente,a.sec_cliente,
|
|
d.nombre_cliente,d.porc_itbi,c.id_kit
|
|
FROM prtb00012 a,prtb00023 b,vetb00031 c,vetb00050 d
|
|
WHERE a.num_oc = b.num_oc and
|
|
a.cotizacion_no = c.cotizacion_no and
|
|
a.cotizacion_no = d.cotizacion_no and
|
|
a.num_oc = data.xnum_oc 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
|
|
b.area = c.area
|
|
|
|
|
|
LET idx = 1
|
|
LET pcotizacion = 0
|
|
LET xmonto = 0
|
|
# DISPLAY " ESTOY EN ESTO ",xnum_oc
|
|
FOREACH insertareq INTO arr_requisicion[idx].num_oc,
|
|
arr_requisicion[idx].cotizacion_no,
|
|
idx,
|
|
arr_requisicion[idx].area,
|
|
arr_requisicion[idx].cod_n,
|
|
arr_requisicion[idx].cod_grupo,
|
|
arr_requisicion[idx].cod_tipo,
|
|
arr_requisicion[idx].cod_Sec,
|
|
arr_requisicion[idx].cantidad_1,
|
|
arr_requisicion[idx].cantidad,
|
|
arr_requisicion[idx].cantidad_ord,
|
|
arr_requisicion[idx].cantidad_ord1,
|
|
arr_requisicion[idx].precio,
|
|
arr_requisicion[idx].descuento,
|
|
arr_requisicion[idx].descvalor,
|
|
arr_requisicion[idx].tipo_cliente,
|
|
arr_requisicion[idx].sec_cliente,
|
|
arr_requisicion[idx].nombre,
|
|
pitbis,xkit
|
|
|
|
IF arr_requisicion[idx].cantidad_ord IS NOT NULL THEN
|
|
LET pcotizacion = arr_requisicion[idx].cotizacion_no
|
|
|
|
LET arr_requisicion[idx].valor = (arr_requisicion[idx].cantidad *arr_requisicion[idx].precio) -
|
|
arr_requisicion[idx].descvalor
|
|
LET arr_requisicion[idx].valor = arr_requisicion[idx].valor + (arr_requisicion[idx].valor * (pitbis/100))
|
|
LET xmonto = arr_requisicion[idx].valor + xmonto
|
|
IF pcotizacion IS NULL OR pcotizacion = 0 THEN
|
|
LET r_out.estado='NUMERO COTIZACION EN BLANCO'
|
|
LET r_out.cod_msg = -1
|
|
LET s = util.JSON.stringify(r_out)
|
|
# ROLLBACK WORK
|
|
DISCONNECT CURRENT
|
|
RETURN s
|
|
END IF
|
|
IF arr_requisicion[idx].valor IS NULL THEN
|
|
LET r_out.estado='VALOR REQUISICION EN BLANCO, NO ES POSIBLE HACER REQUISICION'
|
|
LET r_out.cod_msg = -1
|
|
LET s = util.JSON.stringify(r_out)
|
|
# ROLLBACK WORK
|
|
DISCONNECT CURRENT
|
|
RETURN s
|
|
END IF
|
|
IF xmonto IS NULL THEN
|
|
LET r_out.estado='MONTO REQUISICION EN BLANCO, NO ES POSIBLE HACER REQUISICION'
|
|
LET r_out.cod_msg = -1
|
|
LET s = util.JSON.stringify(r_out)
|
|
# ROLLBACK WORK
|
|
DISCONNECT CURRENT
|
|
RETURN s
|
|
END IF
|
|
|
|
INSERT INTO cctb00026 (num_req,num_oc,cotizacion_no,id,area,cod_n,cod_grupo,cod_tipo,cod_Sec,
|
|
cantidad_ord1,cantidad_ord,cantidad_1,cantidad,precio,
|
|
descuento,descvalor,valor,us_crea,fech_crea,estado,id_kit)
|
|
VALUES (xnumreq,arr_requisicion[idx].num_oc,arr_requisicion[idx].cotizacion_no,
|
|
idx,arr_requisicion[idx].area,arr_requisicion[idx].cod_n,arr_requisicion[idx].cod_grupo,
|
|
arr_requisicion[idx].cod_tipo,arr_requisicion[idx].cod_Sec,
|
|
arr_requisicion[idx].cantidad_ord1,arr_requisicion[idx].cantidad_ord,
|
|
arr_requisicion[idx].cantidad_1,
|
|
arr_requisicion[idx].cantidad,
|
|
arr_requisicion[idx].precio,arr_requisicion[idx].descuento,
|
|
arr_requisicion[idx].descvalor,
|
|
arr_requisicion[idx].valor,data.usuario,GETDATE(),estado_req,xkit)
|
|
|
|
IF STATUS < 0 THEN
|
|
{ LET r_out.estado='ERROR ADICIONANDO REQUISICION en tabla cctb00026',' ',SQLCA.SQLERRD[2],' ERR ',
|
|
|
|
' req ',xnumreq,' num_oc ', arr_requisicion[idx].num_oc,' cotiza ',
|
|
arr_requisicion[idx].cotizacion_no,' idx ',
|
|
idx,' area ',arr_requisicion[idx].area,' codn ',arr_requisicion[idx].cod_n,' codgrupo ',arr_requisicion[idx].cod_grupo,
|
|
' codtipo ',arr_requisicion[idx].cod_tipo,' codsec ',arr_requisicion[idx].cod_Sec,
|
|
' cantidad ord1 ',arr_requisicion[idx].cantidad_ord1,' cant ord ',arr_requisicion[idx].cantidad_ord,
|
|
' canti 1 ',arr_requisicion[idx].cantidad_1,
|
|
' cantidad ', arr_requisicion[idx].cantidad,
|
|
' precio ',arr_requisicion[idx].precio,' descuento ',arr_requisicion[idx].descuento,
|
|
' descvalor ',arr_requisicion[idx].descvalor,' itbis ',pitbis,
|
|
' valor ',arr_requisicion[idx].valor,' usuario ',data.usuario,' estad ',estado_req,' idkit ',xkit
|
|
}
|
|
LET r_out.estado='ERROR ADICIONANDO REQUISICION en tabla cctb00026',' ',SQLCA.SQLERRD[2]
|
|
LET r_out.cod_msg = STATUS
|
|
LET s = util.JSON.stringify(r_out)
|
|
# ROLLBACK WORK
|
|
DISCONNECT CURRENT
|
|
RETURN s
|
|
|
|
END IF
|
|
|
|
END IF
|
|
LET idx = idx +1
|
|
END FOREACH
|
|
|
|
IF pcotizacion IS NOT NULL THEN
|
|
SELECT DISTINCT a.cotizacion_no FROM vetb00022 a WHERE a.cotizacion_no = pcotizacion
|
|
IF STATUS <> NOTFOUND THEN
|
|
LET selec =
|
|
"INSERT INTO cctb00027 (num_req,etiqueta,num_oc,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec, ",
|
|
"Lado_1,lado_2,lado_3,cantidad,medida,cantidad_r,medida_r,us_crea,",
|
|
"fech_crea)",
|
|
" SELECT '",xnumreq,"',etiqueta,'",data.xnum_oc,"',secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,lado_1,lado_2,lado_3,",
|
|
"ISNULL(cantidad,0),medida,ISNULL(cantidad,0),medida,'",data.usuario CLIPPED,"',getdate() FROM vetb00022 WHERE cotizacion_no= ",
|
|
pcotizacion USING "<<<<<<<<"
|
|
|
|
PREPARE comando FROM selec
|
|
EXECUTE comando
|
|
END IF
|
|
END IF
|
|
INSERT INTO cctb00025 (num_req,fecha,sec_vend,sec_vend_aprobado,us_crea,fech_crea,
|
|
estado,fecha_autorizacion,estado_despacho,monto_req)
|
|
VALUES (xnumreq,today,data.xsec_vend,null,data.usuario,GETDATE(),estado_req,getdate(),
|
|
"NO DESPACHADA",xmonto)
|
|
IF STATUS < 0 THEN
|
|
LET r_out.estado='ERROR ADICIONANDO REQUISICION en tabla cctb00025',' ',STATUS
|
|
LET r_out.cod_msg = STATUS
|
|
LET s = util.JSON.stringify(r_out)
|
|
# ROLLBACK WORK
|
|
DISCONNECT CURRENT
|
|
RETURN s
|
|
|
|
END IF
|
|
|
|
|
|
INSERT INTO cctb00029 (num_req,mensaje,us_crea,fech_crea) VALUES
|
|
(xnumreq,data.mensaje,data.usuario,getdate())
|
|
|
|
# COMMIT WORK
|
|
|
|
CALL evaluaclientes(data.xtipo_cliente,data.xsec_cliente,data.xcondpago,xnumreq,data.xnum_oc,
|
|
data.xsec_vend,'CO',xmonto) RETURNING r_out.estado
|
|
|
|
|
|
LET chmensaje = "NUMERO DE REQUISICION: ",xnumreq USING "<<<<<<"
|
|
LET subject = "AVISO REQUISICION DESPACHO NO. ",xnumreq USING "&&&&&&"
|
|
LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
|
|
LET cuerpo_correo = "VENDEDOR : ",nombre_vendedor CLIPPED
|
|
LET cuerpo_correo = cuerpo_correo CLIPPED," FECHA REQUISICION : ",data.xfecha_oc USING "DD/MM/YYYY"
|
|
LET cuerpo_correo = cuerpo_correo CLIPPED," NUMERO DE ORDEN: ",data.xnum_oc USING "&&&&&&"
|
|
LET cuerpo_correo = cuerpo_correo CLIPPED," CLIENTE: ",arr_requisicion[1].nombre
|
|
|
|
# CALL envia_correo('rantonio@marmotech.com.do;jsantelises@marmotech.com.do',vendedorEmail,cuerpo_correo,
|
|
# subject, procedimiento )
|
|
|
|
# CALL envia_correo('jsoto@marmotech.com.do',' ',cuerpo_correo,
|
|
# subject, procedimiento )
|
|
|
|
DISCONNECT CURRENT
|
|
LET r_out.numero_doc=xnumreq
|
|
LET r_out.monto=xmonto
|
|
LET r_out.estado=estado_req
|
|
LET s = util.JSON.stringify(r_out)
|
|
RETURN s
|
|
END FUNCTION
|