/// <summary> /// Modificar un proveedor. En el cuerpo del mensaje se envía en el formato adecuado el objeto con los datos modificados /// </summary> /// <param name="id"> Identificador único del grupo </param> /// <param name="proveedor">Grupo de proveedor con los valores que se desean en sus atributos</param> /// <param name="tk"> Tique de autorización (Ver 'Login')</param> /// <returns></returns> public virtual Proveedor Put(int id, Proveedor proveedor, string tk) { using (PortalProContext ctx = new PortalProContext()) { // comprobar el tique if (!CntWebApiSeguridad.CheckTicket(tk, ctx)) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (Proveedores)")); } // comprobar los formatos if (proveedor == null || id != proveedor.ProveedorId) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // primero buscamos si un proveedor con ese id existe Proveedor pro = (from p in ctx.Proveedors where p.ProveedorId == id select p).FirstOrDefault<Proveedor>(); // existe? if (pro == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un proveedor con el id proporcionado (Proveedores)")); } int grupoProveedorId = 0; // Controlamos las propiedades que son en realidad objetos. if (proveedor.GrupoProveedor != null) { grupoProveedorId = proveedor.GrupoProveedor.GrupoProveedorId; proveedor.GrupoProveedor = null; } // modificar el objeto ctx.AttachCopy<Proveedor>(proveedor); // volvemos a leer el objecto para que lo maneje este contexto. proveedor = (from u in ctx.Proveedors where u.ProveedorId == id select u).FirstOrDefault<Proveedor>(); if (grupoProveedorId != 0) { proveedor.GrupoProveedor = (from gp in ctx.GrupoProveedors where gp.GrupoProveedorId == grupoProveedorId select gp).FirstOrDefault<GrupoProveedor>(); } ctx.SaveChanges(); return ctx.CreateDetachedCopy<Proveedor>(proveedor, x => x.GrupoProveedor); } }
// este método se ejecutará de manera asíncrona. public string LaunchProveedor(out int threadId) { threadId = Thread.CurrentThread.ManagedThreadId; // abrir conexiones PortalProContext ctx = new PortalProContext(); string strConnect = ConfigurationManager.ConnectionStrings["PortalProTestConnection"].ConnectionString; SqlConnection con = new SqlConnection(strConnect); con.Open(); string sql = "SELECT COUNT(*) FROM [PortalProTest].[dbo].[Cau_PortalPro_VProveedores]"; SqlCommand cmd = new SqlCommand(sql, con); int totreg = (int)cmd.ExecuteScalar(); int numreg = 0; sql = @"SELECT [ACCOUNTNUM] ,[NAME] ,[ADDRESS] ,[CITY] ,[ZIPCODE] ,[COUNTRYREGIONID] ,[PHONE] ,[TELEFAX] ,[CELLULARPHONE] ,[EMAIL] ,[VATNUM] ,[CONTACTO] ,[LINEOFBUSINESSID] ,[CAUPORTALPROEMAIL] ,[BANKIBAN] ,[CAUPORTALPROALLOWINVOICE] FROM [PortalProTest].[dbo].[Cau_PortalPro_VProveedores]"; cmd = new SqlCommand(sql, con); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { numreg++; string accountnum = dr.GetString(0); Proveedor pr2 = (from p2 in ctx.Proveedors where p2.CodAx == accountnum select p2).FirstOrDefault<Proveedor>(); if (pr2 == null) { pr2 = new Proveedor(); ctx.Add(pr2); } pr2.CodAx = accountnum; pr2.NombreComercial = dr.GetString(1); pr2.RazonSocial = dr.GetString(1); pr2.Direccion = dr.GetString(2); pr2.Localidad = dr.GetString(3); pr2.CodPostal = dr.GetString(4); pr2.Pais = dr.GetString(5); pr2.Telefono = dr.GetString(6); pr2.Fax = dr.GetString(7); pr2.Movil = dr.GetString(8); pr2.Email = dr.GetString(9); pr2.Nif = dr.GetString(10); if (!dr.IsDBNull(11)) pr2.PersonaContacto = dr.GetString(11); pr2.EmailFacturas = dr.GetString(13); if (!dr.IsDBNull(14)) pr2.IBAN = dr.GetString(14); ctx.SaveChanges(); // Actualizar los registros de proceso Progresos progreso = (from p in ctx.Progresos where p.ProgresoId == 2 select p).FirstOrDefault<Progresos>(); if (progreso != null) { progreso.NumReg = numreg; progreso.TotReg = totreg; ctx.SaveChanges(); } } dr.Close(); ctx.Dispose(); con.Close(); con.Dispose(); return ""; }
/// <summary> /// Crear un nuevo proveedor /// </summary> /// <param name="Proveedor">Objeto a crear, el atributo ProveedorId lo genera la aplicación y es devuelto en el objeto incluido en la respuesta.</param> /// <param name="tk"> Tique de autorzación (se debe obtener con la accion Login)</param> /// <returns></returns> public virtual Proveedor Post(Proveedor proveedor, string tk) { using (PortalProContext ctx = new PortalProContext()) { // comprobar el tique if (!CntWebApiSeguridad.CheckTicket(tk, ctx)) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (Proveedores)")); } // comprobar las precondiciones if (proveedor == null) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } int grupoProveedorId = 0; // Controlamos las propiedades que son en realidad objetos. if (proveedor.GrupoProveedor != null) { grupoProveedorId = proveedor.GrupoProveedor.GrupoProveedorId; proveedor.GrupoProveedor = null; } // dar de alta el objeto en la base de datos y devolverlo en el mensaje ctx.Add(proveedor); if (grupoProveedorId != 0) { proveedor.GrupoProveedor = (from gp in ctx.GrupoProveedors where gp.GrupoProveedorId == grupoProveedorId select gp).FirstOrDefault<GrupoProveedor>(); } ctx.SaveChanges(); return ctx.CreateDetachedCopy<Proveedor>(proveedor, x => x.GrupoProveedor); } }
/// <summary> /// Comprueba que los ficheros necesarios para asociar a un proveedor están peresentes /// Si esa comprobación es superada dá de alta los ficheros asociados. /// </summary> /// <param name="webRoot">Directorio en el que la carga ha dejado los ficheros</param> /// <param name="tk">El código de tique usado en este momento</param> /// <param name="solProveedor">Proveedor al que asociarán los ficheros</param> /// <param name="ctx">Contexto de OpenAccess usado por el proceso.</param> /// <returns>Una cadena vacía en el caso de que todo haya sido correcto y si no el mensaje explicativo</returns> public static string ComprobarCargarFicherosProveedor(string webRoot, string tk, Proveedor proveedor, 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 proveedor.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.Proveedor = proveedor; int posFich = fichero.LastIndexOf("#"); int posExten = fichero.LastIndexOf("."); d.NomFichero = String.Format("{0}_{1}_{2}", proveedor.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; }