edit
This commit is contained in:
@@ -724,12 +724,21 @@ ORDER BY " + (loadClosedDocumentsForCurrentYear
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var serialNumbersByDocument = LoadDocumentSerialNumbers(connection, loadClosedDocumentsForCurrentYear, currentYearStart, nextYearStart);
|
||||
foreach (var document in documents)
|
||||
{
|
||||
if (serialNumbersByDocument.TryGetValue(document.DocumentNumber, out var serialNumbersText))
|
||||
{
|
||||
document.SerialNumbersText = serialNumbersText;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return documents;
|
||||
}
|
||||
|
||||
public Task<IReadOnlyList<PsvDocumentSummary>> LoadDocumentsAsync(bool loadClosedDocumentsForCurrentYear, CancellationToken cancellationToken = default)
|
||||
public async Task<IReadOnlyList<PsvDocumentSummary>> LoadDocumentsAsync(bool loadClosedDocumentsForCurrentYear, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = @"
|
||||
SELECT
|
||||
@@ -760,41 +769,171 @@ ORDER BY " + (loadClosedDocumentsForCurrentYear
|
||||
var currentYearStart = new DateTime(today.Year, 1, 1);
|
||||
var nextYearStart = currentYearStart.AddYears(1);
|
||||
|
||||
return SqlServerConnectionFactory.Current.QueryOpenConnectionAsync(
|
||||
sql,
|
||||
delegate(SqlDataReader reader)
|
||||
{
|
||||
var documentNumber = GetString(reader, "DocumentNumber");
|
||||
return new PsvDocumentSummary
|
||||
{
|
||||
DocumentKey = documentNumber,
|
||||
DocumentNumber = documentNumber,
|
||||
AcceptedOn = GetNullableDateTime(reader, "AcceptedOn"),
|
||||
IssuedOn = GetNullableDateTime(reader, "IssuedOn"),
|
||||
DepartmentName = GetString(reader, "DepartmentName"),
|
||||
CustomerId = GetNullableInt32(reader, "CustomerId"),
|
||||
CustomerName = GetString(reader, "CustomerName"),
|
||||
ItemCount = GetInt32(reader, "ItemCount"),
|
||||
IssuedCount = GetInt32(reader, "IssuedCount"),
|
||||
PassedCount = GetInt32(reader, "PassedCount"),
|
||||
FailedCount = GetInt32(reader, "FailedCount"),
|
||||
IsDraft = false
|
||||
};
|
||||
},
|
||||
delegate(SqlCommand command)
|
||||
{
|
||||
ConfigureCommandTimeout(command);
|
||||
var documents = new List<PsvDocumentSummary>();
|
||||
|
||||
if (loadClosedDocumentsForCurrentYear)
|
||||
{
|
||||
command.Parameters.Add("@IssuedFrom", SqlDbType.DateTime).Value = currentYearStart;
|
||||
command.Parameters.Add("@IssuedTo", SqlDbType.DateTime).Value = nextYearStart;
|
||||
}
|
||||
},
|
||||
cancellationToken).ContinueWith<IReadOnlyList<PsvDocumentSummary>>(delegate(Task<List<PsvDocumentSummary>> task)
|
||||
await using (var connection = await SqlServerConnectionFactory.Current.OpenConnectionAsync(cancellationToken).ConfigureAwait(false))
|
||||
using (var command = new SqlCommand(sql, connection))
|
||||
{
|
||||
ConfigureCommandTimeout(command);
|
||||
|
||||
if (loadClosedDocumentsForCurrentYear)
|
||||
{
|
||||
return task.Result;
|
||||
}, cancellationToken, TaskContinuationOptions.ExecuteSynchronously, TaskScheduler.Default);
|
||||
command.Parameters.Add("@IssuedFrom", SqlDbType.DateTime).Value = currentYearStart;
|
||||
command.Parameters.Add("@IssuedTo", SqlDbType.DateTime).Value = nextYearStart;
|
||||
}
|
||||
|
||||
using (var reader = await command.ExecuteReaderAsync(cancellationToken).ConfigureAwait(false))
|
||||
{
|
||||
while (await reader.ReadAsync(cancellationToken).ConfigureAwait(false))
|
||||
{
|
||||
var documentNumber = GetString(reader, "DocumentNumber");
|
||||
documents.Add(new PsvDocumentSummary
|
||||
{
|
||||
DocumentKey = documentNumber,
|
||||
DocumentNumber = documentNumber,
|
||||
AcceptedOn = GetNullableDateTime(reader, "AcceptedOn"),
|
||||
IssuedOn = GetNullableDateTime(reader, "IssuedOn"),
|
||||
DepartmentName = GetString(reader, "DepartmentName"),
|
||||
CustomerId = GetNullableInt32(reader, "CustomerId"),
|
||||
CustomerName = GetString(reader, "CustomerName"),
|
||||
ItemCount = GetInt32(reader, "ItemCount"),
|
||||
IssuedCount = GetInt32(reader, "IssuedCount"),
|
||||
PassedCount = GetInt32(reader, "PassedCount"),
|
||||
FailedCount = GetInt32(reader, "FailedCount"),
|
||||
IsDraft = false
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var serialNumbersByDocument = await LoadDocumentSerialNumbersAsync(connection, loadClosedDocumentsForCurrentYear, currentYearStart, nextYearStart, cancellationToken).ConfigureAwait(false);
|
||||
foreach (var document in documents)
|
||||
{
|
||||
if (serialNumbersByDocument.TryGetValue(document.DocumentNumber, out var serialNumbersText))
|
||||
{
|
||||
document.SerialNumbersText = serialNumbersText;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return documents;
|
||||
}
|
||||
|
||||
private Dictionary<string, string> LoadDocumentSerialNumbers(SqlConnection connection, bool loadClosedDocumentsForCurrentYear, DateTime currentYearStart, DateTime nextYearStart)
|
||||
{
|
||||
var sql = @"
|
||||
WITH filteredDocuments AS
|
||||
(
|
||||
SELECT m.NNZVPV
|
||||
FROM dbo.EKZMK m
|
||||
WHERE NULLIF(LTRIM(RTRIM(m.NNZVPV)), N'') IS NOT NULL
|
||||
GROUP BY m.NNZVPV
|
||||
HAVING " + (loadClosedDocumentsForCurrentYear
|
||||
? "MAX(m.DTVDM) >= @IssuedFrom AND MAX(m.DTVDM) < @IssuedTo"
|
||||
: "MAX(m.DTVDM) IS NULL") + @"
|
||||
)
|
||||
SELECT
|
||||
m.NNZVPV AS DocumentNumber,
|
||||
z.NNZV AS SerialNumber
|
||||
FROM dbo.EKZMK m
|
||||
JOIN filteredDocuments documents ON documents.NNZVPV = m.NNZVPV
|
||||
JOIN dbo.EKZ z ON z.IDEKZ = m.IDEKZ
|
||||
WHERE NULLIF(LTRIM(RTRIM(z.NNZV)), N'') IS NOT NULL
|
||||
ORDER BY m.NNZVPV, z.NNZV;";
|
||||
|
||||
var serialNumbersByDocument = new Dictionary<string, SortedSet<string>>(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
using (var command = new SqlCommand(sql, connection))
|
||||
{
|
||||
ConfigureCommandTimeout(command);
|
||||
|
||||
if (loadClosedDocumentsForCurrentYear)
|
||||
{
|
||||
command.Parameters.Add("@IssuedFrom", SqlDbType.DateTime).Value = currentYearStart;
|
||||
command.Parameters.Add("@IssuedTo", SqlDbType.DateTime).Value = nextYearStart;
|
||||
}
|
||||
|
||||
using (var reader = command.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
var documentNumber = GetString(reader, "DocumentNumber");
|
||||
var serialNumber = GetString(reader, "SerialNumber");
|
||||
if (string.IsNullOrWhiteSpace(documentNumber) || string.IsNullOrWhiteSpace(serialNumber))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!serialNumbersByDocument.TryGetValue(documentNumber, out var serialNumbers))
|
||||
{
|
||||
serialNumbers = new SortedSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||
serialNumbersByDocument[documentNumber] = serialNumbers;
|
||||
}
|
||||
|
||||
serialNumbers.Add(serialNumber.Trim());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return serialNumbersByDocument.ToDictionary(pair => pair.Key, pair => string.Join(", ", pair.Value), StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
private async Task<Dictionary<string, string>> LoadDocumentSerialNumbersAsync(SqlConnection connection, bool loadClosedDocumentsForCurrentYear, DateTime currentYearStart, DateTime nextYearStart, CancellationToken cancellationToken)
|
||||
{
|
||||
var sql = @"
|
||||
WITH filteredDocuments AS
|
||||
(
|
||||
SELECT m.NNZVPV
|
||||
FROM dbo.EKZMK m
|
||||
WHERE NULLIF(LTRIM(RTRIM(m.NNZVPV)), N'') IS NOT NULL
|
||||
GROUP BY m.NNZVPV
|
||||
HAVING " + (loadClosedDocumentsForCurrentYear
|
||||
? "MAX(m.DTVDM) >= @IssuedFrom AND MAX(m.DTVDM) < @IssuedTo"
|
||||
: "MAX(m.DTVDM) IS NULL") + @"
|
||||
)
|
||||
SELECT
|
||||
m.NNZVPV AS DocumentNumber,
|
||||
z.NNZV AS SerialNumber
|
||||
FROM dbo.EKZMK m
|
||||
JOIN filteredDocuments documents ON documents.NNZVPV = m.NNZVPV
|
||||
JOIN dbo.EKZ z ON z.IDEKZ = m.IDEKZ
|
||||
WHERE NULLIF(LTRIM(RTRIM(z.NNZV)), N'') IS NOT NULL
|
||||
ORDER BY m.NNZVPV, z.NNZV;";
|
||||
|
||||
var serialNumbersByDocument = new Dictionary<string, SortedSet<string>>(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
using (var command = new SqlCommand(sql, connection))
|
||||
{
|
||||
ConfigureCommandTimeout(command);
|
||||
|
||||
if (loadClosedDocumentsForCurrentYear)
|
||||
{
|
||||
command.Parameters.Add("@IssuedFrom", SqlDbType.DateTime).Value = currentYearStart;
|
||||
command.Parameters.Add("@IssuedTo", SqlDbType.DateTime).Value = nextYearStart;
|
||||
}
|
||||
|
||||
using (var reader = await command.ExecuteReaderAsync(cancellationToken).ConfigureAwait(false))
|
||||
{
|
||||
while (await reader.ReadAsync(cancellationToken).ConfigureAwait(false))
|
||||
{
|
||||
var documentNumber = GetString(reader, "DocumentNumber");
|
||||
var serialNumber = GetString(reader, "SerialNumber");
|
||||
if (string.IsNullOrWhiteSpace(documentNumber) || string.IsNullOrWhiteSpace(serialNumber))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!serialNumbersByDocument.TryGetValue(documentNumber, out var serialNumbers))
|
||||
{
|
||||
serialNumbers = new SortedSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||
serialNumbersByDocument[documentNumber] = serialNumbers;
|
||||
}
|
||||
|
||||
serialNumbers.Add(serialNumber.Trim());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return serialNumbersByDocument.ToDictionary(pair => pair.Key, pair => string.Join(", ", pair.Value), StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
public IReadOnlyList<PsvDocumentLine> LoadDocumentLines(string documentNumber)
|
||||
|
||||
Reference in New Issue
Block a user