Compare commits
23
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f23fc0d4c4 | ||
|
|
10b17c250c | ||
|
|
8d47659660 | ||
|
|
08a08282b5 | ||
|
|
851c51aa7c | ||
|
|
ecc92176f3 | ||
|
|
2a97a8f584 | ||
|
|
c18f06af07 | ||
|
|
b9b609cabf | ||
|
|
f96bf993d8 | ||
|
|
899b379cf7 | ||
|
|
868d16d8ee | ||
|
|
bfe7c5a29e | ||
|
|
c7c1c21ab3 | ||
|
|
fe9cfa42ff | ||
|
|
32762f0fdb | ||
|
|
d42ad8c5cf | ||
|
|
2eaf2b044c | ||
|
|
0b400fcbd0 | ||
|
|
7facefb305 | ||
|
|
917051f072 | ||
|
|
589fd9cf18 | ||
|
|
4914ded61d |
+2
-4
@@ -16,8 +16,6 @@ Encrypt/bin/
|
||||
Encrypt/obj/
|
||||
EventViewer/bin/
|
||||
EventViewer/obj/
|
||||
Events/bin/
|
||||
Events/obj/
|
||||
FeatureVectorCalculator/bin/
|
||||
FeatureVectorCalculator/obj/
|
||||
GemCard/bin/
|
||||
@@ -32,6 +30,8 @@ MergeResultsDBs/bin/
|
||||
MergeResultsDBs/obj/
|
||||
OrderManagement/bin/
|
||||
OrderManagement/obj/
|
||||
ProductionTracing/bin/
|
||||
ProductionTracing/obj/
|
||||
RecordProcessing/bin/
|
||||
RecordProcessing/obj/
|
||||
ResetBatchNr/bin/
|
||||
@@ -56,8 +56,6 @@ ToFirstMonitor/bin/
|
||||
ToFirstMonitor/obj/
|
||||
ToSecondMonitor/bin/
|
||||
ToSecondMonitor/obj/
|
||||
Users/bin/
|
||||
Users/obj/
|
||||
UserManagement/bin/
|
||||
UserManagement/obj/
|
||||
WorkflowConfigurator/bin/
|
||||
|
||||
@@ -76,6 +76,7 @@
|
||||
</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>
|
||||
|
||||
@@ -10,14 +10,14 @@ namespace Common
|
||||
/// </summary>
|
||||
public class DBSettings : ICloneable
|
||||
{
|
||||
public Common.DBType DbType;
|
||||
public DBType DbType;
|
||||
public string ConnectionString;
|
||||
|
||||
public DBSettings()
|
||||
{
|
||||
}
|
||||
|
||||
public DBSettings(Common.DBType dbType, string connectionString)
|
||||
public DBSettings(DBType dbType, string connectionString)
|
||||
{
|
||||
this.DbType = dbType;
|
||||
this.ConnectionString = connectionString;
|
||||
|
||||
@@ -61,6 +61,9 @@ 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
@@ -213,9 +213,9 @@ namespace Common
|
||||
/// </summary>
|
||||
public static double ErrorFromVolumes(double measuredVolume, double trueVolume)
|
||||
{
|
||||
if (trueVolume <= float.Epsilon)
|
||||
if (Math.Abs(trueVolume) <= float.Epsilon)
|
||||
{
|
||||
if (measuredVolume <= float.Epsilon)
|
||||
if (Math.Abs(measuredVolume) <= float.Epsilon)
|
||||
{
|
||||
log.WarnFormat("ErrorFromVolumes({0},{1}) returns {2}", measuredVolume, trueVolume, -100.0);
|
||||
return -100.0;
|
||||
|
||||
@@ -35,7 +35,7 @@ namespace Common.Iperl
|
||||
public float RefFlow; /// [m3/h]
|
||||
public int Counter;
|
||||
|
||||
public UInt32 EmfRaw; /// From iPerl opto data
|
||||
public Int32 EmfRaw; /// Signed EMF from iPerl opto data
|
||||
public Int16 MagneticFieldRaw;
|
||||
public Int16 FlowRaw;
|
||||
public UInt32 VolumeRaw;
|
||||
@@ -50,8 +50,7 @@ namespace Common.Iperl
|
||||
///
|
||||
public double EMF()
|
||||
{
|
||||
Int32 signedEmf = (EmfRaw > 0x7FFFFF) ? ((int)EmfRaw - 0x1000000) : (int)EmfRaw;
|
||||
return 0.000000333 * (double)signedEmf;
|
||||
return 0.000000333 * (double)EmfRaw;
|
||||
}
|
||||
public double MagneticField() { return (double)MagneticFieldRaw; }
|
||||
public double Flow(double scalingFactor) { return 0.225 * scalingFactor * (double)FlowRaw; }
|
||||
@@ -120,7 +119,10 @@ namespace Common.Iperl
|
||||
return false;
|
||||
}
|
||||
|
||||
bool f1 = UInt32.TryParse(telegram.Substring(0, 6), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out EmfRaw);
|
||||
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 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);
|
||||
@@ -243,7 +245,7 @@ namespace Common.Iperl
|
||||
DateTime.Second.ToString("D2"),
|
||||
DateTime.Millisecond.ToString("D4"),
|
||||
Counter,
|
||||
EmfRaw.ToString("X6"),
|
||||
(EmfRaw & 0x00FFFFFF).ToString("X6"),
|
||||
MagneticFieldRaw.ToString("X4"),
|
||||
FlowRaw.ToString("X4"),
|
||||
VolumeRaw.ToString("X6"),
|
||||
|
||||
@@ -0,0 +1,338 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+15
-16
@@ -2,7 +2,6 @@
|
||||
/// Copyright (c) 2016-2021 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Common
|
||||
{
|
||||
@@ -358,21 +357,21 @@ namespace Common
|
||||
}
|
||||
}
|
||||
|
||||
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); }
|
||||
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); }
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -53,10 +53,9 @@ namespace Config.Entities
|
||||
return corrections[0].Correction;
|
||||
}
|
||||
|
||||
int count = corrections.Count;
|
||||
for (int i = 1; i < count; i++)
|
||||
for (int i = 1; i < corrections.Count; i++)
|
||||
{
|
||||
if (rawValue < corrections[0].Measurement)
|
||||
if (rawValue < corrections[i].Measurement)
|
||||
{
|
||||
double d1 = rawValue - corrections[i - 1].Measurement;
|
||||
double d2 = corrections[i].Measurement - rawValue;
|
||||
@@ -75,7 +74,7 @@ namespace Config.Entities
|
||||
}
|
||||
|
||||
/// rawValue is above the highest value in the correction table
|
||||
return corrections[count - 1].Correction;
|
||||
return corrections[corrections.Count - 1].Correction;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,36 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
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("Events")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Events")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2020")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("3a68150f-6cfc-4f15-a813-cef63bc8bb47")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// 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("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
+206
-23
@@ -30,21 +30,46 @@
|
||||
{
|
||||
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(29, 28);
|
||||
this.rawFileComboBox.Location = new System.Drawing.Point(0, 0);
|
||||
this.rawFileComboBox.Name = "rawFileComboBox";
|
||||
this.rawFileComboBox.Size = new System.Drawing.Size(715, 21);
|
||||
this.rawFileComboBox.Size = new System.Drawing.Size(1040, 21);
|
||||
this.rawFileComboBox.TabIndex = 0;
|
||||
//
|
||||
// browseButton
|
||||
//
|
||||
this.browseButton.Location = new System.Drawing.Point(769, 19);
|
||||
this.browseButton.Location = new System.Drawing.Point(7, 0);
|
||||
this.browseButton.Name = "browseButton";
|
||||
this.browseButton.Size = new System.Drawing.Size(66, 37);
|
||||
this.browseButton.TabIndex = 1;
|
||||
@@ -52,37 +77,184 @@
|
||||
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.Location = new System.Drawing.Point(29, 131);
|
||||
this.resultsTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.resultsTextBox.Location = new System.Drawing.Point(0, 0);
|
||||
this.resultsTextBox.Multiline = true;
|
||||
this.resultsTextBox.Name = "resultsTextBox";
|
||||
this.resultsTextBox.Size = new System.Drawing.Size(715, 181);
|
||||
this.resultsTextBox.Size = new System.Drawing.Size(1127, 156);
|
||||
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(859, 335);
|
||||
this.Controls.Add(this.resultsTextBox);
|
||||
this.Controls.Add(this.processButton);
|
||||
this.Controls.Add(this.browseButton);
|
||||
this.Controls.Add(this.rawFileComboBox);
|
||||
this.ClientSize = new System.Drawing.Size(1127, 733);
|
||||
this.Controls.Add(this.splitContainer1);
|
||||
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();
|
||||
|
||||
}
|
||||
|
||||
@@ -90,8 +262,19 @@
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,13 +4,20 @@
|
||||
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;
|
||||
@@ -27,63 +34,115 @@ 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();
|
||||
var dr = ofd.ShowDialog();
|
||||
rawFileComboBox.Text = ofd.FileName;
|
||||
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
rawFileComboBox.Text = ofd.FileName;
|
||||
ProcessRawDataFile(ofd.FileName);
|
||||
}
|
||||
}
|
||||
|
||||
private void processButton_Click(object sender, EventArgs e)
|
||||
void ProcessRawDataFile(string fileName)
|
||||
{
|
||||
if (optoData == null) return;
|
||||
|
||||
int counter = 0;
|
||||
int startIx = -1;
|
||||
int endIx = -1;
|
||||
|
||||
using (StreamReader reader = new StreamReader(rawFileComboBox.Text))
|
||||
ClearOutput();
|
||||
|
||||
resultsTextBox.Text = string.Format("File name: {0}{1}", fileName, Environment.NewLine);
|
||||
|
||||
try
|
||||
{
|
||||
string line;
|
||||
while ((line = reader.ReadLine()) != null && counter < MaxOptoDataCount)
|
||||
using (StreamReader reader = new StreamReader(fileName))
|
||||
{
|
||||
int ix = line.IndexOf(" :\t");
|
||||
|
||||
if (ix >= 0)
|
||||
string line;
|
||||
while ((line = reader.ReadLine()) != null && counter < MaxOptoDataCount)
|
||||
{
|
||||
if (optoData[counter].UpdateFromString(line.Substring(ix + 3), counter, 0, ref volumeRawExtLast, ref timestampExtLast, true))
|
||||
int ix = line.IndexOf(" :\t");
|
||||
string[] items = line.Split('\t');
|
||||
|
||||
if (items.Length > 18)
|
||||
{
|
||||
if (line.EndsWith("#### start test ####"))
|
||||
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))
|
||||
{
|
||||
startIx = counter;
|
||||
optoData[counter].Flags = OptoTelegramFlags.OK_TestStart;
|
||||
}
|
||||
else if (line.EndsWith("#### end of test ####"))
|
||||
{
|
||||
endIx = counter;
|
||||
optoData[counter].Flags = OptoTelegramFlags.OK_TestEnd;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
optoData[counter].RefFlow = float.Parse(items[15].Replace(',', '.'), CultureInfo.InvariantCulture);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
optoData[counter].Flags = OptoTelegramFlags.InvalidTelegram;
|
||||
else
|
||||
{
|
||||
optoData[counter].Flags = OptoTelegramFlags.InvalidTelegram;
|
||||
}
|
||||
|
||||
counter++;
|
||||
}
|
||||
|
||||
counter++;
|
||||
reader.Close();
|
||||
}
|
||||
|
||||
reader.Close();
|
||||
}
|
||||
|
||||
float[] featureVector = new float[9];
|
||||
Common.Utils.CalculateFeatureVector(optoData, counter, startIx, endIx, ref featureVector);
|
||||
|
||||
resultsTextBox.Clear();
|
||||
for (int i = 0; i < 9; i++)
|
||||
catch (Exception exc)
|
||||
{
|
||||
resultsTextBox.Text += string.Format("X{0} = {1}\r\n", i + 1, featureVector[i]);
|
||||
MessageBox.Show(string.Format("Exception: {0}", exc.Message));
|
||||
return;
|
||||
}
|
||||
|
||||
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,6 +37,7 @@
|
||||
<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" />
|
||||
@@ -55,6 +56,7 @@
|
||||
</Compile>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="SignalChart.cs" />
|
||||
<EmbeddedResource Include="CalculatorWnd.resx">
|
||||
<DependentUpon>CalculatorWnd.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2019 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2019-2022 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
|
||||
NoRecordAtAll, /// No record with this S/N in tracing DB
|
||||
NoRefRecordOrNoMatchingWorkflow, /// No record with this S/N in tracing DB or no matching workflow for this record
|
||||
VerificationIsDisabled, /// ...
|
||||
NoVerificationForThisProcess,
|
||||
VerificationPassed, /// Verification of a previous record passed
|
||||
|
||||
@@ -20,17 +20,22 @@
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>TRACE;DEBUG;RF_TEST_400_900</DefineConstants>
|
||||
<DefineConstants>TRACE;DEBUG;LASER_NANJING</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;RF_TEST_400_900</DefineConstants>
|
||||
<DefineConstants>TRACE;LASER_NANJING</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<StartupObject>GenericTest.Program</StartupObject>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="FluentNHibernate">
|
||||
|
||||
Generated
+17
-17
@@ -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 = "Nastavenia";
|
||||
this.settingsButton.Text = "Settings";
|
||||
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 = 939;
|
||||
this.vertSplitContainer.SplitterDistance = 942;
|
||||
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(939, 151);
|
||||
this.resultsGroupBox.Size = new System.Drawing.Size(942, 151);
|
||||
this.resultsGroupBox.TabIndex = 1;
|
||||
this.resultsGroupBox.TabStop = false;
|
||||
this.resultsGroupBox.Text = "Aktivita";
|
||||
@@ -152,11 +152,22 @@
|
||||
this.activityListView.Location = new System.Drawing.Point(3, 16);
|
||||
this.activityListView.Name = "activityListView";
|
||||
this.activityListView.Scrollable = false;
|
||||
this.activityListView.Size = new System.Drawing.Size(933, 132);
|
||||
this.activityListView.Size = new System.Drawing.Size(936, 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)));
|
||||
@@ -164,7 +175,7 @@
|
||||
this.startButton.Name = "startButton";
|
||||
this.startButton.Size = new System.Drawing.Size(90, 30);
|
||||
this.startButton.TabIndex = 1;
|
||||
this.startButton.Text = "Štart";
|
||||
this.startButton.Text = "Start";
|
||||
this.startButton.UseVisualStyleBackColor = true;
|
||||
this.startButton.Click += new System.EventHandler(this.startButton_Click);
|
||||
//
|
||||
@@ -221,17 +232,6 @@
|
||||
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);
|
||||
|
||||
+92
-119
@@ -1,11 +1,12 @@
|
||||
///
|
||||
/// Copyright (c) 2019 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2019-2022 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;
|
||||
@@ -33,46 +34,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<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;
|
||||
|
||||
IList<WorkflowSummary> workflowSummaries; /// Workflows from the database with last step verification information
|
||||
DateTime lastUpdateOfWorkflows;
|
||||
|
||||
RecordProcessing.RecordProcessing recordProcessing;
|
||||
|
||||
@@ -94,13 +95,29 @@ 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
|
||||
@@ -123,6 +140,15 @@ 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();
|
||||
@@ -569,8 +595,8 @@ namespace GenericTest
|
||||
try
|
||||
{
|
||||
dbSession = TracingDB.CreateSession(Program.LocalSettings.ConnectionString);
|
||||
processes = TracingDB.ReadWorkflowsFromDB(dbSession, WorkflowStep, out processDictionary, out workstepsDictionary, out verificationInfos);
|
||||
lastUpdateOfProcesses = DateTime.Now;
|
||||
workflowSummaries = TracingDB.ReadWorkflowSummariesFromDB(dbSession, WorkflowStep);
|
||||
lastUpdateOfWorkflows = DateTime.Now;
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
@@ -733,6 +759,13 @@ 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;
|
||||
@@ -798,7 +831,9 @@ 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;
|
||||
@@ -810,9 +845,6 @@ 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)
|
||||
|
||||
@@ -824,110 +856,55 @@ namespace GenericTest
|
||||
transaction = dbSession.BeginTransaction();
|
||||
|
||||
/// Get a process of the last reference record with this PCB number
|
||||
proc = TracingDB.GetWorkflow(dbSession, testerRecord.SN, 1, out order);
|
||||
var refRecord = TracingDB.FindReferenceRecord(dbSession, testerRecord.SN, 1);
|
||||
WorkflowSummary wSum = (refRecord == null) ? null :
|
||||
workflowSummaries.FirstOrDefault(x => x.Workflow.Name == refRecord.Workflow);
|
||||
|
||||
/// Check if a record from the previous workplace exists
|
||||
if (proc == null)
|
||||
if (refRecord == null || wSum == null)
|
||||
{
|
||||
/// 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;
|
||||
verifState = VerifState.NoRefRecordOrNoMatchingWorkflow;
|
||||
verificationFailed = true;
|
||||
savingToTracingDBFailed = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
/// 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))
|
||||
if (!Program.LocalSettings.DoCheckPreviousTracingRecords)
|
||||
{
|
||||
/// 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;
|
||||
/// The process was determined but checking previous records is disbled => everything is OK so far
|
||||
verifState = VerifState.VerificationIsDisabled;
|
||||
verificationFailed = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
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();
|
||||
/// Process is known AND the system is checking previous records => verify previous step
|
||||
|
||||
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;
|
||||
}
|
||||
StepRecord prevStep = refRecord.StepRecords.FirstOrDefault(x => (x.Workstep == wSum.PreviousWorkstepName && x.Result == 0));
|
||||
verificationFailed = (prevStep == null);
|
||||
verifState = (prevStep != null) ? VerifState.VerificationPassed : VerifState.VerificationFailed;
|
||||
}
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
/// 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;
|
||||
transaction.Commit();
|
||||
|
||||
savingToTracingDBFailed = false;
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
readingFromTracingDBFailed = !savingToTracingDBFailed;
|
||||
if ((transaction != null) && !transaction.WasCommitted) transaction.Rollback();
|
||||
savingToTracingDBFailed = true;
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Write the test result to Oracle DB
|
||||
///
|
||||
@@ -955,8 +932,8 @@ namespace GenericTest
|
||||
///
|
||||
bool printingFailed = false;
|
||||
if (Program.LocalSettings.DoPrintLabels && testerRecord.CanPrintRecord()
|
||||
&& (!Program.LocalSettings.DoPrintGoodLabelsOnly || !(readingFromTracingDBFailed || savingToTracingDBFailed || verificationFailed
|
||||
|| savingToOracleDBFailed || (testerRecord.Status != Status.Passed))))
|
||||
&& (!Program.LocalSettings.DoPrintGoodLabelsOnly ||
|
||||
!(savingToTracingDBFailed || verificationFailed || savingToOracleDBFailed || testerRecord.Status != Status.Passed)))
|
||||
{
|
||||
/// Conditions for printing results are satisfied
|
||||
|
||||
@@ -1005,11 +982,7 @@ namespace GenericTest
|
||||
/// Display the test result and related activity on the screen.
|
||||
/// Process the most severe errors first.
|
||||
///
|
||||
if (readingFromTracingDBFailed)
|
||||
{
|
||||
OnActivity(null, new ActivityEventArgs(testerRecord.SN, Strings.Reading_from_Tracing_DB_failed, ActivityCode.Failed, Color.Orange, 5000, Color.Wheat));
|
||||
}
|
||||
else if (verificationFailed)
|
||||
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));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2019-2021 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2019-2022 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("GenericTesterTracer")]
|
||||
[XmlRootAttribute("GenericTest")]
|
||||
public class LocalSettings
|
||||
{
|
||||
static XmlSerializer serializer = XmlSerializer.FromTypes(new[] { typeof(LocalSettings) })[0];
|
||||
@@ -25,6 +25,7 @@ namespace GenericTest
|
||||
|
||||
public string Workplace;
|
||||
public bool IsUserLoginRequired;
|
||||
public string Language;
|
||||
|
||||
public string ConnectionString;
|
||||
public string UsersDBConnString;
|
||||
@@ -64,18 +65,19 @@ namespace GenericTest
|
||||
{
|
||||
/// Default settings
|
||||
Workplace = GenericTestDlg.DfltWorkplaceName;
|
||||
Language = "en";
|
||||
|
||||
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;";
|
||||
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;";
|
||||
TestResultsFolder = "C:\\FTS\\HookSpool\\Filemover";
|
||||
ArchiveFolder = "C:\\FTS\\HookSpool\\Filemover";
|
||||
DoCheckSNsValidity = false;
|
||||
ValidSNPrefixes = "297,298,299,300,301,302";
|
||||
DoCheckPreviousTracingRecords = true;
|
||||
DoSaveTestResultToOracle = true;
|
||||
DoSaveTestResultToOracle = false;
|
||||
OracleMode = Mode.Production;
|
||||
DoPrintLabels = true;
|
||||
DoPrintGoodLabelsOnly = true;
|
||||
DoPrintGoodLabelsOnly = false;
|
||||
MaximizeWindowOnError = false;
|
||||
|
||||
MainWndMaximized = false;
|
||||
|
||||
@@ -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("2.1.134.0")]
|
||||
[assembly: AssemblyFileVersion("2.1.134.0")]
|
||||
[assembly: AssemblyVersion("3.0.1")]
|
||||
[assembly: AssemblyFileVersion("3.0.1")]
|
||||
|
||||
+36
@@ -105,6 +105,15 @@ 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>
|
||||
@@ -258,6 +267,15 @@ 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>
|
||||
@@ -267,6 +285,24 @@ 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>
|
||||
|
||||
@@ -132,6 +132,9 @@
|
||||
<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>
|
||||
@@ -183,9 +186,18 @@
|
||||
<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>
|
||||
|
||||
@@ -132,6 +132,9 @@
|
||||
<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>
|
||||
@@ -180,9 +183,18 @@
|
||||
<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>
|
||||
|
||||
@@ -1,19 +1,23 @@
|
||||
///
|
||||
/// Copyright (c) 2021 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2021-2022 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
|
||||
{
|
||||
ISession session;
|
||||
private static readonly ILog log = LogManager.GetLogger(typeof(EditOrderDlg));
|
||||
|
||||
ISessionFactory sessionFactory;
|
||||
OrderInfo oriOrder;
|
||||
IList<OrderInfo> listOfOrders;
|
||||
bool isEnablePredefinedOrders;
|
||||
@@ -21,11 +25,11 @@ namespace OrderManagement
|
||||
|
||||
EditParametersCtrl editParametersCtrl;
|
||||
|
||||
public EditOrderDlg(ISession session, OrderInfo order, IList<OrderInfo> listOfOrders, bool isEnablePredefinedOrders = false, bool editMode = false)
|
||||
public EditOrderDlg(ISessionFactory sessionFactory, OrderInfo order, IList<OrderInfo> listOfOrders, bool isEnablePredefinedOrders = false, bool editMode = false)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
this.session = session;
|
||||
this.sessionFactory = sessionFactory;
|
||||
this.oriOrder = order;
|
||||
this.listOfOrders = listOfOrders;
|
||||
this.isEnablePredefinedOrders = isEnablePredefinedOrders;
|
||||
@@ -50,9 +54,10 @@ namespace OrderManagement
|
||||
{
|
||||
OrderInfo modifiedOrder = editParametersCtrl.ParamsProvider as OrderInfo;
|
||||
|
||||
int modifiedOrderNr;
|
||||
if (!isEnablePredefinedOrders &&
|
||||
(!int.TryParse(modifiedOrder.POName, out modifiedOrderNr) || modifiedOrderNr <= OrderManagementDlg.MaxPredefinedOrderNr))
|
||||
long modifiedOrderNr;
|
||||
if (!long.TryParse(modifiedOrder.POName, out modifiedOrderNr) ||
|
||||
modifiedOrderNr <= 0 ||
|
||||
(!isEnablePredefinedOrders && modifiedOrderNr <= OrderManagementDlg.MaxPredefinedOrderNr))
|
||||
{
|
||||
MessageBox.Show(string.Format(Strings.Order_number_must_be_larger_then_0, OrderManagementDlg.MaxPredefinedOrderNr));
|
||||
return;
|
||||
@@ -71,10 +76,55 @@ namespace OrderManagement
|
||||
return;
|
||||
}
|
||||
|
||||
modifiedOrder.CopyContentTo(oriOrder);
|
||||
Cursor.Current = Cursors.WaitCursor;
|
||||
|
||||
if (Save(oriOrder))
|
||||
ITransaction transaction = null;
|
||||
bool oriOrdermodified = false;
|
||||
bool saved = false;
|
||||
try
|
||||
{
|
||||
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
|
||||
@@ -86,34 +136,6 @@ 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;
|
||||
@@ -129,7 +151,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[0] == '3')
|
||||
if (order.POName.Length == 7 && 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),
|
||||
@@ -204,11 +226,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("D9") + snStdSuffix,
|
||||
order.RAPrefix + (order.RAFirst + order.PiecesCount).ToString("D9") + snStdSuffix,
|
||||
order.RAPrefix + order.RAFirst.ToString(Const.RAFormat) + snStdSuffix,
|
||||
order.RAPrefix + (order.RAFirst + order.PiecesCount).ToString(Const.RAFormat) + snStdSuffix,
|
||||
another.POName,
|
||||
another.RAPrefix + another.RAFirst.ToString("D9") + StandardSuffix(another, true),
|
||||
another.RAPrefix + (another.RAFirst + another.PiecesCount).ToString("D9") + StandardSuffix(another, true),
|
||||
another.RAPrefix + another.RAFirst.ToString(Const.RAFormat) + StandardSuffix(another, true),
|
||||
another.RAPrefix + (another.RAFirst + another.PiecesCount).ToString(Const.RAFormat) + StandardSuffix(another, true),
|
||||
Strings.Abort_creating_an_order_QM),
|
||||
Strings.Warning,
|
||||
MessageBoxButtons.YesNo,
|
||||
|
||||
@@ -17,9 +17,9 @@ namespace OrderManagement
|
||||
{
|
||||
private static readonly ILog log = LogManager.GetLogger(typeof(OrderManagementDlg));
|
||||
|
||||
public const int MaxPredefinedOrderNr = 1000;
|
||||
public const long MaxPredefinedOrderNr = 1000;
|
||||
|
||||
ISession session;
|
||||
ISessionFactory sessionFactory;
|
||||
IList<OrderInfo> listOfOrders;
|
||||
IList<Process> listOfWorkflows;
|
||||
|
||||
@@ -46,10 +46,10 @@ namespace OrderManagement
|
||||
Text = string.Format("{0} v.{1}", Program.ProgramName, Program.Version); ;
|
||||
}
|
||||
|
||||
public OrderManagementDlg(ISession session, IList<OrderInfo> listOfOrders, IList<Process> listOfWorkflows)
|
||||
public OrderManagementDlg(ISessionFactory sessionFactory, IList<OrderInfo> listOfOrders, IList<Process> listOfWorkflows)
|
||||
: this()
|
||||
{
|
||||
this.session = session;
|
||||
this.sessionFactory = sessionFactory;
|
||||
this.listOfOrders = listOfOrders;
|
||||
this.listOfWorkflows = listOfWorkflows;
|
||||
}
|
||||
@@ -78,7 +78,14 @@ 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
|
||||
@@ -149,7 +156,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("D9"));
|
||||
lvi.SubItems.Add(o.RAFirst.ToString(SharedDatabase.Const.RAFormat));
|
||||
lvi.SubItems.Add(o.RASuffix);
|
||||
lvi.SubItems.Add(o.Remark);
|
||||
lvi.Tag = o;
|
||||
@@ -176,7 +183,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("D9");
|
||||
lvi.SubItems[i++].Text = o.RAFirst.ToString(SharedDatabase.Const.RAFormat);
|
||||
lvi.SubItems[i++].Text = o.RASuffix;
|
||||
lvi.SubItems[i++].Text = o.Remark;
|
||||
}
|
||||
@@ -232,7 +239,7 @@ namespace OrderManagement
|
||||
///
|
||||
var order = new OrderInfo(candidatePOName);
|
||||
|
||||
if (new EditOrderDlg(session, order, listOfOrders, Program.LocalSettings.IsShowPredefinedOrders).ShowDialog()
|
||||
if (new EditOrderDlg(sessionFactory, order, listOfOrders, Program.LocalSettings.IsShowPredefinedOrders).ShowDialog()
|
||||
== DialogResult.OK)
|
||||
{
|
||||
listOfOrders.Add(order);
|
||||
@@ -251,7 +258,14 @@ namespace OrderManagement
|
||||
}
|
||||
else
|
||||
{
|
||||
new OrderStateDlg(session, order).ShowDialog();
|
||||
try
|
||||
{
|
||||
new OrderStateDlg(order, sessionFactory).ShowDialog();
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
log.ErrorFormat("Failed to read order {0} when creating OrderStateDlg: {1)", order.POName, exc.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -262,7 +276,7 @@ namespace OrderManagement
|
||||
OrderInfo order = listViewEx1.SelectedItems[0].Tag as OrderInfo;
|
||||
if (order.POState == (sbyte)OrderState.New)
|
||||
{
|
||||
if (new EditOrderDlg(session, order, listOfOrders, Program.LocalSettings.IsShowPredefinedOrders, true).ShowDialog()
|
||||
if (new EditOrderDlg(sessionFactory, order, listOfOrders, Program.LocalSettings.IsShowPredefinedOrders, true).ShowDialog()
|
||||
== DialogResult.OK)
|
||||
{
|
||||
UpdateRow(listViewEx1.SelectedItems[0], order);
|
||||
@@ -297,31 +311,31 @@ namespace OrderManagement
|
||||
///
|
||||
/// Create and edit the order
|
||||
///
|
||||
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);
|
||||
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);
|
||||
|
||||
if (new EditOrderDlg(session, newOrder, listOfOrders, Program.LocalSettings.IsShowPredefinedOrders).ShowDialog()
|
||||
if (new EditOrderDlg(sessionFactory, copiedOrder, listOfOrders, Program.LocalSettings.IsShowPredefinedOrders).ShowDialog()
|
||||
== DialogResult.OK)
|
||||
{
|
||||
listOfOrders.Add(newOrder);
|
||||
AddRow(listViewEx1, newOrder);
|
||||
listOfOrders.Add(copiedOrder);
|
||||
AddRow(listViewEx1, copiedOrder);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -336,10 +350,29 @@ namespace OrderManagement
|
||||
{
|
||||
try
|
||||
{
|
||||
session.Delete(order);
|
||||
session.Flush();
|
||||
listOfOrders.Remove(order);
|
||||
listViewEx1.Items.Remove(listViewEx1.SelectedItems[0]);
|
||||
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();
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
|
||||
@@ -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("D9"),
|
||||
order.RAFirst.ToString(SharedDatabase.Const.RAFormat),
|
||||
(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("D9"),
|
||||
(order.RAFirst + order.PiecesCount - 1).ToString(SharedDatabase.Const.RAFormat),
|
||||
(order.RASuffix != null) ? order.RASuffix : string.Empty),
|
||||
Strings.Workflow + " :",
|
||||
(order.Workflow != null) ? order.Workflow : string.Empty,
|
||||
|
||||
+15
-1
@@ -40,6 +40,7 @@
|
||||
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
|
||||
@@ -144,11 +145,23 @@
|
||||
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);
|
||||
@@ -166,7 +179,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();
|
||||
|
||||
@@ -186,5 +199,6 @@
|
||||
private System.Windows.Forms.Label currentSnLabel;
|
||||
private System.Windows.Forms.TextBox currentRATextBox;
|
||||
private System.Windows.Forms.Label currentRALabel;
|
||||
private System.Windows.Forms.Button closeButton;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2021 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2021-2022 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
@@ -11,35 +11,81 @@ namespace OrderManagement
|
||||
{
|
||||
public partial class OrderStateDlg : Form
|
||||
{
|
||||
ISession session;
|
||||
OrderInfo order;
|
||||
ISessionFactory sessionFactory;
|
||||
int orderId;
|
||||
Timer timer;
|
||||
|
||||
public OrderStateDlg()
|
||||
private OrderStateDlg()
|
||||
{
|
||||
InitializeComponent();
|
||||
Localize();
|
||||
}
|
||||
|
||||
public OrderStateDlg(ISession session,OrderInfo order)
|
||||
public OrderStateDlg(OrderInfo order, ISessionFactory sessionFactory)
|
||||
: this()
|
||||
{
|
||||
this.session = session;
|
||||
this.order = order;
|
||||
Localize();
|
||||
this.sessionFactory = sessionFactory;
|
||||
this.orderId = order.Id;
|
||||
|
||||
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);
|
||||
/// 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);
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
///
|
||||
/// Copyright (c) 2021 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2021-2022 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;
|
||||
@@ -169,19 +171,27 @@ namespace OrderManagement
|
||||
}
|
||||
}
|
||||
|
||||
ISession session;
|
||||
ISessionFactory sessionFactory;
|
||||
IList<OrderInfo> listOfOrders = null;
|
||||
IList<Process> listOfWorkflows = null;
|
||||
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
session = SharedDatabase.TracingDB.CreateSession(LocalSettings.TracingDBConnString);
|
||||
listOfOrders = session.QueryOver<OrderInfo>()
|
||||
.List();
|
||||
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();
|
||||
|
||||
listOfWorkflows = session.QueryOver<Process>()
|
||||
.Where(x => x.ReleaseStatus != ReleaseStatus.Deactivated)
|
||||
.List();
|
||||
session.Close();
|
||||
break;
|
||||
}
|
||||
catch (Exception exc)
|
||||
@@ -207,7 +217,7 @@ namespace OrderManagement
|
||||
|
||||
try
|
||||
{
|
||||
OrderManagementDlg dlg = new OrderManagementDlg(session, listOfOrders, listOfWorkflows);
|
||||
OrderManagementDlg dlg = new OrderManagementDlg(sessionFactory, listOfOrders, listOfWorkflows);
|
||||
Application.Run(dlg);
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -224,6 +234,12 @@ 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)
|
||||
{
|
||||
|
||||
@@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("OrderManagement")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2021")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2021-2022")]
|
||||
[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.10.0")]
|
||||
[assembly: AssemblyFileVersion("3.0.10.0")]
|
||||
[assembly: AssemblyVersion("3.0.13.0")]
|
||||
[assembly: AssemblyFileVersion("3.0.13.0")]
|
||||
|
||||
+117
@@ -69,6 +69,15 @@ 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>
|
||||
@@ -87,6 +96,15 @@ 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 'Task manager'.
|
||||
/// </summary>
|
||||
@@ -114,6 +132,15 @@ 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>
|
||||
@@ -132,6 +159,15 @@ 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>
|
||||
@@ -141,6 +177,15 @@ 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>
|
||||
@@ -213,6 +258,24 @@ 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>
|
||||
@@ -267,6 +330,15 @@ 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>
|
||||
@@ -276,6 +348,24 @@ 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>
|
||||
@@ -321,6 +411,24 @@ 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>
|
||||
@@ -438,6 +546,15 @@ 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>
|
||||
|
||||
@@ -276,4 +276,43 @@
|
||||
<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>
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
///
|
||||
/// 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
@@ -0,0 +1,65 @@
|
||||
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;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,25 +117,4 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="administrator" xml:space="preserve">
|
||||
<value>Amministratore</value>
|
||||
</data>
|
||||
<data name="calibration_specialist" xml:space="preserve">
|
||||
<value>esperto in calibrazione</value>
|
||||
</data>
|
||||
<data name="head_of_lab" xml:space="preserve">
|
||||
<value>capo di laboratorio</value>
|
||||
</data>
|
||||
<data name="maintenance" xml:space="preserve">
|
||||
<value>esperto di manutenzione</value>
|
||||
</data>
|
||||
<data name="metrologist" xml:space="preserve">
|
||||
<value>metrologo</value>
|
||||
</data>
|
||||
<data name="specialist" xml:space="preserve">
|
||||
<value>esperto di prove</value>
|
||||
</data>
|
||||
<data name="tester" xml:space="preserve">
|
||||
<value>tester</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,120 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,272 @@
|
||||
<?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
@@ -0,0 +1,179 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
///
|
||||
/// 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,91 +117,4 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="AddBtnText" xml:space="preserve">
|
||||
<value>添加 Add</value>
|
||||
</data>
|
||||
<data name="CancelBtnText" xml:space="preserve">
|
||||
<value>取消 Cancel</value>
|
||||
</data>
|
||||
<data name="DescriptionColHdr" xml:space="preserve">
|
||||
<value>描述</value>
|
||||
</data>
|
||||
<data name="EditBtnText" xml:space="preserve">
|
||||
<value>编辑 Edit</value>
|
||||
</data>
|
||||
<data name="Edit_User" xml:space="preserve">
|
||||
<value>编辑用户</value>
|
||||
</data>
|
||||
<data name="Error" xml:space="preserve">
|
||||
<value>错误 Error</value>
|
||||
</data>
|
||||
<data name="Full_name" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="Groups" xml:space="preserve">
|
||||
<value>组别</value>
|
||||
</data>
|
||||
<data name="ID" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="Invalid_username_or_password" xml:space="preserve">
|
||||
<value>无效的用户名或密码</value>
|
||||
</data>
|
||||
<data name="max_0_alphanum_chars" xml:space="preserve">
|
||||
<value>(最大 {0} 字母数字字符)</value>
|
||||
</data>
|
||||
<data name="Name" xml:space="preserve">
|
||||
<value>名称</value>
|
||||
</data>
|
||||
<data name="OkBtnText" xml:space="preserve">
|
||||
<value>好 OK</value>
|
||||
</data>
|
||||
<data name="Password" xml:space="preserve">
|
||||
<value>密码</value>
|
||||
</data>
|
||||
<data name="RemoveBtnText" xml:space="preserve">
|
||||
<value>删除 Remove</value>
|
||||
</data>
|
||||
<data name="Repeat_password" xml:space="preserve">
|
||||
<value>密码2</value>
|
||||
</data>
|
||||
<data name="Username_taken" xml:space="preserve">
|
||||
<value>此用户名已被占用。请选择另外一个。</value>
|
||||
</data>
|
||||
<data name="User_code" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="User_Login" xml:space="preserve">
|
||||
<value>用户登录</value>
|
||||
</data>
|
||||
<data name="User_Management" xml:space="preserve">
|
||||
<value>用户管理</value>
|
||||
</data>
|
||||
<data name="User_name" xml:space="preserve">
|
||||
<value>用户名</value>
|
||||
</data>
|
||||
<data name="CloseBtnText" xml:space="preserve">
|
||||
<value>关闭 Close</value>
|
||||
</data>
|
||||
<data name="administrator" xml:space="preserve">
|
||||
<value>管理员</value>
|
||||
</data>
|
||||
<data name="calibration_specialist" xml:space="preserve">
|
||||
<value>校准专员</value>
|
||||
</data>
|
||||
<data name="head_of_lab" xml:space="preserve">
|
||||
<value>实验室负责人</value>
|
||||
</data>
|
||||
<data name="maintenance" xml:space="preserve">
|
||||
<value>维护专员</value>
|
||||
</data>
|
||||
<data name="metrologist" xml:space="preserve">
|
||||
<value>计量者</value>
|
||||
</data>
|
||||
<data name="specialist" xml:space="preserve">
|
||||
<value>测试专员</value>
|
||||
</data>
|
||||
<data name="tester" xml:space="preserve">
|
||||
<value>测试仪</value>
|
||||
</data>
|
||||
</root>
|
||||
+139
@@ -0,0 +1,139 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,232 @@
|
||||
///
|
||||
/// 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,91 +117,4 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="AddBtnText" xml:space="preserve">
|
||||
<value>Dodaj</value>
|
||||
</data>
|
||||
<data name="CancelBtnText" xml:space="preserve">
|
||||
<value>Anuluj</value>
|
||||
</data>
|
||||
<data name="DescriptionColHdr" xml:space="preserve">
|
||||
<value>Opis</value>
|
||||
</data>
|
||||
<data name="EditBtnText" xml:space="preserve">
|
||||
<value>Edycja</value>
|
||||
</data>
|
||||
<data name="Edit_User" xml:space="preserve">
|
||||
<value>Edytuj użytkownika</value>
|
||||
</data>
|
||||
<data name="Error" xml:space="preserve">
|
||||
<value>Błąd</value>
|
||||
</data>
|
||||
<data name="Full_name" xml:space="preserve">
|
||||
<value>Imię i Nazwisko</value>
|
||||
</data>
|
||||
<data name="Groups" xml:space="preserve">
|
||||
<value>Grupy</value>
|
||||
</data>
|
||||
<data name="ID" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="Invalid_username_or_password" xml:space="preserve">
|
||||
<value>Nieprawidłowa nazwa użytkownika lub hasło</value>
|
||||
</data>
|
||||
<data name="max_0_alphanum_chars" xml:space="preserve">
|
||||
<value>(max. {0} znaków alfanumerycznych)</value>
|
||||
</data>
|
||||
<data name="Name" xml:space="preserve">
|
||||
<value>Nazwa</value>
|
||||
</data>
|
||||
<data name="OkBtnText" xml:space="preserve">
|
||||
<value>OK</value>
|
||||
</data>
|
||||
<data name="Password" xml:space="preserve">
|
||||
<value>Hasło</value>
|
||||
</data>
|
||||
<data name="RemoveBtnText" xml:space="preserve">
|
||||
<value>Usuń</value>
|
||||
</data>
|
||||
<data name="Repeat_password" xml:space="preserve">
|
||||
<value>Hasło 2</value>
|
||||
</data>
|
||||
<data name="Username_taken" xml:space="preserve">
|
||||
<value>Ta Nazwa użytkownika jest już zajęta. Proszę wybrać inną.</value>
|
||||
</data>
|
||||
<data name="User_code" xml:space="preserve">
|
||||
<value>Kod użytkownika</value>
|
||||
</data>
|
||||
<data name="User_Login" xml:space="preserve">
|
||||
<value>Login użytkownika</value>
|
||||
</data>
|
||||
<data name="User_Management" xml:space="preserve">
|
||||
<value>Uprawnienia użytkownika</value>
|
||||
</data>
|
||||
<data name="User_name" xml:space="preserve">
|
||||
<value>Nazwa użytkownika</value>
|
||||
</data>
|
||||
<data name="CloseBtnText" xml:space="preserve">
|
||||
<value>Zamknij</value>
|
||||
</data>
|
||||
<data name="administrator" xml:space="preserve">
|
||||
<value>Administrator</value>
|
||||
</data>
|
||||
<data name="calibration_specialist" xml:space="preserve">
|
||||
<value>Specjalista ds. kalibracji</value>
|
||||
</data>
|
||||
<data name="head_of_lab" xml:space="preserve">
|
||||
<value>Kierownik Laboratorium</value>
|
||||
</data>
|
||||
<data name="maintenance" xml:space="preserve">
|
||||
<value>Konserwator</value>
|
||||
</data>
|
||||
<data name="metrologist" xml:space="preserve">
|
||||
<value>Metrolog</value>
|
||||
</data>
|
||||
<data name="specialist" xml:space="preserve">
|
||||
<value>Specjalista ds. testów</value>
|
||||
</data>
|
||||
<data name="tester" xml:space="preserve">
|
||||
<value>Pracownik przeprowadzający testy</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,194 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,176 @@
|
||||
///
|
||||
/// 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)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,91 +117,4 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="AddBtnText" xml:space="preserve">
|
||||
<value>Добавить</value>
|
||||
</data>
|
||||
<data name="CancelBtnText" xml:space="preserve">
|
||||
<value>Отмена</value>
|
||||
</data>
|
||||
<data name="DescriptionColHdr" xml:space="preserve">
|
||||
<value>Описание</value>
|
||||
</data>
|
||||
<data name="EditBtnText" xml:space="preserve">
|
||||
<value>Редактировать</value>
|
||||
</data>
|
||||
<data name="Edit_User" xml:space="preserve">
|
||||
<value>Редактировать пользователя</value>
|
||||
</data>
|
||||
<data name="Error" xml:space="preserve">
|
||||
<value>Ошибка</value>
|
||||
</data>
|
||||
<data name="Full_name" xml:space="preserve">
|
||||
<value>Имя и фамилия</value>
|
||||
</data>
|
||||
<data name="Groups" xml:space="preserve">
|
||||
<value>Группы</value>
|
||||
</data>
|
||||
<data name="ID" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="Invalid_username_or_password" xml:space="preserve">
|
||||
<value>Неправильное имя пользователя или пароль</value>
|
||||
</data>
|
||||
<data name="max_0_alphanum_chars" xml:space="preserve">
|
||||
<value>(макс. {0} вуквенно-цифровых символов)</value>
|
||||
</data>
|
||||
<data name="Name" xml:space="preserve">
|
||||
<value>Имя</value>
|
||||
</data>
|
||||
<data name="OkBtnText" xml:space="preserve">
|
||||
<value>OK</value>
|
||||
</data>
|
||||
<data name="Password" xml:space="preserve">
|
||||
<value>Пароль</value>
|
||||
</data>
|
||||
<data name="RemoveBtnText" xml:space="preserve">
|
||||
<value>Удалить</value>
|
||||
</data>
|
||||
<data name="Repeat_password" xml:space="preserve">
|
||||
<value>Пароль 2</value>
|
||||
</data>
|
||||
<data name="Username_taken" xml:space="preserve">
|
||||
<value>Это Имя пользователя уже принято. Пожалуйста, выберите другое.</value>
|
||||
</data>
|
||||
<data name="User_code" xml:space="preserve">
|
||||
<value>Код пользователя</value>
|
||||
</data>
|
||||
<data name="User_Login" xml:space="preserve">
|
||||
<value>Логин пользователя</value>
|
||||
</data>
|
||||
<data name="User_Management" xml:space="preserve">
|
||||
<value>Управление пользователями</value>
|
||||
</data>
|
||||
<data name="User_name" xml:space="preserve">
|
||||
<value>Имя пользователя</value>
|
||||
</data>
|
||||
<data name="CloseBtnText" xml:space="preserve">
|
||||
<value>Закрыть</value>
|
||||
</data>
|
||||
<data name="administrator" xml:space="preserve">
|
||||
<value>Администратор</value>
|
||||
</data>
|
||||
<data name="calibration_specialist" xml:space="preserve">
|
||||
<value>Специалист по калибровке</value>
|
||||
</data>
|
||||
<data name="head_of_lab" xml:space="preserve">
|
||||
<value>Руководитель лаборатории</value>
|
||||
</data>
|
||||
<data name="maintenance" xml:space="preserve">
|
||||
<value>Специалист по техобслуживанию</value>
|
||||
</data>
|
||||
<data name="metrologist" xml:space="preserve">
|
||||
<value>Метролог</value>
|
||||
</data>
|
||||
<data name="specialist" xml:space="preserve">
|
||||
<value>Специалист по тестированию</value>
|
||||
</data>
|
||||
<data name="tester" xml:space="preserve">
|
||||
<value>Контролер</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,300 @@
|
||||
///
|
||||
/// 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
@@ -0,0 +1,201 @@
|
||||
///
|
||||
/// 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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,315 @@
|
||||
///
|
||||
/// 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,265 @@
|
||||
///
|
||||
/// 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
<?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
@@ -0,0 +1,971 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,640 @@
|
||||
///
|
||||
/// 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,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,255 @@
|
||||
///
|
||||
/// 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("--------------------------------------");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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("Users")]
|
||||
[assembly: AssemblyTitle("ResultsBrowser")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Users")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018-2019")]
|
||||
[assembly: AssemblyCompany("Sensus")]
|
||||
[assembly: AssemblyProduct("ResultsBrowser")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2016 - 2022 Sensus Slovensko a.s.")]
|
||||
[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("f05db1fc-0a24-4319-802b-d13e9a4b7efe")]
|
||||
[assembly: Guid("3bb098ac-f5d3-4eb1-90ea-7ba296ce8fd7")]
|
||||
|
||||
// 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.1.1464.0")]
|
||||
[assembly: AssemblyFileVersion("3.1.1464.0")]
|
||||
[assembly: AssemblyVersion("3.0.2")]
|
||||
[assembly: AssemblyFileVersion("3.0.2")]
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
<?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
@@ -0,0 +1,26 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,26 @@
|
||||
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>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,157 +117,223 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="AddBtnText" xml:space="preserve">
|
||||
<value>Neu</value>
|
||||
<data name="Add_filter" xml:space="preserve">
|
||||
<value>Přidat filtr</value>
|
||||
</data>
|
||||
<data name="CancelBtnText" xml:space="preserve">
|
||||
<value>Abbrechen</value>
|
||||
<value>Zrušit</value>
|
||||
</data>
|
||||
<data name="DescriptionColHdr" xml:space="preserve">
|
||||
<value>Beschreibung</value>
|
||||
<data name="Clear_filters" xml:space="preserve">
|
||||
<value>Zmazat filtry</value>
|
||||
</data>
|
||||
<data name="EditBtnText" xml:space="preserve">
|
||||
<value>Bearbeiten</value>
|
||||
<data name="Connection_string" xml:space="preserve">
|
||||
<value>Řetězec pro spojní s databázou</value>
|
||||
</data>
|
||||
<data name="Edit_User" xml:space="preserve">
|
||||
<value>Benutzer einrichten</value>
|
||||
<data name="Date" xml:space="preserve">
|
||||
<value>Datum</value>
|
||||
</data>
|
||||
<data name="Error" xml:space="preserve">
|
||||
<value>Fehler</value>
|
||||
<value>Chyba</value>
|
||||
</data>
|
||||
<data name="Full_name" xml:space="preserve">
|
||||
<value>Vorname und Nachname</value>
|
||||
<data name="Error_displaying_results" xml:space="preserve">
|
||||
<value>Chyba při zobrazování výsledků</value>
|
||||
</data>
|
||||
<data name="Groups" xml:space="preserve">
|
||||
<value>Gruppen</value>
|
||||
<data name="Error_saving_file" xml:space="preserve">
|
||||
<value>Chyba při ukládání souboru</value>
|
||||
</data>
|
||||
<data name="ID" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
<data name="Error_serializing_filters" xml:space="preserve">
|
||||
<value>Chyba při serializaci filtru</value>
|
||||
</data>
|
||||
<data name="Invalid_username_or_password" xml:space="preserve">
|
||||
<value>Ungültiger Benutzername oder Passwort</value>
|
||||
<data name="Execute_query" xml:space="preserve">
|
||||
<value>Vykonat dotaz</value>
|
||||
</data>
|
||||
<data name="max_0_alphanum_chars" xml:space="preserve">
|
||||
<value>(maximal {0} alphanumerische Zeichen)</value>
|
||||
<data name="Export_query_results" xml:space="preserve">
|
||||
<value>Exportovat výsledky</value>
|
||||
</data>
|
||||
<data name="Name" xml:space="preserve">
|
||||
<value>Name</value>
|
||||
<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="Password" xml:space="preserve">
|
||||
<value>Passwort</value>
|
||||
<data name="Print_query_results" xml:space="preserve">
|
||||
<value>Vytlačit výsledky</value>
|
||||
</data>
|
||||
<data name="RemoveBtnText" xml:space="preserve">
|
||||
<value>Tabelle entfernen</value>
|
||||
<data name="Query_results" xml:space="preserve">
|
||||
<value>Výsledky dotazu</value>
|
||||
</data>
|
||||
<data name="Repeat_password" xml:space="preserve">
|
||||
<value>Passwort wiederholen</value>
|
||||
<data name="Results_Browser" xml:space="preserve">
|
||||
<value>Prohlížeč výsledků</value>
|
||||
</data>
|
||||
<data name="Username_taken" xml:space="preserve">
|
||||
<value>Benutzername ist bereits vergeben. Bitte einen anderen Namen wählen!</value>
|
||||
<data name="RetryDatabaseText" xml:space="preserve">
|
||||
<value>Obnovit spojení s databázou</value>
|
||||
</data>
|
||||
<data name="User_code" xml:space="preserve">
|
||||
<value>Benutzernummer</value>
|
||||
<data name="Rows" xml:space="preserve">
|
||||
<value>Řádky</value>
|
||||
</data>
|
||||
<data name="User_Login" xml:space="preserve">
|
||||
<value>Anmelden</value>
|
||||
<data name="Selected_results" xml:space="preserve">
|
||||
<value>Vybrané výsledky</value>
|
||||
</data>
|
||||
<data name="User_Management" xml:space="preserve">
|
||||
<value>Benutzerverwaltung</value>
|
||||
<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>< 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ý --></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 ></value>
|
||||
</data>
|
||||
<data name="Columns" xml:space="preserve">
|
||||
<value>Sloupce</value>
|
||||
</data>
|
||||
<data name="User_name" xml:space="preserve">
|
||||
<value>Benutzername</value>
|
||||
<value>Jméno uživatele</value>
|
||||
</data>
|
||||
<data name="CloseBtnText" xml:space="preserve">
|
||||
<value>Beenden</value>
|
||||
<data name="Workplace" xml:space="preserve">
|
||||
<value>Pracoviště</value>
|
||||
</data>
|
||||
<data name="Confirmation" xml:space="preserve">
|
||||
<value>Bestätigung</value>
|
||||
<data name="Yesterday" xml:space="preserve">
|
||||
<value>Včera</value>
|
||||
</data>
|
||||
<data name="N_users_copied" xml:space="preserve">
|
||||
<value>{0} Benutzer kopiert.</value>
|
||||
<data name="Part_name" xml:space="preserve">
|
||||
<value>Označení součástky</value>
|
||||
</data>
|
||||
<data name="Warning" xml:space="preserve">
|
||||
<value>Warnung</value>
|
||||
<data name="Part_with_barcode" xml:space="preserve">
|
||||
<value>Součástka a kód</value>
|
||||
</data>
|
||||
<data name="administrator" xml:space="preserve">
|
||||
<value>Administrator</value>
|
||||
<data name="Barcode_no_ref" xml:space="preserve">
|
||||
<value>Čárový kód (jiný než referenční)</value>
|
||||
</data>
|
||||
<data name="calibration_specialist" xml:space="preserve">
|
||||
<value>Eichbeamter / Techniker</value>
|
||||
<data name="Part_with_barcode_no_ref" xml:space="preserve">
|
||||
<value>Součástka a kód (jiný než referenční)</value>
|
||||
</data>
|
||||
<data name="head_of_lab" xml:space="preserve">
|
||||
<value>Laborleiter</value>
|
||||
<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="maintenance" xml:space="preserve">
|
||||
<value>Wartungstechniker</value>
|
||||
<data name="Filter" xml:space="preserve">
|
||||
<value>Filtr</value>
|
||||
</data>
|
||||
<data name="metrologist" xml:space="preserve">
|
||||
<value>Metrologe</value>
|
||||
<data name="More_informations" xml:space="preserve">
|
||||
<value>Více informací</value>
|
||||
</data>
|
||||
<data name="specialist" xml:space="preserve">
|
||||
<value>Prüftechniker</value>
|
||||
<data name="Order" xml:space="preserve">
|
||||
<value>Zakázka</value>
|
||||
</data>
|
||||
<data name="tester" xml:space="preserve">
|
||||
<value>Prüfer</value>
|
||||
<data name="Serial_nr" xml:space="preserve">
|
||||
<value>Sériové č.</value>
|
||||
</data>
|
||||
<data name="No_remote_database_of_users" xml:space="preserve">
|
||||
<value>Keine Fernwartung der Benutzerdatenbank!</value>
|
||||
<data name="Workstep" xml:space="preserve">
|
||||
<value>Krok postupu</value>
|
||||
</data>
|
||||
<data name="Are_you_sure" xml:space="preserve">
|
||||
<value>Sind sie sicher?</value>
|
||||
<data name="Workstep_and_associated_part" xml:space="preserve">
|
||||
<value>Krok postupu a přidružená součástka</value>
|
||||
</data>
|
||||
<data name="Copying_remote_users_failed" xml:space="preserve">
|
||||
<value>Kopieren der fehlerhaften Fernwartungsbenutzer!</value>
|
||||
<data name="Items" xml:space="preserve">
|
||||
<value>Položky</value>
|
||||
</data>
|
||||
<data name="Save_or_update_user_failed" xml:space="preserve">
|
||||
<value>Speichern oder update der fehlerhaften Benutzer.</value>
|
||||
<data name="Caption" xml:space="preserve">
|
||||
<value>Název</value>
|
||||
</data>
|
||||
<data name="invalid" xml:space="preserve">
|
||||
<value>Fehlerhaft</value>
|
||||
<data name="Format" xml:space="preserve">
|
||||
<value>Formát</value>
|
||||
</data>
|
||||
<data name="Tag" xml:space="preserve">
|
||||
<value>NFC Magnetkarte</value>
|
||||
<data name="Item" xml:space="preserve">
|
||||
<value>Položka</value>
|
||||
</data>
|
||||
<data name="Tag_taken" xml:space="preserve">
|
||||
<value>Dieses NFC Magnetkarte wurde bereits benutzt. Bitte eine andere benutzen!</value>
|
||||
<data name="Part_barcode" xml:space="preserve">
|
||||
<value>Kód součástky</value>
|
||||
</data>
|
||||
<data name="production_tracing_administrator" xml:space="preserve">
|
||||
<value>Produktionsergebnisse verfolgen(Administrator)</value>
|
||||
<data name="Precision" xml:space="preserve">
|
||||
<value>Přesnost</value>
|
||||
</data>
|
||||
<data name="metrological_authority" xml:space="preserve">
|
||||
<value>Metrologie</value>
|
||||
<data name="Result" xml:space="preserve">
|
||||
<value>Výsledek</value>
|
||||
</data>
|
||||
<data name="water_meter_authority" xml:space="preserve">
|
||||
<value>Eichamt</value>
|
||||
</data>
|
||||
<data name="Change_your_password_please" xml:space="preserve">
|
||||
<value>Bitte Passwort ändern!</value>
|
||||
</data>
|
||||
<data name="New_password" xml:space="preserve">
|
||||
<value>Neues Passwort prüfen!</value>
|
||||
</data>
|
||||
<data name="New_password_verification" xml:space="preserve">
|
||||
<value>Neues Passwort prüfen!</value>
|
||||
</data>
|
||||
<data name="Old_password" xml:space="preserve">
|
||||
<value>Altes Passwort</value>
|
||||
</data>
|
||||
<data name="New_password_and_its_verification_are_different" xml:space="preserve">
|
||||
<value>Neues Passwort stimmt nicht überein!</value>
|
||||
</data>
|
||||
<data name="Password_does_not_meet_requirements" xml:space="preserve">
|
||||
<value>Passwort entspricht nicht den Vorgaben!</value>
|
||||
</data>
|
||||
<data name="Password_has_been_used_in_past" xml:space="preserve">
|
||||
<value>Passwort wurde bereits benutzt!</value>
|
||||
</data>
|
||||
<data name="Power_user_cannot_change_its_password" xml:space="preserve">
|
||||
<value>Poweruser kann nicht das Passwort ändern!</value>
|
||||
</data>
|
||||
<data name="Password_must_have_at_least_0_characters" xml:space="preserve">
|
||||
<value>Passwort muss mindestens {0} Zeichen haben!</value>
|
||||
<data name="Width" xml:space="preserve">
|
||||
<value>Šíŕka</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -117,124 +117,133 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="AddBtnText" xml:space="preserve">
|
||||
<value>Ajouter</value>
|
||||
<data name="Add_filter" xml:space="preserve">
|
||||
<value>Filter hinzufügen</value>
|
||||
</data>
|
||||
<data name="CancelBtnText" xml:space="preserve">
|
||||
<value>Annuler exte Btn</value>
|
||||
<value>Abbrechen</value>
|
||||
</data>
|
||||
<data name="DescriptionColHdr" xml:space="preserve">
|
||||
<value>Description</value>
|
||||
<data name="Clear_filters" xml:space="preserve">
|
||||
<value>Filter löschen</value>
|
||||
</data>
|
||||
<data name="EditBtnText" xml:space="preserve">
|
||||
<value>Éditer</value>
|
||||
<data name="Columns" xml:space="preserve">
|
||||
<value>Spalten</value>
|
||||
</data>
|
||||
<data name="Edit_User" xml:space="preserve">
|
||||
<value>Modifier utilisateur</value>
|
||||
<data name="Connection_string" xml:space="preserve">
|
||||
<value>Datenbank-Verbindungszeichenfolge</value>
|
||||
</data>
|
||||
<data name="Date" xml:space="preserve">
|
||||
<value>Datum</value>
|
||||
</data>
|
||||
<data name="Error" xml:space="preserve">
|
||||
<value>Erreur</value>
|
||||
<value>Fehler</value>
|
||||
</data>
|
||||
<data name="Full_name" xml:space="preserve">
|
||||
<value>Nom complet</value>
|
||||
<data name="Execute_query" xml:space="preserve">
|
||||
<value>Abfrage ausführen</value>
|
||||
</data>
|
||||
<data name="Groups" xml:space="preserve">
|
||||
<value>Groupes</value>
|
||||
<data name="Export_query_results" xml:space="preserve">
|
||||
<value>Ergebnise exportieren</value>
|
||||
</data>
|
||||
<data name="ID" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
<data name="Filters" xml:space="preserve">
|
||||
<value>Filter</value>
|
||||
</data>
|
||||
<data name="Invalid_username_or_password" xml:space="preserve">
|
||||
<value>Nom ou mot passe utilisateur non valide </value>
|
||||
<data name="Format_of_results" xml:space="preserve">
|
||||
<value>Format der Ergebnisse</value>
|
||||
</data>
|
||||
<data name="max_0_alphanum_chars" xml:space="preserve">
|
||||
<value>max {0} caractères alphanum</value>
|
||||
<data name="From" xml:space="preserve">
|
||||
<value>Bis</value>
|
||||
</data>
|
||||
<data name="Name" xml:space="preserve">
|
||||
<value>Prénom</value>
|
||||
<data name="Language" xml:space="preserve">
|
||||
<value>Sprache</value>
|
||||
</data>
|
||||
<data name="Load_filters" xml:space="preserve">
|
||||
<value>Filter laden</value>
|
||||
</data>
|
||||
<data name="OkBtnText" xml:space="preserve">
|
||||
<value>Ok</value>
|
||||
<value>OK</value>
|
||||
</data>
|
||||
<data name="Password" xml:space="preserve">
|
||||
<value>Mot de passe</value>
|
||||
<data name="Print_query_results" xml:space="preserve">
|
||||
<value>Ergebnise drucken</value>
|
||||
</data>
|
||||
<data name="RemoveBtnText" xml:space="preserve">
|
||||
<value>Supprimer</value>
|
||||
<data name="Procedure" xml:space="preserve">
|
||||
<value>Prüfvorlage</value>
|
||||
</data>
|
||||
<data name="Repeat_password" xml:space="preserve">
|
||||
<value>Répéter mot passe</value>
|
||||
<data name="Protocol" xml:space="preserve">
|
||||
<value>Protokoll</value>
|
||||
</data>
|
||||
<data name="Username_taken" xml:space="preserve">
|
||||
<value>Ce nom d'utilisateur a déjà été pris. Veuillez en choisir un autre.</value>
|
||||
<data name="Query_results" xml:space="preserve">
|
||||
<value>Ergebnisse</value>
|
||||
</data>
|
||||
<data name="User_code" xml:space="preserve">
|
||||
<value>Code utilisateur</value>
|
||||
<data name="Results_Browser" xml:space="preserve">
|
||||
<value>Analyse der Ergebnisse</value>
|
||||
</data>
|
||||
<data name="User_Login" xml:space="preserve">
|
||||
<value>Utilisateur en ligne</value>
|
||||
<data name="RetryDatabaseText" xml:space="preserve">
|
||||
<value>Datenbankverbindung wiederherstellen</value>
|
||||
</data>
|
||||
<data name="User_Management" xml:space="preserve">
|
||||
<value>Gestion utilisateurs</value>
|
||||
<data name="Rows" xml:space="preserve">
|
||||
<value>Reihen</value>
|
||||
</data>
|
||||
<data name="User_name" xml:space="preserve">
|
||||
<value>Nom d'utilisateur</value>
|
||||
<data name="Save_filters" xml:space="preserve">
|
||||
<value>Filter speichern</value>
|
||||
</data>
|
||||
<data name="CloseBtnText" xml:space="preserve">
|
||||
<value>Fermer</value>
|
||||
<data name="Selected_results" xml:space="preserve">
|
||||
<value>Ergebnisse ausgewählt</value>
|
||||
</data>
|
||||
<data name="No_remote_database_of_users" xml:space="preserve">
|
||||
<value>Pas télécommande sur base utilisateurs</value>
|
||||
<data name="Select_a_filter" xml:space="preserve">
|
||||
<value>Wählen Sie einen Filter</value>
|
||||
</data>
|
||||
<data name="Are_you_sure" xml:space="preserve">
|
||||
<value>Êtes-vous sûr ?</value>
|
||||
<data name="Serial_number" xml:space="preserve">
|
||||
<value>Seriennummer</value>
|
||||
</data>
|
||||
<data name="Warning" xml:space="preserve">
|
||||
<value>Attention</value>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>Einstellungen</value>
|
||||
</data>
|
||||
<data name="Confirmation" xml:space="preserve">
|
||||
<value>Confirmation</value>
|
||||
<data name="SingleBtnText" xml:space="preserve">
|
||||
<value>Einzel</value>
|
||||
</data>
|
||||
<data name="N_users_copied" xml:space="preserve">
|
||||
<value>{0} utilisateurs copiés</value>
|
||||
<data name="Statistics" xml:space="preserve">
|
||||
<value>Statistiken</value>
|
||||
</data>
|
||||
<data name="Copying_remote_users_failed" xml:space="preserve">
|
||||
<value>Copie utilisateurs a échoué</value>
|
||||
<data name="Test" xml:space="preserve">
|
||||
<value>Prüfpunkt</value>
|
||||
</data>
|
||||
<data name="Save_or_update_user_failed" xml:space="preserve">
|
||||
<value>Enregistrement ou mise à jour utilisateur a échoué</value>
|
||||
<data name="Test_bench" xml:space="preserve">
|
||||
<value>Prüfstand</value>
|
||||
</data>
|
||||
<data name="administrator" xml:space="preserve">
|
||||
<value>Administrateur</value>
|
||||
<data name="Test_benches" xml:space="preserve">
|
||||
<value>Prüfstand</value>
|
||||
</data>
|
||||
<data name="calibration_specialist" xml:space="preserve">
|
||||
<value>Spécialiste en calibration</value>
|
||||
<data name="To" xml:space="preserve">
|
||||
<value>Zu</value>
|
||||
</data>
|
||||
<data name="head_of_lab" xml:space="preserve">
|
||||
<value>Chef de laboratoire</value>
|
||||
<data name="UnlockBtnText" xml:space="preserve">
|
||||
<value>Ändern</value>
|
||||
</data>
|
||||
<data name="maintenance" xml:space="preserve">
|
||||
<value>Spécialiste en maintenance</value>
|
||||
<data name="Water_Meter" xml:space="preserve">
|
||||
<value>Wasserzähler</value>
|
||||
</data>
|
||||
<data name="metrologist" xml:space="preserve">
|
||||
<value>Métrologue</value>
|
||||
<data name="Error_displaying_results" xml:space="preserve">
|
||||
<value>Fehler beim Anzeigen der Ergebnisse</value>
|
||||
</data>
|
||||
<data name="specialist" xml:space="preserve">
|
||||
<value>Spécialiste d'essais</value>
|
||||
<data name="Error_saving_file" xml:space="preserve">
|
||||
<value>Fehler beim Speichern der Datei</value>
|
||||
</data>
|
||||
<data name="tester" xml:space="preserve">
|
||||
<value>Testeur</value>
|
||||
<data name="Error_serializing_filters" xml:space="preserve">
|
||||
<value>Fehler Serialisierung Filter</value>
|
||||
</data>
|
||||
<data name="invalid" xml:space="preserve">
|
||||
<value>invalide</value>
|
||||
<data name="searching" xml:space="preserve">
|
||||
<value>suche</value>
|
||||
</data>
|
||||
<data name="Tag" xml:space="preserve">
|
||||
<value>NFC tag</value>
|
||||
<data name="More_informations" xml:space="preserve">
|
||||
<value>Mehr Informationen</value>
|
||||
</data>
|
||||
<data name="Tag_taken" xml:space="preserve">
|
||||
<value>Ce tag NFC a déjà été pris. S'il vous plaît utiliser un autre.</value>
|
||||
<data name="Purchase_order" xml:space="preserve">
|
||||
<value>Bestellung</value>
|
||||
</data>
|
||||
<data name="production_tracing_administrator" xml:space="preserve">
|
||||
<value>administrateur suivi production</value>
|
||||
<data name="Serial_nr" xml:space="preserve">
|
||||
<value>Seriennr.</value>
|
||||
</data>
|
||||
<data name="Database" xml:space="preserve">
|
||||
<value>Datenbank</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,639 @@
|
||||
<?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>< Back</value>
|
||||
</data>
|
||||
<data name="FinishBtnText" xml:space="preserve">
|
||||
<value>Finish</value>
|
||||
</data>
|
||||
<data name="NextBtnText" xml:space="preserve">
|
||||
<value>Next ></value>
|
||||
</data>
|
||||
<data name="Component" xml:space="preserve">
|
||||
<value>Component</value>
|
||||
</data>
|
||||
<data name="_none_" xml:space="preserve">
|
||||
<value><none></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><nothing to configure></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>&Add ></value>
|
||||
</data>
|
||||
<data name="Available_results" xml:space="preserve">
|
||||
<value>Available results</value>
|
||||
</data>
|
||||
<data name="Remove" xml:space="preserve">
|
||||
<value>< &Remove</value>
|
||||
</data>
|
||||
<data name="Remove_all" xml:space="preserve">
|
||||
<value><< R&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 --></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>
|
||||
@@ -0,0 +1,381 @@
|
||||
<?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ý --></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ť ></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>< 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>
|
||||
+1620
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,26 @@
|
||||
<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>
|
||||
@@ -0,0 +1,16 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?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>
|
||||
@@ -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("RFPowerCommon")]
|
||||
[assembly: AssemblyTitle("RecordProcessing")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("RFPowerCommon")]
|
||||
[assembly: AssemblyProduct("RecordProcessing")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
@@ -20,6 +20,7 @@ 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
|
||||
}
|
||||
|
||||
@@ -226,7 +227,8 @@ 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;
|
||||
default: record = null; break;
|
||||
case RecordType.LaserNanjing: record = LaserNanjingRecord.FromFile(fileName); break;
|
||||
default: record = null; break;
|
||||
}
|
||||
|
||||
/// Process data extracted from the file
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<ProjectGuid>{67BD7A8F-0FED-4FDE-B875-78D5A2BC9B2C}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>RFPowerCommon</RootNamespace>
|
||||
<RootNamespace>RecordProcessing</RootNamespace>
|
||||
<AssemblyName>RFPowerCommon</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
@@ -61,6 +61,7 @@
|
||||
<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>
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
///
|
||||
/// 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,15 +2,12 @@
|
||||
/// 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
|
||||
{
|
||||
|
||||
@@ -107,8 +107,7 @@ namespace Results.Entities
|
||||
///
|
||||
/// Not mapped to database
|
||||
///
|
||||
public virtual int ProcessId { get; set; } /// Not mapped to DB !!! Tracing DB Process ID
|
||||
|
||||
public virtual string Workflow { get; set; } /// Not mapped to DB !!! Production tracing workflow name
|
||||
public virtual bool LastRecordIsNok { get; set; } /// Not mapped to DB !!! Previous record verification result
|
||||
|
||||
public virtual WaterMeterData WaterMeterData { get; set; }
|
||||
@@ -122,7 +121,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; }
|
||||
@@ -436,20 +435,24 @@ namespace Results.Entities
|
||||
RawTestInfos = null;
|
||||
CompleteTestInfos = null;
|
||||
|
||||
ProcessId = 0;
|
||||
Workflow = string.Empty;
|
||||
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
|
||||
@@ -465,6 +468,7 @@ namespace Results.Entities
|
||||
|
||||
SerialNr = src.SerialNr;
|
||||
SerialNrAux = src.SerialNrAux;
|
||||
RadioAddress = src.RadioAddress;
|
||||
PurchaseOrder = src.PurchaseOrder;
|
||||
YearOfProduction = src.YearOfProduction;
|
||||
WMPosition = src.WMPosition;
|
||||
@@ -493,29 +497,29 @@ namespace Results.Entities
|
||||
FWVersion = src.FWVersion;
|
||||
#endif
|
||||
#if TURA_SPECIAL
|
||||
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;
|
||||
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
|
||||
|
||||
ProcessId = src.ProcessId; /// Not mapped to DB
|
||||
Workflow = src.Workflow; /// Not mapped to DB
|
||||
LastRecordIsNok = src.LastRecordIsNok; /// Not mapped to DB
|
||||
|
||||
foreach (var mtr in MeterTestRslts)
|
||||
@@ -644,6 +648,7 @@ 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);
|
||||
@@ -672,7 +677,6 @@ 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);
|
||||
@@ -688,6 +692,7 @@ 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);
|
||||
@@ -708,7 +713,7 @@ namespace Results.Entities
|
||||
for (int i = 0; i < completeTestInfos.Length; i++) completeTestInfos[i].WriteBinary(writer);
|
||||
}
|
||||
|
||||
writer.Write(ProcessId);
|
||||
writer.Write(Workflow);
|
||||
writer.Write(LastRecordIsNok);
|
||||
|
||||
/// Save WaterMeterData or WaterMeterData.Id
|
||||
@@ -737,6 +742,7 @@ namespace Results.Entities
|
||||
Id = reader.ReadInt32();
|
||||
SerialNr = reader.ReadString();
|
||||
SerialNrAux = reader.ReadString();
|
||||
RadioAddress = reader.ReadString();
|
||||
PurchaseOrder = reader.ReadString();
|
||||
YearOfProduction = reader.ReadInt32();
|
||||
WMPosition = reader.ReadInt32();
|
||||
@@ -765,7 +771,6 @@ namespace Results.Entities
|
||||
FWVersion = reader.ReadString();
|
||||
#endif
|
||||
#if TURA_SPECIAL
|
||||
RadioAddress = reader.ReadString();
|
||||
PaletteNr = reader.ReadInt32();
|
||||
UmkartonNr = reader.ReadInt32();
|
||||
ProdTestBench = reader.ReadString();
|
||||
@@ -781,6 +786,7 @@ namespace Results.Entities
|
||||
Prefix = reader.ReadString();
|
||||
Suffix = reader.ReadString();
|
||||
CompleteSerialNr = reader.ReadString();
|
||||
OriRadioAddress = reader.ReadString();
|
||||
WMTypeRevision = reader.ReadInt32();
|
||||
Pruefindex = reader.ReadInt32();
|
||||
HydrPruefung = reader.ReadInt32();
|
||||
@@ -807,7 +813,7 @@ namespace Results.Entities
|
||||
}
|
||||
CompleteTestInfos = completeTestInfos;
|
||||
|
||||
ProcessId = reader.ReadInt32();
|
||||
Workflow = reader.ReadString();
|
||||
LastRecordIsNok = reader.ReadBoolean();
|
||||
|
||||
/// Retrieve TestData
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2015-2017 Sensus Metering Systems
|
||||
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
|
||||
///
|
||||
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);
|
||||
|
||||
+13
-16
@@ -1,4 +1,7 @@
|
||||
using System;
|
||||
///
|
||||
/// Copyright (c) 2019-2022 Sensus Metering Systems
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
@@ -18,29 +21,23 @@ namespace Results.Output
|
||||
|
||||
public static Chart GetChart(WaterMeter wm, bool isPrinter, Common.Unit flowUnit)
|
||||
{
|
||||
double maxFlow_m3h = 0;
|
||||
double maxFlow = 0;
|
||||
IList<PointF> unsortedPoints = new List<PointF>();
|
||||
foreach (var mtr in wm.RegularMeterTestRslts())
|
||||
{
|
||||
if (mtr.IsPilotRslt() && mtr.TestRslt.TestData.Evaluate && (mtr.TestRslt.TestTime > 0) && (mtr.TestRslt.PulsesMaster > 0))
|
||||
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)))
|
||||
{
|
||||
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));
|
||||
}
|
||||
if (flow > maxFlow) maxFlow = flow;
|
||||
unsortedPoints.Add(new PointF((float)Common.Units.ConvertTo(flowUnit, flow), (float)mtr.Error));
|
||||
}
|
||||
}
|
||||
IEnumerable<PointF> sortedPoints = unsortedPoints.OrderBy(x => x.X);
|
||||
|
||||
bool isQ4 = (maxFlow_m3h > 1.1 * wm.WaterMeterData.Q3_Qn);
|
||||
bool isQ4 = (maxFlow > 1.1 * wm.WaterMeterData.Q3_Qn);
|
||||
|
||||
Chart chart = new Chart
|
||||
{
|
||||
|
||||
@@ -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.1802.0")]
|
||||
[assembly: AssemblyFileVersion("3.1.1802.0")]
|
||||
[assembly: AssemblyVersion("3.1.1849.0")]
|
||||
[assembly: AssemblyFileVersion("3.1.1849.0")]
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>TRACE;DEBUG;ORACLE_DB</DefineConstants>
|
||||
<DefineConstants>TRACE;DEBUG</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;ORACLE_DB</DefineConstants>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
|
||||
@@ -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).ConstMasterRaw < 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).ConstMasterCorr < float.Epsilon) ? 0 : (1 / w.GetTestRslt(t).ConstMasterCorr)))));
|
||||
|
||||
///
|
||||
/// Temperature
|
||||
|
||||
@@ -581,6 +581,22 @@ 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,
|
||||
|
||||
@@ -29,8 +29,11 @@ namespace SchematicDrawing
|
||||
public enum Shape
|
||||
{
|
||||
Ambient,
|
||||
Clamping,
|
||||
Cover,
|
||||
Cross,
|
||||
Div,
|
||||
EmergencyStop,
|
||||
FlowM,
|
||||
Junction,
|
||||
Knee,
|
||||
@@ -44,11 +47,10 @@ namespace SchematicDrawing
|
||||
Tank,
|
||||
Tee,
|
||||
TempM,
|
||||
UniCB,
|
||||
Vacuum,
|
||||
Valve,
|
||||
WaterM,
|
||||
UniCB,
|
||||
EmergencyStop,
|
||||
Count
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 275 B |
Binary file not shown.
|
After Width: | Height: | Size: 277 B |
Binary file not shown.
|
After Width: | Height: | Size: 510 B |
Binary file not shown.
|
After Width: | Height: | Size: 382 B |
+40
@@ -60,6 +60,46 @@ 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,4 +382,16 @@
|
||||
<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>
|
||||
@@ -94,6 +94,10 @@
|
||||
</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" />
|
||||
|
||||
@@ -186,21 +186,25 @@ namespace SharedDatabase.Entities
|
||||
{
|
||||
message = string.Empty;
|
||||
int idummy;
|
||||
long ldummy;
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case 0: /// POName
|
||||
if (str.Length != 7)
|
||||
if (str.Length < 1 || str.Length > 10)
|
||||
{
|
||||
message = string.Format("Order must have 7 digits");
|
||||
message = string.Format("Order must have up to 10 digits");
|
||||
return false;
|
||||
}
|
||||
else if (!int.TryParse(str, out idummy) || idummy <= 0)
|
||||
else if (!long.TryParse(str, out ldummy) || ldummy <= 0)
|
||||
{
|
||||
message = string.Format("Order must be a positive integer number");
|
||||
message = string.Format("Order must be a positive integer number up to 9999999999");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
case 1: /// POState
|
||||
if (ParamValues(i).Contains(str)) return true;
|
||||
break;
|
||||
case 2: /// Workflow
|
||||
case 3: /// TestProcedure
|
||||
case 9: /// LaserMarking
|
||||
@@ -212,16 +216,13 @@ 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 1: /// POState
|
||||
if (ParamValues(i).Contains(str)) return true;
|
||||
case 7: /// Year
|
||||
if (int.TryParse(str, out idummy) && idummy > 2020 && idummy < 2099) return true;
|
||||
break;
|
||||
case 11: /// PiecesCount
|
||||
case 14: /// SNDigits
|
||||
@@ -249,7 +250,12 @@ namespace SharedDatabase.Entities
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual void CopyContentTo(OrderInfo dest)
|
||||
/// <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)
|
||||
{
|
||||
dest.POName = POName;
|
||||
dest.POState = POState;
|
||||
@@ -271,19 +277,72 @@ namespace SharedDatabase.Entities
|
||||
dest.RAFirst = RAFirst;
|
||||
dest.RASuffix = RASuffix;
|
||||
dest.Remark = Remark;
|
||||
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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -105,8 +105,7 @@ namespace SharedDatabase.Entities
|
||||
///
|
||||
/// Not mapped to database
|
||||
///
|
||||
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 string Workflow { get; set; } /// Not mapped to DB !!! Production tracing workflow name
|
||||
public virtual bool LastRecordIsNok { get; set; } /// Not mapped to DB !!! Previous record verification result
|
||||
|
||||
|
||||
@@ -121,7 +120,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; }
|
||||
@@ -438,8 +437,7 @@ namespace SharedDatabase.Entities
|
||||
RawTestInfos = null;
|
||||
CompleteTestInfos = null;
|
||||
|
||||
ProcessId = 0;
|
||||
SessionId = 0;
|
||||
Workflow = string.Empty;
|
||||
ErrorFlags = 0;
|
||||
LastRecordIsNok = false;
|
||||
|
||||
@@ -518,8 +516,7 @@ namespace SharedDatabase.Entities
|
||||
RawTestInfos = src.RawTestInfos; /// Not mapped to DB
|
||||
CompleteTestInfos = src.CompleteTestInfos; /// Not mapped to DB
|
||||
|
||||
ProcessId = src.ProcessId; /// Not mapped to DB
|
||||
SessionId = src.SessionId; /// Not mapped to DB
|
||||
Workflow = src.Workflow; /// Not mapped to DB
|
||||
LastRecordIsNok = src.LastRecordIsNok; /// Not mapped to DB
|
||||
|
||||
foreach (var mtr in MeterTestRslts)
|
||||
@@ -712,8 +709,7 @@ namespace SharedDatabase.Entities
|
||||
for (int i = 0; i < completeTestInfos.Length; i++) completeTestInfos[i].WriteBinary(writer);
|
||||
}
|
||||
|
||||
writer.Write(ProcessId);
|
||||
writer.Write(SessionId);
|
||||
writer.Write(Workflow);
|
||||
writer.Write(LastRecordIsNok);
|
||||
|
||||
/// Save WaterMeterData or WaterMeterData.Id
|
||||
@@ -812,8 +808,7 @@ namespace SharedDatabase.Entities
|
||||
}
|
||||
CompleteTestInfos = completeTestInfos;
|
||||
|
||||
ProcessId = reader.ReadInt32();
|
||||
SessionId = reader.ReadInt32();
|
||||
Workflow = reader.ReadString();
|
||||
LastRecordIsNok = reader.ReadBoolean();
|
||||
|
||||
/// Retrieve TestData
|
||||
|
||||
@@ -10,6 +10,7 @@ namespace SharedDatabase
|
||||
public class Const
|
||||
{
|
||||
public const int MaxPartNameLen = 10;
|
||||
public const string RAFormat = "D9"; /// Radio address digits count = 9
|
||||
}
|
||||
|
||||
public enum CodeType
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>TRACE;DEBUG;ORACLE_DB</DefineConstants>
|
||||
<DefineConstants>TRACE;DEBUG</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
@@ -25,7 +25,7 @@
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;ORACLE_DB</DefineConstants>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
@@ -141,6 +141,7 @@
|
||||
<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>
|
||||
|
||||
+22
-75
@@ -5,7 +5,6 @@ using FluentNHibernate.Cfg;
|
||||
using FluentNHibernate.Cfg.Db;
|
||||
using NHibernate;
|
||||
using NHibernate.Cfg;
|
||||
using NHibernate.Tool.hbm2ddl;
|
||||
using log4net;
|
||||
using SharedDatabase.Entities;
|
||||
|
||||
@@ -77,14 +76,14 @@ namespace SharedDatabase
|
||||
{
|
||||
/// This NHibernate tool takes a configuration (with mapping info in)
|
||||
/// and exports a database schema from it
|
||||
new SchemaExport(config).SetOutputFile("db_schema");
|
||||
new NHibernate.Tool.hbm2ddl.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 SchemaExport(config).Create(true, true);
|
||||
new NHibernate.Tool.hbm2ddl.SchemaExport(config).Create(true, true);
|
||||
}
|
||||
|
||||
/// Create a NHibernate session for the given database
|
||||
@@ -192,7 +191,8 @@ 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.OrderBy(rr => rr.Timestamp).Desc.List();
|
||||
var referenceRecords = query.List();
|
||||
|
||||
if (referenceRecords.Count == 1) return referenceRecords[0];
|
||||
|
||||
@@ -204,67 +204,13 @@ 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<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)
|
||||
public static IList<WorkflowSummary> ReadWorkflowSummariesFromDB(ISession session,
|
||||
string workstepPattern,
|
||||
bool readDeactivatedWorkflows = false)
|
||||
{
|
||||
IList<Process> workflows;
|
||||
if (readDeactivatedWorkflows)
|
||||
@@ -283,30 +229,31 @@ namespace SharedDatabase
|
||||
)).List();
|
||||
}
|
||||
|
||||
workflowDict = new Dictionary<int, Process>();
|
||||
workflowStepsDict = new Dictionary<int, IList<Workstep>>();
|
||||
verifInfos = new Dictionary<int, ScanVerificationInfo>();
|
||||
var listOfWFSummaries = new List<WorkflowSummary>();
|
||||
|
||||
foreach (var wf in workflows)
|
||||
{
|
||||
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 wSum = new WorkflowSummary(wf);
|
||||
|
||||
ScanVerificationInfo info;
|
||||
if ((steps.Count == 1) && ((info = TracingDB.AnalyzeProcess(session, wf, steps[0])) != null))
|
||||
var workstep = wf.Worksteps.FirstOrDefault(x => x.Name.ToLower().Contains(workstepPattern.ToLower()));
|
||||
if (workstep != null)
|
||||
{
|
||||
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);
|
||||
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;
|
||||
|
||||
listOfWFSummaries.Add(wSum);
|
||||
}
|
||||
|
||||
return workflows;
|
||||
return listOfWFSummaries;
|
||||
}
|
||||
|
||||
|
||||
/// <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.
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
///
|
||||
/// 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>");
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user