コード例 #1
0
        protected override DriverResult Editor(CupPart part, IUpdateModel updater, dynamic shapeHelper)
        {
            var model = new CupEditViewModel();

            updater.TryUpdateModel(model, Prefix, null, null);

            if (part.ContentItem.Id != 0)
            {
                _gameService.UpdateForContentItem(part.ContentItem, model);
            }

            return(Editor(part, shapeHelper));
        }
コード例 #2
0
        public void UpdateForContentItem(IContent item, CupEditViewModel model)
        {
            var cupPart = item.As <CupPart>();

            cupPart.Date  = model.Date;
            cupPart.Title = model.Title;

            #region Event Orders

            var oldOrders = _eventOrderService.GetByCup(cupPart.Id).ToList();

            // Make sure these are never null
            if (model.EventOrders == null)
            {
                model.EventOrders = new List <EventOrderEditViewModel>();
            }
            if (model.Placement == null)
            {
                model.Placement = new List <CupPlaceEditViewModel>();
            }

            foreach (var order in oldOrders)
            {
                var orderModel = model.EventOrders.SingleOrDefault(m => m.Id == order.Id);

                if (orderModel != null)
                {
                    // Update existing orders
                    order.SortOrder       = orderModel.SortOrder;
                    order.EventPartRecord = orderModel.EventId.HasValue
                        ? _eventService.Get(orderModel.EventId.Value).Record
                        : null;
                }
                else
                {
                    // Delete the orders that no longer exist
                    _eventOrderService.Delete(order);
                }
            }

            // Add the new orders
            foreach (var order in from order in model.EventOrders
                     let oldOrder = oldOrders.SingleOrDefault(m => m.Id == order.Id)
                                    where oldOrder == null
                                    select order)
            {
                _eventOrderService.Create(
                    new EventOrderRecord {
                    SortOrder       = order.SortOrder,
                    CupPartRecord   = cupPart.Record,
                    Id              = order.Id,
                    EventPartRecord = order.EventId.HasValue
                            ? _eventService.Get(order.EventId.Value).Record
                            : null,
                });
            }

            #endregion

            #region Placement

            var oldPlaces = _cupPlaceService.GetByCup(cupPart.Id).ToList();

            // Make sure this is never null
            if (model.Placement == null)
            {
                model.Placement = new List <CupPlaceEditViewModel>();
            }

            foreach (var place in oldPlaces)
            {
                var placeModel = model.Placement.SingleOrDefault(m => m.Id == place.Id);

                if (placeModel != null)
                {
                    // Update existing places
                    place.Place  = placeModel.Place;
                    place.Points = placeModel.Points;
                }
                else
                {
                    // Delete the places that no longer exist
                    _cupPlaceService.Delete(place);
                }
            }

            // Add the new places
            foreach (var place in from place in model.Placement
                     let oldPlace = oldPlaces.SingleOrDefault(m => m.Id == place.Id)
                                    where oldPlace == null
                                    select place)
            {
                _cupPlaceService.Create(
                    new CupPlaceRecord {
                    CupPartRecord = cupPart.Record,
                    Id            = place.Id,
                    Place         = place.Place,
                    Points        = place.Points
                });
            }

            #endregion
        }