示例#1
0
 public async Task <OperationResult> Create([FromBody] PlanningCreateModel createModel)
 {
     return(await _planningService.Create(createModel));
 }
        public async Task <OperationResult> Create(PlanningCreateModel model)
        {
            //await using var transaction = await _dbContext.Database.BeginTransactionAsync();
            var sdkCore =
                await _coreService.GetCore();

            await using var sdkDbContext = sdkCore.DbContextHelper.GetDbContext();
            try
            {
                var tagIds = new List <int>();

                tagIds.AddRange(model.TagsIds);

                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 (model.BoundEform == null)
                {
                    return(new OperationResult(
                               false,
                               _itemsPlanningLocalizationService.GetString("InfoAboutEformIsNull")));
                }
                var template = await _coreService.GetCore().Result.TemplateItemRead(model.BoundEform.RelatedEFormId, language);

                if (template == null)
                {
                    return(new OperationResult(
                               false,
                               _itemsPlanningLocalizationService.GetString("EformNotFound")));
                }
                if (model.Folder == null)
                {
                    return(new OperationResult(
                               false,
                               _itemsPlanningLocalizationService.GetString("InfoAboutFolderIsNull")));
                }
                var sdkFolder = await sdkDbContext.Folders
                                .Include(x => x.Parent)
                                .FirstOrDefaultAsync(x => x.Id == model.Folder.EFormSdkFolderId);

                if (sdkFolder == null)
                {
                    return(new OperationResult(
                               false,
                               _itemsPlanningLocalizationService.GetString("FolderNotFound")));
                }

                var planning = new Planning
                {
                    Description      = model.Description,
                    BuildYear        = model.BuildYear,
                    Type             = model.Type,
                    LocationCode     = model.LocationCode,
                    CreatedByUserId  = _userService.UserId,
                    CreatedAt        = DateTime.UtcNow,
                    IsLocked         = false,
                    IsEditable       = true,
                    IsHidden         = false,
                    RepeatEvery      = model.Reiteration.RepeatEvery,
                    RepeatUntil      = model.Reiteration.RepeatUntil,
                    RepeatType       = model.Reiteration.RepeatType,
                    DayOfWeek        = model.Reiteration.DayOfWeek,
                    DayOfMonth       = model.Reiteration.DayOfMonth,
                    Enabled          = true,
                    RelatedEFormId   = model.BoundEform.RelatedEFormId,
                    RelatedEFormName = template.Label,
                    SdkFolderName    = sdkFolder.Name,
                    SdkFolderId      = model.Folder.EFormSdkFolderId,
                    PlanningsTags    = new List <PlanningsTags>(),
                    DaysBeforeRedeploymentPushMessageRepeat = model.Reiteration.PushMessageEnabled,
                    DaysBeforeRedeploymentPushMessage       = model.Reiteration.DaysBeforeRedeploymentPushMessage,
                    PushMessageOnDeployment = model.Reiteration.PushMessageOnDeployment,
                    StartDate = model.Reiteration.StartDate ?? DateTime.UtcNow
                };


                foreach (var tagId in tagIds)
                {
                    planning.PlanningsTags.Add(
                        new PlanningsTags
                    {
                        CreatedByUserId = _userService.UserId,
                        UpdatedByUserId = _userService.UserId,
                        PlanningTagId   = tagId
                    });
                }

                await planning.Create(_dbContext);

                var languages = await _dbContext.Languages.ToListAsync();

                foreach (var translation in model.TranslationsName)
                {
                    var languageId = languages.Where(x => x.Name == translation.Language || x.LanguageCode == translation.LocaleName)
                                     .Select(x => x.Id)
                                     .FirstOrDefault();
                    if (languageId == default)
                    {
                        return(new OperationResult(
                                   true,
                                   _itemsPlanningLocalizationService.GetString("LocaleDoesNotExist")));
                    }

                    var planningNameTranslations = new PlanningNameTranslation()
                    {
                        LanguageId      = languageId,
                        PlanningId      = planning.Id,
                        Name            = translation.Name,
                        CreatedByUserId = _userService.UserId,
                        UpdatedByUserId = _userService.UserId
                    };
                    await planningNameTranslations.Create(_dbContext);
                }

                //await transaction.CommitAsync();
                return(new OperationResult(
                           true,
                           _itemsPlanningLocalizationService.GetString("ListCreatedSuccessfully")));
            }
            catch (Exception e)
            {
                //await transaction.RollbackAsync();
                Trace.TraceError(e.Message);
                return(new OperationResult(false,
                                           _itemsPlanningLocalizationService.GetString("ErrorWhileCreatingList")));
            }
        }