Files

464 lines
20 KiB
Plaintext

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 "<NCF>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