From 6b361595c00ad5efbb24b0f5408691e695627391 Mon Sep 17 00:00:00 2001 From: Henrique Lampert Date: Tue, 18 Feb 2014 15:53:52 -0300 Subject: [PATCH] Issue 32: Admin can see users timesheets --- .../javascripts/partials/timesheet.js.coffee | 2 +- .../stylesheets/partials/timesheet.css.scss | 14 +++++- app/controllers/timesheet_controller.rb | 25 ++++++++--- app/models/timesheet.rb | 25 ++++++----- app/views/layouts/_header.html.erb | 4 +- app/views/timesheet/show.html.erb | 45 +++++++++++++------ config/routes.rb | 2 +- 7 files changed, 80 insertions(+), 37 deletions(-) diff --git a/app/assets/javascripts/partials/timesheet.js.coffee b/app/assets/javascripts/partials/timesheet.js.coffee index 4b097e6..be211c2 100644 --- a/app/assets/javascripts/partials/timesheet.js.coffee +++ b/app/assets/javascripts/partials/timesheet.js.coffee @@ -2,7 +2,7 @@ jQuery -> $("#datepicker").datepicker onSelect: (dateText, inst) -> [month, day, year] = dateText.split('/') - window.location = "/timesheet/#{year}/#{month}/#{day}" + window.location = "/timesheet/" + timesheet_user_id + "/#{year}/#{month}/#{day}" $(".icon-calendar").on 'click', -> $('#datepicker').toggle() diff --git a/app/assets/stylesheets/partials/timesheet.css.scss b/app/assets/stylesheets/partials/timesheet.css.scss index b47681d..e054a64 100644 --- a/app/assets/stylesheets/partials/timesheet.css.scss +++ b/app/assets/stylesheets/partials/timesheet.css.scss @@ -25,10 +25,22 @@ font-size: 12px; } - #weekdays-list>li { + #weekdays-list > li { text-align: center; a { font-size: 16px; } } + #users-list { + + right: 0; + left: auto; + + & > li a { + display: block; + border-style: none; + border-radius: 0px; + } + } + } diff --git a/app/controllers/timesheet_controller.rb b/app/controllers/timesheet_controller.rb index 1462ddb..469eb53 100644 --- a/app/controllers/timesheet_controller.rb +++ b/app/controllers/timesheet_controller.rb @@ -1,16 +1,27 @@ class TimesheetController < ApplicationController - # GET /timesheet(/:year/:month/:day) + # GET /timesheet/:user_id(/:year/:month/:day) def show - if params[:year].present? && params[:month].present? && params[:day].present? - @date = Time.zone.parse("#{params[:year]}-#{params[:month]}-#{params[:day]}").to_date - @weekdays = (@date.at_beginning_of_week..@date.at_end_of_week) - @week_summary = Timesheet.new(current_user).week_hours(@date) - @day_entries = Timesheet.new(current_user).day_entries(@date) + @users = User.all + args = params.clone + + if args[:user_id].blank? + args[:user_id] = current_user.id + end + + if current_user.is_admin || (current_user.id == args[:user_id].to_i) + if args[:year].present? && args[:month].present? && args[:day].present? + @timesheet = Timesheet.new(args) + else + date = Time.zone.now + redirect_to timesheet_url(user_id: args[:user_id], year: date.year, month: date.month, day: date.day) + end else date = Time.zone.now - redirect_to timesheet_url(year: date.year, month: date.month, day: date.day) + redirect_to timesheet_url(user_id: current_user.id, year: date.year, month: date.month, day: date.day), + alert: flash_message(:have_no_right, User) end + end end \ No newline at end of file diff --git a/app/models/timesheet.rb b/app/models/timesheet.rb index 5aa72b1..52c9f2b 100644 --- a/app/models/timesheet.rb +++ b/app/models/timesheet.rb @@ -1,22 +1,25 @@ class Timesheet - def initialize(user) - @user = user - end + attr_reader :user, :date, :day_entries, :weekdays, :week_summary - def week_hours(day = Time.zone.now) - day = day.to_date - week = (day.at_beginning_of_week..day.at_end_of_week) + def initialize(args) + @user = User.find_by_id(args[:user_id]) + @date = parse_to_date(args[:day], args[:month], args[:year]) + @day_entries = day_entries_for(@date) + @weekdays = (@date.at_beginning_of_week..@date.at_end_of_week) + @week_summary = week_hours(@weekdays) + end - week.map { |weekday| { weekday.day => day_time(weekday) } }.reduce(:merge) + def day_entries_for(day) + TimeEntry.for_user(@user).for_day(day) end - def day_time(day) - TimeEntry.for_user(@user).for_day(day).sum(:total_time) + def week_hours(weekdays) + weekdays.map { |weekday| { weekday.day => day_entries_for(weekday).sum(:total_time) } }.reduce(:merge) end - def day_entries(day = Time.zone.now) - TimeEntry.for_user(@user).for_day(day) + def parse_to_date(day, month, year) + Time.zone.parse("#{year}-#{month}-#{day}").to_date end end \ No newline at end of file diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb index 4c26904..8d97485 100644 --- a/app/views/layouts/_header.html.erb +++ b/app/views/layouts/_header.html.erb @@ -9,7 +9,7 @@ <% if user_signed_in? %>