public ActionResult CreateCard(CardsModel c, int id)
 {
     c.List = ListDataMapper.GetListDataMapper().GetById(id);
     if (!AccountDataMapper.GetAccountDataMapper().GetById(User.Identity.Name).CanWriteBoard(c.List.Board.Id))
         return RedirectToAction("Index", "Boards");
     CardDataMapper.GetCardDataMapper().Add(c);
     return Redirect(String.Format("~/Lists/GetCards/{0}", id));
 }
 public ActionResult Edit(CardsModel cardsModel)
 {
     var card = CardDataMapper.GetCardDataMapper().GetById(cardsModel.Id);
     if (!AccountDataMapper.GetAccountDataMapper().GetById(User.Identity.Name).CanWriteBoard(card.List.Board.Id))
         return RedirectToAction("Index", "Boards");
     card.Name = cardsModel.Name;
     if(card.List != null)
         return RedirectToAction("GetCards", "Lists", new {id = card.List.Id});
     return RedirectToAction("GetCard", new { card.Id });
 }
 public ActionResult Archive(CardsModel cardsModel)
 {
     var card = CardDataMapper.GetCardDataMapper().GetById(cardsModel.Id);
     if (!AccountDataMapper.GetAccountDataMapper().GetById(User.Identity.Name).CanWriteBoard(card.List.Board.Id))
         return RedirectToAction("Index", "Boards");
     var listId = card.List.Id;
     int cardIdx = card.Idx;
     RefreshIdx(CardDataMapper.GetCardDataMapper().GetAllByList(card.List), cardIdx);
     card.List = null;
     return RedirectToAction("GetCards", "Lists", new { id = listId } );
 }
        public ActionResult MoveCardInList(CardsModel cardsModel)
        {
            var card = CardDataMapper.GetCardDataMapper().GetById(cardsModel.Id);
            int oldIdx = card.Idx;
            int newIdx = cardsModel.Idx;
            IEnumerable<CardsModel> cardsEnum = CardDataMapper.GetCardDataMapper().GetAllByList(card.List);
            int nCards = cardsEnum.Count();

            if (!AccountDataMapper.GetAccountDataMapper().GetById(User.Identity.Name).CanWriteBoard(card.List.Board.Id))
                return RedirectToAction("Index", "Boards");

            if (nCards < newIdx)
                newIdx = nCards;

            if (oldIdx < newIdx) {
                foreach (var c in cardsEnum) {
                    if (c.Idx > oldIdx && c.Idx <= newIdx)
                        --c.Idx;
                }
            }
            else if (newIdx < oldIdx) {
                foreach (var c in cardsEnum) {
                    if (c.Idx < oldIdx && c.Idx >= newIdx)
                        ++c.Idx;
                }
            }
            card.Idx = newIdx;

            return RedirectToAction("GetCards", "Lists", new {id = card.List.Id});
        }