예제 #1
0
 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")));
            }
        }