//Buscar un Cliente
        public EmpresarioViewModel ReadByIdenCliente(int tipoIden, string ident)
        {
            EmpresarioViewModel cliente = (from c in entities.Clientes
                                           where (c.Identificacion == ident && c.TipoDocumento_id == tipoIden && c.Activo == true)
                                           select new EmpresarioViewModel
            {
                ClienteId = c.Id,
                TipoPersona_id = c.TipoPersona_id,
                NombreTipoPersona = c.Tipopersona.Nombre,
                TipoDocumento_id = c.TipoDocumento_id,
                NombreTipoDocumento = c.Tipodocumento.Nombre,
                Identificacion = c.Identificacion,
                Digito = (c.Digito == null) ? c.Digito : c.Digito.Value,
                PrimerNombres = c.PrimerNombreRazonSocial,
                PrimerApellido = c.PrimerApellido,
                SegundoNombres = c.SegundoNombre,
                SegundoApellido = c.SegundoApellido,
                FechaNacimiento = c.FechaNacimiento,
                RazonSocial = c.PrimerNombreRazonSocial,
                EsEmpresa = c.IsEmpresa,
                Genero_id = (c.Genero_id != null) ? c.Genero_id.Value : 0,
                Email = c.Email,
                Celular = c.Celular,
                TelefonoCasa = c.TelefonoCasa,
                TelefonoOficina = c.TelefonoOficina,
                Direcciones = entities.DireccionesClientes.Where(d => d.Cliente_id == c.Id).Select(d => new DireccionViewModel
                {
                    Id = d.Id,
                    IdCliente = (int)d.Cliente_id,
                    Direccion = d.Ubicacion,
                    CodigoPostal = d.CodigoPostal,
                    Ciudad_id = (int)d.Ciudad_id,
                    Departamneto_id = d.Ciudade.Iddepartamento,
                    Pais_id = d.Ciudade.Departamento.Idpais,
                    Latitud = d.Latitud,
                    Longitud = d.Longitud
                }).OrderByDescending(d => d.Id).ToList()
            }).FirstOrDefault();

            return(cliente);
        }
 //Cambiar estado del empresario
 public void Destroy(EmpresarioViewModel obj)
 {
     try
     {
         var entityEmpresario = entities.Empresarios.FirstOrDefault(c => c.Id == obj.EmpresarioId);
         entityEmpresario.Activo      = false;
         entityEmpresario.IdRetiredby = obj.Auditoria.IdRetiredby;
         entityEmpresario.DateRetired = obj.Auditoria.DateRetired;
         var entityUsuarioEmpresario = entities.UsuariosEmpresarios.FirstOrDefault(c => c.IdClientePersonaEmpresa == obj.ClienteId);
         entityUsuarioEmpresario.Activo      = false;
         entityUsuarioEmpresario.IdRetiredby = obj.Auditoria.IdRetiredby;
         entityUsuarioEmpresario.DateRetired = obj.Auditoria.DateRetired;
         var entityUsuarioEmpresarioRol = entities.UsuarioEmpresasriosRols.FirstOrDefault(c => c.IdUsuarioEmpresarios == entityUsuarioEmpresario.Id);
         entityUsuarioEmpresarioRol.Activo      = false;
         entityUsuarioEmpresarioRol.IdRetiredby = obj.Auditoria.IdRetiredby;
         entityUsuarioEmpresarioRol.DateRetired = obj.Auditoria.DateRetired;
         entities.SaveChanges();
     }
     catch (Exception err)
     {
         var message = err.Message;
     }
 }
        //Actualizar Empresario
        public EmpresarioViewModel Update(EmpresarioViewModel obj)
        {
            try
            {
                Cliente entity = new Cliente();
                entity                  = entities.Clientes.Where(e => e.Id == obj.ClienteId).FirstOrDefault();
                entity.DateChanged      = obj.Auditoria.DateChanged;
                entity.IdChangedby      = obj.Auditoria.IdChangedby;
                entity.Id               = obj.ClienteId;
                entity.TipoPersona_id   = obj.TipoPersona_id;
                entity.TipoDocumento_id = obj.TipoDocumento_id;
                entity.Identificacion   = obj.Identificacion;
                if (obj.TipoDocumento_id == 2)
                {
                    entity.Digito = obj.Digito;
                    entity.PrimerNombreRazonSocial = obj.RazonSocial;
                }
                else
                {
                    entity.Imagen = obj.imagen != null? obj.imagen: null;
                }

                entity.Email           = obj.Email;
                entity.Celular         = obj.Celular;
                entity.TelefonoCasa    = obj.TelefonoCasa;
                entity.TelefonoOficina = obj.TelefonoOficina;
                entities.SaveChanges();
                obj.ClienteId = entity.Id;
                var records = entities.DireccionesClientes.Where(e => e.Cliente_id == obj.ClienteId).ToList();
                var nuevos  = obj.Direcciones.Where(c => c.Id < 0).ToList();
                //Borrado Direcciones
                var borrar = (from c in records
                              where obj.Direcciones.FirstOrDefault(r => r.Id == c.Id) == null
                              select c).ToList();
                var match = (from c in records
                             from d in obj.Direcciones
                             where c.Id == d.Id
                             select new
                {
                    Record = c,
                    Memoria = d
                }).ToList();

                foreach (var item in nuevos)
                {
                    entities.Add(new DireccionesCliente
                    {
                        Ubicacion    = item.Direccion,
                        CodigoPostal = item.CodigoPostal,
                        Ciudad_id    = item.Ciudad_id,
                        DateCreated  = obj.Auditoria.DateChanged,
                        Cliente_id   = obj.ClienteId,
                        IdCreatorby  = obj.Auditoria.IdChangedby,
                        Activo       = true
                    });
                }
                foreach (var item in borrar)
                {
                    entities.Delete(item);
                }
                foreach (var item in match)
                {
                    item.Record.Ubicacion    = item.Memoria.Direccion;
                    item.Record.CodigoPostal = item.Memoria.CodigoPostal;
                    item.Record.Ciudad_id    = item.Memoria.Ciudad_id;
                }
                entities.SaveChanges();
                Empresario entityEmpresario = new Empresario();
                entityEmpresario                              = entities.Empresarios.Where(e => e.Id == obj.EmpresarioId).FirstOrDefault();
                entityEmpresario.IdChangedby                  = obj.Auditoria.IdChangedby;
                entityEmpresario.DateChanged                  = obj.Auditoria.DateChanged;
                entityEmpresario.IdClientePersonaEmpresa      = obj.ClienteId;
                entityEmpresario.NumeroRegistroArtesEscenicas = obj.NumeroRegistroArtesEscenicas;
                entityEmpresario.NombreEstableciemiento       = obj.NombreEstablecimeinto;
                entityEmpresario.Pulet                        = obj.EmpresarioPulet;
                entityEmpresario.TipoDocumentoRL_id           = obj.EmpresarioTipoDocumento_idRL;
                entityEmpresario.IdentificacionRL             = obj.EmpresarioIdentificacionRL;
                entityEmpresario.NombreRL                     = obj.EmpresarioPrimerNombreRL;
                entityEmpresario.SegundoNombreRl              = obj.EmpresarioSegundoNombreRL;
                entityEmpresario.ApellidosRL                  = obj.EmpresarioPrimerApellidosRL;
                entityEmpresario.SegindoApellidoRL            = obj.EmpresarioSegundoApellidosRL;
                entityEmpresario.Sexo_idRL                    = obj.EmpresarioGenero_idRL;
                entityEmpresario.FechaNacimientoRL            = obj.EmpresarioFechaNacimientoRL;
                entityEmpresario.EmailRL                      = obj.EmpresarioEmailRL;
                entityEmpresario.CelularRL                    = obj.EmpresarioCelularRL;
                entityEmpresario.EmailNotificacion            = obj.EmpresarioEmailNotificacion;
                entityEmpresario.Activo                       = true;
                entities.SaveChanges();
                obj.EmpresarioId = entityEmpresario.Id;
                UsuariosEmpresario entityUsuario = new UsuariosEmpresario();
                entityUsuario = entities.UsuariosEmpresarios.Where(e => e.Id == obj.UsuarioEmpresarioId).FirstOrDefault();
                entityUsuario.IdClientePersonaEmpresa = obj.ClienteId;
                entityUsuario.Nombre      = obj.UserEmpresario;
                entityUsuario.Email       = obj.UserEmailEmpresario;
                entityUsuario.Contrasena  = obj.PasswordEmpresaio == null ? entityUsuario.Contrasena : Utilidades.Encrypt(obj.PasswordEmpresaio);
                entityUsuario.IdChangedby = obj.Auditoria.IdChangedby;
                entityUsuario.DateChanged = obj.Auditoria.DateChanged;
                entityUsuario.Activo      = true;
                entities.SaveChanges();
                obj.UsuarioEmpresarioId = entityUsuario.Id;
                return(obj);
            }
            catch (Exception err)
            {
                var message = err.Message;
                return(null);
            }
        }
        //Guardar Empresario
        public EmpresarioViewModel SaveEmpresario(EmpresarioViewModel obj)
        {
            try
            {
                if (obj.ClienteId == 0)
                {
                    Cliente entity = new Cliente();
                    entity.DateCreated = obj.Auditoria.DateCreated;
                    entity.IdCreatorby = obj.Auditoria.IdCreatorby;
                    bool nuevo = false;
                    entity.Id               = obj.ClienteId;
                    entity.TipoPersona_id   = obj.TipoPersona_id;
                    entity.TipoDocumento_id = obj.TipoDocumento_id;
                    entity.Identificacion   = obj.Identificacion;
                    entity.SegundoNombre    = obj.SegundoNombres;
                    entity.PrimerApellido   = obj.PrimerApellido;
                    entity.SegundoApellido  = obj.SegundoApellido;
                    if (obj.TipoDocumento_id != 2)
                    {
                        entity.FechaNacimiento         = obj.FechaNacimiento.Value;
                        entity.Genero_id               = obj.Genero_id;
                        entity.PrimerNombreRazonSocial = obj.PrimerNombres;
                    }
                    else
                    {
                        entity.PrimerNombreRazonSocial = obj.RazonSocial;
                        entity.Digito = obj.Digito;
                    }
                    entity.Email           = obj.Email;
                    entity.Celular         = obj.Celular;
                    entity.TelefonoCasa    = obj.TelefonoCasa;
                    entity.TelefonoOficina = obj.TelefonoOficina;
                    entity.JornadaEntrega  = obj.JornadaEntrega;
                    entity.Imagen          = obj.imagen;
                    entity.IsEmpresa       = obj.EsEmpresa;
                    entity.Activo          = true;
                    if (obj.ClienteId == 0)
                    {
                        nuevo = true;
                        entities.Add(entity);
                    }
                    entities.SaveChanges();
                    obj.ClienteId = entity.Id;
                    var idCliente = obj.ClienteId;
                    if (nuevo)
                    {
                        foreach (var item in obj.Direcciones)
                        {
                            entities.Add(new DireccionesCliente
                            {
                                Ubicacion    = item.Direccion,
                                CodigoPostal = item.CodigoPostal,
                                Ciudad_id    = item.Ciudad_id,
                                Cliente_id   = idCliente,
                                DateCreated  = obj.Auditoria.DateCreated,
                                IdCreatorby  = obj.Auditoria.IdCreatorby,
                                Latitud      = item.Latitud,
                                Longitud     = item.Longitud,
                                Activo       = true
                            });
                            entities.SaveChanges();
                        }
                    }
                    else
                    {
                        obj = null;
                    }
                }

                Empresario entityEmpresario = new Empresario();
                entityEmpresario.IdCreatorby                  = obj.Auditoria.IdCreatorby;
                entityEmpresario.DateCreated                  = obj.Auditoria.DateCreated;
                entityEmpresario.IdClientePersonaEmpresa      = obj.ClienteId;
                entityEmpresario.NumeroRegistroArtesEscenicas = obj.NumeroRegistroArtesEscenicas;
                entityEmpresario.Pulet = obj.EmpresarioPulet;
                entityEmpresario.TipoDocumentoRL_id     = obj.EmpresarioTipoDocumento_idRL;
                entityEmpresario.IdentificacionRL       = obj.EmpresarioIdentificacionRL;
                entityEmpresario.NombreRL               = obj.EmpresarioPrimerNombreRL;
                entityEmpresario.SegundoNombreRl        = obj.EmpresarioSegundoNombreRL;
                entityEmpresario.ApellidosRL            = obj.EmpresarioPrimerApellidosRL;
                entityEmpresario.SegindoApellidoRL      = obj.EmpresarioSegundoApellidosRL;
                entityEmpresario.Sexo_idRL              = obj.EmpresarioGenero_idRL;
                entityEmpresario.FechaNacimientoRL      = obj.EmpresarioFechaNacimientoRL;
                entityEmpresario.EmailRL                = obj.EmpresarioEmailRL;
                entityEmpresario.CelularRL              = obj.EmpresarioCelularRL;
                entityEmpresario.EmailNotificacion      = obj.EmpresarioEmailNotificacion;
                entityEmpresario.NombreEstableciemiento = obj.NombreEstablecimeinto;
                entityEmpresario.Activo = true;
                entities.Add(entityEmpresario);
                entities.SaveChanges();
                obj.EmpresarioId = entityEmpresario.Id;
                UsuariosEmpresario entityUsuario = new UsuariosEmpresario();
                entityUsuario.IdClientePersonaEmpresa = obj.ClienteId;
                entityUsuario.Nombre      = obj.UserEmpresario;
                entityUsuario.Email       = obj.UserEmailEmpresario;
                entityUsuario.Contrasena  = Utilidades.Encrypt(obj.PasswordEmpresaio);
                entityUsuario.IdCreatorby = obj.Auditoria.IdCreatorby;
                entityUsuario.DateCreated = obj.Auditoria.DateCreated;
                entityUsuario.Activo      = true;
                entities.Add(entityUsuario);
                entities.SaveChanges();
                obj.UsuarioEmpresarioId = entityUsuario.Id;
                UsuarioEmpresasriosRol entityUsuarioEmpresarioRol = new UsuarioEmpresasriosRol();
                entityUsuarioEmpresarioRol.IdEmpresario         = obj.EmpresarioId;
                entityUsuarioEmpresarioRol.IdUsuarioEmpresarios = obj.UsuarioEmpresarioId;
                entityUsuarioEmpresarioRol.IdRol       = 2;
                entityUsuarioEmpresarioRol.IdCreatorby = obj.Auditoria.IdCreatorby;
                entityUsuarioEmpresarioRol.DateCreated = obj.Auditoria.DateCreated;
                entityUsuarioEmpresarioRol.Activo      = true;
                entities.Add(entityUsuarioEmpresarioRol);
                entities.SaveChanges();
                return(obj);
            }
            catch (Exception err)
            {
                var message = err.Message;
                return(null);
            }
        }