111 lines
2.9 KiB
JavaScript
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" });
|
|
}
|
|
};
|