FwUpdateBuilder: -Fw update safes info, -Fw update report file inspection

This commit is contained in:
Thomas Wiedebusch 2021-10-29 23:45:23 +02:00
parent 05ecaf61af
commit 43ff6e8af0
15 changed files with 1313 additions and 74 deletions

View File

@ -96,5 +96,11 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateConfig.Consts
/// </summary>
public const Char FwUpdateFileFieldSeparator = '_';
/// <summary>
/// Separator in file name between OrderNumber and position for the FW-Update Safe and all report
/// files.
/// </summary>
public const Char FwUpdateFileOrderPosSeparator = '-';
}
}

View File

@ -332,7 +332,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
try
{
var url = ServiceUrls.ListAllFwUpdateBuilderOperatorsServiceUrl();
var requestResponse = LocalWebRequest.GetRequest(url, 1200);
var requestResponse = LocalWebRequest.GetRequest(url, 5000);
if (string.IsNullOrEmpty(requestResponse))
{
DbIsConnected = false;
@ -455,7 +455,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
try
{
var url = ServiceUrls.ListAllConfigurationFilePackages();
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
var requestResponse = LocalWebRequest.GetRequest(url, 5000);
if (string.IsNullOrEmpty(requestResponse))
{
DbIsConnected = false;
@ -518,7 +518,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
try
{
var url = ServiceUrls.ListAllFwUpdateSafes();
var requestResponse = LocalWebRequest.GetRequest(url, 5000);
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
if (string.IsNullOrEmpty(requestResponse))
{
DbIsConnected = false;
@ -559,7 +559,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
{
var url = ServiceUrls.ListAllFwUpdateSafesForUserServiceUrl();
url += $"{userId}";
var requestResponse = LocalWebRequest.GetRequest(url, 3000);
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
if (string.IsNullOrEmpty(requestResponse))
{
DbIsConnected = false;
@ -597,7 +597,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
{
var url = ServiceUrls.DownloadFileParts();
url += $"{fileId}&readContent={readContent}";
var requestResponse = LocalWebRequest.GetRequest(url, 5000);
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
if (string.IsNullOrEmpty(requestResponse))
{
DbIsConnected = false;
@ -635,7 +635,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
{
var url = ServiceUrls.DownloadFileParts();
url += $"{fileId}&readContent={readContent}";
var requestResponse = LocalWebRequest.GetRequest(url, 5000);
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
if (string.IsNullOrEmpty(requestResponse))
{
DbIsConnected = false;
@ -675,7 +675,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
{
var url = ServiceUrls.ListAllCordonelCustomersWithFilterServiceUrl();
url += searchPattern;
var requestResponse = LocalWebRequest.GetRequest(url, 1200);
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
if (string.IsNullOrEmpty(requestResponse))
{
DbIsConnected = false;
@ -1293,6 +1293,40 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
}
}
/// <summary>
/// Download all pcbIds contained in a special FW update safe for information referenced by container id
/// </summary>
/// <param name="containerId"></param>
/// <returns>true if file content exists</returns>
/// <remarks date="2021-Oct-29" author="Roland Drabesch">
/// - Initial.
/// </remarks>
public List<String> GetFwUpdateSafePcbIdsFromDb(Int32 containerId)
{
var fwUpdateSafesPcbIds = new List<String>();
try
{
var url = ServiceUrls.ListAllPcbIdsFromSafe();
url += $"{containerId}";
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
if (string.IsNullOrEmpty(requestResponse))
{
DbIsConnected = false;
return fwUpdateSafesPcbIds;
}
DbIsConnected = true;
fwUpdateSafesPcbIds = JsonConvert.DeserializeObject<List<String>>(requestResponse);
return fwUpdateSafesPcbIds;
}
catch (Exception)
{
DbIsConnected = false;
return fwUpdateSafesPcbIds;
}
}
/// <summary>
/// Getting file contents referenced by file part id.
/// -http://localhost:56011/GetFileContent?FileId=3831
@ -1333,20 +1367,25 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
/// Get reports from DB.
/// It can be searched for:
/// PCB ID,
/// User ID or
/// Order Number.
/// User ID,
/// Order Number,
/// Read content ( if false, a preview is available only).
/// Leaving all empty will search all reports.
/// </summary>
/// <param name="fwUpdRpt">list of reports</param>
/// <param name="pcbId">optional pcbId</param>
/// <param name="userId">optional userId</param>
/// <param name="orderNr">optional order number</param>
/// <returns>true if app list could be loaded</returns>
/// <param name="readContent">if false a preview of the reports will be loaded</param>
/// <returns>true reports could be loaded</returns>
/// <remarks date="2021-Apr-30" author="Thomas Wiedebusch">
/// - Initial.
/// </remarks>
/// <remarks date="2021-Oct-29" author="Thomas Wiedebusch">
/// - Read content.
/// </remarks>
public Boolean DownloadFwUpdateReportsFromDb(out List<FwUpdateReportDb> fwUpdRpt, Int64 pcbId = 0,
Int32 userId = 0, Int64 orderNr = 0)
Int32 userId = 0, Int64 orderNr = 0, Boolean readContent = false)
{
fwUpdRpt = new List<FwUpdateReportDb>();
try
@ -1368,7 +1407,9 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
url += $"OrderNr={orderNr}";
}
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
url += $"&readContent={readContent}";
var requestResponse = LocalWebRequest.GetRequest(url, 20000);
if (string.IsNullOrEmpty(requestResponse))
{
DbIsConnected = false;
@ -1454,7 +1495,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
url = ServiceUrls.AddPcbIdsToSafeServiceUrl();
url += containerId;
if (LocalWebRequest.PostRequestAsync(url, 1200, pcbIds))
if (LocalWebRequest.PostRequestAsync(url, 10000, pcbIds))
{
DbIsConnected = true;
return true;

View File

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
{
@ -39,6 +40,11 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
/// </summary>
public Int32 FilePartId { get; set; }
/// <summary>
/// List of PcbIds
/// </summary>
public List<String> PcbIds { get; set; }
/// <summary>
/// automatic (DB-job) delete all FwUpdateSafeContainer with invalid date
/// </summary>

View File

@ -61,13 +61,17 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder.Const
/// <summary>
/// Load all Cordonel FW update safes from DB
/// </summary>
GetFwUpdateSafesFromDb,
GetFwUpdateSafesInfosFromDb,
/// <summary>
/// Load all Cordonel FW update report files from DB
/// </summary>
GetReportFilesFromDb,
GetReportsFromDb,
/// <summary>
/// Load selected Cordonel FW update report file from DB and display it
/// </summary>
GetAndDisplaySingleReportFromDb,
/// <summary>
/// Load all Cordonel serial numbers off a specific order from DB
/// </summary>

View File

@ -91,7 +91,13 @@
this.tabPageSafeBuildReport = new System.Windows.Forms.TabPage();
this.rtbReport = new System.Windows.Forms.RichTextBox();
this.tabPageFwUpdateSafes = new System.Windows.Forms.TabPage();
this.tblFwUpdateSafeSelection = new System.Windows.Forms.TableLayoutPanel();
this.tblPanelFwUpdateSafeSearch = new System.Windows.Forms.TableLayoutPanel();
this.gridViewFwUpdateSafeSelection = new System.Windows.Forms.DataGridView();
this.tabPageReports = new System.Windows.Forms.TabPage();
this.tblPanelFwUpdateReports = new System.Windows.Forms.TableLayoutPanel();
this.tblPanelFwUpdateReportsSearch = new System.Windows.Forms.TableLayoutPanel();
this.gridViewFwUpdateReportSelection = new System.Windows.Forms.DataGridView();
this.tblPanelLayer1Top = new System.Windows.Forms.TableLayoutPanel();
this.tblPanelSafeInfo = new System.Windows.Forms.TableLayoutPanel();
this.lblCustomerNameText = new System.Windows.Forms.Label();
@ -154,6 +160,12 @@
this.tabPagePreBuildSummary.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.gridViewPreBuildSummary)).BeginInit();
this.tabPageSafeBuildReport.SuspendLayout();
this.tabPageFwUpdateSafes.SuspendLayout();
this.tblFwUpdateSafeSelection.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.gridViewFwUpdateSafeSelection)).BeginInit();
this.tabPageReports.SuspendLayout();
this.tblPanelFwUpdateReports.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.gridViewFwUpdateReportSelection)).BeginInit();
this.tblPanelLayer1Top.SuspendLayout();
this.tblPanelSafeInfo.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
@ -645,16 +657,71 @@
//
this.tabPageFwUpdateSafes.BackColor = System.Drawing.SystemColors.Control;
this.tabPageFwUpdateSafes.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tabPageFwUpdateSafes.Controls.Add(this.tblFwUpdateSafeSelection);
resources.ApplyResources(this.tabPageFwUpdateSafes, "tabPageFwUpdateSafes");
this.tabPageFwUpdateSafes.Name = "tabPageFwUpdateSafes";
//
// tblFwUpdateSafeSelection
//
resources.ApplyResources(this.tblFwUpdateSafeSelection, "tblFwUpdateSafeSelection");
this.tblFwUpdateSafeSelection.Controls.Add(this.tblPanelFwUpdateSafeSearch, 0, 0);
this.tblFwUpdateSafeSelection.Controls.Add(this.gridViewFwUpdateSafeSelection, 0, 1);
this.tblFwUpdateSafeSelection.Name = "tblFwUpdateSafeSelection";
//
// tblPanelFwUpdateSafeSearch
//
resources.ApplyResources(this.tblPanelFwUpdateSafeSearch, "tblPanelFwUpdateSafeSearch");
this.tblPanelFwUpdateSafeSearch.Name = "tblPanelFwUpdateSafeSearch";
//
// gridViewFwUpdateSafeSelection
//
this.gridViewFwUpdateSafeSelection.AllowUserToAddRows = false;
this.gridViewFwUpdateSafeSelection.AllowUserToDeleteRows = false;
this.gridViewFwUpdateSafeSelection.AllowUserToResizeColumns = false;
this.gridViewFwUpdateSafeSelection.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
this.gridViewFwUpdateSafeSelection.BackgroundColor = System.Drawing.SystemColors.Control;
this.gridViewFwUpdateSafeSelection.BorderStyle = System.Windows.Forms.BorderStyle.None;
resources.ApplyResources(this.gridViewFwUpdateSafeSelection, "gridViewFwUpdateSafeSelection");
this.gridViewFwUpdateSafeSelection.EnableHeadersVisualStyles = false;
this.gridViewFwUpdateSafeSelection.GridColor = System.Drawing.SystemColors.ControlLight;
this.gridViewFwUpdateSafeSelection.Name = "gridViewFwUpdateSafeSelection";
this.gridViewFwUpdateSafeSelection.ReadOnly = true;
//
// tabPageReports
//
this.tabPageReports.BackColor = System.Drawing.SystemColors.Control;
this.tabPageReports.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tabPageReports.Controls.Add(this.tblPanelFwUpdateReports);
resources.ApplyResources(this.tabPageReports, "tabPageReports");
this.tabPageReports.Name = "tabPageReports";
//
// tblPanelFwUpdateReports
//
resources.ApplyResources(this.tblPanelFwUpdateReports, "tblPanelFwUpdateReports");
this.tblPanelFwUpdateReports.Controls.Add(this.tblPanelFwUpdateReportsSearch, 0, 0);
this.tblPanelFwUpdateReports.Controls.Add(this.gridViewFwUpdateReportSelection, 0, 1);
this.tblPanelFwUpdateReports.Name = "tblPanelFwUpdateReports";
//
// tblPanelFwUpdateReportsSearch
//
resources.ApplyResources(this.tblPanelFwUpdateReportsSearch, "tblPanelFwUpdateReportsSearch");
this.tblPanelFwUpdateReportsSearch.Name = "tblPanelFwUpdateReportsSearch";
//
// gridViewFwUpdateReportSelection
//
this.gridViewFwUpdateReportSelection.AllowUserToAddRows = false;
this.gridViewFwUpdateReportSelection.AllowUserToDeleteRows = false;
this.gridViewFwUpdateReportSelection.AllowUserToResizeRows = false;
this.gridViewFwUpdateReportSelection.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
this.gridViewFwUpdateReportSelection.BackgroundColor = System.Drawing.SystemColors.Control;
this.gridViewFwUpdateReportSelection.BorderStyle = System.Windows.Forms.BorderStyle.None;
resources.ApplyResources(this.gridViewFwUpdateReportSelection, "gridViewFwUpdateReportSelection");
this.gridViewFwUpdateReportSelection.EnableHeadersVisualStyles = false;
this.gridViewFwUpdateReportSelection.GridColor = System.Drawing.SystemColors.ControlLight;
this.gridViewFwUpdateReportSelection.Name = "gridViewFwUpdateReportSelection";
this.gridViewFwUpdateReportSelection.ReadOnly = true;
this.gridViewFwUpdateReportSelection.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridViewFwUpdateReportSelection_CellClick);
//
// tblPanelLayer1Top
//
resources.ApplyResources(this.tblPanelLayer1Top, "tblPanelLayer1Top");
@ -933,6 +1000,12 @@
this.tabPagePreBuildSummary.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.gridViewPreBuildSummary)).EndInit();
this.tabPageSafeBuildReport.ResumeLayout(false);
this.tabPageFwUpdateSafes.ResumeLayout(false);
this.tblFwUpdateSafeSelection.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.gridViewFwUpdateSafeSelection)).EndInit();
this.tabPageReports.ResumeLayout(false);
this.tblPanelFwUpdateReports.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.gridViewFwUpdateReportSelection)).EndInit();
this.tblPanelLayer1Top.ResumeLayout(false);
this.tblPanelSafeInfo.ResumeLayout(false);
this.tblPanelSafeInfo.PerformLayout();
@ -1047,6 +1120,12 @@
private System.Windows.Forms.Label lblCordonelSelectedCountText;
private System.Windows.Forms.Label lblCordonelsSelectedCount;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
private System.Windows.Forms.TableLayoutPanel tblPanelFwUpdateReports;
private System.Windows.Forms.TableLayoutPanel tblPanelFwUpdateReportsSearch;
private System.Windows.Forms.DataGridView gridViewFwUpdateReportSelection;
private System.Windows.Forms.TableLayoutPanel tblFwUpdateSafeSelection;
private System.Windows.Forms.TableLayoutPanel tblPanelFwUpdateSafeSearch;
private System.Windows.Forms.DataGridView gridViewFwUpdateSafeSelection;
}
}

View File

@ -97,12 +97,34 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
private DataTable _dataTableCordonels;
private DataTable _dataTableUpdateOperators;
private DataTable _dataTableCustomers;
private DataTable _dataTableReportFiles;
private DataTable _dataTableUpdateSafes;
// external update remarks form
// external update remarks form
private readonly FrmHistory _frmFwUpdateReport = new FrmHistory();
///<summary>
/// Collection of software needed for the FW-Update safe!
/// </summary>
private SoftwareContainer _fwUpdateSwContainer;
///<summary>
/// All report files from the DB!
/// This information will only be used by the FW Update Builder!
/// </summary>
private readonly List<FwUpdateReportDb> _fwUpdateReports = new List<FwUpdateReportDb>();
///<summary>
/// One selected report file on grid view by the user from the DB!
/// This information will only be used by the FW Update Builder!
/// </summary>
private readonly FwUpdateReportDb _selectedReport = new FwUpdateReportDb();
///<summary>
/// All FW update safes from the DB!
/// This information will only be used by the FW Update Builder!
/// </summary>
private readonly List<FwUpdateSafeDb> _fwUpdateSafesInfos = new List<FwUpdateSafeDb>();
///<summary>
/// All customer specific production order numbers to search mask from the DB!
/// This information will only be used by the FW Update Builder!
/// </summary>
@ -176,7 +198,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
private Boolean _customersPropertyChanged;
private Boolean _cordonelsPropertyChanged;
private Boolean _fwPackagePropertyChanged;
private Boolean _fwReportFilesPropertyChanged;
private Boolean _fwReportsPropertyChanged;
private Boolean _fwUpdateSafesPropertyChanged;
private Boolean _preBuildSummaryPropertyChanged;
@ -285,12 +307,16 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
LoadDbCordonelCustomersTask();
break;
case ProcessState.GetReportFilesFromDb:
LoadDbReportFilesTask();
case ProcessState.GetReportsFromDb:
LoadDbReportsTask();
break;
case ProcessState.GetFwUpdateSafesFromDb:
LoadDbOutstandingFwUpdateSafesTask();
case ProcessState.GetAndDisplaySingleReportFromDb:
LoadDbReportAndDisplayTask();
break;
case ProcessState.GetFwUpdateSafesInfosFromDb:
LoadDbFwUpdateSafesInfosTask();
break;
case ProcessState.GetFwUpdateOperatorsFromDb:
@ -396,7 +422,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
CheckCordonelChange();
CheckFwPackageChange();
CheckFwUpdateSafesChange();
CheckReportFilesChange();
CheckReportsChange();
break;
case ProcessState.BuildFwUpdateSafe:
SetStatusProgressBar(ProgressBarStatus.Value + 1 > 100 ? 0 : ProgressBarStatus.Value + 1);
@ -407,8 +433,9 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
case ProcessState.GetCustomersFromDb:
case ProcessState.GetFwPackagesFromDb:
case ProcessState.GetCordonelSerialNumbersFromDb:
case ProcessState.GetFwUpdateSafesFromDb:
case ProcessState.GetReportFilesFromDb:
case ProcessState.GetFwUpdateSafesInfosFromDb:
case ProcessState.GetReportsFromDb:
case ProcessState.GetAndDisplaySingleReportFromDb:
case ProcessState.UploadFwUpdateSafeToDb:
CheckDbConnectionTimeout();
SetStatusProgressBar(ProgressBarStatus.Value + 1 > 100 ? 0 : ProgressBarStatus.Value + 1);
@ -686,17 +713,17 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
UiInvoker.ToolStripLabelInvoker(lblStatusDbConnect, ColorSuccess, Resources.StrReadingFwUpdateSafes);
SetStatusProgressBar();
_dbAccessDelayCtrMs = 0;
_processState = ProcessState.GetFwUpdateSafesFromDb;
_processState = ProcessState.GetFwUpdateSafesInfosFromDb;
}
if (e.TabPage == tabPageReports)
{
DisableAllControlsInvoked();
UiInvoker.ToolStripLabelInvoker(lblStatusDbConnect, ColorSuccess, Resources.StrReadingReportFiles);
UiInvoker.ToolStripLabelInvoker(lblStatusDbConnect, ColorSuccess, Resources.StrReadingReports);
SetStatusProgressBar();
_dbAccessDelayCtrMs = 0;
_processState = ProcessState.GetReportFilesFromDb;
_processState = ProcessState.GetReportsFromDb;
}
@ -1081,6 +1108,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
/// </remarks>
private void FrmFwUpdateBuilder_FormClosing(Object sender, FormClosingEventArgs e)
{
_frmFwUpdateReport?.Close();
_datePicker?.Dispose();
_cbxFwReleaseSelection?.Dispose();
_processToken?.Cancel();
@ -1128,6 +1156,9 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
/// <remarks date="2021-Oct-27" author="Thomas Wiedebusch">
/// - Added BuildFwUpdateSwContainerFromDb, not longer taken from locally file system!
/// </remarks>
/// <remarks date="2021-Oct-29" author="Thomas Wiedebusch">
/// - Skip loading of FW upadte SW if already done in preceding run.
/// </remarks>
public Boolean BuildFwUpdateSafe()
{
if (string.IsNullOrEmpty(lblUpdateOperator.Text)) return false;
@ -1186,9 +1217,8 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
LogSuccessText($@"{Resources.StrSwLicenseLoadedSuccessfully} {FwUpdateProjectName}" +
$" {fwUpdateSafe.License.Major}.{fwUpdateSafe.License.Minor}.{fwUpdateSafe.License.Build}");
// local files: if (!BuildFwUpdateSwContainer(fwUpdateSafe.License) ||
if (!BuildFwUpdateSwContainerFromDb(fwUpdateSafe.License) ||
_fwUpdateSwContainer?.RegisterDefinitionFile == null ||
// Skip loading of FW update SW if already done in preceding run
if (_fwUpdateSwContainer?.RegisterDefinitionFile == null ||
_fwUpdateSwContainer.SoftwareSetupFile == null ||
_fwUpdateSwContainer.MeterFilesEraseRestore == null ||
string.IsNullOrEmpty(_fwUpdateSwContainer.RegisterDefinitionFile.FileName) ||
@ -1197,12 +1227,26 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
_fwUpdateSwContainer.SoftwareDynLinkLibs == null ||
_fwUpdateSwContainer.SoftwareDynLinkLibs.Count == 0)
{
LogErrorText(Resources.StrSwContainerCollectionFailed);
MessageBoxShow(Resources.StrSwContainerCollectionFailed, Resources.StrError, MessageBoxButtons.OK,
MessageBoxIcon.Error);
_processState = ProcessState.Error;
return false;
// local files: if (!BuildFwUpdateSwContainer(fwUpdateSafe.License) ||
if (!BuildFwUpdateSwContainerFromDb(fwUpdateSafe.License) ||
_fwUpdateSwContainer?.RegisterDefinitionFile == null ||
_fwUpdateSwContainer.SoftwareSetupFile == null ||
_fwUpdateSwContainer.MeterFilesEraseRestore == null ||
string.IsNullOrEmpty(_fwUpdateSwContainer.RegisterDefinitionFile.FileName) ||
string.IsNullOrEmpty(_fwUpdateSwContainer.SoftwareSetupFile.FileName) ||
string.IsNullOrEmpty(_fwUpdateSwContainer.MeterFilesEraseRestore.FileName) ||
_fwUpdateSwContainer.SoftwareDynLinkLibs == null ||
_fwUpdateSwContainer.SoftwareDynLinkLibs.Count == 0)
{
LogErrorText(Resources.StrSwContainerCollectionFailed);
MessageBoxShow(Resources.StrSwContainerCollectionFailed, Resources.StrError,
MessageBoxButtons.OK,
MessageBoxIcon.Error);
_processState = ProcessState.Error;
return false;
}
}
fwUpdateSafe.Software = _fwUpdateSwContainer;
LogSuccessText(Resources.StrSwContainerCollectionSuccess);
@ -1812,7 +1856,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
// update output information
FillDataGridWithUpdateOperatorInfos();
}
/// <summary>
/// Check for change of customer.
/// </summary>
@ -1831,7 +1875,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
// update output information
FillDataGridWithCustomerInfos();
}
/// <summary>
/// Check for change of Cordonels.
/// </summary>
@ -1885,13 +1929,13 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
/// <remarks date="2021-Mar-31" author="Thomas Wiedebusch">
/// - Initial
/// </remarks>
private void CheckReportFilesChange()
private void CheckReportsChange()
{
if (!_fwReportFilesPropertyChanged) return;
if (!_fwReportsPropertyChanged) return;
_fwReportFilesPropertyChanged = false;
_fwReportsPropertyChanged = false;
// update output information
FillDataGridWithReportFilesInfos();
FillDataGridWithReportsInfos();
}
/// <summary>
@ -1911,6 +1955,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
#endregion --------------------------------------- Checks -----------------------------------------------------
#region ------------------------------------------ Tools ------------------------------------------------------
///// <summary>
///// Build the meter file update ruler to define releases which can be updated to another release.
///// </summary>
@ -2065,7 +2110,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
break;
}
}
/// <summary>
/// Common message window.
/// </summary>
@ -2457,13 +2502,44 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
});
}
/// <summary>
/// Acquire one report file from DB and display it.
/// </summary>
/// <remarks date="2021-Oct-29" author="Thomas Wiedebusch">
/// - Initial
/// </remarks>
private void LoadDbReportAndDisplayTask()
{
_invokerProcessState = _processState;
Task.Factory.StartNew(() =>
{
Thread.CurrentThread.CurrentUICulture = _cultureInfo;
Thread.CurrentThread.CurrentCulture = _cultureInfo;
try
{
// check DB connection in advance to overcome the timing issues for DB service startup
_fwUpdateDbAccess.CheckDbConnection();
GetAndDisplaySingleReportFromDb();
}
catch (Exception)
{
_processState = ProcessState.Error;
}
}).ContinueWith(delegate
{
_fwReportsPropertyChanged = true;
_processState = ProcessState.Idle;
});
}
/// <summary>
/// Acquire all report files from DB.
/// </summary>
/// <remarks date="2021-Oct-28" author="Thomas Wiedebusch">
/// - Initial
/// </remarks>
private void LoadDbReportFilesTask()
private void LoadDbReportsTask()
{
_invokerProcessState = _processState;
Task.Factory.StartNew(() =>
@ -2474,7 +2550,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
{
// check DB connection in advance to overcome the timing issues for DB service startup
_fwUpdateDbAccess.CheckDbConnection();
GetReportFilesFromDb();
GetReportsFromDb();
}
catch (Exception)
{
@ -2482,7 +2558,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
}
}).ContinueWith(delegate
{
_fwReportFilesPropertyChanged = true;
_fwReportsPropertyChanged = true;
_processState = ProcessState.Idle;
});
}
@ -2493,7 +2569,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
/// <remarks date="2021-Oct-28" author="Thomas Wiedebusch">
/// - Initial
/// </remarks>
private void LoadDbOutstandingFwUpdateSafesTask()
private void LoadDbFwUpdateSafesInfosTask()
{
_invokerProcessState = _processState;
Task.Factory.StartNew(() =>
@ -2504,7 +2580,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
{
// check DB connection in advance to overcome the timing issues for DB service startup
_fwUpdateDbAccess.CheckDbConnection();
GetOutstandingFwUpdateSafesFromDb();
GetFwUpdateSafesInfosFromDb();
}
catch (Exception)
{
@ -2817,23 +2893,197 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
/// <summary>
/// Build data grid for FW-Update update safes
/// </summary>
/// <remarks date="2021-Oct-28" author="Thomas Wiedebusch">
/// <remarks date="2021-Oct-29" author="Thomas Wiedebusch">
/// - Initial.
/// </remarks>
private void FillDataGridWithFwUpdateSafesInfos()
{
grpLanguageSelection.Enabled = false;
_dataTableUpdateSafes?.Dispose();
Thread.CurrentThread.CurrentUICulture = _cultureInfo;
Thread.CurrentThread.CurrentCulture = _cultureInfo;
_dataTableUpdateSafes = new DataTable();
_dataTableUpdateSafes.Columns.Add(Resources.StrTableUserValidDate, typeof(DateTime));
_dataTableUpdateSafes.Columns.Add(Resources.StrTableCordonelPcbId, typeof(String));
_dataTableUpdateSafes.Columns.Add(Resources.StrTableCordonelUpdateOrder, typeof(Int64));
_dataTableUpdateSafes.Columns.Add(Resources.StrTableCordonelProductionPos, typeof(Int64));
_dataTableUpdateSafes.Columns.Add(Resources.StrTableCustomerName, typeof(String));
_dataTableUpdateSafes.Columns.Add(Resources.StrTableUserFullName, typeof(String));
try
{
foreach (var safeInfo in _fwUpdateSafesInfos)
{
// create one line per PcbId
foreach (var pcbId in safeInfo.PcbIds)
{
var row = _dataTableUpdateSafes.NewRow();
row[Resources.StrTableUserValidDate] = safeInfo.ValidDate.DateTime;
row[Resources.StrTableCordonelPcbId] = pcbId;
// extract customer name , order and position from file name
var info = safeInfo.Name.Split(FwUpdateConfig.FwUpdateFileFieldSeparator);
var replace = info[1].Replace(FwUpdateConfig.FwUpdateFileExtension, "");
var orderPos = replace.Split(FwUpdateConfig.FwUpdateFileOrderPosSeparator);
row[Resources.StrTableCordonelUpdateOrder] = orderPos[0];
row[Resources.StrTableCordonelProductionPos] = orderPos[1];
row[Resources.StrTableCustomerName] = info[0];
var userName = "?";
foreach (var user in _fwUpdateDbAccess.DbFullQualifiedUpdateOperators.Where(user =>
user.Id == safeInfo.UserId))
{
userName = user.FullName;
break;
}
row[Resources.StrTableUserFullName] = userName;
_dataTableUpdateSafes.Rows.Add(row);
}
}
gridViewFwUpdateSafeSelection.DataSource = _dataTableUpdateSafes;
foreach (DataGridViewColumn column in gridViewFwUpdateSafeSelection.Columns)
{
column.SortMode = DataGridViewColumnSortMode.Automatic;
}
}
catch (Exception)
{
_processState = ProcessState.Error;
}
finally
{
grpLanguageSelection.Enabled = true;
}
}
#endregion --------------------------------------- Data Grid Update Safes --------------------------------------
#region ------------------------------------------ Data Grid Report Files --------------------------------------
/// <summary>
/// Build data grid for FW-Update report files
/// Overwrite cell click, because edit of cells is denied (read only == true).
/// </summary>
/// <remarks date="2021-Oct-28" author="Thomas Wiedebusch">
/// <param name="sender"></param>
/// <param name="e"></param>
/// <remarks date="2021-Mar-31" author="Thomas Wiedebusch">
/// - Initial.
/// </remarks>
private void FillDataGridWithReportFilesInfos()
private void gridViewFwUpdateReportSelection_CellClick(Object sender, DataGridViewCellEventArgs e)
{
try
{
if (e.ColumnIndex < 0 || e.RowIndex < 0 || _dataTableReportFiles == null)
{
return;
}
for (var columnIndex = 0; columnIndex < gridViewFwUpdateReportSelection.ColumnCount; columnIndex++)
{
if (gridViewFwUpdateReportSelection.Columns[columnIndex].Name == Resources.StrTableSelect)
_selectedReport.UserId =
Convert.ToInt32(gridViewFwUpdateReportSelection.Rows[e.RowIndex].Cells[columnIndex].Value);
if (gridViewFwUpdateReportSelection.Columns[columnIndex].Name == Resources.StrTableDate)
_selectedReport.Date = Convert.ToDateTime(
gridViewFwUpdateReportSelection.Rows[e.RowIndex].Cells[columnIndex].Value);
if (gridViewFwUpdateReportSelection.Columns[columnIndex].Name == Resources.StrTableCordonelPcbId)
_selectedReport.PcbId =
Convert.ToInt64(gridViewFwUpdateReportSelection.Rows[e.RowIndex].Cells[columnIndex].Value);
if (gridViewFwUpdateReportSelection.Columns[columnIndex].Name ==
Resources.StrTableCordonelUpdateOrder)
_selectedReport.OrderNr =
Convert.ToInt64(gridViewFwUpdateReportSelection.Rows[e.RowIndex].Cells[columnIndex].Value);
if (gridViewFwUpdateReportSelection.Columns[columnIndex].Name ==
Resources.StrTableCordonelProductionPos)
_selectedReport.OrderPos =
Convert.ToInt64(gridViewFwUpdateReportSelection.Rows[e.RowIndex].Cells[columnIndex].Value);
}
DisableAllControlsInvoked();
UiInvoker.ToolStripLabelInvoker(lblStatusDbConnect, ColorSuccess, Resources.StrReadingReports);
SetStatusProgressBar();
_dbAccessDelayCtrMs = 0;
_processState = ProcessState.GetAndDisplaySingleReportFromDb;
}
catch (Exception)
{
_processState = ProcessState.Error;
}
}
/// <summary>
/// Build data grid for FW-Update report files
/// </summary>
/// <remarks date="2021-Oct-29" author="Thomas Wiedebusch">
/// - Initial.
/// </remarks>
private void FillDataGridWithReportsInfos()
{
grpLanguageSelection.Enabled = false;
_dataTableReportFiles?.Dispose();
Thread.CurrentThread.CurrentUICulture = _cultureInfo;
Thread.CurrentThread.CurrentCulture = _cultureInfo;
_dataTableReportFiles = new DataTable();
_dataTableReportFiles.Columns.Add(Resources.StrTableDate, typeof(DateTime));
_dataTableReportFiles.Columns.Add(Resources.StrTableCordonelPcbId, typeof(String));
_dataTableReportFiles.Columns.Add(Resources.StrTableCordonelUpdateOrder, typeof(Int64));
_dataTableReportFiles.Columns.Add(Resources.StrTableCordonelProductionPos, typeof(Int64));
_dataTableReportFiles.Columns.Add(Resources.StrTableUserFullName, typeof(String));
_dataTableReportFiles.Columns.Add(Resources.StrTableSelect, typeof(Int32));
try
{
foreach (var report in _fwUpdateReports)
{
var row = _dataTableReportFiles.NewRow();
row[Resources.StrTableDate] = report.Date.Date;
row[Resources.StrTableCordonelPcbId] = report.PcbId;
row[Resources.StrTableCordonelUpdateOrder] = report.OrderNr;
row[Resources.StrTableCordonelProductionPos] = report.OrderPos;
var userName = "?";
foreach (var user in _fwUpdateDbAccess.DbFullQualifiedUpdateOperators.Where(user => user.Id == report.UserId))
{
userName = user.FullName;
break;
}
row[Resources.StrTableUserFullName] = userName;
row[Resources.StrTableSelect] = report.UserId;
_dataTableReportFiles.Rows.Add(row);
}
gridViewFwUpdateReportSelection.DataSource = _dataTableReportFiles;
foreach (DataGridViewColumn column in gridViewFwUpdateReportSelection.Columns)
{
column.SortMode = DataGridViewColumnSortMode.Automatic;
}
}
catch (Exception)
{
_processState = ProcessState.Error;
}
finally
{
grpLanguageSelection.Enabled = true;
}
}
#endregion --------------------------------------- Data Grid Report Files --------------------------------------
@ -4157,31 +4407,126 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
}
/// <summary>
/// Get all FW update report files from DB.
/// Get the content of one selected FW update report from DB.
/// </summary>
/// <remarks date="2021-Oct-28" author="Thomas Wiedebusch">
/// <param name="reportText">content of report</param>
/// <param name="pcbId"></param>
/// <param name="userId"></param>
/// <param name="orderNo"></param>
/// <param name="position"></param>
/// <param name="dateTime"></param>
/// <returns>true if text is set with valid content</returns>
/// <remarks date="2021-Oct-29" author="Thomas Wiedebusch">
/// - Initial.
/// </remarks>
private void GetReportFilesFromDb()
private Boolean GetOneSelectedReportFromDb(out String reportText, Int64 pcbId, Int32 userId, Int64 orderNo,
Int64 position, DateTimeOffset dateTime)
{
var fwUpdateReports = new List<FwUpdateReportDb>();
_fwUpdateDbAccess?.DownloadFwUpdateReportsFromDb(out fwUpdateReports);
reportText = "";
// The DB access will load a list of all reports assigned to the input.
if (_fwUpdateDbAccess == null ||
!_fwUpdateDbAccess.DownloadFwUpdateReportsFromDb(out var fwUpdateReports, pcbId, userId, orderNo))
{
return false;
}
//The order number has to be extracted and the date has to match!
foreach (var report in fwUpdateReports.Where(report => report.Date == dateTime &&
report.OrderPos == position))
{
reportText = report.Content;
break;
}
return !string.IsNullOrEmpty(reportText);
}
/// <summary>
/// Get one selected FW update report from DB and display it.
/// </summary>
/// <remarks date="2021-Oct-29" author="Thomas Wiedebusch">
/// - Initial.
/// </remarks>
private void GetAndDisplaySingleReportFromDb()
{
//open rich text view with report details
if (_frmFwUpdateReport == null) return;
Invoke(new Action(() =>
{
_frmFwUpdateReport.rtbHistory?.Clear();
}));
if (!GetOneSelectedReportFromDb(out var reportText, _selectedReport.PcbId, _selectedReport.UserId,
_selectedReport.OrderNr, _selectedReport.OrderPos, _selectedReport.Date)) return;
//open rich text view with report details
Invoke(new Action(() =>
{
if (_frmFwUpdateReport.rtbHistory != null)
{
_frmFwUpdateReport.rtbHistory.AppendText(reportText);
_frmFwUpdateReport.rtbHistory.ScrollToCaret();
}
_frmFwUpdateReport.Show();
}));
}
/// <summary>
/// Get all FW update report files from DB. Loading only the preview (readContent = false as default) to speed up
/// the access, as the content will only be needed on inspection of the report.
/// </summary>
/// <remarks date="2021-Oct-29" author="Thomas Wiedebusch">
/// - Initial.
/// </remarks>
private void GetReportsFromDb()
{
if (_fwUpdateDbAccess == null) return;
_fwUpdateReports.Clear();
// if the users are not acquired, get these first
if (_fwUpdateDbAccess.DbFullQualifiedUpdateOperators == null ||
_fwUpdateDbAccess.DbFullQualifiedUpdateOperators.Count == 0)
{
GetAllUpdateOperatorsFromDb();
}
if (_fwUpdateDbAccess.DbFullQualifiedUpdateOperators == null) return;
foreach (var user in _fwUpdateDbAccess.DbFullQualifiedUpdateOperators)
{
var fwUpdateReportsOfUser = new List<FwUpdateReportDb>();
_fwUpdateDbAccess?.DownloadFwUpdateReportsFromDb(out fwUpdateReportsOfUser, userId: user.Id);
_fwUpdateReports.AddRange(fwUpdateReportsOfUser);
}
}
/// <summary>
/// Get all active FW update safes from DB. Outdated safes cannot be accessed.
/// </summary>
/// <remarks date="2021-Oct-28" author="Thomas Wiedebusch">
/// <remarks date="2021-Oct-29" author="Thomas Wiedebusch">
/// - Initial.
/// </remarks>
private void GetOutstandingFwUpdateSafesFromDb()
private void GetFwUpdateSafesInfosFromDb()
{
var fwUpdateSafes= new List<FwUpdateSafeDb>();
if (_fwUpdateDbAccess != null)
if (_fwUpdateDbAccess == null) return;
_fwUpdateSafesInfos.Clear();
// if the users are not acquired, get these first
if (_fwUpdateDbAccess.DbFullQualifiedUpdateOperators == null ||
_fwUpdateDbAccess.DbFullQualifiedUpdateOperators.Count == 0)
{
foreach (var user in _fwUpdateDbAccess.DbFullQualifiedUpdateOperators)
GetAllUpdateOperatorsFromDb();
}
if (_fwUpdateDbAccess.DbFullQualifiedUpdateOperators == null) return;
foreach (var user in _fwUpdateDbAccess.DbFullQualifiedUpdateOperators)
{
_fwUpdateDbAccess.ListAllFwUpdateSafesOfUserFromDb(user.Id, out var fwUpdateSafesOfUser);
foreach (var safe in fwUpdateSafesOfUser)
{
_fwUpdateDbAccess.ListAllFwUpdateSafesOfUserFromDb(user.Id, out var fwUpdateSafesOfUser);
fwUpdateSafes.AddRange(fwUpdateSafesOfUser);
var pcbIdsOfSafe = _fwUpdateDbAccess.GetFwUpdateSafePcbIdsFromDb(safe.ContainerId);
var fwUpdateSafe = safe;
fwUpdateSafe.PcbIds = pcbIdsOfSafe;
_fwUpdateSafesInfos.Add(fwUpdateSafe);
}
}
}
@ -4303,13 +4648,13 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
{
// Copy MeterFwUpdateRuler either to exe-path or if existing to Library-subfolder
var fwUpdateBuilderExePath = AppDomain.CurrentDomain.BaseDirectory;
var fwUpdateBuilderLibraryPath = Path.Combine(fwUpdateBuilderExePath,
var fwUpdateBuilderLibraryPath = Path.Combine(fwUpdateBuilderExePath,
FwUpdateConfig.LibrarySubFolderName);
// check the Library path existence (will be used in Release build)
var meterFwUpdateRulerPath = Directory.Exists(fwUpdateBuilderLibraryPath) ?
var meterFwUpdateRulerPath = Directory.Exists(fwUpdateBuilderLibraryPath) ?
fwUpdateBuilderLibraryPath : fwUpdateBuilderExePath;
var sourceFile = Path.Combine(meterFwUpdateRulerPath, f.FileName);
var fs = File.Open(sourceFile, FileMode.Create);
fs.Write(f.FileContent, 0, f.FileContent.Length);
@ -4338,6 +4683,10 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
/// </remarks>
private Boolean BuildFwUpdateSwContainerFromDb(SoftwareLicense fwUpdateSwLicense)
{
if (_fwUpdateDbAccess?.DbFwUpdateConfigFiles == null ||
_fwUpdateDbAccess.DbFwUpdateConfigFiles.Count == 0)
GetFwUpdateConfigFilesFromDb();
if (_fwUpdateDbAccess?.DbFwUpdateConfigFiles == null ||
!_fwUpdateDbAccess.DownloadFwUpdateSwContainerFromDb() ||
_fwUpdateDbAccess.DbFwUpdateSwPackage.Count == 0 ||
@ -4794,7 +5143,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
_customersPropertyChanged = true;
_cordonelsPropertyChanged = true;
_fwPackagePropertyChanged = true;
_fwReportFilesPropertyChanged = true;
_fwReportsPropertyChanged = true;
_fwUpdateSafesPropertyChanged = true;
_preBuildSummaryPropertyChanged = true;

View File

@ -1684,6 +1684,105 @@
<data name="&gt;&gt;tabPageSafeBuildReport.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="tblFwUpdateSafeSelection.ColumnCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="tblPanelFwUpdateSafeSearch.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="tblPanelFwUpdateSafeSearch.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tblPanelFwUpdateSafeSearch.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tblPanelFwUpdateSafeSearch.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="tblPanelFwUpdateSafeSearch.RowCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="tblPanelFwUpdateSafeSearch.Size" type="System.Drawing.Size, System.Drawing">
<value>986, 31</value>
</data>
<data name="tblPanelFwUpdateSafeSearch.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;tblPanelFwUpdateSafeSearch.Name" xml:space="preserve">
<value>tblPanelFwUpdateSafeSearch</value>
</data>
<data name="&gt;&gt;tblPanelFwUpdateSafeSearch.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tblPanelFwUpdateSafeSearch.Parent" xml:space="preserve">
<value>tblFwUpdateSafeSelection</value>
</data>
<data name="&gt;&gt;tblPanelFwUpdateSafeSearch.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tblPanelFwUpdateSafeSearch.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls /&gt;&lt;Columns Styles="Percent,50,Percent,50" /&gt;&lt;Rows Styles="Percent,50" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="gridViewFwUpdateSafeSelection.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="gridViewFwUpdateSafeSelection.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 31</value>
</data>
<data name="gridViewFwUpdateSafeSelection.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="gridViewFwUpdateSafeSelection.Size" type="System.Drawing.Size, System.Drawing">
<value>986, 390</value>
</data>
<data name="gridViewFwUpdateSafeSelection.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;gridViewFwUpdateSafeSelection.Name" xml:space="preserve">
<value>gridViewFwUpdateSafeSelection</value>
</data>
<data name="&gt;&gt;gridViewFwUpdateSafeSelection.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;gridViewFwUpdateSafeSelection.Parent" xml:space="preserve">
<value>tblFwUpdateSafeSelection</value>
</data>
<data name="&gt;&gt;gridViewFwUpdateSafeSelection.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="tblFwUpdateSafeSelection.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tblFwUpdateSafeSelection.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
</data>
<data name="tblFwUpdateSafeSelection.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="tblFwUpdateSafeSelection.RowCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="tblFwUpdateSafeSelection.Size" type="System.Drawing.Size, System.Drawing">
<value>986, 421</value>
</data>
<data name="tblFwUpdateSafeSelection.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;tblFwUpdateSafeSelection.Name" xml:space="preserve">
<value>tblFwUpdateSafeSelection</value>
</data>
<data name="&gt;&gt;tblFwUpdateSafeSelection.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tblFwUpdateSafeSelection.Parent" xml:space="preserve">
<value>tabPageFwUpdateSafes</value>
</data>
<data name="&gt;&gt;tblFwUpdateSafeSelection.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tblFwUpdateSafeSelection.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="tblPanelFwUpdateSafeSearch" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="gridViewFwUpdateSafeSelection" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="Absolute,31,Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="tabPageFwUpdateSafes.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
@ -1711,6 +1810,105 @@
<data name="&gt;&gt;tabPageFwUpdateSafes.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="tblPanelFwUpdateReports.ColumnCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="tblPanelFwUpdateReportsSearch.ColumnCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="tblPanelFwUpdateReportsSearch.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tblPanelFwUpdateReportsSearch.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tblPanelFwUpdateReportsSearch.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="tblPanelFwUpdateReportsSearch.RowCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="tblPanelFwUpdateReportsSearch.Size" type="System.Drawing.Size, System.Drawing">
<value>986, 31</value>
</data>
<data name="tblPanelFwUpdateReportsSearch.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;tblPanelFwUpdateReportsSearch.Name" xml:space="preserve">
<value>tblPanelFwUpdateReportsSearch</value>
</data>
<data name="&gt;&gt;tblPanelFwUpdateReportsSearch.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tblPanelFwUpdateReportsSearch.Parent" xml:space="preserve">
<value>tblPanelFwUpdateReports</value>
</data>
<data name="&gt;&gt;tblPanelFwUpdateReportsSearch.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tblPanelFwUpdateReportsSearch.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls /&gt;&lt;Columns Styles="Percent,50,Percent,50" /&gt;&lt;Rows Styles="Percent,50" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="gridViewFwUpdateReportSelection.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="gridViewFwUpdateReportSelection.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 31</value>
</data>
<data name="gridViewFwUpdateReportSelection.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="gridViewFwUpdateReportSelection.Size" type="System.Drawing.Size, System.Drawing">
<value>986, 390</value>
</data>
<data name="gridViewFwUpdateReportSelection.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;gridViewFwUpdateReportSelection.Name" xml:space="preserve">
<value>gridViewFwUpdateReportSelection</value>
</data>
<data name="&gt;&gt;gridViewFwUpdateReportSelection.Type" xml:space="preserve">
<value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;gridViewFwUpdateReportSelection.Parent" xml:space="preserve">
<value>tblPanelFwUpdateReports</value>
</data>
<data name="&gt;&gt;gridViewFwUpdateReportSelection.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="tblPanelFwUpdateReports.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tblPanelFwUpdateReports.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
</data>
<data name="tblPanelFwUpdateReports.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="tblPanelFwUpdateReports.RowCount" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="tblPanelFwUpdateReports.Size" type="System.Drawing.Size, System.Drawing">
<value>986, 421</value>
</data>
<data name="tblPanelFwUpdateReports.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;tblPanelFwUpdateReports.Name" xml:space="preserve">
<value>tblPanelFwUpdateReports</value>
</data>
<data name="&gt;&gt;tblPanelFwUpdateReports.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tblPanelFwUpdateReports.Parent" xml:space="preserve">
<value>tabPageReports</value>
</data>
<data name="&gt;&gt;tblPanelFwUpdateReports.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tblPanelFwUpdateReports.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="tblPanelFwUpdateReportsSearch" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="gridViewFwUpdateReportSelection" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="Absolute,31,Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="tabPageReports.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>

View File

@ -0,0 +1,124 @@
namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
{
partial class FrmHistory
{
/// <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(FrmHistory));
this.rtbHistory = new System.Windows.Forms.RichTextBox();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
this.picBoxLogo = new System.Windows.Forms.PictureBox();
this.tableLayoutPanel1.SuspendLayout();
this.tableLayoutPanel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picBoxLogo)).BeginInit();
this.SuspendLayout();
//
// rtbHistory
//
this.rtbHistory.Dock = System.Windows.Forms.DockStyle.Fill;
this.rtbHistory.Location = new System.Drawing.Point(3, 53);
this.rtbHistory.Name = "rtbHistory";
this.rtbHistory.Size = new System.Drawing.Size(568, 673);
this.rtbHistory.TabIndex = 31;
this.rtbHistory.Text = "";
this.rtbHistory.TextChanged += new System.EventHandler(this.rtbHistory_TextChanged);
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel1.Controls.Add(this.rtbHistory, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 0);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 111F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(574, 729);
this.tableLayoutPanel1.TabIndex = 38;
//
// tableLayoutPanel2
//
this.tableLayoutPanel2.ColumnCount = 2;
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel2.Controls.Add(this.picBoxLogo, 1, 0);
this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 3);
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
this.tableLayoutPanel2.RowCount = 1;
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel2.Size = new System.Drawing.Size(568, 44);
this.tableLayoutPanel2.TabIndex = 36;
//
// picBoxLogo
//
this.picBoxLogo.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.picBoxLogo.Dock = System.Windows.Forms.DockStyle.Right;
this.picBoxLogo.ErrorImage = null;
this.picBoxLogo.Image = ((System.Drawing.Image)(resources.GetObject("picBoxLogo.Image")));
this.picBoxLogo.ImeMode = System.Windows.Forms.ImeMode.NoControl;
this.picBoxLogo.InitialImage = null;
this.picBoxLogo.Location = new System.Drawing.Point(460, 3);
this.picBoxLogo.Name = "picBoxLogo";
this.picBoxLogo.Size = new System.Drawing.Size(105, 38);
this.picBoxLogo.TabIndex = 35;
this.picBoxLogo.TabStop = false;
//
// FrmHistory
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.ClientSize = new System.Drawing.Size(574, 729);
this.Controls.Add(this.tableLayoutPanel1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimumSize = new System.Drawing.Size(400, 768);
this.Name = "FrmHistory";
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
this.Text = "FW-Update Report";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmHistory_FormClosing);
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.picBoxLogo)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.PictureBox picBoxLogo;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
public System.Windows.Forms.RichTextBox rtbHistory;
}
}

View File

@ -0,0 +1,37 @@
using System;
using System.Windows.Forms;
namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
{
/// <summary>
/// History display of update process
/// </summary>
[Serializable]
public partial class FrmHistory : Form
{
/// <summary>
/// Ctor
/// </summary>
public FrmHistory()
{
InitializeComponent();
}
private void FrmHistory_FormClosing(Object sender, FormClosingEventArgs e)
{
//avoid destroying of object
e.Cancel = true;
//instead just hide it
Hide();
}
/// <summary>
/// Select always the last line for the display.
/// </summary>
private void rtbHistory_TextChanged(Object sender, EventArgs e)
{
//rtbHistory.SelectionStart = rtbHistory.Text.Length;
//rtbHistory.ScrollToCaret();
}
}
}

View File

@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="rtbHistory.Size" type="System.Drawing.Size, System.Drawing">
<value>428, 673</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>434, 729</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>434, 729</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3cAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAA
AAAABwAAAAAAAAAAAAAAAAB3cAcAAAAAAAAAAAAHcHAAd3AHAABwAAAAAAAAdwAHAHhwAAAABwAAAAAA
B3CAAAd4dwAAcABwAAAAAAcIiAd3d3d3B3cABwAAAAAAj4iHf///B3iHcAcAAAAAAAiIiPiIiP8IhwBw
AAAAAAAAiAiIh3d48HAAcAAAAAd3CIiIiAAHd493AHd3cABwAAjwiAB3dwd/BwAAAHAHAACPCIgIAAd3
ePdwAABwBwiIjwiA8I+AcHj3d3cAcAcI+I8HgPBw8HB494h3AHAHCIiPB4Dwd4BwiPd3dwBwBwAAjweI
/wAICIj3cAAAcAAAAAjweA//8AiPdwBwAAAAAAAI8HeIAAiIiHcAcAAAAAAAAI8HeIiIiAhwAHAAAAAA
AAiP8Ad3iAiIhwAHAAAAAACPiI/wAAD4eIdwBwAAAAAHCPgIj///iAeHAHAAAAAAB3CAAAiIiAAAcAcA
AAAAAAB3AHAAiIAHAABwAAAAAAAAB3cAAI+ABwAHAAAAAAAAAAAAAACIgAcAAAAAAAAAAAAAAAAAAAAH
AAAAAAAAAAAAAAAAB3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////wP///8D///+A////gP//4Y
Dn/8AAQ/+AAAH/gAAA/4AAAP/AAAH/4AAB/gAAABwAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB/AAAH/wA
AB/+AAAf/AAAD/gAAA/4AAAf+AAAP/wYDH/+OA7///gP///4D///+A///////w==
</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>FW-Update Info</value>
</data>
</root>

View File

@ -0,0 +1,202 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="picBoxLogo.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
/9j/4AAQSkZJRgABAQEAYABgAAD/4QC8RXhpZgAATU0AKgAAAAgABAESAAMAAAABAAEAAAE7AAIAAAAH
AAAAPodpAAQAAAABAAAARpydAAEAAAAOAAAApgAAAABUaG9tYXMAAAAEkAMAAgAAABQAAAB8kAQAAgAA
ABQAAACQkpEAAgAAAAM1MwAAkpIAAgAAAAM1MwAAAAAAADIwMjE6MDQ6MDEgMTQ6NTk6MjkAMjAyMTow
NDowMSAxNDo1OToyOQAAAFQAaABvAG0AYQBzAAAA/9sAQwACAQECAQECAgICAgICAgMFAwMDAwMGBAQD
BQcGBwcHBgcHCAkLCQgICggHBwoNCgoLDAwMDAcJDg8NDA4LDAwM/9sAQwECAgIDAwMGAwMGDAgHCAwM
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAIwBkAwEi
AAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAAB
fQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNE
RUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1
tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEA
AAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRC
kaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpz
dHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ
2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/fi5vYbML50scW7gb2C5p28Yrzr9qv8AZm0H
9rX4Map4O8QK0cV0vm2d5GP32nXKg+XOnuMkEfxKWXoa/M7wp8XfjF8ZtT0j9j288SafptxpGsz6Xqvi
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
wxRrtSJFACqo7AAAAUUUVhvqzsSSVkf/2Q==
</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3cAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAA
AAAABwAAAAAAAAAAAAAAAAB3cAcAAAAAAAAAAAAHcHAAd3AHAABwAAAAAAAAdwAHAHhwAAAABwAAAAAA
B3CAAAd4dwAAcABwAAAAAAcIiAd3d3d3B3cABwAAAAAAj4iHf///B3iHcAcAAAAAAAiIiPiIiP8IhwBw
AAAAAAAAiAiIh3d48HAAcAAAAAd3CIiIiAAHd493AHd3cABwAAjwiAB3dwd/BwAAAHAHAACPCIgIAAd3
ePdwAABwBwiIjwiA8I+AcHj3d3cAcAcI+I8HgPBw8HB494h3AHAHCIiPB4Dwd4BwiPd3dwBwBwAAjweI
/wAICIj3cAAAcAAAAAjweA//8AiPdwBwAAAAAAAI8HeIAAiIiHcAcAAAAAAAAI8HeIiIiAhwAHAAAAAA
AAiP8Ad3iAiIhwAHAAAAAACPiI/wAAD4eIdwBwAAAAAHCPgIj///iAeHAHAAAAAAB3CAAAiIiAAAcAcA
AAAAAAB3AHAAiIAHAABwAAAAAAAAB3cAAI+ABwAHAAAAAAAAAAAAAACIgAcAAAAAAAAAAAAAAAAAAAAH
AAAAAAAAAAAAAAAAB3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////wP///8D///+A////gP//4Y
Dn/8AAQ/+AAAH/gAAA/4AAAP/AAAH/4AAB/gAAABwAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB/AAAH/wA
AB/+AAAf/AAAD/gAAA/4AAAf+AAAP/wYDH/+OA7///gP///4D///+A///////w==
</value>
</data>
</root>

View File

@ -101,6 +101,12 @@
<Compile Include="FrmFwUpdateBuilder.Designer.cs">
<DependentUpon>FrmFwUpdateBuilder.cs</DependentUpon>
</Compile>
<Compile Include="FrmHistory.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmHistory.Designer.cs">
<DependentUpon>FrmHistory.cs</DependentUpon>
</Compile>
<Compile Include="FrmRegister.cs">
<SubType>Form</SubType>
</Compile>
@ -118,6 +124,13 @@
<DependentUpon>FrmFwUpdateBuilder.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="FrmHistory.de.resx">
<DependentUpon>FrmHistory.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FrmHistory.resx">
<DependentUpon>FrmHistory.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="FrmRegister.de.resx">
<DependentUpon>FrmRegister.cs</DependentUpon>
</EmbeddedResource>

View File

@ -362,9 +362,9 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder.Properties {
/// <summary>
/// Looks up a localized string similar to Acquiring Report Files.....
/// </summary>
internal static string StrReadingReportFiles {
internal static string StrReadingReports {
get {
return ResourceManager.GetString("StrReadingReportFiles", resourceCulture);
return ResourceManager.GetString("StrReadingReports", resourceCulture);
}
}
@ -629,6 +629,15 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to FW-Update Order Number.
/// </summary>
internal static string StrTableCordonelUpdateOrder {
get {
return ResourceManager.GetString("StrTableCordonelUpdateOrder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Customer Location.
/// </summary>
@ -656,6 +665,15 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Date.
/// </summary>
internal static string StrTableDate {
get {
return ResourceManager.GetString("StrTableDate", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Core Max.
/// </summary>
@ -747,7 +765,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder.Properties {
}
/// <summary>
/// Looks up a localized string similar to Full Name.
/// Looks up a localized string similar to Update Operator.
/// </summary>
internal static string StrTableUserFullName {
get {

View File

@ -156,7 +156,7 @@
<data name="StrReadingFwUpdateSafes" xml:space="preserve">
<value>Ermittelle FW Update Safes....</value>
</data>
<data name="StrReadingReportFiles" xml:space="preserve">
<data name="StrReadingReports" xml:space="preserve">
<value>Ermittelle Berichte....</value>
</data>
<data name="StrReadingCustomers" xml:space="preserve">
@ -279,6 +279,9 @@
<data name="StrTableCordonelProductionOrder" xml:space="preserve">
<value>Produktionsnummer</value>
</data>
<data name="StrTableCordonelUpdateOrder" xml:space="preserve">
<value>FW-Update Auftragsnummer</value>
</data>
<data name="StrTableCordonelProductionPos" xml:space="preserve">
<value>Position</value>
</data>
@ -321,6 +324,9 @@
<data name="StrTableReleaseDate" xml:space="preserve">
<value>Releasedatum</value>
</data>
<data name="StrTableDate" xml:space="preserve">
<value>Datum</value>
</data>
<data name="StrTableRegion" xml:space="preserve">
<value>Region</value>
</data>
@ -328,7 +334,7 @@
<value>Funkfrequenz [MHz]</value>
</data>
<data name="StrTableUserFullName" xml:space="preserve">
<value>Benutzername</value>
<value>Update Operator</value>
</data>
<data name="StrTableUserDomain" xml:space="preserve">
<value>Domain</value>

View File

@ -162,7 +162,7 @@
<data name="StrReadingFwUpdateSafes" xml:space="preserve">
<value>Acquiring FW Update Safes....</value>
</data>
<data name="StrReadingReportFiles" xml:space="preserve">
<data name="StrReadingReports" xml:space="preserve">
<value>Acquiring Report Files....</value>
</data>
<data name="StrReadingCordonels" xml:space="preserve">
@ -282,6 +282,9 @@
<data name="StrTableCordonelProductionOrder" xml:space="preserve">
<value>Order Number</value>
</data>
<data name="StrTableCordonelUpdateOrder" xml:space="preserve">
<value>FW-Update Order Number</value>
</data>
<data name="StrTableCordonelProductionPos" xml:space="preserve">
<value>Position</value>
</data>
@ -324,6 +327,9 @@
<data name="StrTableReleaseDate" xml:space="preserve">
<value>Release Date</value>
</data>
<data name="StrTableDate" xml:space="preserve">
<value>Date</value>
</data>
<data name="StrTableRegion" xml:space="preserve">
<value>Region</value>
</data>
@ -331,7 +337,7 @@
<value>Radio Frequency [MHz]</value>
</data>
<data name="StrTableUserFullName" xml:space="preserve">
<value>Full Name</value>
<value>Update Operator</value>
</data>
<data name="StrTableUserDomain" xml:space="preserve">
<value>Domain</value>