Trendsic Platform Service

<back to all web services

EstimateRevisionCompareRequest

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

class RevisionLineDelta implements IConvertible
{
    String? ItemNo;
    String? Description;
    String? Unit;
    String? Change;
    double? QuantityA;
    double? QuantityB;
    double? UnitPriceA;
    double? UnitPriceB;
    double? ExtensionA;
    double? ExtensionB;
    double? QuantityDelta;
    double? UnitPriceDelta;
    double? ExtensionDelta;

    RevisionLineDelta({this.ItemNo,this.Description,this.Unit,this.Change,this.QuantityA,this.QuantityB,this.UnitPriceA,this.UnitPriceB,this.ExtensionA,this.ExtensionB,this.QuantityDelta,this.UnitPriceDelta,this.ExtensionDelta});
    RevisionLineDelta.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ItemNo = json['ItemNo'];
        Description = json['Description'];
        Unit = json['Unit'];
        Change = json['Change'];
        QuantityA = JsonConverters.toDouble(json['QuantityA']);
        QuantityB = JsonConverters.toDouble(json['QuantityB']);
        UnitPriceA = JsonConverters.toDouble(json['UnitPriceA']);
        UnitPriceB = JsonConverters.toDouble(json['UnitPriceB']);
        ExtensionA = JsonConverters.toDouble(json['ExtensionA']);
        ExtensionB = JsonConverters.toDouble(json['ExtensionB']);
        QuantityDelta = JsonConverters.toDouble(json['QuantityDelta']);
        UnitPriceDelta = JsonConverters.toDouble(json['UnitPriceDelta']);
        ExtensionDelta = JsonConverters.toDouble(json['ExtensionDelta']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ItemNo': ItemNo,
        'Description': Description,
        'Unit': Unit,
        'Change': Change,
        'QuantityA': QuantityA,
        'QuantityB': QuantityB,
        'UnitPriceA': UnitPriceA,
        'UnitPriceB': UnitPriceB,
        'ExtensionA': ExtensionA,
        'ExtensionB': ExtensionB,
        'QuantityDelta': QuantityDelta,
        'UnitPriceDelta': UnitPriceDelta,
        'ExtensionDelta': ExtensionDelta
    };

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

class TaskDiff implements IConvertible
{
    String? TaskName;
    List<String>? PositionsAdded = [];
    List<String>? PositionsRemoved = [];
    List<String>? PositionsStaffed = [];
    List<int>? EquipmentAdded = [];
    List<int>? EquipmentRemoved = [];
    List<int>? MaterialsAdded = [];
    List<int>? MaterialsRemoved = [];
    bool? HasChanges;

    TaskDiff({this.TaskName,this.PositionsAdded,this.PositionsRemoved,this.PositionsStaffed,this.EquipmentAdded,this.EquipmentRemoved,this.MaterialsAdded,this.MaterialsRemoved,this.HasChanges});
    TaskDiff.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        TaskName = json['TaskName'];
        PositionsAdded = JsonConverters.fromJson(json['PositionsAdded'],'List<String>',context!);
        PositionsRemoved = JsonConverters.fromJson(json['PositionsRemoved'],'List<String>',context!);
        PositionsStaffed = JsonConverters.fromJson(json['PositionsStaffed'],'List<String>',context!);
        EquipmentAdded = JsonConverters.fromJson(json['EquipmentAdded'],'List<int>',context!);
        EquipmentRemoved = JsonConverters.fromJson(json['EquipmentRemoved'],'List<int>',context!);
        MaterialsAdded = JsonConverters.fromJson(json['MaterialsAdded'],'List<int>',context!);
        MaterialsRemoved = JsonConverters.fromJson(json['MaterialsRemoved'],'List<int>',context!);
        HasChanges = json['HasChanges'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'TaskName': TaskName,
        'PositionsAdded': JsonConverters.toJson(PositionsAdded,'List<String>',context!),
        'PositionsRemoved': JsonConverters.toJson(PositionsRemoved,'List<String>',context!),
        'PositionsStaffed': JsonConverters.toJson(PositionsStaffed,'List<String>',context!),
        'EquipmentAdded': JsonConverters.toJson(EquipmentAdded,'List<int>',context!),
        'EquipmentRemoved': JsonConverters.toJson(EquipmentRemoved,'List<int>',context!),
        'MaterialsAdded': JsonConverters.toJson(MaterialsAdded,'List<int>',context!),
        'MaterialsRemoved': JsonConverters.toJson(MaterialsRemoved,'List<int>',context!),
        'HasChanges': HasChanges
    };

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

class ProposalDiff implements IConvertible
{
    List<String>? TasksAdded = [];
    List<String>? TasksRemoved = [];
    List<TaskDiff>? Tasks = [];
    bool? HasChanges;

    ProposalDiff({this.TasksAdded,this.TasksRemoved,this.Tasks,this.HasChanges});
    ProposalDiff.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        TasksAdded = JsonConverters.fromJson(json['TasksAdded'],'List<String>',context!);
        TasksRemoved = JsonConverters.fromJson(json['TasksRemoved'],'List<String>',context!);
        Tasks = JsonConverters.fromJson(json['Tasks'],'List<TaskDiff>',context!);
        HasChanges = json['HasChanges'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'TasksAdded': JsonConverters.toJson(TasksAdded,'List<String>',context!),
        'TasksRemoved': JsonConverters.toJson(TasksRemoved,'List<String>',context!),
        'Tasks': JsonConverters.toJson(Tasks,'List<TaskDiff>',context!),
        'HasChanges': HasChanges
    };

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

class EstimateRevisionCompareResult implements IConvertible
{
    int? RevisionA;
    int? RevisionB;
    String? LabelA;
    String? LabelB;
    double? TotalA;
    double? TotalB;
    double? TotalDelta;
    double? BidTotalA;
    double? BidTotalB;
    int? Added;
    int? Removed;
    int? Changed;
    int? Unchanged;
    List<RevisionLineDelta>? Lines = [];
    ProposalDiff? Scope;
    String? Summary;

    EstimateRevisionCompareResult({this.RevisionA,this.RevisionB,this.LabelA,this.LabelB,this.TotalA,this.TotalB,this.TotalDelta,this.BidTotalA,this.BidTotalB,this.Added,this.Removed,this.Changed,this.Unchanged,this.Lines,this.Scope,this.Summary});
    EstimateRevisionCompareResult.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        RevisionA = json['RevisionA'];
        RevisionB = json['RevisionB'];
        LabelA = json['LabelA'];
        LabelB = json['LabelB'];
        TotalA = JsonConverters.toDouble(json['TotalA']);
        TotalB = JsonConverters.toDouble(json['TotalB']);
        TotalDelta = JsonConverters.toDouble(json['TotalDelta']);
        BidTotalA = JsonConverters.toDouble(json['BidTotalA']);
        BidTotalB = JsonConverters.toDouble(json['BidTotalB']);
        Added = json['Added'];
        Removed = json['Removed'];
        Changed = json['Changed'];
        Unchanged = json['Unchanged'];
        Lines = JsonConverters.fromJson(json['Lines'],'List<RevisionLineDelta>',context!);
        Scope = JsonConverters.fromJson(json['Scope'],'ProposalDiff',context!);
        Summary = json['Summary'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'RevisionA': RevisionA,
        'RevisionB': RevisionB,
        'LabelA': LabelA,
        'LabelB': LabelB,
        'TotalA': TotalA,
        'TotalB': TotalB,
        'TotalDelta': TotalDelta,
        'BidTotalA': BidTotalA,
        'BidTotalB': BidTotalB,
        'Added': Added,
        'Removed': Removed,
        'Changed': Changed,
        'Unchanged': Unchanged,
        'Lines': JsonConverters.toJson(Lines,'List<RevisionLineDelta>',context!),
        'Scope': JsonConverters.toJson(Scope,'ProposalDiff',context!),
        'Summary': Summary
    };

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

class EstimateRevisionCompareResponse implements IConvertible
{
    ResponseStatus? ResponseStatus;
    EstimateRevisionCompareResult? Compare;

    EstimateRevisionCompareResponse({this.ResponseStatus,this.Compare});
    EstimateRevisionCompareResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!);
        Compare = JsonConverters.fromJson(json['Compare'],'EstimateRevisionCompareResult',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!),
        'Compare': JsonConverters.toJson(Compare,'EstimateRevisionCompareResult',context!)
    };

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

class EstimateRevisionCompareRequest implements IConvertible
{
    String? RfpDocumentUID;
    int? RevisionA;
    int? RevisionB;

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

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

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

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

TypeContext _ctx = TypeContext(library: 'api.dev.dynamics.trendsic.com', types: <String, TypeInfo> {
    'RevisionLineDelta': TypeInfo(TypeOf.Class, create:() => RevisionLineDelta()),
    'TaskDiff': TypeInfo(TypeOf.Class, create:() => TaskDiff()),
    'ProposalDiff': TypeInfo(TypeOf.Class, create:() => ProposalDiff()),
    'List<TaskDiff>': TypeInfo(TypeOf.Class, create:() => <TaskDiff>[]),
    'EstimateRevisionCompareResult': TypeInfo(TypeOf.Class, create:() => EstimateRevisionCompareResult()),
    'List<RevisionLineDelta>': TypeInfo(TypeOf.Class, create:() => <RevisionLineDelta>[]),
    'EstimateRevisionCompareResponse': TypeInfo(TypeOf.Class, create:() => EstimateRevisionCompareResponse()),
    'EstimateRevisionCompareRequest': TypeInfo(TypeOf.Class, create:() => EstimateRevisionCompareRequest()),
});

Dart EstimateRevisionCompareRequest 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}/Estimate/Revisions/{RevisionA}/Compare/{RevisionB} 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
		}
	},
	Compare: 
	{
		RevisionA: 0,
		RevisionB: 0,
		LabelA: String,
		LabelB: String,
		TotalA: 0,
		TotalB: 0,
		TotalDelta: 0,
		BidTotalA: 0,
		BidTotalB: 0,
		Added: 0,
		Removed: 0,
		Changed: 0,
		Unchanged: 0,
		Lines: 
		[
			{
				ItemNo: String,
				Description: String,
				Unit: String,
				Change: String,
				QuantityA: 0,
				QuantityB: 0,
				UnitPriceA: 0,
				UnitPriceB: 0,
				ExtensionA: 0,
				ExtensionB: 0,
				QuantityDelta: 0,
				UnitPriceDelta: 0,
				ExtensionDelta: 0
			}
		],
		Scope: 
		{
			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
		},
		Summary: String
	}
}