This commit is contained in:
ialbert 2023-08-21 19:46:34 +03:00
parent 944d402c8d
commit 91d31132be
3 changed files with 19 additions and 5 deletions

View file

@ -358,7 +358,7 @@ public class ValidationConfig {
ctx.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity , imdgMoneyMarketSecurity);
ctx.addImdg(IMDGDistributedNames.Map_EquitySecurity , equitySecurityImdg);
return new ValidatorImpl<>(ctx,
Sdf20ValidationRule.Quantity,
Sdf20ValidationRule.Fields,
Sdf20ValidationRule.AccountPresent,
Sdf20ValidationRule.CompanyPresent,
Sdf20ValidationRule.SecurityPresent,

View file

@ -84,11 +84,14 @@ public class Sdf20Executor {
return;
}
BigDecimal quantity = safeBD(BigDecimalUtil.parseLeadingZeroes(sDf20.getQuantity()));
if ("ADDFREE".equalsIgnoreCase(sDf20.getOperationCode())) {
InOutDirection direction;
if (OperationCode.RECFREE.equalsByKey(sDf20.getOperationCode())) {
direction = InOutDirection.in;
quantity = quantity;
} else if ("DELFREE".equals(sDf20.getOperationCode())) {
} else if (OperationCode.DELFREE.equalsByKey(sDf20.getOperationCode())) {
direction = InOutDirection.out;
quantity = quantity.negate();
}
} else direction = InOutDirection.in;
Registry ds_t = validator.getStored(ValidationStored.Sdf20Dst);
AssetTrio assets = validator.getStored(ValidationStored.Sdf20Ast);
Company cmp = validator.getStored(ValidationStored.Sdf20Company);
@ -127,6 +130,11 @@ public class Sdf20Executor {
ds_t.setRegistryStatus(RegistryStatus.OK.getKey());
ds_t.setUpdated(now);
as_t.setBalance(safeBD(as_t.getBalance()).add(quantity));
if (direction.equals(InOutDirection.in)) {
as_t.setCredit(safeBD(as_t.getCredit()).add(quantity.abs()));
} else {
as_t.setDebit(safeBD(as_t.getDebit()).add(quantity.abs()));
}
as_t.setCheckBalance(BigDecimalUtil.parseLeadingZeroes(sDf20.getCloseBalance()));
as_t.setUpdated(now);
rgsImdg.update(as_t);

View file

@ -13,10 +13,12 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.service.AssetTrio;
import ru.spcex.clearing.service.RegistryManager;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.OperationCode;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector;
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.text.TextUtil;
import ru.spcex.platform.utils.validation.IValidationRule;
@ -29,7 +31,7 @@ import static ru.spcex.platform.utils.number.BigDecimalUtil.parseLeadingZeroes;
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
public enum Sdf20ValidationRule implements IValidationRule<ImdgValidationContext<SDf20>> {
Quantity() {
Fields() {
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<SDf20> context) {
SDf20 validatedObject = context.getValidatedObject();
@ -40,6 +42,10 @@ public enum Sdf20ValidationRule implements IValidationRule<ImdgValidationContext
if (safeBD(qty).compareTo(BigDecimal.ZERO) < 0) {
return of(ClearingError.WrongField, "quantity");
}
OperationCode opCde = IEnumKey.getEnumByKey(OperationCode.class, validatedObject.getOperationCode());
if (opCde == null) {
return of(ClearingError.WrongField, "operationCode");
}
return Optional.empty();
}
},