public static List <DayActualEntity> CalculateTopics(bool hourlyTimeSlots, int timeSlots, IMainFilterEntity mfe , bool withLabels, bool siteQ = false) { var returned = new List <DayActualEntity>(); List <DayActualEntity> feaData, adjustments, checkInData, checkOutData; var bufferData = new List <DayActualEntity>(); int buffer = 0; using (var db = new MarsDBDataContext()) { db.Log = new DebugTextWriter(); feaData = withLabels ? DayActualEntityRetrievers.GetFeaDataWithLabel(mfe, hourlyTimeSlots, db, siteQ) : DayActualEntityRetrievers.GetFeaData(mfe, hourlyTimeSlots, db); adjustments = withLabels ? DayActualEntityRetrievers.GetAdditionDeletionDataWithLabels(mfe, hourlyTimeSlots, db, siteQ) : DayActualEntityRetrievers.GetCurrentAdditionDeletion(mfe, hourlyTimeSlots, db); if (withLabels) { bufferData = DayActualEntityRetrievers.GetBuffersWithLabels(mfe, db, siteQ); } else { buffer = DayActualEntityRetrievers.GetBuffers(mfe, db); } } using (var db = new PoolingDataClassesDataContext()) { checkInData = withLabels ? DayActualEntityRetrievers.GetPoolingCheckInDataWithLabels(mfe, hourlyTimeSlots, db, siteQ) : DayActualEntityRetrievers.GetPoolingCheckInData(mfe, hourlyTimeSlots, db); checkOutData = withLabels ? DayActualEntityRetrievers.GetPoolingCheckOutDataWithLabels(mfe, hourlyTimeSlots, db, siteQ) : DayActualEntityRetrievers.GetPoolingCheckOutData(mfe, hourlyTimeSlots, db); } var emptyHolder = new DayActualEntity(); var checkInLocations = checkInData.Select(d => d.Label).Distinct().ToList(); var checkOutLocations = checkInData.Select(d => d.Label).Distinct().ToList(); var labels = withLabels ? GetLabels(mfe, siteQ) : new List <string> { null }; if (withLabels) { labels.AddRange(checkInLocations); labels.AddRange(checkOutLocations); labels = labels.Distinct().ToList(); } for (var i = 0; i < timeSlots; i++) { foreach (var lbl in labels) { var fea = feaData.FirstOrDefault(d => d.Tme == i && (d.Label == lbl)) ?? emptyHolder; var adj = adjustments.FirstOrDefault(d => d.Tme == i && (d.Label == lbl)) ?? emptyHolder; var ci = checkInData.FirstOrDefault(d => d.Tme == i && (d.Label == lbl)) ?? emptyHolder; var co = checkOutData.FirstOrDefault(d => d.Tme == i && (d.Label == lbl)) ?? emptyHolder; var bufferHolder = bufferData.FirstOrDefault(d => d.Label == lbl) ?? emptyHolder; if (withLabels) { buffer = bufferHolder.Buffer; } var previousBalance = returned.FirstOrDefault(d => d.Tme == i - 1 && (d.Label == lbl)); var previousBalanceInt = previousBalance == null ? 0 : previousBalance.Balance; var available = i == 0 ? fea.Available + adj.AddditionDeletion : previousBalanceInt + buffer; var balance = available //+ fea.Opentrips - co.Reservations + (fea.Offset + ci.Offset) - buffer + adj.AddditionDeletion; var dae = new DayActualEntity { Tme = i, Label = lbl, Available = available, Opentrips = fea.Opentrips, Reservations = co.Reservations, OnewayRes = co.OnewayRes, GoldServiceReservations = co.GoldServiceReservations, PrepaidReservations = 0, // co.PrepaidReservations, Checkin = fea.Checkin + ci.Checkin, OnewayCheckin = fea.OnewayCheckin + ci.OnewayCheckin, Offset = fea.Offset + ci.Offset, LocalCheckIn = fea.LocalCheckIn,// + ci.LocalCheckIn, Balance = balance, Buffer = buffer, AddditionDeletion = adj.AddditionDeletion, JustAdditions = adj.JustAdditions, JustDeletions = adj.JustDeletions, }; returned.Add(dae); if (string.IsNullOrEmpty(lbl)) { break; } } } return(returned); }