tbf/OrderManagement/OrderManagementDlg.cs
2021-11-18 14:53:11 +01:00

277 lines
11 KiB
C#

///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using log4net;
using Common;
using SharedDatabase.Entities;
using OrderManagement.Resources;
using Common.Forms;
namespace OrderManagement
{
public partial class OrderManagementDlg : Form
{
private static readonly ILog log = LogManager.GetLogger(typeof(OrderManagementDlg));
NHibernate.ISession session;
IList<OrderInfo> listOfOrders; /// null in Standalone mode
MySortOrder sortOrder = MySortOrder.Ascending;
int sortColumn = -1; /// 0-based index of column to be used for sorting
public OrderManagementDlg()
{
try
{
string culture = Program.LocalSettings.Language.Replace('_', '-');
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(culture);
}
catch (Exception)
{
MessageBox.Show("Selected language is not supported.\nUsing English.",
"Warning", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
System.Threading.Thread.CurrentThread.CurrentUICulture =
new System.Globalization.CultureInfo("en");
}
InitializeComponent();
Text = string.Format("{0} v.{1}", Program.ProgramName, Program.Version); ;
}
public OrderManagementDlg(NHibernate.ISession session, IList<OrderInfo> listOfOrders)
: this()
{
this.session = session;
this.listOfOrders = listOfOrders;
}
private void OrderManagementDlg_Load(object sender, EventArgs e)
{
Localize();
InitializeColumns(listViewEx1);
foreach (var oi in listOfOrders) AddRow(listViewEx1, oi);
}
void Localize()
{
settingsToolStripMenuItem.Text = Strings.Settings;
}
enum Clmn
{
Order,
State,
Workflow,
Procedure,
Variant,
Pieces,
SNPrefix,
SNFirst,
SNDigitsCount,
SNSuffix,
RAPrefix,
RAFirst,
RADigitsCount,
RASuffix,
Remark,
Count
}
void InitializeColumns(ListView lv)
{
lv.Columns.Add(new ColumnHeader { Text = Strings.Order, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.State, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Workflow, Width = 150 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Test_procedure, Width = 150 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Variant_code, Width = 150 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Pieces_count, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.SN + " " + Strings.prefix, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.SN + " " + Strings.first, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.SN + " " + Strings.digits_count, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.SN + " " + Strings.suffix, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.RA + " " + Strings.prefix, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.RA + " " + Strings.first, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.RA + " " + Strings.digits_count, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.RA + " " + Strings.suffix, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Remark, Width = 200 });
}
void AddRow(ListView lv, OrderInfo o)
{
ListViewItem lvi = new ListViewItem(o.POName);
lvi.SubItems.Add(((OrderState)o.POState).ToString());
lvi.SubItems.Add(o.Workflow);
lvi.SubItems.Add(o.TestProcedure);
lvi.SubItems.Add(o.VariantCode);
lvi.SubItems.Add(o.PiecesCount.ToString());
lvi.SubItems.Add(o.SNPrefix);
lvi.SubItems.Add(o.SNFirst.ToString(string.Format("D{0}", o.SNDigitsCount)));
lvi.SubItems.Add(o.SNDigitsCount.ToString());
lvi.SubItems.Add(o.SNSuffix);
lvi.SubItems.Add(o.RAPrefix);
lvi.SubItems.Add(o.RAFirst.ToString(string.Format("D{0}", o.RADigitsCount)));
lvi.SubItems.Add(o.RADigitsCount.ToString());
lvi.SubItems.Add(o.RASuffix);
lvi.SubItems.Add(o.Remark);
lvi.Tag = o;
lv.Items.Add(lvi);
}
void UpdateRow(ListViewItem lvi, OrderInfo o)
{
int i = 0;
lvi.SubItems[i++].Text = o.POName;
lvi.SubItems[i++].Text = ((OrderState)o.POState).ToString();
lvi.SubItems[i++].Text = o.Workflow;
lvi.SubItems[i++].Text = o.TestProcedure;
lvi.SubItems[i++].Text = o.VariantCode;
lvi.SubItems[i++].Text = o.PiecesCount.ToString();
lvi.SubItems[i++].Text = o.SNPrefix;
lvi.SubItems[i++].Text = o.SNFirst.ToString(string.Format("D{0}", o.SNDigitsCount));
lvi.SubItems[i++].Text = o.SNDigitsCount.ToString();
lvi.SubItems[i++].Text = o.SNSuffix;
lvi.SubItems[i++].Text = o.RAPrefix;
lvi.SubItems[i++].Text = o.RAFirst.ToString(string.Format("D{0}", o.RADigitsCount));
lvi.SubItems[i++].Text = o.RADigitsCount.ToString();
lvi.SubItems[i++].Text = o.RASuffix;
lvi.SubItems[i++].Text = o.Remark;
}
private void settingsToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
Common.GlobalData.RemoteUsersDB = new Common.DBSettings(Common.DBType.MySql, Program.LocalSettings.UsersDBConnString);
DialogResult dr = new SharedDatabase.Forms.LoginDlg().ShowDialog();
if (dr != DialogResult.OK) return;
dr = new SettingsDlg(Program.LocalSettings).ShowDialog();
if (dr == DialogResult.OK)
{
Program.LocalSettings.Save();
MessageBox.Show(Strings.Program_restart_is_required);
Close();
}
}
catch (Exception exc)
{
log.ErrorFormat("Failed to connect to the database of users: {0}", exc.Message);
}
}
private void closeButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.OK;
Close();
}
private void addButton_Click(object sender, EventArgs e)
{
///
/// Determine the next production order name
///
string candidatePOName = string.Empty;
int candidatePONr;
foreach (var o in listOfOrders)
{
if (string.Compare(candidatePOName, o.POName, StringComparison.InvariantCulture) < 0) candidatePOName = o.POName;
}
if (int.TryParse(candidatePOName, out candidatePONr))
{
candidatePONr++;
candidatePOName = candidatePONr.ToString(string.Format("D{0}", candidatePOName.Length));
}
///
/// Create and edit the order
///
var order = new OrderInfo(candidatePOName);
if (new EditOrderDlg(session, order, listOfOrders).ShowDialog() == DialogResult.OK)
{
listOfOrders.Add(order);
AddRow(listViewEx1, order);
}
}
private void listViewEx1_DoubleClick(object sender, EventArgs e)
{
editButton_Click(sender, e);
}
private void editButton_Click(object sender, EventArgs e)
{
if (listViewEx1.SelectedItems.Count == 1 && listViewEx1.SelectedItems[0].Tag is OrderInfo)
{
OrderInfo order = listViewEx1.SelectedItems[0].Tag as OrderInfo;
if (order.POState == (sbyte)OrderState.New)
{
if (new EditOrderDlg(session, order, listOfOrders, true).ShowDialog() == DialogResult.OK)
{
UpdateRow(listViewEx1.SelectedItems[0], order);
}
}
else
{
MessageBox.Show(Strings.You_can_only_edit_New_porduction_orders);
}
}
}
private void deleteButton_Click(object sender, EventArgs e)
{
if (listViewEx1.SelectedItems.Count == 1 && listViewEx1.SelectedItems[0].Tag is OrderInfo)
{
OrderInfo order = listViewEx1.SelectedItems[0].Tag as OrderInfo;
if (order.POState == (sbyte)OrderState.New)
{
if (MessageBox.Show(Strings.Are_you_sure, Strings.Warning, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
{
if (new EditOrderDlg(session, order, listOfOrders).ShowDialog() == DialogResult.OK)
{
UpdateRow(listViewEx1.SelectedItems[0], order);
}
}
}
else
{
MessageBox.Show(Strings.You_can_only_delete_New_porduction_orders);
}
}
}
private void listViewEx1_ColumnClick(object sender, ColumnClickEventArgs e)
{
if (e.Column == sortColumn)
{
/// Clicked on the same column header => increment to the next applicable MySortOrder
sortOrder = (sortOrder == MySortOrder.Ascending) ? MySortOrder.Descending : MySortOrder.Ascending;
}
else
{
/// Clicked on another column header => set sortOrder to MySortOrder.Ascending
sortColumn = e.Column;
sortOrder = MySortOrder.Ascending;
}
if (sortColumn == (int)Clmn.State || sortColumn == (int)Clmn.Pieces || sortColumn == (int)Clmn.SNFirst || sortColumn == (int)Clmn.SNDigitsCount)
{
listViewEx1.ListViewItemSorter = new LviIntColumnComparer(sortColumn, sortOrder);
}
else
{
listViewEx1.ListViewItemSorter = new LviTextColumnComparer(sortColumn, sortOrder);
}
listViewEx1.SetSortIcon(sortColumn, sortOrder);
listViewEx1.Sort();
}
}
}