/// <summary> /// Invites the portal user. /// </summary> /// <param name="siteId">The site id.</param> /// <param name="contactId">The contact id.</param> /// <param name="taskId">The task id.</param> /// <param name="siteActionTemplate">The site action template.</param> /// <returns></returns> public tbl_User InvitePortalUser(Guid siteId, Guid contactId, Guid taskId, tbl_SiteActionTemplate siteActionTemplate) { var user = _dataContext.tbl_User.SingleOrDefault(u => u.ContactID == contactId && u.SiteID == siteId) ?? AddPortalUser(siteId, contactId); if (user != null) { var dataManager = new DataManager(); var siteActionTemaplate = dataManager.SiteActionTemplate.SelectBySystemName(siteId, siteActionTemplate.SystemName); if (siteActionTemaplate == null) { siteActionTemaplate = siteActionTemplate; siteActionTemaplate.SiteID = siteId; siteActionTemaplate = dataManager.SiteActionTemplate.Add(siteActionTemaplate); } var siteAction = new tbl_SiteAction { SiteID = siteId, SiteActionTemplateID = siteActionTemaplate.ID, ContactID = contactId, ActionStatusID = (int)ActionStatus.Scheduled, ActionDate = DateTime.Now, ObjectID = taskId, MessageTypeID = (int)MessageType.TaskNotification, DirectionID = (int)Direction.Out, MessageTitle = siteActionTemplate.Title }; dataManager.SiteAction.Add(siteAction); } return(user); }
/// <summary> /// Sends to contact. /// </summary> /// <param name="invoiceId">The invoice id.</param> /// <param name="contactId">The contact id.</param> public static void SendToContact(Guid invoiceId, Guid contactId) { var dataManager = new DataManager(); var invoice = dataManager.Invoice.SelectById(invoiceId); var siteActionTemplate = dataManager.SiteActionTemplate.SelectSystemSiteActionTemplate(invoice.SiteID, SiteActionTemplates.InvoicingNotification); var siteAction = new tbl_SiteAction { SiteID = invoice.SiteID, SiteActionTemplateID = siteActionTemplate.ID, ContactID = contactId, ActionStatusID = (int)ActionStatus.Scheduled, ActionDate = DateTime.Now, ObjectID = invoice.ID, MessageTypeID = (int)MessageType.InvoiceNotification, DirectionID = (int)Direction.Out, MessageTitle = siteActionTemplate.Title }; dataManager.SiteAction.Add(siteAction); var siteActionAttachment = new tbl_SiteActionAttachment { SiteID = siteAction.SiteID, SiteActionID = siteAction.ID, FileName = string.Empty }; dataManager.SiteActionAttachment.Add(siteActionAttachment); }
/// <summary> /// Adds the notification. /// </summary> /// <param name="siteId">The site id.</param> /// <param name="portalSettingsId">The portal settings id.</param> /// <param name="contactId">The contact id.</param> /// <param name="siteActionTemplate">The site action template.</param> /// <param name="messageType">Type of the message.</param> public void AddNotification(Guid siteId, Guid portalSettingsId, Guid contactId, tbl_SiteActionTemplate siteActionTemplate, MessageType messageType) { var dataManager = new DataManager(); var siteActionTemaplate = dataManager.SiteActionTemplate.SelectBySystemName(siteId, siteActionTemplate.SystemName); if (siteActionTemaplate == null) { siteActionTemaplate = siteActionTemplate; siteActionTemaplate.SiteID = siteId; siteActionTemaplate = dataManager.SiteActionTemplate.Add(siteActionTemaplate); } var siteAction = new tbl_SiteAction { SiteID = siteId, SiteActionTemplateID = siteActionTemaplate.ID, ContactID = contactId, ActionStatusID = (int)ActionStatus.Scheduled, ActionDate = DateTime.Now, ObjectID = portalSettingsId, MessageTypeID = (int)messageType, DirectionID = (int)Direction.Out, MessageTitle = siteActionTemplate.Title }; dataManager.SiteAction.Add(siteAction); }
/// <summary> /// Adds the specified site action. /// </summary> /// <param name="siteAction">The site action.</param> /// <returns></returns> public tbl_SiteAction Add(tbl_SiteAction siteAction) { siteAction.ID = Guid.NewGuid(); _dataContext.tbl_SiteAction.AddObject(siteAction); _dataContext.SaveChanges(); return(siteAction); }
/// <summary> /// Updates the specified site action. /// </summary> /// <param name="siteAction">The site action.</param> public void Update(tbl_SiteAction siteAction) { var updateSiteAction = SelectById(siteAction.SiteID, siteAction.ID); updateSiteAction.SiteActionTemplateID = siteAction.SiteActionTemplateID; updateSiteAction.ContactID = siteAction.ContactID; updateSiteAction.ActionStatusID = siteAction.ActionStatusID; updateSiteAction.ActionDate = siteAction.ActionDate; updateSiteAction.ResponseDate = siteAction.ResponseDate; updateSiteAction.Comments = siteAction.Comments; _dataContext.SaveChanges(); }
/// <summary> /// Pendings the payment. /// </summary> /// <param name="invocieId">The invocie id.</param> public static void PendingPayment(Guid invocieId) { var dataManager = new DataManager(); var invoice = dataManager.Invoice.SelectById(invocieId); if (!invoice.BuyerCompanyID.HasValue) { return; } var siteActionTemplate = dataManager.SiteActionTemplate.SelectSystemSiteActionTemplate(invoice.SiteID, SiteActionTemplates.InvoicingNotification); var client = dataManager.ServiceLevelClient.SelectByCompanyId(invoice.SiteID, invoice.BuyerCompanyID.Value); if (client != null) { var contacts = client.tbl_ServiceLevelContact.ToList(); foreach (var serviceLevelContact in contacts) { if (!serviceLevelContact.IsInformAboutInvoice) { continue; } var siteAction = new tbl_SiteAction { SiteID = invoice.SiteID, SiteActionTemplateID = siteActionTemplate.ID, ContactID = serviceLevelContact.ContactID, ActionStatusID = (int)ActionStatus.Scheduled, ActionDate = DateTime.Now, ObjectID = invoice.ID, MessageTypeID = (int)MessageType.InvoiceNotification, DirectionID = (int)Direction.Out, MessageTitle = siteActionTemplate.Title }; dataManager.SiteAction.Add(siteAction); if (serviceLevelContact.InvoiceInformFormID != (int)InvoiceInformForm.None) { var siteActionAttachment = new tbl_SiteActionAttachment { SiteID = siteAction.SiteID, SiteActionID = siteAction.ID, FileName = string.Empty }; dataManager.SiteActionAttachment.Add(siteActionAttachment); } } } }
/// <summary> /// Proceeds the attachments. /// </summary> /// <param name="siteAction">The site action.</param> /// <param name="attacments">The attacments.</param> private string ProceedAttachments(tbl_SiteAction siteAction, IEnumerable <MessagePart> attacments) { var fsp = new FileSystemProvider(); foreach (var attachment in attacments) { if (!attachment.IsAttachment) { continue; } var newFileName = fsp.Upload(siteAction.SiteID, "POP3SourceMonitorings", attachment.FileName, new MemoryStream(attachment.Body), FileType.Attachment); var siteActionAttachment = new tbl_SiteActionAttachment { SiteID = siteAction.SiteID, SiteActionID = siteAction.ID, FileName = newFileName }; _dataManager.SiteActionAttachment.Add(siteActionAttachment); if (siteAction.MessageText.ToLower().Contains("<img")) { var regex = new Regex("src=[\"\']\\S*" + attachment.FileName.Replace(Path.GetExtension(attachment.FileName), string.Empty) + "[\\S]+[\"\']"); foreach (Match match in regex.Matches(siteAction.MessageText)) { if (!match.Value.Contains("http://")) { siteAction.MessageText = siteAction.MessageText.Replace(match.Value, string.Format( "src=\"{0}{1}\"", Settings. LeadForceSiteUrl, fsp.GetLink(siteAction.SiteID, "POP3SourceMonitorings", newFileName, FileType.Attachment))); } } } } _dataManager.SiteAction.Update(siteAction); return(siteAction.MessageText); }
/// <summary> /// Adds to queue site action. /// </summary> /// <param name="massMailId">The mass mail id.</param> public void AddToQueueSiteAction(Guid massMailId) { var massMail = _dataContext.tbl_MassMail.SingleOrDefault(a => a.ID == massMailId); List <Guid> contactIds; if (massMail != null) { var dc = new WebCounterEntities(); var siteActionTemplate = dc.tbl_SiteActionTemplate.SingleOrDefault(a => a.ID == massMail.SiteActionTemplateID); massMail.MassMailStatusID = (int)MassMailStatus.Done; if (massMail.SiteTagID.HasValue) { contactIds = _dataContext.tbl_SiteTagObjects.Where(a => a.SiteTagID == massMail.SiteTagID).Select(a => a.ObjectID).ToList(); Save(massMail.SiteID, contactIds, massMailId); } else { contactIds = _dataContext.tbl_MassMailContact.Where(a => a.MassMailID == massMailId).Select(a => a.ContactID).ToList(); } foreach (var contactId in contactIds) { var siteActionId = Guid.NewGuid(); var siteAction = new tbl_SiteAction { ID = siteActionId, SiteID = massMail.SiteID, SiteActionTemplateID = massMail.SiteActionTemplateID, ContactID = contactId, ObjectID = massMail.ID, MessageTypeID = (int)MessageType.MassMail, ActionStatusID = (int)ActionStatus.Scheduled, ActionDate = (DateTime)massMail.MailDate, OwnerID = massMail.OwnerID, MessageTitle = siteActionTemplate.MessageCaption, MessageText = siteActionTemplate.MessageBody }; _dataContext.tbl_SiteAction.AddObject(siteAction); var updateMassMailContact = _dataContext.tbl_MassMailContact.SingleOrDefault(a => a.MassMailID == massMailId && a.ContactID == contactId); updateMassMailContact.SiteActionID = siteActionId; } } _dataContext.SaveChanges(); }
/// <summary> /// Handles the Click event of the BtnSend control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> protected void BtnSend_Click(object sender, EventArgs e) { if (!access.Write) { return; } var massMail = DataManager.MassMail.SelectById(SiteId, _massMailId); massMail.SiteID = SiteId; massMail.Name = ((TextBox)fvMassMail.FindControl("txtName")).Text; massMail.MailDate = DateTime.Now; //massMail.SiteActionTemplateID = Guid.Parse(((TextBox)fvMassMail.FindControl("txtSiteActionTemplateId")).Text); massMail.SiteActionTemplateID = (Guid)((UserControls.SiteActionTemplate)fvMassMail.FindControl("ucSiteActionTemplate")).SelectedSiteActionTemplateId; ((UserControls.SiteActionTemplate)fvMassMail.FindControl("ucSiteActionTemplate")).UpdateSiteActionTemplate(massMail.ID, massMail.SiteActionTemplateID); massMail.MassMailStatusID = (int)MassMailStatusType.Done; if (!string.IsNullOrEmpty(((TextBox)fvMassMail.FindControl("txtFocusGroup")).Text)) { massMail.FocusGroup = int.Parse(((TextBox)fvMassMail.FindControl("txtFocusGroup")).Text); } DataManager.MassMail.Update(massMail); var massMailContacts = DataManager.MassMailContact.SelectByMassMailId(SiteId, _massMailId).Where(a => a.SiteActionID == null); var siteAction = new tbl_SiteAction(); foreach (var massMailContact in massMailContacts) { siteAction = new tbl_SiteAction(); siteAction.SiteID = SiteId; siteAction.SiteActionTemplateID = massMail.SiteActionTemplateID; siteAction.ContactID = massMailContact.ContactID; siteAction.ObjectID = massMail.ID; siteAction.MessageTypeID = (int)MessageType.MassMail; siteAction.ActionStatusID = (int)ActionStatus.Scheduled; siteAction.ActionDate = DateTime.Now; siteAction.OwnerID = CurrentUser.Instance.ContactID; DataManager.SiteAction.Add(siteAction); massMailContact.SiteActionID = siteAction.ID; DataManager.MassMailContact.Update(massMailContact); } //BindData(); Response.Redirect(UrlsData.AP_MassMail(massMail.ID)); }
/// <summary> /// Handles the OnTemplateSaved event of the ucPopupSiteActionTemplate control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="WebCounter.AdminPanel.UserControls.PopupSiteActionTemplate.TemplateSavedEventArgs"/> instance containing the event data.</param> protected void ucPopupSiteActionTemplate_OnTemplateSaved(object sender, PopupSiteActionTemplate.TemplateSavedEventArgs e) { var siteActionTemplate = dataManager.SiteActionTemplate.SelectById(e.SelectedTemplateId); var siteAction = new tbl_SiteAction { SiteID = SiteId, SiteActionTemplateID = siteActionTemplate.ID, ContactID = _contactID, ActionStatusID = (int)ActionStatus.Scheduled, ActionDate = DateTime.Now, MessageTitle = siteActionTemplate.MessageCaption, MessageText = siteActionTemplate.MessageBody }; dataManager.SiteAction.Add(siteAction); }
/// <summary> /// Notifies the specified site id. /// </summary> /// <param name="siteId">The site id.</param> /// <param name="contactId">The contact id.</param> /// <param name="serviceLevelContactId">The service level contact id.</param> public static void Inform(Guid siteId, Guid contactId, Guid serviceLevelContactId) { var dataManager = new DataManager(); var siteActionTemplate = dataManager.SiteActionTemplate.SelectSystemSiteActionTemplate(siteId, SiteActionTemplates.InvoiceInformClientNotification); var siteAction = new tbl_SiteAction { SiteID = siteId, SiteActionTemplateID = siteActionTemplate.ID, ContactID = contactId, ActionStatusID = (int)ActionStatus.Scheduled, ActionDate = DateTime.Now, ObjectID = serviceLevelContactId, MessageTypeID = (int)MessageType.InvoiceNotification, DirectionID = (int)Direction.Out, MessageTitle = siteActionTemplate.Title }; dataManager.SiteAction.Add(siteAction); }
/// <summary> /// Adds the site action. /// </summary> /// <param name="request">The request.</param> /// <param name="systemSiteActionTemplate">The system site action template.</param> protected static void AddSiteAction(tbl_Request request, tbl_SiteActionTemplate systemSiteActionTemplate) { var dataManager = new DataManager(); var siteActionTemplate = dataManager.SiteActionTemplate.SelectSystemSiteActionTemplate(request.SiteID, systemSiteActionTemplate); var siteAction = new tbl_SiteAction { SiteID = request.SiteID, SiteActionTemplateID = siteActionTemplate.ID, ContactID = request.ContactID, ActionStatusID = (int)ActionStatus.Scheduled, ActionDate = DateTime.Now, ObjectID = request.ID, MessageTypeID = (int)MessageType.RequestNotification, DirectionID = (int)Direction.Out, MessageTitle = siteActionTemplate.Title }; dataManager.SiteAction.Add(siteAction); }
/// <summary> /// Changes the responsible. /// </summary> /// <param name="siteId">The site id.</param> /// <param name="requirementId">The requirement id.</param> /// <param name="responsibleId">The responsible id.</param> public static void ChangeResponsible(Guid siteId, Guid requirementId, Guid responsibleId) { var dataManager = new DataManager(); var siteActionTemplate = dataManager.SiteActionTemplate.SelectSystemSiteActionTemplate(siteId, SiteActionTemplates.RequirementChangeResponsibleNotification); var siteAction = new tbl_SiteAction { SiteID = siteId, SiteActionTemplateID = siteActionTemplate.ID, ContactID = responsibleId, ActionStatusID = (int)ActionStatus.Scheduled, ActionDate = DateTime.Now, ObjectID = requirementId, MessageTypeID = (int)MessageType.RequestNotification, DirectionID = (int)Direction.Out, MessageTitle = siteActionTemplate.Title }; dataManager.SiteAction.Add(siteAction); }
/// <summary> /// News the request. /// </summary> /// <param name="request">The request.</param> protected static void NewRequest(tbl_Request request) { var dataManager = new DataManager(); var siteActionTemplate = dataManager.SiteActionTemplate.SelectSystemSiteActionTemplate(request.SiteID, SiteActionTemplates.RequestNewNotification); var client = request.tbl_ServiceLevel.tbl_ServiceLevelClient.FirstOrDefault(o => o.ClientID == request.CompanyID); if (client != null) { var contacts = client.tbl_ServiceLevelContact.Where(o => o.ContactID != request.ContactID).ToList(); foreach (var serviceLevelContact in contacts) { if (!serviceLevelContact.IsInformByRequest) { continue; } var siteAction = new tbl_SiteAction { SiteID = request.SiteID, SiteActionTemplateID = siteActionTemplate.ID, ContactID = serviceLevelContact.ContactID, ActionStatusID = (int)ActionStatus.Scheduled, ActionDate = DateTime.Now, ObjectID = request.ID, MessageTypeID = (int)MessageType.RequestNotification, DirectionID = (int)Direction.Out, MessageTitle = siteActionTemplate.Title }; dataManager.SiteAction.Add(siteAction); } } }
public InvoiceNotificationTagsReplacer(tbl_SiteAction siteAction, ref MailMessage mailMessage) : base(siteAction, ref mailMessage) { }
public RequirementCommentNotificationTagsReplacer(tbl_SiteAction siteAction) : base(siteAction) { }
/// <summary> /// Adds the site action. /// </summary> /// <param name="requestComment">The request comment.</param> /// <param name="systemSiteActionTemplate">The system site action template.</param> protected static void AddSiteAction(tbl_RequestComment requestComment, tbl_SiteActionTemplate systemSiteActionTemplate) { var dataManager = new DataManager(); var siteActionTemplate = dataManager.SiteActionTemplate.SelectSystemSiteActionTemplate(requestComment.SiteID, systemSiteActionTemplate); var serviceLevelClient = dataManager.ServiceLevelClient.SelectByCompanyId(requestComment.SiteID, (Guid)requestComment.tbl_Request.CompanyID); if (serviceLevelClient == null) { return; } var serviceLevelContacts = dataManager.ServiceLevelContact.SelectByClientId(serviceLevelClient.ID).ToList(); var commentator = dataManager.User.SelectById(requestComment.UserID); tbl_User destination = null; if (requestComment.DestinationUserID.HasValue) { destination = dataManager.User.SelectById((Guid)requestComment.DestinationUserID); } foreach (var serviceLevelContact in serviceLevelContacts) { //Не высылать уведомление самому себе if (commentator != null && serviceLevelContact.ContactID == commentator.ContactID) { continue; } if (destination != null && serviceLevelContact.ContactID != destination.ContactID) { continue; } if (requestComment.IsInternal) { var user = dataManager.User.SelectByContactId(requestComment.SiteID, serviceLevelContact.ContactID); if (user == null || user.AccessLevelID == (int)AccessLevel.Portal) { continue; } } switch ((ServiceLevelInformComment)serviceLevelContact.InformCommentID) { case ServiceLevelInformComment.Not: continue; case ServiceLevelInformComment.Personal: if (requestComment.DestinationUserID.HasValue) { var user = dataManager.User.SelectById((Guid)requestComment.DestinationUserID); if (user.ContactID != serviceLevelContact.ContactID) { continue; } } else { continue; } break; case ServiceLevelInformComment.PersonalRequirement: if (requestComment.tbl_Request.ContactID != serviceLevelContact.ContactID && requestComment.tbl_Request.ResponsibleID != serviceLevelContact.ContactID) { continue; } break; } var siteAction = new tbl_SiteAction { SiteID = requestComment.SiteID, SiteActionTemplateID = siteActionTemplate.ID, ContactID = serviceLevelContact.ContactID, ActionStatusID = (int)ActionStatus.Scheduled, ActionDate = DateTime.Now, ObjectID = requestComment.ID, MessageTypeID = (int)MessageType.RequestCommentNotification, DirectionID = (int)Direction.Out, MessageTitle = siteActionTemplate.Title }; dataManager.SiteAction.Add(siteAction); } }
protected TemplateTagsReplacer(tbl_SiteAction siteAction, ref MailMessage mailMessage) { SiteAction = siteAction; MailMessage = mailMessage; }
protected TemplateTagsReplacer(tbl_SiteAction siteAction) { SiteAction = siteAction; }
public RequestNotificationTagsReplacer(tbl_SiteAction siteAction) : base(siteAction) { }
public TaskNotificationTagsReplacer(tbl_SiteAction siteAction) : base(siteAction) { }
public InvoiceCommentNotificationTagsReplacer(tbl_SiteAction siteAction) : base(siteAction) { }
/// <summary> /// Handles the OnClick event of the lbtnInviteFriend control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> protected void lbtnInviteFriend_OnClick(object sender, EventArgs e) { var refferContact = DataManager.Contact.SelectById(SiteId.Value, ContactId.Value); if (refferContact != null) { refferContact.Email = txtEmail.Text; refferContact.UserFullName = txtFullName.Text; CheckName(ref refferContact); DataManager.Contact.Update(refferContact); var contact = new tbl_Contact { SiteID = SiteId.Value, Email = txtFriendEmail.Text, UserFullName = txtFriendName.Text, RefferID = ContactId, RefferURL = string.Empty, IsNameChecked = false, UserIP = string.Empty, StatusID = DataManager.Status.SelectDefault(SiteId.Value).ID }; CheckName(ref contact); DataManager.Contact.Add(contact); var siteAction = new tbl_SiteAction { SiteID = SiteId.Value, SiteActionTemplateID = SiteActionTemplateId.Value, ContactID = contact.ID, ActionStatusID = (int)ActionStatus.Scheduled, ActionDate = DateTime.Now }; siteAction.tbl_SiteActionTagValue.Add(new tbl_SiteActionTagValue() { ID = Guid.NewGuid(), SiteActionID = siteAction.ID, Tag = "#InviteFriend.Comment#", Value = txtComment.Text }); siteAction.tbl_SiteActionTagValue.Add(new tbl_SiteActionTagValue() { ID = Guid.NewGuid(), SiteActionID = siteAction.ID, Tag = "#System.SenderEmail#", Value = refferContact.Email }); siteAction.tbl_SiteActionTagValue.Add(new tbl_SiteActionTagValue() { ID = Guid.NewGuid(), SiteActionID = siteAction.ID, Tag = "#System.SenderUserFullName#", Value = refferContact.UserFullName }); DataManager.SiteAction.Add(siteAction); if (WorkflowTemplateId.HasValue && WorkflowTemplateId.Value != Guid.Empty) { DataManager.WorkflowTemplate.WorkflowInit(contact.ID, WorkflowTemplateId.Value); } plForm.Visible = false; plSuccess.Visible = true; } }
/// <summary> /// Deletes the specified site action. /// </summary> /// <param name="siteAction">The site action.</param> public void Delete(tbl_SiteAction siteAction) { _dataContext.DeleteObject(siteAction); _dataContext.SaveChanges(); }
/// <summary> /// Proceeds the POP3 source. /// </summary> /// <param name="sourceMonitoring">The source monitoring.</param> private void ProceedPOP3Source(tbl_SourceMonitoring sourceMonitoring) { using (var client = new Pop3Client()) { client.Connect(sourceMonitoring.PopHost, (int)sourceMonitoring.PopPort, sourceMonitoring.IsSsl); client.Authenticate(sourceMonitoring.PopUserName, sourceMonitoring.PopPassword, AuthenticationMethod.UsernameAndPassword); var messageCount = client.GetMessageCount(); //Log.Debug(string.Format("Мониторинг ID: {0} количество сообщений {1}", sourceMonitoring.ID, messageCount)); for (int messageNumber = 1; messageNumber <= messageCount; messageNumber++) { try { MessageHeader headers = client.GetMessageHeaders(messageNumber); //Log.Debug(string.Format("Мониторинг ID: {0} дата сообщения {1}", sourceMonitoring.ID, headers.DateSent)); if (!_dataManager.SiteAction.IsExistPOPMessage(headers.MessageId) && !_dataManager.EmailToAnalysis.IsExistPOPMessage(headers.MessageId) && (!sourceMonitoring.StartDate.HasValue || headers.DateSent >= sourceMonitoring.StartDate)) { //Log.Debug(string.Format("Мониторинг ID: {0} тема {1}", sourceMonitoring.ID, headers.Subject)); var isValidMessage = true; var from = headers.From; var subject = headers.Subject ?? string.Empty; //Фильтр сообщений по полям var sourceMonitoringFilters = sourceMonitoring.tbl_SourceMonitoringFilter.ToList(); foreach (var sourceMonitoringFilter in sourceMonitoringFilters) { var regex = new Regex(sourceMonitoringFilter.Mask, RegexOptions.IgnoreCase); switch ((SourceEmailProperty)sourceMonitoringFilter.SourcePropertyID) { case SourceEmailProperty.FromEmail: isValidMessage = !regex.IsMatch(from.Address); break; case SourceEmailProperty.FromName: isValidMessage = !regex.IsMatch(from.DisplayName); break; case SourceEmailProperty.Title: isValidMessage = !regex.IsMatch(subject); break; } if (!isValidMessage) { break; } } var message = client.GetMessage(messageNumber); var messageText = string.Empty; if (message.FindFirstHtmlVersion() != null) { messageText = message.FindFirstHtmlVersion().GetBodyAsText(); } else if (message.FindFirstPlainTextVersion() != null) { messageText = message.FindFirstPlainTextVersion().GetBodyAsText(); } foreach (var sourceMonitoringFilter in sourceMonitoringFilters.Where(smf => (SourceEmailProperty)smf.SourcePropertyID == SourceEmailProperty.Text)) { isValidMessage = !new Regex(sourceMonitoringFilter.Mask, RegexOptions.IgnoreCase).IsMatch(messageText); if (!isValidMessage) { break; } } tbl_Contact sender = _dataManager.Contact.SelectByEmail(sourceMonitoring.SiteID, from.Address); //Обработка возвратов var isReturn = false; if (POP3MonitoringProcessingOfReturnsFromFilterCheck(from, messageText)) { sender = null; isReturn = true; var regex = new Regex(@"(?<email>(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*))", RegexOptions.IgnoreCase); var match = regex.Match(messageText); var returnEmail = string.Empty; if (match.Success) { returnEmail = match.Groups["email"].Value; sender = _dataManager.Contact.SelectByEmail(sourceMonitoring.SiteID, returnEmail); if (sender == null) { isValidMessage = false; } var emailStats = _dataManager.EmailStats.SelectByEmail(returnEmail); if (emailStats != null) { emailStats.ReturnCount++; _dataManager.EmailStats.Update(emailStats); } else { _dataManager.EmailStats.Add(new tbl_EmailStats { ReturnCount = 1, Email = returnEmail }); } } else { var emailToAnalysis = new tbl_EmailToAnalysis { SourceMonitoringID = sourceMonitoring.ID, From = headers.From.Address, Name = headers.From.DisplayName, MessageText = messageText, Subject = subject, POPMessageID = headers.MessageId }; _dataManager.EmailToAnalysis.Add(emailToAnalysis); isValidMessage = false; } if ((ProcessingOfReturns)sourceMonitoring.ProcessingOfReturnsID == ProcessingOfReturns.ChangeEmailStatus || (ProcessingOfReturns)sourceMonitoring.ProcessingOfReturnsID == ProcessingOfReturns.Download) { if (!string.IsNullOrEmpty(returnEmail) && sender == null && sourceMonitoring.PopUserName == "*****@*****.**") { var siteAction = _dataManager.SiteAction.SelectByEmail(returnEmail).FirstOrDefault(); if (siteAction != null) { sender = _dataManager.Contact.SelectById(siteAction.SiteID, siteAction.ContactID.Value); } } if (sender != null) { if ((ProcessingOfReturns)sourceMonitoring.ProcessingOfReturnsID == ProcessingOfReturns.ChangeEmailStatus) { sender.EmailStatusID = (int)EmailStatus.DoesNotWork; _dataManager.Contact.Update(sender); } var siteAction = _dataManager.SiteAction.SelectByContactId(sender.ID).FirstOrDefault(); if (siteAction != null) { siteAction.ActionStatusID = (int)ActionStatus.InvalidEmail; siteAction.Comments += " 550 user not found"; _dataManager.SiteAction.Update(siteAction); } _dataManager.SiteAction.Add(new tbl_SiteAction { SiteID = sender.SiteID, ActionStatusID = (int)ActionStatus.Done, ActionDate = DateTime.Now, MessageTitle = subject, SourceMonitoringID = sourceMonitoring.ID, DirectionID = (int)Direction.In, SenderID = (sender == null ? null : (Guid?)sender.ID), MessageText = messageText, Comments = "Получено от " + sender.Email, IsHidden = true, POPMessageID = headers.MessageId }); //Формируется действие с типом Возврат сообщения _dataManager.ContactActivity.Add(new tbl_ContactActivity { SiteID = sender.SiteID, ContactID = sender.ID, ActivityTypeID = (int)ActivityType.ReturnMessage, ActivityCode = "returnMessage", ContactSessionID = null, SourceMonitoringID = sourceMonitoring.ID }); } } } //Обработка отправителя по правилу: "Загружать по известным контактам" if (!isReturn && ((SenderProcessing)sourceMonitoring.SenderProcessingID == SenderProcessing.LoadOfKnownContacts) && sender == null) { isValidMessage = false; } if (isValidMessage) { //Обработка автоответов var isAutoReply = false; if (POP3MonitoringProcessingOfAutorepliesFilters(subject, messageText)) { isAutoReply = true; switch ((ProcessingOfAutoReplies)sourceMonitoring.ProcessingOfAutoRepliesID) { case ProcessingOfAutoReplies.Skip: isValidMessage = false; break; } } if (isValidMessage && !isReturn) { //Обработка отправителя по правилу: "Создавать новый контакт" if ((SenderProcessing)sourceMonitoring.SenderProcessingID == SenderProcessing.CreateNewContact && sender == null) { sender = CreateSender(sourceMonitoring.SiteID, headers.From); if (sender.Email.Split('@').Length == 2) { var company = _dataManager.Company.SearchByDomain(sourceMonitoring.SiteID, sender.Email.Split('@')[1]); if (company != null) { sender.CompanyID = company.ID; } } sender = _dataManager.Contact.Add(sender); } var addSiteAction = true; if ((SenderProcessing)sourceMonitoring.SenderProcessingID == SenderProcessing.ServiceLevelContacts) { if (sender == null) { addSiteAction = false; } else { var serviceLevelContact = _dataManager.ServiceLevelContact.SelectByContactId(sender.ID); if (serviceLevelContact != null) { addSiteAction = serviceLevelContact.IsAutomateDownload; } else { addSiteAction = false; } } } if (addSiteAction) { var siteAction = new tbl_SiteAction { SiteID = sourceMonitoring.SiteID, ActionStatusID = (int)ActionStatus.Done, ActionDate = DateTime.Now, MessageTitle = subject, SourceMonitoringID = sourceMonitoring.ID, DirectionID = (int)Direction.In, SenderID = (sender == null ? null : (Guid?)sender.ID), MessageText = messageText, Comments = "Получено от " + sender.Email, IsHidden = false, POPMessageID = headers.MessageId }; _dataManager.SiteAction.Add(siteAction); messageText = ProceedAttachments(siteAction, message.FindAllAttachments()); //Формируется действие с типом Входящее сообщение _dataManager.ContactActivity.Add(new tbl_ContactActivity { SiteID = sourceMonitoring.SiteID, ContactID = sender.ID, ActivityTypeID = (int)ActivityType.InboxMessage, ActivityCode = subject, ContactSessionID = null, SourceMonitoringID = sourceMonitoring.ID }); if (sourceMonitoring.RequestSourceTypeID.HasValue) { var shortDescription = string.Format("{0} (email от {1})", subject, headers.DateSent.ToString("dd.MM.yyyy hh:mm")); AddRequest(sourceMonitoring, siteAction.ID, shortDescription, messageText, sender); } } } if (!sourceMonitoring.IsLeaveOnServer && sourceMonitoring.DaysToDelete != null && headers.DateSent < DateTime.Now.AddDays((int)sourceMonitoring.DaysToDelete) || (isReturn && sourceMonitoring.IsRemoveReturns) || (isAutoReply && sourceMonitoring.IsRemoveAutoReplies)) { client.DeleteMessage(messageNumber); } } //Отрабатываются возможные события. /*if (sender != null) * CounterServiceHelper.CheckEvent(sourceMonitoring.SiteID, sender.ID);*/ } else if (sourceMonitoring.StartDate.HasValue && headers.DateSent < sourceMonitoring.StartDate) { var tmpMessage = client.GetMessage(messageNumber); //Log.Debug(string.Format("Мониторинг ID: {0} загрузка сообщения {1}", sourceMonitoring.ID, headers.Subject)); } if (!sourceMonitoring.IsLeaveOnServer && sourceMonitoring.DaysToDelete != null && headers.DateSent < DateTime.Now.AddDays((int)sourceMonitoring.DaysToDelete)) { client.DeleteMessage(messageNumber); } } catch (IOException ioex) { Log.Warn(string.Format("Ошибка обработки сообщения {0}, POP3 мониторинг ID : {1}", messageNumber, sourceMonitoring.ID), ioex); } catch (FormatException fex) { Log.Warn(string.Format("Ошибка обработки сообщения {0}, POP3 мониторинг ID : {1}", messageNumber, sourceMonitoring.ID), fex); } catch (OpenPop.Pop3.Exceptions.PopServerException pex) { client.Disconnect(); client.Connect(sourceMonitoring.PopHost, (int)sourceMonitoring.PopPort, sourceMonitoring.IsSsl); client.Authenticate(sourceMonitoring.PopUserName, sourceMonitoring.PopPassword, AuthenticationMethod.UsernameAndPassword); } catch (Exception ex) { Log.Error(string.Format("Ошибка обработки сообщения {0}, POP3 мониторинг ID : {1}", messageNumber, sourceMonitoring.ID), ex); } Thread.Sleep(500); } client.Disconnect(); } }
protected static void AddSiteAction(tbl_InvoiceComment invoiceComment, tbl_SiteActionTemplate systemSiteActionTemplate) { var dataManager = new DataManager(); var siteActionTemplate = dataManager.SiteActionTemplate.SelectSystemSiteActionTemplate(invoiceComment.SiteID, systemSiteActionTemplate); var serviceLevelClient = dataManager.ServiceLevelClient.SelectByCompanyId(invoiceComment.SiteID, invoiceComment.tbl_Invoice.BuyerCompanyID.Value); if (serviceLevelClient == null) { return; } var serviceLevelContacts = dataManager.ServiceLevelContact.SelectByClientId(serviceLevelClient.ID).ToList(); var commentator = dataManager.User.SelectById(invoiceComment.UserID); tbl_User destination = null; if (invoiceComment.DestinationUserID.HasValue) { destination = dataManager.User.SelectById((Guid)invoiceComment.DestinationUserID); } foreach (var serviceLevelContact in serviceLevelContacts) { //Не высылать уведомление самому себе if (commentator != null && serviceLevelContact.ContactID == commentator.ContactID) { continue; } if (destination != null && serviceLevelContact.ContactID != destination.ContactID) { continue; } if (invoiceComment.IsInternal) { var user = dataManager.User.SelectByContactId(invoiceComment.SiteID, serviceLevelContact.ContactID); if (user == null || user.AccessLevelID == (int)AccessLevel.Portal) { continue; } } if (serviceLevelContact.IsInformInvoiceComments) { var siteAction = new tbl_SiteAction { SiteID = invoiceComment.SiteID, SiteActionTemplateID = siteActionTemplate.ID, ContactID = serviceLevelContact.ContactID, ActionStatusID = (int)ActionStatus.Scheduled, ActionDate = DateTime.Now, ObjectID = invoiceComment.ID, MessageTypeID = (int)MessageType.InvoiceCommentNotification, DirectionID = (int)Direction.Out, MessageTitle = siteActionTemplate.Title }; dataManager.SiteAction.Add(siteAction); } } }