public async Task <Event> AddWildApricotEvent(Event eventAddedToDB) { var eventDetailsResponse = await GetWaEventDetails(eventAddedToDB.MainEventId); if (eventDetailsResponse == null) { throw new ExecutionError("Error Wild Apricot Event could not be found"); } var registrationTypes = eventDetailsResponse.Details.RegistrationTypes; var newRegistrationTypes = new List <WildApricotRegistrationType>(); //EventDetailsResponse should not be null because there is a null check in GetWaEventDetails var newWaEvent = new WildApricotEvent { Description = eventDetailsResponse.Details.DescriptionHtml, Name = eventDetailsResponse.Name, Location = eventDetailsResponse.Location, StartDate = eventDetailsResponse.StartDate, EndDate = eventDetailsResponse.EndDate, IsEnabled = eventDetailsResponse.RegistrationEnabled, RegistrationsLimit = eventDetailsResponse.RegistrationsLimit ?? 0, Event = eventAddedToDB, WaRegistrationTypes = newRegistrationTypes }; registrationTypes.ForEach(rt => { var newRegistrationType = new WildApricotRegistrationType { RegistrationTypeId = rt.Id, IsEnabled = rt.IsEnabled, Description = rt.Description, BasePrice = rt.BasePrice, CodeRequired = (rt.Availability.Contains("CodeRequired")), RegistrationCode = rt.RegistrationCode, AvailableFrom = rt.AvailableFrom, AvailableThrough = rt.AvailableThrough, Name = rt.Name, WaEvent = newWaEvent }; newRegistrationTypes.Add(newRegistrationType); }); await _context.WaEvents.AddAsync(newWaEvent); await _context.WaRegistrations.AddRangeAsync(newRegistrationTypes); await _context.SaveChangesAsync(); return(eventAddedToDB); }
public async Task <int> MarkInvoiceAsPaid(WildApricotRegistrationType registrationType, int invoiceId, int contactId) { var newInvoice = new NewInvoice { Value = registrationType.BasePrice, Invoices = new List <Invoice> { new Invoice { Id = invoiceId } }, Contact = new InvoiceContact { Id = contactId }, Comment = "Marked paid by the MITS Web application", PaymentType = "InvoicePayment" }; var contractResolver = new DefaultContractResolver { NamingStrategy = new CamelCaseNamingStrategy() }; var newInvoiceString = JsonConvert.SerializeObject(newInvoice, new JsonSerializerSettings { ContractResolver = contractResolver, }); var encodedContact = new StringContent(newInvoiceString, Encoding.UTF8, "application/json"); var apiEventResource = $"accounts/{_accountId}/payments"; HttpResponseMessage response; var token = await GetTokenAsync(); try { response = await WildApricotOps.PostRequest(apiEventResource, token, encodedContact); } catch (Exception e) { Console.WriteLine(e); throw new Exception(e.Message); } var content = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <NewInvoiceResponse>(content); return(result.Id); }
public static string GenerateTicket(int eventRegistrationId, Registration registration, WildApricotRegistrationType waRegistrationType) { QRCodeGenerator qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.CreateQrCode(eventRegistrationId.ToString(), QRCodeGenerator.ECCLevel.Q); QRCode qrCode = new QRCode(qrCodeData); Bitmap qrCodeImage = qrCode.GetGraphic(20, Color.Black, Color.White, true); var registrantGuid = Guid.NewGuid().ToString("N"); var directory = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "tickets", registrantGuid); Directory.CreateDirectory(directory); qrCodeImage.Save(directory + "\\code.png"); const string ticketFileName = "ticket.html"; var baseTicketDirectory = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "baseticket"); var content = File.ReadAllText(baseTicketDirectory + "\\" + ticketFileName); content = content.Replace("{first_name}", registration.FirstName); content = content.Replace("{last_name}", registration.LastName); content = content.Replace("{registration_type}", waRegistrationType.Name); content = content.Replace("{registration_id}", eventRegistrationId.ToString()); content = content.Replace("{event_date}", waRegistrationType.WaEvent.StartDate.ToShortDateString()); var ticketdirectory = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "tickets", registrantGuid); File.WriteAllText(ticketdirectory + "\\ticket.html", content); return(registrantGuid); }
public void Send(int registrationId, string registrantGuid, Registration registration, WildApricotRegistrationType waRegistrationType, string registrationGuid) { var ticketRef = $"https://test.com/tickets/{registrantGuid}/ticket.html"; var message = new MimeMessage(); message.To.Add(new MailboxAddress("John Smith", registration.Email)); message.From.Add(new MailboxAddress("MITS 2019", "*****@*****.**")); message.Subject = $"Your {waRegistrationType.Name} Ticket"; var builder = new BodyBuilder(); const string ticketFileName = "email.html"; var baseTicketDirectory = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "baseticket"); var content = File.ReadAllText(baseTicketDirectory + "\\" + ticketFileName); content = content.Replace("{registration_id}", registrationId.ToString()); content = content.Replace("{event_name}", waRegistrationType.Name); content = content.Replace("{event_cost}", waRegistrationType.BasePrice.ToString()); content = content.Replace("{ticket_href}", ticketRef); builder.HtmlBody = content; message.Body = builder.ToMessageBody(); using (var client = new SmtpClient()) { client.ServerCertificateValidationCallback = (s, c, h, e) => true; client.Connect(_server, _port); client.Authenticate(_userName, _pasword); client.AuthenticationMechanisms.Remove("XOAUTH2"); client.Send(message); client.Disconnect(true); } }