decidim-time_tracker 0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module TimeTracker
|
|
5
|
+
module Admin
|
|
6
|
+
# A command with all the business logic when creating a task
|
|
7
|
+
class CreateTask < Rectify::Command
|
|
8
|
+
def initialize(form)
|
|
9
|
+
@form = form
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Creates the task if valid.
|
|
13
|
+
#
|
|
14
|
+
# Broadcasts :ok if successful, :invalid otherwise.
|
|
15
|
+
def call
|
|
16
|
+
return broadcast(:invalid) if @form.invalid?
|
|
17
|
+
|
|
18
|
+
create_task
|
|
19
|
+
broadcast(:ok)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def create_task
|
|
23
|
+
Decidim.traceability.create!(
|
|
24
|
+
Decidim::TimeTracker::Task,
|
|
25
|
+
@form.current_user,
|
|
26
|
+
name: @form.name,
|
|
27
|
+
time_tracker: @form.time_tracker
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module TimeTracker
|
|
5
|
+
module Admin
|
|
6
|
+
# A command with all the business logic when creating a task
|
|
7
|
+
class CreateTimeTracker < Rectify::Command
|
|
8
|
+
def initialize(component)
|
|
9
|
+
@questionnaire = Decidim::Forms::Questionnaire.new
|
|
10
|
+
@assignee_questionnaire = Decidim::Forms::Questionnaire.new
|
|
11
|
+
@time_tracker = Decidim::TimeTracker::TimeTracker.new(component: component, questionnaire: @questionnaire)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def call
|
|
15
|
+
begin
|
|
16
|
+
@time_tracker.save!
|
|
17
|
+
populate_questionnaire(Decidim::TimeTracker.default_activity_questionnaire, @questionnaire)
|
|
18
|
+
populate_questionnaire(Decidim::TimeTracker.default_assignee_questionnaire, @assignee_questionnaire)
|
|
19
|
+
create_assignee_data
|
|
20
|
+
rescue StandardError
|
|
21
|
+
return broadcast(:invalid)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
broadcast(:ok)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
attr_reader :time_tracker, :questionnaire, :assignee_questionnaire
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def populate_questionnaire(seeds, questionnaire)
|
|
32
|
+
return unless seeds
|
|
33
|
+
return unless seeds[:questions]
|
|
34
|
+
|
|
35
|
+
questions = seeds[:questions].map do |question|
|
|
36
|
+
Decidim::Forms::Question.create(prepare_question(question, questionnaire))
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
seeds[:title] = i18nize(seeds[:title])
|
|
40
|
+
seeds[:description] = i18nize(seeds[:description])
|
|
41
|
+
seeds[:tos] = i18nize(seeds[:tos])
|
|
42
|
+
seeds[:questions] = questions
|
|
43
|
+
|
|
44
|
+
questionnaire.attributes = seeds
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def prepare_question(question, questionnaire)
|
|
48
|
+
if question.has_key?(:answer_options)
|
|
49
|
+
question[:answer_options].map! do |answer_option|
|
|
50
|
+
answer_option[:body] = i18nize(answer_option[:body])
|
|
51
|
+
Decidim::Forms::AnswerOption.new(answer_option)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
question.merge(
|
|
56
|
+
body: i18nize(question[:body]),
|
|
57
|
+
description: i18nize(question[:description]),
|
|
58
|
+
questionnaire: questionnaire
|
|
59
|
+
)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def create_assignee_data
|
|
63
|
+
Decidim::TimeTracker::AssigneeData.create!(time_tracker: @time_tracker, questionnaire: @assignee_questionnaire)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def i18nize(key)
|
|
67
|
+
return key unless key.is_a? String
|
|
68
|
+
|
|
69
|
+
I18n.available_locales.each_with_object({}) do |locale, acc|
|
|
70
|
+
acc[locale] = I18n.with_locale(locale) { I18n.t(key, default: key) }
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module TimeTracker
|
|
5
|
+
module Admin
|
|
6
|
+
# A command with all the business logic when updating an activity
|
|
7
|
+
class DestroyActivity < Rectify::Command
|
|
8
|
+
# Public: Initializes the command.
|
|
9
|
+
#
|
|
10
|
+
# form - A form object with the params.
|
|
11
|
+
def initialize(activity, user)
|
|
12
|
+
@activity = activity
|
|
13
|
+
@user = user
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Executes the command. Broadcasts these events:
|
|
17
|
+
#
|
|
18
|
+
# - :ok when everything is valid.
|
|
19
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
|
20
|
+
#
|
|
21
|
+
# Returns nothing.
|
|
22
|
+
def call
|
|
23
|
+
destroy_activity!
|
|
24
|
+
broadcast(:ok)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
attr_reader :form
|
|
30
|
+
|
|
31
|
+
def destroy_activity!
|
|
32
|
+
Decidim.traceability.perform_action!(
|
|
33
|
+
:delete,
|
|
34
|
+
@activity,
|
|
35
|
+
@user
|
|
36
|
+
) do
|
|
37
|
+
@activity.destroy!
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module TimeTracker
|
|
5
|
+
module Admin
|
|
6
|
+
# A command with all the business logic when updating an activity
|
|
7
|
+
class DestroyAssignation < Rectify::Command
|
|
8
|
+
# Public: Initializes the command.
|
|
9
|
+
#
|
|
10
|
+
# form - A form object with the params.
|
|
11
|
+
def initialize(assignation, user)
|
|
12
|
+
@assignation = assignation
|
|
13
|
+
@user = user
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Executes the command. Broadcasts these events:
|
|
17
|
+
#
|
|
18
|
+
# - :ok when everything is valid.
|
|
19
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
|
20
|
+
#
|
|
21
|
+
# Returns nothing.
|
|
22
|
+
def call
|
|
23
|
+
destroy_assignation!
|
|
24
|
+
broadcast(:ok)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
attr_reader :form
|
|
30
|
+
|
|
31
|
+
def destroy_assignation!
|
|
32
|
+
Decidim.traceability.perform_action!(
|
|
33
|
+
:delete,
|
|
34
|
+
@assignation,
|
|
35
|
+
@user
|
|
36
|
+
) do
|
|
37
|
+
@assignation.destroy!
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module TimeTracker
|
|
5
|
+
module Admin
|
|
6
|
+
# A command with all the business logic when updating an task
|
|
7
|
+
class DestroyTask < Rectify::Command
|
|
8
|
+
# Public: Initializes the command.
|
|
9
|
+
#
|
|
10
|
+
# form - A form object with the params.
|
|
11
|
+
def initialize(task, user)
|
|
12
|
+
@task = task
|
|
13
|
+
@user = user
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Executes the command. Broadcasts these events:
|
|
17
|
+
#
|
|
18
|
+
# - :ok when everything is valid.
|
|
19
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
|
20
|
+
#
|
|
21
|
+
# Returns nothing.
|
|
22
|
+
def call
|
|
23
|
+
destroy_task!
|
|
24
|
+
broadcast(:ok)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
attr_reader :form
|
|
30
|
+
|
|
31
|
+
def destroy_task!
|
|
32
|
+
Decidim.traceability.perform_action!(
|
|
33
|
+
:delete,
|
|
34
|
+
@task,
|
|
35
|
+
@user
|
|
36
|
+
) do
|
|
37
|
+
@task.destroy!
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module TimeTracker
|
|
5
|
+
module Admin
|
|
6
|
+
# A command with all the business logic when an admin exports time tracker to
|
|
7
|
+
# create an accountability component.
|
|
8
|
+
class ExportTimeTracker < Rectify::Command
|
|
9
|
+
# Public: Initializes the command.
|
|
10
|
+
def initialize(current_component, current_user)
|
|
11
|
+
@component = current_component
|
|
12
|
+
@user = current_user
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Executes the command. Broadcasts these events:
|
|
16
|
+
#
|
|
17
|
+
# - :ok when everything is valid.
|
|
18
|
+
# - :invalid when we couldn't proceed.
|
|
19
|
+
#
|
|
20
|
+
# Returns the accountability component.
|
|
21
|
+
def call
|
|
22
|
+
create_component
|
|
23
|
+
export_time_tracker
|
|
24
|
+
broadcast(:ok, @accountability_component)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
attr_reader :component
|
|
30
|
+
|
|
31
|
+
def create_component
|
|
32
|
+
params = {
|
|
33
|
+
name: {
|
|
34
|
+
en: "Time Tracker Accountability"
|
|
35
|
+
},
|
|
36
|
+
manifest_name: :accountability,
|
|
37
|
+
published_at: Time.current,
|
|
38
|
+
participatory_space: @component.participatory_space,
|
|
39
|
+
settings: {
|
|
40
|
+
categories_label: {
|
|
41
|
+
en: "Project"
|
|
42
|
+
},
|
|
43
|
+
subcategories_label: {
|
|
44
|
+
en: "Activity"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@accountability_component = Decidim.traceability.perform_action!("publish", Decidim::Component, @user, visibility: "all") do
|
|
50
|
+
Decidim::Component.create!(params)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
Decidim::Accountability::Status.create!(
|
|
54
|
+
component: @accountability_component,
|
|
55
|
+
name: { en: "Not started" },
|
|
56
|
+
key: "not_started"
|
|
57
|
+
) do |status|
|
|
58
|
+
@not_started = status
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
Decidim::Accountability::Status.create!(
|
|
62
|
+
component: @accountability_component,
|
|
63
|
+
name: { en: "Work in progress" },
|
|
64
|
+
key: "work_in_progress"
|
|
65
|
+
) do |status|
|
|
66
|
+
@work_in_progress = status
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
Decidim::Accountability::Status.create!(
|
|
70
|
+
component: @accountability_component,
|
|
71
|
+
name: { en: "Completed" },
|
|
72
|
+
key: "completed"
|
|
73
|
+
) do |status|
|
|
74
|
+
@completed = status
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def export_time_tracker
|
|
79
|
+
tasks.each do |task|
|
|
80
|
+
params_category = {
|
|
81
|
+
name: task.name,
|
|
82
|
+
weight: 0,
|
|
83
|
+
description: task.name,
|
|
84
|
+
participatory_space: current_participatory_space
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
category = Decidim.traceability.create!(
|
|
88
|
+
Decidim::Category,
|
|
89
|
+
@user,
|
|
90
|
+
params_category
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
status = @not_started
|
|
94
|
+
status = @work_in_progress unless task.activities.joins(:time_events).empty?
|
|
95
|
+
status = @completed if task.activities.where("decidim_time_tracker_activities.end_date > ?", Time.zone.today).empty?
|
|
96
|
+
|
|
97
|
+
params_task = {
|
|
98
|
+
component: @accountability_component,
|
|
99
|
+
title: task.name,
|
|
100
|
+
category: category,
|
|
101
|
+
status: @not_started
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
result = Decidim.traceability.create!(
|
|
105
|
+
Decidim::Accountability::Result,
|
|
106
|
+
@user,
|
|
107
|
+
params_task,
|
|
108
|
+
visibility: "all"
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
task_activities(task).each do |activity|
|
|
112
|
+
status = @not_started
|
|
113
|
+
status = @work_in_progress unless activity.time_events.nil?
|
|
114
|
+
status = @completed if activity.end_date < Time.zone.today
|
|
115
|
+
|
|
116
|
+
params_activity = {
|
|
117
|
+
component: @accountability_component,
|
|
118
|
+
parent_id: result.id,
|
|
119
|
+
title: activity.description,
|
|
120
|
+
start_date: activity.start_date,
|
|
121
|
+
end_date: activity.end_date,
|
|
122
|
+
category: category,
|
|
123
|
+
status: status
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
Decidim.traceability.create!(
|
|
127
|
+
Decidim::Accountability::Result,
|
|
128
|
+
@user,
|
|
129
|
+
params_activity,
|
|
130
|
+
visibility: "all"
|
|
131
|
+
)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def tasks
|
|
137
|
+
Decidim::TimeTracker::Task.where(component: @component)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def task_activities(task)
|
|
141
|
+
Decidim::TimeTracker::Activity.where(task: task)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def activities_assignations(activity)
|
|
145
|
+
Decidim::TimeTracker::Assignation.where(activity: activity)
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module TimeTracker
|
|
5
|
+
module Admin
|
|
6
|
+
# A command with all the business logic when updating an activity
|
|
7
|
+
class UpdateActivity < Rectify::Command
|
|
8
|
+
# Public: Initializes the command.
|
|
9
|
+
#
|
|
10
|
+
# form - A form object with the params.
|
|
11
|
+
def initialize(activity, form, user)
|
|
12
|
+
@activity = activity
|
|
13
|
+
@form = form
|
|
14
|
+
@user = user
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Executes the command. Broadcasts these events:
|
|
18
|
+
#
|
|
19
|
+
# - :ok when everything is valid.
|
|
20
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
|
21
|
+
#
|
|
22
|
+
# Returns nothing.
|
|
23
|
+
def call
|
|
24
|
+
return broadcast(:invalid) if form.invalid?
|
|
25
|
+
|
|
26
|
+
update_activity!
|
|
27
|
+
broadcast(:ok)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
attr_reader :form
|
|
33
|
+
|
|
34
|
+
def update_activity!
|
|
35
|
+
Decidim.traceability.update!(
|
|
36
|
+
@activity,
|
|
37
|
+
@user,
|
|
38
|
+
description: @form.description,
|
|
39
|
+
active: @form.active,
|
|
40
|
+
start_date: @form.start_date,
|
|
41
|
+
end_date: @form.end_date,
|
|
42
|
+
max_minutes_per_day: @form.max_minutes_per_day,
|
|
43
|
+
requests_start_at: @form.requests_start_at
|
|
44
|
+
)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
module TimeTracker
|
|
5
|
+
module Admin
|
|
6
|
+
# A command with all the business logic when updating an assignation
|
|
7
|
+
class UpdateAssignation < Rectify::Command
|
|
8
|
+
# Public: Initializes the command.
|
|
9
|
+
#
|
|
10
|
+
# assignation_status - A symbol representing the assignation status.
|
|
11
|
+
def initialize(assignation, user, assignation_status)
|
|
12
|
+
@assignation = assignation
|
|
13
|
+
@user = user
|
|
14
|
+
@assignation_status = assignation_status
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Executes the command. Broadcasts these events:
|
|
18
|
+
#
|
|
19
|
+
# - :ok when everything is valid.
|
|
20
|
+
# - :invalid if the form wasn't valid and we couldn't proceed.
|
|
21
|
+
#
|
|
22
|
+
# Returns nothing.
|
|
23
|
+
def call
|
|
24
|
+
return broadcast(:invalid) unless [:accepted, :rejected].include? @assignation_status
|
|
25
|
+
|
|
26
|
+
update_assignation!
|
|
27
|
+
broadcast(:ok)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def update_assignation!
|
|
33
|
+
Decidim.traceability.update!(
|
|
34
|
+
@assignation,
|
|
35
|
+
@user,
|
|
36
|
+
status: @assignation_status
|
|
37
|
+
)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|