Parcourir la source

(fix) liste des employés d'une compagnie

Brin AMONKONAN il y a 1 an
Parent
commit
7134724135

+ 1 - 1
app_transport_front/src/components/PaginationComponent.vue

@@ -70,7 +70,7 @@
 import { computed } from 'vue'
 
 // Props
-interface PaginationData {
+export interface PaginationData {
   total: number
   page: number
   limit: number

+ 13 - 26
app_transport_front/src/services/CompanyService.ts

@@ -43,6 +43,19 @@ export default {
     }
   },
 
+  async getCompanyEmployees(id: number): Promise<any[]> {
+    try {
+      const response = await authenticatedFetch(`${API_URL}/companies/${id}/employees`)
+      if (!response.ok) {
+        throw new Error('Erreur lors de la récupération des employés de l\'entreprise')
+      }
+      return await response.json()
+    } catch (error) {
+      console.error('Erreur:', error)
+      return []
+    }
+  },
+
   async createCompany(company: Omit<Company, 'id'>): Promise<Company | null> {
     try {
       const response = await authenticatedFetch(`${API_URL}/companies`, {
@@ -124,31 +137,5 @@ export default {
       console.error('Erreur:', error)
       return []
     }
-  },
-
-  async getCompanyEmployees(id: number, page: number = 1, limit: number = 10): Promise<{ employees: any[], pagination: { total: number, page: number, limit: number, totalPages: number } }> {
-    try {
-      const response = await authenticatedFetch(`${API_URL}/companies/${id}/employees?page=${page}&limit=${limit}`)
-      if (!response.ok) {
-        throw new Error('Erreur lors de la récupération des employés de l\'entreprise')
-      }
-      const result = await response.json()
-      // Adapter la structure de réponse
-      return {
-        employees: result.data?.data || [],
-        pagination: {
-          total: result.data?.total || 0,
-          page: result.data?.page || 1,
-          limit: result.data?.limit || 10,
-          totalPages: result.data?.totalPages || 1
-        }
-      }
-    } catch (error) {
-      console.error('Erreur:', error)
-      return {
-        employees: [],
-        pagination: { total: 0, page: 1, limit: 10, totalPages: 1 }
-      }
-    }
   }
 }

+ 1 - 5
app_transport_front/src/stores/useUserStore.ts

@@ -11,7 +11,6 @@ export const useUserStore = defineStore('user', {
     telephone: null as string | null,
     name: null as string | null,
     otherName: null as string | null,
-    companyId: null as string | null,
   }),
   actions: {
     setUser(data: { 
@@ -22,8 +21,7 @@ export const useUserStore = defineStore('user', {
       email: string, 
       telephone: string, 
       name: string, 
-      otherName: string,
-      companyId?: string 
+      otherName: string 
     }) {
       this.token = data.token
       this.userId = data.userId
@@ -33,8 +31,6 @@ export const useUserStore = defineStore('user', {
       this.telephone = data.telephone
       this.name = data.name
       this.otherName = data.otherName
-      this.companyId = data.companyId || null
-      console.log('companyId:', data)
     },
     clearUser() {
       this.$reset()

+ 59 - 35
app_transport_front/src/views/EmployeeView.vue

@@ -234,13 +234,13 @@ import { ref, computed, onMounted } from 'vue'
 import Sidebar from '@/components/Sidebar.vue'
 import TopBar from '@/components/TopBar.vue'
 import { useUserStore } from '@/stores/useUserStore'
+import { useUserCompanyStore } from '@/stores/useCompanyStore'
 import EmployeeModal from '@/components/EmployeeModal.vue'
 import { useToast } from '@/composables/useToast'
 import UserService from '@/services/UserService'
-import CompanyService from '@/services/CompanyService'
 import type { User } from '@/types/index'
 import { Role, RoleLabel } from '@/Enum/Role'
-import { useUserCompanyStore } from '@/stores/useCompanyStore'
+import CompanyService from '@/services/CompanyService'
 
 interface Employee extends User {
   firstName?: string
@@ -282,35 +282,6 @@ const availableRoles = computed(() => {
   }))
 })
 
-// Employés filtrés
-const filteredEmployees = computed(() => {
-  return employees.value.filter(employee => {
-    // Filtre de recherche
-    const searchLower = searchQuery.value.toLowerCase()
-    const fullName = getEmployeeFullName(employee).toLowerCase()
-    const emailMatch = employee.email.toLowerCase().includes(searchLower)
-    const phoneMatch = (employee.telephone || employee.phone || '').toLowerCase().includes(searchLower)
-    
-    if (searchQuery.value && !fullName.includes(searchLower) && !emailMatch && !phoneMatch) {
-      return false
-    }
-    
-    // Filtre par rôle
-    if (roleFilter.value && employee.role !== roleFilter.value) {
-      return false
-    }
-    
-    // Filtre par statut
-    if (statusFilter.value === 'active' && employee.active === false) {
-      return false
-    }
-    if (statusFilter.value === 'inactive' && employee.active !== false) {
-      return false
-    }
-    
-    return true
-  })
-})
 
 // Fonctions utilitaires
 const getRoleLabel = (role: Role | string): string => {
@@ -338,15 +309,37 @@ const formatDate = (dateString?: string): string => {
 // Gestion des employés
 const loadEmployees = async (page: number = 1) => {
   try {
+    if (useUserStore().userRole !== Role.Admin) {
+      const result = await CompanyService.getCompanyEmployees(useUserCompanyStore().id as number)
+       
+      employees.value = result.data.data.map(user => ({
+        firstName: user.otherName,
+        lastName: user.name,
+        phone: user.telephone,
+        email: user.email,
+        role: user.role
+      }))
+      
+      pagination.value = {
+        page: result.data.page,
+        limit: result.data.limit,
+        total: result.data.total,
+        totalPages: result.data.totalPages
+      }
+
+      return 
+    }
+
     loading.value = true
+    const result = await UserService.getUsers(page, pagination.value.limit)
     
-    const result = await CompanyService.getCompanyEmployees(useUserCompanyStore().id, page, pagination.value.limit)
-    
-    employees.value = result.employees.map(user => ({
+    employees.value = result.users.map(user => ({
       ...user,
       firstName: user.otherName,
       lastName: user.name,
-      phone: user.telephone
+      phone: user.telephone,
+      email: user.email,
+      role: user.role
     }))
     
     pagination.value = result.pagination
@@ -357,6 +350,37 @@ const loadEmployees = async (page: number = 1) => {
     loading.value = false
   }
 }
+// Employés filtrés
+const filteredEmployees = computed(() => {
+ console.log('employee', employees.value)
+  return employees.value.filter(employee => {
+    
+    // Filtre de recherche
+    const searchLower = searchQuery.value.toLowerCase()
+    const fullName = getEmployeeFullName(employee).toLowerCase()
+    const emailMatch = employee.email.toLowerCase().includes(searchLower)
+    const phoneMatch = (employee.telephone || employee.phone || '').toLowerCase().includes(searchLower)
+    
+    if (searchQuery.value && !fullName.includes(searchLower) && !emailMatch && !phoneMatch) {
+      return false
+    }
+    
+    // Filtre par rôle
+    if (roleFilter.value && employee.role !== roleFilter.value) {
+      return false
+    }
+    
+    // Filtre par statut
+    if (statusFilter.value === 'active' && employee.active === false) {
+      return false
+    }
+    if (statusFilter.value === 'inactive' && employee.active !== false) {
+      return false
+    }
+    
+    return true
+  })
+})
 
 const viewEmployee = (employee: Employee) => {
   viewingEmployee.value = employee

+ 0 - 2
node_app/src/infrastructure/mappers/user.mapper.ts

@@ -14,7 +14,6 @@ export class UserMapper implements IPrismaMapper<PrismaUser, User> {
       address: prismaUser.address || undefined,
       telephone: prismaUser.telephone || undefined,
       role: prismaUser.role ? (prismaUser.role as UserRole) : undefined,
-      companyId: prismaUser.companyId || undefined,
     });
   }
 
@@ -28,7 +27,6 @@ export class UserMapper implements IPrismaMapper<PrismaUser, User> {
       address: user.address || '',
       telephone: user.telephone || '',
       role: user.role || '',
-      companyId: user.companyId || null,
     };
   }