@accounter/server
Version:
81 lines (75 loc) • 2.72 kB
text/typescript
import { format } from 'date-fns';
import { DocumentType } from '@shared/enums';
import { formatFinancialAmount } from '@shared/helpers';
import type { TimelessDateString } from '@shared/types';
import { DocumentsProvider } from '../providers/documents.provider.js';
import type { DocumentsModule } from '../types.js';
export const documentType: DocumentsModule.DocumentResolvers['documentType'] = documentRoot => {
let key = documentRoot.type[0].toUpperCase() + documentRoot.type.substring(1).toLocaleLowerCase();
if (key === 'Invoice_receipt') {
key = 'InvoiceReceipt';
} else if (key === 'Credit_invoice') {
key = 'CreditInvoice';
}
return DocumentType[key as keyof typeof DocumentType];
};
export const commonDocumentsFields: DocumentsModule.DocumentResolvers = {
id: documentRoot => documentRoot.id,
image: documentRoot => {
const url = documentRoot.image_url ?? null;
if (!url) {
console.log('no image url', documentRoot.image_url, documentRoot.id);
}
return url;
},
file: documentRoot => {
const url = documentRoot.file_url ?? null;
if (!url) {
console.log('no file url', documentRoot.file_url, documentRoot.id);
}
return url;
},
isReviewed: documentRoot => documentRoot.is_reviewed,
documentType,
};
export const commonFinancialDocumentsFields:
| DocumentsModule.InvoiceResolvers
| DocumentsModule.ReceiptResolvers
| DocumentsModule.InvoiceReceiptResolvers
| DocumentsModule.ProformaResolvers = {
serialNumber: documentRoot => documentRoot.serial_number ?? '',
date: documentRoot =>
documentRoot.date ? (format(documentRoot.date, 'yyyy-MM-dd') as TimelessDateString) : null,
amount: documentRoot =>
formatFinancialAmount(documentRoot.total_amount, documentRoot.currency_code),
vat: documentRoot =>
documentRoot.vat_amount == null
? null
: formatFinancialAmount(documentRoot.vat_amount, documentRoot.currency_code),
};
export const commonFinancialEntityFields:
| DocumentsModule.LtdFinancialEntityResolvers
| DocumentsModule.PersonalFinancialEntityResolvers = {
documents: async (DbBusiness, _, { injector }) => {
const documents = await injector
.get(DocumentsProvider)
.getDocumentsByFinancialEntityIds({ ownerIds: [DbBusiness.id] });
return documents;
},
};
export const commonChargeFields: DocumentsModule.ChargeResolvers = {
additionalDocuments: async (DbCharge, _, { injector }) => {
if (!DbCharge.id) {
return [];
}
try {
const docs = await injector
.get(DocumentsProvider)
.getDocumentsByChargeIdLoader.load(DbCharge.id);
return docs;
} catch (e) {
console.error(e);
return [];
}
},
};