Skip to content

Commit

Permalink
Created new offered course show page
Browse files Browse the repository at this point in the history
  • Loading branch information
laszlokardinal committed Jun 21, 2017
1 parent 50fec36 commit 8c583fc
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 69 deletions.
44 changes: 41 additions & 3 deletions web/controllers/offered_course_controller.ex
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
defmodule CoursePlanner.OfferedCourseController do
use CoursePlanner.Web, :controller

alias CoursePlanner.{OfferedCourse, Students, Teachers}
alias CoursePlanner.{OfferedCourse, Students, Teachers, AttendanceHelper}
alias Ecto.Changeset
import Ecto.Query, only: [from: 2]

Expand Down Expand Up @@ -46,8 +46,46 @@ defmodule CoursePlanner.OfferedCourseController do
offered_course =
OfferedCourse
|> Repo.get!(id)
|> Repo.preload([:term, :course, :students, :teachers])
render(conn, "show.html", offered_course: offered_course)
|> Repo.preload([:term, :course, :students, :teachers, :classes])

user_role = conn.assigns.current_user.role
user_id = conn.assigns.current_user.id
attendances = AttendanceHelper.get_student_attendances(id, user_id)

classes =
if user_role === "Student" do
Enum.map offered_course.classes, fn class ->
Map.merge class,
attendances
|> Enum.filter(fn attendance -> attendance.class_id === class.id end)
|> Enum.at(0)
|> (fn map -> map || %{} end).()
|> Map.take([:attendance_type])
end
else
offered_course.classes
end

now = Ecto.DateTime.utc

{reversed_past_classes, next_classes} =
classes
|> Enum.sort(fn (class_a, class_b) ->
class_a_datetime = Ecto.DateTime.from_date_and_time(class_a.date, class_a.starting_at)
class_b_datetime = Ecto.DateTime.from_date_and_time(class_b.date, class_b.starting_at)
Ecto.DateTime.compare(class_a_datetime, class_b_datetime) == :lt
end)
|> Enum.split_with(fn class ->
class_datetime = Ecto.DateTime.from_date_and_time(class.date, class.starting_at)
Ecto.DateTime.compare(class_datetime, now) == :lt
end)

past_classes = Enum.reverse reversed_past_classes

render(conn, "show.html", offered_course: offered_course,
next_classes: next_classes,
past_classes: past_classes,
user_role: user_role)
end

def edit(conn, %{"id" => id}) do
Expand Down
126 changes: 60 additions & 66 deletions web/templates/offered_course/show.html.eex
Original file line number Diff line number Diff line change
@@ -1,72 +1,66 @@
<h2>Show offered course</h2>
<h3>Term</h3>
<ul>
<li>
<strong>ID:</strong>
<%= @offered_course.term.id %>
</li>

<li>
<strong>Name:</strong>
<%= @offered_course.term.name %>
</li>
<div class="row">
<div class="
col-xs-12
col-sm-offset-1 col-sm-10
col-md-offset-2 col-md-8
col-lg-offset-2 col-lg-8
">
<div class="row middle-xs page-header">
<div class="col-xs-6 col-sm-9 col-md-10 page-title">
<%= Enum.join [@offered_course.course.name, @offered_course.term.name], " - " %>
</div>
<%= if @user_role == "Coordinator" do %>
<div class="col-xs-6 col-sm-3 col-md-2">
<%= link "Edit", to: offered_course_path(@conn, :edit, @offered_course),
class: "mdl-button mdl-js-button mdl-button--raised"
%>
</div>
<% end %>
</div>

<li>
<strong>Start Date:</strong>
<%= @offered_course.term.start_date %>
</li>
<div class="page">
<%= CoursePlanner.SharedView.card "Syllabus", highlighted_title: true do %>
<%= CoursePlanner.SharedView.card_content do %>
<div class="card-text">
<%= @offered_course.syllabus %>
</div>
<% end %>
<% end %>

<li>
<strong>End Date:</strong>
<%= @offered_course.term.end_date %>
</li>
<%= if length(@next_classes) > 0 do %>
<div class="row middle-xs page-header">
<div class="col-xs-12 page-title page-title--small">
Next Classes
</div>
</div>
<%= CoursePlanner.SharedView.class_list @next_classes, empty_text: "This course has no classes yet",
show_attendances: @user_role === "Student"
%>
<% end %>

<li>
<strong>Number of sessions:</strong>
<%= @offered_course.number_of_sessions %>
</li>
<%= if length(@past_classes) > 0 do %>
<div class="row middle-xs page-header">
<div class="col-xs-12 page-title page-title--small">
Past Classes
</div>
</div>
<%= CoursePlanner.SharedView.class_list @past_classes, empty_text: "This course has no classes yet",
show_attendances: @user_role === "Student"
%>
<% end %>

<li>
<strong>Syllabus:</strong>
<%= @offered_course.syllabus %>
</li>
<div class="row middle-xs page-header">
<div class="col-xs-12 page-title page-title--small">
<%= if @user_role == "Student" do %>
Classmates
<% else %>
Students
<% end %>
</div>
</div>
<%= CoursePlanner.SharedView.user_list @offered_course.students, empty_text: "This course has no students yet" %>

</ul>
<h3>Course</h3>
<ul>
<li>
<strong>ID:</strong>
<%= @offered_course.course.id %>
</li>

<li>
<strong>Name:</strong>
<%= @offered_course.course.name %>
</li>

</ul>
<%= if length(@offered_course.students) > 0 do %>
<h3>Students</h3>
<ul>
<%= for s <- @offered_course.students do %>
<li>
<strong>Name</strong>
<%= "#{s.name} #{s.family_name}" %>
</li>
<% end %>
</ul>
<% end %>
<%= if length(@offered_course.teachers) > 0 do %>
<h3>Teachers</h3>
<ul>
<%= for s <- @offered_course.teachers do %>
<li>
<strong>Name:</strong>
<%= "#{s.name} #{s.family_name}" %>
</li>
<% end %>
</ul>
<% end %>

<%= link "Edit", to: offered_course_path(@conn, :edit, @offered_course) %>
<%= link "Back", to: offered_course_path(@conn, :index) %>
</div>
</div>
</div>

0 comments on commit 8c583fc

Please sign in to comment.