/**
   * Do obtiene Fecha branch.
   *
   * @param mapping the mapping
   * @param actionForm the action form
   * @param request the request
   * @param response the response
   * @return the action forward
   * @throws Exception the exception
   */
  public final ActionForward doObtieneFechaBranch(
      final ActionMapping mapping,
      final ActionForm actionForm,
      final HttpServletRequest request,
      final HttpServletResponse response)
      throws Exception {

    PseudoResponse res = new PseudoResponse(request, response);
    ReporteConciliacionForm form;
    String branch = request.getParameter("branch");

    if (actionForm instanceof ReporteConciliacionForm) {
      form = (ReporteConciliacionForm) actionForm;
    } else {
      form = new ReporteConciliacionForm();
    }

    final ReporteConciliacionService service =
        (ReporteConciliacionService)
            getWebApplicationContext().getBean(REPORTE_CONCILIACION_SERVICE);
    form.setFechaBranch(formateaFechaBranch(service.getFechaBranch(branch)));
    res.setResponseError(null);
    res.setResponseContent(jsonize(form));

    res.commit();

    return null;
  }
  /**
   * Do pagina primera.
   *
   * @param mapping the mapping
   * @param actionForm the action form
   * @param request the request
   * @param response the response
   * @return the action forward
   * @throws Exception the exception
   */
  public final ActionForward doPaginaPrimera(
      final ActionMapping mapping,
      final ActionForm actionForm,
      final HttpServletRequest request,
      final HttpServletResponse response)
      throws Exception {

    PseudoResponse res = new PseudoResponse(request, response);
    ReporteConciliacionForm form;
    String error = "";
    int pagActual = Integer.parseInt(request.getParameter(PAG_ACTUAL));
    final Boolean repBoletas =
        (request.getParameter(REP_BOLETAS) == null)
            ? false
            : Boolean.parseBoolean(request.getParameter(REP_BOLETAS));
    if (actionForm instanceof ReporteConciliacionForm) {
      form = (ReporteConciliacionForm) actionForm;
    } else {
      form = new ReporteConciliacionForm();
    }

    try {
      final ReporteConciliacionService service =
          (ReporteConciliacionService)
              getWebApplicationContext().getBean(REPORTE_CONCILIACION_SERVICE);

      if (form.getPaginacion() == null) {
        form = new ReporteConciliacionForm();
        error = ConciliaErrorKeys.PPINV_ERR_CONCILIACION_CONSULTA_REPORTE.toString();
        res.setResponseContent(jsonize(form));
      }

      if ("".equals(error)) {
        form = service.consultaOperConciliacion(form, "paginaPrimera", pagActual, repBoletas);
        res.setResponseError(null);
        res.setResponseContent(jsonize(form));
      } else {
        res.setResponseError(error);
      }
    } catch (FrontClientException e) {
      LOG.error(e.getMessage(), e);
      res.setResponseError(e.getMessage());
    } catch (BeansException e) {
      LOG.error(e.getMessage(), e);
      res.setResponseError(GralErrorKeys.PPINV_ERR_GRAL.toString());
    } finally {
      res.commit();
    }

    return null;
  }
  /**
   * Do limpia conciliacion.
   *
   * @param mapping the mapping
   * @param actionForm the action form
   * @param request the request
   * @param response the response
   * @return the action forward
   * @throws Exception the exception
   */
  public final ActionForward doLimpiaConciliacion(
      final ActionMapping mapping,
      final ActionForm actionForm,
      final HttpServletRequest request,
      final HttpServletResponse response)
      throws Exception {

    PseudoResponse res = new PseudoResponse(request, response);
    ReporteConciliacionForm form;

    if (actionForm instanceof ReporteConciliacionForm) {
      form = (ReporteConciliacionForm) actionForm;
    } else {
      form = new ReporteConciliacionForm();
    }

    form.reiniciaForm();
    res.setResponseError(null);
    res.setResponseContent(jsonize(form));
    res.commit();

    return null;
  }
  /**
   * Do consulta reporte conciliacion.
   *
   * @param mapping the mapping
   * @param actionForm the action form
   * @param request the request
   * @param response the response
   * @return the action forward
   * @throws Exception the exception
   */
  public final ActionForward doConsultaReporteConciliacion(
      final ActionMapping mapping,
      final ActionForm actionForm,
      final HttpServletRequest request,
      final HttpServletResponse response)
      throws Exception {

    PseudoResponse res = new PseudoResponse(request, response);
    ReporteConciliacionForm form;
    final Boolean repBoletas =
        (request.getParameter(REP_BOLETAS) == null)
            ? false
            : Boolean.parseBoolean(request.getParameter(REP_BOLETAS));

    if (actionForm instanceof ReporteConciliacionForm) {
      form = (ReporteConciliacionForm) actionForm;
    } else {
      form = new ReporteConciliacionForm();
    }

    final ReporteConciliacionService service =
        (ReporteConciliacionService)
            getWebApplicationContext().getBean(REPORTE_CONCILIACION_SERVICE);
    String errorFechas = validaFechas(form.getFechaIni(), form.getFehcaFin(), form.isHistorico());
    if ("".equals(errorFechas)) {
      form = service.consultaOperConciliacion(form, "paginaPrimera", 1, repBoletas);
      res.setResponseError(null);
      res.setResponseContent(jsonize(form));
    } else {
      res.setResponseError(errorFechas);
    }

    res.commit();

    return null;
  }
  /**
   * Do carga archivo.
   *
   * @param mapping the mapping
   * @param form the form
   * @param request the request
   * @param response the response
   * @return the action forward
   * @throws Exception the exception
   */
  public final ActionForward doCargaArchivo(
      final ActionMapping mapping,
      final ActionForm form,
      final HttpServletRequest request,
      final HttpServletResponse response)
      throws Exception {

    ReporteConciliacionForm fondosForm = (ReporteConciliacionForm) form;
    String mensaje =
        "Información cargada exitosamente. Se realizara la conciliación "
            + "la cual puede tardar unos minutos.";

    try {
      FormFile archivo = (FormFile) fondosForm.getArchivo();
      InputStream is = archivo.getInputStream();
      String fechaCarga = "";

      if (is.available() == 0) {
        LOG.warn("El archivo " + archivo.getFileName() + " no existe o esta vacio");
        mensaje = "El archivo no contiene información.";
      } else {

        // crear el archivo para bajarlo a disco
        String path = request.getSession().getServletContext().getRealPath(archivo.getFileName());
        FileOutputStream fos = new FileOutputStream(path);

        // recibir los bytes y escribirlos en disco para crear el
        // archivo
        byte[] buffer = new byte[32768];
        int n = 0;
        while ((n = is.read(buffer)) != -1) {
          fos.write(buffer, 0, n);
          fos.flush();
        }

        // cerrar archivo del post
        is.close();

        // cerrar archivo del disco
        archivo.destroy();
        fos.flush();
        fos.close();

        // Guarda ruta del archivo en sesion
        request.getSession().removeAttribute("rutaArchTxt");
        request.getSession().setAttribute("rutaArchTxt", path);

        final ReporteConciliacionService service =
            (ReporteConciliacionService)
                getWebApplicationContext().getBean(REPORTE_CONCILIACION_SERVICE);

        fechaCarga = service.guardaReporteConciliacion(path);
      }

      // cerrar la ventana de carga del txt
      response
          .getWriter()
          .println(
              "<script>function cancelaTxt(){"
                  + "window.opener.cargaPartTxt(); window.hide();}"
                  + "window.opener.cargaParticulares=true; "
                  + "window.opener.fechaCarga='"
                  + fechaCarga
                  + "';"
                  + "window.opener.cargaParticularesMensaje='"
                  + mensaje
                  + "'; cancelaTxt();</script>");

    } catch (Exception e) {
      mensaje = e.getMessage();
      response
          .getWriter()
          .println(
              "<script>function cancelaTxt(){"
                  + "window.opener.cargaPartTxt(); window.close();}"
                  + "window.opener.cargaParticulares=false;"
                  + "window.opener.cargaParticularesMensaje='"
                  + mensaje
                  + "'; cancelaTxt();</script>");

    } finally {
      fondosForm.setArchivo(null);
    }
    return null;
  }
  /**
   * Do editar conciliacion.
   *
   * @param mapping the mapping
   * @param actionForm the action form
   * @param request the request
   * @param response the response
   * @return the action forward
   * @throws Exception the exception
   */
  public final ActionForward doEditarConciliacion(
      final ActionMapping mapping,
      final ActionForm actionForm,
      final HttpServletRequest request,
      final HttpServletResponse response)
      throws Exception {

    PseudoResponse res = new PseudoResponse(request, response);
    ReporteConciliacionForm form;
    String ejecucionNuevo = request.getParameter("ejecucionNuevo");
    String ejecucionAnterior = request.getParameter("ejecucionAnterior");
    String folioNuevo = request.getParameter("folioNuevo");
    String folioAnterior = request.getParameter("folioAnterior");
    final Boolean repBoletas =
        (request.getParameter(REP_BOLETAS) == null)
            ? false
            : Boolean.parseBoolean(request.getParameter(REP_BOLETAS));
    boolean isParcialidad = false;
    boolean isParcialidadAnt = false;
    boolean isFondeo = false;
    boolean isFondeoAnt = false;
    String error = "";

    if (TRUE.equals(request.getParameter("isParcialidad").trim())) {
      isParcialidad = true;
    }
    if (TRUE.equals(request.getParameter("isParcialidadAnt").trim())) {
      isParcialidadAnt = true;
    }
    if (TRUE.equals(request.getParameter("isFondeo").trim())) {
      isFondeo = true;
    }
    if (TRUE.equals(request.getParameter("isFondeoAnt").trim())) {
      isFondeoAnt = true;
    }

    if (actionForm instanceof ReporteConciliacionForm) {
      form = (ReporteConciliacionForm) actionForm;
    } else {
      form = new ReporteConciliacionForm();
    }

    final ReporteConciliacionService service =
        (ReporteConciliacionService)
            getWebApplicationContext().getBean(REPORTE_CONCILIACION_SERVICE);

    if (ejecucionNuevo.trim().equals(ejecucionAnterior.trim())
        && folioNuevo.trim().equals(folioAnterior.trim())
        && isParcialidad == isParcialidadAnt
        && isFondeo == isFondeoAnt) {
      error = ConciliaErrorKeys.PPINV_ERR_CONCILIACION_EDICION_NOCAMBIOS.toString();
    } else if ("".equals(folioNuevo.trim())) {
      error = ConciliaErrorKeys.PPINV_ERR_CONCILIACION_EDICION_FOLIO.toString();
    } else if ("".equals(ejecucionNuevo.trim())) {
      error = ConciliaErrorKeys.PPINV_ERR_CONCILIACION_EDICION_TIPOEJEC.toString();
    }

    if ("".equals(error)) {
      EditarConciliacionForm datosEditConciliacion = form.getDatosEditConciliacion();
      datosEditConciliacion.setFolio(folioNuevo.trim());
      datosEditConciliacion.setFolioAnt(folioAnterior.trim());
      datosEditConciliacion.setEjecucion(ejecucionNuevo.trim());
      datosEditConciliacion.setEjecucionAnt(ejecucionAnterior.trim());
      datosEditConciliacion.setCompraParcial(isParcialidad);
      datosEditConciliacion.setCompraParcialAnt(isParcialidadAnt);
      datosEditConciliacion.setFondeo(isFondeo);
      datosEditConciliacion.setFondeoAnt(isFondeoAnt);

      SantanderSecurityContext sc = null;
      try {
        sc = getSecurityContext(request);
      } catch (Exception e) {
        LOG.error(e.getMessage(), e);
        throw new FrontClientException(GralErrorKeys.PPINV_ERR_GRAL.toString(), e);
      }

      datosEditConciliacion.setMsjRespuesta(
          service.editarConciliacion(datosEditConciliacion, sc, repBoletas));
      res.setResponseError(null);
      res.setResponseContent(jsonize(form));

    } else {
      res.setResponseError(error);
    }
    res.commit();

    return null;
  }