/**
   * Recibe la peticion para realizar una transferencia de efectivo a un numero de telefono movil
   * asociado a una cuenta de cheques de otros bancos
   *
   * @param req HttpServletRequest
   * @param resp HttpServletResponse
   * @return ModelAndView
   * @throws Exception la exception
   */
  public ModelAndView transferirMovilOtrosBancos(HttpServletRequest req, HttpServletResponse resp)
      throws Exception {
    JSONResponseBean response = new JSONResponseBean();
    ClienteBean cliente = (ClienteBean) req.getSession().getAttribute(LITERAL_CLIENTE);
    JSONObject jTransferenciaMovil = getJSONRequestObject(req);
    JSONObject jsonResponse = new JSONObject();
    BitacoraBean bitacora = getBitacoraBean(req);

    if (cliente != null) {
      try {
        Date fechaResponse = new Date();
        boolean esOperacionRapida = false;
        TransferenciaMovilOtrosBancos transferenciaMovil = new TransferenciaMovilOtrosBancos();

        JSONObject jCuentaOrigen =
            JSONObject.fromObject(jTransferenciaMovil.get("cuentaBeanOrigen").toString());
        CuentaBean cuentaOrigen = (CuentaBean) JSONObject.toBean(jCuentaOrigen, CuentaBean.class);

        JSONObject jMovilDestino =
            JSONObject.fromObject(jTransferenciaMovil.get("movilDestino").toString());
        NumeroMovilRegistrado movilDestino =
            (NumeroMovilRegistrado) JSONObject.toBean(jMovilDestino, NumeroMovilRegistrado.class);

        transferenciaMovil.setCuentaOrigen(cuentaOrigen);
        transferenciaMovil.setMovilDestino(movilDestino);
        transferenciaMovil.setCliente(cliente);
        transferenciaMovil.setBitacora(bitacora);
        transferenciaMovil.setConcepto(jTransferenciaMovil.getString("concepto"));
        transferenciaMovil.setFecha(jTransferenciaMovil.getString(LITERAL_FECHA));
        transferenciaMovil.setImporte(jTransferenciaMovil.getString("importe"));
        transferenciaMovil.setImporteIVA(jTransferenciaMovil.getString("importeiva"));
        transferenciaMovil.setRfc(jTransferenciaMovil.getString("rfc"));
        transferenciaMovil.setToken(jTransferenciaMovil.getString("token"));
        transferenciaMovil.setTipoTransferencia(jTransferenciaMovil.getString("tipoTransferencia"));
        transferenciaMovil.setReferencia(jTransferenciaMovil.getString("referencia"));
        esOperacionRapida = jTransferenciaMovil.getBoolean("esOperacionRapida");

        try {
          transferenciaMovil.setCorreoTerceros(jTransferenciaMovil.getString("mailtercero"));
          transferenciaMovil.setEnviarCorreoTerceros(
              jTransferenciaMovil.getBoolean("sendselfmailTercero"));
        } catch (JSONException e) {
        }

        if (esOperacionRapida) {
          validarOperacion(req, resp, "TRNI", "0_06", "014", cliente.getClaveCliente());
        } else {
          validarOperacion(
              req,
              resp,
              SantanderConstantesMovilService.TTMO,
              "0_06",
              "014",
              cliente.getClaveCliente());
        }

        TransferenciaInterbancariaBean transferenciaBean =
            transferenciaMovilService.transferirMovilOtrosBancos(transferenciaMovil);

        jsonResponse.put("referencia", transferenciaBean.getNumeroReferencia());
        jsonResponse.put("estatus", transferenciaBean.getEstatusComprobante());
        jsonResponse.put(LITERAL_FECHA, Utils.sdf.format(fechaResponse));
        jsonResponse.put("hora", Utils.hora.format(fechaResponse));
        response.setDto(jsonResponse.toString());
        response.setError(ErrorBean.SUCCESS);
        req.getSession().removeAttribute(SALTOSUCCESS);
        req.getSession().removeAttribute(LITERAL_TIPOPER);
      } catch (BusinessException e) {
        response.setError(e.getError());
      }
    } else {
      response.setError(LITERAL_GBL_03);
    }

    return getResponseView(response);
  }
  /**
   * Recibe la peticion para realizar una transferencia de efectivo a un numero de telefono movil
   * asociado a una cuenta de cheques
   *
   * @param req : HttpServletRequest
   * @param resp :HttpServletResponse
   * @return : ModelAndView
   * @throws Exception : la exception
   */
  public ModelAndView transferirMovilTerceros(HttpServletRequest req, HttpServletResponse resp)
      throws Exception {
    JSONResponseBean response = new JSONResponseBean();
    ClienteBean cliente = (ClienteBean) req.getSession().getAttribute(LITERAL_CLIENTE);
    JSONObject jsonRequest = getJSONRequestObject(req);
    JSONObject jsonResponse = new JSONObject();
    BitacoraBean bitacora = getBitacoraBean(req);

    if (cliente != null) {
      try {
        Date fechaResponse = new Date();
        boolean esOperacionRapida = false;
        JSONObject jTransferenciaMovil =
            JSONObject.fromObject(jsonRequest.get("transferenciaMovilBean").toString());
        TransferenciaMovilTerceros transferenciaMovil = new TransferenciaMovilTerceros();

        JSONObject jCuentaOrigen =
            JSONObject.fromObject(jTransferenciaMovil.get("cuentaOrigen").toString());
        CuentaBean cuentaOrigen = (CuentaBean) JSONObject.toBean(jCuentaOrigen, CuentaBean.class);

        JSONObject jMovilDestino =
            JSONObject.fromObject(jTransferenciaMovil.get("movilDestino").toString());
        AsociacionCuentaMovilBean movilDestino =
            (AsociacionCuentaMovilBean)
                JSONObject.toBean(jMovilDestino, AsociacionCuentaMovilBean.class);

        transferenciaMovil.setCuentaOrigen(cuentaOrigen);
        transferenciaMovil.setMovilDestino(movilDestino);
        transferenciaMovil.setCliente(cliente);
        transferenciaMovil.setBitacora(bitacora);
        transferenciaMovil.setConcepto(jTransferenciaMovil.getString("concepto"));
        transferenciaMovil.setFecha(jTransferenciaMovil.getString(LITERAL_FECHA));
        transferenciaMovil.setImporte(jTransferenciaMovil.getString("importe"));
        transferenciaMovil.setImporteIVA(jTransferenciaMovil.getString("importeiva"));
        transferenciaMovil.setRfc(jTransferenciaMovil.getString("rfc"));
        transferenciaMovil.setToken(jTransferenciaMovil.getString("token"));
        esOperacionRapida = jTransferenciaMovil.getBoolean("esOperacionRapida");

        if (esOperacionRapida) {
          validarOperacion(req, resp, "TRNT", "0_01", "014", cliente.getClaveCliente());
        } else {
          validarOperacion(
              req,
              resp,
              SantanderConstantesMovilService.TTMT,
              "0_01",
              "014",
              cliente.getClaveCliente());
        }

        ParSalTraConCamDivCtrBean res =
            transferenciaMovilService.transferirMovilTerceros(transferenciaMovil);

        jsonResponse.put("referencia", res.getReferencia());
        jsonResponse.put("Amntmn", res.getOAmntmn());
        jsonResponse.put("Amntusd", res.getOAmtusd());
        jsonResponse.put("operacion", res.getOperacion());
        jsonResponse.put(LITERAL_FECHA, Utils.sdf.format(fechaResponse));
        jsonResponse.put("hora", Utils.hora.format(fechaResponse));
        response.setDto(jsonResponse.toString());
        response.setError(ErrorBean.SUCCESS);
        req.getSession().removeAttribute(SALTOSUCCESS);
        req.getSession().removeAttribute(LITERAL_TIPOPER);
      } catch (BusinessException e) {
        response.setError(e.getError());
      } catch (JSONException e) {
        response.setError("e-2");
      }
    } else {
      response.setError(LITERAL_GBL_03);
    }

    return getResponseView(response);
  }