">
diff --git a/app/views/submissions/show.html.erb b/app/views/submissions/show.html.erb
index 83187f47..7922949c 100644
--- a/app/views/submissions/show.html.erb
+++ b/app/views/submissions/show.html.erb
@@ -30,6 +30,12 @@
<%= t('event_log') %>
<% end %>
<% end %>
+ <% if signed_in? && !is_all_completed && can?(:manage, :resend_all) && @submission.submitters.to_a.size > 3 && !@submission.archived_at? && !@submission.template&.archived_at? && !@submission.expired? && can?(:update, @submission) %>
+ <% pending_submitters_count = @submission.submitters.to_a.count { |s| !s.completed_at? && s.email.present? && !s.declined_at? } %>
+ <% if pending_submitters_count.positive? %>
+ <%= button_to button_title(title: t('re_send_emails'), title_class: 'hidden md:inline', disabled_with: t('sending'), icon: svg_icon('mail_forward', class: 'w-6 h-6')), submission_resend_email_index_path(@submission), class: 'white-button', data: { turbo_confirm: t('are_you_sure_you_want_to_re_send_email_to_n_recipients', count: pending_submitters_count) } %>
+ <% end %>
+ <% end %>
<% if @submission.submitters.to_a.any?(&:completed_at?) %>
<% if is_all_completed || !is_combined_enabled %>
diff --git a/app/views/submitters/edit.html.erb b/app/views/submitters/edit.html.erb
index a4f69f9b..1f203bcb 100644
--- a/app/views/submitters/edit.html.erb
+++ b/app/views/submitters/edit.html.erb
@@ -10,11 +10,9 @@
<%= email_field_tag 'submitter[email]', @submitter.email, autocomplete: 'off', class: 'base-input !h-10 mt-1.5 w-full', placeholder: "#{t('email')} (#{t('optional')})" %>
-
-
- <%= telephone_field_tag 'submitter[phone]', @submitter.phone, autocomplete: 'off', pattern: '^\+[0-9\s\-]+$', class: 'base-input !h-10 mt-1.5 w-full', placeholder: "#{t('phone')} (#{t('optional')})" %>
-
-
+
+ <%= telephone_field_tag 'submitter[phone]', @submitter.phone, autocomplete: 'off', pattern: '^\+[0-9\s\-]+$', title: t('use_international_format_1xxx_'), class: 'base-input !h-10 mt-1.5 w-full', placeholder: "#{t('phone')} (#{t('optional')})" %>
+
diff --git a/config/routes.rb b/config/routes.rb
index 139c983c..0e7643ee 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -77,6 +77,7 @@ Rails.application.routes.draw do
resources :unarchive, only: %i[create], controller: 'submissions_unarchive'
resources :events, only: %i[index], controller: 'submission_events'
resources :download, only: %i[index], controller: 'submissions_download'
+ resources :resend_email, only: %i[create], controller: 'submissions_resend_email'
end
resources :submitters, only: %i[edit update]
resource :testing_account, only: %i[create destroy]
diff --git a/lib/number_utils.rb b/lib/number_utils.rb
index 4cfa3879..946ea472 100644
--- a/lib/number_utils.rb
+++ b/lib/number_utils.rb
@@ -25,6 +25,10 @@ module NumberUtils
ApplicationController.helpers.number_to_currency(number, locale:, precision: 2, unit: CURRENCY_SYMBOLS[format])
elsif locale
ApplicationController.helpers.number_with_delimiter(number, locale:)
+ elsif format == 'percent'
+ "#{number}%"
+ elsif format == 'percent_space'
+ "#{number.to_s.tr('.', ',')} %"
else
number
end
diff --git a/lib/send_webhook_request.rb b/lib/send_webhook_request.rb
index 6d0aef25..43c93adc 100644
--- a/lib/send_webhook_request.rb
+++ b/lib/send_webhook_request.rb
@@ -39,7 +39,9 @@ module SendWebhookRequest
data: data
}.to_json
- req.headers['X-Wabosign-Signature'] = WebhookUrls::Signatures.sign(webhook_url.hmac_secret, body: req.body)
+ if req.headers['X-Wabosign-Signature'].blank?
+ req.headers['X-Wabosign-Signature'] = WebhookUrls::Signatures.sign(webhook_url.hmac_secret, body: req.body)
+ end
req.options.read_timeout = 15
req.options.open_timeout = 8