/// <summary> /// GET: /Transaction/Checkout/{id} /// </summary> /// <param name="id">Item id</param> /// <param name="referenceId">Reference Number for external applications</param> /// <param name="coupon"></param> /// <param name="password"> </param> /// <param name="agribusinessExtraParams"></param> /// <returns></returns> public ActionResult Checkout(int id, string referenceId, string coupon, string password, AgribusinessExtraParams agribusinessExtraParams = null) { var item = Repository.OfType<Item>().GetNullableById(id); if (item == null) { Message = NotificationMessages.STR_ObjectNotFound.Replace(NotificationMessages.ObjectType, "Item"); return this.RedirectToAction<HomeController>(a => a.Index()); } var viewModel = ItemDetailViewModel.Create(Repository, _openIdUserRepository, item, CurrentUser.Identity.Name, referenceId, coupon, password); viewModel.Quantity = 1; viewModel.Answers = PopulateItemTransactionAnswer(viewModel.OpenIdUser, item.QuestionSets); // populate the open id stuff for transaction answer contact information if(!viewModel.Answers.Any()) { viewModel.Answers = PopulateItemTransactionAnswer(agribusinessExtraParams, item.QuestionSets); } viewModel.TotalAmountToRedisplay = viewModel.Quantity*item.CostPerItem; viewModel.CouponAmountToDisplay = 0.0m; //They have not entered a coupon yet viewModel.CouponTotalDiscountToDisplay = 0.0m; return View(viewModel); }
/// <summary> /// This one is used for Agribusiness to pass these values. /// </summary> /// <param name="agribusinessExtraParams"></param> /// <param name="questionSets"></param> /// <returns></returns> private IEnumerable<ItemTransactionAnswer> PopulateItemTransactionAnswer(AgribusinessExtraParams agribusinessExtraParams, ICollection<ItemQuestionSet> questionSets) { var answers = new List<ItemTransactionAnswer>(); // if anything is null, just return no answers if(agribusinessExtraParams == null || questionSets == null) return answers; // find the contact information question set var questionSet = questionSets.Where(a => a.QuestionSet.Name == StaticValues.QuestionSet_ContactInformation).Select(a => a.QuestionSet).FirstOrDefault(); // if it exists, fill in the questions if(questionSet != null) { var questionAnswer = new Dictionary<string, string>(); questionAnswer.Add(StaticValues.Question_FirstName, agribusinessExtraParams.FN); questionAnswer.Add(StaticValues.Question_LastName, agribusinessExtraParams.LN); questionAnswer.Add(StaticValues.Question_Title, agribusinessExtraParams.Title); questionAnswer.Add(StaticValues.Question_StreetAddress, agribusinessExtraParams.Address); questionAnswer.Add(StaticValues.Question_AddressLine2, agribusinessExtraParams.Address2); questionAnswer.Add(StaticValues.Question_City, agribusinessExtraParams.City); questionAnswer.Add(StaticValues.Question_State, agribusinessExtraParams.State != null ? agribusinessExtraParams.State.Trim().ToUpper() : string.Empty); questionAnswer.Add(StaticValues.Question_Zip, agribusinessExtraParams.Zip); questionAnswer.Add(StaticValues.Question_PhoneNumber, agribusinessExtraParams.Phone != null ? agribusinessExtraParams.Phone.Replace('.', '-') : string.Empty); questionAnswer.Add(StaticValues.Question_Email, agribusinessExtraParams.Email); foreach(var question in questionSet.Questions) { //If it doesn't find the question, it will throw an exception. (a good thing.) var ans = questionAnswer[question.Name]; // create the answer object var answer = new ItemTransactionAnswer() { Answer = ans, QuestionId = question.Id, QuestionSetId = question.QuestionSet.Id, Transaction = true }; answers.Add(answer); } } return answers; }