Inventory
This commit is contained in:
parent
a190789535
commit
7d83288deb
@ -4,21 +4,27 @@ import { KYC } from "../KYC/KycModel.js";
|
||||
import ShippingAddress from "../ShippingAddresses/ShippingAddressModel.js";
|
||||
import TerritoryManager from "../TerritoryManagers/TerritoryManagerModel.js";
|
||||
import SalesCoordinator from "../SalesCoOrdinators/SalesCoOrdinatorModel.js";
|
||||
import crypto from "crypto";
|
||||
// Add inventory data
|
||||
export const addInventory = async (req, res) => {
|
||||
try {
|
||||
const { products, addedFor, addedForId } = req.body;
|
||||
const userId = req.user._id;
|
||||
const userType = req.userType;
|
||||
// console.log("req.user", req.user);
|
||||
console.log("req.user", req.user);
|
||||
const currentYear = new Date().getFullYear().toString().slice(-2);
|
||||
const randomChars = crypto.randomBytes(4).toString("hex").toUpperCase();
|
||||
const uniqueId = `${currentYear}-${randomChars}`;
|
||||
// console.log("uniqueId", uniqueId);
|
||||
const newInventory = new Inventory({
|
||||
userId,
|
||||
userType,
|
||||
addedFor,
|
||||
addedForId,
|
||||
products,
|
||||
uniqueId,
|
||||
});
|
||||
|
||||
// console.log("newInventory", newInventory);
|
||||
await newInventory.save();
|
||||
res.status(201).json({
|
||||
success: true,
|
||||
@ -40,19 +46,25 @@ export const getDistributors = async (req, res) => {
|
||||
}
|
||||
|
||||
let distributors;
|
||||
// console.log("type",type);
|
||||
// console.log("type",type);
|
||||
if (type === "PrincipalDistributor") {
|
||||
// Fetch all PrincipalDistributors
|
||||
const principalDistributors = await User.find({ role: "principal-Distributor" });
|
||||
// console.log("principalDistributors",principalDistributors);
|
||||
const principalDistributors = await User.find({
|
||||
role: "principal-Distributor",
|
||||
});
|
||||
// console.log("principalDistributors",principalDistributors);
|
||||
// Map each PrincipalDistributor to include their ShippingAddress
|
||||
distributors = await Promise.all(principalDistributors.map(async (distributor) => {
|
||||
const shippingAddress = await ShippingAddress.findOne({ user: distributor._id });
|
||||
distributors = await Promise.all(
|
||||
principalDistributors.map(async (distributor) => {
|
||||
const shippingAddress = await ShippingAddress.findOne({
|
||||
user: distributor._id,
|
||||
});
|
||||
return {
|
||||
...distributor.toObject(),
|
||||
shippingAddress,
|
||||
};
|
||||
}));
|
||||
})
|
||||
);
|
||||
} else {
|
||||
// For RetailDistributor, fetch approved KYC documents
|
||||
distributors = await KYC.find({ status: "approved" });
|
||||
@ -66,12 +78,7 @@ export const getDistributors = async (req, res) => {
|
||||
|
||||
export const getAllInventories = async (req, res) => {
|
||||
try {
|
||||
const {
|
||||
page = 1,
|
||||
show = 10,
|
||||
startDate,
|
||||
endDate
|
||||
} = req.query;
|
||||
const { page = 1, show = 10, startDate, endDate } = req.query;
|
||||
|
||||
// Build query
|
||||
const query = {};
|
||||
@ -84,25 +91,25 @@ export const getAllInventories = async (req, res) => {
|
||||
// If startDate and endDate are the same, fetch records for that day
|
||||
query.createdAt = {
|
||||
$gte: new Date(startDate),
|
||||
$lt: new Date(startDate).setDate(new Date(startDate).getDate() + 1) // Until the end of that day
|
||||
$lt: new Date(startDate).setDate(new Date(startDate).getDate() + 1), // Until the end of that day
|
||||
};
|
||||
} else {
|
||||
// If startDate and endDate are different, fetch records between these dates
|
||||
query.createdAt = {
|
||||
$gte: start,
|
||||
$lte:new Date(end).setDate(new Date(end).getDate() + 1)
|
||||
$lte: new Date(end).setDate(new Date(end).getDate() + 1),
|
||||
};
|
||||
}
|
||||
} else if (startDate) {
|
||||
// Only startDate is provided
|
||||
query.createdAt = {
|
||||
$gte: new Date(startDate),
|
||||
$lte: new Date() // Up to today's date
|
||||
$lte: new Date(), // Up to today's date
|
||||
};
|
||||
} else if (endDate) {
|
||||
// Only endDate is provided
|
||||
query.createdAt = {
|
||||
$lte: new Date(endDate)
|
||||
$lte: new Date(endDate),
|
||||
};
|
||||
}
|
||||
|
||||
@ -116,25 +123,28 @@ export const getAllInventories = async (req, res) => {
|
||||
.sort({ createdAt: -1 }); // Optional: Sort by createdAt date in descending order
|
||||
|
||||
// Populate additional details
|
||||
const populatedInventories = await Promise.all(inventories.map(async (inventory) => {
|
||||
const populatedInventories = await Promise.all(
|
||||
inventories.map(async (inventory) => {
|
||||
// Populate user details based on userType
|
||||
let user = null;
|
||||
if (inventory.userType === 'TerritoryManager') {
|
||||
if (inventory.userType === "TerritoryManager") {
|
||||
user = await TerritoryManager.findById(inventory.userId);
|
||||
} else if (inventory.userType === 'SalesCoordinator') {
|
||||
} else if (inventory.userType === "SalesCoordinator") {
|
||||
user = await SalesCoordinator.findById(inventory.userId);
|
||||
}
|
||||
|
||||
// Populate addedFor details based on addedFor
|
||||
let addedForData = null;
|
||||
if (inventory.addedFor === 'PrincipalDistributor') {
|
||||
if (inventory.addedFor === "PrincipalDistributor") {
|
||||
addedForData = await User.findById(inventory.addedForId);
|
||||
const shippingAddress = await ShippingAddress.findOne({ user: addedForData._id });
|
||||
const shippingAddress = await ShippingAddress.findOne({
|
||||
user: addedForData._id,
|
||||
});
|
||||
addedForData = {
|
||||
...addedForData.toObject(),
|
||||
shippingAddress,
|
||||
};
|
||||
} else if (inventory.addedFor === 'RetailDistributor') {
|
||||
} else if (inventory.addedFor === "RetailDistributor") {
|
||||
addedForData = await KYC.findById(inventory.addedForId);
|
||||
}
|
||||
return {
|
||||
@ -142,12 +152,13 @@ export const getAllInventories = async (req, res) => {
|
||||
user,
|
||||
addedForData,
|
||||
};
|
||||
}));
|
||||
})
|
||||
);
|
||||
|
||||
// Send response with pagination info
|
||||
res.status(200).json({
|
||||
total_data,
|
||||
inventories: populatedInventories
|
||||
inventories: populatedInventories,
|
||||
});
|
||||
} catch (error) {
|
||||
res.status(500).json({ message: error.message });
|
||||
@ -165,22 +176,24 @@ export const getSingleInventory = async (req, res) => {
|
||||
|
||||
// Populate user details based on userType
|
||||
let user = null;
|
||||
if (inventory.userType === 'TerritoryManager') {
|
||||
if (inventory.userType === "TerritoryManager") {
|
||||
user = await TerritoryManager.findById(inventory.userId);
|
||||
} else if (inventory.userType === 'SalesCoOrdinator') {
|
||||
} else if (inventory.userType === "SalesCoOrdinator") {
|
||||
user = await SalesCoordinator.findById(inventory.userId);
|
||||
}
|
||||
|
||||
// Populate addedFor details based on addedFor
|
||||
let addedForData = null;
|
||||
if (inventory.addedFor === 'PrincipalDistributor') {
|
||||
if (inventory.addedFor === "PrincipalDistributor") {
|
||||
addedForData = await User.findById(inventory.addedForId);
|
||||
const shippingAddress = await ShippingAddress.findOne({ user: addedForData._id });
|
||||
const shippingAddress = await ShippingAddress.findOne({
|
||||
user: addedForData._id,
|
||||
});
|
||||
addedForData = {
|
||||
...addedForData.toObject(),
|
||||
shippingAddress,
|
||||
};
|
||||
} else if (inventory.addedFor === 'RetailDistributor') {
|
||||
} else if (inventory.addedFor === "RetailDistributor") {
|
||||
addedForData = await KYC.findById(inventory.addedForId);
|
||||
}
|
||||
|
||||
@ -193,4 +206,3 @@ export const getSingleInventory = async (req, res) => {
|
||||
res.status(500).json({ message: error.message });
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -22,6 +22,11 @@ const ProductRecordSchema = new mongoose.Schema({
|
||||
|
||||
// Define main Inventory schema
|
||||
const InventorySchema = new mongoose.Schema({
|
||||
uniqueId: {
|
||||
type: String,
|
||||
required: true,
|
||||
unique: true,
|
||||
},
|
||||
userId: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
refPath: 'userType',
|
||||
|
Loading…
Reference in New Issue
Block a user