/// /// 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)); /// Number of water meters public readonly int WaterMetersCount; readonly EntryFormCfg cfg; /// Loaded from database beforethe form is open IList 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; /// Parameterless constructor for common functionality public CycleBeginningForm() { InitializeComponent(); ControlBox = false; preselectedOrder = null; completed = false; StartForceCloseHandler(); } /// /// Constructor /// /// Number of text boxes for serial numbers 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(); 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)); } } /// /// Load Purchase order combo box items from the LocalSettings PurchaseOrderHistory array /// /// Puchase order ComboBox 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(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 orderInfo = ProcessData.TracingDB.ReReadOneOrder(poName, session); ProcessData.OrderInfo = orderInfo; string workflow = (orderInfo != null) ? orderInfo.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(OnForceClose), sender, args); } else OnForceClose(sender, args); }; } private void OnForceClose(object sender, EventArgs args) { DialogResult = DialogResult.Cancel; Close(); } #endregion } }