import { IAddress, IRepositoryBase, IPerson, LoginUserBase } from '@tomei/general';
import FinanceCustomerModel from '../models/customer.entity';
import { AccountSystemEntity } from '../account-system-entity/account-system-entity';
import { FinanceCustomerRepository } from './finance-customer.repository';
import Account from '../account/account';
export default abstract class FinanceCustomerBase extends AccountSystemEntity implements IPerson {
    CustomerId: string;
    CustSystemCode: string;
    CustSystemRefId: string;
    AccSystemRefId: string;
    PostedToAccSystemYN: string;
    PostedById: string;
    protected abstract ParentARAccountNo: string;
    protected abstract ParentAPAccountNo: string;
    protected abstract ARAccountNo: string;
    protected abstract APAccountNo: string;
    protected abstract _ObjectType: string;
    abstract FullName: string;
    abstract IDNo: string;
    abstract IDType: string;
    abstract ContactNo: string;
    abstract Email: string;
    abstract DefaultAddress: IAddress;
    private _AccountReceivable;
    private _AccountPayable;
    protected _DbTransaction: any;
    private static _AccountRepository;
    private static _LedgerTransactionRepository;
    getDetails(): Promise<{
        FullName: string;
        IDNo: string;
        IDType: string;
        Email: string;
        ContactNo: string;
    }>;
    protected static _FinanceCustomerRepository: FinanceCustomerRepository;
    RepositoryBase: IRepositoryBase<any>;
    constructor(custSystemRefId?: string, custSystemCode?: string, sFinanceCompanyId?: string);
    TaxIdentificationNo: string;
    static initCustomer<C extends FinanceCustomerBase>(this: new () => C, custSystemRefId: string, custSystemCode: string, sFinanceCompanyId: string, dbTransaction?: any): Promise<C>;
    getAccountReceivable(dbTransaction?: any): Promise<Account>;
    getAccountPayable(dbTransaction?: any): Promise<Account>;
    abstract getBillingAddress(params: any): Promise<IAddress>;
    init(person: LoginUserBase): void;
    save(accSystemRefId: string, custSystemCode: string, custSystemRefId: string, dbTransaction?: any): Promise<FinanceCustomerModel>;
    update(accSystemRefId?: string, dbTransaction?: any): Promise<this>;
    static isFinanceCustomerExist(custSystemRefId: string, custSystemCode: string, sFinanceCompanyId: string, dbTransaction?: any): Promise<boolean>;
    getOutstandingBalance(dbTransaction: any): Promise<number>;
}
//# sourceMappingURL=customer.d.ts.map