merge release/dyn-1223_sales-management-bonuses

This commit is contained in:
vchikalkin 2022-06-02 10:28:30 +03:00
parent c39290a5da
commit 75f8296755
12 changed files with 135 additions and 21 deletions

View File

@ -1,4 +1,5 @@
using EvoCalculator.Core.Base.Columns;
using System;
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns;
@ -10,14 +11,17 @@ public class ExtraBonusSumColumn : BaseColumnWithSum
}
public void ComputeValues(PreparedValues preparedValues, BaseCashflowMSFOColumn cashflowMsfoColumn,
PostValues postValues)
PostValues postValues, Constants.Calculation constants)
{
Values[2] = cashflowMsfoColumn.Nominal >= preparedValues.IRR_MSFO_Plan
Values[2] = cashflowMsfoColumn.Nominal >= preparedValues.IRR_MSFO_Plan && preparedValues.BonusCoefficient == 1.0
? -1 * postValues.BonusBase *
(decimal) (cashflowMsfoColumn.Nominal / preparedValues.IRR_MSFO_Plan - 1) *
(decimal) preparedValues.ExtraBonus * (decimal) (1 + preparedValues.SalaryRate) *
(decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate
: 0;
if (Math.Abs(Values[2]) < constants.MinBonus)
Values[2] = 0;
Values[0] = Sum;
}
}

View File

@ -211,7 +211,7 @@ public static partial class CalculateManager
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);

View File

@ -211,7 +211,7 @@ public static partial class CalculateManager
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);

View File

@ -11,15 +11,16 @@ public class NPVBonusExpensesColumn : BaseColumnWithSum
}
public void ComputeValues(PreparedValues preparedValues, PostValues postValues)
{
{
Values[1] = -1 * (preparedValues.RatBonus + preparedValues.NsBonus + preparedValues.NsibBonus) *
(decimal) (1 + preparedValues.SalaryRate);
(decimal) (1 + preparedValues.SalaryRate) * (decimal) preparedValues.MarketRate *
(decimal) preparedValues.DistrictRate;
Values[2] = preparedValues.BonusFix > 0
? -preparedValues.BonusFix
: -1 * postValues.BonusBase * Convert.ToDecimal(preparedValues.Bonus) *
(decimal) (1 + preparedValues.SalaryRate) *
(decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate;
Values[2] = -(preparedValues.BonusFix > 0
? preparedValues.BonusFix * (decimal) (1 + preparedValues.SalaryRate)
: postValues.BonusBase * Convert.ToDecimal(preparedValues.Bonus) *
(decimal) (1 + preparedValues.SalaryRate) * (decimal) preparedValues.MarketRate *
(decimal) preparedValues.DistrictRate);
for (var i = 3; i < Values.Length; i++) Values[i] = 0;

View File

@ -225,7 +225,7 @@ public static partial class CalculateManager
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);

View File

@ -224,7 +224,7 @@ public static partial class CalculateManager
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);

View File

@ -0,0 +1,19 @@
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v3.Columns;
public class DirectorBonusSumColumn : BaseColumnWithSum
{
public DirectorBonusSumColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, PostValues postValues)
{
Values[2] = -1 * (postValues.DirectorBonus + postValues.DirectorExtraBonus + preparedValues.DirectorBonusNsib +
preparedValues.RegionalDirectorBonusNsib + postValues.RegionalDirectorBonus +
postValues.RegionalDirectorExtraBonus) * (decimal) (1 + preparedValues.SalaryRate);
Values[0] = Sum;
}
}

View File

@ -10,7 +10,7 @@ using CashflowColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowColumn;
using CashflowLeasingColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowLeasingColumn;
using CashflowMSFOColumnVT2 = EvoCalculator.Core.Calculation.v2.Columns.CashflowMSFOColumnVT2;
using CashflowNPVColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowNPVColumn;
using DirectorBonusSumColumn = EvoCalculator.Core.Calculation.v2.Columns.DirectorBonusSumColumn;
using DirectorBonusSumColumn = EvoCalculator.Core.Calculation.v3.Columns.DirectorBonusSumColumn;
using ExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.ExpensesColumn;
using GPS_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.GPS_GrColumn;
using KaskoNmperGrColumn = EvoCalculator.Core.Calculation.v2.Columns.KaskoNmperGrColumn;
@ -232,7 +232,7 @@ public static partial class CalculateManager
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
@ -242,6 +242,11 @@ public static partial class CalculateManager
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
postValues.ComputeDirectorBonus();
postValues.ComputeDirectorExtraBonus(cashflowMsfoColumn);
postValues.ComputeRegionalDirectorBonus();
postValues.ComputeRegionalDirectorExtraBonus(cashflowMsfoColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);

View File

@ -10,7 +10,7 @@ using CashflowColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowColumn;
using CashflowLeasingColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowLeasingColumn;
using CashflowMSFOColumnVT1 = EvoCalculator.Core.Calculation.v2.Columns.CashflowMSFOColumnVT1;
using CashflowNPVColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowNPVColumn;
using DirectorBonusSumColumn = EvoCalculator.Core.Calculation.v2.Columns.DirectorBonusSumColumn;
using DirectorBonusSumColumn = EvoCalculator.Core.Calculation.v3.Columns.DirectorBonusSumColumn;
using ExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.ExpensesColumn;
using GPS_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.GPS_GrColumn;
using KaskoNmperGrColumn = EvoCalculator.Core.Calculation.v2.Columns.KaskoNmperGrColumn;
@ -231,7 +231,7 @@ public static partial class CalculateManager
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
@ -242,6 +242,11 @@ public static partial class CalculateManager
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
postValues.ComputeDirectorBonus();
postValues.ComputeDirectorExtraBonus(cashflowMsfoColumn);
postValues.ComputeRegionalDirectorBonus();
postValues.ComputeRegionalDirectorExtraBonus(cashflowMsfoColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);

View File

@ -7,18 +7,26 @@ 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)
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.InsuranceOsago + Math.Abs(kaskoNmperGrColumn.Values[0])
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.TLMCost + _preparedValues.TransportTaxGr +
_preparedValues.InsuranceFinGAPNmper) *
(decimal) _preparedValues.Leasing0K +
_preparedValues.NsibBrutto;
}
@ -27,4 +35,65 @@ public class PostValues : v2.PostValues
{
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;
}
}

View File

@ -11,4 +11,5 @@ public class Calculation
public double IncomeTaxValue = 0.2;
public int MaxOnePolicePeriod = 16;
public double VatValue = 0.2;
public decimal MinBonus = 100;
}

View File

@ -45,6 +45,7 @@ public class PreparedValues
public decimal PlPriceWithVAT { get; set; }
public decimal PlPriceVAT { get; set; }
public decimal Discount { get; set; }
public decimal ImportProgramSum { get; set; }
public decimal AcceptSum { get; set; }
public string PlTypeId { get; set; }
public string BrandId { get; set; }
@ -138,6 +139,15 @@ public class PreparedValues
public double IRR_MSFO_Plan { get; set; }
public double ExtraBonus { get; set; }
public double DirectorBonus { get; set; }
public decimal DirectorBonusFix { get; set; }
public double DirectorExtraBonus { get; set; }
public decimal RegionalDirectorBonusFinGAP { get; set; }
public double RegionalDirectorBonus { get; set; }
public decimal RegionalDirectorBonusFix { get; set; }
public double RegionalDirectorExtraBonus { get; set; }
public double BonusCoefficient { get; set; }
public double ProfitExpected { get; set; } = 0;
public decimal DogCredit => PlPrice +
(Insurance + Rats + Registration + TrackerCost + TLMCost + TransportTaxGr) *