/* Options:
Date: 2025-06-01 13:50:49
Version: 8.40
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://active-ewebservice.biz/aeservices30/api

//GlobalNamespace: 
//AddServiceStackTypes: True
//AddResponseStatus: False
//AddImplicitVersion: 
//AddDescriptionAsComments: True
IncludeTypes: AnalyticChartsRequest.*
//ExcludeTypes: 
//DefaultImports: package:servicestack/servicestack.dart
*/

import 'package:servicestack/servicestack.dart';

// @DataContract
class BaseRequest implements IConvertible
{
    /**
    * This is your AIM API Key provided by Tri-Tech
    */
    // @DataMember
    // @ApiMember(DataType="string", Description="This is your AIM API Key provided by Tri-Tech", IsRequired=true, Name="ApiKey", ParameterType="header")
    String? ApiKey;

    // @DataMember
    // @ApiMember(DataType="string", Name="OAuthToken", ParameterType="header")
    String? OAuthToken;

    BaseRequest({this.ApiKey,this.OAuthToken});
    BaseRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

// @DataContract
class BaseSecureRequest extends BaseRequest implements IConvertible
{
    /**
    * 
    */
    // @DataMember
    // @ApiMember(DataType="string", Description="", Name="Token", ParameterType="Header")
    String? Token;

    /**
    * 
    */
    // @DataMember
    // @ApiMember(DataType="string", Description="", Name="DeviceId", ParameterType="Header")
    String? DeviceId;

    /**
    * 
    */
    // @DataMember
    // @ApiMember(DataType="string", Description="", IsRequired=true, Name="AppId", ParameterType="Header")
    String? AppId;

    BaseSecureRequest({this.Token,this.DeviceId,this.AppId});
    BaseSecureRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Token = json['Token'];
        DeviceId = json['DeviceId'];
        AppId = json['AppId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Token': Token,
        'DeviceId': DeviceId,
        'AppId': AppId
    });

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

// @DataContract
class AnalyticChartsItem implements IConvertible
{
    // @DataMember
    String? Description;

    // @DataMember
    int? Color;

    // @DataMember
    double? Total;

    // @DataMember
    double? Percentage;

    AnalyticChartsItem({this.Description,this.Color,this.Total,this.Percentage});
    AnalyticChartsItem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Description = json['Description'];
        Color = json['Color'];
        Total = JsonConverters.toDouble(json['Total']);
        Percentage = JsonConverters.toDouble(json['Percentage']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Description': Description,
        'Color': Color,
        'Total': Total,
        'Percentage': Percentage
    };

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

// @DataContract
class BaseResponse implements IConvertible
{
    /**
    * 
    */
    // @DataMember
    // @ApiMember(DataType="BaseResponseResult", Description="", Name="Status", ParameterType="body")
    BaseResponseResult? Status;

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

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

    Map<String, dynamic> toJson() => {
        'Status': JsonConverters.toJson(Status,'BaseResponseResult',context!)
    };

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

// @DataContract
class AnalyticChartsResponse extends BaseResponse implements IConvertible
{
    // @DataMember
    List<AnalyticChartsItem>? ReportItems;

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

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ReportItems = JsonConverters.fromJson(json['ReportItems'],'List<AnalyticChartsItem>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ReportItems': JsonConverters.toJson(ReportItems,'List<AnalyticChartsItem>',context!)
    });

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

/**
* Analytic ChartsRequires active-e Mobile Employee Service
*/
// @Route("/AnalyticCharts", "GET")
// @Route("/DashboardReport", "GET")
// @DataContract
class AnalyticChartsRequest extends BaseSecureRequest implements IReturn<AnalyticChartsResponse>, IConvertible, IGet
{
    // @DataMember
    DateTime? DateFrom;

    // @DataMember
    DateTime? DateTo;

    // @DataMember
    String? LocationCode;

    // @DataMember
    int? ReportDataId;

    // @DataMember
    int? ReportPrefId;

    AnalyticChartsRequest({this.DateFrom,this.DateTo,this.LocationCode,this.ReportDataId,this.ReportPrefId});
    AnalyticChartsRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DateFrom = JsonConverters.fromJson(json['DateFrom'],'DateTime',context!);
        DateTo = JsonConverters.fromJson(json['DateTo'],'DateTime',context!);
        LocationCode = json['LocationCode'];
        ReportDataId = json['ReportDataId'];
        ReportPrefId = json['ReportPrefId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DateFrom': JsonConverters.toJson(DateFrom,'DateTime',context!),
        'DateTo': JsonConverters.toJson(DateTo,'DateTime',context!),
        'LocationCode': LocationCode,
        'ReportDataId': ReportDataId,
        'ReportPrefId': ReportPrefId
    });

    createResponse() => AnalyticChartsResponse();
    getResponseTypeName() => "AnalyticChartsResponse";
    getTypeName() => "AnalyticChartsRequest";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'active_ewebservice.biz', types: <String, TypeInfo> {
    'BaseRequest': TypeInfo(TypeOf.Class, create:() => BaseRequest()),
    'BaseSecureRequest': TypeInfo(TypeOf.Class, create:() => BaseSecureRequest()),
    'AnalyticChartsItem': TypeInfo(TypeOf.Class, create:() => AnalyticChartsItem()),
    'BaseResponse': TypeInfo(TypeOf.Class, create:() => BaseResponse()),
    'BaseResponseResult': TypeInfo(TypeOf.Class, create:() => BaseResponseResult()),
    'AnalyticChartsResponse': TypeInfo(TypeOf.Class, create:() => AnalyticChartsResponse()),
    'List<AnalyticChartsItem>': TypeInfo(TypeOf.Class, create:() => <AnalyticChartsItem>[]),
    'AnalyticChartsRequest': TypeInfo(TypeOf.Class, create:() => AnalyticChartsRequest()),
});