55 lines
2.5 KiB
JavaScript
55 lines
2.5 KiB
JavaScript
const Joi = require('joi');
|
|
const { validateInputRequest, authRoles } = require('../middlewares/validate');
|
|
const { invoiceSettingsUpload } = require('../middlewares/multer');
|
|
const { jobInvoiceViewRoles, jobInvoiceEditRoles } = require('../helpers/constants');
|
|
const Currencies = require('../helpers/currencies');
|
|
|
|
module.exports = function (app) {
|
|
const router = require('express').Router(),
|
|
invoiceSettingsCtl = require('../controllers/invoice_settings');
|
|
|
|
// On routes that end in /customers
|
|
router.route('/')
|
|
.get(authRoles(jobInvoiceViewRoles), invoiceSettingsCtl.getInvoiceSettings_get)
|
|
.post(authRoles(jobInvoiceEditRoles), invoiceSettingsUpload.single('logo'), validateInputRequest(createInvoiceSettingSchema), invoiceSettingsCtl.createInvoiceSetting_post);
|
|
|
|
// route default invoice setting
|
|
router.route('/default')
|
|
.get(authRoles(jobInvoiceViewRoles), invoiceSettingsCtl.getInvoiceSettingDefault_get);
|
|
|
|
// On routes that end in get by userId
|
|
router.route('/byClient/:clientId')
|
|
.get(authRoles(jobInvoiceViewRoles), invoiceSettingsCtl.getInvoiceSettingDetail_get)
|
|
.put(authRoles(jobInvoiceEditRoles), invoiceSettingsUpload.single('logo'), validateInputRequest(updateInvoiceSettingSchema), invoiceSettingsCtl.updateInvoiceSetting_put)
|
|
.delete(authRoles(jobInvoiceEditRoles), invoiceSettingsCtl.deleteInvoiceSetting);
|
|
|
|
// On routes that end in /invoice_settings/:invoice_setting_id
|
|
router.route('/:invoiceSettingId')
|
|
.get(authRoles(jobInvoiceViewRoles), invoiceSettingsCtl.getInvoiceSettingDetail_get)
|
|
.put(authRoles(jobInvoiceEditRoles), invoiceSettingsUpload.single('logo'), validateInputRequest(updateInvoiceSettingSchema), invoiceSettingsCtl.updateInvoiceSetting_put)
|
|
.delete(authRoles(jobInvoiceEditRoles), invoiceSettingsCtl.deleteInvoiceSetting);
|
|
|
|
app.use('/api/invoiceSettings', router);
|
|
};
|
|
|
|
const invoiceSettingSchema = {
|
|
userId: Joi.string().optional(),
|
|
companyName: Joi.string().allow('').optional(),
|
|
address: Joi.string().allow('').optional(),
|
|
taxValue: Joi.number().min(0).optional(),
|
|
discount: Joi.number().min(0).optional(),
|
|
termOpts: Joi.array().items(Joi.number()).optional(),
|
|
currency: Joi.string().valid(...Object.keys(Currencies)).optional(),
|
|
note: Joi.string().allow('').optional(),
|
|
};
|
|
|
|
const createInvoiceSettingSchema = Joi.object().keys({
|
|
...invoiceSettingSchema,
|
|
paymentTerm: Joi.number().min(0).required(),
|
|
});
|
|
|
|
const updateInvoiceSettingSchema = Joi.object().keys({
|
|
...invoiceSettingSchema,
|
|
paymentTerm: Joi.number().min(0).optional(),
|
|
});
|