Trendsic Platform Service

<back to all web services

RfpPricePreviewRequest

Requires Authentication
Requires any of the roles:Agent, Administrator
The following routes are available for this service:
POST,OPTIONS/v1/Rfp/PricePreview
"use strict";
export class CostRange {
    /** @param {{Min?:number,Max?:number,Mid?:number}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {number} */
    Min;
    /** @type {number} */
    Max;
    /** @type {number} */
    Mid;
}
export class PricedPosition {
    /** @param {{PositionTag?:string,Hours?:number,HasInternalRate?:boolean,RateMin?:number,RateMax?:number,RateAvg?:number,ContactCount?:number,Cost?:CostRange,MarketRateReference?:number}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {string} */
    PositionTag;
    /** @type {number} */
    Hours;
    /** @type {boolean} */
    HasInternalRate;
    /** @type {?number} */
    RateMin;
    /** @type {?number} */
    RateMax;
    /** @type {?number} */
    RateAvg;
    /** @type {number} */
    ContactCount;
    /** @type {CostRange} */
    Cost;
    /** @type {?number} */
    MarketRateReference;
}
export class PricedEquipment {
    /** @param {{EquipmentID?:number,EquipmentName?:string,Quantity?:number,DurationDays?:number,RateType?:string,BilledRate?:number,CostRate?:number,HasRate?:boolean,IsInCatalog?:boolean,Cost?:number,CompanyCost?:number,Margin?:number}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {number} */
    EquipmentID;
    /** @type {string} */
    EquipmentName;
    /** @type {number} */
    Quantity;
    /** @type {?number} */
    DurationDays;
    /** @type {string} */
    RateType;
    /** @type {?number} */
    BilledRate;
    /** @type {?number} */
    CostRate;
    /** @type {boolean} */
    HasRate;
    /** @type {boolean} */
    IsInCatalog;
    /** @type {number} */
    Cost;
    /** @type {number} */
    CompanyCost;
    /** @type {number} */
    Margin;
}
export class PricedMaterial {
    /** @param {{MaterialID?:number,MaterialName?:string,Quantity?:number,UnitCost?:number,HasRate?:boolean,IsInCatalog?:boolean,Cost?:number}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {number} */
    MaterialID;
    /** @type {string} */
    MaterialName;
    /** @type {number} */
    Quantity;
    /** @type {?number} */
    UnitCost;
    /** @type {boolean} */
    HasRate;
    /** @type {boolean} */
    IsInCatalog;
    /** @type {number} */
    Cost;
}
export class PricedTask {
    /** @param {{Name?:string,Category?:string,Positions?:PricedPosition[],Equipment?:PricedEquipment[],Materials?:PricedMaterial[],Subtotal?:CostRange}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {string} */
    Name;
    /** @type {string} */
    Category;
    /** @type {PricedPosition[]} */
    Positions = [];
    /** @type {PricedEquipment[]} */
    Equipment = [];
    /** @type {PricedMaterial[]} */
    Materials = [];
    /** @type {CostRange} */
    Subtotal;
}
export class PricedProposal {
    /** @param {{RfpDocumentID?:number,ProjectName?:string,Currency?:string,Tasks?:PricedTask[],Total?:CostRange,PositionsNeedingRate?:number,EquipmentNotInCatalog?:number,MaterialsNotInCatalog?:number,PositionsNotInCatalog?:number,EquipmentMargin?:number}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {number} */
    RfpDocumentID;
    /** @type {string} */
    ProjectName;
    /** @type {string} */
    Currency;
    /** @type {PricedTask[]} */
    Tasks = [];
    /** @type {CostRange} */
    Total;
    /** @type {number} */
    PositionsNeedingRate;
    /** @type {number} */
    EquipmentNotInCatalog;
    /** @type {number} */
    MaterialsNotInCatalog;
    /** @type {number} */
    PositionsNotInCatalog;
    /** @type {number} */
    EquipmentMargin;
}
export class RfpPricingResponse {
    /** @param {{ResponseStatus?:ResponseStatus,RfpDocumentID?:number,Pricing?:PricedProposal}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {ResponseStatus} */
    ResponseStatus;
    /** @type {number} */
    RfpDocumentID;
    /** @type {PricedProposal} */
    Pricing;
}
export class ResourcedPosition {
    /** @param {{PositionTag?:string,Hours?:number,CrewSize?:number,Utilization?:number,FixedDays?:number,Headcount?:number,SourceReference?:string,Notes?:string,IsInCatalog?:boolean,ContactID?:number}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {string} */
    PositionTag;
    /** @type {?number} */
    Hours;
    /** @type {?number} */
    CrewSize;
    /** @type {?number} */
    Utilization;
    /** @type {?number} */
    FixedDays;
    /** @type {?number} */
    Headcount;
    /** @type {string} */
    SourceReference;
    /** @type {string} */
    Notes;
    /** @type {boolean} */
    IsInCatalog;
    /** @type {?number} */
    ContactID;
}
export class ResourcedEquipment {
    /** @param {{EquipmentID?:number,EquipmentName?:string,MakeModel?:string,Quantity?:number,DurationDays?:number,Utilization?:number,FixedDays?:number,SourceReference?:string,Notes?:string,IsInCatalog?:boolean,SuggestedEquipmentID?:number,SuggestedEquipmentName?:string}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {number} */
    EquipmentID;
    /** @type {string} */
    EquipmentName;
    /** @type {string} */
    MakeModel;
    /** @type {?number} */
    Quantity;
    /** @type {?number} */
    DurationDays;
    /** @type {?number} */
    Utilization;
    /** @type {?number} */
    FixedDays;
    /** @type {string} */
    SourceReference;
    /** @type {string} */
    Notes;
    /** @type {boolean} */
    IsInCatalog;
    /** @type {number} */
    SuggestedEquipmentID;
    /** @type {string} */
    SuggestedEquipmentName;
}
export class ResourcedMaterial {
    /** @param {{MaterialID?:number,MaterialName?:string,MakeModel?:string,Quantity?:number,QuantityPerUnit?:number,Unit?:string,SourceReference?:string,Notes?:string,IsInCatalog?:boolean,SuggestedMaterialID?:number,SuggestedMaterialName?:string}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {number} */
    MaterialID;
    /** @type {string} */
    MaterialName;
    /** @type {string} */
    MakeModel;
    /** @type {?number} */
    Quantity;
    /** @type {?number} */
    QuantityPerUnit;
    /** @type {string} */
    Unit;
    /** @type {string} */
    SourceReference;
    /** @type {string} */
    Notes;
    /** @type {boolean} */
    IsInCatalog;
    /** @type {number} */
    SuggestedMaterialID;
    /** @type {string} */
    SuggestedMaterialName;
}
export class TaskResourcing {
    /** @param {{Positions?:ResourcedPosition[],Equipment?:ResourcedEquipment[],Materials?:ResourcedMaterial[],ResourcedForQuantity?:number,ProductionRatePerDay?:number,FixedDays?:number}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {ResourcedPosition[]} */
    Positions = [];
    /** @type {ResourcedEquipment[]} */
    Equipment = [];
    /** @type {ResourcedMaterial[]} */
    Materials = [];
    /** @type {?number} */
    ResourcedForQuantity;
    /** @type {?number} */
    ProductionRatePerDay;
    /** @type {?number} */
    FixedDays;
}
export class WorkPackageSpecRef {
    /** @param {{Section?:string,Title?:string}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {string} */
    Section;
    /** @type {string} */
    Title;
}
export class TaskWorkPackage {
    /** @param {{Scope?:string,LimitsOfWork?:string,SpecRefs?:WorkPackageSpecRef[],Constraints?:string[],HoldPoints?:string[],DefinitionOfDone?:string[],SafetyNote?:string,RfpRef?:string,Confidence?:number,SpecBook?:string,UserScope?:string,DodRemoved?:number[],DodExtra?:string[],UserEdited?:boolean,DodChecked?:string[],RedraftNote?:string}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {string} */
    Scope;
    /** @type {string} */
    LimitsOfWork;
    /** @type {WorkPackageSpecRef[]} */
    SpecRefs = [];
    /** @type {string[]} */
    Constraints = [];
    /** @type {string[]} */
    HoldPoints = [];
    /** @type {string[]} */
    DefinitionOfDone = [];
    /** @type {string} */
    SafetyNote;
    /** @type {string} */
    RfpRef;
    /** @type {?number} */
    Confidence;
    /** @type {string} */
    SpecBook;
    /** @type {string} */
    UserScope;
    /** @type {number[]} */
    DodRemoved = [];
    /** @type {string[]} */
    DodExtra = [];
    /** @type {boolean} */
    UserEdited;
    /** @type {string[]} */
    DodChecked = [];
    /** @type {string} */
    RedraftNote;
}
export class ProposedTask {
    /** @param {{Seq?:number,Name?:string,Category?:string,Quantity?:number,Unit?:string,SourceItemNumber?:string,SourceReference?:string,Notes?:string,Resourcing?:TaskResourcing,DurationDays?:number,DependsOn?:number[],EstimatedStartDate?:string,EstimatedEndDate?:string,WorkPackage?:TaskWorkPackage,CreatedJobID?:number}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {number} */
    Seq;
    /** @type {string} */
    Name;
    /** @type {string} */
    Category;
    /** @type {?number} */
    Quantity;
    /** @type {string} */
    Unit;
    /** @type {string} */
    SourceItemNumber;
    /** @type {string} */
    SourceReference;
    /** @type {string} */
    Notes;
    /** @type {TaskResourcing} */
    Resourcing;
    /** @type {?number} */
    DurationDays;
    /** @type {number[]} */
    DependsOn = [];
    /** @type {?string} */
    EstimatedStartDate;
    /** @type {?string} */
    EstimatedEndDate;
    /** @type {TaskWorkPackage} */
    WorkPackage;
    /** @type {?number} */
    CreatedJobID;
}
export class AddendaChange {
    /** @param {{ChangeId?:string,ChangeType?:string,TargetSeq?:number,ItemNumber?:string,ItemName?:string,Field?:string,OldValue?:string,NewValue?:string,Description?:string,Status?:string}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {string} */
    ChangeId;
    /** @type {string} */
    ChangeType;
    /** @type {?number} */
    TargetSeq;
    /** @type {string} */
    ItemNumber;
    /** @type {string} */
    ItemName;
    /** @type {string} */
    Field;
    /** @type {string} */
    OldValue;
    /** @type {string} */
    NewValue;
    /** @type {string} */
    Description;
    /** @type {string} */
    Status;
}
export class AddendaChangeSet {
    /** @param {{ChangeSetId?:string,SourceRfpDocumentID?:number,SourceFileName?:string,DocumentType?:string,ExtractedAtUtc?:string,Summary?:string,Changes?:AddendaChange[]}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {string} */
    ChangeSetId;
    /** @type {number} */
    SourceRfpDocumentID;
    /** @type {string} */
    SourceFileName;
    /** @type {string} */
    DocumentType;
    /** @type {?string} */
    ExtractedAtUtc;
    /** @type {string} */
    Summary;
    /** @type {AddendaChange[]} */
    Changes = [];
}
export class WageClassification {
    /** @param {{Title?:string,BaseRate?:number,FringeRate?:number,ParishNote?:string,SourceLine?:string,BenchmarkFringeRate?:number,FringeCompareNote?:string}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {string} */
    Title;
    /** @type {?number} */
    BaseRate;
    /** @type {?number} */
    FringeRate;
    /** @type {string} */
    ParishNote;
    /** @type {string} */
    SourceLine;
    /** @type {?number} */
    BenchmarkFringeRate;
    /** @type {string} */
    FringeCompareNote;
}
export class WageDeterminationResult {
    /** @param {{SourceRfpDocumentID?:number,SourceFileName?:string,WdNumber?:string,ExtractedAtUtc?:string,Classifications?:WageClassification[],Source?:string,IsTrustworthy?:boolean,ExecutiveOrderFloor?:number,PublishedDate?:string,ProjectParish?:string,Warnings?:string[]}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {number} */
    SourceRfpDocumentID;
    /** @type {string} */
    SourceFileName;
    /** @type {string} */
    WdNumber;
    /** @type {?string} */
    ExtractedAtUtc;
    /** @type {WageClassification[]} */
    Classifications = [];
    /** @type {string} */
    Source;
    /** @type {boolean} */
    IsTrustworthy;
    /** @type {?number} */
    ExecutiveOrderFloor;
    /** @type {string} */
    PublishedDate;
    /** @type {string} */
    ProjectParish;
    /** @type {string[]} */
    Warnings = [];
}
export class ProjectProposal {
    /** @param {{RfpDocumentID?:number,Mode?:string,ProjectID?:number,ChangeOrderID?:number,ProjectName?:string,ClientName?:string,ProjectType?:string,ProjectLocation?:string,Scope?:string,ProjectDescription?:string,ContractDurationDays?:number,BidDueDate?:string,EstimatedStartDate?:string,EstimatedEndDate?:string,Tasks?:ProposedTask[],PendingAddendaDiffs?:AddendaChangeSet[],WageDeterminations?:WageDeterminationResult[]}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {number} */
    RfpDocumentID;
    /** @type {string} */
    Mode;
    /** @type {?number} */
    ProjectID;
    /** @type {?number} */
    ChangeOrderID;
    /** @type {string} */
    ProjectName;
    /** @type {string} */
    ClientName;
    /** @type {string} */
    ProjectType;
    /** @type {string} */
    ProjectLocation;
    /** @type {string} */
    Scope;
    /** @type {string} */
    ProjectDescription;
    /** @type {?number} */
    ContractDurationDays;
    /** @type {string} */
    BidDueDate;
    /** @type {?string} */
    EstimatedStartDate;
    /** @type {?string} */
    EstimatedEndDate;
    /** @type {ProposedTask[]} */
    Tasks = [];
    /** @type {AddendaChangeSet[]} */
    PendingAddendaDiffs = [];
    /** @type {WageDeterminationResult[]} */
    WageDeterminations = [];
}
export class RfpPricePreviewRequest {
    /** @param {{Proposal?:ProjectProposal}} [init] */
    constructor(init) { Object.assign(this, init) }
    /** @type {ProjectProposal} */
    Proposal;
}

JavaScript RfpPricePreviewRequest 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 /v1/Rfp/PricePreview HTTP/1.1 
Host: api.dev.dynamics.trendsic.com 
Accept: text/csv
Content-Type: text/csv
Content-Length: length

{"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-01T00:00:00.0000000","EstimatedEndDate":"0001-01-01T00:00:00.0000000","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-01T00:00:00.0000000","EstimatedEndDate":"0001-01-01T00:00:00.0000000","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-01T00:00:00.0000000","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-01T00:00:00.0000000","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/csv
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,"Pricing":{"RfpDocumentID":0,"ProjectName":"String","Currency":"String","Tasks":[{"Name":"String","Category":"String","Positions":[{"PositionTag":"String","Hours":0,"HasInternalRate":false,"RateMin":0,"RateMax":0,"RateAvg":0,"ContactCount":0,"Cost":{"Min":0,"Max":0,"Mid":0},"MarketRateReference":0}],"Equipment":[{"EquipmentID":0,"EquipmentName":"String","Quantity":0,"DurationDays":0,"RateType":"String","BilledRate":0,"CostRate":0,"HasRate":false,"IsInCatalog":false,"Cost":0,"CompanyCost":0,"Margin":0}],"Materials":[{"MaterialID":0,"MaterialName":"String","Quantity":0,"UnitCost":0,"HasRate":false,"IsInCatalog":false,"Cost":0}],"Subtotal":{"Min":0,"Max":0,"Mid":0}}],"Total":{"Min":0,"Max":0,"Mid":0},"PositionsNeedingRate":0,"EquipmentNotInCatalog":0,"MaterialsNotInCatalog":0,"PositionsNotInCatalog":0,"EquipmentMargin":0}}