Compare commits
2 Commits
bfd7d292d5
...
30295dad3a
| Author | SHA1 | Date | |
|---|---|---|---|
| 30295dad3a | |||
| e7957c3070 |
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);
|
||||||
@ -1,6 +1,16 @@
|
|||||||
import mongoose from 'mongoose';
|
import mongoose from 'mongoose';
|
||||||
import { generateId } from '../../utils.js';
|
import { generateId } from '../../utils.js';
|
||||||
|
|
||||||
|
const addressSchema = new mongoose.Schema({
|
||||||
|
building: { required: false, type: String },
|
||||||
|
addressLine1: { required: false, type: String },
|
||||||
|
addressLine2: { required: false, type: String },
|
||||||
|
city: { required: false, type: String },
|
||||||
|
state: { required: false, type: String },
|
||||||
|
postcode: { required: false, type: String },
|
||||||
|
country: { required: false, type: String },
|
||||||
|
});
|
||||||
|
|
||||||
const vendorSchema = new mongoose.Schema(
|
const vendorSchema = new mongoose.Schema(
|
||||||
{
|
{
|
||||||
_reference: { type: String, default: () => generateId()() },
|
_reference: { type: String, default: () => generateId()() },
|
||||||
@ -10,6 +20,8 @@ const vendorSchema = new mongoose.Schema(
|
|||||||
phone: { required: false, type: String },
|
phone: { required: false, type: String },
|
||||||
contact: { required: false, type: String },
|
contact: { required: false, type: String },
|
||||||
country: { required: false, type: String },
|
country: { required: false, type: String },
|
||||||
|
active: { required: true, type: Boolean, default: true },
|
||||||
|
address: { required: false, type: addressSchema },
|
||||||
},
|
},
|
||||||
{ timestamps: true }
|
{ timestamps: true }
|
||||||
);
|
);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user