/* Options: Date: 2026-10-16 00:21:10 Version: 8.80 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://api.dev.dynamics.trendsic.com //GlobalNamespace: //AddServiceStackTypes: True //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True IncludeTypes: KpiV2DetailRequest.* //ExcludeTypes: //DefaultImports: package:servicestack/servicestack.dart */ import 'package:servicestack/servicestack.dart'; class SvcNamedTime implements IConvertible { String? Id; String? Name; int? SignedSec; int? Served; SvcNamedTime({this.Id,this.Name,this.SignedSec,this.Served}); SvcNamedTime.fromJson(Map json) { fromMap(json); } fromMap(Map json) { Id = json['Id']; Name = json['Name']; SignedSec = json['SignedSec']; Served = json['Served']; return this; } Map toJson() => { 'Id': Id, 'Name': Name, 'SignedSec': SignedSec, 'Served': Served }; getTypeName() => "SvcNamedTime"; TypeContext? context = _ctx; } class SvcTint implements IConvertible { String? Field; String? Tone; String? Reason; double? Value; double? Reference; double? BranchValue; SvcTint({this.Field,this.Tone,this.Reason,this.Value,this.Reference,this.BranchValue}); SvcTint.fromJson(Map json) { fromMap(json); } fromMap(Map json) { Field = json['Field']; Tone = json['Tone']; Reason = json['Reason']; Value = JsonConverters.toDouble(json['Value']); Reference = JsonConverters.toDouble(json['Reference']); BranchValue = JsonConverters.toDouble(json['BranchValue']); return this; } Map toJson() => { 'Field': Field, 'Tone': Tone, 'Reason': Reason, 'Value': Value, 'Reference': Reference, 'BranchValue': BranchValue }; getTypeName() => "SvcTint"; TypeContext? context = _ctx; } class SvcMetrics implements IConvertible { int? Checkins; int? Walkins; int? Appts; int? Served; int? NoShows; int? ApptNoShows; int? CancelledAtWindow; int? Abandoned; int? Called; int? CalledUp; double? AbandonRate; double? NoShowRate; double? AvgServiceSec; double? MedianServiceSec; double? AvgWaitSec; int? MaxWaitSec; double? AvgWalkUpSec; double? ExpectedServiceSec; int? SignedSec; int? ServingSec; int? PausedSec; int? IdleSec; int? UnstaffedSec; double? Utilization; double? IdleShare; double? PausedShare; int? Sessions; int? OpenDays; double? FeesEarned; double? AvgFee; double? FeesPerStaffedHour; double? ExpectedFeesPerStaffedHour; double? LaborCost; bool? LaborPartial; List? MissingCostEmployeeIds = []; List? MissingCost = []; bool? LaborLocked; double? Contribution; double? LostFees; double? LostNoShowFees; Map? Mix = {}; List? HourlyServed = []; List? HourlyFees = []; List? HourlyCost = []; List? Tints = []; SvcMetrics({this.Checkins,this.Walkins,this.Appts,this.Served,this.NoShows,this.ApptNoShows,this.CancelledAtWindow,this.Abandoned,this.Called,this.CalledUp,this.AbandonRate,this.NoShowRate,this.AvgServiceSec,this.MedianServiceSec,this.AvgWaitSec,this.MaxWaitSec,this.AvgWalkUpSec,this.ExpectedServiceSec,this.SignedSec,this.ServingSec,this.PausedSec,this.IdleSec,this.UnstaffedSec,this.Utilization,this.IdleShare,this.PausedShare,this.Sessions,this.OpenDays,this.FeesEarned,this.AvgFee,this.FeesPerStaffedHour,this.ExpectedFeesPerStaffedHour,this.LaborCost,this.LaborPartial,this.MissingCostEmployeeIds,this.MissingCost,this.LaborLocked,this.Contribution,this.LostFees,this.LostNoShowFees,this.Mix,this.HourlyServed,this.HourlyFees,this.HourlyCost,this.Tints}); SvcMetrics.fromJson(Map json) { fromMap(json); } fromMap(Map json) { Checkins = json['Checkins']; Walkins = json['Walkins']; Appts = json['Appts']; Served = json['Served']; NoShows = json['NoShows']; ApptNoShows = json['ApptNoShows']; CancelledAtWindow = json['CancelledAtWindow']; Abandoned = json['Abandoned']; Called = json['Called']; CalledUp = json['CalledUp']; AbandonRate = JsonConverters.toDouble(json['AbandonRate']); NoShowRate = JsonConverters.toDouble(json['NoShowRate']); AvgServiceSec = JsonConverters.toDouble(json['AvgServiceSec']); MedianServiceSec = JsonConverters.toDouble(json['MedianServiceSec']); AvgWaitSec = JsonConverters.toDouble(json['AvgWaitSec']); MaxWaitSec = json['MaxWaitSec']; AvgWalkUpSec = JsonConverters.toDouble(json['AvgWalkUpSec']); ExpectedServiceSec = JsonConverters.toDouble(json['ExpectedServiceSec']); SignedSec = json['SignedSec']; ServingSec = json['ServingSec']; PausedSec = json['PausedSec']; IdleSec = json['IdleSec']; UnstaffedSec = json['UnstaffedSec']; Utilization = JsonConverters.toDouble(json['Utilization']); IdleShare = JsonConverters.toDouble(json['IdleShare']); PausedShare = JsonConverters.toDouble(json['PausedShare']); Sessions = json['Sessions']; OpenDays = json['OpenDays']; FeesEarned = JsonConverters.toDouble(json['FeesEarned']); AvgFee = JsonConverters.toDouble(json['AvgFee']); FeesPerStaffedHour = JsonConverters.toDouble(json['FeesPerStaffedHour']); ExpectedFeesPerStaffedHour = JsonConverters.toDouble(json['ExpectedFeesPerStaffedHour']); LaborCost = JsonConverters.toDouble(json['LaborCost']); LaborPartial = json['LaborPartial']; MissingCostEmployeeIds = JsonConverters.fromJson(json['MissingCostEmployeeIds'],'List',context!); MissingCost = JsonConverters.fromJson(json['MissingCost'],'List',context!); LaborLocked = json['LaborLocked']; Contribution = JsonConverters.toDouble(json['Contribution']); LostFees = JsonConverters.toDouble(json['LostFees']); LostNoShowFees = JsonConverters.toDouble(json['LostNoShowFees']); Mix = JsonConverters.fromJson(json['Mix'],'Map',context!); HourlyServed = JsonConverters.fromJson(json['HourlyServed'],'List',context!); HourlyFees = JsonConverters.fromJson(json['HourlyFees'],'List',context!); HourlyCost = JsonConverters.fromJson(json['HourlyCost'],'List',context!); Tints = JsonConverters.fromJson(json['Tints'],'List',context!); return this; } Map toJson() => { 'Checkins': Checkins, 'Walkins': Walkins, 'Appts': Appts, 'Served': Served, 'NoShows': NoShows, 'ApptNoShows': ApptNoShows, 'CancelledAtWindow': CancelledAtWindow, 'Abandoned': Abandoned, 'Called': Called, 'CalledUp': CalledUp, 'AbandonRate': AbandonRate, 'NoShowRate': NoShowRate, 'AvgServiceSec': AvgServiceSec, 'MedianServiceSec': MedianServiceSec, 'AvgWaitSec': AvgWaitSec, 'MaxWaitSec': MaxWaitSec, 'AvgWalkUpSec': AvgWalkUpSec, 'ExpectedServiceSec': ExpectedServiceSec, 'SignedSec': SignedSec, 'ServingSec': ServingSec, 'PausedSec': PausedSec, 'IdleSec': IdleSec, 'UnstaffedSec': UnstaffedSec, 'Utilization': Utilization, 'IdleShare': IdleShare, 'PausedShare': PausedShare, 'Sessions': Sessions, 'OpenDays': OpenDays, 'FeesEarned': FeesEarned, 'AvgFee': AvgFee, 'FeesPerStaffedHour': FeesPerStaffedHour, 'ExpectedFeesPerStaffedHour': ExpectedFeesPerStaffedHour, 'LaborCost': LaborCost, 'LaborPartial': LaborPartial, 'MissingCostEmployeeIds': JsonConverters.toJson(MissingCostEmployeeIds,'List',context!), 'MissingCost': JsonConverters.toJson(MissingCost,'List',context!), 'LaborLocked': LaborLocked, 'Contribution': Contribution, 'LostFees': LostFees, 'LostNoShowFees': LostNoShowFees, 'Mix': JsonConverters.toJson(Mix,'Map',context!), 'HourlyServed': JsonConverters.toJson(HourlyServed,'List',context!), 'HourlyFees': JsonConverters.toJson(HourlyFees,'List',context!), 'HourlyCost': JsonConverters.toJson(HourlyCost,'List',context!), 'Tints': JsonConverters.toJson(Tints,'List',context!) }; getTypeName() => "SvcMetrics"; TypeContext? context = _ctx; } class SvcWindowRow implements IConvertible { String? StationId; String? Name; List? Clerks = []; bool? NeverStaffed; DateTime? LastStaffedUtc; String? LastStaffedBy; SvcMetrics? Metrics; SvcWindowRow({this.StationId,this.Name,this.Clerks,this.NeverStaffed,this.LastStaffedUtc,this.LastStaffedBy,this.Metrics}); SvcWindowRow.fromJson(Map json) { fromMap(json); } fromMap(Map json) { StationId = json['StationId']; Name = json['Name']; Clerks = JsonConverters.fromJson(json['Clerks'],'List',context!); NeverStaffed = json['NeverStaffed']; LastStaffedUtc = JsonConverters.fromJson(json['LastStaffedUtc'],'DateTime',context!); LastStaffedBy = json['LastStaffedBy']; Metrics = JsonConverters.fromJson(json['Metrics'],'SvcMetrics',context!); return this; } Map toJson() => { 'StationId': StationId, 'Name': Name, 'Clerks': JsonConverters.toJson(Clerks,'List',context!), 'NeverStaffed': NeverStaffed, 'LastStaffedUtc': JsonConverters.toJson(LastStaffedUtc,'DateTime',context!), 'LastStaffedBy': LastStaffedBy, 'Metrics': JsonConverters.toJson(Metrics,'SvcMetrics',context!) }; getTypeName() => "SvcWindowRow"; TypeContext? context = _ctx; } class SvcClerkRow implements IConvertible { String? EmployeeId; String? Name; List? Windows = []; double? LoadedRate; bool? RateSet; bool? RateLocked; SvcMetrics? Metrics; SvcClerkRow({this.EmployeeId,this.Name,this.Windows,this.LoadedRate,this.RateSet,this.RateLocked,this.Metrics}); SvcClerkRow.fromJson(Map json) { fromMap(json); } fromMap(Map json) { EmployeeId = json['EmployeeId']; Name = json['Name']; Windows = JsonConverters.fromJson(json['Windows'],'List',context!); LoadedRate = JsonConverters.toDouble(json['LoadedRate']); RateSet = json['RateSet']; RateLocked = json['RateLocked']; Metrics = JsonConverters.fromJson(json['Metrics'],'SvcMetrics',context!); return this; } Map toJson() => { 'EmployeeId': EmployeeId, 'Name': Name, 'Windows': JsonConverters.toJson(Windows,'List',context!), 'LoadedRate': LoadedRate, 'RateSet': RateSet, 'RateLocked': RateLocked, 'Metrics': JsonConverters.toJson(Metrics,'SvcMetrics',context!) }; getTypeName() => "SvcClerkRow"; TypeContext? context = _ctx; } class SvcAverage implements IConvertible { int? Count; double? Served; double? AvgServiceSec; double? MedianServiceSec; double? AvgWaitSec; double? Utilization; double? IdleSec; double? PausedSec; double? NoShows; double? SignedSec; double? FeesEarned; double? FeesPerStaffedHour; double? LaborCost; double? Contribution; double? LostNoShowFees; SvcAverage({this.Count,this.Served,this.AvgServiceSec,this.MedianServiceSec,this.AvgWaitSec,this.Utilization,this.IdleSec,this.PausedSec,this.NoShows,this.SignedSec,this.FeesEarned,this.FeesPerStaffedHour,this.LaborCost,this.Contribution,this.LostNoShowFees}); SvcAverage.fromJson(Map json) { fromMap(json); } fromMap(Map json) { Count = json['Count']; Served = JsonConverters.toDouble(json['Served']); AvgServiceSec = JsonConverters.toDouble(json['AvgServiceSec']); MedianServiceSec = JsonConverters.toDouble(json['MedianServiceSec']); AvgWaitSec = JsonConverters.toDouble(json['AvgWaitSec']); Utilization = JsonConverters.toDouble(json['Utilization']); IdleSec = JsonConverters.toDouble(json['IdleSec']); PausedSec = JsonConverters.toDouble(json['PausedSec']); NoShows = JsonConverters.toDouble(json['NoShows']); SignedSec = JsonConverters.toDouble(json['SignedSec']); FeesEarned = JsonConverters.toDouble(json['FeesEarned']); FeesPerStaffedHour = JsonConverters.toDouble(json['FeesPerStaffedHour']); LaborCost = JsonConverters.toDouble(json['LaborCost']); Contribution = JsonConverters.toDouble(json['Contribution']); LostNoShowFees = JsonConverters.toDouble(json['LostNoShowFees']); return this; } Map toJson() => { 'Count': Count, 'Served': Served, 'AvgServiceSec': AvgServiceSec, 'MedianServiceSec': MedianServiceSec, 'AvgWaitSec': AvgWaitSec, 'Utilization': Utilization, 'IdleSec': IdleSec, 'PausedSec': PausedSec, 'NoShows': NoShows, 'SignedSec': SignedSec, 'FeesEarned': FeesEarned, 'FeesPerStaffedHour': FeesPerStaffedHour, 'LaborCost': LaborCost, 'Contribution': Contribution, 'LostNoShowFees': LostNoShowFees }; getTypeName() => "SvcAverage"; TypeContext? context = _ctx; } class SvcSession implements IConvertible { String? SessionId; String? StationId; String? StationName; String? EmployeeId; String? EmployeeName; DateTime? LocalIn; DateTime? LocalOut; bool? IsOpen; String? EndReason; int? PausedSec; SvcSession({this.SessionId,this.StationId,this.StationName,this.EmployeeId,this.EmployeeName,this.LocalIn,this.LocalOut,this.IsOpen,this.EndReason,this.PausedSec}); SvcSession.fromJson(Map json) { fromMap(json); } fromMap(Map json) { SessionId = json['SessionId']; StationId = json['StationId']; StationName = json['StationName']; EmployeeId = json['EmployeeId']; EmployeeName = json['EmployeeName']; LocalIn = JsonConverters.fromJson(json['LocalIn'],'DateTime',context!); LocalOut = JsonConverters.fromJson(json['LocalOut'],'DateTime',context!); IsOpen = json['IsOpen']; EndReason = json['EndReason']; PausedSec = json['PausedSec']; return this; } Map toJson() => { 'SessionId': SessionId, 'StationId': StationId, 'StationName': StationName, 'EmployeeId': EmployeeId, 'EmployeeName': EmployeeName, 'LocalIn': JsonConverters.toJson(LocalIn,'DateTime',context!), 'LocalOut': JsonConverters.toJson(LocalOut,'DateTime',context!), 'IsOpen': IsOpen, 'EndReason': EndReason, 'PausedSec': PausedSec }; getTypeName() => "SvcSession"; TypeContext? context = _ctx; } class SvcFeeChange implements IConvertible { String? LocationId; DateTime? OnDate; double? FromFee; double? ToFee; SvcFeeChange({this.LocationId,this.OnDate,this.FromFee,this.ToFee}); SvcFeeChange.fromJson(Map json) { fromMap(json); } fromMap(Map json) { LocationId = json['LocationId']; OnDate = JsonConverters.fromJson(json['OnDate'],'DateTime',context!); FromFee = JsonConverters.toDouble(json['FromFee']); ToFee = JsonConverters.toDouble(json['ToFee']); return this; } Map toJson() => { 'LocationId': LocationId, 'OnDate': JsonConverters.toJson(OnDate,'DateTime',context!), 'FromFee': FromFee, 'ToFee': ToFee }; getTypeName() => "SvcFeeChange"; TypeContext? context = _ctx; } class SvcServiceRow implements IConvertible { String? LineId; String? Name; int? Completed; double? AvgServiceSec; double? BranchAvgServiceSec; double? FeesEarned; double? FeeCurrent; double? FeeMin; double? FeeMax; double? FeePerMinute; double? BranchFeePerMinute; List? FeeChanges = []; SvcServiceRow({this.LineId,this.Name,this.Completed,this.AvgServiceSec,this.BranchAvgServiceSec,this.FeesEarned,this.FeeCurrent,this.FeeMin,this.FeeMax,this.FeePerMinute,this.BranchFeePerMinute,this.FeeChanges}); SvcServiceRow.fromJson(Map json) { fromMap(json); } fromMap(Map json) { LineId = json['LineId']; Name = json['Name']; Completed = json['Completed']; AvgServiceSec = JsonConverters.toDouble(json['AvgServiceSec']); BranchAvgServiceSec = JsonConverters.toDouble(json['BranchAvgServiceSec']); FeesEarned = JsonConverters.toDouble(json['FeesEarned']); FeeCurrent = JsonConverters.toDouble(json['FeeCurrent']); FeeMin = JsonConverters.toDouble(json['FeeMin']); FeeMax = JsonConverters.toDouble(json['FeeMax']); FeePerMinute = JsonConverters.toDouble(json['FeePerMinute']); BranchFeePerMinute = JsonConverters.toDouble(json['BranchFeePerMinute']); FeeChanges = JsonConverters.fromJson(json['FeeChanges'],'List',context!); return this; } Map toJson() => { 'LineId': LineId, 'Name': Name, 'Completed': Completed, 'AvgServiceSec': AvgServiceSec, 'BranchAvgServiceSec': BranchAvgServiceSec, 'FeesEarned': FeesEarned, 'FeeCurrent': FeeCurrent, 'FeeMin': FeeMin, 'FeeMax': FeeMax, 'FeePerMinute': FeePerMinute, 'BranchFeePerMinute': BranchFeePerMinute, 'FeeChanges': JsonConverters.toJson(FeeChanges,'List',context!) }; getTypeName() => "SvcServiceRow"; TypeContext? context = _ctx; } class SvcDetail implements IConvertible { String? Kind; SvcWindowRow? Window; SvcClerkRow? Clerk; SvcMetrics? BranchMetrics; SvcAverage? PerRowAverage; List? Sessions = []; List? Services = []; bool? CanSeeStaff; bool? CanSeeFinancial; bool? CanSeePay; SvcDetail({this.Kind,this.Window,this.Clerk,this.BranchMetrics,this.PerRowAverage,this.Sessions,this.Services,this.CanSeeStaff,this.CanSeeFinancial,this.CanSeePay}); SvcDetail.fromJson(Map json) { fromMap(json); } fromMap(Map json) { Kind = json['Kind']; Window = JsonConverters.fromJson(json['Window'],'SvcWindowRow',context!); Clerk = JsonConverters.fromJson(json['Clerk'],'SvcClerkRow',context!); BranchMetrics = JsonConverters.fromJson(json['BranchMetrics'],'SvcMetrics',context!); PerRowAverage = JsonConverters.fromJson(json['PerRowAverage'],'SvcAverage',context!); Sessions = JsonConverters.fromJson(json['Sessions'],'List',context!); Services = JsonConverters.fromJson(json['Services'],'List',context!); CanSeeStaff = json['CanSeeStaff']; CanSeeFinancial = json['CanSeeFinancial']; CanSeePay = json['CanSeePay']; return this; } Map toJson() => { 'Kind': Kind, 'Window': JsonConverters.toJson(Window,'SvcWindowRow',context!), 'Clerk': JsonConverters.toJson(Clerk,'SvcClerkRow',context!), 'BranchMetrics': JsonConverters.toJson(BranchMetrics,'SvcMetrics',context!), 'PerRowAverage': JsonConverters.toJson(PerRowAverage,'SvcAverage',context!), 'Sessions': JsonConverters.toJson(Sessions,'List',context!), 'Services': JsonConverters.toJson(Services,'List',context!), 'CanSeeStaff': CanSeeStaff, 'CanSeeFinancial': CanSeeFinancial, 'CanSeePay': CanSeePay }; getTypeName() => "SvcDetail"; TypeContext? context = _ctx; } class KpiV2DetailResponse implements IConvertible { ResponseStatus? ResponseStatus; SvcDetail? Detail; KpiV2DetailResponse({this.ResponseStatus,this.Detail}); KpiV2DetailResponse.fromJson(Map json) { fromMap(json); } fromMap(Map json) { ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!); Detail = JsonConverters.fromJson(json['Detail'],'SvcDetail',context!); return this; } Map toJson() => { 'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!), 'Detail': JsonConverters.toJson(Detail,'SvcDetail',context!) }; getTypeName() => "KpiV2DetailResponse"; TypeContext? context = _ctx; } // @Route("/v1/dashboard/kpiv2/detail", "POST,OPTIONS") class KpiV2DetailRequest implements IReturn, IConvertible, IPost { String? BranchId; String? StationId; String? EmployeeId; DateTime? FromDate; DateTime? ToDate; KpiV2DetailRequest({this.BranchId,this.StationId,this.EmployeeId,this.FromDate,this.ToDate}); KpiV2DetailRequest.fromJson(Map json) { fromMap(json); } fromMap(Map json) { BranchId = json['BranchId']; StationId = json['StationId']; EmployeeId = json['EmployeeId']; FromDate = JsonConverters.fromJson(json['FromDate'],'DateTime',context!); ToDate = JsonConverters.fromJson(json['ToDate'],'DateTime',context!); return this; } Map toJson() => { 'BranchId': BranchId, 'StationId': StationId, 'EmployeeId': EmployeeId, 'FromDate': JsonConverters.toJson(FromDate,'DateTime',context!), 'ToDate': JsonConverters.toJson(ToDate,'DateTime',context!) }; createResponse() => KpiV2DetailResponse(); getResponseTypeName() => "KpiV2DetailResponse"; getTypeName() => "KpiV2DetailRequest"; TypeContext? context = _ctx; } TypeContext _ctx = TypeContext(library: 'api.dev.dynamics.trendsic.com', types: { 'SvcNamedTime': TypeInfo(TypeOf.Class, create:() => SvcNamedTime()), 'SvcTint': TypeInfo(TypeOf.Class, create:() => SvcTint()), 'SvcMetrics': TypeInfo(TypeOf.Class, create:() => SvcMetrics()), 'List': TypeInfo(TypeOf.Class, create:() => []), 'Map': TypeInfo(TypeOf.Class, create:() => Map()), 'List': TypeInfo(TypeOf.Class, create:() => []), 'SvcWindowRow': TypeInfo(TypeOf.Class, create:() => SvcWindowRow()), 'SvcClerkRow': TypeInfo(TypeOf.Class, create:() => SvcClerkRow()), 'SvcAverage': TypeInfo(TypeOf.Class, create:() => SvcAverage()), 'SvcSession': TypeInfo(TypeOf.Class, create:() => SvcSession()), 'SvcFeeChange': TypeInfo(TypeOf.Class, create:() => SvcFeeChange()), 'SvcServiceRow': TypeInfo(TypeOf.Class, create:() => SvcServiceRow()), 'List': TypeInfo(TypeOf.Class, create:() => []), 'SvcDetail': TypeInfo(TypeOf.Class, create:() => SvcDetail()), 'List': TypeInfo(TypeOf.Class, create:() => []), 'List': TypeInfo(TypeOf.Class, create:() => []), 'KpiV2DetailResponse': TypeInfo(TypeOf.Class, create:() => KpiV2DetailResponse()), 'KpiV2DetailRequest': TypeInfo(TypeOf.Class, create:() => KpiV2DetailRequest()), });