/**
   * Desinstala una unidad documental de la ubicación que ocupa en el depósito físico
   *
   * @param idUdoc Identificador de unidad documental
   */
  public void desinstalarUnidadDocumental(String idUdoc) {
    // Auditoria
    LoggingEvent logEvent = getLogginEvent(ArchivoActions.FONDOS_MODULE_BAJA_UDOCENUI);
    DataLoggingEvent logData = logEvent.getDataLoggingEvent(ArchivoObjects.OBJECT_UDOC, idUdoc);
    UnidadDocumentalVO udoc = getUnidadDocumental(idUdoc);
    Locale locale = getServiceClient().getLocale();

    logData.addDetalle(locale, ArchivoDetails.SELECCION_COD_UDOC, udoc.getCodigo());
    logData.addDetalle(locale, ArchivoDetails.SELECCION_COD_UDOC, udoc.getNumExp());

    checkPermission(FondosSecurityManager.BAJAUDOC_ENUI_ACTION);
    iniciarTransaccion();
    _udocDepositoDBEntity.deleteUdoc(idUdoc);
    commit();
  }
  private void eliminarUnidadDocumental(UnidadDocumentalVO udoc, Integer motivo) throws Exception {
    // Abrimos la transaccion
    iniciarTransaccion();

    // // TODO Incorporar la udoc al histórico
    // HistoricoUDOCVO historicoUDOC = new HistoricoUDOCVO();
    // historicoUDOC.setCodRefUdoc(udoc.getCodReferencia());
    // historicoUDOC.setIdEliminacion(null); // Error: NOT NULL
    // historicoUDOC.setIdUDOC(udoc.getId());
    // historicoUDOC.setSignaturaUdoc(udoc.getCodigo());
    // historicoUDOC.setTituloUdoc(udoc.getTitulo());
    // historicoUDOC.setNumExpUdoc(udoc.getNumExp());
    // getGestionEliminacionBI().crearHistoricoUDOC( historicoUDOC );

    // Eliminar la descripción
    if (udoc.tieneDescripcion())
      getGestionDescripcionBI().deleteFicha(udoc.getId(), TipoFicha.FICHA_ELEMENTO_CF);

    // Eliminar los documentos electrónicos
    GestionDocumentosElectronicosBI serviceDocumentos = getGestionDocumentosElectronicosBI();
    serviceDocumentos.deleteDocumentos(udoc.getId(), TipoObjeto.ELEMENTO_CF);

    // Eliminamos las referencias a documentos vitales
    getGestionDocumentosVitalesBI()
        .eliminaVinculosExpediente(udoc.getNumExp(), udoc.getCodSistProductor());

    // Eliminar las tareas de captura relacionadas
    serviceDocumentos.eliminarTareas(
        udoc.getId(), ElementoCuadroClasificacion.TIPO_UNIDAD_DOCUMENTAL);

    // Desinstalar la unidad documental
    List partesUdoc = getUdocsEnUI(udoc.getId());
    CollectionUtils.transform(
        partesUdoc,
        new Transformer() {
          public Object transform(Object obj) {
            return ((UDocEnUiDepositoVO) obj).getIduinstalacion();
          }
        });
    desinstalarUnidadDocumental(udoc.getId());

    // Eliminar la unidad documental y el elemento del cuadro
    eliminarUdocBasico(udoc.getId());

    // Comprobar las unidades de instalación distintas
    // y si son vacías las eliminamos.
    int numUnidadesInstalacion = 0;
    // int volumenEliminado = 0;
    double volumenEliminado = 0;
    GestorEstructuraDepositoBI serviceEstructura = getGestorEstructuraDepositoBI();
    for (Iterator itUnidades = partesUdoc.iterator(); itUnidades.hasNext(); ) {
      String idUnidadInstalacion = (String) itUnidades.next();

      List udocsEnUI = getUdocsEnUnidadInstalacion(idUnidadInstalacion);
      if (CollectionUtils.isEmpty(udocsEnUI)) {
        UInsDepositoVO unidadInstalacion = serviceEstructura.getUinsEnDeposito(idUnidadInstalacion);

        FormatoHuecoVO formato =
            serviceEstructura.getFormatoHueco(unidadInstalacion.getIdformato());
        // volumenEliminado += formato.getLongitud().intValue();

        if (formato != null) {
          if (formato.getLongitud() == null
              || formato.getLongitud().doubleValue() == Double.MIN_VALUE)
            volumenEliminado +=
                serviceEstructura.getLongitudHuecosIrregularesXIdUInstalacion(idUnidadInstalacion);
          else volumenEliminado += formato.getLongitud().doubleValue();
        }

        if (unidadInstalacion == null) {
          unidadInstalacion = new UInsDepositoVO();
          unidadInstalacion.setId(idUnidadInstalacion);
        }

        // Obtener el idArchivo
        HuecoVO huecoVO = serviceEstructura.getHuecoUInstalacion(idUnidadInstalacion);

        String idArchivo = null;
        if (huecoVO != null) {
          DepositoVO deposito = serviceEstructura.getUbicacion(huecoVO.getIddeposito());

          if (deposito != null) idArchivo = deposito.getIdArchivo();
        }

        serviceEstructura.deleteUInstDeposito(idArchivo, unidadInstalacion, motivo);
        serviceEstructura.liberaUnidadInstalacion(idUnidadInstalacion);

        numUnidadesInstalacion++;
      }
    }

    // Actualizar los datos de la serie
    GestionSeriesBI serieBI = getGestionSeriesBI();
    serieBI.updateVolumenSerieNoTransaccional(udoc.getIdSerie());
    serieBI.updateContenidoSerieNoTransaccional(udoc.getIdSerie());

    // Cerramos la transaccion
    commit();
  }