Trendsic Platform Service

<back to all web services

RfpApproveRequest

Requires Authentication
Requires any of the roles:Agent, Administrator
The following routes are available for this service:
POST,OPTIONS/v1/Rfp/{RfpDocumentUID}/Approve

export class TaskDiff
{
    public TaskName: string;
    public PositionsAdded: string[] = [];
    public PositionsRemoved: string[] = [];
    public PositionsStaffed: string[] = [];
    public EquipmentAdded: number[] = [];
    public EquipmentRemoved: number[] = [];
    public MaterialsAdded: number[] = [];
    public MaterialsRemoved: number[] = [];
    public HasChanges: boolean;

    public constructor(init?: Partial<TaskDiff>) { (Object as any).assign(this, init); }
}

export class ProposalDiff
{
    public TasksAdded: string[] = [];
    public TasksRemoved: string[] = [];
    public Tasks: TaskDiff[] = [];
    public HasChanges: boolean;

    public constructor(init?: Partial<ProposalDiff>) { (Object as any).assign(this, init); }
}

export class RfpApproveResponse
{
    public ResponseStatus: ResponseStatus;
    public RfpDocumentID: number;
    public ProjectID: number;
    public ProjectUID: string;
    public RfpApprovalID: number;
    public JobIDs: number[] = [];
    public OpenPositionCount: number;
    public Diff: ProposalDiff;

    public constructor(init?: Partial<RfpApproveResponse>) { (Object as any).assign(this, init); }
}

export class ResourcedPosition
{
    public PositionTag: string;
    public Hours?: number;
    public CrewSize?: number;
    public Utilization?: number;
    public FixedDays?: number;
    public Headcount?: number;
    public SourceReference: string;
    public Notes: string;
    public IsInCatalog: boolean;
    public ContactID?: number;

    public constructor(init?: Partial<ResourcedPosition>) { (Object as any).assign(this, init); }
}

export class ResourcedEquipment
{
    public EquipmentID: number;
    public EquipmentName: string;
    public MakeModel: string;
    public Quantity?: number;
    public DurationDays?: number;
    public Utilization?: number;
    public FixedDays?: number;
    public SourceReference: string;
    public Notes: string;
    public IsInCatalog: boolean;
    public SuggestedEquipmentID: number;
    public SuggestedEquipmentName: string;

    public constructor(init?: Partial<ResourcedEquipment>) { (Object as any).assign(this, init); }
}

export class ResourcedMaterial
{
    public MaterialID: number;
    public MaterialName: string;
    public MakeModel: string;
    public Quantity?: number;
    public QuantityPerUnit?: number;
    public Unit: string;
    public SourceReference: string;
    public Notes: string;
    public IsInCatalog: boolean;
    public SuggestedMaterialID: number;
    public SuggestedMaterialName: string;

    public constructor(init?: Partial<ResourcedMaterial>) { (Object as any).assign(this, init); }
}

export class TaskResourcing
{
    public Positions: ResourcedPosition[] = [];
    public Equipment: ResourcedEquipment[] = [];
    public Materials: ResourcedMaterial[] = [];
    public ResourcedForQuantity?: number;
    public ProductionRatePerDay?: number;
    public FixedDays?: number;

    public constructor(init?: Partial<TaskResourcing>) { (Object as any).assign(this, init); }
}

export class WorkPackageSpecRef
{
    public Section: string;
    public Title: string;

    public constructor(init?: Partial<WorkPackageSpecRef>) { (Object as any).assign(this, init); }
}

export class TaskWorkPackage
{
    public Scope: string;
    public LimitsOfWork: string;
    public SpecRefs: WorkPackageSpecRef[] = [];
    public Constraints: string[] = [];
    public HoldPoints: string[] = [];
    public DefinitionOfDone: string[] = [];
    public SafetyNote: string;
    public RfpRef: string;
    public Confidence?: number;
    public SpecBook: string;
    public UserScope: string;
    public DodRemoved: number[] = [];
    public DodExtra: string[] = [];
    public UserEdited: boolean;
    public DodChecked: string[] = [];
    public RedraftNote: string;

    public constructor(init?: Partial<TaskWorkPackage>) { (Object as any).assign(this, init); }
}

export class ProposedTask
{
    public Seq: number;
    public Name: string;
    public Category: string;
    public Quantity?: number;
    public Unit: string;
    public SourceItemNumber: string;
    public SourceReference: string;
    public Notes: string;
    public Resourcing: TaskResourcing;
    public DurationDays?: number;
    public DependsOn: number[] = [];
    public EstimatedStartDate?: string;
    public EstimatedEndDate?: string;
    public WorkPackage: TaskWorkPackage;
    public CreatedJobID?: number;

    public constructor(init?: Partial<ProposedTask>) { (Object as any).assign(this, init); }
}

export class AddendaChange
{
    public ChangeId: string;
    public ChangeType: string;
    public TargetSeq?: number;
    public ItemNumber: string;
    public ItemName: string;
    public Field: string;
    public OldValue: string;
    public NewValue: string;
    public Description: string;
    public Status: string;

    public constructor(init?: Partial<AddendaChange>) { (Object as any).assign(this, init); }
}

export class AddendaChangeSet
{
    public ChangeSetId: string;
    public SourceRfpDocumentID: number;
    public SourceFileName: string;
    public DocumentType: string;
    public ExtractedAtUtc?: string;
    public Summary: string;
    public Changes: AddendaChange[] = [];

    public constructor(init?: Partial<AddendaChangeSet>) { (Object as any).assign(this, init); }
}

export class WageClassification
{
    public Title: string;
    public BaseRate?: number;
    public FringeRate?: number;
    public ParishNote: string;
    public SourceLine: string;
    public BenchmarkFringeRate?: number;
    public FringeCompareNote: string;

    public constructor(init?: Partial<WageClassification>) { (Object as any).assign(this, init); }
}

export class WageDeterminationResult
{
    public SourceRfpDocumentID: number;
    public SourceFileName: string;
    public WdNumber: string;
    public ExtractedAtUtc?: string;
    public Classifications: WageClassification[] = [];
    public Source: string;
    public IsTrustworthy: boolean;
    public ExecutiveOrderFloor?: number;
    public PublishedDate: string;
    public ProjectParish: string;
    public Warnings: string[] = [];

    public constructor(init?: Partial<WageDeterminationResult>) { (Object as any).assign(this, init); }
}

export class ProjectProposal
{
    public RfpDocumentID: number;
    public Mode: string;
    public ProjectID?: number;
    public ChangeOrderID?: number;
    public ProjectName: string;
    public ClientName: string;
    public ProjectType: string;
    public ProjectLocation: string;
    public Scope: string;
    public ProjectDescription: string;
    public ContractDurationDays?: number;
    public BidDueDate: string;
    public EstimatedStartDate?: string;
    public EstimatedEndDate?: string;
    public Tasks: ProposedTask[] = [];
    public PendingAddendaDiffs: AddendaChangeSet[] = [];
    public WageDeterminations: WageDeterminationResult[] = [];

    public constructor(init?: Partial<ProjectProposal>) { (Object as any).assign(this, init); }
}

export class RfpApproveRequest
{
    public RfpDocumentUID: string;
    public Proposal: ProjectProposal;

    public constructor(init?: Partial<RfpApproveRequest>) { (Object as any).assign(this, init); }
}

TypeScript RfpApproveRequest DTOs

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

HTTP + JSV

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

POST /v1/Rfp/{RfpDocumentUID}/Approve HTTP/1.1 
Host: api.dev.dynamics.trendsic.com 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	RfpDocumentUID: 00000000000000000000000000000000,
	Proposal: 
	{
		RfpDocumentID: 0,
		Mode: String,
		ProjectID: 0,
		ChangeOrderID: 0,
		ProjectName: String,
		ClientName: String,
		ProjectType: String,
		ProjectLocation: String,
		Scope: String,
		ProjectDescription: String,
		ContractDurationDays: 0,
		BidDueDate: String,
		EstimatedStartDate: 0001-01-01,
		EstimatedEndDate: 0001-01-01,
		Tasks: 
		[
			{
				Seq: 0,
				Name: String,
				Category: String,
				Quantity: 0,
				Unit: String,
				SourceItemNumber: String,
				SourceReference: String,
				Notes: String,
				Resourcing: 
				{
					Positions: 
					[
						{
							PositionTag: String,
							Hours: 0,
							CrewSize: 0,
							Utilization: 0,
							FixedDays: 0,
							Headcount: 0,
							SourceReference: String,
							Notes: String,
							IsInCatalog: False,
							ContactID: 0
						}
					],
					Equipment: 
					[
						{
							EquipmentID: 0,
							EquipmentName: String,
							MakeModel: String,
							Quantity: 0,
							DurationDays: 0,
							Utilization: 0,
							FixedDays: 0,
							SourceReference: String,
							Notes: String,
							IsInCatalog: False,
							SuggestedEquipmentID: 0,
							SuggestedEquipmentName: String
						}
					],
					Materials: 
					[
						{
							MaterialID: 0,
							MaterialName: String,
							MakeModel: String,
							Quantity: 0,
							QuantityPerUnit: 0,
							Unit: String,
							SourceReference: String,
							Notes: String,
							IsInCatalog: False,
							SuggestedMaterialID: 0,
							SuggestedMaterialName: String
						}
					],
					ResourcedForQuantity: 0,
					ProductionRatePerDay: 0,
					FixedDays: 0
				},
				DurationDays: 0,
				DependsOn: 
				[
					0
				],
				EstimatedStartDate: 0001-01-01,
				EstimatedEndDate: 0001-01-01,
				WorkPackage: 
				{
					Scope: String,
					LimitsOfWork: String,
					SpecRefs: 
					[
						{
							Section: String,
							Title: String
						}
					],
					Constraints: 
					[
						String
					],
					HoldPoints: 
					[
						String
					],
					DefinitionOfDone: 
					[
						String
					],
					SafetyNote: String,
					RfpRef: String,
					Confidence: 0,
					SpecBook: String,
					UserScope: String,
					DodRemoved: 
					[
						0
					],
					DodExtra: 
					[
						String
					],
					UserEdited: False,
					DodChecked: 
					[
						String
					],
					RedraftNote: String
				},
				CreatedJobID: 0
			}
		],
		PendingAddendaDiffs: 
		[
			{
				ChangeSetId: String,
				SourceRfpDocumentID: 0,
				SourceFileName: String,
				DocumentType: String,
				ExtractedAtUtc: 0001-01-01,
				Summary: String,
				Changes: 
				[
					{
						ChangeId: String,
						ChangeType: String,
						TargetSeq: 0,
						ItemNumber: String,
						ItemName: String,
						Field: String,
						OldValue: String,
						NewValue: String,
						Description: String,
						Status: String
					}
				]
			}
		],
		WageDeterminations: 
		[
			{
				SourceRfpDocumentID: 0,
				SourceFileName: String,
				WdNumber: String,
				ExtractedAtUtc: 0001-01-01,
				Classifications: 
				[
					{
						Title: String,
						BaseRate: 0,
						FringeRate: 0,
						ParishNote: String,
						SourceLine: String,
						BenchmarkFringeRate: 0,
						FringeCompareNote: String
					}
				],
				Source: String,
				IsTrustworthy: False,
				ExecutiveOrderFloor: 0,
				PublishedDate: String,
				ProjectParish: String,
				Warnings: 
				[
					String
				]
			}
		]
	}
}
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
		}
	},
	RfpDocumentID: 0,
	ProjectID: 0,
	ProjectUID: 00000000000000000000000000000000,
	RfpApprovalID: 0,
	JobIDs: 
	[
		0
	],
	OpenPositionCount: 0,
	Diff: 
	{
		TasksAdded: 
		[
			String
		],
		TasksRemoved: 
		[
			String
		],
		Tasks: 
		[
			{
				TaskName: String,
				PositionsAdded: 
				[
					String
				],
				PositionsRemoved: 
				[
					String
				],
				PositionsStaffed: 
				[
					String
				],
				EquipmentAdded: 
				[
					0
				],
				EquipmentRemoved: 
				[
					0
				],
				MaterialsAdded: 
				[
					0
				],
				MaterialsRemoved: 
				[
					0
				],
				HasChanges: True
			}
		],
		HasChanges: True
	}
}