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
import Foundation
import ServiceStack

public class RfpApproveRequest : Codable
{
    public var rfpDocumentUID:String
    public var proposal:ProjectProposal

    required public init(){}
}

public class ProjectProposal : Codable
{
    public var rfpDocumentID:Int
    public var mode:String
    public var projectID:Int?
    public var changeOrderID:Int?
    public var projectName:String
    public var clientName:String
    public var projectType:String
    public var projectLocation:String
    public var scope:String
    public var projectDescription:String
    public var contractDurationDays:Int?
    public var bidDueDate:String
    public var estimatedStartDate:Date?
    public var estimatedEndDate:Date?
    public var tasks:[ProposedTask] = []
    public var pendingAddendaDiffs:[AddendaChangeSet] = []
    public var wageDeterminations:[WageDeterminationResult] = []

    required public init(){}
}

public class ProposedTask : Codable
{
    public var seq:Int
    public var name:String
    public var category:String
    public var quantity:Double?
    public var unit:String
    public var sourceItemNumber:String
    public var sourceReference:String
    public var notes:String
    public var resourcing:TaskResourcing
    public var durationDays:Double?
    public var dependsOn:[Int] = []
    public var estimatedStartDate:Date?
    public var estimatedEndDate:Date?
    public var workPackage:TaskWorkPackage
    public var createdJobID:Int?

    required public init(){}
}

public class TaskResourcing : Codable
{
    public var positions:[ResourcedPosition] = []
    public var equipment:[ResourcedEquipment] = []
    public var materials:[ResourcedMaterial] = []
    public var resourcedForQuantity:Double?
    public var productionRatePerDay:Double?
    public var fixedDays:Double?

    required public init(){}
}

public class ResourcedPosition : Codable
{
    public var positionTag:String
    public var hours:Double?
    public var crewSize:Double?
    public var utilization:Double?
    public var fixedDays:Double?
    public var headcount:Int?
    public var sourceReference:String
    public var notes:String
    public var isInCatalog:Bool
    public var contactID:Int?

    required public init(){}
}

public class ResourcedEquipment : Codable
{
    public var equipmentID:Int
    public var equipmentName:String
    public var makeModel:String
    public var quantity:Double?
    public var durationDays:Double?
    public var utilization:Double?
    public var fixedDays:Double?
    public var sourceReference:String
    public var notes:String
    public var isInCatalog:Bool
    public var suggestedEquipmentID:Int
    public var suggestedEquipmentName:String

    required public init(){}
}

public class ResourcedMaterial : Codable
{
    public var materialID:Int
    public var materialName:String
    public var makeModel:String
    public var quantity:Double?
    public var quantityPerUnit:Double?
    public var unit:String
    public var sourceReference:String
    public var notes:String
    public var isInCatalog:Bool
    public var suggestedMaterialID:Int
    public var suggestedMaterialName:String

    required public init(){}
}

public class TaskWorkPackage : Codable
{
    public var scope:String
    public var limitsOfWork:String
    public var specRefs:[WorkPackageSpecRef] = []
    public var constraints:[String] = []
    public var holdPoints:[String] = []
    public var definitionOfDone:[String] = []
    public var safetyNote:String
    public var rfpRef:String
    public var confidence:Int?
    public var specBook:String
    public var userScope:String
    public var dodRemoved:[Int] = []
    public var dodExtra:[String] = []
    public var userEdited:Bool
    public var dodChecked:[String] = []
    public var redraftNote:String

    required public init(){}
}

public class WorkPackageSpecRef : Codable
{
    public var section:String
    public var title:String

    required public init(){}
}

public class AddendaChangeSet : Codable
{
    public var changeSetId:String
    public var sourceRfpDocumentID:Int
    public var sourceFileName:String
    public var documentType:String
    public var extractedAtUtc:Date?
    public var summary:String
    public var changes:[AddendaChange] = []

    required public init(){}
}

public class AddendaChange : Codable
{
    public var changeId:String
    public var changeType:String
    public var targetSeq:Int?
    public var itemNumber:String
    public var itemName:String
    public var field:String
    public var oldValue:String
    public var newValue:String
    public var Description:String
    public var status:String

    required public init(){}
}

public class WageDeterminationResult : Codable
{
    public var sourceRfpDocumentID:Int
    public var sourceFileName:String
    public var wdNumber:String
    public var extractedAtUtc:Date?
    public var classifications:[WageClassification] = []
    public var source:String
    public var isTrustworthy:Bool
    public var executiveOrderFloor:Double?
    public var publishedDate:String
    public var projectParish:String
    public var warnings:[String] = []

    required public init(){}
}

public class WageClassification : Codable
{
    public var title:String
    public var baseRate:Double?
    public var fringeRate:Double?
    public var parishNote:String
    public var sourceLine:String
    public var benchmarkFringeRate:Double?
    public var fringeCompareNote:String

    required public init(){}
}

public class RfpApproveResponse : Codable
{
    public var responseStatus:ResponseStatus
    public var rfpDocumentID:Int
    public var projectID:Int
    public var projectUID:String
    public var rfpApprovalID:Int
    public var jobIDs:[Int] = []
    public var openPositionCount:Int
    public var diff:ProposalDiff

    required public init(){}
}

public class ProposalDiff : Codable
{
    public var tasksAdded:[String] = []
    public var tasksRemoved:[String] = []
    public var tasks:[TaskDiff] = []
    public var hasChanges:Bool

    required public init(){}
}

public class TaskDiff : Codable
{
    public var taskName:String
    public var positionsAdded:[String] = []
    public var positionsRemoved:[String] = []
    public var positionsStaffed:[String] = []
    public var equipmentAdded:[Int] = []
    public var equipmentRemoved:[Int] = []
    public var materialsAdded:[Int] = []
    public var materialsRemoved:[Int] = []
    public var hasChanges:Bool

    required public init(){}
}


Swift 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
	}
}