Initial Commit
This commit is contained in:
185
PortfolioManager/Dialogs/ClosePositionDialogViewModel.cs
Normal file
185
PortfolioManager/Dialogs/ClosePositionDialogViewModel.cs
Normal file
@@ -0,0 +1,185 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Rendering.Composition;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using MarketData;
|
||||
using MarketData.DataAccess;
|
||||
using MarketData.Generator.Interface;
|
||||
using MarketData.MarketDataModel;
|
||||
using MarketData.Utils;
|
||||
using PortfolioManager.ViewModels;
|
||||
|
||||
namespace PortfolioManager.Dialogs
|
||||
{
|
||||
public partial class ClosePositionDialogViewModel : DialogViewModelBase
|
||||
{
|
||||
// private IPosition sourcePosition;
|
||||
private IPurePosition sourcePosition;
|
||||
private String message = String.Empty;
|
||||
private bool okEnabled = false;
|
||||
|
||||
public ClosePositionDialogViewModel(Window dialogWindow, IPurePosition clonedPosition)
|
||||
: base(dialogWindow)
|
||||
{
|
||||
sourcePosition = clonedPosition;
|
||||
if (Utility.IsEpoch(sourcePosition.SellDate))
|
||||
{
|
||||
sourcePosition.SellDate = DateTime.Now;
|
||||
}
|
||||
OkEnabled = Validate();
|
||||
DisplayName = "Close Position";
|
||||
}
|
||||
|
||||
public String Symbol
|
||||
{
|
||||
get { return sourcePosition.Symbol; }
|
||||
}
|
||||
|
||||
public String CompanyName
|
||||
{
|
||||
get
|
||||
{
|
||||
CompanyProfile companyProfile = CompanyProfileDA.GetCompanyProfile(sourcePosition.Symbol);
|
||||
return companyProfile.CompanyName;
|
||||
}
|
||||
}
|
||||
|
||||
public String PurchaseDate
|
||||
{
|
||||
get
|
||||
{
|
||||
return sourcePosition.PurchaseDate.ToShortDateString();
|
||||
}
|
||||
}
|
||||
|
||||
public String SellDate
|
||||
{
|
||||
get
|
||||
{
|
||||
return sourcePosition.SellDate.ToShortDateString();
|
||||
}
|
||||
set
|
||||
{
|
||||
try
|
||||
{
|
||||
sourcePosition.SellDate = Utility.ParseDate(value);
|
||||
base.OnPropertyChanged("SellDate");
|
||||
OkEnabled = Validate();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Message = "SellDate must be a valid date.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String SellPrice
|
||||
{
|
||||
get
|
||||
{
|
||||
return Utility.FormatCurrency(sourcePosition.CurrentPrice, 3);
|
||||
}
|
||||
set
|
||||
{
|
||||
try
|
||||
{
|
||||
sourcePosition.CurrentPrice = Utility.ParseCurrency(value);
|
||||
base.OnPropertyChanged("SellPrice");
|
||||
OkEnabled = Validate();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Message = "Sell price must be a valid number.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand(CanExecute =nameof(Validate))]
|
||||
public async Task OkButtonClick()
|
||||
{
|
||||
IsSuccess = true;
|
||||
await Close();
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
public async Task CancelButtonClick()
|
||||
{
|
||||
await Close();
|
||||
}
|
||||
|
||||
public IPurePosition GetResult()
|
||||
{
|
||||
return sourcePosition;
|
||||
}
|
||||
|
||||
public String Message
|
||||
{
|
||||
get
|
||||
{
|
||||
return message;
|
||||
}
|
||||
set
|
||||
{
|
||||
message = value;
|
||||
base.OnPropertyChanged("Message");
|
||||
}
|
||||
}
|
||||
|
||||
public void SetMessage(String message)
|
||||
{
|
||||
Message = message;
|
||||
}
|
||||
|
||||
public bool OkEnabled
|
||||
{
|
||||
get
|
||||
{
|
||||
return okEnabled;
|
||||
}
|
||||
set
|
||||
{
|
||||
okEnabled = value;
|
||||
base.OnPropertyChanged("OkEnabled");
|
||||
}
|
||||
}
|
||||
|
||||
private bool Validate()
|
||||
{
|
||||
DateGenerator dateGenerator = new DateGenerator();
|
||||
if (null == Symbol)
|
||||
{
|
||||
SetMessage("Invalid Symbol.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Utility.IsEpoch(sourcePosition.PurchaseDate))
|
||||
{
|
||||
SetMessage("Invalid Purchase Date.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Utility.IsEpoch(sourcePosition.SellDate))
|
||||
{
|
||||
SetMessage("Invalid Sell Date.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!dateGenerator.IsMarketOpen(sourcePosition.SellDate))
|
||||
{
|
||||
SetMessage("Market closed on Sell Date.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (double.IsNaN(sourcePosition.CurrentPrice))
|
||||
{
|
||||
SetMessage("Invalid Sell Price.");
|
||||
return false;
|
||||
}
|
||||
|
||||
SetMessage("");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user