diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyChangeOnlyLccCompany.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyChangeOnlyLccCompany.java new file mode 100644 index 000000000..028ba1656 --- /dev/null +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyChangeOnlyLccCompany.java @@ -0,0 +1,55 @@ +package ru.spcex.clearing.dflt.management.component.validation; + +import java.util.Objects; +import java.util.Optional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanyRoleSet; +import ru.spcex.clearing.dflt.management.config.ValidationConfig; +import ru.spcex.clearing.dflt.management.error.DefaultManagementErrors; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.order.OrderCompanyUpdateRequest; +import ru.spcex.platform.enumeration.CompanyRole; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; +import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.validation.IValidationRule; + +public class OrderCurrencyChangeOnlyLccCompany + implements IValidationRule> { + private static final Logger log = LoggerFactory.getLogger(ValidationConfig.class); + public static OrderCurrencyChangeOnlyLccCompany getInstance() { + return new OrderCurrencyChangeOnlyLccCompany(); + } + + @Override + public Optional validate(ImdgValidationContext ctx) { + Imdg cmpRoleImdg = ctx.obtainMap(IMDGDistributedNames.Map_CompanyRoleSet, CompanyRoleSet.class); + Imdg companyImdg = ctx.obtainMap(IMDGDistributedNames.Map_Company, Company.class); + ImdgPredicateBuilder cmpRolePb = cmpRoleImdg.predicateBuilder(); + CompanyRoleSet companyRoleSet = cmpRoleImdg.getFirstObjectByPredicate( + cmpRolePb.equals("companyRole", CompanyRole.CLCC.getKey()) + ); + if (companyRoleSet == null) { + log.error("couldn't find companyRole CLCC"); + return of(DefaultManagementErrors.RecordNotFound, "companyRole[CLCC]"); + } + Company clccCmp = companyImdg.getSingleObjectByID(companyRoleSet.getCompanyId()); + if (clccCmp == null) { + log.error("couldn't find company CLCC"); + return of(DefaultManagementErrors.RecordNotFound, "company[CLCC]"); + } + OrderCompanyUpdateRequest order = ctx.getValidatedObject(); + if (Objects.equals(order.getCompanyId(), clccCmp.getId())) { + return of(DefaultManagementErrors.OperationNotAllowed); + } + return empty(); + } + + @Override + public String ruleName() { + return "OrderCurrencyOnlyLccCompany"; + } +} diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyOnlyLccCompany.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyOnlyLccCompany.java index fc643fde7..505b6716e 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyOnlyLccCompany.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyOnlyLccCompany.java @@ -10,6 +10,7 @@ import ru.clearing.classes.statics.data.misc.OrderCurrency; import ru.spcex.clearing.dflt.management.config.ValidationConfig; import ru.spcex.clearing.dflt.management.error.DefaultManagementErrors; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.order.OrderCompanyNewRequest; import ru.spcex.platform.enumeration.CompanyRole; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; @@ -18,7 +19,7 @@ import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.validation.IValidationRule; public class OrderCurrencyOnlyLccCompany - implements IValidationRule> { + implements IValidationRule> { private static final Logger log = LoggerFactory.getLogger(ValidationConfig.class); public static OrderCurrencyOnlyLccCompany getInstance() { @@ -26,7 +27,7 @@ public class OrderCurrencyOnlyLccCompany } @Override - public Optional validate(ImdgValidationContext ctx) { + public Optional validate(ImdgValidationContext ctx) { Imdg cmpRoleImdg = ctx.obtainMap(IMDGDistributedNames.Map_CompanyRoleSet, CompanyRoleSet.class); Imdg companyImdg = ctx.obtainMap(IMDGDistributedNames.Map_Company, Company.class); ImdgPredicateBuilder cmpRolePb = cmpRoleImdg.predicateBuilder(); @@ -42,6 +43,11 @@ public class OrderCurrencyOnlyLccCompany log.error("couldn't find company CLCC"); return of(DefaultManagementErrors.RecordNotFound, "company[CLCC]"); } + OrderCompanyNewRequest companyNewRequest = ctx.getValidatedObject(); + if (Objects.equals(companyNewRequest.getCompanyId(), clccCmp.getId())) { + return of(DefaultManagementErrors.OperationNotAllowed); + } + OrderCurrency order = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency); if (!Objects.equals(order.getCounterPartyId(), clccCmp.getId())) { return of(DefaultManagementErrors.OperationNotAllowed); 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 b81d54cb0..5ea5e96d8 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 @@ -20,6 +20,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.OrderCurrencyChangeOnlyLccCompany; import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyCompanyNotChanged; import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyOnlyLccCompany; import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyPLBLCheck; @@ -335,6 +336,7 @@ public class ValidationConfig { ctx.addImdg(IMDGDistributedNames.Map_Company, companyImdg); ctx.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, tcrImdg); ctx.addImdg(IMDGDistributedNames.Map_CompanyRoleSet, cmpRoleImdg); + ctx.addImdg(IMDGDistributedNames.Map_Company, companyImdg); var orderCurrencyPresent = PresentByPredicate .builder(new IdEqualPredicate<>(orderCurrencyImdg.predicateBuilder(), OrderCompanyNewRequest::getOrderId)) .mapName(IMDGDistributedNames.Map_OrderCurrency) @@ -398,6 +400,8 @@ public class ValidationConfig { ctx.addImdg(IMDGDistributedNames.Map_OrderCurrency, orderCurrencyImdg); ctx.addImdg(IMDGDistributedNames.Map_Company, companyImdg); ctx.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, tcrImdg); + ctx.addImdg(IMDGDistributedNames.Map_CompanyRoleSet, cmpRoleImdg); + ctx.addImdg(IMDGDistributedNames.Map_Company, companyImdg); var orderCurrencyPresent = PresentByPredicate .builder(byId(orderCurrencyImdg.predicateBuilder(), req)) @@ -441,7 +445,7 @@ public class ValidationConfig { //fixme проверить что tcr.getCompanyId() = companyId из запроса? return new ValidatorImpl<>(ctx, orderCurrencyPresent, - OrderCurrencyOnlyLccCompany.getInstance(), + OrderCurrencyChangeOnlyLccCompany.getInstance(), companyPresentRule, tcrPresent, QuantityLotGreaterThanZero.INSTANCE,