api/resources/VisitRD&PD/VisitRD&PDController.js

111 lines
2.9 KiB
JavaScript

import VisitRDandPD from "./VisitRD&PDModel.js";
const parseDate = (dateStr) => {
const [day, month, year] = dateStr.split("/").map(Number);
return new Date(Date.UTC(year, month - 1, day));
};
// 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,
visitTime,
meetingsummary,
followup,
visitpurpose,
nextvisitdate,
} = req.body;
if (
!addedFor ||
!addedForId ||
!tradename ||
!visitDate ||
!meetingsummary
) {
return res.status(400).json({ message: "All fields are required" });
}
const parsedDate = parseDate(visitDate);
const nextvisit = parseDate(nextvisitdate);
let documents = [];
if (req.files && req.files.documents) {
const documentFiles = Array.isArray(req.files.documents)
? req.files.documents
: [req.files.documents];
for (const file of documentFiles) {
const result = await cloudinary.v2.uploader.upload(file.tempFilePath, {
folder: "chemiNova/visitdistributors",
});
documents.push({
public_id: result.public_id,
url: result.secure_url,
});
}
}
// Create a new visit record
const newVisit = new VisitRDandPD({
visitBy,
visitUserType,
addedFor,
addedForId,
tradename,
visitDate: parsedDate,
visitTime,
visitpurpose,
meetingsummary,
followup,
nextvisitdate: nextvisit,
documents,
});
// Save the visit record to the database
const savedVisit = await newVisit.save();
return res
.status(201)
.json({ message: "Visit created 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" });
}
};