| Requires any of the roles: | Agent, Administrator |
| 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 .jsv suffix or ?format=jsv
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: text/jsv
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length
{
ResponseStatus:
{
ErrorCode: String,
Message: String,
StackTrace: String,
Errors:
[
{
ErrorCode: String,
FieldName: String,
Message: String,
Meta:
{
String: String
}
}
],
Meta:
{
String: String
}
},
Timeline:
{
ProjectID: 0,
Jobs:
[
{
JobID: 0,
JobName: String,
ExpectedStartDate: 0001-01-01,
ExpectedCompletionDate: 0001-01-01,
ActualStartDate: 0001-01-01,
ActualEndDate: 0001-01-01,
PercentComplete: 0,
StatusID: 0,
JobCategory: String,
IsAgreementVisit: False,
OccurrenceDate: 0001-01-01,
Crew:
[
{
ProjectJobCrewMemberID: 0,
ContactID: 0,
ContactName: String,
BudgetedHours: 0
}
],
Equipment:
[
{
ProjectJobEquipmentID: 0,
EquipmentID: 0,
EquipmentName: String
}
]
}
],
Dependencies:
[
{
JobDependencyID: 0,
TenantId: 00000000000000000000000000000000,
ProjectID: 0,
PredecessorJobID: 0,
SuccessorJobID: 0,
DependencyType: String,
LagDays: 0,
CreatedBy: String,
CreatedAt: 0001-01-01,
UpdatedAt: 0001-01-01
}
]
}
}