Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }