const Joi = require('joi'); const { validateInputRequest, authRoles } = require('../middlewares/validate'); const { invoiceSettingsUpload } = require('../middlewares/multer'); const { jobInvoiceViewRoles, jobInvoiceEditRoles, InvoiceStatusAction } = 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(), dueToUncollectibleDays: Joi.number().min(0).optional(), dueToUncollectibleOp: Joi.string().valid(...Object.values(InvoiceStatusAction)).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(), });