public void SetTo(PayFx pfx) { pfx.Ir = IIN_RATE / 100.0M; pfx.Ir2 = IIN_RATE2 / 100.0M; pfx.Sr = SI_RATE / 100.0M; pfx.IM = PayFx.GetIINMargin(DT1); pfx.IinEx = UNTAXED_MINIMUM + IINEX_DEPENDANTS + IINEX2 + IINEX_EXP; pfx.UsedIinEx = pfx.IinEx; pfx.HasProgressiveIIN = DT1 >= PayFx.ProgressiveIINStartDate; if (HAS_TAXDOC == null) { pfx.HasTaxDoc = pfx.IinEx > 0.0M; } else { pfx.HasTaxDoc = HAS_TAXDOC.Value; } pfx.Pay = PAY_TAXED; pfx.PayNs = PAY_NOSAI; pfx.PayNt = PAY_NOTTAXED; pfx.DNS = DNSI; pfx.IIN = IIN; pfx.Cash = CASH; }
public void AddEqallyAndRound(PayFx2[] rows) { var p1 = new PayFx(); p1.SetFrom(this); foreach (var pr in rows) { AddPayRound(pr); pr.DNS = RoundA(pr.Pay * pr.Sr); } CalcAllAndRound(); var p2 = new PayFx(); p2.SetFrom(this); p2.Subtract(p1); MakeExactSum(p2.DNS, rows, d => d.DNS, (d, dval) => d.DNS = dval); decimal fulliinbase = rows.Sum(pr => pr.Pay + pr.PayNs - pr.DNS); foreach (var pr in rows) { decimal iinbase = pr.Pay + pr.PayNs - pr.DNS; pr.UsedIinEx = RoundA(p2.UsedIinEx * iinbase / fulliinbase); pr.IIN = RoundA(p2.IIN * iinbase / fulliinbase); pr.Cash = iinbase + pr.PayNt - pr.IIN; } MakeExactSum(p2.Cash, rows, d => d.Cash, (d, dval) => d.Cash = dval); MakeExactSum(p2.UsedIinEx, rows, d => d.UsedIinEx, (d, dval) => d.UsedIinEx = dval); foreach (var pr in rows) { pr.IIN = pr.Pay + pr.PayNs + pr.PayNt - pr.DNS - pr.Cash; } Rows.AddRange(rows); }
public void AddEqally(PayFx2[] rows) { var p1 = new PayFx(); p1.SetFrom(this); decimal fulliinbase = 0.0M; foreach (var pr in rows) { AddPay(pr); pr.DNS = pr.Pay * pr.Sr; fulliinbase += pr.Pay + pr.PayNs - pr.DNS; } CalcAll(); var p2 = new PayFx(); p2.SetFrom(this); p2.Subtract(p1); foreach (var pr in rows) { decimal iinbase = pr.Pay + pr.PayNs - pr.DNS; pr.UsedIinEx = p2.UsedIinEx * iinbase / fulliinbase; pr.IIN = p2.IIN * iinbase / fulliinbase; pr.Cash = iinbase + pr.PayNt - pr.IIN; } Rows.AddRange(rows); }
public void SetFrom(PayFx pfx) { PAY_TAXED = pfx.Pay; PAY_NOSAI = pfx.PayNs; PAY_NOTTAXED = pfx.PayNt; DNSI = pfx.DNS; decimal d1 = UNTAXED_MINIMUM + IINEX_DEPENDANTS + IINEX2 + IINEX_EXP; if (d1 > 0.0M) { decimal r = pfx.UsedIinEx / d1; UNTAXED_MINIMUM *= r; IINEX_DEPENDANTS *= r; IINEX2 *= r; IINEX_EXP *= r; } IIN = pfx.IIN; CASH = pfx.Cash; HAS_TAXDOC = pfx.HasTaxDoc; }
public void AddPayRound(PayFx pfrom) { pfrom.Pay = RoundA(pfrom.Pay); pfrom.PayNs = RoundA(pfrom.PayNs); pfrom.PayNt = RoundA(pfrom.PayNt); Pay += pfrom.Pay; PayNs += pfrom.PayNs; PayNt += pfrom.PayNt; }
public static void SplitAndRound(PayFx rowt, PayFx[] rows) { var erows = rows.Where(d => d != null); decimal dnsbase = erows.Sum(pr => pr.Pay); if (dnsbase == 0.0M) { int ct = erows.Count(); foreach (var pr in erows) { pr.DNS = RoundA(rowt.DNS / ct); } } else { foreach (var pr in erows) { pr.DNS = RoundA(rowt.DNS * pr.Pay / dnsbase); } } MakeExactSum(rowt.DNS, rows, d => d.DNS, (d, dval) => d.DNS = dval); decimal fulliinbase = erows .Sum(pr => pr.Pay + pr.PayNs - pr.DNS); if (fulliinbase == 0.0M) { int ct = erows.Count(); foreach (var pr in erows) { pr.UsedIinEx = RoundA(rowt.UsedIinEx / ct); pr.IIN = RoundA(rowt.IIN / ct); pr.Cash = RoundA(rowt.Cash / ct); } } else { foreach (var pr in erows) { decimal iinbase = pr.Pay + pr.PayNs - pr.DNS; pr.UsedIinEx = RoundA(rowt.UsedIinEx * iinbase / fulliinbase); pr.IIN = RoundA(rowt.IIN * iinbase / fulliinbase); pr.Cash = iinbase + pr.PayNt - pr.IIN; } } MakeExactSum(rowt.Cash, rows, d => d.Cash, (d, dval) => d.Cash = dval); MakeExactSum(rowt.UsedIinEx, rows, d => d.UsedIinEx, (d, dval) => d.UsedIinEx = dval); foreach (var pr in erows) { pr.IIN = pr.Pay + pr.PayNs + pr.PayNt - pr.DNS - pr.Cash; } }
public decimal CalcFromEndC(SalaryInfo si, decimal totalinex, decimal curbruto, decimal brutonosai, decimal brutomargin, bool useprogressiveiin, bool hastaxdoc, decimal iinrate1, decimal iinrate2, decimal dnsrate, int divby, out List <PayFx2> rpfx) { rpfx = new List <PayFx2>(); decimal ret = 0.0M; if (PlusFromEnd <= 0.0M) { return(ret); } decimal calcbruto = curbruto; var p1 = new PayFx(useprogressiveiin); p1.Ir = iinrate1 / 100.0M; p1.Ir2 = iinrate2 / 100.0M; p1.Sr = dnsrate / 100.0M; p1.IM = brutomargin; p1.HasTaxDoc = hastaxdoc; p1.Pay = curbruto; p1.PayNs = brutonosai; p1.IinEx = totalinex; for (int i = 0; i < DataRows.Length; i++) { var dr = DataRows[i]; if (dr.XRateType != EBonusRateType.Money || dr.XBonusType != EBonusType.ReverseCalc) { continue; } decimal v = dr.RATE; calcbruto = p1.GetPayByIncCash(v); calcbruto = KlonsData.RoundA(calcbruto, 2); v = calcbruto - curbruto; p1.Pay = calcbruto; curbruto = calcbruto; if (dr.AMOUNT != v) { dr.AMOUNT = v; } var rpfx1 = AddRow(si, dr, dr.RATE, v, 1); rpfx.Add(rpfx1); ret += v; } return(ret); }
public void Subtract(PayFx from) { Pay -= from.Pay; PayNs -= from.PayNs; PayNt -= from.PayNt; UsedIinEx -= from.UsedIinEx; DNS -= from.DNS; IIN -= from.IIN; Cash -= from.Cash; }
public void AddIncrementallyAndRound(PayFx2 row) { var p1 = new PayFx(); p1.SetFrom(this); AddPayRound(row); CalcAllAndRound(); row.SetFrom(this); row.Subtract(p1); Rows.Add(row); }
public void AddIncrementallySplitAndRound(PayFx2 rowt, PayFx2[] rows) { var p1 = new PayFx(); p1.SetFrom(this); AddPayRound(rowt); CalcAllAndRound(); rowt.SetFrom(this); rowt.Subtract(p1); SplitAndRound(rowt, rows); Rows.Add(rowt); }
public void Add(PayFx from) { if (from == null) { return; } Pay += from.Pay; PayNs += from.PayNs; PayNt += from.PayNt; //IinEx += from.IinEx; UsedIinEx += from.UsedIinEx; DNS += from.DNS; IIN += from.IIN; Cash += from.Cash; }
public void RecalcAndRound() { PAY_TAXED = KlonsData.RoundA(PAY_TAXED, 2); PAY_NOSAI = KlonsData.RoundA(PAY_NOSAI, 2); PAY_NOTTAXED = KlonsData.RoundA(PAY_NOTTAXED, 2); NOTPAID_TAXED = KlonsData.RoundA(NOTPAID_TAXED, 2); NOTPAID_NOSAI = KlonsData.RoundA(NOTPAID_NOSAI, 2); NOTPAID_NOTTAXED = KlonsData.RoundA(NOTPAID_NOTTAXED, 2); PFNT = KlonsData.RoundA(PFNT, 2); LIT = KlonsData.RoundA(LIT, 2); HIT = KlonsData.RoundA(HIT, 2); PFT = KlonsData.RoundA(PFT, 2); LINT = KlonsData.RoundA(LINT, 2); HINT = KlonsData.RoundA(HINT, 2); var pfx = new PayFx(); SetTo(pfx); pfx.CalcAllAndRound(); SetFrom(pfx); if (pfx.IinEx > 0.0M) { UNTAXED_MINIMUM = KlonsData.RoundA(UNTAXED_MINIMUM, 2); IINEX_DEPENDANTS = KlonsData.RoundA(IINEX_DEPENDANTS, 2); IINEX2 = KlonsData.RoundA(IINEX2, 2); IINEX_EXP = KlonsData.RoundA(IINEX_EXP, 2); var dd = new decimal[] { UNTAXED_MINIMUM, IINEX_DEPENDANTS, IINEX2, IINEX_EXP }; PayFxA.MakeExactSum(pfx.UsedIinEx, dd); UNTAXED_MINIMUM = dd[0]; IINEX_DEPENDANTS = dd[1]; IINEX2 = dd[2]; IINEX_EXP = dd[3]; } CASH_NOTPAID = 0.0M; if (NOTPAID_TAXED == 0.0M && NOTPAID_NOSAI == 0.0M && NOTPAID_NOTTAXED == 0.0M) { return; } pfx.Pay = Math.Min(PAY_TAXED, NOTPAID_TAXED); pfx.PayNs = Math.Min(PAY_NOSAI, NOTPAID_NOSAI); pfx.PayNt = Math.Min(PAY_NOTTAXED, NOTPAID_NOTTAXED); pfx.CalcAllAndRound(); CASH_NOTPAID = pfx.Cash; }
public decimal RecalcCashNotPaid() { CASH_NOTPAID = 0.0M; if (NOTPAID_TAXED == 0.0M && NOTPAID_NOSAI == 0.0M && NOTPAID_NOTTAXED == 0.0M) { return(0.0M); } var pfx = new PayFx(); SetTo(pfx); pfx.Pay = Math.Min(PAY_TAXED, NOTPAID_TAXED); pfx.PayNs = Math.Min(PAY_NOSAI, NOTPAID_NOSAI); pfx.PayNt = Math.Min(PAY_NOTTAXED, NOTPAID_NOTTAXED); pfx.CalcAll(); CASH_NOTPAID = pfx.Cash; return(CASH_NOTPAID); }
public virtual void SetFrom(PayFx from) { Pay = from.Pay; PayNs = from.PayNs; PayNt = from.PayNt; IinEx = from.IinEx; UsedIinEx = from.UsedIinEx; DNS = from.DNS; IIN = from.IIN; Cash = from.Cash; Ir = from.Ir; Ir2 = from.Ir2; Sr = from.Sr; IM = from.IM; HasTaxDoc = from.HasTaxDoc; HasProgressiveIIN = from.HasProgressiveIIN; }
public void AddIncrementally(PayFx2 row) { var p1 = new PayFx(); p1.SetFrom(this); AddPay(row); CalcAll(); var p2 = new PayFx(); p2.SetFrom(this); p2.Subtract(p1); row.DNS = p2.DNS; row.UsedIinEx = p2.UsedIinEx; row.IIN = p2.IIN; row.Cash = p2.Cash; Rows.Add(row); }
public void RecalcA() { var pfx = new PayFx(); SetTo(pfx); pfx.CalcAll(); SetFrom(pfx); CASH_NOTPAID = 0.0M; if (NOTPAID_TAXED == 0.0M && NOTPAID_NOSAI == 0.0M && NOTPAID_NOTTAXED == 0.0M) { return; } pfx.Pay = Math.Min(PAY_TAXED, NOTPAID_TAXED); pfx.PayNs = Math.Min(PAY_NOSAI, NOTPAID_NOSAI); pfx.PayNt = Math.Min(PAY_NOTTAXED, NOTPAID_NOTTAXED); pfx.CalcAll(); CASH_NOTPAID = pfx.Cash; }
public string Calc1(PayCalcRow sr, PayCalcRow paid, decimal pay, out PayCalcRow rpay) { rpay = new PayCalcRow(); rpay.SetFrom(sr); rpay.SubtractThat(paid); rpay.CASH_REQ = pay; if (rpay.CASH == 0.0M) { return("OK"); } if (rpay.PAY_TAXED == 0.0M && rpay.PAY_NOSAI == 0.0M && rpay.PAY_NOTTAXED == 0.0M) { return("OK"); } var pfx = new PayFx(); var pfx2 = new PayFx(); var pfx3 = new PayFx(); paid.SetTo(pfx, sr); pfx2.SetFrom(pfx); pfx.IncPayByIncCash(pay, rpay.PAY_TAXED, rpay.PAY_NOSAI, rpay.PAY_NOTTAXED); pfx3.SetFrom(pfx); pfx.CalcAll(); pfx.Subtract(pfx2); rpay.SetFrom(pfx); pfx3.Pay = Math.Min(pfx3.Pay, sr.NOTPAID_TAXED); pfx3.PayNs = Math.Min(pfx3.PayNs, sr.NOTPAID_NOSAI); pfx3.PayNt = Math.Min(pfx3.PayNt, sr.NOTPAID_NOTTAXED); pfx3.CalcAll(); rpay.CASH_NOTPAID = pfx3.Cash - paid.CASH_NOTPAID; return("OK"); }
public PayFx CalcAll(SalarySheetRowInfo sr, VacationCalcRow v, int calcver) { var cri = new CalcRInfo(false, calcver); cri.CalcR(sr, v.DateStart, v.DateEnd); var pfx = new PayFx(cri); if (cri.UseProgresiveIINRate) { pfx.IinEx = 0.0M; } else { pfx.IinEx = cri.ExMax2.SumIINExempts(); } pfx.Pay = v.Pay; pfx.CalcAllAndRound(); v.DNS = pfx.DNS; v.IINEX = pfx.UsedIinEx; v.IIN = pfx.IIN; v.Cash = pfx.Cash; return(pfx); }
public void AddPay(PayFx pfrom) { Pay += pfrom.Pay; PayNs += pfrom.PayNs; PayNt += pfrom.PayNt; }
public void CalcAll(SalarySheetRowInfo sr, VacationCalcInfo[] vcs, int calcver) { Days = 0.0f; Hours = 0.0f; Pay = 0.0M; DNS = 0.0M; IINEX = 0.0M; IIN = 0.0M; Cash = 0.0M; foreach (var v in PerMonth) { CalcAll(sr, v.Value, calcver); Add(v.Value); } if (vcs == null) { return; } var pfx = new PayFx(); pfx.Pay = Pay; pfx.DNS = DNS; pfx.UsedIinEx = IINEX; pfx.IIN = IIN; pfx.Cash = Cash; var vcrms = new VacationCalcRow[vcs.Length]; var pfxs = new PayFx[vcs.Length]; for (int i = 0; i < vcs.Length; i++) { var vci = vcs[i]; if (vci == null) { continue; } var vcri = vci.VcrCompensation; vcrms[i] = vcri; var pfx1 = new PayFx(); pfx1.Pay = vcri.Pay; pfxs[i] = pfx1; } PayFx.SplitAndRound(pfx, pfxs); for (int i = 0; i < vcs.Length; i++) { var vci = vcs[i]; if (vci == null) { continue; } var vcrm = vcrms[i]; var pfx1 = pfxs[i]; vcrm.DNS = pfx1.DNS; vcrm.IINEX = pfx1.UsedIinEx; vcrm.IIN = pfx1.IIN; vcrm.Cash = pfx1.Cash; } }
public void CalcR(SalarySheetRowInfo sr, DateTime dt1, DateTime dt2) { if (dt1 > dt2 || dt1.Month != dt2.Month) { throw new ArgumentException("Bad call."); } IINMargin = PayFx.GetIINMargin(dt1); var fPersonR = sr.PersonR.FilterListWithDates(dt1, dt2); var fHireFire = sr.Events.HireFire.FilterListWithDates(dt1, dt2); var sickleaveb = sr.Events.SickDays.LinkedPeriods .Where(d => d.EEventId == EEventId.Slimības_lapa_B) .ToArray(); fPersonR = fPersonR.FilterWithList(fHireFire); fPersonR = fPersonR.SubtractList(sickleaveb); DaysInMonth = dt1.DaysInMonth(); CalendarDays = 0; var dr_likmes = dt1.Month == sr.SalarySheet.MT ? sr.SalarySheet.DR_Likmes : null; if (dr_likmes == null) { dr_likmes = DataTasks.GetRates(dt1.FirstDayOfMonth()); } if (fPersonR.LinkedPeriods.Count == 0) { return; } var wt1 = new CalcRRow2(); var pr1 = fPersonR.LinkedPeriods[0].Item1 as KlonsADataSet.PERSONS_RRow; IsPensioner = pr1.PENSIONER == 1; HasTaxDoc = !string.IsNullOrEmpty(pr1.TAXDOC_NO); UseProgresiveIINRate = (dt1 >= ProgressiveIINStartDate); GetRatesForPerson(wt1, pr1, dr_likmes, dt1); RateDDSN = wt1.RateDDSN; RateDNSN = wt1.RateDNSN; RateIIN = wt1.RateIIN; RateIIN2 = wt1.RateIIN2; IINMargin = wt1.IINMargin; HasTaxDoc = wt1.HasTaxDoc; UseProgresiveIINRate = wt1.UseProgresiveIINRate; for (int i = 0; i < fPersonR.LinkedPeriods.Count; i++) { var pri = fPersonR.LinkedPeriods[i]; var dt1x = pri.DateFirst; var dt2x = pri.DateLast; int caldays = dt2x.Subtract(dt1x).Days + 1; CalendarDays += caldays; GetIINDeductionsForPerson(wt1, pri.Item1 as KlonsADataSet.PERSONS_RRow, dr_likmes, dt1x, dt2x, CalcVer); ExFull.AddForExFull(wt1); if (PreparingReport) { SaveStateForMonth(wt1); SaveStateDays(caldays); } decimal rt = (decimal)caldays / (decimal)DaysInMonth; wt1.Multiply(rt); ExForDays.Add(wt1); if (PreparingReport) { SaveStateForDays(wt1); AddToList(dt1x, dt2x); } } ExFull.Round(); ExForDays.Round(); ExMax2.SetFrom(ExForDays); if (!sr.IsSingleRow() && sr.TotalPositionPay.IINExempt2Kind != EIINExempt2Kind.None && sr.SalarySheet.MT == dt1.Month) { SetMax(sr.TotalPositionPay.IINExempt2Kind); } else { FindMax(); } ExDivided.SetFrom(ExMax2); ExCorrect.SetFrom(ExMax2); if (PreparingReport) { SaveStateForMonth(ExFull); SaveStateForDays(ExForDays); SaveStateForMax(ExMax2); } }