/// <summary> /// Mass rent media /// </summary> /// <param name="listMediaIds">List with media IDs that are being rented</param> /// <param name="userId">The ID of the user who is the owner of the lendings</param> /// <returns>Number of created entries</returns> public int CreateLending(List<int> listMediaIds, int userId) { using (MediathekEntities context = new MediathekEntities()) { int createCount = 0; foreach (int mediaId in listMediaIds) { if (IsMediaAvailableForRenting(mediaId, userId)) { MediaRenting mr = new MediaRenting(); mr.CheckOutDate = DateTime.Now; mr.Media = context.MediaSet.FirstOrDefault(m => m.MediaId == mediaId); mr.LeasingUser = context.Users.FirstOrDefault(u => u.UserId == userId); // set the media state to "unavaiable" mr.Media.MediaState = context.MediaStates.FirstOrDefault(ms => ms.MediaSateId == 2); context.AddToMediaRentings(mr); createCount++; // if user had open reservation for the current media, we close the reservation var res = from r in context.Reservations where r.User.UserId == userId && r.Media.MediaId == mediaId && r.EndDate == null select r; foreach (Reservation reservation in res) { reservation.EndDate = DateTime.Now; } } } // save to DB context.SaveChanges(); return createCount; } }