Ejemplo n.º 1
0
        public DateList FilterWithList(DateList dl)
        {
            var ret = new DateList();

            foreach (var d in List)
            {
                foreach (var df in dl.List)
                {
                    if (d.DateFrom > df.DateTo || d.DateTo < df.DateFrom)
                    {
                        continue;
                    }
                    var nd = new DatesFromTo(d);
                    if (nd.DateFrom < df.DateFrom)
                    {
                        nd.DateFrom = df.DateFrom;
                    }
                    if (nd.DateTo > df.DateTo)
                    {
                        nd.DateTo = df.DateTo;
                    }
                    ret.List.Add(nd);
                }
            }
            return(ret);
        }
Ejemplo n.º 2
0
        public PeriodInfo SubtractList(IEnumerable <PeriodInfo> pif)
        {
            var dl  = new DateList(LinkedPeriods);
            var dlf = new DateList(pif);

            dlf = dl.SubtractList_ForGoodLists(dlf);
            return(FilterWithDateList(dlf.List));
        }
Ejemplo n.º 3
0
 public DateList(DateList dl)
 {
     List.Clear();
     foreach (var d in dl.List)
     {
         List.Add(new DatesFromTo(d));
     }
 }
Ejemplo n.º 4
0
        public DateList AddMerge_ForGoodLists(DateList dl)
        {
            var ret = SubtractFromDatesGoodList(DateTime.MinValue, DateTime.MaxValue);

            ret = ret.SubtractList_ForGoodLists(dl);
            ret = ret.InvertGoodList();
            return(ret);
        }
Ejemplo n.º 5
0
        public DateList SubtractList_Simple(DateList dl)
        {
            var ret = this;

            foreach (var d in dl.List)
            {
                ret = ret.SubtractDates(d.DateFrom, d.DateTo);
            }
            return(ret);
        }
Ejemplo n.º 6
0
        public DateList SubtractFromDatesSimple(DateTime dt1, DateTime dt2)
        {
            var ret = new DateList();

            ret.List.Add(new DatesFromTo(dt1, dt2));
            var f = FilterWithDates(dt1, dt2);

            foreach (var d in f.List)
            {
                ret = ret.SubtractDates(d.DateFrom, d.DateTo);
            }

            return(ret);
        }
Ejemplo n.º 7
0
        public DateList SubtractFromDatesGoodList(DateTime dt1, DateTime dt2)
        {
            var ret = new DateList();

            ret.List.Add(new DatesFromTo(dt1, dt2));

            foreach (var d in List)
            {
                if (d.DateFrom > dt2 || d.DateTo < dt1)
                {
                    continue;
                }
                if (ret.List.Count == 0)
                {
                    break;
                }
                var cd = ret.List[ret.List.Count - 1];
                if (cd.DateFrom >= d.DateFrom && cd.DateTo <= d.DateTo)
                {
                    ret.List.RemoveAt(ret.List.Count - 1);
                    break;
                }
                if (cd.DateFrom < d.DateFrom && cd.DateTo > d.DateTo)
                {
                    var nd = new DatesFromTo(cd);
                    ret.List.Add(nd);
                    cd.DateTo   = d.DateFrom.AddDays(-1);
                    nd.DateFrom = d.DateTo.AddDays(1);
                    break;
                }
                if (cd.DateFrom < d.DateFrom)
                {
                    cd.DateTo = d.DateFrom.AddDays(-1);
                    break;
                }
                else
                {
                    cd.DateFrom = d.DateTo.AddDays(1);
                }
            }

            return(ret);
        }
Ejemplo n.º 8
0
        public DateList FilterWithDates(DateTime dt1, DateTime dt2)
        {
            var ret = new DateList();

            foreach (var d in List)
            {
                if (d.DateFrom > dt2 || d.DateTo < dt1)
                {
                    continue;
                }
                var nd = new DatesFromTo(d);
                if (nd.DateFrom < dt1)
                {
                    nd.DateFrom = dt1;
                }
                if (nd.DateTo > dt2)
                {
                    nd.DateTo = dt2;
                }
                ret.List.Add(nd);
            }
            return(ret);
        }
Ejemplo n.º 9
0
        public DateList SubtractDates(DateTime dt1, DateTime dt2)
        {
            var ret = new DateList();

            foreach (var d in List)
            {
                if (d.DateFrom >= dt1 && d.DateTo <= dt2)
                {
                    continue;
                }
                var nd = new DatesFromTo(d);
                ret.List.Add(nd);
                if (d.DateFrom > dt2 || d.DateTo < dt1)
                {
                    continue;
                }
                if (d.DateFrom < dt1 && d.DateTo > dt2)
                {
                    nd.DateTo   = dt1.AddDays(-1);
                    nd          = new DatesFromTo(d);
                    nd.DateFrom = dt2.AddDays(1);
                    ret.List.Add(nd);
                    continue;
                }
                if (d.DateFrom >= dt1)
                {
                    nd.DateFrom = dt2.AddDays(1);
                    continue;
                }
                if (d.DateTo <= dt2)
                {
                    nd.DateTo = dt1.AddDays(-1);
                    continue;
                }
            }
            return(ret);
        }
Ejemplo n.º 10
0
        public List <KeyValuePair <DateTime, CalcRRow2> > GetDatesAndRates(DateTime dte)
        {
            var table_persons    = MyData.DataSetKlons.PERSONS;
            var table_persons_r  = MyData.DataSetKlons.PERSONS_R;
            var table_events     = MyData.DataSetKlons.EVENTS;
            var table_rates      = MyData.DataSetKlons.RATES;
            var table_untaxedmin = MyData.DataSetKlons.UNTAXED_MIN;

            var dr_person     = table_persons.FindByID(IDP);
            var drs_persons_r = dr_person.GetPERSONS_RRows()
                                .OrderBy(d => d.EDIT_DATE)
                                .ToArray();

            var drs_events = dr_person.GetEVENTSRows();

            var drsn_hirefire = drs_events
                                .Where(d =>
                                       Utils.IN(d.IDN, (int)EEventId.Pieņemts, (int)EEventId.Atlaists))
                                .OrderBy(d => d.DATE1)
                                .ToArray();

            if (drsn_hirefire.Length == 0)
            {
                return(null);
            }

            DateTime dt1, dt2;

            var dd = new DateList();

            for (int i = 0; i < drsn_hirefire.Length; i += 2)
            {
                dt1 = drsn_hirefire[i].DATE1;
                dt2 = i + 1 == drsn_hirefire.Length ?
                      dte :
                      drsn_hirefire[i].DATE1;
                dd.List.Add(new DatesFromTo(dt1, dt2));
            }

            dt1 = dd.List[0].DateFrom;
            dt2 = dd.List[dd.List.Count - 1].DateTo;

            var drsn_hire = drsn_hirefire
                            .Where(d =>
                                   d.IDN == (int)EEventId.Pieņemts)
                            .OrderBy(d => d.DATE1)
                            .ToArray();

            var drs_rates_ordered = table_rates
                                    .WhereX(d =>
                                            d.ONDATE <= dte)
                                    .OrderBy(d => d.ONDATE)
                                    .ToArray();

            var drs_rates = drs_rates_ordered
                            .Where(d =>
                                   dd.HasDate(d.ONDATE))
                            .ToArray();

            var drs_untaxedmin = table_untaxedmin
                                 .WhereX(d => d.ONDATE <= dte)
                                 .OrderBy(d => d.ONDATE)
                                 .ToArray();

            var l_dates = new List <DateTime>();

            l_dates.AddRange(drsn_hire.Select(d => d.DATE1));
            l_dates.AddRange(drs_persons_r.Select(d => d.EDIT_DATE));
            l_dates.AddRange(drs_rates.Select(d => d.ONDATE));
            l_dates.AddRange(drs_untaxedmin.Select(d => d.ONDATE));
            l_dates.Sort();
            var a_dates = l_dates.DistinctForOrdered().ToArray();

            var list_ret = new List <KeyValuePair <DateTime, CalcRRow2> >();

            foreach (var dti in a_dates)
            {
                var dr_pr = drs_persons_r
                            .Where(d => d.EDIT_DATE <= dti)
                            .LastOrDefault();
                var dr_rt = drs_rates_ordered
                            .Where(d => d.ONDATE <= dti)
                            .LastOrDefault();
                if (dr_pr == null || dr_rt == null)
                {
                    continue;
                }
                var cr = new CalcRRow2();
                CalcRInfo.GetRatesForPerson(cr, dr_pr, dr_rt, dti);
                CalcRInfo.GetIINDeductionsForPerson(cr, dr_pr, dr_rt, dti);
                if (list_ret.Count > 0 && list_ret[list_ret.Count - 1].Value.Equals(cr))
                {
                    continue;
                }
                list_ret.Add(new KeyValuePair <DateTime, CalcRRow2>(dti, cr));
            }

            return(list_ret);
        }
Ejemplo n.º 11
0
        public DateList SubtractList_ForGoodLists(DateList dl)
        {
            if (dl.List.Count == 0 || List.Count == 0)
            {
                return(new DateList(this));
            }

            var ret = new DateList();

            int ti  = 0;
            int si  = 0;
            var td1 = new DatesFromTo(List[0]);
            var sd1 = dl.List[0];

            DatesFromTo cd = null;

            while (true)
            {
                if (sd1 != null && td1.DateFrom > sd1.DateTo)
                {
                    if (si == dl.List.Count - 1)
                    {
                        sd1 = null;
                        continue;
                    }
                    si++;
                    sd1 = dl.List[si];
                    continue;
                }
                if (sd1 == null || td1.DateTo < sd1.DateFrom)
                {
                    ret.List.Add(td1);
                    if (ti == List.Count - 1)
                    {
                        break;
                    }
                    ti++;
                    td1 = new DatesFromTo(List[ti]);
                    continue;
                }
                if (td1.DateFrom >= sd1.DateFrom && td1.DateTo <= sd1.DateTo)
                {
                    if (ti == List.Count - 1)
                    {
                        break;
                    }
                    ti++;
                    td1.SetFrom(List[ti]);
                    continue;
                }
                if (td1.DateFrom >= sd1.DateFrom && td1.DateTo > sd1.DateTo)
                {
                    td1.DateFrom = sd1.DateTo.AddDays(1);
                    continue;
                }
                if (td1.DateFrom < sd1.DateFrom && td1.DateTo <= sd1.DateTo)
                {
                    td1.DateTo = sd1.DateFrom.AddDays(-1);
                    ret.List.Add(td1);
                    if (ti == List.Count - 1)
                    {
                        break;
                    }
                    ti++;
                    td1 = new DatesFromTo(List[ti]);
                    continue;
                }
                if (td1.DateFrom < sd1.DateFrom && td1.DateTo > sd1.DateTo)
                {
                    cd        = new DatesFromTo(td1);
                    cd.DateTo = sd1.DateFrom.AddDays(-1);
                    ret.List.Add(cd);
                    td1.DateFrom = sd1.DateTo.AddDays(1);
                    continue;
                }
            }

            return(ret);
        }