feat: add box list for a member
This commit is contained in:
parent
e5e73777cc
commit
01a081603d
@ -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 = {
|
||||||
|
@ -5,16 +5,17 @@ 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;
|
||||||
titre_boite: string;
|
titre_boite: string;
|
||||||
date_boite: string;
|
date_boite: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
async function getPiecesFromBox(id_box: number): Promise<Array<Pair<Piece, number>>> {
|
async function getPiecesFromBox(id_box: number): Promise<Array<Pair<Piece, number>>> {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
const res = await client.query(`SELECT * FROM contenir WHERE id_boite = $1;`, [ id_box ]);
|
const res = await client.query(`SELECT * FROM contenir WHERE id_boite = $1;`, [id_box]);
|
||||||
const arr: Array<Pair<Piece, number>> = new Array();
|
const arr: Array<Pair<Piece, number>> = new Array();
|
||||||
for (let i = 0; i < res.rows.length; ++i) {
|
for (let i = 0; i < res.rows.length; ++i) {
|
||||||
const piece: Either<Piece, string> = await getPiece(res.rows[i]['id_piece']);
|
const piece: Either<Piece, string> = await getPiece(res.rows[i]['id_piece']);
|
||||||
@ -27,17 +28,17 @@ async function getPiecesFromBox(id_box: number): Promise<Array<Pair<Piece, numbe
|
|||||||
|
|
||||||
async function addPiecesToBox(id_box: number, id_piece: number, qty: number) {
|
async function addPiecesToBox(id_box: number, id_piece: number, qty: number) {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
const res = await client.query(`INSERT INTO contenir (id_boite, id_piece, quantite_contenir) VALUES ($1, $2, $3);`, [ id_box, id_piece, qty ]);
|
const res = await client.query(`INSERT INTO contenir (id_boite, id_piece, quantite_contenir) VALUES ($1, $2, $3);`, [id_box, id_piece, qty]);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function removePieceFromBox(id_box: number, id_piece: number) {
|
async function removePieceFromBox(id_box: number, id_piece: number) {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
const res = await client.query(`DELETE FROM contenir WHERE id_boite = $1 AND id_piece = $2;`, [ id_box, id_piece ]);
|
const res = await client.query(`DELETE FROM contenir WHERE id_boite = $1 AND id_piece = $2;`, [id_box, id_piece]);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getModelsFromBox(id_box: number): Promise<Array<Model>> {
|
async function getModelsFromBox(id_box: number): Promise<Array<Model>> {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
const res = await client.query(`SELECT * FROM modeles_faisables_boite($1);`, [ id_box ]);
|
const res = await client.query(`SELECT * FROM modeles_faisables_boite($1);`, [id_box]);
|
||||||
const arr: Array<Model> = new Array();
|
const arr: Array<Model> = new Array();
|
||||||
for (let i = 0; i < res.rows.length; ++i) {
|
for (let i = 0; i < res.rows.length; ++i) {
|
||||||
const model: Either<Model, string> = await modelService.getModel(res.rows[i]['id_model']);
|
const model: Either<Model, string> = await modelService.getModel(res.rows[i]['id_model']);
|
||||||
@ -48,16 +49,30 @@ 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,
|
||||||
title: data.titre_boite,
|
title: data.titre_boite,
|
||||||
date: new Date(data.date_boite),
|
date: new Date(data.date_boite),
|
||||||
models: await getModelsFromBox(data.id_boite),
|
models: await getModelsFromBox(data.id_boite),
|
||||||
pieces: await getPiecesFromBox(data.id_boite)
|
pieces: await getPiecesFromBox(data.id_boite)
|
||||||
};
|
};
|
||||||
|
|
||||||
return box;
|
return box;
|
||||||
}
|
}
|
||||||
|
|
||||||
const getBox = async (idOrTitle: number | string): Promise<Either<Box, string>> => {
|
const getBox = async (idOrTitle: number | string): Promise<Either<Box, string>> => {
|
||||||
@ -87,10 +102,10 @@ const getAllBoxes = async () => {
|
|||||||
const getAllBoxesFromDate = async (date: Date) => {
|
const getAllBoxesFromDate = async (date: Date) => {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
|
|
||||||
const YYYY = date.getFullYear();
|
const YYYY = date.getFullYear();
|
||||||
const MM = date.getMonth() + 1;
|
const MM = date.getMonth() + 1;
|
||||||
const DD = date.getDate();
|
const DD = date.getDate();
|
||||||
const dateString = `${YYYY}-${MM}-${DD}`;
|
const dateString = `${YYYY}-${MM}-${DD}`;
|
||||||
|
|
||||||
const res = await client.query("SELECT * FROM boites WHERE date_boite > $1", [dateString]);
|
const res = await client.query("SELECT * FROM boites WHERE date_boite > $1", [dateString]);
|
||||||
|
|
||||||
@ -100,16 +115,17 @@ const getAllBoxesFromDate = async (date: Date) => {
|
|||||||
const registerBox = async (id_box: number, id_member: number, quantity: number) => {
|
const registerBox = async (id_box: number, id_member: number, quantity: number) => {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
|
|
||||||
client.query("INSERT INTO enregistrer ($1, $2, $3);", [id_box, id_member, quantity]);
|
client.query("INSERT INTO enregistrer ($1, $2, $3);", [id_box, id_member, quantity]);
|
||||||
}
|
}
|
||||||
|
|
||||||
const boxService = {
|
const boxService = {
|
||||||
addPiecesToBox,
|
addPiecesToBox,
|
||||||
getBox,
|
getBox,
|
||||||
getAllBoxes,
|
getAllBoxes,
|
||||||
getAllBoxesFromDate,
|
getAllBoxesFromDate,
|
||||||
removePieceFromBox,
|
removePieceFromBox,
|
||||||
registerBox,
|
registerBox,
|
||||||
|
getBoxesFromMember,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default boxService;
|
export default boxService;
|
||||||
|
@ -15,44 +15,86 @@
|
|||||||
<%- include('partials/header.ejs') %>
|
<%- include('partials/header.ejs') %>
|
||||||
<main>
|
<main>
|
||||||
|
|
||||||
<h1>
|
<h1>
|
||||||
<%= member.name %>
|
<%= member.name %>
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<h2>Caractéristiques</h2>
|
<h2>Caractéristiques</h2>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
id: <%= member.id_member%>
|
id: <%= member.id_member%>
|
||||||
name: <%= member.name%>
|
name: <%= member.name%>
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<h2>Liste des modèles faisables</h2>
|
<h2>Liste des boites enregistrées</h2>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Id modèle</th>
|
<th>Id</th>
|
||||||
<th>Nom modèle</th>
|
<th>Nom</th>
|
||||||
<th>Proposé par</th>
|
<th>Nombre de pièces</th>
|
||||||
<th></th>
|
<th>Quantité</th>
|
||||||
</tr>
|
<th></th>
|
||||||
</thead>
|
</tr>
|
||||||
<tbody>
|
</thead>
|
||||||
<% models.forEach(function(model) { %>
|
<tbody>
|
||||||
<tr>
|
<% boxes.forEach(function(box) { %>
|
||||||
<td><%=model.id%></td>
|
<tr>
|
||||||
<td><%=model.name%></td>
|
<td>
|
||||||
<td><a href="/membres/byid/<%=model.creator%>"><i class="fa-solid fa-user"></i> <%=model.creator%></a></td>
|
<%=box.first.id%>
|
||||||
<td><a href="/models/byname/<%=model.name%>"><i class="fa-solid fa-eye"></i></a></td>
|
</td>
|
||||||
</tr>
|
<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>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</body>
|
|
||||||
</main>
|
|
||||||
|
<h2>Liste des modèles faisables</h2>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Id modèle</th>
|
||||||
|
<th>Nom modèle</th>
|
||||||
|
<th>Proposé par</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% models.forEach(function(model) { %>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<%=model.id%>
|
||||||
|
</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>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<% }); %>
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</main>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user