Added order items, shipments etc
This commit is contained in:
parent
e7957c3070
commit
30295dad3a
32
src/database/schemas/inventory/orderitem.schema.js
Normal file
32
src/database/schemas/inventory/orderitem.schema.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
import mongoose from 'mongoose';
|
||||||
|
import { generateId } from '../../utils.js';
|
||||||
|
const { Schema } = mongoose;
|
||||||
|
|
||||||
|
const orderItemSchema = new Schema(
|
||||||
|
{
|
||||||
|
_reference: { type: String, default: () => generateId()() },
|
||||||
|
orderType: { type: String, required: true },
|
||||||
|
order: { type: Schema.Types.ObjectId, refPath: 'orderType', required: true },
|
||||||
|
itemType: { type: String, required: true },
|
||||||
|
item: { type: Schema.Types.ObjectId, refPath: 'itemType', required: true },
|
||||||
|
syncAmount: { type: String, required: true, default: null },
|
||||||
|
itemAmount: { type: Number, required: true },
|
||||||
|
quantity: { type: Number, required: true },
|
||||||
|
totalAmount: { type: Number, required: true },
|
||||||
|
taxRate: { type: Schema.Types.ObjectId, ref: 'taxRate', required: false },
|
||||||
|
totalAmountWithTax: { type: Number, required: true },
|
||||||
|
timestamp: { type: Date, default: Date.now },
|
||||||
|
},
|
||||||
|
{ timestamps: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
// Add virtual id getter
|
||||||
|
orderItemSchema.virtual('id').get(function () {
|
||||||
|
return this._id;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Configure JSON serialization to include virtuals
|
||||||
|
orderItemSchema.set('toJSON', { virtuals: true });
|
||||||
|
|
||||||
|
// Create and export the model
|
||||||
|
export const orderItemModel = mongoose.model('orderItem', orderItemSchema);
|
||||||
@ -4,7 +4,7 @@ const { Schema } = mongoose;
|
|||||||
|
|
||||||
const itemSchema = new Schema({
|
const itemSchema = new Schema({
|
||||||
itemType: { type: String, required: true },
|
itemType: { type: String, required: true },
|
||||||
item: { type: Schema.Types.ObjectId, refPath: 'itemType', required: true },
|
item: { type: Schema.Types.ObjectId, refPath: 'items.itemType', required: true },
|
||||||
quantity: { type: Number, required: true },
|
quantity: { type: Number, required: true },
|
||||||
itemCost: { type: Number, required: true },
|
itemCost: { type: Number, required: true },
|
||||||
totalCost: { type: Number, required: true },
|
totalCost: { type: Number, required: true },
|
||||||
|
|||||||
50
src/database/schemas/inventory/shipment.schema.js
Normal file
50
src/database/schemas/inventory/shipment.schema.js
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
import mongoose from 'mongoose';
|
||||||
|
import { generateId } from '../../utils.js';
|
||||||
|
const { Schema } = mongoose;
|
||||||
|
|
||||||
|
const shipmentItemSchema = new Schema({
|
||||||
|
itemType: { type: String, required: true },
|
||||||
|
item: { type: Schema.Types.ObjectId, refPath: 'itemType', required: true },
|
||||||
|
quantity: { type: Number, required: true },
|
||||||
|
itemCost: { type: Number, required: true },
|
||||||
|
totalCost: { type: Number, required: true },
|
||||||
|
totalCostWithTax: { type: Number, required: true },
|
||||||
|
taxRate: { type: Schema.Types.ObjectId, ref: 'taxRate', required: false },
|
||||||
|
});
|
||||||
|
|
||||||
|
const shipmentSchema = new Schema(
|
||||||
|
{
|
||||||
|
_reference: { type: String, default: () => generateId()() },
|
||||||
|
purchaseOrder: { type: Schema.Types.ObjectId, ref: 'purchaseOrder', required: true },
|
||||||
|
vendor: { type: Schema.Types.ObjectId, ref: 'vendor', required: true },
|
||||||
|
courierService: { type: Schema.Types.ObjectId, ref: 'courierService', required: false },
|
||||||
|
trackingNumber: { type: String, required: false },
|
||||||
|
items: [shipmentItemSchema],
|
||||||
|
cost: { net: { type: Number, required: true }, gross: { type: Number, required: true } },
|
||||||
|
shippedDate: { type: Date, required: false },
|
||||||
|
expectedDeliveryDate: { type: Date, required: false },
|
||||||
|
actualDeliveryDate: { type: Date, required: false },
|
||||||
|
state: {
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
default: 'pending',
|
||||||
|
enum: ['pending', 'shipped', 'in_transit', 'delivered', 'cancelled'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
notes: { type: String },
|
||||||
|
timestamp: { type: Date, default: Date.now },
|
||||||
|
},
|
||||||
|
{ timestamps: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
// Add virtual id getter
|
||||||
|
shipmentSchema.virtual('id').get(function () {
|
||||||
|
return this._id;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Configure JSON serialization to include virtuals
|
||||||
|
shipmentSchema.set('toJSON', { virtuals: true });
|
||||||
|
|
||||||
|
// Create and export the model
|
||||||
|
export const shipmentModel = mongoose.model('shipment', shipmentSchema);
|
||||||
Loading…
x
Reference in New Issue
Block a user