IMPORT util IMPORT os IMPORT security SCHEMA mbs DEFINE correcto STRING, descripcion_cond VARCHAR(60), xfecha_vence DATE FUNCTION factura(pdata) DEFINE scliente,dataorden STRING DEFINE orden RECORD encabezado RECORD num_oc,cotizacion_no,factura,tipo_cliente,sec_cliente,cond_pago,sec_vend INT, nombre,direccion_linea1,direccion_linea2,ciudad,codigo_postal,pais_region,region_provincia, telefono1,telefono2,correo_electronico,contacto VARCHAR(100), orden_externa VARCHAR(30), fecha_orden DATE, metodo_pago,referencia STRING, tipo_envio VARCHAR(100), total_bruto,monto_descuento,sub_total,monto_itbis,total_neto,itbis,valor_envio FLOAT, codigo_dgii,titulo_ncf string,num_rnc VARCHAR(11), ventas VARCHAR(1), cod_zona VARCHAR(3), conexion , usuario,clave STRING, contacto_obra,telefono_contacto_obra STRING END RECORD, detalle DYNAMIC ARRAY OF RECORD ultima_cotizacion,codid,cod_n,cod_grupo,cod_tipo,cod_sec INT, precio,cantidad1,cantidad,descuento FLOAT, titulo STRING END RECORD END RECORD DEFINE cliente RECORD nombre,cond_pago,rnc,tipo_doc STRING, limite_cr FLOAT, tipo_negocio INT, direccion,urbanizacion,sector,pais,zona,provincia, telefono_casa,telefono_celular, email,url,contacto STRING, tipo_cliente INT END RECORD, ult_ncf,localidad INT DEFINE pdata STRING DEFINE factura RECORD gral RECORD cod_cia LIKE vetb00002.cod_cia, #DEJAR EN BLANCO ventas LIKE vetb00002.ventas, zona CHAR(3), factura LIKE vetb00002.factura, conduce LIKE vetb00002.conduce, fecha_conduce DATE, fecha_factura DATE, tipo_cliente LIKE vetb00002.tipo_cliente, sec_cliente LIKE vetb00002.sec_cliente, nombre CHAR(30), direccion CHAR(170), ciudad CHAR(20), prima_us LIKE vetb00002.prima_us, porc_desc LIKE vetb00002.porc_desc, cond_pago LIKE vetb00002.cond_pago, # AUTOMATICO num_req INT, # AUTOMATICO orden INT, orden_externa STRING, fecha_orden DATE, porc_itbi LIKE vetb00002.porc_itbi, sec_vend LIKE vetb00002.sec_vend, nombre_vend CHAR(60), cod_transp LIKE iptb00006.cod_transp, sec_transp LIKE iptb00006.sec_transp, cod_tarifa LIKE iptb00006.cod_tarifa, nombre_tran CHAR(30), fecha_embarque DATE, placa_transp LIKE iptb00006.placa, sub_total DECIMAL(12,2), desc_valor DECIMAL(12,2), itbis DECIMAL(12,2), total_fact DECIMAL(12,2), valor_envio FLOAT, correo_electronico STRING, metodo_pago STRING, num_rnc,pais,telefono_casa,telefono_cel,strncf,codigo_dgii,usuario,clave,tipo_envio,referencia,contacto STRING, provincia INT, contacto_obra,telefono_contacto_obra STRING END RECORD, detalle DYNAMIC ARRAY OF RECORD area SMALLINT, #AUTOMATICO cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(50), unidad_med CHAR(5), cantidad1, cantidad DEC(12,5), precio LIKE vetb00003.precio, cantidad_2 LIKE vetb00003.cantidad_2, monto_fact DECIMAL(12,2), cantidad_orden DEC(12,5), facturada DEC(12,5), pendiente DEC(12,5), id_kit INT, codid INT END RECORD END RECORD DEFINE respuesta RECORD cod_msg INT, descripcion STRING, ncf_string STRING, factura,orden INT END RECORD, idx,borrar,kncf,xult_factura,xult_recibo,i INT, selec STRING, fecha,p_fecha_ven DATE DEFINE respuesta_orden RECORD cod_msg,descripcion STRING, orden INT END RECORD TRY CALL util.JSON.parse(pdata,factura) CATCH LET respuesta.cod_msg=404 LET respuesta.descripcion = 'ERROR EN JSON ',SQLCA.sqlerrm LET respuesta.ncf_string = 'NO TIENE' RETURN util.JSON.stringify(respuesta) END TRY DISPLAY "USUARIO: ",factura.gral.usuario," pass ",factura.gral.clave CONNECT TO "marmotech" USER factura.gral.usuario USING factura.gral.clave IF STATUS < 0 THEN LET respuesta.cod_msg=STATUS LET respuesta.descripcion = 'ERROR EN CONEXION DB ',SQLCA.sqlerrm LET respuesta.ncf_string = 'NO TIENE' DISCONNECT CURRENT RETURN util.JSON.stringify(respuesta) END IF IF factura.gral.nombre IS NULL THEN LET respuesta.cod_msg=404 LET respuesta.descripcion = 'ERROR NOMBRE DE CLIENTE EN BLANCO ' LET respuesta.ncf_string = 'NO TIENE' DISCONNECT CURRENT RETURN util.JSON.stringify(respuesta) END IF LET fecha = TODAY IF factura.gral.num_rnc IS NULL THEN IF factura.gral.codigo_dgii = 'B01' THEN LET respuesta.cod_msg=404 LET respuesta.descripcion = 'RNC ESTA EN BLANCO, NO PUEDES HACER FACTURAS CON CREDITO FISCAL' LET respuesta.ncf_string = 'NO TIENE' DISCONNECT CURRENT RETURN util.JSON.stringify(respuesta) END IF LET factura.gral.codigo_dgii='B02' END IF LET selec = "SELECT cod_n,cod_grupo,cod_tipo,cod_sec FROM marmotech.dbo.iptb00002 WHERE codid = ?" PREPARE buscaprod FROM selec LET selec = "SELECT a.ncf_final,a.tipo_ncf,a.fecha_vencimiento FROM vetb00071 a WHERE a.codigo_dgii = ? AND a.disponible = 'S' " PREPARE cmd_ncf FROM selec EXECUTE cmd_ncf INTO ult_ncf,orden.encabezado.titulo_ncf,xfecha_vence USING factura.gral.codigo_dgii IF STATUS =NOTFOUND THEN LET respuesta.cod_msg=404 LET respuesta.descripcion = 'NO EXISTE SECUENCIA NCF PARA ESTE ID' LET respuesta.ncf_string = 'NO TIENE' DISCONNECT CURRENT RETURN util.JSON.stringify(respuesta) END IF LET selec = "SELECT a.ncf FROM vetb00073 a WHERE a.codigo_dgii = ? " PREPARE cmd_ncf1 FROM selec EXECUTE cmd_ncf1 INTO kncf USING factura.gral.codigo_dgii IF STATUS =NOTFOUND THEN LET respuesta.cod_msg=404 LET respuesta.descripcion = 'PROBLEMA EN LA SECUENCIA DE LOS NCF, CONTACTE A FINANZAS' LET respuesta.ncf_string = 'NO TIENE' DISCONNECT CURRENT RETURN util.JSON.stringify(respuesta) END IF LET kncf = kncf + 1 IF kncf > ult_ncf THEN LET respuesta.cod_msg=404 LET respuesta.descripcion = 'PROBLEMA EN LA SECUENCIA DE LOS NCF, CONTACTE A FINANZAS' LET respuesta.ncf_string = 'NO TIENE' DISCONNECT CURRENT RETURN util.JSON.stringify(respuesta) END IF LET factura.gral.tipo_cliente =25 LET cliente.cond_pago = 4 SELECT a.descrip INTO descripcion_cond FROM vetb00012 a WHERE a.cond_pago = cliente.cond_pago LET cliente.direccion = factura.gral.direccion LET cliente.email = factura.gral.correo_electronico LET cliente.nombre = factura.gral.nombre LET cliente.pais = factura.gral.pais LET cliente.provincia = factura.gral.provincia LET cliente.zona = factura.gral.zona LET cliente.rnc = factura.gral.num_rnc LET cliente.telefono_casa = factura.gral.telefono_casa LET cliente.telefono_celular = factura.gral.telefono_cel LET localidad = 20 LET cliente.tipo_cliente = factura.gral.tipo_cliente LET cliente.contacto = factura.gral.contacto LET scliente = UTIL.JSON.stringify(cliente) CALL crearcliente(scliente) RETURNING factura.gral.tipo_cliente,factura.gral.sec_cliente LET orden.encabezado.conexion = "ACTIVA" LET orden.encabezado.sec_vend =9 LET orden.encabezado.nombre = factura.gral.nombre LET orden.encabezado.direccion_linea1 = factura.gral.direccion LET orden.encabezado.tipo_envio = factura.gral.tipo_envio LET orden.encabezado.contacto_obra = factura.gral.contacto_obra LET orden.encabezado.telefono_contacto_obra = factura.gral.telefono_contacto_obra LET orden.encabezado.telefono1 = factura.gral.telefono_casa LET orden.encabezado.telefono2 = factura.gral.telefono_cel LET orden.encabezado.valor_envio = factura.gral.valor_envio LET orden.encabezado.referencia = factura.gral.referencia LET orden.encabezado.contacto = factura.gral.contacto LET orden.encabezado.ventas = factura.gral.ventas LET orden.encabezado.cond_pago = factura.gral.cond_pago LET orden.encabezado.direccion_linea1 = factura.gral.direccion LET orden.encabezado.correo_electronico = factura.gral.correo_electronico LET orden.encabezado.metodo_pago = factura.gral.metodo_pago LET orden.encabezado.pais_region = factura.gral.pais LET orden.encabezado.region_provincia = factura.gral.provincia LET orden.encabezado.total_bruto = factura.gral.sub_total LET orden.encabezado.itbis = factura.gral.porc_itbi LET orden.encabezado.monto_itbis = factura.gral.itbis LET orden.encabezado.sub_total = factura.gral.sub_total LET orden.encabezado.monto_descuento = factura.gral.desc_valor LET orden.encabezado.total_neto = factura.gral.total_fact LET orden.encabezado.codigo_dgii = factura.gral.codigo_dgii LET orden.encabezado.tipo_cliente = factura.gral.tipo_cliente LET orden.encabezado.sec_cliente = factura.gral.sec_cliente LET orden.encabezado.nombre = factura.gral.nombre LET orden.encabezado.sec_vend = factura.gral.sec_vend LET orden.encabezado.cod_zona = factura.gral.zona LET orden.encabezado.orden_externa = factura.gral.orden_externa LET orden.encabezado.tipo_cliente = factura.gral.tipo_cliente LET orden.encabezado.sec_cliente = factura.gral.sec_cliente LET orden.encabezado.correo_electronico = factura.gral.correo_electronico LET ORDEN.encabezado.direccion_linea1 = factura.gral.direccion LET orden.encabezado.metodo_pago = factura.gral.metodo_pago LET orden.encabezado.monto_descuento = factura.gral.desc_valor LET orden.encabezado.monto_itbis = factura.gral.itbis LET orden.encabezado.nombre = factura.gral.nombre LET orden.encabezado.num_rnc = cliente.rnc LET factura.gral.cod_cia = 1 LET factura.gral.cond_pago = 4 LET factura.gral.ventas = 3 DISPLAY "DETALLE FACTURA ",factura.detalle.getLength() FOR i =1 TO factura.detalle.getLength() DISPLAY "DETALLE FACTURA ",factura.detalle[i].codid LET orden.detalle[i].codid = factura.detalle[i].codid LET orden.detalle[i].cod_n = factura.detalle[i].cod_n LET orden.detalle[i].cod_grupo = factura.detalle[i].cod_grupo LET orden.detalle[i].cod_tipo = factura.detalle[i].cod_tipo LET orden.detalle[i].cod_sec = factura.detalle[i].cod_sec LET orden.detalle[i].cantidad = factura.detalle[i].cantidad LET orden.detalle[i].cantidad1 = factura.detalle[i].cantidad1 LET orden.detalle[i].precio = factura.detalle[i].precio LET orden.detalle[i].titulo = factura.detalle[i].descrip_esp END FOR LET dataorden= util.JSON.stringify(orden) CALL orden_e(dataorden) RETURNING dataorden CALL util.JSON.parse(dataorden,respuesta_orden) LET factura.gral.orden = respuesta_orden.orden LET factura.gral.fecha_orden = TODAY LET factura.gral.cod_cia = 1 # SECUENCIA FACTURA BEGIN WORK SELECT a.ult_factura INTO xult_factura FROM vetb00001 a WHERE a.sucid =localidad IF STATUS = NOTFOUND THEN INSERT INTO vetb00001(ult_factura,sucid,us_crea,fech_crea) VALUES (0,20,factura.gral.usuario,getdate()) LET xult_factura = 0 END IF LET xult_factura = xult_factura + 1 UPDATE vetb00073 SET ncf = kncf WHERE codigo_dgii =factura.gral.codigo_dgii UPDATE vetb00001 SET ult_factura = xult_factura WHERE sucid = localidad LET factura.gral.cond_pago = 4 LET factura.gral.sec_vend = 9 LET factura.gral.factura = xult_factura # LET factura.gral.orden = orden.encabezado.num_oc SELECT a.nom1_Emp||' '|| a.apell1_emp INTO factura.gral.nombre_vend FROM adtb00003 a WHERE a.num_emp = factura.gral.sec_vend LET respuesta.ncf_string=factura.gral.codigo_dgii CLIPPED,kncf USING "&&&&&&&&" INSERT INTO vetb00002 (cod_cia, factura, fecha_factura,ventas, zona, orden, fecha_orden, tipo_cliente, sec_cliente, sec_vend, cond_pago, porc_itbi, porc_desc,prima_us,sub_total,monto_desc,monto_itbi, neto,fecha_embarque,status_impresion,us_crea, fech_crea, sucid,documento,nombre_cliente,direccion_cliente,valor_envio,rnc,ncf,titulo_ncf, fecha_vencimiento_ncf) VALUES (factura.gral.cod_cia, xult_factura, factura.gral.fecha_factura, factura.gral.ventas,factura.gral.zona,factura.gral.orden, factura.gral.fecha_orden, factura.gral.tipo_cliente,factura.gral.sec_cliente,factura.gral.sec_vend, factura.gral.cond_pago,factura.gral.porc_itbi,factura.gral.porc_desc, factura.gral.prima_us,factura.gral.sub_total,factura.gral.desc_valor, factura.gral.itbis,factura.gral.total_fact,factura.gral.fecha_embarque, 'S',factura.gral.usuario,getdate(),localidad,factura.gral.orden_externa, factura.gral.nombre,factura.gral.direccion,factura.gral.valor_envio,factura.gral.num_rnc, respuesta.ncf_string, orden.encabezado.titulo_ncf,xfecha_vence) #NCF INSERT INTO vetb00072 VALUES (xult_factura,"FT",factura.gral.codigo_dgii,kncf,factura.gral.usuario,getdate(),localidad) # FACTURA EN CUENTAS POR COBRAR, ESTO FUE SUGERENCIA DE LA ENC. DE FINANZAS LET p_fecha_ven = factura.gral.fecha_factura + 1 INSERT INTO cctb00001 (cod_cia,tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec,fecha_orig, fecha_ven,aplica_a,localidad_aplica_a,valor,monto_desc, us_crea,fech_crea,bodega,sucid,documento_ref,banco,num_oc) VALUES (factura.gral.cod_cia,'FT',factura.gral.factura, factura.gral.tipo_cliente,factura.gral.sec_cliente, 9,factura.gral.fecha_factura,p_fecha_ven, factura.gral.factura, localidad,factura.gral.total_fact, 0, factura.gral.usuario,getdate(), localidad,localidad,'0',factura.gral.conduce,factura.gral.orden) # RECIBO DE PAGO FACTURA SELECT a.ult_recibo INTO xult_recibo FROM cctb00003 a WHERE tipo_doc = 'PC' LET xult_recibo = xult_recibo + 1 INSERT INTO cctb00001 (cod_cia, tipo_doc, num_doc, tipo_cliente, sec_cliente, cod_emp_sec, fecha_orig, fecha_ven,aplica_a,localidad_aplica_a,valor,monto_desc, us_crea,fech_crea,sucid,num_oc) VALUES (factura.gral.cod_cia,'PC',xult_recibo, factura.gral.tipo_cliente,factura.gral.sec_cliente, factura.gral.sec_vend,factura.gral.fecha_factura,factura.gral.fecha_factura, factura.gral.factura, localidad,factura.gral.total_fact, 0, factura.gral.usuario,getdate(), localidad,factura.gral.orden) #---------------------------------------------------------------------------------------------------- LET correcto = "SI" FOR idx = 1 TO factura.detalle.getLength() IF factura.detalle[idx].codID IS NOT NULL THEN EXECUTE buscaprod INTO factura.detalle[idx].cod_n,factura.detalle[idx].cod_grupo, factura.detalle[idx].cod_tipo,factura.detalle[idx].cod_sec USING factura.detalle[idx].codid IF factura.detalle[idx].cod_n IS NULL THEN ROLLBACK WORK LET correcto = "NO" EXIT FOR END IF IF factura.detalle[idx].cantidad_2 IS NULL THEN LET factura.detalle[idx].cantidad_2 =0 END IF INSERT INTO vetb00003 (cod_cia, factura, area, cod_n, cod_grupo, cod_tipo, cod_Sec, cantidad,cantidad_2,precio,us_crea,fech_crea,sucid,id_kit,descripcion) VALUES (factura.gral.cod_cia, factura.gral.factura,factura.detalle[idx].area, factura.detalle[idx].cod_n, factura.detalle[idx].cod_grupo,factura.detalle[idx].cod_tipo, factura.detalle[idx].cod_sec,factura.detalle[idx].cantidad,factura.detalle[idx].cantidad_2, factura.detalle[idx].precio,factura.gral.usuario,getdate(),localidad, factura.detalle[idx].id_kit, factura.detalle[idx].descrip_esp) # Actualizando la tabla de movimientos de inventario cuando la factura es # normal o Tiene Cantidad a despachar LET factura.detalle[idx].cantidad = factura.detalle[idx].cantidad * -1 # IF fact_det[idx].cod_n != 5 THEN INSERT INTO iptb00006 (cod_cia,num_doc,fact_no,fecha,cod_transp,sec_transp, cod_sp,cod_sp_sec,placa,cod_tarifa,cod_mov,cod_n, cod_grupo,cod_tipo,cod_sec,cantidad_2, bodega,us_crea,fech_crea,cotizacion_no,num_oc) VALUES (factura.gral.cod_cia,factura.gral.factura,factura.gral.factura, factura.gral.fecha_factura,factura.gral.cod_transp,factura.gral.sec_transp, factura.gral.tipo_cliente,factura.gral.sec_cliente,factura.gral.placa_transp, factura.gral.cod_tarifa,30,factura.detalle[idx].cod_n, factura.detalle[idx].cod_grupo,factura.detalle[idx].cod_tipo, factura.detalle[idx].cod_sec,factura.detalle[idx].cantidad,localidad, factura.gral.usuario,getdate(), factura.gral.conduce, factura.gral.orden) LET factura.detalle[idx].cantidad = factura.detalle[idx].cantidad * -1 END IF END FOR IF correcto = "SI" THEN COMMIT WORK END IF DISCONNECT CURRENT IF correcto = "SI" THEN LET respuesta.cod_msg = 200 LET respuesta.descripcion='ADICION EXITOSA EL NUMERO DE FACTURA INTERNO ES ',factURA.gral.factura USING "&&&&&&", " LA ORDEN ",factura.gral.orden USING "&&&&&&&&" LET respuesta.orden = factura.gral.orden LET respuesta.factura = factura.gral.factura ELSE LET respuesta.cod_msg = 404 LET respuesta.descripcion='NO ES POSIBLE ADICIONAR EL REGISTRO, UNO DE LOS ITEMS VINO EN BLANCO' LET respuesta.orden = factura.gral.orden LET respuesta.factura = factura.gral.factura END IF RETURN util.JSON.stringify(respuesta) END FUNCTION