public async Task<ActionResult> Edit(ItemRegistrationModel model)
        {
            cfcusaga.data.Cart cartItem;
            cfcusaga.data.Item item;
            if (ModelState.IsValid)
            {
                cartItem = await _db.Carts.FindAsync(model.CartID);
                item = await _db.Items.FindAsync(cartItem.ItemId);

                var entity = _db.CartItemRegistrations.Find(model.ID);

                entity.LastName = model.LastName;
                entity.FirstName = model.FirstName;
                if (item.IsRequireBirthDateInfo.HasValue && item.IsRequireBirthDateInfo.Value)
                {
                    entity.BirthDate = model.BirthDate;
                }
                
                entity.RelationToMemberTypeId = model.RelationToMemberTypeId;
                entity.Gender = model.Gender;
                entity.Allergies = model.Allergies;
                if (model.TshirtSize != null)
                {
                    entity.TshirtSize = model.TshirtSize;
                }
                _db.Entry(entity).State = EntityState.Modified;

                await _db.SaveChangesAsync();
                return RedirectToAction("Index", "ShoppingCart");
            }

            cartItem = await _db.Carts.FindAsync(model.CartID);

            item = await _db.Items.FindAsync(cartItem.ItemId);
            ViewBag.SubTitle = item.Name;
            ViewBag.ItemId = item.ID;
            ViewBag.IsRequireBirthDate = item.IsRequireBirthDateInfo ?? false;
            ViewBag.IsRequireParentWaiver = item.IsRequireParentWaiver ?? false;
            ViewBag.IsShirtIncluded = item.IsShirtIncluded ?? false;

            SelectList relationTypesList = null;
            if (item.IsRequireParentWaiver != null && item.IsRequireParentWaiver.Value)
            {
                var relationTypes = _eventSvc.GetRelationToMemberTypesRequiresParentWaiver();
                relationTypesList = new SelectList(relationTypes, "Id", "Name");
            }
            else
            {
                var sessionInfo = ItemRegistrationsController.GetSessionCurrentRegistrationInfo(this.HttpContext);
                //relationTypes = _svc.GetRelationToMemberTypesAdults();
                var relationTypes = _eventSvc.GetRelationToMemberTypesAdults().ToList();
                IEnumerable<RelationToMemberType> selectListItems = null;
                //newRegistratinItem.RelationToMemberTypes = new SelectList(relationTypes, "Id", "Name");
                if (sessionInfo != null && sessionInfo.IsSelfSelected)
                {
                    selectListItems = relationTypes.Where(m => m.Name.ToUpper() != "SELF");
                }
                else
                {
                    selectListItems = relationTypes.ToList();
                }
                relationTypesList = new SelectList(selectListItems, "Id", "Name");
            }

            var list = GetTShirtSizesList();
            ViewBag.TshirtSizes = list;
            model.RelationToMemberTypes = relationTypesList;
            return View(model);
        }
        public async Task<ActionResult> Create(ItemRegistrationModel itemRegistration)
        {
            var itemId = Convert.ToInt32(Request.QueryString["itemId"]);
            if (ModelState.IsValid)
            {
                //TODO:
                

                var foundItem = await _cartSvc.GetItem(itemId);

                var cart = ShoppingCart.GetCart(this.HttpContext, _cartSvc);
                int count;
                var currentCart =  cart.AddToCart(foundItem, out count);
                

                ItemRegistrationsController.SetSessionCurrentRegistrationInfo(this.HttpContext, itemRegistration.LastName, string.Empty);
                //var eventId = EventsController.GetSessionEventId(this.HttpContext);

                itemRegistration.CartID = currentCart.Id;

                if (itemRegistration.RelationToMemberTypeId != null && itemRegistration.RelationToMemberTypeId == (int)Enums.RelationToMe.Self)
                {
                    ItemRegistrationsController.SetSessionCurrentRegistrationInfo(this.HttpContext, itemRegistration.LastName, itemRegistration.FirstName, true, itemRegistration.Gender);
                    var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
                    if (user != null)
                    {
                        var aMember = await GetMember(user.Id);
                        if (aMember != null)
                        {
                            itemRegistration.MemberId = aMember.Id;
                            itemRegistration.LastName = aMember.LastName;
                            itemRegistration.FirstName = aMember.Firstname;
                            itemRegistration.Gender = aMember.Gender;
                        }
                    }
                }

                using (var dbContextTransaction = _db.Database.BeginTransaction())
                {
                    try
                    {
                        var cartItem = _db.CartItemRegistrations.Create();
                        cartItem.CartID = itemRegistration.CartID;
                        cartItem.Allergies = itemRegistration.Allergies;
                        cartItem.BirthDate = itemRegistration.BirthDate;
                        cartItem.FirstName = itemRegistration.FirstName;
                        cartItem.Gender = itemRegistration.Gender;
                        cartItem.LastName = itemRegistration.LastName;
                        cartItem.MemberId = itemRegistration.MemberId;
                        cartItem.RelationToMemberTypeId = itemRegistration.RelationToMemberTypeId;
                        cartItem.TshirtSize = itemRegistration.TshirtSize;
                        _db.CartItemRegistrations.Add(cartItem);
                        //await _db.SaveChangesAsync();

                        await AddItemDiscount(foundItem, currentCart);
                        await _db.SaveChangesAsync();

                        dbContextTransaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        var msg = ex.Message;
                        dbContextTransaction.Rollback();
                        throw;
                    }
                }



                return RedirectToAction("Index", "Items" );
            }
            //


            var item = await _db.Items.FindAsync(itemId);
            ViewBag.SubTitle = item.Name;
            ViewBag.ItemId = itemId;
            ViewBag.IsRequireBirthDate = item.IsRequireBirthDateInfo ?? false;
            ViewBag.IsRequireParentWaiver = item.IsRequireParentWaiver ?? false;
            ViewBag.IsShirtIncluded = item.IsShirtIncluded ?? false;

            var list = GetTShirtSizesList();
            ViewBag.TshirtSizes = list;


            var sessionInfo = ItemRegistrationsController.GetSessionCurrentRegistrationInfo(this.HttpContext);
            //var newRegistratinItem = new ItemRegistrationModel();
            itemRegistration.IsBirthDateRequired = item.IsRequireBirthDateInfo ?? false;
            //itemRegistration.Gender = "M";

            if (item.IsRequireParentWaiver != null && item.IsRequireParentWaiver.Value)
            {
                var relationTypes = _eventSvc.GetRelationToMemberTypesRequiresParentWaiver();
                itemRegistration.RelationToMemberTypes = new SelectList(relationTypes, "Id", "Name");
            }
            else
            {
                var relationTypes = _eventSvc.GetRelationToMemberTypesAdults().ToList();
                IEnumerable<RelationToMemberType> selectListItems = null;
                //newRegistratinItem.RelationToMemberTypes = new SelectList(relationTypes, "Id", "Name");
                if (sessionInfo != null && sessionInfo.IsSelfSelected)
                {
                    selectListItems = relationTypes.Where(m => m.Name.ToUpper() != "SELF");
                    itemRegistration.Gender = sessionInfo.Gender == "F" ? "M" : "F";//TODO: need to make gender an Enum
                }
                else
                {
                    selectListItems = relationTypes.ToList();
                }
                var relationTypesList = new SelectList(selectListItems, "Id", "Name");
                itemRegistration.RelationToMemberTypes = relationTypesList;
            }



            return View(itemRegistration);
        }
        // GET: ItemRegistrations/Edit/5
        public async Task<ActionResult> Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            var itemRegistration = await _db.CartItemRegistrations.FindAsync(id);
            if (itemRegistration == null)
            {
                return HttpNotFound();
            }

            //ViewBag.RelationToMemberTypeId = new SelectList(_svc.GetRelationToMemberTypes(), "Id", "Name");

            var eventId = EventsController.GetSessionEventId(this.HttpContext);
            if (eventId == null)
            {
                if (itemRegistration.Cart.Item.EventId != null)
                {
                    eventId = itemRegistration.Cart.Item.EventId;
                    EventsController.SetSessionEventId(this.HttpContext, eventId.Value);
                }

            }
            var anEvent = await _eventSvc.GetEventDetails(eventId);
            ViewBag.Title = anEvent.Name;
            var cartItem = await _db.Carts.FindAsync(itemRegistration.CartID);

            var item = await _db.Items.FindAsync(cartItem.ItemId);
            ViewBag.SubTitle = item.Name;
            ViewBag.ItemId = item.ID;
            ViewBag.IsRequireBirthDate = item.IsRequireBirthDateInfo ?? false;
            ViewBag.IsRequireParentWaiver = item.IsRequireParentWaiver ?? false;
            ViewBag.IsShirtIncluded = item.IsShirtIncluded ?? false;

            var sessionInfo = ItemRegistrationsController.GetSessionCurrentRegistrationInfo(this.HttpContext);

            
            //IEnumerable relationTypes;
            SelectList relationTypesList = null;
            if (item.IsRequireParentWaiver != null && item.IsRequireParentWaiver.Value)
            {
                var relationTypes = _eventSvc.GetRelationToMemberTypesRequiresParentWaiver();
                relationTypesList = new SelectList(relationTypes, "Id", "Name");
            }
            else
            {
                 //relationTypes = _svc.GetRelationToMemberTypesAdults();
                var relationTypes = _eventSvc.GetRelationToMemberTypesAdults().ToList();
                IEnumerable<RelationToMemberType> selectListItems = null;
                //newRegistratinItem.RelationToMemberTypes = new SelectList(relationTypes, "Id", "Name");
                if (sessionInfo != null && sessionInfo.IsSelfSelected)
                {
                    selectListItems = relationTypes.Where(m => m.Name.ToUpper() != "SELF");
                }
                else
                {
                    selectListItems = relationTypes.ToList();
                }
                relationTypesList = new SelectList(selectListItems, "Id", "Name");
            }

            var list = GetTShirtSizesList();
            ViewBag.TshirtSizes = list;

            var itemRegModel = new ItemRegistrationModel()
            {
                LastName = itemRegistration.LastName,
                MemberId = itemRegistration.MemberId,
                FirstName = itemRegistration.FirstName,
                BirthDate = itemRegistration.BirthDate,
                RelationToMemberTypeId = itemRegistration.RelationToMemberTypeId,
                Gender = itemRegistration.Gender,
                TshirtSize = itemRegistration.TshirtSize,
                Allergies = itemRegistration.Allergies,
                ID = itemRegistration.ID,
                CartID = itemRegistration.CartID,
                RelationToMemberTypes = relationTypesList, //new SelectList(relationTypes, "Id", "Name")
                IsBirthDateRequired = item.IsRequireBirthDateInfo ?? false
            };

            return View(itemRegModel);
        }
        // GET: ItemRegistrations/Create
        public async Task<ActionResult> Create(int itemId)
        {
            //ViewBag.RelationToMemberTypeId = new SelectList(_svc.GetRelationToMemberTypes(), "ID", "Name");

            var eventId= EventsController.GetSessionEventId(this.HttpContext);
            var anEvent = await _eventSvc.GetEventDetails(eventId);
            ViewBag.Title = anEvent.Name;
            var item = await _db.Items.FindAsync(itemId);
            ViewBag.SubTitle = item.Name;
            ViewBag.ItemId = itemId;
            ViewBag.IsRequireBirthDate = item.IsRequireBirthDateInfo ?? false;
            ViewBag.IsRequireParentWaiver = item.IsRequireParentWaiver ?? false;
            ViewBag.IsShirtIncluded = item.IsShirtIncluded ?? false;

            var list = GetTShirtSizesList();
            ViewBag.TshirtSizes = list;


            var sessionInfo = ItemRegistrationsController.GetSessionCurrentRegistrationInfo(this.HttpContext);
            var newRegistratinItem = new ItemRegistrationModel();
            newRegistratinItem.IsBirthDateRequired = item.IsRequireBirthDateInfo ?? false;
            newRegistratinItem.Gender = "M";

            if (item.IsRequireParentWaiver != null && item.IsRequireParentWaiver.Value)
            {
                var relationTypes = _eventSvc.GetRelationToMemberTypesRequiresParentWaiver();
                newRegistratinItem.RelationToMemberTypes = new SelectList(relationTypes, "Id", "Name");
            }
            else
            {
                var relationTypes = _eventSvc.GetRelationToMemberTypesAdults().ToList();
                IEnumerable<RelationToMemberType> selectListItems = null;
                //newRegistratinItem.RelationToMemberTypes = new SelectList(relationTypes, "Id", "Name");
                if (sessionInfo != null && sessionInfo.IsSelfSelected)
                {
                    selectListItems = relationTypes.Where(m => m.Name.ToUpper() != "SELF");
                    newRegistratinItem.Gender = sessionInfo.Gender=="F"?"M":"F";//TODO: need to make gender an Enum
                }
                else
                {
                    selectListItems = relationTypes.ToList();
                }
                var relationTypesList = new SelectList(selectListItems, "Id", "Name");
                newRegistratinItem.RelationToMemberTypes = relationTypesList;
            }

            if (sessionInfo != null)
            {
                newRegistratinItem.LastName = sessionInfo.Lastname;
            }
            ViewBag.RelationToMemberTypes = newRegistratinItem.RelationToMemberTypes;
            return View(newRegistratinItem);
        }