Esempio n. 1
0
        public void GetWorkItem_OnValidRequest_ReturnsWorkItem()
        {
            // ARRANGE
            DbContextOptions <TestDatabaseContext> options = new DbContextOptionsBuilder <TestDatabaseContext>()
                                                             .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString())
                                                             .Options;
            IDatabaseContext   dbContext  = new TestDatabaseContext(options);
            WorkItemRepository repository = new WorkItemRepository(dbContext);
            WorkItemConverter  converter  = new WorkItemConverter(dbContext);

            WorkItem workItem = new WorkItem()
            {
                Description          = Guid.NewGuid().ToString(),
                Name                 = Guid.NewGuid().ToString(),
                WorkItemEnd          = DateTime.Now,
                WorkItemStart        = DateTime.Now,
                WorkItemCollectionId = 1
            };

            dbContext.WorkItems.Add(workItem);

            dbContext.SaveChanges();

            // ACT
            WorkItemPublic result = repository.GetWorkItem(1);

            // ASSERT
            result.Should().BeEquivalentTo <WorkItemPublic>(converter.Convert(workItem));
        }
Esempio n. 2
0
 /// <summary>
 /// Konstruktor przyjmujący WorkItemDisplayViewModel
 /// </summary>
 public WorkItemDetailsViewModel(WorkItemPublic workItem, ITerminalContext context)
 {
     WorkItem      = workItem;
     mContext      = context;
     mIdentity     = nameof(WorkItemDetailsViewModel) + WorkItem.ID;
     UpdateCommand = new AsyncCommand(SaveChanges);
 }
Esempio n. 3
0
 public WorkItemDisplayViewModel(WorkItemPublic workItem, int dayOffset, ITerminalContext context)
 {
     WorkItem              = workItem;
     mDayOffset            = dayOffset;
     mContext              = context;
     ShowEditDialogCommand = new BasicCommand(this.ShowEditDialog);
     UpdateDisplayProperties();
 }
Esempio n. 4
0
 /// <summary>
 /// sprawdza czy 2 workItemy przechowują te same dane
 /// </summary>
 private bool AreWorkItemsEqualNoID(WorkItemPublic one, WorkItemPublic two)
 {
     if (one.Name == two.Name && one.Description == two.Description &&
         one.Color == two.Color && one.WorkItemStart == two.WorkItemStart && one.WorkItemEnd == two.WorkItemEnd &&
         one.WorkItemCollectionID == two.WorkItemCollectionID)
     {
         return(true);
     }
     return(false);
 }
Esempio n. 5
0
        /// <summary>
        /// Usuwa pojedynczy WorkItem z Kolekcji, jeżeli istnieje.
        /// </summary>
        /// <param name="workItem"></param>
        public void DeleteWorkItem(WorkItemPublic workItem)
        {
            Ensure.ParamNotNull(workItem, nameof(workItem));

            CtrlWorkItemDisplay toRemove = TaskBoard.FirstOrDefault(tb => ((WorkItemDisplayViewModel)tb.DataContext).WorkItem.ID == workItem.ID);

            if (toRemove != null)
            {
                TaskBoard.Remove(toRemove);
            }
        }
Esempio n. 6
0
        /// <inheritdoc/>
        public WorkItemPublic UpdateWorkItem(WorkItemPublic workItem)
        {
            Ensure.ParamNotNull(workItem, nameof(workItem));

            WorkItemLogic     workItemLogic = new WorkItemLogic(mDBContext);
            WorkItemConverter converter     = new WorkItemConverter(mDBContext);

            WorkItem result = workItemLogic.UpdateWorkItem(converter.Convert(workItem));

            mDBContext.SaveChanges();

            return(converter.Convert(result));
        }
Esempio n. 7
0
        /// <summary>
        /// Zapisuje zmiany
        /// </summary>
        public async Task SaveChanges()
        {
            if (string.IsNullOrEmpty(WorkItem.Name))
            {
                mContext.DialogBuilder.WarningDialog("Work Item's name is missing or incorrect");
                return;
            }
            if (WorkItem.WorkItemStart >= WorkItem.WorkItemEnd)
            {
                mContext.DialogBuilder.WarningDialog("Selected date and time are incorrect");
                return;
            }
            if (WorkItem.WorkItemEnd.Subtract(WorkItem.WorkItemStart).TotalHours > 24)
            {
                mContext.DialogBuilder.WarningDialog("Work Item cannot be longer than 24 hours");
                return;
            }

            WorkItemPublic updatedWorkItem = null;

            if (WorkItem.ID == 0)
            {
                updatedWorkItem = await CreateWorkItem().ConfigureAwait(false);

                if (updatedWorkItem == null)
                {
                    updatedWorkItem = WorkItem;
                }
            }
            else
            {
                updatedWorkItem = await UpdateWorkItem().ConfigureAwait(false);
            }

            await Application.Current.Dispatcher.BeginInvoke(() =>
            {
                if (!AreWorkItemsEqualNoID(WorkItem, updatedWorkItem) || updatedWorkItem.ID == 0)
                {
                    mContext.DialogBuilder.WarningDialog("Work Item conflicts with an existing Work Item");
                    WorkItem = updatedWorkItem;
                }
                else
                {
                    WorkItem = updatedWorkItem;
                    mContext.WorkItemMediator.UpdateWorkItem(WorkItem);
                    mContext.WorkItemMediator.AddItemToCollection(WorkItem);
                }
            });
        }
Esempio n. 8
0
        public void UpdateWorkItem_OnValidRequest_UpdatesWorkItem()
        {
            // ARRANGE
            DbContextOptions <TestDatabaseContext> options = new DbContextOptionsBuilder <TestDatabaseContext>()
                                                             .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString())
                                                             .Options;
            IDatabaseContext   dbContext  = new TestDatabaseContext(options);
            WorkItemRepository repository = new WorkItemRepository(dbContext);
            WorkItemPublic     workItem   = new WorkItemPublic()
            {
                ID                   = 1,
                Description          = Guid.NewGuid().ToString(),
                Name                 = Guid.NewGuid().ToString(),
                WorkItemEnd          = DateTime.Now,
                WorkItemStart        = DateTime.Now,
                WorkItemCollectionID = 1
            };

            dbContext.WorkItems.Add(new WorkItem()
            {
                ID = 1
            });

            dbContext.WorkItemCollections.Add(new WorkItemCollection()
            {
                ID          = 1,
                TaskBoardId = 1
            });

            dbContext.TaskBoards.Add(new TaskBoard()
            {
                ID     = 1,
                UserID = 1
            });

            dbContext.Users.Add(new User()
            {
                ID = 1
            });

            dbContext.SaveChanges();

            // ACT
            WorkItemPublic result = repository.UpdateWorkItem(workItem);

            // ASSERT
            result.Should().BeEquivalentTo <WorkItemPublic>(workItem);
        }
Esempio n. 9
0
        /// <summary>
        /// Dodaje pojedynczy WorkItem do Kolekcji, lub aktualizuje jego parametry, jeżeli już istnieje.
        /// </summary>
        /// <param name="workItem"></param>
        public void LoadOrUpdateWorkItem(WorkItemPublic workItem)
        {
            Ensure.ParamNotNull(workItem, nameof(workItem));

            CtrlWorkItemDisplay toUpdate = TaskBoard.FirstOrDefault(tb => ((WorkItemDisplayViewModel)tb.DataContext).WorkItem.ID == workItem.ID);

            if (toUpdate != null)
            {
                WorkItemPublic workItemPublic = ((WorkItemDisplayViewModel)toUpdate.DataContext).WorkItem = workItem;
                ((WorkItemDisplayViewModel)toUpdate.DataContext).UpdateDisplayProperties();
            }
            else
            {
                TaskBoard.Add(new CtrlWorkItemDisplay(workItem, DayOffset, mContext));
            }
        }
Esempio n. 10
0
        /// <summary>
        /// Wysyła wiadomość o aktualizacji workitema
        /// </summary>
        public void AddItemToCollection(WorkItemPublic workItem)
        {
            if (CollectionAddItemEvent == null)
            {
                return;
            }

            Ensure.ParamNotNull(workItem, nameof(workItem));

            WorkItemEventArgs wia = new WorkItemEventArgs()
            {
                WorkItem = workItem
            };

            CollectionAddItemEvent(this, wia);
        }
Esempio n. 11
0
        /// <summary>
        /// Wysyła wiadomość o aktualizacji workitema
        /// </summary>
        public void UpdateWorkItem(WorkItemPublic workItem)
        {
            if (WorkItemUpdatedEvent == null)
            {
                return;
            }

            Ensure.ParamNotNull(workItem, nameof(workItem));

            WorkItemEventArgs wia = new WorkItemEventArgs()
            {
                WorkItem = workItem
            };

            WorkItemUpdatedEvent(this, wia);
        }
Esempio n. 12
0
        /// <summary>
        /// Tworzy WorkItem w bazie danych
        /// </summary>
        /// <returns></returns>
        public async Task <WorkItemPublic> CreateWorkItem()
        {
            try
            {
                HttpWorkItemClient client = new HttpWorkItemClient();

                WorkItemPublic updatedWorkItem = await client.CreateWorkItem(WorkItem).ConfigureAwait(false);

                return(updatedWorkItem);
            }
            catch (Exception)
            {
                mContext.DialogBuilder.ErrorDialog("Work Item couldn't be updated, due to server error.");
                return(null);
            }
        }
Esempio n. 13
0
        public IActionResult GetWorkItem(int ID)
        {
            if (ID <= 0)
            {
                return(base.BadRequest("ID have to be grater than 0!"));
            }

            WorkItemPublic workItem = mRepository.GetWorkItem(ID);

            if (workItem == null)
            {
                base.NotFound(workItem);
            }

            return(base.Ok(workItem));
        }
Esempio n. 14
0
        public IActionResult UpdateWorkItem([FromBody] WorkItemPublic workItem)
        {
            Ensure.ParamNotNull(workItem, nameof(workItem));

            if (workItem.ID <= 0)
            {
                return(base.BadRequest(workItem));
            }

            WorkItemPublic updatedWorkItem = mRepository.UpdateWorkItem(workItem);

            if (updatedWorkItem == null)
            {
                return(base.NotFound(workItem));
            }

            return(base.Created($"/workitems/{updatedWorkItem.ID}", updatedWorkItem));
        }
Esempio n. 15
0
        /// <summary>
        /// Metoda odbierająca komunikat o zmianie stanu WorkItema
        /// </summary>
        public void ReloadWorkItem(WorkItemMediator m, WorkItemEventArgs e)
        {
            Ensure.ParamNotNull(e, nameof(e));

            WorkItemPublic workItem = e.WorkItem;
            DateTime       now      = DateTime.Now.Date;

            foreach (CtrlScheduleCanvas canvas in Schedules)
            {
                if (workItem.WorkItemStart.Date <= now.AddDays(((ScheduleCanvasViewModel)canvas.DataContext).DayOffset) && workItem.WorkItemEnd.Date >= now.AddDays(((ScheduleCanvasViewModel)canvas.DataContext).DayOffset))
                {
                    ((ScheduleCanvasViewModel)canvas.DataContext).LoadOrUpdateWorkItem(workItem);
                }
                else
                {
                    ((ScheduleCanvasViewModel)canvas.DataContext).DeleteWorkItem(workItem);
                }
            }
        }
Esempio n. 16
0
        public virtual IActionResult CreateWorkItem([FromBody] WorkItemPublic workItem)
        {
            Ensure.ParamNotNull(workItem, nameof(workItem));

            // workItem musi mieć ustawionego rodzica
            if (workItem.WorkItemCollectionID <= 0)
            {
                return(base.BadRequest(workItem));
            }

            try
            {
                WorkItemPublic workItemPublic = mRepository.CreateWorkItem(workItem);
                return(base.Created($"/workitems/{workItemPublic.ID}", workItemPublic));
            }
            catch
            {
                return(base.BadRequest(workItem));
            }
        }
Esempio n. 17
0
        /// <summary>
        /// Dodaje workItem do kontenera
        /// </summary>
        public void AddWorkItemToContainer(WorkItemMediator m, WorkItemEventArgs e)
        {
            Ensure.ParamNotNull(e, nameof(e));

            WorkItemPublic workItem = e.WorkItem;

            CtrlWorkItemContainer      container = ContainerCollection.FirstOrDefault(cc => ((WorkItemContainerViewModel)cc.DataContext).WorkItemCollection.ID == workItem.WorkItemCollectionID);
            WorkItemContainerViewModel wic       = (WorkItemContainerViewModel)container.DataContext;
            WorkItemPublic             wi        = wic.WorkItems.FirstOrDefault(wi => wi.ID == workItem.ID);

            if (wi == null)
            {
                wic.WorkItems.Add(workItem);
            }
            else
            {
                int index = wic.WorkItems.IndexOf(wi);
                wic.WorkItems.Remove(wi);
                wic.WorkItems.Insert(index, workItem);
            }
        }
Esempio n. 18
0
        /// <inheritdoc/>
        public async Task <WorkItemPublic> UpdateWorkItem(WorkItemPublic workItem)
        {
            Ensure.ParamNotNull(workItem, nameof(workItem));

            WorkItemPublic UserResponse = null;

            using (HttpClient httpClient = base.CreateClient())
            {
                string jsonString = JsonConvert.SerializeObject(workItem);
                Uri    postUri    = new Uri(httpClient.BaseAddress, "/workItems/");

                HttpResponseMessage response = await httpClient.PutAsync(postUri, new StringContent(jsonString, Encoding.UTF8, "application/json"));

                if (response.IsSuccessStatusCode)
                {
                    string json = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    UserResponse = JsonConvert.DeserializeObject <WorkItemPublic>(json);
                }
            }

            return(UserResponse);
        }
Esempio n. 19
0
        /// <summary>
        /// Metoda dodajaca nowe zadanie do obserswowalnej kolekcji zadan
        /// </summary>
        private async Task AddWorkItem()
        {
            try
            {
                HttpWorkItemClient client = new HttpWorkItemClient();

                WorkItemPublic workItem = new WorkItemPublic()
                {
                    Name = "WorkItem",
                    WorkItemCollectionID = WorkItemCollection.ID,
                    WorkItemStart        = DateTime.Now.Date.AddHours(12),
                    WorkItemEnd          = DateTime.Now.Date.AddHours(13)
                };

                await Application.Current.Dispatcher.BeginInvoke(() =>
                {
                    mContext.WindowManager.OpenWindow(new DlgWorkItemDetails(workItem, mContext));
                });
            }
            catch (Exception)
            {
                mContext.DialogBuilder.ErrorDialog("Could not create the Work Item, due to server error.");
            }
        }
Esempio n. 20
0
 public DlgWorkItemDetails(WorkItemPublic workItem, ITerminalContext context)
 {
     InitializeComponent();
     this.DataContext = new WorkItemDetailsViewModel(workItem, context);
 }
Esempio n. 21
0
        public CtrlWorkItemDisplay(WorkItemPublic workItem, int dayOffset, ITerminalContext context)
        {
            InitializeComponent();

            DataContext = new WorkItemDisplayViewModel(workItem, dayOffset, context);
        }
Esempio n. 22
0
 /// <inheritdoc/>
 public WorkItemPublic CreateWorkItem(WorkItemPublic workItem)
 {
     mWorkItems.Add(workItem);
     return(workItem);
 }
Esempio n. 23
0
        /// <inheritdoc/>
        public void DeleteWorkItem(int ID)
        {
            WorkItemPublic workItem = this.GetWorkItem(ID);

            mWorkItems.Remove(workItem);
        }
Esempio n. 24
0
 /// <inheritdoc/>
 public WorkItemPublic UpdateWorkItem(WorkItemPublic workItem)
 {
     return(workItem);
 }
Esempio n. 25
0
 /// <summary>
 /// Pokazuje okno edycji Work Itema z odniesieniem do niego
 /// </summary>
 private void ShowEditDialog(WorkItemPublic workItem)
 {
     mContext.WindowManager.OpenWindow(new DlgWorkItemDetails(workItem, mContext));
 }