public ActionResult Edit(int id, DonationCreateViewModel modifiedData) { ValidateDonationLogEntry(modifiedData); var donationLogEntry = bddb.DonationLog.Find(id); if (ModelState.IsValid) { using (var transaction = bddb.Database.BeginTransaction()) { donationLogEntry.DonationCenterId = modifiedData.DonationCenterId; donationLogEntry.DonationDate = modifiedData.DonationDate; donationLogEntry.IsSuccessful = modifiedData.IsSuccessful; //TODO add nextdate logic donationLogEntry.NextDate = modifiedData.DonationDate.AddDays(56); donationLogEntry.Comments = modifiedData.Comments; bddb.Entry(donationLogEntry).State = EntityState.Modified; bddb.SaveChanges(); transaction.Commit(); return(Json(new { success = true })); } } AddToViewBag_DonationCenterList(); return(PartialView("_Edit", modifiedData)); }
//validation methods /// <summary> /// validates model for create type post actions /// adds model errors /// TODO: check validation need for all model properties /// </summary> /// <param name="model"></param> private void ValidateDonationLogEntry(DonationCreateViewModel model) { if (model.DonationDate > DateTime.Now) { ModelState.AddModelError(nameof(model.DonationDate), "Véradás nem rögzíthető jövőbeli dátummal."); } var query = bddb.DonationLog .Include(dl => dl.Donor) .Where(dl => dl.Donor.Email == SessionState.Current.UserEmail); if (query.Count() != 0) { var latestNextDate = query .Select(dl => dl.NextDate) .Max(); if (latestNextDate > model.DonationDate) { ModelState.AddModelError(nameof(model.DonationDate), "Véradás nem rögzíthető az előző várakozási időszak végét megelőző dátummal."); } } }
public async Task <IActionResult> Create(DonationCreateViewModel vm) { if (vm == null) { throw new ArgumentNullException(nameof(vm)); } vm.Donation.DonationDate = DateTimeOffset.Now; var donor = await GetDonor(); vm.Donation.DonorId = donor.Id; if (vm.Donation.FundraiserId == Guid.Empty) { vm.Donation.FundraiserId = vm.FundraiserId; } var donation = mapper.Map <Models.Donation>(vm.Donation); if (ModelState.IsValid) { donationService.AddDonation(donation); await donationService.SaveChangesAsync(); await fundraiserService.UpdateFundTotalAsync(vm.Donation.FundraiserId, vm.Donation.Amount); vm.Donation.Donor = donor; await signalHub.Clients.All.SendAsync("NewDonation", vm.Donation); return(RedirectToAction("DonateComplete")); } return(View(vm)); }
// GET: Donation/Create public PartialViewResult Create() { var model = new DonationCreateViewModel(); AddToViewBag_DonationCenterList(); return(PartialView("_Create", model)); }
/// <summary> /// validate manually input date of next donation /// add model error /// </summary> /// <param name="model"></param> private void ValidateManualNextDate(DonationCreateViewModel model) { if (model.NextDate < model.DonationDate) { ModelState.AddModelError(nameof(model.NextDate), "A következő véradás időpontja nem lehet korábbi a jelenlegi véradás időpontjánál."); } if (model.NextDate < DateTime.Now) { ModelState.AddModelError(nameof(model.NextDate), "A következő véradás időpontja nem lehet múltbeli időpont."); } }
public ActionResult Create(DonationCreateViewModel newData) { ValidateDonationLogEntry(newData); var donor = bddb.Donor.Where(d => d.Email == SessionState.Current.UserEmail).FirstOrDefault(); if (ModelState.IsValid) { if (newData.IsSuccessful) { CalculateNextDonationDate(newData, donor); } else { if (newData.NextDate == DateTime.MinValue) { return(PartialView("_Create_AddNextDate", newData)); } ValidateManualNextDate(newData); if (!ModelState.IsValid) { return(PartialView("_Create_AddNextDate", newData)); } } var newDonationLogEntry = new DonationLog { DonorId = donor.Id, DonationCenterId = newData.DonationCenterId, DonationDate = newData.DonationDate, IsSuccessful = newData.IsSuccessful, NextDate = newData.NextDate, Comments = newData.Comments }; using (var transaction = bddb.Database.BeginTransaction()) { bddb.DonationLog.Add(newDonationLogEntry); bddb.SaveChanges(); transaction.Commit(); return(Json(new { success = true })); } } AddToViewBag_DonationCenterList(); return(PartialView("_Create", newData)); }
// GET: Donation/Edit/5 public ActionResult Edit(int id) { var donationLogEntry = bddb.DonationLog.Find(id); var dataToModify = new DonationCreateViewModel { DonationDate = donationLogEntry.DonationDate, DonationCenterId = donationLogEntry.DonationCenterId, IsSuccessful = donationLogEntry.IsSuccessful, Comments = donationLogEntry.Comments }; AddToViewBag_DonationCenterList(); return(PartialView("_Edit", dataToModify)); }
//business logic methods /// <summary> /// calculate earliest date of next donation from this donation's date, donor's sex and donation history /// used only if current donation is successful; else manual entry of next date is requierd /// </summary> /// <param name="model"></param> /// <param name="donor"></param> private void CalculateNextDonationDate(DonationCreateViewModel model, Donor donor) { //get number of donor's successful donations for actual year var countOfThisYearsSuccessfulDonations = bddb.DonationLog .Where(l => l.DonorId == donor.Id && l.IsSuccessful && l.DonationDate.Year == DateTime.Now.Year).Count(); //check if yearly donation limit is reached, depending on sex //if so, return next date as the more distant of 56 day limit and next year's start //else return date 56 days after current donation date if ((donor.DonorSexId == 1 && countOfThisYearsSuccessfulDonations < donationLimitMale) || (donor.DonorSexId == 2 && countOfThisYearsSuccessfulDonations < donationLimitFemale)) { model.NextDate = model.DonationDate.AddDays(donationInterval); } else { var newYearStart = new DateTime(DateTime.Now.Year + 1, 1, 1); model.NextDate = (model.DonationDate.AddDays(donationInterval) > newYearStart ? model.DonationDate.AddDays(donationInterval) : newYearStart); } }
public async Task <IActionResult> Index(Guid?id) { DonationCreateViewModel vm = new DonationCreateViewModel(); vm.Donation = new DonationDto(); if (id.HasValue) { vm.Donation.FundraiserId = id.Value; var fundraiser = await fundraiserService.GetFundraiserAsync(id.Value); vm.Fundraiser = mapper.Map <FundraiserDto>(fundraiser); } else { var results = await fundraiserService.GetFundraisersAsync(); vm.Fundraisers = mapper.Map <IEnumerable <FundraiserDto> >(results) .Select(f => new SelectListItem { Text = f.Name, Value = f.Id.ToString() }) .ToList(); } return(View(vm)); }
public ActionResult Create(DonationCreateViewModel model) { if (ModelState.IsValid) { //Debug Purpose to see if we are getting the data Debug.WriteLine("I'm pulling data of Name: " + model.name + ", Amount: " + model.amount + ", Email: " + model.email + ", Anonymous: " + model.anonymous); //+ ", Card Number: " + model.number + " Card ExpMonth: " + model.expMonth //+ " Card ExpYear: " + model.expYear + " Card CVC: " + model.cvc); Donation newDonation = new Donation(); newDonation.donationName = model.name; newDonation.donationAmount = model.amount; newDonation.donationEmail = model.email; newDonation.donationAnonymous = model.anonymous; //This method is when you want the payment done on the Server Side (not safe due to sending card info.) /* * StripeConfiguration.ApiKey = "sk_test_T3BF2ap8TTDpmetCKxF038r400HAf7zrj8"; * var options = new PaymentIntentCreateOptions * { * Amount = model.amount, * Currency = "usd", * // Verify your integration in this guide by including this parameter * Metadata = new Dictionary<string, string> * { * { "integration_check", "accept_a_payment" }, * } * }; * * var service = new PaymentIntentService(); * try * { * var paymentIntent = service.Create(options); * * //Create the Payment Method * PaymentMethodCreateOptions payMethodOptions = new PaymentMethodCreateOptions * { * Type = "card", * Card = new PaymentMethodCardCreateOptions * { * Number = model.number, * ExpMonth = model.expMonth, * ExpYear = model.expYear, * Cvc = model.cvc, * }, * BillingDetails = new BillingDetailsOptions * { * Name = model.name * } * }; * * //Confirm the payment we are making * PaymentMethodService payMethodService = new PaymentMethodService(); * PaymentMethod payMethod = payMethodService.Create(payMethodOptions); * PaymentIntentConfirmOptions payOptions = new PaymentIntentConfirmOptions * { * PaymentMethod = payMethod.Id * }; * service = new PaymentIntentService(); * service.Confirm( * paymentIntent.Id, * payOptions * ); * * //Add the id for the payment in the Stripe API (Unique identifier for the object) * newDonation.donationReceiptId = paymentIntent.Id; * } * catch (Exception e) { * Debug.WriteLine(e.Message); * //Something failed, redisplay form * return View(model); * } */ //Add the object to the database db.Donations.Add(newDonation); //Save the changes in the database db.SaveChanges(); //Must confirm the payment return(RedirectToAction("CardPayment/" + newDonation.donationId)); //Go back to the list of Donation to see the added Donation (If everything is done in the Server Side) //return Redirect("List"); } //Something failed, redisplay form return(View(model)); }