/// <summary>
        /// Obtiene el Guid del Usuario
        /// </summary>
        /// <param name="CodigoTienda">Código de la Tienda por Donde Buscaremos al Usuario</param>
        /// <returns>Obtiene el Guid del Usuario</returns>
        public string ObtieneUsuarioIdxTiendaAsignada(string CodigoTienda)
        {
            IOrganizationService servicio;
            servicio = ConexionCRMDA.ObtenerConexion();

            string guidUsuario = string.Empty;

            ZthFetchXml365.zthFetch fetch = new ZthFetchXml365.zthFetch("systemuser", ref servicio);
            // entidad systemuser

            fetch.AgregarCampoRetorno("systemuser", "systemuserid", ZthFetchXml365.zthFetch.TipoRetorno.Key);
            // public void AgregarCampoRetorno(string NombreEntidad, string NombreCampo, TipoRetorno Tipo);

            fetch.AgregarFiltroPlano("systemuser", ZthFetchXml365.zthFetch.TipoFiltro.and, "new_codigotiendaasignada", ZthFetchXml365.zthFetch.TipoComparacionFiltro.Igual, CodigoTienda);

            DataTable Dato = new DataTable();
            // Instancia tabla en memoria
            Dato = fetch.GeneraTblconFetchResult(false);
            // ??

            if (Dato.Rows.Count > 0)
                return guidUsuario = Dato.Rows[0]["systemuserid"].ToString();
            else
                return guidUsuario = null;
        }
        /// <summary>
        /// Validamos si Existe el Contacto Mediante su DNI
        /// </summary>
        /// <param name="DNI">DNI a Validar</param>
        /// <returns>Validamos si Existe el Contacto Mediante su DNI</returns>
        public DataTable ValidaExisteContacto(string TipoDeDocumento, string NumeroDocumento)
        {
            try

            {
                // Resumen:
                //         Cadena de conexión  ----> CrmServiceClient ( Set up de las Credenciales) ---->  IOrganizationServices (Web Service Intermedio) ----> CRM online 2016

                IOrganizationService servicio;              // Instancia de IOrgnizationService
                servicio = ConexionCRMDA.ObtenerConexion(); // Obtenemos la Conexión de CRM

                /**
                 *
                 * FetchXML, se utiliza para una busqueda avanzada
                 *
                 * **/

                // Ocupamos el Espacio de Nombre "ZthFetchXml365"
                // Instancia de fetch, se ocupa para manipular los datos del CRM :
                //Le Entregamos el nombre de la entidad principal a buscar(Contacto, y la referencia al servicio web de CRM)
                zthFetch fetch = new zthFetch("contact", ref servicio);


                // Fetch contiene métodos parámetrizados, cuando me meta mas al CRM lo voy a entender mejor


                fetch.AgregarCampoRetorno("contact", "contactid", ZthFetchXml365.zthFetch.TipoRetorno.Key);
                //    public void AgregarCampoRetorno(string NombreEntidad, string NombreCampo, TipoRetorno Tipo);
                fetch.AgregarFiltroPlano("contact", ZthFetchXml365.zthFetch.TipoFiltro.and, "sole_tipodocumento", ZthFetchXml365.zthFetch.TipoComparacionFiltro.Igual, TipoDeDocumento);
                //     public void AgregarFiltroPlano(string NombreEntidad, TipoFiltro TipoFiltro, string NombreAtributo, TipoComparacionFiltro TipoComparacion, string ValorAtributo);
                //     Tipo Documento
                fetch.AgregarFiltroPlano("contact", ZthFetchXml365.zthFetch.TipoFiltro.and, "sole_numerodocumento", ZthFetchXml365.zthFetch.TipoComparacionFiltro.Igual, NumeroDocumento);
                //     Numero Documento
                fetch.AgregarCantidadRegistrosDevolver_puedesermenorque5000(1);

                //  Crea un objeto de tipo  datatable
                DataTable Dato = new DataTable();

                // Genera la tabla con el resultado del Fetch y lo llena en la tabla de datos en memoria

                Dato = fetch.GeneraTblconFetchResult(false); // ¿Por que false?

                return(Dato);
            }
            catch (Exception ex)

            {
                // Mensaje de la excepción
                string Mensaje = "Se ha producido el siguiente error: " + ex.Message;
                // DLL guarda el mensaje de excepción en un registro
                ZthMetodosVarios.Metodos.GuardarLog(Ruta, Mensaje);
                // Lo mandan a un correo compartido en outlook, correo soporte
                ZthEnvioCorreos_CRM365.Metodos.EnviarCorreoError(CorreoSoporte, CorreoCliente, Aplicativo, Ruta, Mensaje, CorreoClave, Port, Host);

                throw ex;
            }
        }
        /// <summary>
        /// Registramos el Producto de la Oportunidad
        /// </summary>
        /// <param name="IdOportunidadCargaInicial">Id de la Tabla Oportunidad</param>
        /// <param name="OportunidadId">Guid de la Oportunidad</param>
        /// <param name="ProductoId">Guid del Producto</param>
        /// <returns>Registramos el Producto de la Oportunidad</returns>
        public object CrearProductoDelaOportunidad(OportunidadesBE oOportunidadBE,
                                                   string IdOportunidadCargaInicial,
                                                   Guid OportunidadId,
                                                   Guid ProductoId)
        {
            IOrganizationService servicio;

            servicio = ConexionCRMDA.ObtenerConexion();
            SOLE.OpportunityProduct ProductoDeLaOportunidad = new SOLE.OpportunityProduct();

            try
            {
                ProductoDeLaOportunidad.PricePerUnit        = new Money(oOportunidadBE.Sole_precioventapublico);
                ProductoDeLaOportunidad.IsProductOverridden = true;
                ProductoDeLaOportunidad.Quantity            = new decimal(1);
                ProductoDeLaOportunidad.BaseAmount          = new Money(oOportunidadBE.Sole_precioventapublico);
                ProductoDeLaOportunidad.OpportunityId       = new EntityReference(SOLE.Opportunity.EntityLogicalName, OportunidadId);
                ProductoDeLaOportunidad.ProductDescription  = oOportunidadBE.Nombre_Producto.ToString();
                //ProductoDeLaOportunidad.ProductId = new EntityReference(SOLE.OpportunityProduct.EntityLogicalName, ProductoId);

                servicio.Create(ProductoDeLaOportunidad);

                return(1);
            }
            catch (Exception ex)
            {
                oBitacoraErroresBE.Codigo      = ex.HResult.ToString();
                oBitacoraErroresBE.Proceso     = "Crear Producto de la Oportunidad";
                oBitacoraErroresBE.Error       = ex.Source;
                oBitacoraErroresBE.Descripcion = ex.Message;
                oBitacoraErroresBE.IdRegistro  = IdOportunidadCargaInicial;
                oBitacoraErroresBE.Entidad     = "Oportunidad";
                oBitacoraErroresBE.EstadoCarga = "0";

                oFuncionesDA.RegistraBitacoraErrores(oBitacoraErroresBE);
                //oFuncionesDA.ActualizarEstadoTablaOportunidad(IdOportunidadCargaInicial);

                string Mensaje = "Error al Crear el Producto de la Oportunidad. Se ha producido el siguiente error: " + ex.Message;
                ZthMetodosVarios.Metodos.GuardarLog(Ruta, Mensaje);

                //ZthEnvioCorreos_CRM365.Metodos.EnviarCorreoError(CorreoSoporte, CorreoCliente, "Integración MACAL", Ruta, Mensaje, CorreoClave, Port, Host);

                return(0);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Crea el NPS
        /// </summary>
        /// <param name="ClienteId">Id del Cliente al que se le asociará la NPS</param>
        /// <param name="oNPSBE">Datos de la NPS</param>
        /// <returns>Crea el NPS</returns>
        public Guid CrearNPS(Guid ClienteId, NPSBE oNPSBE)
        {
            IOrganizationService servicio;

            servicio = ConexionCRMDA.ObtenerConexion();
            SOLE.sole_nps NPS = new SOLE.sole_nps();
            Guid          guidNPS;

            try
            {
                NPS.sole_name           = oNPSBE.Sole_numeroencuesta.ToString();
                NPS.sole_codigoencuesta = int.Parse(oNPSBE.Sole_numeroencuesta.ToString());
                NPS.sole_fechaencuesta  = oNPSBE.Sole_fechaencuesta;
                NPS.sole_ordenservicio  = oNPSBE.Sole_ordenservicio;
                NPS.sole_clienteid      = new EntityReference(SOLE.Contact.EntityLogicalName, ClienteId);
                NPS.sole_tipoencuesta   = new OptionSetValue(int.Parse(oNPSBE.Sole_tipoencuesta.ToString()));
                NPS.sole_puntuacion     = oNPSBE.Sole_puntuacion;
                NPS.sole_comentarios    = oNPSBE.Sole_comentarios;

                guidNPS = servicio.Create(NPS);

                return(guidNPS);
            }
            catch (Exception ex)
            {
                oBitacoraErroresBE.Codigo      = ex.HResult.ToString();
                oBitacoraErroresBE.Proceso     = "Crear NPS";
                oBitacoraErroresBE.Error       = ex.Source;
                oBitacoraErroresBE.Descripcion = ex.Message;
                oBitacoraErroresBE.IdRegistro  = oNPSBE.NPSId;
                oBitacoraErroresBE.Entidad     = "NPS";
                oBitacoraErroresBE.EstadoCarga = "0";

                oFuncionesDA.RegistraBitacoraErrores(oBitacoraErroresBE);
                //oFuncionesDA.ActualizarEstadoTablaOportunidad(oOportunidadBE.IdOportunidadCargaInicial);

                string Mensaje = "Error al Crear la Oportunidad. Se ha producido el siguiente error: " + ex.Message;
                ZthMetodosVarios.Metodos.GuardarLog(Ruta, Mensaje);

                //ZthEnvioCorreos_CRM365.Metodos.EnviarCorreoError(CorreoSoporte, CorreoCliente, "Integración MACAL", Ruta, Mensaje, CorreoClave, Port, Host);

                throw ex;
            }
        }
        /// <summary>
        /// Obtiene el Guid de la Tienda
        /// </summary>
        /// <param name="CodigoSucursal">Código de Sucursal de la Tienda</param>
        /// <returns>Obtiene el Guid de la Tienda</returns>
        public string ObtieneTienda(string CodigoSucursal)
        {
            IOrganizationService servicio;
            servicio = ConexionCRMDA.ObtenerConexion();

            string guidTienda = string.Empty;

            ZthFetchXml365.zthFetch fetch = new ZthFetchXml365.zthFetch("sole_tienda", ref servicio);

            fetch.AgregarCampoRetorno("sole_tienda", "sole_tiendaid", ZthFetchXml365.zthFetch.TipoRetorno.Key);

            fetch.AgregarFiltroPlano("sole_tienda", ZthFetchXml365.zthFetch.TipoFiltro.and, "sole_codigosucursal", ZthFetchXml365.zthFetch.TipoComparacionFiltro.Igual, CodigoSucursal);

            DataTable Dato = new DataTable();
            Dato = fetch.GeneraTblconFetchResult(false);

            if (Dato.Rows.Count > 0)
                return guidTienda = Dato.Rows[0]["sole_tiendaid"].ToString();
            else
                return guidTienda = null;
        }
        /// <summary>
        /// Obtenemos el Guid del Producto
        /// </summary>
        /// <param name="CodigoProducto">Códgo del Producto</param>
        /// <returns>Obtenemos el Guid del Producto</returns>
        public string ObtieneProductoId(string CodigoProducto)
        {
            IOrganizationService servicio;
            servicio = ConexionCRMDA.ObtenerConexion();

            string guidProducto = string.Empty;

            ZthFetchXml365.zthFetch fetch = new ZthFetchXml365.zthFetch("product", ref servicio);

            fetch.AgregarCampoRetorno("product", "productid", ZthFetchXml365.zthFetch.TipoRetorno.Key);

            fetch.AgregarFiltroPlano("product", ZthFetchXml365.zthFetch.TipoFiltro.and, "productnumber", ZthFetchXml365.zthFetch.TipoComparacionFiltro.Igual, CodigoProducto);
            // Producto y Numero del producto es igual a Codigo del Producto
            DataTable Dato = new DataTable();
            Dato = fetch.GeneraTblconFetchResult(false);

            if (Dato.Rows.Count > 0)
                return guidProducto = Dato.Rows[0]["productid"].ToString();
            else
                return guidProducto = null;
        }
        /// <summary>
        /// Obtiene el Guid del Departamento
        /// </summary>
        /// <param name="DepartamentoUbigeo">Código Ubigueo del Departamento</param>
        /// <returns>Obtiene el Guid del Departamento</returns>
        public string ObtieneDepartamento(string DepartamentoUbigeo)
        {
            IOrganizationService servicio;
            servicio = ConexionCRMDA.ObtenerConexion();

            string guidComuna = string.Empty;

            ZthFetchXml365.zthFetch fetch = new ZthFetchXml365.zthFetch("sole_departamento", ref servicio);

            fetch.AgregarCampoRetorno("sole_departamento", "sole_departamentoid", ZthFetchXml365.zthFetch.TipoRetorno.Key);

            fetch.AgregarFiltroPlano("sole_departamento", ZthFetchXml365.zthFetch.TipoFiltro.and, "sole_codigoubigeo", ZthFetchXml365.zthFetch.TipoComparacionFiltro.Igual, DepartamentoUbigeo);

            DataTable Dato = new DataTable();
            Dato = fetch.GeneraTblconFetchResult(false);

            if (Dato.Rows.Count > 0)
                return guidComuna = Dato.Rows[0]["sole_departamentoid"].ToString();
            else
                return guidComuna = null;
        }
        /// <summary>
        /// Obtenemos el Id del Cliente mediante el DNI
        /// </summary>
        /// <param name="DNI"></param>
        /// <returns>Obtenemos el Id del Cliente mediante el DNI</returns>
        public string ObtieneClientexDNI(string TipoDocumento, string DNI)
        {
            IOrganizationService servicio;
            servicio = ConexionCRMDA.ObtenerConexion();

            string guidContacto = string.Empty;

            ZthFetchXml365.zthFetch fetch = new ZthFetchXml365.zthFetch("contact", ref servicio);

            fetch.AgregarCampoRetorno("contact", "contactid", ZthFetchXml365.zthFetch.TipoRetorno.Key);

            fetch.AgregarFiltroPlano("contact", ZthFetchXml365.zthFetch.TipoFiltro.and, "sole_tipodocumento", ZthFetchXml365.zthFetch.TipoComparacionFiltro.Igual, TipoDocumento);
            fetch.AgregarFiltroPlano("contact", ZthFetchXml365.zthFetch.TipoFiltro.and, "sole_numerodocumento", ZthFetchXml365.zthFetch.TipoComparacionFiltro.Igual, DNI);

            DataTable Dato = new DataTable();
            Dato = fetch.GeneraTblconFetchResult(false);

            if (Dato.Rows.Count > 0)
                return guidContacto = Dato.Rows[0]["contactid"].ToString();
            else
                return guidContacto = null;
        }
        /// <summary>
        /// Crea el Nuevo Contacto
        /// </summary>
        /// <param name="oContactoBE">Datos del Contacto a Actualizar</param>
        /// <returns>Crea el Nuevo Contacto</returns>
        public Guid CrearContacto(ContactoBE oContactoBE)
        {
            IOrganizationService servicio;

            servicio = ConexionCRMDA.ObtenerConexion();
            SOLE.Contact Contacto = new SOLE.Contact();
            Guid         guidContacto; // ??? del tipo Guid

            try
            {
                Contacto.FirstName            = oContactoBE.Sole_nombres;
                Contacto.LastName             = oContactoBE.Sole_apellidos;
                Contacto.sole_tipodocumento   = new OptionSetValue((int)oContactoBE.Sole_tipodocumento);
                Contacto.sole_numerodocumento = oContactoBE.Sole_numerodocumento;

                if (oContactoBE.Sole_tipoContacto == 365230000)
                {
                    Contacto.sole_estadosole = new OptionSetValue((int)oContactoBE.Sole_estadoSole);
                }

                Contacto.sole_tipocontacto = new OptionSetValue((int)oContactoBE.Sole_tipoContacto);


                Contacto.Telephone1    = oContactoBE.Sole_telefono1;
                Contacto.EMailAddress1 = oContactoBE.Sole_correoelectronico1;
                //if (oContactoBE.Sole_fechanacimiento.ToString() != "01-01-1900 0:00:00" && oContactoBE.Sole_fechanacimiento.ToString() != "01-01-0001 0:00:00")
                //{
                //    Contacto.BirthDate = oContactoBE.Sole_fechanacimiento;
                //}
                Contacto.Telephone2    = oContactoBE.Sole_telefono2;
                Contacto.Telephone3    = oContactoBE.Sole_telefono3;
                Contacto.EMailAddress2 = oContactoBE.Sole_correoelectronico2;
                Contacto.EMailAddress3 = oContactoBE.Sole_correoelectronico3;
                //Contacto.GenderCode = new OptionSetValue((int)oContactoBE.Sole_sexo);
                //Contacto.sole_estilovida = new OptionSetValue((int)oContactoBE.Sole_estilovida);
                //Contacto.sole_ocupacion = new OptionSetValue((int)oContactoBE.Sole_ocupacion);
                //Contacto.sole_perfilcliente = new OptionSetValue((int)oContactoBE.Sole_perfilcliente);
                //Contacto.sole_fuenteorigen = new OptionSetValue((int)oContactoBE.Sole_fuenteorigen);
                //Contacto.sole_tipofuenteorigen = new OptionSetValue((int)oContactoBE.Sole_fuenteorigen);
                if (oContactoBE.Sole_tipoclientepotencial != 0)
                {
                    Contacto.sole_tipoclientepotencial = new OptionSetValue((int)oContactoBE.Sole_tipoclientepotencial);
                }
                //if (oContactoBE.Sole_fechaconversion.ToString() != "01-01-1900 0:00:00" && oContactoBE.Sole_fechaconversion.ToString() != "01-01-0001 0:00:00")
                //{
                //    Contacto.sole_fechaconversion = oContactoBE.Sole_fechaconversion;
                //}
                Contacto.sole_interesbano     = oContactoBE.Sole_interesbano;
                Contacto.sole_interescocina   = oContactoBE.Sole_interescocina;
                Contacto.sole_interesdescanso = oContactoBE.Sole_interesdescanso;
                //if (oContactoBE.Sole_estadoSole != 0)
                //{
                //    Contacto.sole_estadosole = new OptionSetValue((int)oContactoBE.Sole_estadoSole);
                //}
                //if (oContactoBE.Sole_fechanuevo.ToString() != "01-01-1900 0:00:00" && oContactoBE.Sole_fechanuevo.ToString() != "01-01-0001 0:00:00")
                //{
                //    Contacto.sole_fechanuevo = oContactoBE.Sole_fechanuevo;
                //}
                //if (oContactoBE.Sole_fechaactivo.ToString() != "01-01-1900 0:00:00" && oContactoBE.Sole_fechaactivo.ToString() != "01-01-0001 0:00:00")
                //{
                //    Contacto.sole_fechaactivo = oContactoBE.Sole_fechaactivo;
                //}
                //if (oContactoBE.Sole_fechaincativo.ToString() != "01-01-1900 0:00:00" && oContactoBE.Sole_fechaincativo.ToString() != "01-01-0001 0:00:00")
                //{
                //    Contacto.sole_fechainactivo = oContactoBE.Sole_fechaincativo;
                //}

                Contacto.DoNotEMail          = oContactoBE.Sole_permissionmarketingcorreo;
                Contacto.DoNotPhone          = oContactoBE.Sole_permissionmarketingtelefono;
                Contacto.sole_departamentoid = new EntityReference(SOLE.sole_departamento.EntityLogicalName, Guid.Parse(oContactoBE.Sole_departamento));
                Contacto.sole_provinciaid    = new EntityReference(SOLE.sole_provincia.EntityLogicalName, Guid.Parse(oContactoBE.Sole_provincia));
                Contacto.sole_distritoid     = new EntityReference(SOLE.sole_distrito.EntityLogicalName, Guid.Parse(oContactoBE.Sole_distrito));
                Contacto.Address1_Name       = oContactoBE.Sole_direccion;

                //Validamos si el Campo Sole Tienda Asignada tiene Datos
                if (oContactoBE.Sole_tienda != "")
                {
                    //Como Tiene Datos, buscamos el Guid del Usuario de la Tienda Asignada
                    string guidUsuario;
                    guidUsuario = oFuncionesDA.ObtieneUsuarioIdxTiendaAsignada(oContactoBE.Sole_tienda);
                    // Busca el id del usuario por la tienda asignada

                    if (guidUsuario != "")
                    {
                        Contacto.OwnerId = new EntityReference("systemuser", Guid.Parse(guidUsuario));
                        // Referncia de una entidad que esta relacionada con Contacto

                        guidContacto = servicio.Create(Contacto);
                        // ocupamos uno de los metodos de IOrganizationServices

                        return(guidContacto);
                    }
                    else
                    {
                        guidContacto = servicio.Create(Contacto);

                        return(guidContacto);
                    }
                }
                else
                {
                    guidContacto = servicio.Create(Contacto);

                    return(guidContacto);
                }
            }
            catch (Exception ex)
            {
                oBitacoraErroresBE.Codigo      = ex.HResult.ToString();
                oBitacoraErroresBE.Proceso     = "Crear Contacto";
                oBitacoraErroresBE.Error       = ex.Source;
                oBitacoraErroresBE.Descripcion = ex.Message;
                oBitacoraErroresBE.IdRegistro  = oContactoBE.ContactoId;
                oBitacoraErroresBE.Entidad     = "Contacto";
                oBitacoraErroresBE.EstadoCarga = "0";

                oFuncionesDA.RegistraBitacoraErrores(oBitacoraErroresBE);
                //oFuncionesDA.ActualizarEstadoTablaContacto(oContactoBE.ContactoId);

                string Mensaje = "Error al Crear el Contacto. Se ha producido el siguiente error: " + ex.Message;
                ZthMetodosVarios.Metodos.GuardarLog(Ruta, Mensaje);

                //ZthEnvioCorreos_CRM365.Metodos.EnviarCorreoError(CorreoSoporte, CorreoCliente, "Integración MACAL", Ruta, Mensaje, CorreoClave, Port, Host);

                throw ex;
            }
        }
        /// <summary>
        /// Actualiza los Datos del Contactogithub
        /// </summary>
        /// <param name="guidContacto">Guid del Contacto a Actualizar</param>
        /// <param name="oContactoBE">Datos del Contacto a Actualizar</param>
        /// <returns>Actualiza los Datos del Contacto</returns>
        public Boolean ActualizaContacto(string guidContacto, ContactoBE oContactoBE)
        {
            IOrganizationService servicio;

            // Instancia del servicio
            servicio = ConexionCRMDA.ObtenerConexion();
            // asginamos la cadena de conexión
            SOLE.Contact Contacto = new SOLE.Contact();
            // Instancia de la entidad Contacto

            try
            {
                // guid esta dentro del crm
                Contacto.ContactId = Guid.Parse(guidContacto);

                /*
                 * Resumen:
                 *        Asignamos campos de BE a Campos de la entidad contacto de CRM (Campos de BE contienen los datos de SQL Server)
                 *        Actualizamos el contacto del CRM
                 */
                Contacto.FirstName     = oContactoBE.Sole_nombres;
                Contacto.LastName      = oContactoBE.Sole_apellidos;
                Contacto.Telephone1    = oContactoBE.Sole_telefono1;
                Contacto.EMailAddress1 = oContactoBE.Sole_correoelectronico1;
                //if (oContactoBE.Sole_fechanacimiento.ToString() != "01-01-0001 0:00:00")
                //{
                //    Contacto.BirthDate = oContactoBE.Sole_fechanacimiento;
                //}
                //Contacto.GenderCode = new OptionSetValue((int)oContactoBE.Sole_sexo);
                Contacto.Telephone2    = oContactoBE.Sole_telefono2;
                Contacto.Telephone3    = oContactoBE.Sole_telefono3;
                Contacto.EMailAddress2 = oContactoBE.Sole_correoelectronico2;
                Contacto.EMailAddress3 = oContactoBE.Sole_correoelectronico3;
                //Contacto.sole_estilovida = new OptionSetValue((int)oContactoBE.Sole_estilovida);
                //Contacto.sole_ocupacion = new OptionSetValue((int)oContactoBE.Sole_ocupacion);
                //Contacto.sole_perfilcliente = new OptionSetValue((int)oContactoBE.Sole_perfilcliente);
                //Contacto.sole_tipoclientepotencial = new OptionSetValue((int)oContactoBE.Sole_tipoclientepotencial);
                //Contacto.sole_fuenteorigen = new OptionSetValue((int)oContactoBE.Sole_fuenteorigen);
                //Contacto.sole_tipofuenteorigen = new OptionSetValue((int)oContactoBE.Sole_fuenteorigen);
                //if (oContactoBE.Sole_fechaconversion.ToString() != "01-01-0001 0:00:00")
                //{
                //    Contacto.sole_fechaconversion = oContactoBE.Sole_fechaconversion;
                //}
                Contacto.sole_interesbano     = oContactoBE.Sole_interesbano;
                Contacto.sole_interescocina   = oContactoBE.Sole_interescocina;
                Contacto.sole_interesdescanso = oContactoBE.Sole_interesdescanso;
                if (oContactoBE.Sole_estadoSole != 0)
                {
                    Contacto.sole_estadosole = new OptionSetValue((int)oContactoBE.Sole_estadoSole);
                }
                //if (oContactoBE.Sole_fechanuevo.ToString() != "01-01-0001 0:00:00")
                //{
                //    Contacto.sole_fechanuevo = oContactoBE.Sole_fechanuevo;
                //}
                //if (oContactoBE.Sole_fechaactivo.ToString() != "01-01-0001 0:00:00")
                //{
                //    Contacto.sole_fechaactivo = oContactoBE.Sole_fechaactivo;
                //}
                //if (oContactoBE.Sole_fechaincativo.ToString() != "01-01-0001 0:00:00")
                //{
                //    Contacto.sole_fechainactivo = oContactoBE.Sole_fechaincativo;
                //}
                Contacto.DoNotEMail          = oContactoBE.Sole_permissionmarketingcorreo;
                Contacto.DoNotPhone          = oContactoBE.Sole_permissionmarketingtelefono;
                Contacto.sole_departamentoid = new EntityReference(SOLE.sole_departamento.EntityLogicalName, Guid.Parse(oContactoBE.Sole_departamento));
                Contacto.sole_provinciaid    = new EntityReference(SOLE.sole_provincia.EntityLogicalName, Guid.Parse(oContactoBE.Sole_provincia));

                Contacto.sole_distritoid = new EntityReference(SOLE.sole_distrito.EntityLogicalName, Guid.Parse(oContactoBE.Sole_distrito));
                Contacto.Address1_Name   = oContactoBE.Sole_direccion;
                Contacto.sole_zona       = new OptionSetValue((int)oContactoBE.Sole_zona);

                if (oContactoBE.Sole_nse != 0)
                {
                    Contacto.sole_nse = new OptionSetValue((int)oContactoBE.Sole_nse);
                }
                return(true);
            }
            catch (Exception ex)


            {
                /*
                 *
                 *
                 * Guardamos los datos en la variables de BE de la clase bitácora errores
                 *
                 */
                oBitacoraErroresBE.Codigo = ex.HResult.ToString();
                // La asignacion de un identificador
                oBitacoraErroresBE.Proceso = "Actualizar Contacto";
                // Nombre del proceso
                oBitacoraErroresBE.Error = ex.Source;
                // Fuente de error
                oBitacoraErroresBE.Descripcion = ex.Message;
                // Mensaje descriptivo de la excepción
                oBitacoraErroresBE.IdRegistro = oContactoBE.ContactoId;
                // ID donde se haya el error
                oBitacoraErroresBE.Entidad = "Contacto";
                // entidad del error
                oBitacoraErroresBE.EstadoCarga = "0";
                // Carga cero

                oFuncionesDA.RegistraBitacoraErrores(oBitacoraErroresBE);
                //oFuncionesDA.ActualizarEstadoTablaContacto(oContactoBE.ContactoId);

                string Mensaje = "Error al Actualizar el Contacto. Se ha producido el siguiente error: " + ex.Message;
                ZthMetodosVarios.Metodos.GuardarLog(Ruta, Mensaje);

                //ZthEnvioCorreos_CRM365.Metodos.EnviarCorreoError(CorreoSoporte, CorreoCliente, "Integración MACAL", Ruta, Mensaje, CorreoClave, Port, Host);

                throw ex;
            }
        }
        /// <summary>
        /// Crea La Oportunidad
        /// </summary>
        /// <param name="ClienteId">Cliente Id al que le Asignamos la Oportunidad</param>
        /// <param name="oOportunidadBE">Datos de la Oportunidad</param>
        /// <returns> Crea La Oportunidad</returns>
        public Guid CrearOportunidad(Guid ClienteId, OportunidadesBE oOportunidadBE)
        {
            IOrganizationService servicio;

            servicio = ConexionCRMDA.ObtenerConexion();
            SOLE.Opportunity Oportunidad = new SOLE.Opportunity();
            Guid             guidOportunidad;

            try
            {
                // con los datos de sql almacenados en BE

                if (oOportunidadBE.Sole_fechasolicitud.ToString() != "01-01-0001 0:00:00" && oOportunidadBE.Sole_fechasolicitud.ToString() != "01-01-1900 0:00:00")
                {
                    Oportunidad.sole_fechasolicitud = Convert.ToDateTime(oOportunidadBE.Sole_fechasolicitud);
                }

                if (oOportunidadBE.Sole_canal != "")
                {
                    Oportunidad.sole_canal = new OptionSetValue(int.Parse(oOportunidadBE.Sole_canal));
                }
                // Referencias a entidades  ue yacen en la entidad principal Oportunidad

                Oportunidad.sole_tiendaid       = new EntityReference(SOLE.sole_tienda.EntityLogicalName, Guid.Parse(oOportunidadBE.Sole_tienda));
                Oportunidad.ParentContactId     = new EntityReference(SOLE.Contact.EntityLogicalName, ClienteId);
                Oportunidad.sole_ordensolicitud = oOportunidadBE.Sole_ordenservicio;

                if (oOportunidadBE.Sole_fechaservicio.ToString() != "01-01-0001 0:00:00" && oOportunidadBE.Sole_fechaservicio.ToString() != "01-01-1900 0:00:00")
                {
                    Oportunidad.sole_fechaservicio = Convert.ToDateTime(oOportunidadBE.Sole_fechaservicio);
                }

                if (oOportunidadBE.Sole_tiposervicio != "")
                {
                    Oportunidad.sole_tiposervicio = new OptionSetValue(int.Parse(oOportunidadBE.Sole_tiposervicio));
                }

                if (oOportunidadBE.Sole_empresaqueinstalo != "")
                {
                    Oportunidad.sole_empresainstalo = new OptionSetValue(int.Parse(oOportunidadBE.Sole_empresaqueinstalo));
                }

                Oportunidad.sole_nombretecnico = oOportunidadBE.Sole_nombretecnico;

                if (oOportunidadBE.Sole_fechacompra.ToString() != "01-01-0001 0:00:00" && oOportunidadBE.Sole_fechacompra.ToString() != "01-01-1900 0:00:00")
                {
                    Oportunidad.ActualCloseDate = Convert.ToDateTime(oOportunidadBE.Sole_fechacompra);
                }

                if (oOportunidadBE.Sole_tipocomprobante != null)
                {
                    Oportunidad.sole_tipocomprobante = new OptionSetValue(int.Parse(oOportunidadBE.Sole_tipocomprobante));
                }

                Oportunidad.sole_numerocomprobante = oOportunidadBE.Sole_numerocomprobante;

                if (oOportunidadBE.Sole_metodoventa != null)
                {
                    Oportunidad.sole_metodoventa = new OptionSetValue(int.Parse(oOportunidadBE.Sole_metodoventa));
                }

                Money costoVenta = new Money(oOportunidadBE.Sole_costoventa);
                Oportunidad.sole_costoventa = costoVenta;

                Money utilidadBruta = new Money(oOportunidadBE.Sole_utilidadbruta);
                Oportunidad.sole_utilidadbruta = utilidadBruta;

                Money precioVentaPublico = new Money(oOportunidadBE.Sole_precioventapublico);
                Oportunidad.TotalAmountLessFreight = precioVentaPublico;

                Money ventaNeta = new Money(oOportunidadBE.Sole_ventaneta);
                Oportunidad.TotalAmount = ventaNeta;

                //Como solo hay una Lista de Precio la Traemos de Duro del App.Config
                string listaDePrecios = "";
                listaDePrecios           = ZthSeguridad.Metodos.Desencriptar(ConfigurationManager.AppSettings["ListaPrecios"].ToString());
                Oportunidad.PriceLevelId = new EntityReference(SOLE.Contact.EntityLogicalName, Guid.Parse(listaDePrecios));

                guidOportunidad = servicio.Create(Oportunidad);

                return(guidOportunidad);
            }
            catch (Exception ex)
            {
                oBitacoraErroresBE.Codigo      = ex.HResult.ToString();
                oBitacoraErroresBE.Proceso     = "Crear Oportunidad";
                oBitacoraErroresBE.Error       = ex.Source;
                oBitacoraErroresBE.Descripcion = ex.Message;
                oBitacoraErroresBE.IdRegistro  = oOportunidadBE.IdOportunidadCargaInicial;
                oBitacoraErroresBE.Entidad     = "Oportunidad";
                oBitacoraErroresBE.EstadoCarga = "0";

                oFuncionesDA.RegistraBitacoraErrores(oBitacoraErroresBE);
                //oFuncionesDA.ActualizarEstadoTablaOportunidad(oOportunidadBE.IdOportunidadCargaInicial);

                string Mensaje = "Error al Crear la Oportunidad. Se ha producido el siguiente error: " + ex.Message;
                ZthMetodosVarios.Metodos.GuardarLog(Ruta, Mensaje);

                //ZthEnvioCorreos_CRM365.Metodos.EnviarCorreoError(CorreoSoporte, CorreoCliente, "Integración MACAL", Ruta, Mensaje, CorreoClave, Port, Host);

                throw ex;
            }
        }