Skip to content

Commit

Permalink
Fix/send report button (#138)
Browse files Browse the repository at this point in the history
* move assigns to form component

* fix: resolved form fields blank when typing

* fix: trimestral and anual have the same date

---------

Co-authored-by: Zoey de Souza Pessanha <[email protected]>
  • Loading branch information
douglastofoli and zoedsoupe authored Nov 29, 2023
1 parent ebdc6b3 commit c220bca
Show file tree
Hide file tree
Showing 8 changed files with 157 additions and 116 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
defmodule ModuloPesquisa.Handlers.IManageRelatoriosHandler do
alias ModuloPesquisa.Schemas.RelatorioPesquisa

@callback change_relatorio_pesquisa(RelatorioPesquisa.t(), map()) :: Ecto.Changeset.t()
@callback list_relatorios(sorter) :: list(RelatorioPesquisa.t())
when sorter: function
@callback list_relatorios_from_pesquisador(id, sorter) :: list(RelatorioPesquisa.t())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,21 @@ defmodule ModuloPesquisa.Models.RelatorioPesquisa do
|> validate_inclusion(:status, @status)
|> foreign_key_constraint(:pesquisador_id)
|> validate_period()
|> validate_status()
|> put_limit_date()
end

defp put_limit_date(changeset) do
report_type = get_field(changeset, :tipo)
today = Date.utc_today()

limit_date =
case report_type do
nil -> changeset
:mensal -> Date.from_iso8601!("#{today.year}-#{today.month}-15")
_ -> Date.from_iso8601!("#{today.year}-#{today.month}-10")
end

put_change(changeset, :data_limite, limit_date)
end

defp validate_period(changeset) do
Expand Down
4 changes: 2 additions & 2 deletions apps/plataforma_digital/assets/css/app.scss
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ footer {
@apply h-screen;
}

header > nav {
header>nav {
@apply h-full;
}

Expand Down Expand Up @@ -183,4 +183,4 @@ footer {
@import "./pages/app/researcher/relatorio/report.scss";

// Páginas de Erros
@import "./errors/404.scss";
@import "./errors/404.scss";
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ defmodule PlataformaDigital.DesignSystem do
<.button style="primary" submit> Submissão </.button>
"""

attr(:name, :string, default: "")
attr(:value, :string, default: "")
attr(:style, :string, values: ~w(primary secondary link), required: true)
attr(:submit, :boolean, default: false)
attr(:disabled, :boolean, default: false)
Expand All @@ -126,6 +128,8 @@ defmodule PlataformaDigital.DesignSystem do
def button(assigns) do
~H"""
<button
name={@name}
value={@value}
type={if @submit, do: "submit", else: "button"}
class={["btn", "btn-#{@style}", @class]}
phx-click={@click}
Expand Down Expand Up @@ -324,7 +328,6 @@ defmodule PlataformaDigital.DesignSystem do
attr(:placeholder, :string, required: false, default: "")
attr(:value, :string, default: "")
attr(:valid, :boolean, required: false, default: nil)
attr(:field, Phoenix.HTML.FormField)
attr(:class, :string, default: "")

slot(:label, required: false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,19 @@ defmodule PlataformaDigital.Pesquisa.Relatorio.FormComponent do
<%= @form_title %>
</.text>
<.form for={@form} phx-target={@myself} phx-change="validate" phx-submit="save">
<.form
for={@form}
id="relatorio-form"
phx-target={@myself}
phx-change="validate"
phx-submit="save"
>
<div class="input-date-group" style="display: flex;">
<.text_input type="date" label="Início período" field={@form[:data_inicio]} />
<.text_input type="date" label="Fim periodo" field={@form[:data_fim]} />
</div>
<.inputs_for :let={f} field={@form[get_embedded_conteudo(assigns)]}>
<.inputs_for :let={f} field={@form[@conteudo]}>
<.report_field
:for={{label, name} <- @field_names}
field={f[name]}
Expand All @@ -27,13 +33,14 @@ defmodule PlataformaDigital.Pesquisa.Relatorio.FormComponent do
/>
</.inputs_for>
<.text_input type="hidden" field={@form[:tipo]} value={@tipo_relatorio} />
<.text_input type="hidden" field={@form[:tipo]} value={@report_type} />
<.text_input type="hidden" field={@form[:pesquisador_id]} value={@pesquisador_id} />
<.text_input type="hidden" field={@form[:status]} value="pendente" />
<.text_input type="hidden" field={@form[:data_limite]} value={get_data_limite(assigns)} />
<div class="buttons-wrapper">
<.button
name="save"
value="save-report"
style="primary"
phx-disable-with="Salvando..."
submit
Expand All @@ -42,6 +49,8 @@ defmodule PlataformaDigital.Pesquisa.Relatorio.FormComponent do
<Lucideicons.save /> Salvar respostas
</.button>
<.button
name="save"
value="send-report"
style="primary"
phx-disable-with="Enviando..."
submit
Expand All @@ -62,7 +71,8 @@ defmodule PlataformaDigital.Pesquisa.Relatorio.FormComponent do
{:ok,
socket
|> assign(assigns)
|> assign_form(changeset)}
|> assign_form(changeset)
|> assign_form_data(assigns)}
end

@impl true
Expand All @@ -76,7 +86,17 @@ defmodule PlataformaDigital.Pesquisa.Relatorio.FormComponent do
end

@impl true
def handle_event("save", %{"relatorio_pesquisa" => params}, socket) do
def handle_event("save", %{"save" => "save-report", "relatorio_pesquisa" => params}, socket) do
handle_store(socket, socket.assigns.action, params)
end

@impl true
def handle_event("save", %{"save" => "send-report", "relatorio_pesquisa" => params}, socket) do
params =
params
|> put_in(["status"], "entregue")
|> put_in(["data_entrega"], Date.utc_today())

handle_store(socket, socket.assigns.action, params)
end

Expand Down Expand Up @@ -107,31 +127,17 @@ defmodule PlataformaDigital.Pesquisa.Relatorio.FormComponent do
end
end

defp assign_form(socket, %Ecto.Changeset{} = changeset) do
assign(socket, :form, to_form(changeset))
end

defp get_embedded_conteudo(%{tipo_relatorio: tipo_relatorio}) do
case tipo_relatorio do
"mensal" -> :conteudo_mensal
"trimestral" -> :conteudo_trimestral
"anual" -> :conteudo_anual
end
end

defp get_data_limite(%{tipo_relatorio: tipo_relatorio, today: today}) do
case tipo_relatorio do
"mensal" -> Date.from_iso8601!("#{today.year}-#{today.month}-15")
"trimestral" -> Date.from_iso8601!("#{today.year}-#{today.month}-10")
"anual" -> Date.utc_today()
end
end

defp notify_parent(msg), do: send(self(), {__MODULE__, msg})

defp report_field(assigns) do
~H"""
<.text_area field={@field} disabled={@disabled} class="report-field">
<.text_area
id={@field.id}
name={@field.name}
value={@field.value}
disabled={@disabled}
class="report-field"
>
<:label>
<.text size="h3" color="text-blue-100">
<%= @label %>
Expand All @@ -140,4 +146,83 @@ defmodule PlataformaDigital.Pesquisa.Relatorio.FormComponent do
</.text_area>
"""
end

defp assign_form(socket, %Ecto.Changeset{} = changeset) do
assign(socket, :form, to_form(changeset))
end

defp assign_form_data(socket, %{report_type: "mensal"} = assigns) do
socket
|> assign(:report_type, :mensal)
|> assign(:conteudo, :conteudo_mensal)
|> assign(
:form_title,
"Relatório Mensal de Pesquisa #{assigns.today.month} de #{assigns.today.month_word} de #{assigns.today.year}"
)
|> assign(:field_names, get_report_field_names(:mensal))
end

defp assign_form_data(socket, %{report_type: "trimestral"} = assigns) do
socket
|> assign(:report_type, :trimestral)
|> assign(:conteudo, :conteudo_trimestral)
|> assign(
:form_title,
"Relatório Trimestral de Pesquisa do #{assigns.today.quarterly}º Trimestre de #{assigns.today.year}"
)
|> assign(:field_names, get_report_field_names(:trimestral))
end

defp assign_form_data(socket, %{report_type: "anual"} = assigns) do
socket
|> assign(:report_type, :anual)
|> assign(:conteudo, :conteudo_anual)
|> assign(
:form_title,
"Relatório Mensal de Pesquisa #{assigns.today.month} de #{assigns.today.month_word} de #{assigns.today.year}"
)
|> assign(:field_names, get_report_field_names(:anual))
end

defp get_report_field_names(:mensal) do
[
{"Ações de Planejamento", :acao_planejamento},
{"Participação em Grupos de Estudos", :participacao_grupos_estudo},
{"Ações de Pesquisas de Campo, Análise de Dados e Construção Audiovisual", :acoes_pesquisa},
{"Participação em Treinamentos e Crusos PEA Pescarte", :participacao_treinamentos},
{"Publicação", :publicacao},
{"Previsão de Ação de Planejamento", :previsao_acao_planejamento},
{"Previsão de Participação em Grupos de Estudo", :previsao_participacao_grupos_estudo},
{"Previsão de Participação em Treinamentos e Cursos PEA Pescarte",
:previsao_participacao_treinamentos},
{"Previsão de Ações de Pesquisa", :previsao_acoes_pesquisa}
]
end

defp get_report_field_names(:trimestral) do
[
{"Título", :titulo},
{"Resumo", :resumo},
{"Introdução", :introducao},
{"Embasamento Teórico", :embasamento_teorico},
{"Resultados Preliminares", :resultados_preliminares},
{"Atividades Acadêmicas", :atividades_academicas},
{"Atividades Não Acadêmicas", :atividades_nao_academicas},
{"Referências", :referencias}
]
end

defp get_report_field_names(:anual) do
[
{"Plano de Trabalho", :plano_de_trabalho},
{"Resumo", :resumo},
{"Introdução", :introducao},
{"Embasamento Teórico", :embasamento_teorico},
{"Resultados", :resultados},
{"Atividades Acadêmicas", :atividades_academicas},
{"Atividades Não Acadêmicas", :atividades_nao_academicas},
{"Conclusão", :conclusao},
{"Referências", :referencias}
]
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -10,83 +10,24 @@ defmodule PlataformaDigital.Pesquisa.RelatorioLive.Index do
@locale "pt_BR"

@impl true
def mount(params, _session, %{assigns: assigns} = socket) do
current_user = Repo.preload(assigns.current_user, :pesquisador)
def mount(%{"tipo_relatorio" => report_type}, _session, socket) do
current_user = Repo.preload(socket.assigns.current_user, :pesquisador)

{:ok,
socket
|> assign(:tipo_relatorio, params["tipo"])
|> assign(:field_names, get_report_field_names(params))
|> assign(:today, get_formatted_today(Date.utc_today()))
|> assign(:pesquisador_id, current_user.pesquisador.id_publico)}
end

defp parse_form_title_by_type(%{assigns: assigns}) do
case assigns.tipo_relatorio do
"mensal" ->
"Relatório Mensal de Pesquisa #{assigns.today.month} de #{assigns.today.month_word} de #{assigns.today.year}"

"trimestral" ->
"Relatório Trimestral de Pesquisa do #{assigns.today.quarterly}º Trimestre de #{assigns.today.year}"

"anual" ->
"Relatório Mensal de Pesquisa do ano de #{assigns.today.year}"
end
|> assign(:pesquisador_id, current_user.pesquisador.id_publico)
|> assign(:report_type, report_type)}
end

@impl true
def handle_params(params, _uri, socket) do
{:noreply, apply_action(socket, socket.assigns.live_action, params)}
end

defp get_report_field_names("mensal") do
[
{"Ações de Planejamento", :acao_planejamento},
{"Participação em Grupos de Estudos", :participacao_grupos_estudo},
{"Ações de Pesquisas de Campo, Análise de Dados e Construção Audiovisual", :acoes_pesquisa},
{"Participação em Treinamentos e Crusos PEA Pescarte", :participacao_treinamentos},
{"Publicação", :publicacao},
{"Previsão de Ação de Planejamento", :previsao_acao_planejamento},
{"Previsão de Participação em Grupos de Estudo", :previsao_participacao_grupos_estudo},
{"Previsão de Participação em Treinamentos e Cursos PEA Pescarte",
:previsao_participacao_treinamentos},
{"Previsão de Ações de Pesquisa", :previsao_acoes_pesquisa}
]
end

defp get_report_field_names("trimestral") do
[
{"Título", :titulo},
{"Resumo", :resumo},
{"Introdução", :introducao},
{"Embasamento Teórico", :embasamento_teorico},
{"Resultados Preliminares", :resultados_preliminares},
{"Atividades Acadêmicas", :atividades_academicas},
{"Atividades Não Acadêmicas", :atividades_nao_academicas},
{"Referências", :referencias}
]
end

defp get_report_field_names("anual") do
[
{"Plano de Trabalho", :plano_de_trabalho},
{"Resumo", :resumo},
{"Introdução", :introducao},
{"Embasamento Teórico", :embasamento_teorico},
{"Resultados", :resultados},
{"Atividades Acadêmicas", :atividades_academicas},
{"Atividades Não Acadêmicas", :atividades_nao_academicas},
{"Conclusão", :conclusao},
{"Referências", :referencias}
]
end

defp get_report_field_names(_), do: get_report_field_names("mensal")

defp apply_action(socket, :new, _params) do
socket
|> assign(:title, "Novo relatório")
|> assign(:form_title, parse_form_title_by_type(socket))
|> assign(:relatorio, %RelatorioPesquisa{})
end

Expand All @@ -95,7 +36,6 @@ defmodule PlataformaDigital.Pesquisa.RelatorioLive.Index do

socket
|> assign(:title, "Editar relatório")
|> assign(:form_title, parse_form_title_by_type(socket))
|> assign(:relatorio, relatorio)
end

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
<.live_component
module={PlataformaDigital.Pesquisa.Relatorio.FormComponent}
id={@relatorio.id_publico || :new}
tipo_relatorio={@tipo_relatorio}
report_type={@report_type}
title={@title}
form_title={@form_title}
action={@live_action}
relatorio={@relatorio}
today={@today}
pesquisador_id={@pesquisador_id}
field_names={@field_names}
patch={~p"/app/pesquisa/relatorios"}
/>
Loading

0 comments on commit c220bca

Please sign in to comment.