531 lines
18 KiB
Plaintext
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
|