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