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