""" Options: Date: 2026-08-10 23:53:58 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: LaborSalesSummaryRequest.* #ExcludeTypes: #DefaultImports: datetime,decimal,marshmallow.fields:*,servicestack:*,typing:*,dataclasses:dataclass/field,dataclasses_json:dataclass_json/LetterCase/Undefined/config,enum:Enum/IntEnum #DataClass: #DataClassJson: """ import datetime import decimal from marshmallow.fields import * from servicestack import * from typing import * from dataclasses import dataclass, field from dataclasses_json import dataclass_json, LetterCase, Undefined, config from enum import Enum, IntEnum @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class DayView: date_iso: Optional[str] = None gross_sales: Decimal = decimal.Decimal(0) transaction_count: int = 0 labor_hours: Decimal = decimal.Decimal(0) costed_hours: Decimal = decimal.Decimal(0) labor_cost: Decimal = decimal.Decimal(0) worker_count: int = 0 labor_pct: Optional[Decimal] = None splh: Optional[Decimal] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class LocationView: location_id: Optional[str] = None location_name: Optional[str] = None gross_sales: Decimal = decimal.Decimal(0) transaction_count: int = 0 share_pct: Optional[Decimal] = None branch_id: Optional[str] = None branch_name: Optional[str] = None labor_hours: Optional[Decimal] = None costed_hours: Optional[Decimal] = None labor_cost: Optional[Decimal] = None labor_pct: Optional[Decimal] = None splh: Optional[Decimal] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class TotalsView: gross_sales: Decimal = decimal.Decimal(0) transaction_count: int = 0 labor_hours: Decimal = decimal.Decimal(0) costed_hours: Decimal = decimal.Decimal(0) labor_cost: Decimal = decimal.Decimal(0) labor_pct: Optional[Decimal] = None splh: Optional[Decimal] = None days_with_sales: int = 0 days_with_labor: int = 0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SummaryView: configured: bool = False connected: bool = False needs_reconnect: bool = False currency: Optional[str] = None days: List[DayView] = field(default_factory=list) locations: List[LocationView] = field(default_factory=list) totals: Optional[TotalsView] = None prior_totals: Optional[TotalsView] = None attribution_note: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class LaborSalesSummaryResponse: summary: Optional[SummaryView] = None from_date: Optional[str] = None to_date: Optional[str] = None response_status: Optional[ResponseStatus] = None # @Route("/v1/laborsales/summary", "GET,OPTIONS") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class LaborSalesSummaryRequest(IReturn[LaborSalesSummaryResponse]): from_date: Optional[str] = None to_date: Optional[str] = None