@Override
  public boolean eliminarTelefonoDireccion(Direccion direccion, Connection conexion)
      throws SQLException {
    boolean resultado = false;
    CallableStatement cs = null;
    String sql = "{ ? = call negocio.fn_eliminartelefonosdireccion(?,?,?) }";

    try {
      cs = conexion.prepareCall(sql);
      int i = 1;
      cs.registerOutParameter(i++, Types.BOOLEAN);
      cs.setInt(i++, UtilJdbc.obtenerNumero(direccion.getCodigoEntero()));
      cs.setString(i++, UtilJdbc.convertirMayuscula(direccion.getUsuarioModificacion()));
      cs.setString(i++, direccion.getIpModificacion());

      cs.execute();
      resultado = cs.getBoolean(1);
    } catch (SQLException e) {
      resultado = false;
      throw new SQLException(e);
    } finally {
      try {
        if (cs != null) {
          cs.close();
        }
      } catch (SQLException e) {
        throw new SQLException(e);
      }
    }
    return resultado;
  }
  @Override
  public List<ServicioProveedor> proveedoresXServicio(BaseVO servicio) throws SQLException {
    List<ServicioProveedor> resultado = null;
    Connection conn = null;
    CallableStatement cs = null;
    ResultSet rs = null;
    String sql = "{ ? = call negocio.fn_proveedorxservicio(?) }";

    try {
      conn = UtilConexion.obtenerConexion();
      cs = conn.prepareCall(sql);
      int i = 1;
      cs.registerOutParameter(i++, Types.OTHER);
      cs.setInt(i++, servicio.getCodigoEntero().intValue());
      cs.execute();

      rs = (ResultSet) cs.getObject(1);
      resultado = new ArrayList<ServicioProveedor>();
      ServicioProveedor servicio2 = null;
      while (rs.next()) {
        servicio2 = new ServicioProveedor();
        servicio2.setCodigoEntero(UtilJdbc.obtenerNumero(rs, "id"));
        servicio2.setNombreProveedor(UtilJdbc.obtenerCadena(rs, "nombres"));
        servicio2.setPorcentajeComision(UtilJdbc.obtenerBigDecimal(rs, "porcencomnacional"));
        servicio2.setPorcenComInternacional(
            UtilJdbc.obtenerBigDecimal(rs, "porcencominternacional"));
        resultado.add(servicio2);
      }
    } catch (SQLException e) {
      throw new SQLException(e);
    } finally {
      try {
        if (rs != null) {
          rs.close();
        }
        if (cs != null) {
          cs.close();
        }
        if (conn != null) {
          conn.close();
        }
      } catch (SQLException e) {
        throw new SQLException(e);
      }
    }
    return resultado;
  }
  /* (non-Javadoc)
   * @see pe.com.logistica.negocio.dao.ReporteVentasDao#reporteGeneralVentas(java.util.Date, java.util.Date)
   */
  @Override
  public List<DetalleServicioAgencia> reporteGeneralVentas(ReporteVentas reporteVentas)
      throws SQLException {
    Connection conn = null;
    CallableStatement cs = null;
    ResultSet rs = null;
    String sql = "{ ? = call reportes.fn_re_generalventas(?,?,?) }";
    List<DetalleServicioAgencia> resultado = null;

    try {
      conn = UtilConexion.obtenerConexion();
      cs = conn.prepareCall(sql);
      int i = 1;
      cs.registerOutParameter(i++, Types.OTHER);
      cs.setDate(i++, UtilJdbc.convertirUtilDateSQLDate(reporteVentas.getFechaDesde()));
      cs.setDate(i++, UtilJdbc.convertirUtilDateSQLDate(reporteVentas.getFechaHasta()));
      if (reporteVentas.getVendedor().getCodigoEntero() != null
          && reporteVentas.getVendedor().getCodigoEntero().intValue() != 0) {
        cs.setInt(i++, reporteVentas.getVendedor().getCodigoEntero().intValue());
      } else {
        cs.setNull(i++, Types.INTEGER);
      }
      cs.execute();
      rs = (ResultSet) cs.getObject(1);
      resultado = new ArrayList<DetalleServicioAgencia>();
      DetalleServicioAgencia detalle = null;
      while (rs.next()) {
        detalle = new DetalleServicioAgencia();
        detalle.getTipoServicio().setCodigoEntero(UtilJdbc.obtenerNumero(rs, "idtiposervicio"));
        detalle.getTipoServicio().setNombre(UtilJdbc.obtenerCadena(rs, "nombre"));
        detalle.setCantidad(UtilJdbc.obtenerNumero(rs, "cantidad"));
        detalle.setTotalAgrupados(UtilJdbc.obtenerBigDecimal(rs, "montototal"));
        detalle.setMontoComision(UtilJdbc.obtenerBigDecimal(rs, "montocomision"));
        resultado.add(detalle);
      }

    } catch (SQLException e) {
      throw new SQLException(e);
    } finally {
      try {
        if (rs != null) {
          rs.close();
        }
        if (cs != null) {
          cs.close();
        }
        if (conn != null) {
          conn.close();
        }
      } catch (SQLException e) {
        throw new SQLException(e);
      }
    }

    return resultado;
  }
  @Override
  public int registrarDireccion(Direccion direccion, Connection conexion) throws SQLException {
    int resultado = 0;
    CallableStatement cs = null;
    String sql = "{ ? = call negocio.fn_ingresardireccion(?,?,?,?,?,?,?,?,?,?,?,?) }";

    try {
      cs = conexion.prepareCall(sql);
      int i = 1;
      cs.registerOutParameter(i++, Types.INTEGER);
      cs.setInt(i++, direccion.getVia().getCodigoEntero());
      if (StringUtils.isNotBlank(direccion.getNombreVia())) {
        cs.setString(i++, UtilJdbc.convertirMayuscula(direccion.getNombreVia()));
      } else {
        cs.setNull(i++, Types.VARCHAR);
      }
      if (StringUtils.isNotBlank(direccion.getNumero())) {
        cs.setString(i++, direccion.getNumero());
      } else {
        cs.setNull(i++, Types.VARCHAR);
      }
      if (StringUtils.isNotBlank(direccion.getInterior())) {
        cs.setString(i++, direccion.getInterior());
      } else {
        cs.setNull(i++, Types.VARCHAR);
      }
      if (StringUtils.isNotBlank(direccion.getManzana())) {
        cs.setString(i++, UtilJdbc.convertirMayuscula(direccion.getManzana()));
      } else {
        cs.setNull(i++, Types.VARCHAR);
      }
      if (StringUtils.isNotBlank(direccion.getLote())) {
        cs.setString(i++, UtilJdbc.convertirMayuscula(direccion.getLote()));
      } else {
        cs.setNull(i++, Types.VARCHAR);
      }
      cs.setString(i++, direccion.isPrincipal() ? "S" : "N");
      if (StringUtils.isNotBlank(direccion.getUbigeo().getCodigoCadena())) {
        cs.setString(i++, direccion.getUbigeo().getCodigoCadena());
      } else {
        cs.setNull(i++, Types.VARCHAR);
      }
      if (StringUtils.isNotBlank(direccion.getUsuarioCreacion())) {
        cs.setString(i++, UtilJdbc.convertirMayuscula(direccion.getUsuarioCreacion()));
      } else {
        cs.setNull(i++, Types.VARCHAR);
      }
      if (StringUtils.isNotBlank(direccion.getIpCreacion())) {
        cs.setString(i++, direccion.getIpCreacion());
      } else {
        cs.setNull(i++, Types.VARCHAR);
      }
      if (StringUtils.isNotBlank(direccion.getObservaciones())) {
        cs.setString(i++, UtilJdbc.convertirMayuscula(direccion.getObservaciones()));
      } else {
        cs.setNull(i++, Types.VARCHAR);
      }
      if (StringUtils.isNotBlank(direccion.getReferencia())) {
        cs.setString(i++, UtilJdbc.convertirMayuscula(direccion.getReferencia()));
      } else {
        cs.setNull(i++, Types.VARCHAR);
      }

      cs.execute();
      resultado = cs.getInt(1);
    } catch (SQLException e) {
      resultado = 0;
      throw new SQLException(e);
    } finally {
      try {
        if (cs != null) {
          cs.close();
        }
      } catch (SQLException e) {
        throw new SQLException(e);
      }
    }
    return resultado;
  }
  @Override
  public List<Direccion> consultarDireccionProveedor(int idProveedor) throws SQLException {
    List<Direccion> resultado = null;
    Connection conn = null;
    CallableStatement cs = null;
    ResultSet rs = null;
    String sql = "select * " + " from negocio.vw_consultadireccionproveedor where idpersona = ?";

    try {
      conn = UtilConexion.obtenerConexion();
      cs = conn.prepareCall(sql);
      cs.setInt(1, idProveedor);
      rs = cs.executeQuery();

      resultado = new ArrayList<Direccion>();
      Direccion direccion = null;
      TelefonoDao telefonoDao = new TelefonoDaoImpl();
      while (rs.next()) {
        direccion = new Direccion();
        direccion.setCodigoEntero(UtilJdbc.obtenerNumero(rs, "id"));
        direccion.getVia().setCodigoEntero(UtilJdbc.obtenerNumero(rs, "idvia"));
        direccion.setNombreVia(UtilJdbc.obtenerCadena(rs, "nombrevia"));
        direccion.setNumero(UtilJdbc.obtenerCadena(rs, "numero"));
        direccion.setInterior(UtilJdbc.obtenerCadena(rs, "interior"));
        direccion.setManzana(UtilJdbc.obtenerCadena(rs, "manzana"));
        direccion.setLote(UtilJdbc.obtenerCadena(rs, "lote"));
        direccion.setPrincipal(UtilJdbc.convertirBooleanSiNo(rs, "principal"));
        direccion.getUbigeo().setCodigoCadena(UtilJdbc.obtenerCadena(rs, "idubigeo"));
        direccion
            .getUbigeo()
            .getDepartamento()
            .setCodigoCadena(UtilJdbc.obtenerCadena(rs, "iddepartamento"));
        direccion
            .getUbigeo()
            .getDepartamento()
            .setNombre(UtilJdbc.obtenerCadena(rs, "departamento"));
        direccion
            .getUbigeo()
            .getProvincia()
            .setCodigoCadena(UtilJdbc.obtenerCadena(rs, "idprovincia"));
        direccion.getUbigeo().getProvincia().setNombre(UtilJdbc.obtenerCadena(rs, "provincia"));
        direccion
            .getUbigeo()
            .getDistrito()
            .setCodigoCadena(UtilJdbc.obtenerCadena(rs, "iddistrito"));
        direccion.getUbigeo().getDistrito().setNombre(UtilJdbc.obtenerCadena(rs, "distrito"));
        direccion.setUsuarioCreacion(UtilJdbc.obtenerCadena(rs, "usuariocreacion"));
        direccion.setFechaCreacion(UtilJdbc.obtenerFecha(rs, "fechacreacion"));
        direccion.setIpCreacion(UtilJdbc.obtenerCadena(rs, "ipcreacion"));
        direccion.setObservaciones(UtilJdbc.obtenerCadena(rs, "observacion"));
        direccion.setReferencia(UtilJdbc.obtenerCadena(rs, "referencia"));
        direccion.setTelefonos(
            telefonoDao.consultarTelefonoDireccion(direccion.getCodigoEntero().intValue(), conn));
        resultado.add(direccion);
      }

    } catch (SQLException e) {
      resultado = null;
      throw new SQLException(e);
    } finally {
      try {
        if (rs != null) {
          rs.close();
        }
        if (cs != null) {
          cs.close();
        }
        if (conn != null) {
          conn.close();
        }
      } catch (SQLException e) {
        try {
          if (conn != null) {
            conn.close();
          }
          throw new SQLException(e);
        } catch (SQLException e1) {
          throw new SQLException(e);
        }
      }
    }

    return resultado;
  }