import { ObjectBase } from '@tomei/general';
import { RentalHirerChangeRequestRepository } from './rental-hirer-change-request.repository';
import { LoginUser } from '@tomei/sso';
import { HirerChangeRequestTypeEnum } from '../../enum/rental-hirer-change-request-type';
import { HirerChangeRequestStatusEnum } from '../../enum/rental-hirer-change-request-status';
import { IRentalHirerChangeRequestAttr, IRentalHirerChangeRequestUpdate } from '../../interfaces';
import { Rental } from '../rental/rental';
import { HirerChangeRequestHirerRoleEnum } from '../../enum';
import { JointHirerRepository } from '../../components/joint-hirer/joint-hirer.repository';
import { HirerChangeRequestSignatureRepository } from '../hirer-change-request-signature/hirer-change-request-signature.repository';
import { HirerChangeRequestSignature } from '../hirer-change-request-signature/hirer-change-request-signature';
import { HirerChangeRequestNewHirer } from '../hirer-change-request-new-hirer/hirer-change-request-new-hirer';
import { HirerChangeRequestRemoveHirer } from '../hirer-change-request-remove-hirer/hirer-change-request-remove-hirer';
export declare class RentalHirerChangeRequest extends ObjectBase implements IRentalHirerChangeRequestAttr {
    ObjectId: string;
    ObjectName: string;
    ObjectType: string;
    TableName: string;
    RentalId: string;
    Type: HirerChangeRequestTypeEnum;
    Status: HirerChangeRequestStatusEnum;
    RequestedAt: Date;
    RequestedById: string;
    RequestingHirerId: string;
    RequestingHirerType: HirerChangeRequestHirerRoleEnum;
    CancelRemarks: string;
    UpdatedAt: Date;
    UpdatedById: string;
    Signatures: HirerChangeRequestSignature[];
    Rental: Rental | null;
    get RequestId(): string;
    set RequestId(value: string);
    protected static _Repository: RentalHirerChangeRequestRepository;
    protected static _HirerSignatureRepository: HirerChangeRequestSignatureRepository;
    protected static _JointHirerRepository: JointHirerRepository;
    protected constructor(hirerChangeRequestAttr?: IRentalHirerChangeRequestAttr);
    toJSON(): IRentalHirerChangeRequestAttr;
    static init(requestId?: string, dbTransaction?: any): Promise<RentalHirerChangeRequest>;
    private checkForDuplicate;
    getSignatures(dbTransaction: any): Promise<HirerChangeRequestSignature[]>;
    private checkIsAllSigned;
    private create;
    update(loginUser: LoginUser, dbTransaction: any, params: IRentalHirerChangeRequestUpdate): Promise<this>;
    generateSignatures(loginUser: LoginUser, dbTransaction?: any): Promise<void>;
    createAddRequest(newHirer: {
        FullName: string;
        IdNo: string;
        IdType: string;
        Email?: string;
        ContactNo: string;
        Relationship: string;
        Address: string;
        City: string;
        State: string;
        Postcode: string;
        Country: string;
    }, loginUser: LoginUser, dbTransaction?: any): Promise<{
        hirerChangeRequest: RentalHirerChangeRequest;
        NewHirer: HirerChangeRequestNewHirer;
    }>;
    createRemoveRequest(loginUser: LoginUser, dbTransaction: any, targetHirerId: string): Promise<{
        hirerChangeRequest: RentalHirerChangeRequest;
        RemoveHirer: HirerChangeRequestRemoveHirer;
    }>;
    static findAll(loginUser: LoginUser, dbTransaction: any, rentalId: string): Promise<RentalHirerChangeRequest[]>;
    getNewHirer(dbTransaction: any): Promise<HirerChangeRequestNewHirer>;
    getRemoveHirer(dbTransaction: any): Promise<HirerChangeRequestRemoveHirer>;
    sign(loginUser: LoginUser, dbTransaction: any, signatureId: string): Promise<HirerChangeRequestSignature>;
    complete(loginUser: LoginUser, dbTransaction: any, customerId?: string, customerType?: string): Promise<RentalHirerChangeRequest>;
    cancel(loginUser: LoginUser, dbTransaction: any, cancelRemarks: string): Promise<RentalHirerChangeRequest>;
}
