agmission/Development/server/routes/invoice_settings.js

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(),
});