public List <PayFx2> CalcProc(SalaryInfo si, EBonusFrom efrom, decimal dfrom) { var ret = new List <PayFx2>(); foreach (var dr in DataRows) { if (dr.XRateType != EBonusRateType.Percent || dr.XBonusType == EBonusType.ReverseCalc) { continue; } if (dr.XBonusFrom != efrom) { continue; } decimal v = KlonsData.RoundA(dfrom * dr.RATE / 100.0M, 2); if (dr.AMOUNT != v) { dr.AMOUNT = v; } var pfx = AddRow(si, dr, dfrom, dr.AMOUNT, 1); ret.Add(pfx); } return(ret); }
public static string GetEBonusFromString(EBonusFrom bf) { switch (bf) { case EBonusFrom.None: return(""); case EBonusFrom.FromMonthSalary: return("no pamatalgas"); case EBonusFrom.FromPay: return("no aprēķinātās algas"); case EBonusFrom.FromPayAndVacSick: return("no aprēķ. algas + atvaļ. + slim.n."); case EBonusFrom.FromPayBeforeSAI: return("no summas SI aprēķinam"); case EBonusFrom.FromPayAfterSAI: return("no summas pēc SI"); case EBonusFrom.FromPayBeforeIIN: return("no summas IIN aprēķinam"); case EBonusFrom.FromPayAfterIIN: return("no summas pēc IIN"); default: return(""); } }
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); }