From 110e586692d787b951308214bafe5b6641b9e883 Mon Sep 17 00:00:00 2001 From: Sibunnayak Date: Wed, 18 Sep 2024 20:13:04 +0530 Subject: [PATCH] visit rd and pd stored in database --- app.js | 4 ++ resources/VisitRD&PD/VisitRD&PDController.js | 59 ++++++++++++++++++++ resources/VisitRD&PD/VisitRD&PDModel.js | 44 +++++++++++++++ resources/VisitRD&PD/VisitRD&PDRoute.js | 25 +++++++++ 4 files changed, 132 insertions(+) create mode 100644 resources/VisitRD&PD/VisitRD&PDController.js create mode 100644 resources/VisitRD&PD/VisitRD&PDModel.js create mode 100644 resources/VisitRD&PD/VisitRD&PDRoute.js diff --git a/app.js b/app.js index 429b1ba..f472546 100644 --- a/app.js +++ b/app.js @@ -198,6 +198,8 @@ import SalesRoute from "./resources/Sales/SalesRoute.js"; import PdOrderRoute from './resources/PD_Orders/pdOrderRoute.js' import TaskRoute from "./resources/Task/TaskRoute.js"; +// visit RD and PD +import VisitRDandPDRoute from "./resources/VisitRD&PD/VisitRD&PDRoute.js"; app.use("/api/v1", user); //Product @@ -276,6 +278,8 @@ app.use("/api/sales", SalesRoute); app.use("/api/task", TaskRoute); // RD Rotuts app.use("/api",RDRoute) +// visit RD and PD +app.use("/api", VisitRDandPDRoute); //config specialty // app.use("/api/config/specialty", SpecialtiesRouter); //specialties diff --git a/resources/VisitRD&PD/VisitRD&PDController.js b/resources/VisitRD&PD/VisitRD&PDController.js new file mode 100644 index 0000000..ad2aab6 --- /dev/null +++ b/resources/VisitRD&PD/VisitRD&PDController.js @@ -0,0 +1,59 @@ +import VisitRDandPD from './VisitRD&PDModel.js'; + +// Controller for creating a visit record +export const createVisit = async (req, res) => { + try { + const visitBy = req.user._id; + const visitUserType = req.userType; + const { addedFor, addedForId, tradename, visitDate, note } = req.body; + if (!addedFor || !addedForId || !tradename || !visitDate) { + return res.status(400).json({ message: 'All fields are required' }); + } + + // Create a new visit record + const newVisit = new VisitRDandPD({ + visitBy, + visitUserType, + addedFor, + addedForId, + tradename, + visitDate, + note, + }); + + // Save the visit record to the database + const savedVisit = await newVisit.save(); + + return res.status(201).json({ message: 'Visit done successfully', visit: savedVisit }); + } catch (error) { + console.error(error); + return res.status(500).json({ message: 'Server error' }); + } +}; + +// Controller for fetching all visits for a specific distributor (RD or PD) +export const getVisitsByDistributor = async (req, res) => { + try { + const { distributorId, distributorType } = req.params; + + // Validate distributor type + if (!['RetailDistributor', 'PrincipalDistributor'].includes(distributorType)) { + return res.status(400).json({ message: 'Invalid distributor type' }); + } + + // Find all visits for the specified distributor + const visits = await VisitRDandPD.find({ + addedFor: distributorType, + addedForId: distributorId, + }).populate('visitBy', 'name email'); // Populating visitBy with user details + + if (!visits.length) { + return res.status(404).json({ message: 'No visits found for this distributor' }); + } + + return res.status(200).json({ visits }); + } catch (error) { + console.error(error); + return res.status(500).json({ message: 'Server error' }); + } +}; \ No newline at end of file diff --git a/resources/VisitRD&PD/VisitRD&PDModel.js b/resources/VisitRD&PD/VisitRD&PDModel.js new file mode 100644 index 0000000..c57fa22 --- /dev/null +++ b/resources/VisitRD&PD/VisitRD&PDModel.js @@ -0,0 +1,44 @@ +import dotenv from "dotenv"; +dotenv.config(); +import mongoose from "mongoose"; + +const VisitSchema = new mongoose.Schema( + { + visitBy: { + type: mongoose.Schema.Types.ObjectId, + refPath: "userType", + required: true, + }, + visitUserType: { + type: String, + required: true, + enum: ['SalesCoOrdinator', 'TerritoryManager'], + }, + addedFor: { + type: String, + enum: ["PrincipalDistributor", "RetailDistributor"], + required: true, + }, + addedForId: { + type: mongoose.Schema.Types.ObjectId, + refPath: "addedFor", + required: true, + }, + tradename: { + type: String, + required: true, + }, + visitDate: { + type: Date, + required: true, + }, + note: { + type: String, + }, + }, + { timestamps: true } +); + +const VisitRDandPD = mongoose.model("Visit", VisitSchema); + +export default VisitRDandPD; diff --git a/resources/VisitRD&PD/VisitRD&PDRoute.js b/resources/VisitRD&PD/VisitRD&PDRoute.js new file mode 100644 index 0000000..e1f372a --- /dev/null +++ b/resources/VisitRD&PD/VisitRD&PDRoute.js @@ -0,0 +1,25 @@ +import express from "express"; +import { + createVisit, + getVisitsByDistributor, +} +from "./VisitRD&PDController.js"; +import { + isAuthenticated_SC_TM +} from "../../middlewares/generalAuth.js"; + +const router = express.Router(); + +router.post( + "/visit", + isAuthenticated_SC_TM, + createVisit +); + +router.get( + "/visit/:distributorType/:distributorId", + isAuthenticated_SC_TM, + getVisitsByDistributor +); + +export default router; \ No newline at end of file