diff --git a/PostgreSQL/src/functions.sql b/PostgreSQL/src/functions.sql index aa09a51..8eb6dbf 100644 --- a/PostgreSQL/src/functions.sql +++ b/PostgreSQL/src/functions.sql @@ -2,14 +2,17 @@ CREATE OR REPLACE FUNCTION pieces_membre(int) RETURNS TABLE(id_piece int, quantite_piece int) AS $$ -SELECT id_piece, quantite_contenir * quantite_enregistrer as quantite_pieces_possedees -FROM enregistrer -NATURAL JOIN boites -NATURAL JOIN contenir -WHERE id_membre=$1 -UNION -(SELECT id_piece, quantite_acheter as quantite_pieces_possedees - FROM acheter WHERE id_membre=$1); +SELECT id_piece, SUM(quantite_pieces_possedees) FROM ( + SELECT id_piece, quantite_contenir * quantite_enregistrer as quantite_pieces_possedees + FROM enregistrer + NATURAL JOIN boites + NATURAL JOIN contenir + WHERE id_membre=$1 + UNION + (SELECT id_piece, quantite_acheter as quantite_pieces_possedees + FROM acheter WHERE id_membre=$1) + ) + GROUP BY id_piece $$ LANGUAGE SQL; ; diff --git a/back-end/src/controllers/member.controller.ts b/back-end/src/controllers/member.controller.ts index c525166..eeb2751 100644 --- a/back-end/src/controllers/member.controller.ts +++ b/back-end/src/controllers/member.controller.ts @@ -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 = { diff --git a/back-end/src/services/pieces.service.ts b/back-end/src/services/pieces.service.ts index 0707571..8a3353e 100644 --- a/back-end/src/services/pieces.service.ts +++ b/back-end/src/services/pieces.service.ts @@ -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(table: string, column: string, value: string | number, f: (o: Object) => T): Promise> { 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>> { + 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 = 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 }; diff --git a/back-end/src/templates/box.ejs b/back-end/src/templates/box.ejs index 6137428..56c2797 100644 --- a/back-end/src/templates/box.ejs +++ b/back-end/src/templates/box.ejs @@ -25,26 +25,47 @@
       
id : <%= box.id %> - date : <%= box.date %> - pièces : - - - - - - - - - - <% box.pieces.forEach(function(pair) { %> - - - - - - <% }); %> - -
Id pièceQuantité pieces
<%= pair.first.id_piece%><%= pair.second%>
+ date : <%= box.date %> +

Liste des pièces

+ + + + + + + + + + <% box.pieces.forEach(function(pair) { %> + + + + + + <% }); %> + +
Id pièceQuantité pieces
<%= pair.first.id_piece%><%= pair.second%>
+

Liste des modèles constructibles

+ + + + + + + + + + <% box.models.forEach(function(model) { %> + + + + + + <% }); %> + +
Id modèleNom
<%=model.id%><%=model.name%>
+ +

Ajouter une pièce

diff --git a/back-end/src/templates/member.ejs b/back-end/src/templates/member.ejs index 0695564..a6d93dd 100644 --- a/back-end/src/templates/member.ejs +++ b/back-end/src/templates/member.ejs @@ -63,6 +63,42 @@ +

+ Liste des pièces achetées +

+ + + + + + + + + + + + <% pieces.forEach(function(p) { %> + + + + + + + + + <% }); %> + +
Id PièceCouleurMotifFormeQuantité
+ <%=p.first.id_piece%> + + <%=p.first.colour.name%> (<%=p.first.colour.id_colour%>) + + <%=p.first.pattern.name%> (<%=p.first.pattern.id_pattern%>) + + <%=p.first.shape.name%> (<%=p.first.shape.id_shape%>) + + <%=p.second%> +

Liste des modèles faisables