Compare commits

..
236 changed files with 10461 additions and 14687 deletions
+4 -2
View File
@@ -16,6 +16,8 @@ Encrypt/bin/
Encrypt/obj/
EventViewer/bin/
EventViewer/obj/
Events/bin/
Events/obj/
FeatureVectorCalculator/bin/
FeatureVectorCalculator/obj/
GemCard/bin/
@@ -30,8 +32,6 @@ MergeResultsDBs/bin/
MergeResultsDBs/obj/
OrderManagement/bin/
OrderManagement/obj/
ProductionTracing/bin/
ProductionTracing/obj/
RecordProcessing/bin/
RecordProcessing/obj/
ResetBatchNr/bin/
@@ -56,6 +56,8 @@ ToFirstMonitor/bin/
ToFirstMonitor/obj/
ToSecondMonitor/bin/
ToSecondMonitor/obj/
Users/bin/
Users/obj/
UserManagement/bin/
UserManagement/obj/
WorkflowConfigurator/bin/
-1
View File
@@ -76,7 +76,6 @@
</Compile>
<Compile Include="QuitAppException.cs" />
<Compile Include="SerializableDictionary.cs" />
<Compile Include="StatisticalMetrics.cs" />
<Compile Include="Telegram.cs" />
<Compile Include="UIControls\CoolButtonCtrl.cs">
<SubType>UserControl</SubType>
+2 -2
View File
@@ -10,14 +10,14 @@ namespace Common
/// </summary>
public class DBSettings : ICloneable
{
public DBType DbType;
public Common.DBType DbType;
public string ConnectionString;
public DBSettings()
{
}
public DBSettings(DBType dbType, string connectionString)
public DBSettings(Common.DBType dbType, string connectionString)
{
this.DbType = dbType;
this.ConnectionString = connectionString;
-3
View File
@@ -61,9 +61,6 @@ namespace Common.Forms
private const int HDN_ITEMCHANGINGW = (HDN_FIRST-20);
#endregion
public MySortOrder SortOrder = MySortOrder.None;
public int SortColumn = -1;
/// <summary>
/// Required designer variable.
/// </summary>
+2 -2
View File
@@ -213,9 +213,9 @@ namespace Common
/// </summary>
public static double ErrorFromVolumes(double measuredVolume, double trueVolume)
{
if (Math.Abs(trueVolume) <= float.Epsilon)
if (trueVolume <= float.Epsilon)
{
if (Math.Abs(measuredVolume) <= float.Epsilon)
if (measuredVolume <= float.Epsilon)
{
log.WarnFormat("ErrorFromVolumes({0},{1}) returns {2}", measuredVolume, trueVolume, -100.0);
return -100.0;
+5 -7
View File
@@ -35,7 +35,7 @@ namespace Common.Iperl
public float RefFlow; /// [m3/h]
public int Counter;
public Int32 EmfRaw; /// Signed EMF from iPerl opto data
public UInt32 EmfRaw; /// From iPerl opto data
public Int16 MagneticFieldRaw;
public Int16 FlowRaw;
public UInt32 VolumeRaw;
@@ -50,7 +50,8 @@ namespace Common.Iperl
///
public double EMF()
{
return 0.000000333 * (double)EmfRaw;
Int32 signedEmf = (EmfRaw > 0x7FFFFF) ? ((int)EmfRaw - 0x1000000) : (int)EmfRaw;
return 0.000000333 * (double)signedEmf;
}
public double MagneticField() { return (double)MagneticFieldRaw; }
public double Flow(double scalingFactor) { return 0.225 * scalingFactor * (double)FlowRaw; }
@@ -119,10 +120,7 @@ namespace Common.Iperl
return false;
}
UInt32 uEmfRaw;
bool f1 = UInt32.TryParse(telegram.Substring(0, 6), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out uEmfRaw);
EmfRaw = (uEmfRaw > 0x7FFFFF) ? ((int)uEmfRaw - 0x1000000) : (int)uEmfRaw;
bool f1 = UInt32.TryParse(telegram.Substring(0, 6), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out EmfRaw);
bool f2 = Int16.TryParse(telegram.Substring(7, 4), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out MagneticFieldRaw);
bool f3 = Int16.TryParse(telegram.Substring(12, 4), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out FlowRaw);
bool f4 = UInt32.TryParse(telegram.Substring(17, 6), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out VolumeRaw);
@@ -245,7 +243,7 @@ namespace Common.Iperl
DateTime.Second.ToString("D2"),
DateTime.Millisecond.ToString("D4"),
Counter,
(EmfRaw & 0x00FFFFFF).ToString("X6"),
EmfRaw.ToString("X6"),
MagneticFieldRaw.ToString("X4"),
FlowRaw.ToString("X4"),
VolumeRaw.ToString("X6"),
-338
View File
@@ -1,338 +0,0 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Common.Iperl;
namespace Common
{
public static class Extensions
{
public static float[] SubArray(this float[] array, int offset, int length)
{
float[] result = new float[length];
Array.Copy(array, offset, result, 0, length);
return result;
}
}
public class StatisticalMetrics
{
const int VectorSize = 7;
const int MinLength = 100;
const float AdcBit = (float)57e-9;
const int NeighbourhoodSize = 30; /// To determine extended outliers
/// <summary>
/// Calculates a 7-dimensional vector with these components:
/// x[0] = X1 = Number of outliers
/// x[1] = X2 = Relative cal-factor shift due to outliers
/// x[2] = X3 = Standard deviation of high-pass filteres ++++ demodulation of EMF (cut-off at Nyquist frequency)
/// x[3] = X4 = Robust standard deviation of high-pass filtered ++++ demodulation
/// x[4] = X5 = Peak-to-peak of low-pass filtered ++++ demodulation of EMF (cut-off TBD)
/// x[5] = X6 = Peak-to-peak of reference flow rate
/// x[6] = X7 = Mean impedance (++-- demodulation)
/// </summary>
/// <param name="optoData"></param>
/// <param name="optoDataCount"></param>
/// <param name="startIx"></param>
/// <param name="endIx"></param>
/// <returns></returns>
public static float[] Calculate(OptoTelegramRaw[] optoData, int optoDataCount, int startIx, int endIx, bool downsample,
out float[] offsetV, out float[] kOhmsR, out float[] kOhmsC, out float[] dutFlow,
out float[] refFlow, out float[] flowRatio, out float[] magField, out float[] emfV,
out PointF[] outliers, out PointF[] extendedOutliers)
{
offsetV = kOhmsR = kOhmsC = dutFlow = refFlow = flowRatio = magField = emfV = null;
outliers = extendedOutliers = null;
if (optoData == null || optoData.Length < optoDataCount ||
startIx < 0 || endIx >= optoDataCount || endIx <= startIx + MinLength + 3) return null;
float[] modulatedData = GetModulatedEmf(optoData, optoDataCount, AdcBit);
FindShiftAndDemodulate(modulatedData, downsample,
new float[] { +1, +1, +1, +1 }, out offsetV,
new float[] { +1, +1, -1, -1 }, out kOhmsR,
new float[] { +1, -1, -1, +1 }, out kOhmsC,
new float[] { +1, -1, +1, -1 }, out dutFlow);
//offsetV = FirFilter(modulatedData, new float[] { 1, 3, 4, 4, 3, 1}, 0.0625F);
magField = GetMagField(optoData, optoDataCount, downsample, new float[] { 1, 1, 1, 1 });
refFlow = GetRefFlow(optoData, optoDataCount, downsample, new float[] { 1, 1, 1, 1 });
flowRatio = new float[Math.Min(dutFlow.Length, refFlow.Length)];
for (int i = 0; i < flowRatio.Length; i++)
{
flowRatio[i] = (refFlow[i] != 0) ? dutFlow[i] / refFlow[i] : 1;
}
float[] x = new float[VectorSize];
/// X1 = Number of outliers
int outliersCount = GetOutliers(flowRatio, out outliers, out extendedOutliers);
/// X2 = Relative cal-factor shift due to outliers
/// X3 = Standard deviation of high-pass filteres ++++ demodulation of EMF (cut-off at Nyquist frequency)
/// X4 = Robust standard deviation of high-pass filtered ++++ demodulation
/// X5 = Peak-to-peak of low-pass filtered ++++ demodulation of EMF (cut-off TBD)
/// X6 = Peak-to-peak of reference flow rate
/// X7 = Mean impedance (++-- demodulation)
double sum = 0;
foreach (var z in kOhmsR) sum += z;
x[6] = Convert.ToSingle(sum / kOhmsR.Length);
return x;
}
static float[] GetModulatedEmf(OptoTelegramRaw[] optoData, int optoDataCount, float factor)
{
if (optoData == null || optoDataCount < 0) return null;
float[] result = new float[optoDataCount];
for (int i = 0; i < optoDataCount; i++)
{
result[i] = optoData[i].EmfRaw * factor;
}
return result;
}
static float[] GetMagField(OptoTelegramRaw[] optoData, int optoDataCount, bool downsample, float[] kernel)
{
if (optoData == null || optoDataCount < 0 || (downsample && (kernel == null || kernel.Length < 4))) return null;
int resultLen = downsample ? (optoDataCount / 4) : optoDataCount;
float[] result = new float[resultLen];
if (downsample)
{
float ksum = 0;
for (int j = 0; j < kernel.Length; j++) ksum += kernel[j];
for (int j = 0; j < kernel.Length; j++) kernel[j] /= ksum;
for (int i = 0; (4 * i) + kernel.Length - 1 < optoDataCount; i++)
{
float sum = 0;
for (int j = 0; j < kernel.Length; j++) sum += Convert.ToSingle(optoData[4 * i + j].MagneticFieldRaw) * kernel[j];
result[i] = sum;
}
}
else
{
for (int i = 0; i < optoDataCount; i++) result[i] = optoData[i].MagneticFieldRaw;
}
return result;
}
static float[] GetRefFlow(OptoTelegramRaw[] optoData, int optoDataCount, bool downsample, float[] kernel)
{
if (optoData == null || optoDataCount < 0 || (downsample && (kernel == null || kernel.Length < 4))) return null;
int resultLen = downsample ? (optoDataCount / 4) : optoDataCount;
float[] result = new float[resultLen];
if (downsample)
{
float ksum = 0;
for (int j = 0; j < kernel.Length; j++) ksum += kernel[j];
for (int j = 0; j < kernel.Length; j++) kernel[j] /= ksum;
for (int i = 0; (4 * i) + kernel.Length - 1 < optoDataCount; i++)
{
float sum = 0;
for (int j = 0; j < kernel.Length; j++) sum += Convert.ToSingle(optoData[4 * i + j].RefFlow) * kernel[j];
result[i] = sum;
}
}
else
{
for (int i = 0; i < optoDataCount; i++) result[i] = optoData[i].RefFlow;
}
return result;
}
public static void FindShiftAndDemodulate(float[] modulatedData, bool downsample,
float[] kernel1, out float[] data1,
float[] kernel2, out float[] data2,
float[] kernel3, out float[] data3,
float[] kernel4, out float[] data4)
{
int shift = GetShift(modulatedData.SubArray(0, MinLength));
data1 = (kernel1 != null) ? Demodulate(modulatedData, kernel1, shift, downsample) : null;
data2 = (kernel2 != null) ? Demodulate(modulatedData, kernel2, shift, downsample) : null;
data3 = (kernel3 != null) ? Demodulate(modulatedData, kernel3, shift, downsample) : null;
data4 = (kernel4 != null) ? Demodulate(modulatedData, kernel4, shift, downsample) : null;
}
/// <summary>
/// Unlike FIR filtering, demodulation shifts the kernel in 4 phases
/// </summary>
/// <param name="data">Input data</param>
/// <param name="kernel">Demodulation kernel</param>
/// <param name="shift">shift 0..3</param>
/// <returns>Output data</returns>
static float[] Demodulate(float[] data, float[] kernel, int shift, bool downsample)
{
if (data == null || data.Length < MinLength || kernel == null || kernel.Length != 4)
{
return null;
}
float ksum = 0;
for (int i = 0; i < 4; i++) ksum += Math.Abs(kernel[i]);
for (int i = 0; i < 4; i++) kernel[i] /= ksum;
int rsltLen = downsample ? (data.Length - 3) / 4 : data.Length - 3;
float[] result = new float[rsltLen];
if (downsample)
{
for (int i = shift; i < 4 * rsltLen; i += 4)
{
float sum = 0;
for (int j = 0; j < 4; j++) sum += data[i + j] * kernel[(i + j + 4 - shift) % 4];
result[i / 4] = sum;
}
}
else
{
for (int i = 0; i < rsltLen; i++)
{
float sum = 0;
for (int j = 0; j < 4; j++) sum += data[i + j] * kernel[(i + j + 4 - shift) % 4];
result[i] = sum;
}
}
return result;
}
/// <summary>
/// Determine modulation phase by maximizing ++-- demodulation result.
/// </summary>
/// <param name="modulatedEmf">Input data</param>
/// <returns>0..3 = modulation phase or, -1 = error</returns>
static int GetShift(float[] modulatedData)
{
float[] kernel = new float[4] { 1, 1, -1, -1 };
int maximizingShift = -1;
float maximum = float.MinValue;
for (int shift = 0; shift <= 3; shift++)
{
var demodulatedCandidate = Demodulate(modulatedData, kernel, shift, false);
float sum = 0;
foreach (var d in demodulatedCandidate) sum += d;
if (sum > maximum)
{
maximum = sum;
maximizingShift = shift;
}
}
return maximizingShift;
}
/// <summary>
/// FIR filtering = convolution with a kernel
/// </summary>
/// <param name="data">Input data</param>
/// <param name="kernel">Convolution kernel</param>
/// <returns>Output data</returns>
static float[] FirFilter(float[] data, float[] kernel, float factor)
{
if (data == null || kernel == null) return null;
int kernelLen = kernel.Length;
int rsltLen = data.Length - kernelLen + 1;
if (rsltLen < 0) return null;
float[] result = new float[rsltLen];
for (int i = 0; i < rsltLen; i++)
{
float sum = 0;
for (int j = 0; j < kernelLen; j++) sum += data[i + j] * kernel[j];
result[i] = sum * factor;
}
return result;
}
static int GetOutliers(float[] flowRatio, out PointF[] outliers, out PointF[] extendedOutliers)
{
float mean = Enumerable.Average(flowRatio);
var fr = new float[flowRatio.Length];
for (int i = 0; i < fr.Length; i++) fr[i] = flowRatio[i] - mean;
Array.Sort(fr);
float qLo = fr[fr.Length / 4];
float qHi = fr[3 * fr.Length / 4];
int N = fr.Length / 2;
float sumY = 0;
float sumYY = 0;
for (int i = fr.Length / 4; i < 3 * fr.Length / 4; i++)
{
sumY += fr[i];
sumYY += fr[i] * fr[i];
}
float std = (float)Math.Sqrt(sumYY / N - (sumY / N) * (sumY / N));
float robustStd = std * 5.1812824F;
float threshold = 7 * robustStd;
/// Restore fr as it was before sorting
for (int i = 0; i < fr.Length; i++) fr[i] = flowRatio[i] - mean;
IList<PointF> listOfOutliers = new List<PointF>();
bool[] boolExtendedOutliers = new bool[fr.Length];
int outliersCount = 0;
for (int i = 0; i < fr.Length; i++)
{
if (fr[i] < -threshold || fr[i] > threshold)
{
/// This is an outlier
listOfOutliers.Add(new PointF(Convert.ToSingle(i), fr[i] + mean));
outliersCount++;
for (int j = Math.Max(0, i - NeighbourhoodSize); j <= Math.Min(i + NeighbourhoodSize, fr.Length - 1); j++)
{
boolExtendedOutliers[j] = true;
}
}
}
IList<PointF> listOfExtendedOutliers = new List<PointF>();
for (int i = 0; i < fr.Length; i++)
{
if (boolExtendedOutliers[i])
{
listOfExtendedOutliers.Add(new PointF(Convert.ToSingle(i), fr[i] + mean));
}
}
outliers = listOfOutliers.ToArray<PointF>();
extendedOutliers = listOfExtendedOutliers.ToArray<PointF>();
return outliersCount;
}
}
}
+16 -15
View File
@@ -2,6 +2,7 @@
/// Copyright (c) 2016-2021 Sensus Slovensko a.s.
///
using System;
using System.Reflection;
namespace Common
{
@@ -357,21 +358,21 @@ namespace Common
}
}
public static bool IsVolume(Unit unit) { return IsQuantity(unit, Quantity.Volume); }
public static bool IsFlow(Unit unit) { return IsQuantity(unit, Quantity.Flow); }
public static bool IsMass(Unit unit) { return IsQuantity(unit, Quantity.Mass); }
public static bool IsTime(Unit unit) { return IsQuantity(unit, Quantity.Time); }
public static bool IsTemperature(Unit unit) { return IsQuantity(unit, Quantity.Temperature); }
public static bool IsPressure(Unit unit) { return IsQuantity(unit, Quantity.Pressure); }
public static bool IsHumidity(Unit unit) { return IsQuantity(unit, Quantity.Humidity); }
public static bool IsError(Unit unit) { return IsQuantity(unit, Quantity.Error); }
public static bool IsLength(Unit unit) { return IsQuantity(unit, Quantity.Length); }
public static bool IsDensity(Unit unit) { return IsQuantity(unit, Quantity.Density); }
public static bool IsEnergy(Unit unit) { return IsQuantity(unit, Quantity.Energy); }
public static bool IsPulses(Unit unit) { return IsQuantity(unit, Quantity.Pulses); }
public static bool IsPulsePerLtr(Unit unit) { return IsQuantity(unit, Quantity.PulsePerLtr); }
public static bool IsPulsePerKWh(Unit unit) { return IsQuantity(unit, Quantity.PulsePerKWh); }
public static bool IsConductivity(Unit unit) { return IsQuantity(unit, Quantity.Conductivity); }
public static bool IsVolume(Unit units) { return IsQuantity(units, Quantity.Volume); }
public static bool IsFlow(Unit units) { return IsQuantity(units, Quantity.Flow); }
public static bool IsMass(Unit units) { return IsQuantity(units, Quantity.Mass); }
public static bool IsTime(Unit units) { return IsQuantity(units, Quantity.Time); }
public static bool IsTemperature(Unit units) { return IsQuantity(units, Quantity.Temperature); }
public static bool IsPressure(Unit units) { return IsQuantity(units, Quantity.Pressure); }
public static bool IsHumidity(Unit units) { return IsQuantity(units, Quantity.Humidity); }
public static bool IsError(Unit units) { return IsQuantity(units, Quantity.Error); }
public static bool IsLength(Unit units) { return IsQuantity(units, Quantity.Length); }
public static bool IsDensity(Unit units) { return IsQuantity(units, Quantity.Density); }
public static bool IsEnergy(Unit units) { return IsQuantity(units, Quantity.Energy); }
public static bool IsPulses(Unit units) { return IsQuantity(units, Quantity.Pulses); }
public static bool IsPulsePerLtr(Unit units) { return IsQuantity(units, Quantity.PulsePerLtr); }
public static bool IsPulsePerKWh(Unit units) { return IsQuantity(units, Quantity.PulsePerKWh); }
public static bool IsConductivity(Unit units) { return IsQuantity(units, Quantity.Conductivity); }
+4 -3
View File
@@ -53,9 +53,10 @@ namespace Config.Entities
return corrections[0].Correction;
}
for (int i = 1; i < corrections.Count; i++)
int count = corrections.Count;
for (int i = 1; i < count; i++)
{
if (rawValue < corrections[i].Measurement)
if (rawValue < corrections[0].Measurement)
{
double d1 = rawValue - corrections[i - 1].Measurement;
double d2 = corrections[i].Measurement - rawValue;
@@ -74,7 +75,7 @@ namespace Config.Entities
}
/// rawValue is above the highest value in the correction table
return corrections[corrections.Count - 1].Correction;
return corrections[count - 1].Correction;
}
}
}
+69
View File
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{5D9B49E3-CDF9-4A27-80B4-58141D0EB0E0}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Events</RootNamespace>
<AssemblyName>Events</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="FluentNHibernate">
<HintPath>..\packages\FluentNHibernate.2.0.3.0\lib\net40\FluentNHibernate.dll</HintPath>
</Reference>
<Reference Include="Iesi.Collections">
<HintPath>..\packages\Iesi.Collections.4.0.0.4000\lib\net40\Iesi.Collections.dll</HintPath>
</Reference>
<Reference Include="MySql.Data">
<HintPath>..\packages\MySql.Data.6.6.5\lib\net40\MySql.Data.dll</HintPath>
</Reference>
<Reference Include="NHibernate">
<HintPath>..\packages\NHibernate.4.0.4.4000\lib\net40\NHibernate.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
@@ -5,12 +5,12 @@ using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ResultsBrowser")]
[assembly: AssemblyTitle("Events")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Sensus")]
[assembly: AssemblyProduct("ResultsBrowser")]
[assembly: AssemblyCopyright("Copyright © 2016 - 2022 Sensus Slovensko a.s.")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Events")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -20,7 +20,7 @@ using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("3bb098ac-f5d3-4eb1-90ea-7ba296ce8fd7")]
[assembly: Guid("3a68150f-6cfc-4f15-a813-cef63bc8bb47")]
// Version information for an assembly consists of the following four values:
//
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.0.2")]
[assembly: AssemblyFileVersion("3.0.2")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
+23 -206
View File
@@ -30,46 +30,21 @@
{
this.rawFileComboBox = new System.Windows.Forms.ComboBox();
this.browseButton = new System.Windows.Forms.Button();
this.processButton = new System.Windows.Forms.Button();
this.resultsTextBox = new System.Windows.Forms.TextBox();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.splitContainer3 = new System.Windows.Forms.SplitContainer();
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.tabPage3 = new System.Windows.Forms.TabPage();
this.tabPage4 = new System.Windows.Forms.TabPage();
this.tabPage5 = new System.Windows.Forms.TabPage();
this.tabPage6 = new System.Windows.Forms.TabPage();
this.tabPage7 = new System.Windows.Forms.TabPage();
this.tabPage8 = new System.Windows.Forms.TabPage();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel1.SuspendLayout();
this.splitContainer2.Panel2.SuspendLayout();
this.splitContainer2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit();
this.splitContainer3.Panel1.SuspendLayout();
this.splitContainer3.Panel2.SuspendLayout();
this.splitContainer3.SuspendLayout();
this.tabControl1.SuspendLayout();
this.SuspendLayout();
//
// rawFileComboBox
//
this.rawFileComboBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.rawFileComboBox.FormattingEnabled = true;
this.rawFileComboBox.Location = new System.Drawing.Point(0, 0);
this.rawFileComboBox.Location = new System.Drawing.Point(29, 28);
this.rawFileComboBox.Name = "rawFileComboBox";
this.rawFileComboBox.Size = new System.Drawing.Size(1040, 21);
this.rawFileComboBox.Size = new System.Drawing.Size(715, 21);
this.rawFileComboBox.TabIndex = 0;
//
// browseButton
//
this.browseButton.Location = new System.Drawing.Point(7, 0);
this.browseButton.Location = new System.Drawing.Point(769, 19);
this.browseButton.Name = "browseButton";
this.browseButton.Size = new System.Drawing.Size(66, 37);
this.browseButton.TabIndex = 1;
@@ -77,184 +52,37 @@
this.browseButton.UseVisualStyleBackColor = true;
this.browseButton.Click += new System.EventHandler(this.browseButton_Click);
//
// processButton
//
this.processButton.Location = new System.Drawing.Point(29, 66);
this.processButton.Name = "processButton";
this.processButton.Size = new System.Drawing.Size(91, 46);
this.processButton.TabIndex = 2;
this.processButton.Text = "Process";
this.processButton.UseVisualStyleBackColor = true;
this.processButton.Click += new System.EventHandler(this.processButton_Click);
//
// resultsTextBox
//
this.resultsTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.resultsTextBox.Location = new System.Drawing.Point(0, 0);
this.resultsTextBox.Location = new System.Drawing.Point(29, 131);
this.resultsTextBox.Multiline = true;
this.resultsTextBox.Name = "resultsTextBox";
this.resultsTextBox.Size = new System.Drawing.Size(1127, 156);
this.resultsTextBox.Size = new System.Drawing.Size(715, 181);
this.resultsTextBox.TabIndex = 3;
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.splitContainer2);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.tabControl1);
this.splitContainer1.Size = new System.Drawing.Size(1127, 733);
this.splitContainer1.SplitterDistance = 200;
this.splitContainer1.TabIndex = 4;
//
// splitContainer2
//
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer2.Location = new System.Drawing.Point(0, 0);
this.splitContainer2.Name = "splitContainer2";
this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer2.Panel1
//
this.splitContainer2.Panel1.Controls.Add(this.splitContainer3);
//
// splitContainer2.Panel2
//
this.splitContainer2.Panel2.Controls.Add(this.resultsTextBox);
this.splitContainer2.Size = new System.Drawing.Size(1127, 200);
this.splitContainer2.SplitterDistance = 40;
this.splitContainer2.TabIndex = 3;
//
// splitContainer3
//
this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
this.splitContainer3.Location = new System.Drawing.Point(0, 0);
this.splitContainer3.Name = "splitContainer3";
//
// splitContainer3.Panel1
//
this.splitContainer3.Panel1.Controls.Add(this.rawFileComboBox);
//
// splitContainer3.Panel2
//
this.splitContainer3.Panel2.Controls.Add(this.browseButton);
this.splitContainer3.Size = new System.Drawing.Size(1127, 40);
this.splitContainer3.SplitterDistance = 1040;
this.splitContainer3.TabIndex = 0;
//
// tabControl1
//
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Controls.Add(this.tabPage3);
this.tabControl1.Controls.Add(this.tabPage4);
this.tabControl1.Controls.Add(this.tabPage5);
this.tabControl1.Controls.Add(this.tabPage6);
this.tabControl1.Controls.Add(this.tabPage7);
this.tabControl1.Controls.Add(this.tabPage8);
this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabControl1.Location = new System.Drawing.Point(0, 0);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(1127, 529);
this.tabControl1.TabIndex = 0;
//
// tabPage1
//
this.tabPage1.Location = new System.Drawing.Point(4, 22);
this.tabPage1.Name = "tabPage1";
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
this.tabPage1.Size = new System.Drawing.Size(1119, 503);
this.tabPage1.TabIndex = 0;
this.tabPage1.Text = "OffsetV";
this.tabPage1.UseVisualStyleBackColor = true;
//
// tabPage2
//
this.tabPage2.Location = new System.Drawing.Point(4, 22);
this.tabPage2.Name = "tabPage2";
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
this.tabPage2.Size = new System.Drawing.Size(1119, 503);
this.tabPage2.TabIndex = 1;
this.tabPage2.Text = "KOhmsR";
this.tabPage2.UseVisualStyleBackColor = true;
//
// tabPage3
//
this.tabPage3.Location = new System.Drawing.Point(4, 22);
this.tabPage3.Name = "tabPage3";
this.tabPage3.Size = new System.Drawing.Size(1119, 503);
this.tabPage3.TabIndex = 2;
this.tabPage3.Text = "KOhmsC";
this.tabPage3.UseVisualStyleBackColor = true;
//
// tabPage4
//
this.tabPage4.Location = new System.Drawing.Point(4, 22);
this.tabPage4.Name = "tabPage4";
this.tabPage4.Size = new System.Drawing.Size(1119, 503);
this.tabPage4.TabIndex = 3;
this.tabPage4.Text = "DutFlowLph";
this.tabPage4.UseVisualStyleBackColor = true;
//
// tabPage5
//
this.tabPage5.Location = new System.Drawing.Point(4, 22);
this.tabPage5.Name = "tabPage5";
this.tabPage5.Size = new System.Drawing.Size(1119, 503);
this.tabPage5.TabIndex = 4;
this.tabPage5.Text = "RefFlowLph";
this.tabPage5.UseVisualStyleBackColor = true;
//
// tabPage6
//
this.tabPage6.Location = new System.Drawing.Point(4, 22);
this.tabPage6.Name = "tabPage6";
this.tabPage6.Size = new System.Drawing.Size(1119, 503);
this.tabPage6.TabIndex = 5;
this.tabPage6.Text = "FlowRatio";
this.tabPage6.UseVisualStyleBackColor = true;
//
// tabPage7
//
this.tabPage7.Location = new System.Drawing.Point(4, 22);
this.tabPage7.Name = "tabPage7";
this.tabPage7.Size = new System.Drawing.Size(1119, 503);
this.tabPage7.TabIndex = 6;
this.tabPage7.Text = "MagField";
this.tabPage7.UseVisualStyleBackColor = true;
//
// tabPage8
//
this.tabPage8.Location = new System.Drawing.Point(4, 22);
this.tabPage8.Name = "tabPage8";
this.tabPage8.Size = new System.Drawing.Size(1119, 503);
this.tabPage8.TabIndex = 7;
this.tabPage8.Text = "EmfV";
this.tabPage8.UseVisualStyleBackColor = true;
//
// CalculatorWnd
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1127, 733);
this.Controls.Add(this.splitContainer1);
this.ClientSize = new System.Drawing.Size(859, 335);
this.Controls.Add(this.resultsTextBox);
this.Controls.Add(this.processButton);
this.Controls.Add(this.browseButton);
this.Controls.Add(this.rawFileComboBox);
this.Name = "CalculatorWnd";
this.Text = "Feature vector calculator";
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.splitContainer2.Panel1.ResumeLayout(false);
this.splitContainer2.Panel2.ResumeLayout(false);
this.splitContainer2.Panel2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
this.splitContainer2.ResumeLayout(false);
this.splitContainer3.Panel1.ResumeLayout(false);
this.splitContainer3.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit();
this.splitContainer3.ResumeLayout(false);
this.tabControl1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
@@ -262,19 +90,8 @@
private System.Windows.Forms.ComboBox rawFileComboBox;
private System.Windows.Forms.Button browseButton;
private System.Windows.Forms.Button processButton;
private System.Windows.Forms.TextBox resultsTextBox;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.SplitContainer splitContainer2;
private System.Windows.Forms.SplitContainer splitContainer3;
private System.Windows.Forms.TabControl tabControl1;
private System.Windows.Forms.TabPage tabPage1;
private System.Windows.Forms.TabPage tabPage2;
private System.Windows.Forms.TabPage tabPage3;
private System.Windows.Forms.TabPage tabPage4;
private System.Windows.Forms.TabPage tabPage5;
private System.Windows.Forms.TabPage tabPage6;
private System.Windows.Forms.TabPage tabPage7;
private System.Windows.Forms.TabPage tabPage8;
}
}
+34 -93
View File
@@ -4,20 +4,13 @@
using System;
using System.IO;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using Common.Iperl;
using System.Globalization;
using System.Drawing;
namespace FeatureVectorCalculator
{
public partial class CalculatorWnd : Form
{
public const int MaxOptoDataCount = 40000;
public const bool Downsample = true;
public const bool Extend = true;
OptoTelegramRaw[] optoData;
Int64 volumeRawExtLast;
Int64 timestampExtLast;
@@ -34,115 +27,63 @@ namespace FeatureVectorCalculator
}
}
void ClearOutput()
{
resultsTextBox.Clear();
tabControl1.TabPages[0].Controls.Clear();
tabControl1.TabPages[1].Controls.Clear();
tabControl1.TabPages[2].Controls.Clear();
tabControl1.TabPages[3].Controls.Clear();
tabControl1.TabPages[4].Controls.Clear();
tabControl1.TabPages[5].Controls.Clear();
tabControl1.TabPages[6].Controls.Clear();
tabControl1.TabPages[7].Controls.Clear();
}
private void browseButton_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
rawFileComboBox.Text = ofd.FileName;
ProcessRawDataFile(ofd.FileName);
}
var dr = ofd.ShowDialog();
rawFileComboBox.Text = ofd.FileName;
}
void ProcessRawDataFile(string fileName)
private void processButton_Click(object sender, EventArgs e)
{
if (optoData == null) return;
int counter = 0;
int startIx = -1;
int endIx = -1;
ClearOutput();
resultsTextBox.Text = string.Format("File name: {0}{1}", fileName, Environment.NewLine);
try
using (StreamReader reader = new StreamReader(rawFileComboBox.Text))
{
using (StreamReader reader = new StreamReader(fileName))
string line;
while ((line = reader.ReadLine()) != null && counter < MaxOptoDataCount)
{
string line;
while ((line = reader.ReadLine()) != null && counter < MaxOptoDataCount)
int ix = line.IndexOf(" :\t");
if (ix >= 0)
{
int ix = line.IndexOf(" :\t");
string[] items = line.Split('\t');
if (items.Length > 18)
if (optoData[counter].UpdateFromString(line.Substring(ix + 3), counter, 0, ref volumeRawExtLast, ref timestampExtLast, true))
{
string telegram = string.Format("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\r\n",
items[2], items[3], items[4], items[5], items[6], items[7], items[8]);
if (optoData[counter].UpdateFromString(telegram, counter, 0, ref volumeRawExtLast, ref timestampExtLast))
if (line.EndsWith("#### start test ####"))
{
if (line.EndsWith("#### start test ####"))
{
startIx = counter;
optoData[counter].Flags = OptoTelegramFlags.OK_TestStart;
}
else if (line.EndsWith("#### end of test ####"))
{
endIx = counter;
optoData[counter].Flags = OptoTelegramFlags.OK_TestEnd;
}
else
{
optoData[counter].Flags = OptoTelegramFlags.OK;
}
startIx = counter;
optoData[counter].Flags = OptoTelegramFlags.OK_TestStart;
}
else if (line.EndsWith("#### end of test ####"))
{
endIx = counter;
optoData[counter].Flags = OptoTelegramFlags.OK_TestEnd;
}
optoData[counter].RefFlow = float.Parse(items[15].Replace(',', '.'), CultureInfo.InvariantCulture);
}
else
{
optoData[counter].Flags = OptoTelegramFlags.InvalidTelegram;
}
counter++;
}
else
{
optoData[counter].Flags = OptoTelegramFlags.InvalidTelegram;
}
reader.Close();
counter++;
}
reader.Close();
}
catch (Exception exc)
float[] featureVector = new float[9];
Common.Utils.CalculateFeatureVector(optoData, counter, startIx, endIx, ref featureVector);
resultsTextBox.Clear();
for (int i = 0; i < 9; i++)
{
MessageBox.Show(string.Format("Exception: {0}", exc.Message));
return;
resultsTextBox.Text += string.Format("X{0} = {1}\r\n", i + 1, featureVector[i]);
}
int start = Extend ? 0 : startIx;
int end = Extend ? (counter - 1) : endIx;
float[] offsetV, kOhmsR, kOhmsC, dutFlow, refFlow, flowRatio, magField, emfV;
PointF[] outliers, extendedOutliers;
float[] featureVector = Common.StatisticalMetrics.Calculate(optoData, counter, start, end, Downsample,
out offsetV, out kOhmsR, out kOhmsC, out dutFlow,
out refFlow, out flowRatio, out magField, out emfV,
out outliers, out extendedOutliers);
for (int i = 0; i < Math.Min(9, featureVector.Length); i++)
{
resultsTextBox.Text += string.Format("X{0} = {1}{2}", i + 1, featureVector[i], Environment.NewLine);
}
float period = Downsample ? 0.5F : 0.125F;
if (offsetV != null) tabControl1.TabPages[0].Controls.Add(SignalChart.GetChart(offsetV, period, "OffsetV", "OffsetV [μV]"));
if (kOhmsR != null) tabControl1.TabPages[1].Controls.Add(SignalChart.GetChart(kOhmsR, period, "kOhmsR", "kΩ"));
if (kOhmsC != null) tabControl1.TabPages[2].Controls.Add(SignalChart.GetChart(kOhmsC, period, "kOhmsC", "kΩ"));
if (dutFlow != null) tabControl1.TabPages[3].Controls.Add(SignalChart.GetChart(dutFlow, period, "dutFlow", "L/h"));
if (refFlow != null) tabControl1.TabPages[4].Controls.Add(SignalChart.GetChart(refFlow, period, "refFlow", "L/h"));
if (flowRatio != null) tabControl1.TabPages[5].Controls.Add(SignalChart.GetChart(flowRatio, period, "flowRatio", "", true, extendedOutliers, outliers));
if (magField != null) tabControl1.TabPages[6].Controls.Add(SignalChart.GetChart(magField, period, "magField", "μV", false));
if (emfV != null) tabControl1.TabPages[7].Controls.Add(SignalChart.GetChart(emfV, period, "emfV", "μV"));
}
}
}
@@ -37,7 +37,6 @@
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Windows.Forms.DataVisualization" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@@ -56,7 +55,6 @@
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SignalChart.cs" />
<EmbeddedResource Include="CalculatorWnd.resx">
<DependentUpon>CalculatorWnd.cs</DependentUpon>
</EmbeddedResource>
-108
View File
@@ -1,108 +0,0 @@
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
namespace FeatureVectorCalculator
{
public class SignalChart
{
public static Chart GetChart(float[] data, float period, string caption, string captionY, bool fromZero = true,
PointF[] extendedOutliers = null, PointF[] outliers = null)
{
Series series1 = null, series2 = null, series3 = null;
series1 = new Series { Name = caption, ChartArea = "area1", ChartType = SeriesChartType.Line, Color = Color.DeepSkyBlue };
float minY = float.MaxValue;
float maxY = float.MinValue;
for (int x = 0; x < data.Length; x++)
{
float y = data[x];
if (minY > y) minY = y;
if (maxY < y) maxY = y;
series1.Points.AddXY(x * period, y);
}
if (extendedOutliers != null)
{
series2 = new Series { Name = "extended outliers", ChartArea = "area1", ChartType = SeriesChartType.Point, Color = Color.Yellow };
for (int i = 0; i < extendedOutliers.Length; i++)
{
series2.Points.AddXY(extendedOutliers[i].X * period, extendedOutliers[i].Y);
}
}
if (outliers != null)
{
series3 = new Series { Name = "outliers", ChartArea = "area1", ChartType = SeriesChartType.Point, Color = Color.DarkRed };
for (int i = 0; i < outliers.Length; i++)
{
series3.Points.AddXY(outliers[i].X * period, outliers[i].Y);
}
}
ChartArea chArea = new ChartArea { Name = "area1" };
chArea.AxisX.Title = "Time [s]";
chArea.AxisX.IsLogarithmic = false;
chArea.AxisX.IsLabelAutoFit = true;
chArea.AxisX.Minimum = 0;
chArea.AxisX.Maximum = (data.Length - 1) * period;
// for (int j = i; j < i + 3; j++)
// {
// CustomLabel cl = new CustomLabel();
// cl.Text = string.Format("{0} {1}", xs[j], flowUnit.ToDescription());
// cl.FromPosition = Math.Log10(xs[j] * spacer);
// cl.ToPosition = Math.Log10(xs[j] / spacer);
// chArea.AxisX.CustomLabels.Add(cl);
// }
chArea.AxisY.Title = captionY;
chArea.AxisY.IsLogarithmic = false;
chArea.AxisY.IsLabelAutoFit = true;
if (!fromZero)
{
/// fromZero = false
chArea.AxisY.IsStartedFromZero = false;
float diff = maxY - minY;
chArea.AxisY.Minimum = minY - 0.05 * diff;
chArea.AxisY.Maximum = maxY + 0.05 * diff;
}
else if (minY >= 0)
{
/// fromZero = true, All points are above zero
chArea.AxisY.IsStartedFromZero = true;
chArea.AxisY.Minimum = 0;
chArea.AxisY.Maximum = 1.05 * maxY;
}
else if (maxY <= 0)
{
/// fromZero = true, All points are below zero
chArea.AxisY.IsStartedFromZero = true;
chArea.AxisY.Minimum = 1.05 * minY;
chArea.AxisY.Maximum = 0;
}
else
{
/// Points are both below and above zero
chArea.AxisY.IsStartedFromZero = false;
float diff = maxY - minY;
chArea.AxisY.Minimum = minY - 0.05 * diff;
chArea.AxisY.Maximum = maxY + 0.05 * diff;
}
if (chArea.AxisY.Maximum == chArea.AxisY.Minimum)
{
chArea.AxisY.Maximum = chArea.AxisY.Maximum + 1;
}
Chart chart = new Chart { Text = caption, Dock = DockStyle.Fill };
chart.ChartAreas.Add(chArea);
chart.Series.Add(series1);
if (series2 != null) chart.Series.Add(series2);
if (series3 != null) chart.Series.Add(series3);
return chart;
}
}
}
+2 -2
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2019-2022 Sensus Slovensko a.s.
/// Copyright (c) 2019 Sensus Slovensko a.s.
///
using System;
using System.Drawing;
@@ -11,7 +11,7 @@ namespace GenericTest
Undefined = 0, /// Undefined (only used in OnActivity(..) when start/stop info message is issued)
SNisMissing, /// S/N is missing in the parsed record
SNisInvalid, /// S/N in the parsed record is invalid
NoRefRecordOrNoMatchingWorkflow, /// No record with this S/N in tracing DB or no matching workflow for this record
NoRecordAtAll, /// No record with this S/N in tracing DB
VerificationIsDisabled, /// ...
NoVerificationForThisProcess,
VerificationPassed, /// Verification of a previous record passed
+2 -7
View File
@@ -20,22 +20,17 @@
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG;LASER_NANJING</DefineConstants>
<DefineConstants>TRACE;DEBUG;RF_TEST_400_900</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE;LASER_NANJING</DefineConstants>
<DefineConstants>TRACE;RF_TEST_400_900</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<StartupObject>GenericTest.Program</StartupObject>
</PropertyGroup>
<ItemGroup>
<Reference Include="FluentNHibernate">
+17 -17
View File
@@ -35,12 +35,12 @@
this.vertSplitContainer = new System.Windows.Forms.SplitContainer();
this.resultsGroupBox = new System.Windows.Forms.GroupBox();
this.activityListView = new System.Windows.Forms.ListView();
this.logoutButton = new System.Windows.Forms.Button();
this.startButton = new System.Windows.Forms.Button();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.filteredSensorValueLabel = new System.Windows.Forms.Label();
this.sensorNameLabel = new System.Windows.Forms.Label();
this.immediateSensorValueLabel = new System.Windows.Forms.Label();
this.logoutButton = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.horizSplitContainer)).BeginInit();
this.horizSplitContainer.Panel1.SuspendLayout();
this.horizSplitContainer.Panel2.SuspendLayout();
@@ -63,7 +63,7 @@
this.settingsButton.Name = "settingsButton";
this.settingsButton.Size = new System.Drawing.Size(90, 30);
this.settingsButton.TabIndex = 0;
this.settingsButton.Text = "Settings";
this.settingsButton.Text = "Nastavenia";
this.settingsButton.UseVisualStyleBackColor = true;
this.settingsButton.Click += new System.EventHandler(this.settingsButton_Click);
//
@@ -130,7 +130,7 @@
this.vertSplitContainer.Panel2.Controls.Add(this.startButton);
this.vertSplitContainer.Panel2.Controls.Add(this.stopButton);
this.vertSplitContainer.Size = new System.Drawing.Size(1033, 151);
this.vertSplitContainer.SplitterDistance = 942;
this.vertSplitContainer.SplitterDistance = 939;
this.vertSplitContainer.SplitterWidth = 1;
this.vertSplitContainer.TabIndex = 2;
//
@@ -140,7 +140,7 @@
this.resultsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.resultsGroupBox.Location = new System.Drawing.Point(0, 0);
this.resultsGroupBox.Name = "resultsGroupBox";
this.resultsGroupBox.Size = new System.Drawing.Size(942, 151);
this.resultsGroupBox.Size = new System.Drawing.Size(939, 151);
this.resultsGroupBox.TabIndex = 1;
this.resultsGroupBox.TabStop = false;
this.resultsGroupBox.Text = "Aktivita";
@@ -152,22 +152,11 @@
this.activityListView.Location = new System.Drawing.Point(3, 16);
this.activityListView.Name = "activityListView";
this.activityListView.Scrollable = false;
this.activityListView.Size = new System.Drawing.Size(936, 132);
this.activityListView.Size = new System.Drawing.Size(933, 132);
this.activityListView.TabIndex = 0;
this.activityListView.UseCompatibleStateImageBehavior = false;
this.activityListView.View = System.Windows.Forms.View.Details;
//
// logoutButton
//
this.logoutButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
this.logoutButton.Location = new System.Drawing.Point(1, 116);
this.logoutButton.Name = "logoutButton";
this.logoutButton.Size = new System.Drawing.Size(90, 30);
this.logoutButton.TabIndex = 13;
this.logoutButton.Text = "Logout";
this.logoutButton.UseVisualStyleBackColor = true;
this.logoutButton.Click += new System.EventHandler(this.logoutButton_Click);
//
// startButton
//
this.startButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
@@ -175,7 +164,7 @@
this.startButton.Name = "startButton";
this.startButton.Size = new System.Drawing.Size(90, 30);
this.startButton.TabIndex = 1;
this.startButton.Text = "Start";
this.startButton.Text = "Štart";
this.startButton.UseVisualStyleBackColor = true;
this.startButton.Click += new System.EventHandler(this.startButton_Click);
//
@@ -232,6 +221,17 @@
this.immediateSensorValueLabel.TabIndex = 1;
this.immediateSensorValueLabel.Text = "60.7 °C";
//
// logoutButton
//
this.logoutButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
this.logoutButton.Location = new System.Drawing.Point(1, 116);
this.logoutButton.Name = "logoutButton";
this.logoutButton.Size = new System.Drawing.Size(90, 30);
this.logoutButton.TabIndex = 13;
this.logoutButton.Text = "Logout";
this.logoutButton.UseVisualStyleBackColor = true;
this.logoutButton.Click += new System.EventHandler(this.logoutButton_Click);
//
// GenericTestDlg
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+120 -93
View File
@@ -1,12 +1,11 @@
///
/// Copyright (c) 2019-2022 Sensus Slovensko a.s.
/// Copyright (c) 2019 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.IO.Ports;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
using log4net;
@@ -34,46 +33,46 @@ namespace GenericTest
#if RF_TEST
public RecordProcessing.RecordType RcrdType = RecordType.RF_Test;
public const string WorkflowStep = "rf_power";
public const string WorkflowStep = "RF_Power";
public const string DfltWorkplaceName = "RF Test";
#elif RF_TEST_400_900
public RecordProcessing.RecordType RcrdType = RecordType.RF_Test_400_900;
public const string WorkflowStep = "rf_power";
public const string WorkflowStep = "RF_Power";
public const string DfltWorkplaceName = "RF Test";
#elif COMM_TEST
public RecordProcessing.RecordType RcrdType = RecordType.CommTest;
public const string WorkflowStep = "comm_test";
public const string WorkflowStep = "Comm_Test";
public const string DfltWorkplaceName = "Comm Test";
#elif FLOWTUBE_TEST_HE
public RecordProcessing.RecordType RcrdType = RecordType.FlowtubeTestHe;
public const string WorkflowStep = "helium_test";
public const string WorkflowStep = "Helium_Test";
public const string DfltWorkplaceName = "Helium Test";
#elif FLOWTUBE_TEST_AIR
public RecordProcessing.RecordType RcrdType = RecordType.FlowtubeTestAir;
public const string WorkflowStep = "helium_test";
public const string WorkflowStep = "Helium_Test";
public const string DfltWorkplaceName = "Helium Test";
#elif LASER_NANJING
public RecordProcessing.RecordType RcrdType = RecordType.LaserNanjing;
public const string WorkflowStep = "laser";
public const string DfltWorkplaceName = "Laser 1";
#else
public RecordProcessing.RecordType RcrdType = RecordType.None;
public const string WorkflowStep = "generic_test";
public const string WorkflowStep = "Generic_Test";
public const string DfltWorkplaceName = "Generic Test";
#endif
const int ActivityMsgsCount = 7;
ActivityEventArgs[] activityEvents; /// Activity messages displayed in the main window
ActivityEventArgs[] activityEvents; /// Activity messages displayed in the main window
NHibernate.ISession dbSession; /// MySQL database session
static OracleConnection oracleConn; /// Oracle database connection (server is in Stara Tura)
NHibernate.ISession dbSession; /// MySQL database session
static OracleConnection oracleConn; /// Oracle database connection (server is in Stara Tura)
#if RF_TEST_400_900
static OracleConnection oracleConn2; /// Oracle database connection for Flexnet ID (server is in Ludwigshafen)
static OracleConnection oracleConn2; /// Oracle database connection for Flexnet ID (server is in Ludwigshafen)
#endif
IList<WorkflowSummary> workflowSummaries; /// Workflows from the database with last step verification information
DateTime lastUpdateOfWorkflows;
IList<Process> processes; /// Processes from the database
Dictionary<int, Process> processDictionary; /// Maps a process Id to a process
Dictionary<int, IList<Workstep>> workstepsDictionary; /// Maps a process Id to worksteps with name "RF_Power" (Count = 0 or 1)
static Dictionary<int, ScanVerificationInfo> verificationInfos;
/// Maps process Id to verification info
DateTime lastUpdateOfProcesses;
RecordProcessing.RecordProcessing recordProcessing;
@@ -95,29 +94,13 @@ namespace GenericTest
/// </summary>
public GenericTestDlg()
{
/// Open a modeless form that is closed after initialization and loading the main window
new Thread(() => Application.Run(new Common.Forms.ModelessForm("Načítavanie procesov z databázy"))).Start();
InitializeComponent();
try
{
string culture = Program.LocalSettings.Language.Replace('_', '-');
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(culture);
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(culture);
}
catch (Exception exc)
{
string msg = exc.Message;
MessageBox.Show("Selected language is not supported.\nUsing English.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en");
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
}
Localize();
UpdateTitle();
/// Open a modeless form that is closed after initialization and loading the main window
new Thread(() => Application.Run(new Common.Forms.ModelessForm("Loading workflows from a database"))).Start();
activityEvents = new ActivityEventArgs[ActivityMsgsCount];
activityListView.Columns.Add(Strings.Time, 60);
#if FLOWTUBE_TEST_AIR || FLOWTUBE_TEST_HE
@@ -140,15 +123,6 @@ namespace GenericTest
ReadProcesses_RegisterWorkplace_Etc();
}
void Localize()
{
messageLabel.Text = string.IsNullOrEmpty(Program.LocalSettings.Workplace) ? "Laser" : Program.LocalSettings.Workplace;
startButton.Text = Strings.Start;
stopButton.Text = Strings.Stop;
settingsButton.Text = Strings.Settings;
logoutButton.Text = Strings.Logout;
}
private void GenericTestDlg_Load(object sender, EventArgs e)
{
Settings2UI();
@@ -595,8 +569,8 @@ namespace GenericTest
try
{
dbSession = TracingDB.CreateSession(Program.LocalSettings.ConnectionString);
workflowSummaries = TracingDB.ReadWorkflowSummariesFromDB(dbSession, WorkflowStep);
lastUpdateOfWorkflows = DateTime.Now;
processes = TracingDB.ReadWorkflowsFromDB(dbSession, WorkflowStep, out processDictionary, out workstepsDictionary, out verificationInfos);
lastUpdateOfProcesses = DateTime.Now;
}
catch (Exception exc)
{
@@ -759,13 +733,6 @@ namespace GenericTest
Program.LocalSettings.ArchiveFolder, true);
break;
case RecordType.LaserNanjing:
recordProcessing = new RecordProcessing.RecordProcessing(RecordType.LaserNanjing,
RecordPostproc.Move,
Program.LocalSettings.TestResultsFolder, false, "*.csv",
Program.LocalSettings.ArchiveFolder, true);
break;
case RecordType.None:
default:
recordProcessing = null;
@@ -831,9 +798,7 @@ namespace GenericTest
}
#endif
if (Program.LocalSettings.DoCheckSNsValidity &&
(Program.LocalSettings.ValidSNPrefixes != null)
&& !Program.LocalSettings.ValidSNPrefixes.Contains(testerRecord.SN.Substring(0, 3)))
if (Program.LocalSettings.DoCheckSNsValidity && (Program.LocalSettings.ValidSNPrefixes != null) && !Program.LocalSettings.ValidSNPrefixes.Contains(testerRecord.SN.Substring(0, 3)))
{
/// PCB number did not pass a validity check (is not on a list of valid PCB numbers)
verifState = VerifState.SNisInvalid;
@@ -845,6 +810,9 @@ namespace GenericTest
/// A valid serial number is available => proceed
///
ITransaction transaction = null;
string proc = null;
string order = null;
bool readingFromTracingDBFailed = false; /// Reading form tracing DB failed (equipment error)
bool savingToTracingDBFailed = false; /// Writing to tracoing DB failed (equipment error)
bool verificationFailed = false; /// Reading/writing from/to tracing DB OK, but verification failed (product error)
@@ -856,55 +824,110 @@ namespace GenericTest
transaction = dbSession.BeginTransaction();
/// Get a process of the last reference record with this PCB number
var refRecord = TracingDB.FindReferenceRecord(dbSession, testerRecord.SN, 1);
WorkflowSummary wSum = (refRecord == null) ? null :
workflowSummaries.FirstOrDefault(x => x.Workflow.Name == refRecord.Workflow);
proc = TracingDB.GetWorkflow(dbSession, testerRecord.SN, 1, out order);
if (refRecord == null || wSum == null)
/// Check if a record from the previous workplace exists
if (proc == null)
{
verifState = VerifState.NoRefRecordOrNoMatchingWorkflow;
verificationFailed = true;
savingToTracingDBFailed = false;
/// Any previous reference record with this s/n is missing => process cannot be determined
verifState = VerifState.NoRecordAtAll;
}
else if (!Program.LocalSettings.DoCheckPreviousTracingRecords)
{
/// The process was determined but checking previous records is disbled => everything is OK so far
verifState = VerifState.VerificationIsDisabled;
}
else
{
if (!Program.LocalSettings.DoCheckPreviousTracingRecords)
/// Process is known AND the system is checking previous records => verify previous step
/// Get an appropriate verification info
ScanVerificationInfo verInfo;
bool verInfoObtained = verificationInfos.TryGetValue(proc.Id, out verInfo);
if (!verInfoObtained && (DateTime.Now - lastUpdateOfProcesses) > new TimeSpan(0, 5, 0))
{
/// The process was determined but checking previous records is disbled => everything is OK so far
verifState = VerifState.VerificationIsDisabled;
verificationFailed = false;
/// No verification info was obtained and more then 5 minutes elapsed => read processes again
processes = TracingDB.ReadWorkflowsFromDB(dbSession, WorkflowStep, out processDictionary, out workstepsDictionary, out verificationInfos);
lastUpdateOfProcesses = DateTime.Now;
verInfoObtained = verificationInfos.TryGetValue(proc.Id, out verInfo);
}
if (!verInfoObtained)
{
/// No verification info for the process obtained from the reference record found
verifState = VerifState.NoVerificationForThisProcess;
}
else
{
/// Process is known AND the system is checking previous records => verify previous step
if (verInfo.VerifyReferencePart)
{
/// Fetch all GOOD reference records with given code
IList<ReferenceRecord> refRecords = dbSession.QueryOver<ReferenceRecord>()
.Where(rr => ((rr.Code1 == testerRecord.SN) && (rr.Result == 0)))
.And(rr => (rr.Workstep == verInfo.Workstep))
.JoinQueryOver<Workstep>(rr => rr.Workstep)
.Where(ws => (ws.ReferencePart.Id == verInfo.Part.Id))
.List();
StepRecord prevStep = refRecord.StepRecords.FirstOrDefault(x => (x.Workstep == wSum.PreviousWorkstepName && x.Result == 0));
verificationFailed = (prevStep == null);
verifState = (prevStep != null) ? VerifState.VerificationPassed : VerifState.VerificationFailed;
verifState = (refRecords.Count > 0) ? VerifState.VerificationPassed : VerifState.VerificationFailed;
}
else
{
IList<Record> records = dbSession.QueryOver<Record>()
.Where(rec => (rec.Code == testerRecord.SN))
.And(rec => (rec.Part == verInfo.Part))
.List();
verifState = (records.Count > 0) ? VerifState.VerificationPassed : VerifState.VerificationFailed;
}
}
/// result: 0=OK, 1=test failed, 2=OK but previous step is missing, 3=failed and previous step is missing
int result = ((testerRecord.Status == Status.Passed) ? 0 : 1) + ((verifState == VerifState.VerificationFailed) ? 2 : 0);
string workplace = Program.LocalSettings.Workplace;
string user = "user";
///
StepRecord stepRecord = new StepRecord(refRecord, wSum.WorkstepName, workplace, user, result);
refRecord.Timestamp = stepRecord.Timestamp;
refRecord.StepRecords.Add(stepRecord);
dbSession.SaveOrUpdate(stepRecord);
dbSession.SaveOrUpdate(refRecord);
transaction.Commit();
savingToTracingDBFailed = false;
}
verificationFailed = verifState == VerifState.NoRecordAtAll ||
verifState == VerifState.NoVerificationForThisProcess ||
verifState == VerifState.VerificationFailed;
///
savingToTracingDBFailed = true;
if ((proc != null) && (verifState != VerifState.NoRecordAtAll))
{
IList<Workstep> worksteps;
if (workstepsDictionary.TryGetValue(proc.Id, out worksteps) && (worksteps.Count == 1))
{
/// Save a new reference record to the production tracing DB
dbSession.SaveOrUpdate(new ReferenceRecord(order, proc, worksteps[0], testerRecord.SN,
GlobalData.GetCurrentUserName(),
Program.LocalSettings.Workplace,
verificationFailed ? 2 : ((testerRecord.Status == Status.Passed) ? 0 : 1)));
}
else
{
/// Save a reference record with WORKSTEP=null to the production tracing DB
dbSession.SaveOrUpdate(new ReferenceRecord(order, proc, null, testerRecord.SN,
GlobalData.GetCurrentUserName(),
Program.LocalSettings.Workplace,
verificationFailed ? 2 : ((testerRecord.Status == Status.Passed) ? 0 : 1)));
}
}
else
{
/// Save a reference record with PORDER=null, PROCESS=null and WORKSTEP=null to the production tracing DB
savingToTracingDBFailed = true;
dbSession.SaveOrUpdate(new ReferenceRecord(null, null, null, testerRecord.SN,
GlobalData.GetCurrentUserName(),
Program.LocalSettings.Workplace,
(testerRecord.Status == Status.Passed) ? 0 : 1));
}
transaction.Commit();
savingToTracingDBFailed = false;
}
catch (Exception)
{
readingFromTracingDBFailed = !savingToTracingDBFailed;
if ((transaction != null) && !transaction.WasCommitted) transaction.Rollback();
savingToTracingDBFailed = true;
}
///
/// Write the test result to Oracle DB
///
@@ -932,8 +955,8 @@ namespace GenericTest
///
bool printingFailed = false;
if (Program.LocalSettings.DoPrintLabels && testerRecord.CanPrintRecord()
&& (!Program.LocalSettings.DoPrintGoodLabelsOnly ||
!(savingToTracingDBFailed || verificationFailed || savingToOracleDBFailed || testerRecord.Status != Status.Passed)))
&& (!Program.LocalSettings.DoPrintGoodLabelsOnly || !(readingFromTracingDBFailed || savingToTracingDBFailed || verificationFailed
|| savingToOracleDBFailed || (testerRecord.Status != Status.Passed))))
{
/// Conditions for printing results are satisfied
@@ -982,7 +1005,11 @@ namespace GenericTest
/// Display the test result and related activity on the screen.
/// Process the most severe errors first.
///
if (verificationFailed)
if (readingFromTracingDBFailed)
{
OnActivity(null, new ActivityEventArgs(testerRecord.SN, Strings.Reading_from_Tracing_DB_failed, ActivityCode.Failed, Color.Orange, 5000, Color.Wheat));
}
else if (verificationFailed)
{
/// Verification is enabled, but a record from the previous workplace is missing
OnActivity(null, new ActivityEventArgs(testerRecord.SN, Strings.Previous_workflow_step_is_missing_or_failed, ActivityCode.Failed, Color.Blue, 5000, Color.LightBlue));
+6 -8
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2019-2022 Sensus Slovensko a.s.
/// Copyright (c) 2019-2021 Sensus Slovensko a.s.
///
using System;
using System.IO;
@@ -13,7 +13,7 @@ namespace GenericTest
/// <summary>
/// Class to be serialized to an XML file...
/// </summary>
[XmlRootAttribute("GenericTest")]
[XmlRootAttribute("GenericTesterTracer")]
public class LocalSettings
{
static XmlSerializer serializer = XmlSerializer.FromTypes(new[] { typeof(LocalSettings) })[0];
@@ -25,7 +25,6 @@ namespace GenericTest
public string Workplace;
public bool IsUserLoginRequired;
public string Language;
public string ConnectionString;
public string UsersDBConnString;
@@ -65,19 +64,18 @@ namespace GenericTest
{
/// Default settings
Workplace = GenericTestDlg.DfltWorkplaceName;
Language = "en";
ConnectionString = "SERVER=10.116.192.200; DATABASE=nanjingshared; UID=nanjingshared; PASSWORD=C1ern4V0d4; CHARSET=utf8;";
UsersDBConnString = "SERVER=10.116.192.200; DATABASE=nanjingshared; UID=nanjingshared; PASSWORD=C1ern4V0d4; CHARSET=utf8;";
ConnectionString = "SERVER=10.42.128.24; DATABASE=sledovanie2019; UID=vyroba2019; PASSWORD=qwerty; CHARSET=utf8";
UsersDBConnString = "SERVER=10.42.128.24; DATABASE=st_wr_shared_config; UID=u9305784; PASSWORD=p89344390; CHARSET=utf8;";
TestResultsFolder = "C:\\FTS\\HookSpool\\Filemover";
ArchiveFolder = "C:\\FTS\\HookSpool\\Filemover";
DoCheckSNsValidity = false;
ValidSNPrefixes = "297,298,299,300,301,302";
DoCheckPreviousTracingRecords = true;
DoSaveTestResultToOracle = false;
DoSaveTestResultToOracle = true;
OracleMode = Mode.Production;
DoPrintLabels = true;
DoPrintGoodLabelsOnly = false;
DoPrintGoodLabelsOnly = true;
MaximizeWindowOnError = false;
MainWndMaximized = false;
+2 -2
View File
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.0.1")]
[assembly: AssemblyFileVersion("3.0.1")]
[assembly: AssemblyVersion("2.1.134.0")]
[assembly: AssemblyFileVersion("2.1.134.0")]
-36
View File
@@ -105,15 +105,6 @@ namespace GenericTest.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Logout.
/// </summary>
internal static string Logout {
get {
return ResourceManager.GetString("Logout", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Message.
/// </summary>
@@ -267,15 +258,6 @@ namespace GenericTest.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Settings.
/// </summary>
internal static string Settings {
get {
return ResourceManager.GetString("Settings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Something failed.
/// </summary>
@@ -285,24 +267,6 @@ namespace GenericTest.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Start.
/// </summary>
internal static string Start {
get {
return ResourceManager.GetString("Start", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Stop.
/// </summary>
internal static string Stop {
get {
return ResourceManager.GetString("Stop", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Test failed {0}.
/// </summary>
-12
View File
@@ -132,9 +132,6 @@
<data name="Error" xml:space="preserve">
<value>Error</value>
</data>
<data name="Logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="Message" xml:space="preserve">
<value>Message</value>
</data>
@@ -186,18 +183,9 @@
<data name="Serial_number_is_missing" xml:space="preserve">
<value>Serial number is missing</value>
</data>
<data name="Settings" xml:space="preserve">
<value>Settings</value>
</data>
<data name="Something_failed" xml:space="preserve">
<value>Something failed</value>
</data>
<data name="Start" xml:space="preserve">
<value>Start</value>
</data>
<data name="Stop" xml:space="preserve">
<value>Stop</value>
</data>
<data name="Test_failed_0" xml:space="preserve">
<value>Test failed {0}</value>
</data>
-12
View File
@@ -132,9 +132,6 @@
<data name="Error" xml:space="preserve">
<value>Chyba</value>
</data>
<data name="Logout" xml:space="preserve">
<value>Odhlásiť</value>
</data>
<data name="Message" xml:space="preserve">
<value>Správa</value>
</data>
@@ -183,18 +180,9 @@
<data name="Serial_number_is_missing" xml:space="preserve">
<value>Sériové číslo chýba</value>
</data>
<data name="Settings" xml:space="preserve">
<value>Nastavenia</value>
</data>
<data name="Something_failed" xml:space="preserve">
<value>Niečo sa nepodarilo</value>
</data>
<data name="Start" xml:space="preserve">
<value>Štart</value>
</data>
<data name="Stop" xml:space="preserve">
<value>Stop</value>
</data>
<data name="Test_failed_0" xml:space="preserve">
<value>Test neprešiel {0}</value>
</data>
+43 -65
View File
@@ -1,23 +1,19 @@
///
/// Copyright (c) 2021-2022 Sensus Slovensko a.s.
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using log4net;
using NHibernate;
using SharedDatabase;
using SharedDatabase.Entities;
using OrderManagement.Resources;
using NHibernate;
namespace OrderManagement
{
public partial class EditOrderDlg : Form
{
private static readonly ILog log = LogManager.GetLogger(typeof(EditOrderDlg));
ISessionFactory sessionFactory;
ISession session;
OrderInfo oriOrder;
IList<OrderInfo> listOfOrders;
bool isEnablePredefinedOrders;
@@ -25,11 +21,11 @@ namespace OrderManagement
EditParametersCtrl editParametersCtrl;
public EditOrderDlg(ISessionFactory sessionFactory, OrderInfo order, IList<OrderInfo> listOfOrders, bool isEnablePredefinedOrders = false, bool editMode = false)
public EditOrderDlg(ISession session, OrderInfo order, IList<OrderInfo> listOfOrders, bool isEnablePredefinedOrders = false, bool editMode = false)
{
InitializeComponent();
this.sessionFactory = sessionFactory;
this.session = session;
this.oriOrder = order;
this.listOfOrders = listOfOrders;
this.isEnablePredefinedOrders = isEnablePredefinedOrders;
@@ -54,10 +50,9 @@ namespace OrderManagement
{
OrderInfo modifiedOrder = editParametersCtrl.ParamsProvider as OrderInfo;
long modifiedOrderNr;
if (!long.TryParse(modifiedOrder.POName, out modifiedOrderNr) ||
modifiedOrderNr <= 0 ||
(!isEnablePredefinedOrders && modifiedOrderNr <= OrderManagementDlg.MaxPredefinedOrderNr))
int modifiedOrderNr;
if (!isEnablePredefinedOrders &&
(!int.TryParse(modifiedOrder.POName, out modifiedOrderNr) || modifiedOrderNr <= OrderManagementDlg.MaxPredefinedOrderNr))
{
MessageBox.Show(string.Format(Strings.Order_number_must_be_larger_then_0, OrderManagementDlg.MaxPredefinedOrderNr));
return;
@@ -76,55 +71,10 @@ namespace OrderManagement
return;
}
Cursor.Current = Cursors.WaitCursor;
modifiedOrder.CopyContentTo(oriOrder);
ITransaction transaction = null;
bool oriOrdermodified = false;
bool saved = false;
try
if (Save(oriOrder))
{
ISession session = sessionFactory.OpenSession();
transaction = session.BeginTransaction();
var list = (oriOrder.Id != 0)
? session.QueryOver<OrderInfo>().Where(x => x.Id == oriOrder.Id).List()
: new List<OrderInfo> { oriOrder };
if (list.Count != 1)
{
transaction.Rollback();
}
else if (list[0].Equals(oriOrder, true))
{
modifiedOrder.CopyContentTo(list[0], true);
session.SaveOrUpdate(list[0]);
transaction.Commit();
session.Flush();
list[0].CopyContentTo(oriOrder, false);
saved = true;
}
else
{
list[0].CopyContentTo(oriOrder, false);
transaction.Rollback();
oriOrdermodified = true;
}
}
catch (Exception exc)
{
if (transaction != null) transaction.Rollback();
log.ErrorFormat("Saving an order failed: {1}", exc.Message);
}
Cursor.Current = Cursors.Default;
if (saved)
{
DialogResult = DialogResult.OK;
}
else if (oriOrdermodified)
{
MessageBox.Show("Original order was modified by someone else,\r\ntry to adit this order once again");
DialogResult = DialogResult.OK;
}
else
@@ -136,6 +86,34 @@ namespace OrderManagement
Close();
}
/// <summary>
/// Saves the new or modified order to the database
/// </summary>
/// <returns>true when successful</returns>
bool Save(OrderInfo order)
{
ITransaction transaction = session.BeginTransaction();
try
{
Cursor.Current = Cursors.WaitCursor;
session.SaveOrUpdate(order);
transaction.Commit();
session.Flush();
Cursor.Current = Cursors.Default;
return true;
}
catch (Exception exc)
{
transaction.Rollback();
MessageBox.Show(string.Format("{0}{1}{2}", Strings.Saving_order_failed, Environment.NewLine, exc.Message),
Strings.Error, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
Cursor.Current = Cursors.Default;
return false;
}
}
private void cancelButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
@@ -151,7 +129,7 @@ namespace OrderManagement
/// <returns>false = OK, true = conflict (MessageBox appears before returning true)</returns>
bool IsConflict(OrderInfo order, IList<OrderInfo> listOfOrders, OrderInfo orderToIgnore)
{
if (order.POName.Length == 7 && order.POName[0] == '3')
if (order.POName[0] == '3')
{
if (MessageBox.Show(string.Format("{0}\r\n{1}", Strings.It_is_not_recommended_that_orders_start_with_3,
Strings.Abort_creating_an_order_QM),
@@ -226,11 +204,11 @@ namespace OrderManagement
if (MessageBox.Show(string.Format("{0}\r\n{1}: radio {2} .. {3}\r\n{4}: radio {5} .. {6}\r\n{7}",
Strings.There_is_a_conflict,
order.POName,
order.RAPrefix + order.RAFirst.ToString(Const.RAFormat) + snStdSuffix,
order.RAPrefix + (order.RAFirst + order.PiecesCount).ToString(Const.RAFormat) + snStdSuffix,
order.RAPrefix + order.RAFirst.ToString("D9") + snStdSuffix,
order.RAPrefix + (order.RAFirst + order.PiecesCount).ToString("D9") + snStdSuffix,
another.POName,
another.RAPrefix + another.RAFirst.ToString(Const.RAFormat) + StandardSuffix(another, true),
another.RAPrefix + (another.RAFirst + another.PiecesCount).ToString(Const.RAFormat) + StandardSuffix(another, true),
another.RAPrefix + another.RAFirst.ToString("D9") + StandardSuffix(another, true),
another.RAPrefix + (another.RAFirst + another.PiecesCount).ToString("D9") + StandardSuffix(another, true),
Strings.Abort_creating_an_order_QM),
Strings.Warning,
MessageBoxButtons.YesNo,
+35 -68
View File
@@ -17,9 +17,9 @@ namespace OrderManagement
{
private static readonly ILog log = LogManager.GetLogger(typeof(OrderManagementDlg));
public const long MaxPredefinedOrderNr = 1000;
public const int MaxPredefinedOrderNr = 1000;
ISessionFactory sessionFactory;
ISession session;
IList<OrderInfo> listOfOrders;
IList<Process> listOfWorkflows;
@@ -46,10 +46,10 @@ namespace OrderManagement
Text = string.Format("{0} v.{1}", Program.ProgramName, Program.Version); ;
}
public OrderManagementDlg(ISessionFactory sessionFactory, IList<OrderInfo> listOfOrders, IList<Process> listOfWorkflows)
public OrderManagementDlg(ISession session, IList<OrderInfo> listOfOrders, IList<Process> listOfWorkflows)
: this()
{
this.sessionFactory = sessionFactory;
this.session = session;
this.listOfOrders = listOfOrders;
this.listOfWorkflows = listOfWorkflows;
}
@@ -78,14 +78,7 @@ namespace OrderManagement
void Localize()
{
Text = string.Format("{0} ver.{1}", Strings.Order_Management, Program.Version);
settingsToolStripMenuItem.Text = Strings.Settings;
closeButton.Text = Strings.Close;
addButton.Text = Strings.Add;
editButton.Text = Strings.Edit;
copyButton.Text = Strings.Copy;
deleteButton.Text = Strings.Delete;
printButton.Text = Strings.Print;
}
enum Clmn
@@ -156,7 +149,7 @@ namespace OrderManagement
lvi.SubItems.Add(o.SNDigitsCount.ToString());
lvi.SubItems.Add(o.SNSuffix);
lvi.SubItems.Add(o.RAPrefix);
lvi.SubItems.Add(o.RAFirst.ToString(SharedDatabase.Const.RAFormat));
lvi.SubItems.Add(o.RAFirst.ToString("D9"));
lvi.SubItems.Add(o.RASuffix);
lvi.SubItems.Add(o.Remark);
lvi.Tag = o;
@@ -183,7 +176,7 @@ namespace OrderManagement
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(SharedDatabase.Const.RAFormat);
lvi.SubItems[i++].Text = o.RAFirst.ToString("D9");
lvi.SubItems[i++].Text = o.RASuffix;
lvi.SubItems[i++].Text = o.Remark;
}
@@ -239,7 +232,7 @@ namespace OrderManagement
///
var order = new OrderInfo(candidatePOName);
if (new EditOrderDlg(sessionFactory, order, listOfOrders, Program.LocalSettings.IsShowPredefinedOrders).ShowDialog()
if (new EditOrderDlg(session, order, listOfOrders, Program.LocalSettings.IsShowPredefinedOrders).ShowDialog()
== DialogResult.OK)
{
listOfOrders.Add(order);
@@ -258,14 +251,7 @@ namespace OrderManagement
}
else
{
try
{
new OrderStateDlg(order, sessionFactory).ShowDialog();
}
catch (Exception exc)
{
log.ErrorFormat("Failed to read order {0} when creating OrderStateDlg: {1)", order.POName, exc.Message);
}
new OrderStateDlg(session, order).ShowDialog();
}
}
@@ -276,7 +262,7 @@ namespace OrderManagement
OrderInfo order = listViewEx1.SelectedItems[0].Tag as OrderInfo;
if (order.POState == (sbyte)OrderState.New)
{
if (new EditOrderDlg(sessionFactory, order, listOfOrders, Program.LocalSettings.IsShowPredefinedOrders, true).ShowDialog()
if (new EditOrderDlg(session, order, listOfOrders, Program.LocalSettings.IsShowPredefinedOrders, true).ShowDialog()
== DialogResult.OK)
{
UpdateRow(listViewEx1.SelectedItems[0], order);
@@ -311,31 +297,31 @@ namespace OrderManagement
///
/// Create and edit the order
///
OrderInfo copiedOrder = oriOrder.Clone() as OrderInfo;
copiedOrder.POName = candidatePOName;
copiedOrder.POState = (sbyte)OrderState.New;
copiedOrder.SNFirst = oriOrder.SNFirst + oriOrder.PiecesCount; /// TODO
copiedOrder.RAFirst = oriOrder.RAFirst + oriOrder.PiecesCount; /// TODO
copiedOrder.BaseNr1 = 0;
copiedOrder.BaseNr2 = 0;
copiedOrder.BaseNr3 = 0;
copiedOrder.BaseNr4 = 0;
copiedOrder.BaseNr5 = 0;
copiedOrder.CurrentPcsCount = 0;
copiedOrder.CurrentSN = 0;
copiedOrder.CurrentRA = 0;
copiedOrder.CurrentNr1 = 0;
copiedOrder.CurrentNr2 = 0;
copiedOrder.CurrentNr3 = 0;
copiedOrder.CurrentNr4 = 0;
copiedOrder.CurrentNr5 = 0;
copiedOrder.Remark = string.Format("Copy of order {0}", oriOrder.POName);
OrderInfo newOrder = oriOrder.Clone() as OrderInfo;
newOrder.POName = candidatePOName;
newOrder.POState = (sbyte)OrderState.New;
newOrder.SNFirst = oriOrder.SNFirst + oriOrder.PiecesCount; /// TODO
newOrder.RAFirst = oriOrder.RAFirst + oriOrder.PiecesCount; /// TODO
newOrder.BaseNr1 = 0;
newOrder.BaseNr2 = 0;
newOrder.BaseNr3 = 0;
newOrder.BaseNr4 = 0;
newOrder.BaseNr5 = 0;
newOrder.CurrentPcsCount = 0;
newOrder.CurrentSN = 0;
newOrder.CurrentRA = 0;
newOrder.CurrentNr1 = 0;
newOrder.CurrentNr2 = 0;
newOrder.CurrentNr3 = 0;
newOrder.CurrentNr4 = 0;
newOrder.CurrentNr5 = 0;
newOrder.Remark = string.Format("Copy of order {0}", oriOrder.POName);
if (new EditOrderDlg(sessionFactory, copiedOrder, listOfOrders, Program.LocalSettings.IsShowPredefinedOrders).ShowDialog()
if (new EditOrderDlg(session, newOrder, listOfOrders, Program.LocalSettings.IsShowPredefinedOrders).ShowDialog()
== DialogResult.OK)
{
listOfOrders.Add(copiedOrder);
AddRow(listViewEx1, copiedOrder);
listOfOrders.Add(newOrder);
AddRow(listViewEx1, newOrder);
}
}
@@ -350,29 +336,10 @@ namespace OrderManagement
{
try
{
ISession session = sessionFactory.OpenSession();
var list = session.QueryOver<OrderInfo>().Where(x => x.Id == order.Id).List();
if (list.Count == 1)
{
if (list[0].POState == (sbyte)OrderState.New)
{
session.Delete(list[0]);
session.Flush();
listOfOrders.Remove(order);
listViewEx1.Items.Remove(listViewEx1.SelectedItems[0]);
}
else
{
MessageBox.Show(Strings.You_can_only_delete_New_porduction_orders);
}
}
else
{
listOfOrders.Remove(order);
listViewEx1.Items.Remove(listViewEx1.SelectedItems[0]);
MessageBox.Show(Strings.Order_was_already_deleted);
}
session.Close();
session.Delete(order);
session.Flush();
listOfOrders.Remove(order);
listViewEx1.Items.Remove(listViewEx1.SelectedItems[0]);
}
catch (Exception exc)
{
+2 -2
View File
@@ -91,11 +91,11 @@ namespace OrderManagement
(order.SNSuffix != null) ? order.SNSuffix : string.Empty),
Strings.First_radio_address + " :",
string.Format("{0}{1}{2}", (order.RAPrefix != null) ? order.RAPrefix : string.Empty,
order.RAFirst.ToString(SharedDatabase.Const.RAFormat),
order.RAFirst.ToString("D9"),
(order.RASuffix != null) ? order.RASuffix : string.Empty),
Strings.Last_radio_address + " :",
string.Format("{0}{1}{2}", (order.RAPrefix != null) ? order.RAPrefix : string.Empty,
(order.RAFirst + order.PiecesCount - 1).ToString(SharedDatabase.Const.RAFormat),
(order.RAFirst + order.PiecesCount - 1).ToString("D9"),
(order.RASuffix != null) ? order.RASuffix : string.Empty),
Strings.Workflow + " :",
(order.Workflow != null) ? order.Workflow : string.Empty,
+1 -15
View File
@@ -40,7 +40,6 @@
this.currentSnLabel = new System.Windows.Forms.Label();
this.currentRATextBox = new System.Windows.Forms.TextBox();
this.currentRALabel = new System.Windows.Forms.Label();
this.closeButton = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// orderLabel
@@ -145,23 +144,11 @@
this.currentRALabel.TabIndex = 10;
this.currentRALabel.Text = "Last assigned radio address";
//
// closeButton
//
this.closeButton.Location = new System.Drawing.Point(364, 23);
this.closeButton.Name = "closeButton";
this.closeButton.Size = new System.Drawing.Size(85, 43);
this.closeButton.TabIndex = 12;
this.closeButton.Text = "Close";
this.closeButton.UseVisualStyleBackColor = true;
this.closeButton.Click += new System.EventHandler(this.closeButton_Click);
//
// OrderStateDlg
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(479, 219);
this.ControlBox = false;
this.Controls.Add(this.closeButton);
this.Controls.Add(this.currentRATextBox);
this.Controls.Add(this.currentRALabel);
this.Controls.Add(this.currentSnTextBox);
@@ -179,7 +166,7 @@
this.Name = "OrderStateDlg";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Order State";
this.Text = "Order state";
this.ResumeLayout(false);
this.PerformLayout();
@@ -199,6 +186,5 @@
private System.Windows.Forms.Label currentSnLabel;
private System.Windows.Forms.TextBox currentRATextBox;
private System.Windows.Forms.Label currentRALabel;
private System.Windows.Forms.Button closeButton;
}
}
+16 -62
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2021-2022 Sensus Slovensko a.s.
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using System.Windows.Forms;
@@ -11,81 +11,35 @@ namespace OrderManagement
{
public partial class OrderStateDlg : Form
{
ISessionFactory sessionFactory;
int orderId;
Timer timer;
ISession session;
OrderInfo order;
private OrderStateDlg()
public OrderStateDlg()
{
InitializeComponent();
Localize();
}
public OrderStateDlg(OrderInfo order, ISessionFactory sessionFactory)
public OrderStateDlg(ISession session,OrderInfo order)
: this()
{
this.sessionFactory = sessionFactory;
this.orderId = order.Id;
this.session = session;
this.order = order;
Localize();
/// Update UI when this form is loaded
timer_Tick(null, null);
/// Timer for regular 5 second ticks
timer = new System.Windows.Forms.Timer();
timer.Interval = 5000; // ms
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
void timer_Tick(object sender, EventArgs args)
{
try
{
var session = sessionFactory.OpenSession();
var list = session.QueryOver<OrderInfo>().Where(x => x.Id == orderId).List();
session.Close();
if (list.Count == 1) UpdateUI(list[0]);
}
catch
{
stateTextBox.Text = "---";
targetPcsCountTextBox.Text = "---";
producedPcsCountTextBox.Text = "---";
currentSnTextBox.Text = "---";
currentRATextBox.Text = "---";
}
}
void UpdateUI(OrderInfo o)
{
orderTextBox.Text = o.POName;
stateTextBox.Text = ((OrderState)o.POState).ToString();
targetPcsCountTextBox.Text = o.PiecesCount.ToString();
producedPcsCountTextBox.Text = o.CurrentPcsCount.ToString();
currentSnTextBox.Text = (o.SNPrefix != null ? o.SNPrefix : string.Empty)
+ o.CurrentSN.ToString(string.Format("D{0}", o.SNDigitsCount))
+ (o.SNSuffix != null ? o.SNSuffix : string.Empty);
currentRATextBox.Text = (o.RAPrefix != null ? o.RAPrefix : string.Empty)
+ o.CurrentRA.ToString(SharedDatabase.Const.RAFormat)
+ (o.RASuffix != null ? o.RASuffix : string.Empty);
orderTextBox.Text = order.POName;
stateTextBox.Text = ((OrderState)order.POState).ToString();
targetPcsCountTextBox.Text = order.PiecesCount.ToString();
producedPcsCountTextBox.Text = order.CurrentPcsCount.ToString();
currentSnTextBox.Text = (order.SNPrefix != null ? order.SNPrefix : string.Empty) + order.CurrentSN.ToString(string.Format("D{0}", order.SNDigitsCount))
+ (order.SNSuffix != null ? order.SNSuffix : string.Empty);
currentRATextBox.Text = (order.RAPrefix != null ? order.RAPrefix : string.Empty) + order.CurrentRA.ToString("D9")
+ (order.RASuffix != null ? order.RASuffix : string.Empty);
}
void Localize()
{
Text = Strings.Order_State;
orderLabel.Text = Strings.Order;
stateLabel.Text = Strings.State;
targetPcsCountLabel.Text = Strings.Target_quantity;
producedPcsCountLabel.Text = Strings.Produced_quantity;
currentSnLabel.Text = Strings.Last_assigned_serial_number;
currentRALabel.Text = Strings.Last_assigned_radio_address;
closeButton.Text = Strings.Close;
}
private void closeButton_Click(object sender, EventArgs e)
{
Close();
}
}
}
+6 -22
View File
@@ -1,13 +1,11 @@
///
/// Copyright (c) 2021-2022 Sensus Slovensko a.s.
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Windows.Forms;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using log4net;
using NHibernate;
using Common;
@@ -171,27 +169,19 @@ namespace OrderManagement
}
}
ISessionFactory sessionFactory;
ISession session;
IList<OrderInfo> listOfOrders = null;
IList<Process> listOfWorkflows = null;
while (true)
{
try
{
sessionFactory = Fluently.Configure()
.Database(MySQLConfiguration.Standard.ConnectionString(LocalSettings.TracingDBConnString))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<SharedDatabase.Entities.Process>())
.ExposeConfiguration(BuildSchema).BuildSessionFactory();
ISession session = sessionFactory.OpenSession();
listOfOrders = session.QueryOver<OrderInfo>().List();
session = SharedDatabase.TracingDB.CreateSession(LocalSettings.TracingDBConnString);
listOfOrders = session.QueryOver<OrderInfo>()
.List();
listOfWorkflows = session.QueryOver<Process>()
.Where(x => x.ReleaseStatus != ReleaseStatus.Deactivated)
.List();
session.Close();
break;
}
catch (Exception exc)
@@ -217,7 +207,7 @@ namespace OrderManagement
try
{
OrderManagementDlg dlg = new OrderManagementDlg(sessionFactory, listOfOrders, listOfWorkflows);
OrderManagementDlg dlg = new OrderManagementDlg(session, listOfOrders, listOfWorkflows);
Application.Run(dlg);
}
catch (Exception e)
@@ -234,12 +224,6 @@ namespace OrderManagement
}
}
public static void BuildSchema(NHibernate.Cfg.Configuration config)
{
/// This NHibernate tool takes a configuration (with mapping info in)
/// and exports a database schema from it
new NHibernate.Tool.hbm2ddl.SchemaExport(config).SetOutputFile("db_schema");
}
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
{
+3 -3
View File
@@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("OrderManagement")]
[assembly: AssemblyCopyright("Copyright © 2021-2022")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.0.13.0")]
[assembly: AssemblyFileVersion("3.0.13.0")]
[assembly: AssemblyVersion("3.0.10.0")]
[assembly: AssemblyFileVersion("3.0.10.0")]
-117
View File
@@ -69,15 +69,6 @@ namespace OrderManagement.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Add.
/// </summary>
internal static string Add {
get {
return ResourceManager.GetString("Add", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Are you sure ?.
/// </summary>
@@ -96,15 +87,6 @@ namespace OrderManagement.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Close.
/// </summary>
internal static string Close {
get {
return ResourceManager.GetString("Close", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Close it please using &apos;Task manager&apos;.
/// </summary>
@@ -132,15 +114,6 @@ namespace OrderManagement.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Copy.
/// </summary>
internal static string Copy {
get {
return ResourceManager.GetString("Copy", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Database.
/// </summary>
@@ -159,15 +132,6 @@ namespace OrderManagement.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Delete.
/// </summary>
internal static string Delete {
get {
return ResourceManager.GetString("Delete", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to digits count.
/// </summary>
@@ -177,15 +141,6 @@ namespace OrderManagement.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Edit.
/// </summary>
internal static string Edit {
get {
return ResourceManager.GetString("Edit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Error.
/// </summary>
@@ -258,24 +213,6 @@ namespace OrderManagement.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Last assigned radio address.
/// </summary>
internal static string Last_assigned_radio_address {
get {
return ResourceManager.GetString("Last_assigned_radio_address", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Last assigned serial number.
/// </summary>
internal static string Last_assigned_serial_number {
get {
return ResourceManager.GetString("Last_assigned_serial_number", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Last radio address.
/// </summary>
@@ -330,15 +267,6 @@ namespace OrderManagement.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Order Management.
/// </summary>
internal static string Order_Management {
get {
return ResourceManager.GetString("Order_Management", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Order number must be larger then {0}.
/// </summary>
@@ -348,24 +276,6 @@ namespace OrderManagement.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Order State.
/// </summary>
internal static string Order_State {
get {
return ResourceManager.GetString("Order_State", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Order was already deleted.
/// </summary>
internal static string Order_was_already_deleted {
get {
return ResourceManager.GetString("Order_was_already_deleted", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Order with the same ID already exists.
/// </summary>
@@ -411,24 +321,6 @@ namespace OrderManagement.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Print.
/// </summary>
internal static string Print {
get {
return ResourceManager.GetString("Print", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Produced quantity.
/// </summary>
internal static string Produced_quantity {
get {
return ResourceManager.GetString("Produced_quantity", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Producton order properties.
/// </summary>
@@ -546,15 +438,6 @@ namespace OrderManagement.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Target quantity.
/// </summary>
internal static string Target_quantity {
get {
return ResourceManager.GetString("Target_quantity", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Test procedure.
/// </summary>
-39
View File
@@ -276,43 +276,4 @@
<data name="Year_of_calibration" xml:space="preserve">
<value>Year of calibration</value>
</data>
<data name="Order_was_already_deleted" xml:space="preserve">
<value>Order was already deleted</value>
</data>
<data name="Close" xml:space="preserve">
<value>Close</value>
</data>
<data name="Last_assigned_radio_address" xml:space="preserve">
<value>Last assigned radio address</value>
</data>
<data name="Last_assigned_serial_number" xml:space="preserve">
<value>Last assigned serial number</value>
</data>
<data name="Order_State" xml:space="preserve">
<value>Order State</value>
</data>
<data name="Produced_quantity" xml:space="preserve">
<value>Produced quantity</value>
</data>
<data name="Target_quantity" xml:space="preserve">
<value>Target quantity</value>
</data>
<data name="Add" xml:space="preserve">
<value>Add</value>
</data>
<data name="Copy" xml:space="preserve">
<value>Copy</value>
</data>
<data name="Delete" xml:space="preserve">
<value>Delete</value>
</data>
<data name="Edit" xml:space="preserve">
<value>Edit</value>
</data>
<data name="Order_Management" xml:space="preserve">
<value>Order Management</value>
</data>
<data name="Print" xml:space="preserve">
<value>Print</value>
</data>
</root>
+2 -2
View File
@@ -38,14 +38,14 @@ namespace OrderManagement
{
Localize();
if (ls == null) return;
languageComboBox.Items.Add("EN");
languageComboBox.Items.Add("ZH_CN");
languageComboBox.Items.Add("DE");
languageComboBox.Items.Add("SK");
languageComboBox.Text = ls.Language;
if (ls == null) return;
loginRequiredCheckBox.Checked = ls.IsUserLoginRequired;
showPredefinedOrdersCheckBox.Checked = ls.IsShowPredefinedOrders;
-89
View File
@@ -1,89 +0,0 @@
///
/// Copyright (c) 2016-2018 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml.Serialization;
using System.Windows.Forms;
using ProductionTracing.Resources;
namespace ProductionTracing
{
/// <summary>
/// Class to be serialized to an XML file...
/// Public members are filters / parts of a query.
/// </summary>
[XmlRootAttribute("Query")]
public class FiltersConfig
{
public bool[] FilterEnabled;
[XmlIgnore]
public int FiterEnabledCount { get { return (FilterEnabled != null) ? FilterEnabled.Length : 0; } }
public string[] ResultItems;
[XmlArrayAttribute("ResultsClmnWidths")]
public int[] ResultsClmnWidths;
[XmlIgnore]
public int ResultsClmnCount { get { return (ResultsClmnWidths != null) ? ResultsClmnWidths.Length : 0; } }
public FiltersConfig()
{
ResultItems = new string[]
{
"Code1~Housing s/n~{0}~~0",
"Code2~eRegister nr.~{0}~~0",
"Code3~S/N~{0}~~0",
"Code4~Radio address~{0}~~0",
"POrder~Order~{0}~~0",
"Workflow~Workflow~{0}~~0",
"Timestamp~Time stamp~{0:dd.MM.yyyy HH:mm:ss}~~0"
};
}
/// <summary>
/// Load public fields of this class from the XML file.
/// </summary>
public static FiltersConfig Load(string fileName)
{
try
{
using (TextReader reader = new StreamReader(fileName))
{
FiltersConfig ls = (new XmlSerializer(typeof(FiltersConfig))).Deserialize(reader) as FiltersConfig;
// Copy the settings just in case De-serialize() completes OK
return ls;
}
}
catch (Exception exc)
{
string msg = exc.Message;
return null;
}
}
/// <summary>
/// Save public fields of this class to the XML file.
/// </summary>
public bool Save(string fileName)
{
try
{
using (TextWriter writer = new StreamWriter(fileName))
{
(new XmlSerializer(typeof(FiltersConfig))).Serialize(writer, this);
}
return true;
}
catch (Exception exc)
{
MessageBox.Show(exc.Message, Strings.Error_saving_file, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return false;
}
}
}
}
-65
View File
@@ -1,65 +0,0 @@
namespace ProductionTracing.Forms
{
partial class MoreInfoDlg
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.listViewEx = new Common.Forms.ListViewEx();
this.SuspendLayout();
//
// listViewEx
//
this.listViewEx.AllowColumnReorder = true;
this.listViewEx.Dock = System.Windows.Forms.DockStyle.Fill;
this.listViewEx.DoubleClickActivation = false;
this.listViewEx.FullRowSelect = true;
this.listViewEx.Location = new System.Drawing.Point(0, 0);
this.listViewEx.Name = "listViewEx";
this.listViewEx.Size = new System.Drawing.Size(1434, 461);
this.listViewEx.TabIndex = 0;
this.listViewEx.UseCompatibleStateImageBehavior = false;
this.listViewEx.View = System.Windows.Forms.View.Details;
//
// MoreInfoDlg
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1434, 461);
this.Controls.Add(this.listViewEx);
this.Name = "MoreInfoDlg";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "More informations";
this.ResumeLayout(false);
}
#endregion
private Common.Forms.ListViewEx listViewEx;
}
}
-59
View File
@@ -1,59 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NHibernate;
using SharedDatabase.Entities;
using ProductionTracing.Resources;
namespace ProductionTracing.Forms
{
public partial class MoreInfoDlg : Form
{
public MoreInfoDlg(int refRecordId, ISession session)
{
InitializeComponent();
Text = Strings.More_informations;
listViewEx.Columns.Add("Date/time", 150);
listViewEx.Columns.Add("Workstep", 100);
listViewEx.Columns.Add("Workplace", 100);
listViewEx.Columns.Add("User", 70);
listViewEx.Columns.Add("Result", 70);
listViewEx.Columns.Add("Parts and serial numbers", 1000);
var refRecords = session.QueryOver<ReferenceRecord>()
.Where(x => (x.Id == refRecordId))
.OrderBy(x => x.Timestamp).Asc
.List();
foreach (var rr in refRecords)
{
foreach (var step in rr.StepRecords)
{
ListViewItem lvi = new ListViewItem(step.Timestamp.ToString());
lvi.SubItems.Add(step.Workstep != null ? step.Workstep : string.Empty);
lvi.SubItems.Add(step.Workplace != null ? step.Workplace : string.Empty);
lvi.SubItems.Add(step.User != null ? step.User : string.Empty);
lvi.SubItems.Add(step.Result == 0 ? "OK" : string.Format("Err{0}", step.Result));
StringBuilder sb = new StringBuilder();
if (!string.IsNullOrEmpty(rr.Name1)) sb.Append(string.Format(" {0}={1}", rr.Name1, rr.Code1 != null ? rr.Code1 : string.Empty));
if (!string.IsNullOrEmpty(rr.Name2)) sb.Append(string.Format(" {0}={1}", rr.Name2, rr.Code1 != null ? rr.Code2 : string.Empty));
if (!string.IsNullOrEmpty(rr.Code3)) sb.Append(string.Format(" S/N={0}", rr.Code3));
if (!string.IsNullOrEmpty(rr.Code4)) sb.Append(string.Format(" radio addres={0}", rr.Code4));
foreach (var rec in step.Records)
{
sb.Append(string.Format(" {0}={1}", rec.Name, rec.Code != null ? rec.Code : string.Empty));
}
lvi.SubItems.Add(sb.ToString());
listViewEx.Items.Add(lvi);
}
}
}
}
}
-120
View File
@@ -1,120 +0,0 @@
namespace ProductionTracing.Forms
{
partial class NoBenchOrDatabaseDlg
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NoBenchOrDatabaseDlg));
this.exitButton = new System.Windows.Forms.Button();
this.retryButton = new System.Windows.Forms.Button();
this.configureButton = new System.Windows.Forms.Button();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.errorMessageLabel = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// exitButton
//
this.exitButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.exitButton.Location = new System.Drawing.Point(42, 68);
this.exitButton.Name = "exitButton";
this.exitButton.Size = new System.Drawing.Size(246, 33);
this.exitButton.TabIndex = 0;
this.exitButton.Text = "Exit";
this.exitButton.UseVisualStyleBackColor = true;
this.exitButton.Click += new System.EventHandler(this.exitButton_Click);
//
// retryButton
//
this.retryButton.Location = new System.Drawing.Point(42, 146);
this.retryButton.Name = "retryButton";
this.retryButton.Size = new System.Drawing.Size(246, 33);
this.retryButton.TabIndex = 1;
this.retryButton.Text = "Retry database connection";
this.retryButton.UseVisualStyleBackColor = true;
this.retryButton.Click += new System.EventHandler(this.retryButton_Click);
//
// configureButton
//
this.configureButton.Location = new System.Drawing.Point(42, 107);
this.configureButton.Name = "configureButton";
this.configureButton.Size = new System.Drawing.Size(246, 33);
this.configureButton.TabIndex = 2;
this.configureButton.Text = "Configure test benches (password required)";
this.configureButton.UseVisualStyleBackColor = true;
this.configureButton.Click += new System.EventHandler(this.configureButton_Click);
//
// pictureBox1
//
this.pictureBox1.ErrorImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.ErrorImage")));
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.InitialImage = null;
this.pictureBox1.Location = new System.Drawing.Point(42, 21);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(32, 32);
this.pictureBox1.TabIndex = 3;
this.pictureBox1.TabStop = false;
//
// errorMessageLabel
//
this.errorMessageLabel.AutoSize = true;
this.errorMessageLabel.Location = new System.Drawing.Point(80, 31);
this.errorMessageLabel.Name = "errorMessageLabel";
this.errorMessageLabel.Size = new System.Drawing.Size(160, 13);
this.errorMessageLabel.TabIndex = 4;
this.errorMessageLabel.Text = "Cannot connect to the database";
//
// NoBenchOrDatabaseDlg
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.exitButton;
this.ClientSize = new System.Drawing.Size(328, 194);
this.Controls.Add(this.errorMessageLabel);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.configureButton);
this.Controls.Add(this.retryButton);
this.Controls.Add(this.exitButton);
this.Name = "NoBenchOrDatabaseDlg";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Error";
this.Load += new System.EventHandler(this.NoDatabaseMsgDlg_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button exitButton;
private System.Windows.Forms.Button retryButton;
private System.Windows.Forms.Button configureButton;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Label errorMessageLabel;
}
}
@@ -1,48 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ProductionTracing.Resources;
namespace ProductionTracing.Forms
{
public partial class NoBenchOrDatabaseDlg : Form
{
public string Message;
public bool ShowRetry;
public NoBenchOrDatabaseDlg()
{
InitializeComponent();
}
private void NoDatabaseMsgDlg_Load(object sender, EventArgs e)
{
Text = Strings.Error;
errorMessageLabel.Text = (Message != null) ? Message : Strings.Error;
exitButton.Text = Strings.ExitBtnText;
retryButton.Text = Strings.RetryDatabaseText;
configureButton.Text = Strings.ConfigureDatabaseText;
if (!ShowRetry) retryButton.Enabled = false;
}
private void exitButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Abort;
}
private void retryButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Retry;
}
private void configureButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.OK;
}
}
}
@@ -1,272 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBox1.ErrorImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAA0sAAALBCAIAAAAGeq0rAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAF7tJREFUeF7t3Vtw
l/Wdx3HvCEkQldrOdJiOhx6o2GqrUEAQFDlExcNuW7fVqb2o3c44g9Orbhc7uDe7nemO2M5gdXWtBBYS
BA0oa1By4BwIIWAgIYEi4aCEJFhd123VKfvk0O1h2t274H7m9Zonmf/h9/s+t+95kv/zv+Dc/6qnp2fn
jh3VVVVLHn304UWLHlq4sDiKB8XT4sXirWLB8FIAAD4a/mLhdXZ2rq6ufmTx4srKysbGxq6urrP9/R8M
Kh4UT4sXi7eKBcWyYvHwNgAAzrc/U3i9vb01NTVLlixpaGjoK550HjpZV3dkVVXH0scP/OOP9/5o8Ws/
+efOymXd9Y1nOjv7zpwplhWLiy3F2uERAACcP39aeIc6OpYuXbqxtvatvr5TW7Z2P7/29L8+c+yhh7rv
u+/4X321++67Xr/zzsN33tl+192td9/ddP/9bcuWHWva+ebJk8WWYmOxfXgQAADnyR8V3v79+3/62GNt
bW19+/a9Xr26r7LyxAMPvHH33SfvvPPkgjuPLVjw+oIFRxYsOFxx+6Fbb22vmHdg3rzmioqtt92279FH
T+9pKTYW24shw+MAADgffl94hzo6ij7r7u4+vmHDyZWrTv3g704Ntt3xO+4o2u7o7bcfue22wxUVHfPn
H5w3r23OnP1z5rTOnr3n5pubZ87cMnv2v8+Ze2Tt2mJ7McSVPACA82i48Hp7e5cuXdrW1jaQd888c/y7
f/vGXXccmzu3a8aMI7fcMtB28+d3zpt/cO7cttm37J89u/Xmm1tm39Q0bdr2a760ddKkrdOn18+YsWHm
rCNr1hRDilH+Jw8A4HwZLryampqNtbV9+/YdXrLkxPe+d/yOOw7PurHngQf+a/36kw888NoNUzvmzj0w
e/ZQ2zXPmrV75sxt113XfMcdx595pvXe+1656vObJk+unTJ13Y0ze5qbi1HFwKHJAACMsIHC6+zsXLJk
yVt9fe2PP35i0aJjty04fNNNb9x//7k33xxY0tNz5Jvf3H3ddUNtt2vGjKYbZ2y59tpd8+f/srHx6Nm+
Y/v27fzq116cMOGlL3953fXXv/zXXy1GFQPdQgUA4LwYKLzV1dX19fVv7N51+Id///rttxd5d+yee86d
OTO0YsCbpzvuvXfHF7+468Ybt0+btvmLVzdV3PrLLVu6Tpw4cPBgW1dXZ/PuV+fNW/uZz6yZePXzX77u
0Ip/a2hoKMYObwcAYARd0NPT88jixb09PV2rVh3+9rcPz5vTPn360Xv+5tw77wwvGfTr06cP3Htv3YQJ
dROv2l5RcXjr1q6TJw8ePLhv795Tp0+/++67L1RUrLz88pVXXVU98erae77Wd+ZMMdY3XgAAjLwLdu7Y
UVlZeaazq/XBBztuuaV99k1tN9/ccv31h7/znXNvvVWs+PDDD9977713P/zwV93H99x11+ZZs4q8O9Td
ffDAgdbW1oG8e+edylmzniwvrxw79tmxY/917Njqa649vX//8uXLi+FDpwEAYMRcUF1V1djY2P1KXevX
vn7gpptemzlz78yZe2bM2HrV1W3f+tZ7vb3vnzv39ttvn+3v7/nVr9547bX2urq2rq6i7Xbv2nX81Kn/
ePvtZ6dNe6K8fHlZ2S/Kyp4ZPFaMH9/29NObN28uhg+fBwCAkXLBkkcf7erqOvjU0y0VFftm3Lh3xvTd
06c3TZu2c+oNdRMm7Lnvvv5Tp/rfffeNU6eOHj3aeeRIW2dnS0tLU1NT91DezZz5ZHn5itLSZWVlzw4e
RedVjhvX+OCDxdhi+PB5AAAYKRc8vGjR2f7+5kcW77lp1lDbNU2bsm3KlC2TJzdOnfrylZdvufXWo83N
R44da29vb3vttb0tLbt27eo+fvydt99efvPNQ3k3dCwvKyuOIvWWXXhhzexbirHF8OHzAAAwUi54aOHC
Dz74oP4b39h9ww1F3m37yle2TJrUOHly/eTJtVdeuW706FWlpfUVFQfa2/e3tQ1dvdu6bVt/f/+L99//
RHl58e7K3x1F5A39XlFWtvILXyjGFsOHzwMAwEgZKLzf/OY3m7/73YHrdkXbXX99/aRJm6699qVx49aO
Hl1VWvripz61b/Xqlra2PXv2DOTd1q2bt2xp2Latef36lyZOLHquWFMc1X94FIX3pS+9//77Cg8AYOQN
/JW290zvzod/1DBlSn2Rd5Mn1V51Vc3o0WsG827d+PH71q/f09HR3NzctHPn1qLwduzY3NBQV1e3afv2
vbW1Gz7/+WJZsbjIwRd+d9SUl78wb15/X5+/0gIAjLyBT1p0HOrc/+STr06Zsmny5JevvrpoterBP7a+
MH5867p1ze3tzXv27Ny5s/vkybN9fS+vWbNpy5aG+vrGxsYdra0HN2+u/dznisJbP3i8VBwlJRsuvLBh
4cKBr8rwSQsAgBE3cLeU+vr6I6++8vLUabXXXDOUdytLS9dcemnr2rVF3u1ubt6xY0eRd2+dPbtsypTK
K66ofW5NY1NT086dLS0tnd3d3bubNn3600XYbSwpeaWk5NWSkucuHHuwclmRgO6WAgAw8gbuePzssmdP
drS/OG3a2ksuqRq8erd63LjW554byLvdu4u8OzaYd0M3Rini77kJExrWr9976NCh9vZjx471/+d7/fv3
N47/VP2oUQ2jRjWOGrX6sst7DrYtX17pjscAACNv+FvLTp04sX7u3KqPfazIu2fLyqovv3x3XV3Tvn3b
t2/vPnHirf7+Z2688YnBvBv6UEXNxIktjY3Hz5zp7e399W9/e7a/v27ChG2jRu0cXbJt7NjmH/9TX2/v
PzzyiG8tAwAYeRcUP6urqxsaGg4+9dTK8eOXlZf/oqzsX8rKVk2aVL9hw+tvvFHk3dPTp/988L53ReEV
ebd29Oia0aM3fPazR/fu/eDcubfPnn1l/vxNJSUtpaV7y8qeu/jiY431DY0NxdihcwAAMJIGCm/gIxFL
lrzV17duzpwVH//4U2VlT5aXP15eXnnddfs2bnxq2tSl5eXLysqKwltVWvpcaWmRdy+VlLxcUrLlmmuO
P/98w2231Y8atb+srK28fM+4j62bP78YVQwsxg6dAwCAkTRQeIWampqNtbWnd+9e/unP/GLcuJ+XlxdV
Vxw/Hfz9zODXkRWFVzV4AW/96NG1JSWbSkoaR40qfm8fNapou44xY/Zfcsmqyy7rbWl5ZePGYuDQZAAA
Rthw4fX29i5durStra2zqmrFZZc9NW7czwbbrki9J/+g8Ab+A2/wAt6rg3m3o7R0z+jRRd4dGjOmbdy4
qk9+8uja5w8cOFCMKgYOTQYAYIQNF17hUEfHTx97rLu7u6uq6tkrr3z60kt/NmZMEXn/U3gDt1D5gwt4
W0tKdpWX7ysvbx8zpnXcuOorrjj6wgvF9mJIMWp4KAAAI+73hVfYv39/0WdtbW2nd++umX3Lk5/4xNMX
X/xEeflTf1x4r5SUNIwa1TS6bO+YMXsuvviFiy5aX3Frb2trsbHYXgwZHgcAwPnwR4VXONTRsXTp0o21
tW/19b3e2LjtBz989vIrnrrkkhUXXVRVXr6mtPSl0tKNpaX1Y8asGzt25cUX137960fWPl8sLrYUG129
AwA47/608Aq9vb01NTVLliypq6vr7enp6ez85YYNLT/5ycvf/EbV1K+suHriuopbN3//+x2Vy063tfWe
OdNQX18sLrb43zsAgI+CP1N4Qzo7O1dXVz+yeHFlZWVjY2NXV9fZ/v4PBhUPiqfFi8VbxYJimRujAAB8
dPzFwhvS09Ozc8eO6qqqJY8++vCiRQ8tXFgcxYPiafFi8ZZvrQAA+Kj5PwoPAID/dxQeAEAahQcAkEbh
AQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCk
UXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgA
AGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkU
HgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBA
GoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUH
AJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG
4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEA
pFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4
AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABp
FB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4A
QBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqF
BwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQ
RuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEB
AKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRR
eAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAA
aRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQe
AEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAa
hQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcA
kEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbh
AQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCk
UXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgA
AGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkU
HgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBA
GoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUH
AJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG
4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEA
pFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4
AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABp
FB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4A
QBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqF
BwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQ
RuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEB
AKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRR
eAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAA
aRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQe
AEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAa
hQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcA
kEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbh
AQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCk
UXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgA
AGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkU
HgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBA
GoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUH
AJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG
4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEA
pFF4AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4
AABpFB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABp
FB4AQBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4A
QBqFBwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqF
BwCQRuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQ
RuEBAKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEB
AKRReAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRR
eAAAaRQeAEAahQcAkEbhAQCkUXgAAGkUHgBAGoUHAJBG4QEApFF4AABpFB4AQBqFBwCQRuEBAKRReAAA
Wc6d+2/gNp2ukwoN8QAAAABJRU5ErkJggg==
</value>
</data>
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAOvwAA
Dr8BOAVTJAAACG1JREFUSEu1lmlQW9cVx/mG0GIZZCczGcZjvCQEiLHNYpABAQKEwBjTeqmXCfkQ3Mx4
xp58SlMnY/dLmxl3TJIZu3UhBAQBsYNsisBoByS0C21oMUhCYIQkbFzqxo4n9C89TElqt/3SM1dv3tM7
93fOPfecc1/M+n+UQCCgnJzs5PPrb9787OrVK5cvY+AGj/gTr6Cwofoaea0Bh8PR1dl5/do1Ho8nlUqd
TudKOPxDVHCDR/yJV1CAGpQ3pv2bvMJAMBgcGBior6+XSCQhPDhm/CKRu4Nvv3Xb8vsv9J9fm77xRwev
xSuWLjscoeVlqEEZU6C7gdgiPzcwY7ffunVrRCh8FAotyBXevt6lb5o8V654L1zw/eKkt+bEXHW1q7ra
dqLGUFOjqq01t7R4VMqHfj+mYCKmb4Beyk8MmEymr7780mw2h4zGuc6uEI83X1e3WFPjr672V1V7qqrm
qqrcVVUu7rGZigobl2PhcDRcrqKy0njz5pJWh4mYDsgGLir/MgDjeO31en1DQ/72joVPfrMQRfuOHwd6
9tgxd2Wli8u1l5dbORxzaamptNTAZmuLizUslpzN/mtpmbu3F9MB2bqODQMIHxYIFyL0pibfxV8vnjju
KStz5ue7S0oi6PJyB6fcWlZmZpeY2GxDcbGOXaRiMifSDymyshR5eeL8/CFWobunBxCgNvdjwwC2CEFE
ZFz19fMffQSvXYUFgbq6fwgE/rq66aO59rIyC5tNoDWFhWoWazwjQ3P8uK+pyXD+wmjKu2PZ2cKc3MEC
VkCjAQpAghwxgCRDGmBXbbdvz1+96qmschUVLdbWrj98GFEJBNznzqkzMgj0VH6+qiBffvDgVHn5A6l0
diXkMRqVJ0/dTU6+d/jwYGbm8C9PAgUgkbsRA0hksVi8qJ5yffrbuWPHQPecObO+vByhE/JwyX7+/OSB
A1MFBRNMpuxAmopb8UAud87PW6xWs9Pp0Kjvczi9+/f3pKb1Hc6YafsOuQsspsagFFEswUDA2dHh+uAD
F6fUlpc3e+ZX60+eEHBCvl9aspw/L0pOFqWmTHC5LoXC6fdbrVajXr+wtLS2ttbP5bYnJbWnpHSmpgnP
nEJ9AAt4DModBbnscBouXbKXlNjYRWZsYGam68MP1x89AvrFixdPnz5de/HisdenPXFCVlgI+ozXa7VY
DAZDhP7kCa+w8A6VyqPTm+n0b+j0zvSDSyZTa2sr4DFoKSh676jIcOq0pahomsXSs1ja/HxFSpr5/fef
BoPP19dXV1fRHgKPHy9OT9tEIsQEaPXUlG9h4W+rq81M5p+p1FYK5VsKpSk62hITzY2NMpkM8Bi0LTQW
a0Ojjss15hfo8/PUeXnIP2XuUQREe+FCeGEhvLa2uLAwOzvrcLvNDodOp1OpVF6CzmLB9zYyuYVCaY4O
mOExGNJLl4AFPAatEd5prl/TFhUSaBUzZzwnR56dLc3NHd6bJK+omNVo3B6PzWYzT0/rdbqpqSmvz/dk
dbW1uJigEwOLwICllm3bBtglwAIeg/aLBik+e1Z99Cjo40eOyLOypNnZYuT13r2DcXEdZLKYy7XYbCaz
mfBdMT4eDofv1tYiMnjb/nLABnFto1Da33sPWMAjBp49eya7eDHiNdCZmeKsrLGDB+8xGL1xcXwy+e6u
XcauLjQarVYboSsUMrlcMj6uEQjupaYCBx2Mzq0DBg4dev78ecQAVhFcDio/+1ySkyMGPTtLmJIyEBfX
E6UPJiYaBQKt3a7RaFRKpQIGJidlEolIJBqbmNALhUPvvgs1KMOb/pdjgErt53DCoVAkRNgH+4zDdOfO
/ZwclPtwWhpU4QVc609MNAwOamw2jVarVCq9fv9KKDTc0zOGFYjFyL1Jg8EqkwnfeQcGBNFxD4NEGtq2
TXL5cqRBYJORSShj9/3R4VymMD2doCOUPTt3Gnp7QVdrNJOTk6A/Wllpycnh7dkj7O6RIlhKJbbEgf6p
Vo3t2wfuCIk0SiLdJ5G6t9GtvBZ4EElT1EJzS7PfbrvLZPYmJGC98L2LwTB0d0foajXoniidyEjY7k5O
lggE+pmZGZvN4/GE//40bDJJE3eJY2MlsbHS2Niu3UkBq7m1lRcpNKJVLMzPC8rK+Dt2gI5c7kxKUotE
KqNxYmLCOz//KBxuKihAzoBO7OdAaqpOKvUtL6Mtf//jj8hIFM14bKwyjjROp2u++APO2t9dvx5pFWgG
6EroTdaGhvbExBYqFZXyFwqlIytLPDQ0t7gIemNe3p+i+Q4DoCOMyIKht9+e1et/QJ2vrIyWl4+RSDoy
WU+hdMfHe6RiifRls8Nvs10Plpa2vfFGA4WCUNxGb8nIMI6MNDBzb1GpKB8YQNZ3w/3oTg6TSPL0dF9f
n6SyEsExUShmKlXL2DFYXv7zdg0hDpwltbp13/5vGQz4CyjGV9Er2gviBgOID9xHtghJJLiMcOM6ERsL
tJ1GMyUkdOzeHdTpRkdGfnLgQDaPTAef37Z7dwOD8XUUDUtYzaaBSPSj7iNVQJ8kk7VxcaDP0GhmBoP/
1luzvX0Wi+UVRyZk89B38vnNe/c27tz5NY0GG5sGIrm7xX0FiTRFpRqpVBuNZmAwOvfsme3vf+2hT8jm
ZwtihW515803G+PjkTzYla0GkOxIR1UcRU+jaePj+7dvF3ArggbDf/lsIQTGsUDiw2tOKh3/5NPmpD0N
CQlt27fzqdQeMvkemTyC9kejDdLp7fHxwtOn3b19UP6fPrwIQfiwRUgDNBwcpQGH48HQkO7GjeFzZ/m5
R9rSUge5FbKPP7bzWpbM5iA+HcViKGPKZty3yisMEIIkQyL/Xz5+twoWgHJHS0HbQmtE+8XADR7xJ15B
YUP1lbK+/k8KJ49ubHudCAAAAABJRU5ErkJggg==
</value>
</data>
</root>
-179
View File
@@ -1,179 +0,0 @@
namespace ProductionTracing.Forms
{
partial class SettingsDlg
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.commonGroupBox = new System.Windows.Forms.GroupBox();
this.loginRequiredCheckBox = new System.Windows.Forms.CheckBox();
this.languageComboBox = new System.Windows.Forms.ComboBox();
this.languageLabel = new System.Windows.Forms.Label();
this.connStrForTracingGroupBox = new System.Windows.Forms.GroupBox();
this.tracingDBConnStringTextBox = new System.Windows.Forms.TextBox();
this.connStrForUsersGroupBox = new System.Windows.Forms.GroupBox();
this.usersDBConnStringTextBox = new System.Windows.Forms.TextBox();
this.saveButton = new System.Windows.Forms.Button();
this.cancelButton = new System.Windows.Forms.Button();
this.commonGroupBox.SuspendLayout();
this.connStrForTracingGroupBox.SuspendLayout();
this.connStrForUsersGroupBox.SuspendLayout();
this.SuspendLayout();
//
// commonGroupBox
//
this.commonGroupBox.Controls.Add(this.languageComboBox);
this.commonGroupBox.Controls.Add(this.languageLabel);
this.commonGroupBox.Location = new System.Drawing.Point(12, 161);
this.commonGroupBox.Name = "commonGroupBox";
this.commonGroupBox.Size = new System.Drawing.Size(418, 53);
this.commonGroupBox.TabIndex = 16;
this.commonGroupBox.TabStop = false;
//
// loginRequiredCheckBox
//
this.loginRequiredCheckBox.AutoSize = true;
this.loginRequiredCheckBox.Location = new System.Drawing.Point(19, 46);
this.loginRequiredCheckBox.Name = "loginRequiredCheckBox";
this.loginRequiredCheckBox.Size = new System.Drawing.Size(114, 17);
this.loginRequiredCheckBox.TabIndex = 2;
this.loginRequiredCheckBox.Text = "User login required";
this.loginRequiredCheckBox.UseVisualStyleBackColor = true;
//
// languageComboBox
//
this.languageComboBox.FormattingEnabled = true;
this.languageComboBox.Location = new System.Drawing.Point(292, 19);
this.languageComboBox.Name = "languageComboBox";
this.languageComboBox.Size = new System.Drawing.Size(80, 21);
this.languageComboBox.TabIndex = 1;
//
// languageLabel
//
this.languageLabel.AutoSize = true;
this.languageLabel.Location = new System.Drawing.Point(19, 23);
this.languageLabel.Name = "languageLabel";
this.languageLabel.Size = new System.Drawing.Size(134, 13);
this.languageLabel.TabIndex = 0;
this.languageLabel.Text = "Language, Sprache, Jazyk";
//
// connStrForTracingGroupBox
//
this.connStrForTracingGroupBox.Controls.Add(this.tracingDBConnStringTextBox);
this.connStrForTracingGroupBox.Location = new System.Drawing.Point(12, 14);
this.connStrForTracingGroupBox.Name = "connStrForTracingGroupBox";
this.connStrForTracingGroupBox.Size = new System.Drawing.Size(660, 50);
this.connStrForTracingGroupBox.TabIndex = 17;
this.connStrForTracingGroupBox.TabStop = false;
this.connStrForTracingGroupBox.Text = "Connection string for production tracing records";
//
// tracingDBConnStringTextBox
//
this.tracingDBConnStringTextBox.Location = new System.Drawing.Point(19, 18);
this.tracingDBConnStringTextBox.Name = "tracingDBConnStringTextBox";
this.tracingDBConnStringTextBox.Size = new System.Drawing.Size(617, 20);
this.tracingDBConnStringTextBox.TabIndex = 0;
//
// connStrForUsersGroupBox
//
this.connStrForUsersGroupBox.Controls.Add(this.loginRequiredCheckBox);
this.connStrForUsersGroupBox.Controls.Add(this.usersDBConnStringTextBox);
this.connStrForUsersGroupBox.Location = new System.Drawing.Point(12, 73);
this.connStrForUsersGroupBox.Name = "connStrForUsersGroupBox";
this.connStrForUsersGroupBox.Size = new System.Drawing.Size(660, 70);
this.connStrForUsersGroupBox.TabIndex = 18;
this.connStrForUsersGroupBox.TabStop = false;
this.connStrForUsersGroupBox.Text = "Connection string for central DB of users";
//
// usersDBConnStringTextBox
//
this.usersDBConnStringTextBox.Location = new System.Drawing.Point(19, 18);
this.usersDBConnStringTextBox.Name = "usersDBConnStringTextBox";
this.usersDBConnStringTextBox.Size = new System.Drawing.Size(617, 20);
this.usersDBConnStringTextBox.TabIndex = 0;
//
// saveButton
//
this.saveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.saveButton.Location = new System.Drawing.Point(475, 166);
this.saveButton.Name = "saveButton";
this.saveButton.Size = new System.Drawing.Size(74, 47);
this.saveButton.TabIndex = 19;
this.saveButton.Text = "Save";
this.saveButton.UseVisualStyleBackColor = true;
this.saveButton.Click += new System.EventHandler(this.saveButton_Click);
//
// cancelButton
//
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.cancelButton.Location = new System.Drawing.Point(577, 166);
this.cancelButton.Name = "cancelButton";
this.cancelButton.Size = new System.Drawing.Size(71, 47);
this.cancelButton.TabIndex = 20;
this.cancelButton.Text = "Cancel";
this.cancelButton.UseVisualStyleBackColor = true;
this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
//
// SettingsDlg
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(688, 237);
this.ControlBox = false;
this.Controls.Add(this.cancelButton);
this.Controls.Add(this.saveButton);
this.Controls.Add(this.connStrForUsersGroupBox);
this.Controls.Add(this.connStrForTracingGroupBox);
this.Controls.Add(this.commonGroupBox);
this.Name = "SettingsDlg";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Settings";
this.Load += new System.EventHandler(this.SettingsDlg_Load);
this.commonGroupBox.ResumeLayout(false);
this.commonGroupBox.PerformLayout();
this.connStrForTracingGroupBox.ResumeLayout(false);
this.connStrForTracingGroupBox.PerformLayout();
this.connStrForUsersGroupBox.ResumeLayout(false);
this.connStrForUsersGroupBox.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.GroupBox commonGroupBox;
private System.Windows.Forms.ComboBox languageComboBox;
private System.Windows.Forms.Label languageLabel;
private System.Windows.Forms.CheckBox loginRequiredCheckBox;
private System.Windows.Forms.GroupBox connStrForTracingGroupBox;
private System.Windows.Forms.TextBox tracingDBConnStringTextBox;
private System.Windows.Forms.GroupBox connStrForUsersGroupBox;
private System.Windows.Forms.TextBox usersDBConnStringTextBox;
private System.Windows.Forms.Button saveButton;
private System.Windows.Forms.Button cancelButton;
}
}
-126
View File
@@ -1,126 +0,0 @@
///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using System.Windows.Forms;
using ProductionTracing.Resources;
namespace ProductionTracing.Forms
{
public partial class SettingsDlg : Form
{
private LocalSettings ls;
public SettingsDlg()
{
InitializeComponent();
}
public SettingsDlg(LocalSettings localSettings)
{
InitializeComponent();
this.ls = localSettings;
}
void Localize()
{
Text = Strings.Settings;
languageLabel.Text = Strings.Language;
loginRequiredCheckBox.Text = Strings.User_login_is_required;
saveButton.Text = Strings.Save;
cancelButton.Text = Strings.Cancel;
connStrForTracingGroupBox.Text = Strings.Connection_string_tracing_DB;
connStrForUsersGroupBox.Text = Strings.Connection_string_users_DB;
}
private void SettingsDlg_Load(object sender, EventArgs e)
{
Localize();
if (ls == null) return;
languageComboBox.Items.Add("EN");
languageComboBox.Items.Add("ZH_CN");
languageComboBox.Items.Add("DE");
languageComboBox.Items.Add("SK");
languageComboBox.Text = ls.Language;
loginRequiredCheckBox.Checked = ls.IsUserLoginRequired;
tracingDBConnStringTextBox.Text = ls.ConnectionString;
usersDBConnStringTextBox.Text = ls.UsersDBConnString;
}
/// <summary>
/// Verifies UI content
/// </summary>
/// <returns>None-empty string (message) when invalid</returns>
string IsUIContentValid()
{
if (!languageComboBox.Items.Contains(languageComboBox.Text))
{
return "Invalid language";
}
return null;
}
/// <summary>
/// Updates settings, checks for differences compared to previous setrtings
/// </summary>
/// <returns>true when settings are different</returns>
bool UpdateSettings()
{
if (ls == null) return false;
bool isDifferent = false;
if (ls.Language != languageComboBox.Text)
{
ls.Language = languageComboBox.Text;
isDifferent = true;
}
if (ls.IsUserLoginRequired != loginRequiredCheckBox.Checked)
{
ls.IsUserLoginRequired = loginRequiredCheckBox.Checked;
isDifferent = true;
}
if (ls.ConnectionString != tracingDBConnStringTextBox.Text)
{
ls.ConnectionString = tracingDBConnStringTextBox.Text;
isDifferent = true;
}
if (ls.UsersDBConnString != usersDBConnStringTextBox.Text)
{
ls.UsersDBConnString = usersDBConnStringTextBox.Text;
isDifferent = true;
}
return isDifferent;
}
private void saveButton_Click(object sender, EventArgs e)
{
string message = IsUIContentValid();
if (string.IsNullOrEmpty(message))
{
UpdateSettings();
DialogResult = DialogResult.OK;
Close();
}
else
{
MessageBox.Show(message);
}
}
private void cancelButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}
-139
View File
@@ -1,139 +0,0 @@
namespace ProductionTracing.Forms
{
partial class StatisticsDlg
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.statisticsListView = new System.Windows.Forms.ListView();
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.okButton = new System.Windows.Forms.Button();
this.exportButton = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel2.SuspendLayout();
this.splitContainer2.SuspendLayout();
this.SuspendLayout();
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.statisticsListView);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.splitContainer2);
this.splitContainer1.Size = new System.Drawing.Size(572, 409);
this.splitContainer1.SplitterDistance = 320;
this.splitContainer1.TabIndex = 0;
//
// statisticsListView
//
this.statisticsListView.Dock = System.Windows.Forms.DockStyle.Fill;
this.statisticsListView.GridLines = true;
this.statisticsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.statisticsListView.Location = new System.Drawing.Point(0, 0);
this.statisticsListView.Name = "statisticsListView";
this.statisticsListView.Size = new System.Drawing.Size(572, 320);
this.statisticsListView.TabIndex = 0;
this.statisticsListView.UseCompatibleStateImageBehavior = false;
//
// splitContainer2
//
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
this.splitContainer2.Location = new System.Drawing.Point(0, 0);
this.splitContainer2.Name = "splitContainer2";
//
// splitContainer2.Panel2
//
this.splitContainer2.Panel2.Controls.Add(this.exportButton);
this.splitContainer2.Panel2.Controls.Add(this.okButton);
this.splitContainer2.Size = new System.Drawing.Size(572, 85);
this.splitContainer2.SplitterDistance = 250;
this.splitContainer2.TabIndex = 0;
//
// okButton
//
this.okButton.Location = new System.Drawing.Point(195, 22);
this.okButton.Name = "okButton";
this.okButton.Size = new System.Drawing.Size(102, 41);
this.okButton.TabIndex = 0;
this.okButton.Text = "OK";
this.okButton.UseVisualStyleBackColor = true;
this.okButton.Click += new System.EventHandler(this.okButton_Click);
//
// exportButton
//
this.exportButton.Location = new System.Drawing.Point(74, 22);
this.exportButton.Name = "exportButton";
this.exportButton.Size = new System.Drawing.Size(102, 41);
this.exportButton.TabIndex = 1;
this.exportButton.Text = "Export";
this.exportButton.UseVisualStyleBackColor = true;
this.exportButton.Click += new System.EventHandler(this.exportButton_Click);
//
// StatisticsDlg
//
this.AcceptButton = this.okButton;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(572, 409);
this.Controls.Add(this.splitContainer1);
this.Name = "StatisticsDlg";
this.Text = "StatisticsDlg";
this.Load += new System.EventHandler(this.StatisticsDlg_Load);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.splitContainer2.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
this.splitContainer2.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.ListView statisticsListView;
private System.Windows.Forms.SplitContainer splitContainer2;
private System.Windows.Forms.Button okButton;
private System.Windows.Forms.Button exportButton;
}
}
-232
View File
@@ -1,232 +0,0 @@
///
/// Copyright (c) 2016-2022 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ProductionTracing.Resources;
namespace ProductionTracing.Forms
{
public partial class StatisticsDlg : Form
{
IList<object[]> results;
IList<ItemSpec> items;
bool twoDim;
int rowItemIx;
int columnItemIx;
bool filterEnabled;
int filteredItemIx;
string filteredValue;
ItemSpec rowItem;
ItemSpec columnItem;
ItemSpec filteredItem;
IList<string> rowValues;
IList<string> columnValues;
int[,] occurances;
public StatisticsDlg(QueryResults results, bool twoDim, int rowItemIx, int columnItemIx, bool filterEnabled, int filteredItemIx, string filteredValue)
{
InitializeComponent();
Text = results.Description;
okButton.Text = Strings.OkBtnText;
this.results = results.Results;
this.items = results.ProjectedItems;
this.twoDim = twoDim;
this.rowItemIx = rowItemIx;
this.columnItemIx = columnItemIx;
this.filterEnabled = filterEnabled;
this.filteredItemIx = filteredItemIx;
this.filteredValue = filteredValue;
rowItem = items[rowItemIx].Clone();
if (twoDim)
{
columnItem = items[columnItemIx].Clone();
}
if (filterEnabled)
{
filteredItem = items[filteredItemIx].Clone();
}
Localize();
}
private void StatisticsDlg_Load(object sender, EventArgs e)
{
Calculate();
}
void Localize()
{
okButton.Text = Strings.OkBtnText;
exportButton.Text = Strings.Export;
}
bool Calculate()
{
try
{
rowValues = new List<string>();
columnValues = new List<string>();
///
/// Find discrete values of rows and columns
///
foreach (var result in results)
{
if (!filterEnabled || filteredItem.Print(result[filteredItemIx]).Equals(filteredValue))
{
string value = rowItem.Print(result[rowItemIx]);
if (!rowValues.Contains(value)) rowValues.Add(value);
if (twoDim)
{
value = columnItem.Print(result[columnItemIx]);
if (!columnValues.Contains(value)) columnValues.Add(value);
}
}
}
///
/// Sort discrete values of rows and columns
///
int dummy;
bool rowValuesAreInts = true;
foreach (var rVal in rowValues) if (!int.TryParse(rVal, out dummy)) { rowValuesAreInts = false; break; }
if (rowValuesAreInts) rowValues = rowValues.OrderBy(x => int.Parse(x)).ToList();
else rowValues = rowValues.OrderBy(x => x).ToList();
if (twoDim)
{
bool colValuesAreInts = true;
foreach (var cVal in columnValues) if (!int.TryParse(cVal, out dummy)) { colValuesAreInts = false; break; }
if (colValuesAreInts) columnValues = columnValues.OrderBy(x => int.Parse(x)).ToList();
else columnValues = columnValues.OrderBy(x => x).ToList();
}
///
/// Calculate occurances
///
int columns = Math.Max(1, columnValues.Count);
occurances = new int[rowValues.Count, columns];
foreach (var result in results)
{
if (!filterEnabled || filteredItem.Print(result[filteredItemIx]).Equals(filteredValue))
{
for (int row = 0; row < rowValues.Count; row++)
{
if (twoDim)
{
for (int column = 0; column < columns; column++)
{
if (rowItem.Print(result[rowItemIx]).Equals(rowValues[row]) && columnItem.Print(result[columnItemIx]).Equals(columnValues[column]))
{
occurances[row, column]++;
}
}
}
else
{
if (rowItem.Print(result[rowItemIx]).Equals(rowValues[row])) occurances[row, 0]++;
}
}
}
}
///
/// Update ListBox
///
statisticsListView.View = View.Details;
statisticsListView.GridLines = true;
statisticsListView.FullRowSelect = true;
statisticsListView.Columns.Add((twoDim ? string.Empty : rowItem.Caption), 200);
for (int column = 0; column < columns; column++)
{
statisticsListView.Columns.Add((twoDim ? columnValues[column] : Strings.Count), 70);
}
for (int row = 0; row < rowValues.Count; row++)
{
ListViewItem lvi = new ListViewItem(rowValues[row]);
for (int column = 0; column < columns; column++) lvi.SubItems.Add(occurances[row, column].ToString());
statisticsListView.Items.Add(lvi);
}
return true;
}
catch (Exception exc)
{
MessageBox.Show(exc.Message, Strings.Error, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return false;
}
}
private void okButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.OK;
Close();
}
private void exportButton_Click(object sender, EventArgs e)
{
if (rowValues == null || columnValues == null || occurances == null) return;
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "CSV files (*.csv)|*.csv|All files (*.*)|*.*";
if (dlg.ShowDialog() == DialogResult.OK)
{
//IList<ItemSpec> items = currentQR.ProjectedItems;
try
{
using (TextWriter writer = new StreamWriter(dlg.FileName, false, Encoding.UTF8))
{
if (twoDim)
{
/// Write column headers
for (int i = 0; i < columnValues.Count; i++)
{
writer.Write(string.Format(";\"{0}\"", columnValues[i]));
}
writer.WriteLine();
}
else
{
writer.WriteLine(string.Format("\"{0}\";\"{1}\"", rowItem.Caption, Strings.Count));
}
int nrColumns = Math.Max(1, columnValues.Count);
/// Write rows, row header first
for (int j = 0; j < rowValues.Count; j++)
{
writer.Write(string.Format("\"{0}\"", rowValues[j]));
for (int i = 0; i < nrColumns; i++)
{
writer.Write(string.Format(";{0}", occurances[j,i]));
}
writer.WriteLine();
}
}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message, Strings.Error_exporting_results, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}
}
}
-194
View File
@@ -1,194 +0,0 @@
namespace ProductionTracing.Forms
{
partial class StatisticsOptionsDlg
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.cancelButton = new System.Windows.Forms.Button();
this.okButton = new System.Windows.Forms.Button();
this.rowsGroupBox = new System.Windows.Forms.GroupBox();
this.rowsComboBox = new System.Windows.Forms.ComboBox();
this.columnsGroupBox = new System.Windows.Forms.GroupBox();
this.columnsComboBox = new System.Windows.Forms.ComboBox();
this.twoDimCheckBox = new System.Windows.Forms.CheckBox();
this.filterCheckBox = new System.Windows.Forms.CheckBox();
this.filterGroupBox = new System.Windows.Forms.GroupBox();
this.filteredValueTextBox = new System.Windows.Forms.TextBox();
this.filteredItemComboBox = new System.Windows.Forms.ComboBox();
this.rowsGroupBox.SuspendLayout();
this.columnsGroupBox.SuspendLayout();
this.filterGroupBox.SuspendLayout();
this.SuspendLayout();
//
// cancelButton
//
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.cancelButton.Location = new System.Drawing.Point(353, 268);
this.cancelButton.Name = "cancelButton";
this.cancelButton.Size = new System.Drawing.Size(95, 38);
this.cancelButton.TabIndex = 9;
this.cancelButton.Text = "Cancel";
this.cancelButton.UseVisualStyleBackColor = true;
this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
//
// okButton
//
this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.okButton.Location = new System.Drawing.Point(242, 268);
this.okButton.Name = "okButton";
this.okButton.Size = new System.Drawing.Size(95, 38);
this.okButton.TabIndex = 8;
this.okButton.Text = "OK";
this.okButton.UseVisualStyleBackColor = true;
this.okButton.Click += new System.EventHandler(this.okButton_Click);
//
// rowsGroupBox
//
this.rowsGroupBox.Controls.Add(this.rowsComboBox);
this.rowsGroupBox.Location = new System.Drawing.Point(30, 35);
this.rowsGroupBox.Name = "rowsGroupBox";
this.rowsGroupBox.Size = new System.Drawing.Size(250, 56);
this.rowsGroupBox.TabIndex = 10;
this.rowsGroupBox.TabStop = false;
this.rowsGroupBox.Text = "Rows";
//
// rowsComboBox
//
this.rowsComboBox.FormattingEnabled = true;
this.rowsComboBox.Location = new System.Drawing.Point(32, 21);
this.rowsComboBox.Name = "rowsComboBox";
this.rowsComboBox.Size = new System.Drawing.Size(185, 21);
this.rowsComboBox.TabIndex = 0;
//
// columnsGroupBox
//
this.columnsGroupBox.Controls.Add(this.columnsComboBox);
this.columnsGroupBox.Location = new System.Drawing.Point(30, 97);
this.columnsGroupBox.Name = "columnsGroupBox";
this.columnsGroupBox.Size = new System.Drawing.Size(250, 56);
this.columnsGroupBox.TabIndex = 11;
this.columnsGroupBox.TabStop = false;
this.columnsGroupBox.Text = "Columns";
//
// columnsComboBox
//
this.columnsComboBox.FormattingEnabled = true;
this.columnsComboBox.Location = new System.Drawing.Point(32, 20);
this.columnsComboBox.Name = "columnsComboBox";
this.columnsComboBox.Size = new System.Drawing.Size(185, 21);
this.columnsComboBox.TabIndex = 1;
//
// twoDimCheckBox
//
this.twoDimCheckBox.AutoSize = true;
this.twoDimCheckBox.Location = new System.Drawing.Point(30, 12);
this.twoDimCheckBox.Name = "twoDimCheckBox";
this.twoDimCheckBox.Size = new System.Drawing.Size(40, 17);
this.twoDimCheckBox.TabIndex = 12;
this.twoDimCheckBox.Text = "2D";
this.twoDimCheckBox.UseVisualStyleBackColor = true;
this.twoDimCheckBox.CheckedChanged += new System.EventHandler(this.twoDimCheckBox_CheckedChanged);
//
// filterCheckBox
//
this.filterCheckBox.AutoSize = true;
this.filterCheckBox.Location = new System.Drawing.Point(30, 169);
this.filterCheckBox.Name = "filterCheckBox";
this.filterCheckBox.Size = new System.Drawing.Size(48, 17);
this.filterCheckBox.TabIndex = 13;
this.filterCheckBox.Text = "Filter";
this.filterCheckBox.UseVisualStyleBackColor = true;
this.filterCheckBox.CheckedChanged += new System.EventHandler(this.filterCheckBox_CheckedChanged);
//
// filterGroupBox
//
this.filterGroupBox.Controls.Add(this.filteredValueTextBox);
this.filterGroupBox.Controls.Add(this.filteredItemComboBox);
this.filterGroupBox.Location = new System.Drawing.Point(30, 192);
this.filterGroupBox.Name = "filterGroupBox";
this.filterGroupBox.Size = new System.Drawing.Size(418, 56);
this.filterGroupBox.TabIndex = 14;
this.filterGroupBox.TabStop = false;
this.filterGroupBox.Text = "Rows";
//
// filteredValueTextBox
//
this.filteredValueTextBox.Location = new System.Drawing.Point(239, 21);
this.filteredValueTextBox.Name = "filteredValueTextBox";
this.filteredValueTextBox.Size = new System.Drawing.Size(158, 20);
this.filteredValueTextBox.TabIndex = 1;
//
// filteredItemComboBox
//
this.filteredItemComboBox.FormattingEnabled = true;
this.filteredItemComboBox.Location = new System.Drawing.Point(32, 21);
this.filteredItemComboBox.Name = "filteredItemComboBox";
this.filteredItemComboBox.Size = new System.Drawing.Size(185, 21);
this.filteredItemComboBox.TabIndex = 0;
//
// StatisticsOptionsDlg
//
this.AcceptButton = this.okButton;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.cancelButton;
this.ClientSize = new System.Drawing.Size(482, 322);
this.Controls.Add(this.filterGroupBox);
this.Controls.Add(this.filterCheckBox);
this.Controls.Add(this.columnsGroupBox);
this.Controls.Add(this.twoDimCheckBox);
this.Controls.Add(this.rowsGroupBox);
this.Controls.Add(this.cancelButton);
this.Controls.Add(this.okButton);
this.Name = "StatisticsOptionsDlg";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "StatisticsOptionsDlg";
this.rowsGroupBox.ResumeLayout(false);
this.columnsGroupBox.ResumeLayout(false);
this.filterGroupBox.ResumeLayout(false);
this.filterGroupBox.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button cancelButton;
private System.Windows.Forms.Button okButton;
private System.Windows.Forms.GroupBox rowsGroupBox;
private System.Windows.Forms.ComboBox rowsComboBox;
private System.Windows.Forms.GroupBox columnsGroupBox;
private System.Windows.Forms.ComboBox columnsComboBox;
private System.Windows.Forms.CheckBox twoDimCheckBox;
private System.Windows.Forms.CheckBox filterCheckBox;
private System.Windows.Forms.GroupBox filterGroupBox;
private System.Windows.Forms.TextBox filteredValueTextBox;
private System.Windows.Forms.ComboBox filteredItemComboBox;
}
}
@@ -1,176 +0,0 @@
///
/// Copyright (c) 2016-2022 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using ProductionTracing.Resources;
namespace ProductionTracing.Forms
{
public partial class StatisticsOptionsDlg : Form
{
public bool TwoDim;
public int RowItemIx;
public int ColumnItemIx;
public bool FilterEnabled;
public int FilteredItemIx;
public string FilteredValue;
IList<ItemSpec> projectedItems;
public StatisticsOptionsDlg(IList<ItemSpec> projectedItems)
{
InitializeComponent();
Localize();
this.projectedItems = projectedItems;
TwoDim = Program.LocalSettings.TwoDim;
twoDimCheckBox.Checked = TwoDim;
columnsComboBox.Enabled = TwoDim;
FilterEnabled = Program.LocalSettings.FilterEnabled;
filterCheckBox.Checked = FilterEnabled;
filterGroupBox.Enabled = FilterEnabled;
filteredValueTextBox.Text = Program.LocalSettings.FilteredValue;
RowItemIx = 0;
rowsComboBox.Text = projectedItems[0].Caption;
///
ColumnItemIx = 0;
columnsComboBox.Text = projectedItems[0].Caption;
///
FilteredItemIx = 0;
filteredItemComboBox.Text = projectedItems[0].Caption;
///
for (int i = 1; i < projectedItems.Count; i++)
{
string columnCaption = projectedItems[i].Caption;
rowsComboBox.Items.Add(columnCaption);
columnsComboBox.Items.Add(columnCaption);
filteredItemComboBox.Items.Add(columnCaption);
if (columnCaption == Program.LocalSettings.RowItemID)
{
RowItemIx = i;
rowsComboBox.Text = columnCaption;
}
if (columnCaption == Program.LocalSettings.ColumnItemID)
{
ColumnItemIx = i;
columnsComboBox.Text = columnCaption;
}
if (columnCaption == Program.LocalSettings.FilteredItemId)
{
FilteredItemIx = i;
filteredItemComboBox.Text = columnCaption;
}
}
}
void Localize()
{
Text = Strings.Statistics;
okButton.Text = Strings.OkBtnText;
cancelButton.Text = Strings.Cancel;
rowsGroupBox.Text = Strings.Rows;
columnsGroupBox.Text = Strings.Columns;
}
private void twoDimCheckBox_CheckedChanged(object sender, EventArgs e)
{
columnsComboBox.Enabled = twoDimCheckBox.Checked;
}
private void filterCheckBox_CheckedChanged(object sender, EventArgs e)
{
filterGroupBox.Enabled = filterCheckBox.Checked;
}
private void okButton_Click(object sender, EventArgs e)
{
TwoDim = twoDimCheckBox.Checked;
RowItemIx = -1; /// -1 = No selection
for (int i = 0; i < rowsComboBox.Items.Count; i++)
{
if (rowsComboBox.Text.Equals(rowsComboBox.Items[i]))
{
RowItemIx = i + 1;
break;
}
}
if (TwoDim)
{
ColumnItemIx = -1; /// -1 = No selection
for (int i = 0; i < columnsComboBox.Items.Count; i++)
{
if (columnsComboBox.Text.Equals(columnsComboBox.Items[i]))
{
ColumnItemIx = i + 1;
break;
}
}
}
else
{
ColumnItemIx = 0;
}
FilterEnabled = filterCheckBox.Checked;
if (FilterEnabled)
{
FilteredItemIx = -1; /// -1 = No selection
for (int i = 0; i < filteredItemComboBox.Items.Count; i++)
{
if (filteredItemComboBox.Text.Equals(filteredItemComboBox.Items[i]))
{
FilteredItemIx = i + 1;
break;
}
}
}
else
{
FilteredItemIx = 0;
}
if (RowItemIx == -1 || ColumnItemIx == -1)
{
MessageBox.Show(Strings.Error, Strings.Error, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
DialogResult = DialogResult.Cancel;
}
Program.LocalSettings.TwoDim = TwoDim;
Program.LocalSettings.RowItemID = rowsComboBox.Text;
if (TwoDim)
{
Program.LocalSettings.ColumnItemID = columnsComboBox.Text;
}
Program.LocalSettings.FilterEnabled = FilterEnabled;
if (FilterEnabled)
{
Program.LocalSettings.FilteredItemId = filteredItemComboBox.Text;
FilteredValue = filteredValueTextBox.Text;
Program.LocalSettings.FilteredValue = FilteredValue;
}
Program.LocalSettings.Save();
DialogResult = DialogResult.OK;
Close();
}
private void cancelButton_Click(object sender, EventArgs e)
{
}
}
}
-300
View File
@@ -1,300 +0,0 @@
///
/// Copyright (c) 2016-2022 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using log4net;
using Common.Forms;
using SharedDatabase.Entities;
using ProductionTracing.Resources;
namespace ProductionTracing.Forms
{
public partial class TracingConfigDlg : Form
{
/// <summary>
/// ListViewEx columns
/// </summary>
enum Column
{
Item,
Caption,
Format,
Precision,
Width,
Count,
}
Control[] editors;
public IList<ItemSpec> AvailableItems;
public IList<ItemSpec> SelectedItems;
public bool Compound; /// false = single meter items, true = combined meter items
public TracingConfigDlg()
{
InitializeComponent();
}
void Localize()
{
Text = Strings.Configuration;
availableResultsLabel.Text = Strings.Available_results;
selectedResultsLabel.Text = Strings.Selected_results;
addButton.Text = Strings.Add;
removeButton.Text = Strings.Remove;
removeAllButton.Text = Strings.Remove_all;
okButton.Text = Strings.OkBtnText;
cancelButton.Text = Strings.Cancel;
upButton.Text = Strings.UpBtnText;
downButton.Text = Strings.DownBtnText;
}
void ResultsConfig_Load(object sender, EventArgs e)
{
Localize();
/// Add columns to ListViewEx
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Item, Width = 120 });
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Caption });
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Format });
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Precision });
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Width });
editors = new Control[]
{
null,
new TextBox(),
new TextBox(),
new TextBox(),
new TextBox(),
};
foreach (var edi in editors)
{
if (edi != null)
{
edi.Visible = false;
Controls.Add(edi);
}
}
selectedResultsListViewEx.SubItemClicked += new SubItemEventHandler(selectedResultsListViewEx_SubItemClicked);
selectedResultsListViewEx.SubItemEndEditing += new SubItemEndEditingEventHandler(selectedResultsListViewEx_SubItemEndEditing);
RedrawAvailable();
RedrawSelected();
}
void selectedResultsListViewEx_SubItemClicked(object sender, SubItemEventArgs e)
{
if ((e.SubItem > 0) && (e.SubItem < (int)Column.Count))
{
selectedResultsListViewEx.StartEditing(editors[e.SubItem], e.Item, e.SubItem);
}
}
void selectedResultsListViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e)
{
ListViewItem lvi = e.Item;
ItemSpec item = lvi.Tag as ItemSpec;
switch ((Column)e.SubItem)
{
case Column.Caption: item.Caption = e.DisplayText; return;
case Column.Format: item.Format = e.DisplayText; return;
case Column.Precision: item.Precision = e.DisplayText; return;
case Column.Width:
{
int width;
if (Int32.TryParse(editors[e.SubItem].Text, out width) && width >= 0)
{
item.Width = width;
return; /// OK
}
break; /// Error
}
default:
return; /// OK
}
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
e.Cancel = true;
return;
}
/// <summary>
/// Redraw selected items (right hand side)
/// </summary>
void RedrawAvailable()
{
availableResultsListBox.Items.Clear();
AvailableItems = new List<ItemSpec>();
foreach (var item in ItemSpec.AllItems)
{
AvailableItems.Add(item);
availableResultsListBox.Items.Add(item.Name);
}
}
/// <summary>
/// Redraw selected items (right hand side)
/// </summary>
void RedrawSelected()
{
selectedResultsListViewEx.Items.Clear();
foreach (var item in SelectedItems)
{
ListViewItem lvi = new ListViewItem(item.Name); /// Item
lvi.Tag = item;
lvi.SubItems.Add(item.Caption); /// Header
lvi.SubItems.Add(item.Format); /// Format
lvi.SubItems.Add(item.Precision); /// Precision
lvi.SubItems.Add(item.Width.ToString()); /// Width
selectedResultsListViewEx.Items.Add(lvi);
}
}
void UpdateSelectedFromView()
{
}
void availableResultsListBox_DoubleClick(object sender, EventArgs e)
{
/// Double click works when just one item is selected
if (availableResultsListBox.SelectedIndices.Count == 1)
{
var oriItem = AvailableItems[availableResultsListBox.SelectedIndices[0]];
SelectedItems.Add(oriItem.Clone());
RedrawAvailable();
RedrawSelected();
/// Select the last item
selectedResultsListViewEx.Focus();
selectedResultsListViewEx.Items[SelectedItems.Count - 1].Selected = true;
selectedResultsListViewEx.Items[SelectedItems.Count - 1].EnsureVisible();
}
}
void addButton_Click(object sender, EventArgs e)
{
/// Append at the end, this code supports multiple selected items,
/// although ListBox control settings may limit the max.number of selected items to one.
for (int i = availableResultsListBox.SelectedIndices.Count - 1; i >= 0; i--)
{
var oriItem = AvailableItems[availableResultsListBox.SelectedIndices[i]];
SelectedItems.Add(oriItem.Clone());
}
RedrawAvailable();
RedrawSelected();
/// Select the last item
selectedResultsListViewEx.Focus();
selectedResultsListViewEx.Items[SelectedItems.Count - 1].Selected = true;
selectedResultsListViewEx.Items[SelectedItems.Count - 1].EnsureVisible();
}
private void selectedResultsListBox_DoubleClick(object sender, EventArgs e)
{
/// Double click works when just one item is selected
if (selectedResultsListViewEx.SelectedIndices.Count == 1)
{
SelectedItems.RemoveAt(selectedResultsListViewEx.SelectedIndices[0]);
RedrawAvailable();
RedrawSelected();
}
}
void removeButton_Click(object sender, EventArgs e)
{
/// Remove from the list (the last selected item first so that the indexes are not affected)
for (int i = selectedResultsListViewEx.SelectedIndices.Count - 1; i >= 0; i--)
{
SelectedItems.RemoveAt(selectedResultsListViewEx.SelectedIndices[i]);
}
RedrawAvailable();
RedrawSelected();
}
void removeAllButton_Click(object sender, EventArgs e)
{
/// Remove all items from 'Selected' list
SelectedItems.Clear();
RedrawAvailable();
RedrawSelected();
}
void okButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.OK;
Close();
}
private void ResultsConfigDlg_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
private void upButton_Click(object sender, EventArgs e)
{
if (selectedResultsListViewEx.SelectedIndices.Count != 1) return;
int selIdx = selectedResultsListViewEx.SelectedIndices[0];
if (selIdx == 0)
{
/// Cannot move up
selectedResultsListViewEx.Focus();
selectedResultsListViewEx.Items[0].Selected = true;
return;
}
ItemSpec tmp = SelectedItems[selIdx - 1];
SelectedItems[selIdx - 1] = SelectedItems[selIdx];
SelectedItems[selIdx] = tmp;
RedrawSelected();
selectedResultsListViewEx.Focus();
selectedResultsListViewEx.Items[selIdx - 1].Selected = true;
selectedResultsListViewEx.Items[selIdx - 1].EnsureVisible();
}
private void downButton_Click(object sender, EventArgs e)
{
if (selectedResultsListViewEx.SelectedIndices.Count != 1) return;
int selIdx = selectedResultsListViewEx.SelectedIndices[0];
if (selIdx == SelectedItems.Count - 1)
{
/// Cannot move down
selectedResultsListViewEx.Focus();
selectedResultsListViewEx.Items[SelectedItems.Count - 1].Selected = true;
return;
}
ItemSpec tmp = SelectedItems[selIdx + 1];
SelectedItems[selIdx + 1] = SelectedItems[selIdx];
SelectedItems[selIdx] = tmp;
RedrawSelected();
selectedResultsListViewEx.Focus();
selectedResultsListViewEx.Items[selIdx + 1].Selected = true;
selectedResultsListViewEx.Items[selIdx + 1].EnsureVisible();
}
private void cancelButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}
-201
View File
@@ -1,201 +0,0 @@
///
/// Copyright (c) 2016-2022 Sensus Slovensko a.s.
///
namespace ProductionTracing.Forms
{
partial class TracingConfigDlg
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.okButton = new System.Windows.Forms.Button();
this.cancelButton = new System.Windows.Forms.Button();
this.availableResultsListBox = new System.Windows.Forms.ListBox();
this.availableResultsLabel = new System.Windows.Forms.Label();
this.selectedResultsLabel = new System.Windows.Forms.Label();
this.removeAllButton = new System.Windows.Forms.Button();
this.removeButton = new System.Windows.Forms.Button();
this.addButton = new System.Windows.Forms.Button();
this.selectedResultsListViewEx = new Common.Forms.ListViewEx();
this.upButton = new System.Windows.Forms.Button();
this.downButton = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// okButton
//
this.okButton.Location = new System.Drawing.Point(344, 401);
this.okButton.Name = "okButton";
this.okButton.Size = new System.Drawing.Size(104, 30);
this.okButton.TabIndex = 4;
this.okButton.Text = "OK";
this.okButton.UseVisualStyleBackColor = true;
this.okButton.Click += new System.EventHandler(this.okButton_Click);
//
// cancelButton
//
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.cancelButton.Location = new System.Drawing.Point(465, 401);
this.cancelButton.Name = "cancelButton";
this.cancelButton.Size = new System.Drawing.Size(104, 30);
this.cancelButton.TabIndex = 5;
this.cancelButton.Text = "Cancel";
this.cancelButton.UseVisualStyleBackColor = true;
this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
//
// availableResultsListBox
//
this.availableResultsListBox.FormattingEnabled = true;
this.availableResultsListBox.Location = new System.Drawing.Point(12, 31);
this.availableResultsListBox.Name = "availableResultsListBox";
this.availableResultsListBox.Size = new System.Drawing.Size(162, 355);
this.availableResultsListBox.TabIndex = 6;
this.availableResultsListBox.DoubleClick += new System.EventHandler(this.availableResultsListBox_DoubleClick);
//
// availableResultsLabel
//
this.availableResultsLabel.AutoSize = true;
this.availableResultsLabel.Location = new System.Drawing.Point(12, 9);
this.availableResultsLabel.Name = "availableResultsLabel";
this.availableResultsLabel.Size = new System.Drawing.Size(86, 13);
this.availableResultsLabel.TabIndex = 8;
this.availableResultsLabel.Text = "Available results:";
//
// selectedResultsLabel
//
this.selectedResultsLabel.AutoSize = true;
this.selectedResultsLabel.Location = new System.Drawing.Point(284, 9);
this.selectedResultsLabel.Name = "selectedResultsLabel";
this.selectedResultsLabel.Size = new System.Drawing.Size(85, 13);
this.selectedResultsLabel.TabIndex = 9;
this.selectedResultsLabel.Text = "Selected results:";
//
// removeAllButton
//
this.removeAllButton.Location = new System.Drawing.Point(184, 144);
this.removeAllButton.Name = "removeAllButton";
this.removeAllButton.Size = new System.Drawing.Size(94, 30);
this.removeAllButton.TabIndex = 46;
this.removeAllButton.Text = "<< R&emove all";
this.removeAllButton.UseVisualStyleBackColor = true;
this.removeAllButton.Click += new System.EventHandler(this.removeAllButton_Click);
//
// removeButton
//
this.removeButton.Location = new System.Drawing.Point(184, 109);
this.removeButton.Name = "removeButton";
this.removeButton.Size = new System.Drawing.Size(93, 30);
this.removeButton.TabIndex = 45;
this.removeButton.Text = "< &Remove";
this.removeButton.UseVisualStyleBackColor = true;
this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
//
// addButton
//
this.addButton.Location = new System.Drawing.Point(184, 74);
this.addButton.Name = "addButton";
this.addButton.Size = new System.Drawing.Size(93, 30);
this.addButton.TabIndex = 44;
this.addButton.Text = "&Add >";
this.addButton.UseVisualStyleBackColor = true;
this.addButton.Click += new System.EventHandler(this.addButton_Click);
//
// selectedResultsListViewEx
//
this.selectedResultsListViewEx.AllowColumnReorder = true;
this.selectedResultsListViewEx.DoubleClickActivation = false;
this.selectedResultsListViewEx.FullRowSelect = true;
this.selectedResultsListViewEx.Location = new System.Drawing.Point(287, 31);
this.selectedResultsListViewEx.Name = "selectedResultsListViewEx";
this.selectedResultsListViewEx.Size = new System.Drawing.Size(594, 355);
this.selectedResultsListViewEx.TabIndex = 47;
this.selectedResultsListViewEx.UseCompatibleStateImageBehavior = false;
this.selectedResultsListViewEx.View = System.Windows.Forms.View.Details;
this.selectedResultsListViewEx.SubItemClicked += new Common.Forms.SubItemEventHandler(this.selectedResultsListViewEx_SubItemClicked);
this.selectedResultsListViewEx.SubItemEndEditing += new Common.Forms.SubItemEndEditingEventHandler(this.selectedResultsListViewEx_SubItemEndEditing);
//
// upButton
//
this.upButton.Location = new System.Drawing.Point(184, 236);
this.upButton.Name = "upButton";
this.upButton.Size = new System.Drawing.Size(93, 30);
this.upButton.TabIndex = 48;
this.upButton.Text = "Up";
this.upButton.UseVisualStyleBackColor = true;
this.upButton.Click += new System.EventHandler(this.upButton_Click);
//
// downButton
//
this.downButton.Location = new System.Drawing.Point(184, 272);
this.downButton.Name = "downButton";
this.downButton.Size = new System.Drawing.Size(93, 30);
this.downButton.TabIndex = 49;
this.downButton.Text = "Down";
this.downButton.UseVisualStyleBackColor = true;
this.downButton.Click += new System.EventHandler(this.downButton_Click);
//
// ResultsConfigDlg
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(893, 445);
this.Controls.Add(this.downButton);
this.Controls.Add(this.upButton);
this.Controls.Add(this.selectedResultsListViewEx);
this.Controls.Add(this.removeAllButton);
this.Controls.Add(this.removeButton);
this.Controls.Add(this.addButton);
this.Controls.Add(this.selectedResultsLabel);
this.Controls.Add(this.availableResultsLabel);
this.Controls.Add(this.availableResultsListBox);
this.Controls.Add(this.cancelButton);
this.Controls.Add(this.okButton);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Name = "ResultsConfigDlg";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "ResultsConfig";
this.Load += new System.EventHandler(this.ResultsConfig_Load);
this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ResultsConfigDlg_KeyPress);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button okButton;
private System.Windows.Forms.Button cancelButton;
private System.Windows.Forms.ListBox availableResultsListBox;
private System.Windows.Forms.Label availableResultsLabel;
private System.Windows.Forms.Label selectedResultsLabel;
private System.Windows.Forms.Button removeAllButton;
private System.Windows.Forms.Button removeButton;
private System.Windows.Forms.Button addButton;
private Common.Forms.ListViewEx selectedResultsListViewEx;
private System.Windows.Forms.Button upButton;
private System.Windows.Forms.Button downButton;
}
}
@@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
-315
View File
@@ -1,315 +0,0 @@
///
/// Copyright (c) 2016-2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using NHibernate;
using NHibernate.Criterion;
using SharedDatabase.Entities;
using ProductionTracing.Resources;
namespace ProductionTracing
{
public enum ItemSpecID
{
RefRecordId,
POrder,
Workflow,
Timestamp,
Name1,
Code1,
Name2,
Code2,
Code3,
Code4,
PartName,
PartCode,
Workstep,
Workplace,
UserName,
WstepTstamp,
Result,
}
public enum ItemCaps
{
None = 0,
RefRecord = 1,
StepRecord = 2,
Record = 4,
}
public class ItemSpec
{
///
/// Function delegate to pick a reference record and convert it to a string
///
public delegate string PrintDlgt(object x, string format, string precision, int width);
///
/// Public fields
///
public readonly ItemSpecID Uid; /// Unique Uid used to distinguish items
public readonly string Name; /// Name that can be localized to identify the item in a list
public readonly PrintDlgt PrintFn; /// Function used to convert the result to a text
public string Caption; /// User defined text printed in the column header
public string Format; /// Specifies the text generation
public string Precision; /// Specifies the text generation
public int Width; /// Specifies the text generation
readonly ItemCaps itemSpecCaps;
/// <summary> Public parameterless constructor </summary>
public ItemSpec()
{
}
/// <summary> Constructor to specify all items </summary>
public ItemSpec(ItemSpecID uid, string name, ItemCaps itemSpecCaps, PrintDlgt printFn)
{
Uid = uid;
Name = name;
PrintFn = printFn;
this.itemSpecCaps = itemSpecCaps;
///
Caption = name;
Format = "{0}";
Precision = string.Empty;
Width = 0;
}
public override string ToString()
{
return string.Format("uid={0}, name={1}, caption={2}", Uid, Name, Caption);
}
/// <summary> Copy constructor </summary>
public ItemSpec Clone()
{
ItemSpec newItem = new ItemSpec(Uid, Name, itemSpecCaps, PrintFn);
newItem.Caption = Caption;
newItem.Format = Format;
newItem.Precision = Precision;
newItem.Width = Width;
return newItem;
}
/// <summary> Safe wrapper which replaces null-s by empty strings </summary>
public string Print(object x)
{
string str = PrintFn(x, Format, Precision, Width);
return (str == null) ? string.Empty : str;
}
/// <summary> Similar to Print(), in addition embeds text into "" </summary>
public string Export(object x)
{
string str = PrintFn(x, Format, Precision, Width);
if (str == null) str = string.Empty;
if (Uid == ItemSpecID.POrder || (Uid >= ItemSpecID.Name1 && Uid == ItemSpecID.PartCode))
{
return string.Format("=\"{0}\"", str);
}
return str;
}
/// Static list of all available items
public static readonly IList<ItemSpec> AllItems;
///
/// Static constructor that initializes the list of all items
///
static ItemSpec()
{
AllItems = new List<ItemSpec>();
AllItems.Add(new ItemSpec(ItemSpecID.RefRecordId, Strings.RefRecordId, ItemCaps.RefRecord, (x, f, p, w) => FormatStr(f, ((int)x).ToString())));
AllItems.Add(new ItemSpec(ItemSpecID.POrder, Strings.Order, ItemCaps.RefRecord, (x, f, p, w) => FormatStr(f, x)));
AllItems.Add(new ItemSpec(ItemSpecID.Workflow, Strings.Workflow, ItemCaps.RefRecord, (x, f, p, w) => FormatStr(f, x)));
AllItems.Add(new ItemSpec(ItemSpecID.Timestamp, Strings.Time_stamp, ItemCaps.RefRecord, (x, f, p, w) => string.IsNullOrEmpty(f) ? ((DateTime)x).ToString() : string.Format(f, (DateTime)x)));
AllItems.Add(new ItemSpec(ItemSpecID.Name1, "Name1", ItemCaps.RefRecord, (x, f, p, w) => FormatStr(f, x)));
AllItems.Add(new ItemSpec(ItemSpecID.Code1, "Code1", ItemCaps.RefRecord, (x, f, p, w) => FormatStr(f, x)));
AllItems.Add(new ItemSpec(ItemSpecID.Name2, "Name2", ItemCaps.RefRecord, (x, f, p, w) => FormatStr(f, x)));
AllItems.Add(new ItemSpec(ItemSpecID.Code2, "Code2", ItemCaps.RefRecord, (x, f, p, w) => FormatStr(f, x)));
AllItems.Add(new ItemSpec(ItemSpecID.Code3, "Code3", ItemCaps.RefRecord, (x, f, p, w) => FormatStr(f, x)));
AllItems.Add(new ItemSpec(ItemSpecID.Code4, "Code4", ItemCaps.RefRecord, (x, f, p, w) => FormatStr(f, x)));
//AllItems.Add(new ItemSpec(ItemSpecID.PartName, Strings.Part_name, ItemCaps.RefRecord | ItemCaps.Record, (x, f, p, w) => FormatStr(f, ((Part)x).Name)));
//AllItems.Add(new ItemSpec(ItemSpecID.PartCode, Strings.Part_barcode, ItemCaps.RefRecord | ItemCaps.Record, (x, f, p, w) => FormatStr(f, x)));
//AllItems.Add(new ItemSpec(ItemSpecID.Workstep, Strings.Workstep, ItemCaps.RefRecord | ItemCaps.StepRecord, (x, f, p, w) => FormatStr(f, x is Workstep ? (x as Workstep).Name : "<null>")));
//AllItems.Add(new ItemSpec(ItemSpecID.Workplace, Strings.Workplace, ItemCaps.RefRecord | ItemCaps.StepRecord, (x, f, p, w) => FormatStr(f, x)));
//AllItems.Add(new ItemSpec(ItemSpecID.UserName, Strings.User_name, ItemCaps.RefRecord | ItemCaps.StepRecord, (x, f, p, w) => FormatStr(f, x)));
//AllItems.Add(new ItemSpec(ItemSpecID.WstepTstamp, Strings.Workstep + " " + Strings.Time_stamp,
// ItemCaps.RefRecord | ItemCaps.StepRecord, (x, f, p, w) => string.IsNullOrEmpty(f) ? ((DateTime)x).ToString() : string.Format(f, (DateTime)x)));
//AllItems.Add(new ItemSpec(ItemSpecID.Result, Strings.Result, ItemCaps.RefRecord | ItemCaps.StepRecord, (x, f, p, w) => FormatStr(f, ((int)x).ToString())));
}
public static string FormatStr(string format, object value)
{
int len;
if (string.IsNullOrEmpty(format))
{
return (string)value;
}
else if (int.TryParse(format, out len) && len > 0)
{
if (((string)value).Length >= len)
{
return ((string)value).Substring(0, len);
}
else
{
return (string)value;
}
}
else
{
return string.Format(format, value);
}
}
public PropertyProjection GetProperty(ReferenceRecord refRecord, StepRecord stepRecord, Record record)
{
switch (Uid)
{
default:
case ItemSpecID.RefRecordId: return Projections.Property(() => refRecord.Id);
case ItemSpecID.POrder: return Projections.Property(() => refRecord.POName);
case ItemSpecID.Workflow: return Projections.Property(() => refRecord.Workflow);
case ItemSpecID.Timestamp: return Projections.Property(() => refRecord.Timestamp);
case ItemSpecID.Name1: return Projections.Property(() => refRecord.Name1);
case ItemSpecID.Code1: return Projections.Property(() => refRecord.Code1);
case ItemSpecID.Name2: return Projections.Property(() => refRecord.Name2);
case ItemSpecID.Code2: return Projections.Property(() => refRecord.Code2);
case ItemSpecID.Code3: return Projections.Property(() => refRecord.Code3);
case ItemSpecID.Code4: return Projections.Property(() => refRecord.Code4);
case ItemSpecID.PartName: return Projections.Property(() => record.Name);
case ItemSpecID.PartCode: return Projections.Property(() => record.Code);
case ItemSpecID.Workstep: return Projections.Property(() => stepRecord.Workstep);
case ItemSpecID.Workplace: return Projections.Property(() => stepRecord.Workplace);
case ItemSpecID.UserName: return Projections.Property(() => stepRecord.User);
case ItemSpecID.Result: return Projections.Property(() => stepRecord.Result);
}
}
public ItemCaps GetCaps()
{
return itemSpecCaps;
}
public static ItemSpec GetItem(ItemSpecID id)
{
foreach (var item in AllItems)
if (item.Uid == id)
return item.Clone();
return null;
}
public static ItemSpec GetItem(string uidName)
{
foreach (var item in AllItems)
if (item.Uid.ToString() == uidName)
return item.Clone();
return null;
}
public static ProjectionList GetProjections(IList<ItemSpec> items, ReferenceRecord refRecord, StepRecord stepRecord, Record record)
{
ProjectionList projections = Projections.ProjectionList();
foreach (var item in items)
{
PropertyProjection projection = item.GetProperty(refRecord, stepRecord, record);
if (projection != null)
projections.Add(projection);
}
return projections;
}
public static IList<object[]> Expand(IList<object[]> data, IList<ItemSpec> items)
{
if (data.Count == 0) return data;
int iSize = data[0].Length;
int oSize = items.Count;
for (int i = 0; i < data.Count; i++)
{
object[] inArr = data[i];
object[] outArr = new object[oSize];
int srcIx = 0;
for (int dstIx = 0; dstIx < oSize; dstIx++)
{
outArr[dstIx] = inArr[srcIx++];
}
data[i] = outArr;
}
return data;
}
public static string[] ToStrArray(IList<ItemSpec> items)
{
int count = (items != null) ? items.Count : 0;
string[] result = new string[count];
for (int i = 0; i < count; i++)
{
result[i] = string.Format("{0}~{1}~{2}~{3}~{4}",
items[i].Uid,
items[i].Caption,
items[i].Format,
items[i].Precision,
items[i].Width);
}
return result;
}
public static IList<ItemSpec> FromStrArray(string[] strArray)
{
IList<ItemSpec> result = new List<ItemSpec>();
if (strArray != null)
{
for (int i = 0; i < strArray.Length; i++)
{
string[] field = strArray[i].Split(new char[] { '~' });
try
{
ItemSpec item = GetItem(field[0]);
item.Caption = field[1];
item.Format = field[2];
item.Precision = field[3];
item.Width = int.Parse(field[4]);
result.Add(item);
}
catch
{
ItemSpec item = GetItem(ItemSpecID.RefRecordId);
item.Format = string.Format("Parse error: {0}", strArray[i]);
result.Add(item);
}
}
}
return result;
}
}
}
-265
View File
@@ -1,265 +0,0 @@
///
/// Copyright (c) 2015-2022 Sensus Slovensko a.s.
///
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Xml.Serialization;
namespace ProductionTracing
{
/// <summary>
/// Class to be serialized to an XML file...
/// Public members are local settings.
/// These settings are modified by dialogs invoked by menu items
/// Edit->Preferences ... PreferencesDlg ... S1.1(language, etc. local settings), and
/// Edit->Advanced settings ... AdvancedSettingsDlg ... S1.2(spec. where bench settings are stored)
/// </summary>
[XmlRootAttribute("ProductionTracing")]
public class LocalSettings
{
static XmlSerializer serializer = XmlSerializer.FromTypes(new[] { typeof(LocalSettings) })[0];
/// Configuration file ecryption/decryption key and initialization vector
static byte[] key = new byte[] { 83, 254, 105, 64, 184, 201, 195, 127, 52, 99, 77, 45, 252, 132, 163, 156 };
static byte[] IV = new byte[] { 189, 23, 137, 56, 204, 241, 242, 118, 28, 89, 9, 198, 224, 111, 186, 125 };
/// <summary>
/// User interface language (used as CultureInfo(..) constructor argument).
/// </summary>
public string Language;
public bool IsUserLoginRequired;
/// Database settings of servers.
public string ConnectionString;
public string UsersDBConnString;
/// Statistics options
public bool TwoDim;
public string RowItemID; /// Caption of the selected row item
public string ColumnItemID; /// Caption of the selected column item (applies when TwoDim == true)
public bool FilterEnabled;
public string FilteredItemId; /// Caption of the item to be filtered
public string FilteredValue;
/// MainWnd
public int MainWndLeft;
public int MainWndTop;
public int MainWndWidth;
public int MainWndHeight;
public bool MainWndMaximized;
/// History of texts entered in ComboBoxes
public string[] Combo1History;
public string[] Combo2History;
public string[] Combo4History;
public string[] Combo5History;
public string[] Combo6History;
public string[] Combo7History;
public string[] Combo8History;
public string[] Combo9History;
/// Last configuration file name
public string LastConfigFileName;
/// Report file name history
public string LastReportFileName;
public string[] ReportFileNameHistory;
[XmlIgnore]
public int ReportFileNameHistoryCount { get { return (ReportFileNameHistory != null) ? ReportFileNameHistory.Length : 0; } }
/// Report configuration
public string[] ReportItems;
/// Parameterless constructor required by serialization
public LocalSettings() { }
public LocalSettings(bool createNew)
{
if (createNew)
{
Language = "EN";
IsUserLoginRequired = false;
#if DEBUG
ConnectionString = "SERVER=localhost; DATABASE=nanjingshared; UID=root; PASSWORD=kraken; CHARSET=utf8;";
UsersDBConnString = "SERVER=localhost; DATABASE=nanjingshared; UID=root; PASSWORD=kraken; CHARSET=utf8;";
#else
ConnectionString = "SERVER=10.116.192.200; DATABASE=nanjingshared; UID=nanjingshared; PASSWORD=C1ern4V0d4; CHARSET=utf8;";
UsersDBConnString = "SERVER=10.116.192.200; DATABASE=nanjingshared; UID=nanjingshared; PASSWORD=C1ern4V0d4; CHARSET=utf8;";
#endif
MainWndLeft = 20;
MainWndTop = 20;
MainWndWidth = 1406;
MainWndHeight = 750;
MainWndMaximized = false;
LastConfigFileName = string.Empty;
}
}
/// <summary>
/// Load public fields of this class from the XML file.
/// </summary>
/// <returns>LocalSettings object or null when Load() fails</returns>
public static LocalSettings Load(string fileName)
{
try
{
bool isEncrypted = true;
using (StreamReader reader = new StreamReader(fileName))
{
isEncrypted = !reader.ReadLine().StartsWith("<?xml version=");
reader.Close();
}
if (isEncrypted)
{
/// Write settings to a string
StringBuilder plain = new StringBuilder();
using (RijndaelManaged aes = new RijndaelManaged { Padding = PaddingMode.Zeros })
{
using (FileStream fsCrypt = new FileStream(fileName, FileMode.Open))
{
using (ICryptoTransform decryptor = aes.CreateDecryptor(key, IV))
{
using (CryptoStream cs = new CryptoStream(fsCrypt, decryptor, CryptoStreamMode.Read))
{
using (MemoryStream mStream = new MemoryStream())
{
using (var writer = new BinaryWriter(mStream))
{
int data;
while ((data = cs.ReadByte()) != -1)
{
if (data != 0) writer.Write((byte)data);
}
writer.Flush();
mStream.Position = 0;
using (var reader = new StreamReader(mStream))
{
return serializer.Deserialize(reader) as LocalSettings;
}
}
}
}
}
}
}
}
else
{
using (StreamReader reader = new StreamReader(fileName))
{
return serializer.Deserialize(reader) as LocalSettings;
}
}
}
catch (Exception e)
{
string msg = e.Message;
return null;
}
}
/// <summary>
/// Save public fields of this class to the XML file.
/// </summary>
public void Save()
{
try
{
/// Encrypt and write to file 'Program.LocalSettingsFileName'
using (RijndaelManaged aes = new RijndaelManaged { Padding = PaddingMode.Zeros })
{
using (FileStream fsCrypt = new FileStream(Program.LocalSettingsFileName, FileMode.Create))
{
using (ICryptoTransform encryptor = aes.CreateEncryptor(key, IV))
{
using (CryptoStream cs = new CryptoStream(fsCrypt, encryptor, CryptoStreamMode.Write))
{
using (MemoryStream mStream = new MemoryStream())
{
using (var writer = new StreamWriter(mStream))
{
/// Serialize and write settings to a memory stream
serializer.Serialize(writer, this);
writer.Flush();
mStream.Position = 0;
using (var reader = new StreamReader(mStream))
{
/// Encrypt and write to file 'Program.LocalSettingsFileName'
int data;
while ((data = mStream.ReadByte()) != -1) cs.WriteByte((byte)data);
}
}
}
}
}
}
}
}
catch (Exception e)
{
string msg = e.Message;
}
}
public static void PrepareCombo(System.Windows.Forms.ComboBox comboBox, string[] history)
{
if (history == null) history = new string[0];
for (int i = 0; i < history.Length; i++) comboBox.Items.Add(history[i]);
if (comboBox.Items.Count > 0) comboBox.Text = comboBox.Items[0].ToString();
}
/// <summary>
/// Updates history stored in a string array by a new latest string.
/// </summary>
/// <param name="lastStrValue">Lste entered string</param>
/// <returns>true = updated and saved</returns>
public bool UpdateHistory(string lastStrValue, ref string[] history, int maxHistoryLen = 10)
{
if (string.IsNullOrEmpty(lastStrValue)) return false;
int currentHistoryCount = (history != null) ? history.Length : 0;
int match = -1;
for (int i = 0; i < currentHistoryCount; i++)
{
if (history[i] == lastStrValue)
{
match = i;
break;
}
}
if (match >= 0 || currentHistoryCount >= maxHistoryLen)
{
/// History does not have to be (because of a match) or should not be extended (because of the lenght)
if (match < 0) match = currentHistoryCount - 1;
for (int j = match; j > 0; j--)
{
history[j] = history[j - 1];
}
history[0] = lastStrValue;
}
else
{
/// History wiil be extended, new item inserted at the beginning
string[] newHistory = new string[currentHistoryCount + 1];
newHistory[0] = lastStrValue;
for (int j = 1; j <= currentHistoryCount; j++)
{
newHistory[j] = history[j - 1];
}
history = newHistory;
}
return true;
}
}
}
-207
View File
@@ -1,207 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{328AD6D5-6E62-42FB-B348-9899F813DBD3}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ProductionTracing</RootNamespace>
<AssemblyName>ProductionTracing</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<StartupObject>ProductionTracing.Program</StartupObject>
</PropertyGroup>
<ItemGroup>
<Reference Include="FluentNHibernate, Version=2.0.3.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\FluentNHibernate.2.0.3.0\lib\net40\FluentNHibernate.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Iesi.Collections, Version=4.0.0.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
<HintPath>..\packages\Iesi.Collections.4.0.0.4000\lib\net40\Iesi.Collections.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="log4net">
<HintPath>..\packages\log4net.2.0.2\lib\net40-full\log4net.dll</HintPath>
</Reference>
<Reference Include="MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\MySql.Data.6.6.5\lib\net40\MySql.Data.dll</HintPath>
</Reference>
<Reference Include="NHibernate, Version=4.0.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
<HintPath>..\packages\NHibernate.4.0.4.4000\lib\net40\NHibernate.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Forms\MoreInfoDlg.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\MoreInfoDlg.Designer.cs">
<DependentUpon>MoreInfoDlg.cs</DependentUpon>
</Compile>
<Compile Include="Forms\NoBenchOrDatabaseDlg.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\NoBenchOrDatabaseDlg.designer.cs">
<DependentUpon>NoBenchOrDatabaseDlg.cs</DependentUpon>
</Compile>
<Compile Include="Forms\SettingsDlg.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\SettingsDlg.designer.cs">
<DependentUpon>SettingsDlg.cs</DependentUpon>
</Compile>
<Compile Include="Forms\StatisticsDlg.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\StatisticsDlg.designer.cs">
<DependentUpon>StatisticsDlg.cs</DependentUpon>
</Compile>
<Compile Include="Forms\StatisticsOptionsDlg.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\StatisticsOptionsDlg.designer.cs">
<DependentUpon>StatisticsOptionsDlg.cs</DependentUpon>
</Compile>
<Compile Include="Forms\TracingConfigDlg.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\TracingConfigDlg.designer.cs">
<DependentUpon>TracingConfigDlg.cs</DependentUpon>
</Compile>
<Compile Include="ItemSpec.cs" />
<Compile Include="LocalSettings.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="FiltersConfig.cs" />
<Compile Include="QueryResults.cs" />
<Compile Include="Resources\Strings1.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Strings.resx</DependentUpon>
</Compile>
<Compile Include="ProductionTracingWnd.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ProductionTracingWnd.Designer.cs">
<DependentUpon>ProductionTracingWnd.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="Forms\MoreInfoDlg.resx">
<DependentUpon>MoreInfoDlg.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\NoBenchOrDatabaseDlg.resx">
<DependentUpon>NoBenchOrDatabaseDlg.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\SettingsDlg.resx">
<DependentUpon>SettingsDlg.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\StatisticsDlg.resx">
<DependentUpon>StatisticsDlg.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\StatisticsOptionsDlg.resx">
<DependentUpon>StatisticsOptionsDlg.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\TracingConfigDlg.resx">
<DependentUpon>TracingConfigDlg.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="Resources\Strings.cs.resx" />
<EmbeddedResource Include="Resources\Strings.de.resx" />
<EmbeddedResource Include="Resources\Strings.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Strings1.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Resources\Strings.sk.resx">
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="ProductionTracingWnd.resx">
<DependentUpon>ProductionTracingWnd.cs</DependentUpon>
</EmbeddedResource>
<None Include="app.config" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<Folder Include="Printers\" />
</ItemGroup>
<ItemGroup>
<Content Include="SampleConfig\log4netConfig.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Common\Common.csproj">
<Project>{c8939821-ba5c-4988-a3d0-bf53b74865c7}</Project>
<Name>Common</Name>
</ProjectReference>
<ProjectReference Include="..\SharedDatabase\SharedDatabase.csproj">
<Project>{211b5e3f-9996-48a7-abde-c878dd2d71c2}</Project>
<Name>SharedDatabase</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
-971
View File
@@ -1,971 +0,0 @@
namespace ProductionTracing
{
partial class ProductionTracingWnd
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.vSplitContainer = new System.Windows.Forms.SplitContainer();
this.hSplitContainer = new System.Windows.Forms.SplitContainer();
this.filtersItemsSplitContainer = new System.Windows.Forms.SplitContainer();
this.filtersGroupBox = new System.Windows.Forms.GroupBox();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.checkBox1 = new System.Windows.Forms.CheckBox();
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.comboBox2 = new System.Windows.Forms.ComboBox();
this.checkBox2 = new System.Windows.Forms.CheckBox();
this.splitContainer3 = new System.Windows.Forms.SplitContainer();
this.groupBox3 = new System.Windows.Forms.GroupBox();
this.last30dButton = new System.Windows.Forms.Button();
this.last7dButton = new System.Windows.Forms.Button();
this.yesterdayButton = new System.Windows.Forms.Button();
this.toLabel = new System.Windows.Forms.Label();
this.toDateTimePicker = new System.Windows.Forms.DateTimePicker();
this.fromLabel = new System.Windows.Forms.Label();
this.fromDateTimePicker = new System.Windows.Forms.DateTimePicker();
this.checkBox3 = new System.Windows.Forms.CheckBox();
this.v2SplitContainer = new System.Windows.Forms.SplitContainer();
this.splitContainer8 = new System.Windows.Forms.SplitContainer();
this.groupBox8 = new System.Windows.Forms.GroupBox();
this.comboBox8 = new System.Windows.Forms.ComboBox();
this.checkBox8 = new System.Windows.Forms.CheckBox();
this.splitContainer9 = new System.Windows.Forms.SplitContainer();
this.groupBox9 = new System.Windows.Forms.GroupBox();
this.comboBox9 = new System.Windows.Forms.ComboBox();
this.checkBox9 = new System.Windows.Forms.CheckBox();
this.splitContainer4 = new System.Windows.Forms.SplitContainer();
this.groupBox4 = new System.Windows.Forms.GroupBox();
this.comboBox4 = new System.Windows.Forms.ComboBox();
this.checkBox4 = new System.Windows.Forms.CheckBox();
this.splitContainer5 = new System.Windows.Forms.SplitContainer();
this.groupBox5 = new System.Windows.Forms.GroupBox();
this.comboBox5 = new System.Windows.Forms.ComboBox();
this.checkBox5 = new System.Windows.Forms.CheckBox();
this.splitContainer6 = new System.Windows.Forms.SplitContainer();
this.groupBox6 = new System.Windows.Forms.GroupBox();
this.comboBox6 = new System.Windows.Forms.ComboBox();
this.checkBox6 = new System.Windows.Forms.CheckBox();
this.groupBox7 = new System.Windows.Forms.GroupBox();
this.comboBox7 = new System.Windows.Forms.ComboBox();
this.checkBox7 = new System.Windows.Forms.CheckBox();
this.itemsGroupBox = new System.Windows.Forms.GroupBox();
this.tabControl = new System.Windows.Forms.TabControl();
this.statisticsBtn = new System.Windows.Forms.Button();
this.printQueryResultsBtn = new System.Windows.Forms.Button();
this.exportQueryResultsBtn = new System.Windows.Forms.Button();
this.formatOfResultsBtn = new System.Windows.Forms.Button();
this.settingsBtn = new System.Windows.Forms.Button();
this.saveConfigBtn = new System.Windows.Forms.Button();
this.loadConfigBtn = new System.Windows.Forms.Button();
this.executeQueryBtn = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.vSplitContainer)).BeginInit();
this.vSplitContainer.Panel1.SuspendLayout();
this.vSplitContainer.Panel2.SuspendLayout();
this.vSplitContainer.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.hSplitContainer)).BeginInit();
this.hSplitContainer.Panel1.SuspendLayout();
this.hSplitContainer.Panel2.SuspendLayout();
this.hSplitContainer.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.filtersItemsSplitContainer)).BeginInit();
this.filtersItemsSplitContainer.Panel1.SuspendLayout();
this.filtersItemsSplitContainer.Panel2.SuspendLayout();
this.filtersItemsSplitContainer.SuspendLayout();
this.filtersGroupBox.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
this.splitContainer2.Panel1.SuspendLayout();
this.splitContainer2.Panel2.SuspendLayout();
this.splitContainer2.SuspendLayout();
this.groupBox2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit();
this.splitContainer3.Panel1.SuspendLayout();
this.splitContainer3.Panel2.SuspendLayout();
this.splitContainer3.SuspendLayout();
this.groupBox3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.v2SplitContainer)).BeginInit();
this.v2SplitContainer.Panel1.SuspendLayout();
this.v2SplitContainer.Panel2.SuspendLayout();
this.v2SplitContainer.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer8)).BeginInit();
this.splitContainer8.Panel1.SuspendLayout();
this.splitContainer8.Panel2.SuspendLayout();
this.splitContainer8.SuspendLayout();
this.groupBox8.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer9)).BeginInit();
this.splitContainer9.Panel1.SuspendLayout();
this.splitContainer9.SuspendLayout();
this.groupBox9.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit();
this.splitContainer4.Panel1.SuspendLayout();
this.splitContainer4.Panel2.SuspendLayout();
this.splitContainer4.SuspendLayout();
this.groupBox4.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).BeginInit();
this.splitContainer5.Panel1.SuspendLayout();
this.splitContainer5.Panel2.SuspendLayout();
this.splitContainer5.SuspendLayout();
this.groupBox5.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer6)).BeginInit();
this.splitContainer6.Panel1.SuspendLayout();
this.splitContainer6.Panel2.SuspendLayout();
this.splitContainer6.SuspendLayout();
this.groupBox6.SuspendLayout();
this.groupBox7.SuspendLayout();
this.SuspendLayout();
//
// vSplitContainer
//
this.vSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
this.vSplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
this.vSplitContainer.Location = new System.Drawing.Point(0, 0);
this.vSplitContainer.Name = "vSplitContainer";
//
// vSplitContainer.Panel1
//
this.vSplitContainer.Panel1.Controls.Add(this.hSplitContainer);
this.vSplitContainer.Panel1MinSize = 100;
//
// vSplitContainer.Panel2
//
this.vSplitContainer.Panel2.Controls.Add(this.statisticsBtn);
this.vSplitContainer.Panel2.Controls.Add(this.printQueryResultsBtn);
this.vSplitContainer.Panel2.Controls.Add(this.exportQueryResultsBtn);
this.vSplitContainer.Panel2.Controls.Add(this.formatOfResultsBtn);
this.vSplitContainer.Panel2.Controls.Add(this.settingsBtn);
this.vSplitContainer.Panel2.Controls.Add(this.saveConfigBtn);
this.vSplitContainer.Panel2.Controls.Add(this.loadConfigBtn);
this.vSplitContainer.Panel2.Controls.Add(this.executeQueryBtn);
this.vSplitContainer.Panel2MinSize = 100;
this.vSplitContainer.Size = new System.Drawing.Size(1390, 711);
this.vSplitContainer.SplitterDistance = 1246;
this.vSplitContainer.TabIndex = 0;
//
// hSplitContainer
//
this.hSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
this.hSplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.hSplitContainer.IsSplitterFixed = true;
this.hSplitContainer.Location = new System.Drawing.Point(0, 0);
this.hSplitContainer.Name = "hSplitContainer";
this.hSplitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// hSplitContainer.Panel1
//
this.hSplitContainer.Panel1.Controls.Add(this.filtersItemsSplitContainer);
//
// hSplitContainer.Panel2
//
this.hSplitContainer.Panel2.Controls.Add(this.tabControl);
this.hSplitContainer.Size = new System.Drawing.Size(1246, 711);
this.hSplitContainer.SplitterDistance = 285;
this.hSplitContainer.TabIndex = 0;
//
// filtersItemsSplitContainer
//
this.filtersItemsSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
this.filtersItemsSplitContainer.Location = new System.Drawing.Point(0, 0);
this.filtersItemsSplitContainer.Name = "filtersItemsSplitContainer";
//
// filtersItemsSplitContainer.Panel1
//
this.filtersItemsSplitContainer.Panel1.Controls.Add(this.filtersGroupBox);
//
// filtersItemsSplitContainer.Panel2
//
this.filtersItemsSplitContainer.Panel2.Controls.Add(this.itemsGroupBox);
this.filtersItemsSplitContainer.Size = new System.Drawing.Size(1246, 285);
this.filtersItemsSplitContainer.SplitterDistance = 623;
this.filtersItemsSplitContainer.TabIndex = 1;
//
// filtersGroupBox
//
this.filtersGroupBox.Controls.Add(this.splitContainer1);
this.filtersGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.filtersGroupBox.Location = new System.Drawing.Point(0, 0);
this.filtersGroupBox.Name = "filtersGroupBox";
this.filtersGroupBox.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.filtersGroupBox.Size = new System.Drawing.Size(623, 285);
this.filtersGroupBox.TabIndex = 0;
this.filtersGroupBox.TabStop = false;
this.filtersGroupBox.Text = "Filters";
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer1.IsSplitterFixed = true;
this.splitContainer1.Location = new System.Drawing.Point(3, 16);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.splitContainer2);
this.splitContainer1.Panel1.RightToLeft = System.Windows.Forms.RightToLeft.No;
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.splitContainer3);
this.splitContainer1.Panel2.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.splitContainer1.Size = new System.Drawing.Size(617, 266);
this.splitContainer1.SplitterDistance = 41;
this.splitContainer1.TabIndex = 0;
//
// groupBox1
//
this.groupBox1.Controls.Add(this.comboBox1);
this.groupBox1.Controls.Add(this.checkBox1);
this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox1.Location = new System.Drawing.Point(0, 0);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(120, 41);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
//
// comboBox1
//
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Location = new System.Drawing.Point(3, 17);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(114, 21);
this.comboBox1.TabIndex = 1;
//
// checkBox1
//
this.checkBox1.AutoSize = true;
this.checkBox1.Location = new System.Drawing.Point(3, 0);
this.checkBox1.Name = "checkBox1";
this.checkBox1.Size = new System.Drawing.Size(52, 17);
this.checkBox1.TabIndex = 0;
this.checkBox1.Text = "Order";
this.checkBox1.UseVisualStyleBackColor = true;
this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
//
// splitContainer2
//
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer2.IsSplitterFixed = true;
this.splitContainer2.Location = new System.Drawing.Point(0, 0);
this.splitContainer2.Name = "splitContainer2";
//
// splitContainer2.Panel1
//
this.splitContainer2.Panel1.Controls.Add(this.groupBox1);
this.splitContainer2.Panel1.RightToLeft = System.Windows.Forms.RightToLeft.No;
//
// splitContainer2.Panel2
//
this.splitContainer2.Panel2.Controls.Add(this.groupBox2);
this.splitContainer2.Panel2.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.splitContainer2.Size = new System.Drawing.Size(617, 41);
this.splitContainer2.SplitterDistance = 120;
this.splitContainer2.TabIndex = 0;
//
// groupBox2
//
this.groupBox2.Controls.Add(this.comboBox2);
this.groupBox2.Controls.Add(this.checkBox2);
this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox2.Location = new System.Drawing.Point(0, 0);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(493, 41);
this.groupBox2.TabIndex = 0;
this.groupBox2.TabStop = false;
//
// comboBox2
//
this.comboBox2.Dock = System.Windows.Forms.DockStyle.Fill;
this.comboBox2.FormattingEnabled = true;
this.comboBox2.Location = new System.Drawing.Point(3, 16);
this.comboBox2.Name = "comboBox2";
this.comboBox2.Size = new System.Drawing.Size(487, 21);
this.comboBox2.TabIndex = 1;
//
// checkBox2
//
this.checkBox2.AutoSize = true;
this.checkBox2.Location = new System.Drawing.Point(3, 0);
this.checkBox2.Name = "checkBox2";
this.checkBox2.Size = new System.Drawing.Size(71, 17);
this.checkBox2.TabIndex = 0;
this.checkBox2.Text = "Workflow";
this.checkBox2.UseVisualStyleBackColor = true;
this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged);
//
// splitContainer3
//
this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer3.IsSplitterFixed = true;
this.splitContainer3.Location = new System.Drawing.Point(0, 0);
this.splitContainer3.Name = "splitContainer3";
this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer3.Panel1
//
this.splitContainer3.Panel1.Controls.Add(this.groupBox3);
//
// splitContainer3.Panel2
//
this.splitContainer3.Panel2.Controls.Add(this.v2SplitContainer);
this.splitContainer3.Size = new System.Drawing.Size(617, 221);
this.splitContainer3.SplitterDistance = 41;
this.splitContainer3.TabIndex = 0;
//
// groupBox3
//
this.groupBox3.Controls.Add(this.last30dButton);
this.groupBox3.Controls.Add(this.last7dButton);
this.groupBox3.Controls.Add(this.yesterdayButton);
this.groupBox3.Controls.Add(this.toLabel);
this.groupBox3.Controls.Add(this.toDateTimePicker);
this.groupBox3.Controls.Add(this.fromLabel);
this.groupBox3.Controls.Add(this.fromDateTimePicker);
this.groupBox3.Controls.Add(this.checkBox3);
this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox3.Location = new System.Drawing.Point(0, 0);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(617, 41);
this.groupBox3.TabIndex = 0;
this.groupBox3.TabStop = false;
//
// last30dButton
//
this.last30dButton.Location = new System.Drawing.Point(553, 15);
this.last30dButton.Name = "last30dButton";
this.last30dButton.Size = new System.Drawing.Size(62, 23);
this.last30dButton.TabIndex = 11;
this.last30dButton.Text = "Last 30 d.";
this.last30dButton.UseVisualStyleBackColor = true;
//
// last7dButton
//
this.last7dButton.Location = new System.Drawing.Point(486, 15);
this.last7dButton.Name = "last7dButton";
this.last7dButton.Size = new System.Drawing.Size(62, 23);
this.last7dButton.TabIndex = 10;
this.last7dButton.Text = "Last 7 d.";
this.last7dButton.UseVisualStyleBackColor = true;
//
// yesterdayButton
//
this.yesterdayButton.Location = new System.Drawing.Point(419, 15);
this.yesterdayButton.Name = "yesterdayButton";
this.yesterdayButton.Size = new System.Drawing.Size(62, 23);
this.yesterdayButton.TabIndex = 9;
this.yesterdayButton.Text = "Yesterday";
this.yesterdayButton.UseVisualStyleBackColor = true;
//
// toLabel
//
this.toLabel.AutoSize = true;
this.toLabel.Location = new System.Drawing.Point(225, 20);
this.toLabel.Name = "toLabel";
this.toLabel.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.toLabel.Size = new System.Drawing.Size(20, 13);
this.toLabel.TabIndex = 8;
this.toLabel.Text = "To";
//
// toDateTimePicker
//
this.toDateTimePicker.Location = new System.Drawing.Point(262, 17);
this.toDateTimePicker.Name = "toDateTimePicker";
this.toDateTimePicker.Size = new System.Drawing.Size(151, 20);
this.toDateTimePicker.TabIndex = 7;
//
// fromLabel
//
this.fromLabel.AutoSize = true;
this.fromLabel.Location = new System.Drawing.Point(23, 20);
this.fromLabel.Name = "fromLabel";
this.fromLabel.Size = new System.Drawing.Size(30, 13);
this.fromLabel.TabIndex = 6;
this.fromLabel.Text = "From";
//
// fromDateTimePicker
//
this.fromDateTimePicker.Location = new System.Drawing.Point(59, 17);
this.fromDateTimePicker.Name = "fromDateTimePicker";
this.fromDateTimePicker.Size = new System.Drawing.Size(151, 20);
this.fromDateTimePicker.TabIndex = 5;
//
// checkBox3
//
this.checkBox3.AutoSize = true;
this.checkBox3.Location = new System.Drawing.Point(3, 0);
this.checkBox3.Name = "checkBox3";
this.checkBox3.Size = new System.Drawing.Size(92, 17);
this.checkBox3.TabIndex = 0;
this.checkBox3.Text = "Date and time";
this.checkBox3.UseVisualStyleBackColor = true;
this.checkBox3.CheckedChanged += new System.EventHandler(this.checkBox3_CheckedChanged);
//
// v2SplitContainer
//
this.v2SplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
this.v2SplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.v2SplitContainer.IsSplitterFixed = true;
this.v2SplitContainer.Location = new System.Drawing.Point(0, 0);
this.v2SplitContainer.Name = "v2SplitContainer";
//
// v2SplitContainer.Panel1
//
this.v2SplitContainer.Panel1.Controls.Add(this.splitContainer8);
//
// v2SplitContainer.Panel2
//
this.v2SplitContainer.Panel2.Controls.Add(this.splitContainer4);
this.v2SplitContainer.Size = new System.Drawing.Size(617, 176);
this.v2SplitContainer.SplitterDistance = 120;
this.v2SplitContainer.TabIndex = 0;
//
// splitContainer8
//
this.splitContainer8.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer8.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer8.IsSplitterFixed = true;
this.splitContainer8.Location = new System.Drawing.Point(0, 0);
this.splitContainer8.Name = "splitContainer8";
this.splitContainer8.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer8.Panel1
//
this.splitContainer8.Panel1.Controls.Add(this.groupBox8);
//
// splitContainer8.Panel2
//
this.splitContainer8.Panel2.Controls.Add(this.splitContainer9);
this.splitContainer8.Size = new System.Drawing.Size(120, 176);
this.splitContainer8.SplitterDistance = 41;
this.splitContainer8.TabIndex = 0;
//
// groupBox8
//
this.groupBox8.Controls.Add(this.comboBox8);
this.groupBox8.Controls.Add(this.checkBox8);
this.groupBox8.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox8.Location = new System.Drawing.Point(0, 0);
this.groupBox8.Name = "groupBox8";
this.groupBox8.Size = new System.Drawing.Size(120, 41);
this.groupBox8.TabIndex = 0;
this.groupBox8.TabStop = false;
//
// comboBox8
//
this.comboBox8.FormattingEnabled = true;
this.comboBox8.Location = new System.Drawing.Point(3, 17);
this.comboBox8.Name = "comboBox8";
this.comboBox8.Size = new System.Drawing.Size(114, 21);
this.comboBox8.TabIndex = 1;
//
// checkBox8
//
this.checkBox8.AutoSize = true;
this.checkBox8.Location = new System.Drawing.Point(3, 0);
this.checkBox8.Name = "checkBox8";
this.checkBox8.Size = new System.Drawing.Size(115, 17);
this.checkBox8.TabIndex = 0;
this.checkBox8.Text = "Housing part name";
this.checkBox8.UseVisualStyleBackColor = true;
this.checkBox8.CheckedChanged += new System.EventHandler(this.checkBox8_CheckedChanged);
//
// splitContainer9
//
this.splitContainer9.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer9.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer9.IsSplitterFixed = true;
this.splitContainer9.Location = new System.Drawing.Point(0, 0);
this.splitContainer9.Name = "splitContainer9";
this.splitContainer9.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer9.Panel1
//
this.splitContainer9.Panel1.Controls.Add(this.groupBox9);
this.splitContainer9.Size = new System.Drawing.Size(120, 131);
this.splitContainer9.SplitterDistance = 41;
this.splitContainer9.TabIndex = 0;
//
// groupBox9
//
this.groupBox9.Controls.Add(this.comboBox9);
this.groupBox9.Controls.Add(this.checkBox9);
this.groupBox9.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox9.Location = new System.Drawing.Point(0, 0);
this.groupBox9.Name = "groupBox9";
this.groupBox9.Size = new System.Drawing.Size(120, 41);
this.groupBox9.TabIndex = 0;
this.groupBox9.TabStop = false;
//
// comboBox9
//
this.comboBox9.FormattingEnabled = true;
this.comboBox9.Location = new System.Drawing.Point(3, 17);
this.comboBox9.Name = "comboBox9";
this.comboBox9.Size = new System.Drawing.Size(114, 21);
this.comboBox9.TabIndex = 1;
//
// checkBox9
//
this.checkBox9.AutoSize = true;
this.checkBox9.Location = new System.Drawing.Point(3, 0);
this.checkBox9.Name = "checkBox9";
this.checkBox9.Size = new System.Drawing.Size(121, 17);
this.checkBox9.TabIndex = 0;
this.checkBox9.Text = "eRegister part name";
this.checkBox9.UseVisualStyleBackColor = true;
this.checkBox9.CheckedChanged += new System.EventHandler(this.checkBox9_CheckedChanged);
//
// splitContainer4
//
this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer4.IsSplitterFixed = true;
this.splitContainer4.Location = new System.Drawing.Point(0, 0);
this.splitContainer4.Name = "splitContainer4";
this.splitContainer4.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer4.Panel1
//
this.splitContainer4.Panel1.Controls.Add(this.groupBox4);
//
// splitContainer4.Panel2
//
this.splitContainer4.Panel2.Controls.Add(this.splitContainer5);
this.splitContainer4.Size = new System.Drawing.Size(493, 176);
this.splitContainer4.SplitterDistance = 41;
this.splitContainer4.TabIndex = 0;
//
// groupBox4
//
this.groupBox4.Controls.Add(this.comboBox4);
this.groupBox4.Controls.Add(this.checkBox4);
this.groupBox4.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox4.Location = new System.Drawing.Point(0, 0);
this.groupBox4.Name = "groupBox4";
this.groupBox4.Size = new System.Drawing.Size(493, 41);
this.groupBox4.TabIndex = 0;
this.groupBox4.TabStop = false;
//
// comboBox4
//
this.comboBox4.FormattingEnabled = true;
this.comboBox4.Location = new System.Drawing.Point(3, 17);
this.comboBox4.Name = "comboBox4";
this.comboBox4.Size = new System.Drawing.Size(200, 21);
this.comboBox4.TabIndex = 1;
//
// checkBox4
//
this.checkBox4.AutoSize = true;
this.checkBox4.Location = new System.Drawing.Point(3, 0);
this.checkBox4.Name = "checkBox4";
this.checkBox4.Size = new System.Drawing.Size(88, 17);
this.checkBox4.TabIndex = 0;
this.checkBox4.Text = "Housing S/N";
this.checkBox4.UseVisualStyleBackColor = true;
this.checkBox4.CheckedChanged += new System.EventHandler(this.checkBox4_CheckedChanged);
//
// splitContainer5
//
this.splitContainer5.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer5.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer5.IsSplitterFixed = true;
this.splitContainer5.Location = new System.Drawing.Point(0, 0);
this.splitContainer5.Name = "splitContainer5";
this.splitContainer5.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer5.Panel1
//
this.splitContainer5.Panel1.Controls.Add(this.groupBox5);
//
// splitContainer5.Panel2
//
this.splitContainer5.Panel2.Controls.Add(this.splitContainer6);
this.splitContainer5.Size = new System.Drawing.Size(493, 131);
this.splitContainer5.SplitterDistance = 41;
this.splitContainer5.TabIndex = 0;
//
// groupBox5
//
this.groupBox5.Controls.Add(this.comboBox5);
this.groupBox5.Controls.Add(this.checkBox5);
this.groupBox5.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox5.Location = new System.Drawing.Point(0, 0);
this.groupBox5.Name = "groupBox5";
this.groupBox5.Size = new System.Drawing.Size(493, 41);
this.groupBox5.TabIndex = 0;
this.groupBox5.TabStop = false;
//
// comboBox5
//
this.comboBox5.FormattingEnabled = true;
this.comboBox5.Location = new System.Drawing.Point(3, 17);
this.comboBox5.Name = "comboBox5";
this.comboBox5.Size = new System.Drawing.Size(200, 21);
this.comboBox5.TabIndex = 2;
//
// checkBox5
//
this.checkBox5.AutoSize = true;
this.checkBox5.Location = new System.Drawing.Point(3, 0);
this.checkBox5.Name = "checkBox5";
this.checkBox5.Size = new System.Drawing.Size(109, 17);
this.checkBox5.TabIndex = 0;
this.checkBox5.Text = "eRegister number";
this.checkBox5.UseVisualStyleBackColor = true;
this.checkBox5.CheckedChanged += new System.EventHandler(this.checkBox5_CheckedChanged);
//
// splitContainer6
//
this.splitContainer6.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer6.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer6.IsSplitterFixed = true;
this.splitContainer6.Location = new System.Drawing.Point(0, 0);
this.splitContainer6.Name = "splitContainer6";
this.splitContainer6.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer6.Panel1
//
this.splitContainer6.Panel1.Controls.Add(this.groupBox6);
//
// splitContainer6.Panel2
//
this.splitContainer6.Panel2.Controls.Add(this.groupBox7);
this.splitContainer6.Size = new System.Drawing.Size(493, 86);
this.splitContainer6.SplitterDistance = 41;
this.splitContainer6.TabIndex = 0;
//
// groupBox6
//
this.groupBox6.Controls.Add(this.comboBox6);
this.groupBox6.Controls.Add(this.checkBox6);
this.groupBox6.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox6.Location = new System.Drawing.Point(0, 0);
this.groupBox6.Name = "groupBox6";
this.groupBox6.Size = new System.Drawing.Size(493, 41);
this.groupBox6.TabIndex = 0;
this.groupBox6.TabStop = false;
//
// comboBox6
//
this.comboBox6.FormattingEnabled = true;
this.comboBox6.Location = new System.Drawing.Point(3, 17);
this.comboBox6.Name = "comboBox6";
this.comboBox6.Size = new System.Drawing.Size(200, 21);
this.comboBox6.TabIndex = 2;
//
// checkBox6
//
this.checkBox6.AutoSize = true;
this.checkBox6.Location = new System.Drawing.Point(3, 0);
this.checkBox6.Name = "checkBox6";
this.checkBox6.Size = new System.Drawing.Size(90, 17);
this.checkBox6.TabIndex = 0;
this.checkBox6.Text = "Serial number";
this.checkBox6.UseVisualStyleBackColor = true;
this.checkBox6.CheckedChanged += new System.EventHandler(this.checkBox6_CheckedChanged);
//
// groupBox7
//
this.groupBox7.Controls.Add(this.comboBox7);
this.groupBox7.Controls.Add(this.checkBox7);
this.groupBox7.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox7.Location = new System.Drawing.Point(0, 0);
this.groupBox7.Name = "groupBox7";
this.groupBox7.Size = new System.Drawing.Size(493, 41);
this.groupBox7.TabIndex = 0;
this.groupBox7.TabStop = false;
//
// comboBox7
//
this.comboBox7.FormattingEnabled = true;
this.comboBox7.Location = new System.Drawing.Point(3, 17);
this.comboBox7.Name = "comboBox7";
this.comboBox7.Size = new System.Drawing.Size(200, 21);
this.comboBox7.TabIndex = 2;
//
// checkBox7
//
this.checkBox7.AutoSize = true;
this.checkBox7.Location = new System.Drawing.Point(3, 0);
this.checkBox7.Name = "checkBox7";
this.checkBox7.Size = new System.Drawing.Size(94, 17);
this.checkBox7.TabIndex = 0;
this.checkBox7.Text = "Radio address";
this.checkBox7.UseVisualStyleBackColor = true;
this.checkBox7.CheckedChanged += new System.EventHandler(this.checkBox7_CheckedChanged);
//
// itemsGroupBox
//
this.itemsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.itemsGroupBox.Location = new System.Drawing.Point(0, 0);
this.itemsGroupBox.Name = "itemsGroupBox";
this.itemsGroupBox.Size = new System.Drawing.Size(619, 285);
this.itemsGroupBox.TabIndex = 0;
this.itemsGroupBox.TabStop = false;
this.itemsGroupBox.Text = "Items";
//
// tabControl
//
this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabControl.Location = new System.Drawing.Point(0, 0);
this.tabControl.Name = "tabControl";
this.tabControl.SelectedIndex = 0;
this.tabControl.Size = new System.Drawing.Size(1246, 422);
this.tabControl.TabIndex = 1;
this.tabControl.SelectedIndexChanged += new System.EventHandler(this.tabControl_SelectedIndexChanged);
//
// statisticsBtn
//
this.statisticsBtn.Location = new System.Drawing.Point(29, 452);
this.statisticsBtn.Name = "statisticsBtn";
this.statisticsBtn.Size = new System.Drawing.Size(83, 41);
this.statisticsBtn.TabIndex = 11;
this.statisticsBtn.Text = "Statistics";
this.statisticsBtn.UseVisualStyleBackColor = true;
this.statisticsBtn.Click += new System.EventHandler(this.statisticsBtn_Click);
//
// printQueryResultsBtn
//
this.printQueryResultsBtn.Enabled = false;
this.printQueryResultsBtn.Location = new System.Drawing.Point(8, 396);
this.printQueryResultsBtn.Name = "printQueryResultsBtn";
this.printQueryResultsBtn.Size = new System.Drawing.Size(125, 28);
this.printQueryResultsBtn.TabIndex = 10;
this.printQueryResultsBtn.Text = "Print query results";
this.printQueryResultsBtn.UseVisualStyleBackColor = true;
this.printQueryResultsBtn.Click += new System.EventHandler(this.printQueryResultsBtn_Click);
//
// exportQueryResultsBtn
//
this.exportQueryResultsBtn.Location = new System.Drawing.Point(8, 364);
this.exportQueryResultsBtn.Name = "exportQueryResultsBtn";
this.exportQueryResultsBtn.Size = new System.Drawing.Size(125, 28);
this.exportQueryResultsBtn.TabIndex = 9;
this.exportQueryResultsBtn.Text = "Export query results";
this.exportQueryResultsBtn.UseVisualStyleBackColor = true;
this.exportQueryResultsBtn.Click += new System.EventHandler(this.exportQueryResultsBtn_Click);
//
// formatOfResultsBtn
//
this.formatOfResultsBtn.Location = new System.Drawing.Point(8, 126);
this.formatOfResultsBtn.Name = "formatOfResultsBtn";
this.formatOfResultsBtn.Size = new System.Drawing.Size(125, 28);
this.formatOfResultsBtn.TabIndex = 4;
this.formatOfResultsBtn.Text = "Format of results";
this.formatOfResultsBtn.UseVisualStyleBackColor = true;
this.formatOfResultsBtn.Click += new System.EventHandler(this.formatOfResultsBtn_Click);
//
// settingsBtn
//
this.settingsBtn.Location = new System.Drawing.Point(8, 12);
this.settingsBtn.Name = "settingsBtn";
this.settingsBtn.Size = new System.Drawing.Size(125, 33);
this.settingsBtn.TabIndex = 0;
this.settingsBtn.Text = "Settings";
this.settingsBtn.UseVisualStyleBackColor = true;
this.settingsBtn.Click += new System.EventHandler(this.settingsBtn_Click);
//
// saveConfigBtn
//
this.saveConfigBtn.Location = new System.Drawing.Point(8, 157);
this.saveConfigBtn.Name = "saveConfigBtn";
this.saveConfigBtn.Size = new System.Drawing.Size(125, 28);
this.saveConfigBtn.TabIndex = 5;
this.saveConfigBtn.Text = "Save configuration";
this.saveConfigBtn.UseVisualStyleBackColor = true;
this.saveConfigBtn.Click += new System.EventHandler(this.saveConfigBtn_Click);
//
// loadConfigBtn
//
this.loadConfigBtn.Location = new System.Drawing.Point(8, 188);
this.loadConfigBtn.Name = "loadConfigBtn";
this.loadConfigBtn.Size = new System.Drawing.Size(125, 28);
this.loadConfigBtn.TabIndex = 6;
this.loadConfigBtn.Text = "Load configuration";
this.loadConfigBtn.UseVisualStyleBackColor = true;
this.loadConfigBtn.Click += new System.EventHandler(this.loadConfigBtn_Click);
//
// executeQueryBtn
//
this.executeQueryBtn.Location = new System.Drawing.Point(29, 268);
this.executeQueryBtn.Name = "executeQueryBtn";
this.executeQueryBtn.Size = new System.Drawing.Size(83, 41);
this.executeQueryBtn.TabIndex = 7;
this.executeQueryBtn.Text = "Execute query";
this.executeQueryBtn.UseVisualStyleBackColor = true;
this.executeQueryBtn.Click += new System.EventHandler(this.executeQueryBtn_Click);
//
// ProductionTracingWnd
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1390, 711);
this.Controls.Add(this.vSplitContainer);
this.Name = "ProductionTracingWnd";
this.Text = "Production Tracing";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ProductionTracingWnd_FormClosing);
this.Load += new System.EventHandler(this.ProductionTracingWnd_Load);
this.vSplitContainer.Panel1.ResumeLayout(false);
this.vSplitContainer.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.vSplitContainer)).EndInit();
this.vSplitContainer.ResumeLayout(false);
this.hSplitContainer.Panel1.ResumeLayout(false);
this.hSplitContainer.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.hSplitContainer)).EndInit();
this.hSplitContainer.ResumeLayout(false);
this.filtersItemsSplitContainer.Panel1.ResumeLayout(false);
this.filtersItemsSplitContainer.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.filtersItemsSplitContainer)).EndInit();
this.filtersItemsSplitContainer.ResumeLayout(false);
this.filtersGroupBox.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.splitContainer2.Panel1.ResumeLayout(false);
this.splitContainer2.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
this.splitContainer2.ResumeLayout(false);
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.splitContainer3.Panel1.ResumeLayout(false);
this.splitContainer3.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit();
this.splitContainer3.ResumeLayout(false);
this.groupBox3.ResumeLayout(false);
this.groupBox3.PerformLayout();
this.v2SplitContainer.Panel1.ResumeLayout(false);
this.v2SplitContainer.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.v2SplitContainer)).EndInit();
this.v2SplitContainer.ResumeLayout(false);
this.splitContainer8.Panel1.ResumeLayout(false);
this.splitContainer8.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer8)).EndInit();
this.splitContainer8.ResumeLayout(false);
this.groupBox8.ResumeLayout(false);
this.groupBox8.PerformLayout();
this.splitContainer9.Panel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer9)).EndInit();
this.splitContainer9.ResumeLayout(false);
this.groupBox9.ResumeLayout(false);
this.groupBox9.PerformLayout();
this.splitContainer4.Panel1.ResumeLayout(false);
this.splitContainer4.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit();
this.splitContainer4.ResumeLayout(false);
this.groupBox4.ResumeLayout(false);
this.groupBox4.PerformLayout();
this.splitContainer5.Panel1.ResumeLayout(false);
this.splitContainer5.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).EndInit();
this.splitContainer5.ResumeLayout(false);
this.groupBox5.ResumeLayout(false);
this.groupBox5.PerformLayout();
this.splitContainer6.Panel1.ResumeLayout(false);
this.splitContainer6.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer6)).EndInit();
this.splitContainer6.ResumeLayout(false);
this.groupBox6.ResumeLayout(false);
this.groupBox6.PerformLayout();
this.groupBox7.ResumeLayout(false);
this.groupBox7.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.SplitContainer vSplitContainer;
private System.Windows.Forms.SplitContainer hSplitContainer;
private System.Windows.Forms.Button saveConfigBtn;
private System.Windows.Forms.Button loadConfigBtn;
private System.Windows.Forms.Button executeQueryBtn;
private System.Windows.Forms.Button settingsBtn;
private System.Windows.Forms.GroupBox filtersGroupBox;
private System.Windows.Forms.Button exportQueryResultsBtn;
private System.Windows.Forms.Button formatOfResultsBtn;
private System.Windows.Forms.Button printQueryResultsBtn;
private System.Windows.Forms.Button statisticsBtn;
private System.Windows.Forms.TabControl tabControl;
private System.Windows.Forms.Button wizard2Button;
private System.Windows.Forms.Button wizard3Button;
private System.Windows.Forms.SplitContainer filtersItemsSplitContainer;
private System.Windows.Forms.GroupBox itemsGroupBox;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.SplitContainer splitContainer2;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.CheckBox checkBox1;
private System.Windows.Forms.CheckBox checkBox2;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.ComboBox comboBox2;
private System.Windows.Forms.SplitContainer splitContainer3;
private System.Windows.Forms.GroupBox groupBox3;
private System.Windows.Forms.Button last30dButton;
private System.Windows.Forms.Button last7dButton;
private System.Windows.Forms.Button yesterdayButton;
private System.Windows.Forms.Label toLabel;
private System.Windows.Forms.DateTimePicker toDateTimePicker;
private System.Windows.Forms.Label fromLabel;
private System.Windows.Forms.DateTimePicker fromDateTimePicker;
private System.Windows.Forms.CheckBox checkBox3;
private System.Windows.Forms.SplitContainer splitContainer4;
private System.Windows.Forms.GroupBox groupBox4;
private System.Windows.Forms.CheckBox checkBox4;
private System.Windows.Forms.SplitContainer splitContainer5;
private System.Windows.Forms.GroupBox groupBox5;
private System.Windows.Forms.CheckBox checkBox5;
private System.Windows.Forms.SplitContainer splitContainer6;
private System.Windows.Forms.GroupBox groupBox6;
private System.Windows.Forms.CheckBox checkBox6;
private System.Windows.Forms.GroupBox groupBox7;
private System.Windows.Forms.CheckBox checkBox7;
private System.Windows.Forms.ComboBox comboBox4;
private System.Windows.Forms.ComboBox comboBox5;
private System.Windows.Forms.ComboBox comboBox6;
private System.Windows.Forms.ComboBox comboBox7;
private System.Windows.Forms.SplitContainer v2SplitContainer;
private System.Windows.Forms.SplitContainer splitContainer8;
private System.Windows.Forms.GroupBox groupBox8;
private System.Windows.Forms.ComboBox comboBox8;
private System.Windows.Forms.CheckBox checkBox8;
private System.Windows.Forms.SplitContainer splitContainer9;
private System.Windows.Forms.GroupBox groupBox9;
private System.Windows.Forms.ComboBox comboBox9;
private System.Windows.Forms.CheckBox checkBox9;
}
}
-640
View File
@@ -1,640 +0,0 @@
///
/// Copyright (c) 2016-2022 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using Common;
using Common.Forms;
using SharedDatabase;
using SharedDatabase.Entities;
using NHibernate;
using NHibernate.Criterion;
using ProductionTracing.Resources;
using System.Globalization;
namespace ProductionTracing
{
public partial class ProductionTracingWnd : Form
{
const string OpenFileDlg_SaveFileDlg_Filter = "{0} (*.que)|*.que|{1} (*.*)|*.*";
string[] args;
FiltersConfig filtersConfig; /// Serializable configuration of filters and displayed results
QueryResults currentQR;
GroupBox[] groupBoxes;
CheckBox[] checkBoxes;
ComboBox[] comboBoxes;
public ProductionTracingWnd(string[] args = null)
{
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();
/// enum Filter values 0 1 2 3 4 5 6 7 8
groupBoxes = new GroupBox[] { groupBox1, groupBox2, groupBox3, groupBox4, groupBox5, groupBox6, groupBox7, groupBox8, groupBox9 };
checkBoxes = new CheckBox[] { checkBox1, checkBox2, checkBox3, checkBox4, checkBox5, checkBox6, checkBox7, checkBox8, checkBox9 };
comboBoxes = new ComboBox[] { comboBox1, comboBox2, null, comboBox4, comboBox5, comboBox6, comboBox7, comboBox8, comboBox9 };
LocalSettings.PrepareCombo(comboBox1, Program.LocalSettings.Combo1History);
LocalSettings.PrepareCombo(comboBox2, Program.LocalSettings.Combo2History);
LocalSettings.PrepareCombo(comboBox4, Program.LocalSettings.Combo4History);
LocalSettings.PrepareCombo(comboBox5, Program.LocalSettings.Combo5History);
LocalSettings.PrepareCombo(comboBox6, Program.LocalSettings.Combo6History);
LocalSettings.PrepareCombo(comboBox7, Program.LocalSettings.Combo7History);
LocalSettings.PrepareCombo(comboBox8, Program.LocalSettings.Combo8History);
LocalSettings.PrepareCombo(comboBox9, Program.LocalSettings.Combo9History);
for (int i = 0; i < Math.Min(groupBoxes.Length, checkBoxes.Length); i++)
{
ManageCheckGroupBox(checkBoxes[i],groupBoxes[i]);
}
this.args = args;
filtersConfig = new FiltersConfig();
}
private void ProductionTracingWnd_Load(object sender, EventArgs e)
{
LocalSettings ls = Program.LocalSettings;
Width = (ls.MainWndWidth > 0) ? ls.MainWndWidth : 1000;
Height = (ls.MainWndHeight > 0) ? ls.MainWndHeight : 750;
Left = (ls.MainWndLeft != 0) ? ls.MainWndLeft : 50;
Top = (ls.MainWndTop != 0) ? ls.MainWndTop : 50;
Localize();
if (args != null && args.Length == 1 && args[0].IndexOf(".que") == args[0].Length - 4)
LoadConfigFromFile(args[0]);
else if (!string.IsNullOrEmpty(Program.LocalSettings.LastConfigFileName))
LoadConfigFromFile(Program.LocalSettings.LastConfigFileName);
else
Text = string.Format("{0} ver.{1}", Strings.Production_Tracing, Program.Version);
}
/// <summary>
/// Localize strings
/// </summary>
void Localize()
{
filtersGroupBox.Text = Strings.Filters;
itemsGroupBox.Text = Strings.Items;
settingsBtn.Text = Strings.Settings;
loadConfigBtn.Text = Strings.Load_configuration;
saveConfigBtn.Text = Strings.Save_configuration;
executeQueryBtn.Text = Strings.Execute_query;
formatOfResultsBtn.Text = Strings.Format_of_results;
exportQueryResultsBtn.Text = Strings.Export_query_results;
printQueryResultsBtn.Text = Strings.Print_query_results;
statisticsBtn.Text = Strings.Statistics;
}
/// <summary>
/// Open 'Settings' dialog and update UI
/// </summary>
private void settingsBtn_Click(object sender, EventArgs e)
{
if (new Forms.SettingsDlg(Program.LocalSettings).ShowDialog() == DialogResult.OK)
{
/// TODO (connection string might have changed)
}
}
/// <summary>
/// Load configuration from a file
/// </summary>
private void loadConfigBtn_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = string.Format(OpenFileDlg_SaveFileDlg_Filter, Strings.Query_files, Strings.All_files);
if (dlg.ShowDialog() == DialogResult.OK)
{
LoadConfigFromFile(dlg.FileName);
}
}
/// <summary>
/// Load configuration from a file and apply it
/// </summary>
/// <param name="fileName">Configuration file name</param>
void LoadConfigFromFile(string fileName)
{
FiltersConfig localFiltersConfig = FiltersConfig.Load(fileName);
if (localFiltersConfig != null)
{
filtersConfig = localFiltersConfig;
/// TODO
}
Program.LocalSettings.LastConfigFileName = fileName;
Program.LocalSettings.Save();
Text = string.Format("{0} ver.{1} ({2})", Strings.Production_Tracing, Program.Version, Program.LocalSettings.LastConfigFileName);
}
private void saveConfigBtn_Click(object sender, EventArgs e)
{
/// Save the file
SaveFileDialog dlg = new SaveFileDialog();
if (!string.IsNullOrEmpty(Program.LocalSettings.LastConfigFileName))
{
dlg.FileName = Program.LocalSettings.LastConfigFileName;
}
dlg.Filter = string.Format(OpenFileDlg_SaveFileDlg_Filter, Strings.Query_files, Strings.All_files);
if (dlg.ShowDialog() == DialogResult.OK)
{
filtersConfig.Save(dlg.FileName);
Program.LocalSettings.LastConfigFileName = dlg.FileName;
Program.LocalSettings.Save();
Text = string.Format("{0} ver.{1} ({2})", Strings.Production_Tracing, Program.Version, Program.LocalSettings.LastConfigFileName);
}
}
void UpdateAndSaveHistory()
{
LocalSettings ls = Program.LocalSettings;
if (checkBox1.Checked) ls.UpdateHistory(comboBox1.Text, ref ls.Combo1History);
if (checkBox2.Checked) ls.UpdateHistory(comboBox2.Text, ref ls.Combo2History);
if (checkBox4.Checked) ls.UpdateHistory(comboBox4.Text, ref ls.Combo4History);
if (checkBox5.Checked) ls.UpdateHistory(comboBox5.Text, ref ls.Combo5History);
if (checkBox6.Checked) ls.UpdateHistory(comboBox6.Text, ref ls.Combo6History);
if (checkBox7.Checked) ls.UpdateHistory(comboBox7.Text, ref ls.Combo7History);
if (checkBox8.Checked) ls.UpdateHistory(comboBox8.Text, ref ls.Combo8History);
if (checkBox9.Checked) ls.UpdateHistory(comboBox9.Text, ref ls.Combo9History);
ls.Save();
}
private void executeQueryBtn_Click(object sender, EventArgs e)
{
UpdateAndSaveHistory();
Thread thread = new Thread(() => Application.Run(new Common.Forms.ModelessForm(Strings.searching)));
thread.CurrentCulture = CultureInfo.CurrentCulture;
thread.CurrentUICulture = CultureInfo.CurrentUICulture;
thread.Start();
string currentConnStr = Program.LocalSettings.ConnectionString;
string[] elems = currentConnStr.Split(new char[] { '=', ';' });
string description = string.Format("{1}/{2}", tabControl.TabPages.Count + 1, (elems.Length > 1 ? elems[1] : "-"), (elems.Length > 3 ? elems[3] : "-"));
currentQR = new QueryResults(currentConnStr, description);
ISession session = null;
try
{
/// Load query result items
IList<ItemSpec> items = ItemSpec.FromStrArray(filtersConfig.ResultItems);
items.Insert(0, new ItemSpec(ItemSpecID.RefRecordId, Strings.RefRecordId, ItemCaps.RefRecord, (x, f, p, w) => ((int)x).ToString()));
/// New database session
using (session = TracingDB.CreateSession(currentConnStr))
{
currentQR.Results = DoOneQuery(session, items);
currentQR.ProjectedItems = items;
session.Close();
}
}
catch (Exception exc)
{
if (session != null && session.IsOpen) session.Close();
Common.Forms.ModelessForm.CloseForm();
MessageBox.Show(exc.Message,
Strings.Error,
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
return;
}
currentQR.EndTime = DateTime.Now;
TabPage newTabPage = CreateTabPage(currentQR);
tabControl.TabPages.Add(newTabPage);
tabControl.SelectTab(newTabPage);
Common.Forms.ModelessForm.CloseForm();
}
/// <summary>
/// Execute a chain of all filters once (without a loop)
/// </summary>
/// <param name="items">Result items</param>
IList<object[]> DoOneQuery(ISession session, IList<ItemSpec> items)
{
ReferenceRecord refRecord = null;
IQueryOver<ReferenceRecord, ReferenceRecord> query = session.QueryOver<ReferenceRecord>(() => refRecord);
int ix;
ix = (int)Idx.Code1; if (checkBoxes[ix].Checked) query = query.Where(x => x.Code1 == comboBoxes[ix].Text);
ix = (int)Idx.Code2; if (checkBoxes[ix].Checked) query = query.Where(x => x.Code2 == comboBoxes[ix].Text);
ix = (int)Idx.Code3; if (checkBoxes[ix].Checked) query = query.Where(x => x.Code3 == comboBoxes[ix].Text);
ix = (int)Idx.Code4; if (checkBoxes[ix].Checked) query = query.Where(x => x.Code4 == comboBoxes[ix].Text);
ix = (int)Idx.Order; if (checkBoxes[ix].Checked) query = query.Where(x => x.POName == comboBoxes[ix].Text);
ix = (int)Idx.Name1; if (checkBoxes[ix].Checked) query = query.Where(x => x.Name1 == comboBoxes[ix].Text);
ix = (int)Idx.Name2; if (checkBoxes[ix].Checked) query = query.Where(x => x.Name2 == comboBoxes[ix].Text);
ix = (int)Idx.Workflow; if (checkBoxes[ix].Checked) query = query.Where(x => x.Workflow == comboBoxes[ix].Text);
ix = (int)Idx.DateTime; if (checkBoxes[ix].Checked)
{
DateTime from;
DateTime to;
GetDateRange(Selection.Other, fromDateTimePicker.Value.Date,
toDateTimePicker.Value.Date.AddDays(1).AddTicks(-1), out from, out to);
query = query.WhereRestrictionOn(rr => rr.Timestamp).IsBetween(from).And(to);
}
Record record = null;
StepRecord stepRecord = null;
ProjectionList projections = ItemSpec.GetProjections(items, refRecord, stepRecord, record);
IList<object[]> result = query.Select(projections).List<object[]>();
return result;
}
/// <summary>
/// Create a new Tab page with and fill it with query results
/// </summary>
/// <param name="results">Query results</param>
/// <returns>A new tab page</returns>
TabPage CreateTabPage(QueryResults results)
{
///
/// Prepare a new list view control with query results
///
Common.Forms.ListViewEx listView = new Common.Forms.ListViewEx();
listView.Dock = System.Windows.Forms.DockStyle.Fill;
listView.FullRowSelect = true;
listView.GridLines = true;
listView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Clickable;
listView.Location = new System.Drawing.Point(3, 16);
listView.Name = results.Description;
listView.Size = new System.Drawing.Size(411, 144);
listView.TabIndex = 0;
listView.UseCompatibleStateImageBehavior = false;
listView.View = System.Windows.Forms.View.Details;
listView.DoubleClick += new System.EventHandler(listView_DoubleClick);
listView.ColumnClick += new ColumnClickEventHandler(listView_ColumnClick);
RedrawResults(results, listView);
///
/// Create a new tab page and add the just created list view control into it
///
TabPage newTabPage = new TabPage(string.Format("{0} ({1})", results.Description, results.Results.Count));
newTabPage.Controls.Add(listView);
newTabPage.Tag = results;
return newTabPage;
}
private void formatOfResultsBtn_Click(object sender, EventArgs e)
{
Forms.TracingConfigDlg dlg = new Forms.TracingConfigDlg();
dlg.Compound = false;
dlg.SelectedItems = ItemSpec.FromStrArray(filtersConfig.ResultItems);
dlg.AvailableItems = new List<ItemSpec>();
foreach (var v in ItemSpec.AllItems) dlg.AvailableItems.Add(v);
if (dlg.ShowDialog() == DialogResult.OK)
{
filtersConfig.ResultItems = ItemSpec.ToStrArray(dlg.SelectedItems);
}
}
/// <summary>
/// Displays obtained results as configured by result items in the ListView
/// </summary>
void RedrawResults(QueryResults results, ListView listView)
{
IList<ItemSpec> items = results.ProjectedItems;
listView.Clear();
if (results == null || results.Results == null || results.Results.Count == 0 || items == null || items.Count == 0) return;
try
{
if (items.Count >= 2)
{
/// 1st item (=item[0]) is ref. record ID and it is not displayed, it is copied to lvi.tag
for (int i = 1; i < items.Count; i++)
{
listView.Columns.Add(items[i].Caption, (filtersConfig.ResultsClmnCount > i) ? filtersConfig.ResultsClmnWidths[i] : 70);
}
foreach (var resItems in results.Results)
{
ListViewItem lvi = new ListViewItem(items[1].Print(resItems[1]));
for (int i = 2; i < items.Count; i++) lvi.SubItems.Add(items[i].Print(resItems[i]));
lvi.Tag = resItems[0];
listView.Items.Add(lvi);
}
}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message, Strings.Error_displaying_results, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
private void exportQueryResultsBtn_Click(object sender, EventArgs e)
{
if (currentQR == null || currentQR.Results == null || currentQR.Results.Count == 0
|| currentQR.ProjectedItems == null || currentQR.ProjectedItems.Count == 0)
{
return;
}
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "CSV files (*.csv)|*.csv|All files (*.*)|*.*";
if (dlg.ShowDialog() == DialogResult.OK)
{
IList<ItemSpec> items = currentQR.ProjectedItems;
try
{
using (TextWriter writer = new StreamWriter(dlg.FileName, false, Encoding.UTF8))
{
for (int i = 1; i < items.Count; i++)
{
writer.Write(items[i].Caption);
if (i == items.Count - 1)
writer.WriteLine();
else
writer.Write(";");
}
foreach (var resItems in currentQR.Results)
{
for (int i = 1; i < items.Count; i++)
{
writer.Write(items[i].Export(resItems[i]));
if (i == items.Count - 1)
writer.WriteLine();
else
writer.Write(";");
}
}
}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message, Strings.Error_exporting_results, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}
private void printQueryResultsBtn_Click(object sender, EventArgs e)
{
// if (referenceRecords == null || referenceRecords.Count == 0) return;
/// TODO: Reimplement
//foreach (var wm in referenceRecords)
//{
// new Results.Output.Printers.Munich.MunichPrintDocument("", wm, Config.Entities.PageOrientation.Portrait).Print();
//}
}
private void statisticsBtn_Click(object sender, EventArgs e)
{
if (currentQR == null || currentQR.Results == null || currentQR.Results.Count == 0
|| currentQR.ProjectedItems == null || currentQR.ProjectedItems.Count == 0)
{
MessageBox.Show("Žiadne výsledky vyhľadávania", "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
///
/// Enter options
///
Forms.StatisticsOptionsDlg dlg = new Forms.StatisticsOptionsDlg(currentQR.ProjectedItems);
if (dlg.ShowDialog() != DialogResult.OK) return;
///
/// Calculate statistics
///
Forms.StatisticsDlg statisticsDlg = new Forms.StatisticsDlg(currentQR, dlg.TwoDim, dlg.RowItemIx, dlg.ColumnItemIx, dlg.FilterEnabled, dlg.FilteredItemIx, dlg.FilteredValue);
statisticsDlg.Show();
}
private void ProductionTracingWnd_FormClosing(object sender, FormClosingEventArgs e)
{
LocalSettings ls = Program.LocalSettings;
ls.MainWndMaximized = (WindowState == FormWindowState.Maximized);
if (WindowState == FormWindowState.Normal)
{
ls.MainWndLeft = Location.X;
ls.MainWndTop = Location.Y;
ls.MainWndWidth = Size.Width;
ls.MainWndHeight = Size.Height;
}
else
{
/// Maximized or minimized (when restarted, minimized window is restored as normal)
ls.MainWndLeft = RestoreBounds.Left;
ls.MainWndTop = RestoreBounds.Top;
ls.MainWndWidth = RestoreBounds.Width;
ls.MainWndHeight = RestoreBounds.Height;
}
ls.Save();
}
private void tabControl_SelectedIndexChanged(object sender, EventArgs e)
{
currentQR = tabControl.SelectedTab.Tag as QueryResults;
}
private void listView_DoubleClick(object sender, EventArgs e)
{
ListView resultsListView = sender as ListView;
/// Double click works when just one item is selected
if (resultsListView != null && resultsListView.SelectedIndices.Count == 1)
{
int ix = resultsListView.SelectedIndices[0];
int refRecordID = (int)resultsListView.Items[ix].Tag;
if (refRecordID == 0) return;
using (ISession session = TracingDB.CreateSession(Program.LocalSettings.ConnectionString))
{
new Forms.MoreInfoDlg(refRecordID, session).ShowDialog();
session.Close();
}
}
}
private void listView_ColumnClick(object sender, ColumnClickEventArgs e)
{
Common.Forms.ListViewEx listViewEx = sender as Common.Forms.ListViewEx;
if (listViewEx == null) return;
if (e.Column == listViewEx.SortColumn)
{
listViewEx.SortOrder = (listViewEx.SortOrder == MySortOrder.Ascending) ? MySortOrder.Descending : MySortOrder.Ascending;
}
else
{
/// Clicked on another column header => set sortOrder to SortOrder.Ascending
listViewEx.SortColumn = e.Column;
listViewEx.SortOrder = MySortOrder.Ascending;
}
listViewEx.ListViewItemSorter = new LviTextColumnComparer(listViewEx.SortColumn, listViewEx.SortOrder);
ListViewExtensions.SetSortIcon(listViewEx, listViewEx.SortColumn, listViewEx.SortOrder);
listViewEx.Sort();
}
void GetDateRange(Selection selection, DateTime uiFrom, DateTime uiTo, out DateTime from, out DateTime to)
{
DateTime now = DateTime.Now.Date;
if (selection == Selection.Today)
{
from = now.Date;
to = from.AddDays(1).AddTicks(-1);
}
else if (selection == Selection.Yesterday)
{
from = now.Date.AddDays(-1);
to = from.AddDays(1).AddTicks(-1);
}
else if (selection == Selection.ThisWeek)
{
from = now.Date.AddDays(-GetDayOfWeek0(now));
to = from.AddDays(7).AddTicks(-1);
}
else if (selection == Selection.LastWeek)
{
from = now.Date.AddDays(-GetDayOfWeek0(now) - 7);
to = from.AddDays(7).AddTicks(-1);
}
else if (selection == Selection.ThisMonth)
{
from = now.Date.AddDays(1 - now.Day);
to = now.Date.AddDays(1).AddTicks(-1);
}
else if (selection == Selection.LastMonth)
{
int daysLastMonth = (now.Month > 1) ? DateTime.DaysInMonth(now.Year, now.Month - 1)
: DateTime.DaysInMonth(now.Year - 1, 12);
from = now.Date.AddDays(1 - now.Day - daysLastMonth);
to = from.AddDays(daysLastMonth).AddTicks(-1);
}
else if (selection == Selection.ThisYear)
{
from = new DateTime(now.Year, 1, 1);
to = now.Date.AddDays(1).AddTicks(-1);
}
else if (selection == Selection.LastYear)
{
from = new DateTime(now.Year - 1, 1, 1);
to = new DateTime(now.Year, 1, 1).AddTicks(-1);
}
else /// Values for Selection.Other
{
from = uiFrom;
to = uiTo;
}
//int Offset = 0;
//from = from.AddHours(Offset);
//to = to.AddHours(Offset);
}
int GetDayOfWeek0(DateTime dateTime)
{
switch (dateTime.DayOfWeek)
{
default:
case DayOfWeek.Monday: return 0;
case DayOfWeek.Tuesday: return 1;
case DayOfWeek.Wednesday: return 2;
case DayOfWeek.Thursday: return 3;
case DayOfWeek.Friday: return 4;
case DayOfWeek.Saturday: return 5;
case DayOfWeek.Sunday: return 6;
}
}
private void checkBox1_CheckedChanged(object sender, EventArgs e) { ManageCheckGroupBox(checkBox1, groupBox1); }
private void checkBox2_CheckedChanged(object sender, EventArgs e) { ManageCheckGroupBox(checkBox2, groupBox2); }
private void checkBox3_CheckedChanged(object sender, EventArgs e) { ManageCheckGroupBox(checkBox3, groupBox3); }
private void checkBox4_CheckedChanged(object sender, EventArgs e) { ManageCheckGroupBox(checkBox4, groupBox4); }
private void checkBox5_CheckedChanged(object sender, EventArgs e) { ManageCheckGroupBox(checkBox5, groupBox5); }
private void checkBox6_CheckedChanged(object sender, EventArgs e) { ManageCheckGroupBox(checkBox6, groupBox6); }
private void checkBox7_CheckedChanged(object sender, EventArgs e) { ManageCheckGroupBox(checkBox7, groupBox7); }
private void checkBox8_CheckedChanged(object sender, EventArgs e) { ManageCheckGroupBox(checkBox8, groupBox8); }
private void checkBox9_CheckedChanged(object sender, EventArgs e) { ManageCheckGroupBox(checkBox9, groupBox9); }
private void ManageCheckGroupBox(CheckBox chk, GroupBox grp)
{
/// Make sure the CheckBox isn't in the GroupBox. This will only happen the first time.
if (chk.Parent == grp)
{
grp.Parent.Controls.Add(chk); /// Reparent the CheckBox so it's not in the GroupBox.
chk.Location = new Point(chk.Left + grp.Left, chk.Top + grp.Top); /// Adjust the CheckBox's location.
chk.BringToFront(); /// Move the CheckBox to the top of the stacking order.
}
/// Enable or disable the GroupBox.
grp.Enabled = chk.Checked;
}
}
enum Idx
{
Order, /// 0 = checkBox1, comboBox1
Workflow, /// 1 = checkBox2, comboBox2
DateTime, /// 2 = checkBox3
Code1, /// 3 = checkBox4, comboBox4
Code2, /// 4 = checkBox5, comboBox5
Code3, /// 5 = checkBox6, comboBox6
Code4, /// 6 = checkBox7, comboBox7
Name1, /// 7 = checkBox8, comboBox8
Name2, /// 8 = checkBox9, comboBox9
}
enum Selection
{
Today,
Yesterday,
ThisWeek,
LastWeek,
ThisMonth,
LastMonth,
ThisYear,
LastYear,
Other,
}
}
-120
View File
@@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
-255
View File
@@ -1,255 +0,0 @@
///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Windows.Forms;
using log4net;
using NHibernate;
using Common;
using SharedDatabase;
using SharedDatabase.Entities;
using ProductionTracing.Resources;
namespace ProductionTracing
{
static class Program
{
/// Constants
public static GID[] SettingsAccessLevel = new GID[] { GID.TraceabilityManagement }; /// Group membership to access settings
public const string ProgramName = "Production Tracing";
public const string ConfigFName = "config.xml";
public const string BackupConfigFName = "config.backup.xml";
public const string Log4NetConfigFName = "log4netConfig.xml";
/// Program information
public static readonly string Version; /// version string
public static readonly DateTime BuildDateTime; /// date and time of program build
public static readonly string ExeDirectory;
public static readonly string ConfigDirectory;
public static readonly string LogDirectory;
public static readonly string LocalSettingsFileName;
public static readonly string LocalSettingsBackupName;
/// Local settings
public static LocalSettings LocalSettings;
/// log4net
static ILog log;
static Program()
{
/// Program version string
Assembly thisAssembly = Assembly.GetExecutingAssembly();
Version ver = thisAssembly.GetName().Version;
Version = string.Format("{0}.{1}.{2}", ver.Major, ver.Minor, ver.Build);
BuildDateTime = new FileInfo(thisAssembly.Location).LastWriteTime;
/// Local program configuration directory including the trailing backslash
ExeDirectory = Path.GetDirectoryName(thisAssembly.Location);
ConfigDirectory = Path.Combine(ExeDirectory, "..\\Cfg");
LogDirectory = Path.Combine(ExeDirectory, "..", "Logs");
LocalSettingsFileName = Path.Combine(ConfigDirectory, ConfigFName);
LocalSettingsBackupName = Path.Combine(ConfigDirectory, BackupConfigFName);
}
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
///
/// Check if another instance is running
///
Assembly thisAssembly = Assembly.GetExecutingAssembly();
string processName = Path.GetFileNameWithoutExtension(thisAssembly.Location);
if (System.Diagnostics.Process.GetProcessesByName(processName).Length > 1)
{
MessageBox.Show(string.Format("{0}{1}{2}", string.Format(Strings.Program_0_is_running_already, ProgramName),
Environment.NewLine,
Strings.Close_it_please),
Strings.Error,
MessageBoxButtons.OK,
MessageBoxIcon.Asterisk);
return;
}
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
bool configDirectoryCreated = false;
if (!Directory.Exists(ConfigDirectory) || new DirectoryInfo(ConfigDirectory).GetFileSystemInfos().Length == 0)
{
MessageBox.Show(string.Format("{0}{1}{2}", Strings.Program_is_running_for_the_1st_time_on_this_PC,
Environment.NewLine,
Strings.Default_settings_are_used),
Strings.Warning,
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
///
/// Create a new config subdirectory
///
Directory.CreateDirectory(ConfigDirectory);
configDirectoryCreated = true;
Program.LocalSettings = new LocalSettings(true);
Program.LocalSettings.Save();
if (File.Exists(Path.Combine(ExeDirectory, "SampleConfig", Log4NetConfigFName)))
{
File.Copy(Path.Combine(ExeDirectory, "SampleConfig", Log4NetConfigFName),
Path.Combine(ConfigDirectory, Log4NetConfigFName));
}
File.SetAttributes(Path.Combine(ConfigDirectory, Log4NetConfigFName), FileAttributes.Normal);
}
///
/// Configue and start logging
///
log4net.Config.XmlConfigurator.Configure(new FileInfo(Path.Combine(ConfigDirectory, Log4NetConfigFName)));
log = LogManager.GetLogger(typeof(Program));
log.Fatal("--------------------------------------------------------------------------------");
log.FatalFormat("{0} ver.{1}", ProgramName, Version);
log.FatalFormat("Executable directory is {0}", ExeDirectory);
if (configDirectoryCreated)
{
log.Fatal("A new config directory and configuration files created !");
}
///
/// Load the local settings
///
LocalSettings = LocalSettings.Load(Program.LocalSettingsFileName);
if (LocalSettings == null)
{
/// Loading local seetings from regular config file failed. Use the backup
LocalSettings = LocalSettings.Load(Program.LocalSettingsBackupName);
if (LocalSettings == null)
{
log.FatalFormat("Local settings: Could not load file {0}, nor {1}.", ConfigFName, BackupConfigFName);
log.Fatal("Application terminated.");
MessageBox.Show(string.Format("Could not load file {0}, nor {1}.", ConfigFName, BackupConfigFName), "Fatal error");
return; /// Fatal error
}
else
{
LocalSettings.Save(); /// Save the settings to overwrite the wrong file
log.FatalFormat("Local settings: Could not load file {0}, successfully loaded {1}", ConfigFName, BackupConfigFName);
}
}
else
{
/// Loading local seetings from the regular config file was successful. Update the backup
File.Copy(Program.LocalSettingsFileName, Program.LocalSettingsBackupName, true);
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
///
/// User login
///
if (LocalSettings.IsUserLoginRequired && !string.IsNullOrEmpty(LocalSettings.UsersDBConnString))
{
try
{
Common.GlobalData.RemoteUsersDB = new DBSettings(Common.DBType.MySql, LocalSettings.UsersDBConnString);
DialogResult dr = new SharedDatabase.Forms.LoginDlg().ShowDialog();
if (dr != DialogResult.OK) return;
}
catch (Exception exc)
{
log.ErrorFormat("Failed to connect to the database of users: {0}", exc.Message);
}
}
ISession session;
IList<OrderInfo> listOfOrders = null;
IList<Process> listOfWorkflows = null;
while (true)
{
try
{
session = SharedDatabase.TracingDB.CreateSession(LocalSettings.ConnectionString);
listOfOrders = session.QueryOver<OrderInfo>()
.List();
listOfWorkflows = session.QueryOver<Process>()
.Where(x => x.ReleaseStatus != ReleaseStatus.Deactivated)
.List();
break;
}
catch (Exception exc)
{
log.FatalFormat("Failed to connect to production tracing database: {0}", exc.Message);
if (exc.InnerException != null)
{
log.FatalFormat("InnerException: {0}", exc.InnerException.Message);
}
MessageBox.Show(string.Format("Failed to connect to production tracing database:{0}{1}", Environment.NewLine, exc.Message));
if (new Forms.SettingsDlg(LocalSettings).ShowDialog() == DialogResult.OK)
{
LocalSettings.Save();
}
else
{
return;
}
}
}
try
{
Application.Run(new ProductionTracingWnd());
}
catch (Exception e)
{
LogException(log, "Exception in Application.Run(MainWnd)", e);
MessageBox.Show("Program crashed:" +
Environment.NewLine + Environment.NewLine + e.Message +
((e.InnerException == null) ? string.Empty : (Environment.NewLine + e.InnerException.Message)) +
Environment.NewLine + e.StackTrace,
"Fatal error",
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
}
}
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
{
Exception e = args.ExceptionObject as Exception;
if (e == null) return;
LogException(log, "Unhandled exception", e);
MessageBox.Show("Program crashed:" +
Environment.NewLine + Environment.NewLine + e.Message +
((e.InnerException == null) ? string.Empty : (Environment.NewLine + e.InnerException.Message)) +
Environment.NewLine + e.StackTrace,
"Fatal error",
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
}
static void LogException(ILog log, string description, Exception e)
{
log.FatalFormat("---------------( {0} )---------------", description);
log.FatalFormat("Message : {0}", e.Message);
if (e.InnerException != null)
{
log.FatalFormat("InnerMessage : {0}", e.InnerException.Message);
}
log.FatalFormat("StackTrace : {0}{1}", Environment.NewLine, e.StackTrace);
log.Fatal("--------------------------------------");
}
}
}
-63
View File
@@ -1,63 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34209
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ProductionTracing.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ResultsBrowser.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}
-117
View File
@@ -1,117 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
-26
View File
@@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34209
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ProductionTracing.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}
@@ -1,7 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
-26
View File
@@ -1,26 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ProductionTracing
{
public class QueryResults
{
public readonly string ConnectionString;
public readonly string Description;
public DateTime StartTime;
public DateTime EndTime;
public IList<object[]> Results;
public IList<ItemSpec> ProjectedItems;
public QueryResults(string connectionString, string description)
{
ConnectionString = connectionString;
Description = description;
StartTime = DateTime.Now;
Results = new List<object[]>();
ProjectedItems = new List<ItemSpec>();
}
}
}
-339
View File
@@ -1,339 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Add_filter" xml:space="preserve">
<value>Přidat filtr</value>
</data>
<data name="CancelBtnText" xml:space="preserve">
<value>Zrušit</value>
</data>
<data name="Clear_filters" xml:space="preserve">
<value>Zmazat filtry</value>
</data>
<data name="Connection_string" xml:space="preserve">
<value>Řetězec pro spojní s databázou</value>
</data>
<data name="Date" xml:space="preserve">
<value>Datum</value>
</data>
<data name="Error" xml:space="preserve">
<value>Chyba</value>
</data>
<data name="Error_displaying_results" xml:space="preserve">
<value>Chyba při zobrazování výsledků</value>
</data>
<data name="Error_saving_file" xml:space="preserve">
<value>Chyba při ukládání souboru</value>
</data>
<data name="Error_serializing_filters" xml:space="preserve">
<value>Chyba při serializaci filtru</value>
</data>
<data name="Execute_query" xml:space="preserve">
<value>Vykonat dotaz</value>
</data>
<data name="Export_query_results" xml:space="preserve">
<value>Exportovat výsledky</value>
</data>
<data name="Filters" xml:space="preserve">
<value>Filtry</value>
</data>
<data name="Format_of_results" xml:space="preserve">
<value>Formát výsledků</value>
</data>
<data name="From" xml:space="preserve">
<value>Od</value>
</data>
<data name="Language" xml:space="preserve">
<value>Jazyk</value>
</data>
<data name="OkBtnText" xml:space="preserve">
<value>OK</value>
</data>
<data name="Print_query_results" xml:space="preserve">
<value>Vytlačit výsledky</value>
</data>
<data name="Query_results" xml:space="preserve">
<value>Výsledky dotazu</value>
</data>
<data name="Results_Browser" xml:space="preserve">
<value>Prohlížeč výsledků</value>
</data>
<data name="RetryDatabaseText" xml:space="preserve">
<value>Obnovit spojení s databázou</value>
</data>
<data name="Rows" xml:space="preserve">
<value>Řádky</value>
</data>
<data name="Selected_results" xml:space="preserve">
<value>Vybrané výsledky</value>
</data>
<data name="Select_a_filter" xml:space="preserve">
<value>Vyberte filtr</value>
</data>
<data name="Serial_number" xml:space="preserve">
<value>Sériové číslo</value>
</data>
<data name="Settings" xml:space="preserve">
<value>Nastavení</value>
</data>
<data name="Statistics" xml:space="preserve">
<value>Statistiky</value>
</data>
<data name="To" xml:space="preserve">
<value>Do</value>
</data>
<data name="searching" xml:space="preserve">
<value>vyhledávání</value>
</data>
<data name="Address" xml:space="preserve">
<value>Adresa</value>
</data>
<data name="All_files" xml:space="preserve">
<value>Všechny soubory</value>
</data>
<data name="Available_results" xml:space="preserve">
<value>Všechny položky</value>
</data>
<data name="BackBtnText" xml:space="preserve">
<value>&lt; Zpět</value>
</data>
<data name="Barcode" xml:space="preserve">
<value>Čárový kód</value>
</data>
<data name="Clear_results" xml:space="preserve">
<value>Zmazat výsledky</value>
</data>
<data name="hours" xml:space="preserve">
<value>hodin</value>
</data>
<data name="Last_month" xml:space="preserve">
<value>Minulý měsíc</value>
</data>
<data name="Last_week" xml:space="preserve">
<value>Minulý týden</value>
</data>
<data name="Last_year" xml:space="preserve">
<value>Minulý rok</value>
</data>
<data name="Load_configuration" xml:space="preserve">
<value>Otevřít konfiguraci</value>
</data>
<data name="Offset" xml:space="preserve">
<value>Posun</value>
</data>
<data name="Other__v" xml:space="preserve">
<value>Jiný --&gt;</value>
</data>
<data name="Workflow" xml:space="preserve">
<value>Prac. postup</value>
</data>
<data name="Save_configuration" xml:space="preserve">
<value>Uložit konfiguraci</value>
</data>
<data name="Server" xml:space="preserve">
<value>Server</value>
</data>
<data name="Shift" xml:space="preserve">
<value>Směna</value>
</data>
<data name="This_month" xml:space="preserve">
<value>Tento měsíc</value>
</data>
<data name="This_week" xml:space="preserve">
<value>Tento týden</value>
</data>
<data name="This_year" xml:space="preserve">
<value>Tento rok</value>
</data>
<data name="Today" xml:space="preserve">
<value>Dnes</value>
</data>
<data name="Add" xml:space="preserve">
<value>Přidat &gt;</value>
</data>
<data name="Columns" xml:space="preserve">
<value>Sloupce</value>
</data>
<data name="User_name" xml:space="preserve">
<value>Jméno uživatele</value>
</data>
<data name="Workplace" xml:space="preserve">
<value>Pracoviště</value>
</data>
<data name="Yesterday" xml:space="preserve">
<value>Včera</value>
</data>
<data name="Part_name" xml:space="preserve">
<value>Označení součástky</value>
</data>
<data name="Part_with_barcode" xml:space="preserve">
<value>Součástka a kód</value>
</data>
<data name="Barcode_no_ref" xml:space="preserve">
<value>Čárový kód (jiný než referenční)</value>
</data>
<data name="Part_with_barcode_no_ref" xml:space="preserve">
<value>Součástka a kód (jiný než referenční)</value>
</data>
<data name="can_only_be_used_as_the_first_filter" xml:space="preserve">
<value>musí být první filtr v pořadí. </value>
</data>
<data name="Filter" xml:space="preserve">
<value>Filtr</value>
</data>
<data name="More_informations" xml:space="preserve">
<value>Více informací</value>
</data>
<data name="Order" xml:space="preserve">
<value>Zakázka</value>
</data>
<data name="Serial_nr" xml:space="preserve">
<value>Sériové č.</value>
</data>
<data name="Workstep" xml:space="preserve">
<value>Krok postupu</value>
</data>
<data name="Workstep_and_associated_part" xml:space="preserve">
<value>Krok postupu a přidružená součástka</value>
</data>
<data name="Items" xml:space="preserve">
<value>Položky</value>
</data>
<data name="Caption" xml:space="preserve">
<value>Název</value>
</data>
<data name="Format" xml:space="preserve">
<value>Formát</value>
</data>
<data name="Item" xml:space="preserve">
<value>Položka</value>
</data>
<data name="Part_barcode" xml:space="preserve">
<value>Kód součástky</value>
</data>
<data name="Precision" xml:space="preserve">
<value>Přesnost</value>
</data>
<data name="Result" xml:space="preserve">
<value>Výsledek</value>
</data>
<data name="Width" xml:space="preserve">
<value>Šíŕka</value>
</data>
</root>
-639
View File
@@ -1,639 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Confirmation" xml:space="preserve">
<value>Confirmation</value>
</data>
<data name="Do_you_want_to_save_the_procedure" xml:space="preserve">
<value>Do you want to save the procedure?</value>
</data>
<data name="Error" xml:space="preserve">
<value>Error</value>
</data>
<data name="Error_loading_users_from_the_database" xml:space="preserve">
<value>Error loading users from the database:</value>
</data>
<data name="Failed_to_create_a_sample_database" xml:space="preserve">
<value>Failed to create a sample database:</value>
</data>
<data name="Failed_to_export_the_database" xml:space="preserve">
<value>Failed to export the database:</value>
</data>
<data name="Invalid_user_password_or_bench" xml:space="preserve">
<value>Invalid user, password, or bench</value>
</data>
<data name="MaxChars" xml:space="preserve">
<value>(max. _X_ alphanumeric characters)</value>
</data>
<data name="Name" xml:space="preserve">
<value>Name</value>
</data>
<data name="no" xml:space="preserve">
<value>no</value>
</data>
<data name="Nr" xml:space="preserve">
<value>Nr.</value>
</data>
<data name="AddBtnText" xml:space="preserve">
<value>Add</value>
</data>
<data name="CloseBtnText" xml:space="preserve">
<value>Close</value>
</data>
<data name="LockBtnText" xml:space="preserve">
<value>Lock</value>
</data>
<data name="RemoveBtnText" xml:space="preserve">
<value>Remove</value>
</data>
<data name="OkBtnText" xml:space="preserve">
<value>OK</value>
</data>
<data name="Correction_lph" xml:space="preserve">
<value>Correction [l/h]</value>
</data>
<data name="Correction_mbar" xml:space="preserve">
<value>Correction [mbar]</value>
</data>
<data name="Invalid_username_or_password" xml:space="preserve">
<value>Invalid username or password</value>
</data>
<data name="CopyBtnText" xml:space="preserve">
<value>Copy</value>
</data>
<data name="DownBtnText" xml:space="preserve">
<value>Down</value>
</data>
<data name="EditBtnText" xml:space="preserve">
<value>Edit</value>
</data>
<data name="UpBtnText" xml:space="preserve">
<value>Up</value>
</data>
<data name="NoDatabaseMsg" xml:space="preserve">
<value>Cannot connect to the database.</value>
</data>
<data name="ConfigureDatabaseText" xml:space="preserve">
<value>Configure test benches (password required)</value>
</data>
<data name="ExitBtnText" xml:space="preserve">
<value>Exit</value>
</data>
<data name="Enter_password" xml:space="preserve">
<value>Enter password</value>
</data>
<data name="Invalid_password" xml:space="preserve">
<value>Invalid password</value>
</data>
<data name="DB_was_successfully_created" xml:space="preserve">
<value>The database was successfully created!</value>
</data>
<data name="DB_will_be_overwritten" xml:space="preserve">
<value>The database will be overwritten</value>
</data>
<data name="Do_you_want_to_proceed" xml:space="preserve">
<value>Do you want to proceed?</value>
</data>
<data name="Notification" xml:space="preserve">
<value>Notification</value>
</data>
<data name="NoBenchMsg" xml:space="preserve">
<value>No test bench in the program configuration.</value>
</data>
<data name="DescriptionColHdr" xml:space="preserve">
<value>Description</value>
</data>
<data name="Procedure" xml:space="preserve">
<value>Procedure</value>
</data>
<data name="Error_while_creating_DB_Reason" xml:space="preserve">
<value>Error while creating the database. Reason: </value>
</data>
<data name="Ignore" xml:space="preserve">
<value>Ignore</value>
</data>
<data name="Loading_the_procedure" xml:space="preserve">
<value>Loading the procedure</value>
</data>
<data name="Ready" xml:space="preserve">
<value>Ready</value>
</data>
<data name="BackBtnText" xml:space="preserve">
<value>&lt; Back</value>
</data>
<data name="FinishBtnText" xml:space="preserve">
<value>Finish</value>
</data>
<data name="NextBtnText" xml:space="preserve">
<value>Next &gt;</value>
</data>
<data name="Component" xml:space="preserve">
<value>Component</value>
</data>
<data name="_none_" xml:space="preserve">
<value>&lt;none&gt;</value>
</data>
<data name="Clear_results" xml:space="preserve">
<value>Clear results</value>
</data>
<data name="Configure" xml:space="preserve">
<value>Configure</value>
</data>
<data name="Horizontally" xml:space="preserve">
<value>Horizontally</value>
</data>
<data name="Configuration" xml:space="preserve">
<value>Configuration</value>
</data>
<data name="Failed" xml:space="preserve">
<value>NOK</value>
</data>
<data name="ClearBtnText" xml:space="preserve">
<value>Clear</value>
</data>
<data name="Producer" xml:space="preserve">
<value>Producer</value>
</data>
<data name="Printer" xml:space="preserve">
<value>Printer</value>
</data>
<data name="Version" xml:space="preserve">
<value>Version</value>
</data>
<data name="nothing_to_configure" xml:space="preserve">
<value>&lt;nothing to configure&gt;</value>
</data>
<data name="NoBtn" xml:space="preserve">
<value>No</value>
</data>
<data name="Question" xml:space="preserve">
<value>Question</value>
</data>
<data name="Connection_string" xml:space="preserve">
<value>Connection string</value>
</data>
<data name="Create_DB" xml:space="preserve">
<value>Create DB</value>
</data>
<data name="Database_type" xml:space="preserve">
<value>Database type</value>
</data>
<data name="Logging" xml:space="preserve">
<value>Logging</value>
</data>
<data name="Mode" xml:space="preserve">
<value>Mode</value>
</data>
<data name="NewTabBtnText" xml:space="preserve">
<value>New Tab</value>
</data>
<data name="Add" xml:space="preserve">
<value>&amp;Add &gt;</value>
</data>
<data name="Available_results" xml:space="preserve">
<value>Available results</value>
</data>
<data name="Remove" xml:space="preserve">
<value>&lt; &amp;Remove</value>
</data>
<data name="Remove_all" xml:space="preserve">
<value>&lt;&lt; R&amp;emove all</value>
</data>
<data name="Message" xml:space="preserve">
<value>Message</value>
</data>
<data name="dflt" xml:space="preserve">
<value>dflt</value>
</data>
<data name="LessBtnText" xml:space="preserve">
<value>Less</value>
</data>
<data name="MoreBtnText" xml:space="preserve">
<value>More</value>
</data>
<data name="Changes_will_be_lost_Do_you_want_to_proceed" xml:space="preserve">
<value>Changes will be lost. Do you want to proceed?</value>
</data>
<data name="PrinterBtnText" xml:space="preserve">
<value>Printer</value>
</data>
<data name="Data" xml:space="preserve">
<value>Data</value>
</data>
<data name="Serial_number" xml:space="preserve">
<value>Serial number</value>
</data>
<data name="Date_and_time_" xml:space="preserve">
<value>Date and time: </value>
</data>
<data name="Address" xml:space="preserve">
<value>Address</value>
</data>
<data name="Evaluate" xml:space="preserve">
<value>Evaluate</value>
</data>
<data name="Language" xml:space="preserve">
<value>Language</value>
</data>
<data name="Database_Settings" xml:space="preserve">
<value>Database Settings</value>
</data>
<data name="CopyrightStr" xml:space="preserve">
<value>Copyright © 2013 - {0}</value>
</data>
<data name="Edit_User" xml:space="preserve">
<value>Edit User</value>
</data>
<data name="An_unhandled_error_occured" xml:space="preserve">
<value>An unhandled error occured</value>
</data>
<data name="IgnoreBtnText" xml:space="preserve">
<value>Ignore</value>
</data>
<data name="Add_filter" xml:space="preserve">
<value>Add filter</value>
</data>
<data name="Clear_filters" xml:space="preserve">
<value>Clear filters</value>
</data>
<data name="Execute_query" xml:space="preserve">
<value>Execute query</value>
</data>
<data name="Export_query_results" xml:space="preserve">
<value>Export query results</value>
</data>
<data name="Filters" xml:space="preserve">
<value>Filters</value>
</data>
<data name="Format_of_results" xml:space="preserve">
<value>Format of results</value>
</data>
<data name="Load_configuration" xml:space="preserve">
<value>Load configuration</value>
</data>
<data name="Print_query_results" xml:space="preserve">
<value>Print query results</value>
</data>
<data name="Query_results" xml:space="preserve">
<value>Query results</value>
</data>
<data name="Production_Tracing" xml:space="preserve">
<value>Production Tracing</value>
</data>
<data name="Save_configuration" xml:space="preserve">
<value>Save configuration</value>
</data>
<data name="Settings" xml:space="preserve">
<value>Settings</value>
</data>
<data name="RetryDatabaseText" xml:space="preserve">
<value>Retry</value>
</data>
<data name="Selected_results" xml:space="preserve">
<value>Selected results</value>
</data>
<data name="UnlockBtnText" xml:space="preserve">
<value>Unlock</value>
</data>
<data name="Date" xml:space="preserve">
<value>Date</value>
</data>
<data name="From" xml:space="preserve">
<value>From</value>
</data>
<data name="To" xml:space="preserve">
<value>To</value>
</data>
<data name="Statistics" xml:space="preserve">
<value>Statistics</value>
</data>
<data name="Columns" xml:space="preserve">
<value>Columns</value>
</data>
<data name="Rows" xml:space="preserve">
<value>Rows</value>
</data>
<data name="Select_a_filter" xml:space="preserve">
<value>Select a filter</value>
</data>
<data name="Error_displaying_results" xml:space="preserve">
<value>Error displaying results</value>
</data>
<data name="All_files" xml:space="preserve">
<value>All files</value>
</data>
<data name="Error_saving_file" xml:space="preserve">
<value>Error saving file</value>
</data>
<data name="Error_serializing_filters" xml:space="preserve">
<value>Error serializing filters</value>
</data>
<data name="Query_files" xml:space="preserve">
<value>Query files</value>
</data>
<data name="Barcode" xml:space="preserve">
<value>Barcode</value>
</data>
<data name="Workflow" xml:space="preserve">
<value>Workflow</value>
</data>
<data name="Last_month" xml:space="preserve">
<value>Last month</value>
</data>
<data name="Last_week" xml:space="preserve">
<value>Last week</value>
</data>
<data name="Last_year" xml:space="preserve">
<value>Last year</value>
</data>
<data name="Other__v" xml:space="preserve">
<value>Other --&gt;</value>
</data>
<data name="This_month" xml:space="preserve">
<value>This month</value>
</data>
<data name="This_week" xml:space="preserve">
<value>This week</value>
</data>
<data name="This_year" xml:space="preserve">
<value>This year</value>
</data>
<data name="Today" xml:space="preserve">
<value>Today</value>
</data>
<data name="Yesterday" xml:space="preserve">
<value>Yesterday</value>
</data>
<data name="Workplace" xml:space="preserve">
<value>Workplace</value>
</data>
<data name="User_name" xml:space="preserve">
<value>User name</value>
</data>
<data name="Shift" xml:space="preserve">
<value>Shift</value>
</data>
<data name="searching" xml:space="preserve">
<value>searching</value>
</data>
<data name="Database" xml:space="preserve">
<value>Database</value>
</data>
<data name="hours" xml:space="preserve">
<value />
</data>
<data name="Offset" xml:space="preserve">
<value>Offset</value>
</data>
<data name="Part_name" xml:space="preserve">
<value>Part name</value>
</data>
<data name="Part_with_barcode" xml:space="preserve">
<value>Part with barcode</value>
</data>
<data name="Barcode_no_ref" xml:space="preserve">
<value>Barcode (not ref.)</value>
</data>
<data name="Part_with_barcode_no_ref" xml:space="preserve">
<value>Part with barcode (not ref.)</value>
</data>
<data name="can_only_be_used_as_the_first_filter" xml:space="preserve">
<value>can only be used as the first filter.</value>
</data>
<data name="Filter" xml:space="preserve">
<value>Filter</value>
</data>
<data name="More_informations" xml:space="preserve">
<value>More informations</value>
</data>
<data name="Workstep" xml:space="preserve">
<value>Workstep</value>
</data>
<data name="Ref_part_name" xml:space="preserve">
<value>Ref. part name (SAP nr.)</value>
</data>
<data name="Order" xml:space="preserve">
<value>Order</value>
</data>
<data name="Serial_nr" xml:space="preserve">
<value>Serial nr.</value>
</data>
<data name="Add_data_from_Oracle" xml:space="preserve">
<value>Add data from Oracle</value>
</data>
<data name="There_should_be_one_0_filter_configured" xml:space="preserve">
<value>There should be one '{0}' filter configured</value>
</data>
<data name="Max_pruefindex" xml:space="preserve">
<value>Max. pruefindex</value>
</data>
<data name="Test_result" xml:space="preserve">
<value>Test result</value>
</data>
<data name="Time_stamp" xml:space="preserve">
<value>Time stamp</value>
</data>
<data name="Flow_tube" xml:space="preserve">
<value>Flow tube</value>
</data>
<data name="Time" xml:space="preserve">
<value>Time</value>
</data>
<data name="Error_exporting_results" xml:space="preserve">
<value>Error exporting results</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export</value>
</data>
<data name="Count" xml:space="preserve">
<value>Count</value>
</data>
<data name="Databases" xml:space="preserve">
<value>Databases</value>
</data>
<data name="RefRecordId" xml:space="preserve">
<value>Record Id</value>
</data>
<data name="Second_Oracle_Query" xml:space="preserve">
<value>Add data from Oracle - 2nd query</value>
</data>
<data name="Ref_part_barcode" xml:space="preserve">
<value>Ref. part barcode (s/n)</value>
</data>
<data name="Workstep_and_associated_part" xml:space="preserve">
<value>Workstep and associated part</value>
</data>
<data name="Associated_part" xml:space="preserve">
<value>Associated part</value>
</data>
<data name="Default_settings_are_used" xml:space="preserve">
<value>Default settings are used.</value>
</data>
<data name="Program_is_running_for_the_1st_time_on_this_PC" xml:space="preserve">
<value>Program is running for the 1st time on this PC.</value>
</data>
<data name="Warning" xml:space="preserve">
<value>Warning</value>
</data>
<data name="Items" xml:space="preserve">
<value>Items</value>
</data>
<data name="Caption" xml:space="preserve">
<value>Caption</value>
</data>
<data name="Format" xml:space="preserve">
<value>Format</value>
</data>
<data name="Item" xml:space="preserve">
<value>Item</value>
</data>
<data name="Part_barcode" xml:space="preserve">
<value>Part barcode</value>
</data>
<data name="Precision" xml:space="preserve">
<value>Precision</value>
</data>
<data name="Result" xml:space="preserve">
<value>Result</value>
</data>
<data name="Width" xml:space="preserve">
<value>Width</value>
</data>
<data name="Close_it_please" xml:space="preserve">
<value>Close it please using 'Task manager'</value>
</data>
<data name="Program_0_is_running_already" xml:space="preserve">
<value>Program '{0}' is running already.</value>
</data>
<data name="Cancel" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="Connection_string_tracing_DB" xml:space="preserve">
<value>Connection string for production tracing database</value>
</data>
<data name="Connection_string_users_DB" xml:space="preserve">
<value>Connection string for database of users</value>
</data>
<data name="Save" xml:space="preserve">
<value>Save</value>
</data>
<data name="User_login_is_required" xml:space="preserve">
<value>User login is required</value>
</data>
</root>
-381
View File
@@ -1,381 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Last_month" xml:space="preserve">
<value>Minulý mesiac</value>
</data>
<data name="Last_week" xml:space="preserve">
<value>Minulý týždeň</value>
</data>
<data name="Last_year" xml:space="preserve">
<value>Minulý rok</value>
</data>
<data name="Other__v" xml:space="preserve">
<value>Iný --&gt;</value>
</data>
<data name="searching" xml:space="preserve">
<value>vyhľadávam</value>
</data>
<data name="This_month" xml:space="preserve">
<value>Tento mesiac</value>
</data>
<data name="This_week" xml:space="preserve">
<value>Tento týždeň</value>
</data>
<data name="This_year" xml:space="preserve">
<value>Tento rok</value>
</data>
<data name="Today" xml:space="preserve">
<value>Dnes</value>
</data>
<data name="Database" xml:space="preserve">
<value>Databáza</value>
</data>
<data name="Add" xml:space="preserve">
<value>Pridať &gt;</value>
</data>
<data name="Address" xml:space="preserve">
<value>Adresa</value>
</data>
<data name="Add_filter" xml:space="preserve">
<value>Pridať filter</value>
</data>
<data name="All_files" xml:space="preserve">
<value>Všetky súbory</value>
</data>
<data name="Available_results" xml:space="preserve">
<value>Všetky položky</value>
</data>
<data name="BackBtnText" xml:space="preserve">
<value>&lt; Späť</value>
</data>
<data name="Barcode" xml:space="preserve">
<value>Čiarový kód</value>
</data>
<data name="Clear_filters" xml:space="preserve">
<value>Vymazať filtre</value>
</data>
<data name="Clear_results" xml:space="preserve">
<value>Vymazať výsledky</value>
</data>
<data name="Date" xml:space="preserve">
<value>Dátum</value>
</data>
<data name="Execute_query" xml:space="preserve">
<value>Spusti hľadanie</value>
</data>
<data name="Filters" xml:space="preserve">
<value>Filtre</value>
</data>
<data name="Format_of_results" xml:space="preserve">
<value>Formát výsledkov</value>
</data>
<data name="From" xml:space="preserve">
<value>Od</value>
</data>
<data name="hours" xml:space="preserve">
<value>hodín</value>
</data>
<data name="Language" xml:space="preserve">
<value>Jazyk</value>
</data>
<data name="Load_configuration" xml:space="preserve">
<value>Otvoriť konfiguráciu</value>
</data>
<data name="Offset" xml:space="preserve">
<value>Posun</value>
</data>
<data name="Workflow" xml:space="preserve">
<value>Prac. postup</value>
</data>
<data name="Query_results" xml:space="preserve">
<value>Výsledky vyhľadávania</value>
</data>
<data name="Save_configuration" xml:space="preserve">
<value>Uložiť konfiguráciu</value>
</data>
<data name="Settings" xml:space="preserve">
<value>Nastavenia</value>
</data>
<data name="Shift" xml:space="preserve">
<value>Smena</value>
</data>
<data name="Statistics" xml:space="preserve">
<value>Štatistiky</value>
</data>
<data name="To" xml:space="preserve">
<value>Do</value>
</data>
<data name="User_name" xml:space="preserve">
<value>Meno používateľa</value>
</data>
<data name="Workplace" xml:space="preserve">
<value>Pracovisko</value>
</data>
<data name="Yesterday" xml:space="preserve">
<value>Včera</value>
</data>
<data name="Connection_string" xml:space="preserve">
<value>Reťazec pre spojenie s databázou</value>
</data>
<data name="Error" xml:space="preserve">
<value>Chyba</value>
</data>
<data name="Error_displaying_results" xml:space="preserve">
<value>Chyba pri zobrazovaní výsledkov</value>
</data>
<data name="Error_saving_file" xml:space="preserve">
<value>Chyba pri ukladaní súboru</value>
</data>
<data name="Error_serializing_filters" xml:space="preserve">
<value>Chyba pri serializácii filtra</value>
</data>
<data name="Export_query_results" xml:space="preserve">
<value>Exportovať výsledky</value>
</data>
<data name="OkBtnText" xml:space="preserve">
<value>OK</value>
</data>
<data name="RetryDatabaseText" xml:space="preserve">
<value>Obnoviť spojenie s databázou</value>
</data>
<data name="Columns" xml:space="preserve">
<value>Stĺpce</value>
</data>
<data name="Print_query_results" xml:space="preserve">
<value>Vytlačiť výsledky</value>
</data>
<data name="Production_Tracing" xml:space="preserve">
<value>Sledovanie výroby</value>
</data>
<data name="Rows" xml:space="preserve">
<value>Riadky</value>
</data>
<data name="Selected_results" xml:space="preserve">
<value>Vybrané výsledky</value>
</data>
<data name="Select_a_filter" xml:space="preserve">
<value>Vyberte filter</value>
</data>
<data name="Serial_number" xml:space="preserve">
<value>Sériové číslo</value>
</data>
<data name="Part_name" xml:space="preserve">
<value>Označenie súčiastky</value>
</data>
<data name="Part_with_barcode" xml:space="preserve">
<value>Súčiastka a kód</value>
</data>
<data name="Barcode_no_ref" xml:space="preserve">
<value>Čiarový kód (iný ako referečný)</value>
</data>
<data name="Part_with_barcode_no_ref" xml:space="preserve">
<value>Súčiastka a kód (iný ako referečný)</value>
</data>
<data name="can_only_be_used_as_the_first_filter" xml:space="preserve">
<value>musí byť prvý filter v poradí.</value>
</data>
<data name="Filter" xml:space="preserve">
<value>Filter</value>
</data>
<data name="More_informations" xml:space="preserve">
<value>Detaily</value>
</data>
<data name="Serial_nr" xml:space="preserve">
<value>Sériové č.</value>
</data>
<data name="There_should_be_one_0_filter_configured" xml:space="preserve">
<value>Mal by byť nakonfigurovaný jeden filter '{0}'</value>
</data>
<data name="Flow_tube" xml:space="preserve">
<value>Prietoková trubica</value>
</data>
<data name="Test_result" xml:space="preserve">
<value>Výsledok overovania</value>
</data>
<data name="Order" xml:space="preserve">
<value>Zákazka</value>
</data>
<data name="Time_stamp" xml:space="preserve">
<value>Časová značka</value>
</data>
<data name="Time" xml:space="preserve">
<value>Čas</value>
</data>
<data name="Export" xml:space="preserve">
<value>Exportovať</value>
</data>
<data name="Error_exporting_results" xml:space="preserve">
<value>Chyba pri exportovaní výsledkov</value>
</data>
<data name="Count" xml:space="preserve">
<value>Počet</value>
</data>
<data name="Databases" xml:space="preserve">
<value>Databázy</value>
</data>
<data name="RefRecordId" xml:space="preserve">
<value>Id záznamu</value>
</data>
<data name="Ref_part_barcode" xml:space="preserve">
<value>Kód referenčnej súčiastky</value>
</data>
<data name="Add_data_from_Oracle" xml:space="preserve">
<value>Dohľadaj údaje z Oracle</value>
</data>
<data name="Workstep_and_associated_part" xml:space="preserve">
<value>Krok postupu a pridružená súčiastka </value>
</data>
<data name="Associated_part" xml:space="preserve">
<value>Pridružená súčiastka</value>
</data>
<data name="Workstep" xml:space="preserve">
<value>Krok postupu</value>
</data>
<data name="Default_settings_are_used" xml:space="preserve">
<value>Použijú sa základné nastavenia.</value>
</data>
<data name="Program_is_running_for_the_1st_time_on_this_PC" xml:space="preserve">
<value>Na tomto počítači nebol tento program ani raz spustený.</value>
</data>
<data name="Warning" xml:space="preserve">
<value>Upozornenie</value>
</data>
<data name="Close_it_please" xml:space="preserve">
<value>Zavrite ho prosím 'Správcom úloh' (Task manager).</value>
</data>
<data name="Program_0_is_running_already" xml:space="preserve">
<value>Program '[0}' už beží.</value>
</data>
<data name="Cancel" xml:space="preserve">
<value>Zrušiť</value>
</data>
<data name="Save" xml:space="preserve">
<value>Uložiť</value>
</data>
<data name="User_login_is_required" xml:space="preserve">
<value>Vyžaduje sa prihlásenie používateľa</value>
</data>
<data name="Connection_string_tracing_DB" xml:space="preserve">
<value>Konfigurácia databázy sledovania výroby</value>
</data>
<data name="Connection_string_users_DB" xml:space="preserve">
<value>Konfigurácia databázy používateľov</value>
</data>
</root>
File diff suppressed because it is too large Load Diff
@@ -1,26 +0,0 @@
<log4net>
<!-- Program log appenders -->
<appender name="ProductionTracing" type="log4net.Appender.RollingFileAppender">
<file value="..\Logs\TracingLog.txt" />
<appendToFile value="true" />
<rollingMode value="Date" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{HH:mm:ss.fff} %logger - %message%newline" />
</layout>
</appender>
<!-- Set root logger -->
<root>
<level value="ERROR" />
</root>
<!-- Set program loggers -->
<logger name="ProductionTracing">
<appender-ref ref="ProductionTracing" /> <level value="WARN" />
<level value="WARN" />
</logger>
<!-- Set program logging levels -->
<logger name="ProductionTracing.Program"> <level value="INFO" /> </logger>
</log4net>
-16
View File
@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" /></startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.4000" newVersion="4.0.0.4000" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Iesi.Collections" publicKeyToken="aa95f207798dfdb4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="FluentNHibernate" version="2.0.3.0" targetFramework="net40" />
<package id="Iesi.Collections" version="4.0.0.4000" targetFramework="net40" />
<package id="NHibernate" version="4.0.4.4000" targetFramework="net40" />
</packages>
+2 -2
View File
@@ -5,11 +5,11 @@ using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("RecordProcessing")]
[assembly: AssemblyTitle("RFPowerCommon")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("RecordProcessing")]
[assembly: AssemblyProduct("RFPowerCommon")]
[assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
+1 -3
View File
@@ -20,7 +20,6 @@ namespace RecordProcessing
CommTest, /// Communication test of water meter
FlowtubeTestHe, /// Flowtube test with Helium
FlowtubeTestAir, /// Flowtube test with air
LaserNanjing, /// Laser markig in Xylem Nanjing
Count
}
@@ -227,8 +226,7 @@ namespace RecordProcessing
case RecordType.CommTest: record = CommTestRecord.FromFile(fileName); break;
case RecordType.FlowtubeTestHe: record = FlowtubeTestHeRecord.FromFile(fileName); break;
case RecordType.FlowtubeTestAir: record = FlowtubeTestAirRecord.FromFile(fileName); break;
case RecordType.LaserNanjing: record = LaserNanjingRecord.FromFile(fileName); break;
default: record = null; break;
default: record = null; break;
}
/// Process data extracted from the file
+1 -2
View File
@@ -8,7 +8,7 @@
<ProjectGuid>{67BD7A8F-0FED-4FDE-B875-78D5A2BC9B2C}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>RecordProcessing</RootNamespace>
<RootNamespace>RFPowerCommon</RootNamespace>
<AssemblyName>RFPowerCommon</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
@@ -61,7 +61,6 @@
<Compile Include="Records\CommTestRecord.cs" />
<Compile Include="Records\FlowtubeTestAirRecord.cs" />
<Compile Include="Records\FlowtubeTestHeRecord.cs" />
<Compile Include="Records\LaserNanjingRecord.cs" />
<Compile Include="Records\RFTestPrintDocument.cs">
<SubType>Component</SubType>
</Compile>
@@ -1,91 +0,0 @@
///
/// Copyright (c) 2022 Sensus Slovensko a.s.
///
using System;
using System.Globalization;
using System.IO;
using System.Text;
using log4net;
namespace RecordProcessing.Records
{
public class LaserNanjingRecord : IRecord
{
static readonly ILog log = LogManager.GetLogger(typeof(LaserNanjingRecord));
public bool CanSaveRecordToOracle() { return false; }
public bool SaveRecordToOracle(Oracle.DataAccess.Client.OracleConnection oraConn) { return false; }
public bool CanPrintRecord() { return false; }
public bool PrintRecord() { return false; }
public static string Path;
public string FileName { get { return fileName; } }
public string SN { get { return sn; } set { sn = value; } }
public DateTime TimeStamp { get { return timeStamp; } }
public Status Status { get { return status; } }
public string Remark { get { return string.Empty; } }
public string ResultStr { get { return string.Empty; } }
string fileName;
string sn;
DateTime timeStamp;
Status status;
string remark;
public LaserNanjingRecord()
{
sn = null;
status = Status.Interrupted;
}
/// <summary>
/// Load a record from an xml-file
/// </summary>
/// <param name="fileName">xml-filename</param>
/// <returns>Record or null</returns>
public static LaserNanjingRecord FromFile(string fileName)
{
try
{
string bareFileName = System.IO.Path.GetFileName(fileName).Replace(".csv", "");
LaserNanjingRecord record = new LaserNanjingRecord();
record.fileName = bareFileName;
record.timeStamp = DateTime.Now;
using (StreamReader iStream = new StreamReader(fileName))
{
string firstLine = iStream.ReadLine();
while (true)
{
string nextLine = iStream.ReadLine();
if (nextLine == null) break;
string[] fields = nextLine.Split(',');
if (fields.Length >= 6)
{
record.sn = fields[1];
record.status = (fields[5] == "OK") ? Status.Passed : Status.Failed;
}
}
log.InfoFormat("Succesfully parsed: {0}", record);
return record;
}
}
catch (Exception exc)
{
log.ErrorFormat("Cannot open or parse file {0}: {1}", fileName, exc.Message);
return null;
}
}
public override string ToString()
{
return string.Format("File={0} Housing s/n={1}, Rslt={2}", fileName, sn, status);
}
}
}
+3
View File
@@ -2,12 +2,15 @@
/// Copyright (c) 2019 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Xml;
using Gma.QrCodeNet.Encoding;
using log4net;
using NHibernate;
using Oracle.DataAccess.Client;
using System.Drawing;
namespace RecordProcessing.Records
{
+21 -27
View File
@@ -107,7 +107,8 @@ namespace Results.Entities
///
/// Not mapped to database
///
public virtual string Workflow { get; set; } /// Not mapped to DB !!! Production tracing workflow name
public virtual int ProcessId { get; set; } /// Not mapped to DB !!! Tracing DB Process ID
public virtual bool LastRecordIsNok { get; set; } /// Not mapped to DB !!! Previous record verification result
public virtual WaterMeterData WaterMeterData { get; set; }
@@ -121,7 +122,7 @@ namespace Results.Entities
public virtual string Producer() { return WaterMeterData.Producer; }
public virtual string MetrologicalClass() { return WaterMeterData.MetrologicalClass; }
public virtual string ApprovalInfo() { return WaterMeterData.ApprovalInfo; }
public virtual bool NewQnames() { return WaterMeterData.NewQnames; }
public virtual bool NewQnames() { return WaterMeterData.NewQnames; }
public virtual double Q4_Qmax() { return WaterMeterData.Q4_Qmax; }
public virtual double Q3_Qn() { return WaterMeterData.Q3_Qn; }
public virtual double Q2_Qt() { return WaterMeterData.Q2_Qt; }
@@ -435,24 +436,20 @@ namespace Results.Entities
RawTestInfos = null;
CompleteTestInfos = null;
Workflow = string.Empty;
ProcessId = 0;
ErrorFlags = 0;
InfoFlags = 0;
LastRecordIsNok = false;
/// Initialize strings
SerialNr = string.Empty;
SerialNrAux = string.Empty;
RadioAddress = string.Empty;
PurchaseOrder = string.Empty;
EndState = string.Empty;
EndStateAux = string.Empty;
ArchivePath = string.Empty;
Remark = string.Empty;
#if IPERL
FWVersion = string.Empty;
#endif
#if TURA_SPECIAL
RadioAddress = string.Empty;
ProdUserName = string.Empty;
ProdPurchaseOrder = string.Empty;
#endif
@@ -468,7 +465,6 @@ namespace Results.Entities
SerialNr = src.SerialNr;
SerialNrAux = src.SerialNrAux;
RadioAddress = src.RadioAddress;
PurchaseOrder = src.PurchaseOrder;
YearOfProduction = src.YearOfProduction;
WMPosition = src.WMPosition;
@@ -497,29 +493,29 @@ namespace Results.Entities
FWVersion = src.FWVersion;
#endif
#if TURA_SPECIAL
PaletteNr = src.PaletteNr;
UmkartonNr = src.UmkartonNr;
ProdTestBench = src.ProdTestBench;
ProdWMPosition = src.ProdWMPosition;
ProdUserName = src.ProdUserName;
ProdPurchaseOrder = src.ProdPurchaseOrder;
ProdPassed = src.ProdPassed;
ProdResultCode = src.ProdResultCode;
ProdQ2CorrRL = src.ProdQ2CorrRL;
ProdQ2CorrLR = src.ProdQ2CorrLR;
RadioAddress = src.RadioAddress;
PaletteNr = src.PaletteNr;
UmkartonNr = src.UmkartonNr;
ProdTestBench = src.ProdTestBench;
ProdWMPosition = src.ProdWMPosition;
ProdUserName = src.ProdUserName;
ProdPurchaseOrder = src.ProdPurchaseOrder;
ProdPassed = src.ProdPassed;
ProdResultCode = src.ProdResultCode;
ProdQ2CorrRL = src.ProdQ2CorrRL;
ProdQ2CorrLR = src.ProdQ2CorrLR;
#endif
AssignedSerialNr = src.AssignedSerialNr;
Prefix = src.Prefix;
Suffix = src.Suffix;
CompleteSerialNr = src.CompleteSerialNr;
OriRadioAddress = src.OriRadioAddress;
WMTypeRevision = src.WMTypeRevision;
Pruefindex = src.Pruefindex;
HydrPruefung = src.HydrPruefung;
RawTestInfos = src.RawTestInfos; /// Not mapped to DB
CompleteTestInfos = src.CompleteTestInfos; /// Not mapped to DB
Workflow = src.Workflow; /// Not mapped to DB
ProcessId = src.ProcessId; /// Not mapped to DB
LastRecordIsNok = src.LastRecordIsNok; /// Not mapped to DB
foreach (var mtr in MeterTestRslts)
@@ -648,7 +644,6 @@ namespace Results.Entities
writer.Write(Id);
writer.Write((SerialNr != null) ? SerialNr : string.Empty);
writer.Write((SerialNrAux != null) ? SerialNrAux : string.Empty);
writer.Write((RadioAddress != null) ? RadioAddress : string.Empty);
writer.Write((PurchaseOrder != null) ? PurchaseOrder : string.Empty);
writer.Write(YearOfProduction);
writer.Write(WMPosition);
@@ -677,6 +672,7 @@ namespace Results.Entities
writer.Write((FWVersion != null) ? FWVersion : string.Empty);
#endif
#if TURA_SPECIAL
writer.Write((RadioAddress != null) ? RadioAddress : string.Empty);
writer.Write(PaletteNr);
writer.Write(UmkartonNr);
writer.Write((ProdTestBench != null) ? ProdTestBench : string.Empty);
@@ -692,7 +688,6 @@ namespace Results.Entities
writer.Write((Prefix != null) ? Prefix : string.Empty);
writer.Write((Suffix != null) ? Suffix : string.Empty);
writer.Write((CompleteSerialNr != null) ? CompleteSerialNr : string.Empty);
writer.Write((OriRadioAddress != null) ? OriRadioAddress : string.Empty);
writer.Write(WMTypeRevision);
writer.Write(Pruefindex);
writer.Write(HydrPruefung);
@@ -713,7 +708,7 @@ namespace Results.Entities
for (int i = 0; i < completeTestInfos.Length; i++) completeTestInfos[i].WriteBinary(writer);
}
writer.Write(Workflow);
writer.Write(ProcessId);
writer.Write(LastRecordIsNok);
/// Save WaterMeterData or WaterMeterData.Id
@@ -742,7 +737,6 @@ namespace Results.Entities
Id = reader.ReadInt32();
SerialNr = reader.ReadString();
SerialNrAux = reader.ReadString();
RadioAddress = reader.ReadString();
PurchaseOrder = reader.ReadString();
YearOfProduction = reader.ReadInt32();
WMPosition = reader.ReadInt32();
@@ -771,6 +765,7 @@ namespace Results.Entities
FWVersion = reader.ReadString();
#endif
#if TURA_SPECIAL
RadioAddress = reader.ReadString();
PaletteNr = reader.ReadInt32();
UmkartonNr = reader.ReadInt32();
ProdTestBench = reader.ReadString();
@@ -786,7 +781,6 @@ namespace Results.Entities
Prefix = reader.ReadString();
Suffix = reader.ReadString();
CompleteSerialNr = reader.ReadString();
OriRadioAddress = reader.ReadString();
WMTypeRevision = reader.ReadInt32();
Pruefindex = reader.ReadInt32();
HydrPruefung = reader.ReadInt32();
@@ -813,7 +807,7 @@ namespace Results.Entities
}
CompleteTestInfos = completeTestInfos;
Workflow = reader.ReadString();
ProcessId = reader.ReadInt32();
LastRecordIsNok = reader.ReadBoolean();
/// Retrieve TestData
+2 -2
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
/// Copyright (c) 2015-2017 Sensus Metering Systems
///
using FluentNHibernate.Mapping;
using Results.Entities;
@@ -61,9 +61,9 @@ namespace Results.Mappings
Map(x => x.Suffix);
Map(x => x.CompleteSerialNr);
Map(x => x.OriRadioAddress);
Map(x => x.WMTypeRevision);
Map(x => x.Pruefindex);
Map(x => x.HydrPruefung);
Map(x => x.WMTypeRevision);
#endif
References(x => x.WaterMeterData);
References(x => x.Batch);
+16 -13
View File
@@ -1,7 +1,4 @@
///
/// Copyright (c) 2019-2022 Sensus Metering Systems
///
using System;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
@@ -21,23 +18,29 @@ namespace Results.Output
public static Chart GetChart(WaterMeter wm, bool isPrinter, Common.Unit flowUnit)
{
double maxFlow = 0;
double maxFlow_m3h = 0;
IList<PointF> unsortedPoints = new List<PointF>();
foreach (var mtr in wm.RegularMeterTestRslts())
{
double flow = mtr.TestRslt.FlowVolume;
var td = mtr.TestRslt.TestData;
if (mtr.IsPilotRslt() && flow > 0 && td.Evaluate &&
(td.Publish == (sbyte)Publish.Always || (!isPrinter && td.Publish == (sbyte)Publish.OnScreen)))
if (mtr.IsPilotRslt() && mtr.TestRslt.TestData.Evaluate && (mtr.TestRslt.TestTime > 0) && (mtr.TestRslt.PulsesMaster > 0))
{
if (flow > maxFlow) maxFlow = flow;
unsortedPoints.Add(new PointF((float)Common.Units.ConvertTo(flowUnit, flow), (float)mtr.Error));
double flow_m3h = (mtr.TestTime != 0)
? (3.6 * mtr.TestRslt.VolumeCTV / mtr.TestTime * mtr.PulsesMaster / mtr.TestRslt.PulsesMaster)
: (3.6 * mtr.TestRslt.VolumeCTV / mtr.TestRslt.TestTime);
if (flow_m3h > maxFlow_m3h) maxFlow_m3h = flow_m3h;
double flow = Common.Units.ConvertTo(flowUnit, flow_m3h); /// Convert to specified units
if (flow > 0)
{
unsortedPoints.Add(new PointF((float)flow, (float)mtr.Error));
}
}
}
IEnumerable<PointF> sortedPoints = unsortedPoints.OrderBy(x => x.X);
bool isQ4 = (maxFlow > 1.1 * wm.WaterMeterData.Q3_Qn);
bool isQ4 = (maxFlow_m3h > 1.1 * wm.WaterMeterData.Q3_Qn);
Chart chart = new Chart
{
+2 -2
View File
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.1.1849.0")]
[assembly: AssemblyFileVersion("3.1.1849.0")]
[assembly: AssemblyVersion("3.1.1802.0")]
[assembly: AssemblyFileVersion("3.1.1802.0")]
+2 -2
View File
@@ -19,7 +19,7 @@
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<DefineConstants>TRACE;DEBUG;ORACLE_DB</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>AnyCPU</PlatformTarget>
@@ -29,7 +29,7 @@
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<DefineConstants>TRACE;ORACLE_DB</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
+1 -1
View File
@@ -222,7 +222,7 @@ namespace Results
AllItems.Add(new WMeterRsltItemSpec(ItemID.ConstMaster, string.Format("k MID ()"), "Const. of the reference flow meter", Quantity.PulsePerLtr, ItemCategory.TestResult, (w, t, u, f, p) => (w.GetTestRslt(t) == null) ? "" : FormatDbl(u, f, p, "V4", ((w.GetTestRslt(t).ConstMaster < float.Epsilon) ? 0 : (1 / w.GetTestRslt(t).ConstMaster)))));
AllItems.Add(new WMeterRsltItemSpec(ItemID.ConstMasterRaw, string.Format("k MID raw ()"),"Const. of the ref. flow meter uncorrected", Quantity.PulsePerLtr, ItemCategory.TestResult, (w, t, u, f, p) => (w.GetTestRslt(t) == null) ? "" : FormatDbl(u, f, p, "V4", ((w.GetTestRslt(t).ConstMasterRaw < float.Epsilon) ? 0 : (1 / w.GetTestRslt(t).ConstMasterRaw)))));
AllItems.Add(new WMeterRsltItemSpec(ItemID.ConstMasterCorr,string.Format("k MID corr ()"), "Const. of the ref. flow meter corrected", Quantity.PulsePerLtr, ItemCategory.TestResult, (w, t, u, f, p) => (w.GetTestRslt(t) == null) ? "" : FormatDbl(u, f, p, "V4", ((w.GetTestRslt(t).ConstMasterCorr < float.Epsilon) ? 0 : (1 / w.GetTestRslt(t).ConstMasterCorr)))));
AllItems.Add(new WMeterRsltItemSpec(ItemID.ConstMasterCorr,string.Format("k MID corr ()"), "Const. of the ref. flow meter corrected", Quantity.PulsePerLtr, ItemCategory.TestResult, (w, t, u, f, p) => (w.GetTestRslt(t) == null) ? "" : FormatDbl(u, f, p, "V4", ((w.GetTestRslt(t).ConstMasterRaw < float.Epsilon) ? 0 : (1 / w.GetTestRslt(t).ConstMasterCorr)))));
///
/// Temperature
-16
View File
@@ -581,22 +581,6 @@ namespace SchematicDrawing
Shapes[DrShIx(Shape.UniCB, Sz.M)] = Shapes[DrShIx(Shape.UniCB, Sz.L)];
Shapes[DrShIx(Shape.UniCB, Sz.XL)] = Shapes[DrShIx(Shape.UniCB, Sz.L)];
/// Clamping device
Shapes[DrShIx(Shape.Clamping, Sz.XL)] = new DrawingShape(Shape.Clamping, Sz.XL, 5, 5, new Node[] { }, null, 0, 0, 50, 50,
Properties.Resources.Clamping_XL_on,
Properties.Resources.Clamping_XL_off);
Shapes[DrShIx(Shape.Clamping, Sz.S)] = Shapes[DrShIx(Shape.Clamping, Sz.XL)];
Shapes[DrShIx(Shape.Clamping, Sz.M)] = Shapes[DrShIx(Shape.Clamping, Sz.XL)];
Shapes[DrShIx(Shape.Clamping, Sz.L)] = Shapes[DrShIx(Shape.Clamping, Sz.XL)];
/// Cover device
Shapes[DrShIx(Shape.Cover, Sz.XL)] = new DrawingShape(Shape.Cover, Sz.XL, 6, 5, new Node[] { }, null, 0, 0, 60, 50,
Properties.Resources.Cover_XL_on,
Properties.Resources.Cover_XL_off);
Shapes[DrShIx(Shape.Cover, Sz.S)] = Shapes[DrShIx(Shape.Cover, Sz.XL)];
Shapes[DrShIx(Shape.Cover, Sz.M)] = Shapes[DrShIx(Shape.Cover, Sz.XL)];
Shapes[DrShIx(Shape.Cover, Sz.L)] = Shapes[DrShIx(Shape.Cover, Sz.XL)];
/// Emergency stop
Shapes[DrShIx(Shape.EmergencyStop, Sz.XL)] = new DrawingShape(Shape.EmergencyStop, Sz.XL, 5, 5, new Node[] { }, null, 0, 0, 50, 50,
Properties.Resources.EmergencyStop_XL_on,
+2 -4
View File
@@ -29,11 +29,8 @@ namespace SchematicDrawing
public enum Shape
{
Ambient,
Clamping,
Cover,
Cross,
Div,
EmergencyStop,
FlowM,
Junction,
Knee,
@@ -47,10 +44,11 @@ namespace SchematicDrawing
Tank,
Tee,
TempM,
UniCB,
Vacuum,
Valve,
WaterM,
UniCB,
EmergencyStop,
Count
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 277 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 510 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 382 B

-40
View File
@@ -60,46 +60,6 @@ namespace SchematicDrawing.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Clamping_XL_off {
get {
object obj = ResourceManager.GetObject("Clamping_XL_off", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Clamping_XL_on {
get {
object obj = ResourceManager.GetObject("Clamping_XL_on", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Cover_XL_off {
get {
object obj = ResourceManager.GetObject("Cover_XL_off", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Cover_XL_on {
get {
object obj = ResourceManager.GetObject("Cover_XL_on", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@@ -382,16 +382,4 @@
<data name="EmergencyStop_XL_on" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Pictures\EmergencyStop-XL-on.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Clamping_XL_off" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Pictures\Clamping-XL-off.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Clamping_XL_on" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Pictures\Clamping-XL-on.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Cover_XL_off" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Pictures\Cover-XL-off.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Cover_XL_on" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Pictures\Cover-XL-on.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>
-4
View File
@@ -94,10 +94,6 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="Pictures\Clamping-XL-off.png" />
<Content Include="Pictures\Clamping-XL-on.png" />
<None Include="Pictures\Cover-XL-off.png" />
<None Include="Pictures\Cover-XL-on.png" />
<Content Include="Pictures\Div-L-sink-dry.png" />
<Content Include="Pictures\Div-L-sink-wet.png" />
<Content Include="Pictures\Div-L-tank-dry.png" />
+23 -82
View File
@@ -186,25 +186,21 @@ namespace SharedDatabase.Entities
{
message = string.Empty;
int idummy;
long ldummy;
switch (i)
{
case 0: /// POName
if (str.Length < 1 || str.Length > 10)
if (str.Length != 7)
{
message = string.Format("Order must have up to 10 digits");
message = string.Format("Order must have 7 digits");
return false;
}
else if (!long.TryParse(str, out ldummy) || ldummy <= 0)
else if (!int.TryParse(str, out idummy) || idummy <= 0)
{
message = string.Format("Order must be a positive integer number up to 9999999999");
message = string.Format("Order must be a positive integer number");
return false;
}
return true;
case 1: /// POState
if (ParamValues(i).Contains(str)) return true;
break;
case 2: /// Workflow
case 3: /// TestProcedure
case 9: /// LaserMarking
@@ -216,13 +212,16 @@ namespace SharedDatabase.Entities
case 4: /// VariantCode
case 5: /// VacoDescription
case 6: /// MadeInText
case 7: /// Year
if (int.TryParse(str, out idummy) && idummy > 2020 && idummy < 2099) return true;
break;
case 8: /// ModuleParam
/// string (incl. an empty one)
if (str != null) return true;
message = string.Format("Should not be null", ParamName(i));
return false;
case 7: /// Year
if (int.TryParse(str, out idummy) && idummy > 2020 && idummy < 2099) return true;
case 1: /// POState
if (ParamValues(i).Contains(str)) return true;
break;
case 11: /// PiecesCount
case 14: /// SNDigits
@@ -250,12 +249,7 @@ namespace SharedDatabase.Entities
return false;
}
/// <summary>
/// Copy content of one entity to another entity (except of Id)
/// </summary>
/// <param name="dest">Entity to copy to</param>
/// <param name="visibleOnly">true = do not copy invisible members</param>
public virtual void CopyContentTo(OrderInfo dest, bool visibleOnly = false)
public virtual void CopyContentTo(OrderInfo dest)
{
dest.POName = POName;
dest.POState = POState;
@@ -277,72 +271,19 @@ namespace SharedDatabase.Entities
dest.RAFirst = RAFirst;
dest.RASuffix = RASuffix;
dest.Remark = Remark;
if (!visibleOnly)
{
dest.BaseNr1 = BaseNr1;
dest.BaseNr2 = BaseNr2;
dest.BaseNr3 = BaseNr3;
dest.BaseNr4 = BaseNr4;
dest.BaseNr5 = BaseNr5;
dest.CurrentPcsCount = CurrentPcsCount;
dest.CurrentSN = CurrentSN;
dest.CurrentRA = CurrentRA;
dest.CurrentNr1 = CurrentNr1;
dest.CurrentNr2 = CurrentNr2;
dest.CurrentNr3 = CurrentNr3;
dest.CurrentNr4 = CurrentNr4;
dest.CurrentNr5 = CurrentNr5;
}
}
/// <summary>
/// Compare content of two entities (except of Id)
/// </summary>
/// <param name="dest">Entity to compare with</param>
/// <param name="visibleOnly">true = do not compare invisible members</param>
/// <returns>true = two entities are equal (except of Id)</returns>
public virtual bool Equals(OrderInfo dest, bool visibleOnly = false)
{
if (dest.POName != POName) return false;
if (dest.POState != POState) return false;
if (dest.Workflow != Workflow) return false;
if (dest.TestProcedure != TestProcedure) return false;
if (dest.VariantCode != VariantCode) return false;
if (dest.VacoDescription != VacoDescription) return false;
if (dest.MadeInText != MadeInText) return false;
if (dest.Year != Year) return false;
if (dest.ModuleParam != ModuleParam) return false;
if (dest.LaserMarking != LaserMarking) return false;
if (dest.Packing != Packing) return false;
if (dest.PiecesCount != PiecesCount) return false;
if (dest.SNPrefix != SNPrefix) return false;
if (dest.SNFirst != SNFirst) return false;
if (dest.SNDigitsCount != SNDigitsCount) return false;
if (dest.SNSuffix != SNSuffix) return false;
if (dest.RAPrefix != RAPrefix) return false;
if (dest.RAFirst != RAFirst) return false;
if (dest.RASuffix != RASuffix) return false;
if (dest.Remark != Remark) return false;
if (!visibleOnly)
{
if (dest.BaseNr1 != BaseNr1) return false;
if (dest.BaseNr2 != BaseNr2) return false;
if (dest.BaseNr3 != BaseNr3) return false;
if (dest.BaseNr4 != BaseNr4) return false;
if (dest.BaseNr5 != BaseNr5) return false;
if (dest.CurrentPcsCount != CurrentPcsCount) return false;
if (dest.CurrentSN != CurrentSN) return false;
if (dest.CurrentRA != CurrentRA) return false;
if (dest.CurrentNr1 != CurrentNr1) return false;
if (dest.CurrentNr2 != CurrentNr2) return false;
if (dest.CurrentNr3 != CurrentNr3) return false;
if (dest.CurrentNr4 != CurrentNr4) return false;
if (dest.CurrentNr5 != CurrentNr5) return false;
}
return true;
dest.BaseNr1 = BaseNr1;
dest.BaseNr2 = BaseNr2;
dest.BaseNr3 = BaseNr3;
dest.BaseNr4 = BaseNr4;
dest.BaseNr5 = BaseNr5;
dest.CurrentPcsCount = CurrentPcsCount;
dest.CurrentSN = CurrentSN;
dest.CurrentRA = CurrentRA;
dest.CurrentNr1 = CurrentNr1;
dest.CurrentNr2 = CurrentNr2;
dest.CurrentNr3 = CurrentNr3;
dest.CurrentNr4 = CurrentNr4;
dest.CurrentNr5 = CurrentNr5;
}
/// <summary>
+11 -6
View File
@@ -105,7 +105,8 @@ namespace SharedDatabase.Entities
///
/// Not mapped to database
///
public virtual string Workflow { get; set; } /// Not mapped to DB !!! Production tracing workflow name
public virtual int ProcessId { get; set; } /// Not mapped to DB !!! Tracing DB Process ID
public virtual int SessionId { get; set; } /// Not mapped to DB !!! 1 (regular tracing DB session) or 2 (alternative tracing DB session)
public virtual bool LastRecordIsNok { get; set; } /// Not mapped to DB !!! Previous record verification result
@@ -120,7 +121,7 @@ namespace SharedDatabase.Entities
public virtual string Producer() { return WaterMeterData.Producer; }
public virtual string MetrologicalClass() { return WaterMeterData.MetrologicalClass; }
public virtual string ApprovalInfo() { return WaterMeterData.ApprovalInfo; }
public virtual bool NewQnames() { return WaterMeterData.NewQnames; }
public virtual bool NewQnames() { return WaterMeterData.NewQnames; }
public virtual double Q4_Qmax() { return WaterMeterData.Q4_Qmax; }
public virtual double Q3_Qn() { return WaterMeterData.Q3_Qn; }
public virtual double Q2_Qt() { return WaterMeterData.Q2_Qt; }
@@ -437,7 +438,8 @@ namespace SharedDatabase.Entities
RawTestInfos = null;
CompleteTestInfos = null;
Workflow = string.Empty;
ProcessId = 0;
SessionId = 0;
ErrorFlags = 0;
LastRecordIsNok = false;
@@ -516,7 +518,8 @@ namespace SharedDatabase.Entities
RawTestInfos = src.RawTestInfos; /// Not mapped to DB
CompleteTestInfos = src.CompleteTestInfos; /// Not mapped to DB
Workflow = src.Workflow; /// Not mapped to DB
ProcessId = src.ProcessId; /// Not mapped to DB
SessionId = src.SessionId; /// Not mapped to DB
LastRecordIsNok = src.LastRecordIsNok; /// Not mapped to DB
foreach (var mtr in MeterTestRslts)
@@ -709,7 +712,8 @@ namespace SharedDatabase.Entities
for (int i = 0; i < completeTestInfos.Length; i++) completeTestInfos[i].WriteBinary(writer);
}
writer.Write(Workflow);
writer.Write(ProcessId);
writer.Write(SessionId);
writer.Write(LastRecordIsNok);
/// Save WaterMeterData or WaterMeterData.Id
@@ -808,7 +812,8 @@ namespace SharedDatabase.Entities
}
CompleteTestInfos = completeTestInfos;
Workflow = reader.ReadString();
ProcessId = reader.ReadInt32();
SessionId = reader.ReadInt32();
LastRecordIsNok = reader.ReadBoolean();
/// Retrieve TestData
-1
View File
@@ -10,7 +10,6 @@ namespace SharedDatabase
public class Const
{
public const int MaxPartNameLen = 10;
public const string RAFormat = "D9"; /// Radio address digits count = 9
}
public enum CodeType
+2 -3
View File
@@ -17,7 +17,7 @@
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<DefineConstants>TRACE;DEBUG;ORACLE_DB</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
@@ -25,7 +25,7 @@
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<DefineConstants>TRACE;ORACLE_DB</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
@@ -141,7 +141,6 @@
<Compile Include="Output\SensusTestInfo.cs" />
<Compile Include="Output\Table.cs" />
<Compile Include="Output\WMChart.cs" />
<Compile Include="WorkflowSummary.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
+75 -22
View File
@@ -5,6 +5,7 @@ using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using log4net;
using SharedDatabase.Entities;
@@ -76,14 +77,14 @@ namespace SharedDatabase
{
/// This NHibernate tool takes a configuration (with mapping info in)
/// and exports a database schema from it
new NHibernate.Tool.hbm2ddl.SchemaExport(config).SetOutputFile("db_schema");
new SchemaExport(config).SetOutputFile("db_schema");
}
static void BuildSchemaCreate(Configuration config)
{
/// This NHibernate tool takes a configuration (with mapping info in)
/// and exports a database schema from it
new NHibernate.Tool.hbm2ddl.SchemaExport(config).Create(true, true);
new SchemaExport(config).Create(true, true);
}
/// Create a NHibernate session for the given database
@@ -191,8 +192,7 @@ namespace SharedDatabase
case 3: query = query.Where(rr => rr.Code3 == code); break;
case 4: query = query.Where(rr => rr.Code4 == code); break;
}
//var referenceRecords = query.OrderBy(rr => rr.Timestamp).Desc.List();
var referenceRecords = query.List();
var referenceRecords = query.OrderBy(rr => rr.Timestamp).Desc.List();
if (referenceRecords.Count == 1) return referenceRecords[0];
@@ -204,13 +204,67 @@ namespace SharedDatabase
}
}
public static Process GetWorkflowAndWorkstep(string workflowName, string workstepRootName, out Workstep workstep,
out string previousStepName, out string part1name, out string part2name,
ISession session = null)
{
workstep = null;
previousStepName = null;
part1name = null;
part2name = null;
if (string.IsNullOrEmpty(workflowName)) return null;
bool openAndCloseSession = (session == null) || !session.IsOpen;
try
{
if (openAndCloseSession) session = SessionFactory.OpenSession();
var wflows = session.QueryOver<Process>()
.Where(x => x.Name == workflowName)
.And(x => (x.ReleaseStatus == ReleaseStatus.ToBeApproved ||
x.ReleaseStatus == ReleaseStatus.Released ||
x.ReleaseStatus == ReleaseStatus.ReleasedActive))
.List();
if (wflows.Count == 1)
{
workstep = wflows[0].Worksteps.FirstOrDefault(x => x.Name.ToLower().Contains(workstepRootName));
int previousStepNr = workstep.WorkstepNr - 1;
var previousStep = (previousStepNr < 1) ? null : wflows[0].Worksteps.FirstOrDefault(x => x.WorkstepNr == previousStepNr);
var part1 = wflows[0].Parts.FirstOrDefault(x => x.StepNumber == 1);
var part2 = wflows[0].Parts.FirstOrDefault(x => x.StepNumber == 2);
if (previousStep != null) previousStepName = previousStep.Name;
if (part1 != null) part1name = part1.Name;
if (part2 != null) part2name = part2.Name;
}
if (openAndCloseSession) session.Close();
if (wflows.Count == 1) return wflows[0]; /// Successful
///
return null;
}
catch (Exception exc)
{
if (session != null && session.IsOpen) session.Close();
log.ErrorFormat("GetWorkflow({0}) failed: {1}", workflowName, exc.Message);
return null;
}
}
/// <summary>
/// Updates processes, processDictionary and workstepsDictionary
/// </summary>
/// <param name="session">DB session</param>
public static IList<WorkflowSummary> ReadWorkflowSummariesFromDB(ISession session,
string workstepPattern,
bool readDeactivatedWorkflows = false)
public static IList<Process> ReadWorkflowsFromDB(ISession session,
string thisWorkstepName,
out Dictionary<int, Process> workflowDict,
out Dictionary<int, IList<Workstep>> workflowStepsDict,
out Dictionary<int, ScanVerificationInfo> verifInfos,
bool readDeactivatedWorkflows = false)
{
IList<Process> workflows;
if (readDeactivatedWorkflows)
@@ -229,31 +283,30 @@ namespace SharedDatabase
)).List();
}
var listOfWFSummaries = new List<WorkflowSummary>();
workflowDict = new Dictionary<int, Process>();
workflowStepsDict = new Dictionary<int, IList<Workstep>>();
verifInfos = new Dictionary<int, ScanVerificationInfo>();
foreach (var wf in workflows)
{
var wSum = new WorkflowSummary(wf);
IList<Workstep> steps = session.QueryOver<Workstep>()
.Where(ws => ((ws.Workflow == wf) && (ws.Name == thisWorkstepName)))
.List();
workflowDict.Add(wf.Id, wf);
workflowStepsDict.Add(wf.Id, steps);
var workstep = wf.Worksteps.FirstOrDefault(x => x.Name.ToLower().Contains(workstepPattern.ToLower()));
if (workstep != null)
ScanVerificationInfo info;
if ((steps.Count == 1) && ((info = TracingDB.AnalyzeProcess(session, wf, steps[0])) != null))
{
wSum.WorkstepName = workstep.Name;
int previousStepNr = workstep.WorkstepNr - 1;
var previousStep = (previousStepNr < 1) ? null : wf.Worksteps.FirstOrDefault(x => x.WorkstepNr == previousStepNr);
if (previousStep != null) wSum.PreviousWorkstepName = previousStep.Name;
verifInfos.Add(wf.Id, info);
log.WarnFormat("Workflow {0} :: Verified step={1} part={2} verify ref. part={3}", wf, info.Workstep, info.Part, info.VerifyReferencePart);
}
var part1 = wf.Parts.FirstOrDefault(x => x.StepNumber == 1);
var part2 = wf.Parts.FirstOrDefault(x => x.StepNumber == 2);
if (part1 != null) wSum.Part1Name = part1.Name;
if (part2 != null) wSum.Part2Name = part2.Name;
listOfWFSummaries.Add(wSum);
}
return listOfWFSummaries;
return workflows;
}
/// <summary>
/// Finds a workstep and a part to be verified (typically a previous workstep and one of its parts).
/// Updates this.verifiedWorkstep, this.verifiedPart and this.verifyReferencePart.
-129
View File
@@ -1,129 +0,0 @@
///
/// Copyright (c) 2022 Sensus Slovensko a.s.
///
using System;
using System.Linq;
using log4net;
using NHibernate;
using SharedDatabase.Entities;
namespace SharedDatabase
{
public class WorkflowSummary
{
private static readonly ILog log = LogManager.GetLogger(typeof(WorkflowSummary));
public Entities.Process Workflow; /// Selected production tracing workflow
public string WorkstepName; /// Selected production tracing workstep
public string PreviousWorkstepName; /// Previous workstep name
public string Part1Name; /// 1st reference part name
public string Part2Name; /// 2nd reference part name or null
WorkflowSummary() { }
public WorkflowSummary(Entities.Process workflow)
{
Workflow = workflow;
}
/// <summary>
/// Read specified workflow and workstep from the production tracing database
/// and set WorkflowSummary members accordingly.
/// </summary>
/// <param name="workflowName">Workflow name</param>
/// <param name="workstepPattern">Part of a workstep name (not case sensitive)</param>
/// <param name="session">Database session or null</param>
/// <returns>Workflow summary or null</returns>
public static WorkflowSummary ReadFromDB(string workflowName, string workstepPattern = "test", ISession session = null)
{
if (string.IsNullOrEmpty(workflowName))
{
log.ErrorFormat("ReadFromDB() ... workflowName argument is null or empty");
return null;
}
bool openAndCloseSession = (session == null) || !session.IsOpen;
try
{
WorkflowSummary wSum = null;
if (openAndCloseSession) session = TracingDB.SessionFactory.OpenSession();
var wflows = session.QueryOver<Process>()
.Where(x => x.Name == workflowName)
.And(x => (x.ReleaseStatus == ReleaseStatus.ToBeApproved ||
x.ReleaseStatus == ReleaseStatus.Released ||
x.ReleaseStatus == ReleaseStatus.ReleasedActive))
.List();
if (wflows.Count == 1)
{
Process wf = wflows[0];
wSum = new WorkflowSummary(wf);
var workstep = wf.Worksteps.FirstOrDefault(x => x.Name.ToLower().Contains(workstepPattern.ToLower()));
if (workstep != null)
{
wSum.WorkstepName = workstep.Name;
int previousStepNr = workstep.WorkstepNr - 1;
var previousStep = (previousStepNr < 1) ? null : wf.Worksteps.FirstOrDefault(x => x.WorkstepNr == previousStepNr);
if (previousStep != null) wSum.PreviousWorkstepName = previousStep.Name;
}
var part1 = wf.Parts.FirstOrDefault(x => x.StepNumber == 1);
var part2 = wf.Parts.FirstOrDefault(x => x.StepNumber == 2);
if (part1 != null) wSum.Part1Name = part1.Name;
if (part2 != null) wSum.Part2Name = part2.Name;
}
if (openAndCloseSession) session.Close();
log.InfoFormat("ReadFromDB({0}, {1}) returns {2}", (wSum != null) ? wSum.ToString() : "<null>");
return wSum;
}
catch (Exception exc)
{
if (session != null && session.IsOpen) session.Close();
log.ErrorFormat("ReadFromDB({0}, {1}) failed: {2}", workflowName, workstepPattern, exc.Message);
return null;
}
}
/// <summary>
/// Compares two workflows, determines whether they are compatible.
/// Minimal requirement is Part1 and Part2 names are the same (both Part2 names might be null).
/// </summary>
/// <param name="wfs">Anothe workflow summary</param>
/// <param name="strict">true = strict comparison</param>
/// <returns>true when compatible</returns>
public bool IsCompatibleWith(WorkflowSummary wfs, bool strict = false)
{
if (strict)
{
return wfs != null &&
Part1Name == wfs.Part1Name &&
Part2Name == wfs.Part2Name &&
WorkstepName == wfs.WorkstepName &&
PreviousWorkstepName == wfs.PreviousWorkstepName &&
Workflow.Name == wfs.Workflow.Name;
}
else
{
return wfs != null &&
Part1Name == wfs.Part1Name &&
Part2Name == wfs.Part2Name;
}
}
public override string ToString()
{
return string.Format("workflow={0} workstep={1} previousWS={2} part1={3} part2={4}",
Workflow != null ? Workflow.Name : "<none>",
WorkstepName != null ? WorkstepName : "<none>",
PreviousWorkstepName != null ? PreviousWorkstepName : "<none>",
Part1Name != null ? Part1Name : "<none>",
Part2Name != null ? Part2Name : "<none>");
}
}
}
-12
View File
@@ -90,8 +90,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RecordProcessing", "RecordP
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenericTest", "GenericTest\GenericTest.csproj", "{1F6B4580-9D4F-43D6-9E76-E063298391E8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProductionTracing", "ProductionTracing\ProductionTracing.csproj", "{328AD6D5-6E62-42FB-B348-9899F813DBD3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -406,16 +404,6 @@ Global
{1F6B4580-9D4F-43D6-9E76-E063298391E8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{1F6B4580-9D4F-43D6-9E76-E063298391E8}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{1F6B4580-9D4F-43D6-9E76-E063298391E8}.Release|x86.ActiveCfg = Release|Any CPU
{328AD6D5-6E62-42FB-B348-9899F813DBD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{328AD6D5-6E62-42FB-B348-9899F813DBD3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{328AD6D5-6E62-42FB-B348-9899F813DBD3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{328AD6D5-6E62-42FB-B348-9899F813DBD3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{328AD6D5-6E62-42FB-B348-9899F813DBD3}.Debug|x86.ActiveCfg = Debug|Any CPU
{328AD6D5-6E62-42FB-B348-9899F813DBD3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{328AD6D5-6E62-42FB-B348-9899F813DBD3}.Release|Any CPU.Build.0 = Release|Any CPU
{328AD6D5-6E62-42FB-B348-9899F813DBD3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{328AD6D5-6E62-42FB-B348-9899F813DBD3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{328AD6D5-6E62-42FB-B348-9899F813DBD3}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+1 -1
View File
@@ -511,7 +511,7 @@ namespace TBF
}
history = newHistory;
}
Save();
return true;
}
}
+2 -2
View File
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("3.1.1872.0")]
[assembly: AssemblyFileVersion("3.1.1872.0")]
[assembly: AssemblyVersion("3.1.1848.0")]
[assembly: AssemblyFileVersion("3.1.1848.0")]
-27
View File
@@ -807,15 +807,6 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Clamping.
/// </summary>
internal static string Clamping {
get {
return ResourceManager.GetString("Clamping", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Class.
/// </summary>
@@ -879,15 +870,6 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Close form keys.
/// </summary>
internal static string Close_form_keys {
get {
return ResourceManager.GetString("Close_form_keys", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Close the cover.
/// </summary>
@@ -1158,15 +1140,6 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Cover.
/// </summary>
internal static string Cover {
get {
return ResourceManager.GetString("Cover", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Create DB.
/// </summary>
-6
View File
@@ -1704,10 +1704,4 @@
<data name="Processing_statistics" xml:space="preserve">
<value>Spracování statistik</value>
</data>
<data name="Clamping" xml:space="preserve">
<value>Upínač</value>
</data>
<data name="Cover" xml:space="preserve">
<value>Kryt</value>
</data>
</root>
-9
View File
@@ -2359,13 +2359,4 @@
<data name="Processing_statistics" xml:space="preserve">
<value>Processing statistics</value>
</data>
<data name="Clamping" xml:space="preserve">
<value>Clamping</value>
</data>
<data name="Cover" xml:space="preserve">
<value>Cover</value>
</data>
<data name="Close_form_keys" xml:space="preserve">
<value>Close form keys</value>
</data>
</root>

Some files were not shown because too many files have changed in this diff Show More