2022-10-18 10:17:05 +03:00

101 lines
4.3 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;
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 +
_preparedValues.InsuranceEvoKasko / 12 * _preparedValues.Nmper +
_preparedValues.InsuranceBonusLoss / 12 * _preparedValues.Nmper) *
(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 >= _preparedValues.IRR_MSFO_Plan && _preparedValues.BonusCoefficient == 1.0)
{
DirectorExtraBonus = this.BonusBase *
(decimal) (cashflowMSFOColumn.Nominal / _preparedValues.IRR_MSFO_Plan - 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 >= _preparedValues.IRR_MSFO_Plan && _preparedValues.BonusCoefficient == 1.0)
{
RegionalDirectorExtraBonus = this.BonusBase *
(decimal) (cashflowMSFOColumn.Nominal / _preparedValues.IRR_MSFO_Plan - 1) *
(decimal) _preparedValues.RegionalDirectorExtraBonus *
(decimal) _preparedValues.MarketRate *
(decimal) _preparedValues.DistrictRate;
if (RegionalDirectorExtraBonus < _constants.MinBonus)
RegionalDirectorExtraBonus = 0;
}
else
RegionalDirectorExtraBonus = 0;
}
}