Skip to content
Snippets Groups Projects
Commit 30fd8a7a authored by Martin Lehoux's avatar Martin Lehoux
Browse files

views

parent 64b6b806
No related branches found
No related tags found
No related merge requests found
const express = require('express');
const session = require('express-session');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const morgan = require('morgan');
const fileUpload = require("express-fileupload");
const mongoDBStore = require('connect-mongodb-session')(session);
const config = require("./config.json");
const Client = require("./models/client");
const Produit = require("./models/produit");
const app = express();
const store = new mongoDBStore({
uri: "mongodb://localhost/bonober",
collection: "sessions"
});
app.set('view engine', 'pug');
app.use(morgan('tiny'));
app.use(session({
secret: config.secret,
resave: false,
saveUninitialized: false,
store
}));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(fileUpload());
// Login checker
app.get("/", (req, res) => res.render("index"));
app.get("/clients", (req, res) => {
Client.find({}, (err, clients) => res.render("clients", { clients }));
});
app.get("/clients/nouveau", (req, res) => res.render("nouveau-client"));
app.post("/clients/nouveau", (req, res) => {
Client
.create(req.body)
.then(() => res.redirect("/clients"))
.catch(err => console.error(err));
});
app.get("/produits", (req, res) => {
Produit.find({}, (err, produits) => res.render("produits", { produits }));
});
app.get("/produits/nouveau", (req, res) => res.render("nouveau-produit"));
app.post("/produits/nouveau", (req, res) => {
const image = req.files.image;
if (image) {
image.mv("images/"+image.name);
}
Produit
.create({ ...req.body, image })
.then(() => res.redirect("/produits"))
.catch(err => console.error(err));
});
mongoose.connect('mongodb://localhost/bonober', err => {
if (err) {
console.error('ERROR Unable to connect to Mongo database')
} else {
console.log('Server connected to Mongo database');
app.listen(config.port, () => {
console.log(`Server listening on http://localhost:${config.port}`);
});
}
});
extends layout.pug
block content
.ui.container
h1.ui.header Clients
a.ui.button(href="/clients/nouveau") Créer un nouveau client
table.ui.table
tbody
each client in clients
tr
td #{client.prenom} #{client.nom}
.ui.label.float #{client.solde} €
extends layout.pug
<!DOCTYPE html>
html(lang="en")
head
meta(charset="UTF-8")
meta(name="viewport", content="width=device-width, initial-scale=1.0")
meta(http-equiv="X-UA-Compatible", content="ie=edge")
title Bonober
link(rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.css" integrity="sha256-9mbkOfVho3ZPXfM7W8sV2SndrGDuh7wuyLjtsWeTI1Q=" crossorigin="anonymous")
body
script(src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha256-3edrmyuQ0w65f8gfBsqowzjJe2iM6n0nKciPUp8y+7E=" crossorigin="anonymous")
script(src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.js" integrity="sha256-t8GepnyPmw9t+foMh3mKNvcorqNHamSKtKRxxpUEgFI=" crossorigin="anonymous")
block navbar
.ui.pointing.menu
a.item(href="/") Bonober
a.item(href="/clients") Clients
a.item(href="/produits") Produits
a.item(href="/courses") Courses
a.item(href="/statistiques") Statistiques
.right.menu
a.item(href="/connexion") Connexion
block content
\ No newline at end of file
extends layout.pug
block content
.ui.container
h1.ui.header Nouveau client
form.ui.form(action="/clients/nouveau" method="post")
.ui.field
label Nom
input(name="nom" placeholder="Nom" type="text")
.ui.field
label Prénom
input(name="prenom" placeholder="Prénom" type="text")
.ui.field
label Surnom
input(name="surnom" placeholder="Surnom (optionnel)" type="text")
.ui.field
label Promotion
input(name="promotion" placeholder="Promotion" type="text")
.ui.field
.ui.checkbox
input(name="membre" type="checkbox")
label Membre du Toucan
.ui.field
input.ui.button(type="submit" value="Créer")
extends layout.pug
block content
.ui.container
h1.ui.header Nouveau produit
form.ui.form(action="/produits/nouveau" method="post" enctype="multipart/form-data")
.ui.field
label Nom
input(name="nom" placeholder="Nom" type="text")
.ui.field
label Stocks
input(name="stocks" placeholder="Quantité en stocks" type="number")
.ui.field
label Prix unitaire
input(name="prixUnitaire" placeholder="Prix unitaire" type="number" step="0.1")
.ui.inline.fields
label Catégorie :
.field
.ui.checkbox.radio
input(type="radio" name="categorie" value="boisson")
label Boisson
.field
.ui.checkbox.radio
input(type="radio" name="categorie" value="nourriture")
label Nourriture
.field
.ui.checkbox.radio
input(type="radio" name="categorie" value="autre")
label Autre
.ui.field
label Image
input(type="file" name="image")
.ui.field
input.ui.button(type="submit" value="Créer")
\ No newline at end of file
extends layout.pug
block content
.ui.container
h1.ui.header Produits
a.ui.button(href="/produits/nouveau") Créer un produit
.ui.six.cards
each produit in produits
.card
.content
.header= produit.nom
.ui.label.floating #{produit.prixUnitaire}€
.image
img(src="https://www.google.com/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&cad=rja&uact=8&ved=2ahUKEwjT2J-lhO_gAhUHzIUKHQVwAG0QjRx6BAgBEAU&url=https%3A%2F%2Fwww.lachaiselongue.fr%2Ffrigo-canette-coca-6l.html&psig=AOvVaw0ajbIFVueMaG631yr-H1j0&ust=1552013851276147", alt="")
.content
.description #{produit.stocks} en stock
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment