Files
bigcapital/packages/server/src/services/Accounting/LedgerStorageRevert.ts

62 lines
1.6 KiB
TypeScript

import { Inject } from 'typedi';
import { castArray } from 'lodash';
import HasTenancyService from '@/services/Tenancy/TenancyService';
import LedgerStorageService from './LedgerStorageService';
import Ledger from './Ledger';
import { Knex } from 'knex';
export class LedgerRevert {
@Inject()
private tenancy: HasTenancyService;
@Inject()
private ledgerStorage: LedgerStorageService;
/**
* Reverts the jouranl entries.
* @param {number|number[]} referenceId - Reference id.
* @param {string} referenceType - Reference type.
*/
public getTransactionsByReference = async (
tenantId: number,
referenceId: number | number[],
referenceType: string | string[]
) => {
const { AccountTransaction } = this.tenancy.models(tenantId);
const transactions = await AccountTransaction.query()
.whereIn('reference_type', castArray(referenceType))
.whereIn('reference_id', castArray(referenceId))
.withGraphFetched('account');
return transactions;
};
/**
*
* @param tenantId
* @param referenceId
* @param referenceType
* @param trx
*/
public revertGLEntries = async (
tenantId: number,
referenceId: number | number[],
referenceType: string | string[],
trx?: Knex.Transaction
) => {
//
const transactions = await this.getTransactionsByReference(
tenantId,
referenceId,
referenceType
);
// Creates a new ledger from transaction and reverse the entries.
const ledger = Ledger.fromTransactions(transactions);
const reversedLedger = ledger.reverse();
//
await this.ledgerStorage.commit(tenantId, reversedLedger, trx);
};
}