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); }
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); } }
public ActionResult PostPayments() { PostPaymentsViewModel vm = new PostPaymentsViewModel { Date = DateTime.Today, Value = 0, SearchTerm = string.Empty, Note = Resources.TournamentManagement.Finance.Strings.PaymentReceivedNote }; return View(vm); }