private static async Task AssignTag(WorkspaceModel workspace, string tagName, TimeEntryModel timeEntry)
        {
            var store    = ServiceContainer.Resolve <IDataStore>();
            var existing = await store.Table <TagData>()
                           .QueryAsync(r => r.WorkspaceId == workspace.Id && r.Name == tagName)
                           .ConfigureAwait(false);

            var      checkRelation = true;
            TagModel tag;

            if (existing.Count > 0)
            {
                tag = new TagModel(existing [0]);
            }
            else
            {
                tag = new TagModel()
                {
                    Name      = tagName,
                    Workspace = workspace,
                };
                await tag.SaveAsync().ConfigureAwait(false);

                checkRelation = false;
            }

            if (timeEntry != null)
            {
                var assignTag = true;

                if (checkRelation)
                {
                    // Check if the relation already exists before adding it
                    var relations = await store.Table <TimeEntryTagData> ()
                                    .CountAsync(r => r.TimeEntryId == timeEntry.Id && r.TagId == tag.Id && r.DeletedAt == null)
                                    .ConfigureAwait(false);

                    if (relations < 1)
                    {
                        assignTag = false;
                    }
                }

                if (assignTag)
                {
                    var relationModel = new TimeEntryTagModel()
                    {
                        TimeEntry = timeEntry,
                        Tag       = tag,
                    };
                    await relationModel.SaveAsync().ConfigureAwait(false);

                    timeEntry.Touch();
                    await timeEntry.SaveAsync().ConfigureAwait(false);
                }
            }
        }
Example #2
0
        public async Task AssignTag(string tagName)
        {
            if (model.Workspace == null)
            {
                return;
            }

            var store    = ServiceContainer.Resolve <IDataStore>();
            var existing = await store.Table <TagData>()
                           .QueryAsync(r => r.WorkspaceId == workspace.Id && r.Name == tagName)
                           .ConfigureAwait(false);

            var      checkRelation = true;
            TagModel tag;

            if (existing.Count > 0)
            {
                tag = new TagModel(existing [0]);
            }
            else
            {
                tag = new TagModel {
                    Name      = tagName,
                    Workspace = workspace,
                };
                await tag.SaveAsync().ConfigureAwait(false);

                checkRelation = false;
            }

            if (model != null)
            {
                var assignTag = true;

                if (checkRelation)
                {
                    // Check if the relation already exists before adding it
                    var relations = await store.Table <TimeEntryTagData> ()
                                    .CountAsync(r => r.TimeEntryId == model.Id && r.TagId == tag.Id && r.DeletedAt == null)
                                    .ConfigureAwait(false);

                    if (relations < 1)
                    {
                        assignTag = false;
                    }
                }

                if (assignTag)
                {
                    foreach (var timeEntryData in timeEntryList)
                    {
                        var relationModel = new TimeEntryTagModel {
                            TimeEntry = new TimeEntryModel(timeEntryData),
                            Tag       = tag,
                        };
                        await relationModel.SaveAsync().ConfigureAwait(false);
                    }

                    model.Touch();
                    await model.SaveAsync().ConfigureAwait(false);
                }
            }
        }