Files
mbmanager-api/components/warehouseItem/warehouseItemTransactionModel.js
T
kavehhn a9432b96c0 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
2026-08-11 20:09:10 +03:30

66 lines
1.9 KiB
JavaScript

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