public async Task <int> SaveTicketSaleAsync(SaleViewModel saleViewModel) { try { var buyer = new Buyer() { BuyerName = saleViewModel.Buyer.BuyerName, BuyerLastName = saleViewModel.Buyer.BuyerLastName, BuyerIdentification = saleViewModel.Buyer.BuyerIdentification, Phone = saleViewModel.Buyer.Phone, AcountNumber = saleViewModel.Buyer.AcountNumber, }; var saleTicket = new TicketSale() { NumTransaction = saleViewModel.TicketSale.NumTransaction, Country = saleViewModel.TicketSale.Country, UserId = saleViewModel.User.Id }; var ticket = new Ticket() { NumTicked = saleViewModel.Ticket.NumTicked }; return(await _ticketSaleRepository.SaveTicketSaleAsync(saleTicket, buyer, ticket)); } catch { throw; } }
public async Task <ActionResult <TicketSaleModel> > Post(int customerId, [FromBody] TicketRequestModel model) { try { var customer = await _repository.GetCustomerAsync(customerId); if (customer == null) { return(NotFound()); } // Check Ticket Availability var result = await _ticketService.ReserveTickets(model.TicketIds); if (result) { // Process Creditcard (no/op in example) // Finalize Tickets var finalizedTickets = await _ticketService.FinalizeTickets(model.TicketIds); if (finalizedTickets.Success) { // Create the Sales Record var ticketSale = new TicketSale() { Customer = customer, Completed = true, ApprovalCode = "FOOBAR", TransactionNumber = "123456", PaymentType = "Credit Card", TransactionTotal = finalizedTickets.Tickets.Sum(t => (decimal)t.Price), Tickets = finalizedTickets.Tickets.ToArray() }; _repository.Add(ticketSale); if (await _repository.SaveAllAsync()) { return(CreatedAtRoute(new { customerId = customerId, id = ticketSale.Id }, _mapper.Map <TicketSaleModel>(ticketSale))); } } } } catch (Exception ex) { _logger.LogError("Failed to create TicketRequest", ex); } return(BadRequest()); }
private static TicketSaleInfoDto Map(TicketSale ticketSale, Conference conference) { int?availableTickets = null; var totalTickets = ticketSale.Amount; if (totalTickets.HasValue) { availableTickets = ticketSale.Tickets.Count(x => x.UserId is null); } return(new TicketSaleInfoDto(ticketSale.Name, new ConferenceDto(conference.Id, conference.Name), ticketSale.Price, totalTickets, availableTickets, ticketSale.From, ticketSale.To)); }
public async Task <int> SaveTicketSaleAsync(TicketSale ticketResponse, Buyer buyer, Ticket ticket) { await _dbContext.Buyers.AddAsync(buyer); ticketResponse.Buyer = buyer; await _dbContext.TicketSales.AddAsync(ticketResponse); ticket.TicketSale = ticketResponse; await _dbContext.Tickets.AddAsync(ticket); return(await _dbContext.SaveChangesAsync()); }
private async Task PurchaseAvailableAsync(TicketSale ticketSale, Guid userId) { var ticket = ticketSale.Tickets.Where(x => x.UserId is null) .OrderBy(_ => Guid.NewGuid()) .FirstOrDefault(); if (ticket is null) { throw new TicketsUnavailableException(ticketSale.ConferenceId); } ticket.Purchase(userId, _dateTimeService.GetDateTimeUtcNow(), ticketSale.Price); await _ticketsRepository.UnitOfWork.SaveChangesAsync(); }
/// <summary> /// Gets the maximum tickets for sale. /// </summary> /// <param name="ts">The ts.</param> /// <returns></returns> /// <remarks> /// This method is to avoid multiple roundtrips to the database. /// </remarks> public int GetMaxTicketsForSale(TicketSale ts) { int max = 0; if (!_buffer.ContainsKey(ts.Id)) { max = ts.GetMaxTicketsForSale(10, 20); _buffer.Add(ts.Id, max); } else { max = _buffer[ts.Id]; } return(max); }
public TicketSale GetTicketSaleByID(long id) { TicketSale item = new TicketSale(); try { item = Database.TicketSales.Where(ts => ts.IID == id && ts.IsRemoved == 0).FirstOrDefault(); item.Supplier = item.Supplier; item.Customer = item.Customer; } catch (Exception ex) { } return(item); }
async Task PersistReddeUssdData(string ticketTypeNumber, string userNumber) { try { TicketType ticketType = Misc.GetTicketType(ticketTypeNumber); var mobileNumber = "0" + Misc.NormalizePhoneNumber(userNumber); //voucher code is same as transaction Reference var txRef = Misc.GenerateVoucherCode(mobileNumber); var ticket = dbContext.Tickets.Where(t => t.Match.MatchDate >= DateTime.Now && t.TicketType == ticketType).OrderBy(i => i.Match.MatchDate).FirstOrDefault(); TicketSale ticketSale = null; if (ticket != null) { ticketSale = new TicketSale { BuyerPhone = Misc.FormatGhanaianPhoneNumberWp(mobileNumber), DateBought = DateTime.Now, Ticket = ticket, VoucherCode = txRef }; dbContext.TicketsSales.Add(ticketSale); } else { //Take an Action if the ticket is not found } dbContext.SaveChanges(); try { var transactionId = Misc.GenerateAndSendReddeInvoice(ticketSale, Settings.ReddeSettings).Result; ticketSale.PaymentId = (int)transactionId; dbContext.Entry(ticketSale).State = Microsoft.EntityFrameworkCore.EntityState.Modified; dbContext.SaveChanges(); } catch (Exception ex) { } } catch (Exception ex) { } }
private async Task PurchaseAvailableAsync(TicketSale ticketSale, Guid userId, decimal?price) { var conferenceId = ticketSale.ConferenceId; var ticket = ticketSale.Tickets.Where(x => x.UserId is null).OrderBy(_ => Guid.NewGuid()).FirstOrDefault(); if (ticket is null) { throw new TicketsUnavailableException(conferenceId); } ticket.Purchase(userId, _clock.CurrentDate(), price); await _ticketRepository.UpdateAsync(ticket); _logger.LogInformation($"Ticket with ID: '{ticket.Id}' was purchased for the conference: " + $"'{conferenceId}' by user: '******'."); }
static void Main(string[] args) { var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", false, true); IConfigurationRoot configurationRoot = builder.Build(); var connectionString = configurationRoot.GetConnectionString("DebugConnectionString"); var providerName = configurationRoot.GetSection("AppConfig").GetChildren().Single(item => item.Key == "ProviderName").Value; DbProviderFactories.RegisterFactory(providerName, SqlClientFactory.Instance); Repository <Flight> repository = new Repository <Flight>(connectionString, providerName); TicketSale ticketSale = new TicketSale(connectionString, providerName); ticketSale.BuyTicket(); }
public async Task AddAsync(TicketSaleDto dto) { var conference = await _conferenceRepository.GetAsync(dto.ConferenceId); if (conference is null) { throw new ConferenceNotFoundException(dto.ConferenceId); } if (conference.ParticipantsLimit.HasValue) { var ticketsCount = await _ticketRepository.CountForConferenceAsync(conference.Id); if (ticketsCount + dto.Amount > conference.ParticipantsLimit) { throw new TooManyTicketsException(conference.Id); } } dto.Id = Guid.NewGuid(); var ticketSale = new TicketSale { Id = dto.Id, ConferenceId = dto.ConferenceId, From = dto.From, To = dto.To, Amount = dto.Amount, Price = dto.Price, Name = dto.Name }; await _ticketSaleRepository.AddAsync(ticketSale); _logger.LogInformation($"Added a ticket sale conference with ID: '{conference.Id}' ({dto.From} - {dto.To})."); if (ticketSale.Amount.HasValue) { _logger.LogInformation($"Generating {ticketSale.Amount} tickets for conference with ID: '{conference.Id}'..."); var tickets = new List <Ticket>(); for (var i = 0; i < ticketSale.Amount; i++) { var ticket = _ticketGenerator.Generate(conference.Id, ticketSale.Id, ticketSale.Price); tickets.Add(ticket); } await _ticketRepository.AddManyAsync(tickets); } }
public void ExecuteReservationCommand() { Excursion excursion = Repositories.RExcursions.FindById(ExcursionList[SelectedIndex].Id); TicketSale ticketSale = Repositories.RTicketSales.FindAll(x => x.Excursion.Id == excursion.Id).FirstOrDefault(); if (CurrentClient.Login != null) { Repositories.RTicketSaleClients.Add(new TicketSaleClient() { Client = CurrentClient, TicketSale = ticketSale, TicketAmount = (int)TicketAmount }); } else { Repositories.RTicketSaleGuests.Add(new TicketSaleGuest() { Guest = CurrentGuest, TicketSale = ticketSale, TicketAmount = (int)TicketAmount }); } }
public static async Task <int?> GenerateAndSendReddeInvoice(TicketSale ticketSale, ReddeSettingsDTO reddeSettings) { try { ReddeRequest request = new ReddeRequest { Amount = ticketSale.Ticket.Price, Appid = reddeSettings.AppId, Clientreference = ticketSale.BuyerPhone, Clienttransid = ticketSale.VoucherCode, Description = "Ticket Sale for " + ticketSale.DateBought, Nickname = reddeSettings.NickName, Paymentoption = getReddePayOption(ticketSale.BuyerPhone), Walletnumber = FormatGhanaianPhoneNumberWp(ticketSale.BuyerPhone) }; var httpClient = new HttpClient(); var data = JsonConvert.SerializeObject(request, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); var stringContent = new StringContent(data); httpClient.DefaultRequestHeaders.Add("apikey", reddeSettings.ApiKey); stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var responseMessage = await httpClient.PostAsync("https://api.reddeonline.com/v1/receive", stringContent); var contentString = await responseMessage.Content.ReadAsStringAsync(); ReddeInitialResponse response = JsonConvert.DeserializeObject <ReddeInitialResponse>(contentString); return(response.Transactionid); } catch (Exception ex) { Console.WriteLine($"GenerateReddeToken {ex.Message}"); return(null); } }
public async Task AddAsync(TicketSaleDto dto) { var conference = await _conferenceRepository.GetAsync(dto.ConferenceId); if (conference is null) { throw new ConferenceNotFoundException(dto.ConferenceId); } if (conference.ParticipantsLimit.HasValue) { var ticketsCount = await _ticketRepository.CountForConferenceAsync(conference.Id); if (ticketsCount + dto.Amount > conference.ParticipantsLimit) { throw new TooManyTicketsException(conference.Id); } } var ticketSale = new TicketSale(dto.ConferenceId, dto.Name, dto.Price, dto.Amount, dto.From, dto.To); _ticketSaleRepository.Add(ticketSale); await _ticketSaleRepository.UnitOfWork.SaveChangesAsync(); if (ticketSale.Amount.HasValue) { var tickets = new List <Ticket>(); for (var i = 0; i < ticketSale.Amount; i++) { var ticket = _ticketsFactory.Generate(conference.Id, ticketSale.Price, ticketSale); tickets.Add(ticket); } _ticketRepository.AddMany(tickets); await _ticketRepository.UnitOfWork.SaveChangesAsync(); } }
public async Task DeleteAsync(TicketSale ticketSale) { _ticketSales.Remove(ticketSale); await _context.SaveChangesAsync(); }
public void Add(TicketSale ticketSale) { _context.TicketSales.Add(ticketSale); }
public void Delete(TicketSale ticketSale) { _context.TicketSales.Remove(ticketSale); }
public Ticket Generate(Guid conferenceId, decimal?price, TicketSale ticketSale) { return(new(conferenceId, price, ticketSale, _dateTimeService.GetDateTimeUtcNow())); }
public static string GetTicketPurchaseMessage(TicketSale ticketSale) { return($"Hello {ticketSale.BuyerPhone}, your ticket Number for {ticketSale.Ticket.Match.Name} bought on {ticketSale.DateBought} is {ticketSale.VoucherCode}"); }
public async Task UpdateAsync(TicketSale ticketSale) { _ticketSales.Update(ticketSale); await _context.SaveChangesAsync(); }
public async Task AddAsync(TicketSale ticketSale) { await _ticketSales.AddAsync(ticketSale); await _context.SaveChangesAsync(); }