Compare commits

...
Author SHA1 Message Date
Milan Hanajik 8179a3e6a7 Reconfigured for LANG_PL 2023-11-07 08:51:04 +01:00
Milan Hanajik 4fd9030812 PTest.FlowId, ProfileType.CompoundQ3RQnClass... added, clean-up, DB 3.8 => 3.9, ver. 3.9.2118 2023-11-07 08:49:48 +01:00
Milan Hanajik 45d138ece3 Bug fixes in Results.Output.Table 2023-11-07 08:49:47 +01:00
Milan Hanajik 4a884a09a1 TestWizard improvements, ver. 3.8.2114 2023-10-30 15:36:41 +01:00
Milan Hanajik a524915f28 Metrology contains links to certificates saved as PDF files, CalibCertificateCtrl. 2023-10-17 17:31:35 +02:00
Milan Hanajik 7982526790 Bug fix in ValveBase, prevents PumpTandem in paths and transition sequences, ver. 3.8.2109 2023-10-12 21:22:55 +02:00
Milan Hanajik b866c45e9b CombinedWithDetection : DetectionKernelSize / DetectionBufferSize increased. 2023-10-12 15:23:26 +02:00
Milan Hanajik 0073ac8b9e Table rewritten, Cell, TopBorder, LeftBorder, BottomMerge, RightMerge added, merging OK, clean-up, ver. 3.8.2108 2023-10-12 15:23:06 +02:00
Milan Hanajik 36d661c75e 1. Results.ItemID.Passed gives always the meter result, 2. Results.WMeterRsltItemSpec.Merge added + UI changes 2023-10-12 15:23:05 +02:00
Milan Hanajik e3f1f2711b Start/stop valve switch time measurement implemented in StandingStart... test methods, ver. 3.8.2100 2023-09-22 13:52:50 +02:00
Milan Hanajik f9ae8c54e1 TestProfileDlg : compoundTabPage removed. 2023-09-22 10:05:25 +02:00
Milan Hanajik ad7abe5471 1. Profiles for Compound meters, 2. TestMethods.CombinedWithDetection modifications. 2023-09-22 10:01:01 +02:00
Milan Hanajik a027f3f544 test.Qform/Qto -> test.QfromM3ph()/QtoM3ph() in test methods, sequences, etc. 2023-09-22 10:01:01 +02:00
Milan Hanajik 0930df5e64 DB 3.7 --> 3.8, IsFromToInPct (unit for Qfrom/Qto) added to Entities.Test, IBenchInfo, ProcessData..., ver. 3.8.2097 2023-09-22 10:01:00 +02:00
Milan Hanajik 1c5bf76bb3 Changes for nanjing : iPerl.CycleBeginningForm and S640CommForm bug fixes. 2023-09-20 12:27:57 +02:00
Milan Hanajik d2d697ae80 ver. 3.7.2095 2023-08-25 09:52:41 +02:00
Milan Hanajik 60f30e4c41 Results, FlyingStartMassCollection and CombinedWithDetection : Main and Aux meter pulses, Div. switch time, ver. 3.7.2094 2023-08-24 13:12:30 +02:00
Milan Hanajik ecccfab7a6 FlyingStartMassCollection : Delayed start param., Action.IsDelayedStart added. 2023-08-23 14:59:42 +02:00
Milan Hanajik 1691c634c6 Diverter.Resolution 1, 2, 4, and 8 ms implemented, ver. 3.7.2092 2023-08-23 14:33:07 +02:00
Milan Hanajik 900a2d660c DataEntry.Uni : Compound meters support. 2023-08-18 12:21:02 +02:00
Milan Hanajik eaf60f3292 DB 3.6 -> 3.7, PulsesPerLtrAux added to WaterMeterData and to Results items, MainSeqUtils and ProcedureDlg changes, ver. 3.7.2088 2023-08-17 19:57:58 +02:00
Milan Hanajik bc0de96ad9 Compound profiles support in progress 2023-08-15 15:31:17 +02:00
Milan Hanajik a770f5a9b8 ver. 3.6.2087 2023-08-14 10:20:01 +02:00
Milan Hanajik 0fbc9e2bad DataEntry.Uni bug fixes, ver. 3.6.2086 2023-08-09 12:36:15 +02:00
Milan Hanajik ed5cd89d6a File names of test start and test end pictures are defined in DataEntry.Uni. 2023-08-02 10:19:12 +02:00
Milan Hanajik dd5b20ab38 DataEntry.Uni camera support in TestStartEndForm, ver. 3.6.2072 2023-08-01 11:54:01 +02:00
Milan Hanajik 3f35506b26 TestWizard.TestProfileSelection : Conversion to float avoided. 2023-07-13 13:31:22 +02:00
Milan Hanajik 1ee7e00928 sluprimadev --> deluh1web03 2023-07-12 12:07:15 +02:00
Milan Hanajik ffbfd5ebd5 Ver. 3.6.2068 2023-07-04 13:35:09 +02:00
Milan Hanajik 7a2afd1bdc Bug fix in ProcessTabPageCtrl : Exception when simulating, ver. 3.6.2067 2023-07-03 13:27:08 +02:00
Milan Hanajik 30f9ea19dd OrderManagement : Finish button, Show finished orders check box, ver. 3.0.14 2023-06-24 16:40:36 +02:00
Milan Hanajik 2ec8683b27 UpgradeSelectionDlg implements 3.1 -> 3.2 and 3.2 -> 3.3 2023-06-23 16:48:44 +02:00
Milan Hanajik 4f59f23c6f Clean-up, bug fix in SharedDatabase.Utils.GetTestName( ) - could freeze, ver. 3.6.2062 2023-06-23 16:48:44 +02:00
Milan Hanajik daac273edb DataEntry.Uni re-factorization and minor fix when ORACLE_DB, items in summaryResults. 2023-06-23 16:48:06 +02:00
Milan Hanajik edb084260f Bug in water meter chart fixed : Incorrect error limit lines 2023-06-16 15:30:38 +02:00
Milan Hanajik 8370c7c2e7 1. MainSeqUtils.CreateNewBatchResults( ) : WaterMeterData.ErrLimHi/LoQ initialized properly, 2. comments. 2023-06-16 13:34:24 +02:00
Milan Hanajik 4a394cc5d5 UI.Procedures.ProceduresCtrl : MoreContent.DEAndSequences added. 2023-06-15 11:31:46 +02:00
Milan Hanajik f4db55cc0b S640TestApp to verify web-services, etc. 2023-06-15 11:29:50 +02:00
Milan Hanajik b4f41a2f1f Workplace...S640Stream : New evaluation, Green/yellow progress bar, Interval 400ms, ver. 3.1.19 2023-05-26 14:09:54 +02:00
Milan Hanajik 5b9156d670 PartDlg, PartsCtrl updated, CodeForm of relased workflows can be modified, ver. 3.0.5 2023-05-25 14:54:39 +02:00
Milan Hanajik bebb83f6fc SharedDatabase.Entities.Part.OraDBType removed, CodeType/CodeForm descriptions updated. 2023-05-25 14:54:28 +02:00
Milan Hanajik 130b59fc91 DataEntry.Uni.TestStartEndForm implemented 2023-05-19 15:11:18 +02:00
Milan Hanajik b2a7cfb0d4 DataEntry.Uni Items passed in a list, w/o limits, Cfg with arrays, TODO: TestStartEndForm 2023-05-19 15:11:18 +02:00
Milan Hanajik b67857f658 Access right clean-up for PL. 2023-05-19 15:11:10 +02:00
Milan Hanajik 046fab05c0 S640CommForm bug fix : Crashed when order info was missing. 2023-05-19 10:11:07 +02:00
Milan Hanajik 6004a65572 ver. 3.6.2046 2023-05-11 12:00:21 +02:00
Milan Hanajik 0962efd159 1. DataEntry.Uni implemented, 2. TeststartEndForm with s/n-s, 3. DataEntry.Double24 and Fewa deleted, ver. 3.6.2045 2023-05-11 11:56:43 +02:00
Milan Hanajik cb1a471248 Preparation for DataEntry.Uni 2023-04-24 20:00:49 +02:00
Milan Hanajik 8da049219a TestWizard.VolumeAndErrorSelection fixed - conversion to float avoided. 2023-04-24 20:00:49 +02:00
Milan Hanajik 91b55eb19c 'Starting the system' message on start-up before MainWnd opens, ver. 3.6.2035 2023-04-06 10:55:00 +02:00
Milan Hanajik 6b582bea64 Printing from PreviousResultsDlg, CompoundDetectionTextBox.AppendText( ), ver. 3.6.2035 2023-04-06 08:37:32 +02:00
Milan Hanajik 61910932c2 CombinedWithDetectionSeq, ProcessTabPageCtrl and SeqBase.ReadRegistersTempPressAmbient() changes, ver. 3.6.2030 2023-03-31 11:28:04 +02:00
Milan Hanajik 1ecf528ff0 RegValve.ChangeRegValvePositionOp fixed 2023-03-30 12:07:59 +02:00
Milan Hanajik 9a5ee99a82 TestWizard.FlowSelection fixed, conversion to float avoided. 2023-03-30 10:04:25 +02:00
Milan Hanajik cf626d7b91 Batch.SaveTime introduced, Batch.EndTime calculation modified. 2023-03-30 10:04:14 +02:00
Milan Hanajik b9e8eeab00 UpgradeSelectionDlg changes : ver. 3.3 -> ver. 3.6 2023-03-30 09:09:16 +02:00
Milan Hanajik b880b62924 WMChart can plot error limits other then 2% and 5% and qp,qi style hyperbolic error limits, related DB and UI changes, ver. 3.6.2028 2023-03-24 16:43:21 +01:00
Milan Hanajik 36f8bfa32f All Output.Printers components : string PrinterName parameter specifies printer to be used. 2023-03-14 11:22:38 +01:00
Milan Hanajik 8be3b53db4 default_printer added to Resources.Strings 2023-03-14 11:22:38 +01:00
Milan Hanajik 95759e70b4 DataEntry.Standard24 clean-up, ver. 3.5.2024 2023-03-07 09:54:46 +01:00
Milan Hanajik 2e6a17121f Bug fix in StandingStartMassCollectionSeq 2023-03-06 12:21:43 +01:00
Milan Hanajik ed21db65c3 Uni.RegValveAnalog : Initial implementation for UNI, ver. 3.5.2015 2023-02-13 09:54:05 +01:00
Milan Hanajik d29a425880 Order of saving results to MySql DB and to other destinations changed, try-catch for other destinations. 2023-02-08 10:16:46 +01:00
Milan Hanajik a4139d7a73 Uni.RegValve clean-up. 2023-02-06 15:39:33 +01:00
Milan Hanajik a6a517b6ea Bug fixes : TestRslt.IsStartStop( ), IsRelErrTest( ), IsVolumeMethod( ), ... 2023-02-06 08:54:53 +01:00
Milan Hanajik 07f36f2945 Bug fix in Uni.RegValve.SetFlowOp : 2000 --> flowMeter.NominalFreq, ver. 3.5.2013 2023-01-26 14:57:21 +01:00
Milan Hanajik e2048ed64c Bug fix in Danfoss.VLT2800.Pump, ver. 3.5.2012 2023-01-25 13:42:14 +01:00
Milan Hanajik 90b62779fd Bug fix : DataEntry.StandardCamera.TestStartEndForm crashed when no RR was defined at certain position 2022-12-21 09:37:06 +01:00
Milan Hanajik 1c6488d621 Camera modifications : CheckDeviceCaps( ), CameraBinaryFiles2, etc, ver. 3.5.1997 2022-12-15 16:22:19 +01:00
Milan Hanajik 62e9f612fc Shared buttons : Accelator keys 2022-12-15 16:22:19 +01:00
Milan Hanajik 9e9a01bd43 Approval by legalizator when #define LANG_PL, ver. 3.5.1993 2022-11-30 11:06:39 +01:00
Milan Hanajik 6dcd40c640 Profiles: Method added, imp./exp. fixed, Procedures: Selection by profile, Create from profile button, etc, ver. 3.5.1992 2022-11-25 13:59:35 +01:00
Milan Hanajik b54de856af Power user password changes. 2022-11-21 12:41:29 +01:00
Milan Hanajik 118ce9797f FixedStartMassCollection : Diverter to tank after start valve is closed, ver. 3.4.1981 2022-11-11 14:26:38 +01:00
Milan Hanajik 36ae8479ca 'Winiki lub E' support MeterTestRslt 2022-11-11 14:14:44 +01:00
Milan Hanajik 9ca9d41ddc Browsing previous results : SerialNr can be used as a search criterion. 2022-11-09 12:19:42 +01:00
Milan Hanajik 4f26815e68 PressureMeter : var pressLimit in new double[] { 2.18, 2.2, 2.22, 2.24, 2.26, 2.27 }, ver. 3.4.1977 2022-11-04 12:29:40 +01:00
Milan Hanajik abd68f9a44 BatchNr is displayed in MainWnd status bar. 2022-10-28 15:04:07 +02:00
Milan Hanajik ae8a0ca4c1 Changes in TBF.Rig.Uni.RegValve(s), TBF.Rig.CB.Uni.Action.RegVlvMoveToPos, etc. 2022-10-28 15:04:07 +02:00
Milan Hanajik ac5684a2b5 Config.Entities.OutputPath.RegVPositions added, UI and SequenceBase changes, ver. 3.4.1975 2022-10-28 15:03:58 +02:00
Milan Hanajik 0f738be73e Bug fix 2022-10-21 15:45:53 +02:00
Milan Hanajik 4b85db202e Bug fix, ver. 3.3.1973 2022-10-21 08:46:43 +02:00
Milan Hanajik 96c300d34f PressureMeter.Meret : WaitUntilPressureIsOp conditions, ver. 3.3.1972 2022-10-13 19:13:45 +02:00
Milan Hanajik dbdf1f8fb6 Project dependencies for Workplace (Nanjing) fixed. 2022-10-13 18:22:32 +02:00
Milan Hanajik 6158ee93dc As in 2.30.1971 : StandardCamera.TestStartEndForm with OCR, LiveStreamOp with overlay (test par.), camera does not upload binary files on startup. 2022-10-04 16:46:17 +02:00
Milan Hanajik 6270e0c417 UltrasoundLevelMeter is displayed on the schematic drawing. 2022-09-29 16:59:25 +02:00
Milan Hanajik 67ba9986f2 Renaming transition sequences enhanced.. 2022-09-08 08:16:37 +02:00
Milan Hanajik d2e8f4f0e3 Better on-screen error message when a path is missing in a test, ver. 3.3.1941 2022-08-05 14:58:47 +02:00
Milan c9ea85b7b8 Results project upgraded by VS2022. 2022-08-02 11:49:41 +02:00
Milan Hanajik 86ed8b13bf TestMethods.StandingStartMassCollWODiv added, ver. 3.3.1940 2022-08-02 09:33:37 +02:00
Milan Hanajik 328c170888 StandingStartMassCollection test without a diverter is now possible, ver. 3.3.1935 2022-07-31 17:34:04 +02:00
Milan Hanajik ee31628417 All projects target .Net Framework 4.7.2 2022-07-28 12:50:01 +02:00
Milan Hanajik 267a6557df Bug fix in LocalSettings related to Path/Meters, ver. 3.3.1934 2022-07-28 10:18:32 +02:00
Milan Hanajik 177d17cb81 Sample log4netConfig file modiifed. 2022-07-27 15:05:11 +02:00
403 changed files with 19535 additions and 26027 deletions
+2
View File
@@ -44,6 +44,8 @@ ResultsBrowser/bin/
ResultsBrowser/obj/
ResultsParser/bin/
ResultsParser/obj/
S640TestApp/bin/
S640TestApp/obj/
SharedDatabase/bin
SharedDatabase/obj
SchematicDrawing/bin
+2 -2
View File
@@ -17,7 +17,7 @@
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DefineConstants>TRACE;DEBUG;LANG_PL</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
@@ -25,7 +25,7 @@
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<DefineConstants>TRACE;LANG_PL</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
+10
View File
@@ -96,6 +96,16 @@ namespace Common
return string.Format("{0},{1},{2}", User().UserName, User2.UserName, User3.UserName);
}
public static string GetEncodedString(string legalizator)
{
if (User() == null || User().UserName == null) return string.Empty;
return string.Format("{0}~{1}~{2}",
User().UserName,
User().FullName == null ? string.Empty : User().FullName,
legalizator == null ? string.Empty : legalizator);
}
/// <summary>
/// Return the current user number or 0
/// </summary>
+73 -6
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
/// Copyright (c) 2013-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -185,16 +185,70 @@ namespace Common
Count,
}
public enum FlowNames
{
QnQtQmin = 0,
Q3Q2Q1 = 1,
QpQi = 2,
Count,
}
public enum ProfileType
{
Q3R,
QnClassColdWater,
QnClassHotWater,
QpQi,
CompoundQ3RQ3R,
CompoundQnClassQnClass,
CompoundQ3RQnClass,
CompoundQnClassQ3R,
CompoundQpQiQpQi,
Manual,
Count,
}
public enum FlowId
{
Any,
Q4,
Q3,
Q2,
Q1,
Q4Main,
Q3Main,
Q2Main,
Q1Main,
Q4Aux,
Q3Aux,
Q2Aux,
Q1Aux,
Qmax,
Qn,
Qt,
Qmin,
QmaxMain,
QnMain,
QtMain,
QminMain,
QmaxAux,
QnAux,
QtAux,
QminAux,
Qp,
Qp10,
Qi,
QpMain,
Qp10Main,
QiMain,
QpAux,
Qp10Aux,
QiAux,
Qdetected,
Qfall,
Qrise,
}
public enum ErrorLimitType
{
Manual,
@@ -266,11 +320,13 @@ namespace Common
[Description("V")] V, /// vertical
[Description("STR")] S, /// standrohre
[Description("F")] F, /// fall
[Description("H/V")] HV, /// horizontal / vertical
#else
[Description("H")] H, /// horizontal
[Description("V")] V, /// vertical
[Description("S")] S, /// steig
[Description("F")] F, /// fall
[Description("H")] H, /// horizontal
[Description("V")] V, /// vertical
[Description("S")] S, /// steig
[Description("F")] F, /// fall
[Description("H/V")] HV, /// horizontal / vertical
#endif
Count
}
@@ -464,8 +520,10 @@ namespace Common
public enum TestProfile
{
UserDefined,
UserDefinedCompound,
UserDefinedHeatMeter,
Protected, /// The first protected one
ProtectedCompound,
ProtectedHeatMeter,
}
@@ -640,7 +698,16 @@ namespace Common
Count,
}
public enum ImageRotation
public enum DivResolution : int
{
[Description("1 ms (0.25 s)")] _1ms = 0,
[Description("2 ms (0.5 s)")] _2ms = 1,
[Description("4 ms (1 s)")] _4ms = 2,
[Description("8 ms (2 s)")] _8ms = 3,
Count,
}
public enum ImageRotation
{
[Description("0 deg")] None,
[Description("90 deg")] Deg90,
+27 -5
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2021-2022 Sensus Slovensko a.s.
/// Copyright (c) 2021-2023 Sensus Slovensko a.s.
///
using System;
@@ -20,6 +20,29 @@ namespace Common
return (format == "F0") ? value.ToString("F0") : value.ToString(format).TrimEnd(new char[] { '0' });
}
public static FlowNames ProfileType2FlowNames(ProfileType pt, bool isAux = false)
{
switch (pt)
{
case ProfileType.Q3R:
case ProfileType.CompoundQ3RQ3R:
return FlowNames.Q3Q2Q1;
case ProfileType.CompoundQ3RQnClass:
return isAux ? FlowNames.QnQtQmin : FlowNames.Q3Q2Q1;
case ProfileType.QnClassColdWater:
case ProfileType.QnClassHotWater:
case ProfileType.CompoundQnClassQnClass:
return FlowNames.QnQtQmin;
case ProfileType.CompoundQnClassQ3R:
return isAux ? FlowNames.Q3Q2Q1 : FlowNames.QnQtQmin;
case ProfileType.QpQi:
case ProfileType.CompoundQpQiQpQi:
return FlowNames.QpQi;
default:
return FlowNames.Q3Q2Q1;
}
}
public static string SignificantDigitsToFmt(double value, int sigDigits)
{
if (sigDigits == 6)
@@ -278,14 +301,13 @@ namespace Common
int number = (date.Year % 10) + 10 * (date.Month - 1) + 120 * date.Day;
string passwordOfDay = Convert.ToString(number, 8);
return (userName.Equals("milan") && password.Equals("kremik")) ||
return (userName.Equals("milan") && password.Equals("kraken")) ||
(userName.Equals("igor") && password.Equals("mojronko8")) ||
(userName.Equals("MARIAN") && password.Equals("NM-309BN")) ||
(userName.Equals("lubo1212") && password.Equals("Tatry52")) ||
(userName.Equals("Michal") && password.Equals("1236natahA8")) ||
(userName.Equals("Michal") && password.Equals("Plok789456123")) ||
(userName.Equals("martin") && password.Equals("vaclavek84")) ||
(userName.Equals("pakan") && password.Equals("kuriatko")) ||
(userName.Equals("augustin") && password.Equals("jaugust")) ||
(userName.Equals("jan") && password.Equals("jaugust")) ||
(userName.Equals("JCermak") && password.Equals("Zt6911")) ||
(userName.Equals("gilles") && password.Equals("alibaba")) ||
(userName.Equals(passwordOfDay) && password.Equals(passwordOfDay));
+1 -1
View File
@@ -18,7 +18,7 @@ namespace Config.Entities
public virtual Unit FlowUnit { get; set; } /// Not mapped to database, used in UI
public virtual string Selector { get; set; }
public virtual string Pump { get; set; }
public virtual string RegVPositions { get; set; } /// Positions of regulation valves in % separated by ';'
public virtual string RegVPositions { get; set; } /// Positions of regulation valves in Category.Feeding in % separated by ';'
/// Valves
public virtual string ValvesOpen { get; set; }
+2
View File
@@ -24,6 +24,7 @@ namespace Config.Entities
public virtual string Diverter { get; set; }
public virtual string TempMtrDiv { get; set; }
public virtual string Scale { get; set; }
public virtual string RegVPositions { get; set; } /// Positions of regulation valves in Category.Output in % separated by ';'
/// Valves
public virtual string ValvesOpen { get; set; }
@@ -63,6 +64,7 @@ namespace Config.Entities
result.Diverter = Diverter;
result.TempMtrDiv = TempMtrDiv;
result.Scale = Scale;
result.RegVPositions= RegVPositions;
result.ValvesOpen = ValvesOpen;
result.ValvesClose = ValvesClose;
+33 -4
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2019 Sensus Slovensko a.s.
/// Copyright (c) 2019-2023 Sensus Slovensko a.s.
///
using System;
using System.Globalization;
@@ -16,7 +16,9 @@ namespace Config.Entities
public virtual int Id { get; protected set; }
public virtual int ItemNr { get; set; }
public virtual string Name { get; set; }
public virtual int Part { get; set; } /// Part=0 ... test of all WM-s /// Part>0 ... part of a set of tests with the same Name: subset of WM-s is given by MetersPath
public virtual int Part { get; set; } /// Part=0 ... test of all WM-s
/// Part>0 ... part of a set of tests with the same Name: subset of WM-s is given by MetersPath
public virtual FlowId FlowId { get; set; }
public virtual double CoefQfrom { get; set; } /// Water flow low limit in [m3/h]
public virtual double CoefQto { get; set; } /// Water flow high limit in [m3/h]
public virtual double ErrLimLo { get; set; } /// in [%] usually < 0, in case of heat meters: 1=class1, 2=class2, 3=class3
@@ -27,6 +29,7 @@ namespace Config.Entities
public virtual double PressLimHi { get; set; } /// [bar] max. water pressure
public virtual sbyte Publish { get; set; } /// 0=no, 1=in all protocols, 2=on screen, 3=internal
public virtual bool Evaluate { get; set; }
public virtual string Method { get; set; } /// Test method (component name)
public virtual sbyte E1 { get; set; } ///
public virtual sbyte E2 { get; set; } ///
@@ -81,6 +84,7 @@ namespace Config.Entities
PressLimHi = 16.0; /// [bar]
Publish = (sbyte)Common.Publish.Always;
Evaluate = true;
Method = string.Empty;
E1 = (sbyte)ErrorFlagsMode.On;
E2 = (sbyte)ErrorFlagsMode.On;
@@ -140,6 +144,7 @@ namespace Config.Entities
result.PressLimHi = PressLimHi;
result.Publish = Publish;
result.Evaluate = Evaluate;
result.Method = Method;
result.E1 = E1;
result.E2 = E2;
@@ -183,6 +188,7 @@ namespace Config.Entities
output.WriteLine(Name);
output.WriteLine(Part);
output.WriteLine(((ushort)FlowId).ToString(ci));
output.WriteLine(CoefQfrom.ToString(ci));
output.WriteLine(CoefQto.ToString(ci));
output.WriteLine(ErrLimLo.ToString(ci));
@@ -193,6 +199,7 @@ namespace Config.Entities
output.WriteLine(PressLimHi.ToString(ci));
output.WriteLine(Publish.ToString());
output.WriteLine(Evaluate.ToString());
output.WriteLine(Method);
output.WriteLine(E1.ToString());
output.WriteLine(E2.ToString());
@@ -241,16 +248,36 @@ namespace Config.Entities
tst.Name = firstLine;
tst.Part = int.Parse(input.ReadLine());
tst.FlowId = (FlowId)ushort.Parse(input.ReadLine(), ci);
tst.CoefQfrom = double.Parse(input.ReadLine(), ci);
tst.CoefQto = double.Parse(input.ReadLine(), ci);
tst.ErrLimLo = double.Parse(input.ReadLine(), ci);
tst.ErrLimHi = double.Parse(input.ReadLine(), ci);
tst.TempLimLo = double.Parse(input.ReadLine(), ci);
tst.TempLimHi = double.Parse(input.ReadLine(), ci);
tst.Publish = sbyte.Parse(input.ReadLine());
tst.PressLimLo = double.Parse(input.ReadLine(), ci);
tst.PressLimHi = double.Parse(input.ReadLine(), ci);
tst.Publish = sbyte.Parse(input.ReadLine(), ci);
tst.Evaluate = bool.Parse(input.ReadLine());
tst.Method = input.ReadLine();
/// TODO (E1 .. E21)
tst.E1 = sbyte.Parse(input.ReadLine(), ci);
tst.E2 = sbyte.Parse(input.ReadLine(), ci);
tst.E3 = sbyte.Parse(input.ReadLine(), ci);
tst.E4 = sbyte.Parse(input.ReadLine(), ci);
tst.E5 = sbyte.Parse(input.ReadLine(), ci);
tst.E6 = sbyte.Parse(input.ReadLine(), ci);
tst.E7 = sbyte.Parse(input.ReadLine(), ci);
tst.E8 = sbyte.Parse(input.ReadLine(), ci);
tst.E9 = sbyte.Parse(input.ReadLine(), ci);
tst.E10 = sbyte.Parse(input.ReadLine(), ci);
tst.E11 = sbyte.Parse(input.ReadLine(), ci);
tst.E12 = sbyte.Parse(input.ReadLine(), ci);
tst.E13 = sbyte.Parse(input.ReadLine(), ci);
tst.E14 = sbyte.Parse(input.ReadLine(), ci);
tst.E15 = sbyte.Parse(input.ReadLine(), ci);
tst.E16 = sbyte.Parse(input.ReadLine(), ci);
tst.E21 = sbyte.Parse(input.ReadLine(), ci);
tst.Delta_Q_pct = double.Parse(input.ReadLine(), ci);
tst.Delta_T = double.Parse(input.ReadLine(), ci);
@@ -283,6 +310,7 @@ namespace Config.Entities
if (Name != firstLine) { diff.AppendFormat(fmt, "Name", Name, firstLine); };
ln = inp.ReadLine(); if (ln != Part.ToString()) { diff.AppendFormat(fmt, "Part", Part.ToString(), ln); };
ln = inp.ReadLine(); if (ln != ((ushort)FlowId).ToString()){diff.AppendFormat(fmt, "FlowId", ((ushort)FlowId).ToString(), ln); };
ln = inp.ReadLine(); if (ln != CoefQfrom.ToString(ci)) { diff.AppendFormat(fmt, "CoefQfrom", CoefQfrom.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != CoefQto.ToString(ci)) { diff.AppendFormat(fmt, "CoefQto", CoefQto.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != ErrLimLo.ToString(ci)) { diff.AppendFormat(fmt, "ErrLimLo", ErrLimLo.ToString(ci), ln); };
@@ -293,6 +321,7 @@ namespace Config.Entities
ln = inp.ReadLine(); if (ln != PressLimHi.ToString(ci)) { diff.AppendFormat(fmt, "Pressure_max", PressLimHi.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != Publish.ToString()) { diff.AppendFormat(fmt, "Publish", Publish.ToString(), ln); };
ln = inp.ReadLine(); if (ln != Evaluate.ToString()) { diff.AppendFormat(fmt, "Evaluate", Evaluate.ToString(), ln); };
ln = inp.ReadLine(); if (ln != Method) { diff.AppendFormat(fmt, "Method", Method, ln); };
ln = inp.ReadLine(); if (ln != E1.ToString()) { diff.AppendFormat(fmt, "E1", E1.ToString(), ln); };
ln = inp.ReadLine(); if (ln != E2.ToString()) { diff.AppendFormat(fmt, "E2", E2.ToString(), ln); };
+2 -2
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
/// Copyright (c) 2013-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -47,7 +47,7 @@ namespace Config.Entities
public virtual int AltProcPeriod { get; set; } /// Period of alternative procedures (0 = no alt. procedure)
public virtual float DN { get; set; } /// Not mapped to DB, valid in ProceduresCtrl for procedure filtering only
public virtual float Qn { get; set; } /// - ' ' -
public virtual double Qn { get; set; } /// - ' ' -
public virtual string MClass { get; set; } /// - ' ' -
public virtual string Producer { get; set; } /// - ' ' -
+4 -1
View File
@@ -78,6 +78,8 @@ namespace Config.Entities
output.WriteLine(CreationTime.ToString(CultureInfo.InvariantCulture));
output.WriteLine(LastChgUser);
output.WriteLine(LastChgTime.ToString(CultureInfo.InvariantCulture));
output.WriteLine(((sbyte)ProfileType).ToString());
output.WriteLine(((sbyte)ErrorLimitType).ToString());
foreach (var test in Tests) { test.Export(output); }
output.WriteLine();
@@ -96,7 +98,8 @@ namespace Config.Entities
result.CreationTime = DateTime.Parse(input.ReadLine(), CultureInfo.InvariantCulture);
result.LastChgUser = input.ReadLine();
result.LastChgTime = DateTime.Parse(input.ReadLine(), CultureInfo.InvariantCulture);
string line = input.ReadLine();
result.ProfileType = (ProfileType)sbyte.Parse(input.ReadLine());
result.ErrorLimitType = (ErrorLimitType)sbyte.Parse(input.ReadLine());
while (true)
{
+36 -17
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
/// Copyright (c) 2013-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -19,14 +19,15 @@ namespace Config.Entities
public virtual string Name { get; set; }
public virtual int Part { get; set; } /// Part=0 ... test of all WM-s
/// Part>0 ... part of a set of tests with the same Name: subset of WM-s is given by MetersPath
public virtual TestProfile Profile { get; set; } /// UserDefined, Protected, UserDefinedHeatMeter, ProtectedHeatMeter
public virtual TestProfile Profile { get; set; } /// UserDefined, UserDefinedCompound, UserDefinedHeatMeter, Protected, ProtectedCompound, ProtectedHeatMeter
public virtual sbyte Publish { get; set; } /// 0=no, 1=in all protocols, 2=on screen, 3=internal
public virtual bool DoEvaluate { get; set; }
public virtual double Qtg { get; set; } /// Target water flow [m3/h]
public virtual double Qfrom { get; set; } /// Water flow low limit in [m3/h]
public virtual double Qto { get; set; } /// Water flow high limit in [m3/h]
public virtual double Qtg { get; set; } /// When == -1 => Qtg is determined by the test method, otherwise Qtg is in [m3/h],
public virtual double Qfrom { get; set; } /// Water flow low limit in [m3/h] or in [%] of Qtg
public virtual double Qto { get; set; } /// Water flow high limit in [m3/h] or in [%] of Qtg
public virtual bool IsFromToInPct { get; set; } /// true: Qfrom and Qto are in % of Qtg, false: Qfrom and Qto are in [m3/h]
public virtual double Volume { get; set; } /// Test volume (target) in [l]
public virtual double TestTime { get; set; } /// Test time (estimate) in [s]
public virtual double TestTime { get; set; } /// Test time (estimate) in [s]
public virtual string Method { get; set; }
public virtual float ErrLimLo { get; set; } /// in [%] usually < 0, in case of heat meters: 1=class1, 2=class2, 3=class3
public virtual float ErrLimHi { get; set; } /// in [%] usually > 0, in case of heat meters: -Qn in m3/h
@@ -57,6 +58,11 @@ namespace Config.Entities
public virtual string TransBetween { get; set; }
public virtual string TransAfter { get; set; }
public virtual IList<ComponentTest> MoreParams { get; set; }
public virtual Procedure Procedure { get; set; }
/// Additional stuff not mapped into the database
public virtual bool IsOuterLoopStart { get; set; } /// Not mapped to database
public virtual bool IsOuterLoopEnd { get; set; } /// Not mapped to database
@@ -73,11 +79,15 @@ namespace Config.Entities
public virtual Unit PressUnit { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
public virtual Unit LengthUnit { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
public virtual IList<ComponentTest> MoreParams { get; set; }
public virtual Procedure Procedure { get; set; }
/// ------------- Additional stuff not mapped into the database -------------
/// Wrappers
public virtual double QfromM3ph()
{
return !IsFromToInPct ? Qfrom : Qtg >= 0 ? Qtg * Qfrom / 100 : 0;
}
public virtual double QtoM3ph()
{
return !IsFromToInPct ? Qto : Qtg >= 0 ? Qtg * Qto / 100 : 0;
}
public Test()
{
@@ -90,6 +100,7 @@ namespace Config.Entities
Profile = TestProfile.UserDefined;
Publish = (sbyte)Common.Publish.Always;
DoEvaluate = true;
IsFromToInPct = false;
ErrLimLo = -2.0f; /// [%] lower error limit
ErrLimHi = 2.0f; /// [%] upper error limit
Uncertainty = 0;
@@ -159,7 +170,8 @@ namespace Config.Entities
result.Qtg = Qtg;
result.Qfrom = Qfrom;
result.Qto = Qto;
result.Volume = Volume;
result.IsFromToInPct = IsFromToInPct;
result.Volume = Volume;
result.TestTime = TestTime;
result.Method = Method;
result.ErrLimLo = ErrLimLo;
@@ -192,6 +204,7 @@ namespace Config.Entities
result.TransAfter = TransAfter;
result.VolumeUnit = VolumeUnit;
result.FlowUnit = FlowUnit;
result.FlowUnit = FlowUnit;
result.MassUnit = MassUnit;
result.TempUnit = TempUnit;
result.PressUnit = PressUnit;
@@ -212,6 +225,7 @@ namespace Config.Entities
output.WriteLine(Qtg.ToString(ci));
output.WriteLine(Qfrom.ToString(ci));
output.WriteLine(Qto.ToString(ci));
output.WriteLine(IsFromToInPct.ToString());
output.WriteLine(Volume.ToString(ci));
output.WriteLine(TestTime.ToString(ci));
output.WriteLine(Method);
@@ -264,6 +278,7 @@ namespace Config.Entities
tst.Qtg = double.Parse(input.ReadLine(), ci);
tst.Qfrom = double.Parse(input.ReadLine(), ci);
tst.Qto = double.Parse(input.ReadLine(), ci);
tst.IsFromToInPct = bool.Parse(input.ReadLine());
tst.Volume = double.Parse(input.ReadLine(), ci);
tst.TestTime = double.Parse(input.ReadLine(), ci);
tst.Method = input.ReadLine();
@@ -293,8 +308,11 @@ namespace Config.Entities
tst.TransBetween = input.ReadLine();
string line = input.ReadLine();
tst.Profile = line.Equals(TestProfile.ProtectedHeatMeter.ToString()) ? TestProfile.ProtectedHeatMeter
: line.Equals(TestProfile.UserDefinedHeatMeter.ToString()) ? TestProfile.UserDefinedHeatMeter
: line.Equals(TestProfile.Protected.ToString()) ? TestProfile.Protected : TestProfile.UserDefined; /// UserDefined is the default
: line.Equals(TestProfile.ProtectedCompound.ToString()) ? TestProfile.ProtectedCompound
: line.Equals(TestProfile.Protected.ToString()) ? TestProfile.Protected
: line.Equals(TestProfile.UserDefinedHeatMeter.ToString()) ? TestProfile.UserDefinedHeatMeter
: line.Equals(TestProfile.UserDefinedCompound.ToString()) ? TestProfile.UserDefinedCompound
: TestProfile.UserDefined; /// UserDefined is the default
tst.TransAfter = input.ReadLine();
while (true)
@@ -327,6 +345,7 @@ namespace Config.Entities
ln = inp.ReadLine(); if (ln != Qtg.ToString(ci)) { diff.AppendFormat(fmt, "Qtg", Qtg.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != Qfrom.ToString(ci)) { diff.AppendFormat(fmt, "Qfrom", Qfrom.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != Qto.ToString(ci)) { diff.AppendFormat(fmt, "Qto", Qto.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != IsFromToInPct.ToString()) { diff.AppendFormat(fmt, "IsFromToInPct", IsFromToInPct.ToString(), ln); };
ln = inp.ReadLine(); if (ln != Volume.ToString(ci)) { diff.AppendFormat(fmt, "Volume", Volume.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != TestTime.ToString(ci)) { diff.AppendFormat(fmt, "TstTime", TestTime.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != Method) { diff.AppendFormat(fmt, "Method", Method, ln); };
@@ -334,11 +353,11 @@ namespace Config.Entities
ln = inp.ReadLine(); if (ln != ErrLimHi.ToString(ci)) { diff.AppendFormat(fmt, "ErrLimHi", ErrLimHi.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != Uncertainty.ToString(ci)) { diff.AppendFormat(fmt, "Uncertainty", Uncertainty.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != Repeats.ToString(ci)) { diff.AppendFormat(fmt, "Repeats", Repeats.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != DoDraining.ToString(ci)) { diff.AppendFormat(fmt, "DoDraining", DoDraining.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != DoDrainingAfter.ToString(ci)) { diff.AppendFormat(fmt, "DoDrainingAfter", DoDrainingAfter.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != DoDraining.ToString()) { diff.AppendFormat(fmt, "DoDraining", DoDraining.ToString(), ln); };
ln = inp.ReadLine(); if (ln != DoDrainingAfter.ToString()) { diff.AppendFormat(fmt, "DoDrainingAfter", DoDrainingAfter.ToString(), ln); };
ln = inp.ReadLine(); if (ln != TempLimLo.ToString(ci)) { diff.AppendFormat(fmt, "TempLimLo", TempLimLo.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != TempLimHi.ToString(ci)) { diff.AppendFormat(fmt, "TempLimHi", TempLimHi.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != TempControl) { diff.AppendFormat(fmt, "TempController", TempControl, ln); };
ln = inp.ReadLine(); if (ln != TempControl) { diff.AppendFormat(fmt, "TempController", TempControl, ln); };
ln = inp.ReadLine(); if (ln != PumpPower.ToString(ci)) { diff.AppendFormat(fmt, "PumpPower", PumpPower.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != MassRepeats.ToString(ci)) { diff.AppendFormat(fmt, "MassRepeats", MassRepeats.ToString(ci), ln); };
ln = inp.ReadLine(); if (ln != MassSpread.ToString(ci)) { diff.AppendFormat(fmt, "MassSpread", MassSpread.ToString(ci), ln); };
+1 -1
View File
@@ -128,7 +128,7 @@ namespace Config
case GID.Administrators:
#if TURA_IPERL || TURA_IPERL_NEW || TURA_SPECIAL
case GID.TraceabilityManagement:
#elif KEMPNO_50 || KRAKOW_50 || TORUN_50 || WARSAW_END
#elif LANG_PL
case GID.MetrologicalAuthority:
case GID.WaterMeterAuthority:
#endif
+2 -1
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2013-2015 Sensus Metering Systems
/// Copyright (c) 2013-2022 Sensus Slovensko a.s.
///
using FluentNHibernate.Mapping;
using Config.Entities;
@@ -23,6 +23,7 @@ namespace Config.Mappings
Map(x => x.Diverter);
Map(x => x.TempMtrDiv);
Map(x => x.Scale);
Map(x => x.RegVPositions);
Map(x => x.ValvesOpen)
.CustomType("StringClob")
.CustomSqlType("varchar(8000)");
+3 -1
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2019 Sensus Slovensko a.s.
/// Copyright (c) 2019-2023 Sensus Slovensko a.s.
///
using FluentNHibernate.Mapping;
using Config.Entities;
@@ -14,6 +14,7 @@ namespace Config.Mappings
Map(x => x.ItemNr);
Map(x => x.Name);
Map(x => x.Part);
Map(x => x.FlowId);
Map(x => x.CoefQfrom);
Map(x => x.CoefQto);
Map(x => x.ErrLimLo);
@@ -24,6 +25,7 @@ namespace Config.Mappings
Map(x => x.PressLimHi);
Map(x => x.Publish);
Map(x => x.Evaluate);
Map(x => x.Method);
Map(x => x.E1);
Map(x => x.E2);
Map(x => x.E3);
+3 -2
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2013-2017 Sensus Metering Systems
/// Copyright (c) 2013-2023 Sensus Slovensko a.s.
///
using FluentNHibernate.Mapping;
using Config.Entities;
@@ -20,7 +20,8 @@ namespace Config.Mappings
Map(x => x.Qtg);
Map(x => x.Qfrom);
Map(x => x.Qto);
Map(x => x.Volume);
Map(x => x.IsFromToInPct);
Map(x => x.Volume);
Map(x => x.TestTime);
Map(x => x.Repeats);
Map(x => x.DoDraining);
+3 -1
View File
@@ -35,7 +35,7 @@
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<OldToolsVersion>2.0</OldToolsVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
@@ -76,6 +76,7 @@
<WarningLevel>4</WarningLevel>
<DebugType>full</DebugType>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>bin\Release\</OutputPath>
@@ -99,6 +100,7 @@
<WarningLevel>4</WarningLevel>
<DebugType>none</DebugType>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System">
+2
View File
@@ -26,6 +26,7 @@ namespace OrderManagement
public string Language; /// User interface language used as CultureInfo(..) constructor argument
public bool IsUserLoginRequired; /// true = require user login on program start-up
public bool IsShowPredefinedOrders; /// true = show predefined orders with nr. <= 1000
public bool IsShowFinishedOrders; /// true = show finished orders
public string TracingDBConnString; /// Connection string to MySQL database with production tracing records
public string UsersDBConnString; /// Connection string to MySQL database with authorized users
public string[] SapNumberHistory; /// SAP number history
@@ -45,6 +46,7 @@ namespace OrderManagement
Language = "EN";
IsUserLoginRequired = false;
IsShowPredefinedOrders = false;
IsShowFinishedOrders = false;
#if DEBUG
TracingDBConnString = "SERVER=localhost; DATABASE=nanjingshared; UID=root; PASSWORD=kraken; CHARSET=utf8;";
#else
+27 -12
View File
@@ -32,12 +32,13 @@
this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.listViewEx1 = new Common.Forms.ListViewEx();
this.copyButton = new System.Windows.Forms.Button();
this.printButton = new System.Windows.Forms.Button();
this.addButton = new System.Windows.Forms.Button();
this.editButton = new System.Windows.Forms.Button();
this.closeButton = new System.Windows.Forms.Button();
this.deleteButton = new System.Windows.Forms.Button();
this.copyButton = new System.Windows.Forms.Button();
this.finishButton = new System.Windows.Forms.Button();
this.menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
@@ -75,6 +76,7 @@
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.finishButton);
this.splitContainer1.Panel2.Controls.Add(this.copyButton);
this.splitContainer1.Panel2.Controls.Add(this.printButton);
this.splitContainer1.Panel2.Controls.Add(this.addButton);
@@ -92,6 +94,7 @@
this.listViewEx1.DoubleClickActivation = false;
this.listViewEx1.FullRowSelect = true;
this.listViewEx1.GridLines = true;
this.listViewEx1.HideSelection = false;
this.listViewEx1.Location = new System.Drawing.Point(0, 0);
this.listViewEx1.Name = "listViewEx1";
this.listViewEx1.Size = new System.Drawing.Size(1214, 481);
@@ -101,10 +104,21 @@
this.listViewEx1.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listViewEx1_ColumnClick);
this.listViewEx1.DoubleClick += new System.EventHandler(this.listViewEx1_DoubleClick);
//
// copyButton
//
this.copyButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.copyButton.Location = new System.Drawing.Point(23, 223);
this.copyButton.Name = "copyButton";
this.copyButton.Size = new System.Drawing.Size(85, 40);
this.copyButton.TabIndex = 7;
this.copyButton.Text = "Copy";
this.copyButton.UseVisualStyleBackColor = true;
this.copyButton.Click += new System.EventHandler(this.copyButton_Click);
//
// printButton
//
this.printButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.printButton.Location = new System.Drawing.Point(23, 290);
this.printButton.Location = new System.Drawing.Point(23, 335);
this.printButton.Name = "printButton";
this.printButton.Size = new System.Drawing.Size(85, 40);
this.printButton.TabIndex = 6;
@@ -148,7 +162,7 @@
// deleteButton
//
this.deleteButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.deleteButton.Location = new System.Drawing.Point(23, 223);
this.deleteButton.Location = new System.Drawing.Point(23, 268);
this.deleteButton.Name = "deleteButton";
this.deleteButton.Size = new System.Drawing.Size(85, 40);
this.deleteButton.TabIndex = 5;
@@ -156,16 +170,16 @@
this.deleteButton.UseVisualStyleBackColor = true;
this.deleteButton.Click += new System.EventHandler(this.deleteButton_Click);
//
// copyButton
// finishButton
//
this.copyButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.copyButton.Location = new System.Drawing.Point(23, 178);
this.copyButton.Name = "copyButton";
this.copyButton.Size = new System.Drawing.Size(85, 40);
this.copyButton.TabIndex = 7;
this.copyButton.Text = "Copy";
this.copyButton.UseVisualStyleBackColor = true;
this.copyButton.Click += new System.EventHandler(this.copyButton_Click);
this.finishButton.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.finishButton.Location = new System.Drawing.Point(23, 178);
this.finishButton.Name = "finishButton";
this.finishButton.Size = new System.Drawing.Size(85, 40);
this.finishButton.TabIndex = 8;
this.finishButton.Text = "Finish";
this.finishButton.UseVisualStyleBackColor = true;
this.finishButton.Click += new System.EventHandler(this.finishButton_Click);
//
// OrderManagementDlg
//
@@ -203,6 +217,7 @@
private Common.Forms.ListViewEx listViewEx1;
private System.Windows.Forms.Button printButton;
private System.Windows.Forms.Button copyButton;
private System.Windows.Forms.Button finishButton;
}
}
+52 -7
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2021 Sensus Slovensko a.s.
/// Copyright (c) 2021-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -10,6 +10,7 @@ using Common;
using SharedDatabase.Entities;
using OrderManagement.Resources;
using Common.Forms;
using SharedDatabase;
namespace OrderManagement
{
@@ -92,6 +93,8 @@ namespace OrderManagement
{
Order,
State,
Pieces,
CurrentPcs,
Workflow,
Procedure,
Variant,
@@ -101,7 +104,6 @@ namespace OrderManagement
ModuleParam,
LaserMarking,
Packing,
Pieces,
SNPrefix,
SNFirst,
SNDigitsCount,
@@ -115,8 +117,10 @@ namespace OrderManagement
void InitializeColumns(ListView lv)
{
lv.Columns.Add(new ColumnHeader { Text = Strings.Order, Width = 65 });
lv.Columns.Add(new ColumnHeader { Text = Strings.State, Width = 65 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Order, Width = 70 });
lv.Columns.Add(new ColumnHeader { Text = Strings.State, Width = 60 });
lv.Columns.Add(new ColumnHeader { Text = "Target", Width = 50 });
lv.Columns.Add(new ColumnHeader { Text = "Produced", Width = 60 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Workflow, Width = 100 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Test_procedure, Width = 200 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Variant_code, Width = 150 });
@@ -126,7 +130,6 @@ namespace OrderManagement
lv.Columns.Add(new ColumnHeader { Text = Strings.Module_parameter, Width = 100 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Laser_marking, Width = 100 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Packing, Width = 100 });
lv.Columns.Add(new ColumnHeader { Text = Strings.Pieces_count, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.SN + " " + Strings.prefix, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.SN + " " + Strings.first, Width = 80 });
lv.Columns.Add(new ColumnHeader { Text = Strings.SN + " " + Strings.digits_count, Width = 80 });
@@ -141,6 +144,8 @@ namespace OrderManagement
{
ListViewItem lvi = new ListViewItem(o.POName);
lvi.SubItems.Add(((OrderState)o.POState).ToString());
lvi.SubItems.Add(o.PiecesCount.ToString());
lvi.SubItems.Add(o.CurrentPcsCount.ToString());
lvi.SubItems.Add(o.Workflow);
lvi.SubItems.Add(o.TestProcedure);
lvi.SubItems.Add(o.VariantCode);
@@ -150,7 +155,6 @@ namespace OrderManagement
lvi.SubItems.Add(o.ModuleParam);
lvi.SubItems.Add(o.LaserMarking);
lvi.SubItems.Add(o.Packing);
lvi.SubItems.Add(o.PiecesCount.ToString());
lvi.SubItems.Add(o.SNPrefix);
lvi.SubItems.Add(o.SNFirst.ToString(string.Format("D{0}", o.SNDigitsCount)));
lvi.SubItems.Add(o.SNDigitsCount.ToString());
@@ -168,6 +172,8 @@ namespace OrderManagement
int i = 0;
lvi.SubItems[i++].Text = o.POName;
lvi.SubItems[i++].Text = ((OrderState)o.POState).ToString();
lvi.SubItems[i++].Text = o.PiecesCount.ToString();
lvi.SubItems[i++].Text = o.CurrentPcsCount.ToString();
lvi.SubItems[i++].Text = o.Workflow;
lvi.SubItems[i++].Text = o.TestProcedure;
lvi.SubItems[i++].Text = o.VariantCode;
@@ -177,7 +183,6 @@ namespace OrderManagement
lvi.SubItems[i++].Text = o.ModuleParam;
lvi.SubItems[i++].Text = o.LaserMarking;
lvi.SubItems[i++].Text = o.Packing;
lvi.SubItems[i++].Text = o.PiecesCount.ToString();
lvi.SubItems[i++].Text = o.SNPrefix;
lvi.SubItems[i++].Text = o.SNFirst.ToString(string.Format("D{0}", o.SNDigitsCount));
lvi.SubItems[i++].Text = o.SNDigitsCount.ToString();
@@ -288,6 +293,46 @@ namespace OrderManagement
}
}
private void finishButton_Click(object sender, EventArgs e)
{
if (listViewEx1.SelectedItems.Count != 1 || !(listViewEx1.SelectedItems[0].Tag is OrderInfo)) return;
OrderInfo order = listViewEx1.SelectedItems[0].Tag as OrderInfo;
if (order.POState == (sbyte)OrderState.Active && order.CurrentPcsCount >= order.PiecesCount)
{
ISession session = null;
try
{
session = sessionFactory.OpenSession();
var selectedOrders = session.QueryOver<OrderInfo>()
.Where(x => x.Id == order.Id)
.List();
if (selectedOrders.Count == 1)
{
selectedOrders[0].POState = (sbyte)OrderState.Finished;
session.SaveOrUpdate(selectedOrders[0]);
session.Flush();
order.POState = (sbyte)OrderState.Finished;
UpdateRow(listViewEx1.SelectedItems[0], order);
}
}
catch (Exception ex)
{
MessageBox.Show("Changing production order state failed: {0}", ex.Message);
}
finally
{
if (session != null && session.IsOpen) session.Close();
}
}
else
{
MessageBox.Show(Strings.You_can_only_finish_completed_production_orders);
}
}
private void copyButton_Click(object sender, EventArgs e)
{
if (listViewEx1.SelectedItems.Count != 1 || !(listViewEx1.SelectedItems[0].Tag is OrderInfo)) return;
+12 -2
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2021-2022 Sensus Slovensko a.s.
/// Copyright (c) 2021-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -14,6 +14,7 @@ using Common;
using SharedDatabase;
using SharedDatabase.Entities;
using OrderManagement.Resources;
using System.Linq;
namespace OrderManagement
{
@@ -186,7 +187,16 @@ namespace OrderManagement
ISession session = sessionFactory.OpenSession();
listOfOrders = session.QueryOver<OrderInfo>().List();
if (LocalSettings.IsShowFinishedOrders)
{
listOfOrders = session.QueryOver<OrderInfo>().List();
}
else
{
listOfOrders = session.QueryOver<OrderInfo>()
.Where(x => x.POState != (sbyte)OrderState.Finished)
.List();
}
listOfWorkflows = session.QueryOver<Process>()
.Where(x => x.ReleaseStatus != ReleaseStatus.Deactivated)
+3 -3
View File
@@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("OrderManagement")]
[assembly: AssemblyCopyright("Copyright © 2021-2022")]
[assembly: AssemblyCopyright("Copyright © 2021-2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.0.13.0")]
[assembly: AssemblyFileVersion("3.0.13.0")]
[assembly: AssemblyVersion("3.0.14.0")]
[assembly: AssemblyFileVersion("3.0.14.0")]
+12 -3
View File
@@ -19,7 +19,7 @@ namespace OrderManagement.Resources {
// 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.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Strings {
@@ -637,7 +637,7 @@ namespace OrderManagement.Resources {
}
/// <summary>
/// Looks up a localized string similar to You can only delete &apos;New&apos; porduction orders.
/// Looks up a localized string similar to You can only delete &apos;New&apos; production orders.
/// </summary>
internal static string You_can_only_delete_New_porduction_orders {
get {
@@ -646,12 +646,21 @@ namespace OrderManagement.Resources {
}
/// <summary>
/// Looks up a localized string similar to You can only edit &apos;New&apos; porduction orders.
/// Looks up a localized string similar to You can only edit &apos;New&apos; production orders.
/// </summary>
internal static string You_can_only_edit_New_porduction_orders {
get {
return ResourceManager.GetString("You_can_only_edit_New_porduction_orders", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to You can only finish completed production orders.
/// </summary>
internal static string You_can_only_finish_completed_production_orders {
get {
return ResourceManager.GetString("You_can_only_finish_completed_production_orders", resourceCulture);
}
}
}
}
+5 -2
View File
@@ -223,10 +223,10 @@
<value>S/N</value>
</data>
<data name="You_can_only_edit_New_porduction_orders" xml:space="preserve">
<value>You can only edit 'New' porduction orders</value>
<value>You can only edit 'New' production orders</value>
</data>
<data name="You_can_only_delete_New_porduction_orders" xml:space="preserve">
<value>You can only delete 'New' porduction orders</value>
<value>You can only delete 'New' production orders</value>
</data>
<data name="Laser_marking" xml:space="preserve">
<value>Laser marking</value>
@@ -315,4 +315,7 @@
<data name="Print" xml:space="preserve">
<value>Print</value>
</data>
<data name="You_can_only_finish_completed_production_orders" xml:space="preserve">
<value>You can only finish completed production orders</value>
</data>
</root>
+23 -10
View File
@@ -29,6 +29,7 @@
private void InitializeComponent()
{
this.commonGroupBox = new System.Windows.Forms.GroupBox();
this.showPredefinedOrdersCheckBox = new System.Windows.Forms.CheckBox();
this.loginRequiredCheckBox = new System.Windows.Forms.CheckBox();
this.languageComboBox = new System.Windows.Forms.ComboBox();
this.languageLabel = new System.Windows.Forms.Label();
@@ -38,7 +39,7 @@
this.usersDBConnStringTextBox = new System.Windows.Forms.TextBox();
this.saveButton = new System.Windows.Forms.Button();
this.cancelButton = new System.Windows.Forms.Button();
this.showPredefinedOrdersCheckBox = new System.Windows.Forms.CheckBox();
this.showFinishedOrdersCheckBox = new System.Windows.Forms.CheckBox();
this.commonGroupBox.SuspendLayout();
this.connStrForTracingGroupBox.SuspendLayout();
this.connStrForUsersGroupBox.SuspendLayout();
@@ -46,6 +47,7 @@
//
// commonGroupBox
//
this.commonGroupBox.Controls.Add(this.showFinishedOrdersCheckBox);
this.commonGroupBox.Controls.Add(this.showPredefinedOrdersCheckBox);
this.commonGroupBox.Controls.Add(this.loginRequiredCheckBox);
this.commonGroupBox.Controls.Add(this.languageComboBox);
@@ -56,10 +58,20 @@
this.commonGroupBox.TabIndex = 16;
this.commonGroupBox.TabStop = false;
//
// showPredefinedOrdersCheckBox
//
this.showPredefinedOrdersCheckBox.AutoSize = true;
this.showPredefinedOrdersCheckBox.Location = new System.Drawing.Point(22, 67);
this.showPredefinedOrdersCheckBox.Name = "showPredefinedOrdersCheckBox";
this.showPredefinedOrdersCheckBox.Size = new System.Drawing.Size(138, 17);
this.showPredefinedOrdersCheckBox.TabIndex = 3;
this.showPredefinedOrdersCheckBox.Text = "Show predefined orders";
this.showPredefinedOrdersCheckBox.UseVisualStyleBackColor = true;
//
// loginRequiredCheckBox
//
this.loginRequiredCheckBox.AutoSize = true;
this.loginRequiredCheckBox.Location = new System.Drawing.Point(22, 55);
this.loginRequiredCheckBox.Location = new System.Drawing.Point(22, 45);
this.loginRequiredCheckBox.Name = "loginRequiredCheckBox";
this.loginRequiredCheckBox.Size = new System.Drawing.Size(114, 17);
this.loginRequiredCheckBox.TabIndex = 2;
@@ -139,15 +151,15 @@
this.cancelButton.UseVisualStyleBackColor = true;
this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
//
// showPredefinedOrdersCheckBox
// showFinishedOrdersCheckBox
//
this.showPredefinedOrdersCheckBox.AutoSize = true;
this.showPredefinedOrdersCheckBox.Location = new System.Drawing.Point(22, 82);
this.showPredefinedOrdersCheckBox.Name = "showPredefinedOrdersCheckBox";
this.showPredefinedOrdersCheckBox.Size = new System.Drawing.Size(138, 17);
this.showPredefinedOrdersCheckBox.TabIndex = 3;
this.showPredefinedOrdersCheckBox.Text = "Show predefined orders";
this.showPredefinedOrdersCheckBox.UseVisualStyleBackColor = true;
this.showFinishedOrdersCheckBox.AutoSize = true;
this.showFinishedOrdersCheckBox.Location = new System.Drawing.Point(22, 89);
this.showFinishedOrdersCheckBox.Name = "showFinishedOrdersCheckBox";
this.showFinishedOrdersCheckBox.Size = new System.Drawing.Size(124, 17);
this.showFinishedOrdersCheckBox.TabIndex = 4;
this.showFinishedOrdersCheckBox.Text = "Show finished orders";
this.showFinishedOrdersCheckBox.UseVisualStyleBackColor = true;
//
// SettingsDlg
//
@@ -188,5 +200,6 @@
private System.Windows.Forms.Button saveButton;
private System.Windows.Forms.Button cancelButton;
private System.Windows.Forms.CheckBox showPredefinedOrdersCheckBox;
private System.Windows.Forms.CheckBox showFinishedOrdersCheckBox;
}
}
+8 -1
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2021 Sensus Slovensko a.s.
/// Copyright (c) 2021-2023 Sensus Slovensko a.s.
///
using System;
using System.Windows.Forms;
@@ -48,6 +48,7 @@ namespace OrderManagement
loginRequiredCheckBox.Checked = ls.IsUserLoginRequired;
showPredefinedOrdersCheckBox.Checked = ls.IsShowPredefinedOrders;
showFinishedOrdersCheckBox.Checked = ls.IsShowFinishedOrders;
tracingDBConnStringTextBox.Text = ls.TracingDBConnString;
usersDBConnStringTextBox.Text = ls.UsersDBConnString;
@@ -95,6 +96,12 @@ namespace OrderManagement
isDifferent = true;
}
if (ls.IsShowFinishedOrders != showFinishedOrdersCheckBox.Checked)
{
ls.IsShowFinishedOrders = showFinishedOrdersCheckBox.Checked;
isDifferent = true;
}
if (ls.TracingDBConnString != tracingDBConnStringTextBox.Text)
{
ls.TracingDBConnString = tracingDBConnStringTextBox.Text;
+8 -3
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
/// Copyright (c) 2015-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -38,7 +38,8 @@ namespace Results.Entities
public virtual int Counter9 { get; set; }
public virtual int Counter10 { get; set; }
public virtual DateTime StartTime { get; set; }
public virtual DateTime EndTime { get; set; }
public virtual DateTime EndTime { get; set; }
public virtual DateTime SaveTime { get; set; }
public virtual bool Dirty { get; set; }
public virtual bool RsltsSent { get; set; }
public virtual bool RsltsPrinted { get; set; }
@@ -156,6 +157,7 @@ namespace Results.Entities
Counter10 = oriBatch.Counter10;
StartTime = oriBatch.StartTime;
EndTime = oriBatch.EndTime;
SaveTime = oriBatch.SaveTime;
Dirty = oriBatch.Dirty;
RsltsSent = oriBatch.RsltsSent;
RsltsPrinted = oriBatch.RsltsPrinted;
@@ -322,7 +324,8 @@ namespace Results.Entities
public override string ToString()
{
return string.Format("Batch #{0}, Start:{1}, End:{2}, Procedure:{3}", BatchNr, StartTime, EndTime, ProcedureName);
return string.Format("Batch {0} ({1}s) Start {2}, End {3}, Proc={4}",
BatchNr, (EndTime - StartTime).TotalSeconds, StartTime, EndTime, ProcedureName);
}
public virtual string ToString(int i)
@@ -363,6 +366,7 @@ namespace Results.Entities
writer.Write(Counter10);
writer.Write(StartTime.ToString());
writer.Write(EndTime.ToString());
writer.Write(SaveTime.ToString());
writer.Write(Dirty);
writer.Write(RsltsSent);
writer.Write(RsltsPrinted);
@@ -429,6 +433,7 @@ namespace Results.Entities
Counter10 = reader.ReadInt32();
StartTime = DateTime.Parse(reader.ReadString());
EndTime = DateTime.Parse(reader.ReadString());
SaveTime = DateTime.Parse(reader.ReadString());
Dirty = reader.ReadBoolean();
RsltsSent = reader.ReadBoolean();
RsltsPrinted = reader.ReadBoolean();
+8 -1
View File
@@ -82,7 +82,7 @@ namespace Results.Entities
public virtual double QRise() { return WaterMeter.QRise; } /// [m3/h]
public virtual double QFall() { return WaterMeter.QFall; } /// [m3/h]
public virtual bool Evaluate() { return TestData().Evaluate; }
public virtual bool Evaluate() { return TestData().Evaluate; }
public virtual Publish Publish() { return (Publish)TestData().Publish; }
public virtual WaterMeterData WaterMeterData() { return WaterMeter.WaterMeterData; }
@@ -100,6 +100,13 @@ namespace Results.Entities
public virtual bool IsDataStream() { return (RegReaderType == (int)RegisterReaderType.DataStream); }
public virtual bool IsManual() { return (RegReaderType == (int)RegisterReaderType.Manual); }
public virtual string PassedOrErrorFlagsStr()
{
string eFlags = Utils.ErrorFlagsStr(ErrorIndicators);
var str = string.IsNullOrEmpty(eFlags) ? PassedColorStr(null) : eFlags;
return str;
}
public virtual string PassedColorStr(string yesNoFormatOrEmpty)
{
if (string.IsNullOrEmpty(yesNoFormatOrEmpty))
+2 -2
View File
@@ -48,8 +48,8 @@ namespace Results.Entities
Name = test.Name;
Repeats = test.Repeats;
Qtg = test.Qtg;
Qfrom = test.Qfrom;
Qto = test.Qto;
Qfrom = test.QfromM3ph();
Qto = test.QtoM3ph();
TargetVolume = test.Volume;
TargetTime = test.TestTime;
Method = test.Method;
+13 -12
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2015-2022 Sensus Slovensko a.s.
/// Copyright (c) 2015-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -50,12 +50,12 @@ namespace Results.Entities
public virtual double VolumeMaster { get; set; } /// [l] Volume from the master flow meter
public virtual double ErrorMaster { get; set; } /// [%] Error of the master flow meter
public virtual float DiverterStart { get; set; } /// [s] Diverter switch time when test starts
public virtual float DiverterStart { get; set; } /// [s] Diverter switch time or a start/stop valve open time when the test starts
public virtual float DivStart10 { get; set; } /// [s] Diverter switch time when test starts at level 10 (e.g. 10%) (not mapped to DB)
public virtual float DivStart50 { get; set; } /// [s] Diverter switch time when test starts at level 50 (e.g. 50%) (not mapped to DB)
public virtual float DivStart90 { get; set; } /// [s] Diverter switch time when test starts at level 90 (e.g. 90%) (not mapped to DB)
public virtual float DiverterEnd { get; set; } /// [s] Diverter switch time when test ends
public virtual float DiverterEnd { get; set; } /// [s] Diverter switch time or a start/stop valve close time when the test ends
public virtual float DivEnd90 { get; set; } /// [s] Diverter switch time when test starts at level 90 (e.g. 90%) (not mapped to DB)
public virtual float DivEnd50 { get; set; } /// [s] Diverter switch time when test starts at level 50 (e.g. 50%) (not mapped to DB)
public virtual float DivEnd10 { get; set; } /// [s] Diverter switch time when test starts at level 10 (e.g. 10%) (not mapped to DB)
@@ -147,7 +147,8 @@ namespace Results.Entities
public virtual int Counter5 { get; set; }
/// Wrappers
public virtual string Name() { return Utils.GetTestName(TestData.Name, TestData.Repeats, RepetitionNr); }
public virtual string Name() { return Common.Utils.GetTestName(TestData.Name, TestData.Repeats, RepetitionNr); }
public virtual string Key() { return string.Format("{0}~{1}~{2}~{3}", TestData.Name, Part, TestData.Repeats, RepetitionNr); } /// Unique key
public virtual int Repeats() { return TestData.Repeats; }
public virtual double Qfrom() { return TestData.Qfrom; }
public virtual double Qto() { return TestData.Qto; }
@@ -158,11 +159,11 @@ namespace Results.Entities
public virtual string Scale() { return (Components != null && Components.Scale != null) ? Components.Scale : string.Empty; }
public virtual string Diverter() { return (Components != null && Components.Diverter != null) ? Components.Diverter : string.Empty; }
public virtual string RegValve() { return (Components != null && Components.RegValve != null) ? Components.RegValve : string.Empty; }
public virtual bool IsRelErrTest() { return (MethodClass != null) ? (MethodClass.Contains("FixedStart") || MethodClass.Contains("FlyingStart") || MethodClass.Contains("CombinedWithDetection") || MethodClass.Contains("DiverterTest") || MethodClass.Contains("ManualEntry")) : true; }
public virtual bool IsRelErrTest() { return (MethodClass != null) ? (MethodClass.Contains("StandingStart") || MethodClass.Contains("FlyingStart") || MethodClass.Contains("CombinedWithDetection") || MethodClass.Contains("DiverterTest") || MethodClass.Contains("ManualEntry")) : true; }
public virtual bool IsPMaxTest() { return (MethodClass != null) ? (MethodClass.Contains("PMaxTest") || MethodClass.Contains("LeakTest") || TestData.Method.ToLower().Contains("pmax")) : true; }
public virtual bool IsStartStop() { return (MethodClass != null) ? MethodClass.Contains("FixedStart") : true; }
public virtual bool IsStartStop() { return (MethodClass != null) ? MethodClass.Contains("StandingStart") : true; }
public virtual bool IsDiverter() { return (MethodClass != null) ? ((MethodClass.Contains("FlyingStart") && MethodClass.Contains("MassColl")) || MethodClass.Contains("DiverterTest")) : true; }
public virtual bool IsVolumeMethod() { return (MethodClass != null) ? (MethodClass.Contains("TestMethods.FixedStart.") || MethodClass.Contains("TestMethods.FlyingStart.")) : false; }
public virtual bool IsVolumeMethod() { return (MethodClass != null) ? (MethodClass.Contains("TestMethods.StandingStart.") || MethodClass.Contains("TestMethods.FlyingStart.")) : false; }
public virtual string MethodElde()
{
@@ -171,9 +172,9 @@ namespace Results.Entities
else if (MethodClass.Contains("TestMethods.FlyingStartMassCollectionProlonged.")) return "MS";
else if (MethodClass.Contains("TestMethods.FlyingStartMassCollectionComparative.")) return "MS";
else if (MethodClass.Contains("TestMethods.FlyingStart.")) return "VS";
else if (MethodClass.Contains("TestMethods.FixedStartMassCollection.")) return "MP";
else if (MethodClass.Contains("TestMethods.FixedStartTankCollection.")) return "VP";
else if (MethodClass.Contains("TestMethods.FixedStart.")) return "VP";
else if (MethodClass.Contains("TestMethods.StandingStartMassCollection.")) return "MP";
else if (MethodClass.Contains("TestMethods.StandingStartTankCollection.")) return "VP";
else if (MethodClass.Contains("TestMethods.StandingStart.")) return "VP";
else return string.Empty;
}
@@ -229,7 +230,7 @@ namespace Results.Entities
public virtual float TempLimLo() { return TestData.TempLimLo; }
public virtual float TempLimHi() { return TestData.TempLimHi; }
public virtual bool Evaluate() { return TestData.Evaluate; }
public virtual Common.Publish Publish() { return (Publish)TestData.Publish; }
public virtual Publish Publish() { return (Publish)TestData.Publish; }
public TestRslt()
@@ -278,7 +279,7 @@ namespace Results.Entities
DensityDiv = src.DensityDiv;
MassOfEvapWater = src.MassOfEvapWater;
SpareDbl = src.SpareDbl;
Flow = src.Flow;
Flow = src.Flow;
VolumeCTV = src.VolumeCTV;
VolumeMaster = src.VolumeMaster;
ErrorMaster = src.ErrorMaster;
+11 -3
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2015-2022 Sensus Slovensko a.s.
/// Copyright (c) 2015-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -117,15 +117,23 @@ namespace Results.Entities
///
/// Wrappers
///
public virtual string ProductName() { return WaterMeterData.ProductName; }
public virtual string GetEndStateAux() { return Compound() ? EndStateAux : string.Empty; }
public virtual void SetEndStateAux(string s) { if (Compound()) EndStateAux = s; }
public virtual string GetStartState() { return Compound() ? string.Empty : EndStateAux; }
public virtual void SetStartState(string s) { if (!Compound()) EndStateAux = s; }
public virtual string ProductName() { return WaterMeterData.ProductName; }
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 FlowNames Qnames() { return (FlowNames)WaterMeterData.Qnames; }
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; }
public virtual double Q1_Qmin() { return WaterMeterData.Q1_Qmin; }
public virtual double ErrLimHiQ() { return WaterMeterData.ErrLimHiQ; }
public virtual double ErrLimLoQ() { return WaterMeterData.ErrLimLoQ; }
public virtual bool Compound() { return WaterMeterData.Compound; }
public virtual bool HeatMeter() { return WaterMeterData.HeatMeter; }
+25 -7
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
/// Copyright (c) 2015-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -17,11 +17,14 @@ namespace Results.Entities
public virtual double DN { get; set; } /// [mm]
public virtual double L { get; set; } /// [mm]
public virtual Mounting Mounting { get; set; } /// H / V / S / F
public virtual bool NewQnames { get; set; } /// Yes = Q3... No = Qn...
public virtual sbyte Qnames { get; set; } /// see Common.Enums.FlowNames
public virtual double Q4_Qmax { get; set; } /// [m3/h]
public virtual double Q3_Qn { get; set; } /// [m3/h]
public virtual double Q2_Qt { get; set; } /// [m3/h]
public virtual double Q1_Qmin { get; set; } /// [m3/h]
public virtual double ErrLimHiQ { get; set; } /// [%]
public virtual double ErrLimLoQ { get; set; } /// [%]
public virtual string MetrologicalClass { get; set; }
public virtual TemperatureClass TemperatureClass { get; set; }
public virtual PressureLossClass PressureLossClass { get; set; }
@@ -36,6 +39,7 @@ namespace Results.Entities
public virtual double Q3_Qn_Aux { get; set; } /// [m3/h]
public virtual string MetrologicalClassAux { get; set; }
public virtual string ApprovalInfoAux { get; set; }
public virtual double PulsesPerLtrAux { get; set; }
public virtual Medium Medium { get; set; }
public virtual string Text1 { get; set; }
@@ -52,7 +56,9 @@ namespace Results.Entities
/// </summary>
public WaterMeterData()
{
}
PulsesPerLtr = 1;
PulsesPerLtrAux = 1;
}
/// <summary>
/// Copy constructor, copies all except of Id
@@ -64,11 +70,13 @@ namespace Results.Entities
DN = oriWMData.DN;
L = oriWMData.L;
Mounting = oriWMData.Mounting;
NewQnames = oriWMData.NewQnames;
Qnames = oriWMData.Qnames;
Q4_Qmax = oriWMData.Q4_Qmax;
Q3_Qn = oriWMData.Q3_Qn;
Q2_Qt = oriWMData.Q2_Qt;
Q1_Qmin = oriWMData.Q1_Qmin;
ErrLimHiQ = oriWMData.ErrLimHiQ;
ErrLimLoQ = oriWMData.ErrLimLoQ;
MetrologicalClass = oriWMData.MetrologicalClass;
TemperatureClass = oriWMData.TemperatureClass;
PressureLossClass = oriWMData.PressureLossClass;
@@ -81,6 +89,7 @@ namespace Results.Entities
Q3_Qn_Aux = oriWMData.Q3_Qn_Aux;
MetrologicalClassAux = oriWMData.MetrologicalClassAux;
ApprovalInfoAux = oriWMData.ApprovalInfoAux;
PulsesPerLtrAux = oriWMData.PulsesPerLtrAux;
Medium = oriWMData.Medium;
Text1 = oriWMData.Text1;
Text2 = oriWMData.Text2;
@@ -105,11 +114,13 @@ namespace Results.Entities
if (DN != wmd.DN) return false;
if (L != wmd.L) return false;
if (Mounting != wmd.Mounting) return false;
if (NewQnames != wmd.NewQnames) return false;
if (Qnames != wmd.Qnames) return false;
if (Q4_Qmax != wmd.Q4_Qmax) return false;
if (Q3_Qn != wmd.Q3_Qn) return false;
if (Q2_Qt != wmd.Q2_Qt) return false;
if (Q1_Qmin != wmd.Q1_Qmin) return false;
if (ErrLimHiQ != wmd.ErrLimHiQ) return false;
if (ErrLimLoQ != wmd.ErrLimLoQ) return false;
if (MetrologicalClass != wmd.MetrologicalClass) return false;
if (TemperatureClass != wmd.TemperatureClass) return false;
if (PressureLossClass != wmd.PressureLossClass) return false;
@@ -122,6 +133,7 @@ namespace Results.Entities
if (Q3_Qn_Aux != wmd.Q3_Qn_Aux) return false;
if (MetrologicalClassAux != wmd.MetrologicalClassAux) return false;
if (ApprovalInfoAux != wmd.ApprovalInfoAux) return false;
if (PulsesPerLtrAux != wmd.PulsesPerLtrAux) return false;
if (Medium != wmd.Medium) return false;
if (Text1 != wmd.Text1) return false;
if (Text2 != wmd.Text2) return false;
@@ -161,11 +173,13 @@ namespace Results.Entities
writer.Write(DN);
writer.Write(L);
writer.Write((int)Mounting);
writer.Write(NewQnames);
writer.Write((int)Qnames);
writer.Write(Q4_Qmax);
writer.Write(Q3_Qn);
writer.Write(Q2_Qt);
writer.Write(Q1_Qmin);
writer.Write(ErrLimHiQ);
writer.Write(ErrLimLoQ);
writer.Write((MetrologicalClass != null) ? MetrologicalClass : string.Empty);
writer.Write((int)TemperatureClass);
writer.Write((int)PressureLossClass);
@@ -178,6 +192,7 @@ namespace Results.Entities
writer.Write(Q3_Qn_Aux);
writer.Write((MetrologicalClassAux != null) ? MetrologicalClassAux : string.Empty);
writer.Write((ApprovalInfoAux != null) ? ApprovalInfoAux : string.Empty);
writer.Write(PulsesPerLtrAux);
writer.Write((int)Medium);
writer.Write((Text1 != null) ? Text1 : string.Empty);
writer.Write((Text2 != null) ? Text2 : string.Empty);
@@ -197,11 +212,13 @@ namespace Results.Entities
DN = reader.ReadDouble();
L = reader.ReadDouble();
Mounting = (Mounting)reader.ReadInt32();
NewQnames = reader.ReadBoolean();
Qnames = (sbyte)reader.ReadInt32();
Q4_Qmax = reader.ReadDouble();
Q3_Qn = reader.ReadDouble();
Q2_Qt = reader.ReadDouble();
Q1_Qmin = reader.ReadDouble();
ErrLimHiQ = reader.ReadDouble();
ErrLimLoQ = reader.ReadDouble();
MetrologicalClass = reader.ReadString();
TemperatureClass = (TemperatureClass)reader.ReadInt32();
PressureLossClass = (PressureLossClass)reader.ReadInt32();
@@ -214,6 +231,7 @@ namespace Results.Entities
Q3_Qn_Aux = reader.ReadDouble();
MetrologicalClassAux = reader.ReadString();
ApprovalInfoAux = reader.ReadString();
PulsesPerLtrAux = reader.ReadDouble();
Medium = (Medium)reader.ReadInt32();
Text1 = reader.ReadString();
Text2 = reader.ReadString();
+7 -3
View File
@@ -29,6 +29,7 @@ namespace Results.Forms
public int PopupResultsWidth;
public int PopupResultsHeight;
public int[] RsltsClmnWidths;
public IList<string> SerialNrs;
///
@@ -126,7 +127,8 @@ namespace Results.Forms
int displayedControlsCount = 0;
for (int i = 0; i < results.Batch.WaterMeters.Count; i++)
{
if ((!results.Batch.WaterMeters[i].Disabled) || ShowDisabledPositions)
if ((ShowDisabledPositions || !results.Batch.WaterMeters[i].Disabled) &&
(SerialNrs == null || SerialNrs.Contains(results.Batch.WaterMeters[i].SerialNr)))
{
displayedControlsCount++;
}
@@ -167,7 +169,8 @@ namespace Results.Forms
firstEnabledControl = null;
for (int i = 0; i < results.Batch.WaterMeters.Count; i++)
{
if (!results.Batch.WaterMeters[i].Disabled || ShowDisabledPositions)
if ((ShowDisabledPositions || !results.Batch.WaterMeters[i].Disabled) &&
(SerialNrs == null || SerialNrs.Contains(results.Batch.WaterMeters[i].SerialNr)))
{
/// Create one water meter position / control
wmRsltsCtrl[ix] = (TestsArrangement == TestsArrangement.Rows)
@@ -216,7 +219,8 @@ namespace Results.Forms
int ctrlIx = 0;
for (int wmNr0 = 0; wmNr0 < results.Batch.WaterMeters.Count; wmNr0++)
{
if (!results.Batch.WaterMeters[wmNr0].Disabled || ShowDisabledPositions)
if ((ShowDisabledPositions || !results.Batch.WaterMeters[wmNr0].Disabled) &&
(SerialNrs == null || SerialNrs.Contains(results.Batch.WaterMeters[wmNr0].SerialNr)))
{
if (ctrlIx < wmRsltsCtrl.Length) wmRsltsCtrl[ctrlIx++].Update(results.Batch.WaterMeters[wmNr0]);
}
+16 -12
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2019 Sensus Slovensko a.s.
/// Copyright (c) 2019-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -14,6 +14,13 @@ namespace Results.Forms
{
public partial class MoreWMResultsDlg : Form
{
enum Tabs
{
Results = 0,
Graph,
Tracing,
}
public MoreWMResultsDlg(Results.Entities.WaterMeter wm, IList<ReferenceRecord> refRecords)
{
InitializeComponent();
@@ -23,14 +30,15 @@ namespace Results.Forms
ShowAllResults(wm);
ShowChart(wm);
/// Select the initial tab page to be displayed
if (refRecords == null)
{
tabControl1.SelectTab(1);
tabControl1.TabPages.RemoveAt(2);
tabControl1.SelectTab((int)Tabs.Graph);
tabControl1.TabPages.RemoveAt((int)Tabs.Tracing);
}
else
{
tabControl1.SelectTab(2);
tabControl1.SelectTab((int)Tabs.Tracing);
ShowTracingResults(wm, refRecords);
}
}
@@ -39,9 +47,9 @@ namespace Results.Forms
void Localize()
{
Text = Strings.Water_meter_results;
tabControl1.TabPages[0].Text = Strings.All_results;
tabControl1.TabPages[1].Text = Strings.Graphs;
tabControl1.TabPages[2].Text = Strings.Production_tracing_results;
tabControl1.TabPages[(int)Tabs.Results].Text = Strings.All_results;
tabControl1.TabPages[(int)Tabs.Graph].Text = Strings.Graphs;
tabControl1.TabPages[(int)Tabs.Tracing].Text = Strings.Production_tracing_results;
}
@@ -107,11 +115,7 @@ namespace Results.Forms
void ShowChart(Results.Entities.WaterMeter wm)
{
//chart.ChartAreas[0].AxisX.LabelStyle.Format = "dd.MM.yy";
//chart.ChartAreas[0].AxisX.Interval = 1;
//chart.ChartAreas[0].AxisX.IntervalType = ;
tabControl1.TabPages[1].Controls.Add(Results.Output.WMChart.GetChart(wm, false));
tabControl1.TabPages[(int)Tabs.Graph].Controls.Add(Results.Output.WMChart.GetChart(wm, false));
}
+32 -11
View File
@@ -22,6 +22,7 @@ namespace Results.Forms
Precision,
Width,
Alignment,
Merge,
TestID,
Count,
}
@@ -91,7 +92,8 @@ namespace Results.Forms
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Precision });
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Width });
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Alignment });
if (!SupressTestIDColumn)
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Merge });
if (!SupressTestIDColumn)
{
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Test_ID });
}
@@ -99,12 +101,16 @@ namespace Results.Forms
/// Create controls used by ListViewEx to edit items
unitsCB = new ComboBox();
ComboBox alignmentCB = new ComboBox();
var alignmentCB = new ComboBox();
for (Alignment a = 0; a < Alignment.Count; a++)
{
alignmentCB.Items.Add(a.ToDescription());
}
var mergeCB = new ComboBox();
mergeCB.Items.Add(Strings.No);
mergeCB.Items.Add(Strings.Yes);
editors = new Control[]
{
null,
@@ -114,6 +120,7 @@ namespace Results.Forms
new TextBox(), /// precision
new TextBox(), /// width
alignmentCB,
mergeCB,
new TextBox(), /// testID
};
foreach (var edi in editors)
@@ -198,7 +205,20 @@ namespace Results.Forms
}
break; /// Error
case Column.TestID: item.TestID = e.DisplayText; return;
case Column.Merge:
if (editors[e.SubItem].Text == Strings.Yes)
{
item.Merge = true;
return;
}
else if (editors[e.SubItem].Text == Strings.No)
{
item.Merge = false;
return;
}
break; /// Error
case Column.TestID: item.TestID = e.DisplayText; return;
default:
return; /// OK
@@ -324,17 +344,18 @@ namespace Results.Forms
foreach (var item in SelectedItems)
{
ListViewItem lvi = new ListViewItem(item.Name); /// Item
ListViewItem lvi = new ListViewItem(item.Name); /// Item
lvi.Tag = item;
lvi.SubItems.Add(item.Caption); /// Header
lvi.SubItems.Add(item.Units.ToDescription()); /// Units
lvi.SubItems.Add(item.Format); /// Format
lvi.SubItems.Add(item.Precision); /// Precision
lvi.SubItems.Add(item.Width.ToString()); /// Width
lvi.SubItems.Add(item.Alignment.ToDescription()); /// Alignment
lvi.SubItems.Add(item.Caption); /// Header
lvi.SubItems.Add(item.Units.ToDescription()); /// Units
lvi.SubItems.Add(item.Format); /// Format
lvi.SubItems.Add(item.Precision); /// Precision
lvi.SubItems.Add(item.Width.ToString()); /// Width
lvi.SubItems.Add(item.Alignment.ToDescription()); /// Alignment
lvi.SubItems.Add(item.Merge ? Strings.Yes : Strings.No); /// Merge
if (!SupressTestIDColumn)
{
lvi.SubItems.Add(item.TestID); /// TestID
lvi.SubItems.Add(item.TestID); /// TestID
}
selectedResultsListViewEx.Items.Add(lvi);
+5 -1
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2016-2018 Sensus Slovensko a.s.
/// Copyright (c) 2016-2023 Sensus Slovensko a.s.
///
using System;
@@ -345,6 +345,10 @@ namespace Results
RadioAddress, /// 292
OriRadioAddress, /// 293
Pls_per_ltr_aux, /// 294 Compound water meter constant (water meter data, not used in calculations)
Pulses_main, /// 295 Compound main meter pulses (recalculated so that the gated ref. pulses for this meter are equal to the total ref. pulses)
Pulses_aux, /// 296 Compound aux meter pulses (recalculated so that the gated ref. pulses for this meter are equal to the total ref. pulses)
Count,
}
}
+2 -1
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
/// Copyright (c) 2015-2023 Sensus Slovensko a.s.
///
using FluentNHibernate.Mapping;
using Results.Entities;
@@ -34,6 +34,7 @@ namespace Results.Mappings
Map(x => x.StartTime);
Map(x => x.EndTime);
Map(x => x.SaveTime);
Map(x => x.Dirty);
Map(x => x.RsltsSent);
Map(x => x.RsltsPrinted);
+5 -4
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2015-2017 Sensus Slovensko a.s.
/// Copyright (c) 2015-2023 Sensus Slovensko a.s.
///
using FluentNHibernate.Mapping;
using Results.Entities;
@@ -18,13 +18,13 @@ namespace Results.Mappings
Map(x => x.L);
Map(x => x.Mounting);
#if MUNICH && LANG_DE
Map(x => x.NewQnames);
#endif
Map(x => x.Qnames);
Map(x => x.Q4_Qmax);
Map(x => x.Q3_Qn);
Map(x => x.Q2_Qt);
Map(x => x.Q1_Qmin);
Map(x => x.ErrLimHiQ);
Map(x => x.ErrLimLoQ);
Map(x => x.MetrologicalClass);
Map(x => x.TemperatureClass);
@@ -41,6 +41,7 @@ namespace Results.Mappings
Map(x => x.Q3_Qn_Aux);
Map(x => x.MetrologicalClassAux);
Map(x => x.ApprovalInfoAux);
Map(x => x.PulsesPerLtrAux);
Map(x => x.Medium);
+47
View File
@@ -0,0 +1,47 @@
///
/// Copyright (c) 2023 Sensus Slovensko a.s.
///
using Common;
using System.Drawing;
using System.Drawing.Printing;
namespace Results.Output
{
public class Cell
{
public readonly string Text;
public readonly Font Font;
public readonly Alignment HorizAlignment;
public readonly VertAlignment VertAlignment;
public readonly bool TopBorder;
public readonly bool LeftBorder;
public readonly bool BottomMerge;
public readonly bool RightMerge;
public SizeF Size { get { return size; } }
SizeF size;
public Cell() { }
public Cell(string text, Font font, Alignment horizAlignment = Alignment.Left,
VertAlignment vertAlignment = VertAlignment.Top, bool topBorder = false,
bool leftBorder = false, bool bottomMerge = false, bool rightMerge = false)
{
Text = text;
Font = font;
HorizAlignment = horizAlignment;
VertAlignment = vertAlignment;
TopBorder = topBorder;
LeftBorder = leftBorder;
BottomMerge = bottomMerge;
RightMerge = rightMerge;
}
public void Measure(PrintPageEventArgs e)
{
size = (Text != null && Font != null)
? Common.Printers.PrintersCommon.Measure(e, Text, Font)
: new SizeF(0, 0);
}
}
}
@@ -34,6 +34,22 @@ namespace Results.Output.Printers.Enhanced
readonly int spacingOneAndHalf4Header;
readonly int spacingOne4Footer;
/// <summary>
/// Property variable for the Font the user wishes to use
/// </summary>
readonly Font titleFont;
readonly Font headerFont;
readonly Font font;
readonly Font footerFont;
///
/// Items to print
///
readonly string header;
readonly IList<WMeterRsltItemSpec> commonItems;
readonly IList<WMeterRsltItemSpec> testItems;
readonly string footer;
int spacingAboveTable;
int spacingBelowTable;
@@ -43,14 +59,6 @@ namespace Results.Output.Printers.Enhanced
int titleHeight;
int commonHeight;
/// <summary>
/// Property variable for the Font the user wishes to use
/// </summary>
Font titleFont;
Font headerFont;
Font font;
Font footerFont;
TableStyle style;
///
@@ -60,14 +68,6 @@ namespace Results.Output.Printers.Enhanced
EnhancedPrinterCfg cfg;
///
/// Items to print
///
string header;
IList<WMeterRsltItemSpec> commonItems;
IList<WMeterRsltItemSpec> testItems;
string footer;
///
/// Layout and status
///
@@ -93,15 +93,15 @@ namespace Results.Output.Printers.Enhanced
leftMargin = cfg.LeftMargin;
header = string.IsNullOrEmpty(cfg.Header) ? string.Empty : cfg.Header.Replace("~", Environment.NewLine);
commonItems = Results.WMeterRsltItemSpec.FromStrArray(cfg.CommonItems);
testItems = Results.WMeterRsltItemSpec.FromStrArray(cfg.TestItems); /// TestID info will be overwritten later on
commonItems = WMeterRsltItemSpec.FromStrArray(cfg.CommonItems);
testItems = WMeterRsltItemSpec.FromStrArray(cfg.TestItems); /// TestID info will be overwritten later on
footer = string.IsNullOrEmpty(cfg.Footer) ? string.Empty : cfg.Footer.Replace("~", Environment.NewLine);
/// Initialize fonts
titleFont = new Font((cfg.TitFntFml != null ? cfg.TitFntFml : "Arial"), (cfg.TitFntSz > 0 ? cfg.TitFntSz : 10), (FontStyle)cfg.TitFntSty);
headerFont = new Font((cfg.HdrFntFml != null ? cfg.HdrFntFml : "Arial"), (cfg.HdrFntSz > 0 ? cfg.HdrFntSz : 10), (FontStyle)cfg.HdrFntSty);
font = new Font((cfg.BodyFntFml != null ? cfg.BodyFntFml : "Arial"), (cfg.BodyFntSz > 0 ? cfg.BodyFntSz : 10), (FontStyle)cfg.BodyFntSty);
footerFont = new Font((cfg.FooterFntFml != null ? cfg.FooterFntFml : "Arial"), (cfg.FooterFntSz > 0 ? cfg.FooterFntSz : 10), (FontStyle)cfg.FooterFntSty);
titleFont = new Font(cfg.TitFntFml ?? "Arial", cfg.TitFntSz > 0 ? cfg.TitFntSz : 10, (FontStyle)cfg.TitFntSty);
headerFont = new Font(cfg.HdrFntFml ?? "Arial", cfg.HdrFntSz > 0 ? cfg.HdrFntSz : 10, (FontStyle)cfg.HdrFntSty);
font = new Font(cfg.BodyFntFml ?? "Arial", cfg.BodyFntSz > 0 ? cfg.BodyFntSz : 10, (FontStyle)cfg.BodyFntSty);
footerFont = new Font(cfg.FooterFntFml ?? "Arial", cfg.FooterFntSz > 0 ? cfg.FooterFntSz : 10, (FontStyle)cfg.FooterFntSty);
/// Table style of one water meter table where tests are rows
style = new TableStyle
@@ -149,7 +149,7 @@ namespace Results.Output.Printers.Enhanced
/// </summary>
/// <param name=e></param>
/// <remarks></remarks>
protected override void OnBeginPrint(System.Drawing.Printing.PrintEventArgs e)
protected override void OnBeginPrint(PrintEventArgs e)
{
base.OnBeginPrint(e);
}
@@ -159,7 +159,7 @@ namespace Results.Output.Printers.Enhanced
/// </summary>
/// <param name=e></param>
/// <remarks>This provides the print logic for our document</remarks>
protected override void OnPrintPage(System.Drawing.Printing.PrintPageEventArgs e)
protected override void OnPrintPage(PrintPageEventArgs e)
{
/// Run base code
base.OnPrintPage(e);
@@ -284,7 +284,7 @@ namespace Results.Output.Printers.Enhanced
/// <param name="printedWMNr">Number of the water meter printed</param>
/// <param name="top">Top coordinate of watermeter data</param>
/// <returns>The height of the printed section</returns>
float PrintWM(System.Drawing.Printing.PrintPageEventArgs e,
float PrintWM(PrintPageEventArgs e,
Results.Entities.WaterMeter wm, int printedWMNr, int top)
{
int tableTop = top + spacingAboveTable;
@@ -332,33 +332,33 @@ namespace Results.Output.Printers.Enhanced
}
void PrintAt(System.Drawing.Printing.PrintPageEventArgs e, Point p, string text)
void PrintAt(PrintPageEventArgs e, Point p, string text)
{
PrintAt(e, p.X, p.Y, text);
}
void PrintAt(System.Drawing.Printing.PrintPageEventArgs e, int x, int y, string text)
void PrintAt(PrintPageEventArgs e, int x, int y, string text)
{
RectangleF printArea = new RectangleF(x, y, 2000, spacingOne);
e.Graphics.DrawString(text, this.font, Brushes.Black, printArea);
}
void PrintHeaderAt(System.Drawing.Printing.PrintPageEventArgs e, Point p, string text)
void PrintHeaderAt(PrintPageEventArgs e, Point p, string text)
{
PrintHeaderAt(e, p.X, p.Y, text);
}
void PrintHeaderAt(System.Drawing.Printing.PrintPageEventArgs e, int x, int y, string text)
void PrintHeaderAt(PrintPageEventArgs e, int x, int y, string text)
{
RectangleF printArea = new RectangleF(x, y, 2000, spacingOne4Header);
e.Graphics.DrawString(text, this.headerFont, Brushes.Black, printArea);
}
void PrintFooterAt(System.Drawing.Printing.PrintPageEventArgs e, Point p, string text)
void PrintFooterAt(PrintPageEventArgs e, Point p, string text)
{
PrintFooterAt(e, p.X, p.Y, text);
}
void PrintFooterAt(System.Drawing.Printing.PrintPageEventArgs e, int x, int y, string text)
void PrintFooterAt(PrintPageEventArgs e, int x, int y, string text)
{
RectangleF printArea = new RectangleF(x, y, 2000, spacingOne4Footer);
e.Graphics.DrawString(text, this.footerFont, Brushes.Black, printArea);
@@ -9,7 +9,6 @@ using System.Drawing.Printing;
using System.IO;
using Gma.QrCodeNet.Encoding;
using Common;
using Results.Resources;
using GenCode128;
namespace Results.Output.Printers.Label
@@ -22,17 +21,17 @@ namespace Results.Output.Printers.Label
readonly int printHeight;
readonly int printWidth;
/// Selected font
readonly Font font;
/// Items to print
readonly IList<WMeterRsltItemSpec> itemsToPrint;
/// Selected font
readonly Font font;
/// Data to print
Results.Entities.Batch batch;
LabelPrinterCfg cfg;
Results.Entities.WaterMeter wm;
/// Items to print
IList<WMeterRsltItemSpec> itemsToPrint;
/// <summary>
/// Constructor
/// </summary>
@@ -44,12 +43,10 @@ namespace Results.Output.Printers.Label
this.batch = batch;
this.cfg = cfg;
this.wm = wm;
this.itemsToPrint = Results.WMeterRsltItemSpec.FromStrArray(cfg.ItemsToPrint);
this.itemsToPrint = WMeterRsltItemSpec.FromStrArray(cfg.ItemsToPrint);
/// Initialize fonts
font = new Font((cfg.FontFamily != null ? cfg.FontFamily : "Arial"),
(cfg.FontSize > 0 ? cfg.FontSize : 10),
(FontStyle)cfg.FontStyle);
font = new Font(cfg.FontFamily ?? "Arial", cfg.FontSize > 0 ? cfg.FontSize : 10, (FontStyle)cfg.FontStyle);
/// Set print area size and margins (in dots using 100 dpi)
DefaultPageSettings.Landscape = (cfg.PageOrientation == PageOrientation.Landscape);
@@ -63,7 +60,7 @@ namespace Results.Output.Printers.Label
/// </summary>
/// <param name=e></param>
/// <remarks></remarks>
protected override void OnBeginPrint(System.Drawing.Printing.PrintEventArgs e)
protected override void OnBeginPrint(PrintEventArgs e)
{
base.OnBeginPrint(e);
}
@@ -73,7 +70,7 @@ namespace Results.Output.Printers.Label
/// </summary>
/// <param name=e></param>
/// <remarks>This provides the print logic for our document</remarks>
protected override void OnPrintPage(System.Drawing.Printing.PrintPageEventArgs e)
protected override void OnPrintPage(PrintPageEventArgs e)
{
/// Run base code
base.OnPrintPage(e);
@@ -9,7 +9,6 @@ using System.Drawing.Printing;
using System.IO;
using Gma.QrCodeNet.Encoding;
using Common;
using Results.Resources;
using GenCode128;
namespace Results.Output.Printers.MultiLabel
@@ -22,17 +21,17 @@ namespace Results.Output.Printers.MultiLabel
readonly int labelHeight;
readonly int labelWidth;
/// Selected font
readonly Font font;
/// Items to print
readonly IList<WMeterRsltItemSpec> itemsToPrint;
/// Selected font
readonly Font font;
/// Data to print
Results.Entities.Batch batch;
MultiLabelPrinterCfg cfg;
IList<Results.Entities.WaterMeter> waterMeters;
/// Items to print
IList<WMeterRsltItemSpec> itemsToPrint;
/// <summary>
/// Constructor
/// </summary>
@@ -44,15 +43,13 @@ namespace Results.Output.Printers.MultiLabel
this.batch = batch;
this.waterMeters = batch.WaterMeters;
this.cfg = cfg;
this.itemsToPrint = Results.WMeterRsltItemSpec.FromStrArray(cfg.ItemsToPrint);
this.itemsToPrint = WMeterRsltItemSpec.FromStrArray(cfg.ItemsToPrint);
/// Initialize fonts
font = new Font((cfg.FontFamily != null ? cfg.FontFamily : "Arial"),
(cfg.FontSize > 0 ? cfg.FontSize : 10),
(FontStyle)cfg.FontStyle);
/// Initialize fonts
font = new Font(cfg.FontFamily ?? "Arial", cfg.FontSize > 0 ? cfg.FontSize : 10, (FontStyle)cfg.FontStyle);
/// Set print area size and margins (in dots using 100 dpi)
DefaultPageSettings.Landscape = (cfg.PageOrientation == PageOrientation.Landscape);
/// Set print area size and margins (in dots using 100 dpi)
DefaultPageSettings.Landscape = (cfg.PageOrientation == PageOrientation.Landscape);
///
labelHeight = cfg.LabelHeight;
labelWidth = cfg.LabelWidth;
@@ -63,7 +60,7 @@ namespace Results.Output.Printers.MultiLabel
/// </summary>
/// <param name=e></param>
/// <remarks></remarks>
protected override void OnBeginPrint(System.Drawing.Printing.PrintEventArgs e)
protected override void OnBeginPrint(PrintEventArgs e)
{
base.OnBeginPrint(e);
}
@@ -73,7 +70,7 @@ namespace Results.Output.Printers.MultiLabel
/// </summary>
/// <param name=e></param>
/// <remarks>This provides the print logic for our document</remarks>
protected override void OnPrintPage(System.Drawing.Printing.PrintPageEventArgs e)
protected override void OnPrintPage(PrintPageEventArgs e)
{
/// Run base code
base.OnPrintPage(e);
@@ -13,9 +13,6 @@ namespace Results.Output.Printers.OnePerBatch
{
public class OnePerBatchPrintDocument : Common.Printers.PrintersCommon
{
const float GapBetweenTableColumns = 10;
const float GapBetweenCommonColumns = 10;
/// Size of the printed area without margins, after taking into account 'pageOrientation'
readonly int printHeight;
readonly int printWidth;
@@ -28,39 +25,39 @@ namespace Results.Output.Printers.OnePerBatch
readonly int spacingOne;
readonly int spacingOne4Header;
float titleHeight;
/// <summary>
/// Property variable for the Font the user wishes to use
/// </summary>
Font titleFont;
Font headerFont;
Font font;
Font footerFont;
///
/// Data to print
///
Results.Entities.Batch batch;
OnePerBatchPrinterCfg cfg;
Results.Entities.WaterMeter wm;
readonly Font titleFont;
readonly Font headerFont;
readonly Font font;
readonly Font footerFont;
///
/// Items to print
///
string header;
IList<WMeterRsltItemSpec> commonItems1;
IList<WMeterRsltItemSpec> commonItems2;
IList<WMeterRsltItemSpec> commonItems3;
IList<WMeterRsltItemSpec> testItems;
IList<WMeterRsltItemSpec> testItems2;
IList<WMeterRsltItemSpec> belowItems1;
IList<WMeterRsltItemSpec> belowItems2;
IList<WMeterRsltItemSpec> belowItems3;
string footer;
readonly string header;
readonly IList<WMeterRsltItemSpec> commonItems1;
readonly IList<WMeterRsltItemSpec> commonItems2;
readonly IList<WMeterRsltItemSpec> commonItems3;
readonly IList<WMeterRsltItemSpec> testItems;
readonly IList<WMeterRsltItemSpec> testItems2;
readonly IList<WMeterRsltItemSpec> belowItems1;
readonly IList<WMeterRsltItemSpec> belowItems2;
readonly IList<WMeterRsltItemSpec> belowItems3;
readonly string footer;
int nrPages;
///
/// Data to print
///
Results.Entities.Batch batch;
OnePerBatchPrinterCfg cfg;
Results.Entities.WaterMeter wm;
float titleHeight;
int nrPages;
int pageNr; /// Page number to be printed at the bottom of the page
/// <summary>
@@ -79,21 +76,21 @@ namespace Results.Output.Printers.OnePerBatch
leftMargin = cfg.LeftMargin;
header = string.IsNullOrEmpty(cfg.Header) ? string.Empty : cfg.Header.Replace("~", Environment.NewLine);
commonItems1 = Results.WMeterRsltItemSpec.FromStrArray(cfg.CommonItems1);
commonItems2 = Results.WMeterRsltItemSpec.FromStrArray(cfg.CommonItems2);
commonItems3 = Results.WMeterRsltItemSpec.FromStrArray(cfg.CommonItems3);
testItems = Results.WMeterRsltItemSpec.FromStrArray(cfg.TestItems); /// TestID info will be overwritten later on
testItems2 = Results.WMeterRsltItemSpec.FromStrArray(cfg.TestItems2); /// TestID info will be overwritten later on
belowItems1 = Results.WMeterRsltItemSpec.FromStrArray(cfg.BelowItems1);
belowItems2 = Results.WMeterRsltItemSpec.FromStrArray(cfg.BelowItems2);
belowItems3 = Results.WMeterRsltItemSpec.FromStrArray(cfg.BelowItems3);
commonItems1 = WMeterRsltItemSpec.FromStrArray(cfg.CommonItems1);
commonItems2 = WMeterRsltItemSpec.FromStrArray(cfg.CommonItems2);
commonItems3 = WMeterRsltItemSpec.FromStrArray(cfg.CommonItems3);
testItems = WMeterRsltItemSpec.FromStrArray(cfg.TestItems); /// TestID info will be overwritten later on
testItems2 = WMeterRsltItemSpec.FromStrArray(cfg.TestItems2); /// TestID info will be overwritten later on
belowItems1 = WMeterRsltItemSpec.FromStrArray(cfg.BelowItems1);
belowItems2 = WMeterRsltItemSpec.FromStrArray(cfg.BelowItems2);
belowItems3 = WMeterRsltItemSpec.FromStrArray(cfg.BelowItems3);
footer = string.IsNullOrEmpty(cfg.Footer) ? string.Empty : cfg.Footer.Replace("~", Environment.NewLine);
/// Initialize fonts
titleFont = new Font((cfg.TitFntFml != null ? cfg.TitFntFml : "Arial"), (cfg.TitFntSz > 0 ? cfg.TitFntSz : 10), (FontStyle)cfg.TitFntSty);
headerFont = new Font((cfg.HdrFntFml != null ? cfg.HdrFntFml : "Arial"), (cfg.HdrFntSz > 0 ? cfg.HdrFntSz : 10), (FontStyle)cfg.HdrFntSty);
font = new Font((cfg.BodyFntFml != null ? cfg.BodyFntFml : "Arial"), (cfg.BodyFntSz > 0 ? cfg.BodyFntSz : 10), (FontStyle)cfg.BodyFntSty);
footerFont = new Font((cfg.FooterFntFml != null ? cfg.FooterFntFml : "Arial"), (cfg.FooterFntSz > 0 ? cfg.FooterFntSz : 10), (FontStyle)cfg.FooterFntSty);
titleFont = new Font(cfg.TitFntFml ?? "Arial", cfg.TitFntSz > 0 ? cfg.TitFntSz : 10, (FontStyle)cfg.TitFntSty);
headerFont = new Font(cfg.HdrFntFml ?? "Arial", cfg.HdrFntSz > 0 ? cfg.HdrFntSz : 10, (FontStyle)cfg.HdrFntSty);
font = new Font(cfg.BodyFntFml ?? "Arial", cfg.BodyFntSz > 0 ? cfg.BodyFntSz : 10, (FontStyle)cfg.BodyFntSty);
footerFont = new Font(cfg.FooterFntFml ?? "Arial", cfg.FooterFntSz > 0 ? cfg.FooterFntSz : 10, (FontStyle)cfg.FooterFntSty);
/// Set print area size and margins (in dots using 100 dpi)
DefaultPageSettings.Landscape = (cfg.PageOrientation == PageOrientation.Landscape);
@@ -125,7 +122,7 @@ namespace Results.Output.Printers.OnePerBatch
/// </summary>
/// <param name=e></param>
/// <remarks></remarks>
protected override void OnBeginPrint(System.Drawing.Printing.PrintEventArgs e)
protected override void OnBeginPrint(PrintEventArgs e)
{
base.OnBeginPrint(e);
}
@@ -135,7 +132,7 @@ namespace Results.Output.Printers.OnePerBatch
/// </summary>
/// <param name=e></param>
/// <remarks>This provides the print logic for our document</remarks>
protected override void OnPrintPage(System.Drawing.Printing.PrintPageEventArgs e)
protected override void OnPrintPage(PrintPageEventArgs e)
{
/// Run base code
base.OnPrintPage(e);
@@ -194,35 +191,33 @@ namespace Results.Output.Printers.OnePerBatch
float leftMarginCommon2 = leftMargin + printWidth * 0.01f * (cfg.ColW0Pct + cfg.ColW1Pct);
float leftMarginCommon3 = leftMargin + printWidth * 0.01f * (cfg.ColW0Pct + cfg.ColW1Pct + cfg.ColW2Pct);
Alignment[] horizAlgn = new Alignment[] { Alignment.Left, Alignment.Left };
VertAlignment[] vertAlgn = new VertAlignment[] { VertAlignment.Top, VertAlignment.Top };
TableStyle commonTableStyle = new TableStyle { Font = font, MarginX = 5, MarginY = 3 };
Table table1 = new Table(2, cfg.AutoTestParam) { Style = commonTableStyle };
var table1 = new Table(2, commonTableStyle, cfg.AutoTestParam);
foreach (var item in commonItems1)
{
string[] row = new string[] { item.Caption, item.Print(wm).Split(new char[] { '|' })[0] };
table1.AddRow(row, horizAlgn, vertAlgn);
table1.AddRow(new Cell[] { new Cell(item.Caption, font),
new Cell(item.Print(wm).Split(new char[] { '|' })[0], font) });
}
float bodyTop1 = table1.Draw(e, leftMarginCommon1, commonTop);
table1 = new Table(2, cfg.AutoTestParam) { Style = commonTableStyle };
var table2 = new Table(2, commonTableStyle, cfg.AutoTestParam);
foreach (var item in commonItems2)
{
string[] row = new string[] { item.Caption, item.Print(wm).Split(new char[] { '|' })[0] };
table1.AddRow(row, horizAlgn, vertAlgn);
table2.AddRow(new Cell[] { new Cell(item.Caption, font),
new Cell(item.Print(wm).Split(new char[] { '|' })[0], font) });
}
float bodyTop2 = table1.Draw(e, leftMarginCommon2, commonTop);
float bodyTop2 = table2.Draw(e, leftMarginCommon2, commonTop);
table1 = new Table(2, cfg.AutoTestParam) { Style = commonTableStyle };
var table3 = new Table(2, commonTableStyle, cfg.AutoTestParam);
foreach (var item in commonItems3)
{
string[] row = new string[] { item.Caption, item.Print(wm).Split(new char[] { '|' })[0] };
table1.AddRow(row, horizAlgn, vertAlgn);
table3.AddRow(new Cell[] { new Cell(item.Caption, font),
new Cell(item.Print(wm).Split(new char[] { '|' })[0], font) });
}
float bodyTop3 = table1.Draw(e, leftMarginCommon3, commonTop);
float bodyTop3 = table3.Draw(e, leftMarginCommon3, commonTop);
float bodyTop12 = (bodyTop1 > bodyTop2) ? bodyTop1 : bodyTop2;
tableTop = (bodyTop12 > bodyTop3) ? bodyTop12 : bodyTop3; /// Max. of all three bodyTop-s
@@ -302,35 +297,33 @@ namespace Results.Output.Printers.OnePerBatch
float leftMarginBelow2 = leftMargin + printWidth * 0.01f * (cfg.BelowW0Pct + cfg.BelowW1Pct);
float leftMarginBelow3 = leftMargin + printWidth * 0.01f * (cfg.BelowW0Pct + cfg.BelowW1Pct + cfg.BelowW2Pct);
Alignment[] horizAlgn = new Alignment[] { Alignment.Left, Alignment.Left };
VertAlignment[] vertAlgn = new VertAlignment[] { VertAlignment.Top, VertAlignment.Top };
TableStyle commonTableStyle = new TableStyle { Font = font, MarginX = 5, MarginY = 3 };
Table table2 = new Table(2, cfg.AutoTestParam) { Style = commonTableStyle };
var table4 = new Table(2, commonTableStyle, cfg.AutoTestParam);
foreach (var item in belowItems1)
{
string[] row = new string[] { item.Caption, item.Print(wm).Split(new char[] { '|' })[0] };
table2.AddRow(row, horizAlgn, vertAlgn);
table4.AddRow(new Cell[] { new Cell(item.Caption, font),
new Cell(item.Print(wm).Split(new char[] { '|' })[0], font) });
}
table2.Draw(e, leftMarginBelow1, belowTop);
table4.Draw(e, leftMarginBelow1, belowTop);
table2 = new Table(2, cfg.AutoTestParam) { Style = commonTableStyle };
var table5 = new Table(2, commonTableStyle, cfg.AutoTestParam);
foreach (var item in belowItems2)
{
string[] row = new string[] { item.Caption, item.Print(wm).Split(new char[] { '|' })[0] };
table2.AddRow(row, horizAlgn, vertAlgn);
table5.AddRow(new Cell[] { new Cell(item.Caption, font),
new Cell(item.Print(wm).Split(new char[] { '|' })[0], font) });
}
table2.Draw(e, leftMarginBelow2, belowTop);
table5.Draw(e, leftMarginBelow2, belowTop);
table2 = new Table(2, cfg.AutoTestParam) { Style = commonTableStyle };
var table6 = new Table(2, commonTableStyle, cfg.AutoTestParam);
foreach (var item in belowItems3)
{
string[] row = new string[] { item.Caption, item.Print(wm).Split(new char[] { '|' })[0] };
table2.AddRow(row, horizAlgn, vertAlgn);
table6.AddRow(new Cell[] { new Cell(item.Caption, font),
new Cell(item.Print(wm).Split(new char[] { '|' })[0], font) });
}
table2.Draw(e, leftMarginBelow3, belowTop);
table6.Draw(e, leftMarginBelow3, belowTop);
///
@@ -16,9 +16,6 @@ namespace Results.Output.Printers.OnePerMeter
{
public class OnePerMeterPrintDocument : Common.Printers.PrintersCommon
{
const float GapBetweenTableColumns = 10;
const float GapBetweenCommonColumns = 10;
static QrEncoder encoder = new QrEncoder();
/// Size of the printed area without margins, after taking into account 'pageOrientation'
@@ -33,39 +30,39 @@ namespace Results.Output.Printers.OnePerMeter
readonly int spacingOne;
readonly int spacingOne4Header;
float titleHeight;
/// <summary>
/// Property variable for the Font the user wishes to use
/// </summary>
Font titleFont;
Font headerFont;
Font font;
Font footerFont;
///
/// Data to print
///
Results.Entities.Batch batch;
OnePerMeterPrinterCfg cfg;
Results.Entities.WaterMeter wm;
readonly Font titleFont;
readonly Font headerFont;
readonly Font font;
readonly Font footerFont;
///
/// Items to print
///
string header;
IList<WMeterRsltItemSpec> commonItems1;
IList<WMeterRsltItemSpec> commonItems2;
IList<WMeterRsltItemSpec> commonItems3;
IList<WMeterRsltItemSpec> testItems;
IList<WMeterRsltItemSpec> testItems2;
IList<WMeterRsltItemSpec> belowItems1;
IList<WMeterRsltItemSpec> belowItems2;
IList<WMeterRsltItemSpec> belowItems3;
string footer;
readonly string header;
readonly IList<WMeterRsltItemSpec> commonItems1;
readonly IList<WMeterRsltItemSpec> commonItems2;
readonly IList<WMeterRsltItemSpec> commonItems3;
readonly IList<WMeterRsltItemSpec> testItems;
readonly IList<WMeterRsltItemSpec> testItems2;
readonly IList<WMeterRsltItemSpec> belowItems1;
readonly IList<WMeterRsltItemSpec> belowItems2;
readonly IList<WMeterRsltItemSpec> belowItems3;
readonly string footer;
int nrPages;
///
/// Data to print
///
Results.Entities.Batch batch;
OnePerMeterPrinterCfg cfg;
Results.Entities.WaterMeter wm;
float titleHeight;
int nrPages;
int pageNr; /// Page number to be printed at the bottom of the page
/// <summary>
@@ -84,21 +81,21 @@ namespace Results.Output.Printers.OnePerMeter
leftMargin = cfg.LeftMargin;
header = string.IsNullOrEmpty(cfg.Header) ? string.Empty : cfg.Header.Replace("~", Environment.NewLine);
commonItems1 = Results.WMeterRsltItemSpec.FromStrArray(cfg.CommonItems1);
commonItems2 = Results.WMeterRsltItemSpec.FromStrArray(cfg.CommonItems2);
commonItems3 = Results.WMeterRsltItemSpec.FromStrArray(cfg.CommonItems3);
testItems = Results.WMeterRsltItemSpec.FromStrArray(cfg.TestItems); /// TestID info will be overwritten later on
testItems2 = Results.WMeterRsltItemSpec.FromStrArray(cfg.TestItems2); /// TestID info will be overwritten later on
belowItems1 = Results.WMeterRsltItemSpec.FromStrArray(cfg.BelowItems1);
belowItems2 = Results.WMeterRsltItemSpec.FromStrArray(cfg.BelowItems2);
belowItems3 = Results.WMeterRsltItemSpec.FromStrArray(cfg.BelowItems3);
commonItems1 = WMeterRsltItemSpec.FromStrArray(cfg.CommonItems1);
commonItems2 = WMeterRsltItemSpec.FromStrArray(cfg.CommonItems2);
commonItems3 = WMeterRsltItemSpec.FromStrArray(cfg.CommonItems3);
testItems = WMeterRsltItemSpec.FromStrArray(cfg.TestItems); /// TestID info will be overwritten later on
testItems2 = WMeterRsltItemSpec.FromStrArray(cfg.TestItems2); /// TestID info will be overwritten later on
belowItems1 = WMeterRsltItemSpec.FromStrArray(cfg.BelowItems1);
belowItems2 = WMeterRsltItemSpec.FromStrArray(cfg.BelowItems2);
belowItems3 = WMeterRsltItemSpec.FromStrArray(cfg.BelowItems3);
footer = string.IsNullOrEmpty(cfg.Footer) ? string.Empty : cfg.Footer.Replace("~", Environment.NewLine);
/// Initialize fonts
titleFont = new Font((cfg.TitFntFml != null ? cfg.TitFntFml : "Arial"), (cfg.TitFntSz > 0 ? cfg.TitFntSz : 10), (FontStyle)cfg.TitFntSty);
headerFont = new Font((cfg.HdrFntFml != null ? cfg.HdrFntFml : "Arial"), (cfg.HdrFntSz > 0 ? cfg.HdrFntSz : 10), (FontStyle)cfg.HdrFntSty);
font = new Font((cfg.BodyFntFml != null ? cfg.BodyFntFml : "Arial"), (cfg.BodyFntSz > 0 ? cfg.BodyFntSz : 10), (FontStyle)cfg.BodyFntSty);
footerFont = new Font((cfg.FooterFntFml != null ? cfg.FooterFntFml : "Arial"), (cfg.FooterFntSz > 0 ? cfg.FooterFntSz : 10), (FontStyle)cfg.FooterFntSty);
titleFont = new Font(cfg.TitFntFml ?? "Arial", cfg.TitFntSz > 0 ? cfg.TitFntSz : 10, (FontStyle)cfg.TitFntSty);
headerFont = new Font(cfg.HdrFntFml ?? "Arial", cfg.HdrFntSz > 0 ? cfg.HdrFntSz : 10, (FontStyle)cfg.HdrFntSty);
font = new Font(cfg.BodyFntFml ?? "Arial", cfg.BodyFntSz > 0 ? cfg.BodyFntSz : 10, (FontStyle)cfg.BodyFntSty);
footerFont = new Font(cfg.FooterFntFml ?? "Arial", cfg.FooterFntSz > 0 ? cfg.FooterFntSz : 10, (FontStyle)cfg.FooterFntSty);
/// Set print area size and margins (in dots using 100 dpi)
DefaultPageSettings.Landscape = (cfg.PageOrientation == PageOrientation.Landscape);
@@ -130,7 +127,7 @@ namespace Results.Output.Printers.OnePerMeter
/// </summary>
/// <param name=e></param>
/// <remarks></remarks>
protected override void OnBeginPrint(System.Drawing.Printing.PrintEventArgs e)
protected override void OnBeginPrint(PrintEventArgs e)
{
base.OnBeginPrint(e);
}
@@ -140,7 +137,7 @@ namespace Results.Output.Printers.OnePerMeter
/// </summary>
/// <param name=e></param>
/// <remarks>This provides the print logic for our document</remarks>
protected override void OnPrintPage(System.Drawing.Printing.PrintPageEventArgs e)
protected override void OnPrintPage(PrintPageEventArgs e)
{
/// Run base code
base.OnPrintPage(e);
@@ -223,35 +220,33 @@ namespace Results.Output.Printers.OnePerMeter
float leftMarginCommon2 = leftMargin + printWidth * 0.01f * (cfg.ColW0Pct + cfg.ColW1Pct);
float leftMarginCommon3 = leftMargin + printWidth * 0.01f * (cfg.ColW0Pct + cfg.ColW1Pct + cfg.ColW2Pct);
Alignment[] horizAlgn = new Alignment[] { Alignment.Left, Alignment.Left };
VertAlignment[] vertAlgn = new VertAlignment[] { VertAlignment.Top, VertAlignment.Top };
TableStyle commonTableStyle = new TableStyle { Font = font, MarginX = 5, MarginY = 3 };
Table table1 = new Table(2) { Style = commonTableStyle };
var table1 = new Table(2, commonTableStyle);
foreach (var item in commonItems1)
{
string[] row = new string[] { item.Caption, item.Print(wm).Split(new char[] { '|' })[0] };
table1.AddRow(row, horizAlgn, vertAlgn);
table1.AddRow(new Cell[] { new Cell(item.Caption, font),
new Cell(item.Print(wm).Split(new char[] { '|' })[0], font) });
}
float bodyTop1 = table1.Draw(e, leftMarginCommon1, commonTop);
table1 = new Table(2) { Style = commonTableStyle };
var table2 = new Table(2, commonTableStyle);
foreach (var item in commonItems2)
{
string[] row = new string[] { item.Caption, item.Print(wm).Split(new char[] { '|' })[0] };
table1.AddRow(row, horizAlgn, vertAlgn);
table2.AddRow(new Cell[] { new Cell(item.Caption, font),
new Cell(item.Print(wm).Split(new char[] { '|' })[0], font) });
}
float bodyTop2 = table1.Draw(e, leftMarginCommon2, commonTop);
float bodyTop2 = table2.Draw(e, leftMarginCommon2, commonTop);
table1 = new Table(2) { Style = commonTableStyle };
var table3 = new Table(2, commonTableStyle);
foreach (var item in commonItems3)
{
string[] row = new string[] { item.Caption, item.Print(wm).Split(new char[] { '|' })[0] };
table1.AddRow(row, horizAlgn, vertAlgn);
table3.AddRow(new Cell[] { new Cell(item.Caption, font),
new Cell(item.Print(wm).Split(new char[] { '|' })[0], font) });
}
float bodyTop3 = table1.Draw(e, leftMarginCommon3, commonTop);
float bodyTop3 = table3.Draw(e, leftMarginCommon3, commonTop);
float bodyTop12 = (bodyTop1 > bodyTop2) ? bodyTop1 : bodyTop2;
tableTop = (bodyTop12 > bodyTop3) ? bodyTop12 : bodyTop3; /// Max. of all three bodyTop-s
@@ -331,35 +326,33 @@ namespace Results.Output.Printers.OnePerMeter
float leftMarginBelow2 = leftMargin + printWidth * 0.01f * (cfg.BelowW0Pct + cfg.BelowW1Pct);
float leftMarginBelow3 = leftMargin + printWidth * 0.01f * (cfg.BelowW0Pct + cfg.BelowW1Pct + cfg.BelowW2Pct);
Alignment[] horizAlgn = new Alignment[] { Alignment.Left, Alignment.Left };
VertAlignment[] vertAlgn = new VertAlignment[] { VertAlignment.Top, VertAlignment.Top };
TableStyle commonTableStyle = new TableStyle { Font = font, MarginX = 5, MarginY = 3 };
Table table2 = new Table(2) { Style = commonTableStyle };
var table4 = new Table(2, commonTableStyle);
foreach (var item in belowItems1)
{
string[] row = new string[] { item.Caption, item.Print(wm).Split(new char[] { '|' })[0] };
table2.AddRow(row, horizAlgn, vertAlgn);
table4.AddRow(new Cell[] { new Cell(item.Caption, font),
new Cell(item.Print(wm).Split(new char[] { '|' })[0], font) });
}
table2.Draw(e, leftMarginBelow1, belowTop);
table4.Draw(e, leftMarginBelow1, belowTop);
table2 = new Table(2) { Style = commonTableStyle };
var table5 = new Table(2, commonTableStyle);
foreach (var item in belowItems2)
{
string[] row = new string[] { item.Caption, item.Print(wm).Split(new char[] { '|' })[0] };
table2.AddRow(row, horizAlgn, vertAlgn);
table5.AddRow(new Cell[] { new Cell(item.Caption, font),
new Cell(item.Print(wm).Split(new char[] { '|' })[0], font) });
}
table2.Draw(e, leftMarginBelow2, belowTop);
table5.Draw(e, leftMarginBelow2, belowTop);
table2 = new Table(2) { Style = commonTableStyle };
var table6 = new Table(2, commonTableStyle);
foreach (var item in belowItems3)
{
string[] row = new string[] { item.Caption, item.Print(wm).Split(new char[] { '|' })[0] };
table2.AddRow(row, horizAlgn, vertAlgn);
table6.AddRow(new Cell[] { new Cell(item.Caption, font),
new Cell(item.Print(wm).Split(new char[] { '|' })[0], font) });
}
table2.Draw(e, leftMarginBelow3, belowTop);
table6.Draw(e, leftMarginBelow3, belowTop);
///
@@ -35,7 +35,6 @@ namespace Results.Output.Printers.OnePerMeter
public string[] CommonItems3;
public Common.TableForm Form;
public string[] TestItems;
public Common.TableForm Form2;
public string[] TestItems2;
public int BelowW0Pct;
public int BelowW1Pct;
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2017 Sensus Metering Systems
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -7,8 +7,6 @@ using System.Drawing;
using System.Drawing.Printing;
using System.IO;
using Common;
using Config.Entities;
using Results;
using Results.Resources;
namespace Results.Output.Printers.Zapiska
@@ -60,15 +58,15 @@ namespace Results.Output.Printers.Zapiska
///
/// Items to print
///
string header;
IList<WMeterRsltItemSpec> commonItems1;
IList<WMeterRsltItemSpec> commonItems2;
IList<WMeterRsltItemSpec> commonItems3;
IList<WMeterRsltItemSpec> selectedItems;
IList<WMeterRsltItemSpec> belowItems1;
IList<WMeterRsltItemSpec> belowItems2;
IList<WMeterRsltItemSpec> belowItems3;
string footer;
readonly string header;
readonly IList<WMeterRsltItemSpec> commonItems1;
readonly IList<WMeterRsltItemSpec> commonItems2;
readonly IList<WMeterRsltItemSpec> commonItems3;
readonly IList<WMeterRsltItemSpec> selectedItems;
readonly IList<WMeterRsltItemSpec> belowItems1;
readonly IList<WMeterRsltItemSpec> belowItems2;
readonly IList<WMeterRsltItemSpec> belowItems3;
readonly string footer;
///
/// Layout and status
@@ -94,20 +92,20 @@ namespace Results.Output.Printers.Zapiska
leftMargin = cfg.LeftMargin;
header = string.IsNullOrEmpty(cfg.Header) ? string.Empty : cfg.Header.Replace("~", Environment.NewLine);
commonItems1 = Results.WMeterRsltItemSpec.FromStrArray(cfg.CommonItems1);
commonItems2 = Results.WMeterRsltItemSpec.FromStrArray(cfg.CommonItems2);
commonItems3 = Results.WMeterRsltItemSpec.FromStrArray(cfg.CommonItems3);
selectedItems = Results.WMeterRsltItemSpec.FromStrArray(cfg.SelectedItems);
belowItems1 = Results.WMeterRsltItemSpec.FromStrArray(cfg.BelowItems1);
belowItems2 = Results.WMeterRsltItemSpec.FromStrArray(cfg.BelowItems2);
belowItems3 = Results.WMeterRsltItemSpec.FromStrArray(cfg.BelowItems3);
commonItems1 = WMeterRsltItemSpec.FromStrArray(cfg.CommonItems1);
commonItems2 = WMeterRsltItemSpec.FromStrArray(cfg.CommonItems2);
commonItems3 = WMeterRsltItemSpec.FromStrArray(cfg.CommonItems3);
selectedItems = WMeterRsltItemSpec.FromStrArray(cfg.SelectedItems);
belowItems1 = WMeterRsltItemSpec.FromStrArray(cfg.BelowItems1);
belowItems2 = WMeterRsltItemSpec.FromStrArray(cfg.BelowItems2);
belowItems3 = WMeterRsltItemSpec.FromStrArray(cfg.BelowItems3);
footer = string.IsNullOrEmpty(cfg.Footer) ? string.Empty : cfg.Footer.Replace("~", Environment.NewLine);
/// Initialize fonts
titleFont = new Font((cfg.TitFntFml != null ? cfg.TitFntFml : "Arial"), (cfg.TitFntSz > 0 ? cfg.TitFntSz : 10), (FontStyle)cfg.TitFntSty);
headerFont = new Font((cfg.HdrFntFml != null ? cfg.HdrFntFml : "Arial"), (cfg.HdrFntSz > 0 ? cfg.HdrFntSz : 10), (FontStyle)cfg.HdrFntSty);
font = new Font((cfg.BodyFntFml != null ? cfg.BodyFntFml : "Arial"), (cfg.BodyFntSz > 0 ? cfg.BodyFntSz : 10), (FontStyle)cfg.BodyFntSty);
footerFont = new Font((cfg.FooterFntFml != null ? cfg.FooterFntFml : "Arial"), (cfg.FooterFntSz > 0 ? cfg.FooterFntSz : 10), (FontStyle)cfg.FooterFntSty);
titleFont = new Font(cfg.TitFntFml ?? "Arial", cfg.TitFntSz > 0 ? cfg.TitFntSz : 10, (FontStyle)cfg.TitFntSty);
headerFont = new Font(cfg.HdrFntFml ?? "Arial", cfg.HdrFntSz > 0 ? cfg.HdrFntSz : 10, (FontStyle)cfg.HdrFntSty);
font = new Font(cfg.BodyFntFml ?? "Arial", cfg.BodyFntSz > 0 ? cfg.BodyFntSz : 10, (FontStyle)cfg.BodyFntSty);
footerFont = new Font(cfg.FooterFntFml ?? "Arial", cfg.FooterFntSz > 0 ? cfg.FooterFntSz : 10, (FontStyle)cfg.FooterFntSty);
/// Set print area size and margins (in dots using 100 dpi)
DefaultPageSettings.Landscape = (cfg.PageOrientation == PageOrientation.Landscape);
@@ -142,7 +140,7 @@ namespace Results.Output.Printers.Zapiska
/// </summary>
/// <param name=e></param>
/// <remarks></remarks>
protected override void OnBeginPrint(System.Drawing.Printing.PrintEventArgs e)
protected override void OnBeginPrint(PrintEventArgs e)
{
base.OnBeginPrint(e);
}
@@ -152,7 +150,7 @@ namespace Results.Output.Printers.Zapiska
/// </summary>
/// <param name=e></param>
/// <remarks>This provides the print logic for our document</remarks>
protected override void OnPrintPage(System.Drawing.Printing.PrintPageEventArgs e)
protected override void OnPrintPage(PrintPageEventArgs e)
{
/// Run base code
base.OnPrintPage(e);
@@ -344,8 +342,7 @@ namespace Results.Output.Printers.Zapiska
/// <param name="printedWMNr">Number of the water meter printed</param>
/// <param name="top">Top coordinate of watermeter data</param>
/// <returns>The height of the printed section</returns>
float PrintWMs(System.Drawing.Printing.PrintPageEventArgs e,
IList<Results.Entities.WaterMeter> wms, float top)
float PrintWMs(PrintPageEventArgs e, IList<Results.Entities.WaterMeter> wms, float top)
{
///
/// Prepare table content
@@ -384,7 +381,7 @@ namespace Results.Output.Printers.Zapiska
}
float DrawTable(System.Drawing.Printing.PrintPageEventArgs e, float left, float top, string[] header, IList<string[]> rows, Alignment[] alignment)
float DrawTable(PrintPageEventArgs e, float left, float top, string[] header, IList<string[]> rows, Alignment[] alignment)
{
int tblColumnsCount = header.Length;
@@ -462,7 +459,7 @@ namespace Results.Output.Printers.Zapiska
static Font lastFont = null;
static float lastSpacing = 0;
SizeF Measure(System.Drawing.Printing.PrintPageEventArgs e, string paragraph, Font font)
SizeF Measure(PrintPageEventArgs e, string paragraph, Font font)
{
if (font != lastFont)
{
@@ -482,7 +479,7 @@ namespace Results.Output.Printers.Zapiska
}
void PrintAt(System.Drawing.Printing.PrintPageEventArgs e, float x, float y, float width, string paragraph, Font font, Alignment alignment)
void PrintAt(PrintPageEventArgs e, float x, float y, float width, string paragraph, Font font, Alignment alignment)
{
SizeF size = Measure(e, paragraph, font);
+1 -1
View File
@@ -571,7 +571,7 @@ namespace Results.Output
PruefungsNrLog = luID, /// Identification of a flow
QBezeichnungLog = fullTestNameWoPart, /// Flow name in Oracle database
Range = range,
Flow = (range == Range.R100_110) ? test.Qfrom : (range == Range.R90_100) ? test.Qto : (test.Qfrom + test.Qto) / 2,
Flow = (range == Range.R100_110) ? test.QfromM3ph() : (range == Range.R90_100) ? test.QtoM3ph() : (test.QfromM3ph() + test.QtoM3ph()) / 2,
TestTime = (int)Math.Round(test.TestTime),
ErrLimLoFromDB = test.ErrLimLo,
ErrLimHiFromDB = test.ErrLimHi,
+329 -259
View File
@@ -1,12 +1,11 @@
///
/// Copyright (c) 2018 Sensus Slovensko a.s.
/// Copyright (c) 2018-2023 Sensus Slovensko a.s.
///
using System;
using Common;
using Results.Resources;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Printing;
using Common;
using Config.Entities;
namespace Results.Output
{
@@ -34,35 +33,56 @@ namespace Results.Output
public class Table
{
public readonly int ColumnsCount;
public readonly string AutoTestParam;
public int RowsCount { get { return Rows.Count; } }
public readonly int ColumnsCount; /// Number of columns including the headers
public readonly string AutoTestParam; /// Reserved for future use
public readonly IList<Cell[]> Cells; /// Table content: List of rows, each row is an array of cells
public readonly TableStyle Style;
public readonly IList<string[]> Rows;
public readonly IList<Alignment[]> HorizAlignments;
public readonly IList<VertAlignment[]> VertAlignments;
public TableStyle Style;
/// <summary>
/// Calculated by Measure(e)
/// </summary>
float width;
float height;
float[] columnWidth; /// Widths of columns of cells
float[] columnPos; /// X-coordinate of positions of texts in columns (MarginX is left empty)
float[] vertLinePos; /// X-coordinate of positions of vertical lines
float[] rowHeight; /// Heights of rows of cells
float[] rowPos; /// Y-coordinate of positions of texts in columns (MarginY is left empty)
float[] horizLinePos; /// Y-coordinate of positions of horizontal lines
public int RowsCount /// Number of rows including the headers
{
get { return Cells.Count; }
}
public Table(int columnsCount, string autoTestParam = null)
/// <summary>
/// Constructor
/// </summary>
/// <param name="columnsCount">Number of columns</param>
/// <param name="autoTestParam">Reserved for future use</param>
public Table(int columnsCount, TableStyle style, string autoTestParam = null)
{
this.ColumnsCount = columnsCount;
this.Style = style;
this.AutoTestParam = autoTestParam;
Rows = new List<string[]>();
HorizAlignments = new List<Alignment[]>();
VertAlignments = new List<VertAlignment[]>();
Style = new TableStyle();
Cells = new List<Cell[]>();
columnWidth = null;
}
public void AddRow(string[] texts, Alignment[] horizAlignment, VertAlignment[] vertAlignemnt)
public void Clear()
{
Rows.Add(texts);
HorizAlignments.Add(horizAlignment);
VertAlignments.Add(vertAlignemnt);
Cells.Clear();
columnWidth = null;
}
public void AddRow(Cell[] rowOfCells)
{
if (rowOfCells != null && rowOfCells.Length == ColumnsCount)
{
Cells.Add(rowOfCells);
}
}
/// <summary>
/// Returns true when table has either rows or columns count == 0
@@ -70,235 +90,217 @@ namespace Results.Output
/// <returns>true when empty</returns>
public bool IsEmpty()
{
return (Rows == null || RowsCount == 0 || Rows[0] == null || Rows[0].Length == 0);
return RowsCount == 0 || ColumnsCount == 0;
}
public SizeF Measure(System.Drawing.Printing.PrintPageEventArgs e)
/// <summary>
/// Calculates table dimensions. Inputs: ColumnsCount, Cells, Style
/// </summary>
/// <param name="e">PrintPageEventArgs passed to Measure(...)</param>
/// <returns>Table width and height (SizeF)</returns>
public SizeF Measure(PrintPageEventArgs e)
{
SizeF retVal = new SizeF(0, 0);
if (IsEmpty()) return new SizeF(0, 0); /// Empty table => zero Size
if (IsEmpty()) return retVal; /// Empty table => zero Size
columnWidth = new float[ColumnsCount];
columnPos = new float[ColumnsCount];
vertLinePos = new float[ColumnsCount + 1];
float[] columnWidth = new float[ColumnsCount];
float[] rowHeight = new float[RowsCount];
rowHeight = new float[RowsCount];
rowPos = new float[RowsCount];
horizLinePos = new float[RowsCount + 1];
width = 0;
height = 0;
vertLinePos[0] = 0;
horizLinePos[0] = 0;
///
/// Measure table column widths and header height
/// Measure table column widths, vertical line and text positions, etc.
///
for (int colIx = 0; colIx < ColumnsCount; colIx++)
{
bool hasLineToLeft = false;
for (int rowIx = 0; rowIx < RowsCount; rowIx++)
{
if (Rows[rowIx] == null)
{
/// Separator row -> do nothing
}
else
{
bool isHeader = (colIx < Style.LeftHeadersCount) || (rowIx < Style.TopHeadersCount);
SizeF size = Common.Printers.PrintersCommon.Measure(e, Rows[rowIx][colIx], isHeader ? Style.HeaderFont : Style.Font);
if (size.Width > columnWidth[colIx]) columnWidth[colIx] = size.Width;
if (size.Height > rowHeight[rowIx]) rowHeight[rowIx] = size.Height;
}
Cells[rowIx][colIx].Measure(e);
float cellWidth = (Style.ColumnWidths != null && Style.ColumnWidths.Length > colIx)
? Style.ColumnWidths[colIx]
: Cells[rowIx][colIx].Size.Width;
if (cellWidth > columnWidth[colIx]) columnWidth[colIx] = cellWidth;
if (Cells[rowIx][colIx].LeftBorder) hasLineToLeft = true;
}
bool hasLineToTheLeft = (Style.VertLines == TableLines.All)
|| ((Style.VertLines == TableLines.FirstAndLast) && (colIx == 0))
|| ((Style.VertLines == TableLines.FirstSecondAndLast) && (colIx <= 1));
retVal.Width += columnWidth[colIx] + (hasLineToTheLeft ? (Style.LineWidth + Style.MarginX) : 0) + Style.MarginX;
}
for (int rowIx = 0; rowIx < RowsCount; rowIx++)
{
if (Rows[rowIx] == null)
{
/// Separator row -> do nothing
}
else
{
bool hasLineAbove = (Style.HorizLines == TableLines.All)
|| ((Style.HorizLines == TableLines.FirstAndLast) && (rowIx == 0))
|| ((Style.HorizLines == TableLines.FirstSecondAndLast) && (rowIx <= 1))
|| ((rowIx >= 1) && (Rows[rowIx - 1] == null));
retVal.Height += rowHeight[rowIx] + (hasLineAbove ? (Style.LineWidth + Style.MarginY) : 0) + Style.MarginY;
}
}
if (Style.VertLines == TableLines.None) retVal.Width -= Style.MarginX;
if (Style.HorizLines == TableLines.None) retVal.Height -= Style.MarginY;
return retVal;
}
public float Draw(System.Drawing.Printing.PrintPageEventArgs e, float left, float top)
{
if (IsEmpty()) return top; /// Empty table
int tblColumnsCount = Rows[0].Length;
float[] columnWidth = new float[tblColumnsCount];
float[] columnPos = new float[tblColumnsCount];
float[] vertLinePos = new float[tblColumnsCount + 1];
float[] rowHeight = new float[RowsCount];
float[] rowPos = new float[RowsCount];
float[] horizLinePos = new float[RowsCount + 1];
///
/// Measure table column widths and header height
///
vertLinePos[0] = left;
horizLinePos[0] = top;
for (int colIx = 0; colIx < tblColumnsCount; colIx++)
{
for (int rowIx = 0; rowIx < RowsCount; rowIx++)
{
if (Rows[rowIx] != null)
{
/// In not a separator line
bool isHeader = (colIx < Style.LeftHeadersCount) || (rowIx < Style.TopHeadersCount);
SizeF size = Common.Printers.PrintersCommon.Measure(e, Rows[rowIx][colIx], isHeader ? Style.HeaderFont : Style.Font);
if ((Style.ColumnWidths != null) && (Style.ColumnWidths.Length > colIx))
{
size.Width = Style.ColumnWidths[colIx]; /// Override measurement if column width is defined
}
if (size.Width > columnWidth[colIx]) columnWidth[colIx] = size.Width;
if (size.Height > rowHeight[rowIx]) rowHeight[rowIx] = size.Height;
}
else
{
/// Separator line -> do nothing
rowHeight[rowIx] = 0;
}
}
bool hasLineToTheLeft = (Style.VertLines == TableLines.All)
|| ((Style.VertLines == TableLines.FirstAndLast) && (colIx == 0))
|| ((Style.VertLines == TableLines.FirstSecondAndLast) && (colIx <= 1));
columnPos[colIx] = vertLinePos[colIx] + (hasLineToTheLeft ? (Style.LineWidth + Style.MarginX) : 0);
width += columnWidth[colIx] + (hasLineToLeft ? (Style.LineWidth + Style.MarginX) : 0) + Style.MarginX;
columnPos[colIx] = vertLinePos[colIx] + (hasLineToLeft ? (Style.LineWidth + Style.MarginX) : 0);
vertLinePos[colIx + 1] = columnPos[colIx] + columnWidth[colIx] + Style.MarginX;
}
///
/// Measure table row heights, horixontal line and text positions, etc.
///
for (int rowIx = 0; rowIx < RowsCount; rowIx++)
{
if (Rows[rowIx] != null)
{
/// In not a separator line
bool hasLineAbove = (Style.HorizLines == TableLines.All)
|| ((Style.HorizLines == TableLines.FirstAndLast) && (rowIx == 0))
|| ((Style.HorizLines == TableLines.FirstSecondAndLast) && (rowIx <= 1))
|| ((rowIx >= 1) && (Rows[rowIx - 1] == null));
bool hasLineAbove = false;
rowPos[rowIx] = horizLinePos[rowIx] + (hasLineAbove ? Style.MarginY : 0);
horizLinePos[rowIx + 1] = rowPos[rowIx] + rowHeight[rowIx] + Style.LineWidth + Style.MarginY;
}
else if (rowIx > 0)
for (int colIx = 0; colIx < ColumnsCount; colIx++)
{
/// Separator line
rowPos[rowIx] = rowPos[rowIx - 1];
horizLinePos[rowIx + 1] = horizLinePos[rowIx];
if (Cells[rowIx][colIx].Size.Height > rowHeight[rowIx]) rowHeight[rowIx] = Cells[rowIx][colIx].Size.Height;
if (Cells[rowIx][colIx].TopBorder) hasLineAbove = true;
}
height += rowHeight[rowIx] + (hasLineAbove ? (Style.LineWidth + Style.MarginY) : 0) + Style.MarginY;
rowPos[rowIx] = horizLinePos[rowIx] + (hasLineAbove ? Style.MarginY : 0);
horizLinePos[rowIx + 1] = rowPos[rowIx] + rowHeight[rowIx] + Style.LineWidth + Style.MarginY;
}
/// Horizontal lines
float tableLeftX = left;
float tableRightX = vertLinePos[tblColumnsCount] + Style.LineWidth;
if (Style.HorizLines != TableLines.None)
if (Style.VertLines == TableLines.None) width -= Style.MarginX;
if (Style.HorizLines == TableLines.None) height -= Style.MarginY;
return new SizeF(width, height);
}
/// <summary>
/// Prints a table defined by ColumnsCount, Rows, HorizAlignments, VertAlignments and Style
/// </summary>
/// <param name="e">PrintPageEventArgs passed to Measure(.), DrawLine(.) and PrintAt(.)</param>
/// <param name="left">X-coordinate of the top-left corner of the table</param>
/// <param name="top">Y-coordinate of the top-left corner of the table</param>
/// <returns>Y-coordinate for a next item following this table on a page</returns>
public float Draw(PrintPageEventArgs e, float left, float top)
{
if (IsEmpty()) return top; /// Empty table or Mesure(e) have not been called yet
if (columnWidth == null) Measure(e);
for (int rowIx = 0; rowIx <= RowsCount; rowIx++)
{
for (int rowIx = 0; rowIx <= RowsCount; rowIx++)
for (int colIx = 0; colIx <= ColumnsCount; colIx++)
{
if (Style.HorizLines == TableLines.All || rowIx == 0
|| rowIx == RowsCount
|| (Style.HorizLines == TableLines.FirstSecondAndLast && rowIx == 1)
|| ((rowIx >= 1) && (Rows[rowIx - 1] == null)))
///
/// Draw horizontal line
///
if (colIx < ColumnsCount && Style.HorizLines != TableLines.None &&
(rowIx == 0 || rowIx == RowsCount || Cells[rowIx][colIx].TopBorder))
{
e.Graphics.DrawLine(new Pen(Color.Black, Style.LineWidth), new PointF(tableLeftX, horizLinePos[rowIx] + Style.LineWidth / 2), new PointF(tableRightX, horizLinePos[rowIx] + Style.LineWidth / 2));
e.Graphics.DrawLine(new Pen(Color.Black, Style.LineWidth),
new PointF(left + vertLinePos[colIx], top + horizLinePos[rowIx] + Style.LineWidth / 2),
new PointF(left + vertLinePos[colIx + 1] + Style.LineWidth, top + horizLinePos[rowIx] + Style.LineWidth / 2));
}
///
/// Draw vertical line
///
if (rowIx < RowsCount && Style.VertLines != TableLines.None &&
(colIx == 0 || colIx == ColumnsCount || Cells[rowIx][colIx].LeftBorder))
{
e.Graphics.DrawLine(new Pen(Color.Black, Style.LineWidth),
new PointF(left + vertLinePos[colIx] + Style.LineWidth / 2, top + horizLinePos[rowIx]),
new PointF(left + vertLinePos[colIx] + Style.LineWidth / 2, top + horizLinePos[rowIx + 1] + Style.LineWidth));
}
///
/// Draw table item (a text)
///
if (rowIx < RowsCount && colIx < ColumnsCount) /// Make sure Cells[][] indices are within range
{
if (!Cells[rowIx][colIx].BottomMerge && !Cells[rowIx][colIx].RightMerge)
{
/// This is not a cell that is merged with a subsequent cell => print content
/// Calculate X-coordinate taking into account cell merging
float mergedColPos = columnPos[colIx];
int mergedCellsCount = 1;
for (int colIx2 = colIx - 1; colIx2 >= 0 && Cells[rowIx][colIx2].RightMerge; colIx2--)
{
mergedColPos += columnPos[colIx2];
mergedCellsCount++;
}
mergedColPos /= mergedCellsCount;
/// Calculate Y-coordinate taking into account cell merging
float mergedRowPos = rowPos[rowIx];
mergedCellsCount = 1;
for (int rowIx2 = rowIx - 1; rowIx2 >= 0 && Cells[rowIx2][colIx].BottomMerge; rowIx2--)
{
mergedRowPos += rowPos[rowIx2];
mergedCellsCount++;
}
mergedRowPos /= mergedCellsCount;
/// Print the text at the calculated position
Common.Printers.PrintersCommon.PrintAt(e, Cells[rowIx][colIx].Text,
Cells[rowIx][colIx].Font,
left + mergedColPos,
top + mergedRowPos,
columnWidth[colIx],
rowHeight[rowIx],
Cells[rowIx][colIx].HorizAlignment,
Cells[rowIx][colIx].VertAlignment);
}
}
}
}
/// Vertical lines
float tableTopY = top;
float tableBottomY = horizLinePos[RowsCount] + Style.LineWidth;
if (Style.VertLines != TableLines.None)
{
for (int colIx = 0; colIx <= tblColumnsCount; colIx++)
{
if (Style.VertLines == TableLines.All || colIx == 0 || colIx == ColumnsCount || (Style.VertLines == TableLines.FirstSecondAndLast && colIx == 1))
{
e.Graphics.DrawLine(new Pen(Color.Black, Style.LineWidth), new PointF(vertLinePos[colIx] + Style.LineWidth / 2, tableTopY), new PointF(vertLinePos[colIx] + Style.LineWidth / 2, tableBottomY));
}
}
}
///
/// Draw table body
///
for (int rowIndex = 0; rowIndex < RowsCount; rowIndex++)
{
string[] oneTableRow = Rows[rowIndex];
if (oneTableRow != null)
{
Alignment[] horizAlignment = HorizAlignments[(RowsCount > rowIndex) ? rowIndex : 0];
VertAlignment[] vertAlignment = VertAlignments[(RowsCount > rowIndex) ? rowIndex : 0];
for (int colIndex = 0; colIndex < tblColumnsCount; colIndex++)
{
bool isHeader = (colIndex < Style.LeftHeadersCount) || (rowIndex < Style.TopHeadersCount);
Common.Printers.PrintersCommon.PrintAt(e, oneTableRow[colIndex],
isHeader ? Style.HeaderFont : Style.Font,
columnPos[colIndex],
rowPos[rowIndex],
columnWidth[colIndex],
rowHeight[rowIndex],
horizAlignment[colIndex],
vertAlignment[colIndex]);
}
}
}
return tableBottomY;
return top + horizLinePos[RowsCount] + Style.LineWidth;
}
public static Table Create_TestsAreRows(Results.Entities.WaterMeter wm, IList<WMeterRsltItemSpec> items, TableStyle style, string autoTestParam = null)
public static Table Create_TestsAreRows(Entities.WaterMeter wm, IList<WMeterRsltItemSpec> items, TableStyle style, string autoTestParam = null)
{
/// Top row contains column captions
/// Select results to be printed
var mtrTestRslts = string.IsNullOrEmpty(autoTestParam) ? wm.RegularMeterTestRslts() : wm.AutoMeterTestRslts(autoTestParam);
Table table = new Table(items.Count);
table.Style = style;
string[] tableHeader = new string[table.ColumnsCount];
Alignment[] horizAlignment = new Alignment[table.ColumnsCount];
VertAlignment[] vertAlignment = new VertAlignment[table.ColumnsCount];
for (int i = 0; i < table.ColumnsCount; i++)
{
tableHeader[i] = items[i].Caption;
horizAlignment[i] = Alignment.Center;
vertAlignment[i] = VertAlignment.Middle;
}
table.AddRow(tableHeader, horizAlignment, vertAlignment);
WMeterRsltItemSpec.TableRowNr = 1;
foreach (var mtr in string.IsNullOrEmpty(autoTestParam) ? wm.RegularMeterTestRslts() : wm.AutoMeterTestRslts(autoTestParam))
///
/// Calculate rows count
///
int rowsCount = 1; /// Top row contains item captions
foreach (var mtr in mtrTestRslts)
{
if (mtr != null && mtr.IsPilotRslt() && mtr.Publish() == Publish.Always)
{
string[] oneTableRow = new string[table.ColumnsCount];
horizAlignment = new Alignment[table.ColumnsCount];
vertAlignment = new VertAlignment[table.ColumnsCount];
rowsCount++; /// One additional row for each test to be published
}
}
for (int i = 0; i < table.ColumnsCount; i++)
Table table = new Table(items.Count, style);
///
/// Top row contains column captions
///
var header = new Cell[items.Count];
for (int i = 0; i < items.Count; i++)
{
header[i] = new Cell(items[i].Caption, style.HeaderFont, Alignment.Center, VertAlignment.Middle, true, true);
}
table.AddRow(header);
///
/// Create and add a row for each test
///
WMeterRsltItemSpec.TableRowNr = 1;
foreach (var mtr in mtrTestRslts)
{
if (mtr != null && mtr.IsPilotRslt() && mtr.Publish() == Publish.Always)
{
var aTableRow = new Cell[items.Count];
for (int i = 0; i < items.Count; i++)
{
WMeterRsltItemSpec.TableColumnNr = i + 1;
oneTableRow[i] = items[i].Print(wm, mtr.Name()).Split(new char[] { '|' })[0];
horizAlignment[i] = items[i].Alignment;
vertAlignment[i] = VertAlignment.Middle;
string text = items[i].Print(wm, mtr.Name()).Split(new char[] { '|' })[0];
aTableRow[i] = new Cell(text,
style.Font,
items[i].Alignment,
VertAlignment.Middle,
(WMeterRsltItemSpec.TableRowNr == 1) || !items[i].Merge,
true,
(WMeterRsltItemSpec.TableRowNr != rowsCount - 1) && items[i].Merge,
false);
}
table.AddRow(oneTableRow, horizAlignment, vertAlignment);
table.AddRow(aTableRow);
WMeterRsltItemSpec.TableRowNr++;
}
@@ -307,16 +309,25 @@ namespace Results.Output
return table;
}
public static Table Create_TestsAreColumns(Results.Entities.WaterMeter wm, IList<WMeterRsltItemSpec> items, TableStyle style, string autoTestParam = null)
/// <summary>
/// Create a table where tests are in columns.
/// Left column contains item (or row) captions.
/// </summary>
/// <param name="wm">Water meter</param>
/// <param name="items">Result items</param>
/// <param name="style">Table style</param>
/// <param name="autoTestParam">Auto test parameter</param>
/// <returns>Table to be printed</returns>
public static Table Create_TestsAreColumns(Entities.WaterMeter wm, IList<WMeterRsltItemSpec> items, TableStyle style, string autoTestParam = null)
{
/// Left column contains row captions
/// Select results to be printed
var mtrTestRslts = string.IsNullOrEmpty(autoTestParam) ? wm.RegularMeterTestRslts() : wm.AutoMeterTestRslts(autoTestParam);
///
/// Calculate columns count
///
int columnsCount = 1; /// Left column contains item caption
foreach (var mtr in string.IsNullOrEmpty(autoTestParam) ? wm.RegularMeterTestRslts() : wm.AutoMeterTestRslts(autoTestParam))
int columnsCount = 1; /// Left column contains item captions
foreach (var mtr in mtrTestRslts)
{
if (mtr != null && mtr.IsPilotRslt() && mtr.Publish() == Publish.Always)
{
@@ -324,39 +335,65 @@ namespace Results.Output
}
}
Table table = new Table(columnsCount);
table.Style = style;
Table table = new Table(columnsCount, style);
///
/// Table content
///
bool separatorLineSignalled = false;
WMeterRsltItemSpec.TableRowNr = 1;
for (int i = 0; i < items.Count; i++)
{
string[] oneTableRow = new string[columnsCount];
Alignment[] horizAlignment = new Alignment[columnsCount];
VertAlignment[] vertAlignment = new VertAlignment[columnsCount];
if (items[i].Uid == (int)ItemID.Separator)
{
/// Insert a separator line (topBorder = true for all row cells)
separatorLineSignalled = true;
continue;
}
oneTableRow[0] = items[i].Caption;
horizAlignment[0] = Alignment.Center;
vertAlignment[0] = VertAlignment.Middle;
bool topBorder = (style.HorizLines == TableLines.All)
|| (style.HorizLines == TableLines.FirstAndLast && i == 0)
|| (style.HorizLines == TableLines.FirstSecondAndLast && i <= 1)
|| separatorLineSignalled;
separatorLineSignalled = false;
Cell[] aTableRow = new Cell[columnsCount];
aTableRow[0] = new Cell(items[i].Caption,
style.HeaderFont,
Alignment.Center,
VertAlignment.Middle,
topBorder,
style.VertLines != TableLines.None);
WMeterRsltItemSpec.TableColumnNr = 1;
foreach (var mtr in string.IsNullOrEmpty(autoTestParam) ? wm.RegularMeterTestRslts() : wm.AutoMeterTestRslts(autoTestParam))
for (int j = 0; j < mtrTestRslts.Count; j++)
{
var mtr = mtrTestRslts[j];
bool leftBorder = (style.VertLines == TableLines.All && (!items[i].Merge || j == 0))
|| (style.VertLines == TableLines.FirstSecondAndLast && j == 0);
if (mtr != null && mtr.IsPilotRslt() && mtr.Publish() == Publish.Always)
{
/// Strip color information
oneTableRow[WMeterRsltItemSpec.TableColumnNr] =
items[i].Print(wm, mtr.Name()).Split(new char[] { '|' })[0];
horizAlignment[WMeterRsltItemSpec.TableColumnNr] = items[i].Alignment;
vertAlignment[WMeterRsltItemSpec.TableColumnNr] = VertAlignment.Middle;
/// Get a text, strip color information
string text = items[i].Print(wm, mtr.Name()).Split(new char[] { '|' })[0];
aTableRow[WMeterRsltItemSpec.TableColumnNr] = new Cell(text,
style.Font,
items[i].Alignment,
VertAlignment.Middle,
topBorder,
leftBorder,
false,
(WMeterRsltItemSpec.TableColumnNr + 1 != columnsCount) && items[i].Merge);
WMeterRsltItemSpec.TableColumnNr++;
}
}
table.AddRow(oneTableRow, horizAlignment, vertAlignment);
table.AddRow(aTableRow);
WMeterRsltItemSpec.TableRowNr++;
}
@@ -365,15 +402,26 @@ namespace Results.Output
}
public static Table Create_TestsAreColumnsPL(Results.Entities.WaterMeter wm, IList<WMeterRsltItemSpec> items, TableStyle style, string autoTestParam = null)
/// <summary>
/// Create a table where tests are in columns.
/// Two leftmost columns contains item (or row) captions and units.
/// Separator lines can be inserted between rows.
/// </summary>
/// <param name="wm">Water meter</param>
/// <param name="items">Result items</param>
/// <param name="style">Table style</param>
/// <param name="autoTestParam">Auto test parameter</param>
/// <returns>Table to be printed</returns>
public static Table Create_TestsAreColumnsPL(Entities.WaterMeter wm, IList<WMeterRsltItemSpec> items, TableStyle style, string autoTestParam = null)
{
/// Left column contains row captions
/// Select results to be printed
var mtrTestRslts = string.IsNullOrEmpty(autoTestParam) ? wm.RegularMeterTestRslts() : wm.AutoMeterTestRslts(autoTestParam);
///
/// Calculate columns count
///
int columnsCount = 2; /// Left two columns contain item caption and units
foreach (var mtr in string.IsNullOrEmpty(autoTestParam) ? wm.RegularMeterTestRslts() : wm.AutoMeterTestRslts(autoTestParam))
int columnsCount = 2; /// Two left columns contain item caption and unit
foreach (var mtr in mtrTestRslts)
{
if (mtr != null && mtr.IsPilotRslt() && mtr.Publish() == Publish.Always)
{
@@ -381,51 +429,73 @@ namespace Results.Output
}
}
Table table = new Table(columnsCount);
table.Style = style;
Table table = new Table(columnsCount, style);
///
/// Table content
///
bool separatorLineSignalled = false;
WMeterRsltItemSpec.TableRowNr = 1;
for (int i = 0; i < items.Count; i++)
{
if (items[i].Uid == (int)ItemID.Separator)
{
table.AddRow(null, null, null); /// 'separator' row
/// Insert a separator line (topBorder = true for all row cells)
separatorLineSignalled = true;
continue;
}
else
bool topBorder = (style.HorizLines == TableLines.All)
|| (style.HorizLines == TableLines.FirstAndLast && i == 0)
|| (style.HorizLines == TableLines.FirstSecondAndLast && i <= 1)
|| separatorLineSignalled;
separatorLineSignalled = false;
Cell[] aTableRow = new Cell[columnsCount];
aTableRow[0] = new Cell(items[i].Caption,
style.HeaderFont,
Alignment.Center,
VertAlignment.Middle,
topBorder,
style.VertLines != TableLines.None);
aTableRow[1] = new Cell((i == 0) ? Strings.Unit : items[i].Units.ToDescription(),
style.HeaderFont,
Alignment.Center,
VertAlignment.Middle,
topBorder,
style.VertLines == TableLines.All || style.VertLines == TableLines.FirstSecondAndLast);
WMeterRsltItemSpec.TableColumnNr = 1;
for (int j = 0; j < mtrTestRslts.Count; j++)
{
string[] oneTableRow = new string[columnsCount];
Alignment[] horizAlignment = new Alignment[columnsCount];
VertAlignment[] vertAlignment = new VertAlignment[columnsCount];
var mtr = mtrTestRslts[j];
oneTableRow[0] = items[i].Caption;
horizAlignment[0] = Alignment.Center;
vertAlignment[0] = VertAlignment.Middle;
bool leftBorder = (style.VertLines == TableLines.All && (!items[i].Merge || j == 0))
|| (style.VertLines == TableLines.FirstSecondAndLast && WMeterRsltItemSpec.TableColumnNr == 1);
oneTableRow[1] = (i == 0) ? "Jednostka" : items[i].Units.ToDescription();
horizAlignment[1] = Alignment.Center;
vertAlignment[1] = VertAlignment.Middle;
WMeterRsltItemSpec.TableColumnNr = 1;
foreach (var mtr in string.IsNullOrEmpty(autoTestParam) ? wm.RegularMeterTestRslts() : wm.AutoMeterTestRslts(autoTestParam))
if (mtr != null && mtr.IsPilotRslt() && mtr.Publish() == Publish.Always)
{
if (mtr != null && mtr.IsPilotRslt() && mtr.Publish() == Publish.Always)
{
int colIx = WMeterRsltItemSpec.TableColumnNr + 1;
/// Get a text, strip color information
string text = items[i].Print(wm, mtr.Name()).Split(new char[] { '|' })[0];
/// Strip color information
oneTableRow[colIx] = items[i].Print(wm, mtr.Name()).Split(new char[] { '|' })[0];
horizAlignment[colIx] = items[i].Alignment;
vertAlignment[colIx] = VertAlignment.Middle;
aTableRow[WMeterRsltItemSpec.TableColumnNr + 1] = new Cell(text,
style.Font,
items[i].Alignment,
VertAlignment.Middle,
topBorder,
leftBorder,
false,
(WMeterRsltItemSpec.TableColumnNr + 2 != columnsCount) && items[i].Merge);
WMeterRsltItemSpec.TableColumnNr++;
}
WMeterRsltItemSpec.TableColumnNr++;
}
table.AddRow(oneTableRow, horizAlignment, vertAlignment);
}
table.AddRow(aTableRow);
WMeterRsltItemSpec.TableRowNr++;
}
+108 -15
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2019-2022 Sensus Metering Systems
/// Copyright (c) 2019-2023 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
@@ -55,6 +55,9 @@ namespace Results.Output
chArea.AxisX.LogarithmBase = 10;
chArea.AxisX.IsLabelAutoFit = true;
Series upperLimit = new Series { Name = Strings.Upper_limit, ChartArea = "ChartArea1", ChartType = SeriesChartType.Line, Color = Color.Red };
Series lowerLimit = new Series { Name = Strings.Lower_limit, ChartArea = "ChartArea1", ChartType = SeriesChartType.Line, Color = Color.Red };
List<double> xs = new List<double>() { 0.0001, 0.0002, 0.0005,
0.001, 0.002, 0.005,
0.01, 0.02, 0.05,
@@ -71,6 +74,8 @@ namespace Results.Output
double from = Common.Units.ConvertTo(flowUnit, wm.WaterMeterData.Q1_Qmin);
double to = Common.Units.ConvertTo(flowUnit, isQ4 ? wm.WaterMeterData.Q4_Qmax : wm.WaterMeterData.Q3_Qn);
bool inRange = false;
double qSharp = (wm.WaterMeterData.Qnames == (sbyte)FlowNames.QpQi) ? GetQsharp(wm, flowUnit) : 0;
double lastXs = 0;
for (int i = 0; i < xs.Count - 3; i += 3)
{
if (xs[i] <= from && from < xs[i + 3])
@@ -88,6 +93,37 @@ namespace Results.Output
cl.FromPosition = Math.Log10(xs[j] * spacer);
cl.ToPosition = Math.Log10(xs[j] / spacer);
chArea.AxisX.CustomLabels.Add(cl);
if (wm.WaterMeterData.Qnames == (sbyte)FlowNames.QpQi)
{
if (lastXs != 0)
{
double insertedXs = Math.Sqrt(lastXs * xs[j]);
if (lastXs < qSharp && qSharp < insertedXs)
{
double errLim3 = GetErrorLimit(wm, flowUnit, qSharp);
lowerLimit.Points.AddXY(qSharp, -errLim3);
upperLimit.Points.AddXY(qSharp, +errLim3);
}
double errLim2 = GetErrorLimit(wm, flowUnit, insertedXs);
lowerLimit.Points.AddXY(insertedXs, -errLim2);
upperLimit.Points.AddXY(insertedXs, +errLim2);
if (insertedXs < qSharp && qSharp < xs[j])
{
double errLim3 = GetErrorLimit(wm, flowUnit, qSharp);
lowerLimit.Points.AddXY(qSharp, -errLim3);
upperLimit.Points.AddXY(qSharp, +errLim3);
}
}
lastXs = xs[j];
double errLim = GetErrorLimit(wm, flowUnit, xs[j]);
lowerLimit.Points.AddXY(xs[j], -errLim);
upperLimit.Points.AddXY(xs[j], +errLim);
}
}
}
@@ -101,6 +137,36 @@ namespace Results.Output
cl.ToPosition = Math.Log10(xs[i + 3] / spacer);
chArea.AxisX.CustomLabels.Add(cl);
if (wm.WaterMeterData.Qnames == (sbyte)FlowNames.QpQi)
{
if (lastXs != 0)
{
double insertedXs = Math.Sqrt(lastXs * xs[i + 3]);
if (lastXs < qSharp && qSharp < insertedXs)
{
double errLim3 = GetErrorLimit(wm, flowUnit, qSharp);
lowerLimit.Points.AddXY(qSharp, -errLim3);
upperLimit.Points.AddXY(qSharp, +errLim3);
}
double errLim2 = GetErrorLimit(wm, flowUnit, insertedXs);
lowerLimit.Points.AddXY(insertedXs, -errLim2);
upperLimit.Points.AddXY(insertedXs, +errLim2);
if (insertedXs < qSharp && qSharp < xs[i + 3])
{
double errLim3 = GetErrorLimit(wm, flowUnit, qSharp);
lowerLimit.Points.AddXY(qSharp, -errLim3);
upperLimit.Points.AddXY(qSharp, +errLim3);
}
}
double errLim = GetErrorLimit(wm, flowUnit, xs[i + 3]);
lowerLimit.Points.AddXY(xs[i + 3], -errLim);
upperLimit.Points.AddXY(xs[i + 3], +errLim);
}
break;
}
}
@@ -111,19 +177,20 @@ namespace Results.Output
Legend legend1 = new Legend { Name = "Legend1" };
Series upperLimit = new Series { Name = Strings.Upper_limit, ChartArea = "ChartArea1", ChartType = SeriesChartType.Line, Color = Color.Red };
upperLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q1_Qmin), 5);
upperLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q2_Qt), 5);
upperLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q2_Qt), 2);
upperLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q3_Qn), 2);
if (isQ4) upperLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q4_Qmax), 2);
if (wm.WaterMeterData.Qnames == (sbyte)FlowNames.Q3Q2Q1 || wm.WaterMeterData.Qnames == (sbyte)FlowNames.QnQtQmin)
{
upperLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q1_Qmin), wm.WaterMeterData.ErrLimLoQ);
upperLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q2_Qt), wm.WaterMeterData.ErrLimLoQ);
upperLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q2_Qt), wm.WaterMeterData.ErrLimHiQ);
upperLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q3_Qn), wm.WaterMeterData.ErrLimHiQ);
if (isQ4) upperLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q4_Qmax), wm.WaterMeterData.ErrLimHiQ);
Series lowerLimit = new Series { Name = Strings.Lower_limit, ChartArea = "ChartArea1", ChartType = SeriesChartType.Line, Color = Color.Red };
lowerLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q1_Qmin), -5);
lowerLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q2_Qt), -5);
lowerLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q2_Qt), -2);
lowerLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q3_Qn), -2);
if (isQ4) lowerLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q4_Qmax), -2);
lowerLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q1_Qmin), -wm.WaterMeterData.ErrLimLoQ);
lowerLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q2_Qt), -wm.WaterMeterData.ErrLimLoQ);
lowerLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q2_Qt), -wm.WaterMeterData.ErrLimHiQ);
lowerLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q3_Qn), -wm.WaterMeterData.ErrLimHiQ);
if (isQ4) lowerLimit.Points.AddXY(Units.ConvertTo(flowUnit, wm.WaterMeterData.Q4_Qmax), -wm.WaterMeterData.ErrLimHiQ);
}
Series line = new Series { Name = Strings.Relative_error, ChartArea = "ChartArea1", ChartType = SeriesChartType.Line, Color = Color.DeepSkyBlue };
Series dots = new Series { Name = Strings.Relative_error + " ", ChartArea = "ChartArea1", ChartType = SeriesChartType.Point, Color = Color.RoyalBlue };
@@ -137,12 +204,38 @@ namespace Results.Output
chart.ChartAreas.Add(chArea);
chart.Legends.Add(legend1);
chart.Series.Add(upperLimit);
chart.Series.Add(lowerLimit);
if (upperLimit.Points.Count > 1) chart.Series.Add(upperLimit);
if (lowerLimit.Points.Count > 1) chart.Series.Add(lowerLimit);
chart.Series.Add(dots);
chart.Series.Add(line);
return chart;
}
static double GetErrorLimit(WaterMeter wm, Unit flowUnit, double x)
{
double flow_m3 = Units.ConvertFrom(flowUnit, x);
switch (Convert.ToInt32(wm.WaterMeterData.Q2_Qt))
{
default:
case 1: return Math.Min(3.5, 1.0 + 0.01 * wm.WaterMeterData.Q3_Qn / flow_m3);
case 2: return Math.Min(5.0, 2.0 + 0.02 * wm.WaterMeterData.Q3_Qn / flow_m3);
case 3: return Math.Min(5.0, 3.0 + 0.05 * wm.WaterMeterData.Q3_Qn / flow_m3);
}
}
static double GetQsharp(WaterMeter wm, Unit flowUnit)
{
double qSharp;
switch (Convert.ToInt32(wm.WaterMeterData.Q2_Qt))
{
default:
case 1: qSharp = (0.01 / 2.5) * wm.WaterMeterData.Q3_Qn; break;
case 2: qSharp = (0.02 / 3.0) * wm.WaterMeterData.Q3_Qn; break;
case 3: qSharp = (0.05 / 2.0) * wm.WaterMeterData.Q3_Qn; break;
}
return Units.ConvertTo(flowUnit, qSharp);
}
}
}
+10 -1
View File
@@ -19,7 +19,7 @@ namespace Results.Resources {
// 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.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Strings {
@@ -573,6 +573,15 @@ namespace Results.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Merge.
/// </summary>
internal static string Merge {
get {
return ResourceManager.GetString("Merge", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Meter type.
/// </summary>
+3
View File
@@ -348,4 +348,7 @@
<data name="Workstep" xml:space="preserve">
<value>Krok</value>
</data>
<data name="Merge" xml:space="preserve">
<value>Spojit</value>
</data>
</root>
+5 -5
View File
@@ -163,22 +163,22 @@
<value>Stan końcowy</value>
</data>
<data name="ErrLimHi" xml:space="preserve">
<value>Max. Dopuszczalny błąd</value>
<value>Max. dopuszczalny błąd</value>
</data>
<data name="ErrLimLo" xml:space="preserve">
<value>Min. Dopuszczalny błąd</value>
<value>Min. dopuszczalny błąd</value>
</data>
<data name="Error" xml:space="preserve">
<value>Błąd</value>
</data>
<data name="ErrRef" xml:space="preserve">
<value>Zakres błędów</value>
<value>Błąd wzorcowy</value>
</data>
<data name="Err_aux" xml:space="preserve">
<value>Błąd dopuszczalny</value>
<value>Błąd dodatkowy</value>
</data>
<data name="Err_main" xml:space="preserve">
<value>Błąd podstawowy</value>
<value>Błąd główny</value>
</data>
<data name="Flow" xml:space="preserve">
<value>Przepływ</value>
+3
View File
@@ -849,4 +849,7 @@
<data name="Workstep" xml:space="preserve">
<value>Workstep</value>
</data>
<data name="Merge" xml:space="preserve">
<value>Merge</value>
</data>
</root>
+6 -3
View File
@@ -19,7 +19,7 @@
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<DefineConstants>TRACE;DEBUG;LANG_PL</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>AnyCPU</PlatformTarget>
@@ -29,7 +29,7 @@
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<DefineConstants>TRACE;LANG_PL</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
@@ -100,7 +100,9 @@
<Compile Include="Forms\MoreWMResultsDlg.Designer.cs">
<DependentUpon>MoreWMResultsDlg.cs</DependentUpon>
</Compile>
<Compile Include="Forms\OneWMResultsColumnsCtrl.cs" />
<Compile Include="Forms\OneWMResultsColumnsCtrl.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Forms\OneWMResultsColumnsCtrl.designer.cs">
<DependentUpon>OneWMResultsColumnsCtrl.cs</DependentUpon>
</Compile>
@@ -132,6 +134,7 @@
<Compile Include="Mappings\TestRsltMap.cs" />
<Compile Include="Mappings\WaterMeterDataMap.cs" />
<Compile Include="Mappings\WaterMeterMap.cs" />
<Compile Include="Output\Cell.cs" />
<Compile Include="Output\Printers\Enhanced\EnhancedPrintDocument.cs">
<SubType>Component</SubType>
</Compile>
+111 -113
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2013-2018 Sensus Slovensko a.s.
/// Copyright (c) 2013-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -7,6 +7,7 @@ using Common;
using Results.Entities;
using Results.Resources;
using System.Globalization;
using System.Linq;
namespace Results
{
@@ -28,6 +29,7 @@ namespace Results
public string Precision; /// Specifies precision for the output
public int Width; /// Specifies the number of characters of the output, 0 = automatic
public Alignment Alignment; /// Specifies alignment for the output
public bool Merge; /// true = items are merged into one cell for a meter, for all tests
public WMeterRsltItemSpec Clone()
{
@@ -39,6 +41,7 @@ namespace Results
item2.Precision = Precision;
item2.Width = Width;
item2.Alignment = Alignment;
item2.Merge = Merge;
return item2;
}
@@ -102,24 +105,15 @@ namespace Results
Format = string.Empty;
Precision = string.Empty;
TestID = string.Empty;
Merge = false;
}
///
/// Constructor without ToolTip text
/// Constructor without a ToolTip text
///
public WMeterRsltItemSpec(ItemID itemId, string name, Quantity quantity, ItemCategory category, PrintDlgt printDlgt)
: this(itemId, name, null, quantity, category, printDlgt)
{
Uid = (int)itemId;
OldUid = itemId.ToString().Replace("__", "/").Replace('_', ' ');
Name = name;
ToolTipText = null;
Quantity = quantity;
Category = category;
this.printDlgt = printDlgt;
Format = string.Empty;
Precision = string.Empty;
TestID = string.Empty;
}
@@ -145,6 +139,17 @@ namespace Results
AllItems.Add(new WMeterRsltItemSpec(ItemID.Test_method, Strings.Test_method + "()", Quantity.String, ItemCategory.TestData, (w,t,u,f,p) => FormatStr(f, (w.GetTestRslt(t) == null) ? "" : w.GetTestRslt(t).Method())));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Test_Method_Elde, Strings.Test_method + " Elde ()", Quantity.String, ItemCategory.TestData, (w,t,u,f,p) => FormatStr(f, (w.GetTestRslt(t) == null) ? "" : w.GetTestRslt(t).MethodElde())));
AllItems.Add(new WMeterRsltItemSpec(ItemID.RefFlowmeter, "Ref. flowmeter", Quantity.String, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetTestRslt(t) != null) ? FormatStr(f, w.GetTestRslt(t).RefFlowmeter()) : string.Empty));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Scale, "Scale", Quantity.String, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetTestRslt(t) != null) ? FormatStr(f, w.GetTestRslt(t).Scale()) : string.Empty));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Diverter, "Diverter", Quantity.String, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetTestRslt(t) != null) ? FormatStr(f, w.GetTestRslt(t).Diverter()) : string.Empty));
AllItems.Add(new WMeterRsltItemSpec(ItemID.RegValve, "Reg. valve", Quantity.String, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetTestRslt(t) != null) ? FormatStr(f, w.GetTestRslt(t).RegValve()) : string.Empty));
AllItems.Add(new WMeterRsltItemSpec(ItemID.TestDone, Strings.Test_done + "()", Quantity.Boolean, ItemCategory.TestResult, (w,t,u,f,p) => FormatBool(f, (w.GetMeterTestRslt(t) != null) && w.GetMeterTestRslt(t).TestDone)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.TestPassed, Strings.Test_passed + "()", Quantity.Boolean, ItemCategory.TestResult, (w,t,u,f,p) => FormatBool(f, (w.GetMeterTestRslt(t) != null) && w.GetMeterTestRslt(t).Passed)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Passed, Strings.Result, Quantity.Boolean, ItemCategory.MeterResult, (w,t,u,f,p) => w.PassedColorStr(f)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.ThreeState, "Three state result",Quantity.Enumerated, ItemCategory.MeterResult, (w,t,u,f,p) => FormatThreeState(f, w.ThreeStateFromTests())));
AllItems.Add(new WMeterRsltItemSpec(ItemID.ResultOrErrorFlags,"Winiki lub E", Quantity.String, ItemCategory.MeterResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) != null) ? FormatStr(f, w.GetMeterTestRslt(t).PassedOrErrorFlagsStr())
: FormatStr(f, w.PassedOrErrorFlagsStr()))); /// PL specific result
///
/// Volume
///
@@ -319,16 +324,6 @@ namespace Results
AllItems.Add(new WMeterRsltItemSpec(ItemID.Error, string.Format("{0} rel. ()", Strings.VName_Error), Strings.Tooltip_E_rel, Quantity.Error, ItemCategory.MeterResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) != null) ? FormatDbl(u, f, p, "V2", w.GetMeterTestRslt(t).Error) : string.Empty));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Error_heat_mtr_vol, string.Format("{0} rel.hm.vol. ()", Strings.VName_Error), Quantity.Error, ItemCategory.MeterResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t, CompoundMeterId.HeatMeterVolume) != null) ? FormatDbl(u, f, p, "V2", w.GetMeterTestRslt(t, CompoundMeterId.HeatMeterVolume).Error) : string.Empty));
#endif
AllItems.Add(new WMeterRsltItemSpec(ItemID.Passed, Strings.Result, Quantity.Boolean, ItemCategory.MeterResult, (w,t,u,f,p) => string.IsNullOrEmpty(t) ? w.PassedColorStr(f)
: ((w.GetMeterTestRslt(t) == null) ? "" : w.GetMeterTestRslt(t).PassedColorStr(f))));
AllItems.Add(new WMeterRsltItemSpec(ItemID.ThreeState, "Three state result", Quantity.Enumerated, ItemCategory.MeterResult, (w,t,u,f,p) => FormatThreeState(f, w.ThreeStateFromTests())));
AllItems.Add(new WMeterRsltItemSpec(ItemID.RefFlowmeter, "Ref. flowmeter", Quantity.String, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetTestRslt(t) != null) ? FormatStr(f, w.GetTestRslt(t).RefFlowmeter()) : string.Empty));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Scale, "Scale", Quantity.String, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetTestRslt(t) != null) ? FormatStr(f, w.GetTestRslt(t).Scale()) : string.Empty));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Diverter, "Diverter", Quantity.String, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetTestRslt(t) != null) ? FormatStr(f, w.GetTestRslt(t).Diverter()) : string.Empty));
AllItems.Add(new WMeterRsltItemSpec(ItemID.RegValve, "Reg. valve", Quantity.String, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetTestRslt(t) != null) ? FormatStr(f, w.GetTestRslt(t).RegValve()) : string.Empty));
AllItems.Add(new WMeterRsltItemSpec(ItemID.ResultOrErrorFlags, "Winiki lub E", Quantity.String, ItemCategory.MeterResult, (w,t,u,f,p) => FormatStr(f, w.PassedOrErrorFlagsStr()))); /// PL specific result
///
/// Water meter info
@@ -372,19 +367,22 @@ namespace Results
/// Water meters results (single)
AllItems.Add(new WMeterRsltItemSpec(ItemID.End_state, Strings.End_state, Quantity.String, ItemCategory.MeterResult, (w,t,u,f,p) => FormatStr(f, w.EndState)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Pulses, Strings.Pulses + "()", Quantity.Pulses, ItemCategory.MeterResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) == null) ? "" : FormatDbl(u, f, p, "F0", w.GetMeterTestRslt(t).IsPulses() ? w.GetMeterTestRslt(t).PulsesMeter : 0)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Reference_pulses_ni, Strings.RefPulses + "_ni()", Quantity.Pulses, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) == null) ? "" : FormatDbl(u, f, p, "F0", w.GetMeterTestRslt(t).PulsesMaster)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Reference_pulses, Strings.RefPulses + "()", Quantity.Pulses, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetTestRslt(t) == null) ? "" : FormatDbl(u, f, p, "F0", w.GetTestRslt(t).PulsesMaster)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Camera_angle, "Angle ()", "Angle measured by a camera", Quantity.Pulses, ItemCategory.MeterResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) == null) ? "" : FormatDbl(u,f,p, "F0", w.GetMeterTestRslt(t).IsCamera() ? w.GetMeterTestRslt(t).PulsesMeter : 0)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Camera_angle_start, "Start angle ()", "Start angle measured by a camera", Quantity.Pulses, ItemCategory.MeterResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) == null) ? "" : FormatDbl(u,f,p, "F0", w.GetMeterTestRslt(t).IsCamera() ? w.GetMeterTestRslt(t).VolumeStart * w.GetMeterTestRslt(t).PulsesPerLiter : 0)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Camera_angle_end, "End angle ()", "End angle measured by a camera", Quantity.Pulses, ItemCategory.MeterResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) == null) ? "" : FormatDbl(u,f,p, "F0", w.GetMeterTestRslt(t).IsCamera() ? w.GetMeterTestRslt(t).VolumeEnd * w.GetMeterTestRslt(t).PulsesPerLiter : 0)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Pulses, Strings.Pulses + "()", Quantity.Pulses, ItemCategory.MeterResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) == null) ? string.Empty : FormatDbl(u, f, p, "F0", w.GetMeterTestRslt(t).IsPulses() ? w.GetMeterTestRslt(t).PulsesMeter : 0)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Reference_pulses_ni, Strings.RefPulses + "_ni()", Quantity.Pulses, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) == null) ? string.Empty : FormatDbl(u, f, p, "F0", w.GetMeterTestRslt(t).PulsesMaster)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Reference_pulses, Strings.RefPulses + "()", Quantity.Pulses, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetTestRslt(t) == null) ? string.Empty : FormatDbl(u, f, p, "F0", w.GetTestRslt(t).PulsesMaster)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Camera_angle, "Angle ()", "Angle measured by a camera", Quantity.Pulses, ItemCategory.MeterResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) == null) ? string.Empty : FormatDbl(u,f,p, "F0", w.GetMeterTestRslt(t).IsCamera() ? w.GetMeterTestRslt(t).PulsesMeter : 0)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Camera_angle_start, "Start angle ()", "Start angle measured by a camera",Quantity.Pulses, ItemCategory.MeterResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) == null) ? string.Empty : FormatDbl(u,f,p, "F0", w.GetMeterTestRslt(t).IsCamera() ? w.GetMeterTestRslt(t).VolumeStart * w.GetMeterTestRslt(t).PulsesPerLiter : 0)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Camera_angle_end, "End angle ()", "End angle measured by a camera", Quantity.Pulses, ItemCategory.MeterResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) == null) ? string.Empty : FormatDbl(u,f,p, "F0", w.GetMeterTestRslt(t).IsCamera() ? w.GetMeterTestRslt(t).VolumeEnd * w.GetMeterTestRslt(t).PulsesPerLiter : 0)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Pulses_per_liter, Strings.PulsesLiter, Quantity.PulsePerLtr, ItemCategory.MeterData, (w,t,u,f,p) => FormatDbl(u, f, p, "V4", w.WaterMeterData.PulsesPerLtr)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Pulse__liter, Strings.PulsesLiter + "()", Quantity.PulsePerLtr, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) == null) ? "" : FormatDbl(u, f, p, "V4", w.GetMeterTestRslt(t).IsCamera() ? 0 : w.GetMeterTestRslt(t).PulsesPerLiter)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Degree__liter, "Degree per liter ()", Quantity.PulsePerLtr, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) == null) ? "" : FormatDbl(u, f, p, "V4", w.GetMeterTestRslt(t).IsCamera() ? w.GetMeterTestRslt(t).PulsesPerLiter : 0)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Pulses_per_liter, Strings.PulsesLiter, Quantity.PulsePerLtr, ItemCategory.MeterData, (w,t,u,f,p) => FormatDbl(u, f, p, "V4", w.WaterMeterData.PulsesPerLtr)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Pls_per_ltr_aux, Strings.PulsesLiter + " aux", Quantity.PulsePerLtr, ItemCategory.MeterData, (w, t, u, f, p) => FormatDbl(u, f, p, "V4", w.WaterMeterData.PulsesPerLtrAux)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Pulse__liter, Strings.PulsesLiter + "()", Quantity.PulsePerLtr, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) == null) ? string.Empty : FormatDbl(u, f, p, "V4", w.GetMeterTestRslt(t).IsCamera() ? 0 : w.GetMeterTestRslt(t).PulsesPerLiter)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Degree__liter, "Degree per liter ()", Quantity.PulsePerLtr, ItemCategory.TestResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t) == null) ? string.Empty : FormatDbl(u, f, p, "V4", w.GetMeterTestRslt(t).IsCamera() ? w.GetMeterTestRslt(t).PulsesPerLiter : 0)));
/// Water meters results (combined)
AllItems.Add(new WMeterRsltItemSpec(ItemID.Error_main, Strings.Err_main + "()", Quantity.Error, ItemCategory.MeterResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t, CompoundMeterId.CompoundMain) != null) ? FormatDbl(u, f, p, "V2", w.GetMeterTestRslt(t, CompoundMeterId.CompoundMain).Error) : string.Empty));
/// Water meters results (combined)
AllItems.Add(new WMeterRsltItemSpec(ItemID.Pulses_main, Strings.Pulses + " " + Strings.main + "()", Quantity.Pulses, ItemCategory.MeterResult, (w, t, u, f, p) => (w.GetMeterTestRslt(t, CompoundMeterId.CompoundMain) == null) ? string.Empty : FormatDbl(u, f, p, "F0", w.GetMeterTestRslt(t, CompoundMeterId.CompoundMain).IsPulses() ? w.GetMeterTestRslt(t, CompoundMeterId.CompoundMain).PulsesMeter : 0)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Pulses_aux, Strings.Pulses + " " + Strings.aux + "()", Quantity.Pulses, ItemCategory.MeterResult, (w, t, u, f, p) => (w.GetMeterTestRslt(t, CompoundMeterId.CompoundAux) == null) ? string.Empty : FormatDbl(u, f, p, "F0", w.GetMeterTestRslt(t, CompoundMeterId.CompoundAux).IsPulses() ? w.GetMeterTestRslt(t, CompoundMeterId.CompoundAux).PulsesMeter : 0)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Error_main, Strings.Err_main + "()", Quantity.Error, ItemCategory.MeterResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t, CompoundMeterId.CompoundMain) != null) ? FormatDbl(u, f, p, "V2", w.GetMeterTestRslt(t, CompoundMeterId.CompoundMain).Error) : string.Empty));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Error_aux, Strings.Err_aux + "()", Quantity.Error, ItemCategory.MeterResult, (w,t,u,f,p) => (w.GetMeterTestRslt(t, CompoundMeterId.CompoundAux) != null) ? FormatDbl(u, f, p, "V2", w.GetMeterTestRslt(t, CompoundMeterId.CompoundAux).Error) : string.Empty));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Serial_Nr_main, string.Format("{0} {1}", Strings.sn, Strings.main), Strings.Tooltip_sn_main, Quantity.String, ItemCategory.MeterResult, (w,t,u,f,p) => FormatStr(f, w.SerialNr)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Serial_Nr_aux, string.Format("{0} {1}", Strings.sn, Strings.aux), Strings.Tooltip_sn_aux, Quantity.String, ItemCategory.MeterResult, (w,t,u,f,p) => FormatStr(f, w.SerialNrAux)));
@@ -459,8 +457,6 @@ namespace Results
AllItems.Add(new WMeterRsltItemSpec(ItemID.Prod_Q2CorrLR, "Prod iPerl Q2Corr LR", Quantity.Number, ItemCategory.MeterResult, (w,t,u,f,p) => FormatInt(f, w.ProdQ2CorrLR)));
#endif
AllItems.Add(new WMeterRsltItemSpec(ItemID.TestDone, Strings.Test_done + "()", Quantity.Boolean, ItemCategory.TestResult, (w,t,u,f,p) => FormatBool(f, (w.GetMeterTestRslt(t) != null) && w.GetMeterTestRslt(t).TestDone)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.TestPassed, Strings.Test_passed + "()", Quantity.Boolean, ItemCategory.TestResult, (w,t,u,f,p) => FormatBool(f, (w.GetMeterTestRslt(t) != null) && w.GetMeterTestRslt(t).Passed)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.ErrorFlags, Strings.Error_flags + "()", Quantity.String, ItemCategory.TestResult, (w,t,u,f,p) => FormatStr(f, (w.GetTestRslt(t) != null) ? w.GetTestRslt(t).ErrorFlagsStr() : w.ErrorFlagsStr())));
AllItems.Add(new WMeterRsltItemSpec(ItemID.ErrorFlagsEx, Strings.Error_flags + "Ex", Quantity.String, ItemCategory.MeterResult, (w,t,u,f,p) => FormatStr(f, w.ErrorFlagsStrEx())));
AllItems.Add(new WMeterRsltItemSpec(ItemID.InfoFlags, Strings.Info_flags + "()", Quantity.String, ItemCategory.TestResult, (w,t,u,f,p) => FormatStr(f, (w.GetTestRslt(t) != null) ? w.GetTestRslt(t).InfoFlagsStr() : w.InfoFlagsStr())));
@@ -733,7 +729,7 @@ namespace Results
if (items[i].Format == null) items[i].Format = string.Empty;
if (items[i].Precision == null) items[i].Precision = string.Empty;
result[i] = string.Format("{0}~{1}~{2}~{3}~{4}~{5}~{6}~{7}",
result[i] = string.Format("{0}~{1}~{2}~{3}~{4}~{5}~{6}~{7}~{8}",
items[i].Uid,
items[i].Caption.Replace("~", "\n"),
items[i].TestID,
@@ -741,7 +737,8 @@ namespace Results
items[i].Format.Replace("~", "\n"),
items[i].Precision,
items[i].Width,
items[i].Alignment);
items[i].Alignment,
items[i].Merge);
}
return result;
}
@@ -753,101 +750,102 @@ namespace Results
/// <returns></returns>
public static IList<WMeterRsltItemSpec> FromStrArray(string[] strArray)
{
IList<WMeterRsltItemSpec> result = new List<WMeterRsltItemSpec>();
var result = new List<WMeterRsltItemSpec>();
if (strArray == null) return result;
if (strArray != null)
for (int i = 0; i < strArray.Length; i++)
{
for (int i = 0; i < strArray.Length; i++)
{
try
WMeterRsltItemSpec item = null;
try
{
if (!strArray[i].Contains("~"))
{
WMeterRsltItemSpec item;
///
/// Old style results item specification -> convert it
///
bool isItemCreated = false;
foreach (var it in AllItems)
{
if (strArray[i].Equals(it.OldUid))
{
item = it.Clone();
item.Caption = item.Name.Replace("()", "").Replace(" *", "");
item.Units = 0; /// use default units
item.Format = null; /// the same like format string "{0}"
item.Precision = null;
item.Width = 0; /// do not ad any extra spaces
item.Alignment = Alignment.Left;
isItemCreated = true;
break;
}
}
if (!isItemCreated)
{
item = GetItem(0);
item.Caption = "Prs.Err.";
item.Format = string.Format("Parse error: {0}", strArray[i]);
}
}
else
{
string[] field = strArray[i].Split(new char[] { '~' });
if (!strArray[i].Contains("~"))
{
///
/// Old style results item specification -> convert it
///
bool added = false;
foreach (var it in AllItems)
{
if (strArray[i].Equals(it.OldUid))
{
item = it.Clone();
item.Caption = item.Name.Replace("()", "").Replace(" *", "");
item.Units = 0; /// use default units
item.Format = null; /// the same like format string "{0}"
item.Precision = null;
item.Width = 0; /// do not ad any extra spaces
item.Alignment = Alignment.Left;
result.Add(item);
added = true;
break;
}
}
if (!added)
{
item = GetItem(0);
item.Caption = "Prs.Err.";
item.Format = string.Format("Parse error: {0}", strArray[i]);
result.Add(item);
}
}
else if ((item = GetItem(int.Parse(field[0]))) != null)
if (field.Length >= 8 && (item = GetItem(int.Parse(field[0]))) != null)
{
///
/// Load the new style results item specification
///
///
/// Load the new style results item specification
///
item.Caption = field[1].Replace("\n", "~");
item.TestID = field[2];
item.Units = 0;
for (Unit u = 0; u < Unit.Count; u++)
{
if (u.ToString().Equals(field[3])) { item.Units = u; break; }
}
item.Format = field[4].Replace("\n", "~");
item.Precision = field[5];
item.Width = int.Parse(field[6]);
item.Alignment = 0;
for (Alignment a = 0; a < Alignment.Count; a++)
{
if (a.ToString().Equals(field[7])) { item.Alignment = a; break; }
}
item.TestID = field[2];
item.Units = 0;
for (Unit u = 0; u < Unit.Count; u++)
{
if (u.ToString().Equals(field[3])) { item.Units = u; break; }
}
item.Format = field[4].Replace("\n", "~");
item.Precision = field[5];
item.Width = int.Parse(field[6]);
item.Alignment = 0;
for (Alignment a = 0; a < Alignment.Count; a++)
{
if (a.ToString().Equals(field[7])) { item.Alignment = a; break; }
}
result.Add(item);
}
bool merge;
if (field.Length >= 9 && bool.TryParse(field[8], out merge)) item.Merge = merge;
}
else
{
///
/// Create an item with parse error information
///
WMeterRsltItemSpec item2 = GetItem(0);
item2.Caption = "Prs.Err.";
item2.Format = string.Format("Parse error: {0}", strArray[i]);
result.Add(item2);
item = GetItem(0);
item.Caption = "Prs.Err.";
item.Format = string.Format("Parse error: {0}", strArray[i]);
}
}
catch
{
WMeterRsltItemSpec item = GetItem(0);
item.Caption = "Prs.Err.";
item.Format = string.Format("Parse error: {0}", strArray[i]);
result.Add(item);
}
}
}
catch
{
item = GetItem(0);
item.Caption = "Prs.Err.";
item.Format = string.Format("Parse error: {0}", strArray[i]);
}
}
return result;
result.Add(item);
}
return result;
}
public static WMeterRsltItemSpec GetItem(int uid)
{
foreach (var item in AllItems)
{
if (item.Uid == uid) return item.Clone();
}
return null;
var foundItem = AllItems.FirstOrDefault(x => x.Uid == uid);
return (foundItem != null) ? foundItem.Clone() : null;
}
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
+22
View File
@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace S640TestApp
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new S640TestWnd());
}
}
}
+36
View File
@@ -0,0 +1,36 @@
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("S640TestApp")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("S640TestApp")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[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("2b84f803-89f3-43cd-9e2d-6ed03de6c3b8")]
// 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")]
+71
View File
@@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace S640TestApp.Properties
{
/// <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 ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("S640TestApp.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}
+117
View File
@@ -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>
+30
View File
@@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace S640TestApp.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.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;
}
}
}
}
+7
View File
@@ -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>
+110
View File
@@ -0,0 +1,110 @@
<?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>{EE097B5A-8162-45B1-9643-4969FC3A8921}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>S640TestApp</RootNamespace>
<AssemblyName>S640TestApp</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<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>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</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>
</PropertyGroup>
<ItemGroup>
<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="S640TestWnd.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="S640TestWnd.Designer.cs">
<DependentUpon>S640TestWnd.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="S640TestWnd.resx">
<DependentUpon>S640TestWnd.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>
</Compile>
<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>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Common\Common.csproj">
<Project>{c8939821-ba5c-4988-a3d0-bf53b74865c7}</Project>
<Name>Common</Name>
</ProjectReference>
<ProjectReference Include="..\Config\Config.csproj">
<Project>{743df7db-c7b6-42eb-986d-0f485e5588e4}</Project>
<Name>Config</Name>
</ProjectReference>
<ProjectReference Include="..\RestClient\RestClient.csproj">
<Project>{46e3b0e1-209f-4550-b0dd-d7e2c039b3ce}</Project>
<Name>RestClient</Name>
</ProjectReference>
<ProjectReference Include="..\Results\Results.csproj">
<Project>{9d0dcc88-dc81-47eb-9fdd-4c3907871bfb}</Project>
<Name>Results</Name>
</ProjectReference>
<ProjectReference Include="..\TBF\TBF.csproj">
<Project>{8648fd92-cda1-4c3a-b5f9-fe547ce1fa48}</Project>
<Name>TBF</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>
+207
View File
@@ -0,0 +1,207 @@
namespace S640TestApp
{
partial class S640TestWnd
{
/// <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.startButton = new System.Windows.Forms.Button();
this.endButton = new System.Windows.Forms.Button();
this.startCfgButton = new System.Windows.Forms.Button();
this.endCfgButton = new System.Windows.Forms.Button();
this.procParamsCfgButton = new System.Windows.Forms.Button();
this.idWzTypTextBox = new System.Windows.Forms.TextBox();
this.idWzTypLabel = new System.Windows.Forms.Label();
this.getButton = new System.Windows.Forms.Button();
this.baseUrlTextBox = new System.Windows.Forms.TextBox();
this.relativeUrlTextBox = new System.Windows.Forms.TextBox();
this.relativeUrlLabel = new System.Windows.Forms.Label();
this.baseUrlLabel = new System.Windows.Forms.Label();
this.getDefaultsGroupBox = new System.Windows.Forms.GroupBox();
this.getDefaultsGroupBox.SuspendLayout();
this.SuspendLayout();
//
// startButton
//
this.startButton.Location = new System.Drawing.Point(12, 110);
this.startButton.Name = "startButton";
this.startButton.Size = new System.Drawing.Size(109, 43);
this.startButton.TabIndex = 2;
this.startButton.Text = "Start";
this.startButton.UseVisualStyleBackColor = true;
this.startButton.Click += new System.EventHandler(this.startButton_Click);
//
// endButton
//
this.endButton.Location = new System.Drawing.Point(12, 208);
this.endButton.Name = "endButton";
this.endButton.Size = new System.Drawing.Size(109, 43);
this.endButton.TabIndex = 4;
this.endButton.Text = "End";
this.endButton.UseVisualStyleBackColor = true;
this.endButton.Click += new System.EventHandler(this.endButton_Click);
//
// startCfgButton
//
this.startCfgButton.Location = new System.Drawing.Point(12, 61);
this.startCfgButton.Name = "startCfgButton";
this.startCfgButton.Size = new System.Drawing.Size(109, 43);
this.startCfgButton.TabIndex = 1;
this.startCfgButton.Text = "Configure Start";
this.startCfgButton.UseVisualStyleBackColor = true;
this.startCfgButton.Click += new System.EventHandler(this.startCfgButton_Click);
//
// endCfgButton
//
this.endCfgButton.Location = new System.Drawing.Point(12, 159);
this.endCfgButton.Name = "endCfgButton";
this.endCfgButton.Size = new System.Drawing.Size(109, 43);
this.endCfgButton.TabIndex = 3;
this.endCfgButton.Text = "Configure End";
this.endCfgButton.UseVisualStyleBackColor = true;
this.endCfgButton.Click += new System.EventHandler(this.endCfgButton_Click);
//
// procParamsCfgButton
//
this.procParamsCfgButton.Location = new System.Drawing.Point(12, 12);
this.procParamsCfgButton.Name = "procParamsCfgButton";
this.procParamsCfgButton.Size = new System.Drawing.Size(109, 43);
this.procParamsCfgButton.TabIndex = 0;
this.procParamsCfgButton.Text = "Comm. parameters";
this.procParamsCfgButton.UseVisualStyleBackColor = true;
this.procParamsCfgButton.Click += new System.EventHandler(this.procParamsCfgButton_Click);
//
// idWzTypTextBox
//
this.idWzTypTextBox.Location = new System.Drawing.Point(87, 75);
this.idWzTypTextBox.Name = "idWzTypTextBox";
this.idWzTypTextBox.Size = new System.Drawing.Size(53, 20);
this.idWzTypTextBox.TabIndex = 5;
//
// idWzTypLabel
//
this.idWzTypLabel.AutoSize = true;
this.idWzTypLabel.Location = new System.Drawing.Point(12, 78);
this.idWzTypLabel.Name = "idWzTypLabel";
this.idWzTypLabel.Size = new System.Drawing.Size(60, 13);
this.idWzTypLabel.TabIndex = 4;
this.idWzTypLabel.Text = "ID WZ Typ";
//
// getButton
//
this.getButton.Location = new System.Drawing.Point(14, 109);
this.getButton.Name = "getButton";
this.getButton.Size = new System.Drawing.Size(126, 33);
this.getButton.TabIndex = 6;
this.getButton.Text = "Get";
this.getButton.UseVisualStyleBackColor = true;
this.getButton.Click += new System.EventHandler(this.getButton_Click);
//
// baseUrlTextBox
//
this.baseUrlTextBox.Location = new System.Drawing.Point(87, 25);
this.baseUrlTextBox.Name = "baseUrlTextBox";
this.baseUrlTextBox.Size = new System.Drawing.Size(298, 20);
this.baseUrlTextBox.TabIndex = 1;
//
// relativeUrlTextBox
//
this.relativeUrlTextBox.Location = new System.Drawing.Point(87, 50);
this.relativeUrlTextBox.Name = "relativeUrlTextBox";
this.relativeUrlTextBox.Size = new System.Drawing.Size(298, 20);
this.relativeUrlTextBox.TabIndex = 3;
//
// relativeUrlLabel
//
this.relativeUrlLabel.AutoSize = true;
this.relativeUrlLabel.Location = new System.Drawing.Point(11, 53);
this.relativeUrlLabel.Name = "relativeUrlLabel";
this.relativeUrlLabel.Size = new System.Drawing.Size(71, 13);
this.relativeUrlLabel.TabIndex = 2;
this.relativeUrlLabel.Text = "Relative URL";
//
// baseUrlLabel
//
this.baseUrlLabel.AutoSize = true;
this.baseUrlLabel.Location = new System.Drawing.Point(11, 28);
this.baseUrlLabel.Name = "baseUrlLabel";
this.baseUrlLabel.Size = new System.Drawing.Size(56, 13);
this.baseUrlLabel.TabIndex = 0;
this.baseUrlLabel.Text = "Base URL";
//
// getDefaultsGroupBox
//
this.getDefaultsGroupBox.Controls.Add(this.relativeUrlTextBox);
this.getDefaultsGroupBox.Controls.Add(this.baseUrlTextBox);
this.getDefaultsGroupBox.Controls.Add(this.idWzTypTextBox);
this.getDefaultsGroupBox.Controls.Add(this.idWzTypLabel);
this.getDefaultsGroupBox.Controls.Add(this.relativeUrlLabel);
this.getDefaultsGroupBox.Controls.Add(this.getButton);
this.getDefaultsGroupBox.Controls.Add(this.baseUrlLabel);
this.getDefaultsGroupBox.Location = new System.Drawing.Point(127, 12);
this.getDefaultsGroupBox.Name = "getDefaultsGroupBox";
this.getDefaultsGroupBox.Size = new System.Drawing.Size(394, 157);
this.getDefaultsGroupBox.TabIndex = 5;
this.getDefaultsGroupBox.TabStop = false;
this.getDefaultsGroupBox.Text = "Get default Q2 correction factors";
//
// S640TestWnd
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(533, 312);
this.Controls.Add(this.getDefaultsGroupBox);
this.Controls.Add(this.procParamsCfgButton);
this.Controls.Add(this.endCfgButton);
this.Controls.Add(this.startCfgButton);
this.Controls.Add(this.endButton);
this.Controls.Add(this.startButton);
this.Name = "S640TestWnd";
this.Text = "Form1";
this.getDefaultsGroupBox.ResumeLayout(false);
this.getDefaultsGroupBox.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button startButton;
private System.Windows.Forms.Button endButton;
private System.Windows.Forms.Button startCfgButton;
private System.Windows.Forms.Button endCfgButton;
private System.Windows.Forms.Button procParamsCfgButton;
private System.Windows.Forms.TextBox idWzTypTextBox;
private System.Windows.Forms.Label idWzTypLabel;
private System.Windows.Forms.Button getButton;
private System.Windows.Forms.TextBox baseUrlTextBox;
private System.Windows.Forms.TextBox relativeUrlTextBox;
private System.Windows.Forms.Label relativeUrlLabel;
private System.Windows.Forms.Label baseUrlLabel;
private System.Windows.Forms.GroupBox getDefaultsGroupBox;
}
}
+162
View File
@@ -0,0 +1,162 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Common;
using Config;
using Config.Entities;
using RestClient;
using Results.Entities;
using TBF.Rig.TestMethods.S640Communication;
namespace S640TestApp
{
public partial class S640TestWnd : Form
{
ProcParams procParams;
S640StartCfg startCfg;
S640EndCfg endCfg;
Test test;
IList<WaterMeter> waterMeters;
public S640TestWnd()
{
InitializeComponent();
baseUrlTextBox.Text = "https://api-operations.sensus-emea.com/core/";
relativeUrlTextBox.Text = "metrology/q2correction/Locations/Wztyp/{0}";
test = new Test()
{
};
waterMeters = new List<WaterMeter>();
waterMeters.Add(new WaterMeter() { });
waterMeters.Add(new WaterMeter() { });
waterMeters.Add(new WaterMeter() { });
}
private void procParamsCfgButton_Click(object sender, EventArgs e)
{
if (procParams == null)
{
procParams = new ProcParams(true);
}
}
private void startCfgButton_Click(object sender, EventArgs e)
{
if (startCfg == null)
{
startCfg = new S640StartFactory().DefaultConfig() as S640StartCfg;
}
var cfgForm = new TBF.UI.Bench.Components.ComponentParametersDlg(this);
var cfgControl = startCfg.GetControl(null);
cfgControl.Config = startCfg;
cfgControl.Config.ItemNr = 1;
cfgForm.ComponentCfgCtrl = cfgControl;
cfgForm.UnlockAfterStart = true;
DialogResult dr = cfgForm.ShowDialog();
if (dr == DialogResult.OK)
{
return;
}
}
private void startButton_Click(object sender, EventArgs e)
{
if (startCfg == null || procParams == null)
{
MessageBox.Show("Not configured");
}
(new S640CommForm(S640Activity.Start, startCfg, procParams, test, waterMeters)).ShowDialog();
}
private void endCfgButton_Click(object sender, EventArgs e)
{
if (endCfg == null)
{
endCfg = new S640EndFactory().DefaultConfig() as S640EndCfg;
}
var cfgForm = new TBF.UI.Bench.Components.ComponentParametersDlg(this);
var cfgControl = endCfg.GetControl(null);
cfgControl.Config = endCfg;
cfgControl.Config.ItemNr = 1;
cfgForm.ComponentCfgCtrl = cfgControl;
cfgForm.UnlockAfterStart = true;
DialogResult dr = cfgForm.ShowDialog();
if (dr == DialogResult.OK)
{
return;
}
}
private void endButton_Click(object sender, EventArgs e)
{
if (endCfg == null || procParams == null)
{
MessageBox.Show("Not configured");
}
(new S640CommForm(S640Activity.End, endCfg, procParams, test, waterMeters)).ShowDialog();
}
private void getButton_Click(object sender, EventArgs e)
{
string baseUrl = baseUrlTextBox.Text;
string relativeUrl = relativeUrlTextBox.Text;
int wmType = 0;
int q2PreCorrectionLR;
int q2PreCorrectionRL;
if (string.IsNullOrEmpty(baseUrl) || string.IsNullOrEmpty(relativeUrl) ||
!int.TryParse(idWzTypTextBox.Text, out wmType) || wmType <= 0)
{
MessageBox.Show("Invalid parameter(s)");
return;
}
/// Get Q2 pre-correction values from REST service
try
{
GetQ2PreCorrectionClient client = new GetQ2PreCorrectionClient(baseUrl);
client.GetToken("ReadUser", "sensus",
"https://deluh1web03.world.fluidtechnology.net/SensusCore/api/v1/Locations/1/Login2").Wait();
string finalRelativeUrl = string.Format(relativeUrl, wmType);
Q2PreCorrection response = client.GetQ2Correction(finalRelativeUrl).Result;
if (response != null && response.AreDataCalculated)
{
q2PreCorrectionLR = response.CorrLR;
q2PreCorrectionRL = response.CorrRL;
MessageBox.Show(string.Format(
"Q2 corrections from a REST client for WM Type = {0} are: LR = {1}, RL = {2}",
wmType, q2PreCorrectionLR, q2PreCorrectionRL));
}
else
{
MessageBox.Show(string.Format(
"Failed to obtain Q2 corrections from a REST client for WM Type = {0}", wmType));
}
}
catch (Exception exc)
{
MessageBox.Show(string.Format(
"Failed to obtain Q2 corrections from a REST client for WM Type = {0}: {1}",
wmType, exc.Message));
}
}
}
}
+25 -16
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
/// Copyright (c) 2015-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -23,7 +23,9 @@ namespace SharedDatabase.Entities
public virtual int UserNumber { get; set; }
public virtual string ProcedureName { get; set; }
public virtual bool IsRemoteProcedure { get; set; } /// Stara Tura, not mapped to DB
public virtual string ProcedureDescription { get; set; } /// CEVAK, not mapped to DB
public virtual string PurchaseOrder { get; set; } /// Stara Tura, Nanjing, not mapped to DB
public virtual string Workflow { get; set; } /// Stara Tura, Nanjing, not mapped to DB
public virtual string ProcedureDescription { get; set; } /// CEVAK, not mapped to DB
public virtual int ProcedureRevision { get; set; }
public virtual string WatermetersStr { get; set; } /// CEVAK, not mapped to DB
public virtual string Remark { get; set; }
@@ -36,7 +38,8 @@ namespace SharedDatabase.Entities
public virtual int Counter9 { get; set; }
public virtual int Counter10 { get; set; }
public virtual DateTime StartTime { get; set; }
public virtual DateTime EndTime { get; set; }
public virtual DateTime EndTime { get; set; }
public virtual DateTime SaveTime { get; set; }
public virtual bool Dirty { get; set; }
public virtual bool RsltsSent { get; set; }
public virtual bool RsltsPrinted { get; set; }
@@ -111,6 +114,7 @@ namespace SharedDatabase.Entities
UserName = string.Empty;
ProcedureName = string.Empty;
IsRemoteProcedure = false;
PurchaseOrder = null;
ProcedureDescription = string.Empty;
WatermetersStr = string.Empty;
Remark = string.Empty;
@@ -138,6 +142,7 @@ namespace SharedDatabase.Entities
UserNumber = oriBatch.UserNumber;
ProcedureName = oriBatch.ProcedureName;
IsRemoteProcedure = oriBatch.IsRemoteProcedure;
PurchaseOrder = oriBatch.PurchaseOrder;
ProcedureDescription = oriBatch.ProcedureDescription;
ProcedureRevision = oriBatch.ProcedureRevision;
WatermetersStr = oriBatch.WatermetersStr;
@@ -152,6 +157,7 @@ namespace SharedDatabase.Entities
Counter10 = oriBatch.Counter10;
StartTime = oriBatch.StartTime;
EndTime = oriBatch.EndTime;
SaveTime = oriBatch.SaveTime;
Dirty = oriBatch.Dirty;
RsltsSent = oriBatch.RsltsSent;
RsltsPrinted = oriBatch.RsltsPrinted;
@@ -204,7 +210,7 @@ namespace SharedDatabase.Entities
foreach (var tr in TestRslts)
{
if (tr.TestDone)
if (tr.TestDone && tr.AmbTempMean != 0)
{
double duration = (tr.EndTime - tr.StartTime).TotalSeconds;
timeSum += duration;
@@ -222,7 +228,7 @@ namespace SharedDatabase.Entities
foreach (var tr in TestRslts)
{
if (tr.TestDone)
if (tr.TestDone && tr.AmbPressMean != 0)
{
double duration = (tr.EndTime - tr.StartTime).TotalSeconds;
timeSum += duration;
@@ -240,7 +246,7 @@ namespace SharedDatabase.Entities
foreach (var tr in TestRslts)
{
if (tr.TestDone)
if (tr.TestDone && tr.AmbHumiMean != 0)
{
double duration = (tr.EndTime - tr.StartTime).TotalSeconds;
timeSum += duration;
@@ -255,7 +261,7 @@ namespace SharedDatabase.Entities
{
for (int i = 0; i < TestRslts.Count; i++)
{
if (TestRslts[i].Publish() == Common.Publish.Always)
if (TestRslts[i].Publish() == Common.Publish.Always && TestRslts[i].AmbTempStart != 0)
return TestRslts[i].AmbTempStart;
}
return 0;
@@ -264,7 +270,7 @@ namespace SharedDatabase.Entities
{
for (int i = 0; i < TestRslts.Count; i++)
{
if (TestRslts[i].Publish() == Common.Publish.Always)
if (TestRslts[i].Publish() == Common.Publish.Always && TestRslts[i].AmbPressStart != 0)
return TestRslts[i].AmbPressStart;
}
return 0;
@@ -273,7 +279,7 @@ namespace SharedDatabase.Entities
{
for (int i = 0; i < TestRslts.Count; i++)
{
if (TestRslts[i].Publish() == Common.Publish.Always)
if (TestRslts[i].Publish() == Common.Publish.Always && TestRslts[i].AmbHumiStart != 0)
return TestRslts[i].AmbHumiStart;
}
return 0;
@@ -281,27 +287,27 @@ namespace SharedDatabase.Entities
public virtual double AmbTempEnd()
{
for (int i = TestRslts.Count - 1; i >= 0; i++)
for (int i = TestRslts.Count - 1; i >= 0; i--)
{
if (TestRslts[i].Publish() == Common.Publish.Always)
if (TestRslts[i].Publish() == Common.Publish.Always && TestRslts[i].AmbTempEnd != 0)
return TestRslts[i].AmbTempEnd;
}
return 0;
}
public virtual double AmbPressEnd()
{
for (int i = TestRslts.Count - 1; i >= 0; i++)
for (int i = TestRslts.Count - 1; i >= 0; i--)
{
if (TestRslts[i].Publish() == Common.Publish.Always)
if (TestRslts[i].Publish() == Common.Publish.Always && TestRslts[i].AmbPressEnd != 0)
return TestRslts[i].AmbPressEnd;
}
return 0;
}
public virtual double AmbHumiEnd()
{
for (int i = TestRslts.Count - 1; i >= 0; i++)
for (int i = TestRslts.Count - 1; i >= 0; i--)
{
if (TestRslts[i].Publish() == Common.Publish.Always)
if (TestRslts[i].Publish() == Common.Publish.Always && TestRslts[i].AmbHumiEnd != 0)
return TestRslts[i].AmbHumiEnd;
}
return 0;
@@ -318,7 +324,8 @@ namespace SharedDatabase.Entities
public override string ToString()
{
return string.Format("Batch #{0}, Start:{1}, End:{2}, Procedure:{3}", BatchNr, StartTime, EndTime, ProcedureName);
return string.Format("Batch {0} ({1}s) Start {2}, End {3}, Proc={4}",
BatchNr, (EndTime - StartTime).TotalSeconds, StartTime, EndTime, ProcedureName);
}
public virtual string ToString(int i)
@@ -359,6 +366,7 @@ namespace SharedDatabase.Entities
writer.Write(Counter10);
writer.Write(StartTime.ToString());
writer.Write(EndTime.ToString());
writer.Write(SaveTime.ToString());
writer.Write(Dirty);
writer.Write(RsltsSent);
writer.Write(RsltsPrinted);
@@ -425,6 +433,7 @@ namespace SharedDatabase.Entities
Counter10 = reader.ReadInt32();
StartTime = DateTime.Parse(reader.ReadString());
EndTime = DateTime.Parse(reader.ReadString());
SaveTime = DateTime.Parse(reader.ReadString());
Dirty = reader.ReadBoolean();
RsltsSent = reader.ReadBoolean();
RsltsPrinted = reader.ReadBoolean();
+3 -1
View File
@@ -63,7 +63,9 @@ namespace SharedDatabase.Entities
public virtual string ProcedureName() { return WaterMeter.Batch.ProcedureName; }
public virtual int BatchNr() { return WaterMeter.Batch.BatchNr; }
public virtual string SerialNr() { return WaterMeter.SerialNr; }
public virtual string SerialNr() { return (CompoundMeterId == (byte)Common.CompoundMeterId.CompoundAux)
? WaterMeter.SerialNrAux
: WaterMeter.SerialNr; }
public virtual string EndState() { return WaterMeter.EndState; }
public virtual double QRise() { return WaterMeter.QRise; } /// [m3/h]
public virtual double QFall() { return WaterMeter.QFall; } /// [m3/h]
-3
View File
@@ -7,7 +7,6 @@ namespace SharedDatabase.Entities
{
public virtual int Id { get; protected set; }
public virtual string Name { get; set; }
public virtual string OraDBType { get; set; }
public virtual string Description { get; set; }
public virtual sbyte CodeType { get; set; }
public virtual sbyte CodeForm { get; set; }
@@ -29,7 +28,6 @@ namespace SharedDatabase.Entities
Part rslt = new Part();
rslt.Name = Name;
rslt.OraDBType = OraDBType;
rslt.Description = Description;
rslt.CodeType = CodeType;
rslt.CodeForm = CodeForm;
@@ -69,7 +67,6 @@ namespace SharedDatabase.Entities
public Part(string name, Process workflow, CodeType codeType, CodeForm codeForm, CodeLocation codeLocation)
{
Name = name;
OraDBType = string.Empty;
Description = string.Empty;
CodeType = (sbyte)codeType;
CodeForm = (sbyte)codeForm;
+2 -2
View File
@@ -48,8 +48,8 @@ namespace SharedDatabase.Entities
Name = test.Name;
Repeats = test.Repeats;
Qtg = test.Qtg;
Qfrom = test.Qfrom;
Qto = test.Qto;
Qfrom = test.QfromM3ph();
Qto = test.QtoM3ph();
TargetVolume = test.Volume;
TargetTime = test.TestTime;
Method = test.Method;
+16 -14
View File
@@ -1,10 +1,11 @@
///
/// Copyright (c) 2015-2022 Sensus Slovensko a.s.
/// Copyright (c) 2015-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Common;
namespace SharedDatabase.Entities
{
@@ -146,8 +147,9 @@ namespace SharedDatabase.Entities
public virtual int Counter5 { get; set; }
/// Wrappers
public virtual string Name() { return Utils.GetTestName(TestData.Name, TestData.Repeats, RepetitionNr); }
public virtual int Repeats() { return TestData.Repeats; }
public virtual string Name() { return Common.Utils.GetTestName(TestData.Name, TestData.Repeats, RepetitionNr); }
public virtual string Key() { return string.Format("{0}~{1}~{2}~{3}", TestData.Name, Part, TestData.Repeats, RepetitionNr); } /// Unique key
public virtual int Repeats() { return TestData.Repeats; }
public virtual double Qfrom() { return TestData.Qfrom; }
public virtual double Qto() { return TestData.Qto; }
public virtual double TargetVolume() { return TestData.TargetVolume; }
@@ -157,11 +159,11 @@ namespace SharedDatabase.Entities
public virtual string Scale() { return (Components != null && Components.Scale != null) ? Components.Scale : string.Empty; }
public virtual string Diverter() { return (Components != null && Components.Diverter != null) ? Components.Diverter : string.Empty; }
public virtual string RegValve() { return (Components != null && Components.RegValve != null) ? Components.RegValve : string.Empty; }
public virtual bool IsRelErrTest() { return (MethodClass != null) ? (MethodClass.Contains("FixedStart") || MethodClass.Contains("FlyingStart") || MethodClass.Contains("CombinedWithDetection") || MethodClass.Contains("DiverterTest") || MethodClass.Contains("ManualEntry")) : true; }
public virtual bool IsRelErrTest() { return (MethodClass != null) ? (MethodClass.Contains("StandingStart") || MethodClass.Contains("FlyingStart") || MethodClass.Contains("CombinedWithDetection") || MethodClass.Contains("DiverterTest") || MethodClass.Contains("ManualEntry")) : true; }
public virtual bool IsPMaxTest() { return (MethodClass != null) ? (MethodClass.Contains("PMaxTest") || MethodClass.Contains("LeakTest") || TestData.Method.ToLower().Contains("pmax")) : true; }
public virtual bool IsStartStop() { return (MethodClass != null) ? MethodClass.Contains("FixedStart") : true; }
public virtual bool IsStartStop() { return (MethodClass != null) ? MethodClass.Contains("StandingStart") : true; }
public virtual bool IsDiverter() { return (MethodClass != null) ? ((MethodClass.Contains("FlyingStart") && MethodClass.Contains("MassColl")) || MethodClass.Contains("DiverterTest")) : true; }
public virtual bool IsVolumeMethod() { return (MethodClass != null) ? (MethodClass.Contains("TestMethods.FixedStart.") || MethodClass.Contains("TestMethods.FlyingStart.")) : false; }
public virtual bool IsVolumeMethod() { return (MethodClass != null) ? (MethodClass.Contains("TestMethods.StandingStart.") || MethodClass.Contains("TestMethods.FlyingStart.")) : false; }
public virtual string MethodElde()
{
@@ -170,9 +172,9 @@ namespace SharedDatabase.Entities
else if (MethodClass.Contains("TestMethods.FlyingStartMassCollectionProlonged.")) return "MS";
else if (MethodClass.Contains("TestMethods.FlyingStartMassCollectionComparative.")) return "MS";
else if (MethodClass.Contains("TestMethods.FlyingStart.")) return "VS";
else if (MethodClass.Contains("TestMethods.FixedStartMassCollection.")) return "MP";
else if (MethodClass.Contains("TestMethods.FixedStartTankCollection.")) return "VP";
else if (MethodClass.Contains("TestMethods.FixedStart.")) return "VP";
else if (MethodClass.Contains("TestMethods.StandingStartMassCollection.")) return "MP";
else if (MethodClass.Contains("TestMethods.StandingStartTankCollection.")) return "VP";
else if (MethodClass.Contains("TestMethods.StandingStart.")) return "VP";
else return string.Empty;
}
@@ -224,11 +226,11 @@ namespace SharedDatabase.Entities
}
}
public virtual double ErrLimMargin() { return TestData.ErrLimMargin; }
public virtual float TempLimLo() { return TestData.TempLimLo; }
public virtual float TempLimHi() { return TestData.TempLimHi; }
public virtual bool Evaluate() { return TestData.Evaluate; }
public virtual Common.Publish Publish() { return (Common.Publish)TestData.Publish; }
public virtual double ErrLimMargin() { return TestData.ErrLimMargin; }
public virtual float TempLimLo() { return TestData.TempLimLo; }
public virtual float TempLimHi() { return TestData.TempLimHi; }
public virtual bool Evaluate() { return TestData.Evaluate; }
public virtual Publish Publish() { return (Publish)TestData.Publish; }
public TestRslt()
+5
View File
@@ -501,5 +501,10 @@ namespace SharedDatabase.Entities
{
return string.Format("{0}~{1}~{2}", UserName, FullName, legalizator);
}
public virtual string ToEncodedStr(string _legalizator)
{
return string.Format("{0}~{1}~{2}", UserName, FullName, _legalizator);
}
}
}
+36 -21
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
/// Copyright (c) 2015-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -43,8 +43,9 @@ namespace SharedDatabase.Entities
{
public virtual int Id { get; protected set; }
public virtual string SerialNr { get; set; } /// S/N _or_ S/N of the main meter of a compound meter _or_ PCB Number of an iPerl water meter
public virtual string SerialNrAux { get; set; } /// S/N of the aux. meter of a compound meter _or_ a complete assigned S/N of an iPerl water meter
public virtual string PurchaseOrder { get; set; }
public virtual string SerialNrAux { get; set; } /// S/N of the aux. meter of a compound meter _or_ eRegister PCB Number of a 640 water meter
public virtual string RadioAddress { get; set; }
public virtual string PurchaseOrder { get; set; }
public virtual int YearOfProduction { get; set; }
public virtual int WMPosition { get; set; } /// 1-based water meter position
public virtual string EndState { get; set; } /// End state (of the main water meter)
@@ -76,7 +77,6 @@ namespace SharedDatabase.Entities
/// <summary>
/// Data from a production test bench (in case of tests on iPerl special)
/// </summary>
public virtual string RadioAddress { get; set; }
public virtual int PaletteNr { get; set; }
public virtual int UmkartonNr { get; set; }
public virtual string ProdTestBench { get; set; }
@@ -96,6 +96,7 @@ namespace SharedDatabase.Entities
public virtual string Prefix { get; set; }
public virtual string Suffix { get; set; }
public virtual string CompleteSerialNr { get; set; }
public virtual string OriRadioAddress { get; set; } /// Not mapped to DB !!! Original radio address of a 640 water meter (albatrosID)
public virtual int WMTypeRevision { get; set; }
public virtual int Pruefindex { get; set; } /// >=1 ... pruefindex, 0 ... unknown (no reading from DB yet)
public virtual int HydrPruefung { get; set; }
@@ -108,7 +109,6 @@ namespace SharedDatabase.Entities
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; }
public virtual Batch Batch { get; set; }
public virtual IList<MeterTestRslt> MeterTestRslts { get; set; }
@@ -116,15 +116,23 @@ namespace SharedDatabase.Entities
///
/// Wrappers
///
public virtual string ProductName() { return WaterMeterData.ProductName; }
public virtual string GetEndStateAux() { return Compound() ? EndStateAux : string.Empty; }
public virtual void SetEndStateAux(string s) { if (Compound()) EndStateAux = s; }
public virtual string GetStartState() { return Compound() ? string.Empty : EndStateAux; }
public virtual void SetStartState(string s) { if (!Compound()) EndStateAux = s; }
public virtual string ProductName() { return WaterMeterData.ProductName; }
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 FlowNames Qnames() { return (FlowNames)WaterMeterData.Qnames; }
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; }
public virtual double Q1_Qmin() { return WaterMeterData.Q1_Qmin; }
public virtual double ErrLimHiQ() { return WaterMeterData.ErrLimHiQ; }
public virtual double ErrLimLoQ() { return WaterMeterData.ErrLimLoQ; }
public virtual bool Compound() { return WaterMeterData.Compound; }
public virtual bool HeatMeter() { return WaterMeterData.HeatMeter; }
@@ -439,18 +447,22 @@ namespace SharedDatabase.Entities
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
@@ -466,6 +478,7 @@ namespace SharedDatabase.Entities
SerialNr = src.SerialNr;
SerialNrAux = src.SerialNrAux;
RadioAddress = src.RadioAddress;
PurchaseOrder = src.PurchaseOrder;
YearOfProduction = src.YearOfProduction;
WMPosition = src.WMPosition;
@@ -494,22 +507,22 @@ namespace SharedDatabase.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;
@@ -645,6 +658,7 @@ namespace SharedDatabase.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);
@@ -673,7 +687,6 @@ namespace SharedDatabase.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);
@@ -689,6 +702,7 @@ namespace SharedDatabase.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);
@@ -738,6 +752,7 @@ namespace SharedDatabase.Entities
Id = reader.ReadInt32();
SerialNr = reader.ReadString();
SerialNrAux = reader.ReadString();
RadioAddress = reader.ReadString();
PurchaseOrder = reader.ReadString();
YearOfProduction = reader.ReadInt32();
WMPosition = reader.ReadInt32();
@@ -766,7 +781,6 @@ namespace SharedDatabase.Entities
FWVersion = reader.ReadString();
#endif
#if TURA_SPECIAL
RadioAddress = reader.ReadString();
PaletteNr = reader.ReadInt32();
UmkartonNr = reader.ReadInt32();
ProdTestBench = reader.ReadString();
@@ -782,6 +796,7 @@ namespace SharedDatabase.Entities
Prefix = reader.ReadString();
Suffix = reader.ReadString();
CompleteSerialNr = reader.ReadString();
OriRadioAddress = reader.ReadString();
WMTypeRevision = reader.ReadInt32();
Pruefindex = reader.ReadInt32();
HydrPruefung = reader.ReadInt32();
+17 -6
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
/// Copyright (c) 2015-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -17,11 +17,14 @@ namespace SharedDatabase.Entities
public virtual double DN { get; set; } /// [mm]
public virtual double L { get; set; } /// [mm]
public virtual Mounting Mounting { get; set; } /// H / V / S / F
public virtual bool NewQnames { get; set; } /// Yes = Q3... No = Qn...
public virtual sbyte Qnames { get; set; } /// see Common.Enums.FlowNames
public virtual double Q4_Qmax { get; set; } /// [m3/h]
public virtual double Q3_Qn { get; set; } /// [m3/h]
public virtual double Q2_Qt { get; set; } /// [m3/h]
public virtual double Q1_Qmin { get; set; } /// [m3/h]
public virtual double ErrLimHiQ { get; set; } /// [%]
public virtual double ErrLimLoQ { get; set; } /// [%]
public virtual string MetrologicalClass { get; set; }
public virtual TemperatureClass TemperatureClass { get; set; }
public virtual PressureLossClass PressureLossClass { get; set; }
@@ -64,11 +67,13 @@ namespace SharedDatabase.Entities
DN = oriWMData.DN;
L = oriWMData.L;
Mounting = oriWMData.Mounting;
NewQnames = oriWMData.NewQnames;
Qnames = oriWMData.Qnames;
Q4_Qmax = oriWMData.Q4_Qmax;
Q3_Qn = oriWMData.Q3_Qn;
Q2_Qt = oriWMData.Q2_Qt;
Q1_Qmin = oriWMData.Q1_Qmin;
ErrLimHiQ = oriWMData.ErrLimHiQ;
ErrLimLoQ = oriWMData.ErrLimLoQ;
MetrologicalClass = oriWMData.MetrologicalClass;
TemperatureClass = oriWMData.TemperatureClass;
PressureLossClass = oriWMData.PressureLossClass;
@@ -105,11 +110,13 @@ namespace SharedDatabase.Entities
if (DN != wmd.DN) return false;
if (L != wmd.L) return false;
if (Mounting != wmd.Mounting) return false;
if (NewQnames != wmd.NewQnames) return false;
if (Qnames != wmd.Qnames) return false;
if (Q4_Qmax != wmd.Q4_Qmax) return false;
if (Q3_Qn != wmd.Q3_Qn) return false;
if (Q2_Qt != wmd.Q2_Qt) return false;
if (Q1_Qmin != wmd.Q1_Qmin) return false;
if (ErrLimHiQ != wmd.ErrLimHiQ) return false;
if (ErrLimLoQ != wmd.ErrLimLoQ) return false;
if (MetrologicalClass != wmd.MetrologicalClass) return false;
if (TemperatureClass != wmd.TemperatureClass) return false;
if (PressureLossClass != wmd.PressureLossClass) return false;
@@ -161,11 +168,13 @@ namespace SharedDatabase.Entities
writer.Write(DN);
writer.Write(L);
writer.Write((int)Mounting);
writer.Write(NewQnames);
writer.Write((int)Qnames);
writer.Write(Q4_Qmax);
writer.Write(Q3_Qn);
writer.Write(Q2_Qt);
writer.Write(Q1_Qmin);
writer.Write(ErrLimHiQ);
writer.Write(ErrLimLoQ);
writer.Write((MetrologicalClass != null) ? MetrologicalClass : string.Empty);
writer.Write((int)TemperatureClass);
writer.Write((int)PressureLossClass);
@@ -197,11 +206,13 @@ namespace SharedDatabase.Entities
DN = reader.ReadDouble();
L = reader.ReadDouble();
Mounting = (Mounting)reader.ReadInt32();
NewQnames = reader.ReadBoolean();
Qnames = (sbyte)reader.ReadInt32();
Q4_Qmax = reader.ReadDouble();
Q3_Qn = reader.ReadDouble();
Q2_Qt = reader.ReadDouble();
Q1_Qmin = reader.ReadDouble();
ErrLimHiQ = reader.ReadDouble();
ErrLimLoQ = reader.ReadDouble();
MetrologicalClass = reader.ReadString();
TemperatureClass = (TemperatureClass)reader.ReadInt32();
PressureLossClass = (PressureLossClass)reader.ReadInt32();
+20 -20
View File
@@ -15,15 +15,15 @@ namespace SharedDatabase
public enum CodeType
{
[Description("")] UniqueNr = 0,
[Description("Sap6-8")] FlowtubeNr = 1, /// prvé 3 znaky sa zhodujú s poslednými 3 znakmi názvu
[Description("FT-20")] FlowtubeNrLU = 2, /// začiatok kódu sa zhoduje s názvom
[Description("1")] BatchNr = 3,
[Description("2")] BatchNrContainingPartName = 4,
[Description("3")] DateMMYY = 5,
[Description("4")] QualityCheck = 6,
[Description("Obj.")] PO = 7, /// Purchase order from Oracle table VT_AUFTRAG_PD
[Description("Silicon")] Silicon = 8,
[Description("No check")] UniqueNr = 0,
[Description("8-chars, first 3 ch = last 3 ch of SAP nr")] FlowtubeNr = 1, /// prvé 3 znaky sa zhodujú s poslednými 3 znakmi názvu
[Description("20-chars, first 8 ch = SAP nr")] FlowtubeNrLU = 2, /// začiatok kódu sa zhoduje s názvom
[Description("Batch number")] BatchNr = 3,
[Description("Batch number containing part SAP nr")] BatchNrContainingPartName = 4,
[Description("Month in form MMYY, 4 digits")] DateMMYY = 5,
[Description("Quality check")] QualityCheck = 6,
[Description("Valid purchase order from a DB")] PO = 7, /// Purchase order from OrderInfo table of MySQL DB or from VT_AUFTRAG_PD table of Oracle DB
[Description("Silicon")] Silicon = 8,
/// 1. change requires special password
/// 2. do not clear
/// 3. save locally
@@ -33,17 +33,17 @@ namespace SharedDatabase
public enum CodeForm
{
Barcode = 0, /// Barcode
QRCode = 1, /// QR code
Keyboard = 2, /// Data entered by a keyboard
OkNok = 3, /// OK/NOK or Yes/No data entered by a keyboard or a mouse
SerialNr = 4, /// Complete serial number of iPERL (follows PcbNumber which is a reference part)
Camera = 5,
Scale = 6,
SNGenerator = 7,
DataStream = 8,
Spare2 = 9,
Spare3 = 10,
[Description("Barcode scanner")] Barcode = 0, /// Barcode
[Description("QR code scanner")] QRCode = 1, /// QR code
[Description("Keyboard")] Keyboard = 2, /// Data entered by a keyboard
[Description("OK/NOK manual entry")] OkNok = 3, /// OK/NOK or Yes/No data entered by a keyboard or a mouse
[Description("Complete S/N from DB")] SerialNr = 4, /// Complete serial number of iPERL (follows PcbNumber which is a reference part)
[Description("Camera")] Camera = 5,
[Description("Scale (mass)")] Scale = 6,
[Description("S/N generator/printer")] SNGenerator = 7,
[Description("S640 datastream")] DataStream = 8,
[Description("(spare 2)")] Spare2 = 9,
[Description("(spare 3)")] Spare3 = 10,
Count
}
+1 -1
View File
@@ -79,7 +79,7 @@ namespace SharedDatabase.Forms
#if DEBUG
user = "milan";
userNameTextBox.Text = "milan";
passwordTextBox.Text = "kremik";
passwordTextBox.Text = "kraken";
#endif
}
+112
View File
@@ -0,0 +1,112 @@
///
/// Copyright (c) 2022 Sensus Slovensko a.s.
///
namespace SharedDatabase.Forms
{
partial class PlainLoginDlg
{
/// <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(PlainLoginDlg));
this.userNameLabel = new System.Windows.Forms.Label();
this.passwordLabel = new System.Windows.Forms.Label();
this.passwordTextBox = new System.Windows.Forms.TextBox();
this.cancelButton = new System.Windows.Forms.Button();
this.okButton = new System.Windows.Forms.Button();
this.userNameTextBox = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// aliasLabel
//
resources.ApplyResources(this.userNameLabel, "aliasLabel");
this.userNameLabel.Name = "aliasLabel";
//
// passwordLabel
//
resources.ApplyResources(this.passwordLabel, "passwordLabel");
this.passwordLabel.Name = "passwordLabel";
//
// passwordTextBox
//
resources.ApplyResources(this.passwordTextBox, "passwordTextBox");
this.passwordTextBox.Name = "passwordTextBox";
this.passwordTextBox.UseSystemPasswordChar = true;
this.passwordTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.passwordTextBox_KeyPress);
//
// cancelButton
//
resources.ApplyResources(this.cancelButton, "cancelButton");
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.cancelButton.Name = "cancelButton";
this.cancelButton.UseVisualStyleBackColor = true;
this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
//
// okButton
//
resources.ApplyResources(this.okButton, "okButton");
this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.okButton.Name = "okButton";
this.okButton.UseVisualStyleBackColor = true;
this.okButton.Click += new System.EventHandler(this.okButton_Click);
//
// userNameTextBox
//
resources.ApplyResources(this.userNameTextBox, "userNameTextBox");
this.userNameTextBox.Name = "userNameTextBox";
this.userNameTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.userNameTextBox_KeyPress);
//
// PlainLoginDlg
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.cancelButton;
this.Controls.Add(this.userNameTextBox);
this.Controls.Add(this.okButton);
this.Controls.Add(this.cancelButton);
this.Controls.Add(this.passwordTextBox);
this.Controls.Add(this.passwordLabel);
this.Controls.Add(this.userNameLabel);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Name = "PlainLoginDlg";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.PlainLoginDlg_FormClosing);
this.Load += new System.EventHandler(this.LoginDlg_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label userNameLabel;
private System.Windows.Forms.Label passwordLabel;
private System.Windows.Forms.TextBox userNameTextBox;
private System.Windows.Forms.TextBox passwordTextBox;
private System.Windows.Forms.Button cancelButton;
private System.Windows.Forms.Button okButton;
}
}
+315
View File
@@ -0,0 +1,315 @@
///
/// Copyright (c) 2022 Sensus Slovensko a.s.
///
using System;
using System.Drawing;
using System.Windows.Forms;
using log4net;
using Common;
using GemCard;
using SharedDatabase.Entities;
using SharedDatabase.Resources;
namespace SharedDatabase.Forms
{
/// <summary>
/// Provides login dialog as well as user authorization using TBF.User.Authorize(...)
/// (i.e. when DialogResult is OK, user was authorized).
/// </summary>
public partial class PlainLoginDlg : Form
{
private static readonly ILog log = LogManager.GetLogger(typeof(PlainLoginDlg));
/// Public readonly
public string UserName { get { return user; } }
public string FullName { get { return fullName; } }
/// Private fields
string user;
string password;
GID[] requiredGroupMembership;
bool noDatabase;
Color oriBackColor;
string fullName; /// Description of the selected user
/// Smart card support, card S/N is used as user.Tag
CardNative card;
string smartCardReader;
public LoginMethod Method;
public string VersionString;
/// <summary>
/// Constructor.
/// </summary>
public PlainLoginDlg()
{
InitializeComponent();
oriBackColor = BackColor;
}
/// <summary>
/// Constructor with a predefined user.
/// </summary>
public PlainLoginDlg(string predefinedUser, string prompt = null)
: this()
{
user = predefinedUser;
userNameTextBox.Text = predefinedUser;
if (prompt != null) Text = prompt;
}
/// <summary>
/// Constructor with 'no Database' flag.
/// </summary>
public PlainLoginDlg(bool noDatabase, string prompt = null)
: this()
{
this.noDatabase = noDatabase;
if (prompt != null) Text = prompt;
}
/// <summary>
/// Constructor when a specific group membership is required.
/// </summary>
public PlainLoginDlg(GID[] requiredGroupMembership, string prompt = null)
: this()
{
this.requiredGroupMembership = requiredGroupMembership;
if (prompt != null) Text = prompt;
}
/// <summary>
/// Constructor with a predefined user when a specific group membership is required.
/// </summary>
public PlainLoginDlg(string predefinedUser, GID[] requiredGroupMembership, string prompt = null)
: this()
{
user = predefinedUser;
userNameTextBox.Text = predefinedUser;
this.requiredGroupMembership = requiredGroupMembership;
Text = (prompt != null) ? prompt : Strings.User_Login + (string.IsNullOrEmpty(VersionString) ? "" : (" " + VersionString));
}
private void LoginDlg_Load(object sender, EventArgs e)
{
Localize();
if (user == null)
userNameTextBox.Select();
else
passwordTextBox.Select();
///
/// Smart card reader detection
///
smartCardReader = null; /// null = No smart card reader detected
#if TURA_IPERL || TURA_IPERL_NEW || TURA_SPECIAL
try
{
card = new CardNative();
/// Find NFC smart card reader
string[] cardReaders = card.ListReaders();
if (cardReaders != null)
{
foreach (var crd in cardReaders)
{
log.WarnFormat("SMART card reader found: {0}", crd);
}
foreach (var crd in cardReaders)
{
if (crd.Contains("NFC"))
{
log.ErrorFormat("SMART card reader selected: {0}", crd);
smartCardReader = crd; /// NFC smart card reader detected
break;
}
}
}
if (!string.IsNullOrEmpty(smartCardReader))
{
/// Reader found, initialize NFC smart card reader
card.OnCardInserted += delegate(object sndr, CardInsertedEventArgs args)
{
if (InvokeRequired) { Invoke(new EventHandler<CardInsertedEventArgs>(OnCardInserted), sndr, args); }
else OnCardInserted(sndr, args);
};
card.OnCardRemoved += delegate(object sndr, CardRemovedEventArgs args)
{
if (InvokeRequired) { Invoke(new EventHandler<CardRemovedEventArgs>(OnCardRemoved), sndr, args); }
else OnCardRemoved(sndr, args);
};
card.StartCardEvents(smartCardReader);
Text += " (NFC)";
}
}
catch (Exception)
{
smartCardReader = null;
}
#endif
}
void Localize()
{
userNameLabel.Text = Strings.User_name;
passwordLabel.Text = Strings.Password;
okButton.Text = Strings.OkBtnText;
cancelButton.Text = Strings.CancelBtnText;
}
/// <summary>
/// Try to authorize the user when OK clicked.
/// </summary>
private void okButton_Click(object sender, EventArgs e)
{
user = userNameTextBox.Text;
password = passwordTextBox.Text;
bool authorized = Common.Utils.IsPowerUser(user, password);
if (authorized) fullName = "Power user";
if (!authorized && !noDatabase)
{
DBSettings[] dbs = new DBSettings[] { CurrentUser.RemoteUsersDB, CurrentUser.LocalUsersDB };
foreach (var db in dbs)
{
try
{
var usr1 = Entities.User.LoadUserByName(user, db);
if (usr1.IsMemberOf(requiredGroupMembership) && usr1.IsCorrectPassword(password))
{
authorized = true;
fullName = usr1.FullName;
break;
}
}
catch (Exception) { }
}
}
if (authorized)
{
DialogResult = DialogResult.OK;
Close();
return;
}
MessageBox.Show(Strings.Invalid_username_or_password, Strings.Error, MessageBoxButtons.OK);
DialogResult = DialogResult.None;
return;
}
/// <summary>
/// Cancel clicked, do not try to authorize.
/// </summary>
private void cancelButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
return;
}
private void userNameTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (Convert.ToInt32(e.KeyChar) == 13)
{
passwordTextBox.Focus();
}
}
private void passwordTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (Convert.ToInt32(e.KeyChar) == 13)
{
okButton_Click(sender, e);
}
}
void OnCardInserted(object sender, CardInsertedEventArgs args)
{
string tag = string.Empty;
try
{
BackColor = Color.Green;
card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1);
/// Read the serial number of the card
APDUResponse response = card.Transmit(new APDUCommand(0xFF, 0xCA, 0x00, 0x00, null, 7));
tag = response.ToString();
card.Disconnect(DISCONNECT.Leave);
}
catch
{
tag = string.Empty;
}
DBSettings[] dbs = new DBSettings[] { CurrentUser.RemoteUsersDB, CurrentUser.LocalUsersDB };
bool authorized = false;
AuthorizedAs authorizedAs = AuthorizedAs.RemoteUser;
///
foreach (var db in dbs)
{
try
{
Entities.User loadedUser = Entities.User.LoadUserByTag(tag, db);
if (loadedUser != null)
{
authorized = (tag == loadedUser.Tag && loadedUser.IsMemberOf(requiredGroupMembership));
if (authorized)
{
user = loadedUser.UserName;
break;
}
}
}
catch (Exception) { }
authorizedAs = AuthorizedAs.LocalUser;
}
if (authorized)
{
CurrentUser.AuthorizedAs = authorizedAs;
DialogResult = DialogResult.OK;
Close();
return;
}
MessageBox.Show(Strings.Invalid_username_or_password, Strings.Error, MessageBoxButtons.OK);
DialogResult = DialogResult.None;
return;
}
void OnCardRemoved(object sender, CardRemovedEventArgs args)
{
BackColor = oriBackColor;
}
private void PlainLoginDlg_FormClosing(object sender, FormClosingEventArgs e)
{
if (!string.IsNullOrEmpty(smartCardReader))
{
try { card.StopCardEvents(); }
catch { }
}
}
}
}
+300
View File
@@ -0,0 +1,300 @@
<?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="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="aliasLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="aliasLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>11, 24</value>
</data>
<data name="aliasLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>58, 13</value>
</data>
<data name="aliasLabel.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="aliasLabel.Text" xml:space="preserve">
<value>User name</value>
</data>
<data name="&gt;&gt;aliasLabel.Name" xml:space="preserve">
<value>aliasLabel</value>
</data>
<data name="&gt;&gt;aliasLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;aliasLabel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;aliasLabel.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="passwordLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="passwordLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>11, 51</value>
</data>
<data name="passwordLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 13</value>
</data>
<data name="passwordLabel.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="passwordLabel.Text" xml:space="preserve">
<value>Password</value>
</data>
<data name="&gt;&gt;passwordLabel.Name" xml:space="preserve">
<value>passwordLabel</value>
</data>
<data name="&gt;&gt;passwordLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;passwordLabel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;passwordLabel.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="passwordTextBox.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="passwordTextBox.Location" type="System.Drawing.Point, System.Drawing">
<value>150, 48</value>
</data>
<data name="passwordTextBox.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 20</value>
</data>
<data name="passwordTextBox.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;passwordTextBox.Name" xml:space="preserve">
<value>passwordTextBox</value>
</data>
<data name="&gt;&gt;passwordTextBox.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;passwordTextBox.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;passwordTextBox.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="cancelButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="cancelButton.Location" type="System.Drawing.Point, System.Drawing">
<value>336, 48</value>
</data>
<data name="cancelButton.Size" type="System.Drawing.Size, System.Drawing">
<value>105, 28</value>
</data>
<data name="cancelButton.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="cancelButton.Text" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="&gt;&gt;cancelButton.Name" xml:space="preserve">
<value>cancelButton</value>
</data>
<data name="&gt;&gt;cancelButton.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cancelButton.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;cancelButton.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="okButton.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="okButton.Location" type="System.Drawing.Point, System.Drawing">
<value>336, 14</value>
</data>
<data name="okButton.Size" type="System.Drawing.Size, System.Drawing">
<value>105, 28</value>
</data>
<data name="okButton.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="okButton.Text" xml:space="preserve">
<value>OK</value>
</data>
<data name="&gt;&gt;okButton.Name" xml:space="preserve">
<value>okButton</value>
</data>
<data name="&gt;&gt;okButton.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;okButton.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;okButton.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="userNameTextBox.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="userNameTextBox.Location" type="System.Drawing.Point, System.Drawing">
<value>150, 22</value>
</data>
<data name="userNameTextBox.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 20</value>
</data>
<data name="userNameTextBox.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;userNameTextBox.Name" xml:space="preserve">
<value>userNameTextBox</value>
</data>
<data name="&gt;&gt;userNameTextBox.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;userNameTextBox.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;userNameTextBox.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>456, 88</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>User login</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>LoginDlg</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>
+14 -1
View File
@@ -22,7 +22,7 @@ namespace SharedDatabase
Test_start_time, /// 12
Test_end_time, /// 13
Test_time, /// 14
Flow, /// 15
Flow, /// 15 Calculated flow (use ConstMasterRaw/ConstMaster to calculate uncorrected flow of the reference flow meter)
T_up_mean, /// 16
T_down_mean, /// 17
T_div, /// 18
@@ -332,6 +332,19 @@ namespace SharedDatabase
Diverter, /// 281
RegValve, /// 282
X1, /// 283
X2, /// 284
X3, /// 285
X4, /// 286
X5, /// 287
X6, /// 288
X7, /// 289
X8, /// 290
X9, /// 291
RadioAddress, /// 292
OriRadioAddress, /// 293
Count,
}
}
+2 -1
View File
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
/// Copyright (c) 2015-2023 Sensus Slovensko a.s.
///
using FluentNHibernate.Mapping;
@@ -33,6 +33,7 @@ namespace SharedDatabase.Mappings
Map(x => x.StartTime);
Map(x => x.EndTime);
Map(x => x.SaveTime);
Map(x => x.Dirty);
Map(x => x.RsltsSent);
Map(x => x.RsltsPrinted);
-1
View File
@@ -8,7 +8,6 @@ namespace SharedDatabase.Mappings
{
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.OraDBType);
Map(x => x.Description);
Map(x => x.CodeType);
Map(x => x.CodeForm);
+5 -4
View File
@@ -2,17 +2,18 @@
/// Copyright (c) 2015-2022 Sensus Slovensko a.s.
///
using FluentNHibernate.Mapping;
using SharedDatabase.Entities;
namespace SharedDatabase.Mappings
{
class TestRsltMap : ClassMap<Entities.TestRslt>
class TestRsltMap : ClassMap<TestRslt>
{
public TestRsltMap()
{
Id(x => x.Id);
References<Entities.Batch>(x => x.Batch);
References<Entities.TestData>(x => x.TestData);
References<Entities.Components>(x => x.Components);
References<Batch>(x => x.Batch);
References<TestData>(x => x.TestData);
References<Components>(x => x.Components);
Map(x => x.Part);
Map(x => x.RepetitionNr);
Map(x => x.MethodClass);
+6 -5
View File
@@ -1,11 +1,12 @@
///
/// Copyright (c) 2015-2017 Sensus Slovensko a.s.
/// Copyright (c) 2015-2023 Sensus Slovensko a.s.
///
using FluentNHibernate.Mapping;
using SharedDatabase.Entities;
namespace SharedDatabase.Mappings
{
class WaterMeterDataMap : ClassMap<Entities.WaterMeterData>
class WaterMeterDataMap : ClassMap<WaterMeterData>
{
public WaterMeterDataMap()
{
@@ -17,13 +18,13 @@ namespace SharedDatabase.Mappings
Map(x => x.L);
Map(x => x.Mounting);
#if MUNICH && LANG_DE
Map(x => x.NewQnames);
#endif
Map(x => x.Qnames);
Map(x => x.Q4_Qmax);
Map(x => x.Q3_Qn);
Map(x => x.Q2_Qt);
Map(x => x.Q1_Qmin);
Map(x => x.ErrLimHiQ);
Map(x => x.ErrLimLoQ);
Map(x => x.MetrologicalClass);
Map(x => x.TemperatureClass);
+7 -5
View File
@@ -1,18 +1,20 @@
///
/// Copyright (c) 2015-2017 Sensus Metering Systems
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
///
using FluentNHibernate.Mapping;
using SharedDatabase.Entities;
namespace SharedDatabase.Mappings
{
class WaterMeterMap : ClassMap<Entities.WaterMeter>
class WaterMeterMap : ClassMap<WaterMeter>
{
public WaterMeterMap()
{
Id(x => x.Id);
Map(x => x.SerialNr);
Map(x => x.SerialNrAux);
Map(x => x.PurchaseOrder);
Map(x => x.RadioAddress);
Map(x => x.PurchaseOrder);
Map(x => x.YearOfProduction);
Map(x => x.WMPosition);
Map(x => x.EndState);
@@ -42,7 +44,6 @@ namespace SharedDatabase.Mappings
Map(x => x.FWVersion);
#endif
#if TURA_SPECIAL
Map(x => x.RadioAddress);
Map(x => x.PaletteNr);
Map(x => x.UmkartonNr);
Map(x => x.ProdTestBench);
@@ -59,9 +60,10 @@ namespace SharedDatabase.Mappings
Map(x => x.Prefix);
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);
+1 -1
View File
@@ -543,7 +543,7 @@ namespace SharedDatabase.Output
PruefungsNrLog = luID, /// Identification of a flow
QBezeichnungLog = fullTestNameWoPart, /// Flow name in Oracle database
Range = range,
Flow = (range == Range.R100_110) ? test.Qfrom : (range == Range.R90_100) ? test.Qto : (test.Qfrom + test.Qto) / 2,
Flow = (range == Range.R100_110) ? test.QfromM3ph() : (range == Range.R90_100) ? test.QtoM3ph() : (test.QfromM3ph() + test.QtoM3ph()) / 2,
TestTime = (int)Math.Round(test.TestTime),
ErrLimLoFromDB = test.ErrLimLo,
ErrLimHiFromDB = test.ErrLimHi,
+1 -1
View File
@@ -115,7 +115,7 @@ namespace SharedDatabase.Resources {
}
/// <summary>
/// Looks up a localized string similar to calibration specialist.
/// Looks up a localized string similar to legalizator.
/// </summary>
internal static string calibration_specialist {
get {
+1 -1
View File
@@ -157,7 +157,7 @@
<value>Are you sure?</value>
</data>
<data name="calibration_specialist" xml:space="preserve">
<value>calibration specialist</value>
<value>legalizator</value>
</data>
<data name="CancelBtnText" xml:space="preserve">
<value>Cancel</value>
+11 -2
View File
@@ -17,7 +17,7 @@
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<DefineConstants>TRACE;DEBUG;LANG_PL</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
@@ -25,7 +25,7 @@
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<DefineConstants>TRACE;LANG_PL</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
@@ -102,6 +102,12 @@
<Compile Include="Forms\PasswordChangeDlg.designer.cs">
<DependentUpon>PasswordChangeDlg.cs</DependentUpon>
</Compile>
<Compile Include="Forms\PlainLoginDlg.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\PlainLoginDlg.Designer.cs">
<DependentUpon>PlainLoginDlg.cs</DependentUpon>
</Compile>
<Compile Include="Forms\TripleLoginDlg.cs">
<SubType>Form</SubType>
</Compile>
@@ -187,6 +193,9 @@
<EmbeddedResource Include="Forms\PasswordChangeDlg.resx">
<DependentUpon>PasswordChangeDlg.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\PlainLoginDlg.resx">
<DependentUpon>PlainLoginDlg.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\TripleLoginDlg.resx">
<DependentUpon>TripleLoginDlg.cs</DependentUpon>
</EmbeddedResource>
+5 -1
View File
@@ -12,7 +12,7 @@ namespace SharedDatabase
{
public static string GetTestName(string name, int repeats, int repetitionNr)
{
return SharedDatabase.Utils.GetTestName(name, repeats, repetitionNr);
return Common.Utils.GetTestName(name, repeats, repetitionNr);
}
public static System.Drawing.Color GetSeverityColor(Common.Severity severity, bool foreColor = false)
@@ -40,6 +40,8 @@ namespace SharedDatabase
case 10: return 38; /// WR14
case 11: return 39; /// WR18
case 12: return 40; /// WR19
case 13: return 41; /// WR20
case 14: return 42; /// WR21
default: return 0;
}
}
@@ -57,6 +59,8 @@ namespace SharedDatabase
case 10: return "WR14";
case 11: return "WR18";
case 12: return "WR19";
case 13: return "WR20";
case 14: return "WR21";
default: return string.Empty;
}
}
+16
View File
@@ -83,6 +83,10 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkflowConfigurator", "WorkflowConfigurator\WorkflowConfigurator.csproj", "{AE275D47-A33B-47E6-9541-B6EA29D12434}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Workplace", "Workplace\Workplace.csproj", "{5D3E5031-0E8D-4348-92DF-A900F546ACEF}"
ProjectSection(ProjectDependencies) = postProject
{67BD7A8F-0FED-4FDE-B875-78D5A2BC9B2C} = {67BD7A8F-0FED-4FDE-B875-78D5A2BC9B2C}
{7CD2B5B4-3304-4151-B8B4-76A8B8AF9B06} = {7CD2B5B4-3304-4151-B8B4-76A8B8AF9B06}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataMatrix4Net", "DataMatrix4Net\DataMatrix4Net.csproj", "{7CD2B5B4-3304-4151-B8B4-76A8B8AF9B06}"
EndProject
@@ -92,6 +96,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenericTest", "GenericTest\
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProductionTracing", "ProductionTracing\ProductionTracing.csproj", "{328AD6D5-6E62-42FB-B348-9899F813DBD3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "S640TestApp", "S640TestApp\S640TestApp.csproj", "{EE097B5A-8162-45B1-9643-4969FC3A8921}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -416,6 +422,16 @@ Global
{328AD6D5-6E62-42FB-B348-9899F813DBD3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{328AD6D5-6E62-42FB-B348-9899F813DBD3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{328AD6D5-6E62-42FB-B348-9899F813DBD3}.Release|x86.ActiveCfg = Release|Any CPU
{EE097B5A-8162-45B1-9643-4969FC3A8921}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EE097B5A-8162-45B1-9643-4969FC3A8921}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EE097B5A-8162-45B1-9643-4969FC3A8921}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{EE097B5A-8162-45B1-9643-4969FC3A8921}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{EE097B5A-8162-45B1-9643-4969FC3A8921}.Debug|x86.ActiveCfg = Debug|Any CPU
{EE097B5A-8162-45B1-9643-4969FC3A8921}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EE097B5A-8162-45B1-9643-4969FC3A8921}.Release|Any CPU.Build.0 = Release|Any CPU
{EE097B5A-8162-45B1-9643-4969FC3A8921}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{EE097B5A-8162-45B1-9643-4969FC3A8921}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{EE097B5A-8162-45B1-9643-4969FC3A8921}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
/opt/vc/bin/raspivid -o - -t 0 | /usr/bin/cvlc stream:///dev/stdin --sout "#rtp{sdp=rtsp://:8554/}" :demux=h264
+1
View File
@@ -0,0 +1 @@
/opt/vc/bin/raspivid -w 640 -h 480 -fps 30 -o - -t 0 | /usr/bin/cvlc stream:///dev/stdin --sout "#rtp{sdp=rtsp://:8554/}" :demux=h264
+2
View File
@@ -0,0 +1,2 @@
/opt/vc/bin/raspivid -t 0 -cd MJPEG -w 1280 -h 960 -fps 30 -b 8000000 -o - | gst-launch-1.0 fdsrc ! "image/jpeg,framerate=40/1" ! jpegparse ! rtpjpegpay ! udpsink host=192.168.0.200 port=20000
+22 -1
View File
@@ -124,7 +124,7 @@ namespace TBF
[XmlArrayAttribute("MetersColumnWidths")]
public int[] MetersColumnWidths;
[XmlIgnore]
public int MetersColumnCount { get { return (ProcMetersColWidths != null) ? ProcMetersColWidths.Length : 0; } }
public int MetersColumnCount { get { return (MetersColumnWidths != null) ? MetersColumnWidths.Length : 0; } }
[XmlArrayAttribute("HeatMetersColumnWidths")]
public int[] HeatMetersColumnWidths;
@@ -245,6 +245,27 @@ namespace TBF
public string LastText3;
public string LastRemark;
/// DataEntry.Uni history
public string[] LastBgComm1;
public string[] LastBgComm2;
public string[] LastBgComm3;
///
public string[] LastBgColA;
public string[] LastBgColB;
public string[] LastBgColC;
public string[] LastBgColD;
public string[] LastBgColE;
///
public string[] LastEnComm1;
public string[] LastEnComm2;
public string[] LastEnComm3;
///
public string[] LastEnColA;
public string[] LastEnColB;
public string[] LastEnColC;
public string[] LastEnColD;
public string[] LastEnColE;
/// Purchase order history
public string[] PurchaseOrderHistory;
[XmlIgnore]
+38 -3
View File
@@ -1,9 +1,10 @@
///
/// Copyright (c) 2013-2019 Sensus Slovensko a.s.
/// Copyright (c) 2013-2023 Sensus Slovensko a.s.
///
using System;
using System.IO;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using log4net;
using Common;
@@ -228,6 +229,8 @@ namespace TBF
bool retryLogin = true; /// true = stay in a login loop
do
{
LoadingConfigEnd();
LoginDlgWithBenchSelection loginDlgBench;
if (LocalSettings.LastBenchName != null)
{
@@ -252,6 +255,7 @@ namespace TBF
{
log.FatalFormat("Test bench name: {0}", loginDlgBench.BenchName);
LoadingConfigStart();
CurrentUser.RemoteUsersDB = LocalSettings.TestBenches[i].UsersDBSettings;
CurrentUser.LocalUsersDB = LocalSettings.TestBenches[i].ProceduresDBSettings;
@@ -488,11 +492,12 @@ namespace TBF
try
{
/// Open the main application window
/// Open the main application window
log.Info("Creating the main window");
MainWnd = new UI.MainWnd();
log.Info("Opening the main window");
Application.Run(MainWnd);
LoadingConfigEnd();
Application.Run(MainWnd);
log.Info("The main window was closed");
}
catch (Exception e)
@@ -527,5 +532,35 @@ namespace TBF
log.FatalFormat("StackTrace : {0}{1}", Environment.NewLine, e.StackTrace);
log.Fatal("--------------------------------------");
}
static UI.Shared.ModelessActivityForm form;
static System.Threading.Thread formThread;
static void LoadingConfigStart()
{
form = new UI.Shared.ModelessActivityForm()
{
Message = Strings.Starting_system,
FontFamily = "Arial",
FontSize = 24,
FontStyle = FontStyle.Regular,
BackgroundColor = Color.LightBlue,
};
formThread = new System.Threading.Thread(() => form.ShowDialog());
formThread.Start();
System.Threading.Thread.Sleep(500);
}
static void LoadingConfigEnd()
{
if (form != null && formThread != null)
{
form.CloseForm(null, new EventArgs());
formThread.Join();
}
form = null;
formThread = null;
}
}
}
+3 -3
View File
@@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Sensus")]
[assembly: AssemblyProduct("TestBenchFramework")]
[assembly: AssemblyCopyright("Copyright © 2013 - 2022 Sensus Slovensko, a.s.")]
[assembly: AssemblyCopyright("Copyright © 2013 - 2023 Sensus Slovensko, a.s.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("3.3.1928.0")]
[assembly: AssemblyFileVersion("3.3.1928.0")]
[assembly: AssemblyVersion("3.9.2118.0")]
[assembly: AssemblyFileVersion("3.9.2118.0")]

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