This commit is contained in:
Курнат Андрей
2026-03-24 22:31:05 +03:00
parent 74d793948e
commit d46172beb9
83 changed files with 1159 additions and 22 deletions

View File

@@ -960,14 +960,14 @@ namespace XLAB2
foreach (var pendingLinesByDocument in _pendingLinesByDocumentKey)
{
if (string.Equals(pendingLinesByDocument.Key, currentDocument.DocumentKey, StringComparison.OrdinalIgnoreCase))
if (MatchesPendingLinesStorageKey(currentDocument, pendingLinesByDocument.Key))
{
continue;
}
var otherDocument = Documents.FirstOrDefault(delegate(PsvDocumentSummary document)
{
return string.Equals(document.DocumentKey, pendingLinesByDocument.Key, StringComparison.OrdinalIgnoreCase);
return MatchesPendingLinesStorageKey(document, pendingLinesByDocument.Key);
});
if (otherDocument == null
@@ -1395,7 +1395,7 @@ namespace XLAB2
RunBusyOperation(async delegate
{
var result = await _service.DeleteDocumentAsync(selectedDocument.DocumentNumber);
_pendingLinesByDocumentKey.Remove(selectedDocument.DocumentKey);
_pendingLinesByDocumentKey.Remove(GetPendingLinesStorageKey(selectedDocument));
await RefreshDocumentsCoreAsync(null, null);
_dialogService.ShowInfo(
string.Format(
@@ -1409,7 +1409,7 @@ namespace XLAB2
private void DeleteDraftDocument(PsvDocumentSummary draft)
{
_draftDocuments.RemoveAll(delegate(PsvDocumentSummary item) { return item.DocumentKey == draft.DocumentKey; });
_pendingLinesByDocumentKey.Remove(draft.DocumentKey);
_pendingLinesByDocumentKey.Remove(GetPendingLinesStorageKey(draft));
Documents.Remove(draft);
DocumentsView.Refresh();
SelectedDocument = Documents.Count > 0 ? Documents[0] : null;
@@ -1885,12 +1885,41 @@ namespace XLAB2
return new List<PsvDocumentLine>();
}
var pendingKey = GetPendingLinesStorageKey(document);
if (string.IsNullOrWhiteSpace(pendingKey))
{
return new List<PsvDocumentLine>();
}
List<PsvDocumentLine> lines;
return _pendingLinesByDocumentKey.TryGetValue(document.DocumentKey, out lines)
return _pendingLinesByDocumentKey.TryGetValue(pendingKey, out lines)
? lines
: new List<PsvDocumentLine>();
}
private static string GetPendingLinesStorageKey(PsvDocumentSummary document)
{
if (document == null)
{
return string.Empty;
}
if (!document.IsDraft && !string.IsNullOrWhiteSpace(document.DocumentNumber))
{
return document.DocumentNumber.Trim();
}
return string.IsNullOrWhiteSpace(document.DocumentKey)
? string.Empty
: document.DocumentKey.Trim();
}
private static bool MatchesPendingLinesStorageKey(PsvDocumentSummary document, string pendingKey)
{
return !string.IsNullOrWhiteSpace(pendingKey)
&& string.Equals(GetPendingLinesStorageKey(document), pendingKey, StringComparison.OrdinalIgnoreCase);
}
private List<PsvDocumentLine> MergeDocumentLinesForPrint(PsvDocumentSummary document, IEnumerable<PsvDocumentLine> persistedLines)
{
var mergedLines = new List<PsvDocumentLine>();
@@ -2103,11 +2132,17 @@ namespace XLAB2
return;
}
var pendingKey = GetPendingLinesStorageKey(SelectedDocument);
if (string.IsNullOrWhiteSpace(pendingKey))
{
return;
}
List<PsvDocumentLine> pendingLines;
if (!_pendingLinesByDocumentKey.TryGetValue(SelectedDocument.DocumentKey, out pendingLines))
if (!_pendingLinesByDocumentKey.TryGetValue(pendingKey, out pendingLines))
{
pendingLines = new List<PsvDocumentLine>();
_pendingLinesByDocumentKey[SelectedDocument.DocumentKey] = pendingLines;
_pendingLinesByDocumentKey[pendingKey] = pendingLines;
}
var candidateLines = selectedItems
@@ -2220,11 +2255,17 @@ namespace XLAB2
return;
}
var pendingKey = GetPendingLinesStorageKey(SelectedDocument);
if (string.IsNullOrWhiteSpace(pendingKey))
{
return;
}
List<PsvDocumentLine> pendingLines;
if (!_pendingLinesByDocumentKey.TryGetValue(SelectedDocument.DocumentKey, out pendingLines))
if (!_pendingLinesByDocumentKey.TryGetValue(pendingKey, out pendingLines))
{
pendingLines = new List<PsvDocumentLine>();
_pendingLinesByDocumentKey[SelectedDocument.DocumentKey] = pendingLines;
_pendingLinesByDocumentKey[pendingKey] = pendingLines;
}
var serialNumber = string.IsNullOrWhiteSpace(result.SerialNumber) ? string.Empty : result.SerialNumber.Trim();
@@ -2234,6 +2275,12 @@ namespace XLAB2
return;
}
if (serialNumber.Length > EkzDirectoryRules.SerialNumberMaxLength)
{
_dialogService.ShowWarning(string.Format("Заводской номер не должен превышать {0} символов.", EkzDirectoryRules.SerialNumberMaxLength));
return;
}
if (!result.TypeItem.HasTemplate)
{
_dialogService.ShowWarning("Выбранный тип нельзя добавить: для него не найден шаблон EKZMK, период из TPRMCP или регистрационный период TIPS.");
@@ -2541,13 +2588,14 @@ namespace XLAB2
var currentDocumentNumber = selectedDocument.IsDraft ? null : selectedDocument.DocumentNumber;
var documentKey = selectedDocument.DocumentKey;
var documentPendingKey = GetPendingLinesStorageKey(selectedDocument);
var wasDraft = selectedDocument.IsDraft;
var closingNow = !selectedDocument.IssuedOn.HasValue && request.IssuedOn.HasValue;
var printDocument = closingNow ? CreateSavedDocumentSummaryForPrint(selectedDocument, request) : null;
var documentLinesSnapshot = DocumentLines.ToList();
var result = await Task.Run(delegate { return _service.SaveDocument(currentDocumentNumber, request, documentLinesSnapshot); });
_pendingLinesByDocumentKey.Remove(documentKey);
_pendingLinesByDocumentKey.Remove(documentPendingKey);
if (wasDraft)
{
_draftDocuments.RemoveAll(delegate(PsvDocumentSummary draft) { return draft.DocumentKey == documentKey; });