import itertools from datetime import date from typing import List, Dict from dateutil import relativedelta as period from flask import Flask from flask_json import FlaskJSON from db.access import fetch_european_departments, \ fetch_department_employees, \ fetch_american_departments, \ fetch_employees, \ fetch_departments, \ fetch_canadian_departments from models.department import Department app = Flask(__name__) FlaskJSON(app) app.config['JSON_DATE_FORMAT'] = '%d/%m/%Y' app.config['JSON_USE_ENCODE_METHODS'] = True @app.get("/") def index(): return "

Homepage HR Resources

" @app.errorhandler(404) @app.errorhandler(500) def handle_error(error): return { "status": error.code, "description": error.description, "name": error.name } @app.get("/employee") def all_employees(): return {"employees": [e for e in fetch_employees()]} def __employees_group_by_seniority(departments: List[Department]) -> Dict[str, dict]: result = {} for department in departments: # Per ogni dipartimento ricerco i suoi impiegati department_employees = fetch_department_employees(department.department_id) # Raggruppo gli impiegati per anni di anzianità employee_group_by_years = itertools.groupby(department_employees, lambda e: period.relativedelta(date.today(), e.hire_date).years) result[department.name] = {year: [e for e in employees] for (year, employees) in employee_group_by_years} return result @app.get("/employee/all-by-seniority") def employees_by_seniority(): departments = fetch_departments() return __employees_group_by_seniority(departments) @app.get("/employee/american-by-seniority") def american_employees_by_seniority(): american_departments = fetch_american_departments() return __employees_group_by_seniority(american_departments) @app.get("/employee/canadian-by-seniority") def canadian_employees_by_seniority(): canadian_departments = fetch_canadian_departments() return __employees_group_by_seniority(canadian_departments) @app.get("/employee/european-by-seniority") def european_employees_by_seniority(): european_departments = fetch_european_departments() return __employees_group_by_seniority(european_departments)