public ICollection <ExpiryDateViewModel> getExpiryDateViewModels()
        {
            var expiryDates = _stockInformations.GroupBy(s => new { s.ExpiryDate }).Select(s => s.Key.ExpiryDate).ToList();
            var result      = new Collection <ExpiryDateViewModel>();
            ICollection <StockInformation> availableStock; foreach (var expiryDate in expiryDates)

            {
                availableStock = PreferenceCalculator.GetAvailableStock(_stockInformations, _approvedDetails, _requestDetail.ActivityGroup,
                                                                        _requestDetail.Manufacturer,
                                                                        _requestDetail.physicalStore, expiryDate);
                result.Add(
                    new ExpiryDateViewModel()
                {
                    Value    = expiryDate,
                    Text     = string.Format("{0: dd/M/yyyy}", expiryDate),
                    DaysAgo  = expiryDate == null? "-" : ((DateTime)expiryDate).TimeAgo(),
                    Quantity = availableStock.Sum(s => s.Quantity)
                })
                ;
            }
            availableStock = PreferenceCalculator.GetAvailableStock(_stockInformations, _approvedDetails, _requestDetail.ActivityGroup,
                                                                    _requestDetail.Manufacturer,
                                                                    _requestDetail.physicalStore, null);
            result.Add(new ExpiryDateViewModel()
            {
                Value    = null,
                Text     = "No Preferences",
                Quantity = availableStock.Select(s => s.Quantity).Sum()
            });


            return(result.Where(r => r.Quantity > 0).ToList());
        }
        public ICollection <ManufacturerViewModel> getManufacturerViewModels()
        {
            var manufacturers = _stockInformations.GroupBy(s => new { s.Manufacturer }).Select(s => s.Key.Manufacturer).ToList();
            var result        = new Collection <ManufacturerViewModel>();

            foreach (var manufacturer in manufacturers)
            {
                var availableStock = PreferenceCalculator.GetAvailableStock(_stockInformations, _approvedDetails,
                                                                            _requestDetail.ActivityGroup,
                                                                            manufacturer, _requestDetail.physicalStore,
                                                                            ExpiryDate);
                result.Add(new ManufacturerViewModel()
                {
                    ManufacturerID  = manufacturer.ManufacturerID,
                    Name            = manufacturer.Name,
                    CountryOfOrigin = manufacturer.CountryOfOrigin,
                    Quantity        = availableStock.Sum(s => s.Quantity)
                })
                ;
            }
            var noPAvailableStock = PreferenceCalculator.GetAvailableStock(_stockInformations, _approvedDetails, _requestDetail.ActivityGroup, null,
                                                                           _requestDetail.physicalStore, ExpiryDate);

            result.Add(new ManufacturerViewModel()
            {
                ManufacturerID = 0,
                Name           = "No Preferences",
                Quantity       = noPAvailableStock.Sum(s => s.Quantity)
            });

            return(result.Where(r => r.Quantity > 0).ToList());
        }
        public ICollection <PhysicalStoreViewModel> getPhysicalStoreViewModels()
        {
            var physicalStores = _stockInformations.GroupBy(s => new { s.PhysicalStore }).Select(s => s.Key.PhysicalStore).ToList();
            var result         = new Collection <PhysicalStoreViewModel>();

            ICollection <StockInformation> availableStock;

            foreach (var physicalStore in physicalStores)
            {
                availableStock = PreferenceCalculator.GetAvailableStock(_stockInformations, _approvedDetails, _requestDetail.ActivityGroup,
                                                                        _requestDetail.Manufacturer,
                                                                        physicalStore, ExpiryDate);
                result.Add(new PhysicalStoreViewModel
                {
                    PhysicalStoreID = physicalStore.PhysicalStoreID,
                    Name            = physicalStore.Name,
                    Quantity        = availableStock.Sum(s => s.Quantity)
                });
            }


            availableStock = PreferenceCalculator.GetAvailableStock(_stockInformations, _approvedDetails, _requestDetail.ActivityGroup,
                                                                    _requestDetail.Manufacturer,
                                                                    null, ExpiryDate);
            result.Add(new PhysicalStoreViewModel()
            {
                PhysicalStoreID = 0,
                Name            = "No Preferences",
                Quantity        = availableStock.Sum(s => s.Quantity)
            });

            return(result.Where(r => r.Quantity > 0).ToList());
        }
        public ICollection <ActivityViewModel> getActivityViewModels()
        {
            var activities = _stockInformations.GroupBy(s => new { s.Activity }).Select(s => s.Key.Activity).ToList();
            var result     = new Collection <ActivityViewModel>();

            foreach (var activity in activities)
            {
                var availableStock = PreferenceCalculator.GetAvailableStock(_stockInformations, _approvedDetails,
                                                                            activity,
                                                                            _requestDetail.Manufacturer,
                                                                            _requestDetail.physicalStore, ExpiryDate);

                result.Add(new ActivityViewModel()
                {
                    ActivityID     = activity.ActivityGroupID,
                    Name           = activity.Name,
                    IsDeliveryNote = activity.IsDeliveryNote,
                    Quantity       = availableStock.Sum(s => s.Quantity)
                });
            }

            var noPAvailableStock = PreferenceCalculator.GetAvailableStock(_stockInformations, _approvedDetails, null,
                                                                           _requestDetail.Manufacturer,
                                                                           _requestDetail.physicalStore, ExpiryDate);

            result.Add(new ActivityViewModel()
            {
                ActivityID     = "0",
                Name           = "All Activities",
                IsDeliveryNote = false,
                Quantity       = noPAvailableStock.Sum(s => s.Quantity)
            });
            return(result.Where(r => r.Quantity > 0).ToList());
        }