<!-- BEGIN report/report.tt -->
[% # PROCESS dumper.tt dump = history.reported.time %]
[% # PROCESS dumper.tt dump = required_fields %]
[% # PROCESS dumper.tt dump = has_optional %]
[% # PROCESS dumper.tt dump = report_data %]
[% # PROCESS dumper.tt dump = request_data %]
[% # PROCESS dumper.tt dump = draft_reports %]
[% # PROCESS dumper.tt dump = draft_report_data %]
[% BLOCK required_field %]
<span class="red">*</span>
[% END %]
[% IF draft_reports.size AND NOT history.reported AND NOT is_outreach %]
<div class="indent">
<span class="warning">This request has [% draft_reports.size %]
draft report[% 's' IF draft_reports.size > 1 %]:</span>
<ol class="indent" id="draft-reports">
[% FOREACH entry IN draft_reports; # INCLUDE dumper.tt dump = entry.as_tree %]
<li>
[% entry.user.first_name.ucfirst %] [% entry.user.last_name.upper %] ::
[% entry.updated_at.strftime('%d.%b.%Y') %]
[ <a href="[% app_url %]/report/preview_draft/[% entry.request_id %]/[%
entry.user_id %]">preview</a> ]
</li>
[% END %]
</ol>
</div>
[% END %]
[% IF spelling_checked AND NOT has_unrecognised.size %]
<p class="info">
<span class="indent">Spellchecker reports no unrecognised words</span>
</p>
[% END %]
<form action="[% app_url %]/report/[% this_form_action %]/[% request_data.id %]"
method="post" [% this_onsubmit # set above %] name="reportForm" id="reportForm">
<!-- flag to allow deletion of secondary_diagnosis_id if desired: -->
<input type ="hidden" name="imported_draft_report"
value="[% draft_report_data.size # ie 'true' if > 0 %]" />
[% IF report_data.diagnosis # include diagnosis_id in case amendment: %]
<input type="hidden" name="_diagnosis_id" value="[% report_data.diagnosis.id %]" />
[% END %]
<table class="indent" id="report">
<!-- request notes -->
<tr>
<td class="label">Request notes:</td>
<td class="content">
<textarea name="general_notes" rows="1" cols="70" class="expand20-200"
[% site.html.onfocus %] [% site.html.disabled IF authorisation_request %]
>[% request_data.request_general_note.detail %]</textarea>
</td>
</tr>
<!-- end request notes -->
<!-- request/clinical details -->
<tr>
<td class="label">Request details:</td>
<td class="content">
<textarea name="clinical_details" rows="1" cols="70" class="expand20-200"
[% site.html.onfocus %] [% site.html.disabled IF authorisation_request %]
>[% report_data.clinical_details %]</textarea>
</td>
</tr>
<!-- end request/clinical details -->
<tr>
<td colspan="2"><hr /></td>
</tr>
<!-- specimen details -->
<tr>
<td colspan="2"><span class="info">Specimen details:</span></td>
</tr>
<!-- biopsy site -->
[% IF want_biopsy_site OR report_data.biopsy_site;
sites_list = []; # create array of site names for legacy data
FOREACH s IN anatomical_sites;
sites_list.push(s.site_name);
END; # INCLUDE dumper.tt dump = anatomical_sites
%]
<tr>
<td class="label" style="vertical-align: top">
[% INCLUDE required_field %]
Anatomical site:
</td>
<td class="content"> <!--biopsy_site=[% report_data.biopsy_site %]-->
<input type="hidden" name="_want_biopsy_details" value="1" />
[% # get list of biopsy_sites from report_data.biopsy_site field:
biopsy_sites = report_data.biopsy_site.split('; '); # will be single entry if no ';'
# INCLUDE dumper.tt dump = biopsy_sites;
# work out if any biopsy site NOT in sites_list:
unrecognised_sites = [];
FOREACH s IN biopsy_sites; # INCLUDE dumper.tt dump = s;
unrecognised_sites.push(s) UNLESS sites_list.grep('^' _ s _ '$').size;
END; # INCLUDE dumper.tt dump = unrecognised_sites;
IF unrecognised_sites.size; # load free-text entry:
%]
[%# this needs to be reversed when legacy cases reported %]
<textarea name="biopsy_site" rows="1" cols="70" [% site.html.onfocus %]
class="expand20-200" [% site.html.disabled IF authorisation_request %]
id="biopsy_site">[% report_data.biopsy_site %]</textarea>
[% error_biopsy_site %]
<!--
<div style="padding-bottom: 15px">
[<span class="info">original site description:
"[% report_data.biopsy_site %]"</span>]
</div>
-->
[% ELSE; # no unrecognised sites - load select menu: %]
<style>
#biopsy-site-select li {
padding: 0px;
font-size: small;
}
</style>
<div id="biopsy-site-select">
<div class="form-group">
<select id="biopsySite" name="biopsy_site" multiple="multiple">
[% FOREACH site IN anatomical_sites;
site_name_RE = '^' _ site.site_name _ '$';
%]
<option [% 'selected' IF biopsy_sites.grep(site_name_RE).size %]
value="[% site.site_name %]">[% site.site_name %]
[% # '['; site.snomed; ']' # pointless - this is for *primary* site %]
</option>
[% END %]
</select>
[% error_biopsy_site; # PROCESS dumper.tt dump = sites_list %]
</div>
</div>
<script src="/js/jquery.multiple.select.js"></script>
<script>
$(function() {
$('#biopsySite').change(function() {
console.log($(this).val());
}).multipleSelect({
width: 600,
filter: true,
selectAll: false,
multiple: true,
multipleWidth: 280,
placeholder: "Select one or more ....",
});
});
</script>
[% END %]
[% IF unrecognised_biopsy_site_words.size;
PROCESS report/highlight.tt
this_text = highlighted_biopsy_site
this_field = 'biopsy_site';
PROCESS report/speller.tt list = unrecognised_biopsy_site_words;
END;
%]
</td>
</tr>
[% END %]
<!-- end biopsy site -->
<!-- gross description -->
[% IF want_gross_description; # OR request_data.request_gross_description; why??
# can't rely on request_report_view for gross_description as it inner
# joins rrd with rsd so using left-join'd rsd as separate table:
gross_description = request_data.request_specimen_detail.gross_description;
%]
<tr>
<td class="label" style="vertical-align: top">
[% INCLUDE required_field %]
Gross description:
</td>
<td class="content">
<input type="hidden" name="_want_gross_description" value="1" />
<textarea name="gross_description" rows="1" cols="70" [% site.html.onfocus %]
class="expand20-200" [% site.html.disabled IF authorisation_request %]
id="gross_description">[% gross_description %]</textarea>
[% error_gross_description %]
[% IF unrecognised_gross_description_words.size;
PROCESS report/highlight.tt
this_text = highlighted_gross_description
this_field = 'gross_description';
PROCESS report/speller.tt list = unrecognised_gross_description_words;
END %]
</td>
</tr>
[% END %]
<!-- end gross description -->
<!-- morphology -->
[% UNLESS authorisation_request %]
<tr>
<td class="label" style="vertical-align: top">
[% INCLUDE required_field IF required_fields.morphology %]
Morphology:
</td>
<td class="content">
<textarea name="morphology" rows="1" cols="70" [% site.html.onfocus %]
class="expand20-200" [% site.html.disabled IF authorisation_request %]
id="morphology">[% report_data.morphology %]</textarea>
[% error_morphology %]
[% IF unrecognised_morphology_words.size;
PROCESS report/highlight.tt
this_text = highlighted_morphology
this_field = 'morphology';
PROCESS report/speller.tt list = unrecognised_morphology_words;
END %]
</td>
</tr>
[% END %]
<!-- end morphology -->
<!-- specimen quality -->
<tr>
<td class="label">
[% INCLUDE required_field IF required_fields.specimen_quality %]
Specimen quality:
</td>
<td class="content">
[% FOREACH option IN ['good', 'adequate', 'poor'];
quality_match = report_data.specimen_quality.match(option) ? 1 : 0;
%]
<label>
<span class="[% quality_match ? 'title' : 'normal' %]">
[% option | ucfirst %]</span>
<input type="radio" name="specimen_quality" value="[% option %]"
[% site.html.disabled IF authorisation_request %]
[% 'checked' IF quality_match %] />
</label>
<span style="margin-left: 0.5em" class="spacer"> </span>
[% END %]
[% error_specimen_quality %]
</td>
</tr>
<!-- end specimen quality -->
<!-- diagnosis details -->
<tr>
<td colspan="2"><hr /></td>
</tr>
<tr>
<td colspan="2"><span class="info">Diagnosis details:</span></td>
</tr>
<!-- primary diagnosis -->
<tr>
<td class="label" style="vertical-align: top">
[% INCLUDE required_field IF required_fields.diagnosis_id %]
Primary diagnosis:
</td>
[% IF is_outreach # use select menu %]
<td class="content">
<select name="diagnosis_id">
<option value="">-- select one --</option>
[% FOREACH category IN diagnoses.keys.sort %]
<optgroup label="[% category %]">
[% FOREACH diagnosis IN diagnoses.item(category);
NEXT UNLESS diagnosis.active.match('yes') OR
diagnosis.id == report_data.diagnosis_id # skip inactive unless req'd %]
<option value="[% diagnosis.id %]" [% 'selected' IF
diagnosis.id == report_data.diagnosis_id
AND NOT authorisation_request %]>
[% diagnosis.name %]
</option>
[% END %]
</optgroup>
[% END %]
</select>
[% ELSE; # use autosuggest
PROCESS site/autosuggest.tt
varname = 'name'
param_id = 'diagnosis_id'
param_name = 'diagnosis'
method_name = 'get_diagnoses'
watermark = 'no'
# to recover legacy diagnosis if no longer active:
optional_params = [ "diagnosis_id=${report_data.diagnosis.id}" ]
%]
<td class="search_bar">
<input style="width: 500px" type="text" id="diagnosis" name="_diagnosis"
[% UNLESS authorisation_request # hide diagnosis entry %]
value="[% report_data.diagnosis.name %]"
[% END %] />
<input type="hidden" id="diagnosis_id" name="diagnosis_id"
value="[% report_data.diagnosis_id %]" />
[% END %]
[% error_diagnosis_id %]
[% IF report_data.diagnosis AND NOT authorisation_request %]
<span class="title">Revision:</span>
<select name="option_id">
<option value="">--</option>
[% FOREACH option IN diagnosis_change_options;
NEXT UNLESS option.is_active.match('yes') %]
<option value="[% option.id %]" title="[% option.description %]">
[% option.option_name %]
</option>
[% END %]
</select>
[% error_revision; error__diagnosis_id # could be either %]
[% END %]
[% IF previous_diagnoses.size AND c.user_can('report')
AND NOT authorisation_request; # PROCESS dumper.tt dump = previous_diagnoses %]
<p><i>Revisions [[% previous_diagnoses.size %]]:</i>
[% div_name = 'diagnoses'; INCLUDE site/snippets/toggleview.tt %]
</p>
<div id="[% div_name %]" class="itemhidden">
<ol>
[% FOREACH d IN previous_diagnoses %]
<li class="results">
[% d.diagnosis.name | html %]
[[% d.user.username | upper %]:
<span class="acronym" title="[% d.option.description %]">
[% d.option.option_name %]
</span>]
[% d.time.strftime('%a %d.%b.%Y @ %T') %]
</li>
[% END %]
</ol>
[% END %]
</td>
</tr>
<!-- end primary diagnosis -->
<!-- comment -->
[% UNLESS authorisation_request %]
<tr>
<td class="label" style="vertical-align: top">
[% INCLUDE required_field IF required_fields.comment %]
Comment:
</td>
<td class="content">
<textarea name="comment" rows="3" cols="70" class="expand20-500"
id="comment">[% report_data.comment | html %]</textarea>
[% error_comment %]
[% IF unrecognised_comment_words.size;
PROCESS report/highlight.tt
this_text = highlighted_comment
this_field = 'comment';
PROCESS report/speller.tt list = unrecognised_comment_words;
END %]
</td>
</tr>
[% END %]
<!-- end comment -->
<!-- secondary diagnosis -->
[% UNLESS is_outreach %]
<tr>
<td class="label" style="vertical-align: top">Secondary diagnosis:</td>
<td class="content search_bar">
[% PROCESS site/autosuggest.tt
varname = 'name'
param_id = 'secondary_diagnosis_id'
param_name = 'secondary_diagnosis'
method_name = 'get_diagnoses'
watermark = 'no'
# to recover legacy diagnosis if no longer active:
optional_params = [ "diagnosis_id=${report_data.secondary_diagnosis.id}" ]
no_autosuggest_js = 1; # already loaded above
secondary_diagnosis = request_data.request_secondary_diagnosis.diagnosis
|| report_data.secondary_diagnosis; # latter is from import draft report
%]
<input style="width: 500px" type="text" id="secondary_diagnosis"
[% UNLESS authorisation_request # hide diagnosis entry %]
value="[% secondary_diagnosis.name %]"[% END %]
name="_secondary_diagnosis" />
<input type="hidden" id="secondary_diagnosis_id" name="secondary_diagnosis_id"
value="[% secondary_diagnosis.id %]" />
[% # can't delete by clearing text - autosuggest ignores < 2 chars:
IF secondary_diagnosis %]
<span class="bold">DELETE:</span>
<input type ="checkbox" name="delete_secondary_diagnosis" value="1" />
[% END %]
</td>
</tr>
[% END %]
<!-- end secondary diagnosis -->
<!-- end diagnosis details -->
<tr>
<td colspan="2"><hr /></td>
</tr>
[%
IF is_outreach;
INCLUDE outreach/followup.tt;
ELSE;
%]
<!-- request status -->
<tr>
<td class="label">
[% INCLUDE required_field IF required_fields.status %]
Request status:
</td>
<td class="content">
[% FOREACH option IN [ 'new', 'relapse', 'default' ];
status_match = report_data.status.match(option) ? 1 : 0 %]
<label>
<span class="[% status_match ? 'title' : 'normal' %]">
[% option | ucfirst %]</span><input type="radio" name="status"
value="[% option %]" [% 'checked' IF status_match %]
[% site.html.disabled IF authorisation_request %] />
</label>
<span style="margin-left: 0.5em"> </span>
[% END %]
[% error_status %]
[% UNLESS previous_requests.this_id.size %]
<span class="red">** unknown patient details **</span>
[% END %]
</td>
</tr>
<!-- end request status -->
[% END %]
<!-- other options -->
[% UNLESS authorisation_request OR is_outreach %]
<tr>
<td class="label">Others:</td>
<td class="content">
[% IF request_options.teaching.is_active.match('yes') %]
Teaching case:
<input type="radio" value="1" name="teaching"
[% 'checked' IF request_options.teaching.is_selected %] />
<img src="/images/tick.gif" />
<span style="margin-left: 0.5em" class="spacer"> </span>
<input type="radio" value="0" name="teaching"
[% 'checked' UNLESS request_options.teaching.is_selected %] />
<span class="red">X</span>
[% END %]
</td>
</tr>
[% END %]
<!-- end other options -->
<!-- report by -->
<tr>
<td class="label">Report by:</td>
<td>
[% IF history.reported.user %]
<span class="title">
[% history.reported.user.first_name | ucfirst; ' ';
history.reported.user.last_name | ucfirst %]
</span> on <span class="title">
[% history.reported.time.strftime('%a %d.%b.%Y @ %H:%M') %]
</span>
[% ELSE %]
<span class="grey">
[% this_user.first_name | ucfirst %]
[% this_user.last_name | ucfirst %]
</span>
[% END %]
</td>
</tr>
<!-- end report by -->
<!-- authorised by -->
[% IF history.authorised %]
<tr>
<td class="label">Authorised by:</td>
<td>
<span class="title">
[% history.authorised.user.first_name | ucfirst; ' ';
history.authorised.user.last_name | ucfirst; %]
</span> on <span class="title">
[% history.authorised.time.strftime('%a %d.%b.%Y @ %H:%M') %]
</span>
</td>
</tr>
[% ELSIF status_options.authorised.is_active.match('yes')
AND ( c.query.param('pre-authorisation-check') OR self_authorisable ) %]
<tr>
<td class="label">Authorise report:</td>
<td>
[% IF this_user.username == history.reported.user.username
AND NOT self_authorisable; disable_submit = 1 %]
<span class="error">*** self-authorisation not permitted ***</span>
[% ELSE %]
<input type="checkbox" name="authorise" value="1" />
<input type="hidden" name="pre-authorisation-check" value="1" />
[% END %]
</td>
</tr>
[% END %]
<!-- end authorised by -->
<!-- acknowledge outstanding tests -->
<tr>
<td colspan="2" class="borderless">
[% IF have_outstanding_tests %]
<input type="hidden" name="_have_outstanding_tests" value="1" />
<div class="indent">
<span class="normal">ACKNOWLEDGE OUTSTANDING TESTS:</span>
<input type="checkbox" name="confirm_outstanding_tests" value="1" />
[% IF error_confirm_outstanding_tests %]
[% error_confirm_outstanding_tests %]
[% ELSE %]
<span class="warning">« required</span>
[% END %]
</div>
[% ELSIF # can't do if outstanding tests
( status_options.authorised.is_active.match('yes')
? history.authorised.time : history.reported.time )
AND NOT data.status_option.description.match('complete') %]
<div class="indent">
CONFIRM FINAL DIAGNOSIS:
<input type="checkbox" name="final_diagnosis" value="1" />
BUT <b>DO NOT</b> ISSUE NEW REPORT:
<input type="checkbox" name="no_new_report" value="1" />
</div>
[% # error__diagnosis_id # don't need %]
[% END %]
</td>
</tr>
<!-- end acknowledge outstanding tests -->
<!-- acknowledge outstanding results -->
[% IF have_outstanding_results %]
<tr>
<td colspan="2" class="borderless">
<input type="hidden" name="_have_outstanding_results" value="1" />
<span class="indent">
<span class="normal">ACKNOWLEDGE OUTSTANDING RESULTS:</span>
<input type="checkbox" name="confirm_outstanding_results" value="1" />
[% IF error_confirm_outstanding_results %]
[% error_confirm_outstanding_results %]
[% ELSE %]
<span class="warning">« required</span>
[% END %]
</span>
</td>
</tr>
[% END %]
<!-- end acknowledge outstanding results -->
[% disable_submit = 0 IF # override disabled submit button if:
is_outreach # is Outreach case
AND disable_submit # submit button *is* disabled
AND NOT is_locked # record not locked
AND c.user_can('report'); # use can report
%]
[% UNLESS disable_submit # set above %]
<tr>
<td colspan="2" align="center" class="borderless">
[% IF is_outreach # status row skipped %]
<input type="hidden" name="status" value="default" />
[% END %]
<input type="button" value="Check Spelling" onClick="openSpellChecker();" />
[% IF spelling_checked # set flag for target rm update_report():
|| c.cfg('settings').require_spell_check.match('no') # not needed
|| authorisation_request # not needed %]
<input type="hidden" name="_spelling_checked" value="1" />
[% site.html.submit # seems to be suppressed by multiple-select jquery ??
|| '<input value="Submit" type="submit" class="button" />' %]
[% ELSE %]
<button name="submit" value="preview" type="submit" style="color: #008000">
Preview</button>
[% IF c.cfg('settings').have_draft_report AND NOT history.reported
AND NOT is_outreach %]
<span style="margin-left: 150px">
<button name="submit" value="save_draft" type="submit" class="red">
Save as draft</button>
</span>
[% END %]
[% END %]
</td>
</tr>
[% END %]
</table>
</form>
[% UNLESS authorisation_request OR report_data.comment %]
<!-- the javascript function to change the source of the frame -->
<script type="text/javascript">
function load_comment_template() {
var html = document.getElementById('comment_id').contentWindow.document.body.innerHTML;
document.reportForm.comment.value=document.reportForm.comment.value + html
}
</script>
<!-- set up a frame to hold the information we require -->
<p class="indent">
<span class="title">Comment section templates:</span>
[% div_name = 'report_tmpl';
INCLUDE site/snippets/toggleview.tt %]
</p>
<div id="[% div_name %]" class="itemhidden">
<iframe name="comment_frame" class="indent" id="comment_id" width="600"></iframe>
<!-- set up a form to search for a canned template locally and submit
to a javascript function -->
<form name="comment_tmpl" enctype="multipart/form-data"
method="post" action="[% app_url %]/ajax/load_template"
target="comment_frame">
<p class="indent">
<!-- set up a file type input field which submits the form on change -->
<input type="file" name="template" size="30" onChange="form.submit()" />
<input type="button" onclick="load_comment_template();"
value="Import Template" />
</p>
</form>
</div>
[% END %]
<!-- END report/report.tt -->