defmodule AthenaWeb.Admin.LocationController do use AthenaWeb, :controller alias Athena.Inventory alias Athena.Inventory.Location def index(conn, %{"event" => event}) do event = Inventory.get_event!(event) locations = Inventory.list_locations(event) render_with_navigation(conn, event, "index.html", event: event, locations: locations) end def new(conn, %{"event" => event}) do event = Inventory.get_event!(event) changeset = Inventory.change_location(%Location{}) render_with_navigation(conn, event, "new.html", changeset: changeset, event: event) end def create(conn, %{"event" => event, "location" => location_params}) do event = Inventory.get_event!(event) case Inventory.create_location(event, location_params) do {:ok, location} -> conn |> put_flash(:info, gettext("Location created successfully.")) |> redirect(to: Routes.admin_location_path(conn, :show, location)) {:error, %Ecto.Changeset{} = changeset} -> render_with_navigation(conn, event, "new.html", changeset: changeset, event: event) end end def show(conn, %{"id" => id}) do location = id |> Inventory.get_location!() |> Repo.preload(:event) render_with_navigation(conn, location.event, "show.html", location: location) end def edit(conn, %{"id" => id}) do location = id |> Inventory.get_location!() |> Repo.preload(:event) changeset = Inventory.change_location(location) render_with_navigation(conn, location.event, "edit.html", location: location, changeset: changeset ) end def update(conn, %{"id" => id, "location" => location_params}) do location = id |> Inventory.get_location!() |> Repo.preload(:event) case Inventory.update_location(location, location_params) do {:ok, location} -> conn |> put_flash(:info, gettext("Location updated successfully.")) |> redirect(to: Routes.admin_location_path(conn, :show, location)) {:error, %Ecto.Changeset{} = changeset} -> render_with_navigation(conn, location.event, "edit.html", location: location, changeset: changeset ) end end def delete(conn, %{"id" => id}) do %{event_id: event_id} = location = Inventory.get_location!(id) {:ok, _location} = Inventory.delete_location(location) conn |> put_flash(:info, gettext("Location deleted successfully.")) |> redirect(to: Routes.admin_location_path(conn, :index, event_id)) end end