feat: closed sale receipt status.

feat: approve and reject sale estimate.
feat: initial receipts, invoices, estimates and bills views.
This commit is contained in:
a.bouhuolia
2020-12-14 20:25:38 +02:00
parent 461e18f2a4
commit 27483495cb
23 changed files with 801 additions and 86 deletions

View File

@@ -22,6 +22,16 @@ export default class SalesReceiptsController extends BaseController{
router() {
const router = Router();
router.post(
'/:id/close',
[
...this.specificReceiptValidationSchema,
],
this.validationResult,
asyncMiddleware(this.closeSaleReceipt.bind(this)),
this.handleServiceErrors,
)
router.post(
'/:id', [
...this.specificReceiptValidationSchema,
@@ -75,6 +85,7 @@ export default class SalesReceiptsController extends BaseController{
check('receipt_date').exists().isISO8601(),
check('receipt_number').optional().trim().escape(),
check('reference_no').optional().trim().escape(),
check('closed').default(false).isBoolean().toBoolean(),
check('entries').exists().isArray({ min: 1 }),
@@ -188,6 +199,31 @@ export default class SalesReceiptsController extends BaseController{
}
}
/**
* Marks the given the sale receipt as closed.
* @param {Request} req
* @param {Response} res
* @param {NextFunction} next
*/
async closeSaleReceipt(req: Request, res: Response, next: NextFunction) {
const { tenantId } = req;
const { id: saleReceiptId } = req.params;
try {
// Update the given sale receipt details.
await this.saleReceiptService.closeSaleReceipt(
tenantId,
saleReceiptId,
);
return res.status(200).send({
id: saleReceiptId,
message: 'Sale receipt has been closed successfully.',
});
} catch (error) {
next(error);
}
}
/**
* Listing sales receipts.
* @param {Request} req
@@ -296,6 +332,11 @@ export default class SalesReceiptsController extends BaseController{
errors: [{ type: 'SALE_RECEIPT_NUMBER_NOT_UNIQUE', code: 900 }],
});
}
if (error.errorType === 'SALE_RECEIPT_IS_ALREADY_CLOSED') {
return res.boom.badRequest(null, {
errors: [{ type: 'SALE_RECEIPT_IS_ALREADY_CLOSED', code: 1000 }],
});
}
}
next(error);
}