// import { Knex } from 'knex'; // import { Service, Inject } from 'typedi'; // import LedgerStorageService from '@/services/Accounting/LedgerStorageService'; // import HasTenancyService from '@/services/Tenancy/TenancyService'; // import { VendorGLEntries } from './VendorGLEntries'; // @Service() // export class VendorGLEntriesStorage { // @Inject() // private tenancy: HasTenancyService; // @Inject() // private ledegrRepository: LedgerStorageService; // @Inject() // private vendorGLEntries: VendorGLEntries; // /** // * Vendor opening balance journals. // * @param {number} tenantId // * @param {number} vendorId // * @param {Knex.Transaction} trx // */ // public writeVendorOpeningBalance = async ( // tenantId: number, // vendorId: number, // trx?: Knex.Transaction // ) => { // const { Vendor } = this.tenancy.models(tenantId); // const { accountRepository } = this.tenancy.repositories(tenantId); // const vendor = await Vendor.query(trx).findById(vendorId); // // Finds the expense account. // const expenseAccount = await accountRepository.findOne({ // slug: 'other-expenses', // }); // // Find or create the A/P account. // const APAccount = await accountRepository.findOrCreateAccountsPayable( // vendor.currencyCode, // {}, // trx // ); // // Retrieves the vendor opening balance ledger. // const ledger = this.vendorGLEntries.getOpeningBalanceLedger( // APAccount.id, // expenseAccount.id, // vendor // ); // // Commits the ledger entries to the storage. // await this.ledegrRepository.commit(tenantId, ledger, trx); // }; // /** // * Reverts the vendor opening balance GL entries. // * @param {number} tenantId // * @param {number} vendorId // * @param {Knex.Transaction} trx // */ // public revertVendorOpeningBalance = async ( // tenantId: number, // vendorId: number, // trx?: Knex.Transaction // ) => { // await this.ledegrRepository.deleteByReference( // tenantId, // vendorId, // 'VendorOpeningBalance', // trx // ); // }; // /** // * Writes the vendor opening balance GL entries. // * @param {number} tenantId // * @param {number} vendorId // * @param {Knex.Transaction} trx // */ // public rewriteVendorOpeningBalance = async ( // tenantId: number, // vendorId: number, // trx?: Knex.Transaction // ) => { // await this.writeVendorOpeningBalance(tenantId, vendorId, trx); // await this.revertVendorOpeningBalance(tenantId, vendorId, trx); // }; // }