Languages

This commit is contained in:
William Nolin 2019-08-21 20:10:40 -04:00
parent c818f9f7b6
commit 88bc2a77c4
33 changed files with 218 additions and 258 deletions

View File

@ -26,7 +26,7 @@ public class LocaleConfiguration implements WebMvcConfigurer {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.FRENCH);
localeResolver.setDefaultLocale(Locale.ENGLISH);
return localeResolver;
}

View File

@ -3,6 +3,7 @@ package fyloz.trial.ColorRecipesExplorer.model;
import org.hibernate.annotations.ColumnDefault;
import javax.persistence.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Objects;
@ -16,6 +17,7 @@ public class Material extends BeanModel implements Serializable {
private Integer materialID = 0;
@NotNull
@NotEmpty
private String materialCode;
@NotNull
@ -25,7 +27,7 @@ public class Material extends BeanModel implements Serializable {
@ColumnDefault("false")
private boolean isMixType = false;
// Peut être null pour la création des types de mélanges
@NotNull
@ManyToOne
private MaterialType materialType;

View File

@ -34,6 +34,7 @@ public class StringBank {
public static final String MATERIAL_ID = "materialID";
public static final String MATERIAL_CODE = "materialCode";
public static final String MATERIAL_TYPES = "materialTypes";
public static final String MATERIAL_TYPE = "materialType";
public static final String RECIPES = "recipes";
public static final String RECIPE = "recipe";
public static final String RECIPE_ID = "recipeID";

View File

@ -35,7 +35,8 @@ public class MaterialCreatorController {
* @return La page à afficher.
*/
@GetMapping(CREATOR_MATERIAL)
public String showCreationPage(Model model) {
public String showCreationPage(Model model, Material material) {
model.addAttribute(MATERIAL, material == null ? new Material() : material);
model.addAttribute(MATERIAL_TYPES, materialTypeService.getAll());
return CREATOR_MATERIAL;
}
@ -77,6 +78,6 @@ public class MaterialCreatorController {
model.addAttribute(RESPONSE_ERROR, String.format(MATERIAL_ALREADY_EXIST, material.getMaterialCode()));
}
return showCreationPage(model);
return showCreationPage(model, material);
}
}

View File

@ -25,7 +25,8 @@ public class MaterialTypeCreatorController {
}
@GetMapping(CREATOR_MATERIAL_TYPE)
public String showPage() {
public String showPage(Model model, MaterialType materialType) {
model.addAttribute(MATERIAL_TYPE, materialType == null ? new MaterialType() : materialType);
return CREATOR_MATERIAL_TYPE;
}
@ -41,6 +42,6 @@ public class MaterialTypeCreatorController {
model.addAttribute(RESPONSE_ERROR, String.format(MIX_TYPE_ALREADY_USED, materialType.getMaterialTypeName()));
}
return showPage();
return showPage(model, materialType);
}
}

View File

@ -17,7 +17,7 @@ spring.thymeleaf.template-loader-path=classpath:/templates
spring.thymeleaf.suffix=.html
spring.thymeleaf.cache=false
# Messages
spring.messages.cache-duration=1
spring.messages.fallback-to-system-locale=false
#spring.messages.basename=lang/messages
#spring.messages.encoding=UTF-8
#server.tomcat.uri-encoding=UTF-8

View File

@ -1,41 +0,0 @@
menu.list=Liste
menu.add=Ajouter
menu.edit=Modifier
menu.delete=Supprimer
menu.inventory=Inventaire
menu.others=Autres
recipe.color=Couleur
recipe.description=Courte description
recipe.sample=Échantillon
recipe.approbationDate=Date d'approbation
recipe.remark=Remarque
recipe.notice=Note
recipe.steps=Étapes
keyword.company=Bannière
keyword.material=Produit
keyword.recipe=Recette
keyword.touchUpKitPDF=PDF Kits de retouche
keyword.quantity=Quantité
keyword.type=Type
keyword.units=Unités
keyword.edit=Modifier
keyword.use=Utiliser
keyword.save=Enregistrer
keyword.back=Retour
mix.location=Position
material.code=Code
material.inventoryQuantity=Quantité en inventaire
material.type=Type de produit
material.SIMDUTFile=Fichier SIMDUT
units.milliliters=Millilitres
units.liters=Litres
units.gallons=Gallons
inventory.lowQuantity=Quantité faible
inventory.hideOthers=Cacher les autres produits
inventory.showOnly=Voir seulement
product.error.notFound=Aucun produit n'a été trouvé.
app.title=Explorateur de recettes de couleur
footer.lang=See in english
company.add.title=Ajout d'une bannière
company.success.created=La bannière {0} à été enregistrée.
company.form.companyName=Nom de la bannière

View File

@ -26,16 +26,35 @@ keyword.back=Back
mix.location=Location
material.code=Code
material.inventoryQuantity=Inventory quantity
material.type=Product type
material.type=Material type
material.SIMDUTFile=SIMDUT File
units.milliliters=Milliliters
units.liters=Liters
units.gallons=Gallons
inventory.lowQuantity=Low quantity
inventory.hideOthers=Hide other products
inventory.hideOthers=Hide other materials
inventory.showOnly=Show only
product.error.notFound=No products were found.
material.error.anyFound=No materials were found.
app.title=Color recipes explorer
footer.lang=Voir en français
company.add.title=Adding a banner
company.success.created=The banner {0} has been saved.
company.success.created=The banner {0} has been saved.
keyword.see=See
company.error.anyFound=No banners were found.
recipe.warning.notApproved=This recipe is not approved
company.delete.title=Delete banners
company.success.deleted=The banner {0} has been deleted.
keyword.delete=Delete
material.add.title=Adding a material
material.success.created=The material {0} has been saved.
material.editing.title=Editing {0}
material.delete.title=Delete materials
material.success.deleted=The material {0} has been deleted.
material.success.saved=The material {0} has been saved.
material.edit.title=Edit materials
material.simdut.choose=Choose material's SIMDUT file
materialType.add.title=Add a material type
materialType.name=Material type name
materialType.prefix=Prefix
keyword.characters=characters
materialType.usePercents=Use percentages

View File

@ -17,6 +17,7 @@ header, footer {
footer {
position: fixed;
height: 5%;
bottom: 0;
padding-top: 10px;
}

View File

@ -1,8 +1,7 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title th:text="#{company.add.title}"></title>
<th:block th:include="fragments.html :: head(#{company.add.title})"></th:block>
<link href="/css/main.css" rel="stylesheet"/>
</head>
@ -17,7 +16,7 @@
<button class="returnIndex" th:text="#{keyword.back}"></button>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,8 +1,7 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title th:text="#{company.add.title}"></title>
<th:block th:include="fragments.html :: head(#{company.add.title})"></th:block>
<link href="/css/main.css" rel="stylesheet"/>
<link href="/css/forms.css" rel="stylesheet"/>
@ -22,7 +21,7 @@
<tr>
<td><b><label th:for="${#ids.next('companyName')}"
th:text="#{company.form.companyName} + ':'"></label></b></td>
<td><input type="text" th:field="*{companyName}"/></td>
<td><input type="text" th:field="*{companyName}" required /></td>
</tr>
<tr>
<td>
@ -37,7 +36,7 @@
</div>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,11 +1,9 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Supprimer des bannières</title>
<th:block th:include="fragments.html :: head(#{company.delete.title})"></th:block>
<link href="/css/main.css" rel="stylesheet"/>
<link href="/css/forms.css" rel="stylesheet"/>
<!-- <link href="/css/forms.css" rel="stylesheet"/>-->
<style>
table {
@ -29,15 +27,15 @@
<section>
<p class="error" th:text="${error}"></p>
<p class="success" th:if="${successCompanyName != null}"
th:text="'La bannière \'' + ${successCompanyName} + '\' a bien été supprimée.'"></b>
th:text="#{company.success.deleted(${successCompanyName})}"></b>
</p>
<h1>Supprimer des bannières</h1>
<h1 th:text="#{company.delete.title}"></h1>
<form action="/company/remover/" class="requireAuth-remover" method="POST">
<th:block th:if="${!companies.empty}">
<table id="companiesList">
<tr>
<th>Nom de la bannière</th>
<th th:text="#{company.form.companyName}"></th>
</tr>
<th:block th:each="company : ${companies}">
<tr>
@ -45,8 +43,7 @@
<td>
<button class="remover" th:data-code="${company.companyName}"
th:data-recipeID="${company.companyID}"
type="button">Supprimer
</button>
type="button" th:text="#{keyword.delete}"></button>
</td>
</tr>
</th:block>
@ -54,11 +51,11 @@
</th:block>
</form>
<th:block th:if="${companies.empty}">
<b class="error">Aucune bannière n'a été trouvée.</b>
<b class="error" th:text="#{company.error.anyFound}"></b>
</th:block>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer('/company/remover')"></footer>
<script src="/js/main.js"></script>

View File

@ -50,8 +50,14 @@
</nav>
</div>
<div th:fragment="footer">
<a th:href="@{''(lang=__${#locale.toString() == 'en' ? 'fr' : 'en'}__)}" th:text="#{footer.lang}"></a>
<div th:fragment="footer(link)">
<th:block th:if="${link == null}">
<a th:href="@{''(lang=__${#locale.toString() == 'en' ? 'fr' : 'en'}__)}" th:text="#{footer.lang}"></a>
</th:block>
<th:block th:unless="${link == null}">
<a th:href="@{${link + '?lang=__${#locale.toString() == 'en' ? 'fr' : 'en'}__'}}"
th:text="#{footer.lang}"></a>
</th:block>
</div>
</body>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Ajout une image</title>
@ -23,7 +23,7 @@
</form>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
@ -57,9 +57,9 @@
<th:block th:if="${!recipes.get(company).empty}">
<table style="display:none" th:id="'recipes_' + ${company.companyName}">
<tr>
<th>Couleur</th>
<th>Description</th>
<th>Échantillon</th>
<th th:text="#{recipe.color}"></th>
<th th:text="#{recipe.description}"></th>
<th th:text="#{recipe.sample}"></th>
</tr>
<th:block th:each="recipe : ${recipes.get(company)}">
<tr class="recipeRow" th:data-approbationDate="${recipe.approbationDate}">
@ -67,9 +67,7 @@
<td class="centerCell recipeDescription" th:text="${recipe.recipeDescription}"></td>
<td class="centerCell" th:text="${recipe.sample}"></td>
<td>
<button class="gotoRecipe" th:data-recipeID="${recipe.recipeID}" type="button">
Voir
</button>
<button class="gotoRecipe" th:data-recipeID="${recipe.recipeID}" type="button" th:text="#{keyword.see}"></button>
</td>
</tr>
</th:block>
@ -78,16 +76,18 @@
</th:block>
</th:block>
<th:block th:if="${recipes.empty}">
<b class="error">Aucune bannière n'a été trouvée.</b>
<b class="error" th:text="#{company.error.anyFound}"></b>
</th:block>
</div>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>
<script>
<script th:inline="javascript">
/*<![CDATA[*/
(() => {
document.querySelectorAll(".gotoRecipe").forEach(e => {
e.addEventListener("click", () => {
@ -102,10 +102,12 @@
if (approbationDate === null) {
e.classList.add("unapproved");
e.title = "Cette recette n'est pas approuvée";
e.title = /*[[#{recipe.warning.notApproved}]]*/ "Cette recette n'est pas approuvée";
}
});
})();
/*]]>*/
</script>
</body>
</html>

View File

@ -113,11 +113,11 @@
</table>
</th:block>
<th:block th:if="${materials.empty}">
<b class="error" th:text="#{product.error.notFound}"></b>
<b class="error" th:text="#{material.error.anyFound}"></b>
</th:block>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script>
(() => {

View File

@ -1,8 +1,7 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Ajout d'un produit</title>
<th:block th:include="fragments.html :: head(#{material.add.title})"></th:block>
<link href="/css/main.css" rel="stylesheet"/>
</head>
@ -12,12 +11,12 @@
<header th:include="fragments.html :: header"></header>
<!-- Corps de la page -->
<section>
<h1>Ajout d'un produit</h1>
<p th:text="'Le produit ' + ${materialCode} + ' a été enregistré.'"></p>
<button class="returnIndex">Retour</button>
<h1 th:text="#{material.add.title}"></h1>
<p th:text="#{material.success.created(${materialCode})}"></p>
<button class="returnIndex" th:text="#{keyword.back}"></button>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,8 +1,7 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Ajout d'un produit</title>
<th:block th:include="fragments.html :: head(#{material.add.title})"></th:block>
<link href="/css/main.css" rel="stylesheet"/>
<link href="/css/forms.css" rel="stylesheet"/>
@ -15,59 +14,60 @@
<section>
<p class="error" th:text="${error}"></p>
<h1>Ajout d'un produit</h1>
<h1 th:text="#{material.add.title}"></h1>
<div class="form">
<form action="/material/creator" class="requireAuth" enctype="multipart/form-data" method="POST">
<form th:action="@{/material/creator}" th:object="${material}" class="requireAuth" enctype="multipart/form-data"
method="POST">
<table>
<tr>
<td><b><label for="materialCode">Code du produit: </label></b></td>
<td><input id="materialCode" name="materialCode" type="text"/></td>
<td><b><label th:for="${#ids.next('materialCode')}" th:text="#{material.code} + ':'"></label></b>
</td>
<td><input type="text" th:field="*{materialCode}" required /></td>
<td></td>
</tr>
<tr>
<td><b><label for="inventoryQuantity">Quantité en inventaire: </label></b></td>
<td><b><label for="quantity" th:text="#{material.inventoryQuantity} + ':'"></label></b></td>
<td><input data-unit="mL" id="quantity" min="0" name="quantity"
onchange="calculateMilliliters(this.value, this.dataset.unit)" step="0.01" type="number">
onchange="calculateMilliliters(this.value, this.dataset.unit)" step="0.01" type="number"
th:value="${material.inventoryQuantity}" required>
<!--Contient la quantité en millilitres-->
<input type="hidden" th:field="*{inventoryQuantity}"/>
</td>
<!--Contient la quantité en millilitres-->
<input id="inventoryQuantity" name="inventoryQuantity" type="hidden"/>
<td>
<select id="units" name="units"
onchange="switchUnits(this)">
<option selected value="mL">Millilitres</option>
<option value="L">Litres</option>
<option value="gal">Gallons</option>
<option selected value="mL" th:text="#{units.milliliters}"></option>
<option value="L" th:text="#{units.liters}"></option>
<option value="gal" th:text="#{units.gallons}"></option>
</select>
</td>
</tr>
<tr>
<td><b><label for="materialType">Type de produit: </label></b></td>
<td><b><label th:for="${#ids.next('materialType')}" th:text="#{material.type} + ':'"></label></b>
</td>
<td>
<select id="materialType" name="materialType">
<th:block th:each="materialType : ${materialTypes}">
<option th:text="${materialType.materialTypeName}"
th:value="${materialType.materialTypeID}"></option>
</th:block>
<select th:field="*{materialType}" required>
<option th:each="materialType : ${materialTypes}" th:value="${materialType.materialTypeID}"
th:text="${materialType.materialTypeName}"></option>
</select>
</td>
</tr>
<tr>
<td><b><label for="simdut">Fichier SIMDUT: </label></b></td>
<td><input id="simdut" name="simdut" type="file"></td>
<td><b><label for="simdut" th:text="#{material.SIMDUTFile} + ':'"></label></b></td>
<td><input id="simdut" name="simdut" type="file"/></td>
</tr>
<tr>
<td>
<button class="returnIndex" type="button">Retour</button>
<button class="returnIndex" type="button" th:text="#{keyword.back}"></button>
</td>
<td>
<button type="submit">Enregistrer</button>
<button type="submit" th:text="#{keyword.save}"></button>
</td>
</tr>
</table>
@ -75,8 +75,7 @@
</div>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>
<script>

View File

@ -1,11 +1,9 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title th:text="'Modification de ' + ${material.materialCode}"></title>
<th:block th:include="fragments.html :: head(#{material.editing.title(${material.materialCode})})"></th:block>
<link href="/css/main.css" rel="stylesheet"/>
<link href="/css/forms.css" rel="stylesheet"/>
<link th:href="@{/css/forms.css}" rel="stylesheet"/>
</head>
<body>
@ -15,55 +13,53 @@
<section>
<p class="error" th:text="${error}"></p>
<h1 class="materialCode" th:text="'Modification de ' + ${material.materialCode}"></h1>
<h1 class="materialCode" th:text="#{material.editing.title(${material.materialCode})}"></h1>
<div class="form">
<form action="/material/editor" class="requireAuth" method="POST">
<input id="materialID" name="materialID" th:value="${material.materialID}" type="hidden"/>
<input name="materialCode" th:value="${material.materialCode}" type="hidden"/>
<form th:action="#{/material/editor}" th:object="${material}" class="requireAuth" method="POST">
<input type="hidden" th:field="*{materialID}"/>
<input type="hidden" th:field="*{materialCode}"/>
<table>
<tr>
<td><b><label for="inventoryQuantity">Quantité en inventaire: </label></b></td>
<td><b><label for="quantity" th:text="#{material.inventoryQuantity}"></label></b></td>
<td><input data-unit="mL" id="quantity" min="0" name="quantity"
onchange="calculateMilliliters(this.value, this.dataset.unit)" step="0.01"
th:value="${material.inventoryQuantity}" type="number"></td>
<!--Contient la quantité en millilitres-->
<input id="inventoryQuantity" name="inventoryQuantity" th:value="${material.inventoryQuantity}"
type="hidden"/>
<input type="hidden" th:field="*{inventoryQuantity}"/>
<td>
<select id="units" name="units"
onchange="switchUnits(this)">
<option selected value="mL">Millilitres</option>
<option value="L">Litres</option>
<option value="gal">Gallons</option>
<option selected value="mL" th:text="#{units.milliliters}"></option>
<option value="L" th:text="#{units.liters}"></option>
<option value="gal" th:text="#{units.gallons}"></option>
</select>
</td>
</tr>
<tr>
<td><label for="materialType">Type de produit: </label></td>
<td><select id="materialType" name="materialType">
<th:block th:each="materialType : ${materialTypes}">
<option th:attrappend="selected=${materialType.materialTypeName.equalsIgnoreCase('aucun') || materialType.materialTypeID == material.materialType.materialTypeID}"
th:text="${materialType.materialTypeName}"
th:value="${materialType.materialTypeID}"></option>
</th:block>
<td><label th:for="${#ids.next('materialType')}">Type de produit: </label></td>
<td><select th:field="*{materialType}">
<option th:each="materialType : ${materialTypes}"
th:attrappend="selected=${materialType.materialTypeID == material.materialType.materialTypeID}"
th:text="${materialType.materialTypeName}"
th:value="${materialType.materialTypeID}"></option>
</select></td>
</tr>
<tr>
<td>
<button id="showSIMDUT" type="button">Fichier SIMDUT</button>
<button id="showSIMDUT" type="button" th:text="#{material.SIMDUTFile}">Fichier SIMDUT</button>
</td>
<td>
<button id="editSIMDUT" type="button">Modifier</button>
<button id="editSIMDUT" type="button" th:text="#{keyword.edit}"></button>
</td>
</tr>
<tr>
<td>
<button class="returnIndex" type="button">Retour</button>
<button class="returnIndex" type="button" th:text="#{keyword.back}"></button>
</td>
<td>
<button type="submit">Enregistrer</button>
<button type="submit" th:text="#{keyword.save}"></button>
</td>
</tr>
</table>
@ -71,7 +67,7 @@
</div>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,10 +1,7 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Modifier un produit</title>
<link href="/css/main.css" rel="stylesheet"/>
<th:block th:include="fragments.html :: head(#{material.edit.title})"></th:block>
<style>
table {
@ -25,35 +22,29 @@
<section>
<p class="error" th:text="${error}"></p>
<p class="success" th:if="${materialCode != null}"
th:text="'Le produit \'' + ${materialCode} + '\' a bien été sauvegardé.'"></b>
th:text="#{material.success.saved(${materialCode})}"></b>
</p>
<h1>Modifier des produits</h1>
<h1 th:text="#{material.edit.title}"></h1>
<th:block th:if="${!materials.empty}">
<table>
<tr>
<th>Produit</th>
<th>Type</th>
</tr>
<th:block th:each="material : ${materials}">
<tr>
<td class="materialCode" th:data-materialID="${material.materialID}"
th:text="${material.materialCode}"></td>
<td th:text="${material.materialType.materialTypeName}"></td>
<td>
<button class="editor" th:data-materialID="${material.materialID}" type="button">Modifier
</button>
</td>
</tr>
</th:block>
</table>
</th:block>
<th:block th:if="${materials.empty}">
<b class="error">Aucun produit n'a été trouvé</b>
</th:block>
<table th:if="${!materials.empty}">
<tr>
<th th:text="#{keyword.material}"></th>
<th th:text="#{keyword.type}"></th>
</tr>
<tr th:each="material : ${materials}">
<td class="materialCode" th:data-materialID="${material.materialID}"
th:text="${material.materialCode}"></td>
<td th:text="${material.materialType.materialTypeName}"></td>
<td>
<button class="editor" th:data-materialID="${material.materialID}" type="button"
th:text="#{keyword.edit}"></button>
</td>
</tr>
</table>
<b th:if="${materials.empty}" class="error" th:text="#{material.error.anyFound}"></b>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,10 +1,7 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Supprimer des produits</title>
<link href="/css/main.css" rel="stylesheet"/>
<th:block th:include="fragments.html :: head(#{material.delete.title})"></th:block>
<style>
table {
@ -25,39 +22,33 @@
<section>
<p class="error" th:text="${error}"></p>
<p class="success" th:if="${materialCode != null}"
th:text="'Le produit \'' + ${materialCode} + '\' a bien été supprimée.'"></b>
</p>
<h1>Supprimer des produits</h1>
th:text="#{material.success.deleted(${materialCode})}"></p>
<h1 th:text="#{material.delete.title}"></h1>
<form action="/material/remover/" class="requireAuth-remover" method="POST">
<th:block th:if="${!materials.empty}">
<table id="materialsList">
<tr>
<th>Produit</th>
<th>Type</th>
</tr>
<th:block th:each="material : ${materials}">
<tr>
<td class="materialCode" th:data-materialID="${material.materialID}"
th:text="${material.materialCode}"></td>
<td th:text="${material.materialType.materialTypeName}"></td>
<td>
<button class="remover" th:data-code="${material.materialCode}"
th:data-recipeID="${material.materialID}"
type="button">Supprimer
</button>
</td>
</tr>
</th:block>
</table>
</th:block>
<table th:if="${!materials.empty}" id="materialsList">
<tr>
<th th:text="#{keyword.material}"></th>
<th th:text="#{material.type}"></th>
</tr>
<tr th:each="material : ${materials}">
<td class="materialCode" th:data-materialID="${material.materialID}"
th:text="${material.materialCode}"></td>
<td th:text="${material.materialType.materialTypeName}"></td>
<td>
<button class="remover" th:data-code="${material.materialCode}"
th:data-recipeID="${material.materialID}"
type="button" th:text="#{keyword.delete}"></button>
</td>
</tr>
</table>
</form>
<th:block th:if="${materials.empty}">
<b class="error">Aucun produit n'a été trouvé.</b>
<th:block th:if="${materials.isEmpty()}">
<b class="error" th:text="#{material.error.anyFound}"></b>
</th:block>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer('/material/remover')"></footer>
<script src="/js/main.js"></script>

View File

@ -1,11 +1,7 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Ajout d'un produit</title>
<link href="/css/main.css" rel="stylesheet"/>
<link href="/css/forms.css" rel="stylesheet"/>
<th:block th:include="fragments.html :: head(#{material.add.title})"></th:block>
</head>
<body>
@ -13,23 +9,23 @@
<header th:include="fragments.html :: header"></header>
<!-- Corps de la page -->
<section>
<h1>Ajout d'un produit</h1>
<h1 th:text="#{material.add.title}"></h1>
<div class="form">
<form action="/material/simdut" class="requireAuth" enctype="multipart/form-data" method="POST">
<form th:action="@{/material/simdut}" class="requireAuth" enctype="multipart/form-data" method="POST">
<input name="materialID" th:value="${materialID}" type="hidden"/>
<label for="simdut">Choisissez le fichier SIMDUT du produit:</label>
<label for="simdut" th:text="#{material.simdut.choose} + ':'"></label>
<input id="simdut" name="simdut" type="file"/>
<br/>
<br/>
<input type="submit" value="Enregistrer"/>
<input type="submit" th:value="#{keyword.save}"/>
</form>
</div>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,11 +1,9 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Ajout d'un type de produit</title>
<th:block th:include="fragments.html :: head(#{materialType.add.title})"></th:block>
<link href="/css/main.css" rel="stylesheet"/>
<link href="/css/forms.css" rel="stylesheet"/>
<link rel="stylesheet" th:href="@{/css/forms.css}"/>
</head>
<body>
@ -14,29 +12,32 @@
<!-- Corps de la page -->
<section>
<p class="error" th:text="${error}"></p>
<h1>Ajout d'un type de produit</h1>
<h1 th:text="#{materialType.add.title}"></h1>
<div class="form">
<form action="/materialType/creator" class="requireAuth" method="POST">
<form th:action="@{/materialType/creator}" th:object="${materialType}" class="requireAuth" method="POST">
<table>
<tr>
<td><label for="materialTypeName">Nom du type de produit: </label></td>
<td><input id="materialTypeName" name="materialTypeName" required type="text"></td>
<td><label th:for="${#ids.next('materialTypeName')}" th:text="#{materialType.name} + ':'"></label>
</td>
<td><input type="text" th:field="*{materialTypeName}" required></td>
</tr>
<tr>
<td><label for="prefix">Préfixe (3 caractères): </label></td>
<td><input id="prefix" maxlength="3" minlength="3" name="prefix" required type="text"></td>
<td><label th:for="${#ids.next('prefix')}"
th:text="#{materialType.prefix} + ' (3 ' + #{keyword.characters} + '):'"></label></td>
<td><input maxlength="3" minlength="3" type="text" th:field="*{prefix}" required></td>
</tr>
<tr>
<td><label for="usePercentages">Utiliser les pourcentages: </label></td>
<td><input id="usePercentages" name="usePercentages" type="checkbox"></td>
<td><label th:for="${#ids.next('usePercentages')}"
th:text="#{materialType.usePercents} + ':'"></label></td>
<td><input type="checkbox" th:field="*{usePercentages}"></td>
</tr>
<tr>
<td>
<button class="returnIndex" type="button">Retour</button>
<button class="returnIndex" type="button" th:text="#{keyword.back}"></button>
</td>
<td>
<button type="submit">Enregistrer</button>
<button type="submit" th:text="#{keyword.save}"></button>
</td>
</tr>
</table>
@ -44,7 +45,7 @@
</div>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Ajout d'un mélange</title>
@ -73,7 +73,7 @@
</div>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Modifier un mélange</title>
@ -58,7 +58,7 @@
</div>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Ajout d'une recette</title>
@ -19,7 +19,7 @@
<button th:onclick="'document.location.href=\'/recipe/editor/' + ${recipeID} + '\''">Continuer</button>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Ajout d'une recette</title>
@ -59,7 +59,7 @@
</div>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title th:text="'Modification de ' + ${recipe.recipeCode}"></title>
@ -203,7 +203,7 @@
</div>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Modifier une recette</title>
@ -70,7 +70,7 @@
</th:block>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title th:text="'Couleur ' + ${recipe.recipeCode}"></title>
@ -232,7 +232,7 @@
</table>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="fr" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Supprimer des recettes</title>
@ -68,7 +68,7 @@
</form>
</section>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en">
<html lang="fr">
<head>
<th:block th:include="fragments.html :: head(#{app.title})"></th:block>
<title>Génération du PDF d'un kit de retouche</title>
@ -22,7 +22,7 @@
<input type="submit" value="Générer"/>
</form>
<!-- Fragment du pied de page -->
<footer th:include="fragments.html :: footer"></footer>
<footer th:include="fragments.html :: footer(null)"></footer>
<script src="/js/main.js"></script>
</body>

Binary file not shown.