Trendsic Platform Service

<back to all web services

PlanningRequest

Requires Authentication
The following routes are available for this service:
GET/v1/workforce/planning
import 'package:servicestack/servicestack.dart';

class OtRow implements IConvertible
{
    int? ContactID;
    String? WorkerName;
    String? ClassCode;
    String? Crew;
    String? Job;
    String? PatternLabel;
    double? ProjHours;
    double? OtHours;
    double? DtHours;
    double? OtCost;
    String? State;
    String? Tone;

    OtRow({this.ContactID,this.WorkerName,this.ClassCode,this.Crew,this.Job,this.PatternLabel,this.ProjHours,this.OtHours,this.DtHours,this.OtCost,this.State,this.Tone});
    OtRow.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ContactID = json['ContactID'];
        WorkerName = json['WorkerName'];
        ClassCode = json['ClassCode'];
        Crew = json['Crew'];
        Job = json['Job'];
        PatternLabel = json['PatternLabel'];
        ProjHours = JsonConverters.toDouble(json['ProjHours']);
        OtHours = JsonConverters.toDouble(json['OtHours']);
        DtHours = JsonConverters.toDouble(json['DtHours']);
        OtCost = JsonConverters.toDouble(json['OtCost']);
        State = json['State'];
        Tone = json['Tone'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ContactID': ContactID,
        'WorkerName': WorkerName,
        'ClassCode': ClassCode,
        'Crew': Crew,
        'Job': Job,
        'PatternLabel': PatternLabel,
        'ProjHours': ProjHours,
        'OtHours': OtHours,
        'DtHours': DtHours,
        'OtCost': OtCost,
        'State': State,
        'Tone': Tone
    };

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

class OtExposureBoard implements IConvertible
{
    double? TotalOtCost;
    double? TotalOtHours;
    int? OverCount;
    int? WorkerCount;
    List<OtRow>? Rows = [];

    OtExposureBoard({this.TotalOtCost,this.TotalOtHours,this.OverCount,this.WorkerCount,this.Rows});
    OtExposureBoard.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        TotalOtCost = JsonConverters.toDouble(json['TotalOtCost']);
        TotalOtHours = JsonConverters.toDouble(json['TotalOtHours']);
        OverCount = json['OverCount'];
        WorkerCount = json['WorkerCount'];
        Rows = JsonConverters.fromJson(json['Rows'],'List<OtRow>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'TotalOtCost': TotalOtCost,
        'TotalOtHours': TotalOtHours,
        'OverCount': OverCount,
        'WorkerCount': WorkerCount,
        'Rows': JsonConverters.toJson(Rows,'List<OtRow>',context!)
    };

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

class PerDiemJobRow implements IConvertible
{
    String? Job;
    double? Total;
    double? NonTax;
    double? Tax;
    int? Days;
    int? AwayCount;
    bool? DayRateFlag;

    PerDiemJobRow({this.Job,this.Total,this.NonTax,this.Tax,this.Days,this.AwayCount,this.DayRateFlag});
    PerDiemJobRow.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Job = json['Job'];
        Total = JsonConverters.toDouble(json['Total']);
        NonTax = JsonConverters.toDouble(json['NonTax']);
        Tax = JsonConverters.toDouble(json['Tax']);
        Days = json['Days'];
        AwayCount = json['AwayCount'];
        DayRateFlag = json['DayRateFlag'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Job': Job,
        'Total': Total,
        'NonTax': NonTax,
        'Tax': Tax,
        'Days': Days,
        'AwayCount': AwayCount,
        'DayRateFlag': DayRateFlag
    };

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

class PerDiemBoard implements IConvertible
{
    double? TotalCost;
    double? NonTaxable;
    double? Taxable;
    int? AwayCount;
    List<PerDiemJobRow>? Jobs = [];

    PerDiemBoard({this.TotalCost,this.NonTaxable,this.Taxable,this.AwayCount,this.Jobs});
    PerDiemBoard.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        TotalCost = JsonConverters.toDouble(json['TotalCost']);
        NonTaxable = JsonConverters.toDouble(json['NonTaxable']);
        Taxable = JsonConverters.toDouble(json['Taxable']);
        AwayCount = json['AwayCount'];
        Jobs = JsonConverters.fromJson(json['Jobs'],'List<PerDiemJobRow>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'TotalCost': TotalCost,
        'NonTaxable': NonTaxable,
        'Taxable': Taxable,
        'AwayCount': AwayCount,
        'Jobs': JsonConverters.toJson(Jobs,'List<PerDiemJobRow>',context!)
    };

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

class MarginJobRow implements IConvertible
{
    String? Job;
    double? BasePct;
    double? ProjPct;
    double? FadePts;
    String? Severity;
    double? OtCost;
    double? PerDiem;

    MarginJobRow({this.Job,this.BasePct,this.ProjPct,this.FadePts,this.Severity,this.OtCost,this.PerDiem});
    MarginJobRow.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Job = json['Job'];
        BasePct = JsonConverters.toDouble(json['BasePct']);
        ProjPct = JsonConverters.toDouble(json['ProjPct']);
        FadePts = JsonConverters.toDouble(json['FadePts']);
        Severity = json['Severity'];
        OtCost = JsonConverters.toDouble(json['OtCost']);
        PerDiem = JsonConverters.toDouble(json['PerDiem']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Job': Job,
        'BasePct': BasePct,
        'ProjPct': ProjPct,
        'FadePts': FadePts,
        'Severity': Severity,
        'OtCost': OtCost,
        'PerDiem': PerDiem
    };

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

class MarginBoard implements IConvertible
{
    int? JobCount;
    double? TotalFade;
    List<MarginJobRow>? Jobs = [];

    MarginBoard({this.JobCount,this.TotalFade,this.Jobs});
    MarginBoard.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        JobCount = json['JobCount'];
        TotalFade = JsonConverters.toDouble(json['TotalFade']);
        Jobs = JsonConverters.fromJson(json['Jobs'],'List<MarginJobRow>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'JobCount': JobCount,
        'TotalFade': TotalFade,
        'Jobs': JsonConverters.toJson(Jobs,'List<MarginJobRow>',context!)
    };

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

class UtilRow implements IConvertible
{
    int? ContactID;
    String? WorkerName;
    String? Crew;
    double? ProjHours;
    double? BaselineHours;
    double? Pct;
    String? Band;

    UtilRow({this.ContactID,this.WorkerName,this.Crew,this.ProjHours,this.BaselineHours,this.Pct,this.Band});
    UtilRow.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ContactID = json['ContactID'];
        WorkerName = json['WorkerName'];
        Crew = json['Crew'];
        ProjHours = JsonConverters.toDouble(json['ProjHours']);
        BaselineHours = JsonConverters.toDouble(json['BaselineHours']);
        Pct = JsonConverters.toDouble(json['Pct']);
        Band = json['Band'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ContactID': ContactID,
        'WorkerName': WorkerName,
        'Crew': Crew,
        'ProjHours': ProjHours,
        'BaselineHours': BaselineHours,
        'Pct': Pct,
        'Band': Band
    };

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

class UtilizationBoard implements IConvertible
{
    int? UnderCount;
    int? OverCount;
    List<UtilRow>? Rows = [];

    UtilizationBoard({this.UnderCount,this.OverCount,this.Rows});
    UtilizationBoard.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        UnderCount = json['UnderCount'];
        OverCount = json['OverCount'];
        Rows = JsonConverters.fromJson(json['Rows'],'List<UtilRow>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'UnderCount': UnderCount,
        'OverCount': OverCount,
        'Rows': JsonConverters.toJson(Rows,'List<UtilRow>',context!)
    };

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

class PlanningSuggestion implements IConvertible
{
    String? Id;
    String? Kind;
    String? Title;
    String? Detail;
    String? SaveText;
    String? Effect;
    String? RuleId;
    String? LegalNote;
    String? ApplyLabel;
    String? Severity;

    PlanningSuggestion({this.Id,this.Kind,this.Title,this.Detail,this.SaveText,this.Effect,this.RuleId,this.LegalNote,this.ApplyLabel,this.Severity});
    PlanningSuggestion.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Kind = json['Kind'];
        Title = json['Title'];
        Detail = json['Detail'];
        SaveText = json['SaveText'];
        Effect = json['Effect'];
        RuleId = json['RuleId'];
        LegalNote = json['LegalNote'];
        ApplyLabel = json['ApplyLabel'];
        Severity = json['Severity'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Kind': Kind,
        'Title': Title,
        'Detail': Detail,
        'SaveText': SaveText,
        'Effect': Effect,
        'RuleId': RuleId,
        'LegalNote': LegalNote,
        'ApplyLabel': ApplyLabel,
        'Severity': Severity
    };

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

class PlanningSurface implements IConvertible
{
    String? WeekLabel;
    DateTime? WeekStart;
    int? WorkerCount;
    OtExposureBoard? Ot;
    PerDiemBoard? PerDiem;
    MarginBoard? Margin;
    UtilizationBoard? Utilization;
    List<PlanningSuggestion>? Suggestions = [];

    PlanningSurface({this.WeekLabel,this.WeekStart,this.WorkerCount,this.Ot,this.PerDiem,this.Margin,this.Utilization,this.Suggestions});
    PlanningSurface.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        WeekLabel = json['WeekLabel'];
        WeekStart = JsonConverters.fromJson(json['WeekStart'],'DateTime',context!);
        WorkerCount = json['WorkerCount'];
        Ot = JsonConverters.fromJson(json['Ot'],'OtExposureBoard',context!);
        PerDiem = JsonConverters.fromJson(json['PerDiem'],'PerDiemBoard',context!);
        Margin = JsonConverters.fromJson(json['Margin'],'MarginBoard',context!);
        Utilization = JsonConverters.fromJson(json['Utilization'],'UtilizationBoard',context!);
        Suggestions = JsonConverters.fromJson(json['Suggestions'],'List<PlanningSuggestion>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'WeekLabel': WeekLabel,
        'WeekStart': JsonConverters.toJson(WeekStart,'DateTime',context!),
        'WorkerCount': WorkerCount,
        'Ot': JsonConverters.toJson(Ot,'OtExposureBoard',context!),
        'PerDiem': JsonConverters.toJson(PerDiem,'PerDiemBoard',context!),
        'Margin': JsonConverters.toJson(Margin,'MarginBoard',context!),
        'Utilization': JsonConverters.toJson(Utilization,'UtilizationBoard',context!),
        'Suggestions': JsonConverters.toJson(Suggestions,'List<PlanningSuggestion>',context!)
    };

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

class PlanningResponse implements IConvertible
{
    PlanningSurface? Surface;
    bool? CanSeePay;
    ResponseStatus? ResponseStatus;

    PlanningResponse({this.Surface,this.CanSeePay,this.ResponseStatus});
    PlanningResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Surface = JsonConverters.fromJson(json['Surface'],'PlanningSurface',context!);
        CanSeePay = json['CanSeePay'];
        ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Surface': JsonConverters.toJson(Surface,'PlanningSurface',context!),
        'CanSeePay': CanSeePay,
        'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!)
    };

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

class PlanningRequest implements IConvertible
{
    DateTime? AsOf;

    PlanningRequest({this.AsOf});
    PlanningRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AsOf = JsonConverters.fromJson(json['AsOf'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AsOf': JsonConverters.toJson(AsOf,'DateTime',context!)
    };

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

TypeContext _ctx = TypeContext(library: 'api.dev.dynamics.trendsic.com', types: <String, TypeInfo> {
    'OtRow': TypeInfo(TypeOf.Class, create:() => OtRow()),
    'OtExposureBoard': TypeInfo(TypeOf.Class, create:() => OtExposureBoard()),
    'List<OtRow>': TypeInfo(TypeOf.Class, create:() => <OtRow>[]),
    'PerDiemJobRow': TypeInfo(TypeOf.Class, create:() => PerDiemJobRow()),
    'PerDiemBoard': TypeInfo(TypeOf.Class, create:() => PerDiemBoard()),
    'List<PerDiemJobRow>': TypeInfo(TypeOf.Class, create:() => <PerDiemJobRow>[]),
    'MarginJobRow': TypeInfo(TypeOf.Class, create:() => MarginJobRow()),
    'MarginBoard': TypeInfo(TypeOf.Class, create:() => MarginBoard()),
    'List<MarginJobRow>': TypeInfo(TypeOf.Class, create:() => <MarginJobRow>[]),
    'UtilRow': TypeInfo(TypeOf.Class, create:() => UtilRow()),
    'UtilizationBoard': TypeInfo(TypeOf.Class, create:() => UtilizationBoard()),
    'List<UtilRow>': TypeInfo(TypeOf.Class, create:() => <UtilRow>[]),
    'PlanningSuggestion': TypeInfo(TypeOf.Class, create:() => PlanningSuggestion()),
    'PlanningSurface': TypeInfo(TypeOf.Class, create:() => PlanningSurface()),
    'List<PlanningSuggestion>': TypeInfo(TypeOf.Class, create:() => <PlanningSuggestion>[]),
    'PlanningResponse': TypeInfo(TypeOf.Class, create:() => PlanningResponse()),
    'PlanningRequest': TypeInfo(TypeOf.Class, create:() => PlanningRequest()),
});

Dart PlanningRequest DTOs

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

HTTP + CSV

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

GET /v1/workforce/planning HTTP/1.1 
Host: api.dev.dynamics.trendsic.com 
Accept: text/csv
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length

{"Surface":{"WeekLabel":"String","WeekStart":"0001-01-01T00:00:00.0000000","WorkerCount":0,"Ot":{"TotalOtCost":0,"TotalOtHours":0,"OverCount":0,"WorkerCount":0,"Rows":[{"ContactID":0,"WorkerName":"String","ClassCode":"String","Crew":"String","Job":"String","PatternLabel":"String","ProjHours":0,"OtHours":0,"DtHours":0,"OtCost":0,"State":"String","Tone":"String"}]},"PerDiem":{"TotalCost":0,"NonTaxable":0,"Taxable":0,"AwayCount":0,"Jobs":[{"Job":"String","Total":0,"NonTax":0,"Tax":0,"Days":0,"AwayCount":0,"DayRateFlag":false}]},"Margin":{"JobCount":0,"TotalFade":0,"Jobs":[{"Job":"String","BasePct":0,"ProjPct":0,"FadePts":0,"Severity":"String","OtCost":0,"PerDiem":0}]},"Utilization":{"UnderCount":0,"OverCount":0,"Rows":[{"ContactID":0,"WorkerName":"String","Crew":"String","ProjHours":0,"BaselineHours":0,"Pct":0,"Band":"String"}]},"Suggestions":[{"Id":"String","Kind":"String","Title":"String","Detail":"String","SaveText":"String","Effect":"String","RuleId":"String","LegalNote":"String","ApplyLabel":"String","Severity":"String"}]},"CanSeePay":false,"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}}}