import { IRentalAttr } from '../../interfaces/rental-attr.interface';
import { RentalStatusEnum } from '../../enum/rental-status.enum';
import { RentalRepository } from './rental.repository';
import { ObjectBase } from '@tomei/general';
import { LoginUser } from '@tomei/sso';
import { RentalPrice } from '../rental-price/rental-price';
import { IRentalFindAllSearchAttr } from '../../interfaces/rental-find-all-search-attr.interface';
import { RentalAccountTypeEnum } from '../../enum/account-type.enum';
import { JointHirer } from '../joint-hirer/joint-hirer';
import { AgreementRepository } from '../agreement/agreement.repository';
import { JointHirerRepository } from '../joint-hirer/joint-hirer.repository';
import { AgreementSignatureRepository } from '../agreement-signature/agreement-signature.repository';
import { AgreementHistoryRepository } from '../agreement-history/agreement-history.repository';
import { Document, IAccountSystem } from '@tomei/finance';
import { AgreementSignatureVerificationMethodEnum } from '../../enum/agreement-signature-verification-method.enum';
export declare class Rental extends ObjectBase {
    ObjectId: string;
    ObjectName: string;
    ObjectType: string;
    TableName: string;
    CustomerId: string;
    CustomerType: string;
    ItemId: string;
    ItemType: string;
    PriceId: string;
    StartDateTime: Date;
    EndDateTime: Date;
    CancelRemarks: string;
    TerminateRemarks: string;
    AgreementNo: string;
    AccountType: RentalAccountTypeEnum;
    JointHirers: JointHirer[];
    Invoices: Document[];
    Item: any;
    protected _Status: RentalStatusEnum | string;
    protected _EscheatmentYN: string;
    protected _CreatedById: string;
    protected _CreatedAt: Date;
    protected _UpdatedById: string;
    protected _UpdatedAt: Date;
    protected static _Repo: RentalRepository;
    protected static _AgreementRepo: AgreementRepository;
    protected static _JointHirerRepo: JointHirerRepository;
    protected static _AgreementSignatureRepo: AgreementSignatureRepository;
    protected static _AgreementHistoryRepo: AgreementHistoryRepository;
    get RentalId(): string;
    set RentalId(value: string);
    get Status(): RentalStatusEnum | string;
    get EscheatmentYN(): string;
    get CreatedById(): string;
    get CreatedAt(): Date;
    get UpdatedById(): string;
    get UpdatedAt(): Date;
    private setTerminated;
    protected constructor(rentalAttr?: IRentalAttr);
    static init(dbTransaction?: any, rentalId?: string): Promise<Rental>;
    create(rentalPrice: RentalPrice, loginUser: LoginUser, jointHirers?: JointHirer[], dbTransaction?: any): Promise<any>;
    static isItemAvailable(itemId: string, itemType: string, startDateTime: Date, endDateTime: Date, dbTransaction?: any): Promise<boolean>;
    static findAll(loginUser: LoginUser, dbTransaction: any, page?: number, row?: number, search?: IRentalFindAllSearchAttr): Promise<any>;
    static checkActiveByItemId(loginUser: LoginUser, itemId: string, itemType: string, dbTransaction?: any): Promise<boolean>;
    setStartDateTime(startDateTime: Date): void;
    periodEndProcess(loginUser: LoginUser, dbTransaction: any, stockInventory: any): Promise<this>;
    getCustomerActiveRentals(loginUser: LoginUser, dbTransaction: any, CustomerId: string): Promise<IRentalAttr[]>;
    getJointHirers(dbTransaction: any): Promise<JointHirer[]>;
    getCustomerIds(loginUser: LoginUser, dbTransaction: any): Promise<string[]>;
    signAgreement(loginUser: LoginUser, party: string, PartyId: string, PartyType: string, dbTransaction: any, statusAfterSign?: RentalStatusEnum | string, method?: AgreementSignatureVerificationMethodEnum, justification?: string): Promise<void>;
    generateAgreement(loginUser: LoginUser, dbTransaction: any, MediaId: string): Promise<void>;
    toJSON(): IRentalAttr;
    getInvoices(loginUser: LoginUser, dbTransaction: any, accountingSystem?: IAccountSystem): Promise<Document[]>;
    getItem(dbTransaction: any): Promise<any>;
    cancel(loginUser: LoginUser, dbTransaction: any, remarks: string): Promise<Rental>;
    update(loginUser: LoginUser, dbTransaction: any, updates: Partial<IRentalAttr>): Promise<Rental>;
}
