Pour ajouter des fonctionnalités supplémentaires à ce système d’information pour un Directeur/Directrice des Ressources Humaines (DRH), nous pouvons envisager plusieurs améliorations. Voici quelques suggestions :

  1. Mettre à jour les informations des employés : Ajouter une méthode pour mettre à jour les informations des employés.
  2. Supprimer un employé : Ajouter une méthode pour supprimer un employé du système.
  3. Calculer la durée d’emploi : Ajouter une méthode pour calculer la durée d’emploi d’un employé.
  4. Filtrer les employés par ancienneté : Ajouter une méthode pour obtenir une liste des employés en fonction de leur ancienneté.
  5. 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 :

  1. update_employee : Cette méthode permet de mettre à jour les informations d’un employé existant.
  2. remove_employee : Cette méthode permet de supprimer un employé du système.
  3. calculate_employment_duration : Cette méthode calcule la durée d’emploi d’un employé en jours.
  4. get_employees_by_seniority : Cette méthode retourne la liste des employés ayant au moins un certain nombre de jours d’ancienneté.
  5. 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut