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 +

+

+ Termos e Condições +

+

+ Lê com atenção antes de concluires a tua compra. +

+
+ +
+
+

+ 1. Reembolsos +

+

+ 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). +

+
+ +
+

+ 2. Transferência do Bilhete +

+

+ É 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. +

+
+ +
+

+ 3. Data Limite de Venda +

+

+ 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. +

+
+ +
+

+ 4. Lotação e Disponibilidade +

+

+ 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. +

+
+ +
+

+ 5. Transporte +

+

+ 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. +

+
+ +
+

+ 6. Aceitação dos Termos +

+

+ 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. +

+
+
+
+
diff --git a/lib/gallium_web/live/ticketing_purchase/steps/personal_data.html.heex b/lib/gallium_web/live/ticketing_purchase/steps/personal_data.html.heex index c8ee82c..79b5d55 100644 --- a/lib/gallium_web/live/ticketing_purchase/steps/personal_data.html.heex +++ b/lib/gallium_web/live/ticketing_purchase/steps/personal_data.html.heex @@ -177,6 +177,39 @@ +
+ +

+ <.icon name="hero-exclamation-circle-mini" class="size-4 shrink-0" /> + {msg} +

+
+
<.primary_button diff --git a/lib/gallium_web/router.ex b/lib/gallium_web/router.ex index c908f1a..59f7557 100644 --- a/lib/gallium_web/router.ex +++ b/lib/gallium_web/router.ex @@ -24,6 +24,7 @@ defmodule GalliumWeb.Router do on_mount: [{GalliumWeb.UserAuth, :mount_current_scope}] do live "/", LandingLive.Index, :index live "/tickets", TicketsLive.Index, :index + live "/terms", TermsLive.Index, :index end end