107 lines
4.4 KiB
C#
107 lines
4.4 KiB
C#
using System;
|
|
using EvoCalculator.Core.Base.Columns;
|
|
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
|
|
|
|
namespace EvoCalculator.Core.Calculation.v3;
|
|
|
|
public class PostValues : v2.PostValues
|
|
{
|
|
public decimal ContractEconomyWithVAT;
|
|
public decimal DirectorBonus;
|
|
public decimal DirectorExtraBonus;
|
|
public decimal RegionalDirectorBonus;
|
|
public decimal RegionalDirectorExtraBonus;
|
|
public double PlanIRRMSFO;
|
|
private readonly Constants.Calculation _constants;
|
|
|
|
public PostValues(PreparedValues _preparedValues) : base(_preparedValues)
|
|
{
|
|
_constants = new Constants.Calculation();
|
|
}
|
|
|
|
public override void ComputeBaseCost(BaseColumn<decimal> kaskoNmperGrColumn, BaseColumn<decimal> tlmGrColumn,
|
|
BaseColumn<decimal> gpsGrColumn)
|
|
{
|
|
BaseCost = (_preparedValues.PlPrice - _preparedValues.ImportProgramSum + _preparedValues.InsuranceOsago +
|
|
Math.Abs(kaskoNmperGrColumn.Values[0])
|
|
+ Math.Abs(tlmGrColumn.Values[0]) + Math.Abs(gpsGrColumn.Values[0]) + _preparedValues.Rats +
|
|
_preparedValues.Registration + _preparedValues.TrackerCost +
|
|
_preparedValues.TLMCost + _preparedValues.TransportTaxGr +
|
|
_preparedValues.InsuranceFinGAPNmper) *
|
|
(decimal)_preparedValues.Leasing0K +
|
|
_preparedValues.NsibBrutto;
|
|
}
|
|
|
|
public void ComputeContractEconomyWithVAT(BaseColumn<decimal> creditVATColumn)
|
|
{
|
|
ContractEconomyWithVAT = this.ContractEconomy + creditVATColumn.GetValue(0);
|
|
}
|
|
|
|
public void ComputeDirectorBonus()
|
|
{
|
|
if ((_preparedValues.DirectorBonusFix > 0 && _preparedValues.DirectorBonus > 0 &&
|
|
_preparedValues.BonusCoefficient < 1)
|
|
|| (_preparedValues.DirectorBonusFix > 0 && _preparedValues.DirectorBonus == 0))
|
|
{
|
|
DirectorBonus = _preparedValues.DirectorBonusFix;
|
|
}
|
|
else
|
|
{
|
|
DirectorBonus = this.BonusBase * (decimal)_preparedValues.DirectorBonus *
|
|
(decimal)_preparedValues.BonusCoefficient *
|
|
(decimal)_preparedValues.MarketRate * (decimal)_preparedValues.DistrictRate;
|
|
}
|
|
}
|
|
|
|
public void ComputeDirectorExtraBonus(BaseColumnWithNominal cashflowMSFOColumn)
|
|
{
|
|
if (cashflowMSFOColumn.Nominal >= this.PlanIRRMSFO && _preparedValues.BonusCoefficient == 1.0)
|
|
{
|
|
DirectorExtraBonus = this.BonusBase *
|
|
(decimal)(cashflowMSFOColumn.Nominal / this.PlanIRRMSFO - 1) *
|
|
(decimal)_preparedValues.DirectorExtraBonus * (decimal)_preparedValues.MarketRate *
|
|
(decimal)_preparedValues.DistrictRate;
|
|
|
|
if (DirectorExtraBonus < _constants.MinBonus)
|
|
DirectorExtraBonus = 0;
|
|
}
|
|
else
|
|
DirectorExtraBonus = 0;
|
|
}
|
|
|
|
public void ComputeRegionalDirectorBonus()
|
|
{
|
|
if (_preparedValues.RegionalDirectorBonusFix > 0)
|
|
{
|
|
RegionalDirectorBonus = _preparedValues.RegionalDirectorBonusFix;
|
|
}
|
|
else
|
|
{
|
|
RegionalDirectorBonus = this.BonusBase * (decimal)_preparedValues.RegionalDirectorBonus *
|
|
(decimal)_preparedValues.MarketRate * (decimal)_preparedValues.DistrictRate;
|
|
}
|
|
}
|
|
|
|
public void ComputeRegionalDirectorExtraBonus(BaseColumnWithNominal cashflowMSFOColumn)
|
|
{
|
|
if (cashflowMSFOColumn.Nominal >= this.PlanIRRMSFO && _preparedValues.BonusCoefficient == 1.0)
|
|
{
|
|
RegionalDirectorExtraBonus = this.BonusBase *
|
|
(decimal)(cashflowMSFOColumn.Nominal / this.PlanIRRMSFO - 1) *
|
|
(decimal)_preparedValues.RegionalDirectorExtraBonus *
|
|
(decimal)_preparedValues.MarketRate *
|
|
(decimal)_preparedValues.DistrictRate;
|
|
if (RegionalDirectorExtraBonus < _constants.MinBonus)
|
|
RegionalDirectorExtraBonus = 0;
|
|
}
|
|
else
|
|
RegionalDirectorExtraBonus = 0;
|
|
}
|
|
|
|
public void ComputePlanIRRMSFO(BaseColumnWithNominal cashflowMSFOColumn)
|
|
{
|
|
PlanIRRMSFO = _preparedValues.ChangePlanIRR
|
|
? cashflowMSFOColumn.Nominal * _preparedValues.IRR_MSFO_Plan / _preparedValues.IrrExpected
|
|
: _preparedValues.IRR_MSFO_Plan;
|
|
}
|
|
} |