Example #1
0
        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));
        }
Example #2
0
        // GET: PaymentsGroups/Delete/5
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PG_ListViewModel model = getPG_ListsViewModel(id);

            if (model == null)
            {
                return(HttpNotFound());
            }
            return(View(model));
        }
Example #3
0
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            db.UserPayments.RemoveRange(db.UserPayments.Where(x => x.PaymentGroup.PaymentsGroupId == id && x.Sum == 0));
            PG_ListViewModel model = getPG_ListsViewModel(id);

            if (model == null)
            {
                return(HttpNotFound());
            }
            return(View(model));
        }
Example #4
0
        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);
        }
Example #5
0
 public ActionResult SaveEdit(PG_ListViewModel input)
 {
     if (input != null)
     {
         if (input.Header != null)
         {
             Edit(input);
             db.UserPayments.RemoveRange(db.UserPayments.Where(x => x.PaymentGroup.PaymentsGroupId == input.Header.PaymentsGroupId && x.Sum == 0));
             db.SaveChanges();
             if (PG_EditErrors.Count == 0 && input.Header.State == PaymentsGroupState.PaidOut)
             {
                 return(RedirectToAction("Index"));
             }
             else
             {
                 return(View(input));
             }
         }
     }
     ModelState.AddModelError("", "Неверный запрос");
     return(View("Edit", input));
 }
Example #6
0
        // GET: PaymentsGroups/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            db.UserPayments.RemoveRange(db.UserPayments.Where(x => x.PaymentGroup.PaymentsGroupId == id && x.Sum == 0));
            db.SaveChanges();

            PG_ListViewModel model = getPG_ListsViewModel(id);

            if (model == null)
            {
                return(HttpNotFound());
            }
            if (PG_EditErrors == null)
            {
                PG_EditErrors = new List <string>();
            }
            PG_EditErrors.Clear();
            model.Header.ShowEditable = true;
            return(View("Edit", model));
        }
Example #7
0
        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));
        }