Пример #1
0
    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());
    }
Пример #3
0
    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());
    }