/// <summary>
        /// Used to get all the users based on pageNo and Records
        /// </summary>
        /// <returns></returns>
        public List<UserModel> GetAllUsers(int pageNo, int records,BusinessClasses.UserRole role)
        {
            try
            {

                using (var tde = new TimeDifferenceEntities())
                {
                    var roleId = Convert.ToInt32(role);
                    return tde.Users.Where(m => m.IsActive && m.RoleId <= roleId).OrderBy(m => m.Id)
                        .Skip((pageNo * records) - records).Take(records).Select(
                        m => new UserModel
                        {
                            Email = m.Email,
                            UserId = m.Id,
                            UserName = m.UserName,
                            Role = (BusinessClasses.UserRole)m.RoleId
                        }).ToList();

                }
            }
            catch (Exception ex)
            {
                throw new Exception("Exception Occured", ex.InnerException);
            }
        }
        /// <summary>
        /// Used to get all the Records of the user, If userId==0 then al records to be returned
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="pageNo"></param>
        /// <param name="records"></param>
        /// <param name="recordPageNo"></param>
        /// <returns></returns>
        public List<UserTimeZoneEntryModel> GetUserTimeZoneInformation(int userId, int pageNo, int records, int recordPageNo, int recordPageEntries, BusinessClasses.UserRole role)
        {
            var returnData = new List<UserTimeZoneEntryModel>();
            if (userId != 0)
            {
                var userInfo = new Data.UserMethods().GetUserInformationBasedOnId(userId);
                if (userInfo == null)
                    throw new EntryNotFound();
                var userRecords = new Data.TimeZoneEntryMethods().GetAllTimeZoneBasedOnId(recordPageNo, recordPageEntries, userId);

                returnData.Add(new UserTimeZoneEntryModel
                {
                    UserId = userInfo.UserId,
                    UserName = userInfo.UserName,
                    EmailId = userInfo.Email,
                    TimeZoneEntries = userRecords.Select(m => new TimeZoneEntryModel
                    {
                        UserId = m.UserId,
                        EntryName = m.EntryName,
                        City = m.City,
                        TimeZoneEntryId = m.Id,
                        HourDifference = new TimeSpan(m.Difference).Hours,
                        MinuteDifference = new TimeSpan(m.Difference).Minutes,
                        CurrentTimeCity = DateTime.UtcNow + new TimeSpan(m.Difference)
                    }).ToList()
                });

            }
            else
            {
                returnData = new Data.UserMethods().GetAllUsers(pageNo, records, role).Select(c => new UserTimeZoneEntryModel
                    {
                        EmailId = c.Email,
                        UserId = c.UserId,
                        UserName = c.UserName,
                        TimeZoneEntries = new Data.TimeZoneEntryMethods().GetAllTimeZoneBasedOnId(recordPageNo, recordPageEntries, c.UserId).Select(
                        m => new TimeZoneEntryModel
                        {
                            UserId = m.UserId,
                            EntryName = m.EntryName,
                            City = m.City,
                            TimeZoneEntryId = m.Id,
                            HourDifference = new TimeSpan(m.Difference).Hours,
                            MinuteDifference = new TimeSpan(m.Difference).Minutes,
                            CurrentTimeCity = DateTime.UtcNow + new TimeSpan(m.Difference)
                        }).ToList()
                    }).ToList();
            }
            return returnData;
        }
        public PublicationControl(BusinessClasses.Publication publication)
        {
            InitializeComponent();
            this.Dock = DockStyle.Fill;
            this.Publication = publication;
            this.Text = publication.Name.Replace("&", "&&");

            repositoryItemDateNull.NullDate = this.Publication.Parent.FlightDateStart;

            repositoryItemSpinEditPCIRate.Enter += new EventHandler(FormMain.Instance.Editor_Enter);
            repositoryItemSpinEditPCIRate.MouseDown += new MouseEventHandler(FormMain.Instance.Editor_MouseDown);
            repositoryItemSpinEditPCIRate.MouseUp += new MouseEventHandler(FormMain.Instance.Editor_MouseUp);
            repositoryItemSpinEditADRateEdit.Enter += new EventHandler(FormMain.Instance.Editor_Enter);
            repositoryItemSpinEditADRateEdit.MouseDown += new MouseEventHandler(FormMain.Instance.Editor_MouseDown);
            repositoryItemSpinEditADRateEdit.MouseUp += new MouseEventHandler(FormMain.Instance.Editor_MouseUp);
            repositoryItemSpinEditADRateEdit.Enter += new EventHandler(FormMain.Instance.Editor_Enter);
            repositoryItemSpinEditADRateEdit.MouseDown += new MouseEventHandler(FormMain.Instance.Editor_MouseDown);
            repositoryItemSpinEditADRateEdit.MouseUp += new MouseEventHandler(FormMain.Instance.Editor_MouseUp);
            repositoryItemSpinEditADRateEditNull.Enter += new EventHandler(FormMain.Instance.Editor_Enter);
            repositoryItemSpinEditADRateEditNull.MouseDown += new MouseEventHandler(FormMain.Instance.Editor_MouseDown);
            repositoryItemSpinEditADRateEditNull.MouseUp += new MouseEventHandler(FormMain.Instance.Editor_MouseUp);
            repositoryItemSpinEditADRateEditNull.Enter += new EventHandler(FormMain.Instance.Editor_Enter);
            repositoryItemSpinEditADRateEditNull.MouseDown += new MouseEventHandler(FormMain.Instance.Editor_MouseDown);
            repositoryItemSpinEditADRateEditNull.MouseUp += new MouseEventHandler(FormMain.Instance.Editor_MouseUp);
            repositoryItemSpinEditColorPricingEdit.Enter += new EventHandler(FormMain.Instance.Editor_Enter);
            repositoryItemSpinEditColorPricingEdit.MouseDown += new MouseEventHandler(FormMain.Instance.Editor_MouseDown);
            repositoryItemSpinEditColorPricingEdit.MouseUp += new MouseEventHandler(FormMain.Instance.Editor_MouseUp);
            repositoryItemSpinEditColorPricingEditFirstRow.Enter += new EventHandler(FormMain.Instance.Editor_Enter);
            repositoryItemSpinEditColorPricingEditFirstRow.MouseDown += new MouseEventHandler(FormMain.Instance.Editor_MouseDown);
            repositoryItemSpinEditColorPricingEditFirstRow.MouseUp += new MouseEventHandler(FormMain.Instance.Editor_MouseUp);
            repositoryItemSpinEditDiscountsEdit.Enter += new EventHandler(FormMain.Instance.Editor_Enter);
            repositoryItemSpinEditDiscountsEdit.MouseDown += new MouseEventHandler(FormMain.Instance.Editor_MouseDown);
            repositoryItemSpinEditDiscountsEdit.MouseUp += new MouseEventHandler(FormMain.Instance.Editor_MouseUp);
            repositoryItemSpinEditDiscountsEditFirstRow.Enter += new EventHandler(FormMain.Instance.Editor_Enter);
            repositoryItemSpinEditDiscountsEditFirstRow.MouseDown += new MouseEventHandler(FormMain.Instance.Editor_MouseDown);
            repositoryItemSpinEditDiscountsEditFirstRow.MouseUp += new MouseEventHandler(FormMain.Instance.Editor_MouseUp);

            this.BasicOverviewOutput = new OutputControls.PublicationBasicOverviewControl();
            this.MultiSummaryOutput = new OutputControls.PublicationMultiSummaryControl();
            this.DetailedGridOutput = new OutputControls.PublicationDetailedGridControl();
            this.MultiGridOutput = new OutputControls.PublicationMultiGridControl();

            LoadInserts();
        }
 /// <summary>
 /// Used to filter data from database for DataTable
 /// </summary>
 /// <returns></returns>
 public List<UserModelDataTable> GetUsersDataTable(BusinessClasses.UserRole role)
 {
     try
     {
         using (var tde = new TimeDifferenceEntities())
         {
             var roleId = Convert.ToInt32(role);
             return tde.Users.Where(m => m.IsActive && m.RoleId <= roleId).Select(m => new UserModelDataTable
               {
                   Email = m.Email,
                   Role = (BusinessClasses.UserRole)m.RoleId,
                   UserId = m.Id,
                   UserName = m.UserName,
                   TimeZoneRecords = m.TimeZoneEntries.Count(c => c.IsActive)
               }).ToList();
         }
     }
     catch (Exception ex)
     {
         throw new Exception("Exception Occured", ex.InnerException);
     }
 }