/* Options:
Date: 2025-04-07 23:40:12
Version: 5.140
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://api.clubmanagercentral.com

//GlobalNamespace: 
//MakePropertiesOptional: False
//AddServiceStackTypes: True
//AddResponseStatus: False
//AddImplicitVersion: 
//AddDescriptionAsComments: True
IncludeTypes: ViewSalesLossReasons.*
//ExcludeTypes: 
//DefaultImports: 
*/


export interface IReturn<T>
{
    createResponse(): T;
}

// @DataContract
export class QueryBase
{
    // @DataMember(Order=1)
    public Skip?: number;

    // @DataMember(Order=2)
    public Take?: number;

    // @DataMember(Order=3)
    public OrderBy: string;

    // @DataMember(Order=4)
    public OrderByDesc: string;

    // @DataMember(Order=5)
    public Include: string;

    // @DataMember(Order=6)
    public Fields: string;

    // @DataMember(Order=7)
    public Meta: { [index: string]: string; };

    public constructor(init?: Partial<QueryBase>) { (Object as any).assign(this, init); }
}

export class QueryDb<T> extends QueryBase
{

    public constructor(init?: Partial<QueryDb<T>>) { super(init); (Object as any).assign(this, init); }
}

export class LossReasonInstance
{
    public LossReasonId: number;
    public Reason: string;
    public Deleted: boolean;
    public Demo: boolean;
    public Selectable: boolean;

    public constructor(init?: Partial<LossReasonInstance>) { (Object as any).assign(this, init); }
}

export class SalesLossReasonsInstance
{
    public LossReason: LossReasonInstance;
    // @References("typeof(ClubManager.Api.Services.Query.LossReasonInstance)")
    public LossReasonId: number;

    public Reason: string;
    public Selectable: boolean;
    public AppliedCount?: number;

    public constructor(init?: Partial<SalesLossReasonsInstance>) { (Object as any).assign(this, init); }
}

// @DataContract
export class ResponseError
{
    // @DataMember(Order=1)
    public ErrorCode: string;

    // @DataMember(Order=2)
    public FieldName: string;

    // @DataMember(Order=3)
    public Message: string;

    // @DataMember(Order=4)
    public Meta: { [index: string]: string; };

    public constructor(init?: Partial<ResponseError>) { (Object as any).assign(this, init); }
}

// @DataContract
export class ResponseStatus
{
    // @DataMember(Order=1)
    public ErrorCode: string;

    // @DataMember(Order=2)
    public Message: string;

    // @DataMember(Order=3)
    public StackTrace: string;

    // @DataMember(Order=4)
    public Errors: ResponseError[];

    // @DataMember(Order=5)
    public Meta: { [index: string]: string; };

    public constructor(init?: Partial<ResponseStatus>) { (Object as any).assign(this, init); }
}

// @DataContract
export class QueryResponse<T>
{
    // @DataMember(Order=1)
    public Offset: number;

    // @DataMember(Order=2)
    public Total: number;

    // @DataMember(Order=3)
    public Results: T[];

    // @DataMember(Order=4)
    public Meta: { [index: string]: string; };

    // @DataMember(Order=5)
    public ResponseStatus: ResponseStatus;

    public constructor(init?: Partial<QueryResponse<T>>) { (Object as any).assign(this, init); }
}

// @Route("/api/Query/SalesLossReasons")
// @AutoQueryViewer(Description="", IconUrl="octicon:database", Title="SalesLossReasons")
export class ViewSalesLossReasons extends QueryDb<SalesLossReasonsInstance> implements IReturn<QueryResponse<SalesLossReasonsInstance>>
{

    public constructor(init?: Partial<ViewSalesLossReasons>) { super(init); (Object as any).assign(this, init); }
    public getTypeName() { return 'ViewSalesLossReasons'; }
    public getMethod() { return 'GET'; }
    public createResponse() { return new QueryResponse<SalesLossReasonsInstance>(); }
}