decidim-proposals 0.30.0.rc2 → 0.30.0.rc3

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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/proposals/highlighted_proposals_for_component/show.erb +1 -1
  3. data/app/cells/decidim/proposals/proposal_g_cell.rb +1 -1
  4. data/app/cells/decidim/proposals/proposal_l/show.erb +1 -1
  5. data/app/cells/decidim/proposals/proposal_l_cell.rb +1 -1
  6. data/app/commands/decidim/proposals/admin/import_proposals.rb +7 -60
  7. data/app/controllers/decidim/proposals/admin/proposals_imports_controller.rb +2 -2
  8. data/app/jobs/decidim/proposals/admin/import_proposals_job.rb +86 -0
  9. data/app/mailers/decidim/proposals/admin/import_proposals_mailer.rb +30 -0
  10. data/app/packs/stylesheets/decidim/proposals/proposals.scss +28 -2
  11. data/app/services/decidim/proposals/proposal_builder.rb +1 -0
  12. data/app/views/decidim/proposals/admin/import_proposals_mailer/notify_failure.html.erb +1 -0
  13. data/app/views/decidim/proposals/admin/import_proposals_mailer/notify_success.html.erb +2 -0
  14. data/app/views/decidim/proposals/proposals/_proposal.html.erb +1 -1
  15. data/app/views/decidim/proposals/proposals/_proposals.html.erb +2 -2
  16. data/config/locales/ar.yml +2 -2
  17. data/config/locales/bg.yml +2 -3
  18. data/config/locales/bs-BA.yml +2 -2
  19. data/config/locales/ca.yml +17 -7
  20. data/config/locales/cs.yml +8 -5
  21. data/config/locales/de.yml +11 -4
  22. data/config/locales/el.yml +2 -3
  23. data/config/locales/en.yml +12 -2
  24. data/config/locales/es-MX.yml +15 -5
  25. data/config/locales/es-PY.yml +15 -5
  26. data/config/locales/es.yml +16 -6
  27. data/config/locales/eu.yml +14 -4
  28. data/config/locales/fi-plain.yml +12 -4
  29. data/config/locales/fi.yml +11 -3
  30. data/config/locales/fr-CA.yml +31 -2
  31. data/config/locales/fr.yml +32 -3
  32. data/config/locales/ga-IE.yml +0 -1
  33. data/config/locales/hu.yml +2 -2
  34. data/config/locales/it.yml +2 -2
  35. data/config/locales/ja.yml +78 -5
  36. data/config/locales/lt.yml +2 -3
  37. data/config/locales/lv.yml +2 -2
  38. data/config/locales/nl.yml +2 -2
  39. data/config/locales/no.yml +0 -2
  40. data/config/locales/pl.yml +2 -3
  41. data/config/locales/pt-BR.yml +2 -2
  42. data/config/locales/pt.yml +2 -2
  43. data/config/locales/ro-RO.yml +22 -2
  44. data/config/locales/sk.yml +0 -2
  45. data/config/locales/sr-CS.yml +2 -2
  46. data/config/locales/sv.yml +0 -4
  47. data/config/locales/tr-TR.yml +2 -2
  48. data/config/locales/zh-CN.yml +2 -2
  49. data/config/locales/zh-TW.yml +2 -3
  50. data/lib/decidim/proposals/version.rb +1 -1
  51. data/lib/tasks/proposals/upgrade/decidim_proposals_upgrade_tasks.rake +22 -0
  52. metadata +24 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 57ef0ea1b3c03d7770041d74f7f95183817088ae774fcfe6c1b3ffdb5be89569
4
- data.tar.gz: d289bc845f005d511a24cc72e7051b65a30d3756165b431c7b9bc6e140bcc702
3
+ metadata.gz: 555324c80eedfe348072f67f5b6334273f5422024ecd000e0a3a09c4e32eec42
4
+ data.tar.gz: ae328a90906fd92093c6255fa69cd8925393754f85e28243ff1f5605c55ddec7
5
5
  SHA512:
6
- metadata.gz: 9a7c6d25457ecc074a0bc261a4155c6d8040cc8ec3b39e444369ff52b48711bfb6e66a49fd970d23dfd6515556448ac7cc5b1befc8e1fef65369fd900df2cb98
7
- data.tar.gz: 1defeac441eec1dae4c002710b4c51efbb70d40b1e4a4e6edba3cd4151cb05ebd81c4c4a2e5344d39159f9c763dfcddcd5df320e3ccaac4356a37103d9379fd9
6
+ metadata.gz: 49260eaf53b5f57edeaed6e8823c9d653fc73c8dcb12c3e96e14a59f7284e58951a119152624252f68a6861fd9aad6a6ff3e08b584280f82f93cf01152d9bd7f
7
+ data.tar.gz: c735d0fdba1fd18fec70df9f03351167a838d12ba9a042674fe43d9355eab0598543091fd8a5597f15ac784bbe11fa3eddcbeba8745c4cf4fe4b32e0a48c0471
@@ -25,7 +25,7 @@
25
25
  <div class="flex items-start justify-between">
26
26
  <div class="grow space-y-6">
27
27
  <% proposals_to_render.each do |p| %>
28
- <%= card_for p, link_whole_card: true, hide_voting: true, title_tag: :h3, **options.slice(:show_space) %>
28
+ <%= card_for p, link_whole_card: true, title_tag: :h3, **options.slice(:show_space) %>
29
29
  <% end %>
30
30
  </div>
31
31
  </div>
@@ -53,7 +53,7 @@ module Decidim
53
53
  hash << self.class.name.demodulize.underscore
54
54
  hash << model.cache_key_with_version
55
55
  hash << model.proposal_votes_count
56
- hash << options[:hide_voting] ? 1 : 0
56
+ hash << options[:show_voting] ? 0 : 1
57
57
  hash << model.endorsements_count
58
58
  hash << model.comments_count
59
59
  hash << Digest::MD5.hexdigest(model.component.cache_key_with_version)
@@ -4,7 +4,7 @@
4
4
  <%= render :content %>
5
5
  <%= render :extra_data if render_extra_data? %>
6
6
  <% end %>
7
- <% if has_actions? && options.fetch(:hide_voting, false) == false %>
7
+ <% if has_actions? && options.fetch(:show_voting, false) == true %>
8
8
  <% if current_settings.votes_hidden? %>
9
9
  <div class="card__proposals-votes-hidden">
10
10
  <%= cell proposal_vote_cell, resource, **options %>
@@ -34,7 +34,7 @@ module Decidim
34
34
  hash << self.class.name.demodulize.underscore
35
35
  hash << model.cache_key_with_version
36
36
  hash << model.proposal_votes_count
37
- hash << options[:hide_voting] ? 1 : 0
37
+ hash << options[:show_voting] ? 0 : 1
38
38
  hash << model.endorsements_count
39
39
  hash << model.comments_count
40
40
  hash << Digest::MD5.hexdigest(model.component.cache_key_with_version)
@@ -22,7 +22,8 @@ module Decidim
22
22
  def call
23
23
  return broadcast(:invalid) unless form.valid?
24
24
 
25
- broadcast(:ok, import_proposals)
25
+ import_proposals
26
+ broadcast(:ok)
26
27
  end
27
28
 
28
29
  private
@@ -30,65 +31,11 @@ module Decidim
30
31
  attr_reader :form
31
32
 
32
33
  def import_proposals
33
- proposals.map do |original_proposal|
34
- next if proposal_already_copied?(original_proposal, target_component)
35
-
36
- Decidim::Proposals::ProposalBuilder.copy(
37
- original_proposal,
38
- author: proposal_author,
39
- action_user: form.current_user,
40
- extra_attributes: {
41
- "component" => target_component
42
- }.merge(proposal_answer_attributes(original_proposal))
43
- )
44
- end.compact
45
- end
46
-
47
- def proposals
48
- @proposals = Decidim::Proposals::Proposal
49
- .where(component: origin_component)
50
-
51
- @proposals = if @form.states.include?("not_answered")
52
- @proposals.not_answered.or(@proposals.where(id: @proposals.only_status(@form.states).pluck(:id)))
53
- else
54
- @proposals.only_status(@form.states)
55
- end
56
-
57
- @proposals
58
- end
59
-
60
- def origin_component
61
- @form.origin_component
62
- end
63
-
64
- def target_component
65
- @form.current_component
66
- end
67
-
68
- def proposal_already_copied?(original_proposal, target_component)
69
- # Note: we are including also proposals from unpublished components
70
- # because otherwise duplicates could be created until the component is
71
- # published.
72
- original_proposal.linked_resources(:proposals, "copied_from_component", component_published: false).any? do |proposal|
73
- proposal.component == target_component
74
- end
75
- end
76
-
77
- def proposal_author
78
- form.keep_authors ? nil : @form.current_organization
79
- end
80
-
81
- def proposal_answer_attributes(original_proposal)
82
- return {} unless form.keep_answers
83
-
84
- state = Decidim::Proposals::ProposalState.where(component: target_component, token: original_proposal.state).first
85
-
86
- {
87
- answer: original_proposal.answer,
88
- answered_at: original_proposal.answered_at,
89
- proposal_state: state,
90
- state_published_at: original_proposal.state_published_at
91
- }
34
+ ImportProposalsJob.perform_later(form.as_json.merge({
35
+ "current_user_id" => form.current_user.id,
36
+ "current_organization_id" => form.current_organization.id,
37
+ "current_component_id" => form.current_component.id
38
+ }))
92
39
  end
93
40
  end
94
41
  end
@@ -16,8 +16,8 @@ module Decidim
16
16
  @form = form(Admin::ProposalsImportForm).from_params(params)
17
17
 
18
18
  Admin::ImportProposals.call(@form) do
19
- on(:ok) do |proposals|
20
- flash[:notice] = I18n.t("proposals_imports.create.success", scope: "decidim.proposals.admin", number: proposals.length)
19
+ on(:ok) do
20
+ flash[:notice] = I18n.t("proposals_imports.create.success", scope: "decidim.proposals.admin")
21
21
  redirect_to EngineRouter.admin_proxy(current_component).root_path
22
22
  end
23
23
 
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Proposals
5
+ module Admin
6
+ class ImportProposalsJob < ApplicationJob
7
+ queue_as :default
8
+
9
+ def perform(form)
10
+ @form = form
11
+ ActiveRecord::Base.transaction do
12
+ proposals.map do |original_proposal|
13
+ next if proposal_already_copied?(original_proposal, target_component)
14
+
15
+ Decidim::Proposals::ProposalBuilder.copy(
16
+ original_proposal,
17
+ author: proposal_author,
18
+ action_user: current_user,
19
+ extra_attributes: {
20
+ "component" => target_component
21
+ }.merge(proposal_answer_attributes(original_proposal))
22
+ )
23
+ end
24
+ end
25
+ ImportProposalsMailer.notify_success(current_user, origin_component, target_component, proposals.count).deliver_later
26
+ rescue ActiveRecord::RecordNotFound, NoMethodError
27
+ ImportProposalsMailer.notify_failure(current_user, origin_component, target_component).deliver_later
28
+ end
29
+
30
+ private
31
+
32
+ def proposals
33
+ proposals = Decidim::Proposals::Proposal.where(component: origin_component)
34
+
35
+ if @form["states"].include?("not_answered")
36
+ proposals.not_answered.or(proposals.where(id: proposals.only_status(@form["states"]).pluck(:id)))
37
+ else
38
+ proposals.only_status(@form["states"])
39
+ end
40
+ end
41
+
42
+ def origin_component
43
+ @origin_component ||= Decidim::Component.find(@form["origin_component_id"])
44
+ end
45
+
46
+ def target_component
47
+ @target_component ||= Decidim::Component.find(@form["current_component_id"])
48
+ end
49
+
50
+ def current_user
51
+ @current_user ||= Decidim::User.find(@form["current_user_id"])
52
+ end
53
+
54
+ def current_organization
55
+ @current_organization ||= Decidim::Organization.find(@form["current_organization_id"])
56
+ end
57
+
58
+ def proposal_already_copied?(original_proposal, target_component)
59
+ # Note: we are including also proposals from unpublished components
60
+ # because otherwise duplicates could be created until the component is
61
+ # published.
62
+ original_proposal.linked_resources(:proposals, "copied_from_component", component_published: false).any? do |proposal|
63
+ proposal.component == target_component
64
+ end
65
+ end
66
+
67
+ def proposal_author
68
+ @form["keep_authors"] ? nil : current_organization
69
+ end
70
+
71
+ def proposal_answer_attributes(original_proposal)
72
+ return {} unless @form["keep_answers"]
73
+
74
+ state = Decidim::Proposals::ProposalState.where(component: target_component, token: original_proposal.proposal_state&.token).first
75
+
76
+ {
77
+ answer: original_proposal.answer,
78
+ answered_at: original_proposal.answered_at,
79
+ proposal_state: state,
80
+ state_published_at: original_proposal.state_published_at
81
+ }
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Proposals
5
+ module Admin
6
+ class ImportProposalsMailer < Decidim::ApplicationMailer
7
+ def notify_success(user, origin_component, target_component, count)
8
+ @organization = user.organization
9
+ @origin_component = origin_component
10
+ @target_component = target_component
11
+ @count = count
12
+
13
+ with_user(user) do
14
+ mail(to: user.email, subject: t(".subject"))
15
+ end
16
+ end
17
+
18
+ def notify_failure(user, origin_component, target_component)
19
+ @organization = user.organization
20
+ @origin_component = origin_component
21
+ @target_component = target_component
22
+
23
+ with_user(user) do
24
+ mail(to: user.email, subject: t(".subject"))
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -122,7 +122,8 @@
122
122
  }
123
123
  }
124
124
 
125
- .card__proposals-votes {
125
+ .card__proposals-votes,
126
+ .card__proposals-votes-hidden {
126
127
  @apply flex md:flex-col lg:flex-row bg-[#F5F5F5] justify-around md:flex-[0.6] lg:flex-[0.8] items-center md:items-stretch lg:items-center lg:min-w-[196px] h-[68px] md:h-auto lg:h-[68px];
127
128
 
128
129
  button {
@@ -138,6 +139,14 @@
138
139
 
139
140
  .proposals__aside-progress {
140
141
  @apply flex flex-col w-[80%] items-center md:order-1 lg:order-none md:flex-[1_1_100%] lg:flex-none;
142
+
143
+ .progress-bar {
144
+ @apply bg-[#D3D5D9] border-white border border-solid;
145
+
146
+ > :first-child {
147
+ @apply outline outline-white;
148
+ }
149
+ }
141
150
  }
142
151
 
143
152
  .progress-bar {
@@ -149,6 +158,10 @@
149
158
  span {
150
159
  @apply text-sm;
151
160
  }
161
+
162
+ > :last-child::before {
163
+ @apply content-['/'] mx-1;
164
+ }
152
165
  }
153
166
  }
154
167
  }
@@ -228,7 +241,8 @@
228
241
  }
229
242
  }
230
243
 
231
- .card__proposals-votes {
244
+ .card__proposals-votes,
245
+ .card__proposals-votes-hidden {
232
246
  @apply flex bg-[#F5F5F5EE] justify-around items-center px-4 h-[68px];
233
247
 
234
248
  button {
@@ -244,6 +258,14 @@
244
258
 
245
259
  .proposals__aside-progress {
246
260
  @apply flex flex-col-reverse w-[80%] items-center;
261
+
262
+ .progress-bar {
263
+ @apply bg-[#D3D5D9] border-white border border-solid;
264
+
265
+ > :first-child {
266
+ @apply outline outline-white;
267
+ }
268
+ }
247
269
  }
248
270
 
249
271
  .progress-bar {
@@ -253,6 +275,10 @@
253
275
  span {
254
276
  @apply text-sm;
255
277
  }
278
+
279
+ > :last-child::before {
280
+ @apply content-['/'] mx-1;
281
+ }
256
282
  }
257
283
 
258
284
  &__units {
@@ -63,6 +63,7 @@ module Decidim
63
63
  "created_at",
64
64
  "updated_at",
65
65
  "state",
66
+ "decidim_proposals_proposal_state_id",
66
67
  "state_published_at",
67
68
  "answer",
68
69
  "answered_at",
@@ -0,0 +1 @@
1
+ <p><%= t(".body", origin_component_name: translated_attribute(@origin_component.name), target_component_name: translated_attribute(@target_component.name)) %></p>
@@ -0,0 +1,2 @@
1
+ <p><%= t(".body", origin_component_name: translated_attribute(@origin_component.name), target_component_name: translated_attribute(@target_component.name)) %></p>
2
+ <p><%= t(".added_proposals", count: @count) %></p>
@@ -1 +1 @@
1
- <%= card_for proposal, from: proposal, size: card_size %>
1
+ <%= card_for proposal, from: proposal, size: card_size, show_voting: %>
@@ -8,7 +8,7 @@
8
8
  <%= cell("decidim/announcement", params[:filter].present? ? t(".empty_filters") : t(".empty")) %>
9
9
  <% else %>
10
10
  <div class="flex items-center justify-between">
11
- <h2 class="h5 md:h3 decorator"><%= t("count", scope: "decidim.proposals.proposals.index", count: @proposals.total_count) %></h2>
11
+ <h2 class="h5 md:h3 decorator" aria-live="polite" aria-atomic="true"><%= t("count", scope: "decidim.proposals.proposals.index", count: @proposals.total_count) %></h2>
12
12
  <div class="view-layout__links flex view_mode__links">
13
13
  <%= toggle_view_mode_link(@view_mode, "list", t("list_mode", scope: "decidim.proposals.proposals.index"), params) %>
14
14
  <%= toggle_view_mode_link(@view_mode, "grid", t("grid_mode", scope: "decidim.proposals.proposals.index"), params) %>
@@ -18,7 +18,7 @@
18
18
  <%= order_selector available_orders, i18n_scope: "decidim.proposals.proposals.orders" %>
19
19
 
20
20
  <div class="<%= proposals_container_class(@view_mode) %>">
21
- <%= render partial: "proposal", collection: @proposals, as: :proposal, locals: { card_size: card_size_for_view_mode(@view_mode) } %>
21
+ <%= render partial: "proposal", collection: @proposals, as: :proposal, locals: { card_size: card_size_for_view_mode(@view_mode), show_voting: true } %>
22
22
  </div>
23
23
 
24
24
  <%= decidim_paginate @proposals %>
@@ -198,6 +198,8 @@ ar:
198
198
  events:
199
199
  proposals:
200
200
  admin:
201
+ proposal_assigned_to_valuator:
202
+ email_outro: تلقيت هذا الإشعار لأنك تستطيع تقييم الاقتراح.
201
203
  proposal_note_created:
202
204
  email_outro: تلقيت هذا الإشعار لأنك تستطيع تقييم الاقتراح.
203
205
  email_subject: ترك شخص ملاحظة على الاقتراح %{resource_title}.
@@ -385,7 +387,6 @@ ar:
385
387
  index:
386
388
  actions: أفعال
387
389
  assign_to_valuator: أسنِده إلى مُقيِّم
388
- assign_to_valuator_button: تعيين
389
390
  cancel: إلغاء
390
391
  merge: دمج في واحدة جديدة
391
392
  merge_button: دمج
@@ -397,7 +398,6 @@ ar:
397
398
  split_button: انشق، مزق
398
399
  title: اقتراحات
399
400
  unassign_from_valuator: إلغاء الإسناد مِن المُقيِّم
400
- unassign_from_valuator_button: إلغاء الإسناد
401
401
  update: تحديث
402
402
  new:
403
403
  create: إنشاء
@@ -222,6 +222,8 @@ bg:
222
222
  events:
223
223
  proposals:
224
224
  admin:
225
+ proposal_assigned_to_valuator:
226
+ email_outro: Получихте известие, защото можете да оценяте предложението.
225
227
  proposal_note_created:
226
228
  email_outro: Получихте известие, защото можете да оценяте предложението.
227
229
  email_subject: Някой е направил бележка в предложението %{resource_title}.
@@ -467,7 +469,6 @@ bg:
467
469
  index:
468
470
  actions: Активности
469
471
  assign_to_valuator: Възлагане на оценител
470
- assign_to_valuator_button: Възлагане
471
472
  cancel: Отказ
472
473
  merge: Сливане в едно ново
473
474
  merge_button: Сливане
@@ -481,7 +482,6 @@ bg:
481
482
  statuses: Статуси
482
483
  title: Предложения
483
484
  unassign_from_valuator: Отнемане възложеното на оценителя
484
- unassign_from_valuator_button: Отнемане на възложеното
485
485
  update: Актуализация
486
486
  new:
487
487
  create: Създаване
@@ -511,7 +511,6 @@ bg:
511
511
  proposals_imports:
512
512
  create:
513
513
  invalid: Възникна проблем при импортирането на предложенията.
514
- success: "%{number} предложения бяха импортирани успешно."
515
514
  new:
516
515
  create: Импортиране на предложения
517
516
  no_components: Няма други компоненти на предложения в това пространство за участие, от които да се импортират предложенията.
@@ -35,6 +35,8 @@ bs:
35
35
  events:
36
36
  proposals:
37
37
  admin:
38
+ proposal_assigned_to_valuator:
39
+ email_outro: Dobili ste ovo obaveštenje jer možete da procenite predlog.
38
40
  proposal_note_created:
39
41
  email_outro: Dobili ste ovo obaveštenje jer možete da procenite predlog.
40
42
  email_subject: Neko je ostavio poruku na predlogu %{resource_title}.
@@ -46,10 +48,8 @@ bs:
46
48
  proposals:
47
49
  index:
48
50
  assign_to_valuator: Dodeli procenjivaču
49
- assign_to_valuator_button: Dodeli
50
51
  publish_answers: Objavi odgovore
51
52
  unassign_from_valuator: Oduzmi od procenjivača
52
- unassign_from_valuator_button: Od dodeli
53
53
  show:
54
54
  amendments_count: Broj izmena
55
55
  assigned_valuators: Dodeljeni procenjivači
@@ -222,7 +222,7 @@ ca:
222
222
  taxonomy_filters: Seleccionar filtres pel component
223
223
  taxonomy_filters_add: Afegir un filtre
224
224
  threshold_per_proposal: Llindar per proposta
225
- vote_limit: Límit de propostes per participant
225
+ vote_limit: Límit de suports per participant
226
226
  step:
227
227
  amendment_creation_enabled: Creació d'esmenes habilitada
228
228
  amendment_creation_enabled_help: Les participants poden esmenar les propostes.
@@ -284,7 +284,7 @@ ca:
284
284
  email_intro: '"%{author_name}" "%{author_nickname}" t''ha esmentat a una nota privada a "%{resource_title}". La pots veure al <a href="%{admin_proposal_info_url}">taulell d''administració</a>.'
285
285
  email_outro: Has rebut aquesta notificació perquè t'han esmentat a una nota privada.
286
286
  email_subject: Algú ha deixat una nota a la proposta %{resource_title}.
287
- notification_title: <a href="%{author_path}">%{author_name} %{author_nickname}</a> te ha esmentat a una nota privada a <a href="%{resource_path}">%{resource_title}</a>. La pots veure al <a href="%{admin_proposal_info_path}">taulell d'administració</a>.
287
+ notification_title: <a href="%{author_path}">%{author_name} %{author_nickname}</a> t'ha esmentat a una nota privada a <a href="%{resource_path}">%{resource_title}</a>. La pots veure al <a href="%{admin_proposal_info_path}">taulell d'administració</a>.
288
288
  proposal_note_replied:
289
289
  email_intro: '%{author_name} ha respost la teva nota privada a %{resource_title}. Ho pots veure al <a href="%{admin_proposal_info_url}">taulell d''administració</a>.'
290
290
  email_outro: Has rebut aquesta notificació perquè ets l'autora de la nota privada.
@@ -491,7 +491,7 @@ ca:
491
491
  actions:
492
492
  answer_proposal: Respondre a la proposta
493
493
  cancel_coauthor_invitation: Cancel·lar la invitació de coautoria
494
- cancel_coauthor_invitation_confirm: Segur que vols cancel·lar la invitació de coaturia?
494
+ cancel_coauthor_invitation_confirm: Segur que vols cancel·lar la invitació de coautoria?
495
495
  delete_proposal_state_confirm: Segur que vols esborrar aquest estat?
496
496
  destroy: Esborrar estat
497
497
  edit_proposal: Edita la proposta
@@ -513,12 +513,22 @@ ca:
513
513
  exports:
514
514
  proposal_comments: Comentaris
515
515
  proposals: Propostes
516
+ import_proposals_mailer:
517
+ notify_failure:
518
+ body: Hi ha hagut un problema en importar propostes del component %{origin_component_name} al component %{target_component_name}.
519
+ subject: S'ha produït un error en importar les propostes
520
+ notify_success:
521
+ added_proposals:
522
+ one: S'ha importat una proposta.
523
+ other: "S'han importat %{count} propostes."
524
+ body: S'han importat amb èxit les propostes des del component %{origin_component_name} al component %{target_component_name}. Pots revisar els resultats al tauler d'administració.
525
+ subject: Les propostes s'han importat correctament
516
526
  imports:
517
527
  help:
518
528
  answers: |
519
529
  El document d'importació ha d'incloure els següents noms de columna en cas d'arxius CSV o Excel o noms de claus en el cas d'arxius JSON (s'ignoraran altres columnes):
520
530
  <ul>
521
- <li><b>id:</b> ID de la proposta a responder</li>
531
+ <li><b>id:</b> ID de la proposta a respondre</li>
522
532
  <li>state<b>:</b> Un d'aquests "acceptada", "en avaluació" o "rebutjada"</li>
523
533
  <li><b>answer/ca</b> Resposta en català. Això dependrà de la configuració d'idioma predeterminat a la teva plataforma.</li>
524
534
  </ul>
@@ -647,7 +657,7 @@ ca:
647
657
  statuses: Estats
648
658
  title: Propostes
649
659
  unassign_from_valuator: Desfer assignació a avaluadora
650
- unassign_from_valuator_button: Desfer assignació
660
+ unassign_from_valuator_button: Desfer l'assignació
651
661
  update: Actualitza
652
662
  manage_trash:
653
663
  title: Propostes eliminades
@@ -684,7 +694,7 @@ ca:
684
694
  proposals_imports:
685
695
  create:
686
696
  invalid: S'ha produït un error en importar les propostes.
687
- success: "%{number} propostes importades correctament."
697
+ success: El procés d'importació ha començat. T'avisarem quan hagi finalitzat.
688
698
  new:
689
699
  create: Importa propostes
690
700
  no_components: No hi ha cap altre component de propostes en aquest espai participatiu des d'on importar-les.
@@ -866,7 +876,7 @@ ca:
866
876
  success: Invitació de coautoria cancel·lada amb èxit.
867
877
  create:
868
878
  error: S'ha produït un error en convidar a la coautora.
869
- success: "S'ha convidat amb èxit a %{author_name} com a coautora."
879
+ success: "S'ha convidat amb èxit %{author_name} per ser coautor/a de la proposta."
870
880
  destroy:
871
881
  error: S'ha produït un error en rebutjar la invitació.
872
882
  success: S'ha rebutjat la invitació.
@@ -280,7 +280,7 @@ cs:
280
280
  admin:
281
281
  proposal_assigned_to_valuator:
282
282
  email_intro: Byli jste přiděleni jako hodnotitel k nnávrhu "%{resource_title}". To znamená, že vám důvěřujeme, že jim v příštích dnech poskytnete zpětnou vazbu a náležitou odpověď. Podívejte se na <a href="%{admin_proposal_info_url}">administrátorský panel</a>.
283
- email_outro: Obdrželi jste toto oznámení, protože můžete návrh hhodnotit.
283
+ email_outro: Obdrželi jste toto oznámení, protože můžete návrh ohodnotit.
284
284
  email_subject: Byl jste přiřazen jako hodnotitel k návrhu %{resource_title}.
285
285
  notification_title: Byli jste přiřazeni jako hodnotitel k nnávrhu <a href="%{resource_path}">%{resource_title}</a>. Podívejte se na <a href="%{admin_proposal_info_path}">administrátorský panel</a>.
286
286
  proposal_note_created:
@@ -521,6 +521,12 @@ cs:
521
521
  exports:
522
522
  proposal_comments: Komentáře
523
523
  proposals: Návrhy
524
+ import_proposals_mailer:
525
+ notify_failure:
526
+ body: Při importu návrhů ze komponenty %{origin_component_name} do komponenty %{target_component_name} došlo k chybě.
527
+ subject: Došlo k chybě při importu návrhů
528
+ notify_success:
529
+ subject: Návrhy byly úspěšně importovány
524
530
  imports:
525
531
  help:
526
532
  answers: |
@@ -643,7 +649,6 @@ cs:
643
649
  actions: Akce
644
650
  apply_answer_template: Použít šablonu odpovědi
645
651
  assign_to_valuator: Přiřadit hodnotiteli
646
- assign_to_valuator_button: Přiřadit
647
652
  cancel: Zrušit
648
653
  change_taxonomies: Změnit taxonomie
649
654
  merge: Sloučit do nového
@@ -659,7 +664,6 @@ cs:
659
664
  statuses: Statusy
660
665
  title: Návrhy
661
666
  unassign_from_valuator: Odebrat přiřazení od hodnotitele
662
- unassign_from_valuator_button: Zrušit přiřazení
663
667
  update: Aktualizace
664
668
  manage_trash:
665
669
  title: Smazané návrhy
@@ -698,7 +702,7 @@ cs:
698
702
  proposals_imports:
699
703
  create:
700
704
  invalid: Při importu návrhů došlo k chybě.
701
- success: "%{number} návrhů bylo úspěšně importováno."
705
+ success: Proces importu byl zahájen. Jakmile bude dokončen, dáme vám vědět.
702
706
  new:
703
707
  create: Návrhy na dovoz
704
708
  no_components: V tomto účastnickém prostoru neexistují žádné jiné komponenty návrhu, které by mohly importovat návrhy.
@@ -884,7 +888,6 @@ cs:
884
888
  success: Pozvánka spoluautora byla úspěšně zrušena.
885
889
  create:
886
890
  error: Při pozvání spoluautora došlo k chybě.
887
- success: "%{author_name} byl úspěšně pozván jako spoluautor."
888
891
  destroy:
889
892
  error: Při odmítání pozvánky došlo k chybě.
890
893
  success: Pozvánka byla zamítnuta.
@@ -513,6 +513,16 @@ de:
513
513
  exports:
514
514
  proposal_comments: Kommentare
515
515
  proposals: Vorschläge
516
+ import_proposals_mailer:
517
+ notify_failure:
518
+ body: Beim Importieren von Vorschlägen aus der Komponente %{origin_component_name} in die Komponente %{target_component_name} ist ein Fehler aufgetreten.
519
+ subject: Beim Importieren der Vorschläge ist ein Fehler aufgetreten
520
+ notify_success:
521
+ added_proposals:
522
+ one: Ein Vorschlag wurde importiert.
523
+ other: "%{count} Vorschläge wurden importiert."
524
+ body: Vorschläge erfolgreich aus der Komponente %{origin_component_name} zu %{target_component_name} importiert. Sie können die Ergebnisse in der Adminoberfläche überprüfen.
525
+ subject: Die Vorschläge wurden erfolgreich importiert
516
526
  imports:
517
527
  help:
518
528
  answers: |
@@ -631,7 +641,6 @@ de:
631
641
  actions: Aktionen
632
642
  apply_answer_template: Antwortvorlage anwenden
633
643
  assign_to_valuator: Zuweisen zur Bewertung
634
- assign_to_valuator_button: Zuweisen
635
644
  cancel: Abbrechen
636
645
  change_taxonomies: Klassifizierungen ändern
637
646
  merge: Zu einem neuen zusammenführen
@@ -647,7 +656,6 @@ de:
647
656
  statuses: Status
648
657
  title: Vorschläge
649
658
  unassign_from_valuator: Zuweisung zur Bewertung zurückziehen
650
- unassign_from_valuator_button: Zuweisung aufheben
651
659
  update: Aktualisieren
652
660
  manage_trash:
653
661
  title: Gelöschte Vorschläge
@@ -684,7 +692,7 @@ de:
684
692
  proposals_imports:
685
693
  create:
686
694
  invalid: Beim Importieren der Vorschläge ist ein Problem aufgetreten.
687
- success: "%{number} Vorschläge erfolgreich importiert."
695
+ success: Der Importprozess wurde gestartet. Sie werden benachrichtigt, sobald er beendet ist.
688
696
  new:
689
697
  create: Vorschläge importieren
690
698
  no_components: In diesem partizipatorischen Bereich gibt es keine weiteren Vorschlagskomponenten, aus denen die Vorschläge importiert werden könnten.
@@ -866,7 +874,6 @@ de:
866
874
  success: Einladung zur Mitverfassung erfolgreich zurückgezogen.
867
875
  create:
868
876
  error: Beim Einladen zur Mitverfassung ist ein Problem aufgetreten.
869
- success: "%{author_name} wurde erfolgreich zur Mitverfassung eingeladen."
870
877
  destroy:
871
878
  error: Beim Ablehnen der Einladung ist ein Problem aufgetreten.
872
879
  success: Die Einladung wurde abgelehnt.