Trendsic Platform Service

<back to all web services

RfpProposalRequest

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

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

    ResourcedPosition({this.PositionTag,this.Hours,this.CrewSize,this.Utilization,this.FixedDays,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']);
        CrewSize = JsonConverters.toDouble(json['CrewSize']);
        Utilization = JsonConverters.toDouble(json['Utilization']);
        FixedDays = JsonConverters.toDouble(json['FixedDays']);
        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,
        'CrewSize': CrewSize,
        'Utilization': Utilization,
        'FixedDays': FixedDays,
        '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;
    double? Utilization;
    double? FixedDays;
    String? SourceReference;
    String? Notes;
    bool? IsInCatalog;
    int? SuggestedEquipmentID;
    String? SuggestedEquipmentName;

    ResourcedEquipment({this.EquipmentID,this.EquipmentName,this.MakeModel,this.Quantity,this.DurationDays,this.Utilization,this.FixedDays,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']);
        Utilization = JsonConverters.toDouble(json['Utilization']);
        FixedDays = JsonConverters.toDouble(json['FixedDays']);
        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,
        'Utilization': Utilization,
        'FixedDays': FixedDays,
        '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;
    double? QuantityPerUnit;
    String? Unit;
    String? SourceReference;
    String? Notes;
    bool? IsInCatalog;
    int? SuggestedMaterialID;
    String? SuggestedMaterialName;

    ResourcedMaterial({this.MaterialID,this.MaterialName,this.MakeModel,this.Quantity,this.QuantityPerUnit,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']);
        QuantityPerUnit = JsonConverters.toDouble(json['QuantityPerUnit']);
        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,
        'QuantityPerUnit': QuantityPerUnit,
        '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 = [];
    double? ResourcedForQuantity;
    double? ProductionRatePerDay;
    double? FixedDays;

    TaskResourcing({this.Positions,this.Equipment,this.Materials,this.ResourcedForQuantity,this.ProductionRatePerDay,this.FixedDays});
    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!);
        ResourcedForQuantity = JsonConverters.toDouble(json['ResourcedForQuantity']);
        ProductionRatePerDay = JsonConverters.toDouble(json['ProductionRatePerDay']);
        FixedDays = JsonConverters.toDouble(json['FixedDays']);
        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!),
        'ResourcedForQuantity': ResourcedForQuantity,
        'ProductionRatePerDay': ProductionRatePerDay,
        'FixedDays': FixedDays
    };

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

class WorkPackageSpecRef implements IConvertible
{
    String? Section;
    String? Title;

    WorkPackageSpecRef({this.Section,this.Title});
    WorkPackageSpecRef.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'Section': Section,
        'Title': Title
    };

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

class TaskWorkPackage implements IConvertible
{
    String? Scope;
    String? LimitsOfWork;
    List<WorkPackageSpecRef>? SpecRefs = [];
    List<String>? Constraints = [];
    List<String>? HoldPoints = [];
    List<String>? DefinitionOfDone = [];
    String? SafetyNote;
    String? RfpRef;
    int? Confidence;
    String? SpecBook;
    String? UserScope;
    List<int>? DodRemoved = [];
    List<String>? DodExtra = [];
    bool? UserEdited;
    List<String>? DodChecked = [];
    String? RedraftNote;

    TaskWorkPackage({this.Scope,this.LimitsOfWork,this.SpecRefs,this.Constraints,this.HoldPoints,this.DefinitionOfDone,this.SafetyNote,this.RfpRef,this.Confidence,this.SpecBook,this.UserScope,this.DodRemoved,this.DodExtra,this.UserEdited,this.DodChecked,this.RedraftNote});
    TaskWorkPackage.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Scope = json['Scope'];
        LimitsOfWork = json['LimitsOfWork'];
        SpecRefs = JsonConverters.fromJson(json['SpecRefs'],'List<WorkPackageSpecRef>',context!);
        Constraints = JsonConverters.fromJson(json['Constraints'],'List<String>',context!);
        HoldPoints = JsonConverters.fromJson(json['HoldPoints'],'List<String>',context!);
        DefinitionOfDone = JsonConverters.fromJson(json['DefinitionOfDone'],'List<String>',context!);
        SafetyNote = json['SafetyNote'];
        RfpRef = json['RfpRef'];
        Confidence = json['Confidence'];
        SpecBook = json['SpecBook'];
        UserScope = json['UserScope'];
        DodRemoved = JsonConverters.fromJson(json['DodRemoved'],'List<int>',context!);
        DodExtra = JsonConverters.fromJson(json['DodExtra'],'List<String>',context!);
        UserEdited = json['UserEdited'];
        DodChecked = JsonConverters.fromJson(json['DodChecked'],'List<String>',context!);
        RedraftNote = json['RedraftNote'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Scope': Scope,
        'LimitsOfWork': LimitsOfWork,
        'SpecRefs': JsonConverters.toJson(SpecRefs,'List<WorkPackageSpecRef>',context!),
        'Constraints': JsonConverters.toJson(Constraints,'List<String>',context!),
        'HoldPoints': JsonConverters.toJson(HoldPoints,'List<String>',context!),
        'DefinitionOfDone': JsonConverters.toJson(DefinitionOfDone,'List<String>',context!),
        'SafetyNote': SafetyNote,
        'RfpRef': RfpRef,
        'Confidence': Confidence,
        'SpecBook': SpecBook,
        'UserScope': UserScope,
        'DodRemoved': JsonConverters.toJson(DodRemoved,'List<int>',context!),
        'DodExtra': JsonConverters.toJson(DodExtra,'List<String>',context!),
        'UserEdited': UserEdited,
        'DodChecked': JsonConverters.toJson(DodChecked,'List<String>',context!),
        'RedraftNote': RedraftNote
    };

    getTypeName() => "TaskWorkPackage";
    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;
    TaskWorkPackage? WorkPackage;
    int? CreatedJobID;

    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,this.WorkPackage,this.CreatedJobID});
    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!);
        WorkPackage = JsonConverters.fromJson(json['WorkPackage'],'TaskWorkPackage',context!);
        CreatedJobID = json['CreatedJobID'];
        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!),
        'WorkPackage': JsonConverters.toJson(WorkPackage,'TaskWorkPackage',context!),
        'CreatedJobID': CreatedJobID
    };

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

class AddendaChange implements IConvertible
{
    String? ChangeId;
    String? ChangeType;
    int? TargetSeq;
    String? ItemNumber;
    String? ItemName;
    String? Field;
    String? OldValue;
    String? NewValue;
    String? Description;
    String? Status;

    AddendaChange({this.ChangeId,this.ChangeType,this.TargetSeq,this.ItemNumber,this.ItemName,this.Field,this.OldValue,this.NewValue,this.Description,this.Status});
    AddendaChange.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ChangeId = json['ChangeId'];
        ChangeType = json['ChangeType'];
        TargetSeq = json['TargetSeq'];
        ItemNumber = json['ItemNumber'];
        ItemName = json['ItemName'];
        Field = json['Field'];
        OldValue = json['OldValue'];
        NewValue = json['NewValue'];
        Description = json['Description'];
        Status = json['Status'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ChangeId': ChangeId,
        'ChangeType': ChangeType,
        'TargetSeq': TargetSeq,
        'ItemNumber': ItemNumber,
        'ItemName': ItemName,
        'Field': Field,
        'OldValue': OldValue,
        'NewValue': NewValue,
        'Description': Description,
        'Status': Status
    };

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

class AddendaChangeSet implements IConvertible
{
    String? ChangeSetId;
    int? SourceRfpDocumentID;
    String? SourceFileName;
    String? DocumentType;
    DateTime? ExtractedAtUtc;
    String? Summary;
    List<AddendaChange>? Changes = [];

    AddendaChangeSet({this.ChangeSetId,this.SourceRfpDocumentID,this.SourceFileName,this.DocumentType,this.ExtractedAtUtc,this.Summary,this.Changes});
    AddendaChangeSet.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ChangeSetId = json['ChangeSetId'];
        SourceRfpDocumentID = json['SourceRfpDocumentID'];
        SourceFileName = json['SourceFileName'];
        DocumentType = json['DocumentType'];
        ExtractedAtUtc = JsonConverters.fromJson(json['ExtractedAtUtc'],'DateTime',context!);
        Summary = json['Summary'];
        Changes = JsonConverters.fromJson(json['Changes'],'List<AddendaChange>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ChangeSetId': ChangeSetId,
        'SourceRfpDocumentID': SourceRfpDocumentID,
        'SourceFileName': SourceFileName,
        'DocumentType': DocumentType,
        'ExtractedAtUtc': JsonConverters.toJson(ExtractedAtUtc,'DateTime',context!),
        'Summary': Summary,
        'Changes': JsonConverters.toJson(Changes,'List<AddendaChange>',context!)
    };

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

class WageClassification implements IConvertible
{
    String? Title;
    double? BaseRate;
    double? FringeRate;
    String? ParishNote;
    String? SourceLine;
    double? BenchmarkFringeRate;
    String? FringeCompareNote;

    WageClassification({this.Title,this.BaseRate,this.FringeRate,this.ParishNote,this.SourceLine,this.BenchmarkFringeRate,this.FringeCompareNote});
    WageClassification.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Title = json['Title'];
        BaseRate = JsonConverters.toDouble(json['BaseRate']);
        FringeRate = JsonConverters.toDouble(json['FringeRate']);
        ParishNote = json['ParishNote'];
        SourceLine = json['SourceLine'];
        BenchmarkFringeRate = JsonConverters.toDouble(json['BenchmarkFringeRate']);
        FringeCompareNote = json['FringeCompareNote'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Title': Title,
        'BaseRate': BaseRate,
        'FringeRate': FringeRate,
        'ParishNote': ParishNote,
        'SourceLine': SourceLine,
        'BenchmarkFringeRate': BenchmarkFringeRate,
        'FringeCompareNote': FringeCompareNote
    };

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

class WageDeterminationResult implements IConvertible
{
    int? SourceRfpDocumentID;
    String? SourceFileName;
    String? WdNumber;
    DateTime? ExtractedAtUtc;
    List<WageClassification>? Classifications = [];
    String? Source;
    bool? IsTrustworthy;
    double? ExecutiveOrderFloor;
    String? PublishedDate;
    String? ProjectParish;
    List<String>? Warnings = [];

    WageDeterminationResult({this.SourceRfpDocumentID,this.SourceFileName,this.WdNumber,this.ExtractedAtUtc,this.Classifications,this.Source,this.IsTrustworthy,this.ExecutiveOrderFloor,this.PublishedDate,this.ProjectParish,this.Warnings});
    WageDeterminationResult.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SourceRfpDocumentID = json['SourceRfpDocumentID'];
        SourceFileName = json['SourceFileName'];
        WdNumber = json['WdNumber'];
        ExtractedAtUtc = JsonConverters.fromJson(json['ExtractedAtUtc'],'DateTime',context!);
        Classifications = JsonConverters.fromJson(json['Classifications'],'List<WageClassification>',context!);
        Source = json['Source'];
        IsTrustworthy = json['IsTrustworthy'];
        ExecutiveOrderFloor = JsonConverters.toDouble(json['ExecutiveOrderFloor']);
        PublishedDate = json['PublishedDate'];
        ProjectParish = json['ProjectParish'];
        Warnings = JsonConverters.fromJson(json['Warnings'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SourceRfpDocumentID': SourceRfpDocumentID,
        'SourceFileName': SourceFileName,
        'WdNumber': WdNumber,
        'ExtractedAtUtc': JsonConverters.toJson(ExtractedAtUtc,'DateTime',context!),
        'Classifications': JsonConverters.toJson(Classifications,'List<WageClassification>',context!),
        'Source': Source,
        'IsTrustworthy': IsTrustworthy,
        'ExecutiveOrderFloor': ExecutiveOrderFloor,
        'PublishedDate': PublishedDate,
        'ProjectParish': ProjectParish,
        'Warnings': JsonConverters.toJson(Warnings,'List<String>',context!)
    };

    getTypeName() => "WageDeterminationResult";
    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 = [];
    List<AddendaChangeSet>? PendingAddendaDiffs = [];
    List<WageDeterminationResult>? WageDeterminations = [];

    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,this.PendingAddendaDiffs,this.WageDeterminations});
    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!);
        PendingAddendaDiffs = JsonConverters.fromJson(json['PendingAddendaDiffs'],'List<AddendaChangeSet>',context!);
        WageDeterminations = JsonConverters.fromJson(json['WageDeterminations'],'List<WageDeterminationResult>',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!),
        'PendingAddendaDiffs': JsonConverters.toJson(PendingAddendaDiffs,'List<AddendaChangeSet>',context!),
        'WageDeterminations': JsonConverters.toJson(WageDeterminations,'List<WageDeterminationResult>',context!)
    };

    getTypeName() => "ProjectProposal";
    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 RfpProposalResponse implements IConvertible
{
    ResponseStatus? ResponseStatus;
    int? RfpDocumentID;
    ProjectProposal? Proposal;
    List<CrewPlanLine>? CrewPlan = [];

    RfpProposalResponse({this.ResponseStatus,this.RfpDocumentID,this.Proposal,this.CrewPlan});
    RfpProposalResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!);
        RfpDocumentID = json['RfpDocumentID'];
        Proposal = JsonConverters.fromJson(json['Proposal'],'ProjectProposal',context!);
        CrewPlan = JsonConverters.fromJson(json['CrewPlan'],'List<CrewPlanLine>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!),
        'RfpDocumentID': RfpDocumentID,
        'Proposal': JsonConverters.toJson(Proposal,'ProjectProposal',context!),
        'CrewPlan': JsonConverters.toJson(CrewPlan,'List<CrewPlanLine>',context!)
    };

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

class RfpProposalRequest implements IConvertible
{
    String? RfpDocumentUID;

    RfpProposalRequest({this.RfpDocumentUID});
    RfpProposalRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

TypeContext _ctx = TypeContext(library: 'api.dev.dynamics.trendsic.com', types: <String, TypeInfo> {
    '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>[]),
    'WorkPackageSpecRef': TypeInfo(TypeOf.Class, create:() => WorkPackageSpecRef()),
    'TaskWorkPackage': TypeInfo(TypeOf.Class, create:() => TaskWorkPackage()),
    'List<WorkPackageSpecRef>': TypeInfo(TypeOf.Class, create:() => <WorkPackageSpecRef>[]),
    'ProposedTask': TypeInfo(TypeOf.Class, create:() => ProposedTask()),
    'AddendaChange': TypeInfo(TypeOf.Class, create:() => AddendaChange()),
    'AddendaChangeSet': TypeInfo(TypeOf.Class, create:() => AddendaChangeSet()),
    'List<AddendaChange>': TypeInfo(TypeOf.Class, create:() => <AddendaChange>[]),
    'WageClassification': TypeInfo(TypeOf.Class, create:() => WageClassification()),
    'WageDeterminationResult': TypeInfo(TypeOf.Class, create:() => WageDeterminationResult()),
    'List<WageClassification>': TypeInfo(TypeOf.Class, create:() => <WageClassification>[]),
    'ProjectProposal': TypeInfo(TypeOf.Class, create:() => ProjectProposal()),
    'List<ProposedTask>': TypeInfo(TypeOf.Class, create:() => <ProposedTask>[]),
    'List<AddendaChangeSet>': TypeInfo(TypeOf.Class, create:() => <AddendaChangeSet>[]),
    'List<WageDeterminationResult>': TypeInfo(TypeOf.Class, create:() => <WageDeterminationResult>[]),
    'CrewPlanLine': TypeInfo(TypeOf.Class, create:() => CrewPlanLine()),
    'RfpProposalResponse': TypeInfo(TypeOf.Class, create:() => RfpProposalResponse()),
    'List<CrewPlanLine>': TypeInfo(TypeOf.Class, create:() => <CrewPlanLine>[]),
    'RfpProposalRequest': TypeInfo(TypeOf.Class, create:() => RfpProposalRequest()),
});

Dart RfpProposalRequest 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.

GET /v1/Rfp/{RfpDocumentUID}/Proposal 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
		}
	},
	RfpDocumentID: 0,
	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
				]
			}
		]
	},
	CrewPlan: 
	[
		{
			PositionTag: String,
			Needed: 0,
			NaiveTotal: 0,
			TaskAssignments: 0
		}
	]
}