decidim-time_tracker 0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (134) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE-AGPLv3.txt +661 -0
  3. data/README.md +174 -0
  4. data/Rakefile +40 -0
  5. data/app/assets/config/admin/decidim_time_tracker_manifest.css +2 -0
  6. data/app/assets/config/admin/decidim_time_tracker_manifest.js +1 -0
  7. data/app/assets/config/decidim_time_tracker_manifest.css +3 -0
  8. data/app/assets/config/decidim_time_tracker_manifest.js +1 -0
  9. data/app/assets/images/decidim/time_tracker/icon.svg +1 -0
  10. data/app/assets/javascripts/decidim/time_tracker/activity_ui.js.es6 +112 -0
  11. data/app/assets/javascripts/decidim/time_tracker/admin/assignations.js.es6 +35 -0
  12. data/app/assets/javascripts/decidim/time_tracker/reports/reports.js.es6 +19 -0
  13. data/app/assets/javascripts/decidim/time_tracker/time_tracker.js.es6 +82 -0
  14. data/app/assets/javascripts/decidim/time_tracker/timer_api.js.es6 +55 -0
  15. data/app/assets/stylesheets/decidim/time_tracker/_variables.scss +1 -0
  16. data/app/assets/stylesheets/decidim/time_tracker/admin/time_tracker.scss +59 -0
  17. data/app/assets/stylesheets/decidim/time_tracker/time_tracker.scss +118 -0
  18. data/app/cells/decidim/time_tracker/milestone/show.erb +42 -0
  19. data/app/cells/decidim/time_tracker/milestone_cell.rb +54 -0
  20. data/app/commands/decidim/time_tracker/admin/create_activity.rb +39 -0
  21. data/app/commands/decidim/time_tracker/admin/create_assignation.rb +75 -0
  22. data/app/commands/decidim/time_tracker/admin/create_task.rb +33 -0
  23. data/app/commands/decidim/time_tracker/admin/create_time_tracker.rb +76 -0
  24. data/app/commands/decidim/time_tracker/admin/destroy_activity.rb +43 -0
  25. data/app/commands/decidim/time_tracker/admin/destroy_assignation.rb +43 -0
  26. data/app/commands/decidim/time_tracker/admin/destroy_task.rb +43 -0
  27. data/app/commands/decidim/time_tracker/admin/export_time_tracker.rb +150 -0
  28. data/app/commands/decidim/time_tracker/admin/update_activity.rb +49 -0
  29. data/app/commands/decidim/time_tracker/admin/update_assignation.rb +42 -0
  30. data/app/commands/decidim/time_tracker/admin/update_task.rb +44 -0
  31. data/app/commands/decidim/time_tracker/create_milestone.rb +57 -0
  32. data/app/commands/decidim/time_tracker/create_request_assignation.rb +39 -0
  33. data/app/commands/decidim/time_tracker/start_time_event.rb +104 -0
  34. data/app/commands/decidim/time_tracker/stop_last_time_event.rb +45 -0
  35. data/app/controllers/concerns/decidim/time_tracker/admin/filterable_assignations.rb +50 -0
  36. data/app/controllers/decidim/time_tracker/activity_questionnaire_controller.rb +76 -0
  37. data/app/controllers/decidim/time_tracker/admin/activities_controller.rb +82 -0
  38. data/app/controllers/decidim/time_tracker/admin/activity_questionnaire_controller.rb +52 -0
  39. data/app/controllers/decidim/time_tracker/admin/application_controller.rb +22 -0
  40. data/app/controllers/decidim/time_tracker/admin/assignations_controller.rb +84 -0
  41. data/app/controllers/decidim/time_tracker/admin/assignee_questionnaire_controller.rb +58 -0
  42. data/app/controllers/decidim/time_tracker/admin/stats_controller.rb +24 -0
  43. data/app/controllers/decidim/time_tracker/admin/tasks_controller.rb +112 -0
  44. data/app/controllers/decidim/time_tracker/admin/time_tracker_exports_controller.rb +25 -0
  45. data/app/controllers/decidim/time_tracker/application_controller.rb +24 -0
  46. data/app/controllers/decidim/time_tracker/assignations_controller.rb +38 -0
  47. data/app/controllers/decidim/time_tracker/assignee_questionnaire_controller.rb +80 -0
  48. data/app/controllers/decidim/time_tracker/milestones_controller.rb +62 -0
  49. data/app/controllers/decidim/time_tracker/reports/user_controller.rb +38 -0
  50. data/app/controllers/decidim/time_tracker/time_events_controller.rb +68 -0
  51. data/app/controllers/decidim/time_tracker/time_tracker_controller.rb +43 -0
  52. data/app/forms/decidim/time_tracker/admin/activity_form.rb +27 -0
  53. data/app/forms/decidim/time_tracker/admin/assignation_form.rb +29 -0
  54. data/app/forms/decidim/time_tracker/admin/task_form.rb +22 -0
  55. data/app/forms/decidim/time_tracker/milestone_form.rb +32 -0
  56. data/app/forms/decidim/time_tracker/time_event_form.rb +47 -0
  57. data/app/helpers/decidim/time_tracker/admin/application_helper.rb +33 -0
  58. data/app/helpers/decidim/time_tracker/application_helper.rb +95 -0
  59. data/app/jobs/decidim/time_tracker/stop_counter_job.rb +29 -0
  60. data/app/models/decidim/time_tracker/activity.rb +135 -0
  61. data/app/models/decidim/time_tracker/application_record.rb +10 -0
  62. data/app/models/decidim/time_tracker/assignation.rb +68 -0
  63. data/app/models/decidim/time_tracker/assignee.rb +29 -0
  64. data/app/models/decidim/time_tracker/assignee_data.rb +19 -0
  65. data/app/models/decidim/time_tracker/milestone.rb +27 -0
  66. data/app/models/decidim/time_tracker/task.rb +44 -0
  67. data/app/models/decidim/time_tracker/time_event.rb +62 -0
  68. data/app/models/decidim/time_tracker/time_tracker.rb +46 -0
  69. data/app/models/decidim/time_tracker/tos_acceptance.rb +16 -0
  70. data/app/permissions/decidim/time_tracker/admin/permissions.rb +69 -0
  71. data/app/permissions/decidim/time_tracker/permissions.rb +69 -0
  72. data/app/presenters/decidim/time_tracker/admin_log/activity_presenter.rb +44 -0
  73. data/app/presenters/decidim/time_tracker/admin_log/assignation_presenter.rb +48 -0
  74. data/app/presenters/decidim/time_tracker/admin_log/task_presenter.rb +46 -0
  75. data/app/presenters/decidim/time_tracker/admin_log/value_types/activity_presenter.rb +28 -0
  76. data/app/presenters/decidim/time_tracker/admin_log/value_types/time_tracker_presenter.rb +28 -0
  77. data/app/views/decidim/time_tracker/admin/_breadcrumbs.html.erb +56 -0
  78. data/app/views/decidim/time_tracker/admin/activities/_form.html.erb +41 -0
  79. data/app/views/decidim/time_tracker/admin/activities/_index.html.erb +73 -0
  80. data/app/views/decidim/time_tracker/admin/activities/edit.html.erb +5 -0
  81. data/app/views/decidim/time_tracker/admin/activities/new.html.erb +5 -0
  82. data/app/views/decidim/time_tracker/admin/assignations/_form.html.erb +30 -0
  83. data/app/views/decidim/time_tracker/admin/assignations/index.html.erb +67 -0
  84. data/app/views/decidim/time_tracker/admin/assignations/new.html.erb +9 -0
  85. data/app/views/decidim/time_tracker/admin/questionnaires/_index.html.erb +27 -0
  86. data/app/views/decidim/time_tracker/admin/questionnaires/_questionnaire.html.erb +21 -0
  87. data/app/views/decidim/time_tracker/admin/stats/index.html.erb +50 -0
  88. data/app/views/decidim/time_tracker/admin/tasks/_assignations.html.erb +60 -0
  89. data/app/views/decidim/time_tracker/admin/tasks/_form.html.erb +7 -0
  90. data/app/views/decidim/time_tracker/admin/tasks/_index.html.erb +61 -0
  91. data/app/views/decidim/time_tracker/admin/tasks/edit.html.erb +16 -0
  92. data/app/views/decidim/time_tracker/admin/tasks/index.html.erb +5 -0
  93. data/app/views/decidim/time_tracker/admin/tasks/new.html.erb +12 -0
  94. data/app/views/decidim/time_tracker/milestones/index.html.erb +60 -0
  95. data/app/views/decidim/time_tracker/reports/user/index.html.erb +41 -0
  96. data/app/views/decidim/time_tracker/time_tracker/_activity.html.erb +43 -0
  97. data/app/views/decidim/time_tracker/time_tracker/_answer_questionnaire.html.erb +7 -0
  98. data/app/views/decidim/time_tracker/time_tracker/_assignee_data.html.erb +9 -0
  99. data/app/views/decidim/time_tracker/time_tracker/_callout_status.html.erb +3 -0
  100. data/app/views/decidim/time_tracker/time_tracker/_idle_activity.html.erb +27 -0
  101. data/app/views/decidim/time_tracker/time_tracker/_milestone_form.html.erb +35 -0
  102. data/app/views/decidim/time_tracker/time_tracker/_request_activity.html.erb +22 -0
  103. data/app/views/decidim/time_tracker/time_tracker/_sign_in.html.erb +5 -0
  104. data/app/views/decidim/time_tracker/time_tracker/index.html.erb +59 -0
  105. data/config/activity_questionnaire.yml +26 -0
  106. data/config/assignee_questionnaire.yml +37 -0
  107. data/config/i18n-tasks.yml +10 -0
  108. data/config/locales/ca.yml +394 -0
  109. data/config/locales/cs.yml +394 -0
  110. data/config/locales/en.yml +419 -0
  111. data/config/locales/es.yml +394 -0
  112. data/db/migrate/20200302115642_create_decidim_time_tracker_time_trackers.rb +10 -0
  113. data/db/migrate/20200302115654_create_decidim_time_tracker_tasks.rb +11 -0
  114. data/db/migrate/20200302115658_create_decidim_time_tracker_assignees.rb +12 -0
  115. data/db/migrate/20200302115700_create_decidim_time_tracker_activities.rb +19 -0
  116. data/db/migrate/20200302115708_create_decidim_time_tracker_milestones.rb +13 -0
  117. data/db/migrate/20200302115831_create_decidim_time_tracker_assignations.rb +16 -0
  118. data/db/migrate/20200302115840_create_decidim_time_tracker_time_events.rb +15 -0
  119. data/db/migrate/20201118153327_create_decidim_time_tracker_assignee_data.rb +10 -0
  120. data/db/migrate/20201223115130_create_decidim_time_tracker_tos_acceptances.rb +18 -0
  121. data/lib/decidim/time_tracker.rb +45 -0
  122. data/lib/decidim/time_tracker/admin.rb +10 -0
  123. data/lib/decidim/time_tracker/admin_engine.rb +51 -0
  124. data/lib/decidim/time_tracker/component.rb +248 -0
  125. data/lib/decidim/time_tracker/engine.rb +59 -0
  126. data/lib/decidim/time_tracker/reports.rb +10 -0
  127. data/lib/decidim/time_tracker/reports_engine.rb +34 -0
  128. data/lib/decidim/time_tracker/test/admin_log_presenter_examples.rb +34 -0
  129. data/lib/decidim/time_tracker/test/factories.rb +110 -0
  130. data/lib/decidim/time_tracker/test/time_tracker_context.rb +18 -0
  131. data/lib/decidim/time_tracker/time_tracker_activity_questionnaire_answers_serializer.rb +74 -0
  132. data/lib/decidim/time_tracker/version.rb +9 -0
  133. data/vendor/assets/javascripts/jsrender.min.js +4 -0
  134. metadata +276 -0
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module TimeTracker
5
+ module AdminLog
6
+ module ValueTypes
7
+ class ActivityPresenter < Decidim::Log::ValueTypes::DefaultPresenter
8
+ # Public: Presents the value as a Decidim::TimeTracker. If the activity can
9
+ # be found, it shows its title. Otherwise it shows its ID.
10
+ #
11
+ # Returns an HTML-safe String.
12
+ def present
13
+ return unless value
14
+ return h.translated_attribute(activity&.description) if activity
15
+
16
+ I18n.t("not_found", id: value, scope: "decidim.log.value_types.activity_presenter")
17
+ end
18
+
19
+ private
20
+
21
+ def activity
22
+ @activity ||= Decidim::TimeTracker::Activity.find_by(id: value)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module TimeTracker
5
+ module AdminLog
6
+ module ValueTypes
7
+ class TimeTrackerPresenter < Decidim::Log::ValueTypes::DefaultPresenter
8
+ # Public: Presents the value as a Decidim::TimeTracker. If the time_tracker can
9
+ # be found, it shows its title. Otherwise it shows its ID.
10
+ #
11
+ # Returns an HTML-safe String.
12
+ def present
13
+ return unless value
14
+ return h.translated_attribute(time_tracker&.component&.name) if time_tracker
15
+
16
+ I18n.t("not_found", id: value, scope: "decidim.log.value_types.time_tracker_presenter")
17
+ end
18
+
19
+ private
20
+
21
+ def time_tracker
22
+ @time_tracker ||= Decidim::TimeTracker::TimeTracker.find_by(id: value)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,56 @@
1
+ <div class="card">
2
+ <div class="card-section">
3
+ <nav role="navigation">
4
+ <ul class="breadcrumbs">
5
+ <% if current_page?(tasks_path) || current_page?(root_path) %>
6
+ <li class="<%= "active" %>">
7
+ <%= link_to t(".stats"), stats_path %>
8
+ </li>
9
+ <% else %>
10
+ <li>
11
+ <%= link_to t(".global"), tasks_path %>
12
+ </li>
13
+ <% end %>
14
+
15
+ <% if controller_name == "tasks" %>
16
+ <% if action_name == "edit" || action_name == "new" %>
17
+ <li class="<%= "active" if current_page? edit_task_path(current_task) %>">
18
+ <%= translated_attribute current_task.name %>
19
+ </li>
20
+ <% end %>
21
+ <% elsif controller_name == "activities" %>
22
+ <li>
23
+ <%= link_to translated_attribute(current_task.name), edit_task_path(current_task) %>
24
+ </li>
25
+
26
+ <% if current_activity && !current_page?(new_task_activity_path) %>
27
+ <li class="<%= "active" if current_page? edit_task_activity_path(current_activity) %>">
28
+ <%= translated_attribute current_activity.description %>
29
+ </li>
30
+ <% end %>
31
+ <% elsif controller_name == "assignations" %>
32
+ <li>
33
+ <%= link_to translated_attribute(current_task.name), edit_task_path(current_task) %>
34
+ </li>
35
+
36
+ <li>
37
+ <%= link_to translated_attribute(current_activity.description), edit_task_activity_path(current_task, current_activity) %>
38
+ </li>
39
+
40
+ <% if action_name == "new" %>
41
+ <li>
42
+ <%= link_to t("assignations.actions.assignations", scope: "decidim.time_tracker.admin"), task_activity_assignations_path(current_task, current_activity) %>
43
+ </li>
44
+ <li>
45
+ <%= t("assignations.actions.new", scope: "decidim.time_tracker.admin") %>
46
+ </li>
47
+ <% else %>
48
+ <li>
49
+ <%= t("activities.actions.assignations", scope: "decidim.time_tracker.admin") %>
50
+ </li>
51
+ <% end %>
52
+ <% end %>
53
+ </ul>
54
+ </nav>
55
+ </div>
56
+ </div>
@@ -0,0 +1,41 @@
1
+ <div class="card">
2
+ <div class="card-divider">
3
+ <h2 class="card-title">
4
+ <%= title %>
5
+ <% if action_name == "edit" %>
6
+ <div class="button--title">
7
+ <%= link_to t("activities.actions.assignations", scope: "decidim.time_tracker.admin"), task_activity_assignations_path(current_task, current_activity), class: "button tiny button--simple" %>
8
+ </div>
9
+ <% end %>
10
+ </h2>
11
+ </div>
12
+ <div class="card-section">
13
+ <div class="row column">
14
+ <%= form.translated :text_field, :description, autofocus: true %>
15
+ </div>
16
+
17
+ <div class="row column">
18
+ <%= form.check_box :active %>
19
+ </div>
20
+
21
+ <div class="row column">
22
+ <%= form.datetime_field :start_date %>
23
+ </div>
24
+
25
+ <div class="row column">
26
+ <%= form.datetime_field :end_date %>
27
+ </div>
28
+
29
+ <div class="columns">
30
+ <%= form.datetime_field :requests_start_at %>
31
+ </div>
32
+
33
+ <div>
34
+ <%= form.number_field :max_minutes_per_day %>
35
+ </div>
36
+
37
+ <div class="button--double form-general-submit">
38
+ <%= form.submit submit %>
39
+ </div>
40
+ </div>
41
+ </div>
@@ -0,0 +1,73 @@
1
+ <div class="card">
2
+ <div class="card-divider">
3
+ <h2 class="card-title">
4
+ <%= t(".title") %>
5
+ <div class="button--title">
6
+ <%= link_to t("activities.actions.new", scope: "decidim.time_tracker.admin", name: activities_label), new_task_activity_path(task_id: current_task.id), class: "button tiny button--simple" %>
7
+ </div>
8
+ </h2>
9
+ </div>
10
+
11
+ <div class="card-section">
12
+ <div class="table-scroll">
13
+ <table class="table-list">
14
+ <thead>
15
+ <tr>
16
+ <th><%= t("models.activity.fields.description", scope: "decidim.time_tracker") %></th>
17
+ <th><%= t("models.activity.fields.status", scope: "decidim.time_tracker") %></th>
18
+ <th><%= t("models.activity.fields.start_date", scope: "decidim.time_tracker") %></th>
19
+ <th><%= t("models.activity.fields.end_date", scope: "decidim.time_tracker") %></th>
20
+ <th><%= t("models.activity.fields.max_minutes_per_day", scope: "decidim.time_tracker") %></th>
21
+ <th><%= t("models.activity.fields.requests_start_at", scope: "decidim.time_tracker") %></th>
22
+ <th><%= t("models.activity.fields.assignations_accepted", scope: "decidim.time_tracker") %></th>
23
+ <th><%= t("models.activity.fields.assignations_pending", scope: "decidim.time_tracker") %></th>
24
+ <th class="actions"><%= t("actions.title", scope: "decidim.time_tracker.admin") %></th>
25
+ </tr>
26
+ </thead>
27
+ <tbody>
28
+ <% activities.each do |activity| %>
29
+ <tr data-id="<%= activity.id %>" class="<%= "activity--inactive" unless activity.active? %>">
30
+ <td>
31
+ <%= translated_attribute activity.description %>
32
+ </td>
33
+ <td>
34
+ <%= t("models.activity.fields.statuses.#{activity.status}", scope: "decidim.time_tracker") %>
35
+ </td>
36
+ <td>
37
+ <%= l(activity.start_date, format: :decidim_short) if activity.start_date.present? %>
38
+ </td>
39
+ <td>
40
+ <%= l(activity.end_date, format: :decidim_short) if activity.end_date.present? %>
41
+ </td>
42
+ <td>
43
+ <%= activity.max_minutes_per_day %>
44
+ </td>
45
+ <td>
46
+ <%= l(activity.requests_start_at, format: :decidim_short) if activity.requests_start_at.present? %>
47
+ </td>
48
+ <td>
49
+ <%= activity.assignations.accepted.count %>
50
+ </td>
51
+ <td>
52
+ <%= activity.assignations.pending.count %>
53
+ </td>
54
+ <td class="table-list__actions">
55
+ <% if allowed_to? :index, :assignations %>
56
+ <%= icon_link_to "people", task_activity_assignations_path(@current_task, activity), t("activities.actions.assignations", scope: "decidim.time_tracker.admin"), class: "action-icon--assignations" %>
57
+ <% end %>
58
+
59
+ <% if allowed_to? :update, :activity, activity: activity %>
60
+ <%= icon_link_to "pencil", edit_task_activity_path(@current_task, activity), t("activities.actions.edit", scope: "decidim.time_tracker.admin"), class: "action-icon--edit" %>
61
+ <% end %>
62
+
63
+ <% if allowed_to? :destroy, :activity, activity: activity %>
64
+ <%= icon_link_to "circle-x", task_activity_path(@current_task, activity), t("activities.actions.destroy", scope: "decidim.time_tracker.admin"), method: :delete, class: "action-icon--remove", data: { confirm: t("activities.actions.confirm_destroy", scope: "decidim.time_tracker.admin") } %>
65
+ <% end %>
66
+ </td>
67
+ </tr>
68
+ <% end %>
69
+ </tbody>
70
+ </table>
71
+ </div>
72
+ </div>
73
+ </div>
@@ -0,0 +1,5 @@
1
+ <%= render partial: "decidim/time_tracker/admin/breadcrumbs" %>
2
+
3
+ <%= decidim_form_for(@form, url: task_activity_path, html: { class: "form edit_task_activity" }) do |f| %>
4
+ <%= render partial: "form", object: f, locals: { title: t(".title"), submit: t(".submit") } %>
5
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <%= render partial: "decidim/time_tracker/admin/breadcrumbs" %>
2
+
3
+ <%= decidim_form_for(@form, url: task_activities_path, html: { class: "form new_task_activity" }) do |f| %>
4
+ <%= render partial: "form", object: f, locals: { title: t(".title"), submit: t(".submit") } %>
5
+ <% end %>
@@ -0,0 +1,30 @@
1
+ <div class="card">
2
+ <div class="card-divider">
3
+ <h2 class="card-title"><%= title %></h2>
4
+ </div>
5
+ <div class="card-section">
6
+
7
+ <div class="user-fields">
8
+ <div class="row column">
9
+ <%= form.select :existing_user, [[t(".non_user"), false], [t(".existing_user"), true]], label: t(".user_type") %>
10
+ </div>
11
+
12
+ <div class="row column user-fields--name">
13
+ <%= form.text_field :name, autofocus: true %>
14
+ </div>
15
+
16
+ <div class="row column user-fields--email ">
17
+ <%= form.text_field :email %>
18
+ </div>
19
+
20
+ <div class="row column user-fields--user-picker">
21
+ <% prompt_options = { url: decidim_admin.users_organization_url, placeholder: t(".select_user") } %>
22
+ <%= form.autocomplete_select(:user_id, form.object.user.presence, { multiple: false }, prompt_options) do |user|
23
+ { value: user.id, label: "#{user.name} (@#{user.nickname})" }
24
+ end %>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ </div>
29
+
30
+ <%= javascript_include_tag "decidim/time_tracker/admin/assignations" %>
@@ -0,0 +1,67 @@
1
+ <%= render partial: "decidim/time_tracker/admin/breadcrumbs" %>
2
+
3
+ <div class="card">
4
+ <div class="card-divider">
5
+ <h2 class="card-title">
6
+ <%= t(".title") %>
7
+ <div class="button--title">
8
+ <%= link_to t("assignations.actions.new", scope: "decidim.time_tracker.admin", name: assignations_label), new_task_activity_assignation_path, class: "button tiny button--simple" %>
9
+ </div>
10
+ </h2>
11
+ </div>
12
+
13
+ <div class="card-section">
14
+ <div class="table-scroll">
15
+ <table class="table-list">
16
+ <thead>
17
+ <tr>
18
+ <th><%= t("models.assignation.fields.name", scope: "decidim.time_tracker") %></th>
19
+ <th><%= t("models.assignation.fields.email", scope: "decidim.time_tracker") %></th>
20
+ <th><%= t("models.assignation.fields.invited_by", scope: "decidim.time_tracker") %></th>
21
+ <th><%= t("models.assignation.fields.invited_at", scope: "decidim.time_tracker") %></th>
22
+ <th><%= t("models.assignation.fields.tos_accepted_at", scope: "decidim.time_tracker") %></th>
23
+ <th><%= t("models.assignation.fields.time_dedicated", scope: "decidim.time_tracker") %></th>
24
+ <th><%= t("models.assignation.fields.status", scope: "decidim.time_tracker") %></th>
25
+ <th class="actions"><%= t("actions.title", scope: "decidim.time_tracker.admin") %></th>
26
+ </tr>
27
+ </thead>
28
+ <tbody>
29
+ <% assignations.each do |assignation| %>
30
+ <tr data-id="<%= assignation.id %>" class="assignation--<%= assignation.status %>">
31
+ <td>
32
+ <%= assignation.user.name %>
33
+ </td>
34
+ <td>
35
+ <%= assignation.user.email %>
36
+ </td>
37
+ <td>
38
+ <%= assignation.invited_by_user&.name %>
39
+ </td>
40
+ <td>
41
+ <%= l(assignation.invited_at, format: :decidim_short) if assignation.invited_at.present? %>
42
+ </td>
43
+ <td>
44
+ <%= l(assignation.assignee.tos_accepted_at(time_tracker), format: :decidim_short) if assignation.assignee.tos_accepted?(time_tracker) %>
45
+ </td>
46
+ <td>
47
+ <%= clockify_seconds(assignation.time_dedicated) if assignation.time_dedicated > 0 %>
48
+ </td>
49
+ <td class="assignation--status">
50
+ <%= t("models.assignation.fields.statuses.#{assignation.status}", scope: "decidim.time_tracker") %>
51
+ </td>
52
+ <td class="table-list__actions">
53
+ <% if allowed_to? :update, :assignation, assignation: assignation %>
54
+ <%= change_assignation_status_button assignation %>
55
+ <% end %>
56
+
57
+ <% if allowed_to? :destroy, :assignation, assignation: assignation %>
58
+ <%= icon_link_to "circle-x", task_activity_assignation_path(current_task, current_activity, assignation), t("assignations.actions.destroy", scope: "decidim.time_tracker.admin"), method: :delete, class: "action-icon--remove", data: { confirm: t("assignations.actions.confirm_destroy", scope: "decidim.time_tracker.admin") } %>
59
+ <% end %>
60
+ </td>
61
+ </tr>
62
+ <% end %>
63
+ </tbody>
64
+ </table>
65
+ </div>
66
+ </div>
67
+ </div>
@@ -0,0 +1,9 @@
1
+ <%= render partial: "decidim/time_tracker/admin/breadcrumbs" %>
2
+
3
+ <%= decidim_form_for(@form, url: task_activity_assignations_path, html: { class: "form new_task_activity_assignation" }) do |f| %>
4
+ <%= render partial: "form", object: f, locals: { title: t(".title") } %>
5
+
6
+ <div class="button--double form-general-submit">
7
+ <%= f.submit t(".create") %>
8
+ </div>
9
+ <% end %>
@@ -0,0 +1,27 @@
1
+ <div id="questionnaires">
2
+ <div class="card">
3
+ <div class="card-divider">
4
+ <h2 class="card-title">
5
+ <%= t(".title") %>
6
+ <div class="button--title">
7
+ <%= export_dropdown %>
8
+ </div>
9
+ </h2>
10
+ </div>
11
+
12
+ <div class="card-section">
13
+ <div class="container">
14
+ <%= render partial: "decidim/time_tracker/admin/questionnaires/questionnaire", locals: {
15
+ questionnaire: time_tracker.activity_questionnaire,
16
+ edit_path: edit_activity_questionnaire_path,
17
+ title: t("tasks.activity_questionnaire.title", scope: "decidim.time_tracker.admin")
18
+ } %>
19
+ <%= render partial: "decidim/time_tracker/admin/questionnaires/questionnaire", locals: {
20
+ questionnaire: time_tracker.assignee_questionnaire,
21
+ edit_path: edit_assignee_questionnaire_path,
22
+ title: t("tasks.assignee_questionnaire.title", scope: "decidim.time_tracker.admin")
23
+ } %>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </div>
@@ -0,0 +1,21 @@
1
+ <div class="card">
2
+ <div class="card-divider">
3
+ <h2 class="card-title">
4
+ <%= title %>
5
+ <div class="button--title">
6
+ <% if allowed_to? :update, :questionnaire, questionnaire: questionnaire %>
7
+ <%= link_to t(".edit"), edit_path, class: "button tiny button--simple" %>
8
+ <% end %>
9
+ </div>
10
+ </h2>
11
+ </div>
12
+
13
+ <div class="card-section">
14
+ <div class="container">
15
+ <h4 class="card-title"><%= translated_attribute questionnaire.title %></h4>
16
+ <p class="text-small"><%== translated_attribute questionnaire.description %></p>
17
+ <em class="text-small"><%== translated_attribute questionnaire.tos %></em>
18
+ <%= cell("decidim/forms/question_readonly", collection: questionnaire.questions) %>
19
+ </div>
20
+ </div>
21
+ </div>
@@ -0,0 +1,50 @@
1
+ <%= render partial: "decidim/time_tracker/admin/breadcrumbs" %>
2
+
3
+ <div class="card">
4
+ <div class="card-divider">
5
+ <h2 class="card-title">
6
+ <%= t(".title") %>
7
+ </h2>
8
+ </div>
9
+ <%= admin_filter_selector %>
10
+ <div class="card-section">
11
+ <div class="table-scroll">
12
+ <table class="table-list">
13
+ <thead>
14
+ <tr>
15
+ </tr>
16
+ <tr>
17
+ <th><%= t("models.assignation.fields.task", scope: "decidim.time_tracker") %></th>
18
+ <th><%= t("models.assignation.fields.activity", scope: "decidim.time_tracker") %></th>
19
+ <th><%= t("models.assignation.fields.name", scope: "decidim.time_tracker") %></th>
20
+ <th><%= t("models.assignation.fields.email", scope: "decidim.time_tracker") %></th>
21
+ <th><%= t("models.assignation.fields.time_dedicated", scope: "decidim.time_tracker") %></th>
22
+ </tr>
23
+ </thead>
24
+ <tbody>
25
+ <% assignations.each do |assignation| %>
26
+ <tr data-id="<%= assignation.id %>">
27
+ <td>
28
+ <%= link_to translated_attribute(assignation.task.name), edit_task_path(assignation.task) %>
29
+ </td>
30
+ <td>
31
+ <%= link_to translated_attribute(assignation.activity.description), task_activity_assignations_path(assignation.task, assignation.activity) %>
32
+ </td>
33
+ <td>
34
+ <%= link_to assignation.user.name, decidim.profile_path(assignation.user.nickname) %>
35
+ </td>
36
+ <td>
37
+ <%= assignation.user.email %>
38
+ </td>
39
+ <td>
40
+ <%= clockify_seconds assignation.time_dedicated, padded: true %>
41
+ </td>
42
+ </tr>
43
+ <% end %>
44
+
45
+ </tbody>
46
+ </table>
47
+ <%= paginate assignations, theme: "decidim" %>
48
+ </div>
49
+ </div>
50
+ </div>