From 7fc74c286b51bf69fd2207cb016851ef16f711db Mon Sep 17 00:00:00 2001 From: "i.fedorov" Date: Tue, 30 Dec 2025 18:21:01 +0500 Subject: [PATCH] Add SuccessState to DocflowFilterBuilder --- .../DocflowFilterBuilder_Tests.cs | 30 +++++++++++++++- .../Models/Requests/Docflows/DocflowFilter.cs | 34 +++++++++++++++++-- .../DocflowFiltering/DocflowFilterBuilder.cs | 10 ++++-- 3 files changed, 69 insertions(+), 5 deletions(-) diff --git a/src/Kontur.Extern.Api.Client.UnitTests/Client/Model/DocflowFiltering/DocflowFilterBuilder_Tests.cs b/src/Kontur.Extern.Api.Client.UnitTests/Client/Model/DocflowFiltering/DocflowFilterBuilder_Tests.cs index 00eac370..5bbf8145 100644 --- a/src/Kontur.Extern.Api.Client.UnitTests/Client/Model/DocflowFiltering/DocflowFilterBuilder_Tests.cs +++ b/src/Kontur.Extern.Api.Client.UnitTests/Client/Model/DocflowFiltering/DocflowFilterBuilder_Tests.cs @@ -41,6 +41,7 @@ public void Should_build_filter_with_non_dependent_fields() .WithOkud(Okud.Parse("1234567")) .WithRegNumberOfPfrDocflow(PfrRegNumber.Parse("123-456-789012")) .WithTypes(DocflowType.Fns534Report, DocflowType.Fns534Letter) + .WithSuccessStates(DocflowState.Successful, DocflowState.Warning) .WithFormName("the form") .WithCreatedFrom(createdFrom) .WithCreatedTo(createdTo) @@ -69,7 +70,9 @@ public void Should_build_filter_with_non_dependent_fields() ("periodFrom", "2021-07-08T00:00:00.0000000"), ("periodTo", "2021-07-18T00:00:00.0000000"), ("type", "fns534-report"), - ("type", "fns534-letter") + ("type", "fns534-letter"), + ("successState", "successful"), + ("successState", "warning") ); } @@ -144,6 +147,31 @@ public void Should_create_correct_filter_with_existing_docflow_type(DocflowType ShouldHaveExpectedQueryParameters(filter, ("type", type.ToUrn()!.Nss)); } + [Test] + public void Should_create_correct_filter_with_success_states() + { + var filter = new DocflowFilterBuilder() + .WithSuccessStates(DocflowState.Successful, DocflowState.Warning) + .CreateFilter(); + + ShouldHaveExpectedQueryParameters( + filter, + ("successState", "successful"), + ("successState", "warning")); + } + + [Test] + public void Should_create_correct_filter_with_non_existing_state_in_sdk() + { + var filter = new DocflowFilterBuilder() + .WithSuccessStates(new DocflowState("urn:docflow-state:unknown-state")) + .CreateFilter(); + + ShouldHaveExpectedQueryParameters( + filter, + ("successState", "unknown-state")); + } + private static readonly DocflowType[] TypeCases = { DocflowType.PfrAncillary, diff --git a/src/Kontur.Extern.Api.Client/ApiLevel/Models/Requests/Docflows/DocflowFilter.cs b/src/Kontur.Extern.Api.Client/ApiLevel/Models/Requests/Docflows/DocflowFilter.cs index 8a19204c..9570a04e 100644 --- a/src/Kontur.Extern.Api.Client/ApiLevel/Models/Requests/Docflows/DocflowFilter.cs +++ b/src/Kontur.Extern.Api.Client/ApiLevel/Models/Requests/Docflows/DocflowFilter.cs @@ -2,8 +2,8 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using JetBrains.Annotations; -using Kontur.Extern.Api.Client.Models.Common; using Kontur.Extern.Api.Client.Common.Time; +using Kontur.Extern.Api.Client.Models.Common; using Kontur.Extern.Api.Client.Models.Common.Enums; using Kontur.Extern.Api.Client.Models.Docflows.Enums; @@ -78,6 +78,12 @@ public class DocflowFilter /// public void SetTypes(DocflowType[] value) => queryParameters.Set(value); + /// + /// Состояния документооборотов + /// + /// + public void SetSuccessStates(DocflowState[] value) => queryParameters.Set(value); + /// /// КНД – код налоговой декларации. Задается по маске XXXXXXX, где Х - это цифра от 0 до 9 /// @@ -154,6 +160,7 @@ private class QueryParameters public const string createdFrom = nameof(createdFrom); public const string createdTo = nameof(createdTo); public const string type = nameof(type); + public const string successState = nameof(successState); public const string knd = nameof(knd); public const string okud = nameof(okud); public const string okpo = nameof(okpo); @@ -171,7 +178,8 @@ private class QueryParameters private readonly Dictionary queryParameters = new(); private readonly List types = new(0); private readonly List pfrLetterTypes = new(0); - + private readonly List successStates = new(0); + public IEnumerable<(string name, string value)> GetParameters() { foreach (var pair in queryParameters) @@ -188,6 +196,11 @@ private class QueryParameters { yield return (pfrLetterCategory, category); } + + foreach (var state in successStates) + { + yield return (successState, state); + } } public void Set(string parameterName, bool? value) => @@ -245,6 +258,23 @@ public void Set(PfrLetterType[]? letterTypes) } } + public void Set(DocflowState[]? states) + { + if (states is null) + { + successStates.Clear(); + } + else + { + foreach (var state in states) + { + var urn = state.ToUrn(); + if (!successStates.Contains(urn.Nss)) + successStates.Add(urn.Nss); + } + } + } + public void Set(string parameterName, string? value) => SetValue(parameterName, value); diff --git a/src/Kontur.Extern.Api.Client/Client/Model/DocflowFiltering/DocflowFilterBuilder.cs b/src/Kontur.Extern.Api.Client/Client/Model/DocflowFiltering/DocflowFilterBuilder.cs index c675816e..70fae8e4 100644 --- a/src/Kontur.Extern.Api.Client/Client/Model/DocflowFiltering/DocflowFilterBuilder.cs +++ b/src/Kontur.Extern.Api.Client/Client/Model/DocflowFiltering/DocflowFilterBuilder.cs @@ -2,11 +2,11 @@ using System.Diagnostics.CodeAnalysis; using JetBrains.Annotations; using Kontur.Extern.Api.Client.ApiLevel.Models.Requests.Docflows; +using Kontur.Extern.Api.Client.Common.Time; using Kontur.Extern.Api.Client.Exceptions; +using Kontur.Extern.Api.Client.Models.Common.Enums; using Kontur.Extern.Api.Client.Models.Docflows.Enums; using Kontur.Extern.Api.Client.Models.Numbers; -using Kontur.Extern.Api.Client.Common.Time; -using Kontur.Extern.Api.Client.Models.Common.Enums; namespace Kontur.Extern.Api.Client.Model.DocflowFiltering { @@ -138,6 +138,12 @@ public DocflowFilterBuilder WithTypes(params DocflowType[] types) return this; } + public DocflowFilterBuilder WithSuccessStates(params DocflowState[] states) + { + filter.SetSuccessStates(states); + return this; + } + /// /// КНД – код налоговой декларации. ///