merge : new trigger to purchase.

This commit is contained in:
damien DELPY 2024-12-03 21:28:04 +01:00
commit f377328367
No known key found for this signature in database
5 changed files with 114 additions and 33 deletions

View File

@ -2,6 +2,7 @@
CREATE OR REPLACE FUNCTION pieces_membre(int) RETURNS TABLE(id_piece int, quantite_piece int)
AS
$$
SELECT id_piece, SUM(quantite_pieces_possedees) FROM (
SELECT id_piece, quantite_contenir * quantite_enregistrer as quantite_pieces_possedees
FROM enregistrer
NATURAL JOIN boites
@ -9,7 +10,9 @@ NATURAL JOIN contenir
WHERE id_membre=$1
UNION
(SELECT id_piece, quantite_acheter as quantite_pieces_possedees
FROM acheter WHERE id_membre=$1);
FROM acheter WHERE id_membre=$1)
)
GROUP BY id_piece
$$
LANGUAGE SQL;
;

View File

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

View File

@ -1,6 +1,7 @@
import { new_client } from '../db/db_client';
import { Colour, Pattern, Shape, Piece, ComplexPiece } from '../types/piece';
import { Either, eitherLeft, eitherRight, eitherFormatError } from '../utils/utils';
import { Either, eitherLeft, eitherRight, eitherFormatError, createPair } from '../utils/utils';
import { Pair } from '../utils/utils';
async function getEntity<T>(table: string, column: string, value: string | number, f: (o: Object) => T): Promise<Either<T, string>> {
const client = new_client();
@ -107,4 +108,22 @@ async function createPiece(colour: Colour, pattern: Pattern, shape: Shape): Prom
return result;
}
export { getEntity, getEntities, registerEntity, toColour, getColour, getColours, createColour, toPattern, getPattern, getPatterns, createPattern, toShape, getShape, getShapes, createShape, getPiece, getPieces, createPiece };
async function getBuyedPiecesFromMember(id_member: number): Promise<Array<Pair<Piece, number>>> {
const client = new_client();
const res = await client.query(`SELECT id_piece, quantite_acheter FROM acheter WHERE id_membre = $1;`, [id_member]);
const arr = new Array();
for (let i = 0; i < res.rows.length; ++i) {
const piece: Either<Piece, String> = await getPiece(res.rows[i]['id_piece']);
if (piece.hasRight)
continue;
arr.push(createPair(piece.left, res.rows[i]['quantite_acheter']));
}
return arr;
}
export { getBuyedPiecesFromMember, getEntity, getEntities, registerEntity, toColour, getColour, getColours, createColour, toPattern, getPattern, getPatterns, createPattern, toShape, getShape, getShapes, createShape, getPiece, getPieces, createPiece };

View File

@ -26,7 +26,7 @@
<main>
id : <%= box.id %>
date : <%= box.date %>
pièces :
<h2>Liste des pièces</h2>
<table>
<thead>
<tr>
@ -45,6 +45,27 @@
<% }); %>
</tbody>
</table>
<h2>Liste des modèles constructibles</h2>
<table>
<thead>
<tr>
<th>Id modèle</th>
<th>Nom</th>
<th></th>
</tr>
</thead>
<tbody>
<% box.models.forEach(function(model) { %>
<tr>
<td><%=model.id%></td>
<td><%=model.name%></td>
<td><a href="/models/byname/<%=model.name%>"><i class="fa-solid fa-eye"></i></a></td>
</tr>
<% }); %>
</tbody>
</table>
<h2>Ajouter une pièce</h2>
<form>
<label for="numero_piece">Numero Piece</label>
<input type="number" id="numero_piece" name="numero_piece" />

View File

@ -63,6 +63,42 @@
</tbody>
</table>
<h2>
Liste des pièces achetées
</h2>
<table>
<thead>
<tr>
<th>Id Pièce</th>
<th>Couleur</th>
<th>Motif</th>
<th>Forme</th>
<th>Quantité</th>
</tr>
</thead>
<tbody>
<% pieces.forEach(function(p) { %>
<tr>
<td>
<%=p.first.id_piece%>
</td>
<td>
<%=p.first.colour.name%> (<%=p.first.colour.id_colour%>)
</td>
<td>
<%=p.first.pattern.name%> (<%=p.first.pattern.id_pattern%>)
</td>
<td>
<%=p.first.shape.name%> (<%=p.first.shape.id_shape%>)
</td>
<td>
<%=p.second%>
</td>
</tr>
<% }); %>
</tbody>
</table>
<h2>Liste des modèles faisables</h2>