Mam portal internetowy, parsujący API, do adresu URL strony internetowej, gdzie przechodzi przez JSON.Miesięczne, codzienne, miesięczne czynności pomocnicze + metody modelowania
Dane te są konfigurowane za pomocą wykresów i obecnie za pomocą flot.js
Kod dla hourlyData już tam jest i zostanie podłączony do wykresów JSON.
Próbuję odtworzyć to dla miesięcznego i rocznego.
Kod prądu hourlyData wygląda następująco:
List<dynamic> hourlyData = new List<dynamic>();
DateTime hourIterator = StartDate.Value;
while (hourIterator.Hour <= ddvm.CurrentHour)
{
if (ddvm.HourlyPaymentTotal != null && ddvm.HourlyPaymentTotal.Count() > 0)
{
HourlyPaymentTotalModel hour = ddvm.HourlyPaymentTotal.FirstOrDefault(hpt => hpt.DateTimeStamp == hourIterator);
if (hour == null) { hour = new HourlyPaymentTotalModel() { DateTimeStamp = hourIterator }; };
hourlyData.Add(new List<dynamic> {hourIterator.Hour,
hour.Amount,
new { tooltip = String.Format("{0} : {1}", hour.Count, hour.Amount.ToString("C")) } });
}
hourIterator = hourIterator.AddHours(1);
}
ddvm.GraphData.LineChart_HourlyTotal.Add(new
{
data = hourlyData,
color = "#A1345E",
label = "Total Amount Paid"
});
Jak mogę odtworzyć hourlyData do monthlyData i yearlyData?
Edit:
public class HourlyPaymentTotalModel : ViewModelBase
{
public int Hour
{
get { return DateTimeStamp.Hour; }
set { DateTimeStamp = new DateTime(1, 1, 1, value, 0, 0); }
}
public string FormattedHour
{
get { return DateTimeStamp.ToShortTimeString().Replace(":00 ", ""); }
set { DateTimeStamp = DateTime.Parse(value); }
}
public DateTime DateTimeStamp { get; set; }
public decimal Amount { get; set; }
public int Count { get; set; }
}
}
To z roztworu API:
public IQueryable<PaymentSummary> GetHourlyPaymentTotals(DateTime startDate, DateTime endDate, string PaymentProcessor = null, string merchantID=null)
{
transactionRepository = GetTransactionRepository(PaymentProcessor);
IQueryable<IPayment> allPayments = transactionRepository.GetAllPayments(startDate, endDate, merchantID);
var retVal = from ap in allPayments
group ap by new
{
PaymentDateYear = ap.PaymentDate.Value.Year,
PaymentDateMonth = ap.PaymentDate.Value.Month,
PaymentDateDay = ap.PaymentDate.Value.Day,
PaymentDateHour = ap.PaymentDate.Value.Hour
}
into grp_ap
select (new
{
PaymentDateString = grp_ap.Key.PaymentDateMonth.ToString() + "/" + grp_ap.Key.PaymentDateDay.ToString() + "/" + grp_ap.Key.PaymentDateYear.ToString() + " " + grp_ap.Key.PaymentDateHour + ":00",
Amount = grp_ap.Sum(grp => grp.Amount),
Count = grp_ap.Count()
});
return (IQueryable<PaymentSummary>)retVal.ToList().Select(p => new PaymentSummary()
{
PaymentDate = (DateTime?)DateTime.Parse(p.PaymentDateString),
Amount = p.Amount,
Count = p.Count
}).ToList().AsQueryable();
}
Aktualizacja: I stworzył kolejne modele oparte na rozwiązaniu Mairaj Ahmad proponowanej. Używa modelu dailyData.
Nadal nie jestem pewien, dlaczego <canvas>
pokazuje puste pole pod polami mojego wykresu. Jest to prawdopodobnie błąd z danymi lub opcjami flot.js wykonanymi na określonych wykresach.
var area_chart_payment_by_day_options = {
series: {
lines: {
show: true,
fill: .5
},
points: { show: true }
},
grid: {
borderWidth: 0,
hoverable: true
},
tooltip: true,
tooltipOpts: {
content: "%x : $ %y"
},
xaxis: {
//mode: "categories",
tickDecimals: 0,
min:1,
max:31
},
yaxis: {
tickFormatter: function (y) { return "$ " + y + " "; },
tickDecimals:0
}
}
funkcja dane
$(function() {
var data = [];
@Html.Raw("data = " + Json.Encode(Model.GraphData.LineChart_DailyTotal) + ";"); //TODO: LineChart_Daily
$.plot($("#area_chart_payment_by_day"), area_chart_payment_by_day,
funkcja aktualizacji
$.plot($("#area_chart_payment_by_day"), area_chart_payment_by_day, area_chart_payment_by_day_options);
można pokazać nam twoje modele? Czy istnieje jakikolwiek powód, dla którego mógłbyś pogrupować po godzinie i zaciekawić sumę kwoty pomiędzy tymi czasami? – Justin
edytuj dodane, daty są zgrupowane w modelu godziny, w którym znajduje się rozwiązanie API. – teachtyler
Czy używasz [tag: asp.net-mvc]? –