コード例 #1
0
        public static List <DayActualEntity> GetLocationCarGroups(IMainFilterEntity mfe, DateTime toDate)
        {
            List <DayActualEntity> feaData, adjustments, buffers, reservationsCheckIn, reservationsCheckOut, emptyHolders;

            //var sw = new Stopwatch();
            //sw.Start();


            using (var db = new MarsDBDataContext())
            {
                emptyHolders = DayActualEntityRetrievers.GetPoolingEmptyAlertsHolders(db, mfe);
                buffers      = DayActualEntityRetrievers.GetBuffersForAlerts(mfe, db);
                adjustments  = DayActualEntityRetrievers.GetCurrentAdditionDeletion(mfe, true, db, true);
                feaData      = DayActualEntityRetrievers.GetFeaFullForAlerts(mfe, db).ToList();
            }

            using (var db = new PoolingDataClassesDataContext())
            {
                reservationsCheckIn  = DayActualEntityRetrievers.GetPoolingCheckInDataForAlerts(db, mfe);
                reservationsCheckOut = DayActualEntityRetrievers.GetPoolingCheckOutDataForAlerts(db, mfe);
            }

            var alertsList           = new List <DayActualEntity>();
            var now                  = DateTime.Now.GetDateAndHourOnlyByCountry(mfe.Country);
            var hourUntilEndOfPeriod = (toDate - now).TotalHours;


            for (int i = 0; i < hourUntilEndOfPeriod; i++)
            {
                int timeSlot    = i;
                var feaD        = feaData.AsParallel().Where(d => d.Tme == timeSlot).OrderBy(d => d.Label).ToList();
                var bufferD     = buffers.AsParallel().OrderBy(d => d.Label).ToList();
                var adjustmentD = adjustments.AsParallel().Where(d => d.Tme == timeSlot).OrderBy(d => d.Label).ToList();
                var resInD      = reservationsCheckIn.AsParallel().Where(d => d.Tme == timeSlot).OrderBy(d => d.Label).ToList();
                var resOutD     = reservationsCheckOut.AsParallel().Where(d => d.Tme == timeSlot).OrderBy(d => d.Label).ToList();

                foreach (var d in emptyHolders)
                {
                    //var feaEntity = d;
                    var feaEntity          = feaD.FirstOrDefault(f => f.Label == d.Label);
                    var bufferEntity       = bufferD.FirstOrDefault(f => f.Label == d.Label);
                    var adjustmentEntity   = adjustmentD.FirstOrDefault(f => f.Label == d.Label);
                    var resCheckInsEntity  = resInD.FirstOrDefault(f => f.Label == d.Label);
                    var resCheckOutsEntity = resOutD.FirstOrDefault(f => f.Label == d.Label);

                    DayActualEntity entityToAdd;

                    var lbl                = d.Label;
                    var previousBalance    = alertsList.Where(a => a.Label == lbl).OrderByDescending(a => a.Tme).FirstOrDefault();
                    var previousBalanceInt = previousBalance == null ? 0 : previousBalance.Balance;

                    if (feaEntity == null && bufferEntity == null &&
                        adjustmentEntity == null && resCheckInsEntity == null && resCheckOutsEntity == null)
                    {
                        if (previousBalanceInt != 0)
                        {
                            entityToAdd = new DayActualEntity
                            {
                                Tme     = i,
                                Label   = d.Label,
                                Balance = previousBalanceInt
                            };

                            alertsList.Add(entityToAdd);
                        }
                        continue;
                    }



                    var feaAvailable     = feaEntity == null ? 0 : feaEntity.Available;
                    var feaOffset        = feaEntity == null ? 0 : feaEntity.Offset;
                    var adjustment       = adjustmentEntity == null ? 0 : adjustmentEntity.AddditionDeletion;
                    var buffer           = bufferEntity == null ? 0 : bufferEntity.Buffer;
                    var reservations     = resCheckOutsEntity == null ? 0 : resCheckOutsEntity.Reservations;
                    var resCheckInOffset = resCheckInsEntity == null ? 0 : resCheckInsEntity.Offset;



                    var available = i == 0
                        ? feaAvailable + adjustment
                        : previousBalanceInt + buffer;

                    var balance = available
                                  - reservations + (feaOffset + resCheckInOffset)
                                  - buffer + adjustment;

                    entityToAdd = new DayActualEntity
                    {
                        Tme     = i,
                        Label   = d.Label,
                        Balance = balance
                    };

                    alertsList.Add(entityToAdd);

                    //if (balance < 0)
                    //{
                    //    if (i == 0)
                    //    {
                    //        alertsList.Add(entityToAdd);
                    //    }
                    //    else
                    //    {
                    //        OnlyAddNewOrHigherEntities(alertsList, entityToAdd, now);
                    //    }
                    //}
                }
            }


            return(alertsList);
        }