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' }); } };