예제 #1
0
        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);
        }
예제 #2
0
        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));
        }
예제 #3
0
        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);
        }
예제 #4
0
        public void SendEmail(CommunicationDTO emailData)
        {
            var replyToContactId = emailData.ReplyToContactId ?? DefaultContactEmailId;

            var from = new MpContact {
                ContactId = DefaultContactEmailId, EmailAddress = _communicationService.GetEmailFromContactId(DefaultContactEmailId)
            };
            var replyTo = new MpContact {
                ContactId = replyToContactId, EmailAddress = _communicationService.GetEmailFromContactId(replyToContactId)
            };

            var comm = new MpCommunication
            {
                AuthorUserId   = DefaultAuthorUserId,
                DomainId       = DomainID,
                EmailBody      = emailData.Body,
                EmailSubject   = emailData.Subject,
                FromContact    = from,
                ReplyToContact = replyTo,
                MergeData      = new Dictionary <string, object>(),
                ToContacts     = new List <MpContact>()
            };

            foreach (var to in emailData.ToContactIds)
            {
                var contact = new MpContact {
                    ContactId = to, EmailAddress = _communicationService.GetEmailFromContactId(to)
                };
                comm.ToContacts.Add(contact);
            }
            _communicationService.SendMessage(comm);
        }
예제 #5
0
        public void SendAllGroupLeadersEmail(string token, int groupId, GroupMessageDTO message)
        {
            var requestor        = _participantRepository.GetParticipantRecord(token);
            var requestorContact = _contactRepository.GetContactById(requestor.ContactId);
            var group            = _groupService.GetGroupDetails(groupId);

            var fromContact = new MpContact
            {
                ContactId    = _defaultGroupContactEmailId,
                EmailAddress = "*****@*****.**"
            };

            var replyToContact = new MpContact
            {
                ContactId    = requestor.ContactId,
                EmailAddress = requestor.EmailAddress
            };

            var leaders = @group.Participants.
                          Where(groupParticipant => groupParticipant.GroupRoleId == _groupRoleLeaderId).
                          Select(groupParticipant => new MpContact
            {
                ContactId    = groupParticipant.ContactId,
                EmailAddress = groupParticipant.Email,
                LastName     = groupParticipant.LastName,
                Nickname     = groupParticipant.NickName
            }).ToList();

            var fromString = "<p><i>This email was sent from: " + requestorContact.Nickname + " " + requestorContact.Last_Name + " (" + requestor.EmailAddress + ")</i></p>";

            var toString = "<p><i>This email was sent to: ";

            foreach (var item in leaders)
            {
                toString += item.Nickname + " " + item.LastName + " (" + item.EmailAddress + "), ";
            }

            char[] trailingChars = { ',', ' ' };
            toString  = toString.TrimEnd(trailingChars);
            toString += "</i></p>";

            var email = new MpCommunication
            {
                EmailBody      = fromString + "<p>" + message.Body + "</p>" + toString,
                EmailSubject   = $"Crossroads Group {@group.GroupName}: {message.Subject}",
                AuthorUserId   = _defaultAuthorUserId,
                DomainId       = _domainId,
                FromContact    = fromContact,
                ReplyToContact = replyToContact,
                ToContacts     = leaders
            };

            _communicationRepository.SendMessage(email);
        }
예제 #6
0
        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);
        }
예제 #7
0
        public void SendNewStudentMinistryGroupAlertEmail(List <MpGroupParticipant> leaders)
        {
            var          emailTemplate = _communicationService.GetTemplate(NewStudentMinistryGroupAlertEmailTemplate);
            const string toEmail       = "*****@*****.**";

            string formattedData = "<ul> ";

            foreach (var participant in leaders)
            {
                formattedData += $"<li>Name: {participant.NickName} {participant.LastName}  Email: {participant.Email} </li>";
            }

            var mergeData = new Dictionary <string, object>
            {
                { "Leaders", formattedData + "</ul>" }
            };

            var domainId = Convert.ToInt32(AppSettings("DomainId"));
            var from     = new MpContact()
            {
                ContactId    = DefaultEmailContactId,
                EmailAddress = _communicationService.GetEmailFromContactId(DefaultEmailContactId)
            };

            var to = new List <MpContact>
            {
                new MpContact
                {
                    ContactId    = _contactService.GetContactIdByEmail(toEmail),
                    EmailAddress = toEmail
                }
            };

            var newStudentMinistryGroup = new MpCommunication
            {
                EmailBody      = emailTemplate.Body,
                EmailSubject   = emailTemplate.Subject,
                AuthorUserId   = 5,
                DomainId       = domainId,
                FromContact    = from,
                MergeData      = mergeData,
                ReplyToContact = from,
                TemplateId     = NewStudentMinistryGroupAlertEmailTemplate,
                ToContacts     = to
            };

            _communicationService.SendMessage(newStudentMinistryGroup);
        }
예제 #8
0
        public void SendCommunityGroupConfirmationEmail(int participantId, int groupId, bool waitlist, bool childcareNeeded)
        {
            var emailTemplate = _communicationService.GetTemplate(waitlist ? CommunityGroupWaitListConfirmationTemplateId : CommunityGroupConfirmationTemplateId);
            var toContact     = _contactService.GetContactIdByParticipantId(participantId);
            var toContactInfo = _contactService.GetContactById(toContact);
            var groupInfo     = getGroupDetails(groupId);

            var mergeData = new Dictionary <string, object>
            {
                { "Nickname", toContactInfo.Nickname },
                { "Group_Name", groupInfo.Name },
                { "Congregation_Name", groupInfo.Congregation },
                { "Childcare_Needed", (childcareNeeded) ? _contentBlockService["communityGroupChildcare"].Content : "" },
                { "Base_Url", _configurationWrapper.GetConfigValue("BaseUrl") }
            };

            var domainId = Convert.ToInt32(AppSettings("DomainId"));
            var from     = new MpContact()
            {
                ContactId    = DefaultEmailContactId,
                EmailAddress = _communicationService.GetEmailFromContactId(DefaultEmailContactId)
            };

            var to = new List <MpContact>
            {
                new MpContact
                {
                    ContactId    = toContact,
                    EmailAddress = toContactInfo.Email_Address
                }
            };

            var confirmation = new MpCommunication
            {
                EmailBody      = emailTemplate.Body,
                EmailSubject   = emailTemplate.Subject,
                AuthorUserId   = 5,
                DomainId       = domainId,
                FromContact    = from,
                MergeData      = mergeData,
                ReplyToContact = from,
                TemplateId     = CommunityGroupConfirmationTemplateId,
                ToContacts     = to
            };

            _communicationService.SendMessage(confirmation);
        }
예제 #9
0
        public void SendAllGroupParticipantsEmail(string token, int groupId, int groupTypeId, string subject, string body)
        {
            var leaderRecord = _participantRepository.GetParticipantRecord(token);
            var groups       = _groupService.GetGroupByIdForAuthenticatedUser(token, groupId);

            if (groups == null || !groups.Any())
            {
                throw new GroupNotFoundForParticipantException($"Could not find group {groupId} for groupParticipant {leaderRecord.ParticipantId}");
            }

            if (!ValidateUserAsLeader(token, groupTypeId, groupId, leaderRecord.ParticipantId, groups.First()))
            {
                throw new NotGroupLeaderException($"Group participant ID {leaderRecord.ParticipantId} is not a leader of group {groupId}");
            }

            var fromContact = new MpContact
            {
                ContactId    = 1519180,
                EmailAddress = "*****@*****.**"
            };

            var replyToContact = new MpContact
            {
                ContactId    = leaderRecord.ContactId,
                EmailAddress = leaderRecord.EmailAddress
            };

            var toContacts = groups.First().Participants.Select(groupParticipant => new MpContact
            {
                ContactId    = groupParticipant.ContactId,
                EmailAddress = groupParticipant.Email
            }).DistinctBy(c => c.EmailAddress).ToList();

            var email = new MpCommunication
            {
                EmailBody      = body,
                EmailSubject   = subject,
                AuthorUserId   = 5,
                DomainId       = _domainId,
                FromContact    = fromContact,
                ReplyToContact = replyToContact,
                ToContacts     = toContacts
            };

            _communicationRepository.SendMessage(email);
        }
예제 #10
0
        // 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);
        }
예제 #11
0
        public void SendEmail(EmailCommunicationDTO email, string token)
        {
            var template = _communicationService.GetTemplate(email.TemplateId);

            if (token == null && email.FromUserId == null && template.FromContactId == 0)
            {
                throw (new InvalidOperationException("Must provide either email.FromUserId from  or an authentication token."));
            }

            var replyToContactId = email.ReplyToContactId ?? template.ReplyToContactId;
            var replyTo          = new MpContact {
                ContactId = replyToContactId, EmailAddress = _communicationService.GetEmailFromContactId(replyToContactId)
            };

            var fromContactId = email.FromContactId ?? template.FromContactId;
            var from          = new MpContact {
                ContactId = fromContactId, EmailAddress = _communicationService.GetEmailFromContactId(fromContactId)
            };

            MpContact to = GetMpContactFromEmailCommunicationDto(email);

            var communication = new MpCommunication
            {
                DomainId       = DomainID,
                AuthorUserId   = email.FromUserId ?? DefaultAuthorUserId,
                TemplateId     = email.TemplateId,
                EmailBody      = template.Body,
                EmailSubject   = template.Subject,
                ReplyToContact = replyTo,
                FromContact    = from,
                StartDate      = email.StartDate ?? DateTime.Now,
                MergeData      = email.MergeData,
                ToContacts     = new List <MpContact>()
            };

            communication.ToContacts.Add(to);

            if (!communication.MergeData.ContainsKey("BaseUrl"))
            {
                communication.MergeData.Add("BaseUrl", _configurationWrapper.GetConfigValue("BaseUrl"));
            }

            _communicationService.SendMessage(communication);
        }
예제 #12
0
        public MpContact GetEmailFromDonorId(int donorId)
        {
            MpContact contact = new MpContact();

            try
            {
                string searchFilter = $"Donor_Record={donorId}";
                var    foundEmails  = _ministryPlatformRest.UsingAuthenticationToken(base.ApiLogin()).Search <MpContact>(searchFilter, "Contact_ID, Donor_Record, Email_Address");
                if (foundEmails.Count == 1)
                {
                    contact = foundEmails.First();
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException(
                          string.Format("GetEmailFromDonorId failed.  Donor Id: {0}", donorId), ex);
            }

            return(contact);
        }
예제 #13
0
        /// <summary>
        /// Sends a participant and email based off of a template ID and any merge data you need for that template.
        /// </summary>
        /// <param name="participant"></param>
        /// <param name="templateId"></param>
        /// <param name="mergeData"></param>
        public int SendSingleGroupParticipantEmail(GroupParticipantDTO participant, int templateId, Dictionary <string, object> mergeData)
        {
            var emailTemplate = _communicationRepository.GetTemplate(templateId);

            var domainId = Convert.ToInt32(_domainId);
            var from     = new MpContact
            {
                ContactId    = emailTemplate.FromContactId,
                EmailAddress = emailTemplate.FromEmailAddress
            };

            var to = new List <MpContact>
            {
                new MpContact
                {
                    ContactId    = participant.ContactId,
                    EmailAddress = participant.Email
                }
            };

            var message = new MpCommunication
            {
                EmailBody      = emailTemplate.Body,
                EmailSubject   = emailTemplate.Subject,
                AuthorUserId   = 5,
                DomainId       = domainId,
                FromContact    = from,
                MergeData      = mergeData,
                ReplyToContact = from,
                TemplateId     = templateId,
                ToContacts     = to,
                StartDate      = DateTime.Now
            };

            // ReSharper disable once RedundantArgumentDefaultValue
            return(_communicationRepository.SendMessage(message, false));
        }
예제 #14
0
        private MpContact GetMpContactFromEmailCommunicationDto(EmailCommunicationDTO email)
        {
            MpContact to;

            if (!email.ToContactId.HasValue && email.emailAddress == null)
            {
                throw (new InvalidOperationException("Must provide either ToContactId or emailAddress."));
            }

            if (email.ToContactId.HasValue)
            {
                return(new MpContact {
                    ContactId = email.ToContactId.Value, EmailAddress = _communicationService.GetEmailFromContactId(email.ToContactId.Value)
                });
            }

            var contactId = 0;

            try
            {
                contactId = _contactService.GetContactIdByEmail(email.emailAddress);
            }
            catch (Exception)
            {
                //work around incorrectly handled case where multiple contacts exists for a single contact
                contactId = 0;
            }
            if (contactId == 0)
            {
                contactId = DefaultContactEmailId;
            }
            to = new MpContact {
                ContactId = contactId, EmailAddress = email.emailAddress
            };

            return(to);
        }
예제 #15
0
        private static MpCommunication SMCommunication(int templateId, Dictionary <string, object> mergeData, string emailAddr, int contactId)
        {
            var from = new MpContact {
                ContactId = 122222, EmailAddress = "*****@*****.**"
            };

            return(new MpCommunication
            {
                AuthorUserId = 1,
                DomainId = 1,
                EmailBody = "<h1> hello </h1>",
                FromContact = from,
                ReplyToContact = from,
                TemplateId = templateId,
                EmailSubject = "whateva",
                MergeData = mergeData,
                ToContacts = new List <MpContact>()
                {
                    new MpContact {
                        EmailAddress = emailAddr, ContactId = contactId
                    }
                }
            });
        }
예제 #16
0
        private static MpCommunication NoReferenceCommunication(int templateId, Dictionary <string, object> mergeData, MpMyContact toContact)
        {
            var from = new MpContact()
            {
                ContactId = 122222, EmailAddress = "*****@*****.**"
            };

            return(new MpCommunication
            {
                AuthorUserId = 1,
                DomainId = 1,
                EmailBody = "<h1> hello </h1>",
                FromContact = from,
                ReplyToContact = from,
                TemplateId = templateId,
                EmailSubject = "Interview Needed",
                MergeData = mergeData,
                ToContacts = new List <MpContact> {
                    new MpContact {
                        EmailAddress = toContact.Email_Address, ContactId = toContact.Contact_ID
                    }
                }
            });
        }
예제 #17
0
        public List <MpRecordID> CreateContact(MpContact minorContact)
        {
            var storedProc = _configurationWrapper.GetConfigValue("CreateContactStoredProc");
            var apiToken   = _apiUserRepository.GetToken();
            var fields     = new Dictionary <String, Object>
            {
                { "@FirstName", minorContact.FirstName },
                { "@LastName", minorContact.LastName },
                { "@MiddleName", minorContact.MiddleName },
                { "@PreferredName", minorContact.PreferredName },
                { "@NickName", minorContact.Nickname },
                { "@Birthdate", minorContact.BirthDate },
                { "@Gender", minorContact.Gender },
                { "@SchoolAttending", minorContact.SchoolAttending },
                { "@HouseholdId", minorContact.HouseholdId },
                { "@HouseholdPosition", minorContact.HouseholdPositionId },
                { "@MobilePhone", minorContact.MobilePhone }
            };

            var result        = _ministryPlatformRest.UsingAuthenticationToken(apiToken).GetFromStoredProc <MpRecordID>(storedProc, fields);
            var contactIdList = result.FirstOrDefault() ?? new List <MpRecordID>();

            return(contactIdList);
        }
예제 #18
0
        private void SendEmail(MpInvitation invitation, MpParticipant leader, MpGroup group)
        {
            var leaderContact = _contactRepository.GetContactById(leader.ContactId);

            // basic merge data here
            var mergeData = new Dictionary <string, object>
            {
                { "Invitation_GUID", invitation.InvitationGuid },
                { "Recipient_Name", invitation.RecipientName },
            };

            int emailTemplateId;

            if (invitation.InvitationType == _groupInvitationType)
            {
                if (invitation.CustomMessage != null)
                {
                    emailTemplateId = _groupInvitationEmailTemplateCustom;
                    mergeData.Add("Leader_Message", invitation.CustomMessage);
                }
                else
                {
                    emailTemplateId = _groupInvitationEmailTemplate;
                }
                mergeData.Add("Leader_Name", leaderContact.Nickname + " " + leaderContact.Last_Name);
                mergeData.Add("Group_Name", group.Name);
            }
            else if (invitation.InvitationType == _tripInvitationType)
            {
                emailTemplateId = _tripInvitationEmailTemplate;
            }
            else if (invitation.InvitationType == _anywhereGatheringInvitationTypeId)
            {
                mergeData["Recipient_Name"] = invitation.RecipientName.Substring(0, 1).ToUpper() + invitation.RecipientName.Substring(1).ToLower();
                mergeData.Add("Leader_Name", leaderContact.Nickname.Substring(0, 1).ToUpper() + leaderContact.Nickname.Substring(1).ToLower() + " " + leaderContact.Last_Name.Substring(0, 1).ToUpper() + ".");
                mergeData.Add("City", group.Address.City);
                mergeData.Add("State", group.Address.State);
                mergeData.Add("Description", group.GroupDescription);
                mergeData.Add("Group_ID", group.GroupId);
                emailTemplateId = _anywhereGatheringInvitationEmailTemplate;
            }
            else
            {
                emailTemplateId = _defaultInvitationEmailTemplate;
            }
            var emailTemplate = _communicationService.GetTemplate(emailTemplateId);
            var fromContact   = new MpContact
            {
                ContactId    = emailTemplate.FromContactId,
                EmailAddress = emailTemplate.FromEmailAddress
            };
            var replyTo = new MpContact
            {
                ContactId    = leader.ContactId,
                EmailAddress = leader.EmailAddress
            };

            var to = new List <MpContact>
            {
                new MpContact
                {
                    // Just need a contact ID here, doesn't have to be for the recipient
                    ContactId    = emailTemplate.FromContactId,
                    EmailAddress = invitation.EmailAddress
                }
            };



            var confirmation = new MpCommunication
            {
                EmailBody      = emailTemplate.Body,
                EmailSubject   = emailTemplate.Subject,
                AuthorUserId   = 5,
                DomainId       = _domainId,
                FromContact    = fromContact,
                ReplyToContact = replyTo,
                TemplateId     = emailTemplateId,
                ToContacts     = to,
                MergeData      = mergeData
            };

            _communicationService.SendMessage(confirmation);
        }
예제 #19
0
        public CampReservationDTO SaveCampReservation(CampReservationDTO campReservation, int eventId, string token)
        {
            var nickName  = string.IsNullOrWhiteSpace(campReservation.PreferredName) ? campReservation.FirstName : campReservation.PreferredName;
            var contactId = Convert.ToInt32(campReservation.ContactId);

            var minorContact = new MpContact
            {
                FirstName           = campReservation.FirstName,
                LastName            = campReservation.LastName,
                PreferredName       = $"{campReservation.LastName}, {campReservation.FirstName}",
                MiddleName          = campReservation.MiddleName,
                MobilePhone         = campReservation.MobilePhone,
                BirthDate           = Convert.ToDateTime(campReservation.BirthDate),
                Gender              = campReservation.Gender,
                Nickname            = nickName,
                SchoolAttending     = campReservation.SchoolAttending,
                HouseholdId         = (_contactRepository.GetMyProfile(token)).Household_ID,
                HouseholdPositionId = 2
            };

            MpParticipant participant;

            if (campReservation.ContactId == null || campReservation.ContactId == 0)
            {
                var newMinorContact = _contactRepository.CreateContact(minorContact);
                contactId   = newMinorContact[0].RecordId;
                participant = _participantRepository.GetParticipant(contactId);
                campReservation.ContactId = contactId;
            }
            else
            {
                var updateToDictionary = new Dictionary <String, Object>
                {
                    { "Contact_ID", Convert.ToInt32(campReservation.ContactId) },
                    { "First_Name", minorContact.FirstName },
                    { "Last_Name", minorContact.LastName },
                    { "Middle_Name", minorContact.MiddleName },
                    { "Nickname", nickName },
                    { "Mobile_Phone", minorContact.MobilePhone },
                    { "Gender_ID", campReservation.Gender },
                    { "Date_Of_Birth", minorContact.BirthDate },
                    { "Current_School", minorContact.SchoolAttending },
                    { "Congregation_Name", (_congregationRepository.GetCongregationById(campReservation.CrossroadsSite)).Name }
                };

                _contactRepository.UpdateContact(Convert.ToInt32(campReservation.ContactId), updateToDictionary);
                participant = _participantRepository.GetParticipant(Convert.ToInt32(campReservation.ContactId));
            }

            // Save shirt size if set
            var configuration = MpObjectAttributeConfigurationFactory.Contact();

            _objectAttributeService.SaveObjectAttributes(contactId, campReservation.AttributeTypes, campReservation.SingleAttributes, configuration);

            // Save students in selected grade group
            var group = _groupRepository.GetGradeGroupForContact(contactId, _apiUserRepository.GetToken());

            if (group.Status && group.Value.GroupId != campReservation.CurrentGrade)
            {
                _groupRepository.endDateGroupParticipant(group.Value.GroupParticipantId, group.Value.GroupId, DateTime.Now);
                _groupRepository.addParticipantToGroup(participant.ParticipantId,
                                                       campReservation.CurrentGrade,
                                                       _configurationWrapper.GetConfigIntValue("Group_Role_Default_ID"),
                                                       false,
                                                       DateTime.Now);
            }
            else if (!group.Status)
            {
                _groupRepository.addParticipantToGroup(participant.ParticipantId,
                                                       campReservation.CurrentGrade,
                                                       _configurationWrapper.GetConfigIntValue("Group_Role_Default_ID"),
                                                       false,
                                                       DateTime.Now);
            }

            // Check if this person is already an event participant
            var eventParticipant = _eventParticipantRepository.GetEventParticipantEligibility(eventId, contactId);
            var currentlyActive  = (eventParticipant != null && (eventParticipant.EndDate == null || eventParticipant.EndDate >= DateTime.Now));
            var rulesPass        = true;

            if (!currentlyActive)
            {
                rulesPass = _campRules.VerifyCampRules(eventId, campReservation.Gender);
            }

            // ALL OF THE BELOW CODE SHOULD ONLY HAPPEN IF THE RULES PASS
            if (rulesPass)
            {
                //Create eventParticipant
                int eventParticipantId;

                // This is a new event participant, determine their pending timeout and create their entry in the database
                if (eventParticipant == null)
                {
                    var endDate = DetermineEndDate(eventId);
                    eventParticipantId = _eventRepository.RegisterInterestedParticipantWithEndDate(participant.ParticipantId, eventId, endDate);
                }
                else
                {
                    eventParticipantId = eventParticipant.EventParticipantId;

                    // If the participant had previously started an application which expired, update its End Date now
                    if (eventParticipant.EndDate != null && eventParticipant.EndDate < DateTime.Now)
                    {
                        var endDate = DetermineEndDate(eventId);
                        _eventRepository.UpdateParticipantEndDate(eventParticipantId, endDate);
                    }
                }
                var crossroadsSite = _congregationRepository.GetCongregationById(campReservation.CrossroadsSite);

                //form response
                var answers = new List <MpFormAnswer>
                {
                    new MpFormAnswer
                    {
                        Response           = campReservation.SchoolAttendingNext,
                        FieldId            = _configurationWrapper.GetConfigIntValue("SummerCampForm.SchoolAttendingNextYear"),
                        EventParticipantId = eventParticipantId
                    },
                    new MpFormAnswer
                    {
                        Response           = campReservation.RoomMate,
                        FieldId            = _configurationWrapper.GetConfigIntValue("SummerCampForm.PreferredRoommate"),
                        EventParticipantId = eventParticipantId
                    },
                    new MpFormAnswer
                    {
                        Response           = crossroadsSite.Name,
                        FieldId            = _configurationWrapper.GetConfigIntValue("SummerCampForm.CamperCongregation"),
                        EventParticipantId = eventParticipantId
                    }
                };

                var formId       = _configurationWrapper.GetConfigIntValue("SummerCampFormID");
                var formResponse = new MpFormResponse
                {
                    ContactId   = contactId,
                    FormId      = formId,
                    FormAnswers = answers,
                    EventId     = eventId
                };

                _formSubmissionRepository.SubmitFormResponse(formResponse);
                return(campReservation);
            }
            throw new ApplicationException("Rules do not pass!");
        }
예제 #20
0
        public void SendGroupParticipantEmail(int groupId,
                                              GroupDTO group,
                                              int emailTemplateId,
                                              MpParticipant toParticipant,
                                              string subjectTemplateContentBlockTitle = null,
                                              string emailTemplateContentBlockTitle   = null,
                                              string message = null,
                                              MpParticipant fromParticipant = null)
        {
            var participant = new GroupParticipantDTO
            {
                ContactId     = toParticipant.ContactId,
                Email         = toParticipant.EmailAddress,
                NickName      = toParticipant.PreferredName,
                ParticipantId = toParticipant.ParticipantId
            };

            var emailTemplate = _communicationRepository.GetTemplate(emailTemplateId);

            var fromContact = new MpContact
            {
                ContactId    = emailTemplate.FromContactId,
                EmailAddress = emailTemplate.FromEmailAddress
            };

            var replyTo = new MpContact
            {
                ContactId    = fromParticipant?.ContactId ?? emailTemplate.ReplyToContactId,
                EmailAddress = fromParticipant == null ? emailTemplate.ReplyToEmailAddress : fromParticipant.EmailAddress
            };

            var leader = _contactRepository.GetContactById(replyTo.ContactId);

            var to = new List <MpContact>
            {
                new MpContact
                {
                    ContactId    = participant.ContactId,
                    EmailAddress = participant.Email
                }
            };

            var subjectTemplateText = string.IsNullOrWhiteSpace(subjectTemplateContentBlockTitle)
                ? string.Empty
                : _contentBlockService[subjectTemplateContentBlockTitle].Content ?? string.Empty;

            var emailTemplateText = string.IsNullOrWhiteSpace(emailTemplateContentBlockTitle) ? string.Empty : _contentBlockService[emailTemplateContentBlockTitle].Content;

            var mergeData = getDictionary(participant);

            mergeData["Email_Custom_Message"] = string.IsNullOrWhiteSpace(message) ? string.Empty : message;
            mergeData["Group_Name"]           = group.GroupName;
            mergeData["Group_Description"]    = group.GroupDescription;
            mergeData["Leader_Name"]          = leader.Nickname != null && leader.Last_Name != null ? leader.Nickname + " " + leader.Last_Name : replyTo.EmailAddress;
            mergeData["City"]  = group.Address.City;
            mergeData["State"] = group.Address.State;
            if (fromParticipant != null)
            {
                mergeData["From_Display_Name"]   = fromParticipant.DisplayName;
                mergeData["From_Preferred_Name"] = fromParticipant.PreferredName;
            }

            // Since the templates are coming from content blocks, they may have replacement tokens in them as well.
            // These will not get replaced with merge data in _communicationRepository.SendMessage(), (it doesn't doubly
            // replace) so we'll parse them here before adding them to the merge data.
            mergeData["Subject_Template_Text"] = _communicationRepository.ParseTemplateBody(Regex.Replace(subjectTemplateText, "<.*?>", string.Empty), mergeData);
            mergeData["Email_Template_Text"]   = _communicationRepository.ParseTemplateBody(emailTemplateText, mergeData);

            var email = new MpCommunication
            {
                EmailBody      = emailTemplate.Body,
                EmailSubject   = emailTemplate.Subject,
                AuthorUserId   = _emailAuthorId,
                DomainId       = _domainId,
                FromContact    = fromContact,
                ReplyToContact = replyTo,
                TemplateId     = emailTemplateId,
                ToContacts     = to,
                MergeData      = mergeData
            };

            _communicationRepository.SendMessage(email);
        }
예제 #21
0
        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 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();
        }