import { LoginUserBase, ObjectBase } from '@tomei/general';
import Account from '../account/account';
import JournalEntry from '../journal-entry/journal-entry';
import FinanceCustomerBase from '../customer/customer';
import Document from '../document/document';
import { IAccountSystem } from '../interfaces';
import { PaymentStatus } from '../enum';
import Payment from '../payment/payment';
import PaymentMethod from '../payment-method/payment-method';
import { LoginUser } from '@tomei/sso';
import { Tax } from '../tax/tax';
import { CollectPaymentType } from '../enum/collect-payment-type';
import FinanceCustomerModel from '../models/customer.entity';
import { Tag } from '../tag/tag';
import { TagGroup } from '../tag-group/tag-group';
export default class FinanceCompany extends ObjectBase {
    private _CompanyId;
    private _CompSystemCode;
    private _CompSystemRefId;
    private _AccSystemCode;
    private _AccSystemRefId;
    private _PostedToAccSystemYN;
    private _PostedById;
    private _PostedDateTime;
    private readonly _ObjectType;
    private static readonly _htFinanceCompanyIds;
    private static readonly _htFinanceCompanies;
    private static readonly _financeCompanyRepository;
    private static readonly _PaymentRepository;
    private static readonly _PaymentItemRepository;
    private static readonly _PaymentPaidWithRepository;
    private static readonly _PaymentMethodRepository;
    private static readonly _PaymentMethodTypeRepository;
    private static readonly _DocumentRepository;
    private static readonly _DocumentItemRepository;
    private static readonly _FinanceCustomerRepository;
    private static readonly _LedgerTransactionRepository;
    private static readonly _AccountRepository;
    private static readonly _TaxRepository;
    private _AccountingSystem;
    private _DbTransaction;
    private _PaymentMethods;
    private _Taxes;
    get ObjectType(): string;
    get CompSystemCode(): string;
    private set CompSystemCode(value);
    get CompSystemRefId(): string;
    set CompSystemRefId(id: string);
    get AccSystemCode(): string;
    get AccSystemRefId(): string;
    set AccSystemRefId(id: string);
    get PostedToAccSystemYN(): string;
    set PostedToAccSystemYN(value: string);
    get PostedById(): string;
    set PostedById(id: string);
    get PostedDateTime(): any;
    set PostedDateTime(date: any);
    private set AccSystemCode(value);
    get CompanyId(): string;
    get ObjectId(): string;
    private set ObjectId(value);
    get ObjectName(): string;
    get TableName(): string;
    get AccountingSystem(): IAccountSystem;
    set AccountingSystem(system: IAccountSystem);
    constructor(compSystemCode: string, compSystemRefId: string, accSystemCode: string);
    static getFinanceCompanyId(compSystemCode: string, compSystemRefId: string, accSystemCode: string, dbTransaction?: any): Promise<string>;
    static getFinanceCompany(companyId: string, dbTransaction: any): Promise<FinanceCompany>;
    static createFinanceCompany(dbTransaction: any, loginUser: LoginUserBase, companyId: string, compSystemCode: string, compSystemRefId: string, accSystemCode: string, accSystemRefId?: string, postedToAccSystemYN?: string): Promise<any>;
    static findAccount(loginUser: LoginUserBase, dbTransaction: any, accountNo: string): Promise<Account>;
    createCustomer<T extends FinanceCustomerBase>(dbTransaction: any, custSystemCode: string, custSystemRefId: string, customer: T, loginUser: LoginUser): Promise<T>;
    postJournal(dbTransaction: any, journalEntry: JournalEntry, loginUser: LoginUserBase): Promise<void>;
    createAccount(dbTransaction: any, account: Account, loginUser: LoginUserBase): Promise<Account>;
    issueInvoice<C extends FinanceCustomerBase>(dbTransaction: any, invoice: Document, loginUser?: LoginUser, customer?: C, dtAccountNo?: string, tags?: Tag[], discount?: {
        type: 'percentage' | 'fixed';
        value: number;
    }): Promise<Document>;
    static findCustomer(custSystemRefId: string, dbTransaction?: any): Promise<FinanceCustomerModel>;
    issueDebitNote(dbTransaction: any, loginUser: LoginUserBase, invoice: Document, customer: FinanceCustomerBase, dtAccountNo?: string): Promise<Document>;
    issueCreditNote(dbTransaction: any, loginUser: LoginUserBase, creditNote: Document, customer: FinanceCustomerBase, ctAccountNo?: string): Promise<Document>;
    private getAccSystemCreditNoteItems;
    collectPayment(dbTransaction: any, loginUser: LoginUserBase, payment: Payment, collectPaymentType?: CollectPaymentType): Promise<Payment>;
    makePayment(dbTransaction: any, loginUser: LoginUserBase, payment: Payment, customer: FinanceCustomerBase, dtAccountNo?: string): Promise<Payment>;
    getPaymentMethods(transaction?: any): Promise<PaymentMethod[]>;
    getTaxCodes(dbTransaction: any): Promise<Tax[]>;
    LoadPaymentMethods(companyId: string, paymentMethods: any, transaction?: any): Promise<void>;
    LoadTaxCodes(companyId: string, companyTaxes: any, transaction?: any): Promise<void>;
    collectPaymentForMultipleCustomers(dbTransaction: any, loginUser: LoginUserBase, payment: Payment, creditTransaction: {
        AccountNo: string;
        Currency: string;
        Amount: number;
    }[], receiptNo?: string, collectPaymentType?: CollectPaymentType): Promise<Payment>;
    confirmPayment(dbTransaction: any, loginUser: LoginUserBase, customer: FinanceCustomerBase, payment: Payment, status: PaymentStatus.CONFIRMED | PaymentStatus.REJECTED | PaymentStatus.FAILED, remarks: string, ctAccountNo?: string, receipt?: {
        template?: {
            templateType: string;
            customData: object;
        };
        receiptNo: string;
        items?: {
            paymentItemId: string;
            nameBM?: string;
            name?: string;
            description?: string;
        }[];
    }): Promise<void>;
    createTagGroup(tagGroupName: string, loginUser: LoginUser, dbTransaction: any): Promise<TagGroup>;
    createTag(tagName: string, tagGroupName: string, loginUser: LoginUser, dbTransaction: any): Promise<Tag>;
}
//# sourceMappingURL=finance-company.d.ts.map