list employees done

This commit is contained in:
Tenzing Kandang 2026-02-23 12:19:22 +01:00
parent a8262fa689
commit 3df8aedbd4
4 changed files with 88 additions and 56 deletions

64
app.py
View File

@ -1,4 +1,4 @@
from fastapi import FastAPI, Request, HTTPException, Form from fastapi import FastAPI, Request, HTTPException, Form, responses
from fastapi.responses import RedirectResponse, HTMLResponse from fastapi.responses import RedirectResponse, HTMLResponse
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
@ -9,8 +9,7 @@ from pydantic import BaseModel
from sqlmodel import SQLModel, Relationship, Session, create_engine, select from sqlmodel import SQLModel, Relationship, Session, create_engine, select
import json import json
from models import ordinateur, employee, employee_ordinateur from models import ordinateur, employee
from forms import EmployeeForm
app = FastAPI() app = FastAPI()
#ordi1 = ordinateur() #ordi1 = ordinateur()
@ -38,45 +37,48 @@ async def get_ordi1_info(request: Request, ordi_id: int):
request=request, name="item.html", context={"ordi": this_ordi} request=request, name="item.html", context={"ordi": this_ordi}
) )
@app.get("/employee/create", response_class=HTMLResponse)
async def get_employee_form(request: Request):
return templates.TemplateResponse(
"employee_form.html", {"request" : request})
@app.post("/employee/add", response_class=HTMLResponse)
async def submit_employee_form(
first_name: str = Form(...),
family_name: str = Form(...),
badge_number: str = Form(...)
):
with Session(engine) as session:
new_employee = employee(
first_name=first_name,
family_name=family_name,
badge_number=badge_number
)
session.add(new_employee)
session.commit()
return responses.RedirectResponse(
url="/employees", status_code=303)
@app.get("/employees", response_class=HTMLResponse) @app.get("/employees", response_class=HTMLResponse)
async def get_employees(request: Request): async def get_employees(request: Request):
with Session(engine) as session: with Session(engine) as session:
statement= select(employee) statement= select(employee)
employees= session.exec(statement).all() employees= session.exec(statement).all()
return templates.TemplateResponse( return templates.TemplateResponse(
request=request, name="employees.html", context={"employees": employees} "employees.html", {"request" : request, "employees" : employees}
) )
@app.get("/employee/create", response_class=HTMLResponse)
async def get_employee_form(request: Request):
return templates.TemplateResponse(
request=request, name="employee_form.html", success= True )
@app.post("/employee/create", response_class=HTMLResponse) @app.post("/employee/{e_id}/delete")
async def submit_employee_form(data: Annotated[EmployeeForm, Form()]): async def delete_employee(e_id: int):
print(f"data obtained is {data}")
with Session(engine) as session: with Session(engine) as session:
employee = Employee( db_e = session.get(employee, e_id)
first_name=data.fname, if not db_e:
family_name=data.lname, raise HTTPException(status_code=404, detail="Employé non trouvé")
badge_number=data.badge session.delete(db_e)
)
session.add(employee)
session.commit() session.commit()
session.refresh(employee) return responses.RedirectResponse(url="/employees", status_code=303)
return templates.TemplateResponse(
request=request, name="employees.html", context={"employees": employees})
'''@app.post("/employee/delete", response=RedirectResponse)
async def delete_employee(request: Request):
with Session(engine) as session:
statement = select(ordinateur)
results = session.exec(statement)
ordi1 = results.one()
session.delete(ordi1)
session.commit()'''
@app.post("/endpoint") @app.post("/endpoint")
async def receive_info(request: Request): async def receive_info(request: Request):

View File

@ -9,9 +9,9 @@ class employee_ordinateur(SQLModel, table=True):
class employee(SQLModel, table=True): class employee(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True) id: int | None = Field(default=None, primary_key=True)
first_name: str = Field(index=True) first_name: str
family_name: str = Field(index=True) family_name: str
badge_number: str = Field(index=True) badge_number: str
ordinateurs: list["ordinateur"] = Relationship(back_populates="employees", link_model=employee_ordinateur) ordinateurs: list["ordinateur"] = Relationship(back_populates="employees", link_model=employee_ordinateur)

View File

@ -1,20 +1,27 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.4/css/bulma.min.css">
</head>
<body> <body>
<div class="container">
<h2>Employee form</h2> <div class="title pt-6">Employee form</div>
<form action="/employee/add" method="post">
<label> First name:</label><br>
<input class="input" type="text" name="first_name"><br>
<label> Family name:</label><br>
<input class ="input"type="text" name="family_name"><br>
<label> Badge number:</label><br>
<input class ="input"type="text" name="badge_number"><br> <br>
<form action="/employee/create" method="post" target="_blank">
<label for="fname">First name:</label><br>
<input type="text" id="fname" name="fname" value=""><br>
<label for="lname">Family name:</label><br>
<input type="text" id="lname" name="lname" value=""><br>
<label for="badge">Badge number:</label><br>
<input type="text" id="badge" name="badge" value=""><br>
<label for="ordis">Ordinateurs</label><br>
<input type="submit" value="Submit"> <input type="submit" value="Submit">
</form> </form>
</div>
</body> </body>
</html>
</html>

View File

@ -1,19 +1,42 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.4/css/bulma.min.css">
<title>Employees</title> <title>Employees</title>
</head> </head>
<body>
<ul>{% for e in employees %}
<li>{{ e.first_name}} {{ e.last_name }} {{ e.badge_number }}</li>
{% endfor %}
</ul>
<ul>
<li>uhdziuuadza</li>
</ul> <body>
<div class="container">
<div class="title pt-6">Employee list</div>
<table class="table is-striped is-bordered is-fullwidth">
<tr class="is-link">
<th>Id</th>
<th>First name</th>
<th>Family name</th>
<th>Badge number</th>
</tr>
{% for e in employees %}
<tr>
<td>{{ e.id }}</td>
<td>{{ e.first_name }}</td>
<td>{{ e.family_name }}</td>
<td>{{ e.badge_number }}</td>
{% endfor %}
</tr>
</table>
</div>
</body> </body>
</html> </html>