erp_be/src/modules/grn/grn.validation.js

80 lines
3.2 KiB
JavaScript

const Joi = require('joi');
const { pageQuery, limitQuery } = require('../../utils/pagination.validation');
const { GRN_STATUSES } = require('./grn.constants');
const grnItemSchema = Joi.object({
po_item_id: Joi.number().integer().positive().required(),
line_no: Joi.number().integer().min(1).required(),
current_qty: Joi.number().positive().required(),
accepted_qty: Joi.number().min(0).required(),
rejected_qty: Joi.number().min(0).default(0),
rejection_reason: Joi.string().allow(null, '').optional(),
rate: Joi.number().min(0).optional(),
batch_no: Joi.string().max(100).allow(null, '').optional(),
mfg_date: Joi.date().iso().allow(null).optional(),
expiry_date: Joi.date().iso().allow(null).optional(),
storage_location: Joi.string().max(100).allow(null, '').optional(),
remarks: Joi.string().allow(null, '').optional(),
item_category_id: Joi.number().integer().positive().allow(null).optional(),
item_subcategory_id: Joi.number().integer().positive().allow(null).optional(),
});
const createGrnSchema = Joi.object({
grn_date: Joi.date().iso().required(),
po_id: Joi.number().integer().positive().required(),
vendor_invoice_no: Joi.string().max(100).allow(null, '').optional(),
vendor_invoice_date: Joi.date().iso().allow(null).optional(),
vendor_invoice_amount: Joi.number().min(0).allow(null).optional(),
vehicle_no: Joi.string().max(30).allow(null, '').optional(),
lr_no: Joi.string().max(50).allow(null, '').optional(),
lr_date: Joi.date().iso().allow(null).optional(),
received_by: Joi.number().integer().positive().allow(null).optional(),
quality_checked_by: Joi.number().integer().positive().allow(null).optional(),
remarks: Joi.string().allow(null, '').optional(),
items: Joi.array().items(grnItemSchema).min(1).required(),
});
const updateGrnSchema = Joi.object({
grn_date: Joi.date().iso().optional(),
vendor_invoice_no: Joi.string().max(100).allow(null, '').optional(),
vendor_invoice_date: Joi.date().iso().allow(null).optional(),
vendor_invoice_amount: Joi.number().min(0).allow(null).optional(),
vehicle_no: Joi.string().max(30).allow(null, '').optional(),
lr_no: Joi.string().max(50).allow(null, '').optional(),
lr_date: Joi.date().iso().allow(null).optional(),
received_by: Joi.number().integer().positive().allow(null).optional(),
quality_checked_by: Joi.number().integer().positive().allow(null).optional(),
remarks: Joi.string().allow(null, '').optional(),
}).min(1);
const listGrnQuerySchema = Joi.object({
page: pageQuery(),
limit: limitQuery(),
search: Joi.string().allow('').optional(),
status: Joi.string()
.valid(...GRN_STATUSES)
.optional(),
po_id: Joi.number().integer().positive().optional(),
vendor_id: Joi.number().integer().positive().optional(),
location_id: Joi.number().integer().positive().optional(),
date_from: Joi.date().iso().optional(),
date_to: Joi.date().iso().optional(),
});
const exportGrnQuerySchema = listGrnQuerySchema.keys({
page: Joi.strip(),
limit: Joi.strip(),
});
const cancelGrnSchema = Joi.object({
cancellation_reason: Joi.string().trim().min(1).required(),
});
module.exports = {
createGrnSchema,
updateGrnSchema,
listGrnQuerySchema,
exportGrnQuerySchema,
cancelGrnSchema,
};