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)); }