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