예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
            }
        }