quote accept by store

master^2
Varun 8 months ago
parent a9b702970e
commit 5ff84502d0

@ -11,7 +11,7 @@ const fastify = require("fastify")({
}, },
}); });
const {Order,Iotprice, Install, ProfilePictureInstall, SensorQuotation,generateinstallationId,Store,WaterLeverSensor,MotorSwitchSenso,Insensors,generatequatationId, HardwareCart, ServiceCart, Sales} = require("../models/store"); const {Order,EstimationOrder,Iotprice, Install, ProfilePictureInstall, SensorQuotation,generateinstallationId,Store,WaterLeverSensor,MotorSwitchSenso,Insensors,generatequatationId, HardwareCart, ServiceCart, Sales} = require("../models/store");
const { User,Counter, generateBookingId,resetCounter,generateCustomerId,ProfilePicture} = require('../models/User') const { User,Counter, generateBookingId,resetCounter,generateCustomerId,ProfilePicture} = require('../models/User')
@ -1695,7 +1695,7 @@ exports.getallquotationdata = async (req, reply) => {
return acc; return acc;
}, {}); }, {});
// Attach customer details to quotations // Attach customer details to quotations
const enrichedQuotations = quotations.map((quotation) => ({ const enrichedQuotations = quotations.map((quotation) => ({
...quotation, ...quotation,
@ -1711,6 +1711,8 @@ exports.getallquotationdata = async (req, reply) => {
exports.saveQuotationData = async (req, reply) => { exports.saveQuotationData = async (req, reply) => {
try { try {
const { quotationId } = req.params; // Retrieve the quotationId from the request parameters const { quotationId } = req.params; // Retrieve the quotationId from the request parameters
@ -1918,7 +1920,7 @@ exports.handleEstimation = async (req, reply) => {
} }
// If accepted, generate unique Order ID // If accepted, generate unique Order ID
const lastOrder = await Order.findOne().sort({ createdAt: -1 }); const lastOrder = await EstimationOrder.findOne().sort({ createdAt: -1 });
let orderId = "AWS001"; let orderId = "AWS001";
if (lastOrder) { if (lastOrder) {
const lastNumber = parseInt(lastOrder.orderId.replace("AWS", ""), 10) + 1; const lastNumber = parseInt(lastOrder.orderId.replace("AWS", ""), 10) + 1;
@ -1926,7 +1928,7 @@ exports.handleEstimation = async (req, reply) => {
} }
// Create a new order in the database // Create a new order in the database
const newOrder = new Order({ const newOrder = new EstimationOrder({
orderId, orderId,
customerId, customerId,
items, items,
@ -1960,7 +1962,7 @@ exports.editOrder = async (req, reply) => {
} }
// Find the existing order // Find the existing order
const existingOrder = await Order.findOne({ orderId }); const existingOrder = await EstimationOrder.findOne({ orderId });
if (!existingOrder) { if (!existingOrder) {
return reply.code(404).send({ message: "Order not found" }); return reply.code(404).send({ message: "Order not found" });
@ -1995,7 +1997,7 @@ exports.getOrdersByCustomer = async (req, reply) => {
} }
// Fetch orders with status 'pending' or 'accepted' for the given customer // Fetch orders with status 'pending' or 'accepted' for the given customer
const orders = await Order.find({ const orders = await EstimationOrder.find({
customerId, customerId,
status: { $in: ["pending", "accepted"] } status: { $in: ["pending", "accepted"] }
}); });
@ -2016,3 +2018,42 @@ exports.getOrdersByCustomer = async (req, reply) => {
} }
}; };
exports.acceptQuotation = async (req, reply) => {
try {
const { quotationId } = req.params;
const { action } = req.body;
if (action !== "accept") {
return reply.status(400).send({ error: "Invalid action" });
}
// Find the quotation by ID
const quotation = await SensorQuotation.findOne({ quatationId: quotationId });
if (!quotation) {
return reply.status(404).send({ error: "Quotation not found" });
}
// Convert quotation to an order object
const newOrder = new Order({
...quotation.toObject(), // Copy all fields
status: "pending", // Set status to "pending"
});
// Save to the Orders collection
await newOrder.save();
// Delete the record from SensorQuotation
await SensorQuotation.deleteOne({ quatationId: quotationId });
return reply.send({
status_code: 200,
message: "Quotation accepted and moved to Orders",
data: newOrder,
});
} catch (err) {
console.error("Error accepting quotation:", err);
return reply.status(500).send({ error: "Internal server error" });
}
};

@ -370,7 +370,7 @@ const iotpriceSchema = new mongoose.Schema({
cost: { type: Number, default: null }, cost: { type: Number, default: null },
}); });
const orderSchema = new mongoose.Schema({ const estimationorderSchema = new mongoose.Schema({
orderId: { type: String, unique: true, required: true }, orderId: { type: String, unique: true, required: true },
customerId: { type: String, required: true }, customerId: { type: String, required: true },
items: { type: Array, required: true }, items: { type: Array, required: true },
@ -382,6 +382,7 @@ const orderSchema = new mongoose.Schema({
const sensorquotationSchema = new mongoose.Schema({ const sensorquotationSchema = new mongoose.Schema({
customerId: { type: String }, customerId: { type: String },
surveyId: { type: String, default: null }, surveyId: { type: String, default: null },
storeId: { type: String, default: null },
installationId: { type: String, default: null }, installationId: { type: String, default: null },
quatationId: { type: String, default: null }, quatationId: { type: String, default: null },
masters: { type: String }, masters: { type: String },
@ -405,9 +406,13 @@ const sensorquotationSchema = new mongoose.Schema({
wire: { type: String, default: null }, wire: { type: String, default: null },
switch: { type: String, default: null }, switch: { type: String, default: null },
text: { type: String, default: null }, text: { type: String, default: null },
available_quantity: { type: String, default: null },
}, },
], ],
master_type_quantity_price: { type: String, default: null }, master_type_quantity_price: { type: String, default: null },
master_available_quantity: { type: String, default: null },
slave_available_quantity: { type: String, default: null },
sensor_available_quantity: { type: String, default: null },
master_type_total_price: { type: String, default: null }, master_type_total_price: { type: String, default: null },
sensor_type_quantity_price: { type: String , default: null}, sensor_type_quantity_price: { type: String , default: null},
sensor_type_total_price: { type: String , default: null}, sensor_type_total_price: { type: String , default: null},
@ -416,6 +421,56 @@ const sensorquotationSchema = new mongoose.Schema({
qutation_total_price: { type: String, default: null }, qutation_total_price: { type: String, default: null },
}); });
const orderSchema = new mongoose.Schema({
customerId: { type: String },
surveyId: { type: String, default: null },
storeId: { type: String, default: null },
installationId: { type: String, default: null },
quatationId: { type: String, default: null },
masters: { type: String },
masters_quantity_price: { type: String },
masters_total_price: { type: String },
slaves: { type: String },
sensors: { type: String },
slaves_quantity_price: { type: String },
slaves_total_price: { type: String },
motor_switches: { type: String },
motor_switches_quantity_price: { type: String },
motor_switches_total_price: { type: String },
quote_status: { type: String, default: null },
quoted_amount: { type: String, default: null },
comments: { type: String, default: null },
datetime: { type: String, default: null },
updated_at: { type: String, default: null },
electricals: [
{
type: { type: String, default: null },
wire: { type: String, default: null },
switch: { type: String, default: null },
text: { type: String, default: null },
available_quantity: { type: String, default: null },
},
],
master_type_quantity_price: { type: String, default: null },
master_available_quantity: { type: String, default: null },
slave_available_quantity: { type: String, default: null },
sensor_available_quantity: { type: String, default: null },
master_type_total_price: { type: String, default: null },
sensor_type_quantity_price: { type: String, default: null },
sensor_type_total_price: { type: String, default: null },
switch_type_quantity_price: { type: String, default: null },
switch_type_total_price: { type: String, default: null },
qutation_total_price: { type: String, default: null },
status: { type: String, default: "pending" }, // Status field added
});
const hardwareCartSchema = new mongoose.Schema({ const hardwareCartSchema = new mongoose.Schema({
productId: { type: String}, productId: { type: String},
productName: { type: String }, productName: { type: String },
@ -510,7 +565,9 @@ const salesSchema = new mongoose.Schema({
const Iotprice = mongoose.model('Iotprice', iotpriceSchema); const Iotprice = mongoose.model('Iotprice', iotpriceSchema);
const Insensors = mongoose.model('Insensors', insensorsSchema); const Insensors = mongoose.model('Insensors', insensorsSchema);
const Order = mongoose.model('Orders', orderSchema); const Order = mongoose.model('Order', orderSchema);
const EstimationOrder = mongoose.model('EstimationOrder', estimationorderSchema);
const Store = mongoose.model("Store", storeSchema); const Store = mongoose.model("Store", storeSchema);
const WaterLeverSensor = mongoose.model('WaterLeverSensor', waterLeverSensorInSchema); const WaterLeverSensor = mongoose.model('WaterLeverSensor', waterLeverSensorInSchema);
const ProfilePictureStore = mongoose.model('ProfilePictureStore', profilePictureStoreSchema); const ProfilePictureStore = mongoose.model('ProfilePictureStore', profilePictureStoreSchema);
@ -527,4 +584,4 @@ const Iotprice = mongoose.model('Iotprice', iotpriceSchema);
module.exports = {Order,Iotprice,Sales, Install,Survey, ProfilePictureInstall, SensorQuotation,generateinstallationId,Store,ProfilePictureStore,WaterLeverSensor,MotorSwitchSensor,Insensors,generatequatationId, HardwareCart, ServiceCart}; module.exports = {Order,EstimationOrder,Iotprice,Sales, Install,Survey, ProfilePictureInstall, SensorQuotation,generateinstallationId,Store,ProfilePictureStore,WaterLeverSensor,MotorSwitchSensor,Insensors,generatequatationId, HardwareCart, ServiceCart};

@ -1654,5 +1654,34 @@ fastify.post("/api/cart/installationService", {
}, },
handler: storeController.addToCartService handler: storeController.addToCartService
}); });
fastify.post("/api/acceptquotation/:quotationId", {
schema: {
tags: ["Install"],
description: "Accepts a quotation and moves it to the Orders database",
summary: "Accepts a quotation",
params: {
type: "object",
properties: {
quotationId: { type: "string" },
},
},
body: {
type: "object",
properties: {
action: { type: "string" },
},
required: ["action"],
},
security: [
{
basicAuth: [],
},
],
},
// preHandler: fastify.auth([fastify.authenticate]), // Uncomment if authentication is needed
handler: storeController.acceptQuotation,
});
next(); next();
}; };

Loading…
Cancel
Save