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 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 >= _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; } }