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); } } }
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); } }