示例#1
0
        /// <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);
        }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
        /// <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);
                    }
                }
            }
        }
示例#7
0
        /// <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);
        }
示例#8
0
        /// <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();
        }
示例#9
0
        /// <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));
        }
示例#10
0
        /// <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);
            }
        }
示例#18
0
 protected TemplateTagsReplacer(tbl_SiteAction siteAction, ref MailMessage mailMessage)
 {
     SiteAction  = siteAction;
     MailMessage = mailMessage;
 }
示例#19
0
 protected TemplateTagsReplacer(tbl_SiteAction siteAction)
 {
     SiteAction = siteAction;
 }
示例#20
0
 public RequestNotificationTagsReplacer(tbl_SiteAction siteAction) : base(siteAction)
 {
 }
示例#21
0
 public TaskNotificationTagsReplacer(tbl_SiteAction siteAction) : base(siteAction)
 {
 }
 public InvoiceCommentNotificationTagsReplacer(tbl_SiteAction siteAction) : base(siteAction)
 {
 }
示例#23
0
        /// <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;
            }
        }
示例#24
0
 /// <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();
 }
示例#25
0
        /// <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);
                }
            }
        }