diff --git a/app/assets/javascripts/angular/worklogs/client.js.coffee b/app/assets/javascripts/angular/worklogs/client.js.coffee index 2895522..2fce724 100644 --- a/app/assets/javascripts/angular/worklogs/client.js.coffee +++ b/app/assets/javascripts/angular/worklogs/client.js.coffee @@ -16,9 +16,8 @@ app.factory "Client", ["RailsResource", (RailsResource)-> nameOrCompanyName: -> if @name.length - @name + "#{@name} [#{@user.username}]" else - @companyName - + "#{@companyName} [#{@user.username}]" Client ] diff --git a/app/assets/javascripts/public/kpis.js.coffee b/app/assets/javascripts/public/kpis.js.coffee deleted file mode 100644 index e7bbeaa..0000000 --- a/app/assets/javascripts/public/kpis.js.coffee +++ /dev/null @@ -1,23 +0,0 @@ -window.App ||= {} - -window.App.Kpis = - init: -> - form = $('#new_kpi') - form.submit() - form.on 'change', (e) -> - form.submit() - - data_el = $('#kpi-data') - - form.on("ajax:beforeSend", (e, data, status, xhr) -> - data_el.html("") - ) - - form.on("ajax:success", (e, data, status, xhr) -> - data_el.html(data) - ) - - form.on("ajax:error", (e, xhr, status, error) -> - data_el.html("
There has been an error while generating the data
") - ) - diff --git a/app/assets/stylesheets/application.css.sass b/app/assets/stylesheets/application.css.sass index 2107363..7d6d5af 100644 --- a/app/assets/stylesheets/application.css.sass +++ b/app/assets/stylesheets/application.css.sass @@ -19,5 +19,4 @@ @import "static" @import "worklogs" @import "tutorial" -@import kpis @import "responsive_fixes" diff --git a/app/assets/stylesheets/kpis.css.sass b/app/assets/stylesheets/kpis.css.sass deleted file mode 100644 index 0dfb25d..0000000 --- a/app/assets/stylesheets/kpis.css.sass +++ /dev/null @@ -1,6 +0,0 @@ -#kpi-data-wrapper - select[multiple] - height: 130px - width: 520px - .checkbox - float: none diff --git a/app/controllers/clients_controller.rb b/app/controllers/clients_controller.rb index 58d788a..8ed4b61 100644 --- a/app/controllers/clients_controller.rb +++ b/app/controllers/clients_controller.rb @@ -14,7 +14,7 @@ def index @clients = @clients.updated_since(params[:updated_since]) end end - format.json {render json: current_user.clients_and_shared_clients} + format.json {render json: current_user.clients_and_shared_clients.to_json(include: :user)} end end @@ -89,4 +89,5 @@ def activity end @form.aggregate end + end diff --git a/app/controllers/kpis_controller.rb b/app/controllers/kpis_controller.rb deleted file mode 100644 index 5e8c99a..0000000 --- a/app/controllers/kpis_controller.rb +++ /dev/null @@ -1,11 +0,0 @@ -class KpisController < ApplicationController - def new - @kpi = Kpi.new - end - - def create - @kpi = Kpi.new((params[:kpi] || {}).merge(requester: current_user)) - @kpi.generate_user_data - render partial: "data", layout: false, locals: { kpi: @kpi } - end -end diff --git a/app/helpers/kpis_helper.rb b/app/helpers/kpis_helper.rb deleted file mode 100644 index 6b9caf8..0000000 --- a/app/helpers/kpis_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module KpisHelper -end diff --git a/app/models_no_database/kpi.rb b/app/models_no_database/kpi.rb deleted file mode 100644 index 02904da..0000000 --- a/app/models_no_database/kpi.rb +++ /dev/null @@ -1,137 +0,0 @@ -class Kpi - extend ActiveModel::Naming - extend ActiveModel::Translation - include ActiveModel::Validations - include ActiveModel::Conversion - - ALLOWED_GROUPING_OPTIONS = %w[day week month year] - - attr_accessor :client_ids, :user_ids, :user_data, :requester, :group_data_by, :start_date, :end_date - - def initialize(params={}) - params.each do |attr, value| - self.public_send("#{attr}=", value) - end if params - - super() - set_default_values - end - - def set_default_values - if client_ids.nil? - self.client_ids = [] - end - if user_ids.nil? - self.user_ids = [] - end - self.user_data = [] - - if !ALLOWED_GROUPING_OPTIONS.include?(group_data_by) - self.group_data_by = "week" - end - if start_date.blank? - self.start_date = DateTime.now - 1.month - end - if end_date.blank? - self.end_date = DateTime.now - end - - set_client_ids - set_user_ids - end - - def persisted? - false - end - - def new_record? - true - end - - def can_display_data? - client_ids.present? && user_ids.present? - end - - def set_client_ids - converted_client_ids = client_ids.select{|id| id.present? }.map(&:to_i) - if converted_client_ids.blank? && requester.present? - converted_client_ids = requester.clients.map(&:id) - end - self.client_ids = converted_client_ids - end - - def set_user_ids - converted_user_ids = user_ids.select{|id| id.present? }.map(&:to_i) - if converted_user_ids.blank? && requester.present? - converted_user_ids = requester.added_team_members.map(&:id) - end - self.user_ids = converted_user_ids - end - - def generate_user_data - temp = Worklog.where(user_id: user_ids, client_id: client_ids). - where("start_time >= ? AND end_time <= ?", start_date, end_date). - order("start_time DESC"). - includes(:client, :user).group_by{|wl| wl.user } - self.user_data = temp - end - - def all_worklogs_for_criteria - Worklog.where(user_id: user_ids, client_id: client_ids). - where("start_time >= ? AND end_time <= ?", start_date, end_date) - end - - def worklog_earnings_grouped - empty_range = empty_date_range - queried = all_worklogs_for_criteria.send("group_by_#{group_data_by}", :end_time, {format: format_string_for_display}).sum("hourly_rate_cents / 100") - queried = Hash[queried.map{|date, val| [DateTime.parse(date).to_i, val]}] - Hash[empty_range.merge(queried).map{|timestamp, result| [Time.at(timestamp).to_datetime.strftime(format_string_for_display), result]}] - end - - def worklogs_grouped_by - user_ids.map do |user_id| - data = Worklog.where(user_id: user_id). - where(client_id: client_ids). - where("start_time >= ? AND end_time <= ?", start_date, end_date). - send("group_by_#{group_data_by}", :end_time). - sum("end_time - start_time") - - # Treat all times as UTC to get the mapping to work - data = Hash[data.map {|k, v| [DateTime.parse(k.strftime("%F")).beginning_of_day, v]}] - - OpenStruct.new( - user: User.find(user_id), - data: merge_data_with_preset_data(data) - ) - end - end - - # Expects a hash like {DateTime: value} - def merge_data_with_preset_data(data) - empty_range = empty_date_range - queried = Hash[data.map{|date, val| [date.to_i, val]}] - Hash[empty_range.merge(queried).map{|timestamp, result| [Time.at(timestamp).to_datetime, result]}].sort_by {|k, v| k }.reverse - end - - def group_date_i18n_format - "kpi_#{group_data_by}".to_sym - end - - def format_string_for_display - # Hack for initing translation backend - I18n.t :foo - translations = I18n.backend.send(:translations) - translations[:en][:time][:formats][group_date_i18n_format] - end - - def empty_date_range - step = 1.send(group_data_by.pluralize) - result = {} - new_start_date = start_date.is_a?(String) ? DateTime.parse(start_date) : start_date - new_end_date = end_date.is_a?(String) ? DateTime.parse(end_date) : end_date - ( new_start_date.beginning_of_day .. new_end_date.beginning_of_day ).step(step) do |time| - result[time.to_i] = nil - end - result - end -end diff --git a/app/views/kpis/_data.html.slim b/app/views/kpis/_data.html.slim deleted file mode 100644 index 38122a7..0000000 --- a/app/views/kpis/_data.html.slim +++ /dev/null @@ -1,44 +0,0 @@ -- if kpi.can_display_data? - h3 Overall earnings - = column_chart kpi.worklog_earnings_grouped - h3 Worked hours aggregated - - kpi.worklogs_grouped_by.each do |group_data| - .well - h4 User: #{group_data.user.username} - - if group_data.data.present? - table.table-condensed.table-striped.table - thead - tr - th Date - th style="width: 30%;" Duration - tbody - - group_data.data.each do |date, total| - tr - td= l date, format: kpi.group_date_i18n_format - td= total || "-" - - else - .alert.alert-info No data to display for user - - hr - h3 Recent worklogs by users - - kpi.user_data.each do |user, worklogs| - .well - h4 User: #{user.username} - table.table-condensed.table-striped.table - thead - tr - th Start - th End - th Client - th Total - th Details - tbody - - worklogs.each do |worklog| - tr - td= l worklog.start_time - td= l worklog.end_time - td= worklog.client.name - td= with_currency worklog.total - td= link_to "Details", "", class: "btn btn-default btn-mini" -- else - h5 No data to display diff --git a/app/views/kpis/new.html.slim b/app/views/kpis/new.html.slim deleted file mode 100644 index ff4380d..0000000 --- a/app/views/kpis/new.html.slim +++ /dev/null @@ -1,38 +0,0 @@ -#kpi-data-wrapper - = simple_form_for @kpi, method: :post, remote: true do |f| - h1 Key performance indicators - .row - .col-md-6 - p Choose the clients - = f.select :client_ids, - current_user.clients_and_shared_clients.map {|c| [c.name, c.id]}, - {}, multiple: true - - .col-md-6 - p Choose the users - = f.select :user_ids, - (current_user.added_team_members + [current_user]).map {|u| [u.username, u.id]}, - {}, multiple: true - - .row - .col-md-3 - .control-group - label Start Date - input type="date" name="kpi[start_date]" - .col-md-3 - .control-group - label End Date - input type="date" name="kpi[end_date]" - .col-md-4 - = f.input :group_data_by, collection: Kpi::ALLOWED_GROUPING_OPTIONS, - label_method: ->(opt) { opt.capitalize } - - hr - - #kpi-data - = render "data", kpi: @kpi - - javascript: - $(function() { - window.App.Kpis.init(); - }) diff --git a/app/views/layouts/_header.html.slim b/app/views/layouts/_header.html.slim index 4027321..f489467 100644 --- a/app/views/layouts/_header.html.slim +++ b/app/views/layouts/_header.html.slim @@ -34,8 +34,6 @@ nav.navbar.navbar-default role="navigation" = link_to "Invoices", invoices_path li = link_to "Edit defaults", edit_invoice_default_path(current_user.invoice_default) - li - = link_to "KPI", new_kpi_path - if not_on_home? li = link_to "Tutorial", show_tutorial_path, class: "show-tutorial" diff --git a/config/routes.rb b/config/routes.rb index 0b130c9..7c00788 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,5 @@ Timetracker::Application.routes.draw do - get "kpis/new" - root :to => "static#home" resources :users, only: [:new, :create, :show, :edit, :update] do @@ -14,7 +12,6 @@ get :shared_clients end end - resources :kpis, only: [:new, :create] resources :clients do member do get "activity" @@ -58,5 +55,4 @@ get "show_tutorial" => "tutorial#show", as: "show_tutorial" get "/auth/:provider/callback" => "sessions#auth_provider_callback" - end