277 lines
11 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|