public ActionResult AccrueConfirm(AccruiesViewModel model)
        {
            if (model.Accruies != null)
            {
                foreach (var item in model.Accruies)
                {
                    PaymentRequest r = db.PaymentRequests.Find(item.RequestId);
                    if (r != null)
                    {
                        UserBalance b = db.UserBalances.FirstOrDefault(x => x.User.Id == item.UserId && x.Project.ProjectId == item.ProjectId);
                        if (b == null)
                        {
                            b = db.UserBalances.Add(new UserBalance()
                            {
                                User = db.Users.Find(item.UserId), Project = db.Projects.Find(item.ProjectId), Sum = 0
                            });
                            db.UserBalances.Add(b);
                        }
                        b.Sum += item.Sum;
                    }
                }

                db.SaveChanges();

                if (model.RequestsIds != null)
                {
                    foreach (var rID in model.RequestsIds)
                    {
                        PaymentRequest r = db.PaymentRequests.Find(rID);
                        if (r != null)
                        {
                            r.RequestState     = PaymentRequestState.Credited;
                            r.WhenStateChanged = DateTime.Now;
                            db.SaveChanges();
                        }
                    }
                }
            }

            return(RedirectToAction("Index"));
        }
        public ActionResult AccrueExec(HttpPostedFileBase upload)
        {
            AccruiesViewModel model = new AccruiesViewModel()
            {
                Accruies = new List <AccrueItem>()
            };
            Dictionary <string, double>     stavki    = new Dictionary <string, double>();
            IEnumerable <UsersExchangeData> users_all = DepartmentsController.getDomainUsers();


            if (upload != null)
            {
                using (var package = new ExcelPackage(upload.InputStream))
                {
                    var Sheet   = package.Workbook.Worksheets[1];
                    int lastRow = Sheet.Dimension.End.Row;
                    int lastCol = Sheet.Dimension.End.Column;
                    int i       = 5;
                    UsersExchangeData userdata;
                    do
                    {
                        // обновляем данные
                        if (Sheet.Cells[i, 1].Value != null)
                        {
                            ApplicationUser user     = null;
                            string          username = Sheet.Cells[i, 1].Value.ToString();
                            userdata = DepartmentsController.CheckDomainUserExists(username, users_all);
                            if (userdata != null)
                            {
                                user = manager.FindByName(userdata.UserLogin);
                                if (user == null)
                                {
                                    user           = new ApplicationUser();
                                    user.UserName  = userdata.UserLogin;
                                    user.FullName  = userdata.FullName;
                                    user.Email     = "";
                                    user.ShortName = username;
                                    var res = manager.Create(user);
                                }
                                else
                                {
                                    user.ShortName = username;
                                }
                                db.SaveChanges();
                            }
                        }
                        else
                        {
                            userdata = null;
                        }

                        if (userdata != null && Sheet.Cells[i, 3].Value != null)
                        {
                            if (!String.IsNullOrEmpty(Sheet.Cells[i, 1].Value.ToString()))
                            {
                                if (!String.IsNullOrEmpty(Sheet.Cells[i, 3].Value.ToString()))
                                {
                                    double v;
                                    if (double.TryParse(Sheet.Cells[i, 3].Value.ToString(), out v))
                                    {
                                        stavki.Add(Sheet.Cells[i, 1].Value.ToString().Trim().ToUpper(), v);
                                        db.updShowSalary(manager.FindByName(userdata.UserLogin), v);
                                    }
                                }
                            }
                        }
                        i++;
                    } while (i <= lastRow);
                }
                model.RequestsIds = new List <int>();
                foreach (KeyValuePair <string, double> stavka in stavki)
                {
                    var request = db.PaymentRequests.Where(p => p.RecipientUser.ShortName.Trim().ToUpper() == stavka.Key && p.RequestState == PaymentRequestState.Confirmed).ToList();
                    //var request = (from p in db.PaymentRequests where p.RecipientUser.ShortName.Trim().ToUpper() == stavka.Key && p.RequestState == PaymentRequestState.Confirmed select p).ToList();
                    foreach (var p in request)
                    {
                        AccrueItem m = new AccrueItem()
                        {
                            RequestId     = p.PaymentRequestId,
                            UserShortName = stavka.Key,
                            ProjectName   = p.Project.Name,
                            UserId        = p.RecipientUser.Id,
                            ProjectId     = p.Project.ProjectId,
                            Sum           = p.SumType == PaymentRequestType.Times ? PaymentRequest.RoundSum(p.TimesOrSum * stavka.Value) : p.TimesOrSum,
                            Comments      = p.SumType == PaymentRequestType.Times ? "=" + p.TimesOrSum + " часов" : ""
                        };

                        bool find = false;
                        for (int l = 0; l < model.Accruies.Count; l++)
                        {
                            if (model.Accruies[l].ProjectId == m.ProjectId && model.Accruies[l].UserId == m.UserId)
                            {
                                find = true;
                                model.Accruies[l].Sum += m.Sum;
                            }
                        }

                        if (!find)
                        {
                            model.Accruies.Add(m);
                        }

                        model.RequestsIds.Add(p.PaymentRequestId);
                    }
                }
            }

            return(View(model));
        }