diff --git a/lib/infin/companies.ex b/lib/infin/companies.ex index 4fcccbb..66e9cea 100644 --- a/lib/infin/companies.ex +++ b/lib/infin/companies.ex @@ -55,7 +55,10 @@ defmodule Infin.Companies do """ def get_company_by_nif!(nif), do: Repo.get_by!(Company, nif: nif) - def get_company_by_nif(nif), do: Repo.get_by(Company, nif: nif) + def get_company_by_nif(nif) do + query = from(c in Company, where: c.nif == ^nif, preload: :users) + Repo.one(query) + end @doc """ Creates a company. diff --git a/lib/infin_web/controllers/user_registration_controller.ex b/lib/infin_web/controllers/user_registration_controller.ex index c108b04..0640dfe 100644 --- a/lib/infin_web/controllers/user_registration_controller.ex +++ b/lib/infin_web/controllers/user_registration_controller.ex @@ -4,6 +4,7 @@ defmodule InfinWeb.UserRegistrationController do alias Infin.Accounts alias Infin.Accounts.User alias InfinWeb.UserAuth + alias Infin.Companies def new(conn, _params) do changeset = Accounts.change_user_registration(%User{}) @@ -11,6 +12,25 @@ defmodule InfinWeb.UserRegistrationController do end def create(conn, %{"user" => user_params}) do + company = Companies.get_company_by_nif(user_params["company"]["nif"]) + if (not is_nil(company)) and company.users == [] do + user_params = Map.put(user_params, "company_id", company.id) + case Accounts.add_user(user_params) do + {:ok, user} -> + {:ok, _} = + Accounts.deliver_user_confirmation_instructions( + user, + &Routes.user_confirmation_url(conn, :confirm, &1) + ) + + conn + |> put_flash(:info, "User created successfully.") + |> UserAuth.log_in_user(user) + + {:error, %Ecto.Changeset{} = changeset} -> + render(conn, "new.html", changeset: changeset) + end + end case Accounts.register_user(user_params) do {:ok, user} -> {:ok, _} =