Ejemplo n.º 1
0
        public UserGroup AddNewUserGroup(UserGroup newUserGroup, User owner)
        {
            AuthenticateUser(owner);

            this.ChechIsAdmin(owner, typeof(UserGroup));


            using (CFAPContext ctx = new CFAPContext())
            {
                try
                {
                    ctx.UserGroups.Add(newUserGroup);
                    ctx.SaveChanges(DbConcurencyUpdateOptions.ClientPriority);
                }
                catch (DbEntityValidationException ex)
                {
                    throw new FaultException <DataNotValidException>(new DataNotValidException(ex.EntityValidationErrors));
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }

            return(newUserGroup);
        }
Ejemplo n.º 2
0
        public BudgetItem AddBudgetItem(BudgetItem newBudgetItem, User user)
        {
            AuthenticateUser(user);

            this.ChechIsAdmin(user, typeof(BudgetItem));

            using (CFAPContext ctx = new CFAPContext())
            {
                ctx.Configuration.ProxyCreationEnabled = false;
                try
                {
                    ctx.BudgetItems.Add(newBudgetItem);
                    ctx.SaveChanges(DbConcurencyUpdateOptions.ClientPriority);
                }
                catch (DbEntityValidationException ex)
                {
                    throw new FaultException <DataNotValidException>(new DataNotValidException(ex.EntityValidationErrors));
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }

            return(newBudgetItem);
        }
Ejemplo n.º 3
0
        public ICrudOperations Update(DbConcurencyUpdateOptions concurencyUpdateOptions, User user)
        {
            if (user.IsAdmin == false)
            {
                throw new FaultException <NoRightsToChangeDataException>(new NoRightsToChangeDataException(user, this.GetType().Name));
            }

            concurencyUpdateOptions = DbConcurencyUpdateOptions.ClientPriority;

            Period result = null;

            try
            {
                using (CFAPContext ctx = new CFAPContext())
                {
                    ctx.Configuration.ProxyCreationEnabled = false;
                    ctx.Periods.Attach(this);
                    ctx.Entry(this).State = System.Data.Entity.EntityState.Modified;
                    ctx.SaveChanges(concurencyUpdateOptions);
                    result = (from p in ctx.Periods where p.Month == this.Month && p.Year == this.Year select p).Single();
                }
            }
            catch (DbEntityValidationException ex)
            {
                throw new FaultException <DataNotValidException>(new DataNotValidException(ex.EntityValidationErrors));
            }
            catch (Exception ex)
            {
                throw new FaultException <DbException>(new DbException(ex));
            }
            return(result);
        }
Ejemplo n.º 4
0
        public UserGroup UpdateUserGroup(UserGroup userGroupForUpdate, User owner)
        {
            //Аутентификация пользователя-владельца
            AuthenticateUser(owner);

            //Проверка - иммеет ли право владелец добавлять или изменять данные
            this.ChechIsAdmin(owner, typeof(UserGroup));


            //Создание экземпляра контекста
            using (CFAPContext ctx = new CFAPContext())
            {
                ctx.Configuration.ProxyCreationEnabled = false;

                try
                {
                    ctx.Entry(userGroupForUpdate).State = EntityState.Modified;
                    ctx.SaveChanges(DbConcurencyUpdateOptions.ClientPriority);
                }
                catch (DbEntityValidationException ex)
                {
                    throw new FaultException <DataNotValidException>(new DataNotValidException(ex.EntityValidationErrors));
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }


            return(userGroupForUpdate);
        }
Ejemplo n.º 5
0
        public void CustomValidate(CFAPContext ctx)
        {
            List <DbEntityValidationResult> validationResults = new List <DbEntityValidationResult>();

            var rateResult = ctx.Entry(this).GetValidationResult();

            if (!rateResult.IsValid)
            {
                validationResults.Add(rateResult);
            }

            if (this.DateRate == default(DateTime))
            {
                DbValidationError        validationError          = new DbValidationError(typeof(DateTime).ToString(), "Значениие не определено");
                DbEntityValidationResult dbEntityValidationResult = new DbEntityValidationResult(ctx.Entry(this), new DbValidationError[] { validationError });
                validationResults.Add(dbEntityValidationResult);
            }

            if (validationResults.Count > 0)
            {
                throw new DbEntityValidationException(
                          "Ошибка при проверке данных. Данные могут остутствовать или указаны не верно. Проверте внесенные данные и повторите попытку"
                          , validationResults);
            }
        }
Ejemplo n.º 6
0
        public Rate AddRate(Rate newRate, User user)
        {
            AuthenticateUser(user);

            this.ChechIsAdmin(user, typeof(Rate));

            using (CFAPContext ctx = new CFAPContext())
            {
                ctx.Configuration.ProxyCreationEnabled = false;
                try
                {
                    ctx.Rates.Add(newRate);
                    newRate.CustomValidate(ctx);
                    ctx.SaveChanges(DbConcurencyUpdateOptions.ClientPriority);
                }
                catch (DbEntityValidationException ex)
                {
                    throw new FaultException <DataNotValidException>(new DataNotValidException(ex.EntityValidationErrors));
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }

            return(newRate);
        }
Ejemplo n.º 7
0
 public void LoadRelationships(CFAPContext ctx)
 {
     LoadUserGroupsFromDatabase(ctx);
     if (this.IsAccountable == true || this.AccountableId != null)
     {
         ctx.Configuration.ProxyCreationEnabled = false;
         this.Accountable = (from a in ctx.Accountables where a.Id == this.AccountableId select a).Single();
     }
 }
Ejemplo n.º 8
0
        private User AuthenticateUser(User user, bool hasEncriptedPassword = true)
        {
            if (
                user == null ||
                user.UserName == null ||
                user.Password == null ||
                user.UserName.Length == 0 ||
                user.Password.Length == 0
                )
            {
                throw new FaultException <ArgumentNullException>(new ArgumentNullException("Не введен логин или пароль."));
            }

            User result = null;

            if (!hasEncriptedPassword)
            {
                user.EncriptPassword();
            }

            using (CFAPContext ctx = new CFAPContext())
            {
                //Отключение создания прокси-классов наследников для сущностей. Позволяет использовать DataContractAttribute для класса сущности.
                ctx.Configuration.ProxyCreationEnabled = false;

                var query = from u in ctx.Users
                            where u.Password == user.Password && u.UserName == user.UserName
                            select new { User = u, UserGroup = u.UserGroups };

                try
                {
                    var resultQuery = query.Single();
                    result = resultQuery.User;
                    result.LoadRelationships(ctx);
                    //var groups = ctx.UserGroups.Include("Users").ToList(); //В этом случае ProxyCreationEnabled = true
                    var groups = resultQuery.UserGroup;
                    result.UserGroups = groups.ToList();
                }
                catch (InvalidOperationException) //На случай если query.Single(); ничего не вернет или врнет больше одного результата
                {
                    throw new FaultException <AuthenticateFaultException>(new AuthenticateFaultException(user));
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }

            if (result == null)
            {
                FaultException <AuthenticateFaultException> fault = new FaultException <AuthenticateFaultException>(new AuthenticateFaultException(user));
                throw fault;
            }

            return(result);
        }
Ejemplo n.º 9
0
        public ICrudOperations Add(DbConcurencyUpdateOptions concurencyUpdateOptions, User user)
        {
            concurencyUpdateOptions = DbConcurencyUpdateOptions.ClientPriority;

            if (user.IsAdmin == false)
            {
                throw new FaultException <NoRightsToChangeDataException>(new NoRightsToChangeDataException(user, this.GetType().Name));
            }

            bool isExists = false;

            try
            {
                using (CFAPContext ctx = new CFAPContext())
                {
                    var existsPeriod = (from p in ctx.Periods where p.Month == this.Month && p.Year == this.Year select p).FirstOrDefault();
                    if (existsPeriod != null)
                    {
                        isExists = true;
                    }
                }
            }
            catch (Exception ex)
            {
                throw new FaultException <DbException>(new DbException(ex));
            }


            if (isExists)
            {
                return(Update(concurencyUpdateOptions, user));
            }

            Period result = null;

            try
            {
                using (CFAPContext ctx = new CFAPContext())
                {
                    ctx.Configuration.ProxyCreationEnabled = false;

                    ctx.Periods.Add(this);
                    ctx.SaveChanges(concurencyUpdateOptions);
                    result = (from p in ctx.Periods where p.Month == this.Month && p.Year == this.Year select p).Single();
                }
            }
            catch (DbEntityValidationException ex)
            {
                throw new FaultException <DataNotValidException>(new DataNotValidException(ex.EntityValidationErrors));
            }
            catch (Exception ex)
            {
                throw new FaultException <DbException>(new DbException(ex));
            }
            return(result);
        }
Ejemplo n.º 10
0
        public User UpdateUser(User userForUpdate, User owner)
        {
            //Аутентификация пользователя-владельца
            AuthenticateUser(owner);

            //Проверка - иммеет ли право владелец добавлять или изменять данные пользователей (User.CanAddNewUser)
            this.CheckCanChangeUsersData(owner, typeof(User));

            if (userForUpdate.UserGroups == null || userForUpdate.UserGroups.Count == 0)
            {
                throw new FaultException <UserHasNotGroupsException>(new UserHasNotGroupsException(userForUpdate));
            }

            if (userForUpdate.IsAccountable && userForUpdate.Accountable == null)
            {
                throw new FaultException <AccountableUserHasNotAccountableRefferenceException>(new AccountableUserHasNotAccountableRefferenceException(userForUpdate));
            }

            //Создание экземпляра контекста
            using (CFAPContext ctx = new CFAPContext())
            {
                ctx.Configuration.ProxyCreationEnabled = false;

                var oldPassword = (from u in ctx.Users where u.Id == userForUpdate.Id select u.Password).Single();

                if (oldPassword != userForUpdate.Password)
                {
                    userForUpdate.EncriptPassword();
                }

                try
                {
                    //Загрузка в контекст данных о группах пользователя
                    //userForUpdate.LoadUserGroupsFromObject(ctx);
                    userForUpdate.SetRelationships(ctx);

                    //Изменение связей с группами если они изменились
                    userForUpdate.ChangeUserGroups(ctx);

                    ctx.Entry(userForUpdate).State = EntityState.Modified;
                    ctx.SaveChanges(DbConcurencyUpdateOptions.ClientPriority);
                }
                catch (DbEntityValidationException ex)
                {
                    throw new FaultException <DataNotValidException>(new DataNotValidException(ex.EntityValidationErrors));
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }


            return(userForUpdate);
        }
Ejemplo n.º 11
0
        public void LoadUserGroupsFromDatabase(CFAPContext ctx)
        {
            ///<summary>
            ///Прикреплает к экземпляру пользователя существующие в базе данных привязанные группы
            /// </summary>
            //Для корректной загрузки данных нужен экземпляр контекста вызывающей строны
            ctx.Configuration.ProxyCreationEnabled = false;

            var groups = (from g in ctx.UserGroups
                          from u in g.Users
                          where u.Id == this.Id
                          select g).ToList();

            this.UserGroups = groups;
        }
Ejemplo n.º 12
0
        public void SetRelationships(CFAPContext ctx)
        {
            LoadUserGroupsFromObject(ctx);

            if (this.IsAccountable == false || this.Accountable == null)
            {
                this.AccountableId = null;
                this.Accountable   = null;
            }
            else
            {
                ctx.Accountables.Attach(this.Accountable);
                this.AccountableId = this.Accountable.Id;
            }
        }
Ejemplo n.º 13
0
        public Rate UpdateRate(Rate rateToUpdate, User user, DbConcurencyUpdateOptions concurencyUpdateOption)
        {
            AuthenticateUser(user);

            this.ChechIsAdmin(user, typeof(Rate));

            using (CFAPContext ctx = new CFAPContext())
            {
                ctx.Configuration.ProxyCreationEnabled = false;

                try
                {
                    ctx.Rates.Attach(rateToUpdate);

                    var ratesToUpdateDbVersion = (Rate)ctx.Entry(rateToUpdate).GetDatabaseValues().ToObject();
                    if (ratesToUpdateDbVersion.ReadOnly)
                    {
                        throw new ReadOnlyException();
                    }

                    ctx.Entry(rateToUpdate).State = EntityState.Modified;
                    rateToUpdate.CustomValidate(ctx);
                    ctx.SaveChanges(concurencyUpdateOption);
                }
                catch (ReadOnlyException)
                {
                    throw new FaultException <TryChangeReadOnlyFiledException>(new TryChangeReadOnlyFiledException(typeof(Rate), rateToUpdate.Id, null, user));
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    var currentValue = rateToUpdate;
                    var dbValue      = (Rate)ex.Entries.Single().GetDatabaseValues().ToObject();

                    ConcurrencyException <Rate> concurrencyException = new ConcurrencyException <Rate>(dbValue, currentValue);
                    throw new FaultException <ConcurrencyException <Rate> >(concurrencyException);
                }
                catch (DbEntityValidationException ex)
                {
                    throw new FaultException <DataNotValidException>(new DataNotValidException(ex.EntityValidationErrors));
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }

            return(rateToUpdate);
        }
Ejemplo n.º 14
0
        public User AddNewUser(User newUser, User owner)
        {
            AuthenticateUser(owner);

            this.CheckCanChangeUsersData(owner, typeof(User));

            if (newUser.UserGroups == null || newUser.UserGroups.Count == 0)
            {
                throw new FaultException <UserHasNotGroupsException>(new UserHasNotGroupsException(newUser));
            }

            if (newUser.Password == null || newUser.Password.Length == 0)
            {
                Dictionary <string, string> errors = new Dictionary <string, string>();
                errors.Add("Password", "Не указан пароль.");
                throw new FaultException <DataNotValidException>(new DataNotValidException(errors));
            }

            if (newUser.IsAccountable && newUser.Accountable == null)
            {
                throw new FaultException <AccountableUserHasNotAccountableRefferenceException>(new AccountableUserHasNotAccountableRefferenceException(newUser));
            }


            newUser.EncriptPassword();

            using (CFAPContext ctx = new CFAPContext())
            {
                try
                {
                    //newUser.LoadUserGroupsFromObject(ctx); //Перенесено в SetRelationships()
                    newUser.SetRelationships(ctx);
                    ctx.Users.Add(newUser);
                    ctx.SaveChanges(DbConcurencyUpdateOptions.ClientPriority);
                }
                catch (DbEntityValidationException ex)
                {
                    throw new FaultException <DataNotValidException>(new DataNotValidException(ex.EntityValidationErrors));
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }

            return(newUser);
        }
Ejemplo n.º 15
0
        public BudgetItem UpdateBudgetItem(BudgetItem budgetItemToUpdate, User user, DbConcurencyUpdateOptions concurencyUpdateOption)
        {
            AuthenticateUser(user);

            this.ChechIsAdmin(user, typeof(BudgetItem));

            using (CFAPContext ctx = new CFAPContext())
            {
                ctx.Configuration.ProxyCreationEnabled = false;

                try
                {
                    ctx.BudgetItems.Attach(budgetItemToUpdate);

                    var budgetItemToUpdateDbVersion = (BudgetItem)ctx.Entry(budgetItemToUpdate).GetDatabaseValues().ToObject();
                    if (budgetItemToUpdateDbVersion.ReadOnly)
                    {
                        throw new ReadOnlyException();
                    }

                    ctx.Entry(budgetItemToUpdate).State = EntityState.Modified;
                    ctx.SaveChanges(concurencyUpdateOption);
                }
                catch (ReadOnlyException)
                {
                    throw new FaultException <TryChangeReadOnlyFiledException>(new TryChangeReadOnlyFiledException(typeof(BudgetItem), budgetItemToUpdate.Id, budgetItemToUpdate.ItemName, user));
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    var currentValue = budgetItemToUpdate;
                    var dbValue      = (BudgetItem)ex.Entries.Single().GetDatabaseValues().ToObject();

                    ConcurrencyException <BudgetItem> concurrencyException = new ConcurrencyException <BudgetItem>(dbValue, currentValue);
                    throw new FaultException <ConcurrencyException <BudgetItem> >(concurrencyException);
                }
                catch (DbEntityValidationException ex)
                {
                    throw new FaultException <DataNotValidException>(new DataNotValidException(ex.EntityValidationErrors));
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }

            return(budgetItemToUpdate);
        }
Ejemplo n.º 16
0
        private double GetEuroToDollarRate()
        {
            double result = 0;

            using (CFAPContext ctx = new CFAPContext())
            {
                double?query = (from rate in ctx.Rates
                                where rate.DateRate.Month == this.SummaryDate.Month && rate.DateRate.Year == this.SummaryDate.Year
                                select rate.EuroToDollarRate).FirstOrDefault();
                if (query != null)
                {
                    result = (double)query;
                }
            }

            return(result);
        }
Ejemplo n.º 17
0
        public IEnumerable <ICrudOperations> Select(Filter filter, User user)
        {
            List <Period> result = new List <Period>();

            try
            {
                using (CFAPContext ctx = new CFAPContext())
                {
                    ctx.Configuration.ProxyCreationEnabled = false;
                    result = (from p in ctx.Periods select p).Distinct().ToList();
                }
            }
            catch (Exception ex)
            {
                throw new FaultException <DbException>(new DbException(ex));
            }
            return(result);
        }
Ejemplo n.º 18
0
        public static void LoadRelationships(CFAPContext ctx)
        {
            var oldCofigurationProxy = ctx.Configuration.ProxyCreationEnabled;

            ctx.Configuration.ProxyCreationEnabled = false;

            ctx.Accountables.Load();
            var accountables = ctx.Accountables.ToList();

            ctx.BudgetItems.Load();
            var budgetItems = ctx.BudgetItems.ToList();

            ctx.Projects.Load();
            var projects = ctx.Projects.ToList();

            ctx.Users.Load();
            var users = ctx.Users.ToList();

            Parallel.ForEach <Summary>(ctx.Summaries.Local, (s) =>
            {
                //Все связанные сущности существуют в одном экземпляре
                //В случае отсутствия данных метод Find вернет null
                s.Accountable     = accountables.Find(a => a.Id == s.Accountable_Id);
                s.Project         = projects.Find(p => p.Id == s.Project_Id);
                s.BudgetItem      = budgetItems.Find(b => b.Id == s.BudgetItem_Id);
                s.UserLastChanged = users.Find(u => u.Id == s.UserLastChangedId);
            }
                                       );


            //foreach (var s in ctx.Summaries.Local)
            //{
            //    //Все связанные сущности существуют в одном экземпляре
            //    //В случае отсутствия данных метод Find вернет null
            //    s.Accountable = ctx.Accountables.Find(s.Accountable_Id);
            //    s.Project = ctx.Projects.Find(s.Project_Id);
            //    s.BudgetItem = ctx.BudgetItems.Find(s.BudgetItem_Id);
            //    s.UserLastChanged = ctx.Users.Find(s.UserLastChangedId);
            //    //ctx.Entry(s).Collection("UserGroups").Load(); //Не сработает, если коллекция уже содержит элементы
            //}

            ctx.Configuration.ProxyCreationEnabled = oldCofigurationProxy;
        }
Ejemplo n.º 19
0
        public List <User> GetUsers(User owner)
        {
            AuthenticateUser(owner);

            this.CheckCanChangeUsersData(owner, typeof(User));

            List <User> users = new List <User>();

            using (CFAPContext ctx = new CFAPContext())
            {
                ctx.Configuration.ProxyCreationEnabled = false;
                try
                {
                    if (owner.IsAdmin)
                    {
                        users = (from u in ctx.Users
                                 select u).Distinct().ToList(); //Админы могут видеть все пользователей
                    }
                    else
                    {
                        owner.LoadUserGroupsFromDatabase(ctx);
                        var ownerUserGroupsId = (from g in owner.UserGroups select g.Id).ToList();
                        users = (from g in ctx.UserGroups
                                 from u in g.Users
                                 where ownerUserGroupsId.Contains(g.Id)
                                 select u).Distinct().ToList(); //Должны быть толкьо пользователи с групп владельца
                    }

                    foreach (var u in users)
                    {
                        //u.LoadUserGroupsFromDatabase(ctx); //Пенесено в LoadRelationships()
                        u.LoadRelationships(ctx);
                    }
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }

            return(users);
        }
Ejemplo n.º 20
0
        public void ChangeUserGroups(CFAPContext ctx)
        {
            var newGoupsId = this.GetUserGroupsIdFromObject();

            var objectStateManager = ((IObjectContextAdapter)ctx).ObjectContext.ObjectStateManager;

            ctx.Users.Attach(this); //Повторное приединении сущностей или их связей выдаст исключение


            //Прикрепить к контексту все существующие группы пользователя
            var oldGroups = (from g in ctx.UserGroups
                             from u in g.Users
                             where u.Id == this.Id
                             select g
                             ).ToList();

            //Прикрепить к контексту новые группы пользователя
            var newGroups = (from g in ctx.UserGroups
                             where newGoupsId.Contains(g.Id)
                             select g).ToList();

            //Определить группы, с которых был исключен пользователь
            var groupsToRemove = (from g in oldGroups where newGoupsId.Contains(g.Id) == false select g).ToList();

            //Исключить связи с группами, с которых был исключен пользователь
            foreach (var g in groupsToRemove)
            {
                objectStateManager.ChangeRelationshipState(this, g, u => u.UserGroups, EntityState.Deleted);
            }

            //Из старого списка групп удалить все группы, с которых был исключен пользователь
            oldGroups.RemoveAll(g => groupsToRemove.Contains(g));

            //Из списка новых групп исключить группы, к которым пользователь остался прикрепленным. Оставить только группы с которыми нужно создать новые связи.
            newGroups.RemoveAll(g => oldGroups.Contains(g));

            //Создать связи с группами, в которые пользователь был добален
            foreach (var g in newGroups)
            {
                objectStateManager.ChangeRelationshipState(this, g, u => u.UserGroups, EntityState.Added);
            }
        }
Ejemplo n.º 21
0
        public List <string> GetLogins()
        {
            List <string> result = new List <string>();

            using (CFAPContext ctx = new CFAPContext())
            {
                try
                {
                    result = (from u in ctx.Users select u.UserName).Distinct().ToList();
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }

            //throw new Exception(); //Для тестирование непредвиденных исключений. ЗАКОМЕНТИРОВАТЬ!!!!

            return(result);
        }
Ejemplo n.º 22
0
        public void ChangeSummaryReadOnlyStatus(bool onOff, Filter filter, User user)
        {
            AuthenticateUser(user);

            bool canReadSummary = false;

            foreach (var g in user.UserGroups)
            {
                if (g.CanReadAccountablesSummary)
                {
                    canReadSummary = true;
                }
            }

            if (!canReadSummary)
            {
                throw new FaultException <AuthenticateFaultException>(new AuthenticateFaultException(user));
            }

            this.ChechIsAdmin(user, typeof(Summary));

            List <Summary> summaries = this.GetSummary(user, filter).ToList();

            using (CFAPContext ctx = new CFAPContext())
            {
                try
                {
                    foreach (var summary in summaries)
                    {
                        ctx.Summaries.Attach(summary);
                        summary.ReadOnly         = onOff;
                        ctx.Entry(summary).State = EntityState.Modified;
                        ctx.SaveChanges(DbConcurencyUpdateOptions.ClientPriority);
                    }
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }
        }
Ejemplo n.º 23
0
        public List <Project> GetProjects(User user)
        {
            AuthenticateUser(user);

            List <Project> result = null;

            using (CFAPContext ctx = new CFAPContext())
            {
                ctx.Configuration.ProxyCreationEnabled = false;
                try
                {
                    result = (from a in ctx.Projects select a).Distinct().ToList();
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }

            return(result);
        }
Ejemplo n.º 24
0
        public void CustomValidate(CFAPContext ctx)
        {
            List <DbEntityValidationResult> validationResults = new List <DbEntityValidationResult>();

            var summaryResult = ctx.Entry(this).GetValidationResult();

            if (!summaryResult.IsValid)
            {
                validationResults.Add(summaryResult);
            }

            CustomProperiesValidate <Accountable>(this.Accountable, ctx, validationResults);
            CustomProperiesValidate <BudgetItem>(this.BudgetItem, ctx, validationResults);
            CustomProperiesValidate <Project>(this.Project, ctx, validationResults);

            if (validationResults.Count > 0)
            {
                throw new DbEntityValidationException(
                          "Ошибка при проверке данных. Данные могут остутствовать или указаны не верно. Проверте внесенные данные и повторите попытку"
                          , validationResults);
            }
        }
Ejemplo n.º 25
0
        private void CustomProperiesValidate <TProperty>(TProperty property, CFAPContext ctx, List <DbEntityValidationResult> validationResults) where TProperty : class
        {
            if (validationResults == null)
            {
                throw new ArgumentNullException("List<DbEntityValidationResult> validationResults педреан с неопределенным значением.");
            }

            if (property == null)
            {
                DbValidationError        validationError          = new DbValidationError(typeof(TProperty).ToString(), "Значениие не определено");
                DbEntityValidationResult dbEntityValidationResult = new DbEntityValidationResult(ctx.Entry(this), new DbValidationError[] { validationError });
                validationResults.Add(dbEntityValidationResult);
                return;
            }

            var propertyValidationResult = ctx.Entry(property).GetValidationResult();

            if (!propertyValidationResult.IsValid)
            {
                validationResults.Add(propertyValidationResult);
            }
        }
Ejemplo n.º 26
0
        //public ICollection<int> GetUserGroupsId()
        //{
        //    if (this.UserGroups == null || this.UserGroups.Count == 0)
        //    {
        //        throw new NullReferenceException("Группы пользователя не определены.");
        //    }

        //    var groupsId = (from g in this.UserGroups
        //                    select g.Id).ToList();

        //    return groupsId;
        //}

        //private void LoadUserGroups(CFAPContext ctx)
        //{
        //    //Для корректной загрузки данных нужен экземпляр контекста вызывающей строны
        //    ctx.Configuration.ProxyCreationEnabled = false;

        //    ICollection<int> goupsId = null;
        //    try
        //    {
        //        goupsId = this.GetUserGroupsId();
        //    }
        //    catch(NullReferenceException)
        //    {
        //        DbValidationError validationError = new DbValidationError("Группы пользователя", "Значениие не определено");
        //        DbEntityValidationResult dbEntityValidationResult = new DbEntityValidationResult(ctx.Entry(this), new DbValidationError[] { validationError });

        //        throw new DbEntityValidationException("Ошибка при проверке данных групп пользователей. Группы не добавлены", new DbEntityValidationResult[] { dbEntityValidationResult });
        //    }

        //    //LINQ to Entities не умеет вызывать методы
        //    var groups = (from g in ctx.UserGroups
        //                  where goupsId.Contains(g.Id)
        //                  select g).ToList();
        //    this.UserGroups = groups;

        //    var groupsCanUseAllData = (from g in ctx.UserGroups
        //                               where g.CanReadAllData == true
        //                               select g).ToList();

        //    foreach (var currentGroup in this.UserGroups)
        //    {
        //        for (int groupIndex = 0; groupIndex < groupsCanUseAllData.Count; groupIndex++)
        //        {
        //            if (groupsCanUseAllData[groupIndex].Id == currentGroup.Id)
        //            {
        //                groupsCanUseAllData.RemoveAt(groupIndex);
        //            }
        //        }
        //    }

        //    if (groupsCanUseAllData.Count > 0)
        //    {
        //        foreach (var group in groupsCanUseAllData)
        //        {
        //            this.UserGroups.Add(group);
        //        }
        //    }

        //}

        public void SetRelationships(CFAPContext ctx)
        {
            ctx.Configuration.ProxyCreationEnabled = false;


            if (this.Project != null && this.Project.Id != default(int))
            {
                // В случае наличия связей с другимим сущностями, это наиболле простой способ добавления сущностей в контекст, иначе, видимо, придется прикрепить каждую связанную сущность и ее связи
                //this.Project = (from p in ctx.Projects where p.Id == this.Project.Id select p).First();
                ctx.Projects.Attach(this.Project);
                this.Project_Id = this.Project.Id;
            }

            if (this.Accountable != null && this.Accountable.Id != default(int))
            {
                // В случае наличия связей с другимим сущностями, это наиболле простой способ добавления сущностей в контекст, иначе, видимо, придется прикрепить каждую связанную сущность и ее связи
                //this.Accountable = (from a in ctx.Accountables where a.Id == this.Accountable.Id select a).First();
                ctx.Accountables.Attach(this.Accountable);
                this.Accountable_Id = this.Accountable.Id;
            }

            if (this.BudgetItem != null && this.BudgetItem.Id != default(int))
            {
                // В случае наличия связей с другимим сущностями, это наиболле простой способ добавления сущностей в контекст, иначе, видимо, придется прикрепить каждую связанную сущность и ее связи
                //this.BudgetItem = (from i in ctx.BudgetItems where i.Id == this.BudgetItem.Id select i).First();
                ctx.BudgetItems.Attach(this.BudgetItem);
                this.BudgetItem_Id = this.BudgetItem.Id;
            }

            //В данном случае Attach не сработает по причине наличия связи с группами пользователей
            //Если добавлять через Attach надо загрузить все группы пользователя и до каждой грппы догрузить всех пользователей
            this.UserLastChanged   = (from u in ctx.Users where u.Id == this.UserLastChanged.Id select u).First();
            this.UserLastChangedId = UserLastChanged.Id;

            //this.LoadUserGroups(ctx);
        }
Ejemplo n.º 27
0
        public bool CheckPeriodIsUnlocked()
        {
            int month = SummaryDate.Month;
            int year  = SummaryDate.Year;

            Period period;

            using (CFAPContext ctx = new CFAPContext())
            {
                period = (from p in ctx.Periods where p.Month == month && p.Year == year select p).FirstOrDefault();
            }

            if (period == null)
            {
                return(true);
            }

            if (period.IsLocked)
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 28
0
        public void LoadUserGroupsFromObject(CFAPContext ctx)
        {
            ///<summary>
            ///Загружает с базы данных группы пользователя исходя из установленных в экземпляре групп
            /// </summary>
            ///
            //Для корректной загрузки данных нужен экземпляр контекста вызывающей строны
            ctx.Configuration.ProxyCreationEnabled = false;

            //Поучение данных о связанных сущностя необходимо для корректного добавления сущности User
            //В случае обычного ctx.Users.Add(newUser); без выборки связанных существующих данных
            //получим исключение "Не удаеться добавить сущности в коллекцию UserGroup.Users по причине невозможности удаления из Array фиксированной длинны типа"
            //Суть ошибки состоит в том, что при вызове метода ctx.Users.Add(newUser); все поля экземпляра помеаються как Added
            //Возникает конфликт первычных ключей в БД

            var goupsId = this.GetUserGroupsIdFromObject();

            //LINQ to Entities не умеет вызывать методы
            var groups = (from g in ctx.UserGroups
                          where goupsId.Contains(g.Id)
                          select g).ToList();

            this.UserGroups = groups;
        }
Ejemplo n.º 29
0
        public List <UserGroup> GetUserGroups(User owner)
        {
            AuthenticateUser(owner);

            this.ChechIsAdmin(owner, typeof(UserGroup));

            List <UserGroup> userGroups = new List <UserGroup>();

            using (CFAPContext ctx = new CFAPContext())
            {
                ctx.Configuration.ProxyCreationEnabled = false;
                try
                {
                    userGroups = (from g in ctx.UserGroups
                                  select g).Distinct().ToList();
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }

            return(userGroups);
        }
Ejemplo n.º 30
0
        private Summary LoadRelationshipsDbSummary(Summary dbSummary)
        {
            Summary result = null;

            using (CFAPContext ctx = new CFAPContext())
            {
                ctx.Configuration.ProxyCreationEnabled = false;

                ctx.Summaries.Attach(dbSummary);

                try
                {
                    Summary.LoadRelationships(ctx);

                    result = dbSummary;
                }
                catch (Exception ex)
                {
                    throw new FaultException <DbException>(new DbException(ex));
                }
            }

            return(result);
        }