public static UserShows SaveEntryv2(UserShowEntry showEntry)
        {
            DogClasses dc = new DogClasses();
            var altHandlersList = new string[] { };
            UserShows us = new UserShows(showEntry.UserId, showEntry.ShowId);
            try
            {
                MultiDog.DeleteUserFromShow(showEntry.UserId, showEntry.ShowId);
                try
                {
                    if (showEntry.MultiDogEntries != null && showEntry.MultiDogEntries.Any())
                    {
                        var idx = 1;
                        var teamPairsId = 0;
                        foreach (var md in showEntry.MultiDogEntries)
                        {
                            teamPairsId = MultiDog.AddTeamPairsDetails(showEntry.ShowId, showEntry.UserId, md.TeamDetails.Captain, md.TeamDetails.TeamName, idx, md.ClassId);
                            foreach (var member in md.Members)
                            {
                                MultiDog.Add(teamPairsId, showEntry.UserId, member.DogId, md.ClassId, showEntry.ShowId, member.HandlerName ?? "", member.DogName ?? "", member.HandlerId, member.DogId, idx);
                            }
                            idx++;
                        }
                    }
                }
                catch (Exception e)
                {
                    AppException.Log(string.Format("SaveEntryv2 Error MultiDogs  (ShowId={0}, UserId={1} [{2}][{3}]", showEntry.ShowId, showEntry.UserId, e.Message, e.StackTrace), "");
                }

                foreach (DogsModel dog in showEntry.Dogs)
                {
                    dc.Save(showEntry.ShowId, dog);

                    if (dog.ClassNo != null)
                    {
                        var ykc = dog.ClassNo.Where(y => y.Juniors != null);
                        if (ykc.Any())
                        {
                            var y = ykc.First();
                            if (y.Juniors.Id == 0)
                            {
                                Juniors.AddJunior(dog.Id, y.Id, y.Juniors.DoB, y.Juniors.YKCNumber);
                            }
                            else
                            {
                                var jnr = new Juniors(y.Juniors.Id);
                                jnr.DogId = dog.Id;
                                jnr.ClassId = y.Id;
                                jnr.YKCNumber = y.Juniors.YKCNumber;
                                jnr.DoB = y.Juniors.DoB;
                                jnr.Save();
                            }
                        }
                        var g7dogs = dog.ClassNo.Where(x => x.ChampWins != null && x.ChampWins.Any());
                        foreach (var d in g7dogs)
                        {
                            foreach (var win in d.ChampWins)
                            {
                                if (!string.IsNullOrEmpty(win.ShowName) && !string.IsNullOrEmpty(win.ShowClass))
                                {
                                    DateTime parsedDate = DateTime.MinValue;
                                    if (!DateTime.TryParseExact(win.ShowDate, "dd-MM-yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate))
                                    {
                                        DateTime.TryParseExact(win.ShowDate, "dd-MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate);
                                    }

                                    Fpp.Business.DogHistory.AddChampWins(new Core.Views.UpgradeDogView
                                    {
                                        Id = win.Id,
                                        ShowName = win.ShowName,
                                        ClassWon = win.ShowClass,
                                        WinDate = parsedDate,
                                        UserId = showEntry.UserId,
                                        DogId = dog.Id,
                                        NewGrade = 7,
                                        Comments = "Win towards grade 7",
                                        UpgradeType = win.UpgradeType,
                                        DateOfWin = win.ShowDate
                                    });

                                }
                            }
                        }
                    }
                }

                if (us.Status != (int)UserShows.UserStatus.STATUS_ENTERED_AND_PAID)
                {
                    us.Status = us.Status = (int)UserShows.UserStatus.STATUS_SAVED;
                }

                //
                // add check to see if this person is on the judging list.
                if (showEntry.HandlerType != (int)UserShows.HandlerTypes.MEMBER
                    && Judge.isJudgeAtShow(showEntry.UserId, showEntry.ShowId))
                {
                    us.HandlerType = (int)UserShows.HandlerTypes.JUDGE;
                }
                else
                {
                    us.HandlerType = showEntry.HandlerType;
                }
                us.Optout = showEntry.OptOut;
                us.DogsMeasured = showEntry.DogsMeasured;
                us.Save();

                Camping camping = new Camping(showEntry.ShowId);
                if (camping.ID > -1)
                {

                    var oldcamp = new UserCamping(us.ID);
                    UserCamping.DeleteForUser(us.ID);
                    if (showEntry.UserCamping != null)
                    {
                        for (var i = 0; i < showEntry.UserCamping.Plots; i++)
                        {
                            UserCamping.Add(us.ID, showEntry.UserCamping);
                        }
                        var uc = new UserCamping(us.ID);

                        if (oldcamp.ID > -1 && oldcamp.PitchDetails.Any() )
                        {
                            UserCamping.SetCode(uc.PitchDetails[0].ID, oldcamp.PitchDetails[0].CampingCode);
                            UserCamping.SetComments(uc.PitchDetails[0].ID, oldcamp.PitchDetails[0].Comments);
                            UserCamping.SetPitchNo(uc.PitchDetails[0].ID, oldcamp.PitchDetails[0].PitchNo);
                            if (uc.PitchDetails.Count > 1 && oldcamp.PitchDetails.Count > 1)
                            {
                                UserCamping.SetCode(uc.PitchDetails[1].ID, oldcamp.PitchDetails[1].CampingCode);
                                UserCamping.SetComments(uc.PitchDetails[1].ID, oldcamp.PitchDetails[1].Comments);
                                UserCamping.SetPitchNo(uc.PitchDetails[1].ID, oldcamp.PitchDetails[1].PitchNo);
                            }

                        }

                    }
                }

                if (showEntry.UserCamping != null && showEntry.UserCamping.WaitingList == 1)
                {
                    WaitingList.Add(showEntry.ShowId, showEntry.UserId);
                }

            }
            catch (Exception e)
            {
                AppException.Log( string.Format("SaveEntryv2 Error (ShowId={0}, UserId={1} [{2}][{3}]", showEntry.ShowId, showEntry.UserId, e.Message, e.StackTrace), "");
            }
            return us;
        }
        public StatusCls AdminEnteredShow(UserShowEntry showEntry)
        {
            StatusCls status = new StatusCls();
            status.Status = 0;
            status.UserID = showEntry.UserId;

            UserShows us = EntryDetails.SaveEntryv2(showEntry);
            us.Optout = showEntry.OptOut;
            us.HandlerType = showEntry.HandlerType;
            us.Save();
            status.Data = us.ID.ToString().PadLeft(6, '0');
            status.ShowStatus = us.Status;
            var transactions = Transaction.getTransactionForShowRef(us.ID);
            if (transactions.Any(x => x.EnteredBy == (int)Transaction.ENTERED_BY.ONLINE_ENTRY))
            {
                var balance = transactions.Sum(x => x.Amount);
                if (balance + showEntry.Total != 0)
                {
                    int transID = Transaction.Add(status.Data, TransactionTypes.ShowEntry, -showEntry.Total, "Admin Entry(2)", showEntry.ShowId, showEntry.UserId, DateTime.Now, -showEntry.Total);
                }
            }
            else
            {
                var balance = transactions.Sum(x => x.Amount);
                if (balance + showEntry.Total != 0)
                {
                    int transID = Transaction.Add(status.Data, TransactionTypes.ShowEntry, -showEntry.Total, "Admin Entry(1)", showEntry.ShowId, showEntry.UserId, DateTime.Now, showEntry.Total);
                    Transaction.SetEnteredBy(transID, Transaction.ENTERED_BY.SHOW_ADMIN_ENTRY);
                }

                if (showEntry.DiscountAmount > 0)
                {
                    var showTransactions = Transaction.GetTransactionForShowUser(us.ID);
                    var discounts = showTransactions.Where(x => x.TransactionType == TransactionTypes.Discount).Sum(t => t.Amount);
                    showEntry.DiscountAmount -= discounts;
                    if (showEntry.DiscountAmount < 0) showEntry.DiscountAmount = 0;

                    Transaction.Add(us.ID.ToString("000000"), TransactionTypes.Discount, showEntry.DiscountAmount, "Discount Applied", us.ShowID, us.Userid, DateTime.Now);
                }

            }
            if (showEntry.AddTransactionCharge)
            {
                var fixedFee = ShowDiscounts.getDiscountsByType(showEntry.ShowId, -1, (int)DiscountTypes.TransactionCharge).FirstOrDefault();
                Transaction.Add(us.ID.ToString("000000"), TransactionTypes.TransactionCharge, -fixedFee.Amount, "Transaction Fee", us.ShowID, us.Userid, DateTime.Now);
            }
            return status;
        }