{ 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