Пример #1
0
		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;
			}
		}
Пример #2
0
		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;
		}
Пример #3
0
		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
		}
Пример #4
0
		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;
		}
Пример #5
0
		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;
		}
Пример #6
0
		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);
		}