277 lines
7.6 KiB
C#
277 lines
7.6 KiB
C#
///
|
|
/// Copyright (c) 2013-2015 Sensus Metering Systems
|
|
///
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Windows.Forms;
|
|
using NHibernate;
|
|
using log4net;
|
|
using TBF.BenchControl;
|
|
using TBF.BenchControl.GenericDevices;
|
|
using TBF.Resources;
|
|
|
|
namespace TBF.UiControls
|
|
{
|
|
public class ProceduresCtrl : BaseWithListViewEx<Entities.Procedure>, ITabWithListViewEx
|
|
{
|
|
static readonly ILog log = LogManager.GetLogger(typeof(ProceduresCtrl));
|
|
|
|
/// <summary>
|
|
/// ListViewEx columns
|
|
/// </summary>
|
|
enum Column
|
|
{
|
|
Name,
|
|
Description,
|
|
ColumnsCount,
|
|
}
|
|
readonly int columnsCount = (int)Column.ColumnsCount;
|
|
|
|
ProceduresDlg parent;
|
|
Control parentControl;
|
|
Control[] editors;
|
|
|
|
ISession session;
|
|
|
|
public ProceduresCtrl()
|
|
: base()
|
|
{
|
|
Name = "ProceduresCtrl";
|
|
}
|
|
|
|
public void Initialize(ProceduresDlg parent, Control parentControl)
|
|
{
|
|
this.parent = parent;
|
|
this.parentControl = parentControl;
|
|
|
|
SubItemClicked += new SubItemEventHandler(listViewEx_SubItemClicked);
|
|
SubItemEndEditing += new SubItemEndEditingEventHandler(listViewEx_SubItemEndEditing);
|
|
|
|
/// ListViewEx columns
|
|
TBF.LocalSettings ls = Program.LocalSettings;
|
|
Columns.Add(Strings.Name, (ls.ProceduresColumnCount > 0) ? ls.ProceduresColumnWidths[0] : (100 * parent.Dpi / PathsDlg.Dpi100pct));
|
|
Columns.Add(Strings.DescriptionColHdr, (ls.ProceduresColumnCount > 1) ? ls.ProceduresColumnWidths[1] : (300 * parent.Dpi / PathsDlg.Dpi100pct));
|
|
|
|
editors = new Control[columnsCount];
|
|
///
|
|
editors[(int)Column.Name] = new TextBox(); /// Name
|
|
editors[(int)Column.Description] = new TextBox(); /// Description
|
|
///
|
|
for (int i = 0; i < editors.Length; i++) parent.Controls.Add(editors[i]);
|
|
|
|
ReloadAndRedrawAll();
|
|
}
|
|
|
|
void ReloadAndRedrawAll()
|
|
{
|
|
/// Load the procedures
|
|
session = FluentCommon.CreateSession(Database.Procedures);
|
|
MyItems = session.CreateQuery("FROM Procedure WHERE ProcedureState = 'Active' ORDER BY ItemNr")
|
|
.List<Entities.Procedure>();
|
|
|
|
base.RedrawAll();
|
|
}
|
|
|
|
void listViewEx_SubItemClicked(object sender, SubItemEventArgs e)
|
|
{
|
|
}
|
|
|
|
void listViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e)
|
|
{
|
|
}
|
|
|
|
public override void DrawOne(object myItem)
|
|
{
|
|
Entities.Procedure entity = (Entities.Procedure)myItem;
|
|
|
|
ListViewItem lvi = new ListViewItem(entity.Name);
|
|
lvi.SubItems.Add(entity.Description);
|
|
lvi.Tag = entity;
|
|
|
|
Items.Add(lvi);
|
|
}
|
|
|
|
public override void UpdateOne(ListViewItem lvi, object myItem)
|
|
{
|
|
Entities.Procedure entity = (Entities.Procedure)myItem;
|
|
entity.Name = lvi.Text;
|
|
entity.Description = lvi.SubItems[(int)Column.Description].Text;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Update the entities and save them to the database
|
|
/// </summary>
|
|
public new void OkBtnClicked()
|
|
{
|
|
base.OkBtnClicked();
|
|
|
|
foreach (var entity in ToBeRemovedItems)
|
|
{
|
|
FluentCommon.DeleteFromDb(session, entity);
|
|
}
|
|
int itemNr = 0;
|
|
foreach (var entity in MyItems)
|
|
{
|
|
(entity as Entities.Procedure).ItemNr = itemNr++;
|
|
FluentCommon.SaveToDb(session, entity);
|
|
}
|
|
|
|
/// Update the column widths
|
|
Program.LocalSettings.ProceduresColumnWidths = new int[Columns.Count];
|
|
for (int i = 0; i < Columns.Count; i++)
|
|
{
|
|
Program.LocalSettings.ProceduresColumnWidths[i] = Columns[i].Width;
|
|
}
|
|
Program.LocalSettings.Save();
|
|
|
|
Program.MainWnd.ReloadProcedures();
|
|
}
|
|
|
|
public void AddOne()
|
|
{
|
|
/// Find an unused procedure name
|
|
string newName;
|
|
for (int nameId = 1; true; nameId++)
|
|
{
|
|
newName = Strings.New_procedure_name + nameId.ToString();
|
|
bool notUsed = true;
|
|
foreach (var t in MyItems) if (t.Name.Equals(newName)) notUsed = false;
|
|
if (notUsed) break;
|
|
}
|
|
|
|
Entities.Procedure newProcedure = new Entities.Procedure(newName, MyItems.Count);
|
|
newProcedure.ProcedureState = Entities.ProcedureState.Active;
|
|
newProcedure.Revision = 1;
|
|
newProcedure.PredecessorId = 0;
|
|
newProcedure.ObtainedByCopy = false;
|
|
newProcedure.CreationUser = Entities.User.CurrentUser.Name;
|
|
newProcedure.CreationTime = DateTime.Now;
|
|
|
|
if (new ProcedureDlg(newProcedure).ShowDialog() == DialogResult.OK)
|
|
{
|
|
/// TODO: Make name uniqueness test
|
|
parent.Unlock();
|
|
|
|
using(var transaction = session.BeginTransaction())
|
|
{
|
|
try
|
|
{
|
|
newProcedure.LastChgUser = Entities.User.CurrentUser.Name;
|
|
newProcedure.LastChgTime = DateTime.Now;
|
|
|
|
base.AddOne(newProcedure);
|
|
session.SaveOrUpdate(newProcedure);
|
|
transaction.Commit();
|
|
|
|
MessageBox.Show(string.Format(Strings.Procedure_0_added, newProcedure.Name),
|
|
Strings.Confirmation,
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Information);
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
transaction.Rollback();
|
|
}
|
|
}
|
|
session.Flush();
|
|
}
|
|
}
|
|
|
|
public new void RemoveSelected()
|
|
{
|
|
bool lastOneRemoved = base.RemoveSelected();
|
|
if (lastOneRemoved && parent != null)
|
|
{
|
|
parent.UpdateButtonStates(SharedButtons.SelectedItemPos.None);
|
|
}
|
|
}
|
|
|
|
public void editButton_Click(object sender, EventArgs e)
|
|
{
|
|
if (SelectedItems.Count != 1) return;
|
|
|
|
Entities.Procedure originalProcedure = SelectedItems[0].Tag as Entities.Procedure;
|
|
Entities.Procedure modifiedProcedure = originalProcedure.Clone();
|
|
|
|
modifiedProcedure.ItemNr = originalProcedure.ItemNr;
|
|
modifiedProcedure.Revision = originalProcedure.Revision + 1;
|
|
modifiedProcedure.ObtainedByCopy = false;
|
|
|
|
if (new ProcedureDlg(modifiedProcedure).ShowDialog() == DialogResult.OK)
|
|
{
|
|
/// TODO: Make name uniqueness test
|
|
parent.Unlock();
|
|
|
|
using (var transaction = session.BeginTransaction())
|
|
{
|
|
try
|
|
{
|
|
originalProcedure.ProcedureState = Entities.ProcedureState.History;
|
|
modifiedProcedure.LastChgUser = Entities.User.CurrentUser.Name;
|
|
modifiedProcedure.LastChgTime = DateTime.Now;
|
|
|
|
session.SaveOrUpdate(originalProcedure);
|
|
session.SaveOrUpdate(modifiedProcedure);
|
|
transaction.Commit();
|
|
|
|
SelectedItems[0].Tag = modifiedProcedure;
|
|
MessageBox.Show(string.Format(Strings.Procedure_0_modified, modifiedProcedure.Name),
|
|
Strings.Confirmation,
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Information);
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
transaction.Rollback();
|
|
}
|
|
}
|
|
session.Flush();
|
|
}
|
|
|
|
ReloadAndRedrawAll();
|
|
}
|
|
|
|
public void copyButton_Click(object sender, EventArgs e)
|
|
{
|
|
if (SelectedItems.Count != 1) return;
|
|
|
|
Entities.Procedure selectedProcedure = (Entities.Procedure)SelectedItems[0].Tag;
|
|
|
|
/// Make a copy of the selected procedure
|
|
Entities.Procedure newProcedure = selectedProcedure.Clone();
|
|
|
|
newProcedure.Name = selectedProcedure.Name + Strings.New_name_copy;
|
|
newProcedure.ItemNr = MyItems.Count;
|
|
newProcedure.ProcedureState = Entities.ProcedureState.Active;
|
|
newProcedure.Revision = 1;
|
|
newProcedure.PredecessorId = selectedProcedure.Id;
|
|
newProcedure.ObtainedByCopy = true;
|
|
newProcedure.CreationUser = Entities.User.CurrentUser.Name;
|
|
newProcedure.CreationTime = DateTime.Now;
|
|
|
|
if ((new ProcedureDlg(newProcedure)).ShowDialog() == DialogResult.OK)
|
|
{
|
|
/// TODO: Make name uniqueness test
|
|
parent.Unlock();
|
|
|
|
using (var transaction = session.BeginTransaction())
|
|
{
|
|
newProcedure.LastChgUser = Entities.User.CurrentUser.Name;
|
|
newProcedure.LastChgTime = DateTime.Now;
|
|
|
|
base.AddOne(newProcedure);
|
|
session.SaveOrUpdate(newProcedure);
|
|
transaction.Commit();
|
|
|
|
MessageBox.Show(string.Format(Strings.Procedure_0_added, newProcedure.Name),
|
|
Strings.Confirmation,
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Information);
|
|
}
|
|
base.AddOne(newProcedure);
|
|
}
|
|
}
|
|
}
|
|
}
|