Trendsic Platform Service

<back to all web services

KpiV2Request

Requires Authentication
The following routes are available for this service:
POST,OPTIONS/v1/dashboard/kpiv2
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 KpiV2LocationRow implements IConvertible
{
    String? LocationName;
    int? Walkins;
    int? Completed;
    double? AvgServiceMinutes;
    double? AbandonmentPct;

    KpiV2LocationRow({this.LocationName,this.Walkins,this.Completed,this.AvgServiceMinutes,this.AbandonmentPct});
    KpiV2LocationRow.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        LocationName = json['LocationName'];
        Walkins = json['Walkins'];
        Completed = json['Completed'];
        AvgServiceMinutes = JsonConverters.toDouble(json['AvgServiceMinutes']);
        AbandonmentPct = JsonConverters.toDouble(json['AbandonmentPct']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'LocationName': LocationName,
        'Walkins': Walkins,
        'Completed': Completed,
        'AvgServiceMinutes': AvgServiceMinutes,
        'AbandonmentPct': AbandonmentPct
    };

    getTypeName() => "KpiV2LocationRow";
    TypeContext? context = _ctx;
}

class KpiV2WorkerRow implements IConvertible
{
    String? WorkerName;
    int? Completed;
    double? AvgServiceMinutes;

    KpiV2WorkerRow({this.WorkerName,this.Completed,this.AvgServiceMinutes});
    KpiV2WorkerRow.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        WorkerName = json['WorkerName'];
        Completed = json['Completed'];
        AvgServiceMinutes = JsonConverters.toDouble(json['AvgServiceMinutes']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'WorkerName': WorkerName,
        'Completed': Completed,
        'AvgServiceMinutes': AvgServiceMinutes
    };

    getTypeName() => "KpiV2WorkerRow";
    TypeContext? context = _ctx;
}

class KpiV2HeatPoint implements IConvertible
{
    int? Dow;
    int? Hr;
    int? Cnt;

    KpiV2HeatPoint({this.Dow,this.Hr,this.Cnt});
    KpiV2HeatPoint.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Dow = json['Dow'];
        Hr = json['Hr'];
        Cnt = json['Cnt'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Dow': Dow,
        'Hr': Hr,
        'Cnt': Cnt
    };

    getTypeName() => "KpiV2HeatPoint";
    TypeContext? context = _ctx;
}

class KpiV2LiveRow implements IConvertible
{
    String? LocationName;
    int? Waiting;
    int? InProgress;

    KpiV2LiveRow({this.LocationName,this.Waiting,this.InProgress});
    KpiV2LiveRow.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        LocationName = json['LocationName'];
        Waiting = json['Waiting'];
        InProgress = json['InProgress'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'LocationName': LocationName,
        'Waiting': Waiting,
        'InProgress': InProgress
    };

    getTypeName() => "KpiV2LiveRow";
    TypeContext? context = _ctx;
}

class KpiV2Response implements IConvertible
{
    ResponseStatus? ResponseStatus;
    List<DashboardStatTile>? Stats = [];
    List<DashboardSeries>? Trend = [];
    DashboardSeries? ServicesByType;
    List<KpiV2LocationRow>? LocationLeaderboard = [];
    List<KpiV2WorkerRow>? WorkerProductivity = [];
    List<KpiV2HeatPoint>? Heatmap = [];
    List<KpiV2LiveRow>? LiveQueue = [];

    KpiV2Response({this.ResponseStatus,this.Stats,this.Trend,this.ServicesByType,this.LocationLeaderboard,this.WorkerProductivity,this.Heatmap,this.LiveQueue});
    KpiV2Response.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!);
        ServicesByType = JsonConverters.fromJson(json['ServicesByType'],'DashboardSeries',context!);
        LocationLeaderboard = JsonConverters.fromJson(json['LocationLeaderboard'],'List<KpiV2LocationRow>',context!);
        WorkerProductivity = JsonConverters.fromJson(json['WorkerProductivity'],'List<KpiV2WorkerRow>',context!);
        Heatmap = JsonConverters.fromJson(json['Heatmap'],'List<KpiV2HeatPoint>',context!);
        LiveQueue = JsonConverters.fromJson(json['LiveQueue'],'List<KpiV2LiveRow>',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!),
        'ServicesByType': JsonConverters.toJson(ServicesByType,'DashboardSeries',context!),
        'LocationLeaderboard': JsonConverters.toJson(LocationLeaderboard,'List<KpiV2LocationRow>',context!),
        'WorkerProductivity': JsonConverters.toJson(WorkerProductivity,'List<KpiV2WorkerRow>',context!),
        'Heatmap': JsonConverters.toJson(Heatmap,'List<KpiV2HeatPoint>',context!),
        'LiveQueue': JsonConverters.toJson(LiveQueue,'List<KpiV2LiveRow>',context!)
    };

    getTypeName() => "KpiV2Response";
    TypeContext? context = _ctx;
}

class KpiV2Request implements IConvertible
{
    DateTime? FromDate;
    DateTime? ToDate;
    List<String>? LocationIds = [];

    KpiV2Request({this.FromDate,this.ToDate,this.LocationIds});
    KpiV2Request.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() => "KpiV2Request";
    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>[]),
    'KpiV2LocationRow': TypeInfo(TypeOf.Class, create:() => KpiV2LocationRow()),
    'KpiV2WorkerRow': TypeInfo(TypeOf.Class, create:() => KpiV2WorkerRow()),
    'KpiV2HeatPoint': TypeInfo(TypeOf.Class, create:() => KpiV2HeatPoint()),
    'KpiV2LiveRow': TypeInfo(TypeOf.Class, create:() => KpiV2LiveRow()),
    'KpiV2Response': TypeInfo(TypeOf.Class, create:() => KpiV2Response()),
    'List<DashboardStatTile>': TypeInfo(TypeOf.Class, create:() => <DashboardStatTile>[]),
    'List<DashboardSeries>': TypeInfo(TypeOf.Class, create:() => <DashboardSeries>[]),
    'List<KpiV2LocationRow>': TypeInfo(TypeOf.Class, create:() => <KpiV2LocationRow>[]),
    'List<KpiV2WorkerRow>': TypeInfo(TypeOf.Class, create:() => <KpiV2WorkerRow>[]),
    'List<KpiV2HeatPoint>': TypeInfo(TypeOf.Class, create:() => <KpiV2HeatPoint>[]),
    'List<KpiV2LiveRow>': TypeInfo(TypeOf.Class, create:() => <KpiV2LiveRow>[]),
    'KpiV2Request': TypeInfo(TypeOf.Class, create:() => KpiV2Request()),
});

Dart KpiV2Request DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml

HTTP + XML

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /v1/dashboard/kpiv2 HTTP/1.1 
Host: api.dev.dynamics.trendsic.com 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<KpiV2Request xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/CRM.AgencyPlatform.API.Internal">
  <FromDate>0001-01-01T00:00:00</FromDate>
  <LocationIds xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:guid>00000000-0000-0000-0000-000000000000</d2p1:guid>
  </LocationIds>
  <ToDate>0001-01-01T00:00:00</ToDate>
</KpiV2Request>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<KpiV2Response xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/CRM.AgencyPlatform.API.Internal">
  <Heatmap>
    <KpiV2HeatPoint>
      <Cnt>0</Cnt>
      <Dow>0</Dow>
      <Hr>0</Hr>
    </KpiV2HeatPoint>
  </Heatmap>
  <LiveQueue>
    <KpiV2LiveRow>
      <InProgress>0</InProgress>
      <LocationName>String</LocationName>
      <Waiting>0</Waiting>
    </KpiV2LiveRow>
  </LiveQueue>
  <LocationLeaderboard>
    <KpiV2LocationRow>
      <AbandonmentPct>0</AbandonmentPct>
      <AvgServiceMinutes>0</AvgServiceMinutes>
      <Completed>0</Completed>
      <LocationName>String</LocationName>
      <Walkins>0</Walkins>
    </KpiV2LocationRow>
  </LocationLeaderboard>
  <ResponseStatus xmlns:d2p1="http://schemas.servicestack.net/types">
    <d2p1:ErrorCode>String</d2p1:ErrorCode>
    <d2p1:Message>String</d2p1:Message>
    <d2p1:StackTrace>String</d2p1:StackTrace>
    <d2p1:Errors>
      <d2p1:ResponseError>
        <d2p1:ErrorCode>String</d2p1:ErrorCode>
        <d2p1:FieldName>String</d2p1:FieldName>
        <d2p1:Message>String</d2p1:Message>
        <d2p1:Meta xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
          <d5p1:KeyValueOfstringstring>
            <d5p1:Key>String</d5p1:Key>
            <d5p1:Value>String</d5p1:Value>
          </d5p1:KeyValueOfstringstring>
        </d2p1:Meta>
      </d2p1:ResponseError>
    </d2p1:Errors>
    <d2p1:Meta xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
      <d3p1:KeyValueOfstringstring>
        <d3p1:Key>String</d3p1:Key>
        <d3p1:Value>String</d3p1:Value>
      </d3p1:KeyValueOfstringstring>
    </d2p1:Meta>
  </ResponseStatus>
  <ServicesByType>
    <Name>String</Name>
    <Points>
      <DashboardSeriesPoint>
        <Label>String</Label>
        <Value>0</Value>
      </DashboardSeriesPoint>
    </Points>
  </ServicesByType>
  <Stats>
    <DashboardStatTile>
      <Key>String</Key>
      <Label>String</Label>
      <PreviousValue>0</PreviousValue>
      <Unit>String</Unit>
      <Value>0</Value>
    </DashboardStatTile>
  </Stats>
  <Trend>
    <DashboardSeries>
      <Name>String</Name>
      <Points>
        <DashboardSeriesPoint>
          <Label>String</Label>
          <Value>0</Value>
        </DashboardSeriesPoint>
      </Points>
    </DashboardSeries>
  </Trend>
  <WorkerProductivity>
    <KpiV2WorkerRow>
      <AvgServiceMinutes>0</AvgServiceMinutes>
      <Completed>0</Completed>
      <WorkerName>String</WorkerName>
    </KpiV2WorkerRow>
  </WorkerProductivity>
</KpiV2Response>