/// <summary> /// Modificar un log de solicitud. 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 log </param> /// <param name="solog">Log de solicitud con los valores que se desean en sus atributos</param> /// <param name="tk"> Tique de autorización (Ver 'Login')</param> /// <returns></returns> public virtual SolicitudLog Put(int id, SolicitudLog solog, 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 (SolicitudLogs)")); } // comprobar los formatos if (solog == null || id != solog.SolicitudLogId) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // primero buscamos si un solog con ese id existe SolicitudLog slg = (from u in ctx.SolicitudLogs where u.SolicitudLogId == id select u).FirstOrDefault<SolicitudLog>(); // existe? if (slg == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un solog con el id proporcionado (SolicitudLogs)")); } // int usuarioId = 0; int solicitudProveedorId = 0; int solStatusFinId = 0; int solStatusInicioId = 0; // Controlamos las propiedades que son en realidad objetos. if (solog.Usuario != null) { usuarioId = solog.Usuario.UsuarioId; solog.Usuario = null; } if (solog.SolicitudProveedor != null) { solicitudProveedorId = solog.SolicitudProveedor.SolicitudProveedorId; solog.SolicitudProveedor = null; } if (solog.SolicitudStatusInicial != null) { solStatusInicioId = solog.SolicitudStatusInicial.SolicitudStatusId; solog.SolicitudStatusInicial = null; } if (solog.SolicitudStatusFinal != null) { solStatusFinId = solog.SolicitudStatusFinal.SolicitudStatusId; solog.SolicitudStatusFinal = null; } // modificar el objeto ctx.AttachCopy<SolicitudLog>(solog); // volvemos a leer el objecto para que lo maneje este contexto. solog = (from s in ctx.SolicitudLogs where s.SolicitudLogId == id select s).FirstOrDefault<SolicitudLog>(); if (usuarioId != 0) { solog.Usuario = (from u in ctx.Usuarios where u.UsuarioId == usuarioId select u).FirstOrDefault<Usuario>(); } if (solicitudProveedorId != 0) { solog.SolicitudProveedor = (from s in ctx.SolicitudProveedors select s).FirstOrDefault<SolicitudProveedor>(); } if (solStatusInicioId != 0) { solog.SolicitudStatusInicial = (from s in ctx.SolicitudStatus select s).FirstOrDefault<SolicitudStatus>(); } if (solStatusFinId != 0) { solog.SolicitudStatusFinal = (from s in ctx.SolicitudStatus select s).FirstOrDefault<SolicitudStatus>(); } ctx.SaveChanges(); return ctx.CreateDetachedCopy<SolicitudLog>(solog, x => x.Usuario, x => x.SolicitudProveedor, x => x.SolicitudStatusInicial, x => x.SolicitudStatusFinal); } }
/// <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 ); } }
/// <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); } }
/// <summary> /// Modificar una cabecera de factura. En el cuerpo del mensaje se envía en el formato adecuado el objeto con los datos modificados /// </summary> /// <param name="id"> Identificador único de la cabecera de factura </param> /// <param name="factura">Cabecera de factura los valores que se desean en sus atributos</param> /// <param name="tk"> Tique de autorización (Ver 'Login')</param> /// <returns></returns> public virtual CabFactura Put(int id, CabFactura factura, 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 (CabFactura)")); } // comprobar los formatos if (factura == null || id != factura.CabFacturaId) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // primero buscamos si un factura con ese id existe CabFactura cfac = (from f in ctx.CabFacturas where f.CabFacturaId == id select f).FirstOrDefault<CabFactura>(); // existe? if (cfac == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay una factura con el id proporcionado (CabFactura)")); } if (factura.Estado == "PROCESADA") { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Las facturas procesadas no pueden ser modificadas (CabFactura)")); } // comprobamos que no hay una factura para el mismo proveedor en ese año y con // el mismo número de factura CabFactura fc = PortalProWebUtility.YaExisteUnaFacturaComoEsta(factura, ctx); if (fc != null) { string m = String.Format("Ya hay una factura del proveedor para este año {0:yyyy} con el mismo número {1}", fc.FechaEmision, fc.NumFactura); throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, m)); } // Controlamos las propiedades que son en realidad objetos. int proveedorId = 0; if (factura.Proveedor != null) { proveedorId = factura.Proveedor.ProveedorId; factura.Proveedor = null; } int documentoPdfId = 0; if (factura.DocumentoPdf != null) { documentoPdfId = factura.DocumentoPdf.DocumentoId; factura.DocumentoPdf = null; } int documentoXmlId = 0; if (factura.DocumentoXml != null) { documentoXmlId = factura.DocumentoXml.DocumentoId; factura.DocumentoXml = null; } int empresaId = 0; if (factura.Empresa != null) { empresaId = factura.Empresa.EmpresaId; factura.Empresa = null; } int responsableId = 0; if (factura.Responsable != null) { responsableId = factura.Responsable.ResponsableId; factura.Responsable = null; } // modificar el objeto if (factura.Estado == null) factura.Estado = "ACEPTADA"; ctx.AttachCopy<CabFactura>(factura); // volvemos a leer el objecto para que lo maneje este contexto. factura = (from f in ctx.CabFacturas where f.CabFacturaId == id select f).FirstOrDefault<CabFactura>(); if (proveedorId != 0) { factura.Proveedor = (from p in ctx.Proveedors where p.ProveedorId == proveedorId select p).FirstOrDefault<Proveedor>(); } if (documentoPdfId != 0) { factura.DocumentoPdf = (from d in ctx.Documentos where d.DocumentoId == documentoPdfId select d).FirstOrDefault<Documento>(); } if (documentoXmlId != 0) { factura.DocumentoXml = (from d in ctx.Documentos where d.DocumentoId == documentoXmlId select d).FirstOrDefault<Documento>(); } if (empresaId != 0) { factura.Empresa = (from e in ctx.Empresas where e.EmpresaId == empresaId select e).FirstOrDefault<Empresa>(); } if (responsableId != 0) { factura.Responsable = (from r in ctx.Responsables where r.ResponsableId == responsableId select r).FirstOrDefault<Responsable>(); } factura.Historial += String.Format("{0:dd/MM/yyyy hh:mm:ss} La factura {1} con Total {2:0.0} € has sido modificada con estado {3} <br/>", DateTime.Now, factura.NumFactura, factura.TotalFactura, factura.Estado); factura.Generada = false; ctx.SaveChanges(); return ctx.CreateDetachedCopy<CabFactura>(factura, x => x.Proveedor, x => x.DocumentoPdf, x => x.DocumentoXml); } }
/// <summary> /// Modificar una solicitud. En el cuerpo del mensaje se envía en el formato adecuado el objeto con los datos modificados /// </summary> /// <param name="id"> Identificador único de la solicitud </param> /// <param name="solProveedor">Solicitud de proveedor con los valores que se desean en sus atributos</param> /// <param name="tk"> Tique de autorización (Ver 'Login'). Caso "solicitud"</param> /// <returns></returns> public virtual SolicitudProveedor Put(int id, SolicitudProveedor solProveedor, string tk) { using (PortalProContext ctx = new PortalProContext()) { // comprobar el tique // se permite si el valor es "solicitud" siempre if (!CntWebApiSeguridad.CheckTicket(tk, ctx) && tk != "solicitud") { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (Solicitudes proveedores)")); } // comprobar los formatos if (solProveedor == null || id != solProveedor.SolicitudProveedorId) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // primero buscamos si una solicitud con ese id existe SolicitudProveedor solPro = (from sp in ctx.SolicitudProveedors where sp.SolicitudProveedorId == id select sp).FirstOrDefault<SolicitudProveedor>(); // existe? if (solPro == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay una solicitud con el id proporcionado (Solicitudes proveedores)")); } int grupoProveedorId = 0; int solicitudStatusId = 0; // Controlamos las propiedades que son en realidad objetos. if (solProveedor.GrupoProveedor != null) { grupoProveedorId = solProveedor.GrupoProveedor.GrupoProveedorId; solProveedor.GrupoProveedor = null; } // modificar el objeto ctx.AttachCopy<SolicitudProveedor>(solProveedor); // volvemos a leer el objecto para que lo maneje este contexto. solProveedor = (from sp in ctx.SolicitudProveedors where sp.SolicitudProveedorId == id select sp).FirstOrDefault<SolicitudProveedor>(); if (grupoProveedorId != 0) { solProveedor.GrupoProveedor = (from gp in ctx.GrupoProveedors where gp.GrupoProveedorId == grupoProveedorId select gp).FirstOrDefault<GrupoProveedor>(); } if (solicitudStatusId != 0) { solProveedor.SolicitudStatus = (from ss in ctx.SolicitudStatus where ss.SolicitudStatusId == solicitudStatusId select ss).FirstOrDefault<SolicitudStatus>(); } ctx.SaveChanges(); return ctx.CreateDetachedCopy<SolicitudProveedor>(solProveedor, x => x.GrupoProveedor, x => x.SolicitudStatus); } }
/// <summary> /// Modificar una linea de factura. En el cuerpo del mensaje se envía en el formato adecuado el objeto con los datos modificados /// </summary> /// <param name="id"> Identificador único de la linea de fcatura</param> /// <param name="linea">Linea de fcatura con los valores que se desean en sus atributos</param> /// <param name="tk"> Tique de autorización (Ver 'Login')</param> /// <returns></returns> public virtual LinFactura Put(int id, LinFactura linea, 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 (LinFactura)")); } // comprobar los formatos if (linea == null || id != linea.LinFacturaId) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // primero buscamos si uan linea con ese id existe LinFactura lin = (from l in ctx.LinFacturas where l.LinFacturaId == id select l).FirstOrDefault<LinFactura>(); // existe? if (lin == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay una linea con el id proporcionado (LinFactura)")); } int cabFacturaId = 0; // Controlamos las propiedades que son en realidad objetos. if (lin.CabFactura != null) { cabFacturaId = lin.CabFactura.CabFacturaId; linea.CabFactura = null; } // modificar el objeto ctx.AttachCopy<LinFactura>(linea); // volvemos a leer el objecto para que lo maneje este contexto. linea = (from l in ctx.LinFacturas where l.LinFacturaId == id select l).FirstOrDefault<LinFactura>(); if (cabFacturaId != 0) { linea.CabFactura = (from f in ctx.CabFacturas where f.CabFacturaId == cabFacturaId select f).FirstOrDefault<CabFactura>(); } ctx.SaveChanges(); return ctx.CreateDetachedCopy<LinFactura>(linea, x => x.CabFactura); } }
/// <summary> /// Modificar un Parametro de 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 de la Parametro </param> /// <param name="parametro">Grupo de poveedor con los valores que se desean en sus atributos</param> /// <param name="tk"> Tique de autorización (Ver 'Login')</param> /// <returns></returns> public virtual Parametro Put(int id, Parametro parametro, 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 (Parametros)")); } // comprobar los formatos if (parametro == null || id != parametro.ParametroId) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // primero buscamos si un Parametro con ese id existe Parametro pl = (from p in ctx.Parametros1 where p.ParametroId == id select p).FirstOrDefault<Parametro>(); // existe? if (pl == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un Parametro con el id proporcionado (Parametros)")); } // modificar el objeto ctx.AttachCopy<Parametro>(parametro); ctx.SaveChanges(); return parametro; } }
/// <summary> /// Modificar una Responsable. En el cuerpo del mensaje se envía en el formato adecuado el objeto con los datos modificados /// </summary> /// <param name="id"> Identificador único de la Responsable </param> /// <param name="responsable">Grupo de usuario con los valores que se desean en sus atributos</param> /// <param name="tk"> Tique de autorización (Ver 'Login')</param> /// <returns></returns> public virtual Responsable Put(int id, Responsable responsable, 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 (Responsables)")); } // comprobar los formatos if (responsable == null || id != responsable.ResponsableId) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // primero buscamos si un grupo con ese id existe Responsable re = (from g in ctx.Responsables where g.ResponsableId == id select g).FirstOrDefault<Responsable>(); // existe? if (re == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un grupo con el id proporcionado (Responsables)")); } int usuarioId = 0; if (responsable.Usuario != null) { usuarioId = responsable.Usuario.UsuarioId; responsable.Usuario = null; } // hay que volver a leer el objeto para que lo maneje este contexto. responsable = (from r in ctx.Responsables where r.ResponsableId == id select r).FirstOrDefault<Responsable>(); // modificar el objeto ctx.AttachCopy<Responsable>(responsable); if (usuarioId != 0) { responsable.Usuario = (from u in ctx.Usuarios where u.UsuarioId == usuarioId select u).FirstOrDefault<Usuario>(); } ctx.SaveChanges(); return ctx.CreateDetachedCopy<Responsable>(responsable, x => x.Usuario); } }
/// <summary> /// Modificar una cabecera de pedido. En el cuerpo del mensaje se envía en el formato adecuado el objeto con los datos modificados /// </summary> /// <param name="id"> Identificador único de la cabecera de factura </param> /// <param name="pedido">Cabecera de pedido los valores que se desean en sus atributos</param> /// <param name="tk"> Tique de autorización (Ver 'Login')</param> /// <returns></returns> public virtual Pedido Put(int id, Pedido pedido, 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 (Pedido)")); } // comprobar los formatos if (pedido == null || id != pedido.PedidoId) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // primero buscamos si un factura con ese id existe Pedido ped = (from p in ctx.Pedidos where p.PedidoId == id select p).FirstOrDefault<Pedido>(); // existe? if (ped == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un pedido con el id proporcionado (Pedido)")); } // Controlamos las propiedades que son en realidad objetos. int proveedorId = 0; if (pedido.Proveedor != null) { proveedorId = pedido.Proveedor.ProveedorId; pedido.Proveedor = null; } int responsableId = 0; if (pedido.Responsable != null) { responsableId = pedido.Responsable.ResponsableId; pedido.Responsable = null; } int empresaId = 0; if (pedido.Empresa != null) { empresaId = pedido.Empresa.EmpresaId; pedido.Empresa = null; } int documentoXmlId = 0; if (pedido.DocumentoXml != null) { documentoXmlId = pedido.DocumentoXml.DocumentoId; pedido.DocumentoXml = null; } int documentoPdfId = 0; if (pedido.DocumentoPdf != null) { documentoPdfId = pedido.DocumentoPdf.DocumentoId; pedido.DocumentoPdf = null; } // modificar el objeto ctx.AttachCopy<Pedido>(pedido); // volvemos a leer el objecto para que lo maneje este contexto. pedido = (from p in ctx.Pedidos where p.PedidoId == id select p).FirstOrDefault<Pedido>(); if (proveedorId != 0) { pedido.Proveedor = (from p in ctx.Proveedors where p.ProveedorId == proveedorId select p).FirstOrDefault<Proveedor>(); } if (empresaId != 0) { pedido.Empresa = (from p in ctx.Empresas where p.EmpresaId == empresaId select p).FirstOrDefault<Empresa>(); } if (responsableId != 0) { pedido.Responsable = (from p in ctx.Responsables where p.ResponsableId == responsableId select p).FirstOrDefault<Responsable>(); } if (documentoXmlId != 0) { pedido.DocumentoXml = (from d in ctx.Documentos where d.DocumentoId == documentoPdfId select d).FirstOrDefault<Documento>(); } if (documentoPdfId != 0) { pedido.DocumentoPdf = (from d in ctx.Documentos where d.DocumentoId == documentoPdfId select d).FirstOrDefault<Documento>(); } ctx.SaveChanges(); return ctx.CreateDetachedCopy<Pedido>(pedido, x => x.Proveedor, x => x.DocumentoPdf, x => x.Empresa); } }
public virtual Pedido Put(int id, Pedido pedido, string userId, 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 (Pedido)")); } // comprobar los formatos if (pedido == null || id != pedido.PedidoId) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // primero buscamos si un factura con ese id existe Pedido ped = (from p in ctx.Pedidos where p.PedidoId == id select p).FirstOrDefault<Pedido>(); // existe? if (ped == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay una factura con el id proporcionado (Pedido)")); } // La aplicación ahora depende del comienzo del usuario string application = "PortalPro"; switch (userId.Substring(0, 1)) { case "U": application = "PortalPro2"; break; case "G": application = "PortalPro"; break; } // En la actualización a lo mejor no han cargado ningún archivo string fPdf = PortalProWebUtility.BuscarArchivoCargado(application, userId, "Factura", "PDF"); // Controlamos las propiedades que son en realidad objetos. int proveedorId = 0; if (pedido.Proveedor != null) { proveedorId = pedido.Proveedor.ProveedorId; pedido.Proveedor = null; } int responsableId = 0; if (pedido.Responsable != null) { responsableId = pedido.Responsable.ResponsableId; pedido.Responsable = null; } int empresaId = 0; if (pedido.Empresa != null) { empresaId = pedido.Empresa.EmpresaId; pedido.Empresa = null; } int documentoXmlId = 0; if (pedido.DocumentoXml != null) { documentoXmlId = pedido.DocumentoXml.DocumentoId; pedido.DocumentoXml = null; } int documentoPdfId = 0; if (pedido.DocumentoPdf != null) { documentoPdfId = pedido.DocumentoPdf.DocumentoId; pedido.DocumentoPdf = null; } // modificar el objeto ctx.AttachCopy<Pedido>(pedido); // volvemos a leer el objecto para que lo maneje este contexto. pedido = (from p in ctx.Pedidos where p.PedidoId == id select p).FirstOrDefault<Pedido>(); if (proveedorId != 0) { pedido.Proveedor = (from p in ctx.Proveedors where p.ProveedorId == proveedorId select p).FirstOrDefault<Proveedor>(); } if (empresaId != 0) { pedido.Empresa = (from p in ctx.Empresas where p.EmpresaId == empresaId select p).FirstOrDefault<Empresa>(); } if (responsableId != 0) { pedido.Responsable = (from p in ctx.Responsables where p.ResponsableId == responsableId select p).FirstOrDefault<Responsable>(); } if (documentoXmlId != 0) { pedido.DocumentoXml = (from d in ctx.Documentos where d.DocumentoId == documentoPdfId select d).FirstOrDefault<Documento>(); } if (documentoPdfId != 0) { pedido.DocumentoPdf = (from d in ctx.Documentos where d.DocumentoId == documentoPdfId select d).FirstOrDefault<Documento>(); } Documento doc = null; // para cargar temporalmente documentos // si se cumplen estas condiciones es que han cambiado el archivo asociado. if (fPdf != "") { doc = pedido.DocumentoPdf; pedido.DocumentoPdf = PortalProWebUtility.CrearDocumentoDesdeArchivoCargado(application, fPdf, ctx); PortalProWebUtility.EliminarDocumento(doc, ctx); } ctx.SaveChanges(); return ctx.CreateDetachedCopy<Pedido>(pedido, x => x.Proveedor, x => x.DocumentoPdf, x => x.Empresa); } }
/// <summary> /// Modificar un grupo de usuario. 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="grupoUsuario">Grupo de usuario con los valores que se desean en sus atributos</param> /// <param name="tk"> Tique de autorización (Ver 'Login')</param> /// <returns></returns> public virtual GrupoUsuario Put(int id, GrupoUsuario grupoUsuario, 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 (Grupo de usuarios)")); } // comprobar los formatos if (grupoUsuario == null || id != grupoUsuario.GrupoUsuarioId) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // primero buscamos si un grupo con ese id existe GrupoUsuario gu = (from g in ctx.GrupoUsuarios where g.GrupoUsuarioId == id select g).FirstOrDefault<GrupoUsuario>(); // existe? if (gu == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un grupo con el id proporcionado (Grupo de usuarios)")); } // modificar el objeto ctx.AttachCopy<GrupoUsuario>(grupoUsuario); ctx.SaveChanges(); return grupoUsuario; } }
public virtual CabFactura Put(int id, CabFactura factura, string userId, string tk, string gen) { 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 (CabFactura)")); } // comprobar los formatos if (factura == null || id != factura.CabFacturaId) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // primero buscamos si un factura con ese id existe CabFactura cfac = (from f in ctx.CabFacturas where f.CabFacturaId == id select f).FirstOrDefault<CabFactura>(); // existe? if (cfac == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay una factura con el id proporcionado (CabFactura)")); } if (factura.Estado == "PROCESADA") { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Las facturas procesadas no pueden ser modificadas (CabFactura)")); } // comprobamos que no hay una factura para el mismo proveedor en ese año y con // el mismo número de factura CabFactura fc = PortalProWebUtility.YaExisteUnaFacturaComoEsta(factura, ctx); if (fc != null) { string m = String.Format("Ya hay una factura del proveedor para este año {0:yyyy} con el mismo número {1}", fc.FechaEmision, fc.NumFactura); throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, m)); } string application = "PortalPro"; switch (userId.Substring(0, 1)) { case "U": application = "PortalPro2"; break; case "G": application = "PortalPro"; break; } // En la actualización a lo mejor no han cargado ningún archivo string fPdf = PortalProWebUtility.BuscarArchivoCargado(application, userId, "Factura", "PDF"); if (fPdf == "") { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Se necesita un fichero PDF asociado a la factura (CabFactura)")); } // el archivo Xml no es obligatorio, pero si lo han subido cargamos el fichero string fXml = PortalProWebUtility.BuscarArchivoCargado(application, userId, "Factura", "XML"); // Controlamos las propiedades que son en realidad objetos. int proveedorId = 0; if (factura.Proveedor != null) { proveedorId = factura.Proveedor.ProveedorId; factura.Proveedor = null; } int documentoPdfId = 0; if (factura.DocumentoPdf != null) { documentoPdfId = factura.DocumentoPdf.DocumentoId; factura.DocumentoPdf = null; } int documentoXmlId = 0; if (factura.DocumentoXml != null) { documentoXmlId = factura.DocumentoXml.DocumentoId; factura.DocumentoXml = null; } int empresaId = 0; if (factura.Empresa != null) { empresaId = factura.Empresa.EmpresaId; factura.Empresa = null; } int responsableId = 0; if (factura.Responsable != null) { responsableId = factura.Responsable.ResponsableId; factura.Responsable = null; } if (factura.Estado == null) factura.Estado = "ACEPTADA"; // modificar el objeto ctx.AttachCopy<CabFactura>(factura); // volvemos a leer el objecto para que lo maneje este contexto. factura = (from f in ctx.CabFacturas where f.CabFacturaId == id select f).FirstOrDefault<CabFactura>(); if (proveedorId != 0) { factura.Proveedor = (from p in ctx.Proveedors where p.ProveedorId == proveedorId select p).FirstOrDefault<Proveedor>(); } if (documentoPdfId != 0) { factura.DocumentoPdf = (from d in ctx.Documentos where d.DocumentoId == documentoPdfId select d).FirstOrDefault<Documento>(); } if (documentoXmlId != 0) { factura.DocumentoXml = (from d in ctx.Documentos where d.DocumentoId == documentoXmlId select d).FirstOrDefault<Documento>(); } if (empresaId != 0) { factura.Empresa = (from e in ctx.Empresas where e.EmpresaId == empresaId select e).FirstOrDefault<Empresa>(); } if (responsableId != 0) { factura.Responsable = (from r in ctx.Responsables where r.ResponsableId == responsableId select r).FirstOrDefault<Responsable>(); } Documento doc = null; // para cargar temporalmente documentos // si se cumplen estas condiciones es que han cambiado el archivo asociado. if (fPdf != "") { doc = factura.DocumentoPdf; factura.DocumentoPdf = PortalProWebUtility.CrearDocumentoDesdeArchivoCargado(application, fPdf, ctx); PortalProWebUtility.EliminarDocumento(doc, ctx); } if (fXml != "") { doc = factura.DocumentoXml; factura.DocumentoXml = PortalProWebUtility.CrearDocumentoDesdeArchivoCargado(application, fXml, ctx); PortalProWebUtility.EliminarDocumento(doc, ctx); } factura.Historial += String.Format("{0:dd/MM/yyyy hh:mm:ss} La factura {1} con Total {2:0.0} € has sido modificada con estado {3} <br/>", DateTime.Now, factura.NumFactura, factura.TotalFactura, factura.Estado); factura.Generada = false; ; ctx.SaveChanges(); return ctx.CreateDetachedCopy<CabFactura>(factura, x => x.Proveedor, x => x.DocumentoPdf, x => x.DocumentoXml); } }