Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        public void AddIncrementallyAndRound(PayFx2 row)
        {
            var p1 = new PayFx();

            p1.SetFrom(this);
            AddPayRound(row);
            CalcAllAndRound();
            row.SetFrom(this);
            row.Subtract(p1);
            Rows.Add(row);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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");
        }