コード例 #1
0
        public int Temperature = 0; //curent temperature

        #endregion Fields

        #region Constructors

        public WeatherData()
        {
            Location = new LocationData();
            Curent = new ForecastData();
            ForecastList = new List<ForecastData>();
            HourForecastList = new List<HourForecastData>();
        }
コード例 #2
0
        /// <summary>
        /// Происзодит обновление отображения элементов
        /// </summary>
        private void UpdateInformation()
        {
            if (CurrentAircraft != null)
            {
                labelTitle.Text = "Date as of: " +
                                  SmartCore.Auxiliary.Convert.GetDateFormat(DateTime.Today) + " Aircraft TSN/CSN: " +
                                  GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(CurrentAircraft);

                //очистка массива данных по прогнозам
                _currentForecast.ForecastDatas.Clear();
                //поиск деталей данного самолета
                var aircraftBaseDetails =
                    new List <BaseComponent>(GlobalObjects.ComponentCore.GetAicraftBaseComponents(CurrentAircraft.ItemId));
                //составление нового массива данных по прогнозам
                foreach (var baseDetail in aircraftBaseDetails)
                {
                    //определение ресурсов прогноза для каждой базовой детали
                    var forecastData =
                        new ForecastData(DateTime.Today,
                                         baseDetail,
                                         GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(baseDetail));
                    //дабавление в массив
                    _currentForecast.ForecastDatas.Add(forecastData);
                }
            }
            AnimatedThreadWorker.RunWorkerAsync();
        }
コード例 #3
0
        private static int GetHash(ForecastData data)
        {
            var time  = data.TimeEndBet.ToShortTimeString();
            var myStr = $"{data.NameBetter}{data.NameBet}";

            return(myStr.GetHashCode());
        }
コード例 #4
0
        /// <summary>
        /// Timer callback to retrieve forecast data
        /// </summary>
        /// <param name="state"></param>
        private async void HandleTimer(object state)
        {
            var apiKey    = File.ReadAllText(ApiKeyFile);
            var stationId = File.ReadAllText(StationIdFile);

            ForecastData forecast = ForecastData.Default;

            try
            {
                var forecastUri  = string.Format(ForecastUri, stationId, apiKey);
                var forecastData = await m_Client.GetStringAsync(forecastUri);

                forecast = ParseForecast(forecastData);
            }
            catch (Exception)
            {
                throw;
            }

            DispatcherHelper.RunOnUIThread(() =>
            {
                var viewModel = m_Container.ResolveNamed <MainViewModel>(MainViewModel.Name);
                if (viewModel != null)
                {
                    viewModel.ForecastIcon        = new BitmapImage(new Uri(forecast.Icon));
                    viewModel.ForecastTemperature = forecast.Temperature;
                    viewModel.ForecastWeather     = forecast.Weather;
                    viewModel.ForecastCity        = forecast.CityName;
                }
            });
        }
コード例 #5
0
        /// <summary>
        /// Определяет значение средней утилизации для выполнения задачи
        /// </summary>
        /// <param name="source">Задача, для которой нужно определить утилизацию</param>
        /// <param name="forecastData">прогнозируемый ресурс выполнения задачи</param>
        /// <returns>Значение средней утилизации или null</returns>
        public AverageUtilization GetAverageUtillization(IDirective source, ForecastData forecastData = null)
        {
            if (source == null)
            {
                return(null);
            }
            if (forecastData == null)
            {
                if (source is BaseComponent)
                {
                    return(((BaseComponent)source).AverageUtilization);
                }

                var a = _aircraftsCore.GetParentAircraft(source);
                if (a != null)
                {
                    var aircraftFrame = _componentCore.GetBaseComponentById(a.AircraftFrameId);
                    return(aircraftFrame.AverageUtilization);
                }

                var s = _storeCore.GetParentStore(source);
                return(s != null ? new AverageUtilization(0, 0) : null);
            }
            return(forecastData.AverageUtilization);
        }
コード例 #6
0
        ///<summary>
        /// Конструктор, принимающий в качестве параметра прогноз для базовой детали
        ///</summary>
        ///<param name="forecastData">Данные прогнозя для базовой детали</param>
        public ForecastAdvancedControlItem(ForecastData forecastData) : this()
        {
            _currentForecastData = forecastData;
            _forecastDate        = forecastData.ForecastDate;

            UpdateInformation();
        }
コード例 #7
0
        public async Task <ForecastData> getForecast(string uri)
        {
            ForecastData data = null;

            try
            {
                HttpResponseMessage response = await client.GetAsync(uri);

                if (response.IsSuccessStatusCode)
                {
                    string content = await response.Content.ReadAsStringAsync();

                    data = JsonConvert.DeserializeObject <ForecastData>(content);
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception ex)
            {
                return(null);
            }

            return(data);
        }
コード例 #8
0
        public async Task <ForecastData> GetCurrentForecastAsync()
        {
            if ((DateTime.Now - dataReceivedAt).TotalSeconds < (60 * 60))
            {
                return(lastForecastData);
            }

            var client   = _httpClientFactory.CreateClient(Constants.OpenWeatherMapHttpClientName);
            var response = await client.GetAsync($"weather?id={_cityId}&appid={_apiKey}&units=metric");

            if (response.IsSuccessStatusCode)
            {
                var    content = response.Content;
                string data    = await content.ReadAsStringAsync();

                _logger.LogDebug(data);
                var weatherData = JsonConvert.DeserializeObject <WeatherData>(data);
                lastForecastData = weatherData.Convert();
                dataReceivedAt   = DateTime.Now;
                return(lastForecastData);
            }

            _logger.LogError("GetCurrentForecastAsync IsSuccessStatusCode = false");
            return(null);
        }
コード例 #9
0
        //----------------------------------------------------------------------
        //
        public async Task <Result <ForecastData> > GetWeatherData(string query)
        {
            ForecastData weatherData = null;

            try
            {
                var response = await _client.GetAsync(query);

                if (response.IsSuccessStatusCode)
                {
                    var content = await response.Content.ReadAsStringAsync();

                    weatherData = JsonConvert.DeserializeObject <ForecastData>(content);
                    return(new Result <ForecastData>(weatherData));
                }
                else
                {
                    return(new Result <ForecastData>(Error.Generic));
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("\t\tERROR {0}", ex.Message);
                return(new Result <ForecastData>(Error.Generic));
            }
        }
コード例 #10
0
        protected virtual void AddForecastToDataSet(DirectivesListDataSet destinationDataSet)
        {
            ForecastData fd = _forecast != null?_forecast.GetForecastDataFrame() : null;

            if (fd == null)
            {
                destinationDataSet.ForecastTable.AddForecastTableRow(0,
                                                                     0,
                                                                     "",
                                                                     0,
                                                                     0,
                                                                     0,
                                                                     "");
                return;
            }
            double avgUtilizationCycles = fd.AverageUtilization.Cycles;
            double avgUtilizationHours  = fd.AverageUtilization.Hours;
            string avgUtilizationType   = fd.AverageUtilization.SelectedInterval.ToString();
            int    forecastCycles       = fd.ForecastLifelength.Cycles != null
                                     ? (int)fd.ForecastLifelength.Cycles
                                     : 0;
            int forecastHours = fd.ForecastLifelength.Hours != null
                                    ? (int)fd.ForecastLifelength.Hours
                                    : 0;
            int forecastDays = fd.ForecastLifelength.Days != null
                                   ? (int)fd.ForecastLifelength.Days
                                   : 0;
            string forecastDate = "";

            if (fd.SelectedForecastType == ForecastType.ForecastByDate)
            {
                forecastDate = SmartCore.Auxiliary.Convert.GetDateFormat(fd.ForecastDate);
            }
            else if (fd.SelectedForecastType == ForecastType.ForecastByPeriod)
            {
                forecastDate = SmartCore.Auxiliary.Convert.GetDateFormat(fd.LowerLimit) + " - " +
                               SmartCore.Auxiliary.Convert.GetDateFormat(fd.ForecastDate);
            }
            else if (fd.SelectedForecastType == ForecastType.ForecastByCheck)
            {
                if (fd.NextPerformanceByDate)
                {
                    forecastDate = fd.NextPerformanceString;
                }
                else
                {
                    forecastDate =
                        $"{fd.CheckName}. {SmartCore.Auxiliary.Convert.GetDateFormat(Convert.ToDateTime(fd.NextPerformance.PerformanceDate))}";
                }
            }

            destinationDataSet.ForecastTable.AddForecastTableRow(avgUtilizationCycles,
                                                                 avgUtilizationHours,
                                                                 avgUtilizationType,
                                                                 forecastCycles,
                                                                 forecastHours,
                                                                 forecastDays,
                                                                 forecastDate);
        }
コード例 #11
0
 private ForecastHelper.ColumnCaption[] GetColumns(ForecastData data)
 {
     return(data.Columns.Select(e => new ForecastHelper.ColumnCaption {
         ColumnName = e.Indicator.Code + e.Period.Id,
         IndicatorName = e.Indicator.Name,
         IndicatorCode = e.Indicator.Code,
         PeriodId = e.Period.Id,
         PeriodName = e.Period.Name
     }).ToArray());
 }
 private void OnForecastReceived(string data)
 {
     Debug.Log("Incoming data...");
     try{
         forecastData = JsonUtility.FromJson <ForecastData>(data);
     }catch (Exception e) {
         Debug.LogError($"Error on message received: {e.ToString()}:");
         Debug.LogError(e.Message);
     }
 }
コード例 #13
0
 //----------------------------------------------------------------------
 //
 public void setData(ForecastData wData)
 {
     BindingContext = wData;
     weathers.Clear();
     WeatherForecastList.ItemsSource = weathers;
     for (int i = 0; i < 7; i++)
     {
         weathers.Add(new ItemWeather {
             Temp = wData.list[i].main.temp.ToString(), Date = i, Icon = wData.list[i].weather[0].icon
         });
     }
 }
コード例 #14
0
        private List <ForecastData> ParsePage(HtmlDocument html)
        {
            List <ForecastData> forecastData = new List <ForecastData>();

            try
            {
                var listForecast = html.DocumentNode.SelectNodes("//li");

                foreach (var item in listForecast)
                {
                    if (!item.InnerHtml.Contains("u-dp data-info"))
                    {
                        continue;
                    }

                    ForecastData data = new ForecastData();

                    try
                    {
                        var info = item.SelectSingleNode(".//span[@class='u-dp data-info']").InnerText.TrimStart().TrimEnd().Split('%');
                        Int32.TryParse(info[0].Replace("-", "").Replace("+", ""), out var percent);
                        Int32.TryParse(info[1].Replace("(", "").Replace(")", ""), out var countBet);

                        data.NameBetter  = item.SelectSingleNode(".//div[@class='title-name']/div/a").InnerText.TrimStart().TrimEnd();
                        data.NameBet     = item.SelectSingleNode(".//div[@class='pick-line']").InnerText.TrimStart().TrimEnd();
                        data.Percent     = info[0].Contains("-") ? 0 - percent : percent;
                        data.CountBet    = countBet;
                        data.HtmlPayload = item.SelectSingleNode(".//div[@class='feed-pick-title']").InnerHtml.TrimStart().TrimEnd();
                        data.TimeBet     = TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time")); //DateTime.Now;//.ToString("dd.MM.yyyy HH:mm");

                        if (!item.InnerText.Contains("Show details"))
                        {
                            var timeStartMatch = item.SelectSingleNode(".//small[@class='text-muted']").InnerText.Split('\n').Where(x => x.Contains("Kick off")).First().TrimStart().TrimEnd().Replace("Kick off: ", "");
                            data.TimeEndBet = DateTime.Parse(timeStartMatch).AddHours(2);
                        }
                        else
                        {
                            data.TimeEndBet = DateTime.Now.AddHours(10);
                        }

                        forecastData.Add(data);
                    }
                    catch { }
                }

                return(forecastData);
            }
            catch (Exception e)
            {
                throw;
            }
        }
コード例 #15
0
        public void UpdateFromXml()
        {
            if (mForecastCity == null || mForecastTown == null)
            {
                return;
            }

            mForecastData = GetLatestForecastFromXML();
            if (mForecastData != null)
            {
                UpdateTile(mForecastCity.Name + mForecastTown.Name);
            }
        }
        }     // end of method DeserializeOpenWeatherMapWxJSON

        public static bool DeserializeOpenWeatherMapFxJSON(string strJSON, ref ForecastData owmFxWeatherData)
        {
            owmFxWeatherData = JsonConvert.DeserializeObject <ForecastData>(strJSON);

            if (owmFxWeatherData == null)
            {
                return(false);
            }// end of if block
            else
            {
                return(true);
            } // end of else block
        }     // end of method DeserializeOpenWeatherMapFxJSON
コード例 #17
0
        /// <summary>
        /// Данные работы обновляются по введенным значениям
        /// </summary>
        private bool SaveData()
        {
            foreach (ForecastAdvancedControlItem control in _forecastControlItems)
            {
                if (!control.SaveData())
                {
                    return(false);
                }
                ForecastData fd = control.CurrneForecastData;
                fd.IncludeNotifyes = checkBoxNotifyes.Checked;
                fd.IncludePercents = checkBoxIncludePercents.Checked;
                fd.Percents        = (int)numericUpDownPercents.Value;
            }

            return(true);
        }
コード例 #18
0
        public async Task <List <EntitiyData> > GetForecastData(string query)
        {
            List <EntitiyData> list = null;

            try
            {
                var response = await client.GetAsync(query);

                if (response.IsSuccessStatusCode)
                {
                    var content = await response.Content.ReadAsStringAsync();

                    ForecastData forecastData = JsonConvert.DeserializeObject <ForecastData>(content);

                    list = new List <EntitiyData>();

                    for (int i = 0; i < forecastData.List.Count; i++)
                    {
                        if (i % 8 == 7)
                        {
                            EntitiyData entitiyData = new EntitiyData
                            {
                                Location = forecastData.City.Name,
                                Country  = forecastData.City.Country,
                                DateTime = forecastData.List[i].Dt,
                                Temp     = forecastData.List[i].Main.Temp,
                                Icon     = forecastData.List[i].Weather[0].Icon,
                                Name     = forecastData.List[i].Weather[0].Main,
                                Desc     = forecastData.List[i].Weather[0].Description,
                                Humidity = forecastData.List[i].Main.Humidity,
                                Pressure = forecastData.List[i].Main.Pressure,
                                Wind     = forecastData.List[i].Wind.Speed
                            };
                            list.Add(entitiyData);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("\t\tERROR {0}", ex.Message);
            }

            return(list);
        }
コード例 #19
0
        public ForecastViewModel()
        {
            if (DesignerProperties.IsInDesignTool)
            {
                CurrentForecastData = new ForecastData
                {
                    Temperature = "20",
                    Rain        = "0",
                    CI          = "舒適",
                    WeatherIcon = "Weather02.bmp",
                    Wx          = "短暫雨"
                };

                WeatherIcon = "Weather02.bmp";
                MaxT        = "28";
                MinT        = "17";
            }
        }
コード例 #20
0
        public WeatherData ConvertJSONToModel(int zipCode, string jsonData, bool fromCache)
        {
            var finaldata = new WeatherData()
            {
                ZipCode     = zipCode.ToString(),
                FromCache   = fromCache,
                ForcastInfo = new List <ForecastData>()
            };

            try
            {
                APIData x = JsonConvert.DeserializeObject <APIData>(jsonData);

                finaldata.City   = x.location.name;
                finaldata.Region = x.location.region;
                finaldata.CurrentTempDegreesF   = x.current.temp_f.ToString();
                finaldata.Condition             = x.current.condition.text;
                finaldata.ConditionIconUrl      = x.current.condition.icon;
                finaldata.FeelsLikeTempDegreesF = x.current.feelslike_f.ToString();
                finaldata.LastUpdated           = x.current.last_updated;
                finaldata.WindDirection         = x.current.wind_dir;
                finaldata.WindSpeedMPH          = x.current.wind_mph.ToString();
                foreach (ForecastDay y in x.forecast.forecastday)
                {
                    var t = new ForecastData()
                    {
                        AvgTempDegreesF  = y.day.avgtemp_f.ToString(),
                        Condition        = y.day.condition.text,
                        ConditionIconUrl = y.day.condition.icon,
                        Date             = y.date,
                        MaxTempDegreesF  = y.day.maxtemp_f.ToString(),
                        MinTempDegreesF  = y.day.mintemp_f.ToString()
                    };

                    finaldata.ForcastInfo.Add(t);
                }
            }
            catch
            {
            }

            return(finaldata);
        }
コード例 #21
0
        public Lifelength GetCurrentFlightLifelength(BaseEntityObject source, ForecastData forecastData = null)
        {
            if (source == null)
            {
                return(Lifelength.Null);
            }
            if (forecastData == null)
            {
                return(GetFlightLifelengthOnEndOfDay(source, DateTime.Today));
            }
            if (forecastData.ForecastDate <= DateTime.Today)
            {
                return(GetFlightLifelengthOnEndOfDay(source, forecastData.ForecastDate));
            }

            var res = GetFlightLifelengthOnEndOfDay(source, DateTime.Today);

            res += AnalystHelper.GetUtilization(forecastData.AverageUtilization, (forecastData.ForecastDate - DateTime.Today).Days);
            return(res);
        }
コード例 #22
0
        /// <summary>
        /// Метод, обрабатывающий событие нажатия ссылки Discrepancies
        /// </summary>
        /// <param name="e"></param>
        public void OnDiscrepanciesLinkDisplayRequested(ReferenceEventArgs e)
        {
            e.TypeOfReflection = ReflectionTypes.DisplayInNew;
            var parentAircraft = GlobalObjects.AircraftsCore.GetAircraftById(_baseComponent.ParentAircraftId);            //TODO:(Evgenii Babak) пересмотреть использование ParentAircrafId здесь
            var parentStore    = GlobalObjects.StoreCore.GetStoreById(_baseComponent.ParentStoreId);

            if (_baseComponent.BaseComponentType == BaseComponentType.Frame)
            {
                e.DisplayerText = $"{_baseComponent.GetParentAircraftRegNumber()}. Aircraft Frame SN {_baseComponent.SerialNumber}. Forecast";
            }
            else
            {
                if (parentAircraft != null)
                {
                    e.DisplayerText = $"{_baseComponent.GetParentAircraftRegNumber()}. {_baseComponent}. Forecast";
                }

                if (parentStore != null)
                {
                    e.DisplayerText = parentStore.Name + ". " + _baseComponent + ". Forecast";
                }
            }
            ForecastData forecastData = null;

            if (parentAircraft != null)
            {
                var aircraftFrame      = GlobalObjects.ComponentCore.GetBaseComponentById(parentAircraft.AircraftFrameId);
                var averageUtilization = GlobalObjects.AverageUtilizationCore.GetAverageUtillization(aircraftFrame);
                forecastData = new ForecastData(DateTime.Today, averageUtilization, GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(_baseComponent));
            }

            if (parentStore != null)
            {
                forecastData = new ForecastData(DateTime.Today, new AverageUtilization(10, 5, UtilizationInterval.Dayly), GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(_baseComponent));
            }

            if (forecastData != null)
            {
                e.RequestedEntity = new ForecastListScreen(_baseComponent, DirectiveType.All);
            }
        }
コード例 #23
0
        //----------------------------------------------------------------------
        //
        async void OnGetWeatherButtonClicked(object sender, EventArgs e)
        {
            Console.WriteLine("Aloha");
            if (!string.IsNullOrWhiteSpace(_cityEntry.Text))
            {
                ForecastData weatherData = await _restService.GetWeatherData(APIServer.RequestUriByCity(_cityEntry.Text));

                if (weatherData == null)
                {
                    await DisplayAlert("Alert", "Not found", "OK");

                    return;
                }
                Console.WriteLine("Data: " + weatherData.city.name + weatherData.list[1].weather[0].description);
                Console.WriteLine(DateTime.Now.DayOfWeek);
                BindingContext = weatherData;
                WeatherData(weatherData.list);
            }
            else
            {
                await DisplayAlert("Alert", "Please enter a valid city name", "OK");
            }
        }
コード例 #24
0
        public async Task <ForecastData> GetForecastFromEndpoint(string query)
        {
            ForecastData forecastData = null;

            try
            {
                var response = await _client.GetAsync(query);

                if (response.IsSuccessStatusCode)
                {
                    var content = await response.Content.ReadAsStringAsync();


                    forecastData = JsonConvert.DeserializeObject <ForecastData>(content);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("\t\tERROR {0}", ex.Message);
            }

            return(forecastData);
        }
コード例 #25
0
 private ForecastHelper.ForecastItem[] GetDataCollection(ForecastData data)
 {
     return(data.Rows.Select(row => {
         var item = new ForecastHelper.ForecastItem {
             Name = row.Value,
             Id = row.Id,
             RowId = row.Cells.First().RowId,
             CanEdit = true
         };
         List <ForecastItemValue> values = new List <ForecastItemValue>();
         foreach (var column in data.Columns)
         {
             var cell = row.Cells.FirstOrDefault(e => e.PeriodId == column.Period.Id &&
                                                 e.IndicatorId == column.Indicator.Id);
             ForecastItemValue currentCellValue = cell == null
                                         ? CreateEmptyValue(column.Indicator.Id, column.Indicator.Code, column.Period.Id)
                                         : CreateValueFromCell(cell, column.Indicator.Code);
             values.Add(currentCellValue);
         }
         item.ForecastItemValues = values.ToArray();
         return item;
     }).ToArray());
 }
コード例 #26
0
        protected virtual void AddForecastToDataSet(WorkscopeDataSet destinationDataSet)
        {
            ForecastData fd = _forecast != null?_forecast.GetForecastDataFrame() : null;

            double avgUtilizationCycles = fd != null ? fd.AverageUtilization.Cycles : 0;
            double avgUtilizationHours  = fd != null ? fd.AverageUtilization.Hours : 0;
            string avgUtilizationType   = fd != null
                                            ? fd.AverageUtilization.SelectedInterval.ToString()
                                            : "";

            int forecastCycles = fd != null
                ? fd.ForecastLifelength.Cycles != null
                    ? (int)fd.ForecastLifelength.Cycles
                    : 0
                : 0;
            int forecastHours = fd != null
                ? fd.ForecastLifelength.Hours != null
                    ? (int)fd.ForecastLifelength.Hours
                    : 0
                : 0;
            int forecastDays = fd != null
                ? fd.ForecastLifelength.Days != null
                    ? (int)fd.ForecastLifelength.Days
                    : 0
                : 0;
            string forecastDate = _forecast != null
                ? _forecast.ForecastDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString())
                : "";

            destinationDataSet.ForecastTable.AddForecastTableRow(avgUtilizationCycles,
                                                                 avgUtilizationHours,
                                                                 avgUtilizationType,
                                                                 forecastCycles,
                                                                 forecastHours,
                                                                 forecastDays,
                                                                 forecastDate);
        }
コード例 #27
0
        public Lifelength GetFlightLifelengthOnStartOfDay(BaseEntityObject source, ForecastData forecastData = null)
        {
            if (source == null)
            {
                return new Lifelength {
                           Days = GetDays(DateTimeExtend.GetCASMinDateTime(), DateTime.Today)
                }
            }
            ;

            if (forecastData == null)
            {
                return(GetFlightLifelengthOnStartOfDay(source, DateTime.Today));
            }
            if (forecastData.ForecastDate <= DateTime.Today)
            {
                return(GetFlightLifelengthOnStartOfDay(source, forecastData.ForecastDate));
            }

            var res = GetFlightLifelengthOnStartOfDay(source, DateTime.Today);

            res += AnalystHelper.GetUtilization(forecastData.AverageUtilization, (forecastData.ForecastDate - DateTime.Today).Days);
            return(res);
        }
コード例 #28
0
        protected override async void OnAppearing()
        {
            base.OnAppearing();

            if (IsBusy)
            {
                return;
            }
            try
            {
                HttpService  Client = new HttpService();
                ForecastData data   = await Client.getForecast(Client.generateUri("forecast", this.city.Name));

                city.Forecast = data;
                await city.setForecastData(data);
            }
            catch (Exception e)
            {
                await Application.Current.MainPage.DisplayAlert(
                    "An error occurred, please try again later.",
                    e.Message,
                    "Ok"
                    );
            }
            finally
            {
                IsBusy = false;
            }
            this.Children.Clear();
            //TODO: Delete this lines and classes
            //this.Children.Add(new TodayPage(this.city));
            //this.Children.Add(new TomorrowPage(this.city));
            this.Children.Add(new SingleDayPage(this.city, "Today"));
            this.Children.Add(new SingleDayPage(this.city, "Tomorrow"));
            this.Children.Add(new FiveDaysPage(this.city));
        }
コード例 #29
0
        private void ForecastMenuClick(object sender, EventArgs e)
        {
            CancelAsync();

            List <BaseComponent> aircraftBaseComponents = null;

            if (CurrentAircraft != null)
            {
                //поиск деталей данного самолета
                aircraftBaseComponents = new List <BaseComponent>(GlobalObjects.ComponentCore.GetAicraftBaseComponents(CurrentAircraft.ItemId));
                //очистка массива данных по прогнозам
                if (aircraftBaseComponents.Count != 0)
                {
                    _currentForecast.ForecastDatas.Clear();
                }
            }
            else
            {
                _currentForecast.ForecastDatas[0].ForecastLifelength = new Lifelength(0, 0, 0);
            }

            switch ((string)sender)
            {
            case "No Forecast":
            {
            }
            break;

            case "Today":
            {
                if (aircraftBaseComponents != null)
                {
                    //составление нового массива данных по прогнозам
                    foreach (var baseComponent in aircraftBaseComponents)
                    {
                        //определение ресурсов прогноза для каждой базовой детали
                        ForecastData forecastData =
                            new ForecastData(DateTime.Today,
                                             baseComponent,
                                             GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(baseComponent));
                        //дабавление в массив
                        _currentForecast.ForecastDatas.Add(forecastData);
                    }
                    ForecastData main = _currentForecast.GetForecastDataFrame() ??
                                        _currentForecast.ForecastDatas[0];

                    labelDateAsOf.Text =
                        "Forecast date: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.ForecastDate) +
                        " Aircraft TSN/CSN: " + main.ForecastLifelength +
                        "\nAvg. utlz: " + main.AverageUtilization;
                }
            }
            break;

            case "This week":
            {
                if (aircraftBaseComponents != null)
                {
                    //составление нового массива данных по прогнозам
                    foreach (var baseComponent in aircraftBaseComponents)
                    {
                        //определение ресурсов прогноза для каждой базовой детали
                        ForecastData forecastData =
                            new ForecastData(DateTime.Today.AddDays(7),
                                             baseComponent,
                                             GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(baseComponent));
                        //дабавление в массив
                        _currentForecast.ForecastDatas.Add(forecastData);
                    }
                    ForecastData main = _currentForecast.GetForecastDataFrame() ??
                                        _currentForecast.ForecastDatas[0];

                    labelDateAsOf.Text =
                        "Forecast date: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.ForecastDate) +
                        " Aircraft TSN/CSN: " + main.ForecastLifelength +
                        "\nAvg. utlz: " + main.AverageUtilization;
                }
            }
            break;

            case "Two weeks":
            {
                if (aircraftBaseComponents != null)
                {
                    //составление нового массива данных по прогнозам
                    foreach (var baseComponent in aircraftBaseComponents)
                    {
                        //определение ресурсов прогноза для каждой базовой детали
                        ForecastData forecastData =
                            new ForecastData(DateTime.Today.AddDays(14),
                                             baseComponent,
                                             GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(baseComponent));
                        //дабавление в массив
                        _currentForecast.ForecastDatas.Add(forecastData);
                    }
                    ForecastData main = _currentForecast.GetForecastDataFrame() ??
                                        _currentForecast.ForecastDatas[0];

                    labelDateAsOf.Text =
                        "Forecast date: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.ForecastDate) +
                        " Aircraft TSN/CSN: " + main.ForecastLifelength +
                        "\nAvg. utlz: " + main.AverageUtilization;
                }
            }
            break;

            case "Month":
            {
                if (aircraftBaseComponents != null)
                {
                    //составление нового массива данных по прогнозам
                    foreach (var baseComponent in aircraftBaseComponents)
                    {
                        //определение ресурсов прогноза для каждой базовой детали
                        ForecastData forecastData =
                            new ForecastData(DateTime.Today.AddMonths(1),
                                             baseComponent,
                                             GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(baseComponent));
                        //дабавление в массив
                        _currentForecast.ForecastDatas.Add(forecastData);
                    }
                    ForecastData main = _currentForecast.GetForecastDataFrame() ??
                                        _currentForecast.ForecastDatas[0];

                    labelDateAsOf.Text =
                        "Forecast date: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.ForecastDate) +
                        " Aircraft TSN/CSN: " + main.ForecastLifelength +
                        "\nAvg. utlz: " + main.AverageUtilization;
                }
            }
            break;

            case "Custom":
            {
                if (aircraftBaseComponents != null)
                {
                    //составление нового массива данных по прогнозам
                    foreach (var baseComponent in aircraftBaseComponents)
                    {
                        //определение ресурсов прогноза для каждой базовой детали
                        ForecastData forecastData =
                            new ForecastData(DateTime.Today,
                                             baseComponent,
                                             GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(baseComponent));
                        //дабавление в массив
                        _currentForecast.ForecastDatas.Add(forecastData);
                    }
                }
                ForecastData                main         = _currentForecast.GetForecastDataFrame() ?? _currentForecast.ForecastDatas[0];
                ForecastCustomsWriteData    form         = new ForecastCustomsWriteData(_currentForecast);
                ForecastCustomsAdvancedForm advancedForm = new ForecastCustomsAdvancedForm(_currentForecast);

                form.ShowDialog();

                if (form.DialogResult != DialogResult.OK && form.CallAdvanced)
                {
                    advancedForm.ShowDialog();
                }

                if (form.DialogResult == DialogResult.OK || advancedForm.DialogResult == DialogResult.OK)
                {
                    if (main.SelectedForecastType == ForecastType.ForecastByDate)
                    {
                        if (CurrentAircraft != null)
                        {
                            labelDateAsOf.Text =
                                "Forecast date: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.ForecastDate) +
                                " Aircraft TSN/CSN: " + main.ForecastLifelength +
                                "\nAvg. utlz: " + main.AverageUtilization;
                        }
                        else
                        {
                            labelDateAsOf.Text =
                                "Forecast date: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.ForecastDate) +
                                " Component TSN/CSN: " + main.ForecastLifelength +
                                "\nAvg. utlz: " + main.AverageUtilization;
                        }
                    }
                    else if (main.SelectedForecastType == ForecastType.ForecastByPeriod)
                    {
                        labelDateAsOf.Text =
                            "Forecast Period From: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.LowerLimit) +
                            " To: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.ForecastDate) +
                            "\nAvg. utlz: " + main.AverageUtilization;
                    }
                    else if (main.SelectedForecastType == ForecastType.ForecastByCheck)
                    {
                        if (main.NextPerformanceByDate)
                        {
                            labelDateAsOf.Text = "Forecast: " + main.NextPerformanceString;
                        }
                        else
                        {
                            labelDateAsOf.Text =
                                $"Forecast: {main.CheckName}. {main.NextPerformance}";
                        }
                    }
                }
                else
                {
                    return;
                }
            }
            break;
            }
            AnimatedThreadWorker.DoWork -= AnimatedThreadWorkerDoWork;
            AnimatedThreadWorker.DoWork -= AnimatedThreadWorkerDoFilteringWork;
            AnimatedThreadWorker.DoWork += AnimatedThreadWorkerDoWork;

            AnimatedThreadWorker.RunWorkerAsync();
        }
コード例 #30
0
 private void gotForecast(ForecastData data, Station station)
 {
     Debug.WriteLine(data);
 }
コード例 #31
0
        protected override void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            backgroundWorker.ReportProgress(50);

            try
            {
                Invoke(new Action(() => listViewCompliance.Items.Clear()));
            }
            catch (Exception)
            {
            }

            if (_currentComponent == null)
            {
                e.Cancel = true;
                return;
            }
            var parentAircraft   = GlobalObjects.AircraftsCore.GetParentAircraft(_currentComponent);
            var lastRecords      = new List <AbstractRecord>();
            var nextPerformances = new List <NextPerformance>();

            var allWorkPackagesIncludedTask     = new CommonCollection <WorkPackage>();
            var openPubWorkPackagesIncludedTask = new CommonCollection <WorkPackage>();
            var closedWorkPackages           = new CommonCollection <WorkPackage>();
            var taskThatIncludeInWorkPackage = new List <IDirective>();

            lastRecords.AddRange(_currentComponent.TransferRecords.ToArray());
            lastRecords.AddRange(_currentComponent.ChangeLLPCategoryRecords.ToArray());
            lastRecords.AddRange(_currentComponent.ActualStateRecords.ToArray());

            //Объекты для в котороые будет извлекаться информация
            //из записеи о перемещении
            var lastDestination = "";
            //прогнозируемый ресурс
            //если известна родительская деталь данной директивы,
            //то ее текущая наработка и средняя утилизация
            //используются в качестве ресурсов прогноза
            //для расчета всех просроченных выполнений
            var forecastData = new ForecastData(DateTime.Now,
                                                GlobalObjects.AverageUtilizationCore.GetAverageUtillization(_currentComponent),
                                                GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(_currentComponent));

            foreach (var directive in _currentComponent.ComponentDirectives)
            {
                if (directive.IsAffect().GetValueOrDefault(true))
                {
                    //расчет след. выполнений директивы.
                    //если известен ресурс прогноза, то будут расчитаны все просрочнные выполнения
                    //если неизвестне, то только первое
                    //GlobalObjects.PerformanceCalculator.GetNextPerformance(directive, forecastData);
                    nextPerformances.AddRange(directive.NextPerformances);
                    lastRecords.AddRange(directive.PerformanceRecords.ToArray());

                    if (backgroundWorker.CancellationPending)
                    {
                        e.Cancel = true;
                        return;
                    }
                    taskThatIncludeInWorkPackage.Add(directive);
                }
                else
                {
                    var bindedItems = GlobalObjects.BindedItemsCore.GetBindedItemsFor(parentAircraft.ItemId, directive);
                    foreach (var bindedItem in bindedItems)
                    {
                        if (bindedItem is MaintenanceDirective)
                        {
                            var mpd = (MaintenanceDirective)bindedItem;
                            //прогнозируемый ресурс
                            //если известна родительская деталь данной директивы,
                            //то ее текущая наработка и средняя утилизация
                            //используются в качестве ресурсов прогноза
                            //для расчета всех просроченных выполнений
                            //расчет след. выполнений директивы.
                            //если известен ресурс прогноза, то будут расчитаны все просрочнные выполнения
                            //если неизвестне, то только первое
                            GlobalObjects.PerformanceCalculator.GetNextPerformance(mpd, forecastData);
                            nextPerformances.AddRange(mpd.NextPerformances);
                            lastRecords.AddRange(mpd.PerformanceRecords.ToArray());

                            taskThatIncludeInWorkPackage.Add(mpd);
                        }
                    }
                }
            }

            //загрузка рабочих пакетов для определения
            //перекрытых ими выполнений задач
            if (_openPubWorkPackages == null)
            {
                _openPubWorkPackages = new CommonCollection <WorkPackage>();
            }
            _openPubWorkPackages.Clear();

            //загрузка рабочих пакетов для определения
            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.Opened));
            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.Published));

            allWorkPackagesIncludedTask.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.All, taskThatIncludeInWorkPackage));

            #region Добавление в список просроченных выполнений

            //и сравнение их с открытыми и опубликованными рабочими пакетами
            openPubWorkPackagesIncludedTask.AddRange(
                allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Opened ||
                                                  wp.Status == WorkPackageStatus.Published));
            //сбор всех записей рабочих пакетов для удобства фильтрации
            var openPubWpRecords =
                openPubWorkPackagesIncludedTask.SelectMany(wp => wp.WorkPakageRecords).ToList();
            //LINQ запрос для сортировки записей по дате
            var sortNextRecords = (from record in nextPerformances
                                   orderby GetDate(record) descending
                                   select record).ToList();
            for (int i = 0; i < sortNextRecords.Count; i++)
            {
                if (backgroundWorker.CancellationPending)
                {
                    allWorkPackagesIncludedTask.Clear();
                    openPubWorkPackagesIncludedTask.Clear();
                    closedWorkPackages.Clear();

                    e.Cancel = true;
                    return;
                }

                //поиск записи в рабочих пакетах по данному чеку
                //чей номер группы выполнения (по записи) совпадает с расчитанным
                var parentDirective = sortNextRecords[i].Parent;
                //номер выполнения
                int parentCountPerf;
                if (parentDirective.LastPerformance != null)
                {
                    parentCountPerf = parentDirective.LastPerformance.PerformanceNum <= 0
                                                ? 1
                                                : parentDirective.LastPerformance.PerformanceNum;
                }
                else
                {
                    parentCountPerf = 0;
                }
                parentCountPerf += parentDirective.NextPerformances.IndexOf(sortNextRecords[i]);
                parentCountPerf += 1;

                var wpr = openPubWpRecords.FirstOrDefault(r => r.PerformanceNumFromStart == parentCountPerf &&
                                                          r.WorkPackageItemType == parentDirective.SmartCoreObjectType.ItemId &&
                                                          r.DirectiveId == parentDirective.ItemId);
                if (wpr != null)
                {
                    var wp = openPubWorkPackagesIncludedTask.GetItemById(wpr.WorkPakageId);
                    //запись о выполнении блокируется найденым пакетом
                    sortNextRecords[i].BlockedByPackage = wp;
                    //последующие записи о выполнении так же должны быть заблокированы
                    for (int j = i - 1; j >= 0; j--)
                    {
                        //блокировать нужно все рабочие записи, или до первой записи,
                        //заблокированной другим рабочим пакетом
                        if (sortNextRecords[j].BlockedByPackage != null ||
                            sortNextRecords[j].Condition != ConditionState.Overdue)
                        {
                            break;
                        }
                        if (sortNextRecords[j].Parent == parentDirective)
                        {
                            sortNextRecords[j].BlockedByPackage = wp;
                            Invoke(new Action <int, Color>(SetItemColor), j, Color.FromArgb(Highlight.GrayLight.Color));
                        }
                    }
                }
                Invoke(new Action <NextPerformance>(AddListViewItem), sortNextRecords[i]);
            }

            #endregion

            #region Добавление в список записей о произведенных выполнениях

            //и сравнение их с закрытыми рабочими пакетами
            closedWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Closed));

            //LINQ запрос для сортировки записей по дате
            var sortLastRecords = (from record in lastRecords
                                   orderby record.RecordDate ascending
                                   select record).ToList();

            var items = new List <KeyValuePair <AbstractRecord, string[]> >();

            for (int i = 0; i < sortLastRecords.Count; i++)
            {
                if (backgroundWorker.CancellationPending)
                {
                    allWorkPackagesIncludedTask.Clear();
                    openPubWorkPackagesIncludedTask.Clear();
                    closedWorkPackages.Clear();

                    e.Cancel = true;
                    return;
                }

                string[] subs;
                if (sortLastRecords[i] is DirectiveRecord)
                {
                    var directiveRecord = (DirectiveRecord)sortLastRecords[i];
                    subs = new[]
                    {
                        directiveRecord.WorkType,
                        UsefulMethods.NormalizeDate(directiveRecord.RecordDate),
                        directiveRecord.OnLifelength != null
                                                                        ? directiveRecord.OnLifelength.ToString()
                                                                        : "",
                        "",
                        "",
                        directiveRecord.Remarks
                    };
                }
                else if (sortLastRecords[i] is TransferRecord)
                {
                    TransferRecord transferRecord = (TransferRecord)sortLastRecords[i];

                    string currentDestination, destinationObject;
                    DestinationHelper.GetDestination(transferRecord, out currentDestination, out destinationObject);

                    subs = new[]
                    {
                        lastDestination != ""
                                                                        ? "Transfered " + destinationObject + " from " + lastDestination + " to " + currentDestination
                                                                        : "Transfered " + destinationObject + " to " + currentDestination,
                        UsefulMethods.NormalizeDate(transferRecord.TransferDate),
                        transferRecord.OnLifelength.ToString(),
                        "",
                        "",
                        transferRecord.Remarks,
                    };
                    lastDestination = currentDestination;
                }
                else if (sortLastRecords[i] is ComponentLLPCategoryChangeRecord)
                {
                    ComponentLLPCategoryChangeRecord llpRecord  = (ComponentLLPCategoryChangeRecord)sortLastRecords[i];
                    LLPLifeLimitCategory             toCategory = llpRecord.ToCategory;
                    subs = new[]
                    {
                        "Changed to " + toCategory,
                        UsefulMethods.NormalizeDate(llpRecord.RecordDate),
                        llpRecord.OnLifelength.ToString(),
                        "",
                        "",
                        llpRecord.Remarks,
                    };
                }
                else if (sortLastRecords[i] is ActualStateRecord)
                {
                    ActualStateRecord actualStateRecord = (ActualStateRecord)sortLastRecords[i];
                    subs = new[]
                    {
                        "Actual state:",
                        UsefulMethods.NormalizeDate(actualStateRecord.RecordDate.Date),
                        actualStateRecord.OnLifelength != null
                                                                        ? actualStateRecord.OnLifelength.ToString()
                                                                        : "",
                        "",
                        "",
                        actualStateRecord.Remarks,
                    };
                }
                else
                {
                    subs = new[]
                    {
                        "Unknown record ",
                        UsefulMethods.NormalizeDate(sortLastRecords[i].RecordDate),
                        sortLastRecords[i].OnLifelength.ToString(),
                        "",
                        "",
                        sortLastRecords[i].Remarks,
                    };
                }
                items.Add(new KeyValuePair <AbstractRecord, string[]>(sortLastRecords[i], subs));
            }

            #endregion

            for (int i = items.Count - 1; i >= 0; i--)
            {
                WorkPackage workPackage = null;
                if (items[i].Key is AbstractPerformanceRecord)
                {
                    var apr = items[i].Key as AbstractPerformanceRecord;
                    workPackage = closedWorkPackages.FirstOrDefault(wp => wp.ItemId == apr.DirectivePackageId);
                }
                Invoke(new Action <AbstractRecord, string[], WorkPackage>(AddListViewItem), items[i].Key, items[i].Value, workPackage);
            }

            allWorkPackagesIncludedTask.Clear();
            openPubWorkPackagesIncludedTask.Clear();
            closedWorkPackages.Clear();

            backgroundWorker.ReportProgress(100);
        }