285 lines
11 KiB
C#
285 lines
11 KiB
C#
///
|
|
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
|
|
///
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Windows.Forms;
|
|
using log4net;
|
|
using Common;
|
|
using TBF.Rig.Sequences;
|
|
using TBF.Rig.Output.DB.SensusOracle;
|
|
using TBF.Resources;
|
|
using System.Drawing;
|
|
using NHibernate;
|
|
|
|
namespace TBF.Rig.DataEntry.iPerl
|
|
{
|
|
public partial class CycleBeginningForm : Form, GenericDevices.IHasCompleted
|
|
{
|
|
private static readonly ILog log = LogManager.GetLogger(typeof(CycleBeginningForm));
|
|
|
|
/// <summary> Number of water meters </summary>
|
|
public readonly int WaterMetersCount;
|
|
readonly EntryFormCfg cfg;
|
|
|
|
/// Loaded from database beforethe form is open
|
|
IList<IOrderInfo> listOfOrders;
|
|
string preselectedOrder;
|
|
|
|
/// To be retrieved after the form is closed
|
|
public string PurchaseOrder;
|
|
public string[] SNText;
|
|
public bool[] Disabled;
|
|
|
|
/// Set to 'true' when the form closes
|
|
public bool Completed { get { return completed; } }
|
|
bool completed;
|
|
|
|
|
|
/// <summary> Parameterless constructor for common functionality </summary>
|
|
public CycleBeginningForm()
|
|
{
|
|
InitializeComponent();
|
|
ControlBox = false;
|
|
preselectedOrder = null;
|
|
|
|
completed = false;
|
|
StartForceCloseHandler();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Constructor
|
|
/// </summary>
|
|
/// <param name="waterMetersCount">Number of text boxes for serial numbers</param>
|
|
public CycleBeginningForm(int waterMetersCount, EntryFormCfg cfg, string preselectedOrder = null)
|
|
: this()
|
|
{
|
|
this.WaterMetersCount = waterMetersCount;
|
|
this.cfg = cfg;
|
|
this.preselectedOrder = preselectedOrder;
|
|
SNText = null;
|
|
Disabled = null;
|
|
}
|
|
|
|
|
|
private void CycleBeginningForm_Load(object sender, EventArgs e)
|
|
{
|
|
Text = Strings.Data;
|
|
orderGroupBox.Text = Strings.Purchase_order;
|
|
okButton.Text = Strings.OkBtnText;
|
|
|
|
listOfOrders = new List<IOrderInfo>();
|
|
|
|
if ((cfg.Orders == Orders.FromOracle || cfg.Orders == Orders.CombinedAndFromOracle) && ProcessData.OracleDB != null)
|
|
{
|
|
var list = ProcessData.OracleDB.ReadOrders();
|
|
foreach (var o in list) listOfOrders.Add(o);
|
|
}
|
|
|
|
if ((cfg.Orders == Orders.FromTracingDB || cfg.Orders == Orders.CombinedAndFromTracingDB) &&
|
|
ProcessData.TracingDB != null &&
|
|
ProcessData.TracingDB.DebugLevel == DebugMode.Normal)
|
|
{
|
|
var list = ProcessData.TracingDB.ReadOrders();
|
|
foreach (var o in list) listOfOrders.Add(o);
|
|
}
|
|
|
|
string insertFirst = null;
|
|
if (!string.IsNullOrEmpty(preselectedOrder))
|
|
{
|
|
insertFirst = preselectedOrder;
|
|
}
|
|
else
|
|
{
|
|
if (Program.LocalSettings.PurchaseOrderHistoryCount > 0)
|
|
{
|
|
foreach (var o in listOfOrders)
|
|
{
|
|
if (o.POName == Program.LocalSettings.PurchaseOrderHistory[0])
|
|
{
|
|
insertFirst = o.POName;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
switch (cfg.Orders)
|
|
{
|
|
case Orders.Arbitrary:
|
|
PrepareOrderCombo(orderComboBox);
|
|
break;
|
|
|
|
case Orders.FromOracle:
|
|
case Orders.FromTracingDB:
|
|
if (insertFirst != null)
|
|
{
|
|
orderComboBox.Items.Add(insertFirst);
|
|
orderComboBox.Text = insertFirst;
|
|
}
|
|
|
|
foreach (var o in listOfOrders)
|
|
if (o.POName != insertFirst)
|
|
orderComboBox.Items.Add(o.POName);
|
|
break;
|
|
|
|
case Orders.CombinedAndFromOracle:
|
|
case Orders.CombinedAndFromTracingDB:
|
|
if (insertFirst != null)
|
|
{
|
|
orderComboBox.Items.Add(insertFirst);
|
|
orderComboBox.Text = insertFirst;
|
|
}
|
|
orderComboBox.Items.Add("BBAAMMXX");
|
|
orderComboBox.Items.Add("BBAAOMXX");
|
|
orderComboBox.Items.Add("BBAAQMXX");
|
|
orderComboBox.Items.Add("BBAATMFR");
|
|
orderComboBox.Items.Add("BBAATMXX");
|
|
orderComboBox.Items.Add("CCAAMMXX");
|
|
orderComboBox.Items.Add("CCAAOMXX");
|
|
orderComboBox.Items.Add("CCAAQMXX");
|
|
orderComboBox.Items.Add("CCAATMFR");
|
|
orderComboBox.Items.Add("CCAATMXX");
|
|
orderComboBox.Items.Add("DDAAMMXX");
|
|
orderComboBox.Items.Add("DDAAOMXX");
|
|
orderComboBox.Items.Add("DDAAQMXX");
|
|
orderComboBox.Items.Add("DDAATMXX");
|
|
orderComboBox.Items.Add("DEAAMMXX");
|
|
orderComboBox.Items.Add("DEAAOMXX");
|
|
orderComboBox.Items.Add("DEAAQMXX");
|
|
orderComboBox.Items.Add("DEAATMXX");
|
|
orderComboBox.Items.Add("EEAAMMXX");
|
|
orderComboBox.Items.Add("EEAAOMXX");
|
|
orderComboBox.Items.Add("EEAAQMXX");
|
|
orderComboBox.Items.Add("EEAATMFR");
|
|
orderComboBox.Items.Add("EEAATMXX");
|
|
orderComboBox.Items.Add("FFAAMMXX");
|
|
orderComboBox.Items.Add("FFAAOMXX");
|
|
orderComboBox.Items.Add("FFAAQMXX");
|
|
orderComboBox.Items.Add("FFAATMFR");
|
|
orderComboBox.Items.Add("FFAATMXX");
|
|
orderComboBox.Items.Add("GFAAMMXX");
|
|
orderComboBox.Items.Add("GFAAOMXX");
|
|
orderComboBox.Items.Add("GFAAQMXX");
|
|
orderComboBox.Items.Add("GFAATMXX");
|
|
|
|
foreach (var o in listOfOrders)
|
|
if (o.POName != insertFirst)
|
|
orderComboBox.Items.Add(o.POName);
|
|
break;
|
|
}
|
|
|
|
///
|
|
/// Draw an appropriate test bench picture
|
|
///
|
|
Side side = (TBF.Rig.Sequences.ProcessData.BenchInfo is DataContainer.iPerlBenchInfo.Component)
|
|
? (TBF.Rig.Sequences.ProcessData.BenchInfo as DataContainer.iPerlBenchInfo.Component).Side
|
|
: Side.Left;
|
|
if ((cfg.Direction == Direction.Reversed_LR) && (side == Side.Left))
|
|
{
|
|
/// direction L->R (reversed), left side
|
|
pictureBox.Image = Image.FromFile(string.Format("{0}\\Pictures\\reversed_dir_left.jpg", Program.ExecutableDir, true));
|
|
}
|
|
else if ((cfg.Direction == Direction.Reversed_LR) && (side == Side.Right))
|
|
{
|
|
/// direction L->R (reversed), right side
|
|
pictureBox.Image = Image.FromFile(string.Format("{0}\\Pictures\\reversed_dir_right.jpg", Program.ExecutableDir, true));
|
|
}
|
|
else if (side == Side.Right)
|
|
{
|
|
/// direction R->L (forward), right side
|
|
pictureBox.Image = Image.FromFile(string.Format("{0}\\Pictures\\forward_dir_right.jpg", Program.ExecutableDir, true));
|
|
}
|
|
else
|
|
{
|
|
/// direction R->L (forward), left side
|
|
pictureBox.Image = Image.FromFile(string.Format("{0}\\Pictures\\forward_dir_left.jpg", Program.ExecutableDir, true));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Load Purchase order combo box items from the LocalSettings PurchaseOrderHistory array
|
|
/// </summary>
|
|
/// <param name="orderComboBox">Puchase order ComboBox</param>
|
|
void PrepareOrderCombo(ComboBox orderComboBox)
|
|
{
|
|
for (int i = 0; i < Program.LocalSettings.PurchaseOrderHistoryCount; i++)
|
|
{
|
|
orderComboBox.Items.Add(Program.LocalSettings.PurchaseOrderHistory[i]);
|
|
}
|
|
|
|
if (orderComboBox.Items.Count > 0)
|
|
{
|
|
orderComboBox.Text = orderComboBox.Items[0].ToString();
|
|
}
|
|
}
|
|
|
|
private void okButton_Click(object sender, EventArgs e)
|
|
{
|
|
if (orderComboBox.Text.Length > 8 ||
|
|
(cfg.Orders != Orders.Arbitrary && !orderComboBox.Items.Contains(orderComboBox.Text)))
|
|
{
|
|
MessageBox.Show(Strings.Invalid_order_number, Strings.Error, MessageBoxButtons.OK,
|
|
MessageBoxIcon.Exclamation);
|
|
return;
|
|
}
|
|
|
|
IOrderInfo oInfo = (listOfOrders == null) ? null : listOfOrders.FirstOrDefault<IOrderInfo>(x => x.POName == orderComboBox.Text);
|
|
///
|
|
if (oInfo is Output.DB.SensusOracle.OrderDetails)
|
|
{
|
|
ProcessData.OrderInfo = oInfo;
|
|
}
|
|
else if (oInfo is SharedDatabase.Entities.OrderInfo && ProcessData.TracingDB != null)
|
|
{
|
|
try
|
|
{
|
|
ISession session = ProcessData.TracingDB.SessionFactory.OpenSession();
|
|
string poName = Program.MainWnd.SelectedProcedure.OrderInfo.POName;
|
|
var list = session.QueryOver<SharedDatabase.Entities.OrderInfo>()
|
|
.Where(x => (x.POName == Program.MainWnd.SelectedProcedure.OrderInfo.POName))
|
|
.List();
|
|
ProcessData.OrderInfo = (list.Count == 1) ? list[0] : null;
|
|
string workflow = (list.Count == 1) ? list[0].Workflow : null;
|
|
ProcessData.WorkflowSummary = SharedDatabase.WorkflowSummary.ReadFromDB(workflow, "test", session);
|
|
session.Close();
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
ProcessData.OrderInfo = null;
|
|
ProcessData.WorkflowSummary = null;
|
|
log.ErrorFormat("Unable to load order, workflow or workstep: {0}", exc.Message);
|
|
}
|
|
}
|
|
|
|
PurchaseOrder = orderComboBox.Text;
|
|
Program.LocalSettings.UpdateHistory(orderComboBox.Text, ref Program.LocalSettings.PurchaseOrderHistory);
|
|
|
|
completed = true;
|
|
Close();
|
|
}
|
|
|
|
|
|
#region Forced close handling
|
|
|
|
public void StartForceCloseHandler()
|
|
{
|
|
UiBridge.Bridge.CloseModelessFormHandler += delegate(object sender, EventArgs args)
|
|
{
|
|
if (InvokeRequired) { Invoke(new EventHandler<EventArgs>(OnForceClose), sender, args); }
|
|
else OnForceClose(sender, args);
|
|
};
|
|
}
|
|
|
|
private void OnForceClose(object sender, EventArgs args)
|
|
{
|
|
DialogResult = DialogResult.Cancel;
|
|
Close();
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|