using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using VEPROMS.CSLA.Library; using LBOutlookLibrary; using System.Reflection; using System.Text.RegularExpressions; using System.Net.Mail; using System.Net; using System.IO; namespace VEPROMS { public partial class frmBatchRefreshCheckedOut : Form { private SessionInfo _MySessionInfo; public SessionInfo MySessionInfo { get { return _MySessionInfo; } set { _MySessionInfo = value; } } private List _CheckedOutProcedures; public List CheckedOutProcedures { get { return _CheckedOutProcedures; } set { _CheckedOutProcedures = value; } } private int RType = -1; // C2023-002: Flag type of checkout, docversion -1 or procedures 0 public frmBatchRefreshCheckedOut(int type) { RType = type; InitializeComponent(); } private void frmBatchRefreshCheckedOut_FormClosing(object sender, FormClosingEventArgs e) { Owner.Show(); DialogResult = DialogResult.Cancel; } private void frmBatchRefreshCheckedOut_Load(object sender, EventArgs e) { Owner.Hide(); // B2023-051 check for a null list container and an empty list if (CheckedOutProcedures != null && CheckedOutProcedures.Count > 0) { foreach (ProcedureInfo pi in CheckedOutProcedures) AddToDisplayList(pi); tmrCheck.Enabled = true; } } private void AddToDisplayList(ProcedureInfo pi) { Panel p = new Panel(); p.BorderStyle = BorderStyle.FixedSingle; p.Dock = DockStyle.Top; p.Height = 28; if (RType != 1) // C2023-002: only put out ForceCheckin & sendemail buttons if on procedures (can't check in a docversion) { Button b = new Button(); //b.FlatStyle = FlatStyle.Popup; b.Dock = DockStyle.Right; b.Text = "Force Check In"; b.Tag = pi; b.Click += new EventHandler(ForceCheckIn_Click); p.Controls.Add(b); b = new Button(); //b.FlatStyle = FlatStyle.Popup; b.Dock = DockStyle.Right; b.Text = "Send Email"; b.Tag = pi; b.Click += new EventHandler(SendEmail_Click); p.Controls.Add(b); } Label l = new Label(); l.Dock = DockStyle.Fill; l.TextAlign = ContentAlignment.MiddleLeft; l.Text = string.Format("Procedure {0} is checked out to {1}", pi.DisplayNumber, UserInfo.GetByUserID(OwnerInfo.GetByItemID(pi.ItemID, CheckOutType.Procedure).SessionUserID).UserID); p.Controls.Add(l); pnlList.Controls.Add(p); p.BringToFront(); pnlList.Focus(); } void SendEmail_Click(object sender, EventArgs e) { ProcedureInfo pi = (sender as Button).Tag as ProcedureInfo; OwnerInfo oi = OwnerInfo.GetByItemID(pi.ItemID, CheckOutType.Procedure); UserInfo ui = UserInfo.GetByUserID(oi.SessionUserID); UserConfig uc = new UserConfig(ui.Config); string subject = "Please Check In A Procedure"; if (uc.User_UserEmail != string.Empty) { if (!SendOutlookEmail(uc.User_UserEmail, subject, BuildEmailMessageBody(pi))) (sender as Button).Enabled = false; } else MessageBox.Show("No email has been defined for this user. You will need to Force Check In this procedure", "No Email"); } private string BuildEmailMessageBody(ProcedureInfo pi) { StringBuilder body = new StringBuilder(); //body.AppendLine("THIS IS A TEST MESSAGE FROM JIM BODINE"); //body.AppendLine(); body.AppendLine(string.Format("The administrator needs you to check in procedure {0} so the administrator can continue an administrative tool process", pi.DisplayNumber)); //body.AppendLine(); //body.AppendLine("Obviously, you do not really have this procedure checked out, so you really do not have to do anything."); //body.AppendLine(); //body.AppendLine("However, I would appreciate it if you would reply to this email so I know the email worked"); //body.AppendLine(); //body.AppendLine("I will try NOT to overwhelm your email system :-)"); return body.ToString(); } void ForceCheckIn_Click(object sender, EventArgs e) { ProcedureInfo pi = (sender as Button).Tag as ProcedureInfo; OwnerInfo oi = OwnerInfo.GetByItemID(pi.ItemID, CheckOutType.Procedure); UserInfo ui = UserInfo.GetByUserID(oi.SessionUserID); UserConfig uc = new UserConfig(ui.Config); MySessionInfo.CheckInItem(oi.OwnerID); pnlList.Controls.Remove((sender as Button).Parent as Panel); if (uc.User_UserEmail != string.Empty) { string subject = "A Procedure Was Forced Checked In"; SendOutlookEmail(uc.User_UserEmail, subject, BuildForcedMessageBody(pi)); } else MessageBox.Show("No email has been defined for this user. The procedure will be Force Checked In, but the user will not be notified.", "No Email"); } private string BuildForcedMessageBody(ProcedureInfo pi) { StringBuilder body = new StringBuilder(); //body.AppendLine("THIS IS A TEST MESSAGE FROM JIM BODINE"); //body.AppendLine(); body.AppendLine(string.Format("The administrator needed to force check in procedure {0} so the administrator could continue an administrative tool process", pi.DisplayNumber)); //body.AppendLine(); //body.AppendLine("Obviously, you do not really have this procedure checked out, so nothing really got forced checked in."); //body.AppendLine(); //body.AppendLine("However, I would appreciate it if you would reply to this email so I know the email worked"); //body.AppendLine(); //body.AppendLine("I will try NOT to overwhelm your email system :-)"); return body.ToString(); } private bool SendOutlookEmail(string email, string subject, string body) { try { LBApplicationClass app = new LBApplicationClass(); LBMailItemClass msg = app.CreateMailItem(); msg.To = email; msg.Subject = subject; msg.BodyFormat = LBOlBodyFormat.olFormatPlain; msg.Body = body; msg.Send(); return true; } catch (Exception ex) { if (ex.Message.ToLower().Contains("failed due to the following error: 80080005")) MessageBox.Show("You cannot send email via a running instance of Outlook from VE PROMS running from within Visual Studio."); else MessageBox.Show(string.Format("{0} - {1}", ex.GetType().Name, ex.Message)); return false; } } private void tmrCheck_Tick(object sender, EventArgs e) { tmrCheck.Enabled = false; string msg = string.Empty; pnlList.Controls.Clear(); List tmp = new List(); foreach(ProcedureInfo pi in CheckedOutProcedures) if (!MySessionInfo.CanCheckOutItem(pi.ItemID, CheckOutType.Procedure, ref msg)) tmp.Add(pi); CheckedOutProcedures = tmp; if (CheckedOutProcedures.Count == 0) { this.Close(); return; } foreach (ProcedureInfo pi in CheckedOutProcedures) AddToDisplayList(pi); tmrCheck.Enabled = true; } } }