100 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
defmodule ConfientWeb.StudentController do
 | 
						|
  use ConfientWeb, :controller
 | 
						|
 | 
						|
  alias Confient.School
 | 
						|
  alias Confient.School.Student
 | 
						|
 | 
						|
  def index(conn, _params) do
 | 
						|
    students = School.list_students()
 | 
						|
    render(conn, "index.html", students: students)
 | 
						|
  end
 | 
						|
 | 
						|
  def new(conn, _params) do
 | 
						|
    changeset = School.change_student(%Student{})
 | 
						|
    classes = School.list_classes() |> Enum.map(&{&1.name, &1.id})
 | 
						|
 | 
						|
    render(conn, "new.html",
 | 
						|
      changeset: changeset,
 | 
						|
      classes: classes
 | 
						|
    )
 | 
						|
  end
 | 
						|
 | 
						|
  def bulkform(conn, _params) do
 | 
						|
    classes = School.list_classes() |> Enum.map(&{&1.name, &1.id})
 | 
						|
 | 
						|
    render(conn, "bulkform.html",
 | 
						|
      classes: classes,
 | 
						|
      token: get_csrf_token()
 | 
						|
    )
 | 
						|
  end
 | 
						|
 | 
						|
  def create(conn, %{"student" => student_params}) do
 | 
						|
    case School.create_student(student_params) do
 | 
						|
      {:ok, student} ->
 | 
						|
        conn
 | 
						|
        |> put_flash(:info, "Elève créé avec succès.")
 | 
						|
        |> redirect(to: Routes.student_path(conn, :show, student))
 | 
						|
 | 
						|
      {:error, %Ecto.Changeset{} = changeset} ->
 | 
						|
        classes = Confient.School.list_classes() |> Enum.map(&{&1.name, &1.id})
 | 
						|
        render(conn, "new.html", changeset: changeset, classes: classes)
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def bulkcreate(conn, %{"file" => %{"list" => ""}}) do
 | 
						|
    conn
 | 
						|
    |> put_flash(:error, "Aucun fichier CSV.")
 | 
						|
    |> redirect(to: Routes.student_path(conn, :bulkform))
 | 
						|
  end
 | 
						|
 | 
						|
  def bulkcreate(conn, %{"file" => %{"list" => file}, "class" => %{"class_id" => class_id}}) do
 | 
						|
    class = School.get_class!(class_id)
 | 
						|
    {:ok, students} = CSV.parse(file.path)
 | 
						|
 | 
						|
    for {lastname, firstname} <- students do
 | 
						|
      unless School.student_exists?(lastname, firstname, class) do
 | 
						|
        School.create_student(class, %{"lastname" => lastname, "firstname" => firstname})
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    conn
 | 
						|
    |> put_flash(:info, "Elèves créés avec succès.")
 | 
						|
    |> redirect(to: Routes.student_path(conn, :bulkform))
 | 
						|
  end
 | 
						|
 | 
						|
  def show(conn, %{"id" => id}) do
 | 
						|
    student = School.get_full_student!(id)
 | 
						|
    render(conn, "show.html", student: student)
 | 
						|
  end
 | 
						|
 | 
						|
  def edit(conn, %{"id" => id}) do
 | 
						|
    student = School.get_student!(id)
 | 
						|
    changeset = School.change_student(student)
 | 
						|
    classes = School.list_classes() |> Enum.map(&{&1.name, &1.id})
 | 
						|
    render(conn, "edit.html", student: student, changeset: changeset, classes: classes)
 | 
						|
  end
 | 
						|
 | 
						|
  def update(conn, %{"id" => id, "student" => student_params}) do
 | 
						|
    student = School.get_student!(id)
 | 
						|
 | 
						|
    case School.update_student(student, student_params) do
 | 
						|
      {:ok, student} ->
 | 
						|
        conn
 | 
						|
        |> put_flash(:info, "Elève mis à jour avec succès.")
 | 
						|
        |> redirect(to: Routes.student_path(conn, :show, student))
 | 
						|
 | 
						|
      {:error, %Ecto.Changeset{} = changeset} ->
 | 
						|
        render(conn, "edit.html", student: student, changeset: changeset)
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def delete(conn, %{"id" => id}) do
 | 
						|
    student = School.get_student!(id)
 | 
						|
    {:ok, _student} = School.delete_student(student)
 | 
						|
 | 
						|
    conn
 | 
						|
    |> put_flash(:info, "Elève supprimé.")
 | 
						|
    |> redirect(to: Routes.student_path(conn, :index))
 | 
						|
  end
 | 
						|
end
 |