Trendsic Platform Service

<back to all web services

RfpRefineRequest

Requires Authentication
Requires any of the roles:Agent, Administrator
The following routes are available for this service:
POST,OPTIONS/v1/Rfp/{RfpDocumentUID}/Refine
import 'package:servicestack/servicestack.dart';

class RfpLocation implements IConvertible
{
    String? Description;
    String? City;
    String? State;
    String? Identifier;

    RfpLocation({this.Description,this.City,this.State,this.Identifier});
    RfpLocation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Description = json['Description'];
        City = json['City'];
        State = json['State'];
        Identifier = json['Identifier'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Description': Description,
        'City': City,
        'State': State,
        'Identifier': Identifier
    };

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

class RfpSchedule implements IConvertible
{
    String? BidDueDate;
    String? EstimatedStartDate;
    String? QuestionsDueDate;
    int? ContractDurationDays;
    String? Notes;

    RfpSchedule({this.BidDueDate,this.EstimatedStartDate,this.QuestionsDueDate,this.ContractDurationDays,this.Notes});
    RfpSchedule.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        BidDueDate = json['BidDueDate'];
        EstimatedStartDate = json['EstimatedStartDate'];
        QuestionsDueDate = json['QuestionsDueDate'];
        ContractDurationDays = json['ContractDurationDays'];
        Notes = json['Notes'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'BidDueDate': BidDueDate,
        'EstimatedStartDate': EstimatedStartDate,
        'QuestionsDueDate': QuestionsDueDate,
        'ContractDurationDays': ContractDurationDays,
        'Notes': Notes
    };

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

class RfpLineItem implements IConvertible
{
    String? ItemNumber;
    String? Description;
    double? Quantity;
    String? Unit;
    String? Category;
    String? SourceReference;

    RfpLineItem({this.ItemNumber,this.Description,this.Quantity,this.Unit,this.Category,this.SourceReference});
    RfpLineItem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ItemNumber = json['ItemNumber'];
        Description = json['Description'];
        Quantity = JsonConverters.toDouble(json['Quantity']);
        Unit = json['Unit'];
        Category = json['Category'];
        SourceReference = json['SourceReference'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ItemNumber': ItemNumber,
        'Description': Description,
        'Quantity': Quantity,
        'Unit': Unit,
        'Category': Category,
        'SourceReference': SourceReference
    };

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

class RfpBidConstraint implements IConvertible
{
    String? Constraint;
    String? Detail;

    RfpBidConstraint({this.Constraint,this.Detail});
    RfpBidConstraint.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class RfpBrief implements IConvertible
{
    String? ProjectTitle;
    String? SolicitationNumber;
    String? IssuingOrganization;
    String? ProjectType;
    String? Summary;
    List<RfpLocation>? Locations = [];
    RfpSchedule? Schedule;
    List<RfpLineItem>? LineItems = [];
    List<RfpBidConstraint>? BidConstraints = [];
    List<String>? SpecialRequirements = [];

    RfpBrief({this.ProjectTitle,this.SolicitationNumber,this.IssuingOrganization,this.ProjectType,this.Summary,this.Locations,this.Schedule,this.LineItems,this.BidConstraints,this.SpecialRequirements});
    RfpBrief.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ProjectTitle = json['ProjectTitle'];
        SolicitationNumber = json['SolicitationNumber'];
        IssuingOrganization = json['IssuingOrganization'];
        ProjectType = json['ProjectType'];
        Summary = json['Summary'];
        Locations = JsonConverters.fromJson(json['Locations'],'List<RfpLocation>',context!);
        Schedule = JsonConverters.fromJson(json['Schedule'],'RfpSchedule',context!);
        LineItems = JsonConverters.fromJson(json['LineItems'],'List<RfpLineItem>',context!);
        BidConstraints = JsonConverters.fromJson(json['BidConstraints'],'List<RfpBidConstraint>',context!);
        SpecialRequirements = JsonConverters.fromJson(json['SpecialRequirements'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ProjectTitle': ProjectTitle,
        'SolicitationNumber': SolicitationNumber,
        'IssuingOrganization': IssuingOrganization,
        'ProjectType': ProjectType,
        'Summary': Summary,
        'Locations': JsonConverters.toJson(Locations,'List<RfpLocation>',context!),
        'Schedule': JsonConverters.toJson(Schedule,'RfpSchedule',context!),
        'LineItems': JsonConverters.toJson(LineItems,'List<RfpLineItem>',context!),
        'BidConstraints': JsonConverters.toJson(BidConstraints,'List<RfpBidConstraint>',context!),
        'SpecialRequirements': JsonConverters.toJson(SpecialRequirements,'List<String>',context!)
    };

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

class ResourcedPosition implements IConvertible
{
    String? PositionTag;
    double? Hours;
    int? Headcount;
    String? SourceReference;
    String? Notes;
    bool? IsInCatalog;
    int? ContactID;

    ResourcedPosition({this.PositionTag,this.Hours,this.Headcount,this.SourceReference,this.Notes,this.IsInCatalog,this.ContactID});
    ResourcedPosition.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        PositionTag = json['PositionTag'];
        Hours = JsonConverters.toDouble(json['Hours']);
        Headcount = json['Headcount'];
        SourceReference = json['SourceReference'];
        Notes = json['Notes'];
        IsInCatalog = json['IsInCatalog'];
        ContactID = json['ContactID'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'PositionTag': PositionTag,
        'Hours': Hours,
        'Headcount': Headcount,
        'SourceReference': SourceReference,
        'Notes': Notes,
        'IsInCatalog': IsInCatalog,
        'ContactID': ContactID
    };

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

class ResourcedEquipment implements IConvertible
{
    int? EquipmentID;
    String? EquipmentName;
    String? MakeModel;
    double? Quantity;
    double? DurationDays;
    String? SourceReference;
    String? Notes;
    bool? IsInCatalog;
    int? SuggestedEquipmentID;
    String? SuggestedEquipmentName;

    ResourcedEquipment({this.EquipmentID,this.EquipmentName,this.MakeModel,this.Quantity,this.DurationDays,this.SourceReference,this.Notes,this.IsInCatalog,this.SuggestedEquipmentID,this.SuggestedEquipmentName});
    ResourcedEquipment.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        EquipmentID = json['EquipmentID'];
        EquipmentName = json['EquipmentName'];
        MakeModel = json['MakeModel'];
        Quantity = JsonConverters.toDouble(json['Quantity']);
        DurationDays = JsonConverters.toDouble(json['DurationDays']);
        SourceReference = json['SourceReference'];
        Notes = json['Notes'];
        IsInCatalog = json['IsInCatalog'];
        SuggestedEquipmentID = json['SuggestedEquipmentID'];
        SuggestedEquipmentName = json['SuggestedEquipmentName'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'EquipmentID': EquipmentID,
        'EquipmentName': EquipmentName,
        'MakeModel': MakeModel,
        'Quantity': Quantity,
        'DurationDays': DurationDays,
        'SourceReference': SourceReference,
        'Notes': Notes,
        'IsInCatalog': IsInCatalog,
        'SuggestedEquipmentID': SuggestedEquipmentID,
        'SuggestedEquipmentName': SuggestedEquipmentName
    };

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

class ResourcedMaterial implements IConvertible
{
    int? MaterialID;
    String? MaterialName;
    String? MakeModel;
    double? Quantity;
    String? Unit;
    String? SourceReference;
    String? Notes;
    bool? IsInCatalog;
    int? SuggestedMaterialID;
    String? SuggestedMaterialName;

    ResourcedMaterial({this.MaterialID,this.MaterialName,this.MakeModel,this.Quantity,this.Unit,this.SourceReference,this.Notes,this.IsInCatalog,this.SuggestedMaterialID,this.SuggestedMaterialName});
    ResourcedMaterial.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        MaterialID = json['MaterialID'];
        MaterialName = json['MaterialName'];
        MakeModel = json['MakeModel'];
        Quantity = JsonConverters.toDouble(json['Quantity']);
        Unit = json['Unit'];
        SourceReference = json['SourceReference'];
        Notes = json['Notes'];
        IsInCatalog = json['IsInCatalog'];
        SuggestedMaterialID = json['SuggestedMaterialID'];
        SuggestedMaterialName = json['SuggestedMaterialName'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'MaterialID': MaterialID,
        'MaterialName': MaterialName,
        'MakeModel': MakeModel,
        'Quantity': Quantity,
        'Unit': Unit,
        'SourceReference': SourceReference,
        'Notes': Notes,
        'IsInCatalog': IsInCatalog,
        'SuggestedMaterialID': SuggestedMaterialID,
        'SuggestedMaterialName': SuggestedMaterialName
    };

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

class TaskResourcing implements IConvertible
{
    List<ResourcedPosition>? Positions = [];
    List<ResourcedEquipment>? Equipment = [];
    List<ResourcedMaterial>? Materials = [];

    TaskResourcing({this.Positions,this.Equipment,this.Materials});
    TaskResourcing.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Positions = JsonConverters.fromJson(json['Positions'],'List<ResourcedPosition>',context!);
        Equipment = JsonConverters.fromJson(json['Equipment'],'List<ResourcedEquipment>',context!);
        Materials = JsonConverters.fromJson(json['Materials'],'List<ResourcedMaterial>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Positions': JsonConverters.toJson(Positions,'List<ResourcedPosition>',context!),
        'Equipment': JsonConverters.toJson(Equipment,'List<ResourcedEquipment>',context!),
        'Materials': JsonConverters.toJson(Materials,'List<ResourcedMaterial>',context!)
    };

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

class ProposedTask implements IConvertible
{
    int? Seq;
    String? Name;
    String? Category;
    double? Quantity;
    String? Unit;
    String? SourceItemNumber;
    String? SourceReference;
    String? Notes;
    TaskResourcing? Resourcing;
    double? DurationDays;
    List<int>? DependsOn = [];
    DateTime? EstimatedStartDate;
    DateTime? EstimatedEndDate;

    ProposedTask({this.Seq,this.Name,this.Category,this.Quantity,this.Unit,this.SourceItemNumber,this.SourceReference,this.Notes,this.Resourcing,this.DurationDays,this.DependsOn,this.EstimatedStartDate,this.EstimatedEndDate});
    ProposedTask.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Seq = json['Seq'];
        Name = json['Name'];
        Category = json['Category'];
        Quantity = JsonConverters.toDouble(json['Quantity']);
        Unit = json['Unit'];
        SourceItemNumber = json['SourceItemNumber'];
        SourceReference = json['SourceReference'];
        Notes = json['Notes'];
        Resourcing = JsonConverters.fromJson(json['Resourcing'],'TaskResourcing',context!);
        DurationDays = JsonConverters.toDouble(json['DurationDays']);
        DependsOn = JsonConverters.fromJson(json['DependsOn'],'List<int>',context!);
        EstimatedStartDate = JsonConverters.fromJson(json['EstimatedStartDate'],'DateTime',context!);
        EstimatedEndDate = JsonConverters.fromJson(json['EstimatedEndDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Seq': Seq,
        'Name': Name,
        'Category': Category,
        'Quantity': Quantity,
        'Unit': Unit,
        'SourceItemNumber': SourceItemNumber,
        'SourceReference': SourceReference,
        'Notes': Notes,
        'Resourcing': JsonConverters.toJson(Resourcing,'TaskResourcing',context!),
        'DurationDays': DurationDays,
        'DependsOn': JsonConverters.toJson(DependsOn,'List<int>',context!),
        'EstimatedStartDate': JsonConverters.toJson(EstimatedStartDate,'DateTime',context!),
        'EstimatedEndDate': JsonConverters.toJson(EstimatedEndDate,'DateTime',context!)
    };

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

class ProjectProposal implements IConvertible
{
    int? RfpDocumentID;
    String? Mode;
    int? ProjectID;
    int? ChangeOrderID;
    String? ProjectName;
    String? ClientName;
    String? ProjectType;
    String? ProjectLocation;
    String? Scope;
    String? ProjectDescription;
    int? ContractDurationDays;
    String? BidDueDate;
    DateTime? EstimatedStartDate;
    DateTime? EstimatedEndDate;
    List<ProposedTask>? Tasks = [];

    ProjectProposal({this.RfpDocumentID,this.Mode,this.ProjectID,this.ChangeOrderID,this.ProjectName,this.ClientName,this.ProjectType,this.ProjectLocation,this.Scope,this.ProjectDescription,this.ContractDurationDays,this.BidDueDate,this.EstimatedStartDate,this.EstimatedEndDate,this.Tasks});
    ProjectProposal.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        RfpDocumentID = json['RfpDocumentID'];
        Mode = json['Mode'];
        ProjectID = json['ProjectID'];
        ChangeOrderID = json['ChangeOrderID'];
        ProjectName = json['ProjectName'];
        ClientName = json['ClientName'];
        ProjectType = json['ProjectType'];
        ProjectLocation = json['ProjectLocation'];
        Scope = json['Scope'];
        ProjectDescription = json['ProjectDescription'];
        ContractDurationDays = json['ContractDurationDays'];
        BidDueDate = json['BidDueDate'];
        EstimatedStartDate = JsonConverters.fromJson(json['EstimatedStartDate'],'DateTime',context!);
        EstimatedEndDate = JsonConverters.fromJson(json['EstimatedEndDate'],'DateTime',context!);
        Tasks = JsonConverters.fromJson(json['Tasks'],'List<ProposedTask>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'RfpDocumentID': RfpDocumentID,
        'Mode': Mode,
        'ProjectID': ProjectID,
        'ChangeOrderID': ChangeOrderID,
        'ProjectName': ProjectName,
        'ClientName': ClientName,
        'ProjectType': ProjectType,
        'ProjectLocation': ProjectLocation,
        'Scope': Scope,
        'ProjectDescription': ProjectDescription,
        'ContractDurationDays': ContractDurationDays,
        'BidDueDate': BidDueDate,
        'EstimatedStartDate': JsonConverters.toJson(EstimatedStartDate,'DateTime',context!),
        'EstimatedEndDate': JsonConverters.toJson(EstimatedEndDate,'DateTime',context!),
        'Tasks': JsonConverters.toJson(Tasks,'List<ProposedTask>',context!)
    };

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

class CostRange implements IConvertible
{
    double? Min;
    double? Max;
    double? Mid;

    CostRange({this.Min,this.Max,this.Mid});
    CostRange.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Min = JsonConverters.toDouble(json['Min']);
        Max = JsonConverters.toDouble(json['Max']);
        Mid = JsonConverters.toDouble(json['Mid']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Min': Min,
        'Max': Max,
        'Mid': Mid
    };

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

class PricedPosition implements IConvertible
{
    String? PositionTag;
    double? Hours;
    bool? HasInternalRate;
    double? RateMin;
    double? RateMax;
    double? RateAvg;
    int? ContactCount;
    CostRange? Cost;
    double? MarketRateReference;

    PricedPosition({this.PositionTag,this.Hours,this.HasInternalRate,this.RateMin,this.RateMax,this.RateAvg,this.ContactCount,this.Cost,this.MarketRateReference});
    PricedPosition.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        PositionTag = json['PositionTag'];
        Hours = JsonConverters.toDouble(json['Hours']);
        HasInternalRate = json['HasInternalRate'];
        RateMin = JsonConverters.toDouble(json['RateMin']);
        RateMax = JsonConverters.toDouble(json['RateMax']);
        RateAvg = JsonConverters.toDouble(json['RateAvg']);
        ContactCount = json['ContactCount'];
        Cost = JsonConverters.fromJson(json['Cost'],'CostRange',context!);
        MarketRateReference = JsonConverters.toDouble(json['MarketRateReference']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'PositionTag': PositionTag,
        'Hours': Hours,
        'HasInternalRate': HasInternalRate,
        'RateMin': RateMin,
        'RateMax': RateMax,
        'RateAvg': RateAvg,
        'ContactCount': ContactCount,
        'Cost': JsonConverters.toJson(Cost,'CostRange',context!),
        'MarketRateReference': MarketRateReference
    };

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

class PricedEquipment implements IConvertible
{
    int? EquipmentID;
    String? EquipmentName;
    double? Quantity;
    double? DurationDays;
    String? RateType;
    double? BilledRate;
    double? CostRate;
    bool? HasRate;
    bool? IsInCatalog;
    double? Cost;
    double? CompanyCost;
    double? Margin;

    PricedEquipment({this.EquipmentID,this.EquipmentName,this.Quantity,this.DurationDays,this.RateType,this.BilledRate,this.CostRate,this.HasRate,this.IsInCatalog,this.Cost,this.CompanyCost,this.Margin});
    PricedEquipment.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        EquipmentID = json['EquipmentID'];
        EquipmentName = json['EquipmentName'];
        Quantity = JsonConverters.toDouble(json['Quantity']);
        DurationDays = JsonConverters.toDouble(json['DurationDays']);
        RateType = json['RateType'];
        BilledRate = JsonConverters.toDouble(json['BilledRate']);
        CostRate = JsonConverters.toDouble(json['CostRate']);
        HasRate = json['HasRate'];
        IsInCatalog = json['IsInCatalog'];
        Cost = JsonConverters.toDouble(json['Cost']);
        CompanyCost = JsonConverters.toDouble(json['CompanyCost']);
        Margin = JsonConverters.toDouble(json['Margin']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'EquipmentID': EquipmentID,
        'EquipmentName': EquipmentName,
        'Quantity': Quantity,
        'DurationDays': DurationDays,
        'RateType': RateType,
        'BilledRate': BilledRate,
        'CostRate': CostRate,
        'HasRate': HasRate,
        'IsInCatalog': IsInCatalog,
        'Cost': Cost,
        'CompanyCost': CompanyCost,
        'Margin': Margin
    };

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

class PricedMaterial implements IConvertible
{
    int? MaterialID;
    String? MaterialName;
    double? Quantity;
    double? UnitCost;
    bool? HasRate;
    bool? IsInCatalog;
    double? Cost;

    PricedMaterial({this.MaterialID,this.MaterialName,this.Quantity,this.UnitCost,this.HasRate,this.IsInCatalog,this.Cost});
    PricedMaterial.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        MaterialID = json['MaterialID'];
        MaterialName = json['MaterialName'];
        Quantity = JsonConverters.toDouble(json['Quantity']);
        UnitCost = JsonConverters.toDouble(json['UnitCost']);
        HasRate = json['HasRate'];
        IsInCatalog = json['IsInCatalog'];
        Cost = JsonConverters.toDouble(json['Cost']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'MaterialID': MaterialID,
        'MaterialName': MaterialName,
        'Quantity': Quantity,
        'UnitCost': UnitCost,
        'HasRate': HasRate,
        'IsInCatalog': IsInCatalog,
        'Cost': Cost
    };

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

class PricedTask implements IConvertible
{
    String? Name;
    String? Category;
    List<PricedPosition>? Positions = [];
    List<PricedEquipment>? Equipment = [];
    List<PricedMaterial>? Materials = [];
    CostRange? Subtotal;

    PricedTask({this.Name,this.Category,this.Positions,this.Equipment,this.Materials,this.Subtotal});
    PricedTask.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Name = json['Name'];
        Category = json['Category'];
        Positions = JsonConverters.fromJson(json['Positions'],'List<PricedPosition>',context!);
        Equipment = JsonConverters.fromJson(json['Equipment'],'List<PricedEquipment>',context!);
        Materials = JsonConverters.fromJson(json['Materials'],'List<PricedMaterial>',context!);
        Subtotal = JsonConverters.fromJson(json['Subtotal'],'CostRange',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Name': Name,
        'Category': Category,
        'Positions': JsonConverters.toJson(Positions,'List<PricedPosition>',context!),
        'Equipment': JsonConverters.toJson(Equipment,'List<PricedEquipment>',context!),
        'Materials': JsonConverters.toJson(Materials,'List<PricedMaterial>',context!),
        'Subtotal': JsonConverters.toJson(Subtotal,'CostRange',context!)
    };

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

class PricedProposal implements IConvertible
{
    int? RfpDocumentID;
    String? ProjectName;
    String? Currency;
    List<PricedTask>? Tasks = [];
    CostRange? Total;
    int? PositionsNeedingRate;
    int? EquipmentNotInCatalog;
    int? MaterialsNotInCatalog;
    int? PositionsNotInCatalog;
    double? EquipmentMargin;

    PricedProposal({this.RfpDocumentID,this.ProjectName,this.Currency,this.Tasks,this.Total,this.PositionsNeedingRate,this.EquipmentNotInCatalog,this.MaterialsNotInCatalog,this.PositionsNotInCatalog,this.EquipmentMargin});
    PricedProposal.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        RfpDocumentID = json['RfpDocumentID'];
        ProjectName = json['ProjectName'];
        Currency = json['Currency'];
        Tasks = JsonConverters.fromJson(json['Tasks'],'List<PricedTask>',context!);
        Total = JsonConverters.fromJson(json['Total'],'CostRange',context!);
        PositionsNeedingRate = json['PositionsNeedingRate'];
        EquipmentNotInCatalog = json['EquipmentNotInCatalog'];
        MaterialsNotInCatalog = json['MaterialsNotInCatalog'];
        PositionsNotInCatalog = json['PositionsNotInCatalog'];
        EquipmentMargin = JsonConverters.toDouble(json['EquipmentMargin']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'RfpDocumentID': RfpDocumentID,
        'ProjectName': ProjectName,
        'Currency': Currency,
        'Tasks': JsonConverters.toJson(Tasks,'List<PricedTask>',context!),
        'Total': JsonConverters.toJson(Total,'CostRange',context!),
        'PositionsNeedingRate': PositionsNeedingRate,
        'EquipmentNotInCatalog': EquipmentNotInCatalog,
        'MaterialsNotInCatalog': MaterialsNotInCatalog,
        'PositionsNotInCatalog': PositionsNotInCatalog,
        'EquipmentMargin': EquipmentMargin
    };

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

class CrewPlanLine implements IConvertible
{
    String? PositionTag;
    int? Needed;
    int? NaiveTotal;
    int? TaskAssignments;

    CrewPlanLine({this.PositionTag,this.Needed,this.NaiveTotal,this.TaskAssignments});
    CrewPlanLine.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        PositionTag = json['PositionTag'];
        Needed = json['Needed'];
        NaiveTotal = json['NaiveTotal'];
        TaskAssignments = json['TaskAssignments'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'PositionTag': PositionTag,
        'Needed': Needed,
        'NaiveTotal': NaiveTotal,
        'TaskAssignments': TaskAssignments
    };

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

class RfpRefineResponse implements IConvertible
{
    ResponseStatus? ResponseStatus;
    int? RfpDocumentID;
    String? Layer;
    String? Mode;
    int? TurnCount;
    RfpBrief? Brief;
    ProjectProposal? Proposal;
    PricedProposal? Pricing;
    List<CrewPlanLine>? CrewPlan = [];
    int? CacheReadTokens;
    int? CacheCreationTokens;
    int? InputTokens;

    RfpRefineResponse({this.ResponseStatus,this.RfpDocumentID,this.Layer,this.Mode,this.TurnCount,this.Brief,this.Proposal,this.Pricing,this.CrewPlan,this.CacheReadTokens,this.CacheCreationTokens,this.InputTokens});
    RfpRefineResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!);
        RfpDocumentID = json['RfpDocumentID'];
        Layer = json['Layer'];
        Mode = json['Mode'];
        TurnCount = json['TurnCount'];
        Brief = JsonConverters.fromJson(json['Brief'],'RfpBrief',context!);
        Proposal = JsonConverters.fromJson(json['Proposal'],'ProjectProposal',context!);
        Pricing = JsonConverters.fromJson(json['Pricing'],'PricedProposal',context!);
        CrewPlan = JsonConverters.fromJson(json['CrewPlan'],'List<CrewPlanLine>',context!);
        CacheReadTokens = json['CacheReadTokens'];
        CacheCreationTokens = json['CacheCreationTokens'];
        InputTokens = json['InputTokens'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!),
        'RfpDocumentID': RfpDocumentID,
        'Layer': Layer,
        'Mode': Mode,
        'TurnCount': TurnCount,
        'Brief': JsonConverters.toJson(Brief,'RfpBrief',context!),
        'Proposal': JsonConverters.toJson(Proposal,'ProjectProposal',context!),
        'Pricing': JsonConverters.toJson(Pricing,'PricedProposal',context!),
        'CrewPlan': JsonConverters.toJson(CrewPlan,'List<CrewPlanLine>',context!),
        'CacheReadTokens': CacheReadTokens,
        'CacheCreationTokens': CacheCreationTokens,
        'InputTokens': InputTokens
    };

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

class RfpRefineRequest implements IConvertible
{
    String? RfpDocumentUID;
    String? Layer;
    String? Mode;
    String? Instruction;

    RfpRefineRequest({this.RfpDocumentUID,this.Layer,this.Mode,this.Instruction});
    RfpRefineRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        RfpDocumentUID = json['RfpDocumentUID'];
        Layer = json['Layer'];
        Mode = json['Mode'];
        Instruction = json['Instruction'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'RfpDocumentUID': RfpDocumentUID,
        'Layer': Layer,
        'Mode': Mode,
        'Instruction': Instruction
    };

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

TypeContext _ctx = TypeContext(library: 'api.dev.dynamics.trendsic.com', types: <String, TypeInfo> {
    'RfpLocation': TypeInfo(TypeOf.Class, create:() => RfpLocation()),
    'RfpSchedule': TypeInfo(TypeOf.Class, create:() => RfpSchedule()),
    'RfpLineItem': TypeInfo(TypeOf.Class, create:() => RfpLineItem()),
    'RfpBidConstraint': TypeInfo(TypeOf.Class, create:() => RfpBidConstraint()),
    'RfpBrief': TypeInfo(TypeOf.Class, create:() => RfpBrief()),
    'List<RfpLocation>': TypeInfo(TypeOf.Class, create:() => <RfpLocation>[]),
    'List<RfpLineItem>': TypeInfo(TypeOf.Class, create:() => <RfpLineItem>[]),
    'List<RfpBidConstraint>': TypeInfo(TypeOf.Class, create:() => <RfpBidConstraint>[]),
    'ResourcedPosition': TypeInfo(TypeOf.Class, create:() => ResourcedPosition()),
    'ResourcedEquipment': TypeInfo(TypeOf.Class, create:() => ResourcedEquipment()),
    'ResourcedMaterial': TypeInfo(TypeOf.Class, create:() => ResourcedMaterial()),
    'TaskResourcing': TypeInfo(TypeOf.Class, create:() => TaskResourcing()),
    'List<ResourcedPosition>': TypeInfo(TypeOf.Class, create:() => <ResourcedPosition>[]),
    'List<ResourcedEquipment>': TypeInfo(TypeOf.Class, create:() => <ResourcedEquipment>[]),
    'List<ResourcedMaterial>': TypeInfo(TypeOf.Class, create:() => <ResourcedMaterial>[]),
    'ProposedTask': TypeInfo(TypeOf.Class, create:() => ProposedTask()),
    'ProjectProposal': TypeInfo(TypeOf.Class, create:() => ProjectProposal()),
    'List<ProposedTask>': TypeInfo(TypeOf.Class, create:() => <ProposedTask>[]),
    'CostRange': TypeInfo(TypeOf.Class, create:() => CostRange()),
    'PricedPosition': TypeInfo(TypeOf.Class, create:() => PricedPosition()),
    'PricedEquipment': TypeInfo(TypeOf.Class, create:() => PricedEquipment()),
    'PricedMaterial': TypeInfo(TypeOf.Class, create:() => PricedMaterial()),
    'PricedTask': TypeInfo(TypeOf.Class, create:() => PricedTask()),
    'List<PricedPosition>': TypeInfo(TypeOf.Class, create:() => <PricedPosition>[]),
    'List<PricedEquipment>': TypeInfo(TypeOf.Class, create:() => <PricedEquipment>[]),
    'List<PricedMaterial>': TypeInfo(TypeOf.Class, create:() => <PricedMaterial>[]),
    'PricedProposal': TypeInfo(TypeOf.Class, create:() => PricedProposal()),
    'List<PricedTask>': TypeInfo(TypeOf.Class, create:() => <PricedTask>[]),
    'CrewPlanLine': TypeInfo(TypeOf.Class, create:() => CrewPlanLine()),
    'RfpRefineResponse': TypeInfo(TypeOf.Class, create:() => RfpRefineResponse()),
    'List<CrewPlanLine>': TypeInfo(TypeOf.Class, create:() => <CrewPlanLine>[]),
    'RfpRefineRequest': TypeInfo(TypeOf.Class, create:() => RfpRefineRequest()),
});

Dart RfpRefineRequest 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}/Refine HTTP/1.1 
Host: api.dev.dynamics.trendsic.com 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	RfpDocumentUID: String,
	Layer: String,
	Mode: String,
	Instruction: 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,
	Layer: String,
	Mode: String,
	TurnCount: 0,
	Brief: 
	{
		ProjectTitle: String,
		SolicitationNumber: String,
		IssuingOrganization: String,
		ProjectType: String,
		Summary: String,
		Locations: 
		[
			{
				Description: String,
				City: String,
				State: String,
				Identifier: String
			}
		],
		Schedule: 
		{
			BidDueDate: String,
			EstimatedStartDate: String,
			QuestionsDueDate: String,
			ContractDurationDays: 0,
			Notes: String
		},
		LineItems: 
		[
			{
				ItemNumber: String,
				Description: String,
				Quantity: 0,
				Unit: String,
				Category: String,
				SourceReference: String
			}
		],
		BidConstraints: 
		[
			{
				Constraint: String,
				Detail: String
			}
		],
		SpecialRequirements: 
		[
			String
		]
	},
	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,
							Headcount: 0,
							SourceReference: String,
							Notes: String,
							IsInCatalog: False,
							ContactID: 0
						}
					],
					Equipment: 
					[
						{
							EquipmentID: 0,
							EquipmentName: String,
							MakeModel: String,
							Quantity: 0,
							DurationDays: 0,
							SourceReference: String,
							Notes: String,
							IsInCatalog: False,
							SuggestedEquipmentID: 0,
							SuggestedEquipmentName: String
						}
					],
					Materials: 
					[
						{
							MaterialID: 0,
							MaterialName: String,
							MakeModel: String,
							Quantity: 0,
							Unit: String,
							SourceReference: String,
							Notes: String,
							IsInCatalog: False,
							SuggestedMaterialID: 0,
							SuggestedMaterialName: String
						}
					]
				},
				DurationDays: 0,
				DependsOn: 
				[
					0
				],
				EstimatedStartDate: 0001-01-01,
				EstimatedEndDate: 0001-01-01
			}
		]
	},
	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
	},
	CrewPlan: 
	[
		{
			PositionTag: String,
			Needed: 0,
			NaiveTotal: 0,
			TaskAssignments: 0
		}
	],
	CacheReadTokens: 0,
	CacheCreationTokens: 0,
	InputTokens: 0
}