feat: add box list for a member

This commit is contained in:
Martin Eyben 2024-12-03 19:59:00 +00:00
parent e5e73777cc
commit 01a081603d
3 changed files with 119 additions and 57 deletions

View File

@ -1,6 +1,7 @@
import { RequestHandler } from "express"; import { RequestHandler } from "express";
import memberService from "../services/member.service"; import memberService from "../services/member.service";
import modelService from "../services/model.service"; import modelService from "../services/model.service";
import boxService from "../services/box.service";
const memberByName: RequestHandler<{ name: string; }> = async (req, res) => { const memberByName: RequestHandler<{ name: string; }> = async (req, res) => {
const memberEither = await memberService.getMember(req.params.name); const memberEither = await memberService.getMember(req.params.name);
@ -12,8 +13,9 @@ const memberByName: RequestHandler<{ name: string; }> = async (req, res) => {
const member = memberEither.left; const member = memberEither.left;
const models = await modelService.getAllBuildableModels(member.id_member); const models = await modelService.getAllBuildableModels(member.id_member);
const boxes = await boxService.getBoxesFromMember(member.id_member);
res.render('member.ejs', { member, models }); res.render('member.ejs', { member, models, boxes });
}; };
const allMembers: RequestHandler = async (_req, res) => { const allMembers: RequestHandler = async (_req, res) => {
@ -37,8 +39,10 @@ const memberById: RequestHandler<{ id: string; }> = async (req, res) => {
const member = memberEither.left; const member = memberEither.left;
const models = await modelService.getAllBuildableModels(member.id_member); const models = await modelService.getAllBuildableModels(member.id_member);
const boxes = await boxService.getBoxesFromMember(member.id_member);
console.log(boxes);
res.render('member.ejs', { member, models }); res.render('member.ejs', { member, models, boxes });
}; };
const memberController = { const memberController = {

View File

@ -5,6 +5,7 @@ import { Piece } from '../types/piece';
import { getPiece } from './pieces.service'; import { getPiece } from './pieces.service';
import { Either, eitherLeft, eitherRight, Pair, createPair } from '../utils/utils'; import { Either, eitherLeft, eitherRight, Pair, createPair } from '../utils/utils';
import modelService from './model.service'; import modelService from './model.service';
import { config } from 'dotenv';
type DBBox = { type DBBox = {
id_boite: number; id_boite: number;
@ -48,6 +49,20 @@ async function getModelsFromBox(id_box: number): Promise<Array<Model>> {
return arr; return arr;
} }
async function getBoxesFromMember(id_member: number): Promise<Array<Pair<Box, number>>> {
const client = new_client()
const res = await client.query(`SELECT id_boite, quantite_enregistrer FROM enregistrer WHERE id_membre = $1;`, [id_member])
const arr: Array<Pair<Box, number>> = new Array();
for (let index = 0; index < res.rows.length; index++) {
const box: Either<Box, string> = await getBox(res.rows[index]['id_boite']);
if (box.hasRight)
continue;
arr.push(createPair(box.left, res.rows[index]['quantite_enregistrer']));
}
return arr;
}
async function db2box(data: DBBox): Promise<Box> { async function db2box(data: DBBox): Promise<Box> {
const box: Box = { const box: Box = {
id: data.id_boite, id: data.id_boite,
@ -110,6 +125,7 @@ const boxService = {
getAllBoxesFromDate, getAllBoxesFromDate,
removePieceFromBox, removePieceFromBox,
registerBox, registerBox,
getBoxesFromMember,
}; };
export default boxService; export default boxService;

View File

@ -28,6 +28,42 @@
name: <%= member.name%> name: <%= member.name%>
</pre> </pre>
<h2>Liste des boites enregistrées</h2>
<table>
<thead>
<tr>
<th>Id</th>
<th>Nom</th>
<th>Nombre de pièces</th>
<th>Quantité</th>
<th></th>
</tr>
</thead>
<tbody>
<% boxes.forEach(function(box) { %>
<tr>
<td>
<%=box.first.id%>
</td>
<td>
<%=box.first.title%>
</td>
<td><%- box.first.pieces.reduce( (p,q)=> p + q.second, 0
)
-%></td>
<td>
<%=box.second%>
</td>
<td><a href="/boxes/byid/<%=box.first.id%>"><i class="fa-solid fa-eye"></i></a></td>
</tr>
<% }); %>
</tbody>
</table>
<h2>Liste des modèles faisables</h2> <h2>Liste des modèles faisables</h2>
<table> <table>
@ -42,9 +78,15 @@
<tbody> <tbody>
<% models.forEach(function(model) { %> <% models.forEach(function(model) { %>
<tr> <tr>
<td><%=model.id%></td> <td>
<td><%=model.name%></td> <%=model.id%>
<td><a href="/membres/byid/<%=model.creator%>"><i class="fa-solid fa-user"></i> <%=model.creator%></a></td> </td>
<td>
<%=model.name%>
</td>
<td><a href="/membres/byid/<%=model.creator%>"><i class="fa-solid fa-user"></i>
<%=model.creator%>
</a></td>
<td><a href="/models/byname/<%=model.name%>"><i class="fa-solid fa-eye"></i></a></td> <td><a href="/models/byname/<%=model.name%>"><i class="fa-solid fa-eye"></i></a></td>
</tr> </tr>