Beispiel #1
0
        public static void Run()
        {
            string lastIndexString = Persistence.Key["LastSupportMailIndex"];

            int lastIndex = 110000;

            if (!String.IsNullOrEmpty(lastIndexString))
            {
                if (!Int32.TryParse(lastIndexString, out lastIndex))
                {
                    throw new Exception("Failed to read LastSupportMailIndex:" + lastIndexString);
                }
            }

            SupportEmail[] emails = SupportDatabase.GetRecentOutgoingEmails(lastIndex);

            int highIndex = lastIndex;

            foreach (SupportEmail email in emails)
            {
                if (email.EventId > highIndex)
                {
                    highIndex = email.EventId;
                }
            }

            if (highIndex > lastIndex)
            {
                Persistence.Key["LastSupportMailIndex"] = highIndex.ToString();

                // Verify that it was written correctly to database. This is defensive programming to avoid a mail flood.

                if (Persistence.Key["LastSupportMailIndex"] != highIndex.ToString())
                {
                    throw new Exception("Unable to commit new highwater mark to database in SupportMailReview.Run()");
                }
            }

            foreach (SupportEmail email in emails)
            {
                // add extra words to avoid arrayindex exceptions
                string[] stringTokens = (email.From + " unknown unknown").Split(' ');

                string subject = stringTokens[0].Substring(0, 1) + stringTokens[1].Substring(0, 1) + ", case " +
                                 email.CaseId + ": " + email.CaseTitle;

                MailMessage message = new MailMessage();
                message.From = new MailAddress(Strings.MailSenderAddress, Strings.MailSenderName);
                message.To.Add(new MailAddress("*****@*****.**"));
                message.Subject      = subject;
                message.Body         = "Mail skickat av " + email.From + " till " + email.To + ":\r\n\r\n";
                message.BodyEncoding = Encoding.UTF8;

                message.Body += email.Body;

                SmtpClient client = new SmtpClient(Config.SmtpHost, Config.SmtpPort);
                client.Credentials = null;
                client.Send(message);
            }
        }
Beispiel #2
0
        private void GenerateService(SupportMode mode, SupportLanguage language, SupportDatabase database, string connectionString, bool reloadProject)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(connectionString))
                {
                    VsShellUtilities.ShowMessageBox(
                        this.package,
                        "Connection string must not be null.",
                        "ModelGenerator",
                        OLEMSGICON.OLEMSGICON_INFO,
                        OLEMSGBUTTON.OLEMSGBUTTON_OK,
                        OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);
                    return;
                }
                var dte2 = Package.GetGlobalService(typeof(DTE)) as DTE2;

                var directory        = DevenvHelper.ProjectDirectory;
                var solutionName     = dte2.GetSolutionName();
                var projectName      = DevenvHelper.ProjectName;
                var defaultNamespace = DevenvHelper.ProjectDefaultNamespace;

                dte2.Windows.Item(EnvDTE.Constants.vsWindowKindSolutionExplorer).Activate();
                dte2.ToolWindows.SolutionExplorer.GetItem($@"{solutionName}\{projectName}").Select(vsUISelectionType.vsUISelectionTypeSelect);

                //if (reloadProject) dte2.ExecuteCommand("Project.ReloadProject");
                MessageBox.Show($"Successfully generate services file for {projectName}");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
Beispiel #3
0
    protected void PopulateGrid()
    {
        SupportCase[]    cases = SupportDatabase.GetOpenCases();
        List <InboxItem> data  = new List <InboxItem>();

        foreach (SupportCase supportCase in cases)
        {
            if (supportCase.Title.StartsWith("SMS ") && supportCase.Title.Contains("'+"))
            {
                string phoneNumber = ExtractPhoneFromTitle(supportCase.Title);

                if (String.IsNullOrEmpty(phoneNumber))
                {
                    continue;
                }

                People matchingPeople = GetPeopleFromPhone(phoneNumber);

                string rawMail         = SupportDatabase.GetFirstEventText(supportCase.Identity);
                string personCanonical = "No match";
                string message         = "Not found";

                if (matchingPeople.Count > 1)
                {
                    personCanonical = "Several";
                }
                else if (matchingPeople.Count == 1)
                {
                    personCanonical = matchingPeople[0].Canonical;
                }

                string decodedMail = DecodeMail(rawMail);

                string[] mailLines = decodedMail.Split("\n".ToCharArray());

                foreach (string mailLine in mailLines)
                {
                    if (mailLine.StartsWith("Meddelande: "))
                    {
                        message = mailLine.Substring(12).Trim();
                    }
                }

                data.Add(new InboxItem(supportCase.Identity, phoneNumber, message, personCanonical));
            }
        }

        this.GridInbox.DataSource = data;
    }
        public static void Housekeeping()
        {
            CommunicationTurnarounds turnarounds = CommunicationTurnarounds.ForOrganization(Organization.PPSE);

            foreach (CommunicationTurnaround turnaround in turnarounds)
            {
                if (!SupportDatabase.IsCaseOpen(turnaround.CommunicationId))
                {
                    DateTime?dateTimeClosed = SupportDatabase.GetCaseCloseDateTime(turnaround.CommunicationId);
                    if (dateTimeClosed == null)
                    {
                        dateTimeClosed = turnaround.DateTimeOpened;
                    }

                    SwarmDb.GetDatabaseForWriting().SetCommunicationTurnaroundClosed(Organization.PPSEid, 1, turnaround.CommunicationId, (DateTime)dateTimeClosed, 0);
                }
            }
        }
Beispiel #5
0
        private void Cb_TargetDatabase_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            database = (SupportDatabase)cb_TargetDatabase.SelectedIndex;
            switch (database)
            {
            case SupportDatabase.SQLServer:
                txt_connectionString.Text = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password = myPassword;";
                break;

            case SupportDatabase.Oracle:
                txt_connectionString.Text = "Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;";
                break;

            case SupportDatabase.MySQL:
                txt_connectionString.Text = "Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;";
                break;

            case SupportDatabase.PostgreSQL:
                txt_connectionString.Text = "Server=myServerAddress;Port=5432;Database=myDataBase;User Id=myUsername;Password = myPassword;";
                break;
            }
        }
Beispiel #6
0
    protected void ButtonPerformActions_Click(object sender, EventArgs e)
    {
        // Iterate through the grid, find the datakey and the selected action, and perform them.

        foreach (GridDataItem item in this.GridInbox.Items)
        {
            DropDownList listActions = (DropDownList)item.FindControl("DropActions");

            if (listActions == null)
            {
                continue;
            }

            int caseId = (int)item.GetDataKeyValue("CaseId");

            SupportCase openCase = SupportDatabase.GetCase(caseId);

            string phone     = ExtractPhoneFromTitle(openCase.Title);
            People people    = GetPeopleFromPhone(phone);
            bool   closeCase = true;

            foreach (Person person in people)
            {
                string selectedValue = listActions.SelectedValue;

                switch (selectedValue)
                {
                case "TerminateAll":
                    // terminate everything: all activistships, all memberships

                    if (person.IsActivist)
                    {
                        person.TerminateActivist();
                        PWLog.Write(PWLogItem.Person, person.Identity, PWLogAction.ActivistLost, "Activist Lost",
                                    "SMS message from phone# " + phone + " declined all further contact");
                    }

                    Memberships terminateMemberships = person.GetMemberships();

                    foreach (Membership membership in terminateMemberships)
                    {
                        membership.Terminate(EventSource.SMS, _currentUser, "Membership in " + membership.Organization.Name + " terminated after person declined further contact over SMS.");
                    }

                    break;

                case "RenewAll":
                    Memberships renewedMemberships = person.GetRecentMemberships(Membership.GracePeriod);

                    // Get PPSE new expiry date, use as master

                    DateTime masterNewExpiry = DateTime.Today.AddYears(1);

                    foreach (Membership membership in renewedMemberships)
                    {
                        if (membership.OrganizationId == Organization.PPSEid)
                        {
                            if (membership.Expires > DateTime.Now)
                            {
                                // Set to one year from today or one year from previous expiry, whichever is greater

                                masterNewExpiry = membership.Expires.AddYears(1);
                            }
                        }
                    }

                    foreach (Membership renewedMembership in renewedMemberships)
                    {
                        renewedMembership.Expires = masterNewExpiry;

                        Activizr.Logic.Support.PWEvents.CreateEvent(EventSource.SMS, EventType.ReceivedMembershipPayment,
                                                                    person.Identity, renewedMembership.OrganizationId,
                                                                    person.Geography.Identity, person.Identity, 0, Request.UserHostAddress);

                        PWLog.Write(PWLogItem.Person, person.Identity, PWLogAction.MembershipRenewed,
                                    "Membership in " + renewedMembership.Organization.NameShort + " renewed.",
                                    "Membership was renewed over SMS from phone# " + phone + " and will expire " + masterNewExpiry.ToString("yyyy-MM-dd") + ".");
                    }

                    // Renew all memberships. Easist done by logging an event of repayment
                    break;

                default:
                    closeCase = false;
                    break;
                }

                if (closeCase)
                {
                    openCase.CloseWithComment("Handled from PirateWeb interface, using option " + selectedValue + ".");
                }
            }
        }

        PopulateGrid();
        this.GridInbox.Rebind();
    }
        public static void Run()
        {
            const string persistenceKey = "PPSE-LastSupportDeltaId";

            string lastDeltaIdString = Persistence.Key[persistenceKey];
            int    lastDeltaId       = 0;

            if (!String.IsNullOrEmpty(lastDeltaIdString))
            {
                lastDeltaId = Int32.Parse(lastDeltaIdString);
            }

            SupportCaseDelta[] deltas = SupportDatabase.GetCaseDeltas(lastDeltaId);

            foreach (SupportCaseDelta delta in deltas)
            {
                if (delta.Verb == "Incoming email")
                {
                    try
                    {
                        CommunicationTurnaround.Create(Organization.PPSE, delta.SupportCaseId, delta.DateTime);
                    }
                    catch (Exception)
                    {
                        // Ignore if can't create
                    }
                }
                else if (delta.Verb == "Replied")
                {
                    try
                    {
                        CommunicationTurnaround turnaround = CommunicationTurnaround.FromIdentity(Organization.PPSE, 1,
                                                                                                  delta.SupportCaseId);
                        turnaround.SetResponded(delta.DateTime, null);
                    }
                    catch (Exception)
                    {
                    }
                }
                else if (delta.Verb == "Closed")
                {
                    try
                    {
                        CommunicationTurnaround turnaround = CommunicationTurnaround.FromIdentity(Organization.PPSE, 1,
                                                                                                  delta.SupportCaseId);
                        turnaround.Close(delta.DateTime, null);
                    }
                    catch (Exception)
                    {
                        // if can't find, ignore
                    }
                }
                else if (delta.Changes.Contains("'Spam'"))
                {
                    try
                    {
                        CommunicationTurnaround turnaround = CommunicationTurnaround.FromIdentity(Organization.PPSE, 1,
                                                                                                  delta.SupportCaseId);
                        turnaround.Close(delta.DateTime, null);
                    }
                    catch (Exception)
                    {
                    }
                }

                if (delta.SupportCaseDeltaId > lastDeltaId)
                {
                    lastDeltaId = delta.SupportCaseDeltaId;
                }
            }

            Persistence.Key[persistenceKey] = lastDeltaId.ToString();
        }