public static List <Stock> LoadStoks(IStatelessSession session, SimpleMRUCache cache,
                                             Settings settings, AddressStock AddressStock, Catalog Catalog)
        {
            if (AddressStock == null)
            {
                return(new List <Stock>());
            }
            var query = session.Query <Stock>()
                        .Fetch(x => x.Address)
                        .Where(x => x.Status == StockStatus.Available)
                        .Where(x => x.ProductId == Catalog.Id);

            return(query
                   .ToList());
        }
        protected override void OnInitialize()
        {
            base.OnInitialize();

            RxQuery(s => {
                return(s.Query <Catalog>()
                       .Join(s.Query <Stock>(),
                             catalog => catalog.Id,
                             stock => stock.ProductId,
                             (catalog, stock) => new { catalog, stock })
                       .Where(p => p.stock.Status == StockStatus.Available)
                       .Select(c => c.catalog)
                       .OrderBy(c => c.Name)
                       .Distinct()
                       .ToArray()
                       .ToList());
            }).Subscribe(Catalogs);

            Catalogs
            .Changed()
            .Throttle(TimeSpan.FromMilliseconds(30), Scheduler)
            .Subscribe(_ =>
            {
                CurrentCatalog.Value = (Catalogs.Value ?? Enumerable.Empty <Catalog>()).FirstOrDefault();
            });

            CurrentCatalog
            .Changed()
            .Select(_ => RxQuery(LoadAddressStock))
            .Switch()
            .Subscribe(AddressStock, CloseCancellation.Token);

            AddressStock
            .Changed()
            .Throttle(TimeSpan.FromMilliseconds(30), Scheduler)
            .Subscribe(_ =>
            {
                CurrentAddressStock.Value = (AddressStock.Value ?? Enumerable.Empty <AddressStock>()).FirstOrDefault();
            });

            CurrentAddressStock
            .Changed()
            .Select(_ => RxQuery(LoadStoks))
            .Switch()
            .Subscribe(Stocks, CloseCancellation.Token);

            Stocks
            .Changed()
            .Throttle(TimeSpan.FromMilliseconds(30), Scheduler)
            .Subscribe(_ =>
            {
                CurrentStock.Value = (Stocks.Value ?? Enumerable.Empty <Stock>()).FirstOrDefault();
            });

            CurrentStock
            .Changed()
            .Select(_ => RxQuery(LoadStockActions))
            .Switch()
            .Subscribe(StockActions, CloseCancellation.Token);

            StockActions
            .Changed()
            .Throttle(TimeSpan.FromMilliseconds(30), Scheduler)
            .Subscribe(_ =>
            {
                CurrentStockAction.Value = (StockActions.Value ?? Enumerable.Empty <StockAction>()).FirstOrDefault();
            });
        }