diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyCompanyNotChanged.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyCompanyNotChanged.java new file mode 100644 index 000000000..f6836c56e --- /dev/null +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyCompanyNotChanged.java @@ -0,0 +1,40 @@ +package ru.spcex.clearing.dflt.management.component.validation; + +import java.math.BigDecimal; +import java.util.Objects; +import java.util.Optional; +import ru.clearing.classes.statics.data.misc.OrderCurrency; +import ru.spcex.clearing.dflt.management.error.DefaultManagementErrors; +import ru.spcex.clearing.platform.messaging.domain.cud.order.OrderCompanyUpdateRequest; +import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.validation.IValidationRule; + +public class OrderCurrencyCompanyNotChanged + implements IValidationRule> { + public static final OrderCurrencyCompanyNotChanged INSTANCE = new OrderCurrencyCompanyNotChanged(); + + @Override + public Optional validate(ImdgValidationContext ctx) { + OrderCompanyUpdateRequest validatedObject = ctx.getValidatedObject(); + OrderCurrency oc = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency); + + BigDecimal reqQuantityLog = Optional.ofNullable(validatedObject.getQuantityLot()) + .map(BigDecimal::new) + .orElse(BigDecimal.ZERO); + BigDecimal entityQuantityLog = Optional.ofNullable(oc.getQuantityLot()) + .orElse(BigDecimal.ZERO); + + if (Objects.equals(validatedObject.getCompanyId(), oc.getCompanyId()) + && Objects.equals(validatedObject.getTradingClearingRegistryId(), oc.getTradingClearingRegistryId()) + && Objects.equals(reqQuantityLog, entityQuantityLog)) { + return of(DefaultManagementErrors.RecordAlreadyPresent); + } + return empty(); + } + + @Override + public String ruleName() { + return "OrderCurrencyCompanyNotChanged"; + } +} diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/ValidationConfig.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/ValidationConfig.java index f84141bcf..cef013209 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/ValidationConfig.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/ValidationConfig.java @@ -17,6 +17,7 @@ import ru.clearing.platform.dictionary.OrderStatusDictionary; import ru.clearing.platform.dictionary.OvernightTypeDictionary; import ru.clearing.platform.dictionary.SideDictionary; import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyByCompanyAndTcrAlreadyPresent; +import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyCompanyNotChanged; import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyPLBLCheck; import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyValidationStored; import ru.spcex.clearing.dflt.management.component.validation.OvernightSettingAlreadyPresent; @@ -355,7 +356,10 @@ public class ValidationConfig { .builder(r -> { OrderCurrency oc = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency); ImdgPredicateBuilder pb = tcrImdg.predicateBuilder(); - return pb.equals("companyId", oc.getCounterPartyId()); + return pb.and( + pb.equals("companyId", oc.getCounterPartyId()), + pb.equals("code", oc.getCounterTradingCode()) + ); }) .mapName(IMDGDistributedNames.Map_TradingClearingRegistry) .errorProvider(r -> recordNotFound("counter (CK) TradingClearingRegistry")) @@ -434,6 +438,7 @@ public class ValidationConfig { companyPresentRule, tcrPresent, QuantityLotGreaterThanZero.INSTANCE, + OrderCurrencyCompanyNotChanged.INSTANCE, //OrderCurrencyByCompanyAndTcrAlreadyPresent.getInstance(OrderCompanyUpdateRequest.class), OrderCurrencyPLBLCheck.INSTANCE, counterOrderPresent);