timgremore
commited on
Commit
•
4d43dfd
1
Parent(s):
bcd90d6
feat: Wire up ChromicPDF and basic download route
Browse files
lib/medicode/application.ex
CHANGED
@@ -29,6 +29,7 @@ defmodule Medicode.Application do
|
|
29 |
Medicode.ClassificationSupervisor,
|
30 |
strategy: :one_for_one, max_restarts: 1
|
31 |
},
|
|
|
32 |
# Start a worker by calling: Medicode.Worker.start_link(arg)
|
33 |
# {Medicode.Worker, arg},
|
34 |
# Start to serve requests, typically the last entry
|
|
|
29 |
Medicode.ClassificationSupervisor,
|
30 |
strategy: :one_for_one, max_restarts: 1
|
31 |
},
|
32 |
+
ChromicPDF,
|
33 |
# Start a worker by calling: Medicode.Worker.start_link(arg)
|
34 |
# {Medicode.Worker, arg},
|
35 |
# Start to serve requests, typically the last entry
|
lib/medicode_web/components/components.ex
CHANGED
@@ -144,6 +144,14 @@ defmodule MedicodeWeb.Components do
|
|
144 |
<%= chunk_code.code_vector.code %>
|
145 |
</span>
|
146 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
147 |
</div>
|
148 |
</div>
|
149 |
"""
|
|
|
144 |
<%= chunk_code.code_vector.code %>
|
145 |
</span>
|
146 |
</div>
|
147 |
+
|
148 |
+
<.link
|
149 |
+
href={~p"/transcription/reports/#{@transcription.id}"}
|
150 |
+
class="font-semibold text-brand hover:underline"
|
151 |
+
download={"transcription-report-#{@transcription.id}.pdf"}
|
152 |
+
>
|
153 |
+
Download Report
|
154 |
+
</.link>
|
155 |
</div>
|
156 |
</div>
|
157 |
"""
|
lib/medicode_web/components/transcription_report_component.ex
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
defmodule MedicodeWeb.Components.TranscriptionReportComponent do
|
2 |
+
@moduledoc """
|
3 |
+
This module is responsible for rendering the transcription report component.
|
4 |
+
"""
|
5 |
+
|
6 |
+
use Phoenix.LiveComponent
|
7 |
+
|
8 |
+
def render(assigns) do
|
9 |
+
~H"""
|
10 |
+
<h1>Transcription</h1>
|
11 |
+
<p style="font-size: 200%;">ID: <%= @transcription.id %></p>
|
12 |
+
"""
|
13 |
+
end
|
14 |
+
end
|
lib/medicode_web/controllers/transcription_reports_controller.ex
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
defmodule MedicodeWeb.TranscriptionReportsController do
|
2 |
+
use MedicodeWeb, :controller
|
3 |
+
|
4 |
+
alias Medicode.Transcriptions
|
5 |
+
|
6 |
+
def show(conn, _params) do
|
7 |
+
transcription = Transcriptions.get_transcription!(conn.params["id"])
|
8 |
+
|
9 |
+
conn = assign(conn, :transcription, transcription)
|
10 |
+
|
11 |
+
### We will write this function later.
|
12 |
+
{:ok, pdf} = to_pdf(conn.assigns)
|
13 |
+
|
14 |
+
send_download(
|
15 |
+
conn,
|
16 |
+
{:binary, Base.decode64!(pdf)},
|
17 |
+
content_type: "application/pdf",
|
18 |
+
filename: "transcription_report.pdf"
|
19 |
+
)
|
20 |
+
end
|
21 |
+
|
22 |
+
defp to_pdf(assigns) do
|
23 |
+
[
|
24 |
+
content: content(assigns),
|
25 |
+
size: :a4
|
26 |
+
]
|
27 |
+
|> ChromicPDF.Template.source_and_options()
|
28 |
+
|> ChromicPDF.print_to_pdf()
|
29 |
+
end
|
30 |
+
|
31 |
+
defp content(assigns) do
|
32 |
+
Phoenix.HTML.Safe.to_iodata(
|
33 |
+
MedicodeWeb.Components.TranscriptionReportComponent.render(assigns)
|
34 |
+
)
|
35 |
+
end
|
36 |
+
end
|
lib/medicode_web/router.ex
CHANGED
@@ -69,6 +69,8 @@ defmodule MedicodeWeb.Router do
|
|
69 |
scope "/", MedicodeWeb do
|
70 |
pipe_through [:browser, :require_authenticated_user]
|
71 |
|
|
|
|
|
72 |
live_session :require_authenticated_user,
|
73 |
on_mount: [{MedicodeWeb.UserAuth, :ensure_authenticated}] do
|
74 |
live "/users/settings", UserSettingsLive, :edit
|
|
|
69 |
scope "/", MedicodeWeb do
|
70 |
pipe_through [:browser, :require_authenticated_user]
|
71 |
|
72 |
+
get "/transcription/reports/:id", TranscriptionReportsController, :show
|
73 |
+
|
74 |
live_session :require_authenticated_user,
|
75 |
on_mount: [{MedicodeWeb.UserAuth, :ensure_authenticated}] do
|
76 |
live "/users/settings", UserSettingsLive, :edit
|
mix.exs
CHANGED
@@ -66,7 +66,8 @@ defmodule Medicode.MixProject do
|
|
66 |
{:membrane_core, "~> 1.0"},
|
67 |
{:membrane_raw_audio_format, "~> 0.12.0"},
|
68 |
{:kino, "~> 0.12.3"},
|
69 |
-
{:csv, "~> 3.2"}
|
|
|
70 |
# {:membrane_portaudio_plugin, "~> 0.18.0"}
|
71 |
]
|
72 |
end
|
|
|
66 |
{:membrane_core, "~> 1.0"},
|
67 |
{:membrane_raw_audio_format, "~> 0.12.0"},
|
68 |
{:kino, "~> 0.12.3"},
|
69 |
+
{:csv, "~> 3.2"},
|
70 |
+
{:chromic_pdf, "~> 1.15"}
|
71 |
# {:membrane_portaudio_plugin, "~> 0.18.0"}
|
72 |
]
|
73 |
end
|
mix.lock
CHANGED
@@ -10,6 +10,7 @@
|
|
10 |
"bundlex": {:hex, :bundlex, "1.4.5", "ea06cb441af636baaf5232dced24c6b1ee5ccbe7a7cad8a348eb3100fa1d7b52", [:mix], [{:bunch, "~> 1.0", [hex: :bunch, repo: "hexpm", optional: false]}, {:elixir_uuid, "~> 1.2", [hex: :elixir_uuid, repo: "hexpm", optional: false]}, {:qex, "~> 0.5", [hex: :qex, repo: "hexpm", optional: false]}, {:req, "~> 0.4.0", [hex: :req, repo: "hexpm", optional: false]}, {:zarex, "~> 1.0", [hex: :zarex, repo: "hexpm", optional: false]}], "hexpm", "bd4136100d3120740bf8eaa73ad74859d5ccd659cf0b27aa1645590a67a0172b"},
|
11 |
"bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"},
|
12 |
"castore": {:hex, :castore, "1.0.5", "9eeebb394cc9a0f3ae56b813459f990abb0a3dedee1be6b27fdb50301930502f", [:mix], [], "hexpm", "8d7c597c3e4a64c395980882d4bca3cebb8d74197c590dc272cfd3b6a6310578"},
|
|
|
13 |
"coerce": {:hex, :coerce, "1.0.1", "211c27386315dc2894ac11bc1f413a0e38505d808153367bd5c6e75a4003d096", [:mix], [], "hexpm", "b44a691700f7a1a15b4b7e2ff1fa30bebd669929ac8aa43cffe9e2f8bf051cf1"},
|
14 |
"comeonin": {:hex, :comeonin, "5.4.0", "246a56ca3f41d404380fc6465650ddaa532c7f98be4bda1b4656b3a37cc13abe", [:mix], [], "hexpm", "796393a9e50d01999d56b7b8420ab0481a7538d0caf80919da493b4a6e51faf1"},
|
15 |
"complex": {:hex, :complex, "0.5.0", "af2d2331ff6170b61bb738695e481b27a66780e18763e066ee2cd863d0b1dd92", [:mix], [], "hexpm", "2683bd3c184466cfb94fad74cbfddfaa94b860e27ad4ca1bffe3bff169d91ef1"},
|
|
|
10 |
"bundlex": {:hex, :bundlex, "1.4.5", "ea06cb441af636baaf5232dced24c6b1ee5ccbe7a7cad8a348eb3100fa1d7b52", [:mix], [{:bunch, "~> 1.0", [hex: :bunch, repo: "hexpm", optional: false]}, {:elixir_uuid, "~> 1.2", [hex: :elixir_uuid, repo: "hexpm", optional: false]}, {:qex, "~> 0.5", [hex: :qex, repo: "hexpm", optional: false]}, {:req, "~> 0.4.0", [hex: :req, repo: "hexpm", optional: false]}, {:zarex, "~> 1.0", [hex: :zarex, repo: "hexpm", optional: false]}], "hexpm", "bd4136100d3120740bf8eaa73ad74859d5ccd659cf0b27aa1645590a67a0172b"},
|
11 |
"bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"},
|
12 |
"castore": {:hex, :castore, "1.0.5", "9eeebb394cc9a0f3ae56b813459f990abb0a3dedee1be6b27fdb50301930502f", [:mix], [], "hexpm", "8d7c597c3e4a64c395980882d4bca3cebb8d74197c590dc272cfd3b6a6310578"},
|
13 |
+
"chromic_pdf": {:hex, :chromic_pdf, "1.15.2", "da099affe93dcd3438bcb5c38f39179f7f4f72c08a8b2799b50dcc21665f01b7", [:mix], [{:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2 or ~> 1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14 or ~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.11", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websockex, ">= 0.4.3", [hex: :websockex, repo: "hexpm", optional: true]}], "hexpm", "c0e9d62b807c7df019bc642b20eb78f3445f09260413a210a240ee080c1fc8f1"},
|
14 |
"coerce": {:hex, :coerce, "1.0.1", "211c27386315dc2894ac11bc1f413a0e38505d808153367bd5c6e75a4003d096", [:mix], [], "hexpm", "b44a691700f7a1a15b4b7e2ff1fa30bebd669929ac8aa43cffe9e2f8bf051cf1"},
|
15 |
"comeonin": {:hex, :comeonin, "5.4.0", "246a56ca3f41d404380fc6465650ddaa532c7f98be4bda1b4656b3a37cc13abe", [:mix], [], "hexpm", "796393a9e50d01999d56b7b8420ab0481a7538d0caf80919da493b4a6e51faf1"},
|
16 |
"complex": {:hex, :complex, "0.5.0", "af2d2331ff6170b61bb738695e481b27a66780e18763e066ee2cd863d0b1dd92", [:mix], [], "hexpm", "2683bd3c184466cfb94fad74cbfddfaa94b860e27ad4ca1bffe3bff169d91ef1"},
|