Example #1
0
        public async Task<ActionResult> PostPayments(PostPaymentsViewModel paymentsVM, Guid? paymentToDelete = null, Boolean validate = false, Boolean post = false)
        {
            var ident = HttpContext.User.Identity as ClaimsIdentity;
            var tournamentId = (await (userManager.FindByIdAsync(ident.GetUserId()))).CurrentTournamentId;
            var currentTournamentId = (Guid)(tournamentId == null ? Guid.Empty : tournamentId);

            // model validation

            if (paymentsVM.Payments != null)
            {
                foreach (var payment in paymentsVM.Payments)
                {
                    //if (String.IsNullOrWhiteSpace(payment.SearchTerm)) {
                    //    ModelState.AddModelError("[" + payments.IndexOf(payment) + "].SearchTerm", Resources.TournamentManagement.Finance.Strings.ErrorSearchTermMissing);
                    //}



                    if (payment.OrganizationId != null && payment.OrganizationId != Guid.Empty)
                    {
                        var registration = registrationManager.GetRegistration(currentTournamentId, payment.OrganizationId);

                        if (registration != null)
                        {


                            payment.TeamsPaidOld = registration.TeamsPaid;

                            if (payment.TeamsPaid < payment.TeamsPaidOld)
                            {
                                ModelState.AddModelError("Payments[" + paymentsVM.Payments.IndexOf(payment) + "].TeamsPaid", Resources.TournamentManagement.Finance.Strings.ErrorTeamsPaidConfirmedNewBelowOld);
                            }

                            payment.TeamsGranted = registration.TeamsGranted;

                            if (payment.TeamsPaid > payment.TeamsGranted)
                            {
                                ModelState.AddModelError("Payments[" + paymentsVM.Payments.IndexOf(payment) + "].TeamsPaid", Resources.TournamentManagement.Finance.Strings.ErrorTeamsPaidConfirmedOverGranted);
                            }

                            payment.AdjudicatorsPaidOld = registration.AdjudicatorsPaid;

                            if (payment.AdjudicatorsPaid < payment.AdjudicatorsPaidOld)
                            {
                                ModelState.AddModelError("Payments[" + paymentsVM.Payments.IndexOf(payment) + "].AdjudicatorsPaid", Resources.TournamentManagement.Finance.Strings.ErrorTeamsPaidConfirmedNewBelowOld);
                            }

                            payment.AdjudicatorsGranted = registration.AdjudicatorsGranted;

                            if (payment.AdjudicatorsPaid > payment.AdjudicatorsGranted)
                            {
                                ModelState.AddModelError("Payments[" + paymentsVM.Payments.IndexOf(payment) + "].AdjudicatorsPaid", Resources.TournamentManagement.Finance.Strings.ErrorAdjudicatorsPaidConfirmedOverGranted);
                            }

                            payment.OrganizationId = registration.OrganizationId;
                            payment.OrganizationName = registration.Organization.Name;
                            payment.Balance = bookingManager.GetBalance(registration.OrganizationId, currentTournamentId);
                        }
                    }
                }
            }

            if (paymentToDelete != null)
            {
                var payment = paymentsVM.Payments.FirstOrDefault(
                        p => p.OrganizationId == paymentToDelete
                    );
                if (payment != null)
                {
                    paymentsVM.Payments.Remove(payment);
                }

            }

            if (ModelState.IsValid)
            {
                if (validate)
                {
                    await ValidatePayment(paymentsVM);
                }
                else if (post)
                {
                    await PostPaymentsAsync(paymentsVM.Payments);
                    return RedirectToAction("Index");
                }

            }

            return View(paymentsVM);
        }
Example #2
0
        private async Task ValidatePayment(PostPaymentsViewModel payments)
        {
            var ident = HttpContext.User.Identity as ClaimsIdentity;
            var tournamentId = (await (userManager.FindByIdAsync(ident.GetUserId()))).CurrentTournamentId;
            var currentTournamentId = (Guid)(tournamentId == null ? Guid.Empty : tournamentId);

            // Check for empty search term

            if (String.IsNullOrWhiteSpace(payments.SearchTerm))
            {
                ModelState.AddModelError("SearchTerm", Resources.TournamentManagement.Finance.Strings.ErrorSearchTermMissing);
                return;
            }

            // Find registration by booking code or organization name

            var registration = registrationManager.GetRegistration(payments.SearchTerm, currentTournamentId);
            if (!String.IsNullOrWhiteSpace(payments.SearchTerm) && registration == null)
            {
                registration = registrationManager.FindRegistrationByOrganizationName(currentTournamentId, payments.SearchTerm);
            }

            // Registration found

            if (registration != null)
            {

                // Check for duplicate

                var duplicate = payments.Payments.FirstOrDefault(p => p.OrganizationId == registration.OrganizationId);

                if (duplicate != null)
                {
                    ModelState.AddModelError(
                        "SearchTerm",
                        String.Format(
                            Resources.TournamentManagement.Finance.Strings.ErrorDuplicatePayment,
                            registration.Organization.Name
                        )
                    );
                    return;
                }

                // Calculate paid slots

                var slotsPaidResult = paymentManager.CalculatePaidSlots(currentTournamentId, registration.OrganizationId, payments.Value);


                // Build view model and add it to the to the main view model

                var viewModel = new PaymentViewModel
                {
                    AdjudicatorsPaid = slotsPaidResult.Adjudicators,
                    Balance = bookingManager.GetBalance(registration.OrganizationId, currentTournamentId),
                    Date = payments.Date,
                    Note = payments.Note,
                    Value = payments.Value,
                    OrganizationId = registration.OrganizationId,
                    OrganizationName = registration.Organization.Name,
                    TeamsPaidOld = registration.TeamsPaid,
                    TeamsPaid = slotsPaidResult.Teams,
                    TeamsGranted = registration.TeamsGranted,
                    AdjudicatorsGranted = registration.AdjudicatorsGranted
                };

                if (payments.Payments == null)
                {
                    payments.Payments = new List<PaymentViewModel>();
                }
                payments.Payments.Add(viewModel);

                // Reset input fields

                ModelState.Clear();
                payments.SearchTerm = String.Empty;
                payments.Value = 0;
                payments.Note = Resources.TournamentManagement.Finance.Strings.PaymentReceivedNote;

                //payments.Payments.Insert(0, viewModel);


                //// renumber model state entries

                //Regex rgxIndexPrefix = new Regex(@"^Payments\[\d+\]\.", RegexOptions.IgnoreCase);
                //Regex rgxDigits = new Regex(@"\d+");

                //ModelStateDictionary newModelState = new ModelStateDictionary();
                //foreach (var item in ModelState) {
                //    var indexPrefix = rgxIndexPrefix.Match(item.Key);
                //    String newKey = item.Key;
                //    if (indexPrefix.Success) {
                //        var indexString = rgxDigits.Match(indexPrefix.Value).Value;
                //        var index = int.Parse(indexString);
                //        index++;
                //        newKey = rgxIndexPrefix.Replace(item.Key, "Payments[" + index + "].");
                //    }
                //    newModelState.Add(newKey, item.Value);
                //}
                //ModelState.Clear();

                //foreach (var item in newModelState) {
                //    ModelState.Add(item);
                //}
            }
            else
            {
                ModelState.AddModelError("SearchTerm", Resources.TournamentManagement.Finance.Strings.ErrorSearchTermNotFound);
            }
        }
Example #3
0
 public ActionResult PostPayments()
 {
     PostPaymentsViewModel vm = new PostPaymentsViewModel
     {
         Date = DateTime.Today,
         Value = 0,
         SearchTerm = string.Empty,
         Note = Resources.TournamentManagement.Finance.Strings.PaymentReceivedNote
     };
     return View(vm);
 }