PaymentsGroupViewModel getPaymentsGroupViewModel(PaymentsGroup paymentsGroup) { PaymentsGroupViewModel model = new PaymentsGroupViewModel(); model.Header = getPG_HeaderViewModel(paymentsGroup); List <Project> Projects = paymentsGroup.UsersPayments.Select(n => n.Project).Distinct().ToList(); model.ProjectsNames = Projects.Select(n => n.Name).ToArray(); model.ProjectsIds = Projects.Select(n => n.ProjectId).ToArray(); for (int i = 0; i < model.Header.UserIds.Length; i++) { model.Header.Payments[i] = new double[model.ProjectsIds.Length]; } for (int i = 0; i < model.Header.UserNames.Length; i++) { Dictionary <int, double> up = paymentsGroup.UsersPayments.Where(x => x.User.Id == model.Header.UserIds[i]).ToDictionary(z => z.Project.ProjectId, z => z.Sum); for (int j = 0; j < model.ProjectsIds.Length; j++) { model.Header.Payments[i][j] = up.ContainsKey(model.ProjectsIds[j]) ? up[model.ProjectsIds[j]] : -1; } } return(model); }
public ActionResult AddPaymentLine(PG_ListViewModel input) { IsAddPaymentLine = true; PaymentsGroup g = db.PaymentsGroups.Find(input.Header.PaymentsGroupId); if (g != null) { if (!string.IsNullOrEmpty(input.NewUserPaymentName) && input.NewUserPaymentProject != null && input.NewUserPaymenSum != null) { var b = db.UserBalances.SingleOrDefault(x => x.User.FullName == input.NewUserPaymentName && x.Project.ProjectId == input.NewUserPaymentProject); if (b != null) { var pm = g.UsersPayments.FirstOrDefault(x => x.Project.ProjectId == input.NewUserPaymentProject); if (pm == null) { if (b.Sum >= (int)input.NewUserPaymenSum && (int)input.NewUserPaymenSum != 0) { UserPayment p = new UserPayment() { User = b.User, Project = b.Project, Sum = (double)input.NewUserPaymenSum, PaymentGroup = db.PaymentsGroups.Find(input.Header.PaymentsGroupId) }; db.UserPayments.Add(p); db.SaveChanges(); input = getPG_ListsViewModel(input.Header.PaymentsGroupId); } else { ModelState.AddModelError("", "Ошибка, сумма платежа превышает баланс или равна нулю"); input.NewUserPaymentName = ""; return(View("Edit", input)); } } else { ModelState.AddModelError("", "Ошибка, выплата по проекту уже есть в ведомости"); input.NewUserPaymentName = ""; return(View("Edit", input)); } } else { ModelState.AddModelError("", "Ошибка, нет выплат по проекту"); input.NewUserPaymentName = ""; return(View("Edit", input)); } } } input.NewUserPaymentName = ""; return(Edit(input)); }
public Payment(PaymentsGroup _parent, string payment_date, string service_name, decimal payment_value, string _isp_inn, string _isp_name, int _isp_id, int _isSent) { IspId = _isp_id; IsSent = _isSent; Parent = _parent; Date = payment_date; Service = service_name; Value = payment_value; Parent.Total += Value; Isp_inn = _isp_inn; Isp_name = _isp_name; }
public ActionResult DeleteConfirmed(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } PaymentsGroup paymentsGroup = db.PaymentsGroups.Find(id); db.UserPayments.RemoveRange(db.UserPayments.Where(x => x.PaymentGroup.PaymentsGroupId == id)); db.PaymentsGroups.Remove(paymentsGroup); db.SaveChanges(); return(RedirectToAction("Index")); }
public JsonResult UserBalances(string FullName, int PaymentsGroupId) { PaymentsGroup g = db.PaymentsGroups.Find(PaymentsGroupId); List <UserProjectBalance> list = new List <UserProjectBalance>(); if (g != null) { var projects = (from p in g.UsersPayments select p.Project.ProjectId).ToList(); var res = (from b in db.UserBalances where b.User.FullName == FullName && b.Sum > 0 && !projects.Contains(b.Project.ProjectId) select new UserProjectBalance { Name = b.Project.Name, ProjectId = b.Project.ProjectId, Sum = b.Sum }); list = res.ToList(); } return(Json(list, JsonRequestBehavior.AllowGet)); }
public object Clone() { var _clonedPayments = this.PaymentsCollection.Select(i => (Payment)i.Clone()).ToList(); this.Total = _clonedPayments.Select(i => i.Parent.Total).Sum(); _clonedPayments.Select(i => i.Parent = null); ObservableCollection <Payment> clonedPayments = new ObservableCollection <Payment>(_clonedPayments); PaymentsGroup clonedObject = new PaymentsGroup(this.IsCorrect, this.PackId, this.Occ, this.PaymentId, this.Email, clonedPayments, this.Source, this.Pack_date, this.Vipiska_id, this.Vipiska_date, this.Pack_total, this.Docsnum); foreach (Payment item in clonedObject.PaymentsCollection) { item.Parent = clonedObject; } clonedObject.Total = this.Total; return(clonedObject); }
PG_HeaderViewModel getPG_HeaderViewModel(PaymentsGroup paymentsGroup) { PG_HeaderViewModel Header = new PG_HeaderViewModel(); Header.State = paymentsGroup.State; Header.WhenCreated = paymentsGroup.WhenCreated; Header.WhenPaidOut = paymentsGroup.WhenPaidOut; Header.UserClosed = paymentsGroup.UserClosed; Header.PaymentsGroupId = paymentsGroup.PaymentsGroupId; List <ApplicationUser> users = paymentsGroup.UsersPayments != null?paymentsGroup.UsersPayments.Select(p => p.User).Distinct().ToList() : new List <ApplicationUser>(); Header.UserNames = users.Select(x => x.ShortName == null ? x.UserName : x.ShortName).ToArray(); Header.UserIds = users.Select(x => x.Id).ToArray(); Header.Payments = new double[Header.UserIds.Length][]; return(Header); }
PG_ListViewModel getPG_ListsViewModel(PaymentsGroup paymentsGroup) { PG_ListViewModel model = new PG_ListViewModel(); model.Header = getPG_HeaderViewModel(paymentsGroup); model.ProjectNames = new string[model.Header.UserIds.Length][]; model.ProjectIds = new int[model.Header.UserIds.Length][]; model.Header.Payments = new double[model.Header.UserIds.Length][]; model.Header.RegularPayments = new double[model.Header.UserIds.Length][]; model.Balances = new double[model.Header.UserIds.Length][]; for (int i = 0; i < model.Header.UserNames.Length; i++) { var list = paymentsGroup.UsersPayments.Where(x => x.User.Id == model.Header.UserIds[i]).ToList(); model.ProjectNames[i] = new string[list.Count]; model.ProjectIds[i] = new int[list.Count]; model.Header.Payments[i] = new double[list.Count]; model.Header.RegularPayments[i] = new double[list.Count]; model.Balances[i] = new double[list.Count]; for (int j = 0; j < list.Count; j++) { model.ProjectNames[i][j] = list[j].Project.Name; model.ProjectIds[i][j] = list[j].Project.ProjectId; model.Header.Payments[i][j] = list[j].Sum - list[j].RegularPaymentSum; model.Header.RegularPayments[i][j] = list[j].RegularPaymentSum; } for (int j = 0; j < model.ProjectIds[i].Length; j++) { string uid = model.Header.UserIds[i]; int pid = model.ProjectIds[i][j]; var b = db.UserBalances.FirstOrDefault(x => x.User.Id == uid && x.Project.ProjectId == pid); model.Balances[i][j] = b == null ? 0 : b.Sum; } } model.NewUserPaymentName = ""; model.NewUserPaymenSum = null; return(model); }
public ActionResult EditByTable(PaymentsGroupViewModel model) { if (ModelState.IsValid) { PaymentsGroup paymentsGroup = db.PaymentsGroups.Find(model.Header.PaymentsGroupId); if (paymentsGroup != null) { bool was_apply = false; bool has_error = false; for (int i = 0; i < model.Header.UserIds.Length; i++) { ApplicationUser user = db.Users.Find(model.Header.UserIds[i]); if (user != null) { for (int j = 0; j < model.ProjectsIds.Length; j++) { if (model.Header.Payments[i][j] == -1) { continue; } UserBalance user_b = user.UserBalances.FirstOrDefault(x => x.Project.ProjectId == model.ProjectsIds[j]); UserPayment user_p = paymentsGroup.UsersPayments.FirstOrDefault(x => x.Project.ProjectId == model.ProjectsIds[j] && x.User.Id == model.Header.UserIds[i]); if (user_b != null && user_p != null) { if (user_b.Sum >= model.Header.Payments[i][j]) { if (model.Header.State == PaymentsGroupState.PaidOut) { user_b.Sum -= model.Header.Payments[i][j]; } user_p.Sum = model.Header.Payments[i][j]; was_apply = true; } else { has_error = true; ModelState.AddModelError("", "Сумма платежа первышает остаток, Пользователь " + model.Header.UserNames[i] + " Проект " + model.ProjectsNames[j]); } } else { has_error = true; if (user_b == null) { ModelState.AddModelError("", "Не найден счет, Пользователь " + model.Header.UserNames[i] + " Проект " + model.ProjectsNames[j]); } if (user_p == null) { ModelState.AddModelError("", "Не найден платеж, Пользователь " + model.Header.UserNames[i] + " Проект " + model.ProjectsNames[j]); } } } } else { has_error = true; ModelState.AddModelError("", "Пользователь " + model.Header.UserNames[i] + " не найден"); } } if (was_apply && !has_error) { var UserManager = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(db)); string uid = User.Identity.GetUserId(); ApplicationUser admin = db.Users.FirstOrDefault(x => x.Id == uid); if (model.Header.State == PaymentsGroupState.PaidOut) { paymentsGroup.UserClosed = admin; paymentsGroup.State = PaymentsGroupState.PaidOut; paymentsGroup.WhenPaidOut = DateTime.Now; } db.SaveChanges(); return(RedirectToAction("Index")); } else { if (!was_apply) { ModelState.AddModelError("", "В счете не найдено корректных платежей"); } } } else { ModelState.AddModelError("", "Счет не найден, id=" + model.Header.PaymentsGroupId); } } else { ModelState.AddModelError("", "Ошибка ввода "); } return(View(model)); }
PG_ListViewModel getPG_ListsViewModel(int?id) { PaymentsGroup paymentsGroup = db.PaymentsGroups.Find(id); return(paymentsGroup == null ? null : getPG_ListsViewModel(paymentsGroup)); }
public ActionResult Edit(PG_ListViewModel model) { PG_EditErrors.Clear(); bool was_apply = false; bool has_error = false; if (ModelState.IsValid) { PaymentsGroup paymentsGroup = db.PaymentsGroups.Find(model.Header.PaymentsGroupId); if (paymentsGroup != null) { for (int i = 0; i < model.Header.UserIds.Length; i++) { ApplicationUser user = db.Users.Find(model.Header.UserIds[i]); if (user != null) { for (int j = 0; j < model.ProjectIds[i].Length; j++) { UserBalance user_b = user.UserBalances.FirstOrDefault(x => x.Project.ProjectId == model.ProjectIds[i][j]); UserPayment user_p = paymentsGroup.UsersPayments.FirstOrDefault(x => x.Project.ProjectId == model.ProjectIds[i][j] && x.User.Id == model.Header.UserIds[i]); if (user_b == null) { user_b = db.UserBalances.Add(new UserBalance() { Project = db.Projects.Find(model.ProjectIds[i][j]), Sum = 0, User = user }); db.SaveChanges(); } if (user_b != null && user_p != null) { if (user_b.Sum >= model.Header.Payments[i][j]) { if (model.Header.State == PaymentsGroupState.PaidOut) { user_b.Sum -= model.Header.Payments[i][j]; } user_p.Sum = model.Header.Payments[i][j] + model.Header.RegularPayments[i][j]; user_p.RegularPaymentSum = model.Header.RegularPayments[i][j]; was_apply = true; } else { has_error = true; PG_EditErrors.Add("Сумма платежа первышает остаток, Пользователь " + model.Header.UserNames[i] + " Проект " + model.ProjectNames[i][j]); } } } } else { has_error = true; PG_EditErrors.Add("Пользователь " + model.Header.UserNames[i] + " не найден"); } } if (was_apply && !has_error) { var UserManager = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(db)); string uid = User.Identity.GetUserId(); ApplicationUser admin = db.Users.FirstOrDefault(x => x.Id == uid); if (model.Header.State == PaymentsGroupState.PaidOut) { paymentsGroup.UserClosed = admin; paymentsGroup.State = PaymentsGroupState.PaidOut; paymentsGroup.WhenPaidOut = DateTime.Now; // создаем список рассылки foreach (var p in paymentsGroup.UsersPayments) { db.JobForMailings.Add(new JobForMailing() { UserPayment = p }); } HostingEnvironment.QueueBackgroundWorkItem(cancellationToken => new MailSendWorker().SendPaidOut(cancellationToken)); } db.SaveChanges(); foreach (var err in PG_EditErrors) { ModelState.AddModelError("", err); } if (IsAddPaymentLine) { return(RedirectToAction("Edit/" + model.Header.PaymentsGroupId)); } else { return(RedirectToAction("Index")); } } else { if (!was_apply) { PG_EditErrors.Add("В счете не найдено корректных платежей"); } } } else { ModelState.AddModelError("", "Счет не найден, id=" + model.Header.PaymentsGroupId); } } else { ModelState.AddModelError("", "Ошибка ввода "); } if (!was_apply || has_error) { foreach (var err in PG_EditErrors) { ModelState.AddModelError("", err); } } return(View(model)); }
public ActionResult UploadForm(RateUploadModel input) { Dictionary <string, double> stavki = new Dictionary <string, double>(); if (ModelState.IsValid) { if (input.UploadFile != null) { using (var package = new ExcelPackage(input.UploadFile.InputStream)) { var Sheet = package.Workbook.Worksheets[1]; int lastRow = Sheet.Dimension.End.Row; int lastCol = Sheet.Dimension.End.Column; int i = 5; do { if (Sheet.Cells[i, 1].Value != null && Sheet.Cells[i, 5].Value != null) { if (!String.IsNullOrEmpty(Sheet.Cells[i, 1].Value.ToString())) { if (!String.IsNullOrEmpty(Sheet.Cells[i, 5].Value.ToString())) { double v; if (double.TryParse(Sheet.Cells[i, 5].Value.ToString(), out v)) { stavki.Add(Sheet.Cells[i, 1].Value.ToString().Trim().Replace(". ", ".").Replace(". ", ".").ToUpper(), v); } } } } i++; } while (i <= lastRow); PaymentsGroup pg = new PaymentsGroup() { State = PaymentsGroupState.InProcess, WhenCreated = DateTime.Now, WhenPaidOut = DateTime.Now }; pg = db.PaymentsGroups.Add(pg); foreach (KeyValuePair <string, double> s in stavki) { ApplicationUser user = db.Users.FirstOrDefault(x => x.ShortName.Replace(". ", ".").ToUpper() == s.Key.Replace(". ", ".").ToUpper()); if (user != null) { double limit = input.SalaryRate * s.Value / 100; double c_sum = 0; foreach (var b in user.UserBalances.OrderBy(x => x.Sum).ToList()) { if (b.Sum == 0) { continue; } UserPayment p = null; if (b.Sum > (limit - c_sum)) { double rsum = PaymentRequest.TruncSum(limit - c_sum); if (((uint)rsum) == 0) { continue; } p = new UserPayment() { PaymentGroup = pg, Project = b.Project, User = user, Sum = rsum }; p = db.UserPayments.Add(p); break; } else { double rsum = PaymentRequest.TruncSum(b.Sum); if (((uint)rsum) == 0) { continue; } p = new UserPayment() { PaymentGroup = pg, Project = b.Project, User = user, Sum = rsum }; c_sum += p.Sum; p = db.UserPayments.Add(p); } } } else { ModelState.AddModelError("", "в БД не найден " + s.Key); } } db.SaveChanges(); if (input.regularPaymentIds != null) { // обработка регулярных платежей for (int l = 0; l < input.regularPaymentIds.Length; l++) { if (input.accrueRegularPayments[l]) { RegularPayment rp = db.RegularPayments.Find(input.regularPaymentIds[l]); if (rp != null) { // проверяем дату DateTime d_from = rp.PayoutFrom == null ? new DateTime(DateTime.Now.Year - 10, DateTime.Now.Month, 1) : new DateTime(rp.PayoutFrom.Value.Year, rp.PayoutFrom.Value.Month, 1); DateTime d_to = rp.PayoutTo == null ? new DateTime(DateTime.Now.Year + 10, DateTime.Now.Month, 1) : new DateTime(rp.PayoutTo.Value.Year, rp.PayoutTo.Value.Month, 1); DateTime d_now = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); if (d_now >= d_from && d_now <= d_to) { UserPayment p = pg.UsersPayments.FirstOrDefault(x => x.Project.ProjectId == rp.Project.ProjectId && x.User.Id == rp.RecipientUser.Id); if (p == null) { p = db.UserPayments.Add(new UserPayment { PaymentGroup = pg, Project = rp.Project, User = rp.RecipientUser, Sum = 0 }); } p.Sum += rp.Sum; p.RegularPaymentSum = rp.Sum; db.SaveChanges(); } } } } } return(RedirectToAction("CreateConfirm/" + pg.PaymentsGroupId)); } } else { UploadFormErros.Add("Не выбран файл ставок"); } } return(RedirectToAction("UploadForm")); }
private string TryImportUserPayments(AppDbContext db, ApplicationUser user_ctx, string fio) // возвращает ексель имя пользователя { string shortname = null; var q1 = db.ImportUsers.Where(x => x.Fio.ToUpper().Replace("Ё", "Е") == fio).ToList(); foreach (var item in q1) { shortname = item.Fio; Department department = user_ctx.Department;// db.Departments.SingleOrDefault(x => x.Name == item.Department); if (department == null) { department = new Department() { Name = item.Department.Name }; db.Departments.Add(department); db.SaveChanges(); } Project project = db.Projects.SingleOrDefault(x => x.Name == item.Project); if (project == null) { project = new Project() { Name = item.Project, Department = department, Description = "", WhenWasClosed = DateTime.Now.AddMonths(6) }; db.Projects.Add(project); db.SaveChanges(); } foreach (var p in item.ImportUserPayments) { PaymentsGroup pgrp = db.PaymentsGroups.FirstOrDefault(x => x.WhenPaidOut == p.WhenPaidOut && x.State == p.State); if (pgrp == null) { pgrp = new PaymentsGroup() { WhenPaidOut = p.WhenPaidOut, State = p.State }; db.PaymentsGroups.Add(pgrp); } UserPayment payment = new UserPayment() { User = user_ctx, Project = project, Sum = p.Sum, PaymentGroup = pgrp }; payment = db.UserPayments.Add(payment); // пополняем баланс, если не выплачено var user_balance = db.UserBalances.FirstOrDefault(x => x.User.Id == user_ctx.Id && x.Project.ProjectId == payment.Project.ProjectId); if (user_balance == null) { user_balance = new UserBalance() { User = user_ctx, Project = payment.Project, Sum = 0 }; db.UserBalances.Add(user_balance); } if (pgrp.State == PaymentsGroupState.InProcess) { user_balance.Sum += payment.Sum; } db.SaveChanges(); } db.ImportUserPayments.RemoveRange(item.ImportUserPayments); db.SaveChanges(); } db.ImportUsers.RemoveRange(q1); db.SaveChanges(); return(shortname); }