import { ServiceError } from '@/exceptions'; import { IPaymentReceived } from '@/interfaces'; import HasTenancyService from '@/services/Tenancy/TenancyService'; import { Inject, Service } from 'typedi'; import { ERRORS } from './constants'; import { PaymentReceiveTransfromer } from './PaymentReceivedTransformer'; import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable'; @Service() export class GetPaymentReceived { @Inject() private tenancy: HasTenancyService; @Inject() private transformer: TransformerInjectable; /** * Retrieve payment receive details. * @param {number} tenantId - Tenant id. * @param {number} paymentReceiveId - Payment receive id. * @return {Promise} */ public async getPaymentReceive( tenantId: number, paymentReceiveId: number ): Promise { const { PaymentReceive } = this.tenancy.models(tenantId); const paymentReceive = await PaymentReceive.query() .withGraphFetched('customer') .withGraphFetched('depositAccount') .withGraphFetched('entries.invoice') .withGraphFetched('transactions') .withGraphFetched('branch') .findById(paymentReceiveId); if (!paymentReceive) { throw new ServiceError(ERRORS.PAYMENT_RECEIVE_NOT_EXISTS); } return this.transformer.transform( tenantId, paymentReceive, new PaymentReceiveTransfromer() ); } }