Beispiel #1
0
        ///
        ///
        ///     Will add a column with the user's provided values
        ///
        ///
        public void AddDeck(string _nameColumn, string _description)
        {
            allSupportedCategories.Add(_nameColumn);

            var newColumn = new KanbanColumn()
            {
                Title        = _nameColumn,
                MinimumLimit = 0,
                MaximumLimit = 10,
                // Categories is a list of all the "categories" this deck supports
                Categories = new List <object>()
                {
                    _nameColumn
                }
            };

            // Decorating the new KanbanColumn
            // newColumn.Description = _descriptionColumn;
            newColumn.ErrorBarSettings.Color  = UIColor.Green;
            newColumn.ErrorBarSettings.Height = 4;

            // We need to add this kanbanWorkflow because it will be used when moving and deciding where cards shall be placed
            thisKanban.Workflows.Add(new KanbanWorkflow()
            {
                Category           = _nameColumn,
                AllowedTransitions = allSupportedCategories
            });

            // Assigning in the new column
            thisKanban.Columns.Add(newColumn);
        }
Beispiel #2
0
        private void TapGestureRecognizer_Tapped(object sender, EventArgs e)
        {
            Label        label         = sender as Label;
            KanbanColumn kanbanColumn  = label.BindingContext as KanbanColumn;
            KanbanColumn currentColumn = null;

            foreach (var column in kanban.ActualColumns)
            {
                if (kanbanColumn.Title.Equals(column.Title))
                {
                    currentColumn = column;
                }
            }
            if (kanbanColumn != null)
            {
                if (kanbanColumn.IsExpanded)
                {
                    kanbanColumn.IsExpanded  = false;
                    currentColumn.IsExpanded = false;
                }
                else
                {
                    kanbanColumn.IsExpanded  = true;
                    currentColumn.IsExpanded = true;
                }
            }
        }
        protected override void BindItemView(KanbanColumn column, KanbanItemViewHolder viewHolder, object data, int position)
        {
            TextView description = viewHolder.ItemDescription;

            description.SetMaxLines(4);

            base.BindItemView(column, viewHolder, data, position);
        }
Beispiel #4
0
            ///
            ///
            ///     Loads data from board ref into our Sfkanban (optional method), look GetRefToBoard()
            ///
            ///     Steps:
            ///         1. Init KanbanColumn
            ///             A. Add this KanbanColumn instance's Category property to the allSupportedCategories list
            ///             B. Add new workflow using this KanbanColumn instance's Category and the allSupportedCategories list
            ///             C. Add this KanbanColumn instance to the SfKanban.Columns list
            ///
            ///         2. Init KanbanModel
            ///             A. Determine whether the card is finished or unfinished when creating the kanbanModel
            ///             B. Add this kanbanModel to the main KanbanModel list
            ///
            ///         3. Assign the fully setup list of KanbanModels to the SfKanban.ItemsSource
            ///
            private void LoadDataFromBoardIntoSfKanban()
            {
                // Initializing KanbanColumns
                foreach (Deck KanbanColumn in useBoardViewController.thisBoard.Decks)
                {
                    var newColumn = new KanbanColumn()
                    {
                        Title = KanbanColumn.Name,
                        // Description = KanbanColumn.Description,
                        MinimumLimit = 0,
                        MaximumLimit = 5,
                        Categories   = new List <object>()
                        {
                            KanbanColumn.Name
                        }
                    };
                    newColumn.ErrorBarSettings.Color = UIColor.Green;
                    newColumn.ErrorBarSettings.MinValidationColor = UIColor.Orange;
                    newColumn.ErrorBarSettings.MaxValidationColor = UIColor.Red;
                    newColumn.ErrorBarSettings.Height             = 4;

                    UseBoardViewController.thisKanban.Columns.Add(newColumn);
                    useBoardViewController.allSupportedCategories.Add(newColumn.Title);

                    // Initializing the workflows
                    UseBoardViewController.thisKanban.Workflows.Add(new KanbanWorkflow()
                    {
                        Category           = KanbanColumn.Name,
                        AllowedTransitions = useBoardViewController.allSupportedCategories
                    });
                }

                // Creating KanbanModels from Card data and assigning all new KanbanModel instance into kanbans list
                UseBoardViewController.kanbanModels = useBoardViewController.thisBoard.Cards.Select(card =>
                                                                                                    new KanbanModel()
                {
                    ID          = card.Id,
                    Title       = card.Name,
                    Category    = card.ParentDeck,
                    Description = card.Description,
                    ColorKey    = card.IsFinished ? FINISHED_CARD_COLOR : UNFINISHED_CARD_COLOR
                }).ToList();

                // Assigning the kanbans into the ItemsSource so they can be displayed
                // IMPORTANT: Finished cards are hidden by default
                UseBoardViewController.thisKanban.ItemsSource = UseBoardViewController.kanbanModels
                                                                .Where(kanbanModel => (string)kanbanModel.ColorKey == UNFINISHED_CARD_COLOR);
            }
Beispiel #5
0
        ///
        ///
        ///     Hides card from the kanbanWorkflow because the card is "finished"
        ///
        ///
        private void MarkCardAsFinished(KanbanColumn _kanbanColumn, long _id)
        {
            // ItemSource will not automatically remove finished card from Column
            // therefore we do it manually:
            _kanbanColumn.RemoveItem(clickedKanbanModel);

            // Assigning the tapped card in the list to be mark as finished
            kanbanModels = kanbanModels.Select(kanbanModel =>
            {
                if ((long)kanbanModel.ID == _id)
                {
                    kanbanModel.ColorKey = FINISHED_CARD_COLOR;
                }
                return(kanbanModel);
            }).ToList();

            // Resetting the ItemSource to display only the UNFINISHED cards
            thisKanban.ItemsSource = kanbanModels.Where(kanbanModel => (string)kanbanModel.ColorKey == UNFINISHED_CARD_COLOR).ToList();
        }
Beispiel #6
0
        public async Task AddColumnAsync(int boardId, string name)
        {
            var existingDuplicate = _dbContext.KanbanColumns
                                    .Where(x => x.KanbanBoardID == boardId)
                                    .Any(x => x.Name == name);

            if (existingDuplicate)
            {
                throw new ArgumentException("Column name duplicate");
            }

            var newColumn = new KanbanColumn
            {
                Name          = name,
                Index         = GetNextColumnIndex(boardId),
                KanbanBoardID = boardId,
            };

            _dbContext.KanbanColumns.Add(newColumn);
            await _dbContext.SaveChangesAsync();
        }
        public override View GetSampleContent(Context context)
        {
            var kanban = new SfKanban(context);

            kanban.SetBackgroundColor(Color.ParseColor("#F2F2F2"));
            kanban.PlaceholderStyle.SelectedBackgroundColor = Color.ParseColor("#FBC7AB");

            menu = new KanbanColumn(context)
            {
                Categories = new List <object>()
                {
                    "Menu"
                }
            };
            menu.Title     = "Menu";
            menu.AllowDrop = false;
            menu.ErrorBarSettings.Color = Color.ParseColor("#D53130");
            kanban.Columns.Add(menu);

            order = new KanbanColumn(context)
            {
                Categories = new List <object>()
                {
                    "Dining", "Delivery"
                }
            };
            order.Title = "Order";
            order.ErrorBarSettings.Color = Color.ParseColor("#D53130");
            kanban.Columns.Add(order);

            ready = new KanbanColumn(context)
            {
                Categories = new List <object>()
                {
                    "Ready"
                }
            };
            ready.Title     = "Ready to Serve";
            ready.AllowDrag = false;
            ready.ErrorBarSettings.Color = Color.ParseColor("#D53130");
            kanban.Columns.Add(ready);

            delivery = new KanbanColumn(context)
            {
                Categories = new List <object>()
                {
                    "Door Delivery"
                }
            };
            delivery.Title     = "Delivery";
            delivery.AllowDrag = false;
            delivery.ErrorBarSettings.Color = Color.ParseColor("#D53130");
            kanban.Columns.Add(delivery);

            kanban.ItemsSource = new KanbanData().Data;

            kanban.Workflows.Add(new KanbanWorkflow("Menu", new List <object> {
                "Dining", "Delivery"
            }));

            kanban.Workflows.Add(new KanbanWorkflow("Dining", new List <object> {
                "Ready"
            }));

            kanban.Workflows.Add(new KanbanWorkflow("Delivery", new List <object> {
                "Door Delivery"
            }));

            kanban.DragStart += Kanban_DragStart;

            kanban.DragEnd += Kanban_DragEnd;

            kanban.DragOver += Kanban_DragOver;

            kanban.Adapter = new CustomizationAdapter(kanban);

            return(kanban);
        }
        public GettingStartedKanban()
        {
            KanbanColumn column1;
            KanbanColumn column2;
            KanbanColumn column3;
            KanbanColumn column4;

            kanban = new SfKanban();

            column1 = new KanbanColumn()
            {
                Categories = new List <object>()
                {
                    "Open", "Postponed", "Validated"
                }
            };
            column1.Title        = "To Do";
            column1.MinimumLimit = 5;
            column1.MaximumLimit = 15;
            kanban.Columns.Add(column1);

            column2 = new KanbanColumn()
            {
                Categories = new List <object>()
                {
                    "In Progress"
                }
            };
            column2.Title        = "In Progress";
            column2.MinimumLimit = 3;
            column2.MaximumLimit = 8;
            kanban.Columns.Add(column2);

            column3 = new KanbanColumn()
            {
                Categories = new List <object>()
                {
                    "Code Review"
                }
            };
            column3.Title        = "Code Review";
            column3.MinimumLimit = 5;
            column3.MaximumLimit = 10;
            kanban.Columns.Add(column3);

            column4 = new KanbanColumn()
            {
                Categories = new List <object>()
                {
                    "Closed", "Closed-No Code Changes", "Resolved"
                }
            };
            column4.Title        = "Done";
            column4.MinimumLimit = 8;
            column4.MaximumLimit = 12;
            kanban.Columns.Add(column4);

            kanban.ItemsSource = new KanbanDataSource().Data;

            List <KanbanColorMapping> colormodels = new List <KanbanColorMapping>();

            colormodels.Add(new KanbanColorMapping("Purple", UIColor.Purple));
            colormodels.Add(new KanbanColorMapping("Red", UIColor.Red));
            colormodels.Add(new KanbanColorMapping("Orange", UIColor.Orange));
            colormodels.Add(new KanbanColorMapping("Brown", UIColor.Brown));
            kanban.IndicatorColorPalette = colormodels;

            List <KanbanWorkflow> keyfield = new List <KanbanWorkflow>();

            keyfield.Add(new KanbanWorkflow("Open", new List <object> {
                "In Progress"
            }));
            keyfield.Add(new KanbanWorkflow("In Progress", new List <object> {
                "Postponed", "Validated", "Code Review", "Closed-No Code Changes"
            }));
            keyfield.Add(new KanbanWorkflow("Code Review", new List <object> {
                "Closed", "Resolved"
            }));
            keyfield.Add(new KanbanWorkflow("Closed", new List <object> {
                "Open"
            }));
            keyfield.Add(new KanbanWorkflow("Postponed", new List <object> {
                "In Progress"
            }));
            keyfield.Add(new KanbanWorkflow("Validated", new List <object> {
                "In Progress"
            }));
            keyfield.Add(new KanbanWorkflow("Closed-No Code Changes", new List <object> {
            }));
            keyfield.Add(new KanbanWorkflow("Resolved", new List <object> {
            }));
            kanban.Workflows = keyfield;

            this.AddSubview(kanban);
        }
Beispiel #9
0
        public override View GetSampleContent(Context context)
        {
            var kanban = new SfKanban(context);

            column1 = new KanbanColumn(context)
            {
                Categories = new List <object>()
                {
                    "Open", "Postponed", "Validated"
                }
            };
            column1.Title        = "To Do";
            column1.MinimumLimit = 5;
            column1.MaximumLimit = 20;
            kanban.Columns.Add(column1);

            column2 = new KanbanColumn(context)
            {
                Categories = new List <object>()
                {
                    "In Progress"
                }
            };
            column2.Title        = "In Progress";
            column2.MinimumLimit = 5;
            column2.MaximumLimit = 10;
            kanban.Columns.Add(column2);

            column3 = new KanbanColumn(context)
            {
                Categories = new List <object>()
                {
                    "Code Review"
                }
            };
            column3.Title        = "Code Review";
            column3.MinimumLimit = 10;
            column3.MaximumLimit = 15;
            kanban.Columns.Add(column3);

            column4 = new KanbanColumn(context)
            {
                Categories = new List <object>()
                {
                    "Closed", "Closed-No Code Changes", "Resolved"
                }
            };
            column4.Title        = "Done";
            column4.MinimumLimit = 10;
            column4.MaximumLimit = 15;
            kanban.Columns.Add(column4);

            kanban.ItemsSource = new KanbanData().Data;

            List <KanbanColorMapping> colormodels = new List <KanbanColorMapping>();

            colormodels.Add(new KanbanColorMapping("Green", Color.Green));
            colormodels.Add(new KanbanColorMapping("Red", Color.Red));
            colormodels.Add(new KanbanColorMapping("Orange", Color.Orange));
            colormodels.Add(new KanbanColorMapping("Brown", Color.Brown));

            kanban.IndicatorColorPalette = colormodels;

            List <KanbanWorkflow> keyfield = new List <KanbanWorkflow>();

            keyfield.Add(new KanbanWorkflow("Open", new List <object> {
                "In Progress"
            }));
            keyfield.Add(new KanbanWorkflow("In Progress", new List <object> {
                "Postponed", "Validated", "Code Review", "Closed-No Code Changes"
            }));
            keyfield.Add(new KanbanWorkflow("Code Review", new List <object> {
                "Closed", "Resolved"
            }));
            keyfield.Add(new KanbanWorkflow("Closed", new List <object> {
                "Open"
            }));
            keyfield.Add(new KanbanWorkflow("Postponed", new List <object> {
                "In Progress"
            }));
            keyfield.Add(new KanbanWorkflow("Validated", new List <object> {
                "In Progress"
            }));
            keyfield.Add(new KanbanWorkflow("Closed-No Code Changes", new List <object> {
            }));
            keyfield.Add(new KanbanWorkflow("Resolved", new List <object> {
            }));
            kanban.Workflows = keyfield;

            return(kanban);
        }
Beispiel #10
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            kanban             = new SfKanban();
            kanban.ItemsSource = model.Cards;

            KanbanColumn column1 = new KanbanColumn();

            column1.Title        = "To Do";
            column1.MinimumLimit = 5;
            column1.MaximumLimit = 15;
            column1.Categories   = new List <object> {
                "Open", "Postponed", "Validated"
            };
            kanban.Columns.Add(column1);

            KanbanColumn column2 = new KanbanColumn();

            column2.Title        = "In Progress";
            column2.MinimumLimit = 3;
            column2.MaximumLimit = 8;
            column2.Categories   = new List <object> {
                "In Progress"
            };
            kanban.Columns.Add(column2);

            KanbanColumn column3 = new KanbanColumn();

            column3.Title        = "Code Review";
            column3.MinimumLimit = 5;
            column3.MaximumLimit = 10;
            column3.Categories   = new List <object> {
                "Code Review"
            };
            kanban.Columns.Add(column3);

            KanbanColumn column4 = new KanbanColumn();

            column4.Title        = "Done";
            column4.MinimumLimit = 8;
            column4.MaximumLimit = 12;
            column4.Categories   = new List <object> {
                "Closed", "Closed-No Code Changes", "Resolved"
            };
            kanban.Columns.Add(column4);

            List <KanbanColorMapping> colormodels = new List <KanbanColorMapping>();

            colormodels.Add(new KanbanColorMapping("Purple", UIColor.Purple));
            colormodels.Add(new KanbanColorMapping("Red", UIColor.Red));
            colormodels.Add(new KanbanColorMapping("Orange", UIColor.Brown));
            colormodels.Add(new KanbanColorMapping("Brown", UIColor.Green));
            kanban.IndicatorColorPalette = colormodels;

            List <KanbanWorkflow> keyfield = new List <KanbanWorkflow>();

            keyfield.Add(new KanbanWorkflow("Open", new List <object> {
                "In Progress"
            }));
            keyfield.Add(new KanbanWorkflow("In Progress", new List <object> {
                "Postponed", "Validated", "Code Review", "Closed-No Code Changes"
            }));
            keyfield.Add(new KanbanWorkflow("Code Review", new List <object> {
                "Closed", "Resolved"
            }));
            keyfield.Add(new KanbanWorkflow("Closed", new List <object> {
                "Open"
            }));
            keyfield.Add(new KanbanWorkflow("Postponed", new List <object> {
                "In Progress"
            }));
            keyfield.Add(new KanbanWorkflow("Validated", new List <object> {
                "In Progress"
            }));
            keyfield.Add(new KanbanWorkflow("Closed-No Code Changes", new List <object> {
            }));
            keyfield.Add(new KanbanWorkflow("Resolved", new List <object> {
            }));

            kanban.Workflows = keyfield;
            kanban.Frame     = View.Frame;

            this.View.AddSubviews(kanban);
        }
Beispiel #11
0
        public CustomizationKanban()
        {
            kanban = new SfKanban();

            KanbanErrorBarSettings errorBar = new KanbanErrorBarSettings();

            errorBar.Height             = 2;
            errorBar.Color              = UIColor.FromRGB(179.0f / 255.0f, 71.0f / 255.0f, 36.0f / 255.0f);
            errorBar.MaxValidationColor = UIColor.FromRGB(211.0f / 255.0f, 51.0f / 255.0f, 54.0f / 255.0f);
            errorBar.MinValidationColor = UIColor.FromRGB(67.0f / 255.0f, 188.0f / 255.0f, 131.0f / 255.0f);

            KanbanPlaceholderStyle style = new KanbanPlaceholderStyle();

            style.SelectedBackgroundColor = UIColor.FromRGB(250.0f / 255.0f, 199.0f / 255.0f, 173.0f / 255.0f);
            kanban.PlaceholderStyle       = style;

            KanbanColumn column1 = new KanbanColumn()
            {
                Categories = new List <object>()
                {
                    "Menu"
                }
            };

            column1.Title            = "Menu";
            column1.ErrorBarSettings = errorBar;
            kanban.Columns.Add(column1);

            KanbanColumn column2 = new KanbanColumn()
            {
                Categories = new List <object>()
                {
                    "Dining", "Delivery"
                }
            };

            column2.Title            = "Order";
            column2.ErrorBarSettings = errorBar;
            kanban.Columns.Add(column2);

            KanbanColumn column3 = new KanbanColumn()
            {
                Categories = new List <object>()
                {
                    "Ready to Serve"
                }
            };

            column3.Title            = "Ready to Serve";
            column3.AllowDrag        = false;
            column3.ErrorBarSettings = errorBar;
            kanban.Columns.Add(column3);

            KanbanColumn column4 = new KanbanColumn()
            {
                Categories = new List <object>()
                {
                    "Door Delivery"
                }
            };

            column4.Title            = "Delivery";
            column4.AllowDrag        = false;
            column4.ErrorBarSettings = errorBar;
            kanban.Columns.Add(column4);

            kanban.ItemsSource = this.ItemsSourceCards();

            List <KanbanWorkflow> flows = new List <KanbanWorkflow>();

            flows.Add(new KanbanWorkflow("Menu", new List <object>()
            {
                "Dining", "Delivery"
            }));
            flows.Add(new KanbanWorkflow("Dining", new List <object>()
            {
                "Ready to Serve"
            }));
            flows.Add(new KanbanWorkflow("Delivery", new List <object>()
            {
                "Door Delivery"
            }));
            flows.Add(new KanbanWorkflow("Ready to Serve", new List <object>()
            {
            }));
            flows.Add(new KanbanWorkflow("Door Delivery", new List <object>()
            {
            }));

            kanban.Workflows = flows;

            kanban.DragStart += (object sender, KanbanDragStartEventArgs e) =>
            {
                if ((e.Data as KanbanModel).Category.ToString() == "Menu")
                {
                    e.KeepItem = true;
                }
            };

            kanban.DragEnd += (object sender, KanbanDragEndEventArgs e) =>
            {
                if (e.TargetColumn != null && e.SourceColumn.Categories.Contains("Menu"))
                {
                    e.Cancel = true;
                    e.TargetColumn.InsertItem(CloneModel((e.Data as KanbanModel), e.TargetCategory), e.TargetIndex);
                }

                else if (e.TargetColumn != null && e.TargetCategory != null)
                {
                    (e.Data as KanbanModel).Category = e.TargetCategory;
                }
            };

            this.AddSubview(kanban);
        }
        /// <summary>
        /// Fills the database with the default roles and an admin user (if no roles and if no admin exists), in addition to THE kanban board.
        /// </summary>
        public static void Initialise(RoleManager <IdentityRole> roleManager, UserManager <IdentityUser> userManager, ApplicationDbContext context)
        {
            if (!roleManager.Roles.Any())
            {
                roleManager.CreateAsync(new IdentityRole("Admin")).Wait(TimeSpan.FromSeconds(10));
                roleManager.CreateAsync(new IdentityRole("Team")).Wait(TimeSpan.FromSeconds(5));
                roleManager.CreateAsync(new IdentityRole("Contributor")).Wait(TimeSpan.FromSeconds(5));
                roleManager.CreateAsync(new IdentityRole("Observer")).Wait(TimeSpan.FromSeconds(5));
            }

            if (!context.KanbanBoards.Any())
            {
                try
                {
                    var kanbanBoard = new KanbanBoard();
                    kanbanBoard.Id          = 1;
                    kanbanBoard.ProjectName = "Kanban Board";
                    context.KanbanBoards.Add(kanbanBoard);

                    var kanbanColumn  = new KanbanColumn(1, "To Do", kanbanBoard.Id);
                    var kanbanColumn2 = new KanbanColumn(2, "Doing", kanbanBoard.Id);
                    var kanbanColumn3 = new KanbanColumn(3, "Testing", kanbanBoard.Id);
                    var kanbanColumn4 = new KanbanColumn(4, "Done", kanbanBoard.Id);

                    List <KanbanColumn> columns = new List <KanbanColumn>
                    {
                        kanbanColumn, kanbanColumn2, kanbanColumn3, kanbanColumn4
                    };
                    foreach (var column in columns)
                    {
                        context.KanbanColumns.Add(column);
                    }

                    context.SaveChanges();
                }
                catch
                {
                    Console.WriteLine("Kanban board seeding failed.");
                }
            }

            if (userManager.GetUsersInRoleAsync("Admin").Result.Count <= 0)
            {
                string adminUsername = "******";
                var    admin         = userManager.Users.FirstOrDefault(x => x.UserName == adminUsername);
                if (admin == default)
                {
                    IdentityUser newAdmin = new IdentityUser(adminUsername);
                    newAdmin.Email = adminUsername;
                    IdentityResult result = userManager.CreateAsync(newAdmin, "GU9O`cVista=0E$e").Result;
                    if (result.Succeeded)
                    {
                        userManager.AddToRoleAsync(userManager.Users.FirstOrDefault(x => x.UserName == adminUsername), "Admin");
                    }
                }
                else
                {
                    userManager.AddToRoleAsync(userManager.Users.FirstOrDefault(x => x.UserName == adminUsername), "Admin");
                }
            }
        }