80 lines
3.2 KiB
JavaScript
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,
|
|
};
|