Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Display reportable interim fields as result variables in results report #141

Merged
merged 3 commits into from
Aug 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/Changelog.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
2.5.0 (unreleased)
------------------

- #141 Display reportable interim fields as result variables in results report
- #140 Refactor report sections into separate components


Expand Down
26 changes: 26 additions & 0 deletions src/senaite/impress/analysisrequest/reportview.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
from bika.lims import POINTS_OF_CAPTURE
from bika.lims import api
from bika.lims.interfaces import IInternalUse
from bika.lims.utils.analysis import format_interim
from bika.lims.workflow import getTransitionDate
from Products.CMFPlone.i18nl10n import ulocalized_time
from Products.CMFPlone.utils import safe_unicode
Expand Down Expand Up @@ -358,6 +359,31 @@ def is_model(self, obj):
"""
return ISuperModel.providedBy(obj)

def get_result_variables(self, analysis, report_only=True):
"""Returns the result variables (aka interim fields) from the given
analysis, with additional attributes formatted_result and
formatted_unit. If report_only is True, only result variables that are
flagged with attribute "report" are returned.

:param analysis: Analysis' object/supermodel/brain or UID
:param report_only: Only result variables flagged with 'report:True'
:returns: List of result variable items
"""
items = []
obj = api.get_object(analysis)
interim_fields = obj.getInterimFields() or []
for interim_field in interim_fields:

# skip interim not fields flagged with report
if report_only and not interim_field.get("report", False):
continue

# apply formatting
item = format_interim(interim_field)
items.append(item)

return items


class SingleReportView(ReportView):
"""View for Single Reports
Expand Down
1 change: 1 addition & 0 deletions src/senaite/impress/analysisrequest/templates/css.pt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
.report .section-header img.logo { height: 30px; margin: 20px 0; }
.report .barcode-hri { margin-top: -0.25em; font-size: 8pt; }
.report .section-results .methodtitle { font-size: 85%; }
.report .section-results .results_interims { font-size: 85%; }
.report .section-footer table td { border: none; }
.report .section-footer {
position: fixed;
Expand Down
29 changes: 28 additions & 1 deletion src/senaite/impress/analysisrequest/templates/results.pt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<tal:t define="collection python:view.collection;
accredited_symbol string:★;
outofrange_symbol string:⚠;"
outofrange_symbol string:⚠;
global results_interims python:[]"
i18n:domain="senaite.impress">

<tal:model repeat="model collection">
Expand Down Expand Up @@ -66,6 +67,14 @@
<span tal:condition="analysis/ScientificName">
<span class="font-italic" tal:content="analysis/title"></span>
</span>

<tal:interim_fields
define="interims python:view.get_result_variables(analysis)"
condition="interims">
<sup tal:define="dummy python:results_interims.append(interims)"
tal:content="python: len(results_interims)"/>
</tal:interim_fields>

<!-- Method -->
<div class="text-secondary methodtitle"
i18n:translate=""
Expand Down Expand Up @@ -106,6 +115,24 @@
</div>
</td>
</tr>
<tr tal:condition="results_interims">
<td colspan="3">
<ul class="list-unstyled results_interims">
<li tal:repeat="interims results_interims" class="mt-2">
<sup tal:content="repeat/interims/number"/>
<tal:interims repeat="interim interims">
<tal:interim>
<br tal:condition="repeat/interim/index"/>
<span tal:condition="repeat/interim/index" class="pl-2"/>
<span tal:content="interim/title"/>:
<span tal:content="interim/formatted_value"/>
<span tal:content="interim/formatted_unit"/>
</tal:interim>
</tal:interims>
</li>
</ul>
</td>
</tr>
</tfoot>
</table>
</tal:categories_in_poc>
Expand Down