| 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 .jsv suffix or ?format=jsv
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/jsv
Content-Type: text/jsv
Content-Length: length
{
FromDate: 0001-01-01,
ToDate: 0001-01-01,
LocationIds:
[
00000000000000000000000000000000
]
}
HTTP/1.1 200 OK
Content-Type: text/jsv
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
}
],
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
}
}