/* Options:
Date: 2025-04-07 15:03:48
Version: 8.52
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://taxfiling.pwc.de

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

import 'package:servicestack/servicestack.dart';
import 'dart:typed_data';

abstract class IPaginate
{
    int? skip;
    int? take;
}

/**
* The number of query results to skip.
*/
// @Api(Description="The number of query results to skip.")
abstract class PaginationBase implements IPaginate
{
    /**
    * The number of query results to skip.
    */
    // @ApiMember(Description="The number of query results to skip.")
    int? skip;

    /**
    * The number of query results to include.
    */
    // @ApiMember(Description="The number of query results to include.")
    int? take;

    PaginationBase({this.skip,this.take});
    PaginationBase.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

/**
* Specifies a base service to revoke specified orders.
*/
// @Api(Description="Specifies a base service to revoke specified orders.")
abstract class BatchRevokeOrdersBase extends PaginationBase implements IDelete
{
    /**
    * The collection of specified unique identifiers of the orders to delete.
    */
    // @ApiMember(Description="The collection of specified unique identifiers of the orders to delete.")
    List<int>? ids = [];

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

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

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

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

enum HttpStatusCode
{
    Continue,
    SwitchingProtocols,
    Processing,
    EarlyHints,
    OK,
    Created,
    Accepted,
    NonAuthoritativeInformation,
    NoContent,
    ResetContent,
    PartialContent,
    MultiStatus,
    AlreadyReported,
    IMUsed,
    MultipleChoices,
    Ambiguous,
    MovedPermanently,
    Moved,
    Found,
    Redirect,
    SeeOther,
    RedirectMethod,
    NotModified,
    UseProxy,
    Unused,
    TemporaryRedirect,
    RedirectKeepVerb,
    PermanentRedirect,
    BadRequest,
    Unauthorized,
    PaymentRequired,
    Forbidden,
    NotFound,
    MethodNotAllowed,
    NotAcceptable,
    ProxyAuthenticationRequired,
    RequestTimeout,
    Conflict,
    Gone,
    LengthRequired,
    PreconditionFailed,
    RequestEntityTooLarge,
    RequestUriTooLong,
    UnsupportedMediaType,
    RequestedRangeNotSatisfiable,
    ExpectationFailed,
    MisdirectedRequest,
    UnprocessableEntity,
    UnprocessableContent,
    Locked,
    FailedDependency,
    UpgradeRequired,
    PreconditionRequired,
    TooManyRequests,
    RequestHeaderFieldsTooLarge,
    UnavailableForLegalReasons,
    InternalServerError,
    NotImplemented,
    BadGateway,
    ServiceUnavailable,
    GatewayTimeout,
    HttpVersionNotSupported,
    VariantAlsoNegotiates,
    InsufficientStorage,
    LoopDetected,
    NotExtended,
    NetworkAuthenticationRequired,
}

/**
* Represents a commission to consume services.
*/
// @Api(Description="Represents a commission to consume services.")
class Order implements IHasName, IConvertible
{
    /**
    * The unique identifier of the order.
    */
    // @ApiMember(Description="The unique identifier of the order.", IsRequired=true)
    int? id;

    /**
    * The unique identifier of the product, for which the order is made.
    */
    // @ApiMember(Description="The unique identifier of the product, for which the order is made.", IsRequired=true)
    int? productId;

    /**
    * The unique identifier of the user account, who placed the order.
    */
    // @ApiMember(Description="The unique identifier of the user account, who placed the order.", IsRequired=true)
    int? accountId;

    /**
    * A name to identify the order.
    */
    // @ApiMember(Description="A name to identify the order.", IsRequired=true)
    // @Validate(Validator="NotEmpty")
    String? name;

    /**
    * The name of the service, for which the order was made.
    */
    // @ApiMember(Description="The name of the service, for which the order was made.")
    String? serviceName;

    /**
    * The time stamp at which the order was initiated.
    */
    // @ApiMember(Description="The time stamp at which the order was initiated.")
    DateTime? requestTimestamp;

    /**
    * The time stamp at which the order was completed.
    */
    // @ApiMember(Description="The time stamp at which the order was completed.")
    DateTime? responseTimestamp;

    /**
    * The URI from which the order was initiated.
    */
    // @ApiMember(Description="The URI from which the order was initiated.")
    String? requestUri;

    /**
    * The HTTP method of the order request.
    */
    // @ApiMember(Description="The HTTP method of the order request.")
    String? requestHttpMethod;

    /**
    * The duration of the order request.
    */
    // @ApiMember(Description="The duration of the order request.")
    Duration? requestDuration;

    /**
    * The HTTP status code of the order request.
    */
    // @ApiMember(Description="The HTTP status code of the order request.")
    HttpStatusCode? responseStatusCode;

    /**
    * The IP address of client, who placed the order.
    */
    // @ApiMember(Description="The IP address of client, who placed the order.")
    String? clientIPAddress;

    /**
    * The unit of measurement for the order.
    */
    // @ApiMember(Description="The unit of measurement for the order.")
    String? unitOfMeasurement;

    /**
    * The type of process, for which the order is charged.
    */
    // @ApiMember(Description="The type of process, for which the order is charged.")
    String? processType;

    /**
    * The type of data, for which the order is charged.
    */
    // @ApiMember(Description="The type of data, for which the order is charged.")
    String? dataType;

    /**
    * The name of the data, for which the order is charged.
    */
    // @ApiMember(Description="The name of the data, for which the order is charged.")
    String? dataName;

    /**
    * The date of creation of the order.
    */
    // @ApiMember(Description="The date of creation of the order.")
    DateTime? creationDate;

    /**
    * The final date to retain the order in the records. After this date, the order is expunged from the records.
    */
    // @ApiMember(Description="The final date to retain the order in the records. After this date, the order is expunged from the records.")
    DateTime? expiryDate;

    /**
    * Indicates whether the order is simulated for test purposes. True if the order is simulated for test purposes; otherwise it is a false order for production purposes.
    */
    // @ApiMember(Description="Indicates whether the order is simulated for test purposes. True if the order is simulated for test purposes; otherwise it is a false order for production purposes.")
    bool? isTest;

    Order({this.id,this.productId,this.accountId,this.name,this.serviceName,this.requestTimestamp,this.responseTimestamp,this.requestUri,this.requestHttpMethod,this.requestDuration,this.responseStatusCode,this.clientIPAddress,this.unitOfMeasurement,this.processType,this.dataType,this.dataName,this.creationDate,this.expiryDate,this.isTest});
    Order.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        id = json['id'];
        productId = json['productId'];
        accountId = json['accountId'];
        name = json['name'];
        serviceName = json['serviceName'];
        requestTimestamp = JsonConverters.fromJson(json['requestTimestamp'],'DateTime',context!);
        responseTimestamp = JsonConverters.fromJson(json['responseTimestamp'],'DateTime',context!);
        requestUri = json['requestUri'];
        requestHttpMethod = json['requestHttpMethod'];
        requestDuration = JsonConverters.fromJson(json['requestDuration'],'Duration',context!);
        responseStatusCode = JsonConverters.fromJson(json['responseStatusCode'],'HttpStatusCode',context!);
        clientIPAddress = json['clientIPAddress'];
        unitOfMeasurement = json['unitOfMeasurement'];
        processType = json['processType'];
        dataType = json['dataType'];
        dataName = json['dataName'];
        creationDate = JsonConverters.fromJson(json['creationDate'],'DateTime',context!);
        expiryDate = JsonConverters.fromJson(json['expiryDate'],'DateTime',context!);
        isTest = json['isTest'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'id': id,
        'productId': productId,
        'accountId': accountId,
        'name': name,
        'serviceName': serviceName,
        'requestTimestamp': JsonConverters.toJson(requestTimestamp,'DateTime',context!),
        'responseTimestamp': JsonConverters.toJson(responseTimestamp,'DateTime',context!),
        'requestUri': requestUri,
        'requestHttpMethod': requestHttpMethod,
        'requestDuration': JsonConverters.toJson(requestDuration,'Duration',context!),
        'responseStatusCode': JsonConverters.toJson(responseStatusCode,'HttpStatusCode',context!),
        'clientIPAddress': clientIPAddress,
        'unitOfMeasurement': unitOfMeasurement,
        'processType': processType,
        'dataType': dataType,
        'dataName': dataName,
        'creationDate': JsonConverters.toJson(creationDate,'DateTime',context!),
        'expiryDate': JsonConverters.toJson(expiryDate,'DateTime',context!),
        'isTest': isTest
    };

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

/**
*  Specifies that a data type should have a 'Name' property.
*/
abstract class IHasName
{
    /**
    * The 'Name' property.
    */
    String? name;
}

/**
* Represents a query response that contains a structured error information and encapsulates customers.
*/
// @Api(Description="Represents a query response that contains a structured error information and encapsulates customers.")
class OrderQueryResponse extends QueryResponse<Order> implements IConvertible
{
    OrderQueryResponse();
    OrderQueryResponse.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "OrderQueryResponse";
    TypeContext? context = _ctx;
}

/**
* Represents a service request to revoke specified orders in an asynchronous operation.
*/
// @Route("/async/orders/batch", "DELETE")
// @Api(Description="Represents a service request to revoke specified orders in an asynchronous operation.")
class BatchRevokeOrdersAsync extends BatchRevokeOrdersBase implements IReturn<OrderQueryResponse>, IConvertible, IDelete
{
    BatchRevokeOrdersAsync();
    BatchRevokeOrdersAsync.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    createResponse() => OrderQueryResponse();
    getResponseTypeName() => "OrderQueryResponse";
    getTypeName() => "BatchRevokeOrdersAsync";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'taxfiling.pwc.de', types: <String, TypeInfo> {
    'IPaginate': TypeInfo(TypeOf.Interface),
    'PaginationBase': TypeInfo(TypeOf.AbstractClass),
    'BatchRevokeOrdersBase': TypeInfo(TypeOf.AbstractClass),
    'HttpStatusCode': TypeInfo(TypeOf.Enum, enumValues:HttpStatusCode.values),
    'Order': TypeInfo(TypeOf.Class, create:() => Order()),
    'IHasName': TypeInfo(TypeOf.Interface),
    'OrderQueryResponse': TypeInfo(TypeOf.Class, create:() => OrderQueryResponse()),
    'BatchRevokeOrdersAsync': TypeInfo(TypeOf.Class, create:() => BatchRevokeOrdersAsync()),
});