decidim-time_tracker 0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE-AGPLv3.txt +661 -0
- data/README.md +174 -0
- data/Rakefile +40 -0
- data/app/assets/config/admin/decidim_time_tracker_manifest.css +2 -0
- data/app/assets/config/admin/decidim_time_tracker_manifest.js +1 -0
- data/app/assets/config/decidim_time_tracker_manifest.css +3 -0
- data/app/assets/config/decidim_time_tracker_manifest.js +1 -0
- data/app/assets/images/decidim/time_tracker/icon.svg +1 -0
- data/app/assets/javascripts/decidim/time_tracker/activity_ui.js.es6 +112 -0
- data/app/assets/javascripts/decidim/time_tracker/admin/assignations.js.es6 +35 -0
- data/app/assets/javascripts/decidim/time_tracker/reports/reports.js.es6 +19 -0
- data/app/assets/javascripts/decidim/time_tracker/time_tracker.js.es6 +82 -0
- data/app/assets/javascripts/decidim/time_tracker/timer_api.js.es6 +55 -0
- data/app/assets/stylesheets/decidim/time_tracker/_variables.scss +1 -0
- data/app/assets/stylesheets/decidim/time_tracker/admin/time_tracker.scss +59 -0
- data/app/assets/stylesheets/decidim/time_tracker/time_tracker.scss +118 -0
- data/app/cells/decidim/time_tracker/milestone/show.erb +42 -0
- data/app/cells/decidim/time_tracker/milestone_cell.rb +54 -0
- data/app/commands/decidim/time_tracker/admin/create_activity.rb +39 -0
- data/app/commands/decidim/time_tracker/admin/create_assignation.rb +75 -0
- data/app/commands/decidim/time_tracker/admin/create_task.rb +33 -0
- data/app/commands/decidim/time_tracker/admin/create_time_tracker.rb +76 -0
- data/app/commands/decidim/time_tracker/admin/destroy_activity.rb +43 -0
- data/app/commands/decidim/time_tracker/admin/destroy_assignation.rb +43 -0
- data/app/commands/decidim/time_tracker/admin/destroy_task.rb +43 -0
- data/app/commands/decidim/time_tracker/admin/export_time_tracker.rb +150 -0
- data/app/commands/decidim/time_tracker/admin/update_activity.rb +49 -0
- data/app/commands/decidim/time_tracker/admin/update_assignation.rb +42 -0
- data/app/commands/decidim/time_tracker/admin/update_task.rb +44 -0
- data/app/commands/decidim/time_tracker/create_milestone.rb +57 -0
- data/app/commands/decidim/time_tracker/create_request_assignation.rb +39 -0
- data/app/commands/decidim/time_tracker/start_time_event.rb +104 -0
- data/app/commands/decidim/time_tracker/stop_last_time_event.rb +45 -0
- data/app/controllers/concerns/decidim/time_tracker/admin/filterable_assignations.rb +50 -0
- data/app/controllers/decidim/time_tracker/activity_questionnaire_controller.rb +76 -0
- data/app/controllers/decidim/time_tracker/admin/activities_controller.rb +82 -0
- data/app/controllers/decidim/time_tracker/admin/activity_questionnaire_controller.rb +52 -0
- data/app/controllers/decidim/time_tracker/admin/application_controller.rb +22 -0
- data/app/controllers/decidim/time_tracker/admin/assignations_controller.rb +84 -0
- data/app/controllers/decidim/time_tracker/admin/assignee_questionnaire_controller.rb +58 -0
- data/app/controllers/decidim/time_tracker/admin/stats_controller.rb +24 -0
- data/app/controllers/decidim/time_tracker/admin/tasks_controller.rb +112 -0
- data/app/controllers/decidim/time_tracker/admin/time_tracker_exports_controller.rb +25 -0
- data/app/controllers/decidim/time_tracker/application_controller.rb +24 -0
- data/app/controllers/decidim/time_tracker/assignations_controller.rb +38 -0
- data/app/controllers/decidim/time_tracker/assignee_questionnaire_controller.rb +80 -0
- data/app/controllers/decidim/time_tracker/milestones_controller.rb +62 -0
- data/app/controllers/decidim/time_tracker/reports/user_controller.rb +38 -0
- data/app/controllers/decidim/time_tracker/time_events_controller.rb +68 -0
- data/app/controllers/decidim/time_tracker/time_tracker_controller.rb +43 -0
- data/app/forms/decidim/time_tracker/admin/activity_form.rb +27 -0
- data/app/forms/decidim/time_tracker/admin/assignation_form.rb +29 -0
- data/app/forms/decidim/time_tracker/admin/task_form.rb +22 -0
- data/app/forms/decidim/time_tracker/milestone_form.rb +32 -0
- data/app/forms/decidim/time_tracker/time_event_form.rb +47 -0
- data/app/helpers/decidim/time_tracker/admin/application_helper.rb +33 -0
- data/app/helpers/decidim/time_tracker/application_helper.rb +95 -0
- data/app/jobs/decidim/time_tracker/stop_counter_job.rb +29 -0
- data/app/models/decidim/time_tracker/activity.rb +135 -0
- data/app/models/decidim/time_tracker/application_record.rb +10 -0
- data/app/models/decidim/time_tracker/assignation.rb +68 -0
- data/app/models/decidim/time_tracker/assignee.rb +29 -0
- data/app/models/decidim/time_tracker/assignee_data.rb +19 -0
- data/app/models/decidim/time_tracker/milestone.rb +27 -0
- data/app/models/decidim/time_tracker/task.rb +44 -0
- data/app/models/decidim/time_tracker/time_event.rb +62 -0
- data/app/models/decidim/time_tracker/time_tracker.rb +46 -0
- data/app/models/decidim/time_tracker/tos_acceptance.rb +16 -0
- data/app/permissions/decidim/time_tracker/admin/permissions.rb +69 -0
- data/app/permissions/decidim/time_tracker/permissions.rb +69 -0
- data/app/presenters/decidim/time_tracker/admin_log/activity_presenter.rb +44 -0
- data/app/presenters/decidim/time_tracker/admin_log/assignation_presenter.rb +48 -0
- data/app/presenters/decidim/time_tracker/admin_log/task_presenter.rb +46 -0
- data/app/presenters/decidim/time_tracker/admin_log/value_types/activity_presenter.rb +28 -0
- data/app/presenters/decidim/time_tracker/admin_log/value_types/time_tracker_presenter.rb +28 -0
- data/app/views/decidim/time_tracker/admin/_breadcrumbs.html.erb +56 -0
- data/app/views/decidim/time_tracker/admin/activities/_form.html.erb +41 -0
- data/app/views/decidim/time_tracker/admin/activities/_index.html.erb +73 -0
- data/app/views/decidim/time_tracker/admin/activities/edit.html.erb +5 -0
- data/app/views/decidim/time_tracker/admin/activities/new.html.erb +5 -0
- data/app/views/decidim/time_tracker/admin/assignations/_form.html.erb +30 -0
- data/app/views/decidim/time_tracker/admin/assignations/index.html.erb +67 -0
- data/app/views/decidim/time_tracker/admin/assignations/new.html.erb +9 -0
- data/app/views/decidim/time_tracker/admin/questionnaires/_index.html.erb +27 -0
- data/app/views/decidim/time_tracker/admin/questionnaires/_questionnaire.html.erb +21 -0
- data/app/views/decidim/time_tracker/admin/stats/index.html.erb +50 -0
- data/app/views/decidim/time_tracker/admin/tasks/_assignations.html.erb +60 -0
- data/app/views/decidim/time_tracker/admin/tasks/_form.html.erb +7 -0
- data/app/views/decidim/time_tracker/admin/tasks/_index.html.erb +61 -0
- data/app/views/decidim/time_tracker/admin/tasks/edit.html.erb +16 -0
- data/app/views/decidim/time_tracker/admin/tasks/index.html.erb +5 -0
- data/app/views/decidim/time_tracker/admin/tasks/new.html.erb +12 -0
- data/app/views/decidim/time_tracker/milestones/index.html.erb +60 -0
- data/app/views/decidim/time_tracker/reports/user/index.html.erb +41 -0
- data/app/views/decidim/time_tracker/time_tracker/_activity.html.erb +43 -0
- data/app/views/decidim/time_tracker/time_tracker/_answer_questionnaire.html.erb +7 -0
- data/app/views/decidim/time_tracker/time_tracker/_assignee_data.html.erb +9 -0
- data/app/views/decidim/time_tracker/time_tracker/_callout_status.html.erb +3 -0
- data/app/views/decidim/time_tracker/time_tracker/_idle_activity.html.erb +27 -0
- data/app/views/decidim/time_tracker/time_tracker/_milestone_form.html.erb +35 -0
- data/app/views/decidim/time_tracker/time_tracker/_request_activity.html.erb +22 -0
- data/app/views/decidim/time_tracker/time_tracker/_sign_in.html.erb +5 -0
- data/app/views/decidim/time_tracker/time_tracker/index.html.erb +59 -0
- data/config/activity_questionnaire.yml +26 -0
- data/config/assignee_questionnaire.yml +37 -0
- data/config/i18n-tasks.yml +10 -0
- data/config/locales/ca.yml +394 -0
- data/config/locales/cs.yml +394 -0
- data/config/locales/en.yml +419 -0
- data/config/locales/es.yml +394 -0
- data/db/migrate/20200302115642_create_decidim_time_tracker_time_trackers.rb +10 -0
- data/db/migrate/20200302115654_create_decidim_time_tracker_tasks.rb +11 -0
- data/db/migrate/20200302115658_create_decidim_time_tracker_assignees.rb +12 -0
- data/db/migrate/20200302115700_create_decidim_time_tracker_activities.rb +19 -0
- data/db/migrate/20200302115708_create_decidim_time_tracker_milestones.rb +13 -0
- data/db/migrate/20200302115831_create_decidim_time_tracker_assignations.rb +16 -0
- data/db/migrate/20200302115840_create_decidim_time_tracker_time_events.rb +15 -0
- data/db/migrate/20201118153327_create_decidim_time_tracker_assignee_data.rb +10 -0
- data/db/migrate/20201223115130_create_decidim_time_tracker_tos_acceptances.rb +18 -0
- data/lib/decidim/time_tracker.rb +45 -0
- data/lib/decidim/time_tracker/admin.rb +10 -0
- data/lib/decidim/time_tracker/admin_engine.rb +51 -0
- data/lib/decidim/time_tracker/component.rb +248 -0
- data/lib/decidim/time_tracker/engine.rb +59 -0
- data/lib/decidim/time_tracker/reports.rb +10 -0
- data/lib/decidim/time_tracker/reports_engine.rb +34 -0
- data/lib/decidim/time_tracker/test/admin_log_presenter_examples.rb +34 -0
- data/lib/decidim/time_tracker/test/factories.rb +110 -0
- data/lib/decidim/time_tracker/test/time_tracker_context.rb +18 -0
- data/lib/decidim/time_tracker/time_tracker_activity_questionnaire_answers_serializer.rb +74 -0
- data/lib/decidim/time_tracker/version.rb +9 -0
- data/vendor/assets/javascripts/jsrender.min.js +4 -0
- metadata +276 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module TimeTracker
|
5
|
+
# The data store for a Task in the Decidim::TimeTracker component.
|
6
|
+
class Task < ApplicationRecord
|
7
|
+
include Decidim::Traceable
|
8
|
+
include Decidim::Loggable
|
9
|
+
|
10
|
+
self.table_name = :decidim_time_tracker_tasks
|
11
|
+
|
12
|
+
belongs_to :time_tracker,
|
13
|
+
class_name: "Decidim::TimeTracker::TimeTracker"
|
14
|
+
|
15
|
+
has_many :activities,
|
16
|
+
class_name: "Decidim::TimeTracker::Activity",
|
17
|
+
dependent: :destroy
|
18
|
+
|
19
|
+
delegate :questionnaire, to: :time_tracker
|
20
|
+
delegate :component, to: :time_tracker
|
21
|
+
|
22
|
+
def starts_at
|
23
|
+
activities.order(start_date: :asc).first&.start_date
|
24
|
+
end
|
25
|
+
|
26
|
+
def ends_at
|
27
|
+
activities.order(end_date: :desc).first&.end_date
|
28
|
+
end
|
29
|
+
|
30
|
+
def assignations_count(filter: :accepted)
|
31
|
+
assignations = Assignation.where(activity: activities).send(filter)
|
32
|
+
assignations.count
|
33
|
+
end
|
34
|
+
|
35
|
+
def user_is_assignation?(user, filter: :accepted)
|
36
|
+
Assignation.where(user: user, activity: activities).send(filter).any?
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.log_presenter_class_for(_log)
|
40
|
+
Decidim::TimeTracker::AdminLog::TaskPresenter
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module TimeTracker
|
5
|
+
# The data store for a time entry in the Decidim::TimeTracker component.
|
6
|
+
class TimeEvent < ApplicationRecord
|
7
|
+
self.table_name = :decidim_time_tracker_time_events
|
8
|
+
|
9
|
+
belongs_to :assignation,
|
10
|
+
class_name: "Decidim::TimeTracker::Assignation"
|
11
|
+
|
12
|
+
belongs_to :activity,
|
13
|
+
class_name: "Decidim::TimeTracker::Activity"
|
14
|
+
|
15
|
+
belongs_to :user,
|
16
|
+
foreign_key: "decidim_user_id",
|
17
|
+
class_name: "Decidim::User"
|
18
|
+
|
19
|
+
# note that with the default order reversed
|
20
|
+
# the "last" element needs to be found with .first
|
21
|
+
default_scope { order(start: :desc) }
|
22
|
+
scope :started_between, ->(start_date, end_date) { where("start >= ? AND start <= ?", start_date.to_i, end_date.to_i) }
|
23
|
+
|
24
|
+
# rubocop:disable Rails/FindBy
|
25
|
+
def self.last_for(user)
|
26
|
+
if user.is_a?(Assignation)
|
27
|
+
where(assignation: user).first
|
28
|
+
else
|
29
|
+
where(user: user).first
|
30
|
+
end
|
31
|
+
end
|
32
|
+
# rubocop:enable Rails/FindBy
|
33
|
+
|
34
|
+
# number of seconds since the counting started
|
35
|
+
# zero if activity is stopped
|
36
|
+
def seconds_elapsed
|
37
|
+
return 0 if stopped?
|
38
|
+
return 0 if start.blank?
|
39
|
+
|
40
|
+
@seconds_elapsed ||= Time.current.to_i - start.to_i
|
41
|
+
end
|
42
|
+
|
43
|
+
def stopped?
|
44
|
+
stop.to_i >= start
|
45
|
+
end
|
46
|
+
|
47
|
+
def start_time
|
48
|
+
Time.zone.at start
|
49
|
+
end
|
50
|
+
|
51
|
+
def stop_time
|
52
|
+
Time.zone.at stop
|
53
|
+
end
|
54
|
+
|
55
|
+
def stop!
|
56
|
+
self.stop = Time.current.to_i
|
57
|
+
self.total_seconds = stop - start
|
58
|
+
save!
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module TimeTracker
|
5
|
+
class TimeTracker < ApplicationRecord
|
6
|
+
include Decidim::HasComponent
|
7
|
+
include Decidim::Forms::HasQuestionnaire
|
8
|
+
include Decidim::Traceable
|
9
|
+
include Decidim::Loggable
|
10
|
+
|
11
|
+
self.table_name = :decidim_time_trackers
|
12
|
+
|
13
|
+
component_manifest_name "time_tracker"
|
14
|
+
|
15
|
+
has_many :tasks,
|
16
|
+
class_name: "Decidim::TimeTracker::Task",
|
17
|
+
dependent: :destroy
|
18
|
+
|
19
|
+
has_many :activities,
|
20
|
+
class_name: "Decidim::TimeTracker::Activity",
|
21
|
+
through: :tasks
|
22
|
+
|
23
|
+
has_many :assignations,
|
24
|
+
class_name: "Decidim::TimeTracker::Assignation",
|
25
|
+
through: :activities
|
26
|
+
|
27
|
+
has_one :assignee_data,
|
28
|
+
class_name: "Decidim::TimeTracker::AssigneeData"
|
29
|
+
|
30
|
+
has_one :assignee_questionnaire,
|
31
|
+
source: :questionnaire,
|
32
|
+
through: :assignee_data,
|
33
|
+
class_name: "Decidim::Forms::Questionnaire"
|
34
|
+
|
35
|
+
def has_questions?
|
36
|
+
questionnaire.questions.any?
|
37
|
+
end
|
38
|
+
|
39
|
+
def has_assignee_questions?
|
40
|
+
assignee_data.questionnaire.questions.any?
|
41
|
+
end
|
42
|
+
|
43
|
+
alias activity_questionnaire questionnaire
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module TimeTracker
|
5
|
+
# The data store for terms of service acceptance in the Decidim::TimeTracker component.
|
6
|
+
class TosAcceptance < ApplicationRecord
|
7
|
+
self.table_name = :decidim_time_tracker_tos_acceptances
|
8
|
+
|
9
|
+
belongs_to :assignee,
|
10
|
+
class_name: "Decidim::TimeTracker::Assignee"
|
11
|
+
|
12
|
+
belongs_to :time_tracker,
|
13
|
+
class_name: "Decidim::TimeTracker::TimeTracker"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module TimeTracker
|
5
|
+
module Admin
|
6
|
+
class Permissions < Decidim::DefaultPermissions
|
7
|
+
def permissions
|
8
|
+
return permission_action if permission_action.scope != :admin
|
9
|
+
|
10
|
+
allowed_task_action?
|
11
|
+
allowed_questionnaire_action?
|
12
|
+
allowed_activity_action?
|
13
|
+
allowed_assignation_action?
|
14
|
+
|
15
|
+
permission_action
|
16
|
+
end
|
17
|
+
|
18
|
+
def allowed_task_action?
|
19
|
+
return unless permission_action.subject.in? [:task, :tasks]
|
20
|
+
|
21
|
+
case permission_action.action
|
22
|
+
when :index, :create, :update, :destroy
|
23
|
+
permission_action.allow!
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def allowed_questionnaire_action?
|
28
|
+
return unless permission_action.subject.in? [:questionnaire, :questionnaire_answers]
|
29
|
+
|
30
|
+
if permission_action.subject == :questionnaire
|
31
|
+
case permission_action.action
|
32
|
+
when :export_answers, :update, :preview
|
33
|
+
permission_action.allow!
|
34
|
+
end
|
35
|
+
elsif permission_action.subject == :questionnaire_answers
|
36
|
+
case permission_action.action
|
37
|
+
when :show, :index, :export_response
|
38
|
+
permission_action.allow!
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def allowed_activity_action?
|
44
|
+
return unless permission_action.subject.in? [:activity, :activities]
|
45
|
+
|
46
|
+
case permission_action.action
|
47
|
+
when :index, :create, :update, :destroy
|
48
|
+
permission_action.allow!
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def allowed_assignation_action?
|
53
|
+
return unless permission_action.subject.in? [:assignation, :assignations]
|
54
|
+
|
55
|
+
case permission_action.action
|
56
|
+
when :update
|
57
|
+
permission_action.allow! if assignation.can_change_status?
|
58
|
+
when :index, :create, :destroy
|
59
|
+
permission_action.allow!
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def assignation
|
64
|
+
@assignation ||= context.fetch(:assignation, nil)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module TimeTracker
|
5
|
+
class Permissions < Decidim::DefaultPermissions
|
6
|
+
def permissions
|
7
|
+
# for the moment, we let public views for milestones
|
8
|
+
allow! if permission_action.subject == :milestone && permission_action.action == :show
|
9
|
+
|
10
|
+
return permission_action unless user
|
11
|
+
|
12
|
+
return Decidim::TimeTracker::Admin::Permissions.new(user, permission_action, context).permissions if permission_action.scope == :admin
|
13
|
+
|
14
|
+
case permission_action.subject
|
15
|
+
when :questionnaire
|
16
|
+
allow_answer?
|
17
|
+
when :assignation
|
18
|
+
allow_assignation?
|
19
|
+
when :milestone
|
20
|
+
allow_milestone?
|
21
|
+
else
|
22
|
+
allow!
|
23
|
+
end
|
24
|
+
|
25
|
+
permission_action
|
26
|
+
end
|
27
|
+
|
28
|
+
def allow_answer?
|
29
|
+
return unless permission_action.action == :answer
|
30
|
+
|
31
|
+
allow! if current_component&.published?
|
32
|
+
end
|
33
|
+
|
34
|
+
def allow_assignation?
|
35
|
+
return allow! unless activity
|
36
|
+
|
37
|
+
if permission_action.action == :create
|
38
|
+
return if activity.has_assignation? user
|
39
|
+
|
40
|
+
return unless activity.status.in? [:open, :not_started]
|
41
|
+
|
42
|
+
allow!
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def allow_milestone?
|
47
|
+
return unless activity
|
48
|
+
|
49
|
+
if permission_action.action == :create
|
50
|
+
return unless activity.assignation_accepted? user
|
51
|
+
|
52
|
+
return if activity.status.in? [:inactive]
|
53
|
+
|
54
|
+
allow!
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def activity
|
61
|
+
@activity ||= context.fetch(:activity, nil)
|
62
|
+
end
|
63
|
+
|
64
|
+
def current_component
|
65
|
+
@current_component ||= context.fetch(:current_component, nil)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module TimeTracker
|
5
|
+
module AdminLog
|
6
|
+
# This class holds the logic to present a `Decidim::TimeTracker::Activity`
|
7
|
+
# for the `AdminLog` log.
|
8
|
+
#
|
9
|
+
# Usage should be automatic and you shouldn't need to call this class
|
10
|
+
# directly, but here's an example:
|
11
|
+
#
|
12
|
+
# action_log = Decidim::ActionLog.last
|
13
|
+
# view_helpers # => this comes from the views
|
14
|
+
# ActivityPresenter.new(action_log, view_helpers).present
|
15
|
+
class ActivityPresenter < Decidim::Log::BasePresenter
|
16
|
+
private
|
17
|
+
|
18
|
+
def diff_fields_mapping
|
19
|
+
{
|
20
|
+
description: :i18n,
|
21
|
+
active: :boolean
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def i18n_labels_scope
|
26
|
+
"activemodel.attributes.time_tracker.activity"
|
27
|
+
end
|
28
|
+
|
29
|
+
def action_string
|
30
|
+
case action
|
31
|
+
when "create", "delete", "update"
|
32
|
+
"decidim.time_tracker.admin_log.activity.#{action}"
|
33
|
+
else
|
34
|
+
super
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def has_diff?
|
39
|
+
action == "delete" || super
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module TimeTracker
|
5
|
+
module AdminLog
|
6
|
+
# This class holds the logic to present a `Decidim::TimeTracker::Assignation`
|
7
|
+
# for the `AdminLog` log.
|
8
|
+
#
|
9
|
+
# Usage should be automatic and you shouldn't need to call this class
|
10
|
+
# directly, but here's an example:
|
11
|
+
#
|
12
|
+
# action_log = Decidim::ActionLog.last
|
13
|
+
# view_helpers # => this comes from the views
|
14
|
+
# AssignationPresenter.new(action_log, view_helpers).present
|
15
|
+
class AssignationPresenter < Decidim::Log::BasePresenter
|
16
|
+
private
|
17
|
+
|
18
|
+
def diff_fields_mapping
|
19
|
+
{
|
20
|
+
status: :string,
|
21
|
+
decidim_user_id: :user,
|
22
|
+
activity_id: "Decidim::TimeTracker::AdminLog::ValueTypes::ActivityPresenter",
|
23
|
+
invited_at: :date,
|
24
|
+
invited_by_user: :user,
|
25
|
+
requested_at: :date
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def i18n_labels_scope
|
30
|
+
"activemodel.attributes.time_tracker.assignation"
|
31
|
+
end
|
32
|
+
|
33
|
+
def action_string
|
34
|
+
case action
|
35
|
+
when "create", "delete", "update"
|
36
|
+
"decidim.time_tracker.admin_log.assignation.#{action}"
|
37
|
+
else
|
38
|
+
super
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def has_diff?
|
43
|
+
action == "delete" || super
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module TimeTracker
|
5
|
+
module AdminLog
|
6
|
+
# This class holds the logic to present a `Decidim::TimeTracker::Task`
|
7
|
+
# for the `AdminLog` log.
|
8
|
+
#
|
9
|
+
# Usage should be automatic and you shouldn't need to call this class
|
10
|
+
# directly, but here's an example:
|
11
|
+
#
|
12
|
+
# action_log = Decidim::ActionLog.last
|
13
|
+
# view_helpers # => this comes from the views
|
14
|
+
# TaskPresenter.new(action_log, view_helpers).present
|
15
|
+
class TaskPresenter < Decidim::Log::BasePresenter
|
16
|
+
private
|
17
|
+
|
18
|
+
def diff_fields_mapping
|
19
|
+
{
|
20
|
+
name: :i18n,
|
21
|
+
time_tracker_id: "Decidim::TimeTracker::AdminLog::ValueTypes::TimeTrackerPresenter",
|
22
|
+
active: :boolean,
|
23
|
+
updated_at: :date
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def i18n_labels_scope
|
28
|
+
"activemodel.attributes.time_tracker.task"
|
29
|
+
end
|
30
|
+
|
31
|
+
def action_string
|
32
|
+
case action
|
33
|
+
when "create", "delete", "update"
|
34
|
+
"decidim.time_tracker.admin_log.task.#{action}"
|
35
|
+
else
|
36
|
+
super
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def has_diff?
|
41
|
+
action == "delete" || super
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|