public void SendMessageFromDonor(int pledgeId, int donationId, string message) { var toDonor = _pledgeService.GetDonorForPledge(pledgeId); var donorContact = _donorService.GetEmailViaDonorId(toDonor); var template = _communicationService.GetTemplate(_tripDonationMessageTemplateId); var toContacts = new List <MpContact> { new MpContact { ContactId = donorContact.ContactId, EmailAddress = donorContact.Email } }; var from = new MpContact() { ContactId = 5, EmailAddress = "*****@*****.**" }; var comm = new MpCommunication { AuthorUserId = 5, DomainId = 1, EmailBody = message, EmailSubject = template.Subject, FromContact = from, ReplyToContact = from, ToContacts = toContacts, MergeData = new Dictionary <string, object>() }; var communicationId = _communicationService.SendMessage(comm, true); AddDonationCommunication(donationId, communicationId); }
private static MinistryPlatform.Translation.Models.MpCommunication FormatCommunication(int authorUserId, int domainId, MpMessageTemplate template, MpMyContact fromContact, MpMyContact replyToContact, int participantContactId, string participantEmail, Dictionary <string, object> mergeData) { var communication = new MinistryPlatform.Translation.Models.MpCommunication { AuthorUserId = authorUserId, DomainId = domainId, EmailBody = template.Body, EmailSubject = template.Subject, FromContact = new MpContact { ContactId = fromContact.Contact_ID, EmailAddress = fromContact.Email_Address }, ReplyToContact = new MpContact { ContactId = replyToContact.Contact_ID, EmailAddress = replyToContact.Email_Address }, ToContacts = new List <MpContact> { new MpContact { ContactId = participantContactId, EmailAddress = participantEmail } }, MergeData = mergeData }; return(communication); }
public void SendParticipantsEmail(string token, List <GroupParticipantDTO> participants, string subject, string body) { var senderRecord = _participantService.GetParticipantRecord(token); var fromContact = new MpContact { ContactId = 1519180, EmailAddress = "*****@*****.**" }; var replyToContact = new MpContact { ContactId = senderRecord.ContactId, EmailAddress = senderRecord.EmailAddress }; var toContacts = participants.Select(p => new MpContact { ContactId = p.ContactId, EmailAddress = p.Email }).ToList(); var email = new MinistryPlatform.Translation.Models.MpCommunication { EmailBody = body, EmailSubject = subject, AuthorUserId = 5, DomainId = _domainId, FromContact = fromContact, ReplyToContact = replyToContact, ToContacts = toContacts }; _communicationService.SendMessage(email); }
public void ShouldSendTripEmail() { const int formResponseId = 12345; const int contactId = 1234; const int pledgeCampaignId = 9876; var mycontact = new MpMyContact { Contact_ID = 7, Email_Address = "*****@*****.**" }; var to = new MpContact { ContactId = 8, EmailAddress = "*****@*****.**" }; var tolist = new List <MpContact> { to }; var mpc = new MpCommunication { AuthorUserId = 1, DomainId = 1, EmailBody = "body", EmailSubject = "subject", FromContact = to, MergeData = new Dictionary <string, object>(), ReplyToContact = to, StartDate = new DateTime(2011, 10, 11), TemplateId = 444, ToContacts = tolist }; _campaignService.Setup(m => m.GetPledgeCampaign(pledgeCampaignId)).Returns(mockPledgeCampaign()); _donationService.Setup(m => m.GetMyTripDistributions(contactId)).Returns(MockTripScholarshipDonationsResponse()); _formSubmissionService.Setup(f => f.SubmitFormResponse(It.IsAny <MpFormResponse>())).Returns(formResponseId); _communicationService.Setup( s => s.GetTemplateAsCommunication(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <string>(), It.IsAny <int>(), It.IsAny <string>(), It.IsAny <int>(), It.IsAny <string>(), It.IsAny <Dictionary <string, object> >())).Returns(mpc); _communicationService.Setup(s => s.SendMessage(mpc, false)).Returns(9999); _contactService.Setup(s => s.GetContactById(It.IsAny <int>())).Returns(mycontact); var result = _fixture.SaveApplication(mockTripApplication(contactId, pledgeCampaignId)); Assert.IsTrue(result == formResponseId); _configurationWrapper.Verify(v => v.GetConfigIntValue("TripApplicantSuccessTemplate"), Times.Exactly(1)); }
private void SendChildcareRequestDecisionNotification(int requestId, List <MpChildcareRequestDate> childcareRequestDates, ChildcareRequestDto childcareRequest, int templateId, String token) { var childcareRequestEmail = _childcareRequestService.GetChildcareRequest(requestId, token);; var template = _communicationService.GetTemplate(templateId); var decisionNotes = childcareRequest.DecisionNotes ?? "N/A"; var authorUserId = _configurationWrapper.GetConfigIntValue("DefaultUserAuthorId"); var datesList = childcareRequestDates.Select(dateRec => dateRec.RequestDate).Select(requestDate => BuildParagraph("", requestDate.ToShortDateString())).ToList(); var styles = Styles(); var htmlCell = new HtmlElement("td", styles).Append(datesList); var htmlRow = new HtmlElement("tr", styles).Append(htmlCell); var htmlTBody = new HtmlElement("tbody", styles).Append(htmlRow); var htmlTable = new HtmlElement("table", styles).Append(htmlTBody); var mergeData = new Dictionary <string, object> { { "Group", childcareRequestEmail.GroupName }, { "ChildcareSession", childcareRequestEmail.ChildcareSession }, { "DecisionNotes", decisionNotes }, { "Frequency", childcareRequest.Frequency }, { "Dates", htmlTable.Build() }, { "RequestId", childcareRequestEmail.RequestId }, { "Base_Url", _configurationWrapper.GetConfigValue("BaseMPUrl") }, { "Congregation", childcareRequestEmail.CongregationName } }; var toContactsList = new List <MpContact> { new MpContact { ContactId = childcareRequestEmail.RequesterId, EmailAddress = childcareRequestEmail.RequesterEmail } }; var communication = new MinistryPlatform.Translation.Models.MpCommunication { AuthorUserId = authorUserId, EmailBody = template.Body, EmailSubject = template.Subject, FromContact = new MpContact { ContactId = childcareRequestEmail.ChildcareContactId, EmailAddress = childcareRequestEmail.ChildcareContactEmail }, ReplyToContact = new MpContact { ContactId = childcareRequestEmail.ChildcareContactId, EmailAddress = childcareRequestEmail.ChildcareContactEmail }, ToContacts = toContactsList, MergeData = mergeData }; try { _communicationService.SendMessage(communication); } catch (Exception ex) { _logger.Error(string.Format("Send Childcare request approval notification email failed"), ex); } }
public void SendMessageToDonor(int donorId, int donationDistributionId, int fromContactId, string body, string tripName) { var template = _communicationService.GetTemplate(_donorMessageTemplateId); var defaultContactId = AppSetting("DefaultGivingContactEmailId"); var defaultContactEmail = _communicationService.GetEmailFromContactId(defaultContactId); var messageData = new Dictionary <string, object> { { "TripName", tripName }, { "DonorMessage", body } }; var toEmail = _donorService.GetEmailViaDonorId(donorId); var to = new List <MpContact>() { new MpContact() { ContactId = toEmail.ContactId, EmailAddress = toEmail.Email } }; var authorId = _communicationService.GetUserIdFromContactId(fromContactId); var fromEmail = _communicationService.GetEmailFromContactId(fromContactId); var comm = new MpCommunication { AuthorUserId = authorId, DomainId = 1, ToContacts = to, FromContact = new MpContact() { ContactId = defaultContactId, EmailAddress = defaultContactEmail }, ReplyToContact = new MpContact() { ContactId = fromContactId, EmailAddress = fromEmail }, EmailSubject = _communicationService.ParseTemplateBody(template.Subject, messageData), EmailBody = _communicationService.ParseTemplateBody(template.Body, messageData), MergeData = messageData }; _communicationService.SendMessage(comm); //mark donation distribution with message sent var distributionData = new Dictionary <string, object> { { "Donation_Distribution_ID", donationDistributionId }, { "Message_Sent", true } }; _ministryPlatformService.UpdateRecord(_donationDistributionPageId, distributionData, ApiLogin()); }
public void SendChildcareCancellationNotification() { var templateId = _configurationWrapper.GetConfigIntValue("ChildcareCancelledTemplate"); var template = _communicationService.GetTemplate(templateId); var authorUserId = _configurationWrapper.GetConfigIntValue("DefaultUserAuthorId"); var notificationData = _childcareRepository.GetChildcareCancellations(); foreach (var participant in notificationData.DistinctBy(p => p.EnrollerContactId)) { var kiddos = notificationData.Where(k => k.EnrollerContactId == participant.EnrollerContactId).Aggregate("", (current, kid) => current + (kid.ChildNickname + " " + kid.ChildLastname + "<br>")); var mergeData = new Dictionary <string, object> { { "Group_Name", participant.EnrollerGroupName }, { "Childcare_Date", participant.ChildcareEventDate.ToString("MM/dd/yyyy") }, { "Group_Member_Nickname", participant.EnrollerNickname }, { "Childcare_Day", participant.ChildcareEventDate.ToString("dddd, MMMM dd") }, { "Child_List", kiddos } }; var comm = new MinistryPlatform.Translation.Models.MpCommunication { AuthorUserId = authorUserId, DomainId = 1, EmailBody = template.Body, EmailSubject = template.Subject, FromContact = new MpContact { ContactId = participant.ChildcareContactId, EmailAddress = participant.ChildcareContactEmail }, ReplyToContact = new MpContact { ContactId = participant.ChildcareContactId, EmailAddress = participant.ChildcareContactEmail }, ToContacts = new List <MpContact> { new MpContact { ContactId = participant.EnrollerContactId, EmailAddress = participant.EnrollerEmail } }, MergeData = mergeData }; _communicationService.SendMessage(comm); } foreach (var participant in notificationData) { _groupService.endDateGroupParticipant(participant.ChildGroupId, participant.ChildGroupParticipantId); } foreach (var group in notificationData.DistinctBy(g => g.ChildGroupId)) { _groupService.EndDateGroup(group.ChildGroupId); } }
public void SendAllGroupLeadersMemberRemovedEmail(string token, int groupId) { var requestorParticipant = _participantService.GetParticipantRecord(token); var group = this.GetGroupDetails(groupId); var leaders = @group.Participants. Where(groupParticipant => groupParticipant.GroupRoleId == _groupRoleLeader). Select(groupParticipant => new MpContact { ContactId = groupParticipant.ContactId, EmailAddress = groupParticipant.Email, LastName = groupParticipant.LastName, Nickname = groupParticipant.NickName }).ToList(); var mergeData = new Dictionary <string, object> { { "Group_Participant_Name", requestorParticipant.DisplayName }, { "Group_Name", group.GroupName }, }; int emailTemplateId = _removeSelfFromGroupTemplateId; var emailTemplate = _communicationService.GetTemplate(emailTemplateId); var fromContact = new MpContact { ContactId = emailTemplate.FromContactId, EmailAddress = emailTemplate.FromEmailAddress }; var replyTo = new MpContact { ContactId = emailTemplate.ReplyToContactId, EmailAddress = emailTemplate.ReplyToEmailAddress }; var message = new MinistryPlatform.Translation.Models.MpCommunication { EmailBody = emailTemplate.Body, EmailSubject = emailTemplate.Subject, AuthorUserId = _defaultAuthorUserId, DomainId = _domainId, FromContact = fromContact, ReplyToContact = replyTo, TemplateId = emailTemplateId, ToContacts = leaders, MergeData = mergeData }; _communicationService.SendMessage(message); }
public void ShouldGetReminderCommunication() { const int childcareTemplateId = 56345; var threeDaysOut = DateTime.Now.AddDays(3); var email1 = new MpContact() { EmailAddress = "*****@*****.**", ContactId = 2186211 }; var mergeData = new Dictionary <string, object>() { { "Nickname", "Matt" }, { "Childcare_Date", threeDaysOut.ToString("d") }, { "Childcare_Day", threeDaysOut.ToString("dddd M") } }; _configurationWrapper.Setup(m => m.GetConfigIntValue("DefaultContactEmailId")).Returns(12); _configurationWrapper.Setup(m => m.GetConfigIntValue("ChildcareReminderTemplateId")).Returns(childcareTemplateId); var expectedCommunication = new MpCommunication() { AuthorUserId = 5, DomainId = 1, EmailBody = "<html> whatever </html>", EmailSubject = "subject", FromContact = new MpContact() { ContactId = 12, EmailAddress = "*****@*****.**" }, ReplyToContact = new MpContact() { ContactId = 12, EmailAddress = "*****@*****.**" }, TemplateId = childcareTemplateId, ToContacts = new List <MpContact> { email1 }, MergeData = mergeData }; _communicationService.Setup( m => m.GetTemplateAsCommunication(childcareTemplateId, 12, "*****@*****.**", 12, "*****@*****.**", email1.ContactId, email1.EmailAddress, mergeData) ).Returns(expectedCommunication); _fixture.SetupChilcareReminderCommunication(email1, mergeData); _communicationService.Verify(); _configurationWrapper.VerifyAll(); }
public void SendChildcareRequestNotification(MpChildcareRequestEmail request) { var templateId = _configurationWrapper.GetConfigIntValue("ChildcareRequestNotificationTemplate"); var authorUserId = _configurationWrapper.GetConfigIntValue("DefaultUserAuthorId"); var template = _communicationService.GetTemplate(templateId); var mergeData = new Dictionary <string, object> { { "Requester", request.Requester }, { "Nickname", request.RequesterNickname }, { "LastName", request.RequesterLastName }, { "Group", request.GroupName }, { "Site", request.CongregationName }, { "StartDate", (request.StartDate).ToShortDateString() }, { "EndDate", (request.EndDate).ToShortDateString() }, { "ChildcareSession", request.ChildcareSession }, { "RequestId", request.RequestId }, { "Base_Url", _configurationWrapper.GetConfigValue("BaseMPUrl") } }; var communication = new MinistryPlatform.Translation.Models.MpCommunication { AuthorUserId = authorUserId, EmailBody = template.Body, EmailSubject = template.Subject, FromContact = new MpContact { ContactId = request.RequesterId, EmailAddress = request.RequesterEmail }, ReplyToContact = new MpContact { ContactId = request.RequesterId, EmailAddress = request.RequesterEmail }, ToContacts = new List <MpContact> { new MpContact { ContactId = request.ChildcareContactId, EmailAddress = request.ChildcareContactEmail } }, MergeData = mergeData }; try { _communicationService.SendMessage(communication); } catch (Exception ex) { _logger.Error(string.Format("Send Childcare request notification email failed"), ex); } }
// TODO Made this virtual so could mock in a unit test. Probably ought to refactor to a separate class - shouldn't have to mock the class we're testing... public virtual void SendEmail(int communicationTemplateId, int donorId, decimal donationAmount, string paymentType, DateTime setupDate, DateTime startDate, string program, string emailReason, string frequency = null, string pledgeName = null) { var template = _communicationService.GetTemplate(communicationTemplateId); var defaultContactId = AppSetting("DefaultGivingContactEmailId"); var defaultContactEmail = _contactService.GetContactEmail(defaultContactId); MpContact contact = _contactService.GetEmailFromDonorId(donorId); var comm = new MpCommunication { AuthorUserId = 5, DomainId = 1, EmailBody = template.Body, EmailSubject = template.Subject, FromContact = new MpContact { ContactId = defaultContactId, EmailAddress = defaultContactEmail }, ReplyToContact = new MpContact { ContactId = defaultContactId, EmailAddress = defaultContactEmail }, ToContacts = new List <MpContact> { new MpContact { ContactId = contact.ContactId, EmailAddress = contact.EmailAddress } }, MergeData = new Dictionary <string, object> { { "Program_Name", program }, { "Donation_Amount", donationAmount.ToString("N2") }, { "Donation_Date", setupDate.ToString("MM/dd/yyyy h:mmtt", _dateTimeFormat) }, { "Payment_Method", paymentType }, { "Decline_Reason", emailReason }, { "Start_Date", startDate.ToString("MM/dd/yyyy", _dateTimeFormat) } } }; if (!string.IsNullOrWhiteSpace(frequency)) { comm.MergeData["Frequency"] = frequency; } if (!string.IsNullOrWhiteSpace(pledgeName)) { comm.MergeData["Pledge_Donor"] = pledgeName; } _communicationService.SendMessage(comm); }
public void ShouldSendChildcareRequestNotification() { var startDate = new DateTime(2016, 5, 26); var endDate = new DateTime(2016, 7, 2); var notificationTemplateId = 0985627; var defaultAuthorId = 9087345; var template = new MpMessageTemplate() { Body = "Ok long string of text", Subject = "A subject" }; var request = new MpChildcareRequestEmail() { RequestId = 1, RequesterEmail = "*****@*****.**", ChildcareContactEmail = "*****@*****.**", ChildcareContactId = 12, ChildcareSession = "Monday, 9am - 12pm", CongregationName = "Florence", EndDate = endDate, StartDate = startDate, EstimatedChildren = 2, Frequency = "once", RequesterLastName = "Nair", RequesterNickname = "Lak", Requester = "Nair, Lak", RequesterId = 432, GroupName = "FI 101" }; var mergeData = new Dictionary <string, object> { { "Requester", request.Requester }, { "Nickname", request.RequesterNickname }, { "LastName", request.RequesterLastName }, { "Group", request.GroupName }, { "Site", request.CongregationName }, { "StartDate", (request.StartDate).ToShortDateString() }, { "EndDate", (request.EndDate).ToShortDateString() }, { "ChildcareSession", request.ChildcareSession }, { "RequestId", request.RequestId }, { "Base_Url", "https://localhost:3000" } }; var communication = new MpCommunication { TemplateId = 0, DomainId = 0, AuthorUserId = defaultAuthorId, EmailBody = template.Body, EmailSubject = template.Subject, FromContact = new MpContact { ContactId = request.RequesterId, EmailAddress = request.RequesterEmail }, ReplyToContact = new MpContact { ContactId = request.RequesterId, EmailAddress = request.RequesterEmail }, ToContacts = new List <MpContact> { new MpContact { ContactId = request.ChildcareContactId, EmailAddress = request.ChildcareContactEmail } }, MergeData = mergeData }; _configurationWrapper.Setup(m => m.GetConfigIntValue("ChildcareRequestNotificationTemplate")).Returns(notificationTemplateId); _configurationWrapper.Setup(m => m.GetConfigIntValue("DefaultUserAuthorId")).Returns(defaultAuthorId); _communicationService.Setup(m => m.GetTemplate(notificationTemplateId)).Returns(template); _configurationWrapper.Setup(m => m.GetConfigValue("BaseMPUrl")).Returns("https://localhost:3000"); _communicationService.Setup(m => m.SendMessage(It.IsAny <MinistryPlatform.Translation.Models.MpCommunication>(), false)).Verifiable(); _fixture.SendChildcareRequestNotification(request); _communicationService.VerifyAll(); }
public void ShouldSendTripFullConfirmation() { const int pledgeCampaignId = 09786834; const string token = "asdfasdf"; const int templateId = 7878; var campaign = mockPledgeCampaign(pledgeCampaignId); var pledges = mockPledges(campaign); pledges.Add( new MpPledge() { CampaignName = campaign.Name, CampaignStartDate = campaign.StartDate, CampaignEndDate = campaign.EndDate, CampaignTypeId = 1, CampaignTypeName = campaign.Type, DonorId = 3, PledgeCampaignId = campaign.Id, PledgeDonations = 1, PledgeId = 4, PledgeStatus = "active", PledgeStatusId = 1, PledgeTotal = 100 } ); var mergeData = new Dictionary <string, object> { { "Pledge_Campaign", campaign.Name } }; var communication = new MpCommunication() { TemplateId = templateId, AuthorUserId = 1, DomainId = 1, EmailBody = "<p> Ok random body of text </p>", EmailSubject = "more randomness", FromContact = new MpContact() { ContactId = 5, EmailAddress = "*****@*****.**" }, MergeData = mergeData, ReplyToContact = new MpContact { ContactId = 5, EmailAddress = "*****@*****.**" }, StartDate = DateTime.Now, ToContacts = new List <MpContact> { new MpContact { ContactId = 45, EmailAddress = "*****@*****.**" } } }; var eventDetails = EventDetails(campaign.EventId); _apiUserReposity.Setup(m => m.GetToken()).Returns(token); _campaignService.Setup(m => m.GetPledgeCampaign(pledgeCampaignId, token)).Returns(campaign); _pledgeService.Setup(m => m.GetPledgesByCampaign(pledgeCampaignId, token)).Returns(pledges); _configurationWrapper.Setup(m => m.GetConfigIntValue("TripIsFullTemplateId")).Returns(templateId); _configurationWrapper.Setup(m => m.GetConfigIntValue("TripIsFullFromContactId")).Returns(5); _configurationWrapper.Setup(m => m.GetConfigValue("TripIsFullFromEmailAddress")).Returns("*****@*****.**"); _eventService.Setup(m => m.GetEvent(campaign.EventId)).Returns(eventDetails); _communicationService.Setup( m => m.GetTemplateAsCommunication(templateId, communication.FromContact.ContactId, communication.FromContact.EmailAddress, communication.FromContact.ContactId, communication.FromContact.EmailAddress, eventDetails.PrimaryContact.ContactId, eventDetails.PrimaryContact.EmailAddress, mergeData)).Returns(communication); _communicationService.Setup(m => m.SendMessage(communication, false)).Returns(1); _fixture.SendTripIsFullMessage(pledgeCampaignId); _apiUserReposity.VerifyAll(); _tripRepository.VerifyAll(); _configurationWrapper.VerifyAll(); _communicationService.VerifyAll(); _eventService.VerifyAll(); }
public void ShouldSendPrimaryContactReminderEmails() { const string search = ""; const string apiToken = "qwerty1234"; var defaultContact = new MpMyContact() { Contact_ID = 321, Email_Address = "*****@*****.**" }; var testEvent = new MpEvent() { EventId = 32, EventStartDate = new DateTime(), EventEndDate = new DateTime().AddHours(2), PrimaryContact = new MpContact() { EmailAddress = "*****@*****.**", ContactId = 4321 } }; var testEventList = new List <MpEvent>() { testEvent }; _apiUserService.Setup(m => m.GetToken()).Returns(apiToken); _eventService.Setup(m => m.EventsByPageViewId(apiToken, 2205, search)).Returns(testEventList); var eventList = testEventList.Select(evt => new crds_angular.Models.Crossroads.Events.Event() { name = evt.EventTitle, EventId = evt.EventId, EndDate = evt.EventEndDate, StartDate = evt.EventStartDate, EventType = evt.EventType, location = evt.Congregation, PrimaryContactEmailAddress = evt.PrimaryContact.EmailAddress, PrimaryContactId = evt.PrimaryContact.ContactId }); eventList.ForEach(evt => { var mergeData = new Dictionary <string, object> { { "Event_ID", evt.EventId }, { "Event_Title", evt.name }, { "Event_Start_Date", evt.StartDate.ToShortDateString() }, { "Event_Start_Time", evt.StartDate.ToShortTimeString() } }; var contact = new MpContact() { ContactId = defaultContact.Contact_ID, EmailAddress = defaultContact.Email_Address }; var fakeCommunication = new MinistryPlatform.Translation.Models.MpCommunication() { AuthorUserId = defaultContact.Contact_ID, DomainId = 1, EmailBody = "Test event email stuff", EmailSubject = "Test Event Reminder", FromContact = contact, MergeData = mergeData, ReplyToContact = contact, TemplateId = 14909, ToContacts = new List <MpContact>() { contact } }; var testContact = new MpMyContact() { Contact_ID = 9876, Email_Address = "*****@*****.**" }; _contactService.Setup(m => m.GetContactById(9876)).Returns(testContact); _communicationService.Setup(m => m.GetTemplateAsCommunication(14909, testContact.Contact_ID, testContact.Email_Address, evt.PrimaryContactId, evt.PrimaryContactEmailAddress, evt.PrimaryContactId, evt.PrimaryContactEmailAddress, mergeData)).Returns(fakeCommunication); _communicationService.Setup(m => m.SendMessage(fakeCommunication, false)); _communicationService.Verify(); }); _fixture.EventsReadyForPrimaryContactReminder(apiToken); _eventService.Verify(); }