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); }