예제 #1
0
        private void BackAuthDoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                Loader = this.ShowLoader();
                UserDataContract user = UsersService.GetUserByLogin(LoginTE.Text).Result;
                if (user.IsNull())
                {
                    throw new Exception(
                              "Пользователь не найден в БД." +
                              Environment.NewLine +
                              "Проверьте данные и повторите попытку.");
                }

                if (!user.Password.Equals(PasswordTE.Text))
                {
                    throw new Exception(
                              "Введенный пароль не совпадает с паролем из БД." +
                              Environment.NewLine +
                              "Проверьте данные и повторите попытку.");
                }

                memory.StoreData(mapper.Map <UserDataContract, UserModel>(user), "CurrentUser");
                AuthDialogResult = true;
            }
            catch (Exception ex)
            {
                message.ShowInfo(ex.Message);
            }
            finally
            {
                this.HideLoader(Loader);
            }
        }
        private async Task BindChartData()
        {
            try
            {
                _handle = OverlayScreenForm.ShowProgressPanel(this);
                #region 饼状图

                var data = await _api.GetBookChartByCategory();

                Ct_BookCategorySum.DataSource = data;
                var series = Ct_BookCategorySum.Series[0];
                series.ValueDataMembers[0] = "Number";
                series.ArgumentDataMember  = "CategoryName";
                var label = (PieSeriesLabel)series.Label;
                label.TextPattern = "{A}: {VP:P0}";
                var title = new ChartTitle {
                    Text = @"馆藏图书分类汇总", Alignment = StringAlignment.Center
                };
                Ct_BookCategorySum.Titles.Add(title);

                #endregion

                #region 柱状图

                var borrowCharts = await _api.GetBorrowByDayChart();

                Ct_Bar.DataSource = borrowCharts;
                var barSeries = Ct_Bar.Series[0];
                barSeries.ValueDataMembers[0] = "Number";
                barSeries.ArgumentDataMember  = "CreateDate";
                var barLabel = (BarSeriesLabel)barSeries.Label;
                barLabel.TextPattern = "{A}: {V}";
                var barTitle = new ChartTitle {
                    Text = @"近一周借阅统计", Alignment = StringAlignment.Center
                };
                Ct_Bar.Titles.Add(barTitle);

                #endregion

                #region 数据合计展示

                var booksTotal       = await new BookApi().GetBookTotal();
                var borrowsTotal     = await new BorrowApi().GetBorrowTotal();
                var studentsTotal    = await new StudentApi().GetStudentTotal();
                var employeesTotal   = await new EmployeeApi().GetEmployeeTotal();
                var reservationTotal = await new ReservationApi().GetReservationTotal();
                Tbi_Books.Elements[1].Text        = booksTotal.ToString();
                Tbi_Borrows.Elements[1].Text      = borrowsTotal.ToString();
                Tbi_Employees.Elements[1].Text    = employeesTotal.ToString();
                Tbi_Students.Elements[1].Text     = studentsTotal.ToString();
                Tbi_Reservations.Elements[1].Text = reservationTotal.ToString();
                #endregion
                OverlayScreenForm.CloseProgressPanel(_handle);
            }
            catch (Exception e)
            {
                OverlayScreenForm.CloseProgressPanel(_handle);
                PopupProvider.Error("获取图表数据或合计数据异常!", e);
            }
        }
        private async void Ribe_Return_ButtonClick(object sender, ButtonPressedEventArgs e)
        {
            try
            {
                if (!Gv_Borrows.GetFocusedRowCellDisplayText("ReturnState").Equals("未归还"))
                {
                    PopupProvider.Warning("该书已归还!");
                    return;
                }

                var dialogResult = XtraMessageBox.Show("确认归还?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (dialogResult != DialogResult.Yes)
                {
                    return;
                }
                _handle = OverlayScreenForm.ShowProgressPanel(this);
                var id     = Gv_Borrows.GetFocusedRowCellDisplayText("Id");
                var result = await _borrowApi.ReturnBook(id);

                OverlayScreenForm.CloseProgressPanel(_handle);
                if (result.ResultCode != 1)
                {
                    PopupProvider.Warning(result.ResultMessage);
                }

                PopupProvider.Success(result.ResultMessage);

                await BindData();
            }
            catch (Exception exception)
            {
                OverlayScreenForm.CloseProgressPanel(_handle);
                PopupProvider.Error(exception.Message, exception);
            }
        }
예제 #4
0
        private void SwitchTabButton(string Name, string Header)
        {
            Loader = this.ShowLoader();

            if (ContentTabControl.HasPage(Name))
            {
                ContentTabControl.SetPageByName(Name);
            }
            else
            {
                ContentTabControl.AddAndSelectTab(Name, Header);
            }

            TabPage page = ContentTabControl.GetPageByName(Name);

            if (page.Controls.Count.Equals(0))
            {
                page.Controls.Add(GetControlByName(Name));
            }
            foreach (Control item in page.Controls)
            {
                item.Size = page.Size;
            }

            this.HideLoader(Loader);
            LeftDockPanel.HideImmediately();
        }
        private async void Sb_Query_Click(object sender, EventArgs e)
        {
            try
            {
                _handle = OverlayScreenForm.ShowProgressPanel(this);
                var dic = new Dictionary <string, object>()
                {
                    { "CreateTime", $"{De_Begin.DateTime}" },
                    { "BookName", Te_BookName.Text }
                };
                var data = await _api.GetBooks(dic);

                foreach (var book in data)
                {
                    book.Photo = Image.FromFile(book.BookPhoto);
                }

                Gc_Data.DataSource = data;
            }
            catch (Exception ex)
            {
                PopupProvider.Error("获取数据异常!", ex);
            }
            finally
            {
                OverlayScreenForm.CloseProgressPanel(_handle);
            }
        }
예제 #6
0
 private void ShowWaitOverlay()
 {
     if (_overlayHandle == null)
     {
         _overlayHandle = SplashScreenManager.ShowOverlayForm(this);
     }
 }
예제 #7
0
 void CloseProgressPanel(IOverlaySplashScreenHandle handle)
 {
     if (handle != null)
     {
         SplashScreenManager.CloseOverlayForm(handle);
     }
 }
예제 #8
0
 private void CloseWaitOverlay()
 {
     if (_overlayHandle != null)
     {
         SplashScreenManager.CloseOverlayForm(_overlayHandle);
         _overlayHandle = null;
     }
 }
예제 #9
0
 public void CloseOverlayForm(IOverlaySplashScreenHandle handle)
 {
     if (handle != null)
     {
         windowCompositePainter = null;
         SplashScreenManager.CloseOverlayForm(handle);
     }
 }
예제 #10
0
 private async void showOverlayButton_Click(object sender, EventArgs e)
 {
     if (overlayHandle == null)
     {
         overlayTextPainter = new OverlayTextPainter("Starting ...");
         overlayHandle      = SplashScreenManager.ShowOverlayForm(grid, customPainter: overlayTextPainter);
         await BackgroundTask();
     }
 }
예제 #11
0
 /// <inheritdoc />
 public void ShowIndicator()
 {
     Invoke(new MethodInvoker(delegate() {
         if (handle == null)
         {
             CreateHandle();
         }
         handle = SplashScreenManager.ShowOverlayForm(this);
     }));
 }
예제 #12
0
 public void ShowProgressPanel()
 {
     try
     {
         OverlayWindowOptions options = new OverlayWindowOptions(true, true, Color.GhostWhite, Color.Black, 0.7);
         handle = SplashScreenManager.ShowOverlayForm(this, options);
     }
     catch
     {
     }
 }
예제 #13
0
 private void hideOverlayButton_Click(object sender, EventArgs e)
 {
     if (overlayHandle != null)
     {
         cancellationTokenSource.Cancel();
         cancellationTokenSource.Dispose();
         cancellationTokenSource = null;
         overlayHandle.Close();
         overlayHandle.Dispose();
         overlayHandle = null;
     }
 }
예제 #14
0
        private void biSimulation_ItemClick(object sender, ItemClickEventArgs e)
        {
            StrategyBase strategy = (StrategyBase)this.gridView1.GetFocusedRow();

            if (strategy == null)
            {
                XtraMessageBox.Show("No strategy selected.");
                return;
            }
            if (!strategy.SupportSimulation)
            {
                XtraMessageBox.Show("This strategy does not support simulation.");
                return;
            }

            StrategiesManager manager = new StrategiesManager();
            StrategyBase      cloned  = strategy.Clone();

            cloned.DemoMode = true;
            manager.Strategies.Add(cloned);

            this.siStatus.Caption = "<b>Loading data from exchanges...</b>";
            IOverlaySplashScreenHandle handle = SplashScreenManager.ShowOverlayForm(this);

            Application.DoEvents();
            manager.Initialize(new SimulationStrategyDataProvider());
            if (!manager.Start())
            {
                XtraMessageBox.Show("Error starting simulation! Please check log messages");
                return;
            }
            this.siStatus.Caption = "<b>Running simulation...</b>";
            Application.DoEvents();

            Stopwatch timer = new Stopwatch();

            timer.Start();
            int elapsedSeconds = 0;

            while (manager.Running)
            {
                if (timer.ElapsedMilliseconds / 1000 > elapsedSeconds)
                {
                    elapsedSeconds        = (int)(timer.ElapsedMilliseconds / 1000);
                    this.siStatus.Caption = string.Format("<b>Running simulation... {0} sec</b>", elapsedSeconds);
                    Application.DoEvents();
                }
            }
            SplashScreenManager.CloseOverlayForm(handle);
            this.siStatus.Caption = "<b>Simulation done.</b>";
            Application.DoEvents();
            StrategyConfigurationManager.Default.ShowData(cloned);
        }
        /// <summary>
        /// 绑定学生信息数据
        /// </summary>
        /// <returns></returns>
        private async Task BindStudentInfo()
        {
            var studentNo = Te_StudentNo.Text;

            try
            {
                _handle = OverlayScreenForm.ShowProgressPanel(this);
                var students = await _api.GetStudents(new Dictionary <string, object>
                {
                    { "StudentNo", studentNo }
                });

                var student = students.FirstOrDefault();
                if (student == null)
                {
                    PopupProvider.Warning("未检索到信息!");
                    return;
                }

                Te_Age.EditValue       = student.Age;
                Te_Name.Text           = student.StudentName;
                Te_Class.Text          = student.Class;
                Te_Sex.Text            = student.Sex ? "女" : "男";
                Te_Department.Text     = student.DepartmentName;
                Te_Phone.EditValue     = student.Contact;
                Te_Email.Text          = student.Email;
                Te_StudentNo.EditValue = student.StudentNo;
                Te_StudentId.Text      = student.Id.ToString();

                #region 获取当前学生剩余可借阅数量

                var num = await _borrowApi.GetBorrowInfoTotal(Te_StudentId.Text);

                if (num != -1)
                {
                    Te_BooksNum.EditValue = 3 - num;
                }
                else
                {
                    Te_BooksNum.EditValue = 3;
                }

                #endregion

                OverlayScreenForm.CloseProgressPanel(_handle);
            }
            catch (Exception e)
            {
                OverlayScreenForm.CloseProgressPanel(_handle);
                PopupProvider.Error("获取学生信息异常!", e);
                LogHelper.Error(e.ToString());
            }
        }
예제 #16
0
 public void CloseProgressPanel()
 {
     try
     {
         if (handle != null)
         {
             SplashScreenManager.CloseOverlayForm(handle);
             handle = null;
         }
     }
     catch
     {
     }
 }
        private async void Sb_Save_Click(object sender, EventArgs e)
        {
            try
            {
                if (string.IsNullOrEmpty(Te_StudentId.Text))
                {
                    PopupProvider.Warning("请填写借阅人信息!");
                    return;
                }
                _handle = OverlayScreenForm.ShowProgressPanel(this);
                var infosTotal = Convert.ToInt32(Te_BooksNum.Text);
                if (infosTotal <= 0)
                {
                    OverlayScreenForm.CloseProgressPanel(_handle);
                    PopupProvider.Warning("已达最大可借阅数!");
                    return;
                }

                var books   = (List <Borrow>)Gv_BookInfos.DataSource;
                var borrows = books.Select(m => new Borrow
                {
                    StudentId = Guid.Parse(Te_StudentId.Text),
                    AdminId   = GlobalCache.Admin.Id,
                    EndTime   = DateTime.Now.AddDays(21),
                    BackTime  = DateTime.MaxValue,
                    BookId    = m.BookId
                }).ToList();
                var res = await _borrowApi.CreateBorrows(borrows);

                if (res.ResultCode != 1)
                {
                    OverlayScreenForm.CloseProgressPanel(_handle);
                    PopupProvider.Warning(res.ResultMessage);
                    return;
                }

                OverlayScreenForm.CloseProgressPanel(_handle);
                Gc_BookInfos.DataSource = new List <Borrow>();
                Clear(3);
                Te_BooksNum.Text  = string.Empty;
                Te_StudentId.Text = string.Empty;
                PopupProvider.Success(res.ResultMessage);
            }
            catch (Exception exception)
            {
                OverlayScreenForm.CloseProgressPanel(_handle);
                PopupProvider.Error("操作异常!", exception);
            }
        }
예제 #18
0
        async void OnRunTaskItemClick(object sender, ItemClickEventArgs e)
        {
            biRunTask.Enabled = false;
            string taskResult;
            IOverlaySplashScreenHandle overlayHandle = SplashScreenManager.ShowOverlayForm(contentPanel, customPainter: new OverlayWindowCompositePainter(overlayLabel, overlayButton));

            try {
                taskResult = await RunTask();
            }
            finally {
                SplashScreenManager.CloseOverlayForm(overlayHandle);
                biRunTask.Enabled = true;
            }
            XtraMessageBox.Show(this, taskResult, "Task Result");
        }
        private async Task RefreshDataSource()
        {
            IOverlaySplashScreenHandle overlayHandle = null;

            tokenSource       = new CancellationTokenSource();
            cancellationToken = tokenSource.Token;

            SetOverlayLabel("Loading test suite data ...");
            try
            {
                overlayHandle = _overlayFormManager.ShowOverlayForm(this, OnCancelButtonClick);
                var newDataSource = await Task.Run(() =>
                {
                    return(GetNewDataSource(cancellationToken, new Progress <string>(SetOverlayLabel)));
                }, cancellationToken);

                if (newDataSource == null)
                {
                    _messageBoxProvider.ShowInformation(this, $"Test plan / test suite with ID {GetTestSuiteID()} was not found", "No data found");
                    return;
                }

                _testPlanForReport  = newDataSource;
                treeList.DataSource = _testPlanForReport;
                treeList.ExpandToLevel(0);
            }
            catch (OperationCanceledException)
            {
                _overlayFormManager.CloseOverlayForm(overlayHandle);
                _messageBoxProvider.ShowInformation(this, "Operation has been cancelled", "Operation cancelled");
                return;
            }
            catch (Exception ex)
            {
                _overlayFormManager.CloseOverlayForm(overlayHandle);
                _messageBoxProvider.ShowErrorMessage(this, ex.Message, "Error");
                return;
            }
            finally
            {
                _overlayFormManager.CloseOverlayForm(overlayHandle);
                tokenSource?.Dispose();

                this.tokenSource = null;
            }
        }
예제 #20
0
        public void ShowLoading()
        {
            bool   useFadeIn             = true;
            bool   useFadeOut            = true;
            Color  backColor             = Color.Black;
            Color  foreColor             = Color.Black;
            double opacity               = 0.5;
            Image  waitImage             = Image.FromFile("../../Images/loading.png");
            OverlayWindowOptions options = new OverlayWindowOptions(
                useFadeIn,
                useFadeOut,
                backColor,
                foreColor,
                opacity,
                waitImage);

            handle = ShowProgressPanel(options);
        }
 private void btnSaveAsCMTX_ItemClick(object sender, ItemClickEventArgs e)
 {
     using (var dlg = new SaveFileDialog()
     {
         Filter = "e-Sword Commentary file (*.cmtx)|*.cmtx"
     }) {
         if (dlg.ShowDialog() == DialogResult.OK)
         {
             IOverlaySplashScreenHandle handle = null;
             try {
                 handle = SplashScreenManager.ShowOverlayForm(this);
                 new eSwordExportHelper().ExportCmtx(Commentary, dlg.FileName);
             }
             finally {
                 SplashScreenManager.CloseOverlayForm(handle);
             }
         }
     }
 }
        public async Task BindData()
        {
            try
            {
                _handle = OverlayScreenForm.ShowProgressPanel(this);
                var data = await _api.GetBooks(false);

                foreach (var book in data)
                {
                    book.Photo = Image.FromFile(book.BookPhoto);
                }

                Gc_Data.DataSource = data;
            }
            catch (Exception ex)
            {
                PopupProvider.Error("获取数据异常!", ex);
            }
            finally
            {
                OverlayScreenForm.CloseProgressPanel(_handle);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Nbc_Menu_LinkClicked(object sender, NavBarLinkEventArgs e)
        {
            var      formName = e.Link.Item.Tag.ToString();
            XtraForm form;

            switch (formName)
            {
            case "101":
                form             = new FrmBorrow();
                GlobalCache.Type = typeof(FrmBorrow);

                #region Test

                //ribbon.Pages[0].Groups[0].ItemLinks.Add(new BarButtonItem() {
                //Caption = "test", ImageOptions = { Image = Image.FromFile(@"C:\Users\ASUS\Pictures\ICON\Exit.png") }
                //});

                #endregion

                break;

            case "102":
                form             = new FrmReservation();
                GlobalCache.Type = typeof(FrmReservation);
                break;

            case "103":
                form             = new FrmBorrowInfos();
                GlobalCache.Type = typeof(FrmBorrowInfos);
                break;

            case "104":
                form             = new FrmReservationInfos();
                GlobalCache.Type = typeof(FrmReservationInfos);
                break;

            case "105":
                form             = new FrmFinePayments();
                GlobalCache.Type = typeof(FrmFinePayments);
                break;

            case "106":
                form             = new FrmBooks();
                GlobalCache.Type = typeof(FrmBooks);
                break;

            case "201":
                form             = new FrmBooksInfo();
                GlobalCache.Type = typeof(FrmBooksInfo);
                break;

            case "202":
                form             = new FrmBooks();
                GlobalCache.Type = typeof(FrmBooks);
                break;

            case "401":
                form             = new FrmEmployees();
                GlobalCache.Type = typeof(FrmEmployees);
                break;

            case "301":
                form             = new FrmStudents();
                GlobalCache.Type = typeof(FrmStudents);
                break;

            case "501":
                form             = new FrmAdmins();
                GlobalCache.Type = typeof(FrmAdmins);
                break;

            case "502":
                form             = new FrmEmpower();
                GlobalCache.Type = typeof(FrmEmpower);
                break;

            case "601":
                form             = new FrmPublishingHouse();
                GlobalCache.Type = typeof(FrmPublishingHouse);
                break;

            case "602":
                form             = new FrmBookCategory();
                GlobalCache.Type = typeof(FrmBookCategory);
                break;

            default:
                form = new XtraForm();
                break;
            }

            if (CheckIsExist(form.Text))
            {
                return;
            }
            form.MdiParent = this;
            _handle        = OverlayScreenForm.ShowProgressPanel(this);
            form.Show();
            OverlayScreenForm.CloseProgressPanel(_handle);
        }
예제 #24
0
 public static void HideLoader(this Control handledControl, IOverlaySplashScreenHandle overlayHandle)
 => handledControl.Invoke((MethodInvoker) delegate { SplashScreenManager.CloseOverlayForm(overlayHandle); });
        private void biSimulation_ItemClick(object sender, ItemClickEventArgs e)
        {
            Stopped = false;
            StrategyBase strategy = (StrategyBase)this.gridView1.GetFocusedRow();

            if (strategy == null)
            {
                XtraMessageBox.Show("No strategy selected.");
                return;
            }
            if (!strategy.SupportSimulation)
            {
                XtraMessageBox.Show("This strategy does not support simulation.");
                return;
            }

            StrategiesManager manager = new StrategiesManager();

            manager.FileName = "SimulationStrategiesManager.xml";
            StrategyBase cloned = strategy.Clone();

            cloned.DemoMode = true;
            manager.Strategies.Add(cloned);

            this.siStatus.Caption = "<b>Loading data from exchanges...</b>";
            IOverlaySplashScreenHandle handle = SplashScreenManager.ShowOverlayForm(gridControl1);

            Application.DoEvents();
            SimulationStrategyDataProvider dataProvider = new SimulationStrategyDataProvider();

            dataProvider.DownloadProgressChanged += OnSimulationProviderDownloadProgressChanged;

            this.beSimulationProgress.EditValue  = 0;
            this.beSimulationProgress.Visibility = BarItemVisibility.Always;

            manager.Initialize(dataProvider);
            dataProvider.DownloadProgressChanged -= OnSimulationProviderDownloadProgressChanged;
            if (!manager.Start())
            {
                XtraMessageBox.Show("Error starting simulation! Please check log messages");
                return;
            }
            this.beSimulationProgress.EditValue  = 0;
            this.beSimulationProgress.Visibility = BarItemVisibility.Always;
            this.siStatus.Caption = "<b>Running simulation...</b>";
            Application.DoEvents();

            Stopwatch timer = new Stopwatch();

            timer.Start();
            int    elapsedSeconds = 0;
            double progress       = 0;

            while (manager.Running)
            {
                this.beSimulationProgress.EditValue = (int)(dataProvider.SimulationProgress * this.repositoryItemProgressBar1.Maximum);
                if (timer.ElapsedMilliseconds / 1000 > elapsedSeconds)
                {
                    elapsedSeconds        = (int)(timer.ElapsedMilliseconds / 1000);
                    this.siStatus.Caption = string.Format("<b>Running simulation... {0} sec</b>", elapsedSeconds);
                    Application.DoEvents();
                }
                if ((dataProvider.SimulationProgress - progress) >= 0.05)
                {
                    progress = dataProvider.SimulationProgress;
                    Application.DoEvents();
                }
            }
            this.beSimulationProgress.Visibility = BarItemVisibility.Never;
            SplashScreenManager.CloseOverlayForm(handle);
            manager.Save();
            this.siStatus.Caption = "<b>Simulation done.</b>";
            Application.DoEvents();
            //this.toastNotificationsManager1.ShowNotification("404ef86f-183c-4fea-960b-86f54e52ea76");
            StrategyConfigurationManager.Default.ShowData(cloned);
        }
        private void ImportWordFile(string filePath)
        {
            IOverlaySplashScreenHandle handle = null;

            try {
                handle = SplashScreenManager.ShowOverlayForm(this);
                using (var editor = new RichEditControl()) {
                    editor.LoadDocument(filePath);
                    var fileName = Path.GetFileNameWithoutExtension(filePath);
                    var book     = new XPQuery <Book>(uow).Where(x => x.Abbreviation == fileName).FirstOrDefault();
                    if (book == null)
                    {
                        XtraMessageBox.Show("File name not match!");
                        return;
                    }

                    var rangeStartIndex = -1;
                    var rangeEndIndex   = -1;

                    var chapter  = 0;
                    var chapter2 = 0;

                    var verseRanges = new List <VerseRange>();
                    for (int i = 0; i < 5; i++)
                    {
                        verseRanges.Add(new VerseRange()
                        {
                            VerseBegin = -1,
                            VerseEnd   = -1
                        });
                    }

                    Commentary.Items.Where(x => x.Book == book.NumberOfBook).ToList().ForEach(x => { x.Delete(); });
                    uow.CommitChanges();

                    foreach (var par in editor.Document.Paragraphs)
                    {
                        var text = editor.Document.GetText(par.Range).Trim();
                        if (par.Style != null)
                        {
                            if (!String.IsNullOrEmpty(text) && par.Style.Name == "heading 1")
                            {
                                if (text.ToLower().StartsWith("wstęp "))
                                {
                                    rangeStartIndex = par.Range.Start.ToInt();
                                }
                                else if (rangeStartIndex != -1 && (text.ToLower().StartsWith("list ") || text.ToLower().StartsWith("ewangelia ") || text.ToLower().StartsWith("dzieje ")))
                                {
                                    rangeEndIndex = par.Range.Start.ToInt() - 1;
                                    Commentary.Items.Add(new CommentaryItem(uow)
                                    {
                                        Book         = book.NumberOfBook,
                                        ChapterBegin = 0,
                                        ChapterEnd   = 0,
                                        VerseBegin   = 0,
                                        VerseEnd     = 0,
                                        Comments     = editor.Document.GetRtfText(editor.Document.CreateRange(rangeStartIndex, rangeEndIndex - rangeStartIndex))
                                    });
                                    rangeStartIndex = -1;
                                    rangeEndIndex   = -1;
                                }
                            }
                            else if (!String.IsNullOrEmpty(text) && par.Style.Name == "heading 2")
                            {
                                if (rangeStartIndex == -1)
                                {
                                    par.Range.Start.ToInt();
                                }
                            }
                            else if (!String.IsNullOrEmpty(text) && par.Style.Name == "heading 3")
                            {
                                var patternBase  = @"\((?<chapter>[0-9]+)(\,)?";
                                var patternRange = @"((?<verseBegin{0}>[0-9]+)([a-z])?(\-(?<verseEnd{0}>[0-9]+)([a-z])?)?(\.)?)";

                                var pattern = patternBase;
                                for (int i = 0; i < 5; i++)
                                {
                                    pattern += String.Format(patternRange, i);
                                    pattern += "?";
                                }
                                pattern += @"\)";

                                if (text.Contains(";"))
                                {
                                    pattern = @"\((?<chapter1>[0-9]+)\,(?<verse1>[0-9]+)\;(?<chapter2>[0-9]+)\,(?<verse2>[0-9]+)\)";
                                    if (Regex.IsMatch(text, pattern))
                                    {
                                        var m = Regex.Match(text, pattern);
                                        chapter  = Convert.ToInt32(m.Groups["chapter1"].Value);
                                        chapter2 = Convert.ToInt32(m.Groups["chapter2"].Value);
                                        verseRanges[0].VerseBegin = Convert.ToInt32(m.Groups["verse1"].Value);
                                        verseRanges[0].VerseEnd   = Convert.ToInt32(m.Groups["verse2"].Value);
                                        for (int i = 1; i < 5; i++)
                                        {
                                            verseRanges[i].VerseBegin = -1;
                                            verseRanges[i].VerseEnd   = -1;
                                        }
                                        continue;
                                    }
                                }

                                if (Regex.IsMatch(text, pattern))
                                {
                                    rangeEndIndex = SavePrevious(editor, book, rangeStartIndex, rangeEndIndex, chapter, chapter2, ref verseRanges, par);

                                    var m = Regex.Match(text, pattern);
                                    chapter  = Convert.ToInt32(m.Groups["chapter"].Value);
                                    chapter2 = Convert.ToInt32(m.Groups["chapter"].Value);

                                    for (int i = 0; i < 5; i++)
                                    {
                                        if (m.Groups[$"verseEnd{i}"] != null && m.Groups[$"verseEnd{i}"].Success)
                                        {
                                            verseRanges[i].VerseBegin = Convert.ToInt32(m.Groups[$"verseBegin{i}"].Value);
                                            verseRanges[i].VerseEnd   = Convert.ToInt32(m.Groups[$"verseEnd{i}"].Value);
                                        }
                                        else if (m.Groups[$"verseBegin{i}"] != null && m.Groups[$"verseBegin{i}"].Success)
                                        {
                                            verseRanges[i].VerseBegin = Convert.ToInt32(m.Groups[$"verseBegin{i}"].Value);
                                            verseRanges[i].VerseEnd   = Convert.ToInt32(m.Groups[$"verseBegin{i}"].Value);
                                        }
                                        else if (chapter != 0 && i == 0)
                                        {
                                            verseRanges[i].VerseBegin = 0;
                                            verseRanges[i].VerseEnd   = 0;
                                        }
                                        else
                                        {
                                            verseRanges[i].VerseBegin = -1;
                                            verseRanges[i].VerseEnd   = -1;
                                        }
                                    }

                                    rangeStartIndex = par.Range.Start.ToInt();
                                    rangeEndIndex   = -1;
                                }
                                else
                                {
                                    if (rangeStartIndex == -1)
                                    {
                                        par.Range.Start.ToInt();
                                    }
                                }
                            }
                        }

                        if (par == editor.Document.Paragraphs.Last())
                        {
                            rangeEndIndex = SavePrevious(editor, book, rangeStartIndex, rangeEndIndex, chapter, chapter2, ref verseRanges, par);
                        }
                    }

                    uow.CommitChanges();
                    Commentary = new XPQuery <Commentary>(uow).Where(x => x.Oid == Commentary.Oid).FirstOrDefault();
                    LoadBooks();
                }
            }
            finally {
                SplashScreenManager.CloseOverlayForm(handle);
            }
        }
        private async void GenerateReport_ItemClick(object sender, ItemClickEventArgs e)
        {
            FileInfo document = null;
            IOverlaySplashScreenHandle overlayHandle = null;

            tokenSource       = new CancellationTokenSource();
            cancellationToken = tokenSource.Token;

            try
            {
                var template = GetTemplateFileInfo();
                //if(template == null)
                //{
                //	_messageBoxProvider.ShowInformation(this, "Template was not defined by user. Default template will be used.", "Custom template not defined");
                //}
                overlayHandle = _overlayFormManager.ShowOverlayForm(this, OnCancelButtonClick);
                SetOverlayLabel("Loading data ...");
                var builder = await Task.Run(() => _docXBuilderFactory.GetDocXBuilder(DocXBuilderType.DocX), cancellationToken);

                SetOverlayLabel("Generating report ...");
                var progress = new Progress <string>(SetOverlayLabel);
                document = await Task.Run(() => builder.CreateDocument(template, GetDataSourceForReport(cancellationToken, progress), cancellationToken, progress), cancellationToken);
            }
            catch (OperationCanceledException)
            {
                _overlayFormManager.CloseOverlayForm(overlayHandle);
                _messageBoxProvider.ShowInformation(this, "Operation has been cancelled", "Operation cancelled");
                return;
            }
            catch (Exception ex)
            {
                _overlayFormManager.CloseOverlayForm(overlayHandle);
                _messageBoxProvider.ShowErrorMessage(this, ex.Message, "Error");
                return;
            }
            finally
            {
                _overlayFormManager.CloseOverlayForm(overlayHandle);
                if (tokenSource != null)
                {
                    tokenSource.Dispose();
                }

                this.tokenSource = null;
            }

            if (!document?.Exists ?? true)
            {
                _messageBoxProvider.ShowErrorMessage(this, "Document was not correctly created", "Error");
                return;
            }

            var openFileResult = _messageBoxProvider.ShowQuestion(this, "Do you want to open document?", "Open document");

            if (openFileResult == DialogResult.Yes)
            {
                Process.Start(document.FullName);
            }
            else if (openFileResult == DialogResult.No)
            {
                _messageBoxProvider.ShowInformation(this, $"File is saved on location: {document.FullName}", "File location");
            }
        }
        private async Task BindBookInfo()
        {
            try
            {
                var searchPara = Te_SearchPara.Text.Trim();
                //获取模糊查询书籍信息
                _handle = OverlayScreenForm.ShowProgressPanel(this);
                var bookInfos = await _bookInfoApi.GetBooksInfo(false);

                bookInfos = bookInfos
                            .Where(m => m.Id.ToString().Contains(searchPara) || m.BookName.Contains(searchPara)).ToList();
                OverlayScreenForm.CloseProgressPanel(_handle);
                if (bookInfos.Count == 0)
                {
                    PopupProvider.Warning("未检索到信息!");
                    return;
                }

                //找到对应的书籍信息的已上架书籍
                var books = new List <Book>();


                foreach (var info in bookInfos)
                {
                    books.AddRange(await _bookApi.GetBooks(new Dictionary <string, object>
                    {
                        { "BookInfoId", info.Id }
                    }));
                }


                foreach (var item in books)
                {
                    switch (item.BookState)
                    {
                    case 0:
                        item.BookStateName = "正常";
                        break;

                    case 1:
                        item.BookStateName = "已借阅";
                        break;

                    case 2:
                        item.BookStateName = "已预约";
                        break;
                    }
                }

                //如果存在多个数据,采用列表显示,操作员自行选择.
                if (books.Count > 1)
                {
                    Gc_Books.DataSource = books;
                    Gc_Books.Visible    = true;
                    Gv_Books.Focus();
                    return;
                }
                if (books.Count == 0)
                {
                    PopupProvider.Warning("未找到可借阅的相应书籍!");
                    return;
                }

                //如果只有一条数据则进行数据赋值展示
                var book        = books.First();
                var reservation = await _reservationApi.GetReservations(new Dictionary <string, object>
                {
                    { "BookId", book.Id },
                    { "IsRemove", false },
                    { "StudentId", Te_StudentId.Text }
                });

                if (reservation.Count <= 0 && book.BookStateName.Equals("已预约"))
                {
                    PopupProvider.Warning($"{book.BookStateName}书籍不可借阅!");
                    return;
                }
                if (book.BookStateName.Equals("已借阅"))
                {
                    PopupProvider.Warning($"{book.BookStateName}书籍不可借阅!");
                    return;
                }
                Te_BookName.Text         = book.BookName;
                Te_Author.Text           = book.Author;
                Te_ReleaseTime.EditValue = book.ReleaseDate;
                Te_PublishingHouse.Text  = book.PublishingName;
                Te_Category.Text         = book.CategoryName;
                Pe_BookPhoto.Image       = Image.FromFile(book.BookPhoto);
                Te_BookId.Text           = book.Id.ToString();
                Te_ISBN.Text             = book.ISBN;
                Te_ReleaseTime.Text      = book.ReleaseDate.ToString("yyyy-MM-dd");
                Te_Price.Text            = book.Price.ToString("F");
            }
            catch (Exception e)
            {
                PopupProvider.Error("获取数据信息异常!", e);
            }
        }