| Requires any of the roles: | Admin, TeamAdmin | Required permission: | Sales.Total |
| POST | /sales/overview |
|---|
import 'package:servicestack/servicestack.dart';
class SalesKpis implements IConvertible
{
double? grossNet;
double? refunded;
int? ticketsAllReal;
int? ticketsPaid;
int? orders;
double? aov;
SalesKpis({this.grossNet,this.refunded,this.ticketsAllReal,this.ticketsPaid,this.orders,this.aov});
SalesKpis.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
grossNet = JsonConverters.toDouble(json['grossNet']);
refunded = JsonConverters.toDouble(json['refunded']);
ticketsAllReal = json['ticketsAllReal'];
ticketsPaid = json['ticketsPaid'];
orders = json['orders'];
aov = JsonConverters.toDouble(json['aov']);
return this;
}
Map<String, dynamic> toJson() => {
'grossNet': grossNet,
'refunded': refunded,
'ticketsAllReal': ticketsAllReal,
'ticketsPaid': ticketsPaid,
'orders': orders,
'aov': aov
};
getTypeName() => "SalesKpis";
TypeContext? context = _ctx;
}
class KpiDelta implements IConvertible
{
double? abs;
double? pct;
String? dir;
KpiDelta({this.abs,this.pct,this.dir});
KpiDelta.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
abs = JsonConverters.toDouble(json['abs']);
pct = JsonConverters.toDouble(json['pct']);
dir = json['dir'];
return this;
}
Map<String, dynamic> toJson() => {
'abs': abs,
'pct': pct,
'dir': dir
};
getTypeName() => "KpiDelta";
TypeContext? context = _ctx;
}
class SalesDeltas implements IConvertible
{
KpiDelta? grossNet;
KpiDelta? refunded;
KpiDelta? ticketsAllReal;
KpiDelta? ticketsPaid;
KpiDelta? orders;
KpiDelta? aov;
SalesDeltas({this.grossNet,this.refunded,this.ticketsAllReal,this.ticketsPaid,this.orders,this.aov});
SalesDeltas.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
grossNet = JsonConverters.fromJson(json['grossNet'],'KpiDelta',context!);
refunded = JsonConverters.fromJson(json['refunded'],'KpiDelta',context!);
ticketsAllReal = JsonConverters.fromJson(json['ticketsAllReal'],'KpiDelta',context!);
ticketsPaid = JsonConverters.fromJson(json['ticketsPaid'],'KpiDelta',context!);
orders = JsonConverters.fromJson(json['orders'],'KpiDelta',context!);
aov = JsonConverters.fromJson(json['aov'],'KpiDelta',context!);
return this;
}
Map<String, dynamic> toJson() => {
'grossNet': JsonConverters.toJson(grossNet,'KpiDelta',context!),
'refunded': JsonConverters.toJson(refunded,'KpiDelta',context!),
'ticketsAllReal': JsonConverters.toJson(ticketsAllReal,'KpiDelta',context!),
'ticketsPaid': JsonConverters.toJson(ticketsPaid,'KpiDelta',context!),
'orders': JsonConverters.toJson(orders,'KpiDelta',context!),
'aov': JsonConverters.toJson(aov,'KpiDelta',context!)
};
getTypeName() => "SalesDeltas";
TypeContext? context = _ctx;
}
class SalesTrendBucket implements IConvertible
{
DateTime? bucket;
double? revenue;
int? tickets;
SalesTrendBucket({this.bucket,this.revenue,this.tickets});
SalesTrendBucket.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
bucket = JsonConverters.fromJson(json['bucket'],'DateTime',context!);
revenue = JsonConverters.toDouble(json['revenue']);
tickets = json['tickets'];
return this;
}
Map<String, dynamic> toJson() => {
'bucket': JsonConverters.toJson(bucket,'DateTime',context!),
'revenue': revenue,
'tickets': tickets
};
getTypeName() => "SalesTrendBucket";
TypeContext? context = _ctx;
}
class SalesTopEvent implements IConvertible
{
int? eventId;
String? eventName;
DateTime? eventDate;
double? grossNet;
int? paidTickets;
int? realTickets;
int? orders;
SalesTopEvent({this.eventId,this.eventName,this.eventDate,this.grossNet,this.paidTickets,this.realTickets,this.orders});
SalesTopEvent.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
eventId = json['eventId'];
eventName = json['eventName'];
eventDate = JsonConverters.fromJson(json['eventDate'],'DateTime',context!);
grossNet = JsonConverters.toDouble(json['grossNet']);
paidTickets = json['paidTickets'];
realTickets = json['realTickets'];
orders = json['orders'];
return this;
}
Map<String, dynamic> toJson() => {
'eventId': eventId,
'eventName': eventName,
'eventDate': JsonConverters.toJson(eventDate,'DateTime',context!),
'grossNet': grossNet,
'paidTickets': paidTickets,
'realTickets': realTickets,
'orders': orders
};
getTypeName() => "SalesTopEvent";
TypeContext? context = _ctx;
}
class SalesRecentOrder implements IConvertible
{
int? ticketId;
DateTime? createdAt;
String? eventName;
double? amount;
int? ticketCount;
String? buyerName;
SalesRecentOrder({this.ticketId,this.createdAt,this.eventName,this.amount,this.ticketCount,this.buyerName});
SalesRecentOrder.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
ticketId = json['ticketId'];
createdAt = JsonConverters.fromJson(json['createdAt'],'DateTime',context!);
eventName = json['eventName'];
amount = JsonConverters.toDouble(json['amount']);
ticketCount = json['ticketCount'];
buyerName = json['buyerName'];
return this;
}
Map<String, dynamic> toJson() => {
'ticketId': ticketId,
'createdAt': JsonConverters.toJson(createdAt,'DateTime',context!),
'eventName': eventName,
'amount': amount,
'ticketCount': ticketCount,
'buyerName': buyerName
};
getTypeName() => "SalesRecentOrder";
TypeContext? context = _ctx;
}
class SalesHourBucket implements IConvertible
{
int? hour;
double? revenue;
int? orders;
int? tickets;
SalesHourBucket({this.hour,this.revenue,this.orders,this.tickets});
SalesHourBucket.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
hour = json['hour'];
revenue = JsonConverters.toDouble(json['revenue']);
orders = json['orders'];
tickets = json['tickets'];
return this;
}
Map<String, dynamic> toJson() => {
'hour': hour,
'revenue': revenue,
'orders': orders,
'tickets': tickets
};
getTypeName() => "SalesHourBucket";
TypeContext? context = _ctx;
}
class SalesDowBucket implements IConvertible
{
int? dow;
double? revenue;
int? orders;
int? tickets;
SalesDowBucket({this.dow,this.revenue,this.orders,this.tickets});
SalesDowBucket.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
dow = json['dow'];
revenue = JsonConverters.toDouble(json['revenue']);
orders = json['orders'];
tickets = json['tickets'];
return this;
}
Map<String, dynamic> toJson() => {
'dow': dow,
'revenue': revenue,
'orders': orders,
'tickets': tickets
};
getTypeName() => "SalesDowBucket";
TypeContext? context = _ctx;
}
class SalesProduct implements IConvertible
{
String? ticketName;
int? tickets;
double? revenue;
int? orders;
SalesProduct({this.ticketName,this.tickets,this.revenue,this.orders});
SalesProduct.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
ticketName = json['ticketName'];
tickets = json['tickets'];
revenue = JsonConverters.toDouble(json['revenue']);
orders = json['orders'];
return this;
}
Map<String, dynamic> toJson() => {
'ticketName': ticketName,
'tickets': tickets,
'revenue': revenue,
'orders': orders
};
getTypeName() => "SalesProduct";
TypeContext? context = _ctx;
}
class SalesOverviewResult implements IConvertible
{
SalesKpis? current;
SalesKpis? previous;
SalesDeltas? delta;
List<SalesTrendBucket>? trend;
List<SalesTrendBucket>? previousTrend;
List<SalesTopEvent>? topEvents;
List<SalesRecentOrder>? recentOrders;
List<SalesHourBucket>? byHourOfDay;
List<SalesDowBucket>? byDayOfWeek;
List<SalesProduct>? topProducts;
bool? hasAnyDataEver;
List<int>? owners;
String? bucket;
DateTime? freshnessUtc;
int? statusCode;
String? message;
SalesOverviewResult({this.current,this.previous,this.delta,this.trend,this.previousTrend,this.topEvents,this.recentOrders,this.byHourOfDay,this.byDayOfWeek,this.topProducts,this.hasAnyDataEver,this.owners,this.bucket,this.freshnessUtc,this.statusCode,this.message});
SalesOverviewResult.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
current = JsonConverters.fromJson(json['current'],'SalesKpis',context!);
previous = JsonConverters.fromJson(json['previous'],'SalesKpis',context!);
delta = JsonConverters.fromJson(json['delta'],'SalesDeltas',context!);
trend = JsonConverters.fromJson(json['trend'],'List<SalesTrendBucket>',context!);
previousTrend = JsonConverters.fromJson(json['previousTrend'],'List<SalesTrendBucket>',context!);
topEvents = JsonConverters.fromJson(json['topEvents'],'List<SalesTopEvent>',context!);
recentOrders = JsonConverters.fromJson(json['recentOrders'],'List<SalesRecentOrder>',context!);
byHourOfDay = JsonConverters.fromJson(json['byHourOfDay'],'List<SalesHourBucket>',context!);
byDayOfWeek = JsonConverters.fromJson(json['byDayOfWeek'],'List<SalesDowBucket>',context!);
topProducts = JsonConverters.fromJson(json['topProducts'],'List<SalesProduct>',context!);
hasAnyDataEver = json['hasAnyDataEver'];
owners = JsonConverters.fromJson(json['owners'],'List<int>',context!);
bucket = json['bucket'];
freshnessUtc = JsonConverters.fromJson(json['freshnessUtc'],'DateTime',context!);
statusCode = json['statusCode'];
message = json['message'];
return this;
}
Map<String, dynamic> toJson() => {
'current': JsonConverters.toJson(current,'SalesKpis',context!),
'previous': JsonConverters.toJson(previous,'SalesKpis',context!),
'delta': JsonConverters.toJson(delta,'SalesDeltas',context!),
'trend': JsonConverters.toJson(trend,'List<SalesTrendBucket>',context!),
'previousTrend': JsonConverters.toJson(previousTrend,'List<SalesTrendBucket>',context!),
'topEvents': JsonConverters.toJson(topEvents,'List<SalesTopEvent>',context!),
'recentOrders': JsonConverters.toJson(recentOrders,'List<SalesRecentOrder>',context!),
'byHourOfDay': JsonConverters.toJson(byHourOfDay,'List<SalesHourBucket>',context!),
'byDayOfWeek': JsonConverters.toJson(byDayOfWeek,'List<SalesDowBucket>',context!),
'topProducts': JsonConverters.toJson(topProducts,'List<SalesProduct>',context!),
'hasAnyDataEver': hasAnyDataEver,
'owners': JsonConverters.toJson(owners,'List<int>',context!),
'bucket': bucket,
'freshnessUtc': JsonConverters.toJson(freshnessUtc,'DateTime',context!),
'statusCode': statusCode,
'message': message
};
getTypeName() => "SalesOverviewResult";
TypeContext? context = _ctx;
}
class SalesOverviewRequest implements IConvertible
{
int? eventOwnerId;
List<int>? additionalOwnerIds;
int? eventId;
DateTime? fromUtc;
DateTime? toUtc;
DateTime? compareFromUtc;
DateTime? compareToUtc;
String? bucket;
int? topEventsLimit;
int? recentOrdersLimit;
SalesOverviewRequest({this.eventOwnerId,this.additionalOwnerIds,this.eventId,this.fromUtc,this.toUtc,this.compareFromUtc,this.compareToUtc,this.bucket,this.topEventsLimit,this.recentOrdersLimit});
SalesOverviewRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
eventOwnerId = json['eventOwnerId'];
additionalOwnerIds = JsonConverters.fromJson(json['additionalOwnerIds'],'List<int>',context!);
eventId = json['eventId'];
fromUtc = JsonConverters.fromJson(json['fromUtc'],'DateTime',context!);
toUtc = JsonConverters.fromJson(json['toUtc'],'DateTime',context!);
compareFromUtc = JsonConverters.fromJson(json['compareFromUtc'],'DateTime',context!);
compareToUtc = JsonConverters.fromJson(json['compareToUtc'],'DateTime',context!);
bucket = json['bucket'];
topEventsLimit = json['topEventsLimit'];
recentOrdersLimit = json['recentOrdersLimit'];
return this;
}
Map<String, dynamic> toJson() => {
'eventOwnerId': eventOwnerId,
'additionalOwnerIds': JsonConverters.toJson(additionalOwnerIds,'List<int>',context!),
'eventId': eventId,
'fromUtc': JsonConverters.toJson(fromUtc,'DateTime',context!),
'toUtc': JsonConverters.toJson(toUtc,'DateTime',context!),
'compareFromUtc': JsonConverters.toJson(compareFromUtc,'DateTime',context!),
'compareToUtc': JsonConverters.toJson(compareToUtc,'DateTime',context!),
'bucket': bucket,
'topEventsLimit': topEventsLimit,
'recentOrdersLimit': recentOrdersLimit
};
getTypeName() => "SalesOverviewRequest";
TypeContext? context = _ctx;
}
TypeContext _ctx = TypeContext(library: 'stubbur_app.azurewebsites.net', types: <String, TypeInfo> {
'SalesKpis': TypeInfo(TypeOf.Class, create:() => SalesKpis()),
'KpiDelta': TypeInfo(TypeOf.Class, create:() => KpiDelta()),
'SalesDeltas': TypeInfo(TypeOf.Class, create:() => SalesDeltas()),
'SalesTrendBucket': TypeInfo(TypeOf.Class, create:() => SalesTrendBucket()),
'SalesTopEvent': TypeInfo(TypeOf.Class, create:() => SalesTopEvent()),
'SalesRecentOrder': TypeInfo(TypeOf.Class, create:() => SalesRecentOrder()),
'SalesHourBucket': TypeInfo(TypeOf.Class, create:() => SalesHourBucket()),
'SalesDowBucket': TypeInfo(TypeOf.Class, create:() => SalesDowBucket()),
'SalesProduct': TypeInfo(TypeOf.Class, create:() => SalesProduct()),
'SalesOverviewResult': TypeInfo(TypeOf.Class, create:() => SalesOverviewResult()),
'List<SalesTrendBucket>': TypeInfo(TypeOf.Class, create:() => <SalesTrendBucket>[]),
'List<SalesTopEvent>': TypeInfo(TypeOf.Class, create:() => <SalesTopEvent>[]),
'List<SalesRecentOrder>': TypeInfo(TypeOf.Class, create:() => <SalesRecentOrder>[]),
'List<SalesHourBucket>': TypeInfo(TypeOf.Class, create:() => <SalesHourBucket>[]),
'List<SalesDowBucket>': TypeInfo(TypeOf.Class, create:() => <SalesDowBucket>[]),
'List<SalesProduct>': TypeInfo(TypeOf.Class, create:() => <SalesProduct>[]),
'SalesOverviewRequest': TypeInfo(TypeOf.Class, create:() => SalesOverviewRequest()),
});
Dart SalesOverviewRequest DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /sales/overview HTTP/1.1
Host: stubbur-app.azurewebsites.net
Accept: text/csv
Content-Type: text/csv
Content-Length: length
{"eventOwnerId":0,"additionalOwnerIds":[0],"eventId":0,"fromUtc":"0001-01-01T00:00:00.0000000","toUtc":"0001-01-01T00:00:00.0000000","compareFromUtc":"0001-01-01T00:00:00.0000000","compareToUtc":"0001-01-01T00:00:00.0000000","bucket":"String","topEventsLimit":0,"recentOrdersLimit":0}
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length
{"current":{"grossNet":0,"refunded":0,"ticketsAllReal":0,"ticketsPaid":0,"orders":0,"aov":0},"previous":{"grossNet":0,"refunded":0,"ticketsAllReal":0,"ticketsPaid":0,"orders":0,"aov":0},"delta":{"grossNet":{"abs":0,"pct":0,"dir":"String"},"refunded":{"abs":0,"pct":0,"dir":"String"},"ticketsAllReal":{"abs":0,"pct":0,"dir":"String"},"ticketsPaid":{"abs":0,"pct":0,"dir":"String"},"orders":{"abs":0,"pct":0,"dir":"String"},"aov":{"abs":0,"pct":0,"dir":"String"}},"trend":[{"bucket":"0001-01-01T00:00:00.0000000","revenue":0,"tickets":0}],"previousTrend":[{"bucket":"0001-01-01T00:00:00.0000000","revenue":0,"tickets":0}],"topEvents":[{"eventId":0,"eventName":"String","eventDate":"0001-01-01T00:00:00.0000000","grossNet":0,"paidTickets":0,"realTickets":0,"orders":0}],"recentOrders":[{"ticketId":0,"createdAt":"0001-01-01T00:00:00.0000000","eventName":"String","amount":0,"ticketCount":0,"buyerName":"String"}],"byHourOfDay":[{"hour":0,"revenue":0,"orders":0,"tickets":0}],"byDayOfWeek":[{"dow":0,"revenue":0,"orders":0,"tickets":0}],"topProducts":[{"ticketName":"String","tickets":0,"revenue":0,"orders":0}],"hasAnyDataEver":false,"owners":[0],"bucket":"String","freshnessUtc":"0001-01-01T00:00:00.0000000","statusCode":0,"message":"String"}