@Override
  @Transactional
  public String update() {
    info("Atempt to update request {0} for user {1}", getInstance(), utilisateurCourant);

    try {
      // Verification du pseudo
      if (!annonceHome.validerDateDebut() || !annonceHome.validerDateFin()) {
        return "dates_incorrectes";
      }

      // Maj du lieu
      getInstance().setLieuDepart(annonceHome.getLieuDepart().getLieu());
      getInstance().setLieuArrivee(annonceHome.getLieuArrivee().getLieu());

      getInstance().setDateMaj(new Date());

      getInstance().setNote(demandeHelper.getNote(getInstance()));

      // Enregistrement de l'utilisateur
      String retour = super.update();
      if (!UPDATED.equals(retour)) {
        throw new BSException("error.demande.update");
      }

      // annonceList.updateDemande(getInstance());
      events.raiseTransactionSuccessEvent("demandeUpdated", getInstance());

      info("Updated request {0} for user {1}", getInstance(), utilisateurCourant);

      return UPDATED;
    } catch (BSException bse) {
      error(
          "Error while updating request {0} for user {1} : {2} ",
          getInstance(), utilisateurCourant, bse.getMessage());
      throw bse;
    } catch (Exception e) {
      error(
          "Error while updating request {0} for user {1} : {2} ",
          getInstance(), utilisateurCourant, e.getMessage());
      throw new BSException("error.demande.update");
    }
  }
  @Override
  @Transactional
  public String persist() {
    info("Atempt to persist request {0} for user {1}", getInstance(), utilisateurCourant);
    try {
      // Verification du pseudo
      if (!annonceHome.validerDates(false)) {
        return "dates_incorrectes";
      }
      // Maj du lieu
      getInstance().setLieuDepart(annonceHome.getLieuDepart().getLieu());
      getInstance().setLieuArrivee(annonceHome.getLieuArrivee().getLieu());

      getInstance().setDateMaj(new Date());
      getInstance().setUtilisateur(utilisateurCourant);
      getInstance().setNote(demandeHelper.getNote(getInstance()));
      // Enregistrement de la demande
      String retour = super.persist();
      if (!PERSISTED.equals(retour)) {
        throw new BSException("error.demande.create");
      }

      // Add it to the home list
      events.raiseTransactionSuccessEvent("demandeAdded", getInstance());

      info("Persisted request {0} for user {1}", getInstance(), utilisateurCourant);

      return PERSISTED;
    } catch (BSException bse) {
      error(
          "Error while persisting request {0} for user {1} : {2} ",
          getInstance(), utilisateurCourant, bse.getMessage());
      throw bse;
    } catch (Exception e) {
      error(
          "Error while persisting request {0} for user {1} : {2} ",
          getInstance(), utilisateurCourant, e.getMessage());
      throw new BSException("error.demande.create");
    }
  }
  public void wire() {
    if (ConversationUtils.beginConversation("/annonce/DemandeEdit.xhtml")) {
      Long numAnnonce = getDemandeNumAnnonce();
      if (demandeView != null
          && demandeView.getId() != null
          && (demandeView.getId().equals(numAnnonce))) {
        setDemandeNumAnnonce(demandeView.getDemandeNumAnnonce());
        setInstance(demandeView.getInstance());
        setSession(demandeView.getSession());
      }
      super.getInstance();
      if (!super.isManaged()) {
        // Initialiser les pays à celui de l'utilisateur
        if (utilisateurCourant != null) {
          Pays paysUtilisateur =
              paysMap.get(utilisateurCourant.getCoordonnees().getLieu().getPays().getIdPays());
          // getInstance().getLieuDepart().setPays(paysUtilisateur);
          // getInstance().getLieuArrivee().setPays(paysUtilisateur);

          // Initialiser la monnaie a celle du pays de l'utilisateurs
          getInstance().getContribFin().setMonnaie(paysUtilisateur.getMonnaie());
        }
      }
      annonceHome.setInstance(getInstance());
      annonceHome
          .getLieuDepart()
          .wire(
              false,
              getInstance().getLieuDepart() != null ? getInstance().getLieuDepart().clone() : null);
      annonceHome
          .getLieuArrivee()
          .wire(
              false,
              getInstance().getLieuArrivee() != null
                  ? getInstance().getLieuArrivee().clone()
                  : null);
    }
  }