void populateEditForm(Model uiModel, PurchaseRequest purchaseRequest) {
    uiModel.addAttribute("purchaseRequest", purchaseRequest);

    uiModel.addAttribute("proposals", Proposal.findAllProposals());

    uiModel.addAttribute("purchaserequestparts", PurchaseRequestPart.findAllPurchaseRequestParts());
    uiModel.addAttribute("users", User.findAllUsers());
  }
  @RequestMapping(method = RequestMethod.PUT, produces = "text/html")
  public String update(
      @Valid PurchaseRequest purchaseRequest,
      BindingResult bindingResult,
      Model uiModel,
      HttpServletRequest httpServletRequest) {

    Utils.checkRights(purchaseRequest);

    if (bindingResult.hasErrors()) {
      populateEditForm(uiModel, purchaseRequest);
      return "user/purchaserequest/update";
    }

    if (purchaseRequest.getToMin() == 0) // e' completa. Molt Ben!
    {
      purchaseRequest.setCompleted(true);
      purchaseRequest.merge();

    } else // non e' completa
    {
      purchaseRequest.setCompleted(false);
      purchaseRequest.merge();

      PurchaseRequestPart part = new PurchaseRequestPart();
      part.setPurchaseRequest(purchaseRequest);
      part.setAcquirer(purchaseRequest.getAcquirer());
      part.setQuantity(purchaseRequest.getQuantity());

      part.persist();
    }

    checkProposalMinReached(purchaseRequest.getProposal());

    uiModel.asMap().clear();
    purchaseRequest.merge();
    return "redirect:/user/purchaserequest/"
        + encodeUrlPathSegment(purchaseRequest.getId().toString(), httpServletRequest);
  }
  @RequestMapping(method = RequestMethod.POST, produces = "text/html")
  public String create(
      PurchaseRequest purchaseRequest,
      BindingResult bindingResult,
      Model uiModel,
      HttpServletRequest httpServletRequest,
      @RequestParam(required = false) Integer proposal,
      @RequestParam(required = false) Integer addTo) {
    //  checkRights(purchaseRequest);
    if (bindingResult.hasErrors()) {
      populateEditForm(uiModel, purchaseRequest);
      return "user/purchaserequest/create";
    }

    int pag_id = 0;

    purchaseRequest.setAcquirer(Utils.getCurrentUser());
    purchaseRequest.setReceived(false);

    /* TO-DO: qua mettiamo il check per vedere se รจ completa o se dobbiamo fare delle parti... */

    if (addTo != null) // se la sto aggiungendo ad una gia' esistente!
    {
      PurchaseRequest pr = PurchaseRequest.findPurchaseRequest(addTo); // aggiungo a questa
      pr.setQuantity(pr.getQuantity() + purchaseRequest.getQuantity());

      if (pr.getToMin() == 0) {
        pr.setCompleted(true);

        checkProposalMinReached(pr.getProposal());
      }

      pr.merge();

      // ignoro la mia "purchaserequest" e memorizzo la parte

      PurchaseRequestPart part = new PurchaseRequestPart();
      part.setPurchaseRequest(PurchaseRequest.findPurchaseRequest(addTo));
      part.setAcquirer(purchaseRequest.getAcquirer());
      part.setQuantity(purchaseRequest.getQuantity());

      part.persist();

      pag_id = pr.getProposal().getId();
    } else {
      // se non sto aggiungendo a niente
      if (purchaseRequest.getToMin() == 0) // e' completa. Molt Ben!
      {
        purchaseRequest.setCompleted(true);
        purchaseRequest.persist();

      } else // non e' completa
      {
        purchaseRequest.setCompleted(false);
        purchaseRequest.persist();

        PurchaseRequestPart part = new PurchaseRequestPart();
        part.setPurchaseRequest(purchaseRequest);
        part.setAcquirer(purchaseRequest.getAcquirer());
        part.setQuantity(purchaseRequest.getQuantity());

        part.persist();
      }

      checkProposalMinReached(purchaseRequest.getProposal());
      pag_id = purchaseRequest.getProposal().getId();
    }
    uiModel.asMap().clear();

    return "redirect:/user/proposals/" + pag_id;
  }