118 lines
5.1 KiB
JavaScript
118 lines
5.1 KiB
JavaScript
const Joi = require('joi');
|
|
const { ASSET_CONDITIONS, ASSET_STATUSES, DEPRECIATION_METHODS } = require('./assets.constants');
|
|
|
|
const assetFields = {
|
|
asset_name: Joi.string().max(200).required(),
|
|
asset_category_id: Joi.number().integer().positive().required(),
|
|
brand_model: Joi.string().max(200).allow(null, '').optional(),
|
|
manufacturer: Joi.string().max(200).allow(null, '').optional(),
|
|
serial_number: Joi.string().max(100).allow(null, '').optional(),
|
|
part_number: Joi.string().max(100).allow(null, '').optional(),
|
|
plant_id: Joi.number().integer().positive().required(),
|
|
department_id: Joi.number().integer().positive().allow(null).optional(),
|
|
warehouse_id: Joi.number().integer().positive().allow(null).optional(),
|
|
location_detail: Joi.string().max(200).allow(null, '').optional(),
|
|
assigned_to_user_id: Joi.number().integer().positive().allow(null).optional(),
|
|
vendor_id: Joi.number().integer().positive().allow(null).optional(),
|
|
po_id: Joi.number().integer().positive().allow(null).optional(),
|
|
grn_id: Joi.number().integer().positive().allow(null).optional(),
|
|
grn_item_id: Joi.number().integer().positive().allow(null).optional(),
|
|
purchase_date: Joi.date().iso().allow(null).optional(),
|
|
purchase_cost: Joi.number().min(0).default(0),
|
|
useful_life_years: Joi.number().integer().min(0).allow(null).optional(),
|
|
depreciation_method: Joi.string()
|
|
.valid(...DEPRECIATION_METHODS)
|
|
.allow(null)
|
|
.optional(),
|
|
salvage_value: Joi.number().min(0).allow(null).optional(),
|
|
warranty_expiry_date: Joi.date().iso().allow(null).optional(),
|
|
amc_start_date: Joi.date().iso().allow(null).optional(),
|
|
amc_end_date: Joi.date().iso().allow(null).optional(),
|
|
amc_vendor_id: Joi.number().integer().positive().allow(null).optional(),
|
|
insurance_policy_no: Joi.string().max(100).allow(null, '').optional(),
|
|
insurance_expiry_date: Joi.date().iso().allow(null).optional(),
|
|
condition: Joi.string()
|
|
.valid(...ASSET_CONDITIONS)
|
|
.default('NEW'),
|
|
status: Joi.string()
|
|
.valid(...ASSET_STATUSES)
|
|
.default('IN_USE'),
|
|
qr_code_value: Joi.string().max(100).allow(null, '').optional(),
|
|
disposal_date: Joi.date().iso().allow(null).optional(),
|
|
disposal_reason: Joi.string().allow(null, '').optional(),
|
|
disposal_value: Joi.number().min(0).allow(null).optional(),
|
|
remarks: Joi.string().allow(null, '').optional(),
|
|
is_active: Joi.boolean().default(true),
|
|
};
|
|
|
|
const createAssetSchema = Joi.object(assetFields);
|
|
|
|
const updateAssetSchema = Joi.object({
|
|
asset_name: assetFields.asset_name.optional(),
|
|
asset_category_id: assetFields.asset_category_id.optional(),
|
|
brand_model: assetFields.brand_model,
|
|
manufacturer: assetFields.manufacturer,
|
|
serial_number: assetFields.serial_number,
|
|
part_number: assetFields.part_number,
|
|
plant_id: assetFields.plant_id.optional(),
|
|
department_id: assetFields.department_id,
|
|
warehouse_id: assetFields.warehouse_id,
|
|
location_detail: assetFields.location_detail,
|
|
assigned_to_user_id: assetFields.assigned_to_user_id,
|
|
vendor_id: assetFields.vendor_id,
|
|
po_id: assetFields.po_id,
|
|
grn_id: assetFields.grn_id,
|
|
grn_item_id: assetFields.grn_item_id,
|
|
purchase_date: assetFields.purchase_date,
|
|
purchase_cost: assetFields.purchase_cost.optional(),
|
|
useful_life_years: assetFields.useful_life_years,
|
|
depreciation_method: assetFields.depreciation_method,
|
|
salvage_value: assetFields.salvage_value,
|
|
warranty_expiry_date: assetFields.warranty_expiry_date,
|
|
amc_start_date: assetFields.amc_start_date,
|
|
amc_end_date: assetFields.amc_end_date,
|
|
amc_vendor_id: assetFields.amc_vendor_id,
|
|
insurance_policy_no: assetFields.insurance_policy_no,
|
|
insurance_expiry_date: assetFields.insurance_expiry_date,
|
|
condition: assetFields.condition.optional(),
|
|
status: assetFields.status.optional(),
|
|
qr_code_value: assetFields.qr_code_value,
|
|
disposal_date: assetFields.disposal_date,
|
|
disposal_reason: assetFields.disposal_reason,
|
|
disposal_value: assetFields.disposal_value,
|
|
remarks: assetFields.remarks,
|
|
is_active: assetFields.is_active.optional(),
|
|
}).min(1);
|
|
|
|
const listAssetsQuerySchema = Joi.object({
|
|
page: Joi.number().integer().min(1).default(1),
|
|
limit: Joi.number().integer().min(1).max(100).default(20),
|
|
search: Joi.string().allow('').optional(),
|
|
status: Joi.string()
|
|
.valid(...ASSET_STATUSES)
|
|
.optional(),
|
|
condition: Joi.string()
|
|
.valid(...ASSET_CONDITIONS)
|
|
.optional(),
|
|
asset_category_id: Joi.number().integer().positive().optional(),
|
|
plant_id: Joi.number().integer().positive().optional(),
|
|
department_id: Joi.number().integer().positive().optional(),
|
|
is_active: Joi.boolean().optional(),
|
|
});
|
|
|
|
const transferAssetSchema = Joi.object({
|
|
transfer_date: Joi.date().iso().required(),
|
|
to_plant_id: Joi.number().integer().positive().allow(null).optional(),
|
|
to_department_id: Joi.number().integer().positive().allow(null).optional(),
|
|
to_user_id: Joi.number().integer().positive().allow(null).optional(),
|
|
to_warehouse_id: Joi.number().integer().positive().allow(null).optional(),
|
|
reason: Joi.string().allow(null, '').optional(),
|
|
}).or('to_plant_id', 'to_department_id', 'to_user_id', 'to_warehouse_id');
|
|
|
|
module.exports = {
|
|
createAssetSchema,
|
|
updateAssetSchema,
|
|
listAssetsQuerySchema,
|
|
transferAssetSchema,
|
|
};
|