/* Options:
Date: 2025-04-08 09:37:37
Version: 8.22
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://data.regent-college.edu

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


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

export class AddRegistrationRequest
{
    public section_uuid: string;
    public amount: number;
    public is_audit: boolean;
    public is_provisional: boolean;

    public constructor(init?: Partial<AddRegistrationRequest>) { (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); }
}

export class InvoiceItemAdminResponse
{
    public responseStatus: ResponseStatus;
    public invoiceItemUUID: string;
    public rate_id: number;
    public rate_code: string;
    public rate_description: string;
    public is_required: boolean;
    public is_optional: boolean;
    public charge?: number;
    public credit?: number;

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

export class InvoiceItemResponse
{
    public responseStatus: ResponseStatus;
    public invoiceItemUUID: string;
    public rate_id: number;
    public rate_code: string;
    public rate_description: string;
    public charge?: number;
    public credit?: number;

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

export class SectionResponse
{
    public responseStatus: ResponseStatus;
    public secUUID: string;
    public course_name: string;
    public section_code: string;
    public course_title: string;
    public course_short_title: string;
    public course_description: string;
    public crosslist_description: string;
    public crosslist_course_name: string;
    public location_long_name: string;
    public room: string;
    public instructors: InstructorResponse[];
    public required_documents: DocumentResponse[];
    public start_date?: string;
    public end_date?: string;
    public first_meeting_date?: string;
    public last_meeting_date?: string;
    public meeting_days: string;
    public start_times: string[];
    public end_times: string[];
    public is_online_only: boolean;
    public is_weekend: boolean;
    public is_weekday: boolean;
    public is_evening: boolean;
    public is_waitlist: boolean;
    public has_special_requirements: boolean;
    public special_requirements: string;
    public is_unlisted: boolean;
    public credit_amounts: number[];
    public audit_amounts: number[];
    public audits_short_name: string;
    public audits_long_name: string;
    public credits_short_name: string;
    public credits_long_name: string;
    public distance_ed_materials: string;
    public prerequisites: string;
    public corequisites: string;
    public capacity?: number;
    public flat_fee_amount?: number;
    public additional_fee_amount?: number;
    public registered_students: number;
    public three_credit_plus: number;
    public two_credit: number;
    public one_credit: number;
    public three_audit_plus: number;
    public two_audit: number;
    public one_audit: number;
    public crosslist_registered_students: number;
    public grades_received: number;
    public crosslist_grades_received: number;
    public registration_start_date?: string;
    public registration_end_date?: string;
    public add_start_date?: string;
    public add_end_date?: string;
    public drop_start_date?: string;
    public drop_end_date?: string;
    public grading_end_date?: string;
    public term: string;
    public reporting_term: string;
    public reporting_year: number;
    public current_status: string;
    public added_by: string;
    public added_date?: string;
    public changed_by: string;
    public changed_date?: string;
    public timestamp: string;

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

export class StudentSectionResponse extends SectionResponse
{
    public studentSectionUUID: string;
    public registered_amount: number;
    public is_provisional: boolean;
    public is_audit: boolean;

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

export class StudentSectionInvoiceItemResponse extends InvoiceItemResponse
{
    public studentSection: StudentSectionResponse;

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

export class BenefitResponse
{
    public rate_id: number;
    public rate_code: string;
    public rate_description: string;
    public percentage_rate: number;
    public is_optional: boolean;
    public is_required: boolean;

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

export class InvoiceResponse
{
    public responseStatus: ResponseStatus;
    public invoiceUUID: string;
    public regent_id: number;
    public uuid: string;
    public reporting_term: string;
    public total_charges?: number;
    public total_credits?: number;
    public current_status: string;
    public timestamp: string;

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

export class AddRegistrationsResponse extends InvoiceResponse
{
    public transaction_uuid: string;
    public studentSectionInvoiceItems: StudentSectionInvoiceItemResponse[];
    public sectionRates: { [index: string]: SectionRateWithAmountResponse[]; };
    public creditTuitionRate: InvoiceItemAdminResponse;
    public auditTuitionRate: InvoiceItemAdminResponse;
    public studentAge?: number;
    public studentAgeAtEarliestSectionStartDate?: number;
    public isRegentGrad: boolean;
    public isOnlyUnclassified: boolean;
    public canRegisterForAuditInTerm: boolean;
    public canRegisterForCreditInTerm: boolean;
    public messages: string[];
    public currentTermAuditHours: number;
    public currentTermCreditHours: number;
    public totalCreditHours: number;
    public availableInvoiceItems: InvoiceItemAdminResponse[];
    public availableBenefits: BenefitResponse[];

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

// @Route("/Registration/{uuid}/Add/{reporting_term}", "POST")
export class AddRegistrationsRequest implements IReturn<AddRegistrationsResponse>
{
    public uuid: string;
    public transaction_uuid: string;
    public reporting_term: string;
    public sections: AddRegistrationRequest[];
    public authorizing_uuid: string;

    public constructor(init?: Partial<AddRegistrationsRequest>) { (Object as any).assign(this, init); }
    public getTypeName() { return 'AddRegistrationsRequest'; }
    public getMethod() { return 'POST'; }
    public createResponse() { return new AddRegistrationsResponse(); }
}