Dashboard Bottom Sales Overview changes
This commit is contained in:
parent
6a364c95e7
commit
bde9b98f11
|
@ -431,6 +431,31 @@ namespace Core.Main.DataObjects.PTMagicData
|
||||||
public double TotalCost { get; set; }
|
public double TotalCost { get; set; }
|
||||||
public double SoldPrice { get; set; }
|
public double SoldPrice { get; set; }
|
||||||
public double SoldValue { get; set; }
|
public double SoldValue { get; set; }
|
||||||
|
public double TotalSales { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class StatsData
|
||||||
|
{
|
||||||
|
public double SalesToday { get; set; }
|
||||||
|
public double ProfitToday { get; set; }
|
||||||
|
public double ProfitPercToday { get; set; }
|
||||||
|
public double SalesYesterday { get; set; }
|
||||||
|
public double ProfitYesterday { get; set; }
|
||||||
|
public double ProfitPercYesterday { get; set; }
|
||||||
|
public double SalesWeek { get; set; }
|
||||||
|
public double ProfitWeek { get; set; }
|
||||||
|
public double ProfitPercWeek { get; set; }
|
||||||
|
public double SalesMonth { get; set; }
|
||||||
|
public double ProfitMonth { get; set; }
|
||||||
|
public double ProfitPercMonth { get; set; }
|
||||||
|
public double TotalProfit { get; set; }
|
||||||
|
public double TotalSales { get; set; }
|
||||||
|
public double TotalProfitPerc { get; set; }
|
||||||
|
public double FundingToday { get; set; }
|
||||||
|
public double FundingYesterday { get; set; }
|
||||||
|
public double FundingWeek { get; set; }
|
||||||
|
public double FundingMonth { get; set; }
|
||||||
|
public double FundingTotal { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class PTStrategy
|
public class PTStrategy
|
||||||
|
|
|
@ -16,16 +16,22 @@ namespace Core.Main.DataObjects
|
||||||
{
|
{
|
||||||
private SummaryData _summary = null;
|
private SummaryData _summary = null;
|
||||||
private Properties _properties = null;
|
private Properties _properties = null;
|
||||||
|
private List<StatsData> _stats = null;
|
||||||
private List<SellLogData> _sellLog = new List<SellLogData>();
|
private List<SellLogData> _sellLog = new List<SellLogData>();
|
||||||
private List<DCALogData> _dcaLog = new List<DCALogData>();
|
private List<DCALogData> _dcaLog = new List<DCALogData>();
|
||||||
private List<BuyLogData> _buyLog = new List<BuyLogData>();
|
private List<BuyLogData> _buyLog = new List<BuyLogData>();
|
||||||
private string _ptmBasePath = "";
|
private string _ptmBasePath = "";
|
||||||
private PTMagicConfiguration _systemConfiguration = null;
|
private PTMagicConfiguration _systemConfiguration = null;
|
||||||
private TransactionData _transactionData = null;
|
private TransactionData _transactionData = null;
|
||||||
private DateTime _buyLogRefresh = DateTime.UtcNow, _sellLogRefresh = DateTime.UtcNow, _dcaLogRefresh = DateTime.UtcNow, _summaryRefresh = DateTime.UtcNow, _propertiesRefresh = DateTime.UtcNow;
|
private DateTime _statsRefresh = DateTime.UtcNow,_buyLogRefresh = DateTime.UtcNow, _sellLogRefresh = DateTime.UtcNow, _dcaLogRefresh = DateTime.UtcNow, _summaryRefresh = DateTime.UtcNow, _propertiesRefresh = DateTime.UtcNow;
|
||||||
private volatile object _buyLock = new object(), _sellLock = new object(), _dcaLock = new object(), _summaryLock = new object(), _propertiesLock = new object();
|
private volatile object _statsLock = new object(),_buyLock = new object(), _sellLock = new object(), _dcaLock = new object(), _summaryLock = new object(), _propertiesLock = new object();
|
||||||
private TimeSpan? _offsetTimeSpan = null;
|
private TimeSpan? _offsetTimeSpan = null;
|
||||||
|
|
||||||
|
public void DoLog(string message)
|
||||||
|
{
|
||||||
|
// Implement your logging logic here
|
||||||
|
Console.WriteLine(message);
|
||||||
|
}
|
||||||
// Constructor
|
// Constructor
|
||||||
public ProfitTrailerData(PTMagicConfiguration systemConfiguration)
|
public ProfitTrailerData(PTMagicConfiguration systemConfiguration)
|
||||||
{
|
{
|
||||||
|
@ -96,85 +102,81 @@ namespace Core.Main.DataObjects
|
||||||
return _properties;
|
return _properties;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<StatsData> Stats
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_stats == null || DateTime.UtcNow > _statsRefresh)
|
||||||
|
{
|
||||||
|
lock (_statsLock)
|
||||||
|
{
|
||||||
|
if (_stats == null || DateTime.UtcNow > _statsRefresh)
|
||||||
|
{
|
||||||
|
dynamic statsDataJson = GetDataFromProfitTrailer("/api/v2/data/stats");
|
||||||
|
JObject statsDataJObject = statsDataJson as JObject;
|
||||||
|
JObject basicSection = (JObject)statsDataJObject["basic"];
|
||||||
|
_stats = new List<StatsData> { BuildStatsData(basicSection) };
|
||||||
|
_statsRefresh = DateTime.UtcNow.AddSeconds(_systemConfiguration.GeneralSettings.Monitor.RefreshSeconds - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _stats;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<SellLogData> SellLog
|
public List<SellLogData> SellLog
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
|
||||||
if (_sellLog == null || (DateTime.UtcNow > _sellLogRefresh))
|
if (_sellLog == null || (DateTime.UtcNow > _sellLogRefresh))
|
||||||
{
|
{
|
||||||
lock (_sellLock)
|
lock (_sellLock)
|
||||||
{
|
|
||||||
// Thread double locking
|
|
||||||
if (_sellLog == null || (DateTime.UtcNow > _sellLogRefresh))
|
|
||||||
{
|
{
|
||||||
_sellLog.Clear();
|
// Thread double locking
|
||||||
|
if (_sellLog == null || (DateTime.UtcNow > _sellLogRefresh))
|
||||||
// Page through the sales data summarizing it.
|
|
||||||
bool exitLoop = false;
|
|
||||||
int pageIndex = 1;
|
|
||||||
|
|
||||||
int maxPages = _systemConfiguration.GeneralSettings.Monitor.MaxSalesRecords;
|
|
||||||
int requestedPages = 0;
|
|
||||||
|
|
||||||
while (!exitLoop && requestedPages < maxPages)
|
|
||||||
{
|
{
|
||||||
var sellDataPage = GetDataFromProfitTrailer("/api/v2/data/sales?Page=1&perPage=1&sort=SOLDDATE&sortDirection=DESCENDING&page=" + pageIndex);
|
_sellLog.Clear();
|
||||||
if (sellDataPage != null && sellDataPage.data.Count > 0)
|
|
||||||
{
|
|
||||||
// Add sales data page to collection
|
|
||||||
this.BuildSellLogData(sellDataPage);
|
|
||||||
pageIndex++;
|
|
||||||
requestedPages++;
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
// Page through the sales data summarizing it.
|
||||||
|
bool exitLoop = false;
|
||||||
|
int pageIndex = 1;
|
||||||
|
|
||||||
|
// 1 record per page to allow user to set max records to retrieve
|
||||||
|
int maxPages = _systemConfiguration.GeneralSettings.Monitor.MaxSalesRecords;
|
||||||
|
int requestedPages = 0;
|
||||||
|
|
||||||
|
while (!exitLoop && requestedPages < maxPages)
|
||||||
{
|
{
|
||||||
// All data retrieved
|
var sellDataPage = GetDataFromProfitTrailer("/api/v2/data/sales?Page=1&perPage=1&sort=SOLDDATE&sortDirection=DESCENDING&page=" + pageIndex);
|
||||||
exitLoop = true;
|
if (sellDataPage != null && sellDataPage.data.Count > 0)
|
||||||
|
{
|
||||||
|
// Add sales data page to collection
|
||||||
|
this.BuildSellLogData(sellDataPage);
|
||||||
|
pageIndex++;
|
||||||
|
requestedPages++;
|
||||||
|
Console.WriteLine($"Importing sale: {pageIndex}");
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// All data retrieved
|
||||||
|
exitLoop = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update sell log refresh time
|
||||||
|
_sellLogRefresh = DateTime.UtcNow.AddSeconds(_systemConfiguration.GeneralSettings.Monitor.RefreshSeconds -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update sell log refresh time
|
|
||||||
_sellLogRefresh = DateTime.UtcNow.AddSeconds(_systemConfiguration.GeneralSettings.Monitor.RefreshSeconds -1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return _sellLog;
|
return _sellLog;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SellLogData> SellLogToday
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return SellLog.FindAll(sl => sl.SoldDate.Date == LocalizedTime.DateTime.Date);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<SellLogData> SellLogYesterday
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return SellLog.FindAll(sl => sl.SoldDate.Date == LocalizedTime.DateTime.AddDays(-1).Date);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<SellLogData> SellLogLast7Days
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return SellLog.FindAll(sl => sl.SoldDate.Date >= LocalizedTime.DateTime.AddDays(-7).Date);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<SellLogData> SellLogLast30Days
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return SellLog.FindAll(sl => sl.SoldDate.Date >= LocalizedTime.DateTime.AddDays(-30).Date);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<DCALogData> DCALog
|
public List<DCALogData> DCALog
|
||||||
{
|
{
|
||||||
|
@ -313,15 +315,18 @@ namespace Core.Main.DataObjects
|
||||||
|
|
||||||
response.Close();
|
response.Close();
|
||||||
|
|
||||||
// Parse the JSON and build the data sets
|
|
||||||
if (!arrayReturned)
|
if (!arrayReturned)
|
||||||
{
|
{
|
||||||
return JObject.Parse(rawBody);
|
return JObject.Parse(rawBody);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return JArray.Parse(rawBody);
|
return JArray.Parse(rawBody);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private SummaryData BuildSummaryData(dynamic PTData)
|
private SummaryData BuildSummaryData(dynamic PTData)
|
||||||
|
@ -349,6 +354,32 @@ namespace Core.Main.DataObjects
|
||||||
BaseUrl = PTProperties.baseUrl
|
BaseUrl = PTProperties.baseUrl
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
private StatsData BuildStatsData(dynamic statsDataJson)
|
||||||
|
{
|
||||||
|
return new StatsData()
|
||||||
|
{
|
||||||
|
SalesToday = statsDataJson["totalSalesToday"],
|
||||||
|
ProfitToday = statsDataJson["totalProfitToday"],
|
||||||
|
ProfitPercToday = statsDataJson["totalProfitPercToday"],
|
||||||
|
SalesYesterday = statsDataJson["totalSalesYesterday"],
|
||||||
|
ProfitYesterday = statsDataJson["totalProfitYesterday"],
|
||||||
|
ProfitPercYesterday = statsDataJson["totalProfitPercYesterday"],
|
||||||
|
SalesWeek = statsDataJson["totalSalesWeek"],
|
||||||
|
ProfitWeek = statsDataJson["totalProfitWeek"],
|
||||||
|
ProfitPercWeek = statsDataJson["totalProfitPercWeek"],
|
||||||
|
SalesMonth = statsDataJson["totalSalesThisMonth"],
|
||||||
|
ProfitMonth = statsDataJson["totalProfitThisMonth"],
|
||||||
|
ProfitPercMonth = statsDataJson["totalProfitPercThisMonth"],
|
||||||
|
TotalProfit = statsDataJson["totalProfit"],
|
||||||
|
TotalSales = statsDataJson["totalSales"],
|
||||||
|
TotalProfitPerc = statsDataJson["totalProfitPerc"],
|
||||||
|
FundingToday = statsDataJson["totalFundingToday"],
|
||||||
|
FundingYesterday = statsDataJson["totalFundingYesterday"],
|
||||||
|
FundingWeek = statsDataJson["totalFundingWeek"],
|
||||||
|
FundingMonth = statsDataJson["totalFundingThisMonth"],
|
||||||
|
FundingTotal = statsDataJson["totalFunding"]
|
||||||
|
};
|
||||||
|
}
|
||||||
private void BuildSellLogData(dynamic rawSellLogData)
|
private void BuildSellLogData(dynamic rawSellLogData)
|
||||||
{
|
{
|
||||||
foreach (var rsld in rawSellLogData.data)
|
foreach (var rsld in rawSellLogData.data)
|
||||||
|
|
|
@ -62,7 +62,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6 px-1">
|
<div class="col-md-5 px-1">
|
||||||
<div class="card-box px-2">
|
<div class="card-box px-2">
|
||||||
<div class="cdev" data-percent="100" data-duration="@Html.Raw(@Model.PTMagicConfiguration.GeneralSettings.Monitor.RefreshSeconds * 1000)" data-color="#aaa,#414d59"></div>
|
<div class="cdev" data-percent="100" data-duration="@Html.Raw(@Model.PTMagicConfiguration.GeneralSettings.Monitor.RefreshSeconds * 1000)" data-color="#aaa,#414d59"></div>
|
||||||
<br>
|
<br>
|
||||||
|
@ -113,46 +113,56 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-6 px-1">
|
<div class="col-md-7 px-1">
|
||||||
<div class="card-box px-2">
|
<div class="card-box px-2">
|
||||||
<div class="cdev" data-percent="100" data-duration="@Html.Raw(@Model.PTMagicConfiguration.GeneralSettings.Monitor.RefreshSeconds * 1000)" data-color="#aaa,#414d59"></div>
|
<div class="cdev" data-percent="100" data-duration="@Html.Raw(@Model.PTMagicConfiguration.GeneralSettings.Monitor.RefreshSeconds * 1000)" data-color="#aaa,#414d59"></div>
|
||||||
<br>
|
<br>
|
||||||
<h4 class="m-t-0 m-b-20 header-title"><b>Sales Overview</b><small class="pull-right"><a href="@Html.Raw(Model.PTMagicConfiguration.GeneralSettings.Monitor.RootUrl)SalesAnalyzer">more</a></small></h4>
|
<h4 class="m-t-0 m-b-20 header-title"><b>Sales Overview</b><small class="pull-right"><a href="@Html.Raw(Model.PTMagicConfiguration.GeneralSettings.Monitor.RootUrl)SalesAnalyzer">more</a></small></h4>
|
||||||
@{
|
@{
|
||||||
|
|
||||||
double totalProfit = 0;
|
|
||||||
totalProfit = Model.PTData.SellLog.Sum(s => s.Profit);
|
|
||||||
double totalProfitFiat = Math.Round(totalProfit * Model.Summary.MainMarketPrice, 2);
|
|
||||||
double percentGain = Math.Round(totalProfit / Model.PTMagicConfiguration.GeneralSettings.Application.StartBalance * 100, 2);
|
|
||||||
string percentGainText = percentGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")) + "%";
|
|
||||||
if (Model.PTData.TransactionData.Transactions.Count > 0)
|
|
||||||
{
|
|
||||||
percentGainText = "<i class=\"fa fa-info-circle text-muted\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"You have added at least one manual transaction, so the total gain percentage cannot be calculated.\"></i>";
|
|
||||||
}
|
|
||||||
|
|
||||||
double todaysProfit = 0;
|
var overviewStats = Model.StatsData.FirstOrDefault(); // todaysStats is a new variable
|
||||||
todaysProfit = Model.PTData.SellLogToday.Sum(s => s.Profit);
|
|
||||||
double todaysStartBalance = Model.PTData.GetSnapshotBalance(Model.DateTimeNow.DateTime);
|
var todaysSales = overviewStats.SalesToday;
|
||||||
double todaysProfitFiat = Math.Round(todaysProfit * Model.Summary.MainMarketPrice, 2);
|
var todaysProfit = overviewStats.ProfitToday;
|
||||||
double todaysPercentGain = Math.Round(todaysProfit / todaysStartBalance * 100, 2);
|
var todaysFunding = overviewStats.FundingToday;
|
||||||
|
var todaysPercentGain = overviewStats.ProfitPercToday;
|
||||||
|
var todaysFundingGain = todaysPercentGain * ((todaysProfit - todaysFunding) / todaysProfit);
|
||||||
|
|
||||||
|
|
||||||
|
var yesterdaysSales = overviewStats.SalesYesterday;
|
||||||
|
var yesterdaysProfit = overviewStats.ProfitYesterday;
|
||||||
|
var yesterdaysFunding = overviewStats.FundingYesterday;
|
||||||
|
var yesterdaysPercentGain = overviewStats.ProfitPercYesterday;
|
||||||
|
var yesterdaysFundingGain = yesterdaysPercentGain * ((yesterdaysProfit + yesterdaysFunding) / yesterdaysProfit);
|
||||||
|
|
||||||
|
var last7DaysSales = overviewStats.SalesWeek;
|
||||||
|
var last7DaysProfit = overviewStats.ProfitWeek;
|
||||||
|
var last7DaysFunding = overviewStats.FundingWeek;
|
||||||
|
var last7DaysPercentGain = overviewStats.ProfitPercWeek;
|
||||||
|
var last7DaysFundingGain = last7DaysPercentGain * ((last7DaysProfit + last7DaysFunding) / last7DaysProfit);
|
||||||
|
|
||||||
|
var last30DaysSales = overviewStats.SalesMonth;
|
||||||
|
var last30DaysProfit = overviewStats.ProfitMonth;
|
||||||
|
var last30DaysFunding = overviewStats.FundingMonth;
|
||||||
|
var last30DaysPercentGain = overviewStats.ProfitPercMonth;
|
||||||
|
var last30DaysFundingGain = last30DaysPercentGain * ((last30DaysProfit + last30DaysFunding) / last30DaysProfit);
|
||||||
|
|
||||||
|
var totalSales = overviewStats.TotalSales;
|
||||||
|
var totalProfit = overviewStats.TotalProfit;
|
||||||
|
var totalFunding = overviewStats.FundingTotal;
|
||||||
|
var totalProfitPercent = overviewStats.TotalProfitPerc;
|
||||||
|
var totalFundingGain = totalProfitPercent * ((totalProfit + totalFunding) / totalProfit);
|
||||||
|
|
||||||
|
double todaysProfitFiat = Math.Round((todaysProfit + todaysFunding) * Model.Summary.MainMarketPrice, 2);
|
||||||
|
double yesterdaysProfitFiat = Math.Round((yesterdaysProfit + yesterdaysFunding) * Model.Summary.MainMarketPrice, 2);
|
||||||
|
double last7DaysProfitFiat = Math.Round((last7DaysProfit + last7DaysFunding) * Model.Summary.MainMarketPrice, 2);
|
||||||
|
double last30DaysProfitFiat = Math.Round((last30DaysProfit + last30DaysFunding) * Model.Summary.MainMarketPrice, 2);
|
||||||
|
double totalProfitFiat = Math.Round((totalProfit + totalFunding) * Model.Summary.MainMarketPrice, 2);
|
||||||
|
|
||||||
|
|
||||||
double yesterdaysProfit = 0;
|
|
||||||
yesterdaysProfit = Model.PTData.SellLogYesterday.Sum(s => s.Profit);
|
|
||||||
double yesterdaysStartBalance = Model.PTData.GetSnapshotBalance(Model.DateTimeNow.DateTime.AddDays(-1));
|
|
||||||
double yesterdaysProfitFiat = Math.Round(yesterdaysProfit * Model.Summary.MainMarketPrice, 2);
|
|
||||||
double yesterdaysPercentGain = Math.Round(yesterdaysProfit / yesterdaysStartBalance * 100, 2);
|
|
||||||
|
|
||||||
double last7DaysProfit = 0;
|
|
||||||
last7DaysProfit = Model.PTData.SellLogLast7Days.Sum(s => s.Profit);
|
|
||||||
double last7DaysStartBalance = Model.PTData.GetSnapshotBalance(Model.DateTimeNow.DateTime.AddDays(-7));
|
|
||||||
double last7DaysProfitFiat = Math.Round(last7DaysProfit * Model.Summary.MainMarketPrice, 2);
|
|
||||||
double last7DaysPercentGain = Math.Round(last7DaysProfit / last7DaysStartBalance * 100, 2);
|
|
||||||
|
|
||||||
double last30DaysProfit = 0;
|
|
||||||
last30DaysProfit = Model.PTData.SellLogLast30Days.Sum(s => s.Profit);
|
|
||||||
double last30DaysStartBalance = Model.PTData.GetSnapshotBalance(Model.DateTimeNow.DateTime.AddDays(-30));
|
|
||||||
double last30DaysProfitFiat = Math.Round(last30DaysProfit * Model.Summary.MainMarketPrice, 2);
|
|
||||||
double last30DaysPercentGain = Math.Round(last30DaysProfit / last30DaysStartBalance * 100, 2);
|
|
||||||
}
|
}
|
||||||
<table class="table table-sm">
|
<table class="table table-sm">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -160,45 +170,51 @@
|
||||||
<th></th>
|
<th></th>
|
||||||
<th class="text-right">Sales</th>
|
<th class="text-right">Sales</th>
|
||||||
<th class="text-right">Profit @Model.Summary.MainMarket</th>
|
<th class="text-right">Profit @Model.Summary.MainMarket</th>
|
||||||
<th class="text-right">Profit @Model.Summary.MainFiatCurrency</th>
|
<th class="text-right">Funding</th>
|
||||||
|
<th class="text-right">@Model.Summary.MainFiatCurrency</th>
|
||||||
<th class="text-right">Gain</th>
|
<th class="text-right">Gain</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Today</th>
|
<th>Today</th>
|
||||||
<td class="text-right">@Model.PTData.SellLogToday.Count</td>
|
<td class="text-right">@overviewStats.SalesToday</td>
|
||||||
<td class="text-right text-autocolor">@todaysProfit.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
<td class="text-right text-autocolor">@todaysProfit.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
||||||
<td class="text-right text-autocolor">@Html.Raw(Model.MainFiatCurrencySymbol + todaysProfitFiat.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")))</td>
|
<td class="text-right text-autocolor">@todaysFunding.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
||||||
<td class="text-right text-autocolor">@todaysPercentGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%</td>
|
<td class="text-right text-autocolor">@Html.Raw(todaysProfitFiat.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")))</td>
|
||||||
|
<td class="text-right text-autocolor">@todaysFundingGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Yesterday</th>
|
<th>Yesterday</th>
|
||||||
<td class="text-right">@Model.PTData.SellLogYesterday.Count</td>
|
<td class="text-right">@yesterdaysSales</td>
|
||||||
<td class="text-right text-autocolor">@yesterdaysProfit.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
<td class="text-right text-autocolor">@yesterdaysProfit.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
||||||
<td class="text-right text-autocolor">@Html.Raw(Model.MainFiatCurrencySymbol + yesterdaysProfitFiat.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")))</td>
|
<td class="text-right text-autocolor">@yesterdaysFunding.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
||||||
<td class="text-right text-autocolor">@yesterdaysPercentGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%</td>
|
<td class="text-right text-autocolor">@Html.Raw(yesterdaysProfitFiat.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")))</td>
|
||||||
|
<td class="text-right text-autocolor">@yesterdaysFundingGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Last 7 Days</th>
|
<th>Last 7 Days</th>
|
||||||
<td class="text-right">@Model.PTData.SellLogLast7Days.Count</td>
|
<td class="text-right">@last7DaysSales</td>
|
||||||
<td class="text-right text-autocolor">@last7DaysProfit.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
<td class="text-right text-autocolor">@last7DaysProfit.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
||||||
<td class="text-right text-autocolor">@Html.Raw(Model.MainFiatCurrencySymbol + last7DaysProfitFiat.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")))</td>
|
<td class="text-right text-autocolor">@last7DaysFunding.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
||||||
<td class="text-right text-autocolor">@last7DaysPercentGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%</td>
|
<td class="text-right text-autocolor">@Html.Raw(last7DaysProfitFiat.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")))</td>
|
||||||
|
<td class="text-right text-autocolor">@last7DaysFundingGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Last 30 Days</th>
|
<th>Last 30 Days</th>
|
||||||
<td class="text-right">@Model.PTData.SellLogLast30Days.Count</td>
|
<td class="text-right">@last30DaysSales</td>
|
||||||
<td class="text-right text-autocolor">@last30DaysProfit.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
<td class="text-right text-autocolor">@last30DaysProfit.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
||||||
<td class="text-right text-autocolor">@Html.Raw(Model.MainFiatCurrencySymbol + last30DaysProfitFiat.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")))</td>
|
<td class="text-right text-autocolor">@last30DaysFunding.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
||||||
<td class="text-right text-autocolor">@last30DaysPercentGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%</td>
|
<td class="text-right text-autocolor">@Html.Raw(last30DaysProfitFiat.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")))</td>
|
||||||
|
<td class="text-right text-autocolor">@last30DaysFundingGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Total</th>
|
<th>Total</th>
|
||||||
<td class="text-right">@Model.PTData.SellLog.Count</td>
|
<td class="text-right">@totalSales</td>
|
||||||
<td class="text-right text-autocolor">@totalProfit.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
<td class="text-right text-autocolor">@totalProfit.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
||||||
<td class="text-right text-autocolor">@Html.Raw(Model.MainFiatCurrencySymbol + totalProfitFiat.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")))</td>
|
<td class="text-right text-autocolor">@totalFunding.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))</td>
|
||||||
<td class="text-right text-autocolor">@Html.Raw(percentGainText)</td>
|
<td class="text-right text-autocolor">@Html.Raw(totalProfitFiat.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")))</td>
|
||||||
|
<td class="text-right text-autocolor">@totalFundingGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -13,6 +13,7 @@ namespace Monitor.Pages
|
||||||
public class DashboardBottomModel : _Internal.BasePageModelSecureAJAX
|
public class DashboardBottomModel : _Internal.BasePageModelSecureAJAX
|
||||||
{
|
{
|
||||||
public ProfitTrailerData PTData = null;
|
public ProfitTrailerData PTData = null;
|
||||||
|
public List<StatsData> StatsData { get; set; }
|
||||||
public List<MarketTrend> MarketTrends { get; set; } = new List<MarketTrend>();
|
public List<MarketTrend> MarketTrends { get; set; } = new List<MarketTrend>();
|
||||||
public string TrendChartDataJSON = "";
|
public string TrendChartDataJSON = "";
|
||||||
public string ProfitChartDataJSON = "";
|
public string ProfitChartDataJSON = "";
|
||||||
|
@ -26,12 +27,14 @@ namespace Monitor.Pages
|
||||||
base.Init();
|
base.Init();
|
||||||
|
|
||||||
BindData();
|
BindData();
|
||||||
|
|
||||||
BuildAssetDistributionData();
|
BuildAssetDistributionData();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BindData()
|
private void BindData()
|
||||||
{
|
{
|
||||||
PTData = this.PtDataObject;
|
PTData = this.PtDataObject;
|
||||||
|
StatsData = this.PTData.Stats;
|
||||||
|
|
||||||
// Cleanup temp files
|
// Cleanup temp files
|
||||||
FileHelper.CleanupFilesMinutes(PTMagicMonitorBasePath + "wwwroot" + System.IO.Path.DirectorySeparatorChar + "assets" + System.IO.Path.DirectorySeparatorChar + "tmp" + System.IO.Path.DirectorySeparatorChar, 5);
|
FileHelper.CleanupFilesMinutes(PTMagicMonitorBasePath + "wwwroot" + System.IO.Path.DirectorySeparatorChar + "assets" + System.IO.Path.DirectorySeparatorChar + "tmp" + System.IO.Path.DirectorySeparatorChar, 5);
|
||||||
|
|
Loading…
Reference in New Issue