EoyEvaluationCommand.java

package com.tdmconsult.ete.evaluation.commands;

import com.tdmconsult.ete.evaluation.EvaluationPosition;
import com.tdmconsult.ete.evaluation.EvaluationPosition.Rate;
import com.tdmconsult.ete.evaluation.EvaluationState;
import com.tdmconsult.ete.masterdata.Security;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
@RequiredArgsConstructor
public class EoyEvaluationCommand implements Command {

    private final int fiscalYear;
    private final Security security;
    private final Rate rate;

    @Override
    public void execute(final EvaluationState state) {

        final var toEvaluate = state.getPositions().stream()
                .filter(p -> p.getSecurity().equals(security))
                .toList();

        toEvaluate.forEach(position -> position.addEvaluation(new EvaluationPosition.Evaluation(
                fiscalYear,
                rate,
                position.getRemainingQuantity())));
    }
}