From 4352bfa78b5e56d74a7400e718f79b55e0a73a26 Mon Sep 17 00:00:00 2001 From: "HOME-LAPTOP\\kshkulev" Date: Wed, 27 Aug 2025 09:33:21 +0900 Subject: [PATCH] Add payload check --- ...ImportSupplyResourceContractDataPayload.cs | 2 +- ...ImportSupplyResourceContractDataRequest.cs | 118 +++++++++++++++++- 2 files changed, 114 insertions(+), 6 deletions(-) diff --git a/Hcs.Client/Client/Api/Payload/HouseManagement/ImportSupplyResourceContractDataPayload.cs b/Hcs.Client/Client/Api/Payload/HouseManagement/ImportSupplyResourceContractDataPayload.cs index aefb1e1..b023e5b 100644 --- a/Hcs.Client/Client/Api/Payload/HouseManagement/ImportSupplyResourceContractDataPayload.cs +++ b/Hcs.Client/Client/Api/Payload/HouseManagement/ImportSupplyResourceContractDataPayload.cs @@ -156,7 +156,7 @@ namespace Hcs.Client.Api.Payload.HouseManagement /// /// Условное. Срок внесения платы, не позднее. Является обязательным, если вторая сторона договора - /// отличается от "Управляющая организация" И договор не является публичным И/ИЛИ присутствует + /// отличается от "Управляющая организация" И договор не является публичным и/или присутствует /// заключенный на бумажном носителе или в электронной форме И в поле /// = false. Не заполняется, если = true. /// diff --git a/Hcs.Client/Client/Api/Request/HouseManagement/ImportSupplyResourceContractDataRequest.cs b/Hcs.Client/Client/Api/Request/HouseManagement/ImportSupplyResourceContractDataRequest.cs index e1f1e4b..0d7e6a5 100644 --- a/Hcs.Client/Client/Api/Request/HouseManagement/ImportSupplyResourceContractDataRequest.cs +++ b/Hcs.Client/Client/Api/Request/HouseManagement/ImportSupplyResourceContractDataRequest.cs @@ -16,6 +16,8 @@ namespace Hcs.Client.Api.Request.HouseManagement internal async Task ExecuteAsync(ImportSupplyResourceContractDataPayload payload, CancellationToken token) { + ThrowIfPayloadIncorrect(payload); + var contract = new importSupplyResourceContractRequestContract { TransportGUID = Guid.NewGuid().ToString(), @@ -57,6 +59,117 @@ namespace Hcs.Client.Api.Request.HouseManagement return null; } + private void ThrowIfPayloadIncorrect(ImportSupplyResourceContractDataPayload payload) + { + if (string.IsNullOrEmpty(payload.contractNumber)) + { + throw new ArgumentException($"{nameof(payload.contractNumber)} is empty"); + } + + if (payload.signingDate.Equals(default) || payload.effectiveDate.Equals(default)) + { + throw new ArgumentException($"{nameof(payload.signingDate)} OR/AND {nameof(payload.effectiveDate)} are default"); + } + + if (!payload.comptetionDate.HasValue && payload.automaticRollOverOneYear.HasValue) + { + throw new ArgumentException($"{nameof(payload.comptetionDate)} is null but {nameof(payload.automaticRollOverOneYear)} has value"); + } + + if (payload.period == null && (payload.volumeDepends.HasValue && payload.volumeDepends.Value + || payload.meteringDeviceInformation.HasValue && payload.meteringDeviceInformation.Value)) + { + throw new ArgumentException($"{nameof(payload.period)} is null but {nameof(payload.volumeDepends)} OR/AND {nameof(payload.meteringDeviceInformation)} have value"); + } + + if (payload.indicationsAnyDay.HasValue && payload.period == null) + { + throw new ArgumentException($"{nameof(payload.indicationsAnyDay)} has value but {nameof(payload.period)} is null"); + } + + // TODO: Add counterparty check + + if (payload.plannedVolumeType.HasValue && !payload.isPlannedVolume) + { + throw new ArgumentException($"{nameof(payload.plannedVolumeType)} has value but {nameof(payload.isPlannedVolume)} is false"); + } + + if (payload.contractSubject == null || payload.contractSubject.Length == 0) + { + throw new ArgumentException($"{nameof(payload.contractSubject)} is empty"); + } + + if (payload.contractSubject != null && payload.contractSubject.Length > 100) + { + throw new ArgumentException($"{nameof(payload.contractSubject)} exceeds its limit ({payload.contractSubject.Length} of 100)"); + } + + if (payload.countingResource.HasValue && (!payload.accrualProcedure.HasValue || + payload.accrualProcedure.Value == SupplyResourceContractTypeAccrualProcedure.O)) + { + throw new ArgumentException($"{nameof(payload.countingResource)} has value but {nameof(payload.accrualProcedure)} is null OR has inappropriate value"); + } + + // TODO: Add noConnectionToWaterSupply check + + if (payload.objectAddress == null || payload.objectAddress.Length == 0) + { + throw new ArgumentException($"{nameof(payload.objectAddress)} is empty"); + } + + // TODO: Add quality check + // TODO: Add otherQualityIndicator check + // TODO: Add temperatureChart check + + if (payload.billingDate == null && (payload.counterparty is not SupplyResourceContractTypeOrganization || + payload.meteringDeviceInformation.HasValue)) + { + throw new ArgumentException($"{nameof(payload.billingDate)} is null but {nameof(payload.meteringDeviceInformation)} has value"); + } + + if (payload.billingDate != null && payload.oneTimePayment.HasValue && payload.oneTimePayment.Value) + { + throw new ArgumentException($"{nameof(payload.billingDate)} has value but {nameof(payload.oneTimePayment)} is true"); + } + + if (payload.paymentDate == null && payload.counterparty is not SupplyResourceContractTypeOrganization && + payload.isContract && payload.oneTimePayment.HasValue && !payload.oneTimePayment.Value) + { + throw new ArgumentException($"{nameof(payload.paymentDate)} is null but should have value"); + } + + if (payload.paymentDate != null && payload.oneTimePayment.HasValue && payload.oneTimePayment.Value) + { + throw new ArgumentException($"{nameof(payload.paymentDate)} has value but {nameof(payload.oneTimePayment)} is true"); + } + + if (payload.providingInformationDate == null && payload.counterparty is SupplyResourceContractTypeOrganization && + payload.countingResource.HasValue && payload.countingResource.Value == SupplyResourceContractTypeCountingResource.R && + payload.isContract) + { + throw new ArgumentException($"{nameof(payload.providingInformationDate)} is null but should have value"); + } + + if (!payload.meteringDeviceInformation.HasValue && + payload.countingResource.HasValue && payload.countingResource == SupplyResourceContractTypeCountingResource.R) + { + throw new ArgumentException($"{nameof(payload.meteringDeviceInformation)} is null but should have value"); + } + + if (payload.volumeDepends.HasValue && (payload.counterparty is SupplyResourceContractTypeOrganization || + payload.oneTimePayment.HasValue && payload.oneTimePayment.Value)) + { + throw new ArgumentException($"{nameof(payload.volumeDepends)} has value but should have not one"); + } + + if (payload.oneTimePayment.HasValue && payload.counterparty is SupplyResourceContractTypeOrganization) + { + throw new ArgumentException($"{nameof(payload.oneTimePayment)} has value but {nameof(payload.counterparty)} has inappropriate value"); + } + + // TODO: Add accrualProcedure check + } + private SupplyResourceContractType GetContractFromPayload(ImportSupplyResourceContractDataPayload payload) { var contract = new SupplyResourceContractType(); @@ -94,11 +207,6 @@ namespace Hcs.Client.Api.Request.HouseManagement items.Add(payload.automaticRollOverOneYear.Value); itemsElementName.Add(ItemsChoiceType9.AutomaticRollOverOneYear); - if (!payload.comptetionDate.HasValue) - { - throw new InvalidOperationException("comptetionDate is empty"); - } - items.Add(payload.comptetionDate.Value); itemsElementName.Add(ItemsChoiceType9.ComptetionDate); }