Merge pull request #212 from R0m1k3/1.1

1.1
This commit is contained in:
LogiFlow authored and GitHub committed 2025-08-18 12:19:36 +02:00
commit 63ecc97318
2 files changed
+43 -6

No files matched your search

+30 -4
View File
@@ -259,20 +259,31 @@ export default function SavTickets() {
// Check permissions AFTER all hooks are called
const canView = ['admin', 'directeur', 'manager', 'employee'].includes(user?.role || '');
const canCreate = ['admin', 'directeur', 'manager'].includes(user?.role || ''); // Employee can only view
const canModify = ['admin', 'directeur', 'manager'].includes(user?.role || '');
const canDelete = ['admin', 'directeur'].includes(user?.role || '');
// Get user's available groups for auto-assignment
const getUserGroups = () => {
if (!user || user.role === 'admin') {
console.log('🎫 [CLIENT] Admin user - can access all groups:', groupsData?.length || 0);
return groupsData; // Admin can access all groups
}
// For other users, get their assigned groups
const userGroups = (user as any).userGroups || [];
return groupsData.filter(group =>
const filteredGroups = groupsData.filter(group =>
userGroups.some((ug: any) => ug.groupId === group.id)
);
console.log('🎫 [CLIENT] Non-admin user groups:', {
userRole: user.role,
userUsername: user.username,
allUserGroups: userGroups,
filteredGroups: filteredGroups.map(g => ({ id: g.id, name: g.name }))
});
return filteredGroups;
};
const availableGroups = getUserGroups();
@@ -288,12 +299,20 @@ export default function SavTickets() {
return;
}
// Auto-assign group if user has only one group or if admin didn't select one
// Auto-assign group based on user role and available groups
let selectedGroupId = formData.groupId ? parseInt(formData.groupId) : null;
console.log('🎫 [CLIENT] User groups analysis:', {
userRole: user?.role,
formDataGroupId: formData.groupId,
availableGroups: availableGroups.map(g => ({ id: g.id, name: g.name })),
selectedGroupId
});
if (!selectedGroupId && availableGroups.length > 0) {
// Auto-assign first available group
selectedGroupId = availableGroups[0].id;
console.log('🎫 [CLIENT] Auto-assigned group:', selectedGroupId, availableGroups[0].name);
}
const ticketData: InsertSavTicket = {
@@ -311,7 +330,14 @@ export default function SavTickets() {
clientPhone: formData.clientPhone || undefined,
};
console.log('Creating ticket with data:', ticketData);
console.log('🎫 [CLIENT] Creating ticket with data:', {
...ticketData,
userInfo: {
role: user?.role,
username: user?.username,
availableGroups: availableGroups.length
}
});
createTicketMutation.mutate(ticketData);
};
@@ -411,7 +437,7 @@ export default function SavTickets() {
<h1 className="text-2xl sm:text-3xl font-bold text-gray-900">Service Après-Vente</h1>
<p className="text-gray-600 mt-1">Gestion des tickets SAV et suivi des réparations</p>
</div>
{canModify && (
{canCreate && (
<Dialog open={showCreateModal} onOpenChange={setShowCreateModal}>
<DialogTrigger asChild>
<Button className="w-full sm:w-auto">
+13 -2
View File
@@ -2688,7 +2688,7 @@ RÉSUMÉ DU SCAN
return res.status(404).json({ message: "User not found" });
}
// Check permissions: admin, manager, directeur can create
// Check permissions: admin, manager, directeur can create (employee can only view)
if (!['admin', 'manager', 'directeur'].includes(user.role)) {
return res.status(403).json({ message: "Insufficient permissions to create tickets" });
}
@@ -2698,9 +2698,11 @@ RÉSUMÉ DU SCAN
if (user.role === 'admin') {
const allGroups = await storage.getGroups();
availableGroupIds = allGroups.map(g => g.id);
console.log(`🎫 [SAV] Admin ${user.username} can access all groups:`, availableGroupIds);
} else {
const userGroups = (user as any).userGroups;
availableGroupIds = userGroups ? userGroups.map((ug: any) => ug.groupId) : [];
console.log(`🎫 [SAV] User ${user.username} (${user.role}) has groups:`, availableGroupIds);
}
if (availableGroupIds.length === 0) {
@@ -2712,9 +2714,12 @@ RÉSUMÉ DU SCAN
const ticketNumber = `SAV-${now.getFullYear()}${(now.getMonth() + 1).toString().padStart(2, '0')}${now.getDate().toString().padStart(2, '0')}-${Date.now().toString().slice(-6)}`;
// Parse and validate request body
const assignedGroupId = req.body.groupId || availableGroupIds[0];
console.log(`🎫 [SAV] Creating ticket for user ${user.username} with groupId: ${assignedGroupId} (requested: ${req.body.groupId}, available: ${availableGroupIds})`);
const ticketData = insertSavTicketSchema.parse({
...req.body,
groupId: req.body.groupId || availableGroupIds[0], // Use first available group if not specified
groupId: assignedGroupId, // Use first available group if not specified
createdBy: user.id,
});
@@ -2730,6 +2735,12 @@ RÉSUMÉ DU SCAN
}
const ticket = await storage.createSavTicket(ticketDataWithNumber);
console.log(`🎫 [SAV] Ticket created successfully:`, {
ticketNumber: ticket.ticketNumber,
groupId: ticket.groupId,
createdBy: ticket.createdBy,
userRole: user.role
});
res.status(201).json(ticket);
} catch (error) {
console.error("Error creating SAV ticket:", error);