Exemple #1
0
 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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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());
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
 }
Exemple #9
0
        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);
        }
Exemple #11
0
        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);
        }