Files
MBS/WEBSERVICES/orden_e.4gl
T

304 lines
14 KiB
Plaintext

IMPORT util
TYPE t_sync_cmd RECORD
oper STRING,
data STRING
END RECORD
FUNCTION orden_e(sorden)
DEFINE scliente,sorden 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,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,
respuesta RECORD
cod_msg,descripcion STRING,
orden INT
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,
s,url, selec,ret,res STRING,
ult_numero,vendedor,i,ultimo_req INT,
pprima,pitbis,valor_orden DEC(12,2),
puser,pfecha_crea VARCHAR(50),
cmd,r_cmd t_sync_cmd,
data t_sync_cmd
DISPLAY "ORDEN_E ",sorden
CALL util.JSON.parse(sorden,orden)
LET orden.encabezado.sec_vend=9
DISPLAY "estoy en orden ",orden.encabezado.conexion
IF orden.encabezado.conexion != 'ACTIVA' THEN
# WHENEVER ERROR CONTINUE
CONNECT TO "smarmotech" USER orden.encabezado.usuario USING orden.encabezado.clave
IF STATUS < 0 THEN
LET orden.respuesta.cod_msg = 400
LET orden.respuesta.descripcion = 'USUARIO NO ES VALIDO'
RETURN util.JSON.stringify(orden)
END IF
END IF
#CRACION DE CLIENTES CUANDO LA ORDEN NO SE FACTURA
IF orden.encabezado.cod_zona IS NULL THEN
LET orden.encabezado.cod_zona = 20
ELSE
LET selec = "SELECT a.descrip FROM marmotech.dbo.vetb00008 a WHERE cod_zona = ? AND a.status_t IS NULL"
PREPARE buscazona FROM selec
EXECUTE buscazona USING orden.encabezado.cod_zona
IF STATUS = NOTFOUND THEN
LET orden.encabezado.cod_zona = 20
END IF
END IF
IF orden.encabezado.region_provincia IS NULL THEN
LET orden.encabezado.region_provincia = 11
ELSE
LET selec = "SELECT a.nombre_provincia FROM marmotech.dbo.vetb00020 a WHERE cod_provincia = ? AND a.status_t IS NULL"
PREPARE buscaprovincia FROM selec
EXECUTE buscaprovincia USING orden.encabezado.region_provincia
IF STATUS = NOTFOUND THEN
LET orden.encabezado.region_provincia = 11
END IF
END IF
LET cliente.cond_pago = 4
LET cliente.direccion = orden.encabezado.direccion_linea1
LET cliente.email = orden.encabezado.correo_electronico
LET cliente.nombre = orden.encabezado.nombre
LET cliente.pais = orden.encabezado.pais_region
LET cliente.provincia = orden.encabezado.region_provincia
LET cliente.zona = orden.encabezado.cod_zona
LET cliente.rnc = orden.encabezado.num_rnc
LET cliente.telefono_casa = orden.encabezado.telefono1
LET cliente.telefono_celular = orden.encabezado.telefono2
LET cliente.tipo_cliente = orden.encabezado.tipo_cliente
LET cliente.contacto = orden.encabezado.contacto
IF orden.encabezado.conexion != 'ACTIVA' THEN
LET scliente = util.JSON.stringify(cliente)
CALL crearcliente(scliente) RETURNING orden.encabezado.tipo_cliente,orden.encabezado.sec_cliente
END IF
LET selec ="
SELECT num_oc FROM marmotech.dbo.prtb00020"
PREPARE ordencmd FROM selec
LET selec = "UPDATE marmotech.dbo.prtb00020 set num_oc = ?,us_crea='ECOMMERCE',fech_crea = getdate()"
PREPARE updateprtb20 FROM selec
LET selec = "SELECT cod_n,cod_grupo,cod_tipo,cod_sec FROM marmotech.dbo.iptb00002 WHERE codid = ?"
PREPARE buscaprod FROM selec
{ " INSERT INTO marmotech.dbo.prtb00012
(ventas,cotizacion_no,num_oc,fecha_oc,orden_sustituta,sec_vend,tipo_cliente,
sec_cliente,direccion,telefono,fax,cond_pago,ubicacion,cerrada,us_crea,fech_crea,tipo_orden,nombre_file,
cantidad_i,precio_i,cantidad_mo,itbis,precio_mo,observacion,nombre_file2)
VALUES
('3',?,?,?,?,?,?,?,?,?,?,?,?,'N','ECOMMERCE',getdate(),'ECOMMERCE','0',?,?,?,?,?,?,?)"
}
LET selec =
" INSERT INTO marmotech.dbo.prtb00012
(ventas,cotizacion_no,num_oc,fecha_oc,orden_sustituta,sec_vend,tipo_cliente,
sec_cliente,direccion,telefono,fax,cond_pago,ubicacion,cerrada,us_crea,fech_crea,tipo_orden,
cantidad_i,precio_i,cantidad_mo,itbis,precio_mo,observacion,nombre_file2,nombre_file,codigo_dgii,titulo_ncf,
valor_envio,contacto_obra,telefono_contacto_obra)
VALUES
('3',?,?,?,?,?,?,?,?,?,?,?,?,'N','ECOMMERCE',getdate(),'ECOMMERCE',?,?,?,?,?,?,?,?,?,?,?,?,?)"
PREPARE insorden FROM selec
LET selec = "SELECT cotizacion_no FROM marmotech.dbo.vetb00053 "
PREPARE buscacot FROM selec
LET selec = "UPDATE marmotech.dbo.vetb00053 SET cotizacion_no = ?"
PREPARE actualizacot FROM selec
LET selec = "INSERT INTO marmotech.dbo.vetb00050
(cod_cia,ventas,cotizacion_no,fecha,tipo_cliente,sec_cliente,
nombre_cliente,rnc,nombre_proyecto,direccion_cliente,cod_provincia,telefono_r,plazo_entrega,
email,cond_pago,total_bruto,monto_desc,sub_total,monto_itbi,porc_itbi,total_neto,
us_crea,fech_crea,num_oc,contacto,comentario,sincronizado)
VALUES ('1','3',?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,'ECOMMERCE',getdate(),?,?,?,0)"
PREPARE insmacotiza FROM selec
LET selec = "INSERT INTO marmotech.dbo.vetb00051 (cod_cia,ventas,cotizacion_no,area,cod_n,cod_grupo,cod_tipo,
cod_sec,descripcion,
cantidad_1,cantidad,precio,porc_desc,descripcion_area,sincronizado)
VALUES ('1','3',?,'1',?,?,?,?,?,?,?,?,?,'AREA GENERAL',0)"
PREPARE insdetcotiza FROM selec
#REQUISICION DESPACHOS
LET selec = "SELECT a.num_req FROM marmotech.dbo.cctb00019 a"
PREPARE buscanumreq FROM selec
LET selec= "UPDATE marmotech.dbo.cctb00019 SET num_req = ?,us_crea=SUSER_SNAME(),fech_crea=getdate()"
PREPARE actualizareq FROM selec
LET SELEC ="
INSERT INTO marmotech.dbo.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
)
VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'ECOMMERCE',GETDATE(),?)
"
PREPARE insrequisicion FROM selec
LET selec ="INSERT INTO marmotech.dbo.cctb00025 (num_req,fecha,sec_vend,us_crea,fech_crea,estado,estado_despacho,monto_req)
values (?,?,?,SUSER_SNAME(),GETDATE(),'AUTORIZADA','NO DESPACHADA',?)
"
PREPARE insmareq FROM SELEC
BEGIN WORK
EXECUTE buscacot INTO orden.encabezado.cotizacion_no
IF orden.encabezado.cotizacion_no IS NULL THEN
LET orden.encabezado.cotizacion_no = 0
END IF
LET orden.encabezado.cotizacion_no = orden.encabezado.cotizacion_no + 1
EXECUTE actualizacot USING orden.encabezado.cotizacion_no
EXECUTE ordencmd INTO ult_numero
IF ult_numero IS NULL THEN
LET ult_numero = 0
END IF
LET ult_numero = ult_numero + 1
EXECUTE updateprtb20 USING ult_numero
LET orden.encabezado.num_oc = ult_numero
LET orden.encabezado.fecha_orden = TODAY
EXECUTE insorden USING orden.encabezado.cotizacion_no, ult_numero, orden.encabezado.fecha_orden,
orden.encabezado.orden_externa,
orden.encabezado.sec_vend, orden.encabezado.tipo_cliente, orden.encabezado.sec_cliente,
orden.encabezado.direccion_linea1,orden.encabezado.telefono1,orden.encabezado.telefono2,
orden.encabezado.cond_pago,orden.encabezado.direccion_linea2,
orden.encabezado.total_bruto,orden.encabezado.monto_descuento,
orden.encabezado.sub_total,orden.encabezado.itbis,orden.encabezado.total_neto,
orden.encabezado.referencia,orden.encabezado.contacto,orden.encabezado.tipo_envio,
orden.encabezado.codigo_dgii,orden.encabezado.titulo_ncf,orden.encabezado.valor_envio,
orden.encabezado.contacto_obra,orden.encabezado.telefono_contacto_obra
LET selec =
" INSERT INTO marmotech.dbo.prtb00013 (num_oc,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,
precio,descuento,cantidad,us_crea,fech_crea,estado_producto,codid,descripcion)
VALUES (?,?,'1',?,?,?,?,?,?,?,'ecommerce',getdate(),'EN PROCESO',?,?)
"
PREPARE insdetalle1 FROM selec
LET selec =
"
INSERT INTO marmotech.dbo.prtb00023 (num_oc,secuencia,area,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad_1,
cantidad)
VALUES (?,?,?,?,?,?,?,?,?)
"
PREPARE insdetalle2 FROM selec
#COTIZACION
EXECUTE insmacotiza USING orden.encabezado.cotizacion_no,orden.encabezado.fecha_orden,orden.encabezado.tipo_cliente,
orden.encabezado.sec_cliente,orden.encabezado.nombre,orden.encabezado.num_rnc,
'COMPRA ECOMMERCE',orden.encabezado.direccion_linea1,orden.encabezado.region_provincia,
orden.encabezado.telefono1,'INMEDIATO',orden.encabezado.correo_electronico,
orden.encabezado.cond_pago,orden.encabezado.total_bruto,orden.encabezado.monto_descuento,
orden.encabezado.sub_total,orden.encabezado.monto_itbis, orden.encabezado.itbis,
orden.encabezado.total_neto,ult_numero,orden.encabezado.contacto,orden.encabezado.referencia
#REQUISICION DESPACHOS
EXECUTE buscanumreq INTO ultimo_req
IF ultimo_req IS NULL THEN
LET ultimo_req = 0
END IF
LET ultimo_req = ultimo_req + 1
EXECUTE actualizareq USING ultimo_req
#DETALLE ORDEN DE PEDIDOS y COTIZACIONES
LET valor_orden = 0
DISPLAY "DEETALLE ORDEN ",orden.detalle.getLength()
FOR i = 1 TO orden.detalle.getLength()
DISPLAY "codigo del detalle ",orden.detalle[i].codid
IF orden.detalle[i].codid IS NOT NULL THEN
LET valor_orden = (orden.detalle[i].cantidad*orden.detalle[i].precio)-orden.detalle[i].descuento
EXECUTE buscaprod INTO orden.detalle[i].cod_n,orden.detalle[i].cod_grupo,orden.detalle[i].cod_tipo,
orden.detalle[i].cod_sec
USING orden.detalle[i].codid
EXECUTE insdetalle1 USING ult_numero,i, orden.detalle[i].cod_n,orden.detalle[i].cod_grupo,
orden.detalle[i].cod_tipo,
orden.detalle[i].cod_sec,orden.detalle[i].precio,orden.detalle[i].descuento,
orden.detalle[i].cantidad,
orden.detalle[i].codid,orden.detalle[i].titulo
EXECUTE insdetalle2 USING ult_numero,i,'1',orden.detalle[i].cod_n,orden.detalle[i].cod_grupo,
orden.detalle[i].cod_tipo,
orden.detalle[i].cod_sec,orden.detalle[i].cantidad1,orden.detalle[i].cantidad
EXECUTE insdetcotiza USING orden.encabezado.cotizacion_no,orden.detalle[i].cod_n,orden.detalle[i].cod_grupo,
orden.detalle[i].cod_tipo,orden.detalle[i].cod_sec,orden.detalle[i].titulo,
orden.detalle[i].cantidad1,orden.detalle[i].cantidad,orden.detalle[i].precio,
orden.detalle[i].descuento
#DETALLE REQUISICION DESPACHOS
IF orden.detalle[i].descuento IS NULL THEN
LET orden.detalle[i].descuento = 0
END IF
IF valor_orden IS NULL THEN
LET valor_orden = 0
END IF
EXECUTE insrequisicion USING ultimo_req,orden.encabezado.num_oc, orden.encabezado.cotizacion_no,i,
'1',orden.detalle[i].cod_n,orden.detalle[i].cod_grupo,
orden.detalle[i].cod_tipo,orden.detalle[i].cod_sec,
orden.detalle[i].cantidad,orden.detalle[i].cantidad,orden.detalle[i].cantidad,
orden.detalle[i].cantidad,
orden.detalle[i].precio,'0',
orden.detalle[i].descuento,
valor_orden,'AUTORIZADAA'
END IF
END FOR
EXECUTE insmareq USING ultimo_req,orden.encabezado.fecha_orden,orden.encabezado.sec_vend,
valor_orden
COMMIT WORK
IF orden.encabezado.conexion <> 'ACTIVA' THEN
DISCONNECT CURRENT
END IF
DISPLAY "orden: ", orden.encabezado.num_oc
LET orden.respuesta.cod_msg=200
LET orden.respuesta.descripcion = "ADICION EXITOSA, EL NUMERO DE LA ORDEN EN GENERO ES ",orden.encabezado.num_oc
LET orden.respuesta.orden = orden.encabezado.num_oc
RETURN util.JSON.stringify(orden.respuesta)
END FUNCTION