public Sale Get(int id)
 {
     using (var ctx = new EmployeeDBEntities_Sale())
     {
         return(ctx.Sales.FirstOrDefault(p => p.SaleId == id));
     }
 }
        public IHttpActionResult Get()
        {
            IList <Sale> sales = null;

            using (var ctx = new EmployeeDBEntities_Sale())
            {
                sales = ctx.Sales.ToList();
            }

            using (var ctxEmp = new EmployeeDBEntities())
            {
                foreach (var sale in sales)
                {
                    sale.EmployeeName = ctxEmp.Employees.FirstOrDefault(e => e.ID == sale.EmployeeId)?.FirstName + " " +
                                        ctxEmp.Employees.FirstOrDefault(e => e.ID == sale.EmployeeId)?.LastName;
                }
            }

            using (var ctxProd = new EmployeeDBEntities_Product())
            {
                foreach (var sale in sales)
                {
                    sale.ProductName = ctxProd.Products.FirstOrDefault(p => p.ProductId == sale.ProductId)?.Name;
                }
            }

            if (sales.Count == 0)
            {
                return(NotFound());
            }

            return(Ok(sales));
        }
        public IHttpActionResult Put(Sale sale)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("The data you entered is not valid"));
            }

            using (var ctx = new EmployeeDBEntities_Sale())
            {
                var existingSale = ctx.Sales.FirstOrDefault(s => s.SaleId == sale.SaleId);
                if (existingSale != null)
                {
                    existingSale.ProductId         = sale.ProductId;
                    existingSale.EmployeeId        = sale.EmployeeId;
                    existingSale.CustomerFirstName = sale.CustomerFirstName;
                    existingSale.CustomerLastName  = sale.CustomerLastName;
                    existingSale.Comment           = sale.Comment;
                    existingSale.Quantity          = sale.Quantity;
                    existingSale.Amount            = GetProductPriceByProductId((int)sale.ProductId) * sale.Quantity;

                    ctx.SaveChanges();
                }
                else
                {
                    return(NotFound());
                }
            }

            return(Ok());
        }
        public IHttpActionResult Delete(int id)
        {
            if (id < 0)
            {
                return(BadRequest("Not a valid Product Id"));
            }

            using (var ctx = new EmployeeDBEntities_Sale())
            {
                var sale = ctx.Sales.FirstOrDefault(s => s.SaleId == id);

                ctx.Entry(sale).State = System.Data.Entity.EntityState.Deleted;
                ctx.SaveChanges();
            }

            return(Ok());
        }
        public IHttpActionResult PostNewProduct(Sale sale)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("Not a valid model"));
            }

            using (var ctx = new EmployeeDBEntities_Sale())
            {
                ctx.Sales.Add(new Sale()
                {
                    ProductId         = sale.ProductId,
                    EmployeeId        = sale.EmployeeId,
                    CustomerFirstName = sale.CustomerFirstName,
                    CustomerLastName  = sale.CustomerLastName,
                    Comment           = sale.Comment,
                    Quantity          = sale.Quantity,
                    Amount            = GetProductPriceByProductId((int)sale.ProductId) * sale.Quantity
                });

                try
                {
                    ctx.SaveChanges();
                }
                catch (DbEntityValidationException e)
                {
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                          eve.Entry.Entity.GetType().Name, eve.Entry.State);
                        foreach (var ve in eve.ValidationErrors)
                        {
                            Console.WriteLine("- Property: \"{0}\", Value: \"{1}\", Error: \"{2}\"",
                                              ve.PropertyName,
                                              eve.Entry.CurrentValues.GetValue <object>(ve.PropertyName),
                                              ve.ErrorMessage);
                        }
                    }
                    throw;
                }
            }

            return(Ok());
        }
        public IHttpActionResult GetEmployeeSalesTotals()
        {
            //List<object> employeeSales = new List<object>();
            using (var ctx = new EmployeeDBEntities_Sale())
            {
                var employeeSales = ctx.Sales
                                    .GroupBy(s => s.EmployeeId)
                                    .Select(sl => new
                {
                    Employee   = sl.FirstOrDefault().EmployeeId,
                    saleAmount = sl.Sum(s => s.Amount)
                }).ToList();

                if (employeeSales.Count == 0)
                {
                    return(NotFound());
                }

                return(Ok(employeeSales));
            }
        }