private static bool UpdateDeviceStatus(DeviceStatus newStatus, PcPoolModels.DeviceInstance device, PcPoolEntities ctx, int userId)
        {
            if (newStatus == DeviceStatus.Loaned)
            {
                var inventoryStatProvider = new InventoryStatProvide();
                var result = inventoryStatProvider.ReserveDevices(device.DeviceTypeID, 1, userId, true);
                if (!result.IsPossible)
                {
                    return(false);
                }
                device.DeviceStatusID = (int)newStatus;

                var reservation =
                    ctx.ReservationLists.FirstOrDefault(
                        rl =>
                        rl.UserID == userId && rl.DeviceTypeID == device.DeviceTypeID &&
                        rl.EndDate > DateTime.UtcNow);
                if (reservation != null | reservation.Amount != 0)
                {
                    reservation.Amount -= 1;
                    ctx.ReservationLists.Attach(reservation);
                    ctx.Entry(reservation).State = EntityState.Modified;

                    ctx.DeviceInstances.Attach(device);
                    ctx.Entry(device).State = EntityState.Modified;
                    ctx.SaveChanges();
                }
            }
            else
            {
                device.DeviceStatusID = (int)newStatus;
                ctx.DeviceInstances.Attach(device);
                ctx.Entry(device).State = EntityState.Modified;
                ctx.SaveChanges();
            }
            return(true);
        }
        private bool UpdateDeviceStatusAndHistory(DeviceStatus newStatus, int userId, PcPoolModels.DeviceInstance device, PcPoolEntities ctx)
        {
            var status = UpdateDeviceStatus(newStatus, device, ctx, userId);

            if (status)
            {
                AddDeviceStatusHistory(ctx, device.DeviceInstanceID, newStatus, userId);
            }
            return(status);
        }