ForkliftCapacityConstraint.java

package com.v1rex.liftnexus.planning.constraints;

import ai.timefold.solver.core.api.score.HardSoftScore;
import ai.timefold.solver.core.api.score.stream.Constraint;
import ai.timefold.solver.core.api.score.stream.ConstraintFactory;
import com.v1rex.liftnexus.transportorder.domain.TransportOrder;

public class ForkliftCapacityConstraint {
  public static Constraint forkliftCapacity(ConstraintFactory factory) {
    return factory
        .forEach(TransportOrder.class)
        .filter(transportorder -> transportorder.getAssignedForklift() != null)
        .filter(
            transportorder ->
                transportorder.getTargetLoadUnit().getWeightKg()
                    > transportorder.getAssignedForklift().getForkliftType().getMaxCapacityKg())
        .penalize(HardSoftScore.ONE_HARD)
        .asConstraint("Forklift capacity limit");
  }
}