public IActionResult Create(ProcurementDetail pd)
        {
            if (pd.Quantity == 0)
            {
                return(RedirectToAction("EditOrder", "Procurements", new { id = pd.Procurement.ProcurementID }));
            }

            else
            {
                Book bo = _context.Books.FirstOrDefault(b => b.BookID == pd.Book.BookID);
                pd.Book = bo;

                Procurement pro = _context.Procurements.Find(pd.Procurement.ProcurementID);
                pd.Procurement = pro;

                bo.Cost = pd.BookPrice;
                _context.Books.Update(bo);
                _context.SaveChanges();

                pd.ExtendedPrice = pd.Quantity * pd.BookPrice;

                if (ModelState.IsValid)
                {
                    _context.ProcurementDetails.Add(pd);
                    _context.SaveChanges();
                    return(RedirectToAction("EditOrder", "Procurements", new { id = pd.Procurement.ProcurementID }));
                }
                return(View(pd));
            }
        }
        public IActionResult Edit(ProcurementDetail pd)
        {
            if (ModelState.IsValid)
            {
                //Find the related registration detail in the database
                ProcurementDetail DbProDet = _context.ProcurementDetails
                                             .Include(r => r.Book)
                                             .Include(r => r.Procurement)
                                             .FirstOrDefault(r => r.ProcurementDetailID ==
                                                             pd.ProcurementDetailID);

                //update the related fields
                DbProDet.Quantity      = pd.Quantity;
                DbProDet.BookPrice     = pd.BookPrice;
                DbProDet.ExtendedPrice = DbProDet.BookPrice * DbProDet.Quantity;

                Book DbBo = _context.Books.FirstOrDefault(b => b.BookID == DbProDet.Book.BookID);
                DbBo.Cost = pd.BookPrice;
                _context.Books.Update(DbBo);
                _context.SaveChanges();


                _context.ProcurementDetails.Update(DbProDet);
                _context.SaveChanges();
                //return to the order details
                return(RedirectToAction("EditOrder", "Procurements", new { id = DbProDet.Procurement.ProcurementID }));
            }
            return(View(pd));
        }
        // GET: Orders/Create
        public ActionResult Create(int?id)
        {
            if (id == null)
            {
                return(View("Error", new string[] { "You must specify an order to add!" }));
            }
            List <ProcurementDetail> AllProcurementDetails = new List <ProcurementDetail>();
            var query2 = from e in _context.ProcurementDetails
                         select e;

            query2 = query2.Include(o => o.Book).Include(o => o.Procurement).Where(o => o.Procurement.Completed == false && o.Procurement.ProcurementType == ProcurementType.Manual && o.Book.BookID == id);
            AllProcurementDetails = query2.ToList();
            if (AllProcurementDetails.Any())
            {
                return(View("Error", new string[] { "You already have this book in your reorder cart!" }));
            }
            Procurement pro = _context.Procurements.OrderByDescending(p => p.ProcurementID)
                              .FirstOrDefault(p => p.Completed == false);
            Book bo = _context.Books.FirstOrDefault(b => b.BookID == id);

            if (pro == null)
            {
                return(View("Error", new string[] { "Order not found!" }));
            }

            ProcurementDetail pd = new ProcurementDetail()
            {
                Procurement = pro, Book = bo, BookPrice = bo.Cost
            };

            return(View("Create", pd));
        }
        // GET: OrderDetails/Edit/5
        public IActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            ProcurementDetail pd = _context.ProcurementDetails.Include(p => p.Book).FirstOrDefault(p => p.ProcurementDetailID == id);

            if (pd == null)
            {
                return(NotFound());
            }
            return(View(pd));
        }
        public async Task <IActionResult> Create(Procurement procurement, ProcurementType SelectedType)
        {
            procurement.ProcurementDate = System.DateTime.Today;
            procurement.Completed       = false;
            if (SelectedType == ProcurementType.Manual)
            {
                procurement.ProcurementType = ProcurementType.Manual;
            }
            else
            {
                procurement.ProcurementType = ProcurementType.Automatic;
            }



            if (procurement.ProcurementType == ProcurementType.Manual)
            {
                if (ModelState.IsValid)
                {
                    Procurement alreadyexist = _context.Procurements.Where(p => p.ProcurementType == ProcurementType.Manual).FirstOrDefault(p => p.Completed == false);
                    if (alreadyexist == null)
                    {
                        _context.Add(procurement);
                        await _context.SaveChangesAsync();

                        return(RedirectToAction("EditOrder", new { id = procurement.ProcurementID }));
                    }
                    else
                    {
                        ViewBag.ExistingOrder = "This is your existing order.";
                        return(RedirectToAction("EditOrder", new { id = alreadyexist.ProcurementID }));
                    }
                }
            }

            if (procurement.ProcurementType == ProcurementType.Automatic)
            {
                List <Book> books = new List <Book>();
                books = _context.Books.Include(b => b.ProcurementDetails).Where(b => b.Inventory < b.Reorder).ToList();
                if (books.Count == 0)
                {
                    return(View("Error", new string[] { "There are currently no books below reorder point." }));
                }
                else
                {
                    if (ModelState.IsValid)
                    {
                        _context.Add(procurement);
                        await _context.SaveChangesAsync();

                        foreach (Book b in books)
                        {
                            ProcurementDetail procurementDetail = new ProcurementDetail();
                            procurementDetail.Quantity      = 5;
                            procurementDetail.BookPrice     = b.Cost;
                            procurementDetail.ExtendedPrice = procurementDetail.Quantity * procurementDetail.BookPrice;
                            procurementDetail.Book          = _context.Books.FirstOrDefault(o => o.BookID == b.BookID);
                            procurementDetail.Procurement   = _context.Procurements.FirstOrDefault(p => p.ProcurementID == procurement.ProcurementID);

                            _context.Add(procurementDetail);
                            await _context.SaveChangesAsync();
                        }
                        return(RedirectToAction("EditOrder", new { id = procurement.ProcurementID }));
                    }
                }
            }
            return(View("Create"));
        }