public async Task <LabExecution> CreateLabExecutionAsync(LabExecution labExecution, bool updateExisting, CancellationToken cancellationToken) { // Update existing one? LabExecutionEntity labExecutionEntity; if (updateExisting && (labExecutionEntity = await _dbContext.LabExecutions.FindAsync(new object[] { labExecution.GroupId, labExecution.LabId }, cancellationToken)) != null) { labExecutionEntity.PreStart = labExecution.PreStart; labExecutionEntity.Start = labExecution.Start; labExecutionEntity.End = labExecution.End; } else { // Create new labExecution labExecutionEntity = _dbContext.LabExecutions.Add(new LabExecutionEntity { GroupId = labExecution.GroupId, LabId = labExecution.LabId, PreStart = labExecution.PreStart, Start = labExecution.Start, End = labExecution.End }).Entity; } // Apply changes await _dbContext.SaveChangesAsync(cancellationToken); return(_mapper.Map <LabExecution>(labExecutionEntity)); }
public async Task <IActionResult> CreateLabExecutionForSlotAsync(AdminLabExecution labExecutionData) { // Check input if (!ModelState.IsValid || !await _labService.LabExistsAsync(labExecutionData.LabExecution.LabId, HttpContext.RequestAborted) || !await _slotService.SlotExistsAsync(labExecutionData.SlotId, HttpContext.RequestAborted) || !(labExecutionData.LabExecution.PreStart < labExecutionData.LabExecution.Start && labExecutionData.LabExecution.Start < labExecutionData.LabExecution.End)) { AddStatusMessage(_localizer["CreateLabExecutionForSlotAsync:InvalidInput"], StatusMessageTypes.Error); return(await ShowCreateLabExecutionForSlotFormAsync(labExecutionData)); } try { // Start lab for each of the groups foreach (var group in await _userService.GetGroupsInSlotAsync(labExecutionData.SlotId).ToListAsync()) { try { var labExecution = new LabExecution { GroupId = group.Id, LabId = labExecutionData.LabExecution.LabId, PreStart = labExecutionData.LabExecution.PreStart, Start = labExecutionData.LabExecution.Start, End = labExecutionData.LabExecution.End }; await _labExecutionService.CreateLabExecutionAsync(labExecution, labExecutionData.OverrideExisting, HttpContext.RequestAborted); } catch (Exception ex) { _logger.LogError(ex, "Create lab execution for group in slot"); AddStatusMessage(_localizer["CreateLabExecutionForSlotAsync:ErrorGroup", group.Id, group.DisplayName], StatusMessageTypes.Warning); } } AddStatusMessage(_localizer["CreateLabExecutionForSlotAsync:Success"], StatusMessageTypes.Success); } catch (Exception ex) { _logger.LogError(ex, "Create lab execution for slot"); AddStatusMessage(_localizer["CreateLabExecutionForSlotAsync:UnknownError"], StatusMessageTypes.Error); return(await ShowCreateLabExecutionForSlotFormAsync(labExecutionData)); } return(await RenderLabExecutionListAsync()); }
public async Task UpdateLabExecutionAsync(LabExecution labExecution, CancellationToken cancellationToken) { // Try to retrieve existing entity var labExecutionEntity = await _dbContext.LabExecutions.FindAsync(new object[] { labExecution.GroupId, labExecution.LabId }, cancellationToken); if (labExecutionEntity == null) { throw new InvalidOperationException("Diese Ausführung existiert nicht"); } // Update entry labExecutionEntity.PreStart = labExecution.PreStart; labExecutionEntity.Start = labExecution.Start; labExecutionEntity.End = labExecution.End; // Apply changes await _dbContext.SaveChangesAsync(cancellationToken); }
public async Task <IActionResult> CreateLabExecutionForGroupAsync(AdminLabExecution labExecutionData) { // Check input if (!ModelState.IsValid || !await _labService.LabExistsAsync(labExecutionData.LabExecution.LabId, HttpContext.RequestAborted) || !await _userService.GroupExistsAsync(labExecutionData.LabExecution.GroupId, HttpContext.RequestAborted) || !(labExecutionData.LabExecution.PreStart < labExecutionData.LabExecution.Start && labExecutionData.LabExecution.Start < labExecutionData.LabExecution.End)) { AddStatusMessage(_localizer["CreateLabExecutionForGroupAsync:InvalidInput"], StatusMessageTypes.Error); return(await ShowCreateLabExecutionForGroupFormAsync(labExecutionData)); } // Start lab for group try { var labExecution = new LabExecution { GroupId = labExecutionData.LabExecution.GroupId, LabId = labExecutionData.LabExecution.LabId, PreStart = labExecutionData.LabExecution.PreStart, Start = labExecutionData.LabExecution.Start, End = labExecutionData.LabExecution.End }; await _labExecutionService.CreateLabExecutionAsync(labExecution, labExecutionData.OverrideExisting, HttpContext.RequestAborted); AddStatusMessage(_localizer["CreateLabExecutionForGroupAsync:Success"], StatusMessageTypes.Success); } catch (Exception ex) { _logger.LogError(ex, "Create lab execution for group"); AddStatusMessage(_localizer["CreateLabExecutionForGroupAsync:UnknownError"], StatusMessageTypes.Error); return(await ShowCreateLabExecutionForGroupFormAsync(labExecutionData)); } return(await RenderLabExecutionListAsync()); }