- Mettre à jour les informations des employés : Ajouter une méthode pour mettre à jour les informations des employés.
- Supprimer un employé : Ajouter une méthode pour supprimer un employé du système.
- Calculer la durée d’emploi : Ajouter une méthode pour calculer la durée d’emploi d’un employé.
- Filtrer les employés par ancienneté : Ajouter une méthode pour obtenir une liste des employés en fonction de leur ancienneté.
- Générer des rapports : Ajouter une méthode pour générer des rapports sur les employés et les départements.
Voici le code mis à jour avec ces fonctionnalités supplémentaires :
# Importation des bibliothèques nécessaires
import datetime
from collections import defaultdict
class HRSystem:
def __init__(self):
self.employees = {} # Dictionnaire pour stocker les employés
self.departments = defaultdict(list) # Dictionnaire avec des listes pour stocker les départements
def add_employee(self, employee_id, name, department, job_title, hire_date):
"""Ajoute un nouvel employé au système"""
if employee_id not in self.employees:
self.employees[employee_id] = {
"name": name,
"department": department,
"job_title": job_title,
"hire_date": datetime.date.fromisoformat(hire_date)
}
self.departments[department].append(employee_id)
def get_employee(self, employee_id):
"""Renvoie les informations d'un employé"""
return self.employees.get(employee_id, None)
def update_employee(self, employee_id, name=None, department=None, job_title=None, hire_date=None):
"""Met à jour les informations d'un employé"""
if employee_id in self.employees:
if name:
self.employees[employee_id]['name'] = name
if department:
old_department = self.employees[employee_id]['department']
self.departments[old_department].remove(employee_id)
self.employees[employee_id]['department'] = department
self.departments[department].append(employee_id)
if job_title:
self.employees[employee_id]['job_title'] = job_title
if hire_date:
self.employees[employee_id]['hire_date'] = datetime.date.fromisoformat(hire_date)
def remove_employee(self, employee_id):
"""Supprime un employé du système"""
if employee_id in self.employees:
department = self.employees[employee_id]['department']
self.departments[department].remove(employee_id)
del self.employees[employee_id]
def get_department_employees(self, department):
"""Renvoie la liste des employés dans un département"""
return [self.get_employee(employee_id) for employee_id in self.departments[department]]
def calculate_employment_duration(self, employee_id):
"""Calcule la durée d'emploi d'un employé"""
if employee_id in self.employees:
hire_date = self.employees[employee_id]['hire_date']
today = datetime.date.today()
return (today - hire_date).days
return None
def get_employees_by_seniority(self, days):
"""Renvoie la liste des employés ayant au moins un certain nombre de jours d'ancienneté"""
senior_employees = []
for employee_id, employee_data in self.employees.items():
if self.calculate_employment_duration(employee_id) >= days:
senior_employees.append(employee_data)
return senior_employees
def generate_report(self):
"""Génère un rapport des employés et des départements"""
report = {
"total_employees": len(self.employees),
"departments": {dept: len(emp_ids) for dept, emp_ids in self.departments.items()}
}
return report
def display_system_info(self):
"""Affiche les informations du système"""
print("Employees:")
for employee_id, employee_data in self.employees.items():
print(f"ID: {employee_id}, Name: {employee_data['name']}, Department: {employee_data['department']}, Job Title: {employee_data['job_title']}, Hire Date: {employee_data['hire_date']}")
def display_department_info(self, department):
"""Affiche les informations d'un département"""
print(f"Department: {department}")
for employee in self.get_department_employees(department):
print(f"ID: {employee['id']}, Name: {employee['name']}, Job Title: {employee['job_title']}")
# Création d'une instance de l'objet HRSystem
hr_system = HRSystem()
# Ajout des employés au système
hr_system.add_employee("emp1", "John Doe", "Marketing", "Manager", "2020-01-01")
hr_system.add_employee("emp2", "Jane Smith", "Sales", "Sales Representative", "2019-06-15")
hr_system.add_employee("emp3", "Bob Johnson", "IT", "Software Engineer", "2018-03-01")
# Mise à jour des informations d'un employé
hr_system.update_employee("emp2", job_title="Senior Sales Representative")
# Suppression d'un employé
hr_system.remove_employee("emp3")
# Calcul de la durée d'emploi
duration = hr_system.calculate_employment_duration("emp1")
print(f"Duration of employment for emp1: {duration} days")
# Récupération des employés par ancienneté
senior_employees = hr_system.get_employees_by_seniority(500)
print(f"Employees with at least 500 days of seniority: {senior_employees}")
# Génération et affichage d'un rapport
report = hr_system.generate_report()
print(f"System report: {report}")
# Affichage des informations du système
hr_system.display_system_info()
# Affichage des informations d'un département
hr_system.display_department_info("Marketing")
Explications supplémentaires :
- update_employee : Cette méthode permet de mettre à jour les informations d’un employé existant.
- remove_employee : Cette méthode permet de supprimer un employé du système.
- calculate_employment_duration : Cette méthode calcule la durée d’emploi d’un employé en jours.
- get_employees_by_seniority : Cette méthode retourne la liste des employés ayant au moins un certain nombre de jours d’ancienneté.
- generate_report : Cette méthode génère un rapport contenant le nombre total d’employés et le nombre d’employés par département.