refactor: tenant proxy providers

This commit is contained in:
Ahmed Bouhuolia
2025-02-15 23:52:12 +02:00
parent 36851d3209
commit 5c0bb52b59
302 changed files with 2396 additions and 1677 deletions

View File

@@ -2,12 +2,16 @@ import { Inject, Injectable } from '@nestjs/common';
import { keyBy, sumBy } from 'lodash';
import { ItemEntry } from '@/modules/TransactionItemEntry/models/ItemEntry';
import { TaxRateModel } from './models/TaxRate.model';
import { TenantModelProxy } from '../System/models/TenantBaseModel';
@Injectable()
export class ItemEntriesTaxTransactions {
constructor(
@Inject(ItemEntry.name) private itemEntryModel: typeof ItemEntry,
@Inject(TaxRateModel.name) private taxRateModel: typeof TaxRateModel,
@Inject(ItemEntry.name)
private itemEntryModel: TenantModelProxy<typeof ItemEntry>,
@Inject(TaxRateModel.name)
private taxRateModel: TenantModelProxy<typeof TaxRateModel>,
) {}
/**
@@ -17,7 +21,7 @@ export class ItemEntriesTaxTransactions {
*/
public assocTaxAmountWithheldFromEntries = (model: any) => {
const entries = model.entries.map((entry) =>
this.itemEntryModel.fromJson(entry),
this.itemEntryModel().fromJson(entry),
);
const taxAmountWithheld = sumBy(entries, 'taxAmount');
@@ -25,47 +29,47 @@ export class ItemEntriesTaxTransactions {
model.taxAmountWithheld = taxAmountWithheld;
}
return model;
}
};
/**
* Associates tax rate id from tax code to entries.
* @param {any} entries
*/
public assocTaxRateIdFromCodeToEntries = async (entries: any) => {
const entriesWithCode = entries.filter((entry) => entry.taxCode);
const taxCodes = entriesWithCode.map((entry) => entry.taxCode);
const foundTaxCodes = await this.taxRateModel
.query()
.whereIn('code', taxCodes);
const entriesWithCode = entries.filter((entry) => entry.taxCode);
const taxCodes = entriesWithCode.map((entry) => entry.taxCode);
const foundTaxCodes = await this.taxRateModel()
.query()
.whereIn('code', taxCodes);
const taxCodesMap = keyBy(foundTaxCodes, 'code');
const taxCodesMap = keyBy(foundTaxCodes, 'code');
return entries.map((entry) => {
if (entry.taxCode) {
entry.taxRateId = taxCodesMap[entry.taxCode]?.id;
}
return entry;
});
};
return entries.map((entry) => {
if (entry.taxCode) {
entry.taxRateId = taxCodesMap[entry.taxCode]?.id;
}
return entry;
});
};
/**
* Associates tax rate from tax id to entries.
* @returns {Promise<ItemEntry[]>}
*/
public assocTaxRateFromTaxIdToEntries = async (entries: ItemEntry[]) => {
const entriesWithId = entries.filter((e) => e.taxRateId);
const taxRateIds = entriesWithId.map((e) => e.taxRateId);
const foundTaxes = await this.taxRateModel
.query()
.whereIn('id', taxRateIds);
const entriesWithId = entries.filter((e) => e.taxRateId);
const taxRateIds = entriesWithId.map((e) => e.taxRateId);
const foundTaxes = await this.taxRateModel()
.query()
.whereIn('id', taxRateIds);
const taxRatesMap = keyBy(foundTaxes, 'id');
const taxRatesMap = keyBy(foundTaxes, 'id');
return entries.map((entry) => {
if (entry.taxRateId) {
entry.taxRate = taxRatesMap[entry.taxRateId]?.rate;
}
return entry;
});
};
return entries.map((entry) => {
if (entry.taxRateId) {
entry.taxRate = taxRatesMap[entry.taxRateId]?.rate;
}
return entry;
});
};
}