using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core; using Tango.Core.Commands; using Tango.PPC.Common; using Tango.PPC.Common.Application; using Tango.PPC.Common.MachineSetup; using Tango.PPC.Common.Navigation; using Tango.PPC.UI.ViewsContracts; using Tango.Settings; using Tango.SharedUI.Helpers; using Tango.SQLExaminer; namespace Tango.PPC.UI.ViewModels { public class MachineSetupViewVM : PPCViewModel { public enum MachineSetupStates { None, Working, Completed, Failed, } private bool _postSetp; private SetupRequiredEventArgs _setupRequiredEventArgs; public IMachineSetupManager MachineSetupManager { get; set; } private String _serialNumber; public String SerialNumber { get { return _serialNumber; } set { _serialNumber = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } } private String _hostAddress; public String HostAddress { get { return _hostAddress; } set { _hostAddress = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } } private String _log; public String Log { get { return _log; } set { _log = value; RaisePropertyChangedAuto(); } } private MachineSetupStates _state; public MachineSetupStates State { get { return _state; } set { _state = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } } public RelayCommand StartCommand { get; set; } public RelayCommand CompleteCommand { get; set; } public MachineSetupViewVM(IPPCApplicationManager applicationManager, IMachineSetupManager machineSetupManager) { MachineSetupManager = machineSetupManager; MachineSetupManager.ProgressLog += (x, msg) => AppendLog(msg); MachineSetupManager.ProgressStep += (x, step) => AppendLog(Environment.NewLine + "-----------" + step.ToDescription().ToUpper() + "-----------" + Environment.NewLine); HostAddress = "localhost\\SQLEXPRESS"; SerialNumber = "1111"; StartCommand = new RelayCommand(StartSetup, () => !String.IsNullOrWhiteSpace(HostAddress) && !String.IsNullOrWhiteSpace(SerialNumber) && State == MachineSetupStates.None); CompleteCommand = new RelayCommand(CompleteSetup, () => State == MachineSetupStates.Completed); applicationManager.SetupRequired += ApplicationManager_SetupRequired; } private void ApplicationManager_SetupRequired(object sender, SetupRequiredEventArgs e) { _setupRequiredEventArgs = e; } public override void OnApplicationStarted() { base.OnApplicationStarted(); if (_postSetp) { NavigationManager.NavigateTo(Common.Navigation.NavigationView.LoginView); } } public override void OnNavigatedTo() { base.OnNavigatedTo(); } private void AppendLog(String msg) { if (msg != null && !msg.Contains("SQL Examiner")) { InvokeUI(() => { View.AppendLog(msg + Environment.NewLine); }); } } private async void StartSetup() { State = MachineSetupStates.Working; try { await MachineSetupManager.Setup(SerialNumber, HostAddress); Settings.HasSetup = true; _postSetp = true; Settings.Save(); State = MachineSetupStates.Completed; } catch (Exception ex) { State = MachineSetupStates.Failed; await NotificationProvider.ShowInfo(ex.Message); } } private void CompleteSetup() { NavigationManager.NavigateWithObject(NavigationView.LoadingView, new MachineSetupResult() { Completed = true }); } } }