/// <summary> /// Crear un nuevo usuario de proveedor /// </summary> /// <param name="Usuario">Objeto a crear, el atributo UsuarioPorveedorId lo genera la aplicación y es devuelto en el objeto incluido en la respuesta.</param> /// <param name="tk"> Tique de autorización (se debe obtener con la accion Login)</param> /// <returns></returns> public virtual UsuarioProveedor Post(UsuarioProveedor usuarioProveedor, 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 (UsuarioProveedor)")); } // comprobar las precondiciones if (usuarioProveedor == null) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // controlar la contraseña. if (usuarioProveedor.Password != null && usuarioProveedor.Password != "") { // se guarda la contraseña encriptada usuarioProveedor.Password = CntWebApiSeguridad.GetHashCode(usuarioProveedor.Password); } int proveedorId = 0; // Controlamos las propiedades que son en realidad objetos. if (usuarioProveedor.Proveedor != null) { proveedorId = usuarioProveedor.Proveedor.ProveedorId; usuarioProveedor.Proveedor = null; } // dar de alta el objeto en la base de datos y devolverlo en el mensaje ctx.Add(usuarioProveedor); if (proveedorId != 0) { usuarioProveedor.Proveedor = (from p in ctx.Proveedors where p.ProveedorId == proveedorId select p).FirstOrDefault<Proveedor>(); } ctx.SaveChanges(); return ctx.CreateDetachedCopy<UsuarioProveedor>(usuarioProveedor, x => x.Proveedor); } }
/// <summary> /// Modificar un usuario ligado a 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 usuario </param> /// <param name="usuarioProveedor">Datos del usario ligado a proveedor</param> /// <param name="tk"> Tique de autorización (Ver 'Login')</param> /// <returns></returns> public virtual UsuarioProveedor Put(int id, UsuarioProveedor usuarioProveedor, 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 (UsuarioProveedor)")); } // comprobar los formatos if (usuarioProveedor == null || id != usuarioProveedor.UsuarioProveedorId) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // primero buscamos si un usuario con ese id existe UsuarioProveedor usup = (from up in ctx.UsuarioProveedors where up.UsuarioProveedorId == id select up).FirstOrDefault<UsuarioProveedor>(); // existe? if (usup == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un usuario con el id proporcionado (UsuarioProveedor)")); } // controlar la contraseña. if (usuarioProveedor.Password != null && usuarioProveedor.Password != "" && usuarioProveedor.Password != usup.Password) { // se guarda la contraseña encriptada usuarioProveedor.Password = CntWebApiSeguridad.GetHashCode(usuarioProveedor.Password); } int proveedorId = 0; // Controlamos las propiedades que son en realidad objetos. if (usuarioProveedor.Proveedor != null) { proveedorId = usuarioProveedor.Proveedor.ProveedorId; usuarioProveedor.Proveedor = null; } // modificar el objeto ctx.AttachCopy<UsuarioProveedor>(usuarioProveedor); // volvemos a leer el objecto para que lo maneje este contexto. usuarioProveedor = (from up in ctx.UsuarioProveedors where up.UsuarioProveedorId == id select up).FirstOrDefault<UsuarioProveedor>(); if (proveedorId != 0) { usuarioProveedor.Proveedor = (from p in ctx.Proveedors where p.ProveedorId == proveedorId select p).FirstOrDefault<Proveedor>(); } ctx.SaveChanges(); return ctx.CreateDetachedCopy<UsuarioProveedor>(usuarioProveedor, x => x.Proveedor ); } }