| POST,OPTIONS | /v1/dashboard/finance |
|---|
import 'package:servicestack/servicestack.dart';
class DashboardStatTile implements IConvertible
{
String? Key;
String? Label;
double? Value;
double? PreviousValue;
String? Unit;
double? DeltaPct;
DashboardStatTile({this.Key,this.Label,this.Value,this.PreviousValue,this.Unit,this.DeltaPct});
DashboardStatTile.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Key = json['Key'];
Label = json['Label'];
Value = JsonConverters.toDouble(json['Value']);
PreviousValue = JsonConverters.toDouble(json['PreviousValue']);
Unit = json['Unit'];
DeltaPct = JsonConverters.toDouble(json['DeltaPct']);
return this;
}
Map<String, dynamic> toJson() => {
'Key': Key,
'Label': Label,
'Value': Value,
'PreviousValue': PreviousValue,
'Unit': Unit,
'DeltaPct': DeltaPct
};
getTypeName() => "DashboardStatTile";
TypeContext? context = _ctx;
}
class DashboardSeriesPoint implements IConvertible
{
String? Label;
double? Value;
DashboardSeriesPoint({this.Label,this.Value});
DashboardSeriesPoint.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Label = json['Label'];
Value = JsonConverters.toDouble(json['Value']);
return this;
}
Map<String, dynamic> toJson() => {
'Label': Label,
'Value': Value
};
getTypeName() => "DashboardSeriesPoint";
TypeContext? context = _ctx;
}
class DashboardSeries implements IConvertible
{
String? Name;
List<DashboardSeriesPoint>? Points = [];
DashboardSeries({this.Name,this.Points});
DashboardSeries.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Name = json['Name'];
Points = JsonConverters.fromJson(json['Points'],'List<DashboardSeriesPoint>',context!);
return this;
}
Map<String, dynamic> toJson() => {
'Name': Name,
'Points': JsonConverters.toJson(Points,'List<DashboardSeriesPoint>',context!)
};
getTypeName() => "DashboardSeries";
TypeContext? context = _ctx;
}
class FinanceLocationRow implements IConvertible
{
String? LocationName;
double? ServiceRev;
double? ProductRev;
double? SubscriptionRev;
double? Total;
FinanceLocationRow({this.LocationName,this.ServiceRev,this.ProductRev,this.SubscriptionRev,this.Total});
FinanceLocationRow.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
LocationName = json['LocationName'];
ServiceRev = JsonConverters.toDouble(json['ServiceRev']);
ProductRev = JsonConverters.toDouble(json['ProductRev']);
SubscriptionRev = JsonConverters.toDouble(json['SubscriptionRev']);
Total = JsonConverters.toDouble(json['Total']);
return this;
}
Map<String, dynamic> toJson() => {
'LocationName': LocationName,
'ServiceRev': ServiceRev,
'ProductRev': ProductRev,
'SubscriptionRev': SubscriptionRev,
'Total': Total
};
getTypeName() => "FinanceLocationRow";
TypeContext? context = _ctx;
}
class FinanceTopRow implements IConvertible
{
String? Name;
double? Revenue;
FinanceTopRow({this.Name,this.Revenue});
FinanceTopRow.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Name = json['Name'];
Revenue = JsonConverters.toDouble(json['Revenue']);
return this;
}
Map<String, dynamic> toJson() => {
'Name': Name,
'Revenue': Revenue
};
getTypeName() => "FinanceTopRow";
TypeContext? context = _ctx;
}
class FinanceSubscriptionInfo implements IConvertible
{
double? Mrr;
double? Arr;
int? ActiveCount;
int? NewCount;
int? ChurnedCount;
double? ChurnRatePct;
FinanceSubscriptionInfo({this.Mrr,this.Arr,this.ActiveCount,this.NewCount,this.ChurnedCount,this.ChurnRatePct});
FinanceSubscriptionInfo.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Mrr = JsonConverters.toDouble(json['Mrr']);
Arr = JsonConverters.toDouble(json['Arr']);
ActiveCount = json['ActiveCount'];
NewCount = json['NewCount'];
ChurnedCount = json['ChurnedCount'];
ChurnRatePct = JsonConverters.toDouble(json['ChurnRatePct']);
return this;
}
Map<String, dynamic> toJson() => {
'Mrr': Mrr,
'Arr': Arr,
'ActiveCount': ActiveCount,
'NewCount': NewCount,
'ChurnedCount': ChurnedCount,
'ChurnRatePct': ChurnRatePct
};
getTypeName() => "FinanceSubscriptionInfo";
TypeContext? context = _ctx;
}
class FinanceResponse implements IConvertible
{
ResponseStatus? ResponseStatus;
List<DashboardStatTile>? Stats = [];
List<DashboardSeries>? Trend = [];
DashboardSeries? SourceMix;
List<FinanceLocationRow>? ByLocation = [];
List<FinanceTopRow>? TopServices = [];
List<FinanceTopRow>? TopProducts = [];
FinanceSubscriptionInfo? Subscriptions;
FinanceResponse({this.ResponseStatus,this.Stats,this.Trend,this.SourceMix,this.ByLocation,this.TopServices,this.TopProducts,this.Subscriptions});
FinanceResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!);
Stats = JsonConverters.fromJson(json['Stats'],'List<DashboardStatTile>',context!);
Trend = JsonConverters.fromJson(json['Trend'],'List<DashboardSeries>',context!);
SourceMix = JsonConverters.fromJson(json['SourceMix'],'DashboardSeries',context!);
ByLocation = JsonConverters.fromJson(json['ByLocation'],'List<FinanceLocationRow>',context!);
TopServices = JsonConverters.fromJson(json['TopServices'],'List<FinanceTopRow>',context!);
TopProducts = JsonConverters.fromJson(json['TopProducts'],'List<FinanceTopRow>',context!);
Subscriptions = JsonConverters.fromJson(json['Subscriptions'],'FinanceSubscriptionInfo',context!);
return this;
}
Map<String, dynamic> toJson() => {
'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!),
'Stats': JsonConverters.toJson(Stats,'List<DashboardStatTile>',context!),
'Trend': JsonConverters.toJson(Trend,'List<DashboardSeries>',context!),
'SourceMix': JsonConverters.toJson(SourceMix,'DashboardSeries',context!),
'ByLocation': JsonConverters.toJson(ByLocation,'List<FinanceLocationRow>',context!),
'TopServices': JsonConverters.toJson(TopServices,'List<FinanceTopRow>',context!),
'TopProducts': JsonConverters.toJson(TopProducts,'List<FinanceTopRow>',context!),
'Subscriptions': JsonConverters.toJson(Subscriptions,'FinanceSubscriptionInfo',context!)
};
getTypeName() => "FinanceResponse";
TypeContext? context = _ctx;
}
class FinanceRequest implements IConvertible
{
DateTime? FromDate;
DateTime? ToDate;
List<String>? LocationIds = [];
FinanceRequest({this.FromDate,this.ToDate,this.LocationIds});
FinanceRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
FromDate = JsonConverters.fromJson(json['FromDate'],'DateTime',context!);
ToDate = JsonConverters.fromJson(json['ToDate'],'DateTime',context!);
LocationIds = JsonConverters.fromJson(json['LocationIds'],'List<String>',context!);
return this;
}
Map<String, dynamic> toJson() => {
'FromDate': JsonConverters.toJson(FromDate,'DateTime',context!),
'ToDate': JsonConverters.toJson(ToDate,'DateTime',context!),
'LocationIds': JsonConverters.toJson(LocationIds,'List<String>',context!)
};
getTypeName() => "FinanceRequest";
TypeContext? context = _ctx;
}
TypeContext _ctx = TypeContext(library: 'api.dev.dynamics.trendsic.com', types: <String, TypeInfo> {
'DashboardStatTile': TypeInfo(TypeOf.Class, create:() => DashboardStatTile()),
'DashboardSeriesPoint': TypeInfo(TypeOf.Class, create:() => DashboardSeriesPoint()),
'DashboardSeries': TypeInfo(TypeOf.Class, create:() => DashboardSeries()),
'List<DashboardSeriesPoint>': TypeInfo(TypeOf.Class, create:() => <DashboardSeriesPoint>[]),
'FinanceLocationRow': TypeInfo(TypeOf.Class, create:() => FinanceLocationRow()),
'FinanceTopRow': TypeInfo(TypeOf.Class, create:() => FinanceTopRow()),
'FinanceSubscriptionInfo': TypeInfo(TypeOf.Class, create:() => FinanceSubscriptionInfo()),
'FinanceResponse': TypeInfo(TypeOf.Class, create:() => FinanceResponse()),
'List<DashboardStatTile>': TypeInfo(TypeOf.Class, create:() => <DashboardStatTile>[]),
'List<DashboardSeries>': TypeInfo(TypeOf.Class, create:() => <DashboardSeries>[]),
'List<FinanceLocationRow>': TypeInfo(TypeOf.Class, create:() => <FinanceLocationRow>[]),
'List<FinanceTopRow>': TypeInfo(TypeOf.Class, create:() => <FinanceTopRow>[]),
'FinanceRequest': TypeInfo(TypeOf.Class, create:() => FinanceRequest()),
});
To override the Content-type in your clients, use the HTTP Accept Header, append the .other suffix or ?format=other
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /v1/dashboard/finance HTTP/1.1
Host: api.dev.dynamics.trendsic.com
Accept: text/jsonl
Content-Type: text/jsonl
Content-Length: length
{"FromDate":"0001-01-01T00:00:00.0000000","ToDate":"0001-01-01T00:00:00.0000000","LocationIds":["00000000000000000000000000000000"]}
HTTP/1.1 200 OK
Content-Type: text/jsonl
Content-Length: length
{"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}},"Stats":[{"Key":"String","Label":"String","Value":0,"PreviousValue":0,"Unit":"String","DeltaPct":null}],"Trend":[{"Name":"String","Points":[{"Label":"String","Value":0}]}],"SourceMix":{"Name":"String","Points":[{"Label":"String","Value":0}]},"ByLocation":[{"LocationName":"String","ServiceRev":0,"ProductRev":0,"SubscriptionRev":0,"Total":0}],"TopServices":[{"Name":"String","Revenue":0}],"TopProducts":[{"Name":"String","Revenue":0}],"Subscriptions":{"Mrr":0,"Arr":0,"ActiveCount":0,"NewCount":0,"ChurnedCount":0,"ChurnRatePct":0}}