This commit is contained in:
Курнат Андрей
2026-04-02 21:44:28 +03:00
parent db15503315
commit 22ed7d978a
25 changed files with 1064 additions and 156 deletions

View File

@@ -12,7 +12,7 @@ namespace XLAB2
{
private string _searchText;
private AvailableInstrumentItem _selectedType;
private string _serialNumber;
private string _serialNumbersText;
private string _statusText;
public SelectInstrumentTypeWindowViewModel(string customerName, IReadOnlyList<AvailableInstrumentItem> instrumentTypes)
@@ -65,12 +65,12 @@ namespace XLAB2
}
}
public string SerialNumber
public string SerialNumbersText
{
get { return _serialNumber; }
get { return _serialNumbersText; }
set
{
if (SetProperty(ref _serialNumber, value))
if (SetProperty(ref _serialNumbersText, value))
{
((RelayCommand)ConfirmCommand).RaiseCanExecuteChanged();
UpdateStatus();
@@ -86,12 +86,13 @@ namespace XLAB2
public InstrumentTypeSelectionResult GetResult()
{
var serialNumbers = ParseSerialNumbers(SerialNumbersText);
return SelectedType == null
? null
: new InstrumentTypeSelectionResult
{
TypeItem = SelectedType,
SerialNumber = string.IsNullOrWhiteSpace(SerialNumber) ? string.Empty : SerialNumber.Trim()
SerialNumbers = serialNumbers
};
}
@@ -103,7 +104,7 @@ namespace XLAB2
private bool CanConfirm(object parameter)
{
return SelectedType != null
&& !string.IsNullOrWhiteSpace(SerialNumber);
&& ParseSerialNumbers(SerialNumbersText).Count > 0;
}
private void Confirm(object parameter)
@@ -138,6 +139,30 @@ namespace XLAB2
&& source.IndexOf(searchText, StringComparison.OrdinalIgnoreCase) >= 0;
}
private static List<string> ParseSerialNumbers(string value)
{
var serialNumbers = new List<string>();
var unique = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
if (string.IsNullOrWhiteSpace(value))
{
return serialNumbers;
}
var separators = new[] { '\r', '\n', '\t', ',', ';' };
foreach (var token in value.Split(separators, StringSplitOptions.RemoveEmptyEntries))
{
var serialNumber = token.Trim();
if (serialNumber.Length == 0 || !unique.Add(serialNumber))
{
continue;
}
serialNumbers.Add(serialNumber);
}
return serialNumbers;
}
private void RaiseCloseRequested(bool? dialogResult)
{
var handler = CloseRequested;
@@ -150,12 +175,13 @@ namespace XLAB2
private void UpdateStatus()
{
var visibleCount = InstrumentTypesView.Cast<object>().Count();
var serialCount = ParseSerialNumbers(SerialNumbersText).Count;
StatusText = string.Format(
"Всего типов: {0}. По фильтру: {1}. Выбран тип: {2}. Заводской номер: {3}.",
"Всего типов: {0}. По фильтру: {1}. Выбран тип: {2}. Уникальных зав. №: {3}.",
InstrumentTypes.Count,
visibleCount,
SelectedType == null ? "нет" : "да",
string.IsNullOrWhiteSpace(SerialNumber) ? "не указан" : "указан");
serialCount);
}
}
}