Files
TradeBlotter/ViewModels/DividendHistoryViewModel.cs
2024-05-24 15:12:29 -04:00

198 lines
6.5 KiB
C#

using System;
using System.Windows.Input;
using System.ComponentModel;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Windows;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MarketData;
using MarketData.Utils;
using MarketData.DataAccess;
using MarketData.MarketDataModel;
using TradeBlotter.DataAccess;
using TradeBlotter.Command;
using TradeBlotter.Model;
using TradeBlotter.Cache;
namespace TradeBlotter.ViewModels
{
public class DividendHistoryViewModel : WorkspaceViewModel
{
private List<String> watchLists;
private List<String> symbols;
private String selectedWatchList;
private String symbol;
private String selectedCompanyName;
private RelayCommand refreshCommand;
private RelayCommand getLatestDivExDatesCommand;
private bool busyIndicator = false;
public DividendHistoryViewModel()
{
base.DisplayName = "DividendHistory";
watchLists = WatchListDA.GetWatchLists();
watchLists.Insert(0, Constants.CONST_ALL);
selectedWatchList = watchLists.Find(x => x.Equals("Valuations"));
symbols = WatchListDA.GetWatchList(selectedWatchList);
PropertyChanged += OnDividendHistoryViewModelPropertyChanged;
}
public override SaveParameters GetSaveParameters()
{
SaveParameters saveParams = new SaveParameters();
if (null == symbol) return null;
saveParams.Add(new KeyValuePair<String, String>("Type", GetType().Namespace + "." + GetType().Name));
saveParams.Add(new KeyValuePair<String, String>("SelectedSymbol", symbol));
saveParams.Add(new KeyValuePair<String, String>("SelectedWatchList", selectedWatchList));
return saveParams;
}
public override void SetSaveParameters(SaveParameters saveParameters)
{
try
{
symbol = (from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("SelectedSymbol") select item).FirstOrDefault().Value;
selectedWatchList = (from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("SelectedWatchList") select item).FirstOrDefault().Value;
Referer=saveParameters.Referer;
base.OnPropertyChanged("SelectedWatchList");
base.OnPropertyChanged("SelectedSymbol");
}
catch (Exception exception)
{
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Exception:{0}",exception.ToString()));
}
}
public override bool CanPersist()
{
return true;
}
public ObservableCollection<DividendHistoryItem> AllDividendHistory
{
get;
private set;
}
public bool BusyIndicator
{
get { return busyIndicator; }
set
{
busyIndicator = value;
base.OnPropertyChanged("BusyIndicator");
}
}
private void OnDividendHistoryViewModelPropertyChanged(object sender, PropertyChangedEventArgs eventArgs)
{
if (eventArgs.PropertyName.Equals("SelectedSymbol") && null != symbol)
{
BusyIndicator = true;
Task workerTask = Task.Factory.StartNew(() =>
{
base.DisplayName = "Dividend History (" + symbol + ")";
base.OnPropertyChanged("DisplayName");
String companyName = PricingDA.GetNameForSymbol(symbol);
selectedCompanyName = PricingDA.GetNameForSymbol(symbol);
List<PriceModel> priceModels = new List<PriceModel>();
List<PriceModel> priceModelList = priceModels.ToList();
DividendHistory dividendHistory=DividendHistoryDA.GetDividendHistory(symbol);
if(null!=dividendHistory && 0!=dividendHistory.Count)
this.AllDividendHistory = new ObservableCollection<DividendHistoryItem>(dividendHistory);
else this.AllDividendHistory = new ObservableCollection<DividendHistoryItem>();
});
workerTask.ContinueWith((continuation) =>
{
BusyIndicator = false;
base.OnPropertyChanged("AllDividendHistory");
base.OnPropertyChanged("Title");
});
}
else if (eventArgs.PropertyName.Equals("SelectedWatchList"))
{
// if (selectedWatchList.Equals(Constants.CONST_ALL)) symbols = PricingDA.GetSymbols();
if (selectedWatchList.Equals(Constants.CONST_ALL)) symbols = SymbolCache.GetInstance().GetSymbols();
else symbols = WatchListDA.GetWatchList(selectedWatchList);
base.OnPropertyChanged("Symbols");
}
}
public override String Title
{
get
{
if (null != selectedCompanyName && null!=symbol) return selectedCompanyName+" ("+symbol+")";
return null;
}
}
public List<String> WatchListNames
{
get
{
return watchLists;
}
set { ;}
}
public String SelectedWatchList
{
get { return selectedWatchList; }
set { selectedWatchList = value; base.OnPropertyChanged("SelectedWatchList"); }
}
public List<String> Symbols
{
get
{
return symbols;
}
}
public String SelectedSymbol
{
get { return symbol; }
set
{
if (value == symbol || String.IsNullOrEmpty(value)) return;
symbol = value;
base.OnPropertyChanged("SelectedSymbol");
}
}
private void Refresh()
{
base.OnPropertyChanged("SelectedSymbol");
}
public ICommand RefreshCommand
{
get
{
if (refreshCommand == null)
{
refreshCommand = new RelayCommand(param => this.Refresh(), param => { return true; });
}
return refreshCommand;
}
}
public void GetLatestDivExDates()
{
BusyIndicator = true;
Task workerTask = Task.Factory.StartNew(() =>
{
List<DivExDateItem> divExDates = DividendHistoryDA.GetLatestDivExDates();
DividendHistory dividendHistory = DividendHistoryDA.GetDividendHistory(divExDates);
if (null != dividendHistory && 0 != dividendHistory.Count)
this.AllDividendHistory = new ObservableCollection<DividendHistoryItem>(dividendHistory);
});
workerTask.ContinueWith((continuation) =>
{
BusyIndicator = false;
base.OnPropertyChanged("AllDividendHistory");
});
}
public ICommand GetLatestDivExDatesCommand
{
get
{
if (getLatestDivExDatesCommand == null)
{
getLatestDivExDatesCommand = new RelayCommand(param => this.GetLatestDivExDates(), param => { return true; });
}
return getLatestDivExDatesCommand;
}
}
}
}