Files
bigcapital/packages/server/src/services/CreditNotes/GetCreditNote.ts
2024-05-29 13:58:08 +02:00

45 lines
1.3 KiB
TypeScript

import { ServiceError } from '@/exceptions';
import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable';
import HasTenancyService from '@/services/Tenancy/TenancyService';
import { Inject, Service } from 'typedi';
import { ERRORS } from './constants';
import BaseCreditNotes from './CreditNotes';
import { CreditNoteTransformer } from './CreditNoteTransformer';
@Service()
export default class GetCreditNote extends BaseCreditNotes {
@Inject()
private tenancy: HasTenancyService;
@Inject()
private transformer: TransformerInjectable;
/**
* Retrieve the credit note graph.
* @param {number} tenantId
* @param {number} creditNoteId
* @returns
*/
public getCreditNote = async (tenantId: number, creditNoteId: number) => {
const { CreditNote } = this.tenancy.models(tenantId);
// Retrieve the vendor credit model graph.
const creditNote = await CreditNote.query()
.findById(creditNoteId)
.withGraphFetched('entries.item')
.withGraphFetched('customer')
.withGraphFetched('branch')
.withGraphFetched('attachments');
if (!creditNote) {
throw new ServiceError(ERRORS.CREDIT_NOTE_NOT_FOUND);
}
// Transforms the credit note model to POJO.
return this.transformer.transform(
tenantId,
creditNote,
new CreditNoteTransformer(),
);
};
}