public ActionResult Edit(uint id)
        {
            var marketingEvent = DbSession.Query <MarketingEvent>().SingleOrDefault(r => r.Id == id);

            if (marketingEvent == null)
            {
                return(HttpNotFound());
            }

            var model = new MarketingEventViewModel()
            {
                MarketingEventId = marketingEvent.Id,
                Name             = marketingEvent.Name,
            };

            model.SelectedProducers = DbSession.Query <Producer>()
                                      .ToList()
                                      .Where(r => marketingEvent.Producers.Any(p => p.Producer == r))
                                      .OrderBy(r => r.Name)
                                      .ToList();
            model.AvailableProducers = DbSession.Query <Producer>()
                                       .Where(r => !model.SelectedProducers.Contains(r))
                                       .OrderBy(r => r.Name)
                                       .ToList();
            EditedEvent = model;

            return(View(model));
        }
        public ActionResult Add()
        {
            var model = new MarketingEventViewModel();

            model.AddMode            = true;
            model.AvailableProducers = DbSession.Query <Producer>()
                                       .OrderBy(r => r.Name)
                                       .ToList();
            EditedEvent = model;
            return(View("Edit", model));
        }
        public ActionResult Save(MarketingEventViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View("Edit", model));
            }

            if (model.AddMode)
            {
                var marketingEvent = new MarketingEvent {
                    Association = CurrentAssociation,
                    Name        = model.Name
                };
                DbSession.Save(marketingEvent);

                EditedEvent.SelectedProducers.ForEach(p => {
                    DbSession.CreateSQLQuery(
                        "insert into Customers.PromoterProducers (ProducerId, MarketingEventId) values (:id, :eventId)")
                    .SetParameter("id", p.Id)
                    .SetParameter("eventId", marketingEvent.Id)
                    .ExecuteUpdate();
                });
            }
            else
            {
                var marketingEvent = DbSession.Query <MarketingEvent>().FirstOrDefault(r => r.Id == model.MarketingEventId);
                if (marketingEvent == null)
                {
                    return(HttpNotFound());
                }

                var producers = DbSession.Query <PromoterProducer>()
                                .Where(r => r.MarketingEvent == marketingEvent)
                                .ToArray();
                producers.Where(r => !EditedEvent.SelectedProducers.Contains(r.Producer)).ForEach(p => { DbSession.Delete(p); });
                EditedEvent.SelectedProducers.Where(r => !producers.Any(p => p.Producer == r)).ForEach(x => {
                    DbSession.CreateSQLQuery(
                        "insert into Customers.PromoterProducers (ProducerId, MarketingEventId) values (:id, :eventId)")
                    .SetParameter("id", x.Id)
                    .SetParameter("eventId", marketingEvent.Id)
                    .ExecuteUpdate();
                });
            }

            EditedEvent = null;

            return(RedirectToAction("Index"));
        }