diff --git a/Hcs.Client/Client/Api/HouseManagementApi.cs b/Hcs.Client/Client/Api/HouseManagementApi.cs index e50c552..b5e9cab 100644 --- a/Hcs.Client/Client/Api/HouseManagementApi.cs +++ b/Hcs.Client/Client/Api/HouseManagementApi.cs @@ -70,6 +70,18 @@ namespace Hcs.Client.Api return await request.ExecuteAsync(payload, token); } + /// + /// Импорт сведений о ДУ (создание ДУ) + /// + /// Пейлоад ДУ + /// Токен отмены + /// Импортированный договор + public async Task ImportContractDataAsync(ImportContractDataPayload payload, CancellationToken token = default) + { + var request = new ImportContractDataRequest(client); + return await request.ExecuteAsync(payload, token); + } + /// /// Импорт данных дома /// diff --git a/Hcs.Client/Client/Api/Payload/HouseManagement/ImportContractDataPayload.cs b/Hcs.Client/Client/Api/Payload/HouseManagement/ImportContractDataPayload.cs new file mode 100644 index 0000000..ab1287a --- /dev/null +++ b/Hcs.Client/Client/Api/Payload/HouseManagement/ImportContractDataPayload.cs @@ -0,0 +1,62 @@ +using Hcs.Service.Async.HouseManagement; +using System; + +namespace Hcs.Client.Api.Payload.HouseManagement +{ + public class ImportContractDataPayload + { + // TODO: LicenseRequest + + /// + /// Объекты управления + /// + public importContractRequestContractPlacingContractContractObject[] contractObjects; + + /// + /// Номер документа + /// + public string docNum; + + /// + /// Дата заключения + /// + public DateTime signingDate; + + /// + /// Дата вступления в силу + /// + public DateTime effectiveDate; + + /// + /// Планируемая дата окончания + /// + public DateTime planDateComptetion; + + // TODO: Вторая сторона договора + + // TODO: Protocol + + /// + /// Ссылка на НСИ "Основание заключения договора" (реестровый номер 58). + /// + public nsiRef contractBase; + + // TODO: DateDetails + + // TODO: ContractAttachment + + // TODO: AgreementAttachment + + // TODO: SignedOwners + + // TODO: CommissioningPermitAgreement + + // TODO: Charter + + // TODO: LocalGovernmentDecision + + // TODO: RegistryDecisionID + + // TODO: AutomaticRollOverOneYear + } +} diff --git a/Hcs.Client/Client/Api/Request/HouseManagement/ImportContractDataRequest.cs b/Hcs.Client/Client/Api/Request/HouseManagement/ImportContractDataRequest.cs new file mode 100644 index 0000000..a2142e9 --- /dev/null +++ b/Hcs.Client/Client/Api/Request/HouseManagement/ImportContractDataRequest.cs @@ -0,0 +1,77 @@ +using Hcs.Client.Api.Payload.HouseManagement; +using Hcs.Client.Api.Request.Exception; +using Hcs.Client.Internal; +using Hcs.Service.Async.HouseManagement; +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace Hcs.Client.Api.Request.HouseManagement +{ + internal class ImportContractDataRequest(ClientBase client) : HouseManagementRequestBase(client) + { + protected override bool CanBeRestarted => false; + internal async Task ExecuteAsync(ImportContractDataPayload payload, CancellationToken token) + { + // TODO: Добавить проверку пейлоада + + // http://open-gkh.ru/HouseManagement/importContractRequest/Contract.html + var contract = new importContractRequestContract + { + TransportGUID = Guid.NewGuid().ToString(), + Item = GetContractFromPayload(payload) + }; + + // http://open-gkh.ru/HouseManagement/importContractRequest.html + var request = new importContractRequest + { + Id = Constants.SIGNED_XML_ELEMENT_ID, + version = "11.9.0.1", + Contract = [contract] + }; + + var result = await SendAndWaitResultAsync(request, async asyncClient => + { + var response = await asyncClient.importContractDataAsync(CreateRequestHeader(), request); + return response.AckRequest.Ack; + }, token); + + result.Items.OfType().ToList().ForEach(error => + { + throw RemoteException.CreateNew(error.ErrorCode, error.Description); + }); + + var importResults = result.Items.OfType(); + var commonResults = GetCommonResults(importResults); + foreach (var commonResult in commonResults) + { + if (commonResult.ItemElementName == ItemChoiceType26.importContract) + { + if (commonResult.Item is importContractResultType importedContract) + { + return importedContract; + } + } + } + + return null; + } + + private importContractRequestContractPlacingContract GetContractFromPayload(ImportContractDataPayload payload) + { + // http://open-gkh.ru/HouseManagement/importContractRequest/Contract/PlacingContract.html + var contract = new importContractRequestContractPlacingContract() + { + ContractObject = payload.contractObjects, + DocNum = payload.docNum, + SigningDate = payload.signingDate, + EffectiveDate = payload.effectiveDate, + PlanDateComptetion = payload.planDateComptetion, + ContractBase = payload.contractBase + }; + + return contract; + } + } +} diff --git a/Hcs.Client/Hcs.Client.csproj b/Hcs.Client/Hcs.Client.csproj index 2084ce6..3240af0 100644 --- a/Hcs.Client/Hcs.Client.csproj +++ b/Hcs.Client/Hcs.Client.csproj @@ -70,6 +70,7 @@ + @@ -96,6 +97,7 @@ + diff --git a/Hcs.TestApp/TestApp/Program.cs b/Hcs.TestApp/TestApp/Program.cs index c6d2283..4cebf08 100644 --- a/Hcs.TestApp/TestApp/Program.cs +++ b/Hcs.TestApp/TestApp/Program.cs @@ -50,6 +50,8 @@ namespace Hcs.TestApp //houseManagementScenario.ImportAccountData(); + //houseManagementScenario.ImportContractData(); + //houseManagementScenario.ImportLivingHouseUOData(); //houseManagementScenario.ImportNotificationData(); diff --git a/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs b/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs index 4d57e46..f6b0261 100644 --- a/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs +++ b/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs @@ -80,6 +80,34 @@ namespace Hcs.TestApp.Scenario Console.WriteLine("Scenario execution " + (result ? "succeeded" : "failed")); } + internal void ImportContractData() + { + var signingDate = new DateTime(2017, 01, 01); + var effectiveDate = new DateTime(2017, 01, 01); + var planComptetionDate = new DateTime(2078, 12, 31); + + var payload = new ImportContractDataPayload() + { + contractObjects = [new importContractRequestContractPlacingContractContractObject() + { + TransportGUID = Guid.NewGuid().ToString(), + BaseMService = new BaseServiceType() + { + Item = true + }, + FIASHouseGuid = "cf9c25b6-c7a4-40db-81f2-c97bfa46b903", + StartDate = signingDate + }], + docNum = "11111111", + signingDate = signingDate, + effectiveDate = effectiveDate, + planDateComptetion = planComptetionDate, + contractBase = Registry58.Element8 + }; + var result = client.HouseManagement.ImportContractDataAsync(payload).Result; + Console.WriteLine("Scenario execution " + (result != null ? "succeeded" : "failed")); + } + internal void ImportLivingHouseUOData() { var payload = new ImportLivingHouseUODataPayload()