defmodule AthenaWeb.Admin.MovementController do use AthenaWeb, :controller alias Athena.Inventory alias Athena.Inventory.Movement def index(conn, %{"item" => item}) do item = item |> Inventory.get_item!() |> Repo.preload(:event) movements = item |> Inventory.list_movements() |> Repo.preload([:source_location, :destination_location]) render_with_navigation(conn, item.event, "index.html", movements: movements, item: item) end def new(conn, %{"item" => item}) do item = item |> Inventory.get_item!() |> Repo.preload(:event) locations = Inventory.list_locations(item.event) changeset = Inventory.change_movement(%Movement{}) render_with_navigation(conn, item.event, "new.html", changeset: changeset, item: item, locations: locations ) end def create(conn, %{"movement" => movement_params, "item" => item}) do item = item |> Inventory.get_item!() |> Repo.preload(:event) locations = Inventory.list_locations(item.event) case Inventory.create_movement(item, movement_params) do {:ok, movement} -> conn |> put_flash(:info, gettext("Movement created successfully.")) |> redirect(to: Routes.admin_movement_path(conn, :show, movement)) {:error, %Ecto.Changeset{} = changeset} -> render_with_navigation(conn, item.event, "new.html", changeset: changeset, item: item, locations: locations ) end end def show(conn, %{"id" => id}) do movement = id |> Inventory.get_movement!() |> Repo.preload([:item, :item_group, :source_location, :destination_location, :event]) render_with_navigation(conn, movement.event, "show.html", movement: movement) end def edit(conn, %{"id" => id}) do movement = id |> Inventory.get_movement!() |> Repo.preload(:event) locations = Inventory.list_locations(movement.event) changeset = Inventory.change_movement(movement) render_with_navigation(conn, movement.event, "edit.html", movement: movement, changeset: changeset, locations: locations ) end def update(conn, %{"id" => id, "movement" => movement_params}) do movement = id |> Inventory.get_movement!() |> Repo.preload(:event) locations = Inventory.list_locations(movement.event) case Inventory.update_movement(movement, movement_params) do {:ok, movement} -> conn |> put_flash(:info, gettext("Movement updated successfully.")) |> redirect(to: Routes.admin_movement_path(conn, :show, movement)) {:error, %Ecto.Changeset{} = changeset} -> render_with_navigation(conn, movement.event, "edit.html", movement: movement, changeset: changeset, locations: locations ) end end def delete(conn, %{"id" => id}) do %{item_id: item_id} = movement = Inventory.get_movement!(id) {:ok, _movement} = Inventory.delete_movement(movement) conn |> put_flash(:info, gettext("Movement deleted successfully.")) |> redirect(to: Routes.admin_movement_path(conn, :index, item_id)) end end