/// <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; }
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; }
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(); }
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; }
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; }
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; }
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; }
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 ""; }
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(); }