예제 #1
0
        /// <summary>
        /// Mails the chimp campaign sync.
        /// </summary>
        /// <param name="BranchId">The branch id.</param>
        /// <param name="mailChimpAPIKey">The mail chimp API key.</param>
        /// <param name="dualSync"></param>
        private void MailChimpCampaignSync(int BranchId, string mailChimpAPIKey, bool dualSync)
        {
            var mailChimpCampaigns      = _mailChimpApi.GetMailChimpCampaigns(mailChimpAPIKey);
            var mailChimpCampaignsTable = _dataAccess.GetMailChimpCampaigns(BranchId.ToString());

            var mcclistIds      = (from item in mailChimpCampaigns select item.id).ToList();
            var mcclistTableIds = (from item in mailChimpCampaignsTable select item.CId).ToList();

            /*mc-server   local-db
             * 0            1
             */
            var mclistIsNotInMcSvrIds = mcclistTableIds.Except(mcclistIds);

            foreach (string campaignId in mclistIsNotInMcSvrIds)
            {
                DeleteMailChimpCampaignsAndUpdateContactMailCampaigns(campaignId, BranchId);
            }

            /*mc-server   local-db
             * 0            1
             */

            if (dualSync)
            {
                var newCampaignIdsFromMc = mcclistIds.Except(mcclistTableIds);
                var newCampaignsFromMc   = from campaign in mailChimpCampaigns where newCampaignIdsFromMc.Contains(campaign.id) select campaign;
                var mailChimpCampaign    = new Common.Table.MailChimpCampaign();
                foreach (var campaign in newCampaignsFromMc)
                {
                    mailChimpCampaign          = new Common.Table.MailChimpCampaign();
                    mailChimpCampaign.CId      = campaign.id;
                    mailChimpCampaign.Name     = campaign.title;
                    mailChimpCampaign.BranchId = BranchId;
                    _dataAccess.AddMailChimpCampaigns(mailChimpCampaign);
                }
                var campaignMembers = new Dictionary <string, List <campaignMembersResults.DataItem> >();
                foreach (var chimpCampaign in mailChimpCampaigns)
                {
                    List <campaignMembersResults.DataItem> members = null;
                    try
                    {
                        members = _mailChimpApi.GetMailChimpCampaignMembers(mailChimpAPIKey, chimpCampaign.id);
                    }
                    catch (Exception exception)
                    {
                        string err = MethodBase.GetCurrentMethod() + "\r\n\r\nException: " + exception.Message + "\r\n\r\nStackTrace: " + exception.StackTrace;
                        Trace.TraceError(exception.Message);
                        int Event_id = 2014;
                        //EventLog.WriteEntry(InfoHubEventLog.LogSource, err, EventLogEntryType.Warning, Event_id, Category);
                    }
                    if (members != null && members.Count > 0)
                    {
                        campaignMembers.Add(chimpCampaign.id, members);
                    }
                }

                //update ContactMailCampaign
                foreach (var campaignMemberInfo in campaignMembers)
                {
                    foreach (var campaignMember in campaignMemberInfo.Value)
                    {
                        try
                        {
                            _dataAccess.UpdateContactMailCampaign(campaignMember.email, campaignMemberInfo.Key, "Successful");
                        }
                        catch (Exception exception)
                        {
                            string err = MethodBase.GetCurrentMethod() + "\r\n\r\nException: " + exception.Message + "\r\n\r\nStackTrace: " + exception.StackTrace;
                            Trace.TraceError(exception.Message);
                            int Event_id = 2015;
                            EventLog.WriteEntry(InfoHubEventLog.LogSource, err, EventLogEntryType.Warning, Event_id, Category);
                        }
                    }
                }

                //update ContactMailCampaign
                var lastRun        = _dataAccess.GetLastRunDatetime("MailChimpManager");
                var bounceMessages = new Dictionary <string, List <campaignBounceMessagesResults.DataItem> >();
                foreach (var chimpCampaign in mailChimpCampaigns)
                {
                    var messages = new List <campaignBounceMessagesResults.DataItem>();
                    messages = _mailChimpApi.GetCampaignBounceMessages(mailChimpAPIKey, chimpCampaign.id, lastRun);
                    if (messages != null && messages.Count > 0)
                    {
                        bounceMessages.Add(chimpCampaign.id, messages);
                    }
                }
                foreach (var bounceMessageInfo in bounceMessages)
                {
                    foreach (var bounceMessage in bounceMessageInfo.Value)
                    {
                        if (string.IsNullOrEmpty(bounceMessage.email))
                        {
                            continue;
                        }

                        try
                        {
                            _dataAccess.UpdateContactMailCampaign(bounceMessage.email, bounceMessageInfo.Key, "Bounced");
                        }
                        catch (Exception exception)
                        {
                            string err = MethodBase.GetCurrentMethod() + "\r\n\r\nException: " + exception.Message + "\r\n\r\nStackTrace: " + exception.StackTrace;
                            Trace.TraceError(exception.Message);
                            int Event_id = 2016;
                            EventLog.WriteEntry(InfoHubEventLog.LogSource, err, EventLogEntryType.Warning, Event_id, Category);
                        }
                    }
                }
            }
        }