public void CheckOutItem(int assetId, int libraryCardId)
        {
            var now = DateTime.Now;

            var checkOut = new Checkout()
            {
                LibraryCardId  = libraryCardId,
                LibraryAssetId = assetId,
                Since          = now,
                Until          = now.AddDays(10)
            };

            var libraryAsset = this.db.LibraryAssets.FirstOrDefault(l => l.Id == assetId);

            libraryAsset.StatusId = (int)StatusType.CheckedOut;

            this.db.Checkouts.Add(checkOut);

            var checkoutHistory = new CheckoutHistory()
            {
                CheckedOut     = now,
                LibraryAssetId = assetId,
                LibraryCardId  = libraryCardId
            };

            this.db.CheckoutHistories.Add(checkoutHistory);

            this.db.SaveChanges();
        }
Example #2
0
        public void CheckOutItem(int deviceId, int userId)
        {
            if (IsCheckedOut(deviceId))
            {
                return;
                //Add logic to handle feedback to the user
            }

            var item = _context.Devices.FirstOrDefault(a => a.Id == deviceId);

            UpdateDeviceStatus(deviceId, "Checked Out");
            var user = _context.Users
                       .FirstOrDefault(u => u.Id == userId);

            var now      = DateTime.Now;
            var checkout = new Checkout
            {
                Device = item,
                User   = user,
                Since  = now,
                Until  = GetDefaultCheckoutTime(now)
            };

            _context.Add(checkout);

            var checkoutHistory = new CheckoutHistory
            {
                CheckedOut = now,
                Device     = item,
                User       = user
            };

            _context.Add(checkoutHistory);
            _context.SaveChanges();
        }
        public async Task CheckOutItemAsync(int assetId, int libraryCardId)
        {
            if (await IsCheckedOutAsync(assetId))
            {
                return;
            }

            await UpdateAssetStatus(assetId, "Checked Out");

            var libraryCard = await _context.LibraryCards
                              .FirstOrDefaultAsync(x => x.Id == libraryCardId);

            if (libraryCard == null)
            {
                return;
            }

            //In case of libraryCard exists but patron has been deleted,
            //do not allow to checkout the item
            var patron = await _context.Users.FirstOrDefaultAsync(x => x.LibraryCard.Id == libraryCardId);

            if (patron == null)
            {
                return;
            }

            var now = DateTime.Now;

            var item = await _context.LibraryAssets.FirstOrDefaultAsync(x => x.Id == assetId);

            var checkout = new Checkout()
            {
                LibraryAsset = item,
                LibraryCard  = libraryCard,
                Since        = now,
                Until        = GetDefaultCheckoutTime(now)
            };

            _context.Add(checkout);

            var checkoutHistory = new CheckoutHistory()
            {
                LibraryAsset = item,
                LibraryCard  = libraryCard,
                CheckedOut   = now
            };

            _context.Add(checkoutHistory);

            //Remove patron's hold on the item
            var hold = await _context.Holds
                       .FirstOrDefaultAsync(x => x.LibraryCard.Id == libraryCardId && x.LibraryAsset.Id == assetId);

            if (hold != null)
            {
                _context.Remove(hold);
            }

            await _context.SaveChangesAsync();
        }
Example #4
0
        public void CheckOutItem(int assetId, int libraryCardId)
        {
            //check for an item is has been already checkedout
            if (IsCheckedOut(assetId))
            {
                return;
            }

            //UpdateNrOfCopies(assetId);
            UpdateAssetStatus(assetId, "Checked Out");

            var item        = assetService.GetById(assetId);
            var libraryCard = GetLibraryCard(libraryCardId);

            var checkout = new Checkout
            {
                LibraryAsset = item,
                LibraryCard  = libraryCard,
                Since        = dtNow,
                Until        = GetDefaultCheckInTime()
            };

            var checkoutHistory = new CheckoutHistory
            {
                CheckIn      = GetDefaultCheckInTime(),
                CheckOut     = dtNow,
                LibraryAsset = item,
                LibraryCard  = libraryCard
            };

            _contex.Add(checkout);
            _contex.Add(checkoutHistory);
            _contex.SaveChanges();
        }
        public void CheckOutBook(int bookId, int patronId)
        {
            var now  = DateTime.Now;
            var book = _context.Books.FirstOrDefault(b => b.ID == bookId);

            book.IsCheckouted = true;
            var patron = _context.Patrons.FirstOrDefault(p => p.ID == patronId);

            var checkout = new Checkout
            {
                Patron = patron,
                Book   = book,
                Since  = now,
                Until  = now.AddDays(7)
            };

            _context.Add(checkout);

            var checkoutHistory = new CheckoutHistory
            {
                CheckedOut = now,
                Book       = book,
                Patron     = patron
            };

            _context.Add(checkoutHistory);
            _context.SaveChanges();
        }
        public ActionResult CheckIn(int checkoutId)
        {
            Checkout checkout = db.Checkouts.FirstOrDefault(a => a.CheckoutId == checkoutId);

            CheckoutHistory checkoutHistory = new CheckoutHistory
            {
                AssetId        = checkout.AssetId,
                PatronId       = checkout.PatronId,
                CheckedOutDate = checkout.CheckoutDate,
                CheckedInDate  = DateTime.Now,
                Notes          = checkout.Notes
            };

            //record checkout in history
            db.CheckoutHistories.Add(checkoutHistory);

            //also need to set asset to CheckedIn
            Asset assetModel = db.Assets.Find(checkout.AssetId);

            //first check if asset is currently checked out
            if (assetModel.StatusId == db.Status.FirstOrDefault(a => a.Name == "CheckedIn").StatusId)
            {
                ViewBag.errorMessage = "The Asset is already checked in";
                return(View(checkout));
            }

            assetModel.StatusId        = db.Status.FirstOrDefault(a => a.Name == "CheckedIn").StatusId;
            db.Entry(assetModel).State = EntityState.Modified;
            //delete checkout
            db.Checkouts.Remove(checkout);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
        public void CheckOutItem(int id, int libraryCardId)
        {
            if (IsCheckedOut(id))
            {
                return;
                // add logic here  to send the feed back to the user
            }
            var item = _context.LibraryAssets.FirstOrDefault(a => a.Id == id);

            UpadateAssetStatus(id, "Checked Out");
            var libraryCard = _context.LibraryCards.Include(card => card.Checkouts)
                              .FirstOrDefault(card => card.Id == libraryCardId);
            var now      = DateTime.Now;
            var checkout = new Checkout
            {
                LibraryAsset = item,
                LibraryCard  = libraryCard,
                Since        = now,
                Until        = GetDefaultCheckOutTime(now)
            };

            _context.Add(checkout);
            var checkoutHistory = new CheckoutHistory
            {
                CheckedOut   = now,
                LibraryAsset = item,
                LibraryCard  = libraryCard,
                // CheckedIn = GetDefaultCheckOutTime(now)
            };

            _context.Add(checkoutHistory);
            _context.SaveChanges();
        }
Example #8
0
        public void CheckOutItem(int assetId, int LibraryCardId)
        {
            var now          = DateTime.Now;
            var LibraryCard  = _context.LibraryCards.FirstOrDefault(l => l.Id == LibraryCardId);
            var LibraryAsset = _context.LibraryAssets.FirstOrDefault(a => a.Id == assetId);

            _context.Update(LibraryAsset);
            LibraryAsset.Status = _context.Statuses.FirstOrDefault(s => s.Name == "Checked Out");

            var newCheckout = new Checkout()
            {
                LibraryCard  = LibraryCard,
                LibraryAsset = LibraryAsset,
                Since        = now
            };

            _context.Checkouts.Add(newCheckout);

            var newCheckoutHistrory = new CheckoutHistory()
            {
                LibraryAsset = LibraryAsset,
                LibraryCard  = LibraryCard,
                CheckOut     = now
            };

            _context.CheckoutHistories.Add(newCheckoutHistrory);

            _context.SaveChanges();
        }
Example #9
0
        public void CheckOutItem(int assetId, int libraryCardId)
        {
            if (IsCheckedOut(assetId))
            {
                return;
            }
            var item = _context.LibraryAssets.FirstOrDefault(a => a.Id == assetId);

            UpdateAssetStatus(assetId, "Checked Out");
            var LibraryCard = _context.LibraryCards
                              .Include(card => card.Checkouts)
                              .FirstOrDefault(card => card.Id == libraryCardId);

            var now = DateTime.Now;

            var checkout = new Checkout
            {
                LibraryAsset = item,
                LibraryCard  = LibraryCard,
                Since        = now,
                Until        = GetDefaultCheckoutTime(now)
            };

            _context.Add(checkout);

            var checkoutHistory = new CheckoutHistory
            {
                CheckedOut   = now,
                LibraryAsset = item,
                LibraryCard  = LibraryCard,
            };

            _context.Add(checkoutHistory);
            _context.SaveChanges();
        }
Example #10
0
        public ActionResult DeleteConfirmed(int id)
        {
            CheckoutHistory checkoutHistory = db.CheckoutHistories.Find(id);

            db.CheckoutHistories.Remove(checkoutHistory);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Example #11
0
        public void CheckInItem(int assetId)
        {
            var now  = DateTime.Now;
            var item = _context.LibraryAssets.FirstOrDefault(a => a.Id == assetId);

            _context.Update(item);
            //remove the checkout
            var Checkout = _context.Checkouts.Where(c => c.LibraryAsset.Id == assetId);

            if (Checkout != null)
            {
                _context.Remove(Checkout);
            }
            //Close any existing checkout history
            var history = _context.CheckoutHistories.FirstOrDefault(h => h.LibraryAsset.Id == assetId && h.CheckedIn == null);

            if (history != null)
            {
                _context.Update(history);
                history.CheckedIn = now;
            }

            var currentHolds = _context.Holds.Include(h => h.LibraryAsset)
                               .Include(h => h.LibraryCard)
                               .Where(h => h.LibraryAsset.Id == assetId);

            if (currentHolds.Any())
            {
                var earliestHold = currentHolds.OrderBy(h => h.HoldPlaced).FirstOrDefault(); //Default is Ascending
                _context.Remove(earliestHold);
                _context.Update(earliestHold.LibraryAsset);
                earliestHold.LibraryAsset.Status = _context.Statuses.FirstOrDefault(s => s.Name == "Checked Out");
                var newCheckout = new Checkout()
                {
                    LibraryCard  = earliestHold.LibraryCard,
                    LibraryAsset = earliestHold.LibraryAsset,
                    Since        = earliestHold.HoldPlaced
                };
                _context.Checkouts.Add(newCheckout);

                var newCheckoutHistrory = new CheckoutHistory()
                {
                    LibraryAsset = earliestHold.LibraryAsset,
                    LibraryCard  = earliestHold.LibraryCard,
                    CheckOut     = now
                };

                _context.CheckoutHistories.Add(newCheckoutHistrory);
                _context.SaveChanges();
                return;
            }

            item.Status = _context.Statuses.FirstOrDefault(s => s.Name == "Available");

            _context.SaveChanges();
        }
Example #12
0
        public string GetCurrentCheckedOutPatronName(int checkId)
        {
            CheckoutHistory check = _context.CheckoutHistories
                .Include(co => co.LibraryAsset)
                .Include(co => co.LibraryCard)
                .FirstOrDefault(co => co.Id == checkId);
            var cardId = check?.LibraryCard.Id;

            return PatronName(cardId);
        }
Example #13
0
        private void CloseExistingCheckoutHistory(int assetId)
        {
            CheckoutHistory history = _context.CheckoutHistories.FirstOrDefault(coh => coh.LibraryAsset.Id == assetId && coh.CheckedIn == null);

            if (history != null)
            {
                _context.Update(history);
                history.CheckedIn = DateTime.Now;
            }
        }
Example #14
0
        private void CheckoutHistory(LibraryAsset item, LibraryCard libraryCard, DateTime now)
        {
            var checkoutHistory = new CheckoutHistory
            {
                CheckedOut   = now,
                LibraryAsset = item,
                LibraryCard  = libraryCard
            };

            _context.Add(checkoutHistory);
        }
Example #15
0
 public ActionResult Edit([Bind(Include = "CheckoutHistoryId,AssetId,PatronId,CheckedOutDate,CheckedInDate,Notes,RowVersion")] CheckoutHistory checkoutHistory)
 {
     if (ModelState.IsValid)
     {
         db.Entry(checkoutHistory).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.AssetId  = new SelectList(db.Assets, "AssetId", "Name", checkoutHistory.AssetId);
     ViewBag.PatronId = new SelectList(db.Patrons, "PatronId", "Forename", checkoutHistory.PatronId);
     return(View(checkoutHistory));
 }
Example #16
0
        private void CloseExistingCheckoutHistory(int assetId, DateTime now)
        {
            //close any existing checkout history
            CheckoutHistory history = _context.CheckoutHistories
                .FirstOrDefault(h => h.LibraryAsset.Id == assetId
                && h.CheckedOut == null);

            if (history != null)
            {
                _context.Update(history);
                history.CheckedIn = now;
            }
        }
Example #17
0
        // GET: CheckoutHistories/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            CheckoutHistory checkoutHistory = db.CheckoutHistories.Find(id);

            if (checkoutHistory == null)
            {
                return(HttpNotFound());
            }
            return(View(checkoutHistory));
        }
Example #18
0
        public void CheckoutItem(int assetId, int libraryCardId)
        {
            try
            {
                var ischeckedout = IsCheckedout(assetId);

                if (ischeckedout) //if the item is checked out i.e. if the assetId carries (or shows) checkedout
                {
                    return;
                    //add logic to handke feedback to the user
                }
                var item = _context.LibraryAssets
                           .FirstOrDefault(asset => asset.Id == assetId);
                //get the item id

                UpdateAssetStatus(assetId, "Checked Out"); //update the item status to check out

                var libraryCard = _context.LibraryCards
                                  .Include(card => card.Checkouts)
                                  .FirstOrDefault(card => card.Id == libraryCardId);
                //check whose library card checked the item out and grab it

                var now = DateTime.Now;

                var checkout = new Checkout
                {
                    LibraryAsset = item,
                    LibraryCard  = libraryCard,
                    Since        = now,
                    Until        = GetDefaultCheckoutTime(now)
                };

                _context.Add(checkout);

                var checkoutHistory = new CheckoutHistory
                {
                    CheckedOut   = now,
                    LibraryAsset = item,
                    LibraryCard  = libraryCard
                };

                _context.Add(checkoutHistory);
                _context.SaveChanges();
            }
            catch (Exception ex)
            {
                //throw;
            }
        }
        public async Task <CheckoutHistoryResponse> SaveAsync(CheckoutHistory checkoutHistory)
        {
            try
            {
                await _checkoutHistoryRepository.AddAsync(checkoutHistory);

                await _unitOfWork.CompleteAsync();

                return(new CheckoutHistoryResponse(checkoutHistory));
            }
            catch (Exception ex)
            {
                return(new CheckoutHistoryResponse($"An error occurred when saving the checkoutHistory: {ex.Message}"));
            }
        }
Example #20
0
        // GET: CheckoutHistories/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            CheckoutHistory checkoutHistory = db.CheckoutHistories.Find(id);

            if (checkoutHistory == null)
            {
                return(HttpNotFound());
            }
            ViewBag.AssetId  = new SelectList(db.Assets, "AssetId", "Name", checkoutHistory.AssetId);
            ViewBag.PatronId = new SelectList(db.Patrons, "PatronId", "Forename", checkoutHistory.PatronId);
            return(View(checkoutHistory));
        }
Example #21
0
        public void CheckoutItem(int id, int libraryCardId)
        {
            if (IsCheckedOut(id))
            {
                return;
            }

            var item = _context.LibraryAsset
                       .Include(a => a.Status)
                       .FirstOrDefault(a => a.Id == id);

            _context.Update(item);

            item.Status = _context.Status
                          .FirstOrDefault(a => a.Name == "Checked Out");

            var now = DateTime.Now;

            var libraryCard = _context.LibraryCards
                              .Include(c => c.Checkouts)
                              .FirstOrDefault(a => a.Id == libraryCardId);

            if (libraryCard == null)
            {
                return;
            }

            var checkout = new Checkouts
            {
                LibraryAsset = item,
                LibraryCard  = libraryCard,
                Since        = now,
                Until        = GetDefaultCheckoutTime(now)
            };

            _context.Add(checkout);

            var checkoutHistory = new CheckoutHistory
            {
                CheckedOut   = now,
                LibraryAsset = item,
                LibraryCard  = libraryCard
            };

            _context.Add(checkoutHistory);
            _context.SaveChanges();
        }
Example #22
0
        public async Task <bool> CheckOutItem(Guid assetId, int libraryCardId)
        {
            var now = DateTime.UtcNow;

            var isAlreadyCheckedOut = await IsCheckedOut(assetId);

            if (isAlreadyCheckedOut)
            {
                // TODO
            }

            var libraryAsset = await _context.LibraryAssets
                               .Include(a => a.AvailabilityStatus)
                               .FirstAsync(a => a.Id == assetId);

            _context.Update(libraryAsset);

            // TODO
            libraryAsset.AvailabilityStatus = await _context.Statuses
                                              .FirstAsync(a => a.Name == "Checked Out");

            var libraryCard = await _context.LibraryCards
                              .Include(c => c.Checkouts)
                              .FirstAsync(a => a.Id == libraryCardId);

            var checkout = new Data.Models.Checkout {
                Asset           = libraryAsset,
                LibraryCard     = libraryCard,
                CheckedOutSince = now,
                CheckedOutUntil = GetDefaultDateDue(now)
            };

            await _context.AddAsync(checkout);

            var checkoutHistory = new CheckoutHistory {
                CheckedOut  = now,
                Asset       = libraryAsset,
                LibraryCard = libraryCard
            };

            await _context.AddAsync(checkoutHistory);

            await _context.SaveChangesAsync();

            return(true);
        }
        public void CheckOutToFirstReserve(int assetId, int firstHoldLibraryCardId)
        {
            if (IsCheckedOut(assetId))
            {
                return;
                // Add logic here to handle feedback to the user.
            }

            var item = _context.LibraryAssets
                       .FirstOrDefault(a => a.Id == assetId);

            UpdateAssetStatus(assetId, "Checked Out");

            var libraryCard = _context.LibraryCards
                              .Include(card => card.Checkouts)
                              .FirstOrDefault(card => card.Id == firstHoldLibraryCardId);

            var now = DateTime.Now;

            var checkout = new Checkout
            {
                LibraryAsset = item,
                LibraryCard  = libraryCard,
                Since        = now,
                Until        = GetDefaultCheckoutTime(now)
            };

            _context.Add(checkout);

            var checkoutHistory = new CheckoutHistory
            {
                CheckedOut   = now,
                LibraryAsset = item,
                LibraryCard  = libraryCard
            };

            _context.Add(checkoutHistory);

            var earliestHold = _context.Holds
                               .OrderBy(h => h.HoldPlaced)
                               .FirstOrDefault(h => h.LibraryCard.Id == firstHoldLibraryCardId);

            _context.Remove(earliestHold);

            _context.SaveChanges();
        }
Example #24
0
        // коли беруть книгу CheckoutItem - взята книга
        public void CheckOutItem(int assetId, int libraryCardId)
        {
            var now = DateTime.Now; // щоб було однакове для всього методу

            // перевіримо, чи книга вільна, щоб можна було її видати (на Checkout)
            if (IsCheckedOut(assetId))
            {
                return;
                // add logic to handle feedback to the user
            }

            var item = _context.LibraryAssets
                       .FirstOrDefault(i => i.Id == assetId);

            // нам потрібно оновити статус обєкта книги
            //_context.Update(item); // use our method:
            UpdateAssetStatus(assetId, "Checked Out");

            // далі отримаємо картку члена клубу, з списком його Checkout'ів
            // щоб добавити саме йому новий Checkout
            var libraryCard = _context.LibraryCards
                              .Include(card => card.Checkouts)
                              .FirstOrDefault(card => card.Id == libraryCardId);

            var checkout = new Checkout
            {
                LibraryAsset = item,
                LibraryCard  = libraryCard,
                Since        = now,
                Until        = GetDefaultCheckoutTime(now) // вказуємо до якого числа треба повернути книгу
            };

            _context.Add(checkout);

            // Далі потрібно додати нову CheckoutHistory
            var checkoutHistory = new CheckoutHistory
            {
                ChekedOut    = now,
                LibraryAsset = item,
                LibraryCard  = libraryCard
            };

            _context.Add(checkoutHistory);
            _context.SaveChanges();
        }
        public void CheckoutItem(int assetId, int libraryCardId)
        {
            if (IsCheckedOut(assetId))
            {
                return;
                // Add logic here to handle feedback to the user.
            }

            var item = _context.LibraryAssets
                       .FirstOrDefault(a => a.Id == assetId);

            UpdateAssetStatus(assetId, "Checked Out");

            var now = DateTime.Now;

            var libraryCard = _context.LibraryCard
                              .Include(c => c.Checkouts)
                              .FirstOrDefault(c => c.Id == libraryCardId);

            var patron = _context.Patrons
                         .Include(p => p.LibraryCard)
                         .FirstOrDefault(P => P.LibraryCard.Id == libraryCardId);

            var checkout = new Checkout
            {
                LibraryAsset = item,
                LibraryCard  = libraryCard,
                Since        = now,
                Until        = GetDefaultCheckoutTime(now)
            };

            _context.Add(checkout);

            var checkoutHistory = new CheckoutHistory
            {
                CheckedOut   = now,
                LibraryAsset = item,
                LibraryCard  = libraryCard,
                Patron       = patron
            };

            _context.Add(checkoutHistory);
            _context.SaveChanges();
        }
        public void CheckOutItem(int assetId, int driverLicenseId, int numberOfRentalDays)
        {
            var currentTime = DateTime.Now;

            var driverLicense = _context.DriverLicenses
                                .Include(asset => asset.Checkouts)
                                .FirstOrDefault(asset => asset.Id == driverLicenseId);

            var item = _context.VehicleRentalAssets
                       .Include(asset => asset.Status)
                       .Include(asset => asset.Location)
                       .FirstOrDefault(asset => asset.Id == assetId);

            var fullname = GetPatronFullName(driverLicenseId);

            // Check if Asset is Available and not Checked Out
            if (item.Status.Name == "Available")
            {
                // Update Asset Status as Checked Out
                UpdateAssetStatus(assetId, "Checked Out");

                // Add New Checkout to the Table
                var checkout = new Checkout
                {
                    VehicleRentalAsset = item,
                    DriverLicense      = driverLicense,
                    StartTime          = currentTime,
                    EndTime            = GetCheckoutDate(currentTime, numberOfRentalDays)
                };
                _context.Add(checkout);

                // Add to CheckoutHistory Table
                var CheckoutHistory = new CheckoutHistory
                {
                    VehicleRentalAsset = item,
                    DriverLicense      = driverLicense,
                    CheckedOut         = currentTime,
                    FullName           = fullname
                };
                _context.Add(CheckoutHistory);

                _context.SaveChanges();
            }
        }
Example #27
0
        public void checkOutItem(int assetId, int libraryCardId)
        {
            if (isCheckOut(assetId))
            {
                //If item has been checkout
                //Here can do smtg to notify user
                return;
            }
            var item = _context.libraryAssets
                       .FirstOrDefault(a => a.id == assetId);

            updateAsset(assetId, "Checked Out");

            var libraryCard = _context.libraryCards
                              .Include(c => c.checkOut)
                              .FirstOrDefault(c => c.id == libraryCardId);

            var timeNow = DateTime.Now;

            var checkOut = new Checkouts
            {
                LibraryAsset = item,
                LibraryCard  = libraryCard,
                since        = timeNow,
                until        = getDefaultCheckoutTime(timeNow),
            };

            _context.Add(checkOut);

            var checkOutHis = new CheckoutHistory
            {
                libraryAsset = item,
                LibraryCard  = libraryCard,
                checkOut     = timeNow,
                //checkIn =
                //Check in would be null for this i supposed
                //since item just got checked out and
                //we dont know when user will return
            };

            _context.Add(checkOutHis);
            _context.SaveChanges();
        }
Example #28
0
        public void CheckoutItem(int assetId, int libraryCardId)
        {
            if (IsCheckedOut(assetId))
            {
                return;
                // Add logic here to handle feedback to the user.
            }

            var item = _context.LibraryAssets
                       .Include(a => a.Status)
                       .FirstOrDefault(a => a.Id == assetId);

            _context.Update(item);

            item.Status = _context.Statuses
                          .FirstOrDefault(a => a.Name == "Checked Out");

            var now = DateTime.Now;

            var libraryCard = _context.LibraryCards
                              .Include(c => c.Checkouts)
                              .FirstOrDefault(a => a.Id == libraryCardId);

            var checkout = new Checkout
            {
                LibraryAsset = item,
                LibraryCard  = libraryCard,
                Since        = now,
                Until        = GetDefaultCheckoutTime(now)
            };

            _context.Add(checkout);

            var checkoutHistory = new CheckoutHistory
            {
                CheckedOut   = now,
                LibraryAsset = item,
                LibraryCard  = libraryCard
            };

            _context.Add(checkoutHistory);
            _context.SaveChanges();
        }
        public void CheckOutItem(int assetId, int libraryCardId)
        {
            var now = DateTime.Now;

            // Check whether or not the item is already checked out
            if (IsCheckedOut(assetId))
            {
                return;
                // Add logic here to handle feedback to the user
                // Inform them that the item is altready checked out
            }

            var theAsset = _context.LibraryAssets
                           .FirstOrDefault(a => a.Id == assetId);

            UpdateAssetStatus(assetId, "Checked Out");

            // Get the library card you want to check this asset out to
            var card = _context.LibraryCards
                       .Include(c => c.Checkouts)
                       .FirstOrDefault(c => c.Id == libraryCardId);

            var checkout = new Checkout
            {
                LibraryAsset = theAsset,
                LibraryCard  = card,
                Since        = now,
                Until        = GetDefaultCheckOutTime(now)
            };

            _context.Add(checkout);

            var checkoutHistory = new CheckoutHistory
            {
                LibraryAsset = theAsset,
                LibraryCard  = card,
                ChekedOut    = now
            };

            _context.Add(checkoutHistory);
            _context.SaveChanges();
        }
        public void CheckOutItem(int assetId, int libraryCardId)
        {
            if (IsCheckedOut(assetId))
            {
                return;
                // Add logic here to handle feedback to the user;
            }

            var item = _ctx.LibraryAssets
                       .FirstOrDefault(asset => asset.Id == assetId);

            _ctx.Update(item);

            UpdateAssetStatus(assetId, "Checked Out");

            var libraryCard = _ctx.LibraryCards
                              .Include(card => card.Checkouts)
                              .FirstOrDefault(card => card.Id == libraryCardId);

            var now = DateTime.Now;

            var checkout = new Checkout
            {
                LibraryAsset = item,
                LibraryCard  = libraryCard,
                Since        = now,
                Until        = GetDefaultCheckOutTime(now)
            };

            _ctx.Add(checkout);

            var checkoutHistory = new CheckoutHistory
            {
                CheckedOut   = now,
                LibraryAsset = item,
                LibraryCard  = libraryCard
            };

            _ctx.Add(checkoutHistory);

            _ctx.SaveChanges();
        }