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 { get; set; } public decimal DirectorBonus { get; set; } public decimal DirectorExtraBonus { get; set; } public decimal RegionalDirectorBonus { get; set; } public decimal RegionalDirectorExtraBonus { get; set; } public double PlanIRRMSFO { get; set; } private readonly Constants.Calculation _constants; public PostValues(PreparedValues _preparedValues) : base(_preparedValues) { _constants = new Constants.Calculation(); } public override void ComputeBaseCost(BaseColumn kaskoNmperGrColumn, BaseColumn tlmGrColumn, BaseColumn 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 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) * _constants.EXTRA_BONUS_COEFFICIENT) * (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) * _constants.EXTRA_BONUS_COEFFICIENT) * (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; } }