2024-01-14 23:58:01 +03:00

108 lines
4.6 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 { 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<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) *
_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;
}
}