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