private dynamic index(dynamic args)
 {
     using (var ctx = new Context())
     {
         List<Tipo> tipos = ctx.Tipo.ToList<Tipo>();
         return ControllerUtil.toJSON(tipos);
     }
 }
        private dynamic Initialize(dynamic arg)
        {
            using (var ctx = new Context())
            {
                ctx.Database.Initialize(false);

                return "Database Initialized";
            }
        }
        private dynamic index(dynamic args)
        {
            using (var ctx = new Context())
            {
                List<Pedido> pedidos = ctx.Pedido.ToList<Pedido>();

                return ControllerUtil.toJSON(pedidos);
            }
        }
        public dynamic index(dynamic args)
        {
            using (var ctx = new Context())
            {
                List<Producto> productos = ctx.Producto.ToList<Producto>();

                return ControllerUtil.toJSON(productos);
            }
        }
        private dynamic Create(dynamic arg)
        {
            using (var ctx = new Context())
            {
                ctx.Database.Delete();

                ctx.Database.Create();

                return "Database Created";
            }
        }
        private dynamic actualizar(dynamic args)
        {
            using (var ctx = new Context())
            {
                int pedidoId = args.PedidoId;
                var pedido = ctx.Pedido.SingleOrDefault(b => b.PedidoId == pedidoId);
                if (pedido != null)
                {
                    pedido.Atendido = true;
                    ctx.SaveChanges();
                }

                return Negotiate.WithStatusCode(HttpStatusCode.OK).WithModel(pedido);
            }
        }
        private dynamic add(dynamic arg)
        {
            try
            {
                var pedido = this.Bind<Pedido>();

                using(var ctx = new Context()) {

                    pedido = ctx.Pedido.Add(pedido);
                    ctx.SaveChanges();
                }

                return Negotiate.WithStatusCode(HttpStatusCode.OK).WithModel(pedido);
            }
            catch (Exception) { }
            return new Response { StatusCode = HttpStatusCode.InternalServerError };
        }
        public dynamic add(dynamic args)
        {
            try
            {
                var detalle = this.Bind<CotizacionDetalle>();

                using (var ctx = new Context())
                {

                    detalle = ctx.CotizacionDetalle.Add(detalle);

                    ctx.SaveChanges();
                }

                return Negotiate.WithStatusCode(HttpStatusCode.OK).WithModel(detalle);
            }
            catch (Exception) { }
            return new Response { StatusCode = HttpStatusCode.InternalServerError };
        }
        public dynamic add(dynamic args)
        {
            try
            {
                Cotizacion cotizacion=null;
                using (var ctx = new Context())
                {

                    cotizacion = ctx.Cotizacion.Add(new Cotizacion()
                    {
                        PedidoId = args.PedidoId,
                        Fecha = DateTime.Now
                    });

                    ctx.SaveChanges();
                }

                return Negotiate.WithStatusCode(HttpStatusCode.OK).WithModel(cotizacion);
            }
            catch (Exception e) { }
            return new Response { StatusCode = HttpStatusCode.InternalServerError };
        }
        private dynamic Seed(dynamic args)
        {
            using (var ctx = new Context())
            {
                // Tipos Producto
                ctx.Tipo.Add(new Tipo()
                {
                    Descripcion = "Producto"
                });
                ctx.SaveChanges();

                ctx.Tipo.Add(new Tipo()
                {
                    Descripcion = "Servicio"
                });
                ctx.SaveChanges();

                //PRODUCTO - Servicio
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "Instalaciones",
                    Precio = 1700,
                    TipoId = 2,
                    Stock = 0
                });
                ctx.SaveChanges();

                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "Mantenimiento y Reparaciones",
                    Precio = 1550,
                    TipoId = 2,
                    Stock = 0
                });
                ctx.SaveChanges();
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "Venta de Respuestos",
                    Precio = 1300,
                    TipoId = 2,
                    Stock = 0
                });
                ctx.SaveChanges();

                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "Drywall",
                    Precio = 1500,
                    TipoId = 2,
                    Stock = 0
                });
                ctx.SaveChanges();

                //PRODUCTO - Producto
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "VENTANA - YORK",
                    Precio =  771.62m,
                    TipoId = 1,
                    Stock = 5
                });
                ctx.SaveChanges();
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "SPLIT PARED FRIO SOLO - YORK",
                    Precio =  956.14m,
                    TipoId = 1,
                    Stock = 2
                });
                ctx.SaveChanges();
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "SPLIT PARED FRIO CALOR - YORK",
                    Precio =  580.76m,
                    TipoId = 1,
                    Stock = 2
                });
                ctx.SaveChanges();
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "SPLIT PARED FRIO SOLO ECOLĂ“GICO - YORK",
                    Precio =  1174.57m,
                    TipoId = 1,
                    Stock = 2
                });
                ctx.SaveChanges();
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "SPLIT PISO TECHO - YORK",
                    Precio =  2069.58m,
                    TipoId = 1,
                    Stock = 2
                });
                ctx.SaveChanges();
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "SPLIT DECORATIVO CASSETTE - YORK",
                    Precio =  1988.69m,
                    TipoId = 1,
                    Stock = 2
                });
                ctx.SaveChanges();
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "SPLIT DUCTO - YORK",
                    Precio =  2219.05m,
                    TipoId = 1,
                    Stock = 2
                });
                ctx.SaveChanges();

                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "VENTANA - LG",
                    Precio =  525.12m,
                    TipoId = 1,
                    Stock = 2
                });
                ctx.SaveChanges();
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "SPLIT PARED - LG",
                    Precio =  714.11m,
                    TipoId = 1,
                    Stock = 2
                });
                ctx.SaveChanges();
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "SPLIT PARED MODELO NUEVO - LG",
                    Precio =  876.10m,
                    TipoId = 1,
                    Stock = 2
                });
                ctx.SaveChanges();
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "SPLIT PARED - LG",
                    Precio =  815.35m,
                    TipoId = 1,
                    Stock = 2
                });
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "ART COOL - LG",
                    Precio =  1096.14m,
                    TipoId = 1,
                    Stock = 2
                });
                ctx.SaveChanges();
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "SPLIT PISO TECHO - LG",
                    Precio =  1636.10m,
                    TipoId = 1,
                    Stock = 2
                });
                ctx.SaveChanges();
                ctx.SaveChanges();
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "SPLIT DUCTO - LG",
                    Precio =  2176.07m,
                    TipoId = 1,
                    Stock = 2
                });
                ctx.SaveChanges();
                ctx.SaveChanges();
                ctx.Producto.Add(new Producto()
                {
                    Descripcion = "CASSETTE *INCLUYE BOMBA DE CONDENSADO* - LG",
                    Precio =  2278.66m,
                    TipoId = 1,
                    Stock = 2
                });
                ctx.SaveChanges();
                ctx.SaveChanges();

                return "Database Seeded";
            }
        }