Trendsic Platform Service

<back to all web services

ProjectTimelineRequest

Requires Authentication
Requires any of the roles:Agent, Administrator
The following routes are available for this service:
GET,OPTIONS/v1/project/{ProjectID}/timeline
import 'package:servicestack/servicestack.dart';

class TimelineCrew implements IConvertible
{
    int? ProjectJobCrewMemberID;
    int? ContactID;
    String? ContactName;
    double? BudgetedHours;

    TimelineCrew({this.ProjectJobCrewMemberID,this.ContactID,this.ContactName,this.BudgetedHours});
    TimelineCrew.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ProjectJobCrewMemberID = json['ProjectJobCrewMemberID'];
        ContactID = json['ContactID'];
        ContactName = json['ContactName'];
        BudgetedHours = JsonConverters.toDouble(json['BudgetedHours']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ProjectJobCrewMemberID': ProjectJobCrewMemberID,
        'ContactID': ContactID,
        'ContactName': ContactName,
        'BudgetedHours': BudgetedHours
    };

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

class TimelineEquipment implements IConvertible
{
    int? ProjectJobEquipmentID;
    int? EquipmentID;
    String? EquipmentName;

    TimelineEquipment({this.ProjectJobEquipmentID,this.EquipmentID,this.EquipmentName});
    TimelineEquipment.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ProjectJobEquipmentID = json['ProjectJobEquipmentID'];
        EquipmentID = json['EquipmentID'];
        EquipmentName = json['EquipmentName'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ProjectJobEquipmentID': ProjectJobEquipmentID,
        'EquipmentID': EquipmentID,
        'EquipmentName': EquipmentName
    };

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

class TimelineJob implements IConvertible
{
    int? JobID;
    String? JobName;
    DateTime? ExpectedStartDate;
    DateTime? ExpectedCompletionDate;
    DateTime? ActualStartDate;
    DateTime? ActualEndDate;
    double? PercentComplete;
    int? StatusID;
    String? JobCategory;
    bool? IsAgreementVisit;
    DateTime? OccurrenceDate;
    List<TimelineCrew>? Crew = [];
    List<TimelineEquipment>? Equipment = [];

    TimelineJob({this.JobID,this.JobName,this.ExpectedStartDate,this.ExpectedCompletionDate,this.ActualStartDate,this.ActualEndDate,this.PercentComplete,this.StatusID,this.JobCategory,this.IsAgreementVisit,this.OccurrenceDate,this.Crew,this.Equipment});
    TimelineJob.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        JobID = json['JobID'];
        JobName = json['JobName'];
        ExpectedStartDate = JsonConverters.fromJson(json['ExpectedStartDate'],'DateTime',context!);
        ExpectedCompletionDate = JsonConverters.fromJson(json['ExpectedCompletionDate'],'DateTime',context!);
        ActualStartDate = JsonConverters.fromJson(json['ActualStartDate'],'DateTime',context!);
        ActualEndDate = JsonConverters.fromJson(json['ActualEndDate'],'DateTime',context!);
        PercentComplete = JsonConverters.toDouble(json['PercentComplete']);
        StatusID = json['StatusID'];
        JobCategory = json['JobCategory'];
        IsAgreementVisit = json['IsAgreementVisit'];
        OccurrenceDate = JsonConverters.fromJson(json['OccurrenceDate'],'DateTime',context!);
        Crew = JsonConverters.fromJson(json['Crew'],'List<TimelineCrew>',context!);
        Equipment = JsonConverters.fromJson(json['Equipment'],'List<TimelineEquipment>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'JobID': JobID,
        'JobName': JobName,
        'ExpectedStartDate': JsonConverters.toJson(ExpectedStartDate,'DateTime',context!),
        'ExpectedCompletionDate': JsonConverters.toJson(ExpectedCompletionDate,'DateTime',context!),
        'ActualStartDate': JsonConverters.toJson(ActualStartDate,'DateTime',context!),
        'ActualEndDate': JsonConverters.toJson(ActualEndDate,'DateTime',context!),
        'PercentComplete': PercentComplete,
        'StatusID': StatusID,
        'JobCategory': JobCategory,
        'IsAgreementVisit': IsAgreementVisit,
        'OccurrenceDate': JsonConverters.toJson(OccurrenceDate,'DateTime',context!),
        'Crew': JsonConverters.toJson(Crew,'List<TimelineCrew>',context!),
        'Equipment': JsonConverters.toJson(Equipment,'List<TimelineEquipment>',context!)
    };

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

class JobDependency implements IConvertible
{
    int? JobDependencyID;
    String? TenantId;
    int? ProjectID;
    int? PredecessorJobID;
    int? SuccessorJobID;
    String? DependencyType;
    int? LagDays;
    String? CreatedBy;
    DateTime? CreatedAt;
    DateTime? UpdatedAt;

    JobDependency({this.JobDependencyID,this.TenantId,this.ProjectID,this.PredecessorJobID,this.SuccessorJobID,this.DependencyType,this.LagDays,this.CreatedBy,this.CreatedAt,this.UpdatedAt});
    JobDependency.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        JobDependencyID = json['JobDependencyID'];
        TenantId = json['TenantId'];
        ProjectID = json['ProjectID'];
        PredecessorJobID = json['PredecessorJobID'];
        SuccessorJobID = json['SuccessorJobID'];
        DependencyType = json['DependencyType'];
        LagDays = json['LagDays'];
        CreatedBy = json['CreatedBy'];
        CreatedAt = JsonConverters.fromJson(json['CreatedAt'],'DateTime',context!);
        UpdatedAt = JsonConverters.fromJson(json['UpdatedAt'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'JobDependencyID': JobDependencyID,
        'TenantId': TenantId,
        'ProjectID': ProjectID,
        'PredecessorJobID': PredecessorJobID,
        'SuccessorJobID': SuccessorJobID,
        'DependencyType': DependencyType,
        'LagDays': LagDays,
        'CreatedBy': CreatedBy,
        'CreatedAt': JsonConverters.toJson(CreatedAt,'DateTime',context!),
        'UpdatedAt': JsonConverters.toJson(UpdatedAt,'DateTime',context!)
    };

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

class ProjectTimeline implements IConvertible
{
    int? ProjectID;
    List<TimelineJob>? Jobs = [];
    List<JobDependency>? Dependencies = [];

    ProjectTimeline({this.ProjectID,this.Jobs,this.Dependencies});
    ProjectTimeline.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ProjectID = json['ProjectID'];
        Jobs = JsonConverters.fromJson(json['Jobs'],'List<TimelineJob>',context!);
        Dependencies = JsonConverters.fromJson(json['Dependencies'],'List<JobDependency>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ProjectID': ProjectID,
        'Jobs': JsonConverters.toJson(Jobs,'List<TimelineJob>',context!),
        'Dependencies': JsonConverters.toJson(Dependencies,'List<JobDependency>',context!)
    };

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

class ProjectTimelineResponse implements IConvertible
{
    ResponseStatus? ResponseStatus;
    ProjectTimeline? Timeline;

    ProjectTimelineResponse({this.ResponseStatus,this.Timeline});
    ProjectTimelineResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class ProjectTimelineRequest implements IConvertible
{
    int? ProjectID;

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

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

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

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

TypeContext _ctx = TypeContext(library: 'api.dev.dynamics.trendsic.com', types: <String, TypeInfo> {
    'TimelineCrew': TypeInfo(TypeOf.Class, create:() => TimelineCrew()),
    'TimelineEquipment': TypeInfo(TypeOf.Class, create:() => TimelineEquipment()),
    'TimelineJob': TypeInfo(TypeOf.Class, create:() => TimelineJob()),
    'List<TimelineCrew>': TypeInfo(TypeOf.Class, create:() => <TimelineCrew>[]),
    'List<TimelineEquipment>': TypeInfo(TypeOf.Class, create:() => <TimelineEquipment>[]),
    'JobDependency': TypeInfo(TypeOf.Class, create:() => JobDependency()),
    'ProjectTimeline': TypeInfo(TypeOf.Class, create:() => ProjectTimeline()),
    'List<TimelineJob>': TypeInfo(TypeOf.Class, create:() => <TimelineJob>[]),
    'List<JobDependency>': TypeInfo(TypeOf.Class, create:() => <JobDependency>[]),
    'ProjectTimelineResponse': TypeInfo(TypeOf.Class, create:() => ProjectTimelineResponse()),
    'ProjectTimelineRequest': TypeInfo(TypeOf.Class, create:() => ProjectTimelineRequest()),
});

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

GET /v1/project/{ProjectID}/timeline HTTP/1.1 
Host: api.dev.dynamics.trendsic.com 
Accept: application/xml
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<ProjectTimelineResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/CRM.AgencyPlatform.API.Internal">
  <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>
  <Timeline>
    <Dependencies>
      <JobDependency>
        <CreatedAt>0001-01-01T00:00:00</CreatedAt>
        <CreatedBy>String</CreatedBy>
        <DependencyType>String</DependencyType>
        <JobDependencyID>0</JobDependencyID>
        <LagDays>0</LagDays>
        <PredecessorJobID>0</PredecessorJobID>
        <ProjectID>0</ProjectID>
        <SuccessorJobID>0</SuccessorJobID>
        <TenantId>00000000-0000-0000-0000-000000000000</TenantId>
        <UpdatedAt>0001-01-01T00:00:00</UpdatedAt>
      </JobDependency>
    </Dependencies>
    <Jobs>
      <TimelineJob>
        <ActualEndDate>0001-01-01T00:00:00</ActualEndDate>
        <ActualStartDate>0001-01-01T00:00:00</ActualStartDate>
        <Crew>
          <TimelineCrew>
            <BudgetedHours>0</BudgetedHours>
            <ContactID>0</ContactID>
            <ContactName>String</ContactName>
            <ProjectJobCrewMemberID>0</ProjectJobCrewMemberID>
          </TimelineCrew>
        </Crew>
        <Equipment>
          <TimelineEquipment>
            <EquipmentID>0</EquipmentID>
            <EquipmentName>String</EquipmentName>
            <ProjectJobEquipmentID>0</ProjectJobEquipmentID>
          </TimelineEquipment>
        </Equipment>
        <ExpectedCompletionDate>0001-01-01T00:00:00</ExpectedCompletionDate>
        <ExpectedStartDate>0001-01-01T00:00:00</ExpectedStartDate>
        <IsAgreementVisit>false</IsAgreementVisit>
        <JobCategory>String</JobCategory>
        <JobID>0</JobID>
        <JobName>String</JobName>
        <OccurrenceDate>0001-01-01T00:00:00</OccurrenceDate>
        <PercentComplete>0</PercentComplete>
        <StatusID>0</StatusID>
      </TimelineJob>
    </Jobs>
    <ProjectID>0</ProjectID>
  </Timeline>
</ProjectTimelineResponse>