private PeriodInfo FillGaps2(PeriodInfo pi, UntMinData um0) { var ret = new PeriodInfo(); ret.DateFirst = pi.DateFirst; ret.DateLast = pi.DateLast; if (pi.LinkedPeriods.Count == 0) { var um1 = um0.Copy(); um1.Dt1 = pi.DateFirst; um1.Dt2 = pi.DateLast; var pi2 = new PeriodInfo(); pi2.DateFirst = pi.DateFirst; pi2.DateLast = pi.DateLast; pi2.Item1 = um1; pi.LinkedPeriods.Add(pi2); return(ret); } foreach (var pic in pi.LinkedPeriods) { var pi_prev = ret.LinkedPeriods.LastOrDefault(); if (pi_prev == null && pic.DateFirst > pi.DateFirst) { var um1 = um0.Copy(); um1.Dt1 = pi.DateFirst; um1.Dt2 = pic.DateFirst.AddDays(-1); var pi2 = new PeriodInfo(); pi2.DateFirst = um1.Dt1; pi2.DateLast = um1.Dt2; pi2.Item1 = um1; ret.LinkedPeriods.Add(pi2); } if (pi_prev != null && pic.DateFirst > pi_prev.DateLast.AddDays(1)) { var um1 = um0.Copy(); um1.Dt1 = pi_prev.DateLast.AddDays(1); um1.Dt2 = pic.DateFirst.AddDays(-1); var pi2 = new PeriodInfo(); pi2.DateFirst = um1.Dt1; pi2.DateLast = um1.Dt2; pi2.Item1 = um1; ret.LinkedPeriods.Add(pi2); } ret.LinkedPeriods.Add(pic); } var pi_last = ret.LinkedPeriods.LastOrDefault(); if (pi_last != null && pi_last.DateLast < pi.DateLast) { var um1 = um0.Copy(); um1.Dt1 = pi_last.DateLast.AddDays(1); um1.Dt2 = pi.DateLast; var pi2 = new PeriodInfo(); pi2.DateFirst = um1.Dt1; pi2.DateLast = um1.Dt2; pi2.Item1 = um1; ret.LinkedPeriods.Add(pi2); } return(ret); }
private PeriodInfo GetUntMinFromDB(KlonsADataSet.PERSONSRow drpr, DateTime dt1, DateTime dt2) { var um0 = new UntMinData(); um0.Dt1 = dt1; um0.Dt2 = dt2; var ret = new PeriodInfo(); ret.DateFirst = dt1; ret.DateLast = dt2; var ret2 = new PeriodInfo(); ret2.DateFirst = dt1; ret2.DateLast = dt2; ret2.Item1 = um0; ret.LinkedPeriods.Add(ret2); var pi = new PeriodInfo(); pi.DateFirst = dt1; pi.DateLast = dt2; var drs = drpr.GetUNTAXED_MINRows() .OrderBy(d => d.ONDATE) .ToArray(); if (drs.Length == 0) { return(ret); } var rt = pi.ReadDateListFilter(drs, d => d.ONDATE); if (rt != PeriodInfo.ERetReadStartEndList.OK || pi.LinkedPeriods.Count == 0) { return(ret); } ret.LinkedPeriods.Clear(); foreach (var pi2 in pi.LinkedPeriods) { var dr_untmin = (pi2.Item1 as KlonsADataSet.UNTAXED_MINRow); var um1 = new UntMinData(); um1.Dt1 = pi2.DateFirst; um1.Dt2 = pi2.DateLast; um1.UntMin = dr_untmin.UNTAXED_MIN; um1.IINRateType = dr_untmin.IIN_RATE_TYPE; var pi_out = new PeriodInfo(); pi_out.DateFirst = um1.Dt1; pi_out.DateLast = um1.Dt2; pi_out.Item1 = um1; ret.LinkedPeriods.Add(pi_out); } return(ret); }
private List <UntMinData> GetUntMinChanges(PeriodInfo pi_merged, PeriodInfo pi_db) { var ret = new List <UntMinData>(); var merged_db_copy = pi_merged.LinkedPeriods .Select(x => x.Item1 as UntMinData) .Select(x => x.Copy()); var list_merged_var = new List <UntMinData>(merged_db_copy); var add_update = new Action <UntMinData>((UntMinData update) => { var fpi_db = pi_db.LinkedPeriods .Where(x => x.DateFirst <= update.Dt1 && x.DateLast >= update.Dt1) .FirstOrDefault() ?.Item1 as UntMinData; if (fpi_db == null) { return; } list_merged_var .Where(x => x.Dt1 > update.Dt2 && x.Dt1 >= fpi_db.Dt1 && x.Dt2 <= fpi_db.Dt2) .ForEach(x => { x.UntMin = update.UntMin; x.IINRateType = update.IINRateType; }); }); for (int i = 0; i < pi_merged.LinkedPeriods.Count; i++) { var pi2 = pi_merged.LinkedPeriods[i]; var um_dbvar = list_merged_var[i]; var um_db = pi2.Item1 as UntMinData; var um_egrm = pi2.Item2 as UntMinData; //if (um1.UntMin == um2.UntMin && um1.IINRateType == um2.IINRateType) continue; if (um_dbvar.UntMin == um_egrm.UntMin && um_dbvar.IINRateType == um_egrm.IINRateType) { continue; } var umrt = new UntMinData() { Dt1 = um_db.Dt1, Dt2 = um_db.Dt2, UntMin = um_egrm.UntMin, IINRateType = um_egrm.IINRateType }; ret.Add(umrt); add_update(umrt); } return(ret); }
private PeriodInfo GetIINRateFromEgrm(nm_e_gramatinasGigv egrm, DateTime dt1, DateTime dt2) { var um0 = new UntMinData(); um0.Dt1 = dt1; um0.Dt2 = dt2; var ret = new PeriodInfo(); ret.DateFirst = dt1; ret.DateLast = dt2; var ret2 = new PeriodInfo(); ret2.DateFirst = dt1; ret2.DateLast = dt2; ret2.Item1 = um0; ret.LinkedPeriods.Add(ret2); var egrm_iinlikme = egrm?.pazime_progr_iin_likmes?.pazime_progr_iin_likme; if (egrm_iinlikme == null) { return(ret); } var ret3 = new UntMinData() { Dt1 = egrm_iinlikme.datums_no, Dt2 = egrm_iinlikme.datums_lidzSpecified && egrm_iinlikme.datums_lidz != null ? egrm_iinlikme.datums_lidz.Value : dt2, IINRateType = 1 }; if (ret3.Dt1 < dt1) { ret3.Dt1 = dt1; } if (ret3.Dt2 > dt2) { ret3.Dt2 = dt2; } if (ret3.Dt1 > dt2 || ret3.Dt2 < dt1 || ret3.Dt2 < ret3.Dt1) { return(ret); } ret2.DateFirst = ret3.Dt1; ret2.DateLast = ret3.Dt2; ret2.Item1 = ret3; return(ret); }
private PeriodInfo MergeUntMinData(PeriodInfo pi_db, PeriodInfo pi_egrm) { var um0 = new UntMinData(); um0.Dt1 = pi_db.DateFirst; um0.Dt2 = pi_db.DateLast; var ret = new PeriodInfo(); ret.DateFirst = pi_db.DateFirst; ret.DateLast = pi_db.DateLast; var ret2 = new PeriodInfo(); ret2.DateFirst = pi_db.DateFirst; ret2.DateLast = pi_db.DateLast; ret2.Item1 = um0; ret2.Item2 = um0; ret.LinkedPeriods.Add(ret2); var dts1 = pi_db.LinkedPeriods.Select(d => d.DateFirst); var dts2 = pi_db.LinkedPeriods.Select(d => d.DateLast.AddDays(1)); var dts3 = pi_egrm.LinkedPeriods.Select(d => d.DateFirst); var dts4 = pi_egrm.LinkedPeriods.Select(d => d.DateLast.AddDays(1)); var dts = dts1 .Union(dts2) .Union(dts3) .Union(dts4) .OrderBy(d => d) .ToList(); if (dts.Count < 2) { return(ret); } ret.LinkedPeriods.Clear(); for (int i = 0; i <= dts.Count - 2; i++) { var adt1 = dts[i]; var adt2 = dts[i + 1].AddDays(-1); var pi_out = new PeriodInfo(); pi_out.DateFirst = adt1; pi_out.DateLast = adt2; var fpi_db = pi_db.FilterListWithDates(adt1, adt2); var fpi_egrm = pi_egrm.FilterListWithDates(adt1, adt2); var umout1 = new UntMinData(); umout1.Dt1 = adt1; umout1.Dt2 = adt2; var umout2 = new UntMinData(); umout2.Dt1 = adt1; umout2.Dt2 = adt2; pi_out.Item1 = umout1; pi_out.Item2 = umout2; if (fpi_db.LinkedPeriods.Count == 1) { umout1.UntMin = (fpi_db.LinkedPeriods[0].Item1 as UntMinData).UntMin; umout1.IINRateType = (fpi_db.LinkedPeriods[0].Item1 as UntMinData).IINRateType; } if (fpi_egrm.LinkedPeriods.Count == 1) { umout2.UntMin = (fpi_egrm.LinkedPeriods[0].Item1 as UntMinData).UntMin; umout2.IINRateType = (fpi_egrm.LinkedPeriods[0].Item1 as UntMinData).IINRateType; } ret.LinkedPeriods.Add(pi_out); } return(ret); }
private PeriodInfo GetUntMinFromEgrm(nm_e_gramatinasGigv egrm, DateTime dt1, DateTime dt2) { var um0 = new UntMinData(); um0.Dt1 = dt1; um0.Dt2 = dt2; var ret = new PeriodInfo(); ret.DateFirst = dt1; ret.DateLast = dt2; var ret2 = new PeriodInfo(); ret2.DateFirst = dt1; ret2.DateLast = dt2; ret2.Item1 = um0; ret.LinkedPeriods.Add(ret2); if (egrm.prognozetie_mnm == null || egrm.prognozetie_mnm.Length == 0) { return(ret); } var pi = new PeriodInfo(); pi.DateFirst = dt1; pi.DateLast = dt2; var ums1 = egrm.prognozetie_mnm .OrderBy(d => d.datums_no) .Where(d => d.datums_no <= dt2) .Select(d => { var rt = new UntMinData() { Dt1 = d.datums_no, Dt2 = d.datums_lidzSpecified && d.datums_lidz != null ? d.datums_lidz.Value : dt2, UntMin = (decimal)d.summa }; if (rt.Dt1 < dt1) { rt.Dt1 = dt1; } if (rt.Dt2 > dt2) { rt.Dt2 = dt2; } return(rt); }) .Where(d => d.Dt2 >= d.Dt1 && d.Dt2 >= dt1) .ToList(); if (ums1.Count == 0) { return(ret); } var ums2 = ums1 .Select(d => new PeriodInfo() { DateFirst = d.Dt1, DateLast = d.Dt2, Item1 = d }) .ToList(); ret.LinkedPeriods.Clear(); ret.LinkedPeriods.AddRange(ums2); return(ret); }