package fr.chantier.tapestry.components.commandes; import fr.chantier.enumeration.Mois; import fr.chantier.enumeration.TypeClassement; import fr.chantier.enumeration.TypeFinalise; import fr.chantier.enumeration.TypeOrdonnancement; import fr.chantier.model.ClientsEntity; import fr.chantier.model.CommandesEntity; import fr.chantier.service.ClientsManager; import fr.chantier.service.CommandesManager; import fr.chantier.tools.EncoderBase64; import org.apache.tapestry5.annotations.*; import org.apache.tapestry5.corelib.components.Form; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.services.Request; import org.apache.tapestry5.services.RequestGlobals; import javax.servlet.http.Cookie; import java.util.*; /** * Created by IntelliJ IDEA. * User: bonnefoy * Date: 30 oct. 2008 * Time: 14:46:50 * To change this template use File | Settings | File Templates. */ public class HeaderCommand { @Inject private CommandesManager commandesManager; @Inject private ClientsManager clientsManager; @Inject private RequestGlobals requestGlobals; @Inject private Request request; @Retain private EncoderBase64 encoder; @Property private TypeClassement typeClassement; @Property private TypeOrdonnancement typeOrdonnancement; @Property private TypeFinalise typeFinalise; /** * Boolean pour l'activation de la selection des commandes par date */ @Property private Boolean activateDate; @Property private Mois mois; @Property private Integer annee; private Calendar calendar; @Persist("entity") private ClientsEntity clientsEntity; @Persist("entity") private CommandesEntity commandesEntity; @Property private String inputSearch; @PageLoaded private void onPageLoaded() { encoder = new EncoderBase64(); } private void initCookies() { boolean write = false; mois = (Mois) getCookieValue(Mois.class.getCanonicalName()); annee = (Integer) getCookieValue("Annee"); typeOrdonnancement = (TypeOrdonnancement) getCookieValue(TypeOrdonnancement.class.getCanonicalName()); typeClassement = (TypeClassement) getCookieValue(TypeClassement.class.getCanonicalName()); typeFinalise = (TypeFinalise) getCookieValue(TypeFinalise.class.getCanonicalName()); activateDate = (Boolean) getCookieValue("activateDate"); if (activateDate == null || (activateDate && (mois == null || annee == null))) { Calendar cal = Calendar.getInstance(); mois = Mois.lookup(cal.get(Calendar.MONTH)); annee = cal.get(Calendar.YEAR); write = true; } if (typeOrdonnancement == null) { typeOrdonnancement = TypeOrdonnancement.DECROISSANTE; write = true; } if (typeClassement == null) { typeClassement = TypeClassement.NUMERO; write = true; } if (typeFinalise == null) { typeFinalise = TypeFinalise.LES_DEUX; write = true; } if (write) { writeCookies(); } } private void writeCookies() { createCookie(Mois.class.getCanonicalName(), encoder.toClient(mois)); createCookie("Annee", encoder.toClient(annee)); createCookie(TypeOrdonnancement.class.getCanonicalName(), encoder.toClient(typeOrdonnancement)); createCookie(TypeClassement.class.getCanonicalName(), encoder.toClient(typeClassement)); createCookie(TypeFinalise.class.getCanonicalName(), encoder.toClient(typeFinalise)); createCookie("activateDate", encoder.toClient(activateDate)); } private void createCookie(String name, String value) { Cookie cookie = new Cookie(name, value); cookie.setPath(request.getContextPath()); cookie.setMaxAge(Integer.MAX_VALUE); requestGlobals.getHTTPServletResponse().addCookie(cookie); } private Object getCookieValue(String name) { Cookie cookie = getCookie(name); if (cookie != null) { return encoder.toValue(cookie.getValue()); } return null; } private Cookie getCookie(String name) { Cookie cookies[] = requestGlobals.getHTTPServletRequest().getCookies(); if (cookies != null) { for (Cookie cooky : cookies) { if (cooky.getName().equals(name)) { return cooky; } } } return null; } @SetupRender private void onSetupRender() { initCookies(); } @OnEvent(component = "classementForm", value = Form.SUCCESS) private void onSuccessFromClassementForm() { writeCookies(); } /** * Proposition d'une liste de choix lors de la recherche de client * * @param input * * @return */ @OnEvent(component = "rechercheClient", value = "providecompletions") private Collection<String> onProvideCompletionsFromMyField(String input) { return clientsManager.findByName(input); } /** * Recherche de client par le formulaire */ @OnEvent(component = "rechercheClientForm", value = Form.SUCCESS) private void onSuccessFromRechercheClientForm() { try { commandesEntity = commandesManager.findById(Integer.valueOf(inputSearch)); } catch (NumberFormatException e) { clientsEntity = clientsManager.findClientByName(inputSearch); } } /** * Retourne la liste des commandes selon l'etat des classements * * @return */ public Collection<CommandesEntity> getCommandesEntityCollection() { initCookies(); if (commandesEntity != null) { ArrayList<CommandesEntity> temp = new ArrayList<CommandesEntity>(); temp.add(commandesEntity); commandesEntity = null; return temp; } Date date = null; if (activateDate != null && activateDate) { calendar = new GregorianCalendar(); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.YEAR, annee); calendar.set(Calendar.MONTH, mois.getI()); date = calendar.getTime(); } if (clientsEntity != null) { return commandesManager.findByCriterions(clientsEntity, typeClassement.getOrder(typeOrdonnancement), typeFinalise.getCriterion(), null); } if (typeFinalise.equals(TypeFinalise.COMMANDES_DU_MOIS_ET_NON_FINALISEES)) { return commandesManager.findNonFinaliseAndMonth(typeClassement.getOrder(typeOrdonnancement)); } return commandesManager.findByCriterions(clientsEntity, typeClassement.getOrder(typeOrdonnancement), typeFinalise.getCriterion(), date); } }