| POST,OPTIONS | /v1/dashboard/kpiv2/detail |
|---|
import 'package:servicestack/servicestack.dart';
class SvcNamedTime implements IConvertible
{
String? Id;
String? Name;
int? SignedSec;
int? Served;
SvcNamedTime({this.Id,this.Name,this.SignedSec,this.Served});
SvcNamedTime.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Id = json['Id'];
Name = json['Name'];
SignedSec = json['SignedSec'];
Served = json['Served'];
return this;
}
Map<String, dynamic> toJson() => {
'Id': Id,
'Name': Name,
'SignedSec': SignedSec,
'Served': Served
};
getTypeName() => "SvcNamedTime";
TypeContext? context = _ctx;
}
class SvcTint implements IConvertible
{
String? Field;
String? Tone;
String? Reason;
double? Value;
double? Reference;
double? BranchValue;
SvcTint({this.Field,this.Tone,this.Reason,this.Value,this.Reference,this.BranchValue});
SvcTint.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Field = json['Field'];
Tone = json['Tone'];
Reason = json['Reason'];
Value = JsonConverters.toDouble(json['Value']);
Reference = JsonConverters.toDouble(json['Reference']);
BranchValue = JsonConverters.toDouble(json['BranchValue']);
return this;
}
Map<String, dynamic> toJson() => {
'Field': Field,
'Tone': Tone,
'Reason': Reason,
'Value': Value,
'Reference': Reference,
'BranchValue': BranchValue
};
getTypeName() => "SvcTint";
TypeContext? context = _ctx;
}
class SvcMetrics implements IConvertible
{
int? Checkins;
int? Walkins;
int? Appts;
int? Served;
int? NoShows;
int? ApptNoShows;
int? CancelledAtWindow;
int? Abandoned;
int? Called;
int? CalledUp;
double? AbandonRate;
double? NoShowRate;
double? AvgServiceSec;
double? MedianServiceSec;
double? AvgWaitSec;
int? MaxWaitSec;
double? AvgWalkUpSec;
double? ExpectedServiceSec;
int? SignedSec;
int? ServingSec;
int? PausedSec;
int? IdleSec;
int? UnstaffedSec;
double? Utilization;
double? IdleShare;
double? PausedShare;
int? Sessions;
int? OpenDays;
double? FeesEarned;
double? AvgFee;
double? FeesPerStaffedHour;
double? ExpectedFeesPerStaffedHour;
double? LaborCost;
bool? LaborPartial;
List<String>? MissingCostEmployeeIds = [];
List<SvcNamedTime>? MissingCost = [];
bool? LaborLocked;
double? Contribution;
double? LostFees;
double? LostNoShowFees;
Map<String,int?>? Mix = {};
List<int>? HourlyServed = [];
List<double>? HourlyFees = [];
List<double>? HourlyCost = [];
List<SvcTint>? Tints = [];
SvcMetrics({this.Checkins,this.Walkins,this.Appts,this.Served,this.NoShows,this.ApptNoShows,this.CancelledAtWindow,this.Abandoned,this.Called,this.CalledUp,this.AbandonRate,this.NoShowRate,this.AvgServiceSec,this.MedianServiceSec,this.AvgWaitSec,this.MaxWaitSec,this.AvgWalkUpSec,this.ExpectedServiceSec,this.SignedSec,this.ServingSec,this.PausedSec,this.IdleSec,this.UnstaffedSec,this.Utilization,this.IdleShare,this.PausedShare,this.Sessions,this.OpenDays,this.FeesEarned,this.AvgFee,this.FeesPerStaffedHour,this.ExpectedFeesPerStaffedHour,this.LaborCost,this.LaborPartial,this.MissingCostEmployeeIds,this.MissingCost,this.LaborLocked,this.Contribution,this.LostFees,this.LostNoShowFees,this.Mix,this.HourlyServed,this.HourlyFees,this.HourlyCost,this.Tints});
SvcMetrics.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Checkins = json['Checkins'];
Walkins = json['Walkins'];
Appts = json['Appts'];
Served = json['Served'];
NoShows = json['NoShows'];
ApptNoShows = json['ApptNoShows'];
CancelledAtWindow = json['CancelledAtWindow'];
Abandoned = json['Abandoned'];
Called = json['Called'];
CalledUp = json['CalledUp'];
AbandonRate = JsonConverters.toDouble(json['AbandonRate']);
NoShowRate = JsonConverters.toDouble(json['NoShowRate']);
AvgServiceSec = JsonConverters.toDouble(json['AvgServiceSec']);
MedianServiceSec = JsonConverters.toDouble(json['MedianServiceSec']);
AvgWaitSec = JsonConverters.toDouble(json['AvgWaitSec']);
MaxWaitSec = json['MaxWaitSec'];
AvgWalkUpSec = JsonConverters.toDouble(json['AvgWalkUpSec']);
ExpectedServiceSec = JsonConverters.toDouble(json['ExpectedServiceSec']);
SignedSec = json['SignedSec'];
ServingSec = json['ServingSec'];
PausedSec = json['PausedSec'];
IdleSec = json['IdleSec'];
UnstaffedSec = json['UnstaffedSec'];
Utilization = JsonConverters.toDouble(json['Utilization']);
IdleShare = JsonConverters.toDouble(json['IdleShare']);
PausedShare = JsonConverters.toDouble(json['PausedShare']);
Sessions = json['Sessions'];
OpenDays = json['OpenDays'];
FeesEarned = JsonConverters.toDouble(json['FeesEarned']);
AvgFee = JsonConverters.toDouble(json['AvgFee']);
FeesPerStaffedHour = JsonConverters.toDouble(json['FeesPerStaffedHour']);
ExpectedFeesPerStaffedHour = JsonConverters.toDouble(json['ExpectedFeesPerStaffedHour']);
LaborCost = JsonConverters.toDouble(json['LaborCost']);
LaborPartial = json['LaborPartial'];
MissingCostEmployeeIds = JsonConverters.fromJson(json['MissingCostEmployeeIds'],'List<String>',context!);
MissingCost = JsonConverters.fromJson(json['MissingCost'],'List<SvcNamedTime>',context!);
LaborLocked = json['LaborLocked'];
Contribution = JsonConverters.toDouble(json['Contribution']);
LostFees = JsonConverters.toDouble(json['LostFees']);
LostNoShowFees = JsonConverters.toDouble(json['LostNoShowFees']);
Mix = JsonConverters.fromJson(json['Mix'],'Map<String,int?>',context!);
HourlyServed = JsonConverters.fromJson(json['HourlyServed'],'List<int>',context!);
HourlyFees = JsonConverters.fromJson(json['HourlyFees'],'List<double>',context!);
HourlyCost = JsonConverters.fromJson(json['HourlyCost'],'List<double>',context!);
Tints = JsonConverters.fromJson(json['Tints'],'List<SvcTint>',context!);
return this;
}
Map<String, dynamic> toJson() => {
'Checkins': Checkins,
'Walkins': Walkins,
'Appts': Appts,
'Served': Served,
'NoShows': NoShows,
'ApptNoShows': ApptNoShows,
'CancelledAtWindow': CancelledAtWindow,
'Abandoned': Abandoned,
'Called': Called,
'CalledUp': CalledUp,
'AbandonRate': AbandonRate,
'NoShowRate': NoShowRate,
'AvgServiceSec': AvgServiceSec,
'MedianServiceSec': MedianServiceSec,
'AvgWaitSec': AvgWaitSec,
'MaxWaitSec': MaxWaitSec,
'AvgWalkUpSec': AvgWalkUpSec,
'ExpectedServiceSec': ExpectedServiceSec,
'SignedSec': SignedSec,
'ServingSec': ServingSec,
'PausedSec': PausedSec,
'IdleSec': IdleSec,
'UnstaffedSec': UnstaffedSec,
'Utilization': Utilization,
'IdleShare': IdleShare,
'PausedShare': PausedShare,
'Sessions': Sessions,
'OpenDays': OpenDays,
'FeesEarned': FeesEarned,
'AvgFee': AvgFee,
'FeesPerStaffedHour': FeesPerStaffedHour,
'ExpectedFeesPerStaffedHour': ExpectedFeesPerStaffedHour,
'LaborCost': LaborCost,
'LaborPartial': LaborPartial,
'MissingCostEmployeeIds': JsonConverters.toJson(MissingCostEmployeeIds,'List<String>',context!),
'MissingCost': JsonConverters.toJson(MissingCost,'List<SvcNamedTime>',context!),
'LaborLocked': LaborLocked,
'Contribution': Contribution,
'LostFees': LostFees,
'LostNoShowFees': LostNoShowFees,
'Mix': JsonConverters.toJson(Mix,'Map<String,int?>',context!),
'HourlyServed': JsonConverters.toJson(HourlyServed,'List<int>',context!),
'HourlyFees': JsonConverters.toJson(HourlyFees,'List<double>',context!),
'HourlyCost': JsonConverters.toJson(HourlyCost,'List<double>',context!),
'Tints': JsonConverters.toJson(Tints,'List<SvcTint>',context!)
};
getTypeName() => "SvcMetrics";
TypeContext? context = _ctx;
}
class SvcWindowRow implements IConvertible
{
String? StationId;
String? Name;
List<SvcNamedTime>? Clerks = [];
bool? NeverStaffed;
DateTime? LastStaffedUtc;
String? LastStaffedBy;
SvcMetrics? Metrics;
SvcWindowRow({this.StationId,this.Name,this.Clerks,this.NeverStaffed,this.LastStaffedUtc,this.LastStaffedBy,this.Metrics});
SvcWindowRow.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
StationId = json['StationId'];
Name = json['Name'];
Clerks = JsonConverters.fromJson(json['Clerks'],'List<SvcNamedTime>',context!);
NeverStaffed = json['NeverStaffed'];
LastStaffedUtc = JsonConverters.fromJson(json['LastStaffedUtc'],'DateTime',context!);
LastStaffedBy = json['LastStaffedBy'];
Metrics = JsonConverters.fromJson(json['Metrics'],'SvcMetrics',context!);
return this;
}
Map<String, dynamic> toJson() => {
'StationId': StationId,
'Name': Name,
'Clerks': JsonConverters.toJson(Clerks,'List<SvcNamedTime>',context!),
'NeverStaffed': NeverStaffed,
'LastStaffedUtc': JsonConverters.toJson(LastStaffedUtc,'DateTime',context!),
'LastStaffedBy': LastStaffedBy,
'Metrics': JsonConverters.toJson(Metrics,'SvcMetrics',context!)
};
getTypeName() => "SvcWindowRow";
TypeContext? context = _ctx;
}
class SvcClerkRow implements IConvertible
{
String? EmployeeId;
String? Name;
List<SvcNamedTime>? Windows = [];
double? LoadedRate;
bool? RateSet;
bool? RateLocked;
SvcMetrics? Metrics;
SvcClerkRow({this.EmployeeId,this.Name,this.Windows,this.LoadedRate,this.RateSet,this.RateLocked,this.Metrics});
SvcClerkRow.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
EmployeeId = json['EmployeeId'];
Name = json['Name'];
Windows = JsonConverters.fromJson(json['Windows'],'List<SvcNamedTime>',context!);
LoadedRate = JsonConverters.toDouble(json['LoadedRate']);
RateSet = json['RateSet'];
RateLocked = json['RateLocked'];
Metrics = JsonConverters.fromJson(json['Metrics'],'SvcMetrics',context!);
return this;
}
Map<String, dynamic> toJson() => {
'EmployeeId': EmployeeId,
'Name': Name,
'Windows': JsonConverters.toJson(Windows,'List<SvcNamedTime>',context!),
'LoadedRate': LoadedRate,
'RateSet': RateSet,
'RateLocked': RateLocked,
'Metrics': JsonConverters.toJson(Metrics,'SvcMetrics',context!)
};
getTypeName() => "SvcClerkRow";
TypeContext? context = _ctx;
}
class SvcAverage implements IConvertible
{
int? Count;
double? Served;
double? AvgServiceSec;
double? MedianServiceSec;
double? AvgWaitSec;
double? Utilization;
double? IdleSec;
double? PausedSec;
double? NoShows;
double? SignedSec;
double? FeesEarned;
double? FeesPerStaffedHour;
double? LaborCost;
double? Contribution;
double? LostNoShowFees;
SvcAverage({this.Count,this.Served,this.AvgServiceSec,this.MedianServiceSec,this.AvgWaitSec,this.Utilization,this.IdleSec,this.PausedSec,this.NoShows,this.SignedSec,this.FeesEarned,this.FeesPerStaffedHour,this.LaborCost,this.Contribution,this.LostNoShowFees});
SvcAverage.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Count = json['Count'];
Served = JsonConverters.toDouble(json['Served']);
AvgServiceSec = JsonConverters.toDouble(json['AvgServiceSec']);
MedianServiceSec = JsonConverters.toDouble(json['MedianServiceSec']);
AvgWaitSec = JsonConverters.toDouble(json['AvgWaitSec']);
Utilization = JsonConverters.toDouble(json['Utilization']);
IdleSec = JsonConverters.toDouble(json['IdleSec']);
PausedSec = JsonConverters.toDouble(json['PausedSec']);
NoShows = JsonConverters.toDouble(json['NoShows']);
SignedSec = JsonConverters.toDouble(json['SignedSec']);
FeesEarned = JsonConverters.toDouble(json['FeesEarned']);
FeesPerStaffedHour = JsonConverters.toDouble(json['FeesPerStaffedHour']);
LaborCost = JsonConverters.toDouble(json['LaborCost']);
Contribution = JsonConverters.toDouble(json['Contribution']);
LostNoShowFees = JsonConverters.toDouble(json['LostNoShowFees']);
return this;
}
Map<String, dynamic> toJson() => {
'Count': Count,
'Served': Served,
'AvgServiceSec': AvgServiceSec,
'MedianServiceSec': MedianServiceSec,
'AvgWaitSec': AvgWaitSec,
'Utilization': Utilization,
'IdleSec': IdleSec,
'PausedSec': PausedSec,
'NoShows': NoShows,
'SignedSec': SignedSec,
'FeesEarned': FeesEarned,
'FeesPerStaffedHour': FeesPerStaffedHour,
'LaborCost': LaborCost,
'Contribution': Contribution,
'LostNoShowFees': LostNoShowFees
};
getTypeName() => "SvcAverage";
TypeContext? context = _ctx;
}
class SvcSession implements IConvertible
{
String? SessionId;
String? StationId;
String? StationName;
String? EmployeeId;
String? EmployeeName;
DateTime? LocalIn;
DateTime? LocalOut;
bool? IsOpen;
String? EndReason;
int? PausedSec;
SvcSession({this.SessionId,this.StationId,this.StationName,this.EmployeeId,this.EmployeeName,this.LocalIn,this.LocalOut,this.IsOpen,this.EndReason,this.PausedSec});
SvcSession.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
SessionId = json['SessionId'];
StationId = json['StationId'];
StationName = json['StationName'];
EmployeeId = json['EmployeeId'];
EmployeeName = json['EmployeeName'];
LocalIn = JsonConverters.fromJson(json['LocalIn'],'DateTime',context!);
LocalOut = JsonConverters.fromJson(json['LocalOut'],'DateTime',context!);
IsOpen = json['IsOpen'];
EndReason = json['EndReason'];
PausedSec = json['PausedSec'];
return this;
}
Map<String, dynamic> toJson() => {
'SessionId': SessionId,
'StationId': StationId,
'StationName': StationName,
'EmployeeId': EmployeeId,
'EmployeeName': EmployeeName,
'LocalIn': JsonConverters.toJson(LocalIn,'DateTime',context!),
'LocalOut': JsonConverters.toJson(LocalOut,'DateTime',context!),
'IsOpen': IsOpen,
'EndReason': EndReason,
'PausedSec': PausedSec
};
getTypeName() => "SvcSession";
TypeContext? context = _ctx;
}
class SvcFeeChange implements IConvertible
{
String? LocationId;
DateTime? OnDate;
double? FromFee;
double? ToFee;
SvcFeeChange({this.LocationId,this.OnDate,this.FromFee,this.ToFee});
SvcFeeChange.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
LocationId = json['LocationId'];
OnDate = JsonConverters.fromJson(json['OnDate'],'DateTime',context!);
FromFee = JsonConverters.toDouble(json['FromFee']);
ToFee = JsonConverters.toDouble(json['ToFee']);
return this;
}
Map<String, dynamic> toJson() => {
'LocationId': LocationId,
'OnDate': JsonConverters.toJson(OnDate,'DateTime',context!),
'FromFee': FromFee,
'ToFee': ToFee
};
getTypeName() => "SvcFeeChange";
TypeContext? context = _ctx;
}
class SvcServiceRow implements IConvertible
{
String? LineId;
String? Name;
int? Completed;
double? AvgServiceSec;
double? BranchAvgServiceSec;
double? FeesEarned;
double? FeeCurrent;
double? FeeMin;
double? FeeMax;
double? FeePerMinute;
double? BranchFeePerMinute;
List<SvcFeeChange>? FeeChanges = [];
SvcServiceRow({this.LineId,this.Name,this.Completed,this.AvgServiceSec,this.BranchAvgServiceSec,this.FeesEarned,this.FeeCurrent,this.FeeMin,this.FeeMax,this.FeePerMinute,this.BranchFeePerMinute,this.FeeChanges});
SvcServiceRow.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
LineId = json['LineId'];
Name = json['Name'];
Completed = json['Completed'];
AvgServiceSec = JsonConverters.toDouble(json['AvgServiceSec']);
BranchAvgServiceSec = JsonConverters.toDouble(json['BranchAvgServiceSec']);
FeesEarned = JsonConverters.toDouble(json['FeesEarned']);
FeeCurrent = JsonConverters.toDouble(json['FeeCurrent']);
FeeMin = JsonConverters.toDouble(json['FeeMin']);
FeeMax = JsonConverters.toDouble(json['FeeMax']);
FeePerMinute = JsonConverters.toDouble(json['FeePerMinute']);
BranchFeePerMinute = JsonConverters.toDouble(json['BranchFeePerMinute']);
FeeChanges = JsonConverters.fromJson(json['FeeChanges'],'List<SvcFeeChange>',context!);
return this;
}
Map<String, dynamic> toJson() => {
'LineId': LineId,
'Name': Name,
'Completed': Completed,
'AvgServiceSec': AvgServiceSec,
'BranchAvgServiceSec': BranchAvgServiceSec,
'FeesEarned': FeesEarned,
'FeeCurrent': FeeCurrent,
'FeeMin': FeeMin,
'FeeMax': FeeMax,
'FeePerMinute': FeePerMinute,
'BranchFeePerMinute': BranchFeePerMinute,
'FeeChanges': JsonConverters.toJson(FeeChanges,'List<SvcFeeChange>',context!)
};
getTypeName() => "SvcServiceRow";
TypeContext? context = _ctx;
}
class SvcDetail implements IConvertible
{
String? Kind;
SvcWindowRow? Window;
SvcClerkRow? Clerk;
SvcMetrics? BranchMetrics;
SvcAverage? PerRowAverage;
List<SvcSession>? Sessions = [];
List<SvcServiceRow>? Services = [];
bool? CanSeeStaff;
bool? CanSeeFinancial;
bool? CanSeePay;
SvcDetail({this.Kind,this.Window,this.Clerk,this.BranchMetrics,this.PerRowAverage,this.Sessions,this.Services,this.CanSeeStaff,this.CanSeeFinancial,this.CanSeePay});
SvcDetail.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Kind = json['Kind'];
Window = JsonConverters.fromJson(json['Window'],'SvcWindowRow',context!);
Clerk = JsonConverters.fromJson(json['Clerk'],'SvcClerkRow',context!);
BranchMetrics = JsonConverters.fromJson(json['BranchMetrics'],'SvcMetrics',context!);
PerRowAverage = JsonConverters.fromJson(json['PerRowAverage'],'SvcAverage',context!);
Sessions = JsonConverters.fromJson(json['Sessions'],'List<SvcSession>',context!);
Services = JsonConverters.fromJson(json['Services'],'List<SvcServiceRow>',context!);
CanSeeStaff = json['CanSeeStaff'];
CanSeeFinancial = json['CanSeeFinancial'];
CanSeePay = json['CanSeePay'];
return this;
}
Map<String, dynamic> toJson() => {
'Kind': Kind,
'Window': JsonConverters.toJson(Window,'SvcWindowRow',context!),
'Clerk': JsonConverters.toJson(Clerk,'SvcClerkRow',context!),
'BranchMetrics': JsonConverters.toJson(BranchMetrics,'SvcMetrics',context!),
'PerRowAverage': JsonConverters.toJson(PerRowAverage,'SvcAverage',context!),
'Sessions': JsonConverters.toJson(Sessions,'List<SvcSession>',context!),
'Services': JsonConverters.toJson(Services,'List<SvcServiceRow>',context!),
'CanSeeStaff': CanSeeStaff,
'CanSeeFinancial': CanSeeFinancial,
'CanSeePay': CanSeePay
};
getTypeName() => "SvcDetail";
TypeContext? context = _ctx;
}
class KpiV2DetailResponse implements IConvertible
{
ResponseStatus? ResponseStatus;
SvcDetail? Detail;
KpiV2DetailResponse({this.ResponseStatus,this.Detail});
KpiV2DetailResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!);
Detail = JsonConverters.fromJson(json['Detail'],'SvcDetail',context!);
return this;
}
Map<String, dynamic> toJson() => {
'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!),
'Detail': JsonConverters.toJson(Detail,'SvcDetail',context!)
};
getTypeName() => "KpiV2DetailResponse";
TypeContext? context = _ctx;
}
class KpiV2DetailRequest implements IConvertible
{
String? BranchId;
String? StationId;
String? EmployeeId;
DateTime? FromDate;
DateTime? ToDate;
KpiV2DetailRequest({this.BranchId,this.StationId,this.EmployeeId,this.FromDate,this.ToDate});
KpiV2DetailRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
BranchId = json['BranchId'];
StationId = json['StationId'];
EmployeeId = json['EmployeeId'];
FromDate = JsonConverters.fromJson(json['FromDate'],'DateTime',context!);
ToDate = JsonConverters.fromJson(json['ToDate'],'DateTime',context!);
return this;
}
Map<String, dynamic> toJson() => {
'BranchId': BranchId,
'StationId': StationId,
'EmployeeId': EmployeeId,
'FromDate': JsonConverters.toJson(FromDate,'DateTime',context!),
'ToDate': JsonConverters.toJson(ToDate,'DateTime',context!)
};
getTypeName() => "KpiV2DetailRequest";
TypeContext? context = _ctx;
}
TypeContext _ctx = TypeContext(library: 'api.dev.dynamics.trendsic.com', types: <String, TypeInfo> {
'SvcNamedTime': TypeInfo(TypeOf.Class, create:() => SvcNamedTime()),
'SvcTint': TypeInfo(TypeOf.Class, create:() => SvcTint()),
'SvcMetrics': TypeInfo(TypeOf.Class, create:() => SvcMetrics()),
'List<SvcNamedTime>': TypeInfo(TypeOf.Class, create:() => <SvcNamedTime>[]),
'Map<String,int?>': TypeInfo(TypeOf.Class, create:() => Map<String,int?>()),
'List<SvcTint>': TypeInfo(TypeOf.Class, create:() => <SvcTint>[]),
'SvcWindowRow': TypeInfo(TypeOf.Class, create:() => SvcWindowRow()),
'SvcClerkRow': TypeInfo(TypeOf.Class, create:() => SvcClerkRow()),
'SvcAverage': TypeInfo(TypeOf.Class, create:() => SvcAverage()),
'SvcSession': TypeInfo(TypeOf.Class, create:() => SvcSession()),
'SvcFeeChange': TypeInfo(TypeOf.Class, create:() => SvcFeeChange()),
'SvcServiceRow': TypeInfo(TypeOf.Class, create:() => SvcServiceRow()),
'List<SvcFeeChange>': TypeInfo(TypeOf.Class, create:() => <SvcFeeChange>[]),
'SvcDetail': TypeInfo(TypeOf.Class, create:() => SvcDetail()),
'List<SvcSession>': TypeInfo(TypeOf.Class, create:() => <SvcSession>[]),
'List<SvcServiceRow>': TypeInfo(TypeOf.Class, create:() => <SvcServiceRow>[]),
'KpiV2DetailResponse': TypeInfo(TypeOf.Class, create:() => KpiV2DetailResponse()),
'KpiV2DetailRequest': TypeInfo(TypeOf.Class, create:() => KpiV2DetailRequest()),
});
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/kpiv2/detail HTTP/1.1
Host: api.dev.dynamics.trendsic.com
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length
{
BranchId: 00000000000000000000000000000000,
StationId: 00000000000000000000000000000000,
EmployeeId: 00000000000000000000000000000000,
FromDate: 0001-01-01,
ToDate: 0001-01-01
}
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
}
},
Detail:
{
Kind: String,
Window:
{
StationId: 00000000000000000000000000000000,
Name: String,
Clerks:
[
{
Id: 00000000000000000000000000000000,
Name: String,
SignedSec: 0,
Served: 0
}
],
NeverStaffed: False,
LastStaffedUtc: 0001-01-01,
LastStaffedBy: String,
Metrics:
{
Checkins: 0,
Walkins: 0,
Appts: 0,
Served: 0,
NoShows: 0,
ApptNoShows: 0,
CancelledAtWindow: 0,
Abandoned: 0,
Called: 0,
CalledUp: 0,
AbandonRate: 0,
NoShowRate: 0,
AvgServiceSec: 0,
MedianServiceSec: 0,
AvgWaitSec: 0,
MaxWaitSec: 0,
AvgWalkUpSec: 0,
ExpectedServiceSec: 0,
SignedSec: 0,
ServingSec: 0,
PausedSec: 0,
IdleSec: 0,
UnstaffedSec: 0,
Utilization: 0,
IdleShare: 0,
PausedShare: 0,
Sessions: 0,
OpenDays: 0,
FeesEarned: 0,
AvgFee: 0,
FeesPerStaffedHour: 0,
ExpectedFeesPerStaffedHour: 0,
LaborCost: 0,
LaborPartial: False,
MissingCostEmployeeIds:
[
00000000000000000000000000000000
],
MissingCost:
[
{
Id: 00000000000000000000000000000000,
Name: String,
SignedSec: 0,
Served: 0
}
],
LaborLocked: False,
Contribution: 0,
LostFees: 0,
LostNoShowFees: 0,
Mix:
{
00000000000000000000000000000000: 0
},
HourlyServed:
[
0
],
HourlyFees:
[
0
],
HourlyCost:
[
0
],
Tints:
[
{
Field: String,
Tone: String,
Reason: String,
Value: 0,
Reference: 0,
BranchValue: 0
}
]
}
},
Clerk:
{
EmployeeId: 00000000000000000000000000000000,
Name: String,
Windows:
[
{
Id: 00000000000000000000000000000000,
Name: String,
SignedSec: 0,
Served: 0
}
],
LoadedRate: 0,
RateSet: False,
RateLocked: False,
Metrics:
{
Checkins: 0,
Walkins: 0,
Appts: 0,
Served: 0,
NoShows: 0,
ApptNoShows: 0,
CancelledAtWindow: 0,
Abandoned: 0,
Called: 0,
CalledUp: 0,
AbandonRate: 0,
NoShowRate: 0,
AvgServiceSec: 0,
MedianServiceSec: 0,
AvgWaitSec: 0,
MaxWaitSec: 0,
AvgWalkUpSec: 0,
ExpectedServiceSec: 0,
SignedSec: 0,
ServingSec: 0,
PausedSec: 0,
IdleSec: 0,
UnstaffedSec: 0,
Utilization: 0,
IdleShare: 0,
PausedShare: 0,
Sessions: 0,
OpenDays: 0,
FeesEarned: 0,
AvgFee: 0,
FeesPerStaffedHour: 0,
ExpectedFeesPerStaffedHour: 0,
LaborCost: 0,
LaborPartial: False,
MissingCostEmployeeIds:
[
00000000000000000000000000000000
],
MissingCost:
[
{
Id: 00000000000000000000000000000000,
Name: String,
SignedSec: 0,
Served: 0
}
],
LaborLocked: False,
Contribution: 0,
LostFees: 0,
LostNoShowFees: 0,
Mix:
{
00000000000000000000000000000000: 0
},
HourlyServed:
[
0
],
HourlyFees:
[
0
],
HourlyCost:
[
0
],
Tints:
[
{
Field: String,
Tone: String,
Reason: String,
Value: 0,
Reference: 0,
BranchValue: 0
}
]
}
},
BranchMetrics:
{
Checkins: 0,
Walkins: 0,
Appts: 0,
Served: 0,
NoShows: 0,
ApptNoShows: 0,
CancelledAtWindow: 0,
Abandoned: 0,
Called: 0,
CalledUp: 0,
AbandonRate: 0,
NoShowRate: 0,
AvgServiceSec: 0,
MedianServiceSec: 0,
AvgWaitSec: 0,
MaxWaitSec: 0,
AvgWalkUpSec: 0,
ExpectedServiceSec: 0,
SignedSec: 0,
ServingSec: 0,
PausedSec: 0,
IdleSec: 0,
UnstaffedSec: 0,
Utilization: 0,
IdleShare: 0,
PausedShare: 0,
Sessions: 0,
OpenDays: 0,
FeesEarned: 0,
AvgFee: 0,
FeesPerStaffedHour: 0,
ExpectedFeesPerStaffedHour: 0,
LaborCost: 0,
LaborPartial: False,
MissingCostEmployeeIds:
[
00000000000000000000000000000000
],
MissingCost:
[
{
Id: 00000000000000000000000000000000,
Name: String,
SignedSec: 0,
Served: 0
}
],
LaborLocked: False,
Contribution: 0,
LostFees: 0,
LostNoShowFees: 0,
Mix:
{
00000000000000000000000000000000: 0
},
HourlyServed:
[
0
],
HourlyFees:
[
0
],
HourlyCost:
[
0
],
Tints:
[
{
Field: String,
Tone: String,
Reason: String,
Value: 0,
Reference: 0,
BranchValue: 0
}
]
},
PerRowAverage:
{
Count: 0,
Served: 0,
AvgServiceSec: 0,
MedianServiceSec: 0,
AvgWaitSec: 0,
Utilization: 0,
IdleSec: 0,
PausedSec: 0,
NoShows: 0,
SignedSec: 0,
FeesEarned: 0,
FeesPerStaffedHour: 0,
LaborCost: 0,
Contribution: 0,
LostNoShowFees: 0
},
Sessions:
[
{
SessionId: 00000000000000000000000000000000,
StationId: 00000000000000000000000000000000,
StationName: String,
EmployeeId: 00000000000000000000000000000000,
EmployeeName: String,
LocalIn: 0001-01-01,
LocalOut: 0001-01-01,
IsOpen: False,
EndReason: String,
PausedSec: 0
}
],
Services:
[
{
LineId: 00000000000000000000000000000000,
Name: String,
Completed: 0,
AvgServiceSec: 0,
BranchAvgServiceSec: 0,
FeesEarned: 0,
FeeCurrent: 0,
FeeMin: 0,
FeeMax: 0,
FeePerMinute: 0,
BranchFeePerMinute: 0,
FeeChanges:
[
{
LocationId: 00000000000000000000000000000000,
OnDate: 0001-01-01,
FromFee: 0,
ToFee: 0
}
]
}
],
CanSeeStaff: False,
CanSeeFinancial: False,
CanSeePay: False
}
}