public void Update(AppStatus status)
 {
     this.Clients.All.Update(status);
 }
        public static AppStatus GetCurrentAppStatus()
        {
            var appStatus = new AppStatus();

            // get active stations and orders
            var activeStations = StationRepository.GetAllOccupiedByOrder();
            var incompleteOrders = OrderRepository.GetAllIncomplete();

            var activeOrderIds = activeStations.GroupBy(s => s.OrderUniqueId).Select(g => g.Key).ToList();
            appStatus.ActiveOrders =
                activeOrderIds.Select(ao =>
                    {
                        var o = OrderRepository.GetOneByUniqueId(ao);
                        {
                            var firstStation = activeStations.FirstOrDefault(s => s.OrderUniqueId == o.UniqueId);
                            var lastStation = activeStations.LastOrDefault(s => s.OrderUniqueId == o.UniqueId);

                            var dto = new OrderStatusDto
                            {
                                OrderUniqueId = o.UniqueId,
                                BatchNumber = o.GetBatchCount(),
                                MeterCount = o.MeterCount,
                                ProducedMeterCount = o.ProducedMeterCount,
                                IsCompleted = o.IsCompleted,
                                IsActive = true
                            };

                            if (firstStation != null && lastStation != null)
                            {
                                dto.StationRange = string.Format("{0}-{1}", firstStation.Number, lastStation.Number);
                            }

                            return dto;
                        }
                    }).ToArray();

            // get incomplete orders
            appStatus.IncompleteOrders = incompleteOrders.Select(o =>
            {
                var activeOrder = appStatus.ActiveOrders.FirstOrDefault(ao => ao.OrderUniqueId == o.UniqueId);
                var dto = new OrderStatusDto
                {
                    OrderUniqueId = o.UniqueId,
                    BatchNumber = o.GetBatchCount(),
                    MeterCount = o.MeterCount,
                    ProducedMeterCount = o.ProducedMeterCount,
                    IsActive = activeOrderIds.Contains(o.UniqueId),
                    IsCompleted = o.IsCompleted,
                    StationRange = activeOrder != null ? activeOrder.StationRange : string.Empty
                };

                return dto;
            }).ToArray();


            // set current status
            appStatus.ProductionStatus = productionStatus;

            // update 
            var allStations = StationRepository.GetAll();
            allStations.ForEach(
                s =>
                {
                    var order = incompleteOrders.FirstOrDefault(o => o.UniqueId == s.OrderUniqueId);
                    var dto = StationDto.Create(s, order);

                    stationHub.Clients.All.Update(dto);
                });


            return appStatus;
        }