From 10292762281f1921ab120fc1ce2d76ab0f236812 Mon Sep 17 00:00:00 2001 From: apoorv1316 Date: Mon, 29 Jul 2024 13:55:31 +0530 Subject: [PATCH 1/6] sort usernames --- app/services/time_tracking_index_service.rb | 2 +- app/services/timeoff_entries/index_service.rb | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/services/time_tracking_index_service.rb b/app/services/time_tracking_index_service.rb index d0dd72dd28..a9f5cdfa31 100644 --- a/app/services/time_tracking_index_service.rb +++ b/app/services/time_tracking_index_service.rb @@ -40,7 +40,7 @@ def set_employees end def current_company_users - current_company.employees_without_client_role.select(:id, :first_name, :last_name) + current_company.employees_without_client_role.select(:id, :first_name, :last_name).order(:first_name, :last_name) end def format_entries diff --git a/app/services/timeoff_entries/index_service.rb b/app/services/timeoff_entries/index_service.rb index 0d1d9a0936..043c1715ca 100644 --- a/app/services/timeoff_entries/index_service.rb +++ b/app/services/timeoff_entries/index_service.rb @@ -42,7 +42,9 @@ def employees end def current_company_users - current_company.employees_without_client_role.select(:id, :first_name, :last_name) + current_company.employees_without_client_role.select(:id, :first_name, :last_name).order( + :first_name, + :last_name) end def is_admin? From e5763f41491d07667b458036319465a2c89f7111 Mon Sep 17 00:00:00 2001 From: apoorv1316 Date: Tue, 30 Jul 2024 11:20:36 +0530 Subject: [PATCH 2/6] employee fetcher module --- app/services/employee_fetcher.rb | 17 +++++++++++++++++ app/services/time_tracking_index_service.rb | 12 +++--------- app/services/timeoff_entries/index_service.rb | 18 +++--------------- 3 files changed, 23 insertions(+), 24 deletions(-) create mode 100644 app/services/employee_fetcher.rb diff --git a/app/services/employee_fetcher.rb b/app/services/employee_fetcher.rb new file mode 100644 index 0000000000..21d64d7fd4 --- /dev/null +++ b/app/services/employee_fetcher.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module EmployeeFetcher + def set_employees + @employees = is_admin? ? current_company_users : [current_user] + end + + private + + def current_company_users + current_company.employees_without_client_role.select(:id, :first_name, :last_name).order(:first_name, :last_name) + end + + def is_admin? + current_user.has_role?(:owner, current_company) || current_user.has_role?(:admin, current_company) + end +end diff --git a/app/services/time_tracking_index_service.rb b/app/services/time_tracking_index_service.rb index a9f5cdfa31..6a02193968 100644 --- a/app/services/time_tracking_index_service.rb +++ b/app/services/time_tracking_index_service.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class TimeTrackingIndexService + include EmployeeFetcher + attr_reader :current_user, :user, :current_company, :entries, :from, :to, :year attr_accessor :clients, :projects, :is_admin, :employees @@ -35,14 +37,6 @@ def setup_data set_employees end - def set_employees - @employees = is_admin ? current_company_users : [current_user] - end - - def current_company_users - current_company.employees_without_client_role.select(:id, :first_name, :last_name).order(:first_name, :last_name) - end - def format_entries formatted_timesheet_entries group_timeoff_entries_by_leave_date @@ -61,7 +55,7 @@ def formatted_timesheet_entries end def set_is_admin - @is_admin = current_user.has_role?(:owner, current_company) || current_user.has_role?(:admin, current_company) + @is_admin = is_admin? end def set_clients diff --git a/app/services/timeoff_entries/index_service.rb b/app/services/timeoff_entries/index_service.rb index 043c1715ca..fe9310edf5 100644 --- a/app/services/timeoff_entries/index_service.rb +++ b/app/services/timeoff_entries/index_service.rb @@ -2,6 +2,8 @@ module TimeoffEntries class IndexService < ApplicationService + include EmployeeFetcher + attr_reader :current_company, :current_user, :user_id, :year, :previous_year attr_accessor :leave_balance, :optional_timeoff_entries, :national_timeoff_entries @@ -17,7 +19,7 @@ def initialize(current_user, current_company, user_id, year) def process { timeoff_entries:, - employees:, + employees: set_employees, leave_balance: process_leave_balance, total_timeoff_entries_duration: timeoff_entries.sum(&:duration), optional_timeoff_entries:, @@ -37,20 +39,6 @@ def timeoff_entries .distinct end - def employees - @_employees ||= is_admin? ? current_company_users : [current_user] - end - - def current_company_users - current_company.employees_without_client_role.select(:id, :first_name, :last_name).order( - :first_name, - :last_name) - end - - def is_admin? - current_user.has_role?(:owner, current_company) || current_user.has_role?(:admin, current_company) - end - def process_leave_balance calculate_leave_balance calculate_holiday_balance From c832e924fb25e90f5da87c94fd3134426e0991de Mon Sep 17 00:00:00 2001 From: apoorv1316 Date: Tue, 30 Jul 2024 12:17:40 +0530 Subject: [PATCH 3/6] move module to concern --- app/services/{ => concerns}/employee_fetcher.rb | 2 ++ config/application.rb | 1 + 2 files changed, 3 insertions(+) rename app/services/{ => concerns}/employee_fetcher.rb (93%) diff --git a/app/services/employee_fetcher.rb b/app/services/concerns/employee_fetcher.rb similarity index 93% rename from app/services/employee_fetcher.rb rename to app/services/concerns/employee_fetcher.rb index 21d64d7fd4..0df53c2a81 100644 --- a/app/services/employee_fetcher.rb +++ b/app/services/concerns/employee_fetcher.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true module EmployeeFetcher + extend ActiveSupport::Concern + def set_employees @employees = is_admin? ? current_company_users : [current_user] end diff --git a/config/application.rb b/config/application.rb index 45d52a6abb..c092714957 100644 --- a/config/application.rb +++ b/config/application.rb @@ -17,6 +17,7 @@ class Application < Rails::Application # not contain `.rb` files, or that should not be reloaded or eager loaded. # Common ones are `templates`, `generators`, or `middleware`, for example. config.autoload_lib(ignore: %w(assets tasks)) + config.autoload_paths += %W(#{config.root}/app/services/concerns) # Configuration for the application, engines, and railties goes here. # From 08afc62c5efd6421c2fbe04a5cf84b5bca833b49 Mon Sep 17 00:00:00 2001 From: apoorv1316 Date: Mon, 26 Aug 2024 20:26:00 +0530 Subject: [PATCH 4/6] review comments --- app/services/concerns/employee_fetcher.rb | 19 --------------- .../concerns/employee_fetching_concern.rb | 23 +++++++++++++++++++ app/services/time_tracking_index_service.rb | 9 ++------ app/services/timeoff_entries/index_service.rb | 2 +- 4 files changed, 26 insertions(+), 27 deletions(-) delete mode 100644 app/services/concerns/employee_fetcher.rb create mode 100644 app/services/concerns/employee_fetching_concern.rb diff --git a/app/services/concerns/employee_fetcher.rb b/app/services/concerns/employee_fetcher.rb deleted file mode 100644 index 0df53c2a81..0000000000 --- a/app/services/concerns/employee_fetcher.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -module EmployeeFetcher - extend ActiveSupport::Concern - - def set_employees - @employees = is_admin? ? current_company_users : [current_user] - end - - private - - def current_company_users - current_company.employees_without_client_role.select(:id, :first_name, :last_name).order(:first_name, :last_name) - end - - def is_admin? - current_user.has_role?(:owner, current_company) || current_user.has_role?(:admin, current_company) - end -end diff --git a/app/services/concerns/employee_fetching_concern.rb b/app/services/concerns/employee_fetching_concern.rb new file mode 100644 index 0000000000..70c1260aee --- /dev/null +++ b/app/services/concerns/employee_fetching_concern.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module EmployeeFetchingConcern + extend ActiveSupport::Concern + + included do + def set_employees + @employees = admin? ? current_company_users : [current_user] + end + + private + + def current_company_users + current_company.employees_without_client_role.select(:id, :first_name, :last_name).order( + :first_name, + :last_name) + end + + def admin? + @admin ||= current_user.has_role?(:owner, current_company) || current_user.has_role?(:admin, current_company) + end + end +end diff --git a/app/services/time_tracking_index_service.rb b/app/services/time_tracking_index_service.rb index 6a02193968..e8ceeca577 100644 --- a/app/services/time_tracking_index_service.rb +++ b/app/services/time_tracking_index_service.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true class TimeTrackingIndexService - include EmployeeFetcher + include EmployeeFetchingConcern attr_reader :current_user, :user, :current_company, :entries, :from, :to, :year - attr_accessor :clients, :projects, :is_admin, :employees + attr_accessor :clients, :projects, :employees def initialize(current_user:, user:, company:, from:, to:, year:) @current_user = current_user @@ -31,7 +31,6 @@ def process private def setup_data - set_is_admin set_clients set_projects set_employees @@ -54,10 +53,6 @@ def formatted_timesheet_entries @entries = TimesheetEntriesPresenter.new(timesheet_entries).group_snippets_by_work_date end - def set_is_admin - @is_admin = is_admin? - end - def set_clients @clients = ClientPolicy::Scope.new(current_user, current_company).resolve.includes(:projects, :addresses) end diff --git a/app/services/timeoff_entries/index_service.rb b/app/services/timeoff_entries/index_service.rb index fe9310edf5..d823ac0dce 100644 --- a/app/services/timeoff_entries/index_service.rb +++ b/app/services/timeoff_entries/index_service.rb @@ -2,7 +2,7 @@ module TimeoffEntries class IndexService < ApplicationService - include EmployeeFetcher + include EmployeeFetchingConcern attr_reader :current_company, :current_user, :user_id, :year, :previous_year attr_accessor :leave_balance, :optional_timeoff_entries, :national_timeoff_entries From af0c5fe4ba4d0e64c3991232f37bc78925a5c48e Mon Sep 17 00:00:00 2001 From: apoorv1316 Date: Thu, 29 Aug 2024 09:52:37 +0530 Subject: [PATCH 5/6] review comments --- app/services/concerns/employee_fetching_concern.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/services/concerns/employee_fetching_concern.rb b/app/services/concerns/employee_fetching_concern.rb index 70c1260aee..3eca38dca9 100644 --- a/app/services/concerns/employee_fetching_concern.rb +++ b/app/services/concerns/employee_fetching_concern.rb @@ -5,7 +5,7 @@ module EmployeeFetchingConcern included do def set_employees - @employees = admin? ? current_company_users : [current_user] + @employees = admin? ? current_company_users : [current_user_data] end private @@ -16,8 +16,14 @@ def current_company_users :last_name) end + def current_user_data + OpenStruct.new(current_user.slice(:id, :first_name, :last_name)) + end + def admin? - @admin ||= current_user.has_role?(:owner, current_company) || current_user.has_role?(:admin, current_company) + @admin ||= current_user.has_any_role?( + { name: :owner, resource: current_company }, + { name: :admin, resource: current_company }) end end end From bd8df1814f8b479986b235b6e7c99d3a044b87f4 Mon Sep 17 00:00:00 2001 From: apoorv1316 Date: Thu, 29 Aug 2024 10:17:11 +0530 Subject: [PATCH 6/6] fix test --- app/services/timeoff_entries/index_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/timeoff_entries/index_service.rb b/app/services/timeoff_entries/index_service.rb index d823ac0dce..3a1ffad752 100644 --- a/app/services/timeoff_entries/index_service.rb +++ b/app/services/timeoff_entries/index_service.rb @@ -164,7 +164,7 @@ def calculate_total_duration(leave_type, passed_year) end def user_joined_date - employee_id = is_admin? ? user_id : current_user.id + employee_id = admin? ? user_id : current_user.id user = User.find(employee_id) user.joined_date_for_company(current_company) end