using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data.Entity; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using Tango.BL; using Tango.BL.Builders; using Tango.BL.Entities; using Tango.BL.Enumerations; using Tango.BL.ValueObjects; using Tango.Core.Commands; using Tango.Core.ExtensionMethods; using Tango.MachineStudio.Common; using Tango.SharedUI.Components; namespace Tango.MachineStudio.ActionLogs.ViewModels { public class MainViewVM : StudioViewModel { #region Properties private DateTime _startSelectedDate; public DateTime StartSelectedDate { get { return _startSelectedDate; } set { _startSelectedDate = value; RaisePropertyChangedAuto(); } } private DateTime _endSelectedDate; public DateTime EndSelectedDate { get { return _endSelectedDate; } set { _endSelectedDate = value; RaisePropertyChangedAuto(); } } private string _searchFilter; public string SearchFilter { get { return _searchFilter; } set { _searchFilter = value; RaisePropertyChangedAuto(); } } private ObservableCollection _actionLogs; public ObservableCollection ActionLogs { get { return _actionLogs; } set { _actionLogs = value; RaisePropertyChanged(nameof(ActionLogs)); } } private SelectedObjectCollection _selectedActionLogTypes; public SelectedObjectCollection SelectedActionLogTypes { get { return _selectedActionLogTypes; } set { _selectedActionLogTypes = value; RaisePropertyChanged(nameof(SelectedActionLogTypes)); } } private ActionLog _selectedActionLog = null; public ActionLog SelectedActionLog { get { return _selectedActionLog; } set { _selectedActionLog = value; SelectedItemChanged(); RaisePropertyChangedAuto(); InvalidateRelayCommands(); } } private ActionLogDifference _differenceObject; public ActionLogDifference DifferenceObject { get { return _differenceObject; } set { _differenceObject = value; RaisePropertyChangedAuto(); } } private bool _isRunning; public bool IsRunning { get { return _isRunning; } set { _isRunning = value; } } #endregion public RelayCommand SearchCommand { get; set; } public RelayCommand CopyToClipBoardCommand { get; set; } public RelayCommand CopyRelateObjectIDCommand { get; set; } public MainViewVM() { ActionLogs = new ObservableCollection(); SearchCommand = new RelayCommand(GetActionLogs, ()=> !IsRunning); CopyRelateObjectIDCommand = new RelayCommand(CopyRelateObjectID); CopyToClipBoardCommand = new RelayCommand(CopyToClipBoard, () => SelectedActionLog != null && SelectedActionLog.DifferenceObject != null); DateTime now = DateTime.Now; StartSelectedDate = now.AddMonths(-1); EndSelectedDate = now; _isRunning = false; var source = Enum.GetValues(typeof(ActionLogType)).Cast().ToObservableCollection(); var syncedSource = Enum.GetValues(typeof(ActionLogType)).Cast().ToObservableCollection(); SelectedActionLogTypes = new SelectedObjectCollection(source, syncedSource); } public override void OnApplicationReady() { } private void CopyToClipBoard() { DataObject data = new DataObject(SelectedActionLog.DifferenceObject.ToJsonString()); System.Windows.Clipboard.SetDataObject(data); } private void CopyRelateObjectID() { DataObject data = new DataObject(SelectedActionLog.RelatedObjectGuid); System.Windows.Clipboard.SetDataObject(data); } /// /// New Database Query with search parameters. Initialization ActionLogs property. /// private async void GetActionLogs() { string filter = SearchFilter?.ToLower(); if (String.IsNullOrWhiteSpace(filter)) filter = null; using (ObservablesContext db = ObservablesContext.CreateDefault()) { DateTime startUtc = StartSelectedDate.ToUniversalTime(); TimeSpan offsetTime = (EndSelectedDate.Date == DateTime.Now.Date)? DateTime.Now.TimeOfDay : new TimeSpan(23, 59, 59); DateTime endUtc = EndSelectedDate.ToUniversalTime()+ offsetTime; IsRunning = true; ActionLogs = await new ActionLogsCollectionBuilder(db).Set(x => x.LastUpdated <= DbFunctions.TruncateTime(endUtc) && x.LastUpdated >= DbFunctions.TruncateTime(startUtc.Date)) .WithUsers() .WithActionType(SelectedActionLogTypes.SynchedSource.ToArray()) .Query(y => y.Where (x => filter == null || (x.ID.ToString().ToLower().StartsWith(filter) || (x.RelatedObjectName != null && x.RelatedObjectName.ToLower().StartsWith(filter)) || (x.RelatedObjectGuid != null && x.RelatedObjectGuid.ToLower().StartsWith(filter)) || (x.User != null && x.User.Contact != null && x.User.Contact.FullName.ToLower().StartsWith(filter))))) .BuildAsync(); IsRunning = false; } } private void SelectedItemChanged() { if (SelectedActionLog == null || SelectedActionLog.DifferenceObject== null) return; DifferenceObject = SelectedActionLog.DifferenceObject; } } }