public async Task <Result <int> > Handle(CreateAreaTagCommand request, CancellationToken cancellationToken) { var project = await _projectRepository.GetProjectOnlyByNameAsync(request.ProjectName); if (project == null) { project = await CreateProjectAsync(request.ProjectName); if (project == null) { return(new NotFoundResult <int>($"Project with name {request.ProjectName} not found")); } } var areaTagToAdd = await CreateAreaTagAsync(request); if (!await SetAreaDataSuccessfullyAsync(areaTagToAdd, request.AreaCode)) { return(new NotFoundResult <int>($"Area with code {request.AreaCode} not found")); } if (!await SetDisciplineDataSuccessfullyAsync(areaTagToAdd, request.DisciplineCode)) { return(new NotFoundResult <int>($"Discipline with code {request.DisciplineCode} not found")); } project.AddTag(areaTagToAdd); await _unitOfWork.SaveChangesAsync(cancellationToken); return(new SuccessResult <int>(areaTagToAdd.Id)); }
private async Task <Tag> CreateAreaTagAsync(CreateAreaTagCommand request) { var reqDefIds = request.Requirements.Select(r => r.RequirementDefinitionId).ToList(); var reqDefs = await _requirementTypeRepository.GetRequirementDefinitionsByIdsAsync(reqDefIds); var requirements = new List <TagRequirement>(); foreach (var requirement in request.Requirements) { var reqDef = reqDefs.Single(rd => rd.Id == requirement.RequirementDefinitionId); requirements.Add(new TagRequirement(_plantProvider.Plant, requirement.IntervalWeeks, reqDef)); } string purchaseOrderNo = null; string calloff = null; if (request.TagType == TagType.PoArea) { if (string.IsNullOrEmpty(request.PurchaseOrderCalloffCode)) { throw new Exception($"Tags of type {TagType.PoArea} must have {nameof(request.PurchaseOrderCalloffCode)}"); } var poParts = request.PurchaseOrderCalloffCode.Split('/'); purchaseOrderNo = poParts[0].Trim(); if (poParts.Length > 1) { calloff = poParts[1].Trim(); } } var step = await _journeyRepository.GetStepByStepIdAsync(request.StepId); return(new Tag( _plantProvider.Plant, request.TagType, request.GetTagNo(), request.Description, step, requirements) { PurchaseOrderNo = purchaseOrderNo, Calloff = calloff, Remark = request.Remark, StorageArea = request.StorageArea }); }