private void menuItemOpen_Click(object sender, EventArgs e) { #if EDITION_LIGHT openFileDialog.Filter = "Отчеты|*"+ApprasialDocumentExtension; openFileDialog.Title = "Открыть файл отчета"; #else openFileDialog.Filter = "Сценарии|*" + ScenarioDocumentExtension + "|Отчеты|*" + ApprasialDocumentExtension; #endif #if DEBUG && USE_TDISK openFileDialog.InitialDirectory = @"T:\"; #endif if (openFileDialog.ShowDialog(this) != DialogResult.OK) return; var file = new FileInfo(openFileDialog.FileName); // already open? foreach (var form in MdiChildren) if (form is Scenarion) { if (new FileInfo(((Scenarion) form).Scenario.Vault.Uri).FullName != file.FullName) continue; ActivateMdiChild(form); form.Activate(); return; } if (file.Extension == ScenarioDocumentExtension) { var cwd = new CancellableWorkerDialog { Information = "Производится загрузка файла сценария. Продолжительность этого процесса зависит от размера самого файла и количества ветвей дерева сценария, хранимых в нем.\n\nНа медленных компьютерах эта процедура может занять некоторое время.", Cancellable = false, UnknownProgress = true, }; cwd.Worker = x => OpenScenarionWindow(string.Format("Сценарий \"{0}\"", file.Name), new ScenarioDepot {Vault = VaultApi.OpenZip(file.FullName)}); if (cwd.ShowDialog(this) == DialogResult.Abort) return; InWork = true; } if (file.Extension == ApprasialDocumentExtension) { var cwd = new CancellableWorkerDialog { Information = "Производится загрузка файла отчета. Продолжительность этого процесса зависит от размера самого файла и количества ветвей дерева сценария, хранимых в нем.\n\nНа медленных компьютерах эта процедура может занять некоторое время.", Cancellable = false, UnknownProgress = true, }; cwd.Worker = x => OpenScenarionWindow(string.Format("Отчет \"{0}\"", file.Name), new ScenarioDepot {Vault = VaultApi.OpenZip(file.FullName)}); if (cwd.ShowDialog(this) == DialogResult.Abort) return; InWork = true; } }
private void menuItemServiceDocumentConverter_Click(object sender, EventArgs e) { openScenarioDialog.Title = "Выберите сценарий, созданный в предыдущей версии системы"; openScenarioDialog.Filter = "Сценарии предыдущих версий|*.scenario"; if (openScenarioDialog.ShowDialog(this) != DialogResult.OK) return; var scenario = new FileInfo(openScenarioDialog.FileName); var nameFrom = scenario.FullName; if (!nameFrom.EndsWith(".scenario")) nameFrom += ".scenario"; var nameTo = Path.Combine(scenario.DirectoryName, scenario.Name + ScenarioDocumentExtension); if (!nameTo.EndsWith(ScenarioDocumentExtension)) nameTo += ScenarioDocumentExtension; var cwd = new CancellableWorkerDialog { Information = "Производится конвертация файла сценария, созданного в более ранней версии системы, в наиболее оптимальный формат. Продолжительность этого процесса зависит от количества ветвей дерева сценария.\n\nНа медленных компьютерах эта процедура может занять продолжительное время.", Cancellable = false, UnknownProgress = true, }; cwd.Worker = x => { x.UpdateProgress(0, "Изучение файла сценария"); var prev = new ScenarioDepot {Vault = VaultApi.OpenZip(nameFrom)}; var curr = new ScenarioDepot {Vault = VaultApi.OpenZip(nameTo)}; var a = prev.Cast<ScenarioNode>(); var b = curr.Cast<ScenarioNode>(); x.UpdateProgress(0, "Конвертация Общих Характеристик"); MergeNodes(a.ElementAt(0), b.ElementAt(0)); x.UpdateProgress(0, "Конвертация Характеристик Объекта"); MergeNodes(a.ElementAt(1), b.ElementAt(1)); x.UpdateProgress(99, "Создание нового документа"); curr.Save(); x.UpdateProgress(0, "Почти все готово"); }; if (cwd.ShowDialog(this) != DialogResult.OK) return; }
private void menuItemSave_Click(object sender, EventArgs e) { var scenarion = ActiveMdiChild as Scenarion; if (scenarion == null) return; #if !EDITION_LIGHT // if template is being edited it's required to sync the current content with its owner before saving if (scenarion.treeScenario.SelectedNode != null) scenarion.SelectedNode.Template = scenarion.templateEditor.InnerHtml; #endif while (true) { try { var cwd = new CancellableWorkerDialog { Information = "Производится сохранение и оптимизация файла для ускорения расчетов. Продолжительность этого процесса зависит от размера самого файла и количества ветвей дерева сценария, хранимых в нем.\n\nНа медленных компьютерах эта процедура может занять продолжительное время.", Cancellable = false, UnknownProgress = true, }; cwd.Worker = x => scenarion.Scenario.Save(); if (cwd.ShowDialog(this) == DialogResult.Abort) throw cwd.Error; break; } catch (IOException oops) { if (MessageBox.Show(this, "Ошибка: " + oops.Message, "Ошибка ввода-вывода", MessageBoxButtons.RetryCancel, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) != DialogResult.Retry) return; } catch { return; } } #if !EDITION_LIGHT scenarion.apprasialX.DefineModel(scenarion.Scenario); //scenarion.appraisalOne.ScenarioVault = scenarion.Scenario.Vault; #endif }
private void menuItemNewAppraisal_Click(object sender, EventArgs e) { openScenarioDialog.Title = "Выберите сценарий для создаваемого отчета"; openScenarioDialog.Filter = "Сценарии|*" + ScenarioDocumentExtension; #if DEBUG && USE_TDISK openScenarioDialog.InitialDirectory = @"T:\"; #endif if (openScenarioDialog.ShowDialog(this) != DialogResult.OK) return; saveAsDialog.Title = "Введите имя файла отчета"; saveAsDialog.Filter = "Отчеты|*" + ApprasialDocumentExtension; #if DEBUG && USE_TDISK saveAsDialog.InitialDirectory = @"T:\"; #endif if (saveAsDialog.ShowDialog(this) != DialogResult.OK) return; var report = new FileInfo(saveAsDialog.FileName); if (report.Exists) report.Delete(); var nameTo = report.FullName; if (!nameTo.EndsWith(ApprasialDocumentExtension)) nameTo += ApprasialDocumentExtension; var scenario = new FileInfo(openScenarioDialog.FileName); var nameFrom = scenario.FullName; if (!nameFrom.EndsWith(ScenarioDocumentExtension)) nameFrom += ScenarioDocumentExtension; var cwd = new CancellableWorkerDialog { Information = "Производится создание файла отчета, интеграция дерева сценария и предварительная оптимизация плана расчета. Продолжительность этого процесса зависит от количества ветвей дерева сценария.\n\nНа медленных компьютерах эта процедура может занять продолжительное время.", Cancellable = false, UnknownProgress = true, }; cwd.Worker = x => { x.UpdateProgress(0, "Создание файла отчета"); File.Copy(nameFrom, nameTo); x.UpdateProgress(0, "Интеграция дерева сценариев"); var scenarioDepot = new ScenarioDepot {Vault = VaultApi.OpenZip(nameTo),}; x.UpdateProgress(0, "Оптимизация плана расчета"); scenarioDepot.Save(); x.UpdateProgress(0, "Почти все готово"); OpenScenarionWindow(nameTo, scenarioDepot); }; if (cwd.ShowDialog(this) != DialogResult.OK) return; InWork = true; }
private void buttonGenerate_Click(object sender, EventArgs e) { if (Scenario == null) return; if (CheckedIds == null) return; buttonGenerate.Visible = false; buttonExport.Visible = false; var levelage = new Levelage(); var mainBuffer = new StringBuilder(300*1024); var appendinxBuffer = new StringBuilder(200*1024); var cwd = new CancellableWorkerDialog { Information = "Производится генерация документа, представляющего собой типовой отчет об оценке недвижимости. \n\nВ генерируемый документ попадут только выбранные ветви дерева сценария. Продолжительность данной процедуры зависит от количества выбранных ветвей дерева сценария.", }; cwd.Worker = x => { x.UpdateProgress(0, "Обработка выбранных узлов сценария"); var nodes = from node in Scenario.Vault.GetBranchesRecursive() let sn = new ScenarioNode(node) where CheckedIds.Contains(node.Id) && !string.IsNullOrEmpty(sn.Template) orderby sn.SortingWeight select new {branch = sn, sn.Name}; var total = 0; if ((total = nodes.Count()) == 0) return; var marker = 0; //#warning Review this: eval sessions now lock the vault for reading using (var repo = RepositoryEditor.Repository()) using (_evalSession2 = new Esath.Eval.Ver2.EvalSession(Scenario.Vault, repo, CheckedIds)) { foreach (var n in nodes) { x.UpdateProgress(++marker*99/total, n.Name); if (x.CancelPending) return; var source = Regex.Replace(n.branch.Template ?? "", @"<SPAN[^>]+vpath\s*=\s*""([^""]+)""[^>]*>[^<]+</SPAN>", vpathEvaluator, RegexOptions.Compiled); //var source = Regex.Replace(n.branch.Template ?? "", StartUp.VFIELD_PATTERN, vpathEvaluator, RegexOptions.Compiled); var title = ""; if (n.branch.Title != "") { title = n.branch.Title; switch (n.branch.NodeType) { case ScenarioNodeType.Topic: levelage.Enter(1); title = string.Format("<hr><h{1}>{2} {0}</h{1}>", title, "1", levelage); break; case ScenarioNodeType.Subtopic2: levelage.Enter(2); title = string.Format("<hr><h{1}>{2} {0}</h{1}>", title, "2", levelage); break; case ScenarioNodeType.Subtopic3: levelage.Enter(3); title = string.Format("<hr><h{1}>{2} {0}</h{1}>", title, "3", levelage); break; case ScenarioNodeType.Subtopic4: levelage.Enter(4); title = string.Format("<hr><h{1}>{2} {0}</h{1}>", title, "4", levelage); break; case ScenarioNodeType.Subtopic5: levelage.Enter(5); title = string.Format("<hr><h{1}>{2} {0}</h{1}>", title, "5", levelage); break; default: break; } } source = Regex.Replace(source, @"<table\s", match => string.Format(@"<div style='text-align:right'>Таблица {0}</div><table ", levelage.AddTable()), RegexOptions.Compiled | RegexOptions.IgnoreCase); if (title != "") source = title + source; if (n.branch.IsAppendix) appendinxBuffer.Append(source); else mainBuffer.Append(source); } x.UpdateProgress(100, "Почти все готово"); var main = mainBuffer.ToString().Replace("<hr>", "$$$newline$$$"); main = main.Replace("<HR>", "$$$newline$$$"); if (main.StartsWith("$$$newline$$$")) main = main.Substring(13); var appendix = appendinxBuffer.ToString().Replace("<hr>", "$$$newline$$$"); appendix = appendix.Replace("<HR>", "$$$newline$$$"); if (appendix.StartsWith("$$$newline$$$")) appendix = appendix.Substring(13); MainSource = "<html><head>" + Styles + "</head><body>" + main + "</body></html>"; AppendixSource = "<html><head>" + Styles + "</head><body>" + appendix + "</body></html>"; } }; if (cwd.ShowDialog(this) != DialogResult.OK) { buttonGenerate.Visible = true; buttonExport.Visible = false; return; } webBrowser.DocumentText = "<html><head>" + Styles + "</head><body>" + mainBuffer + appendinxBuffer + "</body></html>"; Application.DoEvents(); buttonGenerate.Visible = false; buttonExport.Visible = true; }
private void buttonExport_Click(object sender, EventArgs e) { var cwd = new CancellableWorkerDialog { Information = "Производится экспорт документа, представляющего собой типовой отчет об оценке недвижимости, в Microsoft Word.\n\nРезультирующий документ будет открыт в новом окне Microsoft Word.", Cancellable = false, }; cwd.Worker = x => { x.UpdateProgress(10, "Инициализация Microsoft Word"); var w = new Word() as IWord; if (w == null) { MessageBox.Show(this, "Не удается инициализировать Microsoft Word.\nУбедитесь, что он установлен.", "Модуль Экспорта Данных", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } Scenario.LastReportId = Guid.NewGuid(); //var infileMain = new FileInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), Guid.NewGuid() + ".main.html")); //var infileAppendix = new FileInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), Guid.NewGuid() + ".apendix.html")); var outfile = new FileInfo(Path.Combine( #if DEBUG && USE_TDISK @"T:\" #else Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) #endif , Scenario.LastReportId + ".doc")); x.UpdateProgress(20, "Экспорт отчета"); var infileMain = new TempHtmlFile(MainSource); x.UpdateProgress(40, "Экспорт приложений"); var infileAppendix = new TempHtmlFile(AppendixSource); //using (var writer = new StreamWriter(File.OpenWrite(infileMain.FullName), Encoding.GetEncoding(0x4e3)))writer.Write(MainSource); //using (var writer = new StreamWriter(File.OpenWrite(infileAppendix.FullName), Encoding.GetEncoding(0x4e3)))writer.Write(AppendixSource); var doc = w.Documents.Add(); doc.Range().InsertFile(infileMain.FullName); infileMain.Delete(); var s = doc.Sections.Add(); s.PageSetup.Orientation = PageOrientation.Landscape; s.Range.InsertFile(infileAppendix.FullName); infileAppendix.Delete(); x.UpdateProgress(60, "Форматирование документа"); doc.Range().Find.Execute("$$$newline$$$", false, false, false, false, false, false, false, null, "^m", 2); doc.SaveAs(outfile.FullName); x.UpdateProgress(90, "Почти все готово"); w.Visible = true; Marshal.FinalReleaseComObject(s); Marshal.FinalReleaseComObject(doc); Marshal.FinalReleaseComObject(w); GC.Collect(); GC.WaitForPendingFinalizers(); }; cwd.ShowDialog(this); }