Skip to content

Commit 970d92b

Browse files
committed
Impression Diagnostic Report
1 parent ed207f6 commit 970d92b

File tree

11 files changed

+187
-2
lines changed

11 files changed

+187
-2
lines changed

cb_medical_clinical_impression/__manifest__.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,14 @@
99
"license": "AGPL-3",
1010
"author": "CreuBlanca,Odoo Community Association (OCA)",
1111
"website": "https://github.com/tegin/medical-fhir",
12-
"depends": ["medical_clinical_impression", "medical_product_request"],
12+
"depends": [
13+
"medical_clinical_impression",
14+
"medical_product_request",
15+
"cb_medical_diagnostic_report",
16+
],
1317
"data": [
18+
"templates/assets.xml",
19+
"templates/report.xml",
1420
"views/medical_patient.xml",
1521
"data/cron.xml",
1622
"views/medical_clinical_impression.xml",

cb_medical_clinical_impression/models/medical_clinical_impression.py

+32
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,35 @@ def _validate_clinical_impression_fields(
3434
if auto_validated:
3535
result["auto_validated"] = True
3636
return result
37+
38+
def action_create_clinical_impression_report(self):
39+
self.mapped("patient_id").ensure_one()
40+
self.mapped("specialty_id").ensure_one()
41+
report = self.env["medical.diagnostic.report"].create(
42+
self._create_diagnostic_report_vals()
43+
)
44+
return report.get_formview_action()
45+
46+
def _create_diagnostic_report_vals(self):
47+
encounter = self[0].encounter_id
48+
return {
49+
"encounter_id": encounter.id,
50+
"patient_name": encounter.patient_id.name,
51+
"vat": encounter.patient_id.vat,
52+
"patient_age": self.env[
53+
"medical.diagnostic.report.template"
54+
]._compute_age(encounter.patient_id),
55+
"composition": self._get_report_composition(),
56+
"name": self[0].specialty_id.name,
57+
"lang": self.env.context.get("lang") or self.env.user.lang,
58+
"item_blocked": False,
59+
"with_conclusion": False,
60+
"with_observation": False,
61+
"with_composition": True,
62+
}
63+
64+
def _get_report_composition(self):
65+
return self.env["ir.qweb"]._render(
66+
"cb_medical_clinical_impression.impression_to_diagnostic_report",
67+
{"impressions": self},
68+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
odoo.define("cb_medical_clinical_impression.impression_component", function (require) {
2+
"use strict";
3+
const ImpressionComponent = require("medical_clinical_impression/static/src/components/impression_component.js");
4+
ImpressionComponent.patch(
5+
"cb_medical_clinical_impression.ImpressionComponent",
6+
(T) =>
7+
class extends T {
8+
generateDiagnosticReport() {
9+
return this.trigger("create_impression_report", {
10+
res_id: this.state.data.res_id,
11+
db_id: this.state.data.id,
12+
});
13+
}
14+
}
15+
);
16+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
odoo.define("cb_medical_clinical_impression.OWLTreeController", function (require) {
2+
"use strict";
3+
4+
var OWLTreeController = require("medical_clinical_impression.OWLTreeController");
5+
6+
OWLTreeController.include({
7+
custom_events: _.extend({}, OWLTreeController.prototype.custom_events, {
8+
create_impression_report: "_onCreateReportImpression",
9+
}),
10+
_onCreateReportImpression(ev) {
11+
console.log("_generateDiagnosticReport");
12+
var self = this;
13+
self._rpc({
14+
model: "medical.clinical.impression",
15+
method: "action_create_clinical_impression_report",
16+
args: [[ev.data.res_id]],
17+
}).then(function (action) {
18+
self.do_action(action);
19+
});
20+
},
21+
});
22+
});

cb_medical_clinical_impression/static/src/xml/owl_tree_view.xml

+23
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,27 @@
2525
</xpath>
2626
</t>
2727

28+
<div
29+
t-name="cb_medical_clinical_impression.ImpressionComponent"
30+
t-inherit="medical_clinical_impression.ImpressionComponent"
31+
t-inherit-mode="extension"
32+
owl="1"
33+
>
34+
<xpath expr="//div[hasclass('o_impression_header')]" position="inside">
35+
36+
<div class="col-2 o_impression_header_item d-flex justify-content-end">
37+
<button
38+
class="btn btn-primary btn-sm"
39+
style="white-space: nowrap;"
40+
t-on-click="generateDiagnosticReport"
41+
t-if="state.data.data.fhir_state == 'completed'"
42+
>
43+
<i class="fas fa-file" /> Diagnostic Report
44+
45+
</button>
46+
</div>
47+
</xpath>
48+
49+
</div>
50+
2851
</templates>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<odoo>
3+
<template
4+
id="assets_backend"
5+
name="assets_backend"
6+
inherit_id="medical_clinical_impression.assets_backend"
7+
>
8+
<xpath expr="." position="inside">
9+
<script
10+
type="text/javascript"
11+
src="/cb_medical_clinical_impression/static/src/js/impression_component.js"
12+
/>
13+
<script
14+
type="text/javascript"
15+
src="/cb_medical_clinical_impression/static/src/js/owl_tree_controller.js"
16+
/>
17+
</xpath>
18+
</template>
19+
</odoo>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<odoo>
3+
<template id="impression_to_diagnostic_report">
4+
<div t-foreach="impressions" t-as="impression">
5+
<b><t t-esc="impression.validation_user_id.name" /> on <t
6+
t-esc="impression.create_date.date()"
7+
/></b>
8+
<br t-if="impression.summary" />
9+
<i t-esc="impression.summary" t-if="impression.summary" />
10+
<br t-if="impression.description" />
11+
<span
12+
t-esc="impression.description"
13+
style="white-space: pre-wrap;"
14+
t-if="impression.description"
15+
/>
16+
</div>
17+
</template>
18+
</odoo>

cb_medical_clinical_impression/views/medical_clinical_impression.xml

+21
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,25 @@
1313
1414
-->
1515

16+
<record
17+
id="medical_impression_generate_report_act_server"
18+
model="ir.actions.server"
19+
>
20+
<field name="name">Generate report</field>
21+
<field
22+
name="model_id"
23+
ref="medical_clinical_impression.model_medical_clinical_impression"
24+
/>
25+
<field
26+
name="binding_model_id"
27+
ref="medical_clinical_impression.model_medical_clinical_impression"
28+
/>
29+
<field name="state">code</field>
30+
<field
31+
name="code"
32+
>action = records.action_create_clinical_impression_report()</field>
33+
</record>
34+
35+
36+
1637
</odoo>

medical_clinical_impression/models/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@
77
from . import medical_condition
88
from . import medical_clinical_impression_template
99
from . import ir_ui_view
10+
11+
# from . import medical_clinical_impression_report
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Copyright 2023 CreuBlanca
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
from odoo import fields, models
5+
6+
7+
class MedicalClinicalImpressionReport(models.Model):
8+
9+
_name = "medical.clinical.impression.report"
10+
_description = "Medical Clinical Impression Report" # TODO
11+
12+
medical_impression_ids = fields.Many2many(
13+
"medical.clinical.impression",
14+
inverse_name="patient_id",
15+
)
16+
17+
def action_create_clinical_impression_report(self):
18+
self.ensure_one()
19+
20+
action
21+
return action
22+
23+
def preview_medical_diagnostic_report(self):
24+
return self.env.ref(
25+
"medical_clinical_impression.medical_clinical_impression_report"
26+
).report_action(self)

medical_clinical_impression/static/src/xml/owl_tree_view.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@
196196
<i class="fas fa-save" /> Guardar
197197
</button>
198198

199-
<button
199+
<button
200200
class="btn btn-secondary btn-sm"
201201
style="white-space: nowrap;"
202202
t-on-click="onDeleteChanges"

0 commit comments

Comments
 (0)