public async Task <OperationResult> Update([FromBody] PlanningUpdateModel updateModel) { return(await _planningService.Update(updateModel)); }
public async Task <OperationResult> Update(PlanningUpdateModel updateModel) { // await using var transaction = await _dbContext.Database.BeginTransactionAsync(); var sdkCore = await _coreService.GetCore(); await using var sdkDbContext = sdkCore.DbContextHelper.GetDbContext(); try { var localeString = await _userService.GetCurrentUserLocale(); if (string.IsNullOrEmpty(localeString)) { return(new OperationResult( false, _itemsPlanningLocalizationService.GetString("LocaleDoesNotExist"))); } var language = sdkDbContext.Languages.Single(x => x.LanguageCode == localeString); if (updateModel.BoundEform == null) { return(new OperationResult( false, _itemsPlanningLocalizationService.GetString("InfoAboutEformIsNull"))); } var template = await sdkCore.TemplateItemRead(updateModel.BoundEform.RelatedEFormId, language); if (template == null) { return(new OperationResult( false, _itemsPlanningLocalizationService.GetString("EformNotFound"))); } if (updateModel.Folder == null) { return(new OperationResult( false, _itemsPlanningLocalizationService.GetString("InfoAboutFolderIsNull"))); } var sdkFolder = await sdkDbContext.Folders .Include(x => x.Parent) .FirstOrDefaultAsync(x => x.Id == updateModel.Folder.EFormSdkFolderId); if (sdkFolder == null) { return(new OperationResult( false, _itemsPlanningLocalizationService.GetString("FolderNotFound"))); } var planning = await _dbContext.Plannings .Include(x => x.PlanningsTags) .FirstOrDefaultAsync(x => x.Id == updateModel.Id); if (planning == null) { return(new OperationResult( false, _itemsPlanningLocalizationService.GetString("PlanningNotFound"))); } var translationsPlanning = _dbContext.PlanningNameTranslation .Where(x => x.Planning.Id == planning.Id) .ToList(); foreach (var translation in updateModel.TranslationsName) { var updateTranslation = translationsPlanning .FirstOrDefault(x => x.Id == translation.Id); if (updateTranslation != null) { updateTranslation.Name = translation.Name; await updateTranslation.Update(_dbContext); } } planning.DaysBeforeRedeploymentPushMessage = updateModel.Reiteration.DaysBeforeRedeploymentPushMessage; planning.DoneByUserNameEnabled = updateModel.EnabledFields.DoneByUserNameEnabled; planning.NumberOfImagesEnabled = updateModel.EnabledFields.NumberOfImagesEnabled; planning.PlanningNumberEnabled = updateModel.EnabledFields.PlanningNumberEnabled; planning.UploadedDataEnabled = updateModel.EnabledFields.UploadedDataEnabled; planning.LocationCodeEnabled = updateModel.EnabledFields.LocationCodeEnabled; planning.DescriptionEnabled = updateModel.EnabledFields.DescriptionEnabled; planning.StartDate = updateModel.Reiteration.StartDate ?? DateTime.UtcNow; planning.DeployedAtEnabled = updateModel.EnabledFields.DeployedAtEnabled; planning.BuildYearEnabled = updateModel.EnabledFields.BuildYearEnabled; planning.DaysBeforeRedeploymentPushMessageRepeat = updateModel.Reiteration.PushMessageEnabled; planning.DoneAtEnabled = updateModel.EnabledFields.DoneAtEnabled; planning.RelatedEFormId = updateModel.BoundEform.RelatedEFormId; planning.LabelEnabled = updateModel.EnabledFields.LabelEnabled; planning.TypeEnabled = updateModel.EnabledFields.TypeEnabled; planning.RepeatUntil = updateModel.Reiteration.RepeatUntil; planning.RepeatEvery = updateModel.Reiteration.RepeatEvery; planning.SdkFolderId = updateModel.Folder.EFormSdkFolderId; planning.RepeatType = updateModel.Reiteration.RepeatType; planning.DayOfMonth = updateModel.Reiteration.DayOfMonth; planning.DayOfWeek = updateModel.Reiteration.DayOfWeek; planning.LocationCode = updateModel.LocationCode; planning.Description = updateModel.Description; planning.UpdatedByUserId = _userService.UserId; planning.BuildYear = updateModel.BuildYear; planning.RelatedEFormName = template.Label; planning.SdkFolderName = sdkFolder.Name; planning.UpdatedAt = DateTime.UtcNow; planning.Type = updateModel.Type; planning.PushMessageOnDeployment = updateModel.Reiteration.PushMessageOnDeployment; var tagIds = planning.PlanningsTags .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed) .Select(x => x.PlanningTagId) .ToList(); var tagsForDelete = planning.PlanningsTags .Where(x => !updateModel.TagsIds.Contains(x.PlanningTagId)) .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed) .ToList(); var tagsForCreate = updateModel.TagsIds .Where(x => !tagIds.Contains(x)) .ToList(); foreach (var tag in tagsForDelete) { _dbContext.PlanningsTags.Remove(tag); } foreach (var tagId in tagsForCreate) { var planningsTags = new PlanningsTags { CreatedByUserId = _userService.UserId, UpdatedByUserId = _userService.UserId, PlanningId = planning.Id, PlanningTagId = tagId, }; await _dbContext.PlanningsTags.AddAsync(planningsTags); } await planning.Update(_dbContext); // transaction.Commit(); return(new OperationResult( true, _itemsPlanningLocalizationService.GetString("ListUpdatedSuccessfully"))); } catch (Exception e) { Trace.TraceError(e.Message); // transaction.Rollback(); return(new OperationResult( false, _itemsPlanningLocalizationService.GetString("ErrorWhileUpdatingList"))); } }