private void LoadAssociateLines(string numPedido) { PortalProContext ctx = new PortalProContext(); // buscamos la cabecera de pedido relacionada Pedido pedido = (from p in ctx.Pedidos where p.NumPedido == numPedido select p).FirstOrDefault<Pedido>(); string strConnect = ConfigurationManager.ConnectionStrings["PortalProTestConnection"].ConnectionString; SqlConnection con = new SqlConnection(strConnect); con.Open(); string sqlb = @"SELECT [PURCHID] ,[LINENUM] ,[ITEMID] ,[NAME] ,[PURCHQTY] ,[PURCHUNIT] ,[PURCHPRICE] ,[LINEAMOUNT] ,[ESTADO] ,[REMAINPURCHPHYSICAL] ,[REMAINPURCHFINANCIAL] ,[FECHARECEPCION] ,[INVENTTRANSID] FROM [dbo].[Cau_PortalPro_VLinPedido] WHERE [PURCHID] = '{0}';"; string sql = String.Format(sqlb, numPedido); SqlCommand cmd = new SqlCommand(sql, con); SqlDataReader dr = cmd.ExecuteReader(); decimal totalPedido = 0; decimal totalFacturado = 0; while (dr.Read()) { int numLinea = (int)(dr.GetDecimal(1)); // -- LinPedido lped = (from lp in ctx.LinPedidos where lp.NumPedido == numPedido && lp.NumLinea == numLinea select lp).FirstOrDefault<LinPedido>(); if (lped == null) { lped = new LinPedido(); ctx.Add(lped); } lped.Pedido = pedido; lped.NumPedido = numPedido; lped.NumLinea = numLinea; lped.InventTransId = dr.GetString(12); lped.Descripcion = dr.GetString(3); lped.Importe = dr.GetDecimal(7); totalPedido += lped.Importe; string estado = dr.GetString(8); switch (estado) { case "Facturado": lped.Estado = "FACTURADO"; lped.Facturado = lped.Importe; totalFacturado += lped.Importe; break; case "Recibido": lped.Estado = "RECIBIDO"; break; case "Pedido Abierto": lped.Estado = "ABIERTO"; break; } if (!dr.IsDBNull(11)) lped.FechaRecepcion = dr.GetDateTime(11); } pedido.TotalPedido = totalPedido; pedido.TotalFacturado = totalFacturado; try { ctx.SaveChanges(); } catch (Exception ex) { } dr.Close(); ctx.Dispose(); con.Close(); con.Dispose(); }
/// <summary> /// Modificar una linea 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 linea de pedido</param> /// <param name="linea">Linea de pedido con los valores que se desean en sus atributos</param> /// <param name="tk"> Tique de autorización (Ver 'Login')</param> /// <returns></returns> public virtual LinPedido Put(int id, LinPedido 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 (LinPedido)")); } // comprobar los formatos if (linea == null || id != linea.LinPedidoId) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // primero buscamos si uan linea con ese id existe LinPedido lin = (from l in ctx.LinPedidos where l.LinPedidoId == id select l).FirstOrDefault<LinPedido>(); // existe? if (lin == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay una linea con el id proporcionado (LinPedido)")); } int pedidoId = 0; // Controlamos las propiedades que son en realidad objetos. if (lin.Pedido != null) { pedidoId = lin.Pedido.PedidoId; linea.Pedido = null; } // modificar el objeto ctx.AttachCopy<LinPedido>(linea); // volvemos a leer el objecto para que lo maneje este contexto. linea = (from l in ctx.LinPedidos where l.LinPedidoId == id select l).FirstOrDefault<LinPedido>(); if (pedidoId != 0) { linea.Pedido = (from f in ctx.Pedidos where f.PedidoId == pedidoId select f).FirstOrDefault<Pedido>(); } ctx.SaveChanges(); return ctx.CreateDetachedCopy<LinPedido>(linea, x => x.Pedido); } }
/// <summary> /// Crear una nueva línea de pedido /// </summary> /// <param name="LinPedido">Objeto a crear, el atributo LinPedidoId 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 LinPedido Post(LinPedido 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 (LinPedido)")); } // comprobar las precondiciones if (linea == null) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } int pedidoId = 0; // Controlamos las propiedades que son en realidad objetos. if (linea.Pedido != null) { pedidoId = linea.Pedido.PedidoId; linea.Pedido = null; } // dar de alta el objeto en la base de datos y devolverlo en el mensaje ctx.Add(linea); if (pedidoId != 0) { linea.Pedido = (from f in ctx.Pedidos where f.PedidoId == pedidoId select f).FirstOrDefault<Pedido>(); } ctx.SaveChanges(); return ctx.CreateDetachedCopy<LinPedido>(linea, x => x.Pedido); } }
public virtual bool Put(int idPed, IEnumerable<LinPedido> lineas, 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 (LinPedido)")); } // comprobamos que las lineas no son nulas if (lineas == null) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // comprobamos que la factura a la que se asociarán las líneas existe Pedido pedido = (from f in ctx.Pedidos where f.PedidoId == idPed select f).FirstOrDefault<Pedido>(); if (pedido == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No existe una factura con el id proporcionado (LinPedido)")); } // eliminamos las líneas de fcatura anteriores para solo dar de alta estas ctx.Delete(pedido.LinPedidos); // ahora damos de alta las nuevas lineas decimal totalPedido = 0; foreach (LinPedido linea in lineas) { LinPedido l = new LinPedido() { Descripcion = linea.Descripcion, Importe = linea.Importe, PorcentajeIva = linea.PorcentajeIva, Pedido = pedido }; totalPedido += linea.Importe; ctx.Add(l); } pedido.TotalPedido = totalPedido; ctx.SaveChanges(); } return true; }