Ejemplo n.º 1
0
        public MainWindowViewModel()
        {
            DatabaseReady = false;

            Router    = new RoutingState();
            Activator = new ViewModelActivator();

            ShowMenu = false;

            dialogManager   = Locator.Current.GetService <IDialogManager>();
            saftValidator   = Locator.Current.GetService <ISaftValidator>();
            databaseService = Locator.Current.GetService <IDatabaseService>();

            var canOpen = this.WhenValueChanged(x => x.DatabaseReady)
                          .ObserveOn(RxApp.MainThreadScheduler);

            var canClearFiles = this.WhenAnyValue(x => x.RecentFiles, recentFiles => recentFiles != null && recentFiles.Count() > 0);

            ExitCommand          = ReactiveCommand.Create(OnExit);
            OpenSaftCommand      = ReactiveCommand.CreateFromTask(OnOpenSaft, canOpen);
            OpenTransportCommand = ReactiveCommand.Create(OnOpenTransport, canOpen);
            OpenStocksCommand    = ReactiveCommand.CreateFromTask(OnOpenStocks, canOpen);

            OpenRecentFileCommand    = ReactiveCommand.CreateFromTask <string>(OnOpenRecentSaftFile);
            OpenMenuSaftCommand      = ReactiveCommand.Create <string>(OnOpenMenuSaft);
            OpenMenuStocksCommand    = ReactiveCommand.Create <string>(OnOpenMenuStocks);
            OpenMenuTransportCommand = ReactiveCommand.Create <string>(OnOpenMenuTransport);
            ClearRecentFilesCommand  = ReactiveCommand.Create(OnClearRecentFiles);
            OpenPemDialogCommand     = ReactiveCommand.CreateFromTask(OnOpenPemDialog);
            OpenHashDialogCommand    = ReactiveCommand.CreateFromTask(OnOpenHashDialog);

            MenuHeader = new string[]
            {
                "Erros",
                "Cabeçalho"
            };
            MenuTables = new string[]
            {
                "Clientes",
                "Fornecedores",
                "Produtos",
                "Impostos"
            };
            MenuInvoices = new string[]
            {
                "Documentos Faturação",
                "Pagamentos",
                "Documentos Conferência",
                "Documentos Movimentação"
            };
            MenuStock = new string[]
            {
                "Cabeçalho",
                "Produtos",
            };

            this.WhenActivated(disposables =>
            {
                this.WhenValueChanged(x => x.SelectedSaftMenu)
                .InvokeCommand(OpenMenuSaftCommand)
                .DisposeWith(disposables);

                this.WhenValueChanged(x => x.SelectedStocksMenu)
                .InvokeCommand(OpenMenuStocksCommand)
                .DisposeWith(disposables);
            });

            dialogManager.AddMessage("A iniciar base de dados");
            Task.Run(() =>
            {
                databaseService.InitDatabase();
                dialogManager.AddMessage("");

                var recentFiles = databaseService.GetRecentFiles();

                var recentMenu = new List <MenuItemViewModel>(
                    recentFiles.Select(r => new MenuItemViewModel {
                    Header = r, Command = OpenRecentFileCommand, CommandParameter = r
                }))
                {
                    new MenuItemViewModel {
                        Header = "Limpar", Command = ClearRecentFilesCommand
                    }
                };

                RecentFiles         = new ObservableCollection <MenuItemViewModel>();
                var recentFilesMenu = new MenuItemViewModel[]
                {
                    new MenuItemViewModel
                    {
                        Header = "_Recentes",
                        Items  = recentMenu
                    }
                };
                RecentFiles.AddRange(recentFilesMenu);

                DatabaseReady = true;
            });

            dialogManager.UpdateVersionInfo(databaseService.GetAppVersion());
        }