public bool validateItems(IEnumerable <PendingOrder> pendingProducts, bool validOrder)
        {
            validOrder = true;
            foreach (var product in pendingProducts)
            {
                var validQuantity      = (product.Quantity >= product.RemainingQty);
                var validOrderQuantity = (product.RemainingQty >= product.OrderQuantity);
                var hasntLeft          = new CheckSystem().VerifyDate(product.Departure);

                if (!validOrderQuantity || !validQuantity || !hasntLeft)
                {
                    validOrder = false;
                    return(validOrder);
                }
            }
            return(validOrder);
        }
        public SystemCheckerGameView(IPlayniteAPI PlayniteApi, string PluginUserDataPath, Game GameSelected)
        {
            this.PlayniteApi = PlayniteApi;

            InitializeComponent();

            // Local
            SystemConfiguration systemConfiguration = PluginDatabase.Database.PC;

            LocalOs                = systemConfiguration.Os;
            LocalCpu               = systemConfiguration.Cpu;
            LocalRamUsage          = systemConfiguration.RamUsage;
            LocalGpu               = systemConfiguration.GpuName;
            LocalDisks.ItemsSource = systemConfiguration.Disks;


            // Minimum & Recommanded
            GameRequierements gameRequierements = PluginDatabase.Get(GameSelected, true);

            Requirement Minimum     = gameRequierements.GetMinimum();
            Requirement Recommanded = gameRequierements.GetRecommanded();

            if (Minimum.HasData)
            {
                MinimumOs       = "Windows " + string.Join(" / ", Minimum.Os);
                MinimumCpu      = Minimum.Cpu;
                MinimumRamUsage = Minimum.RamUsage;
                MinimumGpu      = Minimum.Gpu;
                MinimumStorage  = Minimum.StorageUsage;
            }

            if (Recommanded.HasData)
            {
                RecommandedOs       = "Windows " + string.Join(" / ", Recommanded.Os);
                RecommandedCpu      = Recommanded.Cpu;
                RecommandedRamUsage = Recommanded.RamUsage;
                RecommandedGpu      = Recommanded.Gpu;
                RecommandedStorage  = Recommanded.StorageUsage;
            }


            // Check config
            string IsOk = "";
            string IsKo = "";

            CheckSystem CheckMinimum = SystemApi.CheckConfig(Minimum, systemConfiguration);

            if (Minimum.HasData)
            {
                MinimumCheckOs = IsKo;
                if (CheckMinimum.CheckOs)
                {
                    MinimumCheckOs = IsOk;
                }
                if (Minimum.Os.Count == 0)
                {
                    MinimumCheckOs = string.Empty;
                }

                MinimumCheckCpu = IsKo;
                if (CheckMinimum.CheckCpu)
                {
                    MinimumCheckCpu = IsOk;
                }
                if (Minimum.Cpu.Count == 0)
                {
                    MinimumCheckCpu = string.Empty;
                }

                MinimumCheckRam = IsKo;
                if (CheckMinimum.CheckRam)
                {
                    MinimumCheckRam = IsOk;
                }
                if (Minimum.Ram == 0)
                {
                    MinimumCheckRam = string.Empty;
                }

                MinimumCheckGpu = IsKo;
                if (CheckMinimum.CheckGpu)
                {
                    MinimumCheckGpu = IsOk;
                }
                if (Minimum.Gpu.Count == 0)
                {
                    MinimumCheckGpu = string.Empty;
                }

                MinimumCheckStorage = IsKo;
                if (CheckMinimum.CheckStorage)
                {
                    MinimumCheckStorage = IsOk;
                }
                if (Minimum.Storage == 0)
                {
                    MinimumCheckStorage = string.Empty;
                }
            }

            CheckSystem CheckRecommanded = SystemApi.CheckConfig(Recommanded, systemConfiguration);

            if (Recommanded.HasData)
            {
                RecommandedCheckOs = IsKo;
                if (CheckRecommanded.CheckOs)
                {
                    RecommandedCheckOs = IsOk;
                }
                if (Recommanded.Os.Count == 0)
                {
                    RecommandedCheckOs = string.Empty;
                }

                RecommandedCheckCpu = IsKo;
                if (CheckRecommanded.CheckCpu)
                {
                    RecommandedCheckCpu = IsOk;
                }
                if (Recommanded.Cpu.Count == 0)
                {
                    RecommandedCheckCpu = string.Empty;
                }

                RecommandedCheckRam = IsKo;
                if (CheckRecommanded.CheckRam)
                {
                    RecommandedCheckRam = IsOk;
                }
                if (Recommanded.Ram == 0)
                {
                    RecommandedCheckRam = string.Empty;
                }

                RecommandedCheckGpu = IsKo;
                if (CheckRecommanded.CheckGpu)
                {
                    RecommandedCheckGpu = IsOk;
                }
                if (Recommanded.Gpu.Count == 0)
                {
                    RecommandedCheckGpu = string.Empty;
                }

                RecommandedCheckStorage = IsKo;
                if (CheckRecommanded.CheckStorage)
                {
                    RecommandedCheckStorage = IsOk;
                }
                if (Recommanded.Storage == 0)
                {
                    RecommandedCheckStorage = string.Empty;
                }
            }

            btLink.Visibility = System.Windows.Visibility.Hidden;
            if (Minimum.HasData || Recommanded.HasData)
            {
                btLink.Visibility = System.Windows.Visibility.Visible;
                btLink.Tag        = gameRequierements.Link;
            }

#if DEBUG
            logger.Debug("CheckMinimum" + JsonConvert.SerializeObject(CheckMinimum));
            logger.Debug("CheckRecommanded" + JsonConvert.SerializeObject(CheckRecommanded));
#endif

            if (!gameRequierements.SourceGameName.IsNullOrEmpty() && !gameRequierements.SourceName.IsNullOrEmpty())
            {
                ScSourceName = resources.GetString("LOCSourceLabel") + ": " + gameRequierements.SourceGameName + $" ({gameRequierements.SourceName})";
            }
            else
            {
                ScSourceName = resources.GetString("LOCSourceLabel") + ": " + GameSelected.Name;
            }

            DataContext = this;
        }
        protected void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            try
            {
                if (e.PropertyName == "GameSelectedData" || e.PropertyName == "PluginSettings")
                {
                    this.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new ThreadStart(delegate
                    {
                        OnlyIcon.Foreground = SystemCheckerUI.DefaultBtForeground;

                        if (PluginDatabase.GameSelectedData.HasData)
                        {
                            this.Visibility = Visibility.Visible;
                        }
                        else
                        {
                            this.Visibility = Visibility.Collapsed;
                            return;
                        }
                    }));

                    this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new ThreadStart(delegate
                    {
                        CheckSystem CheckMinimum     = SystemCheckerUI.CheckMinimum;
                        CheckSystem CheckRecommanded = SystemCheckerUI.CheckRecommanded;

                        if (CheckMinimum.AllOk != null)
                        {
                            if (!(bool)CheckMinimum.AllOk)
                            {
                                OnlyIcon.Foreground = Brushes.Red;
                            }

                            if ((bool)CheckMinimum.AllOk)
                            {
                                OnlyIcon.Foreground = Brushes.Orange;
                                if (CheckRecommanded.AllOk == null)
                                {
                                    OnlyIcon.Foreground = Brushes.Green;
                                }
                            }
                        }
                        if (CheckRecommanded.AllOk != null)
                        {
                            if ((bool)CheckRecommanded.AllOk)
                            {
                                OnlyIcon.Foreground = Brushes.Green;
                            }
                        }
                    }));
                }
                else
                {
                    this.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new ThreadStart(delegate
                    {
                        if (!PluginDatabase.IsViewOpen)
                        {
                            this.Visibility = Visibility.Collapsed;
                        }
                    }));
                }
            }
            catch (Exception ex)
            {
                Common.LogError(ex, "SystemChecker");
            }
        }