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); }
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)); }
public DateList(DateList dl) { List.Clear(); foreach (var d in dl.List) { List.Add(new DatesFromTo(d)); } }
public DateList AddMerge_ForGoodLists(DateList dl) { var ret = SubtractFromDatesGoodList(DateTime.MinValue, DateTime.MaxValue); ret = ret.SubtractList_ForGoodLists(dl); ret = ret.InvertGoodList(); return(ret); }
public DateList SubtractList_Simple(DateList dl) { var ret = this; foreach (var d in dl.List) { ret = ret.SubtractDates(d.DateFrom, d.DateTo); } return(ret); }
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); }
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); }
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); }
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); }
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); }
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); }