use of org.estatio.module.charge.dom.Charge in project estatio by estatio.
the class BudgetAssignmentService method createBudgetCalculationResults.
public void createBudgetCalculationResults(final BudgetCalculationRun run) {
run.removeCalculationResults();
for (Partitioning partitioning : run.getBudget().getPartitionings()) {
for (Charge invoiceCharge : partitioning.getDistinctInvoiceCharges()) {
BudgetCalculationResult result = run.createCalculationResult(invoiceCharge);
result.calculate();
}
}
}
use of org.estatio.module.charge.dom.Charge in project estatio by estatio.
the class BudgetOverrideImportExport method importData.
// @Override
// public List<Class> importAfter() {
// return Lists.newArrayList();
// }
@Override
@Programmatic
public List<Object> importData(final Object previousRow) {
if (getInvoiceChargeReference() == null) {
throw new ApplicationException("Incoming charge reference cannot be empty");
}
if (getReason() == null) {
throw new ApplicationException("Reason cannot be empty");
}
BudgetCalculationType budgetCalculationType;
budgetCalculationType = getType() == null ? null : BudgetCalculationType.valueOf(getType());
BudgetOverride budgetOverride;
Charge incomingCharge = getIncomingChargeReference() == null ? null : fetchCharge(getIncomingChargeReference());
switch(getClassName()) {
case "BudgetOverrideForMax":
validate();
budgetOverride = budgetOverrideRepository.newBudgetOverrideForMax(getMaxValue(), fetchLease(getLeaseReference()), getStartDate(), getEndDate(), fetchCharge(getInvoiceChargeReference()), incomingCharge, budgetCalculationType, getReason());
break;
case "BudgetOverrideForFixed":
validate();
budgetOverride = budgetOverrideRepository.newBudgetOverrideForFixed(getFixedValue(), fetchLease(getLeaseReference()), getStartDate(), getEndDate(), fetchCharge(getInvoiceChargeReference()), incomingCharge, budgetCalculationType, getReason());
break;
case "BudgetOverrideForFlatRate":
validate();
budgetOverride = budgetOverrideRepository.newBudgetOverrideForFlatRate(getValuePerM2(), getWeightedArea(), fetchLease(getLeaseReference()), getStartDate(), getEndDate(), fetchCharge(getInvoiceChargeReference()), incomingCharge, budgetCalculationType, getReason());
break;
default:
throw new ApplicationException(String.format("Classname %s is not valid.", getClassName()));
}
return Lists.newArrayList(budgetOverride);
}
use of org.estatio.module.charge.dom.Charge in project estatio by estatio.
the class BudgetOverrideImportExport method validate.
private void validate() {
Charge incomingCharge = getIncomingChargeReference() == null ? null : fetchCharge(getIncomingChargeReference());
BudgetCalculationType budgetCalculationType;
budgetCalculationType = getType() == null ? null : BudgetCalculationType.valueOf(getType());
String invalidReason = budgetOverrideRepository.validateNewBudgetOverride(fetchLease(getLeaseReference()), getStartDate(), getEndDate(), fetchCharge(getInvoiceChargeReference()), incomingCharge, budgetCalculationType, getReason());
if (invalidReason != null) {
throw new ApplicationException(String.format(invalidReason));
}
}
use of org.estatio.module.charge.dom.Charge in project estatio by estatio.
the class BudgetCalculationResult method calculate.
@Programmatic
public void calculate() throws IllegalArgumentException {
validateOverrides();
BigDecimal valueCalculatedByBudget = valueAsCalculatedByBudget();
BigDecimal annualOverrideValue = BigDecimal.ZERO;
List<Charge> incomingChargesOnOverrides = new ArrayList<>();
if (overrideValueForInvoiceCharge() != null) {
// SCENARIO: one override for all
annualOverrideValue = annualOverrideValue.add(overrideValueForInvoiceCharge().getValue());
} else {
// SCENARIO: overrides on incoming charge level
BigDecimal valueToSubtract = BigDecimal.ZERO;
for (BudgetOverrideValue value : getOverrideValues()) {
incomingChargesOnOverrides.add(value.getBudgetOverride().getIncomingCharge());
annualOverrideValue = annualOverrideValue.add(value.getValue());
}
for (Charge charge : incomingChargesOnOverrides) {
for (BudgetCalculation calculation : getBudgetCalculations().stream().filter(x -> x.getIncomingCharge().equals(charge)).collect(Collectors.toList())) {
valueToSubtract = valueToSubtract.add(calculation.getValue());
}
}
annualOverrideValue = annualOverrideValue.add(valueCalculatedByBudget).subtract(valueToSubtract);
}
BigDecimal overrideValue = annualOverrideValue.multiply(getFractionOfYear());
setValue(overrideValue.setScale(2, BigDecimal.ROUND_HALF_UP));
setShortfall(valueCalculatedByBudget.subtract(overrideValue).setScale(2, BigDecimal.ROUND_HALF_UP));
}
use of org.estatio.module.charge.dom.Charge in project estatio by estatio.
the class BudgetAssignmentService_Test method findOrCreateLeaseItemForServiceChargeBudgeted_returns_active_item_when_found.
@Test
public void findOrCreateLeaseItemForServiceChargeBudgeted_returns_active_item_when_found() throws Exception {
// given
LeaseItem itemToBeFound = new LeaseItem();
Lease lease = new Lease() {
@Override
public LeaseItem findFirstActiveItemOfTypeAndChargeOnDate(final LeaseItemType leaseItemType, final Charge charge, final LocalDate date) {
return itemToBeFound;
}
};
BudgetCalculationResult budgetCalculationResult = new BudgetCalculationResult();
LocalDate termStartDate = new LocalDate(2018, 1, 1);
// when
LeaseItem itemFound = budgetAssignmentService.findOrCreateLeaseItemForServiceChargeBudgeted(lease, budgetCalculationResult, termStartDate);
// then
assertThat(itemFound).isEqualTo(itemToBeFound);
}
Aggregations