decidim-elections 0.26.1 → 0.26.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/elections/election_vote_cta_cell.rb +8 -3
  3. data/app/cells/decidim/votings/content_blocks/landing_page/description/show.erb +1 -12
  4. data/app/cells/decidim/votings/content_blocks/landing_page/description_cell.rb +0 -8
  5. data/app/commands/decidim/elections/admin/add_user_as_trustee.rb +21 -11
  6. data/app/commands/decidim/elections/admin/create_question.rb +2 -5
  7. data/app/commands/decidim/votings/admin/destroy_ballot_style.rb +1 -1
  8. data/app/controllers/decidim/elections/admin/questions_controller.rb +5 -0
  9. data/app/controllers/decidim/votings/census/admin/census_controller.rb +1 -1
  10. data/app/controllers/decidim/votings/votings_controller.rb +2 -0
  11. data/app/forms/decidim/votings/census/admin/datum_form.rb +4 -0
  12. data/app/helpers/decidim/elections/votes_helper.rb +3 -1
  13. data/app/mailers/decidim/elections/trustee_mailer.rb +28 -0
  14. data/app/packs/src/decidim/votings/voting-description-cell.js +1 -8
  15. data/app/permissions/decidim/votings/admin/permissions.rb +3 -1
  16. data/app/presenters/decidim/votings/admin_log/ballot_style_presenter.rb +5 -1
  17. data/app/views/decidim/elections/trustee_mailer/notification.html.erb +5 -0
  18. data/app/views/decidim/elections/votes/new.html.erb +8 -6
  19. data/app/views/decidim/votings/admin/votings/_form.html.erb +6 -6
  20. data/app/views/decidim/votings/votings/_check_fields.html.erb +13 -15
  21. data/app/views/decidim/votings/votings/check_census.html.erb +5 -1
  22. data/config/locales/ar.yml +9 -0
  23. data/config/locales/ca.yml +27 -11
  24. data/config/locales/cs.yml +30 -13
  25. data/config/locales/de.yml +6 -16
  26. data/config/locales/en.yml +27 -12
  27. data/config/locales/es-MX.yml +36 -20
  28. data/config/locales/es-PY.yml +31 -15
  29. data/config/locales/es.yml +31 -15
  30. data/config/locales/eu.yml +1 -14
  31. data/config/locales/fi-plain.yml +28 -13
  32. data/config/locales/fi.yml +28 -13
  33. data/config/locales/fr-CA.yml +28 -13
  34. data/config/locales/fr.yml +29 -14
  35. data/config/locales/gl.yml +8 -13
  36. data/config/locales/hu.yml +8 -0
  37. data/config/locales/it.yml +5 -16
  38. data/config/locales/ja.yml +28 -14
  39. data/config/locales/nl.yml +13 -15
  40. data/config/locales/no.yml +5 -2
  41. data/config/locales/pl.yml +2 -15
  42. data/config/locales/pt-BR.yml +2 -15
  43. data/config/locales/pt.yml +2 -15
  44. data/config/locales/ro-RO.yml +0 -13
  45. data/config/locales/sv.yml +1 -9
  46. data/config/locales/tr-TR.yml +5 -0
  47. data/config/locales/zh-CN.yml +4 -0
  48. data/lib/decidim/elections/admin_engine.rb +4 -1
  49. data/lib/decidim/elections/version.rb +1 -1
  50. metadata +14 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: afdf9a7aa52a455c7f5f0ea11e46884df0829f4aa8bd63b815947574f63eeb56
4
- data.tar.gz: 392b8291c4d4eeaddafce24832da3144ad444cf974597f21a9fef71a2aed34e1
3
+ metadata.gz: f8219848da3b47bb1de74d7c35c5d9f2f1b98ee394a1d9e07201cfc3760e8650
4
+ data.tar.gz: 8c2a725b532393fc5ddbdcbc2db2e320ce288e3b067e22524277097409f1ffa5
5
5
  SHA512:
6
- metadata.gz: dcbbfc891f43a3a46e8866504211df489be49dbbf80e6438e4dc72c1f35284ebc258ce973c8b663a027a6ae9c62c370fe03e0ecc8ad0a667bf5337006181ac30
7
- data.tar.gz: 7b490ae2ec90c5df75855bf4f8296a8a4c8b16acbfda0e922aa16b00bb4d7c9d356d5c71b4b445623438fda9c70234ab395b3b906025711186996158956f5d4e
6
+ metadata.gz: 668655440f14e989272e753a90332751b8d10ed8b8b63a7b0cbd14ef1fde3f4e79edaf9d6f499f00318ba1862ef1be157a7407806d30ed60dd2d274299f70968
7
+ data.tar.gz: 82341a653e8ee97716326601b815ce8d6f90811b94b92e057f1ae4983614d835253e5b3d6d59671c7ccd76d8d18db28bb3505aac69b750bedbba96bb688442e0
@@ -5,15 +5,20 @@ module Decidim
5
5
  # This cell renders the results
6
6
  # for a given instance of an Election
7
7
  class ElectionVoteCtaCell < Decidim::ViewModel
8
+ include Decidim::Elections::HasVoteFlow
9
+
8
10
  delegate :current_user,
9
11
  :current_participatory_space,
10
- :preview_mode?,
11
- :can_preview?,
12
- :vote_flow,
12
+ :allowed_to?,
13
13
  to: :controller
14
14
 
15
15
  private
16
16
 
17
+ # This is needed by HasVoteFlow
18
+ def election
19
+ model
20
+ end
21
+
17
22
  def last_vote
18
23
  @last_vote ||= Decidim::Elections::Votes::LastVoteForVoter.for(model, vote_flow.voter_id) if vote_flow.has_voter?
19
24
  end
@@ -5,21 +5,10 @@
5
5
  <img src="<%= introductory_image.path %>" alt="">
6
6
  </div>
7
7
  <% end %>
8
- <div class="columns medium-8 mediumlarge-7 content">
8
+ <div class="columns medium-8 mediumlarge-7">
9
9
  <h2 class="show-for-sr"><%= t("decidim.votings.content_blocks.landing_page.description.title") %></h2>
10
10
  <div><%= description_text %></div>
11
11
  </div>
12
- <div class="content-height-toggler show-more">
13
- <button class="button button--muted tiny">
14
- <span class="button-text show-more-content">
15
- <%= button_show_more_text %>
16
- </span>
17
-
18
- <span class="button-text show-less-content hide">
19
- <%= button_show_less_text %>
20
- </span>
21
- </button>
22
- </div>
23
12
  </div>
24
13
  </div>
25
14
 
@@ -18,14 +18,6 @@ module Decidim
18
18
  def description_text
19
19
  decidim_sanitize_editor(translated_attribute(current_participatory_space.description))
20
20
  end
21
-
22
- def button_show_more_text
23
- t(:show_more, scope: "decidim.votings.content_blocks.landing_page.description")
24
- end
25
-
26
- def button_show_less_text
27
- t(:show_less, scope: "decidim.votings.content_blocks.landing_page.description")
28
- end
29
21
  end
30
22
  end
31
23
  end
@@ -11,6 +11,8 @@ module Decidim
11
11
  # form - A form object with the params.
12
12
  def initialize(form, current_user)
13
13
  @form = form
14
+ @user = form.user
15
+ @participatory_space = form.current_participatory_space
14
16
  @current_user = current_user
15
17
  end
16
18
 
@@ -27,29 +29,31 @@ module Decidim
27
29
  notify_user_about_trustee_role if new_trustee?
28
30
  end
29
31
 
32
+ send_email
33
+
30
34
  broadcast(:ok)
31
35
  end
32
36
 
33
37
  private
34
38
 
35
- attr_reader :form, :current_user, :trustee
39
+ attr_reader :form, :current_user, :trustee, :participatory_space, :user
36
40
 
37
41
  def add_user_as_trustee!
38
42
  @trustee = Decidim.traceability.create!(
39
43
  Trustee,
40
- form.current_user,
41
- user: form.user,
42
- organization: form.user.organization
44
+ current_user,
45
+ user: user,
46
+ organization: user.organization
43
47
  )
44
48
  end
45
49
 
46
50
  # If a trustee exists for this participatory space, it won't get created again
47
51
  def existing_trustee_participatory_spaces?
48
- trustees_space = TrusteesParticipatorySpace.where(participatory_space: form.current_participatory_space).includes(:trustee)
52
+ trustees_space = TrusteesParticipatorySpace.where(participatory_space: participatory_space).includes(:trustee)
49
53
  @existing_trustee_participatory_spaces ||= Decidim::Elections::Trustee.joins(:trustees_participatory_spaces)
50
54
  .includes([:user])
51
55
  .where(trustees_participatory_spaces: trustees_space)
52
- .where(decidim_user_id: form.user.id).any?
56
+ .where(decidim_user_id: user.id).any?
53
57
  end
54
58
 
55
59
  # if there's no user - trustee relation, the trustee gets created and the notification
@@ -57,13 +61,13 @@ module Decidim
57
61
  def new_trustee?
58
62
  return @new_trustee if defined?(@new_trustee)
59
63
 
60
- @new_trustee = Decidim::Elections::Trustee.where(decidim_user_id: form.user.id).empty?
64
+ @new_trustee = Decidim::Elections::Trustee.where(decidim_user_id: user.id).empty?
61
65
  end
62
66
 
63
67
  def add_participatory_space
64
- trustee = Decidim::Elections::Trustee.find_by(decidim_user_id: form.user.id)
68
+ trustee = Decidim::Elections::Trustee.find_by(decidim_user_id: user.id)
65
69
  trustee.trustees_participatory_spaces.create!(
66
- participatory_space: form.current_participatory_space
70
+ participatory_space: participatory_space
67
71
  )
68
72
  end
69
73
 
@@ -71,11 +75,17 @@ module Decidim
71
75
  data = {
72
76
  event: "decidim.events.elections.trustees.new_trustee",
73
77
  event_class: Decidim::Elections::Trustees::NotifyNewTrusteeEvent,
74
- resource: form.current_participatory_space,
75
- affected_users: [form.user]
78
+ resource: participatory_space,
79
+ affected_users: [user]
76
80
  }
77
81
  Decidim::EventsManager.publish(**data)
78
82
  end
83
+
84
+ def send_email
85
+ Decidim::Elections::TrusteeMailer.notification(
86
+ user, participatory_space, I18n.locale.to_s
87
+ ).deliver_later
88
+ end
79
89
  end
80
90
  end
81
91
  end
@@ -14,7 +14,8 @@ module Decidim
14
14
  #
15
15
  # Broadcasts :ok if successful, :invalid otherwise.
16
16
  def call
17
- return broadcast(:invalid) if invalid?
17
+ return broadcast(:election_started) if form.election.started?
18
+ return broadcast(:invalid) if form.invalid?
18
19
 
19
20
  create_question!
20
21
 
@@ -25,10 +26,6 @@ module Decidim
25
26
 
26
27
  attr_reader :form, :question
27
28
 
28
- def invalid?
29
- form.election.started? || form.invalid?
30
- end
31
-
32
29
  def create_question!
33
30
  attributes = {
34
31
  election: form.election,
@@ -30,7 +30,7 @@ module Decidim
30
30
  :delete,
31
31
  ballot_style,
32
32
  current_user,
33
- visibility: "all"
33
+ { visibility: "all", code: ballot_style.code }
34
34
  ) do
35
35
  ballot_style.destroy!
36
36
  end
@@ -26,6 +26,11 @@ module Decidim
26
26
  flash.now[:alert] = I18n.t("questions.create.invalid", scope: "decidim.elections.admin")
27
27
  render action: "new"
28
28
  end
29
+
30
+ on(:election_started) do
31
+ flash.now[:alert] = I18n.t("questions.create.election_started", scope: "decidim.elections.admin")
32
+ render action: "new"
33
+ end
29
34
  end
30
35
  end
31
36
 
@@ -98,7 +98,7 @@ module Decidim
98
98
  if current_census.access_codes_file.attached?
99
99
  redirect_to Rails.application.routes.url_helpers.rails_blob_url(current_census.access_codes_file.blob, only_path: true)
100
100
  else
101
- flash[:error] = t("export_access_codes.file_not_exists", scope: "decidim.votings.census.admin.census")
101
+ flash[:error] = t("export_access_codes.file_not_exist", scope: "decidim.votings.census.admin.census")
102
102
  redirect_to admin_voting_census_path
103
103
  end
104
104
  end
@@ -103,6 +103,8 @@ module Decidim
103
103
  end
104
104
 
105
105
  def elections
106
+ raise ActionController::RoutingError, "Not Found" unless current_participatory_space
107
+
106
108
  Decidim::Elections::Election.where(component: current_participatory_space.components).where.not(bb_status: nil)
107
109
  end
108
110
 
@@ -17,9 +17,13 @@ module Decidim
17
17
  attribute :email, String
18
18
  attribute :ballot_style_code, String
19
19
 
20
+ validates :birthdate, format: { with: /\A\d{8}\z/ }
21
+
20
22
  validates :full_name,
21
23
  :full_address,
24
+ :birthdate,
22
25
  presence: true
26
+
23
27
  def ballot_style_code
24
28
  @ballot_style_code&.upcase
25
29
  end
@@ -14,7 +14,9 @@ module Decidim
14
14
  end
15
15
 
16
16
  def more_information?(answer)
17
- answer.description || answer.proposals.any? || answer.photos.any?
17
+ translated_attribute(answer.description).present? ||
18
+ answer.proposals.any? ||
19
+ answer.photos.any?
18
20
  end
19
21
  end
20
22
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Elections
5
+ # This mailer sends a notification email to a recently added trustee
6
+ class TrusteeMailer < Decidim::ApplicationMailer
7
+ include TranslatableAttributes
8
+
9
+ # Public: Sends an email to a trustee that just got added to a participatory space.
10
+ #
11
+ # user - The user to be notified
12
+ # participatory_space - The participatory space where the trustee was added.
13
+ # locale - The locale that will be used for the email content (optional).
14
+ #
15
+ # Returns nothing.
16
+ def notification(user, participatory_space, locale = nil)
17
+ @user = user
18
+ @participatory_space = participatory_space
19
+ @organization = user.organization
20
+
21
+ I18n.with_locale(locale || @organization.default_locale) do
22
+ @participatory_space_title = translated_attribute(participatory_space.title)
23
+ mail(to: user.email, subject: I18n.t("subject", scope: "decidim.elections.admin.mailers.trustee_mailer", resource_name: @participatory_space_title))
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,6 +1,4 @@
1
1
  $(() => {
2
- const isShowMoreButton = ($button) => $button.hasClass("show-more-content");
3
-
4
2
  const remToPx = (count) => {
5
3
  const unit = $("html").css("font-size");
6
4
 
@@ -25,17 +23,12 @@ $(() => {
25
23
  $content.css("max-height", contentMaxHeight);
26
24
  }
27
25
 
28
- $button.on("click", (event) => {
29
- const $buttonTextMore = $button.find(".button-text.show-more-content");
26
+ $button.on("click", () => {
30
27
  const $buttonTextLess = $button.find(".button-text.show-less-content");
31
28
 
32
29
  let newHeight = contentMaxHeight;
33
- if (isShowMoreButton($(event.target))) {
34
- newHeight = contentHeight;
35
- }
36
30
 
37
31
  $content.css("max-height", newHeight);
38
32
  $buttonTextLess.toggleClass("hide");
39
- $buttonTextMore.toggleClass("hide");
40
33
  });
41
34
  });
@@ -8,6 +8,9 @@ module Decidim
8
8
  return permission_action unless user
9
9
  return user_allowed_to_read_admin_dashboard? if read_admin_dashboard_action?
10
10
  return permission_action unless permission_action.scope == :admin
11
+
12
+ user_can_enter_space_area?
13
+
11
14
  return permission_action if voting && !voting.is_a?(Decidim::Votings::Voting)
12
15
 
13
16
  unless user_can_read_votings_admin_dashboard?
@@ -15,7 +18,6 @@ module Decidim
15
18
  return permission_action
16
19
  end
17
20
 
18
- user_can_enter_space_area?
19
21
  allowed_read_participatory_space?
20
22
  allowed_voting_action?
21
23
 
@@ -17,10 +17,14 @@ module Decidim
17
17
 
18
18
  def i18n_params
19
19
  super.merge(
20
- ballot_style_code: action_log.resource.code
20
+ ballot_style_code: ballot_style_code.to_s
21
21
  )
22
22
  end
23
23
 
24
+ def ballot_style_code
25
+ action_log&.resource&.code || action_log.extra["code"]
26
+ end
27
+
24
28
  def action_string
25
29
  case action
26
30
  when "create", "delete", "update"
@@ -0,0 +1,5 @@
1
+ <%== t("body", scope: "decidim.elections.admin.mailers.trustee_mailer", resource_name: @participatory_space_title, user_name: @user.name) %>
2
+
3
+ <p class="email-button email-button__cta">
4
+ <%= link_to t("trustee_zone", scope: "decidim.elections.admin.mailers.trustee_mailer"), decidim.decidim_elections_trustee_zone_url(host: @organization.host) %>
5
+ </p>
@@ -1,11 +1,13 @@
1
1
  <div class="vote-wrapper"
2
- data-election-id="<%= election.id %>"
3
- data-api-endpoint-url="<%= bulletin_board_server %>"
2
+ data-election-id="<%== election.id %>"
3
+ data-api-endpoint-url="<%== bulletin_board_server %>"
4
4
  data-authority-public-key="<%= authority_public_key %>"
5
- data-election-unique-id="<%= election_unique_id %>"
6
- data-voter-id="<%= voter_id %>"
7
- <%= ballot_style_id.present? ? "data-ballot-style-id=\"#{ballot_style_id}\"" : nil %>
8
- data-scheme-name="<%= scheme_name %>">
5
+ data-election-unique-id="<%== election_unique_id %>"
6
+ data-voter-id="<%== voter_id %>"
7
+ data-scheme-name="<%== scheme_name %>"
8
+ <% if ballot_style_id.present? %>
9
+ data-ballot-style-id="<%== ballot_style_id %>"
10
+ <% end %>>
9
11
 
10
12
  <% questions.each_with_index do |step_question, step_index| %>
11
13
  <div id="step-<%= step_index %>" class="focus__step <%= "hide" if step_index.positive? %>"
@@ -27,7 +27,7 @@
27
27
  <div class="row column">
28
28
  <%= form.select :voting_type,
29
29
  @form.options_for_voting_type_select,
30
- { include_blank: t(".select_a_voting_type") },
30
+ { include_blank: t(".select_a_voting_type"), label: t(".voting_type_label") },
31
31
  { multiple: false } %>
32
32
  </div>
33
33
 
@@ -37,7 +37,7 @@
37
37
 
38
38
  <div class="row">
39
39
  <div class="columns xlarge-6 slug">
40
- <%= form.text_field :slug %>
40
+ <%= form.text_field :slug, label: t(".slug") %>
41
41
  <p class="help-text">
42
42
  <%== t(".slug_help", url: decidim_form_slug_url(:votings, form.object.slug)) %>
43
43
  </p>
@@ -46,7 +46,7 @@
46
46
 
47
47
  <div class="row">
48
48
  <div class="columns xlarge-6 census_contact_information">
49
- <%= form.text_field :census_contact_information %>
49
+ <%= form.text_field :census_contact_information, label: t(".census_contact_information") %>
50
50
  <p class="help-text">
51
51
  <%== t(".census_contact_information_help") %>
52
52
  </p>
@@ -54,16 +54,16 @@
54
54
  </div>
55
55
 
56
56
  <div class="row column">
57
- <%= form.check_box :promoted %>
57
+ <%= form.check_box :promoted, label: t(".promoted") %>
58
58
  </div>
59
59
 
60
60
  <div class="row">
61
61
  <div class="columns xlarge-4">
62
- <%= form.upload :banner_image %>
62
+ <%= form.upload :banner_image, label: t(".banner_image") %>
63
63
  </div>
64
64
 
65
65
  <div class="columns xlarge-4">
66
- <%= form.upload :introductory_image %>
66
+ <%= form.upload :introductory_image, label: t(".introductory_image") %>
67
67
  </div>
68
68
  </div>
69
69
  </div>
@@ -1,10 +1,8 @@
1
1
  <div>
2
- <%= f.label :document_type do %>
3
- <%= f.select :document_type,
4
- form.options_for_document_type_select,
5
- { include_blank: t(".select") },
6
- { multiple: false } %>
7
- <% end %>
2
+ <%= f.select :document_type,
3
+ form.options_for_document_type_select,
4
+ { include_blank: t(".select"), label: t(".document_type") },
5
+ { multiple: false } %>
8
6
  </div>
9
7
  <div>
10
8
  <%= f.text_field :document_number, label: t(".document_number"), placeholder: t(".document_number_placeholder") %>
@@ -15,17 +13,17 @@
15
13
  <fieldset>
16
14
  <legend><%= t(".date_of_birth") %></legend>
17
15
  <div class="row">
18
- <%= f.label :day, t(".day"), class: "columns small-4" do %>
19
- <%= f.text_field :day, placeholder: t(".day_placeholder"), "data-autojump" => true, "data-max-length" => 2,
16
+ <div class="columns small-4">
17
+ <%= f.text_field :day, placeholder: t(".day_placeholder"), label: t(".day"), "data-autojump" => true, "data-max-length" => 2,
20
18
  "data-jump-next" => "#login_month" %>
21
- <% end %>
22
- <%= f.label :month, t(".month"), class: "columns small-4" do %>
23
- <%= f.text_field :month, placeholder: t(".month_placeholder"), "data-autojump" => true, "data-max-length" => 2,
19
+ </div>
20
+ <div class="columns small-4">
21
+ <%= f.text_field :month, placeholder: t(".month_placeholder"), label: t(".month"), "data-autojump" => true, "data-max-length" => 2,
24
22
  "data-jump-prev" => "#login_day", "data-jump-next" => "#login_year" %>
25
- <% end %>
26
- <%= f.label :year, t(".year"), class: "columns small-4" do %>
27
- <%= f.text_field :year, placeholder: t(".year_placeholder"), "data-autojump" => true, "data-max-length" => 4,
23
+ </div>
24
+ <div class="columns small-4">
25
+ <%= f.text_field :year, placeholder: t(".year_placeholder"), label: t(".year"), "data-autojump" => true, "data-max-length" => 4,
28
26
  "data-jump-prev" => "#login_month" %>
29
- <% end %>
27
+ </div>
30
28
  </div>
31
29
  </fieldset>
@@ -22,12 +22,16 @@ edit_link(
22
22
  <p>
23
23
  <%= t("decidim.votings.votings.check_census.success.info") %>
24
24
  <button type="button" class="link" data-open="access-code-modal">
25
+ <% if Decidim.sms_gateway_service.to_s.safe_constantize %>
26
+ <%= t("decidim.votings.votings.check_census.success.access_link_with_sms") %>
27
+ <% else %>
25
28
  <%= t("decidim.votings.votings.check_census.success.access_link") %>
29
+ <% end %>
26
30
  </button>
27
31
  </p>
28
32
  </div>
29
33
  <% if datum.email.present? || datum.mobile_phone_number.present? %>
30
- <%= render partial: "access_code_modal", locals: { datum: datum, email: datum.email ? datum.email.gsub!(/.{4}(?=@)/,"****") : "", sms: datum.mobile_phone_number ? datum.mobile_phone_number.gsub!(/.{3}\d$/,"***") : "" } %>
34
+ <%= render partial: "access_code_modal", locals: { datum: datum, email: datum.email ? datum.email.gsub!(/^.+@/,"****@") : "", sms: datum.mobile_phone_number ? datum.mobile_phone_number.gsub!(/.{3}\d$/,"***") : "" } %>
31
35
  <% end %>
32
36
  <% elsif not_found %>
33
37
  <div class="verify-census-error callout alert mt-s">
@@ -9,6 +9,15 @@ ar:
9
9
  description: الوصف
10
10
  decidim:
11
11
  elections:
12
+ admin:
13
+ steps:
14
+ tally:
15
+ invalid: كانت هناك مشكلة في الإبلاغ عن الأمين المفقود
16
+ mark_as_missing: وضع علامة مفقود
17
+ mark_as_missing_description: يجب أن يشارك جميع الأمناء في هذه العملية، ولكن إذا لم يتمكن الأمين من المشاركة في العملية، يمكنك وضع علامة على أنها مفقودة.
18
+ success: وقد تم بنجاح إرسال تقرير الأمين المفقود إلى لوحة الإعلانات
19
+ tally_completion: وستكتمل هذه العملية عندما يكون جميع الأمناء مُفعلين أو موسومين باعتبارهم مفقودين. مطلوب بحد أدنى %{quorum} من الأمناء لإكمال العملية.
20
+ undo_mark_as_missing: وسيتمكن الأمين الذي وُضع عليه علامة مفقودة عن طريق الخطأ من المشاركة قبل إتمام العملية. ويمكنهم المضي قدما كالمعتاد وسيتم تجاهل العلامة المفقودة.
12
21
  elections:
13
22
  election_log:
14
23
  results_title: النتائج
@@ -58,6 +58,9 @@ ca:
58
58
  decidim/elections/question:
59
59
  one: Pregunta
60
60
  other: Preguntes
61
+ decidim/voting:
62
+ one: Votació
63
+ other: Votacions
61
64
  decidim/votings/census/dataset:
62
65
  one: Conjunt de dades
63
66
  other: Conjunts de dades
@@ -182,6 +185,11 @@ ca:
182
185
  exports:
183
186
  elections: Eleccions
184
187
  feedback_form_answers: Feedback de les respostes
188
+ mailers:
189
+ trustee_mailer:
190
+ body: "<p>Hola %{user_name},</p><p>Se t'ha afegit com a garant a%{resource_name}.</p>"
191
+ subject: Se t'ha afegit com a garant de %{resource_name}
192
+ trustee_zone: Portant a l'espai de garants
185
193
  menu:
186
194
  trustees: Garants
187
195
  models:
@@ -204,6 +212,7 @@ ca:
204
212
  title: Importar propostes
205
213
  questions:
206
214
  create:
215
+ election_started: L'elecció ja ha començat
207
216
  invalid: S'ha produït un error en crear aquesta pregunta
208
217
  success: S'ha creat la pregunta correctament
209
218
  destroy:
@@ -531,7 +540,7 @@ ca:
531
540
  upload_election_keys: Pujar claus de l'elecció
532
541
  upload_icon: Icona que indica una acció de descàrrega
533
542
  tally_steps:
534
- back: Tornar
543
+ back: Enrere
535
544
  description: Els resultats d'aquesta elecció s'estan computant al Bulletin Board. Per completar aquest procés, és necessària la teva participació com a garant.
536
545
  keys:
537
546
  end_tally: Recompte finalitzat
@@ -543,7 +552,7 @@ ca:
543
552
  task: Tasca
544
553
  process_warning: Un cop ha començat el procés, no hauries de sortir d'aquesta pàgina fins que aquest acabi. Trigarà varis minuts, ja que tots els garants han de connectar-se al mateix temps per completar-lo.
545
554
  start: Començar
546
- start_icon: Icona que indica un botó d'inici per començar la generació de claus d'una elecció
555
+ start_icon: Icona que indica un botó d'inici per a la generació de claus d'una elecció
547
556
  status:
548
557
  completed: Completada
549
558
  pending: Pendent
@@ -599,7 +608,7 @@ ca:
599
608
  audit: "( Auditar papereta )"
600
609
  back: Començar de nou el procés de votació
601
610
  ballot_hash: 'L''identificador de la teva papereta és:'
602
- cast: Enviar papereta
611
+ cast: Dipositar la papereta per a finalitzar el teu vot
603
612
  description: Aquí tens les opcions per emetre la teva papereta perquè sigui degudament comptada o, alternativament, pots auditar que la teva papereta hagi estat xifrada correctament. Per raons de seguretat, l'auditoria de la teva papereta l'espatllarà, cosa que significa, que per a emetre el teu vot hauràs de reiniciar el procés de votació.
604
613
  header: 'La papereta està xifrada: pots dipositar-la o auditar-la'
605
614
  casting:
@@ -985,14 +994,20 @@ ca:
985
994
  assign_missing_officers: Hi ha punts de votació sense president i/o gestors. Si us plau, assigna'ls des de la secció de punts de votació
986
995
  update: Actualitzar
987
996
  form:
997
+ banner_image: Imatge de capçalera
998
+ census_contact_information: Dades de contacte del cens
988
999
  census_contact_information_help: La informació de contacte és per a participants que vulguin avisar d'incidències amb el cens. Pot ser una adreça de correu electrònic, un formulari de contacte ubicat en un altre lloc web, una enquesta de Decidim per a visitants, etc.
1000
+ introductory_image: Imatge de presentació
1001
+ promoted: Destacada
989
1002
  select_a_voting_type: Si us plau selecciona un tipus de votació
1003
+ slug: Nom curt d'URL
990
1004
  slug_help: 'Els noms curts d''URL s''utilitzen per generar els URL que apunten a aquest procés. Només accepta lletres, números i guions, i ha de començar amb una lletra. Exemple: %{url}'
991
1005
  title: Títol
992
1006
  voting_type:
993
1007
  hybrid: Híbrida
994
1008
  in_person: Presencial
995
1009
  online: En línia
1010
+ voting_type_label: Tipus de votació
996
1011
  new:
997
1012
  create: Crear
998
1013
  title: Nova votació
@@ -1044,7 +1059,7 @@ ca:
1044
1059
  button: Exportar els codis d'accés de la votació
1045
1060
  callout: Ara ja pots exportar els codis d'accés. Això només es pot fer una sola vegada. Tan bon punt comencis amb l'exportació, rebràs un correu electrònic amb les instruccions a <strong>%{email}</strong>
1046
1061
  confirm: Només pots exportar els codis d'accés una sola vegada. Assegura't de poder rebre'ls correctament a l'adreça de correu electrònic <strong>%{email}</strong>.
1047
- file_not_exists: El fitxer no existeix
1062
+ file_not_exist: Aquest fitxer no existeix
1048
1063
  launch_error: Hi ha hagut un error en exportar els codis d'accés
1049
1064
  launch_success: S'ha iniciat l'exportació dels codis d'accés. En breu rebràs un correu a %{email}
1050
1065
  exporting_access_codes:
@@ -1069,7 +1084,7 @@ ca:
1069
1084
  has_ballot_styles_message: Estàs configurant estils de papereta. Si us plau assegura't de que el camp "%{ballot_style_code_header}" del CSV correspongui al codi de l'estil de papereta que vols.
1070
1085
  info_message: "<strong>Encara no hi ha cap cens.</strong> Si us plau, utilitza el següent formulari per a crear-lo important un fitxer CSV."
1071
1086
  missing_ballot_styles_message: 'Encara no hi ha cap estil de papereta per a aquesta votació. Si vols disposar de preguntes condicionals (com ara que votants puguin rebre diferents preguntes segons el seu districte o la seva regió de residència, per exemple) cal que importis el cens <strong>abans</strong> de configurar l''<a href=%{ballot_styles_admin_path}>estil de papereta</a>. Si el que vols és mostrar les mateixes preguntes a tothom, pots iniciar el procès d''importació del cens.'
1072
- submit: Enviar csv
1087
+ submit: Enviar CSV
1073
1088
  title: Crear el cens
1074
1089
  show:
1075
1090
  heading: Cens de l'espai de votació
@@ -1095,8 +1110,7 @@ ca:
1095
1110
  name: Votacions destacades
1096
1111
  landing_page:
1097
1112
  description:
1098
- show_less: Llegir menys
1099
- show_more: Llegir més
1113
+ title: Quant a aquesta votació
1100
1114
  metrics:
1101
1115
  heading: Mètriques
1102
1116
  polling_stations:
@@ -1149,7 +1163,7 @@ ca:
1149
1163
  modal_ballots_count_error:
1150
1164
  btn_validate_total: Validar recompte total de paperetes
1151
1165
  close_modal: Tancar
1152
- info_explanation_text: 'Si us plau, revisa el nombre total de paperetes. Si el número total és correcte, has de proporcionar una explicació per al Comitè de Seguiment:'
1166
+ info_explanation_text: 'Si us plau, revisa el nombre total de paperetes. Si el número total és incorrecte, has de proporcionar una explicació per al Comitè de Seguiment:'
1153
1167
  info_text: El nombre total de paperetes (sobres) introduïdes no coincideix amb el registre de persones que han votat en aquest punt de votació.
1154
1168
  message_for_monitoring_committee: Missatge per al Comitè de Seguiment
1155
1169
  review_recount: Revisar el recompte
@@ -1274,12 +1288,13 @@ ca:
1274
1288
  check_status: Comprovar l'estat
1275
1289
  description: Comprova les dades del cens per saber si tens dret a participar en la votació. Si les dades són correctes, hauries de tenir ja un codi d'accés, però si l'has perdut pots demanar-lo de nou si les teves dades són correctes.
1276
1290
  error:
1277
- info: 'Prova de nou, si us plau. Si creus que les dades que tenim al sistema no són correctes, pots avisar-nos a %{census_contact_information}.'
1278
- title: Les teves dades del cens no són correctes!
1291
+ info: 'Prova de nou, si us plau. Si creus que les dades que tenim al sistema no són correctes, pots avisar-nos a %{census_contact_information}'
1292
+ title: Les dades que has introduït no es troben al cens d'aquesta votació
1279
1293
  form_title: 'Emplena el formulari següent per comprovar les dades del cens:'
1280
1294
  invalid: Hi ha hagut un problema en comprovar el cens.
1281
1295
  success:
1282
- access_link: via SMS o correu electrònic.
1296
+ access_link: per correu electrònic.
1297
+ access_link_with_sms: via SMS o correu electrònic.
1283
1298
  info: Ja hauries d'haver rebut el codi d'accés per correu postal. En cas que no l'hagis rebut, pots demanar-lo de nou aquí
1284
1299
  title: Les teves dades del cens són correctes!
1285
1300
  title: Puc votar?
@@ -1289,6 +1304,7 @@ ca:
1289
1304
  day_placeholder: DD
1290
1305
  document_number: Número de document
1291
1306
  document_number_placeholder: Número d'ID
1307
+ document_type: Tipus de document
1292
1308
  month: Mes
1293
1309
  month_placeholder: MM
1294
1310
  postal_code: Codi postal