/**
   * Actualiza una notificación de tipo Rotavirus
   *
   * @param idNotificacion de la notificación a actualizar
   * @param persona a quien pertenece la notificación
   * @throws Exception
   */
  public void updateNotificacion(String idNotificacion, SisPersona persona) throws Exception {
    DaNotificacion noti;

    if (idNotificacion != null) {
      // DaNotificacion
      noti = daNotificacionService.getNotifById(idNotificacion);
      noti.setMunicipioResidencia(persona.getMunicipioResidencia());
      noti.setDireccionResidencia(persona.getDireccionResidencia());
      daNotificacionService.updateNotificacion(noti);
    }
  }
 /**
  * Anular notificación
  *
  * @param idNotificacion a anular
  * @param request con datos de autenticación
  * @return String
  * @throws Exception
  */
 @RequestMapping("/override/{idNotificacion}")
 public String overrideNoti(
     @PathVariable("idNotificacion") String idNotificacion, HttpServletRequest request)
     throws Exception {
   String urlValidacion = "";
   try {
     urlValidacion = seguridadService.validarLogin(request);
     // si la url esta vacia significa que la validaci�n del login fue exitosa
     if (urlValidacion.isEmpty())
       urlValidacion =
           seguridadService.validarAutorizacionUsuario(
               request, ConstantsSecurity.SYSTEM_CODE, true);
   } catch (Exception e) {
     e.printStackTrace();
     urlValidacion = "redirect:/404";
   }
   if (urlValidacion.isEmpty()) {
     FichaRotavirus fichaRotavirus = rotaVirusService.getFichaById(idNotificacion);
     if (fichaRotavirus != null) {
       DaNotificacion notificacion = fichaRotavirus.getDaNotificacion();
       notificacion.setPasivo(true);
       daNotificacionService.updateNotificacion(notificacion);
       rotaVirusService.saveOrUpdate(fichaRotavirus);
       return "redirect:/rotavirus/search/"
           + fichaRotavirus.getDaNotificacion().getPersona().getPersonaId();
     } else {
       return "redirect:/404";
     }
   } else {
     return "redirect:/" + urlValidacion;
   }
 }
  /**
   * Agrega una notificación de tipo Rotavirus
   *
   * @param json con los datos de la ficha
   * @param request con datos de autenticación
   * @return DaNotificacion agregada
   * @throws Exception
   */
  public DaNotificacion guardarNotificacion(String json, HttpServletRequest request)
      throws Exception {

    logger.debug("Guardando Notificacion");
    DaNotificacion noti = new DaNotificacion();
    Integer personaId = null;
    Integer codSilaisAtencion = null;
    Integer codUnidadAtencion = null;
    String urgente = null;
    JsonObject jObjectJson = new Gson().fromJson(json, JsonObject.class);
    if (jObjectJson.get("personaId") != null
        && !jObjectJson.get("personaId").getAsString().isEmpty()) {
      personaId = jObjectJson.get("personaId").getAsInt();
    }
    if (jObjectJson.get("codSilaisAtencion") != null
        && !jObjectJson.get("codSilaisAtencion").getAsString().isEmpty()) {
      codSilaisAtencion = jObjectJson.get("codSilaisAtencion").getAsInt();
    }
    if (jObjectJson.get("codUnidadAtencion") != null
        && !jObjectJson.get("codUnidadAtencion").getAsString().isEmpty()) {
      codUnidadAtencion = jObjectJson.get("codUnidadAtencion").getAsInt();
    }
    if (jObjectJson.get("urgente") != null && !jObjectJson.get("urgente").getAsString().isEmpty()) {
      urgente = jObjectJson.get("urgente").getAsString();
    }

    if (personaId != null) {
      SisPersona persona = personaService.getPersona(personaId);
      noti.setPersona(persona);
      noti.setFechaRegistro(new Timestamp(new Date().getTime()));
      noti.setCodSilaisAtencion(entidadAdmonService.getSilaisByCodigo(codSilaisAtencion));
      noti.setCodUnidadAtencion(unidadesService.getUnidadByCodigo(codUnidadAtencion));
      long idUsuario = seguridadService.obtenerIdUsuario(request);
      noti.setUsuarioRegistro(usuarioService.getUsuarioById((int) idUsuario));
      noti.setCodTipoNotificacion(catalogoService.getTipoNotificacion("TPNOTI|RTV"));
      noti.setMunicipioResidencia(persona.getMunicipioResidencia());
      noti.setDireccionResidencia(persona.getDireccionResidencia());
      noti.setUrgente(catalogoService.getRespuesta(urgente));

      daNotificacionService.addNotification(noti);
      return noti;
    } else {
      throw new Exception();
    }
  }
  /**
   * Guardar datos de una notificación rotavirus (agregar o actualizar)
   *
   * @param request con los datos de la notificación
   * @param response con el resultado de la acción
   * @throws ServletException
   * @throws IOException
   */
  @RequestMapping(
      value = "save",
      method = RequestMethod.POST,
      consumes = MediaType.APPLICATION_JSON_VALUE,
      produces = "application/json")
  protected void save(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    String json = "";
    String resultado = "";
    String idNotificacion = "";
    try {
      logger.debug("Guardando datos de Ficha Rotavirus");
      BufferedReader br =
          new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF8"));
      json = br.readLine();
      FichaRotavirus fichaRotavirus = jSonToFichaRotavirus(json);
      if (fichaRotavirus.getDaNotificacion() == null) {
        DaNotificacion noti = guardarNotificacion(json, request);
        fichaRotavirus.setDaNotificacion(noti);
      } else {
        if (fichaRotavirus.getFechaInicioDiarrea() != null) {
          fichaRotavirus
              .getDaNotificacion()
              .setFechaInicioSintomas(fichaRotavirus.getFechaInicioDiarrea());
          daNotificacionService.updateNotificacion(fichaRotavirus.getDaNotificacion());
        }
      }
      rotaVirusService.saveOrUpdate(fichaRotavirus);
      idNotificacion = fichaRotavirus.getDaNotificacion().getIdNotificacion();
    } catch (Exception ex) {
      logger.error(ex.getMessage(), ex);
      ex.printStackTrace();
      resultado = messageSource.getMessage("msg.error.save.rota", null, null);
      resultado = resultado + ". \n " + ex.getMessage();

    } finally {
      Map<String, String> map = new HashMap<String, String>();
      map.put("mensaje", resultado);
      map.put("idNotificacion", idNotificacion);
      String jsonResponse = new Gson().toJson(map);
      response.getOutputStream().write(jsonResponse.getBytes());
      response.getOutputStream().close();
    }
  }