api-v2/lib/api/api_consultas/downloadpdf.ex
2025-04-16 10:03:13 -03:00

71 lines
3.2 KiB
Elixir

defmodule Api.Downloadpdf do
import Ecto.Query
alias Api.Repo
require Logger
def get_report_query(idstudyreport) do
Logger.info("hash antes de query: #{idstudyreport}")
# uso hex en la desencriptación porque el proceso de encriptación involucraba convertir los datos binarios a una cadena de texto (substring)
q = """
SELECT convert_from(decrypt(decode('#{idstudyreport}', 'hex')::bytea, '1nf0rm3'::bytea, 'aes'), 'UTF8');
"""
idstudyreport = Repo.query!(q).rows |> hd() |> hd()
Logger.info("hash despues de query: #{idstudyreport}")
idstudyreport = String.to_integer(idstudyreport)
template_name = Envar.get("TEMPLATE_NAME")
# template_name = System.get_env("TEMPLATE_NAME")
Logger.info("template: #{template_name}")
# pr2_statusname = Envar.get("pr2_statusname")
query =
from sr in "studyreport",
join: s in "study",
on: s.idstudy == sr.idstudy,
join: p in "patient",
on: p.idpatient == s.idpatient,
left_join: pr in "professional",
on: pr.idprofessional == sr.idprofessional_finalizedby,
left_join: u in "users",
on: u.iduser == pr.iduser,
join: pt in "printtemplates",
on: pt.printtemplate_type == "STUDYREPORT",
where: sr.idstudyreport == ^idstudyreport,
where: pt.printtemplate == ^template_name,
where: pt.enabled == true,
select: %{
idstudyreport: sr.idstudyreport,
body: sr.body,
idstudy: s.idstudy,
printtemplate: pt.template,
accessionnumber: s.accessionnumber,
patientname: fragment("replace(?, '^', ' ')", p.patientname),
studydate: fragment("TO_CHAR(?, 'YYYY-MM-DD')", s.studydate),
studytime: s.studytime,
studydescription: s.studydescription,
proceduredescription: s.proceduredescription,
procedurecode: s.procedurecode,
modality: s.modality,
patientid: p.patientid,
patientbirthdate: fragment("TO_CHAR(?, 'YYYY-MM-DD')", p.patientbirthdate),
fin_signature: pr.signature,
matricula_finalized: fragment("COALESCE(?, '')",pr.matricula),
informantphysician: u.username,
insurer: fragment("COALESCE(?, '')",s.insurer),
institutionname: s.institutionname,
referringphysiciansname: fragment("COALESCE(?, '')", s.referringphysiciansname)
}
result = Repo.one(
from q in subquery(query),
select: fragment("json_build_object('idstudyreport', ?, 'body', ?, 'idstudy', ?, 'accessionnumber', ?, 'patientname', ?, 'studydate', ?, 'studytime', ?, 'studydescription', ?, 'proceduredescription', ?, 'procedurecode', ?, 'modality', ?, 'patientid', ?, 'patientbirthdate', ?, 'fin_signature', ?, 'matricula_finalized', ?, 'informantphysician', ?, 'insurer', ?, 'institutionname', ?, 'referringphysiciansname', ?, 'printtemplate', ?)",
q.idstudyreport, q.body, q.idstudy, q.accessionnumber, q.patientname, q.studydate, q.studytime, q.studydescription, q.proceduredescription, q.procedurecode, q.modality, q.patientid, q.patientbirthdate, q.fin_signature, q.matricula_finalized, q.informantphysician, q.insurer, q.institutionname, q.referringphysiciansname, q.printtemplate
)
)
Logger.info("#{inspect(result)}")
result
end
end