From 3446dba0c5793a6838eb092159ca6737ead71aa5 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Mon, 26 Oct 2020 14:02:27 +0200 Subject: [PATCH] feat: retrieve specific sale receipt details. --- .../api/controllers/Sales/SalesReceipts.ts | 29 +++++++++++++++++++ server/src/services/Sales/SalesReceipts.ts | 15 +++++++--- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/server/src/api/controllers/Sales/SalesReceipts.ts b/server/src/api/controllers/Sales/SalesReceipts.ts index a24b48f21..489067d10 100644 --- a/server/src/api/controllers/Sales/SalesReceipts.ts +++ b/server/src/api/controllers/Sales/SalesReceipts.ts @@ -53,6 +53,14 @@ export default class SalesReceiptsController extends BaseController{ this.handleServiceErrors, this.dynamicListService.handlerErrorsToResponse, ); + router.get( + '/:id', [ + ...this.specificReceiptValidationSchema, + ], + this.validationResult, + asyncMiddleware(this.getSaleReceipt.bind(this)), + this.handleServiceErrors, + ); return router; } @@ -214,6 +222,27 @@ export default class SalesReceiptsController extends BaseController{ } } + /** + * Retrieve the sale receipt with associated entries. + * @param {Request} req + * @param {Response} res + * @param {NextFunction} next + */ + async getSaleReceipt(req: Request, res: Response, next: NextFunction) { + const { id: saleReceiptId } = req.params; + const { tenantId } = req; + + try { + const saleReceipt = await this.saleReceiptService.getSaleReceipt(tenantId, saleReceiptId); + + return res.status(200).send({ + sale_receipt: saleReceipt, + }) + } catch (error) { + next(error); + } + } + /** * Handles service errors. * @param {Error} error diff --git a/server/src/services/Sales/SalesReceipts.ts b/server/src/services/Sales/SalesReceipts.ts index 584174791..f90b0eae0 100644 --- a/server/src/services/Sales/SalesReceipts.ts +++ b/server/src/services/Sales/SalesReceipts.ts @@ -215,13 +215,20 @@ export default class SalesReceiptService { /** * Retrieve sale receipt with associated entries. * @param {Integer} saleReceiptId + * @return {ISaleReceipt} */ - async getSaleReceiptWithEntries(tenantId: number, saleReceiptId: number) { + async getSaleReceipt(tenantId: number, saleReceiptId: number) { const { SaleReceipt } = this.tenancy.models(tenantId); - const saleReceipt = await SaleReceipt.query() - .where('id', saleReceiptId) - .withGraphFetched('entries'); + const saleReceipt = await SaleReceipt.query() + .findById(saleReceiptId) + .withGraphFetched('entries') + .withGraphFetched('customer') + .withGraphFetched('depositAccount'); + + if (!saleReceipt) { + throw new ServiceError(ERRORS.SALE_RECEIPT_NOT_FOUND); + } return saleReceipt; }