Files
MBS/WEBSERVICES/clientes_insert.4gl
T

531 lines
18 KiB
Plaintext

IMPORT util
DEFINE url_verification,estado STRING,
i,codigo_err int
FUNCTION clientes_insert(d)
DEFINE d STRING
DEFINE p RECORD
data RECORD
tipo_cliente SMALLINT,
sec_cliente INT,
nombre varchar(100) ,
codigo VARCHAR(10),
cod_zona SMALLINT ,
cod_provincia SMALLINT,
telefono char(25),
fax char(25),
telex char(25),
patente varchar(80),
limite_credito dec(10, 2),
tipo_documento char(10),
num_rnc char(25) ,
contactoPrincipal char(80),
Puesto_laboral varchar(50),
telefono_casa varchar(25),
tipo_negocio SMALLINT,
cond_pago SMALLINT,
id_ciudad SMALLINT ,
url VARCHAR(100),
casa_num VARCHAR(50),
direccion VARCHAR(100),
sector VARCHAR(100),
urbanizacion VARCHAR(100),
usuario VARCHAR(50),
clave VARCHAR(50),
id_crm VARCHAR(200),
sec_vend INT,
estadoCta VARCHAR(10)
END RECORD,
contactos DYNAMIC ARRAY OF RECORD
contacto,tipo_negocio_Contacto,puesto,email,celular,telefono_of,telefono_casa,estadoCta VARCHAR(100)
END RECORD,
vendedor_aux DYNAMIC ARRAY OF RECORD
sec_vend_aux INT,
nombre_vend_aux VARCHAR(100)
END RECORD
END RECORD
DEFINE rep_out RECORD
sec_cliente INT,
cod_msg SMALLINT,
mensaje_out STRING
END RECORD,
s_out,selec STRING ,
idx int
# WHENEVER ERROR CONTINUE
TRY
CALL util.JSON.parse(d, p)
CATCH
LET rep_out.cod_msg = 400
LET rep_out.mensaje_out = "FGL ERROR: ", err_get(status)
LET s_out=util.JSON.stringify(rep_out)
RETURN s_out
END TRY
DISPLAY "USUARIO CLIENTE ",p.data.usuario,' clave ',p.data.clave
{ ESTA PARTE ES UTILIZADA PARA BLOQUEAR EL WEB SERVICE
}
# LET rep_out.mensaje_out = 'DEBE REALIZAR ESTA OPCION VIA GENERO, ESTE SERVICIO ESTA DESACTIVADO'
# LET rep_out.cod_msg = 400
# LET s_out=util.JSON.stringify(rep_out)
# LET rep_out.sec_cliente =0
# RETURN s_out
# Sin esto el default WHENEVER ERROR STOP aborta el proceso ante cualquier
# error SQL y deja la conexion colgada -> proximo request: "conexion en uso".
WHENEVER ANY ERROR CONTINUE
CONNECT TO "smarmotech" USER p.data.usuario USING p.data.clave
IF STATUS < 0 THEN
# Recupera conexion "smarmotech" colgada de un request previo y reintenta.
DISCONNECT ALL
CONNECT TO "smarmotech" USER p.data.usuario USING p.data.clave
END IF
IF STATUS < 0 THEN
LET rep_out.mensaje_out = 'ERROR EN USUARIO CONECTANDOSE A LA BASE DE DATOS'
LET rep_out.cod_msg = 400
LET rep_out.mensaje_out= err_get(status)
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
DISCONNECT CURRENT
RETURN s_out
END IF
IF P.data.tipo_cliente = 19 OR P.data.tipo_cliente = 18
THEN
LET rep_out.mensaje_out = 'ESTE TIPO DE CLIENTE NO ES PERMITIDO EN EL CRM'
LET rep_out.cod_msg = 400
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
DISCONNECT CURRENT
RETURN s_out
END IF
IF P.data.cod_zona IS NULL THEN
LET rep_out.mensaje_out = 'ZONA EN BLANCO, CLIENTE NO CREADO EN BASE DE DATOS'
LET rep_out.cod_msg = 400
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
DISCONNECT CURRENT
RETURN s_out
END IF
IF P.data.patente IS NULL THEN
LET rep_out.mensaje_out = 'EMAIL CLIENTE ESTA EN BLANCO'
LET rep_out.cod_msg = 400
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
DISCONNECT CURRENT
RETURN s_out
END IF
IF P.data.cod_provincia IS NULL THEN
LET rep_out.mensaje_out = 'PROVINCIA O ESTADO EN BLANCO, CLIENTE NO CREADO EN BASE DE DATOS'
LET rep_out.cod_msg = 400
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
DISCONNECT CURRENT
RETURN s_out
END IF
#VERIFICACION EMAIL
# VERIFICA EMAIL
CALL inicializar()
LET url_verification =p.data.patente CLIPPED
CALL apiclient(url_verification) RETURNING estado,codigo_err
IF codigo_Err =400 THEN
LET rep_out.mensaje_out = 'EMAIL CLIENTE ERRADO, NO PUEDE REALIZAR COTIZACION'
LET rep_out.cod_msg = 400
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
DISCONNECT CURRENT
RETURN s_out
END IF
LET p.data.nombre = upshift(p.data.nombre)
IF p.data.sec_cliente = 0 OR p.data.sec_cliente IS NULL THEN
# VALIDACION SI EL RNC EXISTE CON OTRA CUENTA
SELECT DISTINCT a.num_rnc FROM vetb00004 a WHERE a.tipo_cliente = p.data.tipo_cliente AND
a.num_rnc = p.data.num_rnc AND
a.status_t IS NULL
IF STATUS <> NOTFOUND THEN
LET rep_out.mensaje_out = 'EXISTE UNA CUENTA CON ESTE MISMO NUMERO DE RNC O CEDULA'
LET rep_out.cod_msg = 400
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
DISCONNECT CURRENT
RETURN s_out
END IF
# BUSCA EL RNC
IF p.data.tipo_documento ='1' THEN
LET selec=
"SELECT a.razon_social,RTRIM(a.calle),' NO.'+RTRIM(a.no_local),a.sector ",
"FROM DGII.dbo.empresas a ",
"WHERE a.rnc = ? "
PREPARE comando FROM selec
EXECUTE comando USING p.data.num_rnc,p.data.nombre,p.data.direccion
IF STATUS = NOTFOUND THEN
LET rep_out.mensaje_out = 'NUMERO DEL RNC NO EXISTE'
LET rep_out.cod_msg = 400
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
DISCONNECT CURRENT
RETURN s_out
END IF
END IF
# CONTROL CODIGO ZONA GEOGRAFICA
SELECT a.descrip FROM vetb00008 a
WHERE a.cod_zona = p.data.cod_zona AND a.status_t IS NULL
IF status = NOTFOUND THEN
LET rep_out.mensaje_out = 'CODIGO ZONA GEOGRAFICA NO EXISTE'
LET rep_out.cod_msg = 400
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
DISCONNECT CURRENT
RETURN s_out
END IF
#VERIFICA DIRECCION
IF p.data.direccion IS NULL OR p.data.direccion < 6 THEN
LET rep_out.mensaje_out = 'DIRECCION DEL CLIENTE ESTA EN BLANCO o ES MUY CORTA'
LET rep_out.cod_msg = 400
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
DISCONNECT CURRENT
RETURN s_out
END IF
#CONTROL PROVINCIA
SELECT a.nombre_provincia
FROM vetb00020 a
WHERE a.cod_provincia = p.data.cod_provincia AND
a.codigo= p.data.codigo
IF status = NOTFOUND THEN
LET rep_out.mensaje_out = 'PROVINCIA NO PERTENECE AL PAIS'
LET rep_out.cod_msg = 400
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
DISCONNECT CURRENT
RETURN s_out
END IF
#CONTROL VENDEDOR
IF p.data.sec_vend IS NULL OR p.data.sec_vend = 0 THEN
LET rep_out.mensaje_out = 'VENDEDOR EN BLANCO'
LET rep_out.cod_msg = 400
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
DISCONNECT CURRENT
RETURN s_out
END IF
#CONDICION DE PAGOS
IF p.data.cond_pago IS NULL OR p.data.cond_pago = 0 THEN
LET rep_out.mensaje_out = 'NO PUEDE DEJAR LA CONDICION DE PAGOS EN BLANCO'
LET rep_out.cod_msg = 400
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
DISCONNECT CURRENT
RETURN s_out
END IF
IF p.data.cond_pago IS NOT NULL THEN
SELECT a.cond_pago FROM vetb00012 a WHERE a.cond_pago = p.data.cond_pago
IF STATUS = NOTFOUND THEN
LET rep_out.mensaje_out = 'NO PUEDE DEJAR LA CONDICION DE PAGOS EN BLANCO'
LET rep_out.cod_msg = 400
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
DISCONNECT CURRENT
RETURN s_out
END IF
END IF
SELECT MAX(a.sec_cliente) INTO p.data.sec_cliente
FROM vetb00004 a
WHERE a.tipo_cliente = p.data.tipo_cliente
LET p.data.sec_cliente = p.data.sec_cliente + 1
BEGIN WORK
INSERT INTO vetb00005 (tipo_cliente,sec_cliente,calle,casa_num,barrio,urbanizacion,us_crea,fech_crea)
VALUES (p.data.tipo_cliente,p.data.sec_cliente,p.data.direccion,p.data.casa_num,
p.data.sector,p.data.urbanizacion,p.data.usuario,getdate())
# VENDEDOR
INSERT INTO vetb00028
(
sec_vend
,tipo_cliente
,sec_cliente
,us_crea
,fech_crea
)
VALUES
(
p.data.sec_vend
,p.data.tipo_cliente
,p.data.sec_cliente
,p.data.usuario
,getdate())
IF STATUS < 0 THEN
LET rep_out.cod_msg = 400
LET rep_out.mensaje_out = "INSERT ERROR vetb00028: ", err_get(status)
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
ROLLBACK WORK
DISCONNECT CURRENT
RETURN s_out
END IF
# VENDEDOR AUX
FOR idx =1 TO p.vendedor_aux.getLength()
INSERT INTO vetb00059 (tipo_cliente,sec_cliente,sec_Vend_aux,us_crea,fech_crea)
VALUES (p.data.tipo_cliente,p.data.sec_cliente,p.vendedor_aux[idx].sec_vend_aux,p.data.usuario,getdate())
END FOR
#CONTACTOS
IF p.contactos.getLength() > 0 THEN
FOR i = 1 TO p.contactos.getlength()
IF p.contactos[i].contacto IS NOT NULL THEN
INSERT INTO vetb00087
(tipo_cliente
,sec_cliente
,tipo_negocio_contacto
,contacto
,puesto
,email
,celular
,telefono_of
,telefono_casa
,id
,us_crea
,fech_crea
,id_crm
,email_estado)
VALUES
(p.data.tipo_cliente
,p.data.sec_cliente
,p.contactos[idx].tipo_negocio_contacto
,p.contactos[idx].contacto
,p.contactos[idx].puesto
,p.contactos[idx].email
,p.contactos[idx].celular
,p.contactos[idx].telefono_of
,p.contactos[idx].telefono_casa
,i
,p.data.usuario
,getdate()
,p.data.id_crm
,p.contactos[idx].estadoCta)
END IF
END FOR
END IF
# CLIENTES
INSERT INTO vetb00004
(tipo_cliente
,sec_cliente
,nombre
,cod_zona
,cod_provincia
,telefono
,fax
,telex
,patente
,limite_credito
,zona_postal
,num_rnc
,nombre_patente
,us_crea
,fech_crea
,Puesto_laboral
,telefono_casa
,tipo_negocio
,id_ciudad
,url
,id_crm
,codigo
,generica
,cond_pago
)
VALUES
(p.data.tipo_cliente
,p.data.sec_cliente
,p.data.nombre
,p.data.cod_zona
,p.data.cod_provincia
,p.data.telefono
,p.data.fax
,p.data.telex
,p.data.patente
,'0'
,p.data.tipo_documento
,p.data.num_rnc
,p.data.contactoPrincipal
,p.data.usuario
,GETDATE()
,p.data.Puesto_laboral
,p.data.telefono_casa
,p.data.tipo_negocio
,p.data.id_ciudad
,p.data.url
,p.data.id_crm
,p.data.codigo
,'NO'
,p.data.cond_pago
)
IF STATUS < 0 THEN
LET rep_out.cod_msg = 400
LET rep_out.mensaje_out = "INSERT ERROR vetb00004: ", err_get(status)
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =0
ROLLBACK WORK
DISCONNECT CURRENT
RETURN s_out
END IF
LET rep_out.cod_msg = 200
LET rep_out.mensaje_out = "ADICION EXITOSA"
LET rep_out.sec_cliente = p.data.sec_cliente
LET s_out=util.JSON.stringify(rep_out)
COMMIT WORK
ELSE
#CONTROL VENDEDOR LE VENDE AL CLIENTE
SELECT DISTINCT b.sec_vend FROM vetb00004 a,seg0007 b,vetb00028 c
WHERE b.usuario = p.data.usuario AND
b.sec_vend = c.sec_vend AND
a.tipo_cliente = p.data.tipo_cliente AND
a.sec_cliente = p.data.sec_cliente AND
a.tipo_cliente = c.tipo_cliente AND
a.sec_cliente = c.sec_cliente
IF STATUS = NOTFOUND THEN
LET rep_out.mensaje_out = 'ESTE CLIENTE NO PERTENECE A ESTE VENDEDOR, NO LO PUEDES MODIFICAR'
LET rep_out.cod_msg = 400
LET s_out=util.JSON.stringify(rep_out)
LET rep_out.sec_cliente =p.data.sec_cliente
DISCONNECT CURRENT
RETURN s_out
END IF
BEGIN WORK
UPDATE vetb00004 SET
(nombre
,cod_zona
,cod_provincia
,telefono
,fax
,telex
,patente
,zona_postal
,num_rnc
,nombre_patente
,us_mod
,fech_mod
,Puesto_laboral
,telefono_casa
,tipo_negocio
,cond_pago
,id_ciudad
,url
,id_crm
,codigo)
=
(p.data.nombre
,p.data.cod_zona
,p.data.cod_provincia
,p.data.telefono
,p.data.fax
,p.data.telex
,p.data.patente
,p.data.tipo_documento
,p.data.num_rnc
,p.data.contactoPrincipal
,p.data.usuario
,GETDATE()
,p.data.Puesto_laboral
,p.data.telefono_casa
,p.data.tipo_negocio
,p.data.cond_pago
,p.data.id_ciudad
,p.data.url
,p.data.id_crm
,p.data.codigo
)
WHERE tipo_cliente = p.data.tipo_cliente AND sec_cliente = p.data.sec_cliente
IF STATUS <0 THEN
LET rep_out.cod_msg = 400
LET rep_out.mensaje_out = "PROBLEMAS EN MODIFICACION MAESTRA CLIENTES vetb00004"," ",err_get(status)
LET rep_out.sec_cliente = p.data.sec_cliente
LET s_out=util.JSON.stringify(rep_out)
ROLLBACK WORK
DISCONNECT CURRENT
RETURN s_out
END IF
UPDATE vetb00005 SET (calle,casa_num,barrio,urbanizacion,us_crea,fech_crea)
= (p.data.direccion,p.data.casa_num,
p.data.sector,p.data.urbanizacion,p.data.usuario,getdate())
WHERE tipo_cliente =p.data.tipo_cliente AND sec_cliente = p.data.sec_cliente
IF STATUS <0 THEN
LET rep_out.cod_msg = 400
LET rep_out.mensaje_out = "PROBLEMAS EN MODIFICACION DIRECCIONES CLIENTES vetb00005"," ",err_get(status)
LET rep_out.sec_cliente = p.data.sec_cliente
LET s_out=util.JSON.stringify(rep_out)
ROLLBACK WORK
DISCONNECT CURRENT
RETURN s_out
END IF
#CONTROL VENDEDOR
SELECT a.sec_vend FROM vetb00028 a
WHERE a.tipo_cliente = p.data.tipo_cliente AND
a.sec_cliente = p.data.sec_cliente
IF STATUS = NOTFOUND THEN
DELETE FROM vetb00028 WHERE tipo_cliente = p.data.tipo_cliente AND sec_cliente = p.data.sec_cliente
INSERT INTO vetb00028 (tipo_cliente,sec_cliente,sec_vend,us_crea,fech_crea)
VALUES (p.data.tipo_cliente,p.data.sec_cliente,p.data.sec_vend,p.data.usuario,getdate())
END IF
# VENDEDOR AUX
DELETE FROM vetb00059 WHERE tipo_cliente = p.data.tipo_cliente AND sec_cliente = p.data.sec_cliente
FOR idx =1 TO p.vendedor_aux.getLength()
INSERT INTO vetb00059 (tipo_cliente,sec_cliente,sec_Vend_aux,us_crea,fech_crea)
VALUES (p.data.tipo_cliente,p.data.sec_cliente,p.vendedor_aux[idx].sec_vend_aux,p.data.usuario,getdate())
IF STATUS <0 THEN
LET rep_out.cod_msg = 400
LET rep_out.mensaje_out = "PROBLEMAS EN MODIFICACION VENDEDOR AUXILIAR vetb00059"," ",err_get(status)
LET rep_out.sec_cliente = p.data.sec_cliente
LET s_out=util.JSON.stringify(rep_out)
ROLLBACK WORK
DISCONNECT CURRENT
RETURN s_out
END IF
END FOR
COMMIT WORK
LET rep_out.cod_msg = 200
LET rep_out.mensaje_out = "MODIFICACION EXITOSA"
LET rep_out.sec_cliente = p.data.sec_cliente
LET s_out=util.JSON.stringify(rep_out)
END IF
DISCONNECT CURRENT
RETURN s_out
END FUNCTION
FUNCTION inicializar()
LET url_verification =NULL #'https://api.apilayer.com/email_verification/'
END FUNCTION