Files
2026-04-17 14:55:32 -04:00

97 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
source_files:
- DataPRO/Reports/ChannelCalibrationList.cs
- DataPRO/Reports/DASLayout.cs
- DataPRO/Reports/DiagnosticsReport.cs
generated_at: "2026-04-16T03:51:09.548515+00:00"
model: "Qwen/Qwen3-Coder-Next-FP8"
schema_version: 1
sha256: "574c22aeaf057df0"
---
# ChannelCalibrationList Documentation
## 1. Purpose
The `ChannelCalibrationList` class generates a calibration status report for sensor channels, aggregating calibration dates, next due dates, and status indicators (OK, Warn, Overdue) into structured Excel and/or PDF reports. It extends `ReportBase` and is responsible for transforming an array of `ChannelHelper` objects—containing channel-specific calibration data—into a formatted table report, applying conditional styling based on calibration status for the `NextCal` column. This report supports test-specific naming and optional dual-format output (Excel + PDF), and is used to provide auditable calibration traceability for test channels.
## 2. Public Interface
### `ChannelCalibrationList.Fields` enum
Defines the column fields for the report table:
- `Location`
- `SensorAxis`
- `SerialNo`
- `Cal`
- `NextCal`
### `ChannelHelper` class
Encapsulates channel calibration data:
- **Properties**:
- `string Location`
- `string SensorAxis`
- `string SerialNo`
- `string SerialNumberWithAxis` *(not used in current implementation)*
- `string Cal` *(calibration date string)*
- `string NextCal` *(next calibration due date string)*
- `ResultStatus CalStatus` *(enum: `OK`, `Overdue`, `Warn`)*
- **Constructors**:
- `ChannelHelper()` initializes all string properties to `""`.
- `ChannelHelper(string location, string sensorAxis, string serialNo, string cal, string nextCal)` initializes the first five properties.
### `ChannelHelper.ResultStatus` enum
Indicates calibration status:
- `OK`
- `Overdue`
- `Warn`
### `ChannelCalibrationList()`
Default constructor; no side effects.
### `GetReportFilenamePath(string reportPath, string testId)`
**Signature**: `public static string GetReportFilenamePath(string reportPath, string testId)`
Returns the full path for the report file. If `testId` is non-empty, prepends it to the filename (e.g., `"T123 ChannelCalibrationList.xlsx"`); otherwise, returns `"ChannelCalibrationList.xlsx"` in `reportPath`.
### `DoReport(...)`
**Signature**: `public void DoReport(ChannelHelper[] channels, string outputFileName, string folderNameId, string sensitivityDisplayFormat, bool generateExcelReports, bool generatePDFReports)`
Generates the calibration report:
- Builds a `DataTable` (`dt`) with columns from `Fields` enum.
- Populates rows from `channels`, mapping `ChannelHelper` properties to columns.
- Applies styling to the `NextCal` column via a parallel `dtStyles` DataTable:
- `OK``FillStyles.Pass`
- `Warn``FillStyles.Warn`
- `Overdue``FillStyles.Fail`
- Only if `NextCal` is non-empty and not `"--"`.
- Deletes existing `outputFileName` if present (logs via `ReportFileWillBeOverwritten`/`ReportFileInUse`).
- Sets `TemplateFilename` to the base template path (via `GetReportFilenamePath(GetTemplateReportPath(), string.Empty)`).
- If `generateExcelReports`:
- Calls `OutputReport(new DataTable[] { dt }, new DataTable[] { dtStyles })`.
- Copies result to `folderNameId` via `CopyReportIfNeeded`.
- If `generatePDFReports`:
- Replaces `.xlsx` with `.pdf` in `outputFileName`.
- Sets `DestinationTemplateFilename` to a temp file (`.xlsx``.tmp`).
- Calls `OutputReportPDF(...)` with `sensitivityDisplayFormat`.
- Copies PDF result via `CopyReportIfNeeded`.
## 3. Invariants
- `dtStyles` is only populated for `NextCal` and `Cal` columns (others default to `-1`).
- `NextCal` styling is applied *only* when the value is non-null/whitespace and not `"--"`.
- `Cal` column data is copied directly from `ch.Cal` without styling.
- Excel and PDF outputs share the same base template (from `GetTemplateReportPath()`), but PDF generation uses a temporary template copy to avoid overwriting the Excel-filled template.
- `outputFileName` is overwritten in-place for PDF generation only if `generatePDFReports` is true.
- `channels` array may be empty; no explicit validation is performed.
## 4. Dependencies
- **Base class**: `ReportBase` (provides `OutputReport`, `OutputReportPDF`, `CopyReportIfNeeded`, `ReportFileWillBeOverwritten`, `ReportFileInUse`, `GetTemplateReportPath`, `TemplateFilename`, `OutputFilename`, `DestinationTemplateFilename`).
- **Enums used**: `ReportBase.FillStyles` (values: `Pass`, `Warn`, `Fail`, `NotTested`).
- **Namespaces**: `System`, `System.Linq`, `System.Data`, `System.IO`.
- **Consumers**: Likely invoked by higher-level test orchestration logic (e.g., test runner or report generator) that provides `ChannelHelper[]` data.
## 5. Gotchas
- `SerialNumberWithAxis` property in `ChannelHelper` is defined but never used in `DoReport`.
- `Cal` column has no styling applied, even though `dtStyles` is created for it—only `NextCal` uses `dtStyles`.
- Date formatting for `Cal`/`NextCal` is assumed to be handled by the caller (strings passed directly); no parsing or validation occurs in `DoReport`.
- PDF generation reuses `outputFileName` (replaces `.xlsx``.pdf`), meaning the Excel file is overwritten *before* PDF generation if both formats are requested. The `DestinationTemplateFilename` workaround (`... + ".tmp"`) is used to preserve the Excel template, but the original Excel output is overwritten.
- No handling for `null` in `channels` array or `null`/empty `ChannelHelper` instances—could throw `NullReferenceException`.
- `GetReportFilenamePath` does not use `testId` for PDF naming in `DiagnosticsReport` or `DASLayout`; only `DASLayout` uses `testId` in its own `GetReportFilenamePath`.
- `ChannelHelper` constructor overloads do not initialize `CalStatus`; default is `OK` (enum default), but this may be misleading if not explicitly set by caller.
- None identified from source alone.