예제 #1
0
 /// <summary>
 /// Comprueba que los ficheros necesarios para rellenar a la solicitud están.
 /// Asocia esos ficheros como documentos a la solicitud de que se trate.
 /// </summary>
 /// <param name="webRoot">Directorio de subida de ficheros</param>
 /// <param name="tk">Tique de autorización (caso especial "solicitud")</param>
 /// <param name="solProveedor">Solicitud de proveedor a procesar</param>
 /// <param name="ctx">Contexto para acceso a la base de datos (OpenAccess)</param>
 /// <returns></returns>
 public static string ComprobarCargarFicherosProveedor(string webRoot, string tk, SolicitudProveedor solProveedor, PortalProContext ctx)
 {
     string mens = ""; // mensaje que devoveremos, si vacío todo OK
     string[] listaFicheros; // lista de los ficheros contenidos en el directorio de carga
     // lo primero de todo que no ha habido un error en el directorio 
     if (!Directory.Exists(webRoot))
     {
         return "No existe el directorio de carga";
     }
     else
     {
         // cargamos la lista de ficheros del directorio de carga
         listaFicheros = Directory.GetFiles(webRoot);
     }
     // comprobamos si existe el parámetro que define donde esta el repositorio
     string repo = ConfigurationManager.AppSettings["PortalProRepositorio"];
     if (repo == null || repo == "")
     {
         return "No existe o está vació el parámetro de ubicación del repositorio en el Web.config";
     }
     // comprobamos que el directorio físicamente existe (si no lo creamos);
     if (!Directory.Exists(repo))
     {
         Directory.CreateDirectory(repo);
     }
     // por cada tipo de fichero asociado al grupo de proveedores al que pertenecerá este
     // comprbamos que existe el fichero correspondiente en el directorio de carga.
     foreach (TipoDocumentoGrupoProveedor tdgp in solProveedor.GrupoProveedor.TipoDocumentoGrupoProveedors)
     {
         TipoDocumento td = tdgp.TipoDocumento;
         string buscador = String.Format("{0}#{1}#", tk, td.TipoDocumentoId);
         string fichero = (from f in listaFicheros
                           where f.Contains(buscador)
                           select f).FirstOrDefault<string>();
         if (fichero == null)
         {
             return "Faltan ficheros asociados a este proveedor";
         }
         // creamos el documento correspondiente asignando un nuevo nombre que empieza por el NIF
         Documento d = new Documento();
         d.TipoDocumento = td;
         d.SolicitudProveedor = solProveedor;
         int posFich = fichero.LastIndexOf("#");
         int posExten = fichero.LastIndexOf(".");
         d.NomFichero = String.Format("{0}_{1}_{2}", solProveedor.Nif, td.TipoDocumentoId, fichero.Substring(posFich + 1));
         d.Extension = fichero.Substring(posExten + 1);
         // copiamos al repositorio
         File.Copy(fichero, Path.Combine(repo, d.NomFichero));
         ctx.Add(d);
     }
     // si llegamos aquí podemos borrar los ficheros del directorio de carga
     var rs = (from f in listaFicheros
               where f.Contains(String.Format("{0}#", tk))
               select f);
     foreach (string f in rs)
     {
         File.Delete(f);
     }
     return mens;
 }
예제 #2
0
 public static string CargarUrlDocumento(string application, Documento d, string tk)
 {
     if (d == null)
         return "";
     string url = "";
     // copiamos el fichero del repositiorio al directorio de descargas
     string portalProRepo = ConfigurationManager.AppSettings["PortalProRepository"];
     string downloadRepository = ConfigurationManager.AppSettings["DownloadRepository"];
     switch (application)
     {
         case "PortalPro":
             downloadRepository = ConfigurationManager.AppSettings["DownloadRepository"];
             break;
         case "PortalPro2":
             downloadRepository = ConfigurationManager.AppSettings["DownloadRepository2"];
             break;
     }
     string fichero = String.Format("{0:000000}-{1}", d.DocumentoId, d.NomFichero);
     string origen = Path.Combine(portalProRepo, fichero);
     string destino = Path.Combine(downloadRepository, String.Format("{0}-{1}", tk, fichero));
     url = String.Format("{0}-{1}", tk, fichero);
     File.Copy(origen, destino, true);
     return url;
 }
예제 #3
0
 public static void EliminarDocumento(Documento d, PortalProContext ctx)
 {
     if (d == null)
         return;
     // eliminamos el fichero físico asociado
     string portalProRepo = ConfigurationManager.AppSettings["PortalProRepository"];
     string fichero = String.Format("{0:000000}-{1}", d.DocumentoId, d.NomFichero);
     string ficheroCompleto = Path.Combine(portalProRepo, fichero);
     ctx.Delete(d);
     File.Delete(ficheroCompleto);
     ctx.SaveChanges();
 }
예제 #4
0
 public static Documento CrearDocumentoDesdeArchivoCargado(string application, string fichero, PortalProContext ctx)
 {
     Documento d = null;
     // siempre creamos un nuevo documento
     string portalProRepo = ConfigurationManager.AppSettings["PortalProRepository"];
     string uploadRepo = ConfigurationManager.AppSettings["UploadRepository"];
     switch (application)
     {
         case "PortalPro":
             uploadRepo = ConfigurationManager.AppSettings["UploadRepository"];
             break;
         case "PortalPro2":
             uploadRepo = ConfigurationManager.AppSettings["UploadRepository2"];
             break;
     }
     d = new Documento();
     int pos = fichero.LastIndexOf(".");
     if (pos > -1)
         d.Extension = fichero.Substring(pos + 1);
     pos = fichero.LastIndexOf("-");
     if (pos > 0)
         d.NomFichero = fichero.Substring(pos + 1);
     ctx.Add(d);
     ctx.SaveChanges();
     string nFichero = String.Format("{0:000000}-{1}", d.DocumentoId, d.NomFichero);
     string origen = Path.Combine(uploadRepo, fichero);
     string destino = Path.Combine(portalProRepo, nFichero);
     File.Move(origen, destino);
     ctx.SaveChanges();
     return d;
 }
예제 #5
0
 public static string ObtenerUrlDeDocumento(string webRoot, string tk, Documento doc, PortalProContext ctx)
 {
     string mens = ""; // mensaje que devoveremos, si vacío todo OK
     string[] listaFicheros; // lista de los ficheros contenidos en el directorio de carga
     // lo primero de todo que no ha habido un error en el directorio 
     if (!Directory.Exists(webRoot))
     {
         return "No existe el directorio de carga";
     }
     // Hay que copiar los ficheros al directorio de carga para obtener la url
     // leer de parámetros la ubicación del repositorio.
     string repo = ConfigurationManager.AppSettings["PortalProRepositorio"];
     if (repo == null || repo == "")
     {
         return "No existe o está vació el parámetro de ubicación del repositorio en el Web.config";
     }
     // a partir de la información del documento copiar al directorio de descarga el 
     // fichero en cuestión, identificado con el ticket y el tipo.
     // En el propio objeto documento se monta la url
     string fichero = Path.Combine(repo, doc.NomFichero);
     string destino = Path.Combine(webRoot, String.Format("{0}_{1}", tk, doc.NomFichero));
     File.Copy(fichero, destino, true);
     doc.DescargaUrl = "/downloads/" + String.Format("{0}_{1}", tk, doc.NomFichero);
     return mens;
 }
예제 #6
0
 public static string CargarUrlDocumento(Documento d, string usuario, string item, HttpRequest request)
 {
     if (d == null)
         return "";
     string url = "";
     // copiamos el fichero del repositiorio al directorio de descargas
     string portalProRepo = ConfigurationManager.AppSettings["PortalProRepository"];
     string downloadRepository = AppDomain.CurrentDomain.BaseDirectory + "\\downloads";
     string fichero = String.Format("{0:000000}-{1}", d.DocumentoId, d.NomFichero);
     string origen = Path.Combine(portalProRepo, fichero);
     int tipo = 0;
     if (d.TipoDocumento != null) tipo = d.TipoDocumento.TipoDocumentoId;
     string fileName = String.Format("{0}-{1}-{2}-{3}", usuario, item, tipo, d.NomFichero);
     string destino = Path.Combine(downloadRepository, fileName);
     // borrar posibles anteriores
     string fileDelete = String.Format("{0}-{1}-{2}-*", usuario, item, tipo);
     foreach (FileInfo f in new DirectoryInfo(downloadRepository).GetFiles(fileDelete))
     {
         f.Delete();
     }
     File.Copy(origen, destino, true);
     // ahora montamos las url
     int pos = request.Url.AbsoluteUri.IndexOf("/", 8);
     if (pos > -1)
         url = request.Url.AbsoluteUri.Substring(0, pos) + "/downloads/" + fileName;
     return url;
 }
예제 #7
0
 public static Documento CrearFicheroDocumento(string usuario, string item, Documento doc, PortalProContext ctx)
 {
     if (doc == null) return null;
     if (doc.DescargaUrl == null) return null;
     Documento d = null;
     if (doc.DocumentoId == 0)
     {
         // es un documento recién creado, debe tener el fichero en uploads
         if (doc.DescargaUrl == "" || (doc.DescargaUrl.IndexOf("uploads") == -1)) return null;
         int tipo = 0;
         string archivo = "";
         string extension = "";
         string nomFichero = "";
         if (doc.TipoDocumento != null) tipo = doc.TipoDocumento.TipoDocumentoId;
         // buscamos el directorio físico que se corresponde a website/uploads
         string uploadDirectory = AppDomain.CurrentDomain.BaseDirectory + "\\uploads";
         string searchFileName = String.Format("{0}-{1}-{2}-*", usuario, item, tipo);
         string[] archivos = Directory.GetFiles(uploadDirectory, searchFileName);
         // si encontramos algún coincidente devolvemos el primero.
         if (archivos.Length > 0)
             archivo = archivos[0];
         // si contiene un path lo eliminamos (solo el nombre final de fcihero)
         int pos = archivo.LastIndexOf("-");
         if (pos > -1) nomFichero = archivo.Substring(pos + 1);
         // ahora la extensión
         pos = archivo.LastIndexOf(".");
         if (pos > -1) extension = archivo.Substring(pos + 1);
         // creamos el documento
         d = new Documento();
         d.DescargaUrl = "";
         d.Extension = extension;
         d.NomFichero = nomFichero;
         d.TipoDocumento = doc.TipoDocumento;
         d.Comentario = doc.Comentario;
         ctx.Add(d);
         ctx.SaveChanges();
         int id = d.DocumentoId;
         // copiamos el documento físicamente al repositorio
         string repoDirectory = ConfigurationManager.AppSettings["PortalProRepository"];
         string origen = Path.Combine(uploadDirectory, archivo);
         string nomDestino = String.Format("{0:000000}-{1}", d.DocumentoId, d.NomFichero);
         string destino = Path.Combine(repoDirectory, nomDestino);
         File.Copy(origen, destino, true);
         // una vez copiado ha de borrase el subido
         File.Delete(origen);
     }
     else
     {
         // el documento existe, solamente en el caso de que su URL esté
         // en uploads indicará que quieren cambiar el fichero
         if (doc.DescargaUrl.IndexOf("uploads") == -1)
         {
             // dejamos el documento como está
             d = doc;
         }
         else
         {
             // quieren cambiar el fichero asociado al documento
             // borramos el antiguo salvando el tipo de documento por si acaso
             int tipo = 0;
             TipoDocumento tipoDocumento = null;
             if (doc.TipoDocumento != null)
             {
                 tipo = doc.TipoDocumento.TipoDocumentoId;
                 tipoDocumento = doc.TipoDocumento;
             }
             // para eliminar el documento no puede ser trasient
             // hay que leerlo de la base de datos
             doc = (from dc in ctx.Documentos
                    where dc.DocumentoId == doc.DocumentoId
                    select dc).FirstOrDefault<Documento>();
             EliminarFicheroDocumento(doc);
             // y creamos el nuevo
             string archivo = "";
             string extension = "";
             string nomFichero = "";
             // buscamos el directorio físico que se corresponde a website/uploads
             string uploadDirectory = AppDomain.CurrentDomain.BaseDirectory + "\\uploads";
             string searchFileName = String.Format("{0}-{1}-{2}-*", usuario, item, tipo);
             string[] archivos = Directory.GetFiles(uploadDirectory, searchFileName);
             // si encontramos algún coincidente devolvemos el primero.
             if (archivos.Length > 0)
                 archivo = archivos[0];
             // si contiene un path lo eliminamos (solo el nombre final de fcihero)
             int pos = archivo.LastIndexOf("-");
             if (pos > -1) nomFichero = archivo.Substring(pos + 1);
             // ahora la extensión
             pos = archivo.LastIndexOf(".");
             if (pos > -1) extension = archivo.Substring(pos + 1);
             // modificacmos la asociación del documento
             doc.NomFichero = nomFichero;
             doc.Extension = extension;
             int id = doc.DocumentoId;
             // copiamos el documento físicamente al repositorio
             string repoDirectory = ConfigurationManager.AppSettings["PortalProRepository"];
             string origen = Path.Combine(uploadDirectory, archivo);
             string nomDestino = String.Format("{0:000000}-{1}", doc.DocumentoId, doc.NomFichero);
             string destino = Path.Combine(repoDirectory, nomDestino);
             File.Copy(origen, destino, true);
             ctx.SaveChanges();
             d = doc;
             // una vez copiado ha de borrase el subido
             File.Delete(origen);
         }
     }
     return d;
 }
예제 #8
0
        public static string ObtenerFicheroDocumento(string usuario, string item, Documento doc) 
        {
            if (doc == null) return "";
            // hay que copiar el archivo desde el repositorio al directorio de descargas
            // que es el del sitio más "/downloads"

            //
            return "";
        }
예제 #9
0
        public static void EliminarDocumento(Documento d, PortalProContext ctx)
        {
            if (d == null) return;
            if (d.DocumentoId == 0)
            {
                // el documento está vacío
                return;
            }
            // hay que considerar que si eliminamos el documento
            // puede dar error de clave referencial.

            EliminarFicheroDocumento(d);
            ctx.Delete(d);
            ctx.SaveChanges();
        }