@accounter/server
Version:
45 lines (43 loc) • 1.65 kB
text/typescript
import { GraphQLError } from 'graphql';
import { DEFAULT_FINANCIAL_ENTITY_ID } from '@shared/constants';
import { TaxCategoriesProvider } from '../providers/tax-categories.provider.js';
import type { FinancialEntitiesModule } from '../types.js';
import { commonTaxChargeFields } from './common.js';
export const taxCategoriesResolvers: FinancialEntitiesModule.Resolvers = {
Query: {
taxCategories: async (_parent, _args, { injector }) => {
return injector
.get(TaxCategoriesProvider)
.getAllTaxCategories()
.then(res => res.filter(c => !!c.name));
},
taxCategoryByBusinessId: async (_, args, { injector }) => {
const { businessId, ownerId } = args;
return injector
.get(TaxCategoriesProvider)
.taxCategoryByBusinessAndOwnerIDsLoader.load({ businessId, ownerId })
.then(res => res ?? null);
},
},
CommonCharge: commonTaxChargeFields,
ConversionCharge: commonTaxChargeFields,
SalaryCharge: commonTaxChargeFields,
InternalTransferCharge: commonTaxChargeFields,
DividendCharge: commonTaxChargeFields,
BusinessTripCharge: commonTaxChargeFields,
MonthlyVatCharge: commonTaxChargeFields,
LtdFinancialEntity: {
taxCategory: async (parent, _, { injector }) => {
const taxCategory = await injector
.get(TaxCategoriesProvider)
.taxCategoryByBusinessAndOwnerIDsLoader.load({
businessId: parent.id,
ownerId: DEFAULT_FINANCIAL_ENTITY_ID,
});
if (!taxCategory) {
throw new GraphQLError(`Tax category for business ID="${parent.id}" not found`);
}
return taxCategory;
},
},
};