ADD: Warehouse inventory management system
- Add WarehouseItem model with bilingual names (FA/EN) and bilingual counting units - Add WarehouseItemTransaction model for IN/OUT movements with reason and actor - Add WarehouseItemStock model for denormalized per-(item×warehouse) running balance - Add warehouseItemService with full CRUD, atomic stock updates via $inc, negative stock guard, and aggregation queries for per-item/per-warehouse/total stock - Add warehouseItemController and REST routes at /api/warehouse-items - Add warehouseService, warehouseController, warehouseRoutes for warehouse location CRUD at /api/warehouses - Register both route groups in routerEndpoints.js
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
const mongoose = require('mongoose')
|
||||
const ObjectID = mongoose.Schema.Types.ObjectId
|
||||
|
||||
const warehouseItemTransactionSchema = new mongoose.Schema(
|
||||
{
|
||||
item: {
|
||||
type: ObjectID,
|
||||
ref: 'WarehouseItem',
|
||||
required: true,
|
||||
},
|
||||
warehouse: {
|
||||
type: ObjectID,
|
||||
ref: 'Warehouse',
|
||||
required: true,
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
enum: ['IN', 'OUT'], // ورود / خروج
|
||||
required: true,
|
||||
},
|
||||
quantity: {
|
||||
type: Number,
|
||||
required: true,
|
||||
min: [0.001, 'مقدار باید بیشتر از صفر باشد'],
|
||||
},
|
||||
unit: {
|
||||
type: String,
|
||||
required: true, // واحد — کپی از آیتم در زمان تراکنش
|
||||
},
|
||||
unitEn: {
|
||||
type: String,
|
||||
},
|
||||
reason: {
|
||||
type: String,
|
||||
required: true, // دلیل تراکنش — مثال: خرید، مصرف در پروژه، برگشت کالا
|
||||
},
|
||||
actor: {
|
||||
type: ObjectID,
|
||||
ref: 'User',
|
||||
required: true,
|
||||
},
|
||||
actorName: {
|
||||
type: String, // ذخیره برای نمایش سریع
|
||||
},
|
||||
note: {
|
||||
type: String, // توضیحات اضافی
|
||||
},
|
||||
date: {
|
||||
type: Date,
|
||||
default: Date.now,
|
||||
},
|
||||
},
|
||||
{
|
||||
timestamps: true,
|
||||
}
|
||||
)
|
||||
|
||||
warehouseItemTransactionSchema.index({ item: 1, warehouse: 1 })
|
||||
warehouseItemTransactionSchema.index({ item: 1, type: 1 })
|
||||
warehouseItemTransactionSchema.index({ warehouse: 1, date: -1 })
|
||||
warehouseItemTransactionSchema.index({ actor: 1 })
|
||||
warehouseItemTransactionSchema.index({ date: -1 })
|
||||
|
||||
const WarehouseItemTransaction = mongoose.model('WarehouseItemTransaction', warehouseItemTransactionSchema)
|
||||
module.exports = WarehouseItemTransaction
|
||||
Reference in New Issue
Block a user