diff --git a/lib/gallium/ticketing/checkout_form.ex b/lib/gallium/ticketing/checkout_form.ex
index 2e0668e..24fad00 100644
--- a/lib/gallium/ticketing/checkout_form.ex
+++ b/lib/gallium/ticketing/checkout_form.ex
@@ -15,6 +15,7 @@ defmodule Gallium.Ticketing.CheckoutForm do
field :wants_transport, :boolean, default: false
field :table_preference, :string
field :allergies, :string
+ field :terms_accepted, :boolean, default: false, virtual: true
embeds_one :accompany, AccompanyForm, primary_key: false, on_replace: :delete do
field :full_name, :string
@@ -33,11 +34,13 @@ defmodule Gallium.Ticketing.CheckoutForm do
:is_cesium_member,
:wants_transport,
:table_preference,
- :allergies
+ :allergies,
+ :terms_accepted
])
|> validate_required([:full_name, :student_number, :phone_number, :is_cesium_member],
message: "Este campo é obrigatório"
)
+ |> validate_terms_accepted()
|> validate_length(:full_name, min: 3, message: "O nome tem de ter pelo menos 3 letras")
|> validate_format(:phone_number, ~r/^\+?\d{9,15}$/, message: "Número de telefone inválido")
|> validate_format(:student_number, ~r/^(a\d{1,6}|pg\d{1,5}|e\d{1,6})$/i,
@@ -52,6 +55,18 @@ defmodule Gallium.Ticketing.CheckoutForm do
|> cast_embed(:accompany, with: &accompany_changeset/2)
end
+ defp validate_terms_accepted(changeset) do
+ if get_field(changeset, :terms_accepted) == true do
+ changeset
+ else
+ add_error(
+ changeset,
+ :terms_accepted,
+ "Tens de aceitar os Termos e Condições para continuar"
+ )
+ end
+ end
+
defp accompany_changeset(schema, attrs) do
schema
|> cast(attrs, [:full_name, :email, :phone_number])
diff --git a/lib/gallium_web/live/terms/index.ex b/lib/gallium_web/live/terms/index.ex
new file mode 100644
index 0000000..414f233
--- /dev/null
+++ b/lib/gallium_web/live/terms/index.ex
@@ -0,0 +1,8 @@
+defmodule GalliumWeb.TermsLive.Index do
+ use GalliumWeb, :landing_view
+
+ @impl true
+ def mount(_params, _session, socket) do
+ {:ok, assign(socket, :page_title, "Termos e Condições")}
+ end
+end
diff --git a/lib/gallium_web/live/terms/index.html.heex b/lib/gallium_web/live/terms/index.html.heex
new file mode 100644
index 0000000..483e75f
--- /dev/null
+++ b/lib/gallium_web/live/terms/index.html.heex
@@ -0,0 +1,111 @@
+
+ Jantar de Gala 26
+
+ Lê com atenção antes de concluires a tua compra.
+
+ Não são efetuados reembolsos, sob qualquer circunstância, após a
+ confirmação do pagamento do bilhete. Ao concluíres a compra, declaras estar ciente
+ de que o valor pago não será devolvido, total ou parcialmente, independentemente do
+ motivo invocado (incluindo, mas não se limitando a, impossibilidade de
+ comparência, alteração de planos pessoais ou desistência).
+
+ É possível alterar a pessoa associada ao bilhete, desde que tal alteração seja
+ comunicada à organização com a devida antecedência e até à data limite de venda
+ de bilhetes. Para solicitar a transferência, deves contactar a organização
+ através dos canais oficiais, indicando o nome, número de estudante e contacto da
+ nova pessoa. A transferência só se considera efetiva após confirmação por parte
+ da organização.
+
+ A venda de bilhetes encerra no dia 21 de maio. Após esta data,
+ não serão aceites novas inscrições nem pagamentos, ainda que existam vagas
+ disponíveis.
+
+ O evento tem uma lotação máxima de 100 pessoas. Após atingido
+ este limite, os bilhetes poderão deixar de estar disponíveis. Caso a organização
+ decida disponibilizar bilhetes adicionais, o respetivo preço poderá ser superior
+ ao praticado até então. A organização reserva-se o direito de encerrar as vendas
+ a qualquer momento, sem aviso prévio, assim que a lotação seja atingida.
+
+ O transporte (ida e volta) é assegurado pela organização apenas aos participantes
+ que o tenham solicitado expressamente no momento da compra do bilhete.
+
+ Caso indiques que não pretendes transporte, fica desde já
+ esclarecido que o mesmo não te será garantido e não terás lugar
+ reservado no(s) autocarro(s), mesmo que mudes de ideias posteriormente. Cabe-te a
+ ti assegurar a tua deslocação até ao local do evento e de regresso.
+
+ Caso tenhas pedido transporte e, posteriormente, percebas que afinal não
+ necessitas dele, pedimos que comuniques essa informação à organização, com a
+ maior brevidade possível, através dos canais oficiais. Esta cortesia permite-nos
+ ajustar a logística e, eventualmente, disponibilizar o lugar a outro
+ participante.
+
+ A compra de um bilhete para o Jantar de Gala implica a leitura, compreensão e
+ aceitação integral dos presentes Termos e Condições. A organização reserva-se o
+ direito de recusar a entrada no evento a participantes que não cumpram as
+ condições aqui descritas.
+
+ Para qualquer questão ou pedido relacionado com a transferência de bilhete,
+ transporte ou outras situações previstas neste documento, contacta a organização
+ através dos canais oficiais do CeSIUM.
+
+ Termos e Condições
+
+
+ 1. Reembolsos
+
+
+ 2. Transferência do Bilhete
+
+
+ 3. Data Limite de Venda
+
+
+ 4. Lotação e Disponibilidade
+
+
+ 5. Transporte
+
+
+ 6. Aceitação dos Termos
+
+
+ <.icon name="hero-exclamation-circle-mini" class="size-4 shrink-0" /> + {msg} +
+