public void RenderSummary(SummaryDocument summary, ISummaryWriter writer, string baseSummaryFolderPath, out string actualFileName) { _lastRenderedSummary = summary; actualFileName = string.Empty; _realRenderer.RenderSummary(summary, writer, baseSummaryFolderPath, out actualFileName); }
public void RenderSummary(SummaryDocument summary, ISummaryWriter writer, string baseSummaryFolderPath, out string actualFileName) { string hrvSummary = string.Format("{0,8}" + Formatter.DefaultSpacing + "{1,-20} {2}", summary.HrvConclusion.TestId, summary.HrvConclusion.Text, summary.HrvConclusion.Comment); string svmrSummary = string.Format("{0,8}" + Formatter.DefaultSpacing + "{1,-20} {2}", summary.SvmrConclusion.TestId, summary.SvmrConclusion.Text, summary.SvmrConclusion.Comment); string renderedSummary = string.Format(SummaryTextFormat, summary.Employee, summary.CompletionTime.ToString(strings.SummaryText_DateFormat), summary.HostName, hrvSummary, svmrSummary, summary.FinalConclusion.Text); // write out to file var writingParams = new SummaryWritingParameters(); writingParams.baseSummaryFolderPath = baseSummaryFolderPath; writingParams.completionTime = summary.CompletionTime; writingParams.filenameExtension = FilenameExtension; writingParams.hostName = summary.HostName; writingParams.employee = summary.Employee; writer.SaveSummary(writingParams, renderedSummary, out actualFileName); }
public void Smoke_Test_RTF() { ISummaryRenderer renderer = new SummaryRendererRtf(); Assert.AreEqual("rtf", renderer.FilenameExtension.ToLower()); PreShiftHrvConclusion hrvConcl; PreShiftSvmrConclusion svmrConcl; PreShiftFinalConclusion finalConcl; Employee p; PrepareData(out p, out hrvConcl, out svmrConcl, out finalConcl); var summary = new SummaryDocument { Employee = p, CompletionTime = DateTimeOffset.Now, HostName = System.Net.Dns.GetHostName(), HrvConclusion = hrvConcl, SvmrConclusion = svmrConcl, FinalConclusion = finalConcl }; string actualFileName; renderer.RenderSummary(summary, _writer, string.Empty, out actualFileName); Assert.IsNotEmpty(_writer.LastWrittenContent); }
public string RenderSummaryInternal(SummaryDocument summary) { // for how-to see lib\dotnetrtfwriter\demo\program.cs & \demo_psa_summary_rtf\program.cs // Create document by specifying paper size and orientation, and default language. RtfDocument doc = new RtfDocument(PaperSize.A4, PaperOrientation.Portrait, Lcid.TraditionalChinese); // Create fonts and colors for later use FontDescriptor courier = doc.CreateFont("Courier New"); // Don't instantiate RtfTable, RtfParagraph, and RtfImage objects by using // ``new'' keyword. Instead, use add* method in objects derived from // RtfBlockList class. (See Demos.) RtfParagraph svmrParagraph, hrvParagraph, finalParagraph; // Don't instantiate RtfCharFormat by using ``new'' keyword, either. // An addCharFormat method are provided by RtfParagraph objects. RtfCharFormat fmt; AddDefParagraph(doc, courier, courier).SetText(strings.SummaryText_P0_Format_Name + summary.Employee.ToString()); AddDefParagraph(doc, courier, courier).SetText(strings.SummaryText_P1_Format_Date + summary.CompletionTime.ToString(strings.SummaryText_DateFormat)); AddDefParagraph(doc, courier, courier).SetText(strings.SummaryText_P2_Format_Workstation + summary.HostName); AddDefParagraph(doc, courier, courier).SetText(strings.SummaryText_Separator); var hrvHeader = strings.SummaryText_P3_Format_HRV + $"{summary.HrvConclusion.TestId,8}" + Formatter.DefaultSpacing; var hrvStatus = summary.HrvConclusion.Text; var svmrHeader = strings.SummaryText_P4_Format_SVMR + $"{summary.SvmrConclusion.TestId,8}" + Formatter.DefaultSpacing; var svmrStatus = summary.SvmrConclusion.Text; AddDefParagraph(doc, courier, courier, out hrvParagraph).SetText(hrvHeader + hrvStatus); AddDefParagraph(doc, courier, courier, out svmrParagraph).SetText(svmrHeader + svmrStatus); AddDefParagraph(doc, courier, courier).SetText(" "); AddDefParagraph(doc, courier, courier, out finalParagraph).SetText(summary.FinalConclusion.Text); _log.Debug("HRV paragraph: " + hrvParagraph.Text); _log.Debug("SVMR paragraph: " + svmrParagraph.Text); _log.Debug($"hrv_header.Length = {hrvHeader.Length,4} ; hrv_status.Length = {hrvStatus.Length,4}"); _log.Debug($"svmr_header.Length = {svmrHeader.Length,4} ; svmr_status.Length = {svmrStatus.Length,4}"); // format HRV conclusion fmt = hrvParagraph.AddCharFormat(hrvHeader.Length, hrvHeader.Length + hrvStatus.Length - 1); var hrvStatusColor = PsaStatusColorProvider.StatusColor(summary.HrvConclusion.Status); fmt.FgColor = doc.CreateColor(hrvStatusColor); // fmt.FontStyle.addStyle(FontStyleFlag.Bold); // format SVMR conclusion fmt = svmrParagraph.AddCharFormat(svmrHeader.Length, svmrHeader.Length + svmrStatus.Length - 1); var svmrStatusColor = PsaStatusColorProvider.StatusColor(summary.SvmrConclusion.Status); fmt.FgColor = doc.CreateColor(svmrStatusColor); // fmt.FontStyle.addStyle(FontStyleFlag.Bold); // format final conclusion fmt = finalParagraph.AddCharFormat(0, summary.FinalConclusion.Text.Length - 1); var finalStatusColor = PsaStatusColorProvider.StatusColor(summary.FinalConclusion.Status); fmt.FgColor = doc.CreateColor(finalStatusColor); return(doc.Render()); }
public void Smoke_Test_Personal() { SummaryRendererPersonal renderer = new SummaryRendererPersonal(); PreShiftSvmrConclusion svmrConcl; PreShiftHrvConclusion hrvConcl; PreShiftFinalConclusion finalConcl; Employee p; PrepareData(out p, out hrvConcl, out svmrConcl, out finalConcl); var summary = new SummaryDocument { Employee = p, CompletionTime = DateTimeOffset.Now, HostName = System.Net.Dns.GetHostName(), HrvConclusion = hrvConcl, SvmrConclusion = svmrConcl, FinalConclusion = finalConcl }; string content = renderer.RenderSummary(summary); _log.Info(Environment.NewLine + content); Assert.IsNotEmpty(content); }
public async Task <Guid> AddAsync(SummaryDocument doc) { var existing = await TryGetSummaryEntityForInspectionAsync(doc.InspectionId); if (existing != null) { throw ItemAlreadyExistsException.MatchingEntityExists("RusHydroPsaSummary", existing.Id); } if (doc.Id == Guid.Empty) { doc.Id = Guid.NewGuid(); } var shiftAbsIndex = WorkingShiftAbsoluteIndex.GetAbsoluteIndex(doc.CompletionTime.LocalDateTime); var deptReportId = DepartmentShiftReportIdBuilder.BuildReportId(doc.DepartmentId, shiftAbsIndex); var summary = new Summary { Id = doc.Id, DepartmentShiftReportId = deptReportId, ShiftAbsoluteIndex = shiftAbsIndex, BranchOfficeId = doc.BranchOfficeId, CompletionTime = doc.CompletionTime, DepartmentId = doc.DepartmentId, EmployeeId = doc.Employee.Id, InspectionId = doc.InspectionId, SummaryDocument = doc, TenantId = _tenantIdProvider.GetTenantId(), UpdateDate = doc.UpdateDate }; _psaSummaryRepository.Add(summary); await _psaSummaryRepository.SaveChangesAsync(); return(summary.Id); }
private async Task <Report> GetOrInitReportAsync(SummaryDocument summary, WorkingShiftDescriptor descriptor) { { var existingReport = await GetExistingReport(summary.DepartmentId, descriptor.ShiftAbsoluteIndex); if (existingReport != null) { // report found, return it return(existingReport); } } var branch = await _orgStructReference.GetBranchOfficeAsync(summary.BranchOfficeId); var dept = await _orgStructReference.GetDepartmentAsync(summary.DepartmentId); var reportDoc = new PsaReportDocument { BranchOfficeId = summary.BranchOfficeId, BranchOfficeName = branch?.Name, DepartmentId = summary.DepartmentId, DepartmentName = dept?.Name, ShiftDate = descriptor.ShiftDate, ShiftName = descriptor.ShiftName, ShiftNumber = descriptor.ShiftNumber, ShiftStartTime = descriptor.ShiftStartTime, Summaries = new List <SummaryDocument>() }; // create report, as it doesn't exist yet (the summary is the first for the shift) var newReport = new Report { DepartmentId = reportDoc.DepartmentId, BranchOfficeId = reportDoc.BranchOfficeId, ReportDocument = reportDoc, }; try { // save the report _reportRepository.Add(newReport); await _reportRepository.SaveChangesAsync(); } catch (Exception ex) { } // if failed to save, try to get the report again { var existingReport = await GetExistingReport(summary.DepartmentId, descriptor.ShiftAbsoluteIndex); if (existingReport != null) { // report found, return it return(existingReport); } } throw new Exception("Cannot retrieve the existing report for update"); }
private async Task StoreSummary(SummaryDocument summary) { try { await _summaryService.AddAsync(summary); } catch (ItemAlreadyExistsException ex) { _logger.LogInformation($"Summary for inspection '{summary.InspectionId}' already stored in the database with ID='{ex.Id}'."); } await _departmentPsaReportService.AddSummaryAsync(summary); }
public void RenderSummary(SummaryDocument summary, ISummaryWriter writer, string baseFolderName, out string actualFileName) { try { string content = RenderSummaryInternal(summary); var writingParams = new SummaryWritingParameters(); writingParams.baseSummaryFolderPath = baseFolderName; writingParams.completionTime = summary.CompletionTime; writingParams.filenameExtension = FilenameExtension; writingParams.hostName = summary.HostName; writingParams.employee = summary.Employee; writer.SaveSummary(writingParams, content, out actualFileName); } catch (Exception ex) { _log.Error(ex); _log.Error("Cannot save summary in RTF format. See exception information above. Falling back to TXT format."); // cannot save summary in RTF format for some reason // fall back to TXT format // if cannot save in plain text format, show message box // and let user copy the summary to clipboard ISummaryRenderer plainTextRenderer = null; try { plainTextRenderer = new SummaryRendererPlainText(); plainTextRenderer.RenderSummary(summary, writer, baseFolderName, out actualFileName); _log.InfoFormat("Summary successfully written in TXT format to {0}", actualFileName); return; } catch (Exception ex2) { _log.Error("Cannot save summary in TXT format."); _log.Error(ex2); } throw new Exception("Cannot save summary in neither TXT, nor RTF format!"); } }
public async Task AddSummaryAsync(SummaryDocument summary) { return; // чтобы найти сводку по нужной смене, нужно понять: // код отдела // // Абсолютный Индекс Смены (АИС), к которой относится данная сводка. // АИС состоит из десятичной записи даты, к которой относится данная смена // и номера смены var shiftDescriptor = GetShiftDescriptor(summary.CompletionTime.LocalDateTime); var count = 0; do { // получить экземпляр сводки за эту смену из хранилища var report = await GetOrInitReportAsync(summary, shiftDescriptor); // внести изменения try { // положить обновленный отчет в хранилище _reportRepository.Update(report); await _reportRepository.SaveChangesAsync(); return; } catch (Exception ex) { // Видимо если эта сводка уже кем-то модифицируется. // BUG: изучить вопрос ConcurrencyToken и т.п. await Task.Delay(new Random().Next(50)); } // если не получилось, попробовать еще раз // но только если сбой вызван проблемами конкурентного обновления // иначе зависнем // если за 10 попыток не смогли, вернуть 409 / Conflict }while (count++ < 10); }
public string RenderSummary(SummaryDocument summary) { string hrvSummary = string.Format("{0,8}" + Formatter.DefaultSpacing + "{1,-20} {2}", summary.HrvConclusion.TestId, summary.HrvConclusion.Text, string.Empty /*summary.HrvConclusion.Comment*/); string svmrSummary = string.Format("{0,8}" + Formatter.DefaultSpacing + "{1,-20} {2}", summary.SvmrConclusion.TestId, summary.SvmrConclusion.Text, string.Empty /*summary.SvmrConclusion.Comment*/); string renderedSummary = string.Format(SummaryTextFormat, summary.Employee.FullName, summary.Employee.PositionName, summary.CompletionTime.ToString(strings.SummaryText_DateFormat), summary.HostName, hrvSummary, svmrSummary, summary.FinalConclusion.Text); // add final conclusion _log.InfoFormat("Successfully prepared personal summary"); return(renderedSummary); }