SDF20
This commit is contained in:
parent
944d402c8d
commit
91d31132be
3 changed files with 19 additions and 5 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue