OpenProject is the leading open source project management software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openproject/modules/costs/app/models/activities/time_entry_activity_provide...

116 lines
4.2 KiB

#-- encoding: UTF-8
#-- copyright
# OpenProject is an open source project management software.
# Copyright (C) 2012-2021 the OpenProject GmbH
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2013 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See COPYRIGHT and LICENSE files for more details.
#++
class Activities::TimeEntryActivityProvider < Activities::BaseActivityProvider
activity_provider_for type: 'time_entries',
permission: :view_time_entries
def extend_event_query(query)
query.join(work_packages_table).on(activity_journals_table[:work_package_id].eq(work_packages_table[:id]))
query.join(types_table).on(work_packages_table[:type_id].eq(types_table[:id]))
query.join(statuses_table).on(work_packages_table[:status_id].eq(statuses_table[:id]))
end
def event_query_projection
[
activity_journal_projection_statement(:hours, 'time_entry_hours'),
activity_journal_projection_statement(:comments, 'time_entry_comments'),
activity_journal_projection_statement(:project_id, 'project_id'),
activity_journal_projection_statement(:work_package_id, 'work_package_id'),
projection_statement(projects_table, :name, 'project_name'),
projection_statement(work_packages_table, :subject, 'work_package_subject'),
projection_statement(statuses_table, :name, 'status_name'),
projection_statement(statuses_table, :is_closed, 'status_closed'),
projection_statement(types_table, :name, 'type_name')
]
end
protected
def event_title(event)
time_entry_object_name = event['work_package_id'].blank? ? event['project_name'] : work_package_title(event)
"#{l_hours(event['time_entry_hours'])} (#{time_entry_object_name})"
end
def event_type(_event)
'time-entry'
end
def work_package_title(event)
Activities::WorkPackageActivityProvider.work_package_title(event['work_package_id'],
event['work_package_subject'],
event['type_name'],
event['status_name'],
event['is_standard'])
end
def event_description(event)
event['time_entry_description']
end
def event_path(event)
Feature/remove timelog (#8557) * rename costs, introduce budgets * move files from costs to budgets * rename cost_object to budget * remove unused code * move hook - should be turned into standard code in the long run * move type attributes change over to budgets * move patch to work_package proper * move budget menu item up * combine reporting, time and cost module * remove rails based time_entries & reports code * rename cost object filter * adapt menu spec expectations * use cost project module name in administration * include timeline labels in migration * properly place budget linking method * fix permitted params * remove outdated routing spec * adapt budget request specs * ensure order of descendent updates * remove outdated specs * fix checking for reporting to be enabled * fix displaying spent units * fix time entries activity event url * reenable current rate tab * fix path on budget page * allow bulk editing of budgets only in one project scenario * fix sanitizing reference in controller * include module required for format_date * fix reference to correct units from work package spent units * linting * remove outdated spec * remove outdated views and permission references * remove acts_as_event from time_entries There is no atom link for time entries * remove acts_as_event from projects There are no atom links for projects * introduce budget filter for cost reports * remove actions added to removed controller * move time entries to the costs module * factor in view_own permission when calculating time entry visibility * linting * move mounting of time entries * include budgets into api v3 documentation
4 years ago
event_location(event)
end
def event_url(event)
Feature/remove timelog (#8557) * rename costs, introduce budgets * move files from costs to budgets * rename cost_object to budget * remove unused code * move hook - should be turned into standard code in the long run * move type attributes change over to budgets * move patch to work_package proper * move budget menu item up * combine reporting, time and cost module * remove rails based time_entries & reports code * rename cost object filter * adapt menu spec expectations * use cost project module name in administration * include timeline labels in migration * properly place budget linking method * fix permitted params * remove outdated routing spec * adapt budget request specs * ensure order of descendent updates * remove outdated specs * fix checking for reporting to be enabled * fix displaying spent units * fix time entries activity event url * reenable current rate tab * fix path on budget page * allow bulk editing of budgets only in one project scenario * fix sanitizing reference in controller * include module required for format_date * fix reference to correct units from work package spent units * linting * remove outdated spec * remove outdated views and permission references * remove acts_as_event from time_entries There is no atom link for time entries * remove acts_as_event from projects There are no atom links for projects * introduce budget filter for cost reports * remove actions added to removed controller * move time entries to the costs module * factor in view_own permission when calculating time entry visibility * linting * move mounting of time entries * include budgets into api v3 documentation
4 years ago
event_location(event, only_path: false)
end
def types_table
@types_table = Type.arel_table
end
def statuses_table
@statuses_table = Status.arel_table
end
def work_packages_table
@work_packages_table ||= WorkPackage.arel_table
end
Feature/remove timelog (#8557) * rename costs, introduce budgets * move files from costs to budgets * rename cost_object to budget * remove unused code * move hook - should be turned into standard code in the long run * move type attributes change over to budgets * move patch to work_package proper * move budget menu item up * combine reporting, time and cost module * remove rails based time_entries & reports code * rename cost object filter * adapt menu spec expectations * use cost project module name in administration * include timeline labels in migration * properly place budget linking method * fix permitted params * remove outdated routing spec * adapt budget request specs * ensure order of descendent updates * remove outdated specs * fix checking for reporting to be enabled * fix displaying spent units * fix time entries activity event url * reenable current rate tab * fix path on budget page * allow bulk editing of budgets only in one project scenario * fix sanitizing reference in controller * include module required for format_date * fix reference to correct units from work package spent units * linting * remove outdated spec * remove outdated views and permission references * remove acts_as_event from time_entries There is no atom link for time entries * remove acts_as_event from projects There are no atom links for projects * introduce budget filter for cost reports * remove actions added to removed controller * move time entries to the costs module * factor in view_own permission when calculating time entry visibility * linting * move mounting of time entries * include budgets into api v3 documentation
4 years ago
def event_location(event, only_path: true)
filter_params = if event['work_package_id'].present?
work_package_id_filter(event['work_package_id'])
else
project_id_filter(event['project_id'])
end
url_helpers.cost_reports_url(event['project_id'], only_path: only_path, **filter_params)
end
def project_id_filter(project_id)
{ 'fields[]': 'ProjectId', 'operators[ProjectId]': '=', 'values[ProjectId]': project_id, set_filter: 1 }
end
def work_package_id_filter(work_package_id)
{ 'fields[]': 'WorkPackageId', 'operators[WorkPackageId]': '=', 'values[WorkPackageId]': work_package_id, set_filter: 1 }
end
end