public List <CalcRet> CalcNotProcT(SalaryCalcTInfo scti, int part) { var ret = new List <CalcRet>(); int divby = scti.LinkedSCI.Length; foreach (var dr in DataRows) { if (dr.XRateType != EBonusRateType.Money || dr.XBonusType == EBonusType.ReverseCalc) { continue; } if (part == 0 && dr.XBonusType == EBonusType.MinusAfterIIN) { continue; } if (part == 1 && dr.XBonusType != EBonusType.MinusAfterIIN) { continue; } var ret1 = new CalcRet(divby); decimal v = dr.RATE; if (dr.AMOUNT != v) { dr.AMOUNT = v; } var pfx = AddRow(scti.TotalSI, dr, dr.RATE, v, 1); ret1.PfxT = pfx; if (dr.IsIDANull()) { v = KlonsData.RoundA(v / (decimal)divby, 2); for (int i = 0; i < divby; i++) { var sci = scti.LinkedSCI[i]; decimal v1 = v; if (i == 0) { v1 += GetRoundingErrorA(dr.RATE, divby); } ret1.Pfxs[i] = sci.BonusCalc.AddRow(sci.SI, dr, dr.RATE, v1, divby); } } else { int i = FindAM(scti, dr.IDA); var sci = scti.LinkedSCI[i]; ret1.Pfxs[i] = sci.BonusCalc.AddRow(sci.SI, dr, dr.RATE, v, 1); } ret.Add(ret1); } return(ret); }
public decimal CalcFromEndCT(SalaryCalcTInfo sct, decimal totalinex, decimal curbruto, decimal brutonosai, decimal brutomargin, bool useprogressiveiin, bool hastaxdoc, decimal iinrate1, decimal iinrate2, decimal dnsrate, int divby, out List <CalcRet> rpfx) { rpfx = new List <CalcRet>(); decimal ret = 0.0M; if (PlusFromEnd <= 0.0M) { return(ret); } List <PayFx2> rpfxt = null; decimal calcbruto = CalcFromEndC(sct.TotalSI, totalinex, curbruto, brutonosai, brutomargin, useprogressiveiin, hastaxdoc, iinrate1, iinrate2, dnsrate, divby, out rpfxt); for (int i = 0; i < DataRows.Length; i++) { var dr = DataRows[i]; if (dr.XRateType != EBonusRateType.Money || dr.XBonusType != EBonusType.ReverseCalc) { continue; } var pfx = BonusPfx[i]; var ret1 = new CalcRet(divby); ret1.PfxT = pfx; decimal v = dr.AMOUNT; if (dr.IsIDANull()) { v = KlonsData.RoundA(v / (decimal)divby, 2); for (int j = 0; j < divby; j++) { var sci = sct.LinkedSCI[j]; decimal v1 = v; if (j == 0) { v1 += GetRoundingErrorA(dr.AMOUNT, divby); } ret1.Pfxs[j] = sci.BonusCalc.AddRow(sci.SI, dr, dr.RATE, v1, divby); } } else { int ind = FindAM(sct, dr.IDA); var sci = sct.LinkedSCI[ind]; ret1.Pfxs[i] = sci.BonusCalc.AddRow(sci.SI, dr, dr.RATE, v, 1); } rpfx.Add(ret1); ret += pfx.Pay; } return(ret); }
public List <CalcRet> CalcProcT(SalaryCalcTInfo scti, EBonusFrom efrom, Func <SalaryInfo, decimal> fdfrom) { var ret = new List <CalcRet>(); int divby = scti.LinkedSCI.Length; foreach (var dr in DataRows) { if (dr.XRateType != EBonusRateType.Percent || dr.XBonusType == EBonusType.ReverseCalc) { continue; } if (dr.XBonusFrom != efrom) { continue; } var ret1 = new CalcRet(divby); if (dr.IsIDANull()) { decimal dfrom = fdfrom(scti.TotalSI); decimal v = KlonsData.RoundA(dfrom * dr.RATE / 100.0M, 2); decimal vs = v; if (dr.AMOUNT != v) { dr.AMOUNT = v; } var pfx = AddRow(scti.TotalSI, dr, dfrom, v, 1); ret1.PfxT = pfx; for (int i = 0; i < divby; i++) { var sci = scti.LinkedSCI[i]; dfrom = fdfrom(sci.SI); v = KlonsData.RoundA(dfrom * dr.RATE / 100.0M, 2); vs -= v; if (i == divby - 1) { v += vs; } ret1.Pfxs[i] = sci.BonusCalc.AddRow(sci.SI, dr, dfrom, v, divby); } } else { int i = FindAM(scti, dr.IDA); var sci = scti.LinkedSCI[i]; decimal dfrom = fdfrom(sci.SI); decimal v = KlonsData.RoundA(dfrom * dr.RATE / 100.0M, 2); if (dr.AMOUNT != v) { dr.AMOUNT = v; } var pfx = AddRow(scti.TotalSI, dr, dfrom, v, 1); ret1.PfxT = pfx; ret1.Pfxs[i] = sci.BonusCalc.AddRow(sci.SI, dr, dfrom, v, 1); } ret.Add(ret1); } return(ret); }