82 lines
1.7 KiB
JavaScript
82 lines
1.7 KiB
JavaScript
import mongoose, { Schema } from "mongoose";
|
|
|
|
const orderItemSchema = new Schema({
|
|
productId: {
|
|
type: Schema.Types.ObjectId,
|
|
ref: "Product",
|
|
required: true,
|
|
},
|
|
SKU: {
|
|
type: String,
|
|
required: true,
|
|
},
|
|
name: {
|
|
type: String,
|
|
required: true,
|
|
},
|
|
categoryName: {
|
|
type: String, // Directly store category name
|
|
required: true,
|
|
},
|
|
brandName: {
|
|
type: String, // Directly store brand name
|
|
required: true,
|
|
},
|
|
price: {
|
|
type: Number,
|
|
required: true,
|
|
},
|
|
GST: {
|
|
type: Number,
|
|
required: true,
|
|
},
|
|
HSN_Code: {
|
|
type: Number,
|
|
required: true,
|
|
},
|
|
processquantity: {
|
|
//updated quantity
|
|
type: Number,
|
|
required: true,
|
|
default: 1,
|
|
},
|
|
});
|
|
const invoiceSchema = new mongoose.Schema({
|
|
invoiceId: { type: String, required: true, unique: true },
|
|
orderId: {
|
|
type: mongoose.Schema.Types.ObjectId,
|
|
ref: "RdOrder",
|
|
required: true,
|
|
},
|
|
items: [orderItemSchema],
|
|
subtotal: {
|
|
type: Number,
|
|
required: true,
|
|
},
|
|
gstTotal: {
|
|
type: Number,
|
|
required: true,
|
|
},
|
|
invoiceAmount: { type: Number, required: true },
|
|
courier_name: { type: String },
|
|
courier_tracking_id: { type: String },
|
|
courierStatus: {
|
|
type: String,
|
|
enum: ["processing", "dispatched", "delivered"],
|
|
default: "processing",
|
|
},
|
|
courierstatus_timeline: {
|
|
processing: { type: Date },
|
|
dispatched: { type: Date },
|
|
delivered: { type: Date },
|
|
},
|
|
});
|
|
// Middleware to set the processing date only when the invoice is created
|
|
invoiceSchema.pre("save", function (next) {
|
|
if (this.isNew && !this.courierstatus_timeline.processing) {
|
|
this.courierstatus_timeline.processing = new Date();
|
|
}
|
|
next();
|
|
});
|
|
export const InvoiceRd = mongoose.model("InvoiceRd", invoiceSchema);
|