public ICustomPrincipal getUserActivo(string dominio, string usuario, string password, Guid idconexion)
        {
            CustomPrincipal principal = null;
            string          basedatos;

            if (checkPassword(dominio, usuario, password, out basedatos) && Existeusuarioactivo(basedatos, idconexion))
            {
                using (var db = MarfilEntities.ConnectToSqlServer(basedatos))
                {
                    var objUser = db.Usuarios.Single(f => f.usuario == usuario);
                    if (objUser != null)
                    {
                        if (objUser != null)
                        {
                            var objRole = db.Roles.First(f => f.Usuarios.Any(j => j.id == objUser.id));
                            var troleid = objRole?.id;

                            var tempresa         = GetEmpresaDefecto(objUser.id, db);
                            var context          = new LoginContextService(tempresa, basedatos);
                            var ejercicioService = FService.Instance.GetService(typeof(EjerciciosModel), context, db) as EjerciciosService;
                            var almacenService   = FService.Instance.GetService(typeof(AlmacenesModel), context, db) as AlmacenesService;
                            var talmacen         = almacenService.GetAlmacenDefecto(objUser.id, db, tempresa);
                            var tejercicio       = ejercicioService.GetEjercicioDefecto(objUser.id, db, tempresa);

                            principal = new CustomPrincipal(usuario)
                            {
                                Id         = objUser.id,
                                RoleId     = troleid ?? Guid.NewGuid(),
                                Usuario    = objUser.usuario,
                                BaseDatos  = basedatos,
                                Roles      = objUser.Roles.Select(x => x.role).ToList(),
                                Empresa    = tempresa,
                                Ejercicio  = tejercicio,
                                Idconexion = idconexion,
                                Fkalmacen  = talmacen
                            };
                        }
                    }
                }
            }
            return(principal);
        }
        private bool LoginInternal(string dominio, string usuario, string contraseña, out SecurityTicket model, string empresa, string ejercicio, string almacen)
        {
            var result = true;

            model = null;
            try
            {
                var tusuario   = usuario;
                var tid        = Guid.Empty;
                var troleid    = Guid.Empty;
                var tbasedatos = "";
                var tempresa   = string.Empty;

                var tazureblob = "";


                var licenciaModel = new LicenciasaplicacionService(dominio);
                tbasedatos = licenciaModel.Basedatos;
                tazureblob = licenciaModel.Azureblob;

                using (var db = MarfilEntities.ConnectToSqlServer(licenciaModel.Basedatos))
                {
                    if (usuario.Equals(ApplicationHelper.UsuariosAdministrador))
                    {
                        var admin = db.Administrador.FirstOrDefault(u => u.password == contraseña);
                        if (admin == null)
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        var objUser = db.Usuarios.FirstOrDefault(u => u.usuario == usuario && u.password == contraseña);
                        if (objUser != null)
                        {
                            var objRole = db.Roles.First(f => f.Usuarios.Any(j => j.id == objUser.id));
                            tid     = objUser.id;
                            troleid = objRole.id;
                        }
                        else
                        {
                            return(false);
                        }
                    }

                    //Rai
                    tempresa = string.IsNullOrEmpty(empresa) ? GetEmpresaDefecto(tid, db) : empresa;
                    var descripcionempresa = db.Empresas.Where(f => f.id == tempresa).Select(f => f.nombre).SingleOrDefault();

                    if (puedeEntrarEmpresa(tbasedatos, tusuario, tempresa, dominio))
                    {
                        Validarlicencia(tid, usuario, licenciaModel, db);

                        var context          = new LoginContextService(tempresa, licenciaModel.Basedatos);
                        var ejercicioService = FService.Instance.GetService(typeof(EjerciciosModel), context, db) as EjerciciosService;
                        var almacenService   = FService.Instance.GetService(typeof(AlmacenesModel), context, db) as AlmacenesService;
                        var talmacen         = string.IsNullOrEmpty(almacen) ? almacenService.GetAlmacenDefecto(tid, db, tempresa) : almacen;
                        var tejercicio       = string.IsNullOrEmpty(ejercicio) ? ejercicioService.GetEjercicioDefecto(tid, db, tempresa) : ejercicio;

                        model = new SecurityTicket
                        {
                            Usuario      = tusuario,
                            Id           = tid,
                            RoleId       = troleid,
                            BaseDatos    = tbasedatos,
                            Empresa      = tempresa,
                            Ejercicio    = tejercicio,
                            Fkalmacen    = talmacen,
                            Tipolicencia = licenciaModel.TipoLicencia,
                            Azureblob    = tazureblob
                                           //serializeModel.Roles = db.USUARIOROLE.Where(i => i.IDUSUARIO == u.ID).Select(i => i.ROLE.NOMBRE).ToList();
                        };
                        CreateUsuarioActivo(model, db);
                        // esto es la validación
                        //var u = db.Usuarios.FirstOrDefault(i => i.Usuario == usu.Email && i.PWD == usu.Password && i.IFACTIVO);

                        var preferencias = new PreferenciasUsuarioService(db);
                        preferencias.SetPreferencia(TiposPreferencias.EmpresaDefecto, tid, PreferenciaEmpresaDefecto.Id, PreferenciaEmpresaDefecto.Nombre, new PreferenciaEmpresaDefecto()
                        {
                            Empresa = tempresa
                        });

                        if (tempresa != ApplicationHelper.EmpresaMock)
                        {
                            var ejercicioPreferencia = new PreferenciaEjercicioDefecto();
                            ejercicioPreferencia.SetEjercicio(tempresa, tejercicio);

                            var almacenPreferencia = new PreferenciaAlmacenDefecto();
                            almacenPreferencia.SetAlmacen(tempresa, talmacen);

                            preferencias.SetPreferencia(TiposPreferencias.EjercicioDefecto, tid, PreferenciaEjercicioDefecto.Id, PreferenciaEjercicioDefecto.Nombre, ejercicioPreferencia);
                            preferencias.SetPreferencia(TiposPreferencias.AlmacenDefecto, tid, PreferenciaAlmacenDefecto.Id, PreferenciaAlmacenDefecto.Nombre, almacenPreferencia);
                        }
                    }

                    else
                    {
                        throw new CambiarEmpresaException("No tiene permisos sobre la empresa " + descripcionempresa + " Consulte con su administrador");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
                if (ex is LicenciaException)
                {
                    throw;
                }
                if (ex is UsuarioactivoException)
                {
                    throw;
                }
                if (ex is UsuarioensuoException)
                {
                    throw;
                }
                if (ex is CambiarEmpresaException)
                {
                    throw;
                }
                result = false;
            }

            return(result);
        }