Field Squared API Services

<back to all web services

PublicTask

The following routes are available for this service:
GET/{Workspace}/API/Task/Schema
GET, PUT, POST, DELETE/{Workspace}/API/Task/{Id}
GET, PUT, POST, DELETE/{Workspace}/API/Task
GET/{Workspace}/API/Task/Schema/{TaskTemplate}
import 'package:servicestack/servicestack.dart';

class Location implements IConvertible
{
    double? Latitude;
    double? Longitude;
    bool? HasValidLocation;

    Location({this.Latitude,this.Longitude,this.HasValidLocation});
    Location.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Latitude = JsonConverters.toDouble(json['Latitude']);
        Longitude = JsonConverters.toDouble(json['Longitude']);
        HasValidLocation = json['HasValidLocation'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Latitude': Latitude,
        'Longitude': Longitude,
        'HasValidLocation': HasValidLocation
    };

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

class AddressBase implements IConvertible
{
    String? Id;
    String? AddressLine1;
    String? AddressLine2;
    String? City;
    String? State;
    String? Zip;
    Location? Location;
    String? Name;
    String? NameSingleLine;
    String? NameSingleLine5DigitZip;
    bool? HasValidLocation;
    bool? GeocodeFailed;
    String? GeocodeResultCode;
    String? Country;

    AddressBase({this.Id,this.AddressLine1,this.AddressLine2,this.City,this.State,this.Zip,this.Location,this.Name,this.NameSingleLine,this.NameSingleLine5DigitZip,this.HasValidLocation,this.GeocodeFailed,this.GeocodeResultCode,this.Country});
    AddressBase.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        AddressLine1 = json['AddressLine1'];
        AddressLine2 = json['AddressLine2'];
        City = json['City'];
        State = json['State'];
        Zip = json['Zip'];
        Location = JsonConverters.fromJson(json['Location'],'Location',context!);
        Name = json['Name'];
        NameSingleLine = json['NameSingleLine'];
        NameSingleLine5DigitZip = json['NameSingleLine5DigitZip'];
        HasValidLocation = json['HasValidLocation'];
        GeocodeFailed = json['GeocodeFailed'];
        GeocodeResultCode = json['GeocodeResultCode'];
        Country = json['Country'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'AddressLine1': AddressLine1,
        'AddressLine2': AddressLine2,
        'City': City,
        'State': State,
        'Zip': Zip,
        'Location': JsonConverters.toJson(Location,'Location',context!),
        'Name': Name,
        'NameSingleLine': NameSingleLine,
        'NameSingleLine5DigitZip': NameSingleLine5DigitZip,
        'HasValidLocation': HasValidLocation,
        'GeocodeFailed': GeocodeFailed,
        'GeocodeResultCode': GeocodeResultCode,
        'Country': Country
    };

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

class Address extends AddressBase implements IConvertible
{
    String? SiteName;
    String? ContactTitle;
    String? ContactName;
    String? ContactPhone;
    String? ContactEmail;

    Address({this.SiteName,this.ContactTitle,this.ContactName,this.ContactPhone,this.ContactEmail});
    Address.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SiteName = json['SiteName'];
        ContactTitle = json['ContactTitle'];
        ContactName = json['ContactName'];
        ContactPhone = json['ContactPhone'];
        ContactEmail = json['ContactEmail'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SiteName': SiteName,
        'ContactTitle': ContactTitle,
        'ContactName': ContactName,
        'ContactPhone': ContactPhone,
        'ContactEmail': ContactEmail
    });

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

class Schedule implements IConvertible
{
    String? Workspace;
    String? ObjectId;
    String? VersionId;
    String? BasedOn;
    String? Start;
    String? End;
    String? TimeZone;
    List<String>? Users;
    List<String>? Teams;
    Map<String,dynamic?>? Data;

    Schedule({this.Workspace,this.ObjectId,this.VersionId,this.BasedOn,this.Start,this.End,this.TimeZone,this.Users,this.Teams,this.Data});
    Schedule.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Workspace = json['Workspace'];
        ObjectId = json['ObjectId'];
        VersionId = json['VersionId'];
        BasedOn = json['BasedOn'];
        Start = json['Start'];
        End = json['End'];
        TimeZone = json['TimeZone'];
        Users = JsonConverters.fromJson(json['Users'],'List<String>',context!);
        Teams = JsonConverters.fromJson(json['Teams'],'List<String>',context!);
        Data = JsonConverters.fromJson(json['Data'],'Map<String,dynamic?>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Workspace': Workspace,
        'ObjectId': ObjectId,
        'VersionId': VersionId,
        'BasedOn': BasedOn,
        'Start': Start,
        'End': End,
        'TimeZone': TimeZone,
        'Users': JsonConverters.toJson(Users,'List<String>',context!),
        'Teams': JsonConverters.toJson(Teams,'List<String>',context!),
        'Data': JsonConverters.toJson(Data,'Map<String,dynamic?>',context!)
    };

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

class TimeWindow implements IConvertible
{
    int? Start;
    int? End;

    TimeWindow({this.Start,this.End});
    TimeWindow.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Start = json['Start'];
        End = json['End'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Start': Start,
        'End': End
    };

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

class DomainItem implements IConvertible
{
    String? Workspace;
    String? ObjectId;
    String? VersionId;
    String? LastUpdated;

    DomainItem({this.Workspace,this.ObjectId,this.VersionId,this.LastUpdated});
    DomainItem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Workspace = json['Workspace'];
        ObjectId = json['ObjectId'];
        VersionId = json['VersionId'];
        LastUpdated = json['LastUpdated'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Workspace': Workspace,
        'ObjectId': ObjectId,
        'VersionId': VersionId,
        'LastUpdated': LastUpdated
    };

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

class ClassedItem implements IConvertible
{
    String? ObjectId;
    String? Class;
    String? VersionId;
    List<String>? Ancestors;
    String? Type;

    ClassedItem({this.ObjectId,this.Class,this.VersionId,this.Ancestors,this.Type});
    ClassedItem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ObjectId = json['ObjectId'];
        Class = json['Class'];
        VersionId = json['VersionId'];
        Ancestors = JsonConverters.fromJson(json['Ancestors'],'List<String>',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ObjectId': ObjectId,
        'Class': Class,
        'VersionId': VersionId,
        'Ancestors': JsonConverters.toJson(Ancestors,'List<String>',context!),
        'Type': Type
    };

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

class RangeExceptionItem implements IConvertible
{
    String? Binding;
    String? Message;
    String? Type;
    String? ClassName;

    RangeExceptionItem({this.Binding,this.Message,this.Type,this.ClassName});
    RangeExceptionItem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Binding = json['Binding'];
        Message = json['Message'];
        Type = json['Type'];
        ClassName = json['ClassName'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Binding': Binding,
        'Message': Message,
        'Type': Type,
        'ClassName': ClassName
    };

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

class EventItem implements IConvertible
{
    String? ObjectId;
    String? Date;
    Location? Location;
    String? Barcode;
    String? Details;
    String? Type;
    bool? IsScan;
    String? User;
    String? SelectedBy;
    String? Status;
    String? StatusType;
    String? DateCreated;
    bool? Automatic;

    EventItem({this.ObjectId,this.Date,this.Location,this.Barcode,this.Details,this.Type,this.IsScan,this.User,this.SelectedBy,this.Status,this.StatusType,this.DateCreated,this.Automatic});
    EventItem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ObjectId = json['ObjectId'];
        Date = json['Date'];
        Location = JsonConverters.fromJson(json['Location'],'Location',context!);
        Barcode = json['Barcode'];
        Details = json['Details'];
        Type = json['Type'];
        IsScan = json['IsScan'];
        User = json['User'];
        SelectedBy = json['SelectedBy'];
        Status = json['Status'];
        StatusType = json['StatusType'];
        DateCreated = json['DateCreated'];
        Automatic = json['Automatic'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ObjectId': ObjectId,
        'Date': Date,
        'Location': JsonConverters.toJson(Location,'Location',context!),
        'Barcode': Barcode,
        'Details': Details,
        'Type': Type,
        'IsScan': IsScan,
        'User': User,
        'SelectedBy': SelectedBy,
        'Status': Status,
        'StatusType': StatusType,
        'DateCreated': DateCreated,
        'Automatic': Automatic
    };

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

/**
* Represents a DTO for a team in a workspace. Calls without an ObjectId will retrieve an array of all team objects for the workspace.
*/
class Team implements IConvertible
{
    String? Workspace;
    String? TimeZone;
    String? ObjectId;
    String? ExternalId;
    String? VersionId;
    String? BasedOn;
    String? Name;
    bool? Enabled;
    List<DomainItem>? Members;
    DomainItem? Lead;
    DomainItem? Parent;
    Address? Address;
    Map<String,String?>? Data;
    List<String>? Teams;
    List<EventItem>? Events;
    String? CreatedBy;
    Map<String,dynamic?>? ActiveLaborTypes;

    Team({this.Workspace,this.TimeZone,this.ObjectId,this.ExternalId,this.VersionId,this.BasedOn,this.Name,this.Enabled,this.Members,this.Lead,this.Parent,this.Address,this.Data,this.Teams,this.Events,this.CreatedBy,this.ActiveLaborTypes});
    Team.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Workspace = json['Workspace'];
        TimeZone = json['TimeZone'];
        ObjectId = json['ObjectId'];
        ExternalId = json['ExternalId'];
        VersionId = json['VersionId'];
        BasedOn = json['BasedOn'];
        Name = json['Name'];
        Enabled = json['Enabled'];
        Members = JsonConverters.fromJson(json['Members'],'List<DomainItem>',context!);
        Lead = JsonConverters.fromJson(json['Lead'],'DomainItem',context!);
        Parent = JsonConverters.fromJson(json['Parent'],'DomainItem',context!);
        Address = JsonConverters.fromJson(json['Address'],'Address',context!);
        Data = JsonConverters.toStringMap(json['Data']);
        Teams = JsonConverters.fromJson(json['Teams'],'List<String>',context!);
        Events = JsonConverters.fromJson(json['Events'],'List<EventItem>',context!);
        CreatedBy = json['CreatedBy'];
        ActiveLaborTypes = JsonConverters.fromJson(json['ActiveLaborTypes'],'Map<String,dynamic?>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Workspace': Workspace,
        'TimeZone': TimeZone,
        'ObjectId': ObjectId,
        'ExternalId': ExternalId,
        'VersionId': VersionId,
        'BasedOn': BasedOn,
        'Name': Name,
        'Enabled': Enabled,
        'Members': JsonConverters.toJson(Members,'List<DomainItem>',context!),
        'Lead': JsonConverters.toJson(Lead,'DomainItem',context!),
        'Parent': JsonConverters.toJson(Parent,'DomainItem',context!),
        'Address': JsonConverters.toJson(Address,'Address',context!),
        'Data': Data,
        'Teams': JsonConverters.toJson(Teams,'List<String>',context!),
        'Events': JsonConverters.toJson(Events,'List<EventItem>',context!),
        'CreatedBy': CreatedBy,
        'ActiveLaborTypes': JsonConverters.toJson(ActiveLaborTypes,'Map<String,dynamic?>',context!)
    };

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

class CustomDataField implements IConvertible
{
    String? Binding;
    String? Label;
    dynamic? Value;
    String? DataType;
    bool? IsReadOnly;
    bool? IsHidden;
    String? Values;

    CustomDataField({this.Binding,this.Label,this.Value,this.DataType,this.IsReadOnly,this.IsHidden,this.Values});
    CustomDataField.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Binding = json['Binding'];
        Label = json['Label'];
        Value = JsonConverters.fromJson(json['Value'],'dynamic',context!);
        DataType = json['DataType'];
        IsReadOnly = json['IsReadOnly'];
        IsHidden = json['IsHidden'];
        Values = json['Values'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Binding': Binding,
        'Label': Label,
        'Value': JsonConverters.toJson(Value,'dynamic',context!),
        'DataType': DataType,
        'IsReadOnly': IsReadOnly,
        'IsHidden': IsHidden,
        'Values': Values
    };

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

class DocumentOwnerDataTask implements IConvertible
{
    String? ObjectId;
    String? Name;
    String? Status;
    String? TaskType;
    DateTime? LastUpdated;
    DateTime? Created;
    int? Priority;
    double? Rank;
    Team? FirstTeam;
    Address? Address;
    List<CustomDataField>? CustomDataFields;

    DocumentOwnerDataTask({this.ObjectId,this.Name,this.Status,this.TaskType,this.LastUpdated,this.Created,this.Priority,this.Rank,this.FirstTeam,this.Address,this.CustomDataFields});
    DocumentOwnerDataTask.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ObjectId = json['ObjectId'];
        Name = json['Name'];
        Status = json['Status'];
        TaskType = json['TaskType'];
        LastUpdated = JsonConverters.fromJson(json['LastUpdated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Priority = json['Priority'];
        Rank = JsonConverters.toDouble(json['Rank']);
        FirstTeam = JsonConverters.fromJson(json['FirstTeam'],'Team',context!);
        Address = JsonConverters.fromJson(json['Address'],'Address',context!);
        CustomDataFields = JsonConverters.fromJson(json['CustomDataFields'],'List<CustomDataField>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ObjectId': ObjectId,
        'Name': Name,
        'Status': Status,
        'TaskType': TaskType,
        'LastUpdated': JsonConverters.toJson(LastUpdated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Priority': Priority,
        'Rank': Rank,
        'FirstTeam': JsonConverters.toJson(FirstTeam,'Team',context!),
        'Address': JsonConverters.toJson(Address,'Address',context!),
        'CustomDataFields': JsonConverters.toJson(CustomDataFields,'List<CustomDataField>',context!)
    };

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

class AddressBasic extends AddressBase implements IConvertible
{
    AddressBasic();
    AddressBasic.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "AddressBasic";
    TypeContext? context = _ctx;
}

class DocumentOwnerDataAsset implements IConvertible
{
    String? ObjectId;
    String? Name;
    String? AssetType;
    DateTime? LastUpdated;
    DateTime? Created;
    AddressBasic? Address;
    List<CustomDataField>? CustomDataFields;

    DocumentOwnerDataAsset({this.ObjectId,this.Name,this.AssetType,this.LastUpdated,this.Created,this.Address,this.CustomDataFields});
    DocumentOwnerDataAsset.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ObjectId = json['ObjectId'];
        Name = json['Name'];
        AssetType = json['AssetType'];
        LastUpdated = JsonConverters.fromJson(json['LastUpdated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Address = JsonConverters.fromJson(json['Address'],'AddressBasic',context!);
        CustomDataFields = JsonConverters.fromJson(json['CustomDataFields'],'List<CustomDataField>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ObjectId': ObjectId,
        'Name': Name,
        'AssetType': AssetType,
        'LastUpdated': JsonConverters.toJson(LastUpdated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Address': JsonConverters.toJson(Address,'AddressBasic',context!),
        'CustomDataFields': JsonConverters.toJson(CustomDataFields,'List<CustomDataField>',context!)
    };

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

class DocumentOwnerData implements IConvertible
{
    String? OwnerType;
    DocumentOwnerDataTask? TaskData;
    DocumentOwnerDataAsset? AssetData;

    DocumentOwnerData({this.OwnerType,this.TaskData,this.AssetData});
    DocumentOwnerData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        OwnerType = json['OwnerType'];
        TaskData = JsonConverters.fromJson(json['TaskData'],'DocumentOwnerDataTask',context!);
        AssetData = JsonConverters.fromJson(json['AssetData'],'DocumentOwnerDataAsset',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'OwnerType': OwnerType,
        'TaskData': JsonConverters.toJson(TaskData,'DocumentOwnerDataTask',context!),
        'AssetData': JsonConverters.toJson(AssetData,'DocumentOwnerDataAsset',context!)
    };

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

/**
* Represents a document associated with a task or user. To return multiple documents, call /{Workspace}/Document and pass in query parameter ids = comma separated list of document ids. 
*/
class Document implements IConvertible
{
    String? Workspace;
    String? AssignedWorkspace;
    String? ObjectId;
    String? VersionId;
    String? BasedOn;
    String? Created;
    String? ExternalId;
    String? LastUpdated;
    String? Type;
    String? Name;
    String? Title;
    Map<String,dynamic?>? Data;
    ClassedItem? Owner;
    List<ClassedItem>? SecondaryOwners;
    Location? Location;
    String? Date;
    String? CreatedBy;
    double? PercentComplete;
    int? PercentTotal;
    int? PercentDone;
    List<RangeExceptionItem>? RangeExceptions;
    bool? Submitted;
    String? Schema;
    DocumentOwnerData? OwnerData;

    Document({this.Workspace,this.AssignedWorkspace,this.ObjectId,this.VersionId,this.BasedOn,this.Created,this.ExternalId,this.LastUpdated,this.Type,this.Name,this.Title,this.Data,this.Owner,this.SecondaryOwners,this.Location,this.Date,this.CreatedBy,this.PercentComplete,this.PercentTotal,this.PercentDone,this.RangeExceptions,this.Submitted,this.Schema,this.OwnerData});
    Document.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Workspace = json['Workspace'];
        AssignedWorkspace = json['AssignedWorkspace'];
        ObjectId = json['ObjectId'];
        VersionId = json['VersionId'];
        BasedOn = json['BasedOn'];
        Created = json['Created'];
        ExternalId = json['ExternalId'];
        LastUpdated = json['LastUpdated'];
        Type = json['Type'];
        Name = json['Name'];
        Title = json['Title'];
        Data = JsonConverters.fromJson(json['Data'],'Map<String,dynamic?>',context!);
        Owner = JsonConverters.fromJson(json['Owner'],'ClassedItem',context!);
        SecondaryOwners = JsonConverters.fromJson(json['SecondaryOwners'],'List<ClassedItem>',context!);
        Location = JsonConverters.fromJson(json['Location'],'Location',context!);
        Date = json['Date'];
        CreatedBy = json['CreatedBy'];
        PercentComplete = JsonConverters.toDouble(json['PercentComplete']);
        PercentTotal = json['PercentTotal'];
        PercentDone = json['PercentDone'];
        RangeExceptions = JsonConverters.fromJson(json['RangeExceptions'],'List<RangeExceptionItem>',context!);
        Submitted = json['Submitted'];
        Schema = json['Schema'];
        OwnerData = JsonConverters.fromJson(json['OwnerData'],'DocumentOwnerData',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Workspace': Workspace,
        'AssignedWorkspace': AssignedWorkspace,
        'ObjectId': ObjectId,
        'VersionId': VersionId,
        'BasedOn': BasedOn,
        'Created': Created,
        'ExternalId': ExternalId,
        'LastUpdated': LastUpdated,
        'Type': Type,
        'Name': Name,
        'Title': Title,
        'Data': JsonConverters.toJson(Data,'Map<String,dynamic?>',context!),
        'Owner': JsonConverters.toJson(Owner,'ClassedItem',context!),
        'SecondaryOwners': JsonConverters.toJson(SecondaryOwners,'List<ClassedItem>',context!),
        'Location': JsonConverters.toJson(Location,'Location',context!),
        'Date': Date,
        'CreatedBy': CreatedBy,
        'PercentComplete': PercentComplete,
        'PercentTotal': PercentTotal,
        'PercentDone': PercentDone,
        'RangeExceptions': JsonConverters.toJson(RangeExceptions,'List<RangeExceptionItem>',context!),
        'Submitted': Submitted,
        'Schema': Schema,
        'OwnerData': JsonConverters.toJson(OwnerData,'DocumentOwnerData',context!)
    };

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

class RequiredAsset implements IConvertible
{
    int? Number;
    String? Type;

    RequiredAsset({this.Number,this.Type});
    RequiredAsset.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Number = json['Number'];
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Number': Number,
        'Type': Type
    };

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

class RequiredInventoryType implements IConvertible
{
    int? Number;
    String? Type;
    String? Name;
    bool? IsSerialized;
    String? Description;

    RequiredInventoryType({this.Number,this.Type,this.Name,this.IsSerialized,this.Description});
    RequiredInventoryType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Number = json['Number'];
        Type = json['Type'];
        Name = json['Name'];
        IsSerialized = json['IsSerialized'];
        Description = json['Description'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Number': Number,
        'Type': Type,
        'Name': Name,
        'IsSerialized': IsSerialized,
        'Description': Description
    };

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

class RequiredUser implements IConvertible
{
    int? Number;
    List<String>? SkillTags;

    RequiredUser({this.Number,this.SkillTags});
    RequiredUser.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'Number': Number,
        'SkillTags': JsonConverters.toJson(SkillTags,'List<String>',context!)
    };

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

enum CustomFieldDataType
{
    Text,
    Number,
    Decimal,
    Money,
    PhoneNumber,
    Ssn,
    List,
    Date,
    File,
    Barcode,
    GPS,
    Photo,
    Spacer,
    Separator,
    AutoNumber,
    TextArea,
    Contact,
    User,
    Asset,
    Checkbox,
    CoreAssetList,
    CoreTaskList,
    CoreParentTask,
    CoreContactList,
    ComboBox,
    DateTime,
    Time,
    Location,
    CoreLocation,
    Label,
    EventLog,
    Address,
    Catalog,
    CoreTeamList,
    Segment,
    CoreTimeSeries,
    TimeSeries,
    Command,
    AutoNumberNumeric,
    CatalogList,
    CatalogComboBox,
    DateRange,
    DocumentGrid,
    ReportLink,
    Hyperlink,
    PercentComplete,
    Chart,
    Range,
    ExternalId,
    AssetCatalog,
    Inventory,
    CoreTaskLaborItemTypes,
    CoreTaskLaborItems,
    ObjectList,
    CoreTimeZone,
}

class CustomField implements IConvertible
{
    String? Key;
    String? Label;
    bool? IsActive;
    bool? IsReadOnly;
    bool? IsHidden;
    bool? IsMandatory;
    bool? DisplayOnMap;
    CustomFieldDataType? CustomFieldDataType;
    String? Values;
    String? Prompt;
    String? Default;
    bool? DefaultAutoUpdate;
    String? RequiredIf;
    List<String>? Hidden;
    List<String>? ReadOnly;
    Map<String,dynamic?>? ControlArgs;
    String? IndexSlot;
    String? Index;

    CustomField({this.Key,this.Label,this.IsActive,this.IsReadOnly,this.IsHidden,this.IsMandatory,this.DisplayOnMap,this.CustomFieldDataType,this.Values,this.Prompt,this.Default,this.DefaultAutoUpdate,this.RequiredIf,this.Hidden,this.ReadOnly,this.ControlArgs,this.IndexSlot,this.Index});
    CustomField.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Key = json['Key'];
        Label = json['Label'];
        IsActive = json['IsActive'];
        IsReadOnly = json['IsReadOnly'];
        IsHidden = json['IsHidden'];
        IsMandatory = json['IsMandatory'];
        DisplayOnMap = json['DisplayOnMap'];
        CustomFieldDataType = JsonConverters.fromJson(json['CustomFieldDataType'],'CustomFieldDataType',context!);
        Values = json['Values'];
        Prompt = json['Prompt'];
        Default = json['Default'];
        DefaultAutoUpdate = json['DefaultAutoUpdate'];
        RequiredIf = json['RequiredIf'];
        Hidden = JsonConverters.fromJson(json['Hidden'],'List<String>',context!);
        ReadOnly = JsonConverters.fromJson(json['ReadOnly'],'List<String>',context!);
        ControlArgs = JsonConverters.fromJson(json['ControlArgs'],'Map<String,dynamic?>',context!);
        IndexSlot = json['IndexSlot'];
        Index = json['Index'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Key': Key,
        'Label': Label,
        'IsActive': IsActive,
        'IsReadOnly': IsReadOnly,
        'IsHidden': IsHidden,
        'IsMandatory': IsMandatory,
        'DisplayOnMap': DisplayOnMap,
        'CustomFieldDataType': JsonConverters.toJson(CustomFieldDataType,'CustomFieldDataType',context!),
        'Values': Values,
        'Prompt': Prompt,
        'Default': Default,
        'DefaultAutoUpdate': DefaultAutoUpdate,
        'RequiredIf': RequiredIf,
        'Hidden': JsonConverters.toJson(Hidden,'List<String>',context!),
        'ReadOnly': JsonConverters.toJson(ReadOnly,'List<String>',context!),
        'ControlArgs': JsonConverters.toJson(ControlArgs,'Map<String,dynamic?>',context!),
        'IndexSlot': IndexSlot,
        'Index': Index
    };

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

class BindingDescriptor implements IConvertible
{
    String? Binding;
    bool? Required;

    BindingDescriptor({this.Binding,this.Required});
    BindingDescriptor.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Binding = json['Binding'];
        Required = json['Required'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Binding': Binding,
        'Required': Required
    };

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

class TaskStatusDef implements IConvertible
{
    String? Name;
    String? Color;
    String? Code;
    String? TransitionFrom;
    String? TransitionMessage;
    List<String>? TransitionCustomFields;
    String? HiddenIf;
    bool? IsStart;
    bool? IsEnd;
    bool? IsBlocked;
    String? StatusType;
    String? ProgressType;
    List<String>? AutoCreateDocuments;
    bool? LockTask;
    List<BindingDescriptor>? SubmittedForms;

    TaskStatusDef({this.Name,this.Color,this.Code,this.TransitionFrom,this.TransitionMessage,this.TransitionCustomFields,this.HiddenIf,this.IsStart,this.IsEnd,this.IsBlocked,this.StatusType,this.ProgressType,this.AutoCreateDocuments,this.LockTask,this.SubmittedForms});
    TaskStatusDef.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Name = json['Name'];
        Color = json['Color'];
        Code = json['Code'];
        TransitionFrom = json['TransitionFrom'];
        TransitionMessage = json['TransitionMessage'];
        TransitionCustomFields = JsonConverters.fromJson(json['TransitionCustomFields'],'List<String>',context!);
        HiddenIf = json['HiddenIf'];
        IsStart = json['IsStart'];
        IsEnd = json['IsEnd'];
        IsBlocked = json['IsBlocked'];
        StatusType = json['StatusType'];
        ProgressType = json['ProgressType'];
        AutoCreateDocuments = JsonConverters.fromJson(json['AutoCreateDocuments'],'List<String>',context!);
        LockTask = json['LockTask'];
        SubmittedForms = JsonConverters.fromJson(json['SubmittedForms'],'List<BindingDescriptor>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Name': Name,
        'Color': Color,
        'Code': Code,
        'TransitionFrom': TransitionFrom,
        'TransitionMessage': TransitionMessage,
        'TransitionCustomFields': JsonConverters.toJson(TransitionCustomFields,'List<String>',context!),
        'HiddenIf': HiddenIf,
        'IsStart': IsStart,
        'IsEnd': IsEnd,
        'IsBlocked': IsBlocked,
        'StatusType': StatusType,
        'ProgressType': ProgressType,
        'AutoCreateDocuments': JsonConverters.toJson(AutoCreateDocuments,'List<String>',context!),
        'LockTask': LockTask,
        'SubmittedForms': JsonConverters.toJson(SubmittedForms,'List<BindingDescriptor>',context!)
    };

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

class TaskTemplate implements IConvertible
{
    List<CustomField>? CustomFields;
    List<TaskStatusDef>? Statuses;
    String? TaskListDetails;
    String? AutoAssignStatus;
    String? AutoUnassignStatus;
    String? AutoScheduleStatus;
    String? AutoUnscheduleStatus;
    String? AutoUpdateStartStatus;
    String? AutoUpdateEndStatus;
    String? ArrivalStatus;
    String? DepartureStatus;
    bool? ConfirmArrival;
    bool? ConfirmDeparture;
    bool? ManualArrivalAllowed;
    bool? ManualDepartureAllowed;
    bool? HideDisabledStatuses;
    int? GeofenceRadius;

    TaskTemplate({this.CustomFields,this.Statuses,this.TaskListDetails,this.AutoAssignStatus,this.AutoUnassignStatus,this.AutoScheduleStatus,this.AutoUnscheduleStatus,this.AutoUpdateStartStatus,this.AutoUpdateEndStatus,this.ArrivalStatus,this.DepartureStatus,this.ConfirmArrival,this.ConfirmDeparture,this.ManualArrivalAllowed,this.ManualDepartureAllowed,this.HideDisabledStatuses,this.GeofenceRadius});
    TaskTemplate.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<CustomField>',context!);
        Statuses = JsonConverters.fromJson(json['Statuses'],'List<TaskStatusDef>',context!);
        TaskListDetails = json['TaskListDetails'];
        AutoAssignStatus = json['AutoAssignStatus'];
        AutoUnassignStatus = json['AutoUnassignStatus'];
        AutoScheduleStatus = json['AutoScheduleStatus'];
        AutoUnscheduleStatus = json['AutoUnscheduleStatus'];
        AutoUpdateStartStatus = json['AutoUpdateStartStatus'];
        AutoUpdateEndStatus = json['AutoUpdateEndStatus'];
        ArrivalStatus = json['ArrivalStatus'];
        DepartureStatus = json['DepartureStatus'];
        ConfirmArrival = json['ConfirmArrival'];
        ConfirmDeparture = json['ConfirmDeparture'];
        ManualArrivalAllowed = json['ManualArrivalAllowed'];
        ManualDepartureAllowed = json['ManualDepartureAllowed'];
        HideDisabledStatuses = json['HideDisabledStatuses'];
        GeofenceRadius = json['GeofenceRadius'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CustomFields': JsonConverters.toJson(CustomFields,'List<CustomField>',context!),
        'Statuses': JsonConverters.toJson(Statuses,'List<TaskStatusDef>',context!),
        'TaskListDetails': TaskListDetails,
        'AutoAssignStatus': AutoAssignStatus,
        'AutoUnassignStatus': AutoUnassignStatus,
        'AutoScheduleStatus': AutoScheduleStatus,
        'AutoUnscheduleStatus': AutoUnscheduleStatus,
        'AutoUpdateStartStatus': AutoUpdateStartStatus,
        'AutoUpdateEndStatus': AutoUpdateEndStatus,
        'ArrivalStatus': ArrivalStatus,
        'DepartureStatus': DepartureStatus,
        'ConfirmArrival': ConfirmArrival,
        'ConfirmDeparture': ConfirmDeparture,
        'ManualArrivalAllowed': ManualArrivalAllowed,
        'ManualDepartureAllowed': ManualDepartureAllowed,
        'HideDisabledStatuses': HideDisabledStatuses,
        'GeofenceRadius': GeofenceRadius
    };

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

/**
* Contains the data for a task within the system, with versioned object referneces to users and forms.
*/
class Task implements IConvertible
{
    String? Workspace;
    String? AssignedWorkspace;
    String? ObjectId;
    String? VersionId;
    String? BasedOn;
    String? ExternalId;
    String? Created;
    String? LastUpdated;
    String? LastUpdatedLocal;
    double? Rank;
    String? Name;
    String? Description;
    Address? Address;
    List<Schedule>? Schedules;
    String? Status;
    String? BlockedReason;
    String? TaskType;
    String? DueDate;
    String? DesiredCompletionDate;
    TimeWindow? DesiredTimeWindow;
    int? Priority;
    double? PercentComplete;
    List<String>? Users;
    List<DomainItem>? UsersExtended;
    List<DomainItem>? Teams;
    List<String>? Documents;
    List<DomainItem>? Docs;
    List<Document>? DocSummaries;
    Map<String,dynamic?>? Data;
    List<String>? Contacts;
    Location? StatusLocation;
    List<String>? Assets;
    List<String>? Tasks;
    String? Owner;
    List<EventItem>? Events;
    Map<String,List<EventItem>?>? UserStatuses;
    String? CreatedBy;
    String? TimeZone;
    String? SeriesId;
    int? JobTimerRunTime;
    int? JobTimerPauseTime;
    int? JobTimerTransitTime;
    String? CurrentJobTimerStatus;
    String? CurrentJobTimerTime;
    List<String>? InventoryItems;
    List<String>? LaborItems;
    List<RequiredAsset>? RequiredAssets;
    List<RequiredInventoryType>? RequiredInventoryTypes;
    List<RequiredUser>? RequiredUsers;
    bool? Locked;
    bool? Ready;
    TaskTemplate? TaskTemplate;
    List<CustomDataField>? CustomDataFields;

    Task({this.Workspace,this.AssignedWorkspace,this.ObjectId,this.VersionId,this.BasedOn,this.ExternalId,this.Created,this.LastUpdated,this.LastUpdatedLocal,this.Rank,this.Name,this.Description,this.Address,this.Schedules,this.Status,this.BlockedReason,this.TaskType,this.DueDate,this.DesiredCompletionDate,this.DesiredTimeWindow,this.Priority,this.PercentComplete,this.Users,this.UsersExtended,this.Teams,this.Documents,this.Docs,this.DocSummaries,this.Data,this.Contacts,this.StatusLocation,this.Assets,this.Tasks,this.Owner,this.Events,this.UserStatuses,this.CreatedBy,this.TimeZone,this.SeriesId,this.JobTimerRunTime,this.JobTimerPauseTime,this.JobTimerTransitTime,this.CurrentJobTimerStatus,this.CurrentJobTimerTime,this.InventoryItems,this.LaborItems,this.RequiredAssets,this.RequiredInventoryTypes,this.RequiredUsers,this.Locked,this.Ready,this.TaskTemplate,this.CustomDataFields});
    Task.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Workspace = json['Workspace'];
        AssignedWorkspace = json['AssignedWorkspace'];
        ObjectId = json['ObjectId'];
        VersionId = json['VersionId'];
        BasedOn = json['BasedOn'];
        ExternalId = json['ExternalId'];
        Created = json['Created'];
        LastUpdated = json['LastUpdated'];
        LastUpdatedLocal = json['LastUpdatedLocal'];
        Rank = JsonConverters.toDouble(json['Rank']);
        Name = json['Name'];
        Description = json['Description'];
        Address = JsonConverters.fromJson(json['Address'],'Address',context!);
        Schedules = JsonConverters.fromJson(json['Schedules'],'List<Schedule>',context!);
        Status = json['Status'];
        BlockedReason = json['BlockedReason'];
        TaskType = json['TaskType'];
        DueDate = json['DueDate'];
        DesiredCompletionDate = json['DesiredCompletionDate'];
        DesiredTimeWindow = JsonConverters.fromJson(json['DesiredTimeWindow'],'TimeWindow',context!);
        Priority = json['Priority'];
        PercentComplete = JsonConverters.toDouble(json['PercentComplete']);
        Users = JsonConverters.fromJson(json['Users'],'List<String>',context!);
        UsersExtended = JsonConverters.fromJson(json['UsersExtended'],'List<DomainItem>',context!);
        Teams = JsonConverters.fromJson(json['Teams'],'List<DomainItem>',context!);
        Documents = JsonConverters.fromJson(json['Documents'],'List<String>',context!);
        Docs = JsonConverters.fromJson(json['Docs'],'List<DomainItem>',context!);
        DocSummaries = JsonConverters.fromJson(json['DocSummaries'],'List<Document>',context!);
        Data = JsonConverters.fromJson(json['Data'],'Map<String,dynamic?>',context!);
        Contacts = JsonConverters.fromJson(json['Contacts'],'List<String>',context!);
        StatusLocation = JsonConverters.fromJson(json['StatusLocation'],'Location',context!);
        Assets = JsonConverters.fromJson(json['Assets'],'List<String>',context!);
        Tasks = JsonConverters.fromJson(json['Tasks'],'List<String>',context!);
        Owner = json['Owner'];
        Events = JsonConverters.fromJson(json['Events'],'List<EventItem>',context!);
        UserStatuses = JsonConverters.fromJson(json['UserStatuses'],'Map<String,List<EventItem>?>',context!);
        CreatedBy = json['CreatedBy'];
        TimeZone = json['TimeZone'];
        SeriesId = json['SeriesId'];
        JobTimerRunTime = json['JobTimerRunTime'];
        JobTimerPauseTime = json['JobTimerPauseTime'];
        JobTimerTransitTime = json['JobTimerTransitTime'];
        CurrentJobTimerStatus = json['CurrentJobTimerStatus'];
        CurrentJobTimerTime = json['CurrentJobTimerTime'];
        InventoryItems = JsonConverters.fromJson(json['InventoryItems'],'List<String>',context!);
        LaborItems = JsonConverters.fromJson(json['LaborItems'],'List<String>',context!);
        RequiredAssets = JsonConverters.fromJson(json['RequiredAssets'],'List<RequiredAsset>',context!);
        RequiredInventoryTypes = JsonConverters.fromJson(json['RequiredInventoryTypes'],'List<RequiredInventoryType>',context!);
        RequiredUsers = JsonConverters.fromJson(json['RequiredUsers'],'List<RequiredUser>',context!);
        Locked = json['Locked'];
        Ready = json['Ready'];
        TaskTemplate = JsonConverters.fromJson(json['TaskTemplate'],'TaskTemplate',context!);
        CustomDataFields = JsonConverters.fromJson(json['CustomDataFields'],'List<CustomDataField>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Workspace': Workspace,
        'AssignedWorkspace': AssignedWorkspace,
        'ObjectId': ObjectId,
        'VersionId': VersionId,
        'BasedOn': BasedOn,
        'ExternalId': ExternalId,
        'Created': Created,
        'LastUpdated': LastUpdated,
        'LastUpdatedLocal': LastUpdatedLocal,
        'Rank': Rank,
        'Name': Name,
        'Description': Description,
        'Address': JsonConverters.toJson(Address,'Address',context!),
        'Schedules': JsonConverters.toJson(Schedules,'List<Schedule>',context!),
        'Status': Status,
        'BlockedReason': BlockedReason,
        'TaskType': TaskType,
        'DueDate': DueDate,
        'DesiredCompletionDate': DesiredCompletionDate,
        'DesiredTimeWindow': JsonConverters.toJson(DesiredTimeWindow,'TimeWindow',context!),
        'Priority': Priority,
        'PercentComplete': PercentComplete,
        'Users': JsonConverters.toJson(Users,'List<String>',context!),
        'UsersExtended': JsonConverters.toJson(UsersExtended,'List<DomainItem>',context!),
        'Teams': JsonConverters.toJson(Teams,'List<DomainItem>',context!),
        'Documents': JsonConverters.toJson(Documents,'List<String>',context!),
        'Docs': JsonConverters.toJson(Docs,'List<DomainItem>',context!),
        'DocSummaries': JsonConverters.toJson(DocSummaries,'List<Document>',context!),
        'Data': JsonConverters.toJson(Data,'Map<String,dynamic?>',context!),
        'Contacts': JsonConverters.toJson(Contacts,'List<String>',context!),
        'StatusLocation': JsonConverters.toJson(StatusLocation,'Location',context!),
        'Assets': JsonConverters.toJson(Assets,'List<String>',context!),
        'Tasks': JsonConverters.toJson(Tasks,'List<String>',context!),
        'Owner': Owner,
        'Events': JsonConverters.toJson(Events,'List<EventItem>',context!),
        'UserStatuses': JsonConverters.toJson(UserStatuses,'Map<String,List<EventItem>?>',context!),
        'CreatedBy': CreatedBy,
        'TimeZone': TimeZone,
        'SeriesId': SeriesId,
        'JobTimerRunTime': JobTimerRunTime,
        'JobTimerPauseTime': JobTimerPauseTime,
        'JobTimerTransitTime': JobTimerTransitTime,
        'CurrentJobTimerStatus': CurrentJobTimerStatus,
        'CurrentJobTimerTime': CurrentJobTimerTime,
        'InventoryItems': JsonConverters.toJson(InventoryItems,'List<String>',context!),
        'LaborItems': JsonConverters.toJson(LaborItems,'List<String>',context!),
        'RequiredAssets': JsonConverters.toJson(RequiredAssets,'List<RequiredAsset>',context!),
        'RequiredInventoryTypes': JsonConverters.toJson(RequiredInventoryTypes,'List<RequiredInventoryType>',context!),
        'RequiredUsers': JsonConverters.toJson(RequiredUsers,'List<RequiredUser>',context!),
        'Locked': Locked,
        'Ready': Ready,
        'TaskTemplate': JsonConverters.toJson(TaskTemplate,'TaskTemplate',context!),
        'CustomDataFields': JsonConverters.toJson(CustomDataFields,'List<CustomDataField>',context!)
    };

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

// @DataContract
class PublicTask implements IConvertible
{
    // @DataMember
    String? Id;

    // @DataMember
    String? Workspace;

    // @DataMember
    String? TaskTemplate;

    // @DataMember
    Task? Task;

    // @DataMember
    List<Task>? Tasks;

    PublicTask({this.Id,this.Workspace,this.TaskTemplate,this.Task,this.Tasks});
    PublicTask.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Workspace = json['Workspace'];
        TaskTemplate = json['TaskTemplate'];
        Task = JsonConverters.fromJson(json['Task'],'Task',context!);
        Tasks = JsonConverters.fromJson(json['Tasks'],'List<Task>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Workspace': Workspace,
        'TaskTemplate': TaskTemplate,
        'Task': JsonConverters.toJson(Task,'Task',context!),
        'Tasks': JsonConverters.toJson(Tasks,'List<Task>',context!)
    };

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

class Address implements IConvertible
{
    String? Street;
    String? Unit;
    String? City;
    String? State;
    String? Zip;
    String? ContactTitle;
    String? ContactName;
    String? ContactPhone;
    String? ContactEmail;
    Location? Location;
    String? SiteName;
    bool? GeocodeFailed;
    String? Country;

    Address({this.Street,this.Unit,this.City,this.State,this.Zip,this.ContactTitle,this.ContactName,this.ContactPhone,this.ContactEmail,this.Location,this.SiteName,this.GeocodeFailed,this.Country});
    Address.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Street = json['Street'];
        Unit = json['Unit'];
        City = json['City'];
        State = json['State'];
        Zip = json['Zip'];
        ContactTitle = json['ContactTitle'];
        ContactName = json['ContactName'];
        ContactPhone = json['ContactPhone'];
        ContactEmail = json['ContactEmail'];
        Location = JsonConverters.fromJson(json['Location'],'Location',context!);
        SiteName = json['SiteName'];
        GeocodeFailed = json['GeocodeFailed'];
        Country = json['Country'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Street': Street,
        'Unit': Unit,
        'City': City,
        'State': State,
        'Zip': Zip,
        'ContactTitle': ContactTitle,
        'ContactName': ContactName,
        'ContactPhone': ContactPhone,
        'ContactEmail': ContactEmail,
        'Location': JsonConverters.toJson(Location,'Location',context!),
        'SiteName': SiteName,
        'GeocodeFailed': GeocodeFailed,
        'Country': Country
    };

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

class Location implements IConvertible
{
    double? y;
    double? x;

    Location({this.y,this.x});
    Location.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'y': y,
        'x': x
    };

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

TypeContext _ctx = TypeContext(library: 'dev.fieldsquared.com', types: <String, TypeInfo> {
    'Location': TypeInfo(TypeOf.Class, create:() => Location()),
    'AddressBase': TypeInfo(TypeOf.Class, create:() => AddressBase()),
    'Address': TypeInfo(TypeOf.Class, create:() => Address()),
    'Schedule': TypeInfo(TypeOf.Class, create:() => Schedule()),
    'Map<String,dynamic?>': TypeInfo(TypeOf.Class, create:() => Map<String,dynamic?>()),
    'TimeWindow': TypeInfo(TypeOf.Class, create:() => TimeWindow()),
    'DomainItem': TypeInfo(TypeOf.Class, create:() => DomainItem()),
    'ClassedItem': TypeInfo(TypeOf.Class, create:() => ClassedItem()),
    'RangeExceptionItem': TypeInfo(TypeOf.Class, create:() => RangeExceptionItem()),
    'EventItem': TypeInfo(TypeOf.Class, create:() => EventItem()),
    'Team': TypeInfo(TypeOf.Class, create:() => Team()),
    'List<DomainItem>': TypeInfo(TypeOf.Class, create:() => <DomainItem>[]),
    'List<EventItem>': TypeInfo(TypeOf.Class, create:() => <EventItem>[]),
    'CustomDataField': TypeInfo(TypeOf.Class, create:() => CustomDataField()),
    'DocumentOwnerDataTask': TypeInfo(TypeOf.Class, create:() => DocumentOwnerDataTask()),
    'List<CustomDataField>': TypeInfo(TypeOf.Class, create:() => <CustomDataField>[]),
    'AddressBasic': TypeInfo(TypeOf.Class, create:() => AddressBasic()),
    'DocumentOwnerDataAsset': TypeInfo(TypeOf.Class, create:() => DocumentOwnerDataAsset()),
    'DocumentOwnerData': TypeInfo(TypeOf.Class, create:() => DocumentOwnerData()),
    'Document': TypeInfo(TypeOf.Class, create:() => Document()),
    'List<ClassedItem>': TypeInfo(TypeOf.Class, create:() => <ClassedItem>[]),
    'List<RangeExceptionItem>': TypeInfo(TypeOf.Class, create:() => <RangeExceptionItem>[]),
    'RequiredAsset': TypeInfo(TypeOf.Class, create:() => RequiredAsset()),
    'RequiredInventoryType': TypeInfo(TypeOf.Class, create:() => RequiredInventoryType()),
    'RequiredUser': TypeInfo(TypeOf.Class, create:() => RequiredUser()),
    'CustomFieldDataType': TypeInfo(TypeOf.Enum, enumValues:CustomFieldDataType.values),
    'CustomField': TypeInfo(TypeOf.Class, create:() => CustomField()),
    'BindingDescriptor': TypeInfo(TypeOf.Class, create:() => BindingDescriptor()),
    'TaskStatusDef': TypeInfo(TypeOf.Class, create:() => TaskStatusDef()),
    'List<BindingDescriptor>': TypeInfo(TypeOf.Class, create:() => <BindingDescriptor>[]),
    'TaskTemplate': TypeInfo(TypeOf.Class, create:() => TaskTemplate()),
    'List<CustomField>': TypeInfo(TypeOf.Class, create:() => <CustomField>[]),
    'List<TaskStatusDef>': TypeInfo(TypeOf.Class, create:() => <TaskStatusDef>[]),
    'Task': TypeInfo(TypeOf.Class, create:() => Task()),
    'List<Schedule>': TypeInfo(TypeOf.Class, create:() => <Schedule>[]),
    'List<Document>': TypeInfo(TypeOf.Class, create:() => <Document>[]),
    'Map<String,List<EventItem>?>': TypeInfo(TypeOf.Class, create:() => Map<String,List<EventItem>?>()),
    'List<RequiredAsset>': TypeInfo(TypeOf.Class, create:() => <RequiredAsset>[]),
    'List<RequiredInventoryType>': TypeInfo(TypeOf.Class, create:() => <RequiredInventoryType>[]),
    'List<RequiredUser>': TypeInfo(TypeOf.Class, create:() => <RequiredUser>[]),
    'PublicTask': TypeInfo(TypeOf.Class, create:() => PublicTask()),
    'List<Task>': TypeInfo(TypeOf.Class, create:() => <Task>[]),
});

Dart PublicTask 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.

POST /{Workspace}/API/Task/{Id} HTTP/1.1 
Host: dev.fieldsquared.com 
Accept: text/csv
Content-Type: text/csv
Content-Length: length

{"Id":"String","Workspace":"String","TaskTemplate":"String","Task":{"Name":"String","Description":"String","ExternalId":"String","TaskType":"String","Priority":0,"DueDate":"String","DesiredCompletionDate":"String","Lat":0,"Lon":0,"StreetAddress":"String","Unit":"String","City":"String","State":"String","Zip":"String","Country":"String","ScheduleStart":"String","ScheduleEnd":"String","Status":"String","User":"String","Team":"String","Asset":"String","Contact":"String","TimeZone":"String","LastUpdated":"String","Created":"String","Data":{"String":{}}},"Tasks":[{"Name":"String","Description":"String","ExternalId":"String","TaskType":"String","Priority":0,"DueDate":"String","DesiredCompletionDate":"String","Lat":0,"Lon":0,"StreetAddress":"String","Unit":"String","City":"String","State":"String","Zip":"String","Country":"String","ScheduleStart":"String","ScheduleEnd":"String","Status":"String","User":"String","Team":"String","Asset":"String","Contact":"String","TimeZone":"String","LastUpdated":"String","Created":"String","Data":{"String":{}}}]}