--- /dev/null
+/*******************************************************************************
+ * Copyright © Igor Barma, Alexandre Desoubeaux, Christian Martel, Eric Brun, Mathieu Amblard, Gwenael Gevet, Pierre Guillot, 2012
+ *
+ * This file is part of the work and learning management system Pentila Nero.
+ *
+ * Pentila Nero is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ * - the GNU Lesser General Public License as published by the
+ * Free Software Foundation, either version 3 of the license,
+ * or (at your option) any later version.
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE-PROJECT.txt in the directory of this software
+ * distribution.
+ *
+ * Pentila Nero is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * and the CeCILL-C and the GNU Lesser General Public License along with
+ * Pentila Nero. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ ******************************************************************************/
+package com.pentila.entSavoie.portlets.cantine.util;
+
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.HashMap;
+import java.util.List;
+
+import com.liferay.portal.kernel.dao.orm.QueryUtil;
+import com.liferay.portal.kernel.exception.PortalException;
+import com.liferay.portal.kernel.exception.SystemException;
+import com.liferay.portal.kernel.json.JSONArray;
+import com.liferay.portal.kernel.json.JSONFactoryUtil;
+import com.liferay.portal.kernel.json.JSONObject;
+import com.liferay.portal.model.User;
+import com.pentila.entSavoie.cantine.model.CantineCategorieRecette;
+import com.pentila.entSavoie.cantine.model.CantineDatePlanAlimentaire;
+import com.pentila.entSavoie.cantine.model.CantineGEMRCN;
+import com.pentila.entSavoie.cantine.model.CantineGEMRCNTypeRecette;
+import com.pentila.entSavoie.cantine.model.CantineMenu;
+import com.pentila.entSavoie.cantine.model.CantinePlanAlimentaire;
+import com.pentila.entSavoie.cantine.model.CantinePlanAlimentaireConfiguration;
+import com.pentila.entSavoie.cantine.model.CantineRecette;
+import com.pentila.entSavoie.cantine.model.CantineRecetteGEMRCN;
+import com.pentila.entSavoie.cantine.service.CantineCategorieRecetteLocalServiceUtil;
+import com.pentila.entSavoie.cantine.service.CantineDatePlanAlimentaireLocalServiceUtil;
+import com.pentila.entSavoie.cantine.service.CantineGEMRCNLocalServiceUtil;
+import com.pentila.entSavoie.cantine.service.CantineGEMRCNTypeRecetteLocalServiceUtil;
+import com.pentila.entSavoie.cantine.service.CantineMenuLocalServiceUtil;
+import com.pentila.entSavoie.cantine.service.CantinePlanAlimentaireConfigurationLocalServiceUtil;
+import com.pentila.entSavoie.cantine.service.CantinePlanAlimentaireLocalServiceUtil;
+import com.pentila.entSavoie.cantine.service.CantineRecetteGEMRCNLocalServiceUtil;
+import com.pentila.entSavoie.cantine.service.CantineRecetteLocalServiceUtil;
+
+public class StoreUtil {
+
+ static SimpleDateFormat frenchDateFormat = new SimpleDateFormat("dd/MM/yyyy");
+ static SimpleDateFormat classicDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+
+
+ public static JSONArray getMenusStore(User user, long planAlimentaireId, CantineDatePlanAlimentaire cdpa, int step, boolean loadAll) throws SystemException, PortalException{
+
+ JSONArray result = JSONFactoryUtil.createJSONArray();
+
+ //on charge les menus pour le plan courant
+ if(!loadAll){
+
+ CantinePlanAlimentaire cpa = CantinePlanAlimentaireLocalServiceUtil.getCantinePlanAlimentaire(planAlimentaireId);
+
+ String typeRecette = CantineUtil.getTypeByStep(step);
+ List<CantineMenu> lcm = CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId(cdpa.getCantineDatePlanAlimentaireId());
+
+ //On recupere la conf pour la date et le type de la recette
+ List<CantinePlanAlimentaireConfiguration> lcpac = CantinePlanAlimentaireConfigurationLocalServiceUtil.getCantinePlanAlimentaireConfigurationByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), typeRecette);
+ String conf = "";
+ JSONArray categories = JSONFactoryUtil.createJSONArray();
+ if(lcpac.size()>0){
+ conf += "<span style='color: green;'> (";
+ for(CantinePlanAlimentaireConfiguration cpac: lcpac){
+ CantineCategorieRecette ccr = CantineCategorieRecetteLocalServiceUtil.getCantineCategorieRecette(cpac.getCategorieRecetteId());
+ conf += ccr.getCodeCategorie() + ", ";
+ categories.put(cpac.getCategorieRecetteId());
+ }
+ conf = conf.substring(0, conf.lastIndexOf(",")) + ")</span>";
+ }
+
+ //On ajoute le type
+ final JSONArray titleCurrentType = JSONFactoryUtil.createJSONArray();
+ titleCurrentType.put("titleCurrentType_" + planAlimentaireId);
+ String typeLibelle = CantineUtil.getTypeLibelle(typeRecette);
+ String[] shortLibelle = typeLibelle.split(" ");
+ titleCurrentType.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'>" + /*(shortLibelle[0].replace("é", "e")).toUpperCase() +*/ conf + "</div>");
+ titleCurrentType.put(typeRecette);
+ titleCurrentType.put(planAlimentaireId);
+ titleCurrentType.put(true);
+ titleCurrentType.put("");
+ titleCurrentType.put("");
+ titleCurrentType.put(CantineUtil.getSort(typeRecette));
+ titleCurrentType.put(cpa.getNomPlan());
+ titleCurrentType.put("");
+ titleCurrentType.put(categories);
+ result.put(titleCurrentType);
+
+
+ String entrees = "";
+ String plats = "";
+ String garnitures = "";
+ String fromages = "";
+ String desserts = "";
+
+ for(CantineMenu cm: lcm){
+ CantineRecette cr = CantineRecetteLocalServiceUtil.getCantineRecette(cm.getRecetteId());
+
+ String titreRecette = cr.getTitreRecette();
+ String couleur = CantineCategorieRecetteLocalServiceUtil.getCantineCategorieRecette(cr.getCategorieRecetteId()).getCouleurCategorie();
+ if(titreRecette.length() > 19){
+ titreRecette = titreRecette.substring(0, 15) + "...";
+ }
+
+ if(typeRecette.equals(cm.getTypeRecette())){
+ final JSONArray recette = JSONFactoryUtil.createJSONArray();
+ recette.put(cr.getRecetteId());
+ recette.put("<div width='100%'>" + titreRecette + "</div>");
+ recette.put(cr.getTypeRecette());
+ recette.put(planAlimentaireId);
+ recette.put(false);
+
+
+ //Traitement des contraintes
+ List<CantineRecetteGEMRCN> lcrGemrcn = CantineRecetteGEMRCNLocalServiceUtil.getCantineRecetteGEMRCNByRecetteId(cm.getRecetteId());
+ JSONArray contraintes = JSONFactoryUtil.createJSONArray();
+ String classification = "Aucune <span style='color: red;'><b> (Fréquence Libre)</b></span>";
+ if(lcrGemrcn.size()>0){
+ classification = "";
+ }
+ for(CantineRecetteGEMRCN crGemrcn: lcrGemrcn){
+ //Contraintes
+ contraintes.put(crGemrcn.getGemrcnId());
+
+ //Classification
+ CantineGEMRCN cGemrcn = CantineGEMRCNLocalServiceUtil.getCantineGEMRCN(crGemrcn.getGemrcnId());
+ classification += "- " + cGemrcn.getLibelleGemrcn();
+ classification += "<span style='color: red;'><b> (";
+
+ String freq = "";
+ if(cGemrcn.getTypeFrequence() == PortletPropsValues.ENT_CANTINE_GEMRCN_TYPE_FREQUENCE_MIN){
+ freq = cGemrcn.getFrequence() + " MIN)";
+ } else if(cGemrcn.getTypeFrequence() == PortletPropsValues.ENT_CANTINE_GEMRCN_TYPE_FREQUENCE_MAX){
+ freq = cGemrcn.getFrequence() + " MAX)";
+ } else {
+ if(cGemrcn.getFrequence() == 0){
+ freq = "Indéfinie)";
+ } else {
+ freq = "" + cGemrcn.getFrequence();
+ }
+ }
+ classification += freq;
+ classification += "</b></span><br />";
+ }
+ recette.put(contraintes);
+ recette.put(classification);
+ recette.put(CantineUtil.getSort(cr.getTypeRecette()));
+ recette.put(cpa.getNomPlan());
+ recette.put(couleur);
+ recette.put(categories);
+ result.put(recette);
+ } else {
+ if(cm.getTypeRecette().equals(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE)){
+ entrees += "<div width='100%' style='color: #" + couleur + ";'>" + titreRecette + "</div>";
+ } else if(cm.getTypeRecette().equals(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT)){
+ plats += "<div width='100%' style='color: #" + couleur + ";'>" + titreRecette + "</div>";
+ } else if(cm.getTypeRecette().equals(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE)){
+ garnitures += "<div width='100%' style='color: #" + couleur + ";'>" + titreRecette + "</div>";
+ } else if(cm.getTypeRecette().equals(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT)){
+ fromages += "<div width='100%' style='color: #" + couleur + ";'>" + titreRecette + "</div>";
+ } else if(cm.getTypeRecette().equals(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT)){
+ desserts += "<div width='100%' style='color: #" + couleur + ";'>" + titreRecette + "</div>";
+ }
+ }
+ }
+
+ if(!entrees.isEmpty()){
+ final JSONArray recette = JSONFactoryUtil.createJSONArray();
+ recette.put("listEntreesForMenus_" + planAlimentaireId);
+ //recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> ENTREES </div>" + entrees);
+ recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> </div>" + entrees);
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE);
+ //On modifie l'identifiant pour la sauvegarde
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE + planAlimentaireId);
+ recette.put(true);
+ recette.put("");
+ recette.put("");
+ recette.put(CantineUtil.getSort(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE));
+ recette.put(cpa.getNomPlan());
+ recette.put("");
+ recette.put(JSONFactoryUtil.createJSONArray());
+ result.put(recette);
+ }
+
+ if(!plats.isEmpty()){
+ final JSONArray recette = JSONFactoryUtil.createJSONArray();
+ recette.put("listEPlatsForMenus_" + planAlimentaireId);
+ //recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> PLATS </div>" + plats);
+ recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> </div>" + plats);
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT);
+ //On modifie l'identifiant pour la sauvegarde
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT + planAlimentaireId);
+ recette.put(true);
+ recette.put("");
+ recette.put("");
+ recette.put(CantineUtil.getSort(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT));
+ recette.put(cpa.getNomPlan());
+ recette.put("");
+ recette.put(JSONFactoryUtil.createJSONArray());
+ result.put(recette);
+ }
+
+ if(!garnitures.isEmpty()){
+ final JSONArray recette = JSONFactoryUtil.createJSONArray();
+ recette.put("listGarnituresForMenus_" + planAlimentaireId);
+ //recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> GARNITURES </div>" + garnitures);
+ recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> </div>" + garnitures);
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE);
+ //On modifie l'identifiant pour la sauvegarde
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE + planAlimentaireId);
+ recette.put(true);
+ recette.put("");
+ recette.put("");
+ recette.put(CantineUtil.getSort(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE));
+ recette.put(cpa.getNomPlan());
+ recette.put("");
+ recette.put(JSONFactoryUtil.createJSONArray());
+ result.put(recette);
+ }
+
+ if(!fromages.isEmpty()){
+ final JSONArray recette = JSONFactoryUtil.createJSONArray();
+ recette.put("listLaitForMenus_" + planAlimentaireId);
+ //recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> FROMAGES </div>" + fromages);
+ recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> </div>" + fromages);
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT);
+ //On modifie l'identifiant pour la sauvegarde
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT + planAlimentaireId);
+ recette.put(true);
+ recette.put("");
+ recette.put("");
+ recette.put(CantineUtil.getSort(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT));
+ recette.put(cpa.getNomPlan());
+ recette.put("");
+ recette.put(JSONFactoryUtil.createJSONArray());
+ result.put(recette);
+ }
+
+ if(!desserts.isEmpty()){
+ final JSONArray recette = JSONFactoryUtil.createJSONArray();
+ recette.put("listDessertsForMenus_" + planAlimentaireId);
+ //recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> DESSERTS </div>" + desserts);
+ recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> </div>" + desserts);
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT);
+ //On modifie l'identifiant pour la sauvegarde
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT + planAlimentaireId);
+ recette.put(true);
+ recette.put("");
+ recette.put("");
+ recette.put(CantineUtil.getSort(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT));
+ recette.put(cpa.getNomPlan());
+ recette.put("");
+ recette.put(JSONFactoryUtil.createJSONArray());
+ result.put(recette);
+ }
+
+ return result;
+ } else {
+
+ String typeRecette = CantineUtil.getTypeByStep(step);
+
+
+ CantinePlanAlimentaire currentPlan = CantinePlanAlimentaireLocalServiceUtil.getCantinePlanAlimentaire(planAlimentaireId);
+ int type = currentPlan.getType();
+
+ List<CantineDatePlanAlimentaire> lcdpa = CantineDatePlanAlimentaireLocalServiceUtil.getCantineDatePlanAlimentaireByUserId_Date(user.getUserId(), cdpa.getDate());
+ for(CantineDatePlanAlimentaire cdpaAll: lcdpa){
+
+
+ boolean isCurrentPlan = cdpaAll.getPlanAlimentaireId()==planAlimentaireId;
+ List<CantineMenu> lcm = CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId(cdpaAll.getCantineDatePlanAlimentaireId());
+
+ String entrees = "";
+ String plats = "";
+ String garnitures = "";
+ String fromages = "";
+ String desserts = "";
+
+ CantinePlanAlimentaire cpa = CantinePlanAlimentaireLocalServiceUtil.getCantinePlanAlimentaire(cdpaAll.getPlanAlimentaireId());
+ String planNom = cpa.getNomPlan();
+ if(cpa.getType()==PortletPropsValues.ENT_CANTINE_PLAN_TYPE_MIDI){
+ planNom += " (Midi)";
+ } else {
+ planNom += " (Soir)";
+ }
+
+ if((isCurrentPlan) || (cpa.getType() != type)){
+
+ //On recupere la conf pour la date et le type de la recette
+ List<CantinePlanAlimentaireConfiguration> lcpac = CantinePlanAlimentaireConfigurationLocalServiceUtil.getCantinePlanAlimentaireConfigurationByCantineDatePlanAlimentaireId_TypeRecette(cdpaAll.getCantineDatePlanAlimentaireId(), typeRecette);
+ String conf = "";
+ JSONArray categories = JSONFactoryUtil.createJSONArray();
+ if(lcpac.size()>0){
+ conf += "<span style='color: green;'> (";
+ for(CantinePlanAlimentaireConfiguration cpac: lcpac){
+ CantineCategorieRecette ccr = CantineCategorieRecetteLocalServiceUtil.getCantineCategorieRecette(cpac.getCategorieRecetteId());
+ conf += ccr.getCodeCategorie() + ", ";
+ categories.put(cpac.getCategorieRecetteId());
+ }
+ conf = conf.substring(0, conf.lastIndexOf(",")) + ")</span>";
+ }
+
+ //On ajoute le type
+ final JSONArray titleCurrentType = JSONFactoryUtil.createJSONArray();
+ titleCurrentType.put("titleCurrentType_" + planAlimentaireId);
+ String typeLibelle = CantineUtil.getTypeLibelle(typeRecette);
+ String[] shortLibelle = typeLibelle.split(" ");
+ titleCurrentType.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'>" /*+ (shortLibelle[0].replace("é", "e")).toUpperCase()*/ + conf + "</div>");
+ titleCurrentType.put(typeRecette);
+ titleCurrentType.put(cdpaAll.getPlanAlimentaireId());
+ titleCurrentType.put(true);
+ titleCurrentType.put("");
+ titleCurrentType.put("");
+ titleCurrentType.put(CantineUtil.getSort(typeRecette));
+ titleCurrentType.put(planNom);
+ titleCurrentType.put("");
+ titleCurrentType.put(categories);
+ result.put(titleCurrentType);
+
+ for(CantineMenu cm: lcm){
+ CantineRecette cr = CantineRecetteLocalServiceUtil.getCantineRecette(cm.getRecetteId());
+ String couleur = CantineCategorieRecetteLocalServiceUtil.getCantineCategorieRecette(cr.getCategorieRecetteId()).getCouleurCategorie();
+
+ String titreRecette = cr.getTitreRecette();
+ if(titreRecette.length() > 19){
+ titreRecette = titreRecette.substring(0, 15) + "...";
+ }
+
+ if(typeRecette.equals(cm.getTypeRecette()) && isCurrentPlan){
+ final JSONArray recette = JSONFactoryUtil.createJSONArray();
+ JSONArray contraintes = JSONFactoryUtil.createJSONArray();
+
+ if(isCurrentPlan){
+ recette.put(cr.getRecetteId());
+ //Traitement des contraintes
+ List<CantineRecetteGEMRCN> lcrGemrcn = CantineRecetteGEMRCNLocalServiceUtil.getCantineRecetteGEMRCNByRecetteId(cm.getRecetteId());
+ for(CantineRecetteGEMRCN crGemrcn: lcrGemrcn){
+ contraintes.put(crGemrcn.getGemrcnId());
+ }
+ } else {
+ //On cree un identifiant special pour avoir tous les elements dans la grille
+ //en cas de recette identique
+ recette.put(cdpaAll.getPlanAlimentaireId() + "_" + cr.getRecetteId());
+ }
+ recette.put(titreRecette);
+ recette.put(cr.getTypeRecette());
+ recette.put(cdpaAll.getPlanAlimentaireId());
+ recette.put(false);
+ recette.put(contraintes);
+
+ //Les classifications
+ String classification = "Aucune";
+ List<CantineRecetteGEMRCN> lrg = CantineRecetteGEMRCNLocalServiceUtil.getCantineRecetteGEMRCNByRecetteId(cr.getRecetteId());
+ if(lrg.size()>0){
+ classification = "";
+ }
+ for(CantineRecetteGEMRCN rg: lrg){
+ CantineGEMRCN cGemrcn = CantineGEMRCNLocalServiceUtil.getCantineGEMRCN(rg.getGemrcnId());
+ classification += "- " + cGemrcn.getLibelleGemrcn();
+ classification += "<span style='color: red;'><b> (" + cGemrcn.getFrequence();
+
+ if(cGemrcn.getTypeFrequence() == PortletPropsValues.ENT_CANTINE_GEMRCN_TYPE_FREQUENCE_MIN){
+ classification += " MIN)";
+ } else if(cGemrcn.getTypeFrequence() == PortletPropsValues.ENT_CANTINE_GEMRCN_TYPE_FREQUENCE_MAX){
+ classification += " MAX)";
+ } else {
+ classification += ")";
+ }
+ classification += "</b></span><br />";
+ }
+ recette.put(classification);
+ recette.put(CantineUtil.getSort(cr.getTypeRecette()));
+ recette.put(planNom);
+ recette.put(couleur);
+ recette.put(categories);
+ result.put(recette);
+ } else {
+ if(cm.getTypeRecette().equals(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE)){
+ entrees += "<div width='100%' style='color: #" + couleur + ";'>" + titreRecette + "</div>";
+ } else if(cm.getTypeRecette().equals(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT)){
+ plats += "<div width='100%' style='color: #" + couleur + ";'>" + titreRecette + "</div>";
+ } else if(cm.getTypeRecette().equals(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE)){
+ garnitures += "<div width='100%' style='color: #" + couleur + ";'>" + titreRecette + "</div>";
+ } else if(cm.getTypeRecette().equals(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT)){
+ fromages += "<div width='100%' style='color: #" + couleur + ";'>" + titreRecette + "</div>";
+ } else if(cm.getTypeRecette().equals(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT)){
+ desserts += "<div width='100%' style='color: #" + couleur + ";'>" + titreRecette + "</div>";
+ }
+ }
+ }
+
+ if(!entrees.isEmpty()){
+ final JSONArray recette = JSONFactoryUtil.createJSONArray();
+ recette.put("listEntreesForMenus_" + cdpaAll.getPlanAlimentaireId());
+ //recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> ENTREES </div>" + entrees);
+ recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> </div>" + entrees);
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE);
+ //On modifie l'identifiant pour la sauvegarde
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE + cdpaAll.getPlanAlimentaireId());
+ recette.put(true);
+ recette.put("");
+ recette.put("");
+ recette.put(CantineUtil.getSort(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE));
+ recette.put(planNom);
+ recette.put("");
+ recette.put(JSONFactoryUtil.createJSONArray());
+ result.put(recette);
+ }
+
+ if(!plats.isEmpty()){
+ final JSONArray recette = JSONFactoryUtil.createJSONArray();
+ recette.put("listEPlatsForMenus_" + cdpaAll.getPlanAlimentaireId());
+ //recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> PLATS </div>" + plats);
+ recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> </div>" + plats);
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT);
+ //On modifie l'identifiant pour la sauvegarde
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT + cdpaAll.getPlanAlimentaireId());
+ recette.put(true);
+ recette.put("");
+ recette.put("");
+ recette.put(CantineUtil.getSort(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT));
+ recette.put(planNom);
+ recette.put("");
+ recette.put(JSONFactoryUtil.createJSONArray());
+ result.put(recette);
+ }
+
+ if(!garnitures.isEmpty()){
+ final JSONArray recette = JSONFactoryUtil.createJSONArray();
+ recette.put("listGarnituresForMenus_" + cdpaAll.getPlanAlimentaireId());
+ //recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> GARNITURES </div>" + garnitures);
+ recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> </div>" + garnitures);
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE);
+ //On modifie l'identifiant pour la sauvegarde
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE + cdpaAll.getPlanAlimentaireId());
+ recette.put(true);
+ recette.put("");
+ recette.put("");
+ recette.put(CantineUtil.getSort(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE));
+ recette.put(planNom);
+ recette.put("");
+ recette.put(JSONFactoryUtil.createJSONArray());
+ result.put(recette);
+ }
+
+ if(!fromages.isEmpty()){
+ final JSONArray recette = JSONFactoryUtil.createJSONArray();
+ recette.put("listLaitForMenus_" + cdpaAll.getPlanAlimentaireId());
+ //recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> FROMAGES </div>" + fromages);
+ recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> </div>" + fromages);
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT);
+ //On modifie l'identifiant pour la sauvegarde
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT + cdpaAll.getPlanAlimentaireId());
+ recette.put(true);
+ recette.put("");
+ recette.put("");
+ recette.put(CantineUtil.getSort(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT));
+ recette.put(planNom);
+ recette.put("");
+ recette.put(JSONFactoryUtil.createJSONArray());
+ result.put(recette);
+ }
+
+ if(!desserts.isEmpty()){
+ final JSONArray recette = JSONFactoryUtil.createJSONArray();
+ recette.put("listDessertsForMenus_" + cdpaAll.getPlanAlimentaireId());
+ //recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> DESSERTS </div>" + desserts);
+ recette.put("<div style='color: #6E7D8F; border-style: none none solid none; border-width: 1px; border-color: #6E7D8F;' width='100%' align='center'> </div>" + desserts);
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT);
+ //On modifie l'identifiant pour la sauvegarde
+ recette.put(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT + cdpaAll.getPlanAlimentaireId());
+ recette.put(true);
+ recette.put("");
+ recette.put("");
+ recette.put(CantineUtil.getSort(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT));
+ recette.put(planNom);
+ recette.put("");
+ recette.put(JSONFactoryUtil.createJSONArray());
+ result.put(recette);
+ }
+ }
+ }
+
+ return result;
+ }
+ }
+
+ public static JSONArray getContrainteStore(long planAlimentaireId, int step) throws SystemException, PortalException{
+ JSONArray result = JSONFactoryUtil.createJSONArray();
+
+ DecimalFormat df = new DecimalFormat();
+ df.setMaximumFractionDigits(1);
+
+ List<CantineDatePlanAlimentaire> lcdpa = CantineDatePlanAlimentaireLocalServiceUtil.getCantineDatePlanAlimentaireByPlanAlimentaireId(planAlimentaireId);
+
+ String typeRecette = CantineUtil.getTypeByStep(step);
+ List<CantineGEMRCNTypeRecette> listCGemrcnType = CantineGEMRCNTypeRecetteLocalServiceUtil.getCantineGEMRCNTypeRecetteByTypeRecette(typeRecette);
+
+ //Table contenant le nombre de menus total par composante
+ HashMap<String, Integer> nbMenusTotal = new HashMap<String, Integer>();
+ {
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE, 0);
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT, 0);
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE, 0);
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT, 0);
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT, 0);
+ }
+
+ for(CantineDatePlanAlimentaire cdpa: lcdpa){
+ int nbEntree = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE) + CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE).size();
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE, nbEntree);
+ int nbPlat = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT) + CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), PortletPropsValues.ENT_CANTINE_BANQUE_PLAT).size();
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT, nbPlat);
+ int nbGarniture = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE) + CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE).size();
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE, nbGarniture);
+ int nbLait = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT) + CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), PortletPropsValues.ENT_CANTINE_BANQUE_LAIT).size();
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT, nbLait);
+ int nbDessert = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT) + CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT).size();
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT, nbDessert);
+ }
+
+ for(CantineGEMRCNTypeRecette cGemrcnType: listCGemrcnType){
+ CantineGEMRCN cGemrcn = CantineGEMRCNLocalServiceUtil.getCantineGEMRCN(cGemrcnType.getGemrcnId());
+
+ //Table contenant le nombre de recette par type ayant la contrainte courante
+ HashMap<String, Float> nbByTypes = new HashMap<String, Float>();
+ {
+ nbByTypes.put(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE, new Float(-1));
+ nbByTypes.put(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT, new Float(-1));
+ nbByTypes.put(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE, new Float(-1));
+ nbByTypes.put(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT, new Float(-1));
+ nbByTypes.put(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT, new Float(-1));
+ }
+
+ //Nombre de menu ayant la contrainte
+ JSONArray lcGemrcnType = CantineGEMRCNTypeRecetteLocalServiceUtil.getTypeRecetteByGemrcnId(cGemrcn.getGemrcnId());
+ int nbMenuContraintLocal = 0;
+ for(int i=0; i<lcGemrcnType.length(); i++){
+ //Ce type est valable pour la contrainte courante
+ // --> on passe son nombre a 0
+ nbByTypes.put(lcGemrcnType.getString(i), new Float(0));
+ for(CantineDatePlanAlimentaire cdpa: lcdpa){
+ List<CantineMenu> lcm = CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), lcGemrcnType.getString(i));
+ for(CantineMenu cm: lcm){
+ List<CantineRecetteGEMRCN> lcrGemrcn = CantineRecetteGEMRCNLocalServiceUtil.getCantineRecetteGEMRCNByRecetteId(cm.getRecetteId());
+ for(CantineRecetteGEMRCN crGemrcn: lcrGemrcn){
+ //Si la recette a la contrainte
+ if(crGemrcn.getGemrcnId() == cGemrcn.getGemrcnId()){
+ float nb = nbByTypes.get(lcGemrcnType.getString(i)) + new Float(1);
+ nbByTypes.put(lcGemrcnType.getString(i), nb);
+ if(lcGemrcnType.getString(i).equals(typeRecette)){
+ nbMenuContraintLocal++;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ final JSONArray gemrcn = JSONFactoryUtil.createJSONArray();
+ gemrcn.put(cGemrcn.getGemrcnId());
+ String libelleGemrcn = cGemrcn.getLibelleGemrcn() + " <b> (" + cGemrcn.getFrequence();
+ if(cGemrcn.getTypeFrequence() == PortletPropsValues.ENT_CANTINE_GEMRCN_TYPE_FREQUENCE_MIN){
+ libelleGemrcn += " MIN";
+ } else if(cGemrcn.getTypeFrequence() == PortletPropsValues.ENT_CANTINE_GEMRCN_TYPE_FREQUENCE_MAX) {
+ libelleGemrcn += " MAX";
+ } else {
+ if (cGemrcn.getFrequence() == 0){
+ libelleGemrcn = cGemrcn.getLibelleGemrcn() + " <b> (Indéfinie";
+ }
+ }
+ libelleGemrcn += ")</b>";
+
+
+ //Nombre total de recette ayant la contrainte
+ float nbMenuForContrainte = 0;
+ float nbMenuContraintOthers = 0;
+ for(int i=0; i<lcGemrcnType.length(); i++){
+ double intermediateResult = nbMenusTotal.get(lcGemrcnType.getString(i))>0?(nbByTypes.get(lcGemrcnType.getString(i))*20.0)/nbMenusTotal.get(lcGemrcnType.getString(i)):0.0;
+ nbMenuForContrainte += intermediateResult;
+ if(!lcGemrcnType.getString(i).equals(typeRecette) && cGemrcn.getFrequence() != 0){
+ nbMenuContraintOthers += intermediateResult;
+ libelleGemrcn += "<br/><i>" + CantineUtil.getTypeLibelle(lcGemrcnType.getString(i)) + " : " + df.format(intermediateResult).replace(",", ".") + " (" + nbByTypes.get(lcGemrcnType.getString(i)).intValue() + "/" + nbMenusTotal.get(lcGemrcnType.getString(i)) + ")</i>";
+ }
+ }
+
+ gemrcn.put(libelleGemrcn);
+ gemrcn.put(cGemrcn.getFrequence());
+ gemrcn.put(cGemrcn.getTypeFrequence());
+ gemrcn.put(df.format(nbMenuForContrainte).replace(",", "."));
+ gemrcn.put(nbMenuContraintLocal);
+ gemrcn.put(nbMenuContraintOthers);
+ gemrcn.put(CantineGEMRCNTypeRecetteLocalServiceUtil.getTypeRecetteByGemrcnId(cGemrcnType.getGemrcnId()));
+ gemrcn.put("");
+ result.put(gemrcn);
+ }
+
+ return result;
+ }
+
+ public static JSONArray getConfigPlanAlimentaireStore(long planAlimentaireId, int begin, int end) throws SystemException, PortalException{
+ JSONArray result = JSONFactoryUtil.createJSONArray();
+
+ List<CantineDatePlanAlimentaire> lcdpaInit= CantineDatePlanAlimentaireLocalServiceUtil.getCantineDatePlanAlimentaireByPlanAlimentaireId(planAlimentaireId);
+ List<CantineDatePlanAlimentaire> lcdpa = lcdpaInit.subList(begin, end);
+
+ for(int i=0; i<CantineUtil.steps.size(); i++){
+
+ JSONArray conf = JSONFactoryUtil.createJSONArray();
+ conf.put(CantineUtil.steps.get(i+1));
+ conf.put("<div align='center' style='font-size: 11px; margin-top: 2px; margin-bottom: 2px; vertical-align: middle;'><b>" + (CantineUtil.getTypeLibelle(CantineUtil.steps.get(i+1)).replace("é", "e")).toUpperCase() + "</b></div>");
+
+ for(CantineDatePlanAlimentaire cdpa: lcdpa){
+
+ List<CantinePlanAlimentaireConfiguration> lcpac = CantinePlanAlimentaireConfigurationLocalServiceUtil.getCantinePlanAlimentaireConfigurationByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), CantineUtil.steps.get(i+1));
+
+ JSONArray categories = JSONFactoryUtil.createJSONArray();
+ //Faire une liste
+ for(CantinePlanAlimentaireConfiguration cpac: lcpac){
+ try{
+ JSONObject cat = JSONFactoryUtil.createJSONObject();
+ CantineCategorieRecette ccr = CantineCategorieRecetteLocalServiceUtil.getCantineCategorieRecette(cpac.getCategorieRecetteId());
+ cat.put("categorieId", ccr.getCantineCategorieRecetteId());
+ cat.put("nomCategorie", ccr.getNomCategorie());
+ cat.put("couleur", ccr.getCouleurCategorie());
+ categories.put(cat);
+ } catch(Exception e){
+ System.out.println("StoreUtil getConfigPlanAlimentaireStore l.502 : No CantineCategorieRecette width id : " + cpac.getCategorieRecetteId());
+ }
+ }
+ conf.put(categories);
+ }
+
+
+ conf.put(CantineUtil.getSort(CantineUtil.steps.get(i+1)));
+ result.put(conf);
+ }
+
+ return result;
+ }
+
+ public static JSONArray getPlanAlimentaireStore(User user) throws SystemException, PortalException{
+ JSONArray result = JSONFactoryUtil.createJSONArray();
+
+ List<CantinePlanAlimentaire> lcpa = CantinePlanAlimentaireLocalServiceUtil.getCantinePlanAlimentaireByUserId(user.getUserId());
+
+ for(CantinePlanAlimentaire cpa: lcpa){
+ final JSONArray plan = JSONFactoryUtil.createJSONArray();
+ plan.put(cpa.getPlanAlimentaireId());
+ plan.put(cpa.getNomPlan());
+ JSONArray dates = JSONFactoryUtil.createJSONArray();
+ List<CantineDatePlanAlimentaire> lcdpa = CantineDatePlanAlimentaireLocalServiceUtil.getCantineDatePlanAlimentaireByPlanAlimentaireId(cpa.getPlanAlimentaireId());
+ for(CantineDatePlanAlimentaire cdpa: lcdpa){
+ dates.put(classicDateFormat.format(cdpa.getDate()));
+ }
+ plan.put(dates);
+ plan.put(cpa.getType());
+ plan.put(cpa.getIsShare());
+ plan.put(cpa.getIsDiffuse());
+
+ result.put(plan);
+ }
+
+ return result;
+ }
+
+ public static JSONArray getAllContrainteStore(long planAlimentaireId) throws SystemException, PortalException{
+ JSONArray result = JSONFactoryUtil.createJSONArray();
+
+ DecimalFormat df = new DecimalFormat();
+ df.setMaximumFractionDigits(1);
+
+ List<CantineGEMRCN> lcGemrcn = CantineGEMRCNLocalServiceUtil.getCantineGEMRCNs(QueryUtil.ALL_POS, QueryUtil.ALL_POS);
+ List<CantineDatePlanAlimentaire> lcdpa = CantineDatePlanAlimentaireLocalServiceUtil.getCantineDatePlanAlimentaireByPlanAlimentaireId(planAlimentaireId);
+
+ //Table contenant le nombre de menus total par composante
+ HashMap<String, Integer> nbMenusTotal = new HashMap<String, Integer>();
+ {
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE, 0);
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT, 0);
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE, 0);
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT, 0);
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT, 0);
+ }
+
+ for(CantineDatePlanAlimentaire cdpa: lcdpa){
+ int nbEntree = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE) + CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE).size();
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE, nbEntree);
+ int nbPlat = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT) + CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), PortletPropsValues.ENT_CANTINE_BANQUE_PLAT).size();
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT, nbPlat);
+ int nbGarniture = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE) + CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE).size();
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE, nbGarniture);
+ int nbLait = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT) + CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), PortletPropsValues.ENT_CANTINE_BANQUE_LAIT).size();
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT, nbLait);
+ int nbDessert = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT) + CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT).size();
+ nbMenusTotal.put(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT, nbDessert);
+ }
+
+
+ for(CantineGEMRCN cGemrcn: lcGemrcn){
+
+ if(cGemrcn.getFrequence()>0){
+ final JSONArray gemrcn = JSONFactoryUtil.createJSONArray();
+ gemrcn.put(cGemrcn.getGemrcnId());
+ gemrcn.put(cGemrcn.getLibelleGemrcn());
+
+ //Table contenant le nombre de recette par type ayant la contrainte courante
+ HashMap<String, Float> nbByTypes = new HashMap<String, Float>();
+ {
+ nbByTypes.put(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE, new Float(-1));
+ nbByTypes.put(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT, new Float(-1));
+ nbByTypes.put(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE, new Float(-1));
+ nbByTypes.put(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT, new Float(-1));
+ nbByTypes.put(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT, new Float(-1));
+ }
+
+ JSONArray lcGemrcnType = CantineGEMRCNTypeRecetteLocalServiceUtil.getTypeRecetteByGemrcnId(cGemrcn.getGemrcnId());
+ for(int i=0; i<lcGemrcnType.length(); i++){
+ //Ce type est valable pour la contrainte courante
+ // --> on passe son nombre a 0
+ nbByTypes.put(lcGemrcnType.getString(i), new Float(0));
+ for(CantineDatePlanAlimentaire cdpa: lcdpa){
+ List<CantineMenu> lcm = CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), lcGemrcnType.getString(i));
+ for(CantineMenu cm: lcm){
+ List<CantineRecetteGEMRCN> lcrGemrcn = CantineRecetteGEMRCNLocalServiceUtil.getCantineRecetteGEMRCNByRecetteId(cm.getRecetteId());
+ for(CantineRecetteGEMRCN crGemrcn: lcrGemrcn){
+ //Si la recette a la contrainte
+ if(crGemrcn.getGemrcnId() == cGemrcn.getGemrcnId()){
+ float nb = nbByTypes.get(lcGemrcnType.getString(i)) + new Float(1);
+ nbByTypes.put(lcGemrcnType.getString(i), nb);
+ }
+ }
+ }
+ }
+ }
+
+ String gemrcnEntree = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE)>0?df.format((nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE)*20.0)/nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE)).replace(",", "."):"0";
+ String gemrcnPlat = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT)>0?df.format((nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT)*20.0)/nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT)).replace(",", "."):"0";
+ String gemrcnGarniture = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE)>0?df.format((nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE)*20.0)/nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE)).replace(",", "."):"0";
+ String gemrcnLait = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT)>0?df.format((nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT)*20.0)/nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT)).replace(",", "."):"0";
+ String gemrcnDessert = nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT)>0?df.format((nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT)*20.0)/nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT)).replace(",", "."):"0";
+
+ gemrcn.put((nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE)==-1)?"":"" + gemrcnEntree + " <sup style='color: grey;'>" + nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE).intValue() + "/" + nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_ENTREE) + "</sup>");
+ gemrcn.put((nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT)==-1)?"":"" + gemrcnPlat + " <sup style='color: grey;'>" + nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT).intValue() + "/" + nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_PLAT) + "</sup>");
+ gemrcn.put((nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE)==-1)?"":"" + gemrcnGarniture + " <sup style='color: grey;'>" + nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE).intValue() + "/" + nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_GARNITURE) + "</sup>");
+ gemrcn.put((nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT)==-1)?"":"" + gemrcnLait + " <sup style='color: grey;'>" + nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT).intValue() + "/" + nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_LAIT) + "</sup>");
+ gemrcn.put((nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT)==-1)?"":"" + gemrcnDessert + " <sup style='color: grey;'>" + nbByTypes.get(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT).intValue() + "/" + nbMenusTotal.get(PortletPropsValues.ENT_CANTINE_BANQUE_DESSERT) + "</sup>");
+
+ //Nombre total de recette ayant la contrainte
+ float nbMenuForContrainte = 0;
+ for(int i=0; i<lcGemrcnType.length(); i++){
+ nbMenuForContrainte += nbMenusTotal.get(lcGemrcnType.getString(i))>0?(nbByTypes.get(lcGemrcnType.getString(i))*20.0)/nbMenusTotal.get(lcGemrcnType.getString(i)):0;
+ }
+
+ boolean controle = false;
+ String frequence = "" + cGemrcn.getFrequence();
+ double freq = Double.valueOf(cGemrcn.getFrequence());
+ if(cGemrcn.getTypeFrequence() == PortletPropsValues.ENT_CANTINE_GEMRCN_TYPE_FREQUENCE_MIN){
+ frequence += " MIN";
+ controle = nbMenuForContrainte >= freq;
+ } else if(cGemrcn.getTypeFrequence() == PortletPropsValues.ENT_CANTINE_GEMRCN_TYPE_FREQUENCE_MAX){
+ frequence += " MAX";
+ controle = nbMenuForContrainte <= freq;
+ } else {
+ if(cGemrcn.getFrequence() == 0){
+ frequence = "Indéfinie";
+ }
+ controle = true;
+ }
+
+ gemrcn.put(frequence);
+ gemrcn.put("<div width='100%'><b>" + df.format(nbMenuForContrainte).replace(",", ".") + "</b></div>");
+ gemrcn.put(controle);
+
+ result.put(gemrcn);
+ }
+ }
+
+ return result;
+ }
+
+ public static float countMenuByType(long planAlimentaireId, String typeRecette) throws SystemException{
+ float nbMenus = 0;
+
+ List<CantineDatePlanAlimentaire> lcdpa = CantineDatePlanAlimentaireLocalServiceUtil.getCantineDatePlanAlimentaireByPlanAlimentaireId(planAlimentaireId);
+ for(CantineDatePlanAlimentaire cdpa: lcdpa){
+ nbMenus += CantineMenuLocalServiceUtil.getCantineMenuByCantineDatePlanAlimentaireId_TypeRecette(cdpa.getCantineDatePlanAlimentaireId(), typeRecette).size();
+ }
+
+ return nbMenus;
+ }
+}