Merge branch 'Dev_CUST'

This commit is contained in:
Thomas Wiedebusch 2025-12-15 10:31:04 +01:00
commit 092b6f197d
18 changed files with 2850 additions and 1306 deletions

View File

@ -13,4 +13,4 @@ using System.Reflection;
//
//[assembly: AssemblyVersion("1.2.*.0")]
[assembly: AssemblyVersion("2.8.13.*")]
[assembly: AssemblyVersion("2.8.14.*")]

View File

@ -1,6 +1,17 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeEditing/ContextActionTable/DisabledContextActions/=JetBrains_002EReSharper_002EAI_002ECore_002EContextActions_002EOpenAIAssistantContextAction/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/AdditionalAliasItemsToCorrectCommonErrors/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/AutoCompleteBasicCompletion/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/AutoCompleteImportCompletion/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/AutoCompleteSmartCompletion/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/AutopopupEnabled/AutopopupEnabled/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/ConfirmReferenceAdd/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/ImportItemsInBasicCompletion/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/InsertSpacingAfterKeywordsWhenRequired/@EntryValue">True</s:Boolean>
<s:String x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/IntellisenseGloballyEnabled/IntellisenseEnabled/@EntryValue">Enabled</s:String>
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/MiddleMatchingCompletion/@EntryValue">True</s:Boolean>
<s:String x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/ParenthesesInsertType/@EntryValue">Left</s:String>
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/ReplaceKeywordsWithTemplates/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/Highlighting/IdentifierHighlightingEnabled/@EntryValue">True</s:Boolean>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ArrangeMissingParentheses/@EntryIndexedValue">HINT</s:String>

View File

@ -116,7 +116,6 @@
<Compile Include="..\.shared\SharedAssemblyInfo.cs">
<Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>
<Compile Include="ServiceUrls.cs" />
<Compile Include="ServiceUrlsBackUp_New.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

View File

@ -7,219 +7,200 @@ namespace Xylem.Common.CommonCore.Configuration
/// <summary>
/// Urls for data base accesses
/// </summary>
public static class ServiceUrls_oldBackup
public static class ServiceUrls
{
//#if URI_OLD_DNS // this is defined in build configuration 'VPN_Debug' as the new DNS cannot be reached via VPN
// private const String ServerDns = "http://sla12iis01.emea.sensus.net";
//#else
private const String ServerDns = "http://delaz1web01.world.fluidtechnology.net";
//#endif
private const String DefaultInspectCordonelRequirementInfoUrl =
"http://sla12iis01.emea.sensus.net/LaaProductionWeb/";
private static readonly String DefaultInspectCordonelRequirementInfoUrl =
$"http://sla12iis01.emea.sensus.net/LaaProductionWeb/";
// return code: 404 not found, 400 Error with text, 200 okay
private const String DefaultEolDataForSentinelServiceUrl =
"http://sla12iis01.emea.sensus.net/LaaProductionWeb/api/cordonel/eolprogress/";
private static readonly String DefaultEolDataForSentinelServiceUrl =
$"http://sla12iis01.emea.sensus.net/LaaProductionWeb/api/cordonel/eolprogress/";
private const String DefaultGetPcbIdsFromSafeServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetPcbIdsFromSafe?ContainerDbId=";
private static readonly String DefaultGetPcbIdsFromSafeServiceUrl =
$"{ServerDns}/MeterProcessState/GetPcbIdsFromSafe?ContainerDbId=";
private const String DefaultAddPcbIdsToSafeServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/AddPcbIdsToSafe?ContainerDbId=";
private static readonly String DefaultGetExportDataServiceUrl =
$"{ServerDns}/MeterProcessState/api/Password/GetExportData?PcbId=";
private static readonly String DefaultGetCordonelMappingServiceUrl =
$"{ServerDns}/MeterProcessState/api/Order/GetCordonelMapping?PcbId=";
private static readonly String DefaultAddPcbIdsToSafeServiceUrl =
$"{ServerDns}/MeterProcessState/AddPcbIdsToSafe?ContainerDbId=";
private const String DefaultDownloadFilesPartsServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFileParts?ParentFileId=";
private static readonly String DefaultGetOrderOverviewServiceUrl =
$"{ServerDns}/MeterProcessState/api/FinalCheck/GetOrderOverview?ProductionOrderNumber=";
private const String DefaultGetLutUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetLutFiles";
private static readonly String DefaultGetOrderDetailsServiceUrl =
$"{ServerDns}/MeterProcessState/api/FinalCheck/GetOrderDetails?ProductionOrderNumber=";
private const String DefaultListAllFwPackagesServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=1";
private static readonly String DefaultDownloadFilesPartsServiceUrl =
$"{ServerDns}/MeterProcessState/api/FileUpToDate/GetFileParts?ParentFileId=";
private const String DefaultListAllSwPackagesServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=5";
private static readonly String DefaultGetLutUrl =
$"{ServerDns}/MeterProcessState/api/FileUpToDate/GetLutFiles";
private const String DefaultListAllConfigFilePackagesServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=6";
private static readonly String DefaultListAllFwPackagesServiceUrl =
$"{ServerDns}/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=1";
private const String DefaultListAllFwUpdateSafesServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=4";
private static readonly String DefaultListAllSwPackagesServiceUrl =
$"{ServerDns}/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=5";
private const String DefaultSetCordonelAppVersionServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/ProccesState/SetCordonelProgress?PcbId=";
private static readonly String DefaultListAllConfigFilePackagesServiceUrl =
$"{ServerDns}/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=6";
private const String DefaultGetCordonelRequirementInfoUrl =
private static readonly String DefaultListAllFwUpdateSafesServiceUrl =
$"{ServerDns}/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=4";
private static readonly String DefaultSetCordonelAppVersionServiceUrl =
$"{ServerDns}/MeterProcessState/api/ProccesState/SetCordonelProgress?PcbId=";
private static readonly String DefaultGetCordonelRequirementInfoUrl =
"http://sla12iis01.emea.sensus.net/LaaProductionWeb/api/cordonel/requirements/pcbid/";
private const String DefaultGetCordonelAppVersionServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/ProccesState/GetCordonelAppVersion?PcbId=";
private static readonly String DefaultGetCordonelAppVersionServiceUrl =
$"{ServerDns}/MeterProcessState/api/ProccesState/GetCordonelAppVersion?PcbId=";
private const String DefaultListAllCordonelCustomersWithFilterServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Order/GetCordonelCustomers?FilterName=";
private static readonly String DefaultListAllCordonelCustomersWithFilterServiceUrl =
$"{ServerDns}/MeterProcessState/api/Order/GetCordonelCustomers?FilterName=";
private const String DefaultListAllCordonelCustomerOrdersServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Order/GetCustomersCordonelOrders?CustomerNumber=";
private static readonly String DefaultListAllCordonelCustomerOrdersServiceUrl =
$"{ServerDns}/MeterProcessState/api/Order/GetCustomersCordonelOrders?CustomerNumber=";
private const String DefaultListCordonelOrderDetailsServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Order/GetCordonelOrderDetails?OrderNr=";
private static readonly String DefaultListCordonelOrderDetailsServiceUrl =
$"{ServerDns}/MeterProcessState/api/Order/GetCordonelOrderDetails?OrderNr=";
private const String DefaultListAllOrderCordonelsServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Order/GetCordonelOrderList?CustomerOrderNumber=";
private static readonly String DefaultListAllOrderCordonelsServiceUrl =
$"{ServerDns}/MeterProcessState/api/Order/GetCordonelOrderList?CustomerOrderNumber=";
private const String DefaultDownloadFwUpdateSafeServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetFWUpdateSafeContainerContent?SafeContainerId=";
private static readonly String DefaultDownloadFwUpdateSafeServiceUrl =
$"{ServerDns}/MeterProcessState/GetFWUpdateSafeContainerContent?SafeContainerId=";
private const String DefaultListAllFwUpdateSafesForUserServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetFWUpdateSafeContainers?UserId=";
private static readonly String DefaultListAllFwUpdateSafesForUserServiceUrl =
$"{ServerDns}/MeterProcessState/GetFWUpdateSafeContainers?UserId=";
private const String DefaultFileContentDownloadServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetFileContent?FileId=";
private static readonly String DefaultFileContentDownloadServiceUrl =
$"{ServerDns}/MeterProcessState/GetFileContent?FileId=";
private const String DefaultFwUpdateReportUploadServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/PostFWUpdateReportFile";
private static readonly String DefaultFwUpdateReportUploadServiceUrl =
$"{ServerDns}/MeterProcessState/PostFWUpdateReportFile";
private const String DefaultFwUpdateReportDownloadServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetFWUpdateReportFile?";
private static readonly String DefaultFwUpdateReportDownloadServiceUrl =
$"{ServerDns}/MeterProcessState/GetFWUpdateReportFile?";
private const String DefaultFwUpdateSafeContainerUploadServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/PostFWUpdateSafeOdd";
private static readonly String DefaultFwUpdateSafeContainerUploadServiceUrl =
$"{ServerDns}/MeterProcessState/PostFWUpdateSafeOdd";
private const String DefaultEditFwUpdateUserValidityServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/EditUserValidity?Id=";
private static readonly String DefaultEditFwUpdateUserValidityServiceUrl =
$"{ServerDns}/MeterProcessState/EditUserValidity?Id=";
private const String DefaultRefreshFwUpdateUsersHardwareIdServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/RefreshUsersHardwareId?Id=";
private static readonly String DefaultRefreshFwUpdateUsersHardwareIdServiceUrl =
$"{ServerDns}/MeterProcessState/RefreshUsersHardwareId?Id=";
private const String DefaultRefreshFwUpdateUsersPasswordHashServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/RefreshUsersPasswordHash?Id=";
private static readonly String DefaultRefreshFwUpdateUsersPasswordHashServiceUrl =
$"{ServerDns}/MeterProcessState/RefreshUsersPasswordHash?Id=";
private const String DefaultCreateNewFwUpdateUserServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/AddNewUser?";
private static readonly String DefaultCreateNewFwUpdateUserServiceUrl =
$"{ServerDns}/MeterProcessState/AddNewUser?";
private const String DefaultListAllFwUpdateUsersServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetUserList";
private static readonly String DefaultListAllFwUpdateUsersServiceUrl =
$"{ServerDns}/MeterProcessState/GetUserList";
private const String DefaultListAllFwUpdateBuilderOperatorsServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetAllBuilderOperator";
private static readonly String DefaultListAllFwUpdateBuilderOperatorsServiceUrl =
$"{ServerDns}/MeterProcessState/GetAllBuilderOperator";
private const String DefaultGetFwUpdateUserByIdServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetUserList?Id=";
private static readonly String DefaultGetFwUpdateUserByIdServiceUrl =
$"{ServerDns}/MeterProcessState/GetUserList?Id=";
private const String DefaultGetFwUpdateUserByLoginNameServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetUserList?LogInName=";
private static readonly String DefaultGetFwUpdateUserByLoginNameServiceUrl =
$"{ServerDns}/MeterProcessState/GetUserList?LogInName=";
private const String DefaultRegisterWatchServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/RegisterWatch/";
private static readonly String DefaultRegisterWatchServiceUrl =
$"{ServerDns}/MeterProcessState/api/RegisterWatch/";
private const String DefaultGenesisGetOrderNumberServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/ordernumber?PcbId=";
private static readonly String DefaultGenesisGetOrderNumberServiceUrl =
$"{ServerDns}/MeterProcessState/api/Password/ordernumber?PcbId=";
private const String DefaultGenesisGetRadioAddressServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/radioadress?PcbId=";
private static readonly String DefaultGenesisGetRadioAddressServiceUrl =
$"{ServerDns}/MeterProcessState/api/Password/radioadress?PcbId=";
private const String DefaultGenesisGetKeySetIdServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/getkeysetid?PcbId=";
private static readonly String DefaultGenesisGetKeySetIdServiceUrl =
$"{ServerDns}/MeterProcessState/api/Password/getkeysetid?PcbId=";
private const String DefaultGenesisGetPasswordServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/GetPassword?PcbId=";
private static readonly String DefaultGenesisSetPickingStateServiceUrl =
$"{ServerDns}/MeterProcessState/api/ProccesState/SetPickingState?PcbID=";
private const String DefaultGenesisSetPasswordServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/setpassword?PcbId=";
private static readonly String DefaultGenesisGetPasswordServiceUrl =
$"{ServerDns}/MeterProcessState/api/Password/GetPassword?PcbId=";
private const String DefaultGenesisPasswordContainerServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/GetPasswordHashFileContent?PcbId=";
private static readonly String DefaultGenesisSetPasswordServiceUrl =
$"{ServerDns}/MeterProcessState/api/Password/setpassword?PcbId=";
private const String DefaultMarriageServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Marriage/";
private static readonly String DefaultGenesisPasswordContainerServiceUrl =
$"{ServerDns}/MeterProcessState/api/Password/GetPasswordHashFileContent?PcbId=";
private const String DefaultMeterProcessStateUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/ProccesState/";
private static readonly String DefaultMarriageServiceUrl =
$"{ServerDns}/MeterProcessState/api/Marriage/";
private const String DefaultGenesisFinalCheckServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FinalCheck/";
private static readonly String DefaultMeterProcessStateUrl =
$"{ServerDns}/MeterProcessState/api/ProccesState/";
private const String DefaultGenesisRadioCheckServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/RadioCheck/";
private static readonly String DefaultGenesisFinalCheckServiceUrl =
$"{ServerDns}/MeterProcessState/api/FinalCheck/";
private const String DefaultGetSoftwareStartUpAccessUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/SoftwareAccess/GetVersionIsValid";
private static readonly String DefaultGenesisRadioCheckServiceUrl =
$"{ServerDns}/MeterProcessState/api/RadioCheck/";
private const String DefaultSetSoftwareLicenseUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/SoftwareAccess/SetVersionIsValid?Program=";
private static readonly String DefaultGetSoftwareStartUpAccessUrl =
$"{ServerDns}/MeterProcessState/api/SoftwareAccess/GetVersionIsValid";
private const String DefaultGetSoftwareLicenseUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/SoftwareAccess/GetCurrentVersion?Program=";
private static readonly String DefaultSetSoftwareLicenseUrl =
$"{ServerDns}/MeterProcessState/api/SoftwareAccess/SetVersionIsValid?Program=";
private const String DefaultGenesisCalibrationResult =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/GenesisMeter/PostCalibrationResult";
private static readonly String DefaultGetSoftwareLicenseUrl =
$"{ServerDns}/MeterProcessState/api/SoftwareAccess/GetCurrentVersion?Program=";
private const String DefaultGetGenesisCalibrationResults =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FinalCheck/CalibrationResults/";
private static readonly String DefaultGenesisCalibrationResult =
$"{ServerDns}/MeterProcessState/api/GenesisMeter/PostCalibrationResult";
private const String DefaultGenesisMeter =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/GenesisMeter/";
private static readonly String DefaultGetGenesisCalibrationResults =
$"{ServerDns}/MeterProcessState/api/FinalCheck/CalibrationResults/";
private const String DefaultFileContentController =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/";
private static readonly String DefaultGenesisMeter =
$"{ServerDns}/MeterProcessState/api/GenesisMeter/";
private const String DefaultKeyServerCustom =
private static readonly String DefaultFileContentController =
$"{ServerDns}/MeterProcessState/api/FileUpToDate/";
private static readonly String DefaultKeyServerCustom =
"https://nodes.sms-esaap.com/keygenproxy/api/v3/custom/";
private const String DefaultMeterInfoForTestBench =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/TestBench/GetMeterInfoForTestBench?PcbID=";
private static readonly String DefaultMeterInfoForTestBench =
$"{ServerDns}/MeterProcessState/api/TestBench/GetMeterInfoForTestBench?PcbID=";
private const String DefaultCordonelFwInfoUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetCordonelFw";
private static readonly String DefaultCordonelFwInfoUrl =
$"{ServerDns}/MeterProcessState/api/FileUpToDate/GetCordonelFw";
private const String DefaultDbDataAtEolServiceUrl =
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/fwupdate/databaseateol/";
private static readonly String DefaultDbDataAtEolServiceUrl =
$"http://sla12iis01.emea.sensus.net/MeterProcessState/api/fwupdate/databaseateol/";
//private const String DefaultGenesisGetOrderNumberServiceUrl =
// "http://localhost:56011/api/Password/ordernumber?PcbId=";
public static readonly String PressureSensorTestURL_GetTestSpec
= $"{ServerDns}/MeterProcessState/api/CordonelPressureSensorTest/GetTestSpec";
//private const String DefaultGenesisGetRadioAdressServiceUrl =
// "http://localhost:56011/api/Password/radioadress?PcbId=";
//private const String DefaultGenesisGetKeySetIdServiceUrl =
// "http://localhost:56011/api/Password/getkeysetid?PcbId=";
//private const String DefaultGenesisGetPasswordServiceUrl =
// "http://localhost:56011/api/Password/GetPassword?PcbId=";
//private const String DefaultGenesisSetPasswordServiceUrl =
// "http://localhost:56011/api/Password/setpassword?PcbId=";
//private const String DefaultGenesisPasswordContainerServiceUrl =
// "http://localhost:56011/api/Password/GetPasswordHashFileContent?PcbId=";
//private const String DefaultMarriageServiceUrl =
// "http://localhost:56011/api/Marriage/";
//private const String DefaultMeterProcessStateUrl =
// "http://localhost:56011/api/ProccesState/";
//private const String DefaultGenesisFinalCheckServiceUrl =
// "http://localhost:56011/api/FinalCheck/";
//private const String DefaultGenesisRadioCheckServiceUrl =
// "http://localhost:56011/api/RadioCheck/";
//private const String DefaultGetSoftwareStartUpAccessUrl =
// "http://localhost:56011/api/SoftwareAccess/GetVersionIsValid";
private const String PressureSensorTestURL_GetTestSpec
= "http://sla12iis01.emea.sensus.net/MeterProcessState/api/CordonelPressureSensorTest/GetTestSpec";
private const String PressureSensorTestURL_PostTestResults
= "http://sla12iis01.emea.sensus.net/MeterProcessState/api/CordonelPressureSensorTest/PostTestResults";
public static readonly String PressureSensorTestURL_PostTestResults
= $"{ServerDns}/MeterProcessState/api/CordonelPressureSensorTest/PostTestResults";
/// <summary>
/// usage: string.Format(CordonelPressureSensorTestURL_GetTestResults, pcbId);
/// </summary>
private const String PressureSensorTestURL_GetTestResults
= "http://sla12iis01.emea.sensus.net/MeterProcessState/api/CordonelPressureSensorTest/GetTestResults/{0}";
public static readonly String PressureSensorTestURL_GetTestResults
= $"{ServerDns}/MeterProcessState/api/CordonelPressureSensorTest/GetTestResults/{0}";
public const String LaaProductionAPI
#if DEBUG == false // when false uses always the production url.
@ -232,7 +213,7 @@ namespace Xylem.Common.CommonCore.Configuration
/// <summary>
/// GET: test specification for water meter with pressure sensor.
/// </summary>
public static string GetPressureSensorSpecificationURL
public static String GetPressureSensorSpecificationURL
#if DEBUG
=> "http://localhost:56011/api/CordonelPressureSensorTest/GetTestSpec";
#else
@ -243,7 +224,7 @@ namespace Xylem.Common.CommonCore.Configuration
/// <summary>
/// POST: test result for water meter with pressure sensor.
/// </summary>
public static string PostPressureSensorResultURL
public static String PostPressureSensorResultURL
#if DEBUG
=> "http://localhost:56011/api/CordonelPressureSensorTest/PostTestResults";
@ -256,7 +237,7 @@ namespace Xylem.Common.CommonCore.Configuration
/// <summary>
/// GET: a list of test results for the water meter with specified pcbId.
/// </summary>
public static string PressureSensorResultsURL<T>(this T pcbId)
public static String PressureSensorResultsURL<T>(this T pcbId)
{
#if DEBUG
var url = "http://localhost:56011/api/CordonelPressureSensorTest/GetTestResults/{0}";
@ -268,7 +249,49 @@ namespace Xylem.Common.CommonCore.Configuration
}
/// <summary>
/// Get export data
/// </summary>
/// <returns></returns>
public static String GetExportDataServiceUrl()
{
return ConfigurationManager.AppSettings["GetExportDataServiceUrl"] ??
DefaultGetExportDataServiceUrl;
}
/// <summary>
/// Get Cordonel mapping
/// </summary>
/// <returns></returns>
public static String GetCordonelMappingServiceUrl()
{
return ConfigurationManager.AppSettings["GetCordonelMappingServiceUrl"] ??
DefaultGetCordonelMappingServiceUrl;
}
/// <summary>
/// Get Cordonel order overview to check the assignment state
/// </summary>
/// <returns></returns>
public static String GetOrderOverviewServiceUrl()
{
return ConfigurationManager.AppSettings["GetOrderOverviewServiceUrl"] ??
DefaultGetOrderOverviewServiceUrl;
}
/// <summary>
/// Get Cordonel order details to check for order dependent requirements like
/// - MeterSize,
/// - FrequencyIndicator,
/// - PressurePresent.
/// </summary>
/// <returns></returns>
public static String GetOrderDetailsServiceUrl()
{
return ConfigurationManager.AppSettings["GetOrderDetailsServiceUrl"] ??
DefaultGetOrderDetailsServiceUrl;
}
/// <summary>
/// List all Cordonel FW packages.
/// </summary>
@ -430,8 +453,8 @@ namespace Xylem.Common.CommonCore.Configuration
/// Get all production infos for skip process checks or limits for production like:
/// - Battery drained percentage upper limit,
/// - Production due date for a special register,
/// - Required life time for assembly line,
/// - Required life time for shipping line.
/// - Required lifetime for assembly line,
/// - Required lifetime for shipping line.
/// </summary>
/// <returns></returns>
public static String GetCordonelRequirementInfoServiceUrl()
@ -444,11 +467,11 @@ namespace Xylem.Common.CommonCore.Configuration
/// Get all production infos for skip process checks or limits for production like:
/// - Battery drained percentage upper limit,
/// - Production due date for a special register,
/// - Required life time for assembly line,
/// - Required life time for shipping line.
/// - Required lifetime for assembly line,
/// - Required lifetime for shipping line.
/// </summary>
/// <returns></returns>
public static String GetCordonelRequirementByFANrInfoServiceUrl(string ponr)
public static String GetCordonelRequirementByFANrInfoServiceUrl(String ponr)
{
return $"http://sla12iis01.emea.sensus.net/LaaProductionWeb/api/cordonel/requirements/pono/{ponr}";
}
@ -457,11 +480,11 @@ namespace Xylem.Common.CommonCore.Configuration
/// Get all production infos for skip process checks or limits for production like:
/// - Battery drained percentage upper limit,
/// - Production due date for a special register,
/// - Required life time for assembly line,
/// - Required life time for shipping line.
/// - Required lifetime for assembly line,
/// - Required lifetime for shipping line.
/// </summary>
/// <returns></returns>
public static string GetCordonelRequirementByMeterSizeInfoServiceUrl(int size)
public static String GetCordonelRequirementByMeterSizeInfoServiceUrl(Int32 size)
{
return $"http://sla12iis01.emea.sensus.net/LaaProductionWeb/api/cordonel/requirements/isize/{size}";
}
@ -718,6 +741,16 @@ namespace Xylem.Common.CommonCore.Configuration
DefaultGenesisGetKeySetIdServiceUrl;
}
/// <summary>
/// Genesis get password url
/// </summary>
/// <returns></returns>
public static String GenesisSetPickingStateServiceUrl()
{
return ConfigurationManager.AppSettings["GenesisSetPickingStateServiceUrl"] ??
DefaultGenesisSetPickingStateServiceUrl;
}
/// <summary>
/// Genesis get password url
/// </summary>
@ -832,21 +865,6 @@ namespace Xylem.Common.CommonCore.Configuration
{
throw new NotImplementedException();
}
public static String GetOrderOverviewServiceUrl()
{
throw new NotImplementedException();
}
public static String GetCordonelMappingServiceUrl()
{
throw new NotImplementedException();
}
public static String GenesisSetPickingStateServiceUrl()
{
throw new NotImplementedException();
}
}

View File

@ -1645,6 +1645,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
/// <remarks date="2024-Apr-04" author="Roland Drabesch/Thomas Wiedebusch">
/// - Initial, extracted from <see cref="ReadMeterFirmwareAndAssignRegisters"/>
/// </remarks>
/// <remarks date="2025-Dec-09" author="Thomas Wiedebusch">
/// - Excluded register versions explicit specified in the 'configuration.json' as version.exclude list.
/// </remarks>
public void BuildValidMeterRegisters(List<KeyValuePair<RegisterDefinition, Byte[]>> tempConfigRegisters)
{
if (tempConfigRegisters == null || tempConfigRegisters.Count == 0)
@ -1677,7 +1680,10 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
(registerToCheck.Key.RegisterDetail.Version.Last != null &&
registerToCheck.Key.RegisterDetail.Version.First != null &&
registerToCheck.Key.RegisterDetail.Version.First.Value <= currentGroup.Version &&
registerToCheck.Key.RegisterDetail.Version.Last.Value >= currentGroup.Version))
registerToCheck.Key.RegisterDetail.Version.Last.Value >= currentGroup.Version &&
( registerToCheck.Key.RegisterDetail.Version.Exclude == null ||
// Exclude named versions
registerToCheck.Key.RegisterDetail.Version.Exclude.All(exVer => exVer != currentGroup.Version))))
{
configRegisterListForDebug.Add(registerToCheck.Key.GetIdent());
// Avoid multiple assignment of identical register in dictionary if one has passed the test

View File

@ -121,14 +121,14 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
/// <summary>
/// Registers manually explicit excluded for in-field updatable parameters for the CUST to prevent inadvertent
/// modifications resulting in potential MID violations.
///
/// Defined by M.C., J.L. and A.F. with the file: 'FwUpdateController.cs-GetRecoveryFile()-2507160616.xlsx'.
///
/// All commands defined here will not be accepted from 'external' to adjust. Program internally, those
/// commands are potentially allowed if those do not change any MID dependent 'values'.
/// </summary>
/// <remarks date="2025-Nov-18" author="Thomas Wiedebusch">
/// - SENSUSRADIO_WakeupInterval added to keep radio active after field update if it was active before.
/// <remarks date="2025-Jul-16" author="Thomas Wiedebusch">
/// Defined by M.C., J.L. and A.F. with the file: 'FwUpdateController.cs-GetRecoveryFile()-2507160616.xlsx'.
/// </remarks>
/// <remarks date="2025-Dec-08..10" author="Thomas Wiedebusch">
/// CUST 2.8.14:
/// - Added: - SENSUSRADIO_WakeupInterval to keep radio active after CUST run
/// - Removed: - 'GENESISFLOW_SealDisplay' being able to modify display resolution
/// </remarks>
private static readonly List<String> _fieldUpdateBlacklist = new List<String>
{
@ -190,7 +190,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
"GENESISFLOW_PipeFillingDelay", //46
"GENESISFLOW_ResetAccumulators", //47
"GENESISFLOW_SampleRate", //48
"GENESISFLOW_SealDisplay", //49
//"GENESISFLOW_SealDisplay", //49 - 2025-Dec-10 - emoved as needed to modify display resolution A.F., M.C. - CUST_2.8.14
"GENESISFLOW_StartHit", //50
"GENESISFLOW_StoreCalibration", //51
"GENESISFLOW_Timeout", //52
@ -253,7 +253,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
"SENSUSRADIO_Tfx_Structure", //21
"SENSUSRADIO_UpgFWVersion", //22
"SENSUSRADIO_UtcTimeOffset", //23
"SENSUSRADIO_WakeupInterval", //24
"SENSUSRADIO_WakeupInterval", //24 - 2025-Dec-08 - CUST_2.8.14
"SYSTEM_CalendarSeconds", // 1
"SYSTEM_CheckPresence", // 2
@ -1102,6 +1102,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
/// <remarks date="2025-Nov-17" author="Thomas Wiedebusch">
/// - Login/Logout moved here.
/// </remarks>
/// <remarks date="2025-Dec-12" author="Thomas Wiedebusch">
/// - Redundant OOR message removed.
/// </remarks>
private StatusReturn WriteRegisterParameterSet(List<RecoveryRegisterItem> recoveryRegistersDb,
Int32 recRegistersCount, MeterRegisters meterRegisters, CancellationToken cancellationToken, Boolean fieldUpdate)
{
@ -1153,7 +1156,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
_currentGenesis.WriteLog(errorMessage);
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(
$@"{Resources.StrWriteRegister} {_actualRegisterCtr} / {recRegistersCount}",
overallProcessCtrPercent, Resources.StrRegisterValueOutOfRange + " " + errorMessage));
overallProcessCtrPercent, errorMessage));
_currentGenesis?.Logout();
return StatusReturn.Failed;
}
@ -1207,15 +1210,16 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
/// <remarks date="2025-Nov-19" author="Thomas Wiedebusch">
/// - Leave the initial 'RecoveryRegisters' intact.
/// </remarks>
public Boolean RestoreAndCompareRegistersAfterReboot(CancellationToken cancellationToken)
/// <remarks date="2025-Dec-08" author="Thomas Wiedebusch">
/// - Leave the initial 'FailedComparisonRegisters' intact.
/// </remarks>
public Boolean RestoreAndCompareRegistersAfterReboot(CancellationToken cancellationToken)
{
if (!HasRestoreRegistersAfterRebootIfCompareFailed)
return false;
HasRestoreRegistersAfterRebootIfCompareFailed = false;
FailedComparisonRegisters.Clear();
// get the pre-defined dictionary
var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions();
@ -1317,7 +1321,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
var retVal = true;
// build a string list of the registers being able to sort those
//var registerNames = RecoveryRegisters.Select(register => register.RegisterIdent).ToList();
var registerNames = recoveryRegisters.Select(register => register.RegisterIdent).ToList();
// Remove all excluded registers
@ -1630,6 +1633,12 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
/// <remarks date="2025-Apr-07" author="Thomas Wiedebusch">
/// - CancellationToken.
/// </remarks>
/// <remarks date="2025-Apr-07" author="Thomas Wiedebusch">
/// - CancellationToken.
/// </remarks>
/// <remarks date="2025-Dec-13" author="Thomas Wiedebusch">
/// - Repaired building of initial register list.
/// </remarks>
public Boolean InitialReadRegisters(CancellationToken cancellationToken)
{
if (_currentGenesis == null)
@ -1644,7 +1653,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
_pcbIdInitialRegisterRead = _currentGenesis.PcbId;
// create a dictionary for final read being able to compare those with the initial read and restored
if (!BuildReadableRegisterDictionary(ref _finalRegisters))
if (!BuildReadableRegisterDictionary(ref _initialRegisters))
return false;
// log to report file the initial register read string

View File

@ -58,7 +58,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener
"&withRadioAdress=true";
var responseJson = LocalWebRequest.GetRequest(url, 30000);
var stringArray = JsonConvert.DeserializeObject<String[]>(responseJson);
var stringArray = JsonConvert.DeserializeObject<String[]>(responseJson);
if (stringArray != null)
{

View File

@ -1,6 +1,20 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/AutoCompleteBasicCompletion/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/AutoCompleteSmartCompletion/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/AutopopupEnabled/AutopopupEnabled/@EntryValue">False</s:Boolean>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=PCB/@EntryIndexedValue">PCB</s:String>
<s:Boolean x:Key="/Default/Environment/SearchAndNavigation/EnableGotoEverything/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SearchAndNavigation/FuzzySearchInGotoText/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SearchAndNavigation/GotoSingleHierarchyItemImmediately/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SearchAndNavigation/GotoSingleUsageImmediately/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SearchAndNavigation/GotoTextInGotoEverything/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SearchAndNavigation/NavigateByControlClick/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SearchAndNavigation/SaveExtendedSearch/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/UserInterface/OpenReSharperMenuByAltR/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/GrammarAndSpelling/GrammarChecking/Exceptions/=LCD_0020DISPLAY/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Housekeeping/VsActionManager/IsShortcutBrowserEnabled/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/Housekeeping/VsActionManager/SkipOverrideVsCommands/=_007BB61E1A20_002D8C13_002D49A9_002DA727_002DA0EC091647DD_007D_003A512/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/Housekeeping/VsActionManager/SkipOverrideVsCommands/=_007BB61E1A20_002D8C13_002D49A9_002DA727_002DA0EC091647DD_007D_003A512/@EntryIndexRemoved">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=accu/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=adaptor/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Applic/@EntryIndexedValue">True</s:Boolean>

View File

@ -19,7 +19,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw.Properties {
// 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", "15.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 Resources {
@ -574,6 +574,24 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Interface does not support this FW version.
/// </summary>
internal static string StrInterfaceDoesNotSupportFwVersion {
get {
return ResourceManager.GetString("StrInterfaceDoesNotSupportFwVersion", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Interface fully supports this FW version.
/// </summary>
internal static string StrInterfaceSupportsFwVersion {
get {
return ResourceManager.GetString("StrInterfaceSupportsFwVersion", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to ERROR: Failed to restore items after change of language!.
/// </summary>
@ -638,11 +656,20 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw.Properties {
}
/// <summary>
/// Looks up a localized string similar to Remaining life time:.
/// Looks up a localized string similar to Remaining life time FW:.
/// </summary>
internal static string StrLifeTimeRemainingYears {
internal static string StrLifeTimeRemainingYearsFw {
get {
return ResourceManager.GetString("StrLifeTimeRemainingYears", resourceCulture);
return ResourceManager.GetString("StrLifeTimeRemainingYearsFw", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Remaining life time SW:.
/// </summary>
internal static string StrLifeTimeRemainingYearsSw {
get {
return ResourceManager.GetString("StrLifeTimeRemainingYearsSw", resourceCulture);
}
}

View File

@ -478,6 +478,12 @@
<data name="StrFileRestored" xml:space="preserve">
<value>Files restored to meter:</value>
</data>
<data name="StrInterfaceSupportsFwVersion" xml:space="preserve">
<value>Interface fully supports this FW version</value>
</data>
<data name="StrInterfaceDoesNotSupportFwVersion" xml:space="preserve">
<value>Interface does not support this FW version</value>
</data>
<data name="StrFileReadoutFailed" xml:space="preserve">
<value>ERROR: File readout failed!</value>
</data>
@ -676,8 +682,11 @@
<data name="StrLifeTimeDrainedBattery" xml:space="preserve">
<value>Drained battery load: </value>
</data>
<data name="StrLifeTimeRemainingYears" xml:space="preserve">
<value>Remaining life time:</value>
<data name="StrLifeTimeRemainingYearsSw" xml:space="preserve">
<value>Remaining life time SW:</value>
</data>
<data name="StrLifeTimeRemainingYearsFw" xml:space="preserve">
<value>Remaining life time FW:</value>
</data>
<data name="StrLifeTimeYears" xml:space="preserve">
<value>years</value>

View File

@ -414,6 +414,7 @@
this.gridViewCordonelSelection.Name = "gridViewCordonelSelection";
this.gridViewCordonelSelection.ReadOnly = true;
this.gridViewCordonelSelection.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridViewCordonelsSelection_CellClick);
this.gridViewCordonelSelection.ColumnHeaderMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.gridViewCordonelSelection_ColumnHeaderMouseClick);
//
// tblPanelCordonelSearch
//

View File

@ -767,7 +767,6 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
SetStatusProgressBar();
_dbAccessDelayCtrMs = 0;
_processState = ProcessState.GetCordonelProductionOrdersFromDb;
}
if (e.TabPage == tabPageCustomerSelection)
@ -1041,7 +1040,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
_logger.Info(StrSeparator);
InitializeComponent();
if (_cultureInfo.IetfLanguageTag.Contains("de-"))
radioBtnGermanLanguage.Checked = true;
else
@ -1341,7 +1340,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
if (_fwUpdateCapability.All(x => x.ReleaseContainerLoaded == false) ||
_fwUpdateCapability.Any(x => x.RecoveryNotNeededOrLoaded == false) ||
_fwUpdateCapability.Any(x => x.PowerCorrectionNotNeededOrLoaded == false) ||
_fwUpdateCapability.Any(x => x.PasswordContainerLoaded == false) )
_fwUpdateCapability.Any(x => x.PasswordContainerLoaded == false))
{
_processState = ProcessState.Error;
return false;
@ -2450,8 +2449,8 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
value = 100;
if (value < 0)
value = 0;
ProgressBarStatus.Visible = visible;
ProgressBarStatus.Value = value;
ProgressBarStatus.Visible = visible;
ProgressBarStatus.Value = value;
}
catch (Exception)
{
@ -3987,6 +3986,9 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
/// <remarks date="2023-Oct-08" author="Thomas Wiedebusch">
/// - Selector for register restore.
/// </remarks>
/// <remarks date="2025-Dec-08" author="Thomas Wiedebusch">
/// - Avoid multiple identical search items.
/// </remarks>
private void gridViewCordonelsSelection_CellClick(Object sender, DataGridViewCellEventArgs e)
{
try
@ -4008,7 +4010,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
}
// select register restore
// select factory reset
if (gridViewCordonelSelection.Columns[e.ColumnIndex].Name == Resources.StrTableRegisterRestoreSelect)
{
// Search the cordonel in the production search list
@ -4086,35 +4088,40 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
}
// fill search masks for FW package selection
if (!string.IsNullOrEmpty(cordSearch.Diameter) &&
cordSearch.Diameter != Constants.StrUnknown)
cordSearch.Diameter != Constants.StrUnknown &&
_sizeSearchItems.All(X => X != cordSearch.Diameter))
{
_sizeSearchItems.Add(cordSearch.Diameter);
}
// fill search masks for FW package selection
if (!string.IsNullOrEmpty(cordSearch.RadioFrequency) &&
cordSearch.RadioFrequency != Constants.StrUnknown)
cordSearch.RadioFrequency != Constants.StrUnknown &&
_radioSearchItems.All(x => x != cordSearch.RadioFrequency))
{
_radioSearchItems.Add(cordSearch.RadioFrequency);
}
// fill search masks for FW package selection
if (!string.IsNullOrEmpty(cordSearch.Region) &&
cordSearch.Region != Constants.StrUnknown)
cordSearch.Region != Constants.StrUnknown &&
_regionSearchItems.All(x => x != cordSearch.Region))
{
_regionSearchItems.Add(cordSearch.Region);
}
// fill search masks for FW package selection
if (!string.IsNullOrEmpty(cordSearch.CoreRevision) &&
cordSearch.CoreRevision != Constants.StrUnknown)
cordSearch.CoreRevision != Constants.StrUnknown &&
_coreSearchItems.All(x => x != cordSearch.CoreRevision))
{
_coreSearchItems.Add(cordSearch.CoreRevision);
}
// fill search masks for FW package selection
if (!string.IsNullOrEmpty(cordSearch.Metrology) &&
cordSearch.Metrology != Constants.StrUnknown)
cordSearch.Metrology != Constants.StrUnknown &&
_metrologySearchItems.All(x => x != cordSearch.Metrology))
{
_metrologySearchItems.Add(cordSearch.Metrology);
}
@ -4149,6 +4156,38 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
_processState = ProcessState.Error;
}
}
/// <summary>
/// Overwrite header cell click to to toggle all Cordonel selections
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <remarks date="2025-Dec-09" author="Thomas Wiedebusch">
/// - Initial.
/// </remarks>
private void gridViewCordonelSelection_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
try
{
var cordSearchCtr = 0;
// Toggle all factory resets for every Cordonel
if (gridViewCordonelSelection.Columns[e.ColumnIndex].Name == Resources.StrTableRegisterRestoreSelect ||
gridViewCordonelSelection.Columns[e.ColumnIndex].Name == Resources.StrTableSelect)
{
// Search the cordonel in the production search list
foreach (var cordSearch in _cordonelProductionSearchInfos)
{
var cellEventArgs = new DataGridViewCellEventArgs(e.ColumnIndex, cordSearchCtr);
gridViewCordonelsSelection_CellClick(this, cellEventArgs);
cordSearchCtr++;
Update();
}
}
}
catch (Exception)
{
_processState = ProcessState.Error;
}
}
/// <summary>
/// Build data grid for cordonels
@ -4177,6 +4216,9 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
/// <remarks date="2024-May-13" author="Thomas Wiedebusch">
/// - Disabled language selection, culture info fixed to english.
/// </remarks>
/// <remarks date="2024-May-13" author="Thomas Wiedebusch">
/// - Avoid sorting of 'selection' and 'factory reset' columns.
/// </remarks>
private void FillDataGridWithCordonelInfos()
{
grpLanguageSelection.Enabled = false;
@ -4256,7 +4298,9 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
foreach (DataGridViewColumn column in gridViewCordonelSelection.Columns)
{
column.SortMode = DataGridViewColumnSortMode.Automatic;
if (column.Name != Resources.StrTableRegisterRestoreSelect &&
column.Name != Resources.StrTableSelect)
column.SortMode = DataGridViewColumnSortMode.Automatic;
}
}
catch (Exception)

View File

@ -1543,6 +1543,9 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
/// <remarks date="2023-Nov-21" author="Thomas Wiedebusch">
/// - Initial.
/// </remarks>
/// <remarks date="2025-Dec-08" author="Thomas Wiedebusch">
/// - FW life time calculation has higher priority.
/// </remarks>
private void CalculateLifeTime(ProcessState successExitState,
ProcessState errorExitState = ProcessState.Error)
{
@ -1553,14 +1556,20 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
if (GenesisStatusHandler.BuildLifeTimeInformation(_currentGenesis, status, out _))
{
var lifeTimeInfo = new List<String>
var lifeTimeInfo = new List<String>();
lifeTimeInfo.Add($"{Resources.StrLifeTimeDrainedBattery} {status.DrainedBatteryLoadPercent:F2} %");
if (status.FwCalculatedRemainingLifeTimeYears != null)
{
$"{Resources.StrLifeTimeDrainedBattery} {status.DrainedBatteryLoadPercent:F2} %",
$"{Resources.StrLifeTimeRemainingYears} {status.RemainingLifeTimeYears:F2} " +
$"{Resources.StrLifeTimeYears}"
};
lifeTimeInfo.Add($"{Resources.StrLifeTimeRemainingYearsFw} {status.FwCalculatedRemainingLifeTimeYears:F2} " +
$"{Resources.StrLifeTimeYears}");
}
else
{
lifeTimeInfo.Add($"{Resources.StrLifeTimeRemainingYearsSw} {status.RemainingLifeTimeYears:F2} " +
$"{Resources.StrLifeTimeYears}");
}
LogStringList(Resources.StrLifeTimeCalculation, lifeTimeInfo, Resources.StrLifeTimeCalculationSucceeded);
LogStringList(Resources.StrLifeTimeCalculation, lifeTimeInfo, Resources.StrLifeTimeCalculationSucceeded);
_processState = successExitState;
}
else
@ -2488,6 +2497,9 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
/// <remarks date="2023-Aug-31" author="Thomas Wiedebusch">
/// - FW version added.
/// </remarks>
/// <remarks date="2025-Dec-08" author="Thomas Wiedebusch">
/// - Interface info added.
/// </remarks>
private void LogInstalledMeterFw()
{
if (_currentGenesis == null)
@ -2495,6 +2507,9 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
LogText($"PCB ID: {_currentGenesis.PcbId}");
LogText($"{Resources.StrMessageCustomerSerialNumber} {_customerSerialNumber}");
LogText($"FW Version: {_currentGenesis.FwVersion}");
LogText($"Interface Version: {_currentGenesis.InterfaceInfo.InterfaceVersion}");
LogText(_currentGenesis.InterfaceSupportsFwVersion ? Resources.StrInterfaceSupportsFwVersion :
Resources.StrInterfaceDoesNotSupportFwVersion);
LogText($"{Resources.StrMessageSystemCoreRevision} {_currentGenesis.StrCoreRevision}");
LogText($"{Resources.StrMessageSystemRegion} {_currentGenesis.Region}");
LogText($"{Resources.StrMessageSystemRadio} {_currentGenesis.RadioFrequencyMhz}");

View File

@ -19,7 +19,7 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw.Properties {
// 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", "15.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 Resources {
@ -574,6 +574,24 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Interface does not support this FW version.
/// </summary>
internal static string StrInterfaceDoesNotSupportFwVersion {
get {
return ResourceManager.GetString("StrInterfaceDoesNotSupportFwVersion", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Interface fully supports this FW version.
/// </summary>
internal static string StrInterfaceSupportsFwVersion {
get {
return ResourceManager.GetString("StrInterfaceSupportsFwVersion", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to ERROR: Failed to restore items after change of language!.
/// </summary>
@ -638,11 +656,20 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw.Properties {
}
/// <summary>
/// Looks up a localized string similar to Remaining life time:.
/// Looks up a localized string similar to Remaining life time FW:.
/// </summary>
internal static string StrLifeTimeRemainingYears {
internal static string StrLifeTimeRemainingYearsFw {
get {
return ResourceManager.GetString("StrLifeTimeRemainingYears", resourceCulture);
return ResourceManager.GetString("StrLifeTimeRemainingYearsFw", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Remaining life time SW:.
/// </summary>
internal static string StrLifeTimeRemainingYearsSw {
get {
return ResourceManager.GetString("StrLifeTimeRemainingYearsSw", resourceCulture);
}
}

View File

@ -478,6 +478,12 @@
<data name="StrFileRestored" xml:space="preserve">
<value>Wiederhergestellte Dateien im Zähler:</value>
</data>
<data name="StrInterfaceSupportsFwVersion" xml:space="preserve">
<value>Das Interface unterstützt diese FW version voll</value>
</data>
<data name="StrInterfaceDoesNotSupportFwVersion" xml:space="preserve">
<value>Das Interface unterstützt nicht diese FW version</value>
</data>
<data name="StrFileReadoutFailed" xml:space="preserve">
<value>FEHLER: Dateien lesen fehlgeschlagen!</value>
</data>
@ -676,8 +682,11 @@
<data name="StrLifeTimeDrainedBattery" xml:space="preserve">
<value>Verbrauchte Batterieladung:</value>
</data>
<data name="StrLifeTimeRemainingYears" xml:space="preserve">
<value>Verbleibende Restlaufzeit:</value>
<data name="StrLifeTimeRemainingYearsSw" xml:space="preserve">
<value>Verbleibende Restlaufzeit SW:</value>
</data>
<data name="StrLifeTimeRemainingYearsFw" xml:space="preserve">
<value>Verbleibende Restlaufzeit FW:</value>
</data>
<data name="StrLifeTimeYears" xml:space="preserve">
<value>Jahre</value>

View File

@ -478,6 +478,12 @@
<data name="StrFileRestored" xml:space="preserve">
<value>Files restored to meter:</value>
</data>
<data name="StrInterfaceSupportsFwVersion" xml:space="preserve">
<value>Interface fully supports this FW version</value>
</data>
<data name="StrInterfaceDoesNotSupportFwVersion" xml:space="preserve">
<value>Interface does not support this FW version</value>
</data>
<data name="StrFileReadoutFailed" xml:space="preserve">
<value>ERROR: File readout failed!</value>
</data>
@ -676,8 +682,11 @@
<data name="StrLifeTimeDrainedBattery" xml:space="preserve">
<value>Drained battery load: </value>
</data>
<data name="StrLifeTimeRemainingYears" xml:space="preserve">
<value>Remaining life time:</value>
<data name="StrLifeTimeRemainingYearsSw" xml:space="preserve">
<value>Remaining life time SW:</value>
</data>
<data name="StrLifeTimeRemainingYearsFw" xml:space="preserve">
<value>Remaining life time FW:</value>
</data>
<data name="StrLifeTimeYears" xml:space="preserve">
<value>years</value>