diff --git a/recipes.mv.db b/recipes.mv.db
index 6895fe6..98b5a16 100644
Binary files a/recipes.mv.db and b/recipes.mv.db differ
diff --git a/src/main/resources/static/js/main.js b/src/main/resources/static/js/main.js
index 7be4dc6..cc198f2 100644
--- a/src/main/resources/static/js/main.js
+++ b/src/main/resources/static/js/main.js
@@ -119,26 +119,31 @@ const galTomL = 3785.41;
// Change les unités selon la sélection de l'utilisateur
function changeUnits(unitSelect, quantitiesSelector, unitsSelector) {
+ const newUnit = unitSelect.value;
+
document.querySelectorAll(unitsSelector).forEach(e => {
- e.innerText = unitSelect.value;
+ e.innerText = newUnit;
// Modifie la quantitée
const quantityElem = e.parentElement.parentElement.querySelector(quantitiesSelector);
const originalQuantity = parseInt(quantityElem.dataset.quantityml);
- switch (unitSelect.value) {
- case "L":
- quantityElem.innerText = originalQuantity / lTomL;
- break;
- case "gal":
- quantityElem.innerText = originalQuantity / galTomL;
- break;
- default:
- quantityElem.innerText = originalQuantity;
- break;
- }
-
- // Arrondi à deux décimaux
- quantityElem.innerText = Math.round(quantityElem.innerText * 100) / 100;
+ quantityElem.innerText = convertMlToUnit(newUnit, originalQuantity);
});
+}
+
+// Convertit une quantité en millilitres vers une autre unité de volume
+function convertMlToUnit(unit, quantity) {
+ let newQuantity = unit === "L" ? quantity / lTomL : unit === "gal" ? quantity / galTomL : quantity;
+ return round(newQuantity);
+}
+
+// Convertit une quantité d'une autre unité vers des millilitres
+function convertUnitToMl(unit, quantity) {
+ let newQuantity = unit === "L" ? quantity * lTomL : unit === "gal" ? quantity * galTomL : quantity;
+ return round(newQuantity);
+}
+
+function round(x) {
+ return Math.round(x * 100) / 100;
}
\ No newline at end of file
diff --git a/src/main/resources/templates/recipe/explore.html b/src/main/resources/templates/recipe/explore.html
index ef4895d..c10aa02 100644
--- a/src/main/resources/templates/recipe/explore.html
+++ b/src/main/resources/templates/recipe/explore.html
@@ -55,7 +55,8 @@
-
-
- mL
- |
|
+
+ mL
+ |
@@ -237,36 +238,40 @@
});
document.querySelectorAll(".quantityCustomizer").forEach((e) => {
- // Modifie les quantités de tous les produits
e.addEventListener("change", () => {
const value = e.valueAsNumber;
const oldValue = e.defaultValue;
+ const currentUnit = document.querySelector("#unitsSelect").value;
- const mixID = e.dataset.mixid;
+ // Modifie les quantités de tous les produits
+ // Les 3 parentElement récupèrent la table dans laquelle le produit se trouve
+ // TODO simplifier ?
+ e.parentElement.parentElement.parentElement.querySelectorAll(".quantityCustomizer").forEach((elem) => {
+ const defaultValue = elem.defaultValue;
+ const newValue = (defaultValue * value) / oldValue;
- document.querySelectorAll(".quantityCustomizer").forEach((elem) => {
- if (elem.dataset.mixid === mixID) {
- const defaultValue = elem.defaultValue;
- const newValue = (defaultValue * value) / oldValue;
+ elem.value = round(newValue);
- elem.value = Math.round(newValue * 100) / 100;
- }
+ // Recalcule la quantité en millilitres de chaque produit
+ elem.dataset.quantityml = convertUnitToMl(currentUnit, newValue);
});
});
});
- const mixes = document.querySelectorAll(".mixes");
- let maxWidth = 0;
- mixes.forEach((e) => {
- const width = e.style.width;
-
- if (width > maxWidth) {
- maxWidth = width;
- }
- });
- mixes.forEach((e) => {
- e.style.width = maxWidth;
- });
+ // Fait que toutes les tables de mélange soit de la même largeur
+ // TODO Voir si nécessaire, semble être fait par défault
+ // const mixes = document.querySelectorAll(".mixes");
+ // let maxWidth = 0;
+ // mixes.forEach((e) => {
+ // const width = e.style.width;
+ //
+ // if (width > maxWidth) {
+ // maxWidth = width;
+ // }
+ // });
+ // mixes.forEach((e) => {
+ // e.style.width = maxWidth;
+ // });
document.querySelector("#formSubmit").addEventListener("click", () => {
let formData = {};
@@ -296,20 +301,12 @@
formData[mixID] = {};
}
- formData[mixID][materialID] = e.value;
+ formData[mixID][materialID] = e.dataset.quantityml;
});
- document.querySelectorAll(".notEnough").forEach(e => {
- e.classList.remove("notEnough");
- });
+ clearNotEnoughClasses();
- sendPost(formData, "/inventory/use", r => {
- const splitReason = r.split("-");
- const mixID = splitReason[0];
- const materialID = splitReason[1];
-
- document.querySelector(`#recipe-${mixID}`).querySelector(`#material-${materialID}`).classList.add("notEnough");
- });
+ sendPost(formData, "/inventory/use", r => displayNotEnoughReason(r));
});
document.querySelectorAll(".useMixSubmit").forEach(e => {
@@ -324,24 +321,40 @@
formData[mixID] = {};
}
- formData[mixID][materialID] = elem.value;
+ formData[mixID][materialID] = elem.dataset.quantityml;
});
- document.querySelectorAll(".notEnough").forEach(elem => {
- elem.classList.remove("notEnough");
- });
+ clearNotEnoughClasses();
- sendPost(formData, "/inventory/use", r => {
- const splitReason = r.split("-");
- const mixID = splitReason[0];
- const materialID = splitReason[1];
-
- document.querySelector(`#recipe-${mixID}`).querySelector(`#material-${materialID}`).classList.add("notEnough");
- });
+ sendPost(formData, "/inventory/use", r => displayNotEnoughReason(r));
});
});
})();
+ function changeCustomizersUnits(unitSelect) {
+ const unit = unitSelect.value;
+
+ document.querySelectorAll(".quantityCustomizer").forEach(e => {
+ const originalValue = e.dataset.quantityml;
+
+ e.value = convertMlToUnit(unit, originalValue);
+ });
+ }
+
+ function clearNotEnoughClasses() {
+ document.querySelectorAll(".notEnough").forEach(elem => {
+ elem.classList.remove("notEnough");
+ });
+ }
+
+ function displayNotEnoughReason(reason) {
+ const splitReason = reason.split("-");
+ const mixID = splitReason[0];
+ const materialID = splitReason[1];
+
+ document.querySelector(`#recipe-${mixID}`).querySelector(`#material-${materialID}`).classList.add("notEnough");
+ }
+
function sendPost(data, url, errorCallback) {
const successP = document.querySelector(".success");
const errorP = document.querySelector(".error");
diff --git a/workdir/recipes.mv.db b/workdir/recipes.mv.db
index 7346774..13c74c1 100644
Binary files a/workdir/recipes.mv.db and b/workdir/recipes.mv.db differ