private void SendEmail(TicketOrderViewModel ticketOrderViewModel) { IUserMailer userMailer = new UserMailer(); var email = userMailer.SendTicketOrder(ticketOrderViewModel); email.Send(); }
public ActionResult OrderConfirmation(TicketOrderViewModel ticketOrderViewModel) { ticketOrderViewModel.CategoryOrders = new List <TicketCategoryOrderViewModel>(); using (ApplicationDbContext context = new ApplicationDbContext()) { var ticketOrder = context.TicketOrders.Single(to => to.VariableSymbol == ticketOrderViewModel.VariableSymbol && to.ProjectID == ticketOrderViewModel.ProjectID); var project = context.Projects.Include("BankProxy.FioBankProxy").Single(p => p.ProjectID == ticketOrderViewModel.ProjectID); ticketOrderViewModel.IBAN = project.BankProxy.FioBankProxy.IBAN; ticketOrderViewModel.SWIFT = project.BankProxy.FioBankProxy.BIC; ticketOrderViewModel.MessageForPayee = "/VS/" + ticketOrderViewModel.VariableSymbol; var results = context.TicketCategoryOrders.Where(to => to.TicketOrderID == ticketOrder.TicketOrderID).Include(tco => tco.TicketCategory); foreach (var result in results) { ticketOrderViewModel.CategoryOrders.Add(new TicketCategoryOrderViewModel() { Header = result.TicketCategory.HeaderCZ, Ordered = result.Count, TotalPrice = result.Count * result.TicketCategory.Price }); } } SetLocalization(ticketOrderViewModel); SendEmail(ticketOrderViewModel); return(View("~/Views/Tickets/TicketOrderLocalized.cshtml", ticketOrderViewModel)); }
public ActionResult BuyNewCard(TicketOrderViewModel ticketOrderViewModel) { ticketOrderViewModel.creditCard.UserName = ticketOrderViewModel.userName; ticketOrderViewModel.ticketOrder.Username = ticketOrderViewModel.userName; ticketOrderViewModel.ticketOrder.CardNumber = ticketOrderViewModel.creditCard.CardNumber; ticketOrderViewModel.creditCard.insert(); ticketOrderViewModel.ticketOrder.insert(); return(View("~/Views/TicketOrder/OrderSuccess.cshtml", ticketOrderViewModel)); }
public ActionResult SelectShowing(String theaterID, String userName, String movieName) { TicketOrderViewModel ticketOrderViewModel = new TicketOrderViewModel(); ticketOrderViewModel.userName = userName; ticketOrderViewModel.showings = Showing.GetFutureShowings(movieName, theaterID); ticketOrderViewModel.theater = Theater.GetTheater(theaterID); ticketOrderViewModel.movieName = movieName; ticketOrderViewModel.theaterID = theaterID; return(View("~/Views/TicketOrder/SelectShowing.cshtml", ticketOrderViewModel)); }
public ActionResult EnterTickets(String theaterID, String userName, String movieName, String showingID) { TicketOrderViewModel ticketOrderViewModel = new TicketOrderViewModel(); ticketOrderViewModel.userName = userName; ticketOrderViewModel.theaterID = theaterID; ticketOrderViewModel.systemInfo.GetDiscounts(); ticketOrderViewModel.movieName = movieName; ticketOrderViewModel.showingID = showingID; ticketOrderViewModel.ticketOrder.ShowingID = showingID;//DO NOT REMOVE THIS return(View("~/Views/TicketOrder/EnterTickets.cshtml", ticketOrderViewModel)); }
public ActionResult Buy(String creditCard, int adultTickets, int childTickets, int seniorTickets, String userName, String theaterID, String movieName, String showingID) { TicketOrderViewModel ticketOrderViewModel = new TicketOrderViewModel(); ticketOrderViewModel.ticketOrder.CardNumber = creditCard; ticketOrderViewModel.ticketOrder.AdultTickets = adultTickets; ticketOrderViewModel.ticketOrder.ChildTickets = childTickets; ticketOrderViewModel.ticketOrder.SeniorTickets = seniorTickets; ticketOrderViewModel.ticketOrder.Username = userName; ticketOrderViewModel.ticketOrder.ShowingID = showingID; //ticketOrderViewModel.ticketOrder.Cost = 999.999; ticketOrderViewModel.ticketOrder.insert(); return(View("~/Views/TicketOrder/OrderSuccess.cshtml", ticketOrderViewModel)); }
public ActionResult EnterCardNumber(TicketOrderViewModel ticketOrderViewModel) { //TicketOrderViewModel ticketOrderViewModel = new TicketOrderViewModel(); //ticketOrderViewModel.userName = userName; //ticketOrderViewModel.theaterID = theaterID; //ticketOrderViewModel.systemInfo.GetDiscounts(); //ticketOrderViewModel.movieName = movieName; //ticketOrderViewModel.ticketOrder.AdultTickets = adultTickets; //ticketOrderViewModel.ticketOrder.ChildTickets = childTickets; //ticketOrderViewModel.ticketOrder.SeniorTickets = seniorTickets; CreditCardAccountUserViewModel creditCardAccountUserViewModel = new CreditCardAccountUserViewModel(); creditCardAccountUserViewModel.user = new AccountUser(); creditCardAccountUserViewModel.user.Username = ticketOrderViewModel.userName; creditCardAccountUserViewModel.loadSavedCards(); ticketOrderViewModel.creditCards = creditCardAccountUserViewModel.savedCards; return(View("~/Views/TicketOrder/EnterCardNumber.cshtml", ticketOrderViewModel)); }
private void SetLocalization(TicketOrderViewModel viewModel) { //TODO: Set cookie, create button to set cookie/localization response bla bla bool isEnglish = false; bool isJunkTown = viewModel.ProjectID == 3; var cookie = Request.Cookies[LocalizationCookie]; if (cookie != null) { if (cookie.Value == "en") { isEnglish = true; } } TicketFinalOrderLocalization ticketFinalOrderLocalization = new TicketFinalOrderLocalization(); if (isEnglish) { if (isJunkTown) { ticketFinalOrderLocalization.FinalizedHdr = "Reservation completed"; ticketFinalOrderLocalization.OrderedTicketsHdr = "Reserved places on Junktown 2017 festival"; ticketFinalOrderLocalization.TicketCountHdr = "Reserved places"; ticketFinalOrderLocalization.TicketTotalPriceHdr = "Total membership fee"; ticketFinalOrderLocalization.ToYourEmail2 = " we've sent you a copy of reservation."; ticketFinalOrderLocalization.PaymentInfo1 = ""; ticketFinalOrderLocalization.PaymentInfo1 = ""; ticketFinalOrderLocalization.PaymentInfo1 = ""; ticketFinalOrderLocalization.PaymentInfo1 = ""; } else { ticketFinalOrderLocalization.OrgNoteHdr = "Message from organizer"; ticketFinalOrderLocalization.MessageForRecipient = "Message for recipient"; ticketFinalOrderLocalization.InternationPaymentHdr = "Internation payment"; ticketFinalOrderLocalization.PaymentInformation = "Payment info"; ticketFinalOrderLocalization.FinalizedHdr = "Order completed"; ticketFinalOrderLocalization.OrderedTicketsHdr = "Ordered tickets"; ticketFinalOrderLocalization.TicketCountHdr = "Ordered tickets"; ticketFinalOrderLocalization.TicketTotalPriceHdr = "Total price"; ticketFinalOrderLocalization.ToYourEmail2 = " we've sent you a copy of order."; ticketFinalOrderLocalization.PaymentInfo1 = "Payment for ordered tickets please make by bank transfer."; ticketFinalOrderLocalization.PaymentInfo2 = "After we register your complete payment we'll send your ticket on your email address."; ticketFinalOrderLocalization.PaymentInfo3 = "Due date is latest day of registering your payment on our account."; ticketFinalOrderLocalization.PaymentInfo4 = "After due date this order will not be valid. Create new order for buing a ticket."; } ticketFinalOrderLocalization.ToYourEmail1 = "To your email:"; ticketFinalOrderLocalization.CategoryHdr = "Category"; ticketFinalOrderLocalization.AccountNumberHdr = "Bank account number: "; ticketFinalOrderLocalization.VSHeader = "Variable symbol:"; ticketFinalOrderLocalization.KSHeader = "Constant symbol:"; ticketFinalOrderLocalization.DueDateHdr = "Due date:"; } else { if (isJunkTown) { ticketFinalOrderLocalization.FinalizedHdr = "Rezervace dokončena"; ticketFinalOrderLocalization.OrderedTicketsHdr = "Rezervovaná místa na spolkovém festivalu Junktown 2017"; ticketFinalOrderLocalization.TicketCountHdr = "Rezervovaných míst"; ticketFinalOrderLocalization.TicketTotalPriceHdr = "Celková výše stanoveného členského příspěvku"; ticketFinalOrderLocalization.ToYourEmail2 = " Vám byla odeslána kopie vytvořené rezervace."; ticketFinalOrderLocalization.PaymentInfo1 = "Po připsání celkové částky / příspěvku na účet pořadatele / spolku Vám bude obratem na tento Email odesláno potvrzení o úspěšné úhradě členského příspěvku, které vás na základě interních předpisů spolku opravňuje ke vstupu na příslušný ročník spolkového festivalu Junktown 2017."; ticketFinalOrderLocalization.PaymentInfo2 = "Datum splatnosti je nejpozdější datum, kdy musí být připsán vámi uhrazený členský příspěvek na příslušný účet spolku, přičemž nestane-li se tak, propadne Vám tím zcela Vaše rezervace příslušných míst na spojkovém festivalu Junktown 2017."; ticketFinalOrderLocalization.PaymentInfo3 = "ZÁKONNÉ POUČENÍ / PLATEBNÍ PODMÍNKY:"; ticketFinalOrderLocalization.PaymentInfo4 = "Projekt Junktown (dále jen „Projekt“) a akce Junktown 2017 (dále jen „Akce“) je realizována pod záštitou Občanského sdružení Alternativa II, z.s. (dále jen „Spolku“) na spolkové neziskové a nespotřebitelské členské bázi dle stanov Spolku (dále jen „Stanov“), za účelem rekultivace objektu bývalé raketové základny Bratronice a naplňování vybraných oblastí spolkového poslání, kterým je podpora aktivního bytí, seberealizace, vědy, kultury, sportu, tělovýchovy, vzdělávání, občanské angažovanosti, volnočasového vyžití, jakož i všech ostatních aktivit směřujících k všestrannému rozvoji jedince i společnosti. Veškeré platby ve prospěch projektu Junktown jsou přijímány Spolkem výhradně ve formě členských příspěvků (neboli zkráceně jen „příspěvků“) stanovovaných Spolkem na základě § 233 zákona č. 89/2012 Sb. (dále jen „NOZ“), přičemž upozorňujeme, že dobrovolná úhrada příspěvku stanoveného příslušným orgánem Spolku je dle spolkových Stanov považována současně i za projev vůle ve smyslu § 233 (2) NOZ, na základě čehož plátci stanoveného příspěvku vzniká nejpozději okamžikem přijetí příspěvku ze strany Spolku v souladu se Stanovami a interními předpisy bezzávazkový členský status „podporovatel“ Projektu a řadové neregistrované členství ve Spolku, které příslušného člena opravňuje ve Spolkem stanoveném rozsahu navštěvovat prostory Projektu, účastnit se Akcí Projektu a čerpat příslušné členské výhody a služby Projektu poskytované „podporovatelům“ Projektu výhradně a pouze na spolkové neziskové a nespotřebitelské bázi v rámci hlavní činnosti Spolku za účelem realizace spolkového poslání a efektivního interního fundraisingu / crowdfundingu. Nesouhlasíte-li s uvedenými platebními podmínkami, neprovádějte ve prospěch Spolku jakoukoliv platbu, anebo požádejte neprodleně o vrácení platby, pokud jste tuto platbu provedl(a) v domnění, že se jedná o jiný právní akt za jiných platebních podmínek. Změnu členství z neregistrovaného na registrované lze provést na adrese www.osa2.cz/registrace. Stanovy, jakož i ostatní informace o Spolku jsou k dispozici ve spolkovém rejstříku u Městského soudu v Praze pod spisovou značkou L 16540."; } else { ticketFinalOrderLocalization.OrgNoteHdr = "Poznámka pořadatele"; ticketFinalOrderLocalization.InternationPaymentHdr = "Mezinárodní platba"; ticketFinalOrderLocalization.MessageForRecipient = "Zpráva pro příjemce"; ticketFinalOrderLocalization.PaymentInformation = "Platební informace"; ticketFinalOrderLocalization.FinalizedHdr = "Objednávka dokončena"; ticketFinalOrderLocalization.OrderedTicketsHdr = "Objednané vstupenky"; ticketFinalOrderLocalization.TicketCountHdr = "Objednaných vstupenek"; ticketFinalOrderLocalization.TicketTotalPriceHdr = "Celková cena"; ticketFinalOrderLocalization.ToYourEmail2 = " Vám byla odeslána kopie vytvořené objednávky."; ticketFinalOrderLocalization.PaymentInfo1 = "Platbu za objednané vstupenky prosím proveďte pomocí bankovního převodu."; ticketFinalOrderLocalization.PaymentInfo2 = "Po připsání celkové částky na účet pořadatele Vám budou obratem na Váš Email odeslány vstupenky."; ticketFinalOrderLocalization.PaymentInfo3 = "Datum splatnosti je nejpozdější datum připsání částky na účet."; ticketFinalOrderLocalization.PaymentInfo4 = "Po datu splatnosti tato objednávka již nebude platná. Pro zakoupení vstupenek vytvořte novou objednávku."; } ticketFinalOrderLocalization.ToYourEmail1 = "Na Váš email:"; ticketFinalOrderLocalization.CategoryHdr = "Kategorie"; ticketFinalOrderLocalization.AccountNumberHdr = "Číslo účtu:"; ticketFinalOrderLocalization.VSHeader = "Variabilní symbol:"; ticketFinalOrderLocalization.KSHeader = "Konstantní symbol:"; ticketFinalOrderLocalization.DueDateHdr = "Datum splatnosti:"; } viewModel.Localization = ticketFinalOrderLocalization; }
private TicketOrderViewModel CreateReservration(ShowTicketCategoriesViewModel submitedModel, ApplicationDbContext context, DbContextTransaction transaction, Project project, TicketOrder ticketOrder, List <TicketCategoryOrderViewModel> ticketCategoryOrderViewModels) { Org org = context.Orgs.First(o => o.OrgID == project.OwnerID); //Vytvořit VS a uložit objednávku for (int i = 0; i < 20; i++) { ticketOrder.VariableSymbol = org.VariableSymbolCounter++; foreach (var ticketCategoryOrder in ticketOrder.TicketCategoryOrders) { var ticketCategoryViewModel = submitedModel.TicketCategories.Single(tc => tc.TicketCategoryID == ticketCategoryOrder.TicketCategoryID); for (int j = 0; j < ticketCategoryOrder.Count; j++) { TicketItem ticketItem = new TicketItem() { Code = ticketOrder.VariableSymbol.ToString() + "-" + (j + 1), QRCode = Guid.NewGuid().ToString(), TicketCategoryOrder = ticketCategoryOrder }; if (project.TicketSetting.NamedTickets) { ticketItem.Name = ticketCategoryViewModel.Names[j].Name; ticketItem.Email = ticketCategoryViewModel.Emails[j].Email; } context.TicketItems.Add(ticketItem); } } try { context.SaveChanges(); transaction.Commit(); //Úspěšně vytvořen VS pro danou objednávku a navýšeno počítadlo pro danou organizaci break; } catch (DbUpdateConcurrencyException ex) { ex.Entries.Single().Reload(); org = (Org)ex.Entries.Single().Entity; continue; } } context.Entry(project.BankProxy).Reference(bp => bp.FioBankProxy).Load(); string accountNumber = project.BankProxy.FioBankProxy.AccountNumber + "/" + FioBankHelper.BANK_CODE; TicketOrderViewModel ticketOrderViewModel = new TicketOrderViewModel() { ProjectID = submitedModel.ProjectID, ProjectName = project.Name, Note = project.TicketSetting.NoteOrderCZ, AccountNumber = accountNumber, Email = ticketOrder.Email, ReservedUntil = ticketOrder.ReservedUntil.Value.ToShortDateString(), TotalPrice = ticketOrder.TotalPrice + " Kč", VariableSymbol = ticketOrder.VariableSymbol, CategoryOrders = ticketCategoryOrderViewModels }; //SendEmail(ticketOrderViewModel); return(ticketOrderViewModel); }
private ActionResult CreateReservationFromAction(ShowTicketCategoriesViewModel submitedModel, ApplicationDbContext context, string viewName) { using (DbContextTransaction transaction = context.Database.BeginTransaction()) { Project project = context.Projects.SingleOrDefault(p => p.ProjectID == submitedModel.ProjectID); if (project == null) { return(View("~/Views/Shared/Error.cshtml")); } if (ExceededMaxTickets(project, submitedModel, context)) { ModelState.AddModelError("ErrorSum", "Překročen maximální počet vstupenek na email: " + project.TicketSetting.MaxTicketsPerEmail); return(View(viewName, submitedModel)); } if (project.TicketSetting.NamedTickets) { if (!submitedModel.AfterNameSetting) { foreach (var ticketCategory in submitedModel.TicketCategories) { if (ticketCategory.Ordered > 0) { ticketCategory.Names = new TicketName[ticketCategory.Ordered]; ticketCategory.Emails = new TicketEmail[ticketCategory.Ordered]; ticketCategory.Emails[0] = new TicketEmail(); ticketCategory.Emails[0].Email = submitedModel.Email; } } submitedModel.AfterNameSetting = true; return(View("~/Views/Tickets/NamedTicketsLocalized.cshtml", submitedModel)); } else { foreach (var ticketCategory in submitedModel.TicketCategories) { if (ticketCategory.Ordered > 0) { if (ticketCategory.Emails.GroupBy(e => e.Email).Any(c => c.Count() > 1)) { ModelState.AddModelError("ErrorDuplicate", submitedModel.Localization.DuplicateEmailsWarning); return(View("~/Views/Tickets/NamedTicketsLocalized.cshtml", submitedModel)); } } } } } if (project.TicketSetting.AllowTermsConditions) { if (project.TicketSetting.NamedTickets && submitedModel.AfterNameSetting && !submitedModel.AfterTermsConditionsSetting) { submitedModel.AfterTermsConditionsSetting = true; bool isEnglish = false; var cookie = Request.Cookies[LocalizationCookie]; if (cookie != null) { if (cookie.Value == "en") { isEnglish = true; } } submitedModel.TermsConditions = isEnglish ? project.TicketSetting.TermsConditionsEN : project.TicketSetting.TermsConditionsCZ; return(View("~/Views/Tickets/TermsConditionsLocalized.cshtml", submitedModel)); } } bool overBought = false; TicketOrder ticketOrder = new TicketOrder(); ticketOrder.Created = DateTime.Now; ticketOrder.Email = submitedModel.Email; ticketOrder.OrgID = project.OwnerID; ticketOrder.ProjectID = project.ProjectID; ticketOrder.ReservedUntil = DateTime.Today.AddDays(7).Date; if (project.TicketSetting.AllowTermsConditions) { ticketOrder.TermsConditionsAccepted = submitedModel.TicketCategories[0].TermsConditionsAccepted; } else { ticketOrder.TermsConditionsAccepted = false; } context.TicketOrders.Add(ticketOrder); context.SaveChanges(); List <TicketCategoryOrderViewModel> ticketCategoryOrderViewModels = new List <TicketCategoryOrderViewModel>(); foreach (var ticketCategoryViewModel in submitedModel.TicketCategories) { TicketCategory ticketCategory = context.TicketCategories.SingleOrDefault(tc => tc.TicketCategoryID == ticketCategoryViewModel.TicketCategoryID); //Objednání dané kapacity, budu při konkurenci zopakováno 10x for (int i = 0; i < 10; i++) { if (ticketCategory == null || !project.TicketCategories.Contains(ticketCategory) || ticketCategory.Deleted) { transaction.Rollback(); return(View("~/Views/Shared/Error.cshtml")); } //Capacity changed if (ticketCategoryViewModel.Capacity != ticketCategory.Capacity) { ticketCategoryViewModel.Capacity = ticketCategory.Capacity; } //Available capacity changed if (ticketCategoryViewModel.AvailableCapacity != ticketCategory.Capacity - ticketCategory.Ordered) { ticketCategoryViewModel.AvailableCapacity = ticketCategory.Capacity - ticketCategory.Ordered; } if (ticketCategoryViewModel.Ordered > 0 && !overBought) { if (ticketCategory.Capacity < ticketCategory.Ordered + ticketCategoryViewModel.Ordered) { overBought = true; break; } else { ticketCategory.Ordered += ticketCategoryViewModel.Ordered; TicketCategoryOrder ticketCategoryOrder = new TicketCategoryOrder() { Count = ticketCategoryViewModel.Ordered, TicketCategory = ticketCategory, TicketOrder = ticketOrder }; context.TicketCategoryOrders.Add(ticketCategoryOrder); try { context.SaveChanges(); decimal categoryPrice = ticketCategory.Price * ticketCategoryViewModel.Ordered; TicketCategoryOrderViewModel ticketCategoryOrderViewModel = new TicketCategoryOrderViewModel() { Header = ticketCategory.HeaderCZ, Ordered = ticketCategoryViewModel.Ordered, TotalPrice = categoryPrice }; ticketCategoryOrderViewModels.Add(ticketCategoryOrderViewModel); ticketOrder.TotalPrice += categoryPrice; //Úspěšně byla navíšena nakoupená kapacita na dané kategorii a zároveň vytvořena položka objednávky pro danou kategorii break; } catch (DbUpdateConcurrencyException ex) { //Je odstraněna nevalidní objednávka context.TicketCategoryOrders.Remove(ticketCategoryOrder); //Je znovu načtena daná kategorie s korektní sumou ex.Entries.Single().Reload(); ticketCategory = (TicketCategory)ex.Entries.Single().Entity; continue; } } } else { //Již překoupeno, případně pro danou kategorii nejsou objednány žádné vstupenky break; } } } if (!overBought) { TicketOrderViewModel ticketOrderViewModel = CreateReservration(submitedModel, context, transaction, project, ticketOrder, ticketCategoryOrderViewModels); return(RedirectToActionPermanent("OrderConfirmation", new RouteValueDictionary(ticketOrderViewModel))); } else { transaction.Rollback(); ModelState.AddModelError("ErrorSum", "Dané množství vstupenek není možné objednat"); return(View(viewName, submitedModel)); } } }