// Acttion, ������������ ������� �� ���������� ������� private void ShowChartAction_Execute(object sender, EventArgs e) { Plant CurrentPlant; ReportPart CurrentPart; DataRow ChartRow; BookColumn ChartColumn; GetCurrentCellInfo(out CurrentPlant, out CurrentPart, out ChartRow, out ChartColumn); if (ChartColumn == null) { MessageBox.Show("���������� ������� ������� � ������� ��� ��������� ��������", "�������� ��������", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (ChartRow == null || CurrentPart == null) { MessageBox.Show("���������� ������� ������ � ��������� ��� ��������� ��������", "�������� ��������", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } string ModuleNorm = FM[CurrentPart.NormRow, ChartColumn.column1]; string ModuleName = ""; string CurrentFieldIndex = CurrentPart.FieldName(ChartColumn.column1).Split('*')[1]; object CurrentLowerNorm = ChartRow["LowerLimit*" + CurrentFieldIndex]; object CurrentUpperNorm = ChartRow["UpperLimit*" + CurrentFieldIndex]; List<Plant> PlantsList = new List<Plant>(); foreach (ReportPart part in Parts) if (part.Data != null && part.Data.Rows.Count > 0) { Plant p = plants.FindPlant(Convert.ToInt32(part.Data[0, "plantid"])); if (!PlantsList.Contains(p)) PlantsList.Add(p); } QueryResult[] ChartDatas = new QueryResult[PlantsList.Count]; DataRow ModuleRow; int i = 0; foreach (ReportPart part in Parts) { if (part.Data != null && part.Data.Rows.Count > 0) { string FieldName = part.FieldName(ChartColumn.column1); if (FieldName != "") { string[] values = FieldName.Split('*'); int ColumnIndex = Functions.ConvertToInt32(values[1]); ModuleRow = part.Columns.Rows[ColumnIndex]; ModuleName = ModuleRow["TextModule"].ToString(); if (ModuleRow["TestGroup"].ToString().Trim() != "") ModuleName = ModuleRow["TestGroup"].ToString() + ", " + ModuleName; string DateField = "qaodecisiontime"; string CertField = "batchno"; string DataField = "Result*" + ColumnIndex.ToString(); string MinField = "LowerLimit*" + ColumnIndex.ToString(); string MaxField = "UpperLimit*" + ColumnIndex.ToString(); // ���� ����� ���������, �� /*if (ModuleNorm.ToLower() != ModuleRow["ModuleNorm"].ToString().ToLower()) continue;*/ if (CurrentLowerNorm.ToString().ToLower() != part.Data[0, MinField].ToString().ToLower() || CurrentUpperNorm.ToString().ToLower() != part.Data[0, MaxField].ToString().ToLower()) continue; // ��������� ����� �������� ������� QueryResult dt = new QueryResult(part.Data.DefaultView.ToTable(false, DateField, CertField, DataField, MinField, MaxField)); // �������������� �������� dt.Columns[DateField].ColumnName = "Date"; dt.Columns[CertField].ColumnName = "Passport"; dt.Columns[DataField].ColumnName = "Value"; dt.Columns[MinField].ColumnName = "Min"; dt.Columns[MaxField].ColumnName = "Max"; // ���������� ����� �������� dt.AddColumn("PlantName", typeof(string), plants.FindPlant(Convert.ToInt32(part.Data[0, "plantid"])).ShortPlantName); dt.AddColumn("Module", typeof(string), ModuleName); dt.AddColumn("Norm", typeof(string), ModuleRow["ModuleNorm"]); if (Functions.IsNumber(FM[part.RowAvg, ChartColumn.column1])) dt.AddColumn("Average", typeof(double), FM[part.RowAvg, ChartColumn.column1]); i = PlantsList.IndexOf(plants.FindPlant(Convert.ToInt32(part.Data[0, "plantid"]))); if (ChartDatas[i] == null) ChartDatas[i] = new QueryResult(dt); else { // ���� � ������ ������ ���� �������� � ����������� �������, �� �� ����� ���������� ChartDatas[i].Merge(dt); // �������� ����������������� �������� ����� ����������� ������ if (ChartDatas[i].Columns.Contains("Average")) { object newavg = ChartDatas[i].Compute("avg(Average)", ""); foreach (DataRow row in ChartDatas[i].Rows) row["Average"] = newavg; } } } } if (ChartDatas[i] != null) // ��������� ������ ����� ������������ (����� ����������, ���� ���� ����������� ������ ���������) { DataView dv = ChartDatas[i].DefaultView; dv.Sort = "Date, Passport"; ChartDatas[i] = new QueryResult(dv.ToTable()); } } //Array.Resize<QueryResult>(ref ChartDatas, 5); ChartForm form = new ChartForm(); form.Text = string.Format("{0}. {1}, {2}", (ProductCombo.SelectedItem as DataRowView)["Description"], ModuleName, ModuleNorm); form.TitleLabel.Text = form.Text; form.Initialize(ChartDatas); form.WindowState = FormWindowState.Maximized; form.Show(); }
public void Show(OracleConnection connection, PassportInfo info) { if (Functions.IsNull(info)) return; Splash.ProgressInit(2); try { string HostName = Dns.GetHostName(); string IPAddress = Functions.GetCurrentIPAddress(); string TemporaryFileName; // запрос для получения вида паспорта (pdf файл) Splash.Message("Получение вида паспорта..."); MemoryStream PassportStream = GetPassport(connection, info.PlantID, info.OrderID, info.LanguageID); Splash.ProgressAdd(); if (!Functions.IsNull(PassportStream)) // нашли вид паспорта { Splash.ProgressMaximum(4); Splash.Message("Маркировка паспорта..."); PassportStream = MarkPassport(PassportStream); // маркируем документ - добавляем слова "Копия" и разную информацию if (Functions.IsNull(PassportStream)) { MessageBox.Show("Ошибка при маркировке паспорта. Паспорт без маркировке 'COPY' выдать нельзя", "Просмотр паспорта", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } TemporaryFileName = GetTempFilePath(".pdf"); FileStream FS = new FileStream(TemporaryFileName, FileMode.Create, FileAccess.Write); PassportStream.WriteTo(FS); FS.Close(); Splash.ProgressAdd(); } else { Splash.ProgressMaximum(6); // запрос для получения данных паспорта Splash.Message("Получение данных паспорта..."); OracleCommand DataCommand = OracleProc.Execute(connection, "DataAccessPKG.GetPassportData", new object[] { info.PlantID, info.OrderID, info.LanguageID, null }); QueryResult Data = new QueryResult(DataCommand.Parameters["rc"].Value); Splash.ProgressAdd(); Splash.Message("Загрузка шаблона паспорта..."); MemoryStream TemplateStream = GetPassportTemplate(connection, info.PlantID, info.ProductID, info.LanguageID); Splash.ProgressAdd(); Splash.Message("Формирование документа..."); //PassportTemplate CurrentTemplate = plant.PassportTemplates.FindLanguage(LanguageID); if (TemplateStream == null) { MessageBox.Show(string.Format("Отсутствует шаблон паспорта продукта {0} (ID предприятия: {1}) для языка {2}. Обратитесь в тех.поддержку за помощью", info.ProductID, info.PlantID, info.LanguageID), "Просмотр паспорта", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (Data.Rows.Count == 0) { MessageBox.Show("Отсутствуют данные по выбранному паспорту. Попробуйте обновить данные за текущий период", "Просмотр паспорта", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } MSWordReport word = new MSWordReport(TemplateStream); QueryResult PassportData = FormatPassportData(Data); word.Execute(PassportData); // добавляем информацию о пользователе Data.AddColumn("UserInfo", typeof(string), string.Format("Пользователь: {0} ({1}). Компьютер: {2} ({3})", Program.StartForm.current.User.name, Common.PZUsers.Current.WindowsDomainName(), HostName, IPAddress)); Data.AddColumn("CreationDate", typeof(DateTime), DateTime.Now); word.Document.MailMerge.Execute(Data.Rows[0]); word.PrepareToSave(); word.Document.Protect(Aspose.Words.ProtectionType.ReadOnly); // вставляем знак "Копия" Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(word.Document); builder.MoveToHeaderFooter(Aspose.Words.HeaderFooterType.HeaderPrimary); System.Drawing.Image image = System.Drawing.Image.FromFile(System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, "Images\\Exclamation.gif")); double useablePageWidth = builder.PageSetup.PageWidth - builder.PageSetup.LeftMargin - builder.PageSetup.RightMargin; double useablePageHeight = builder.PageSetup.PageHeight - builder.PageSetup.TopMargin - builder.PageSetup.BottomMargin; const int PointsPerInch = 72; double imageWidth = (image.Width / image.HorizontalResolution) * PointsPerInch; double imageHeight = (image.Height / image.VerticalResolution) * PointsPerInch; double imageLeft = (useablePageWidth - imageWidth) / 2; double imageTop = (useablePageHeight - imageHeight) / 2; builder.InsertImage(image, Aspose.Words.RelativeHorizontalPosition.Margin, imageLeft, Aspose.Words.RelativeVerticalPosition.Margin, imageTop, imageWidth, imageHeight, Aspose.Words.WrapType.None, Aspose.Words.WrapSide.Both, true, null); TemporaryFileName = GetTempFilePath(".doc"); word.Document.Save(TemporaryFileName); Splash.ProgressAdd(); } // логирование паспорта Splash.Message("Запись в журнал операций..."); OracleProc.Execute(connection, "LogPKG.LogPassport", new object[] { info.PlantID, info.CertificateID, info.OrderID, Program.StartForm.current.Program.id, Program.StartForm.current.User.id, HostName, IPAddress, Common.PZUsers.Current.WindowsDomainName() }); connection.Commit(); Splash.ProgressAdd(); Splash.Message(TemporaryFileName.EndsWith(".doc") ? "Запуск Microsoft Word..." : "Запуск Adobe Acrobat Reader..."); //PrintDocumentFromWord(TemporaryFileName); OpenDocument(TemporaryFileName); Splash.ProgressAdd(); } finally { Splash.Close(); } /*System.Diagnostics.Process.Start(TemporaryFileName); Splash.ProgressAdd(); */ }