185 lines
4.0 KiB
JavaScript
185 lines
4.0 KiB
JavaScript
const { Outlet, User, Resignation } = require('../models');
|
|
|
|
// Get all outlets for logged-in dealer
|
|
exports.getOutlets = async (req, res) => {
|
|
try {
|
|
const where = {};
|
|
if (req.user.role === 'Dealer') {
|
|
where.dealerId = req.user.id;
|
|
}
|
|
|
|
const outlets = await Outlet.findAll({
|
|
where,
|
|
include: [
|
|
{
|
|
model: User,
|
|
as: 'dealer',
|
|
attributes: ['name', 'email']
|
|
},
|
|
{
|
|
model: Resignation,
|
|
as: 'resignations',
|
|
required: false,
|
|
where: {
|
|
status: { [Op.notIn]: ['Completed', 'Rejected'] }
|
|
}
|
|
}
|
|
],
|
|
order: [['createdAt', 'DESC']]
|
|
});
|
|
|
|
res.json({
|
|
success: true,
|
|
outlets
|
|
});
|
|
} catch (error) {
|
|
console.error('Get outlets error:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: 'Error fetching outlets'
|
|
});
|
|
}
|
|
};
|
|
|
|
// Get specific outlet details
|
|
exports.getOutletById = async (req, res) => {
|
|
try {
|
|
const { id } = req.params;
|
|
|
|
const outlet = await Outlet.findByPk(id, {
|
|
include: [{
|
|
model: User,
|
|
as: 'dealer',
|
|
attributes: ['name', 'email', 'phone']
|
|
}]
|
|
});
|
|
|
|
if (!outlet) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: 'Outlet not found'
|
|
});
|
|
}
|
|
|
|
// Check if dealer can access this outlet
|
|
if (req.user.role === 'Dealer' && outlet.dealerId !== req.user.id) {
|
|
return res.status(403).json({
|
|
success: false,
|
|
message: 'Access denied'
|
|
});
|
|
}
|
|
|
|
res.json({
|
|
success: true,
|
|
outlet
|
|
});
|
|
} catch (error) {
|
|
console.error('Get outlet error:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: 'Error fetching outlet'
|
|
});
|
|
}
|
|
};
|
|
|
|
// Create new outlet (admin only)
|
|
exports.createOutlet = async (req, res) => {
|
|
try {
|
|
const {
|
|
dealerId,
|
|
code,
|
|
name,
|
|
type,
|
|
address,
|
|
city,
|
|
state,
|
|
pincode,
|
|
establishedDate,
|
|
latitude,
|
|
longitude
|
|
} = req.body;
|
|
|
|
// Validate required fields
|
|
if (!dealerId || !code || !name || !type || !address || !city || !state) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: 'Missing required fields'
|
|
});
|
|
}
|
|
|
|
// Check if code already exists
|
|
const existing = await Outlet.findOne({ where: { code } });
|
|
if (existing) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: 'Outlet code already exists'
|
|
});
|
|
}
|
|
|
|
const outlet = await Outlet.create({
|
|
dealerId,
|
|
code,
|
|
name,
|
|
type,
|
|
address,
|
|
city,
|
|
state,
|
|
pincode,
|
|
establishedDate,
|
|
latitude,
|
|
longitude
|
|
});
|
|
|
|
res.status(201).json({
|
|
success: true,
|
|
message: 'Outlet created successfully',
|
|
outletId: outlet.id
|
|
});
|
|
} catch (error) {
|
|
console.error('Create outlet error:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: 'Error creating outlet'
|
|
});
|
|
}
|
|
};
|
|
|
|
// Update outlet
|
|
exports.updateOutlet = async (req, res) => {
|
|
try {
|
|
const { id } = req.params;
|
|
const { name, address, city, state, pincode, status, latitude, longitude } = req.body;
|
|
|
|
const outlet = await Outlet.findByPk(id);
|
|
if (!outlet) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: 'Outlet not found'
|
|
});
|
|
}
|
|
|
|
await outlet.update({
|
|
name: name || outlet.name,
|
|
address: address || outlet.address,
|
|
city: city || outlet.city,
|
|
state: state || outlet.state,
|
|
pincode: pincode || outlet.pincode,
|
|
status: status || outlet.status,
|
|
latitude: latitude || outlet.latitude,
|
|
longitude: longitude || outlet.longitude,
|
|
updatedAt: new Date()
|
|
});
|
|
|
|
res.json({
|
|
success: true,
|
|
message: 'Outlet updated successfully'
|
|
});
|
|
} catch (error) {
|
|
console.error('Update outlet error:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: 'Error updating outlet'
|
|
});
|
|
}
|
|
};
|