コード例 #1
0
        public void DispatchBatchedNegotiationRequests(IUnitOfWork uow, String templateName, String htmlText, IList<RecipientDO> recipients, NegotiationDO negotiationDO)
        {
            if (!recipients.Any())
                return;

            var emailDO = new EmailDO();
            //This means, when the customer replies, their client will include the bookingrequest id
            emailDO.TagEmailToBookingRequest(negotiationDO.BookingRequest);

            var customer = negotiationDO.BookingRequest.Customer;
            var mode = _user.GetMode(customer);
            if (mode == CommunicationMode.Direct)
            {
                var directEmailAddress = _configRepository.Get("EmailFromAddress_DirectMode");
                var directEmailName = _configRepository.Get("EmailFromName_DirectMode");
                emailDO.From = uow.EmailAddressRepository.GetOrCreateEmailAddress(directEmailAddress);
                emailDO.FromName = directEmailName;
            }
            else
            {
                var delegateEmailAddress = _configRepository.Get("EmailFromAddress_DelegateMode");
                var delegateEmailName = _configRepository.Get("EmailFromName_DelegateMode");
                emailDO.From = uow.EmailAddressRepository.GetOrCreateEmailAddress(delegateEmailAddress);
                emailDO.FromName = String.Format(delegateEmailName, customer.DisplayName);
            }

            emailDO.Subject = string.Format("Need Your Response on {0} {1} event: {2}",
                negotiationDO.BookingRequest.Customer.FirstName,
                (negotiationDO.BookingRequest.Customer.LastName ?? ""),
                "RE: " + negotiationDO.Name);

            var responseUrl = String.Format("NegotiationResponse/View?negotiationID={0}", negotiationDO.Id);

            var tokenUrls = new List<String>();
            foreach (var attendee in recipients)
            {
                emailDO.AddEmailRecipient(EmailParticipantType.To, attendee.EmailAddress);
                var curUserDO = uow.UserRepository.GetOrCreateUser(attendee.EmailAddress);
                var tokenURL = uow.AuthorizationTokenRepository.GetAuthorizationTokenURL(responseUrl, curUserDO);
                tokenUrls.Add(tokenURL);
            }

            uow.EmailRepository.Add(emailDO);
            var summaryQandAText = _negotiation.GetSummaryText(negotiationDO);

            string currBookerAddress = negotiationDO.BookingRequest.Booker.EmailAddress.Address;

            var conversationThread = _br.GetConversationThread(negotiationDO.BookingRequest);

            // Fix an issue when coverting to UTF-8
            conversationThread = conversationThread.Replace((char)160, (char)32);

            uow.EnvelopeRepository.ConfigureTemplatedEmail(emailDO, templateName,
                new Dictionary<string, object>
                {
                    {"RESP_URL", tokenUrls},
                    {"bodytext", htmlText},
                    {"questions", String.Join("<br/>", summaryQandAText)},
                    {"conversationthread", conversationThread},
                    {"bookername", currBookerAddress.Replace("@kwasant.com","")}
                });

            negotiationDO.NegotiationState = NegotiationState.AwaitingClient;

            //Everyone who gets an email is now an attendee.
            var currentAttendeeIDs = negotiationDO.Attendees.Select(a => a.EmailAddressID).ToList();
            foreach (var recipient in recipients)
            {
                if (!currentAttendeeIDs.Contains(recipient.EmailAddressID))
                {
                    var newAttendee = new AttendeeDO
                    {
                        EmailAddressID = recipient.EmailAddressID,
                        Name = recipient.EmailAddress.Name,
                        NegotiationID = negotiationDO.Id
                    };
                    uow.AttendeeRepository.Add(newAttendee);
                }
            }
        }
コード例 #2
0
        public void DispatchNegotiationRequests(IUnitOfWork uow, EmailDO generatedEmailDO, NegotiationDO negotiationDO)
        {
            var batches = generatedEmailDO.Recipients.GroupBy(r =>
            {
                var curUserDO = uow.UserRepository.GetOrCreateUser(r.EmailAddress);
                return GetCRTemplate(curUserDO);
            });

            foreach (var batch in batches)
            {
                DispatchBatchedNegotiationRequests(uow, batch.Key, generatedEmailDO.HTMLText, batch.ToList(), negotiationDO);
            }
        }