filters
This commit is contained in:
parent
ad3c3f8e33
commit
3ec4ca0325
@ -4,78 +4,97 @@ defmodule DerivantesWeb.DerivantesLive do
|
||||
import Ecto.Query
|
||||
|
||||
def mount(_params, _session, socket) do
|
||||
{:ok,
|
||||
socket
|
||||
|> assign(studies: get_studies(socket))
|
||||
}
|
||||
filters = to_form(%{}, as: "filters")
|
||||
{:ok,
|
||||
socket
|
||||
|> assign(studies: get_studies(socket, %{}))
|
||||
|> assign(filters: filters)
|
||||
}
|
||||
end
|
||||
|
||||
def render(assigns) do
|
||||
~H"""
|
||||
<div>
|
||||
<%= if length(@studies) > 0 do %>
|
||||
<div class="estudio_patientname">
|
||||
<h1>Bienvenido, <%= @current_user.email %> </h1>
|
||||
<p>Para ver un estudio haga click en el icono de Informe o de Imágenes.</p>
|
||||
</div>
|
||||
<div class="estudio_container">
|
||||
<div class="estudio_details">
|
||||
<p>Estudios</p>
|
||||
</div>
|
||||
<div class="estudio_icons">
|
||||
<p>Informe</p>
|
||||
<p>Imágenes</p>
|
||||
</div>
|
||||
</div>
|
||||
<%= for study <- @studies do %>
|
||||
<div class="estudio_container">
|
||||
<div class="estudio_details">
|
||||
<p><b>Fecha y hora:</b> <%= format_date(study.fecha) %> - <%= format_hour(study.hora) %></p>
|
||||
<p><b>DNI:</b> <%= study.dni %></p>
|
||||
<p><b>Accession N°</b> <%= study.accession %></p>
|
||||
<p><b>Matricula derivante</b> <%= @current_user.matricula %></p>
|
||||
~H"""
|
||||
<div>
|
||||
<div class="pantalla_estudios_header">
|
||||
<img src={~p"/images/sana_americano_logo.png"} alt="IM LOGO"/>
|
||||
</div>
|
||||
<div class="estudio_patientname">
|
||||
<h1>Bienvenido, <%= @current_user.email %> </h1>
|
||||
<p>Para ver un estudio haga click en el icono de Informe o de Imágenes.</p>
|
||||
</div>
|
||||
<div>
|
||||
<.simple_form
|
||||
for={@filters}
|
||||
id="filters"
|
||||
phx-update="ignore"
|
||||
phx-submit="filter_study"
|
||||
>
|
||||
<.input field={@filters[:dni]} type="text"/>
|
||||
<.input field={@filters[:accession]} type="text"/>
|
||||
<:actions>
|
||||
<.button phx-disable-with="Buscando..." class="w-full">Buscar</.button>
|
||||
</:actions>
|
||||
</.simple_form>
|
||||
</div>
|
||||
<%= if length(@studies) > 0 do %>
|
||||
<div class="estudio_container">
|
||||
<div class="estudio_details">
|
||||
<p>Estudios</p>
|
||||
</div>
|
||||
<div class="estudio_icons">
|
||||
<p>Informe</p>
|
||||
<p>Imágenes</p>
|
||||
</div>
|
||||
</div>
|
||||
<%= for study <- @studies do %>
|
||||
<div class="estudio_container">
|
||||
<div class="estudio_details">
|
||||
<p><b>Fecha y hora:</b> <%= format_date(study.fecha) %> - <%= format_hour(study.hora) %></p>
|
||||
<p><b>DNI:</b> <%= study.dni %></p>
|
||||
<p><b>Accession N°</b> <%= study.accession %></p>
|
||||
<p><b>Matricula derivante</b> <%= @current_user.matricula %></p>
|
||||
|
||||
</div>
|
||||
<div class="estudio_icons">
|
||||
<%= case {study.modality, study.esteco, study.estrx} do %>
|
||||
<% {"US", "F", _} -> %>
|
||||
<a href={"https://sga.sanatorio-americano.com.ar/diagnostico/impeco.asp?id=#{study.accession}"} target="_blank" style="color: #297177">
|
||||
<i class="fa-regular fa-file-lines fa-3x" style="color: #297177"></i>
|
||||
</a>
|
||||
<% {modality, _, "E"} when modality != "US" -> %>
|
||||
<a href={"https://ed.sanatorio-americano.com.ar/cgi-bin/minisite.bf/pdfonthefly/#{study.accession}"} target="_blank" style="color: #297177">
|
||||
<i class="fa-regular fa-file-lines fa-3x" style="color: #297177"></i>
|
||||
</a>
|
||||
<% _ -> %>
|
||||
<i class="fa-solid fa-file-circle-question fa-3x" style="color: #DCDCDC"></i>
|
||||
<% end %>
|
||||
<%= if study.modality != "US" do %>
|
||||
<a href={"https://imagenes.sanatorio-americano.com.ar/portal/Default.aspx?user_name=urlusr&password=1nt3gr4c10n$$$&accession_number=#{study.accession}"} target="_blank" style="color: #297177">
|
||||
<i class="fa-solid fa-file-circle-check fa-3x" style="color: #297177"></i>
|
||||
</a>
|
||||
<% else %>
|
||||
<i class="fa-solid fa-file-circle-question fa-3x" style="color: #DCDCDC"></i>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<div>
|
||||
<h1>
|
||||
No hay estudios para mostrar
|
||||
</h1>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="estudio_icons">
|
||||
<%= case {study.modality, study.esteco, study.estrx} do %>
|
||||
<% {"US", "F", _} -> %>
|
||||
<a href={"https://sga.sanatorio-americano.com.ar/diagnostico/impeco.asp?id=#{study.accession}"} target="_blank" style="color: #297177">
|
||||
<i class="fa-regular fa-file-lines fa-3x" style="color: #297177"></i>
|
||||
</a>
|
||||
<% {modality, _, "E"} when modality != "US" -> %>
|
||||
<a href={"https://ed.sanatorio-americano.com.ar/cgi-bin/minisite.bf/pdfonthefly/#{study.accession}"} target="_blank" style="color: #297177">
|
||||
<i class="fa-regular fa-file-lines fa-3x" style="color: #297177"></i>
|
||||
</a>
|
||||
<% _ -> %>
|
||||
<i class="fa-solid fa-file-circle-question fa-3x" style="color: #DCDCDC"></i>
|
||||
<% end %>
|
||||
<%= if study.modality != "US" do %>
|
||||
<a href={"https://imagenes.sanatorio-americano.com.ar/portal/Default.aspx?user_name=urlusr&password=1nt3gr4c10n$$$&accession_number=#{study.accession}"} target="_blank" style="color: #297177">
|
||||
<i class="fa-solid fa-file-circle-check fa-3x" style="color: #297177"></i>
|
||||
</a>
|
||||
<% else %>
|
||||
<i class="fa-solid fa-file-circle-question fa-3x" style="color: #DCDCDC"></i>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<div>
|
||||
<h1>
|
||||
No hay estudios para mostrar
|
||||
</h1>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
"""
|
||||
"""
|
||||
end
|
||||
|
||||
def format_date(date_string) when is_binary(date_string) do
|
||||
anio = String.slice(date_string, 0..3)
|
||||
mes = String.slice(date_string, 4..5)
|
||||
dia = String.slice(date_string, 6..7)
|
||||
"#{dia}/#{mes}/#{anio}"
|
||||
anio = String.slice(date_string, 0..3)
|
||||
mes = String.slice(date_string, 4..5)
|
||||
dia = String.slice(date_string, 6..7)
|
||||
"#{dia}/#{mes}/#{anio}"
|
||||
end
|
||||
def format_hour(hour_string) when is_binary(hour_string) do
|
||||
hora = String.slice(hour_string, 0..1)
|
||||
@ -84,26 +103,61 @@ defmodule DerivantesWeb.DerivantesLive do
|
||||
"#{hora}:#{minutos}:#{segundos}"
|
||||
end
|
||||
|
||||
def get_studies(socket) do
|
||||
query = from vl in "V_LISTAINGRESOS",
|
||||
select: %{
|
||||
idstudy: field(vl, :ID),
|
||||
estrx: field(vl, :ESTRX),
|
||||
esteco: field(vl, :ESTECO),
|
||||
# desc: field(vl, :PROD_DESC),
|
||||
hora: field(vl, :START_TIME),
|
||||
fecha: field(vl, :START_DATE),
|
||||
modality: field(vl, :MODALITY),
|
||||
dni: field(vl, :TIPO_DOCUMENTO),
|
||||
lastname: field(vl, :PATIENTLASTNAME),
|
||||
accession: field(vl, :ACCESSIONNUMBER),
|
||||
patientname: field(vl, :PATIENTFIRSTNAME)
|
||||
},
|
||||
where: field(vl, :MATDER) == ^socket.assigns.current_user.matricula,
|
||||
order_by: [desc: field(vl, :START_DATE)],
|
||||
limit: 20
|
||||
estudios = Derivantes.TdsRepo.all(query)
|
||||
estudios
|
||||
def get_studies(socket, filter) do
|
||||
|
||||
keys = Map.keys(filter)
|
||||
IO.inspect(keys)
|
||||
mat_filter = dynamic([vl], vl.matder == ^socket.assigns.current_user.matricula)
|
||||
filter_conditions =
|
||||
Enum.reduce(keys, mat_filter, fn v, filter_conditions ->
|
||||
case v do
|
||||
"dni" ->
|
||||
if(filter["dni"] != "") do
|
||||
dynamic([vl], vl.tipo_documento == ^filter["dni"] and ^filter_conditions)
|
||||
else
|
||||
filter_conditions
|
||||
end
|
||||
"accession" ->
|
||||
if(filter["accession"] != "") do
|
||||
dynamic([vl], vl.accessionnumber == ^filter["accession"] and ^filter_conditions)
|
||||
else
|
||||
filter_conditions
|
||||
end
|
||||
_ ->
|
||||
filter_conditions
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
query = from vl in "V_LISTAINGRESOS",
|
||||
select: %{
|
||||
idstudy: field(vl, :ID),
|
||||
estrx: field(vl, :ESTRX),
|
||||
esteco: field(vl, :ESTECO),
|
||||
# desc: field(vl, :PROD_DESC),
|
||||
hora: field(vl, :START_TIME),
|
||||
fecha: field(vl, :START_DATE),
|
||||
modality: field(vl, :MODALITY),
|
||||
dni: field(vl, :TIPO_DOCUMENTO),
|
||||
lastname: field(vl, :PATIENTLASTNAME),
|
||||
accession: field(vl, :ACCESSIONNUMBER),
|
||||
patientname: field(vl, :PATIENTFIRSTNAME)
|
||||
},
|
||||
where: ^filter_conditions,
|
||||
order_by: [desc: field(vl, :START_DATE)],
|
||||
limit: 20
|
||||
estudios = Derivantes.TdsRepo.all(query)
|
||||
estudios
|
||||
end
|
||||
|
||||
def handle_event(event, params, socket) do
|
||||
case event do
|
||||
"filter_study" ->
|
||||
studies = get_studies(socket, params["filters"])
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign(studies: studies)
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user