diff --git a/app/mailers/mailer.rb b/app/mailers/mailer.rb index 188de029b..7e8970c61 100644 --- a/app/mailers/mailer.rb +++ b/app/mailers/mailer.rb @@ -91,6 +91,24 @@ class Mailer < ApplicationMailer end end + def budget_investment_selected(investment) + @investment = investment + @author = investment.author + + with_user(@author) do + mail(to: @author.email, subject: t('mailers.budget_investment_selected.subject', code: @investment.code)) + end + end + + def budget_investment_unselected(investment) + @investment = investment + @author = investment.author + + with_user(@author) do + mail(to: @author.email, subject: t('mailers.budget_investment_unselected.subject', code: @investment.code)) + end + end + private def with_user(user, &block) diff --git a/app/models/budget.rb b/app/models/budget.rb index 5b2cdc558..a5932921c 100644 --- a/app/models/budget.rb +++ b/app/models/budget.rb @@ -113,6 +113,18 @@ class Budget < ActiveRecord::Base end end + def email_selected + investments.selected.each do |investment| + Mailer.budget_investment_selected(investment).deliver_later + end + end + + def email_unselected + investments.unselected.each do |investment| + Mailer.budget_investment_unselected(investment).deliver_later + end + end + private def sanitize_descriptions diff --git a/app/views/mailer/budget_investment_created.html.erb b/app/views/mailer/budget_investment_created.html.erb index 59af63dd1..85052bedd 100644 --- a/app/views/mailer/budget_investment_created.html.erb +++ b/app/views/mailer/budget_investment_created.html.erb @@ -1,42 +1,43 @@ -

- <%= t("mailers.budget_investment_created.title") %> -

+

+ <%= t("mailers.budget_investment_created.title") %> +

-

- <%= t("mailers.budget_investment_created.intro_html", - author: @investment.author.name).html_safe %> -

+

+ <%= t("mailers.budget_investment_created.intro_html", + author: @investment.author.name).html_safe %> +

-

- <%= t("mailers.budget_investment_created.text_html", - investment: @investment.title, - budget: @investment.budget.name).html_safe %> -

+

+ <%= t("mailers.budget_investment_created.text_html", + investment: @investment.title, + budget: @investment.budget.name).html_safe %> +

-

- <%= t("mailers.budget_investment_created.follow_html", - link: link_to(t("mailers.budget_investment_created.follow_link"), budgets_url)).html_safe %> -

+

+ <%= t("mailers.budget_investment_created.follow_html", + link: link_to(t("mailers.budget_investment_created.follow_link"), budgets_url)).html_safe %> +

- - - - - - -
- <%= link_to budget_investment_url(@investment.budget, @investment, anchor: "social-share"), style: "font-family: 'Open Sans','Helvetica Neue',arial,sans-serif; background: #f7f5f2; border-radius: 6px; color: #3d3d66!important; font-weight: bold; margin: 0px; padding: 10px 15px; text-align: center; text-decoration: none; min-width: 160px; display: inline-block;" do %> - <%= image_tag('icon_mailer_share.png', style: "border: 0; display: inline-block; width: 100%; max-width: 16px", alt: "") %> - <%= t('mailers.budget_investment_created.share') %> - <% end %> -
+ + + + + + +
+ <%= link_to budget_investment_url(@investment.budget, @investment, anchor: "social-share"), style: "font-family: 'Open Sans','Helvetica Neue',arial,sans-serif; background: #f7f5f2; border-radius: 6px; color: #3d3d66!important; font-weight: bold; margin: 0px; padding: 10px 15px; text-align: center; text-decoration: none; min-width: 160px; display: inline-block;" do %> + <%= image_tag('icon_mailer_share.png', style: "border: 0; display: inline-block; width: 100%; max-width: 16px", alt: "") %> + <%= t('mailers.budget_investment_created.share') %> + <% end %> +
-

- <%= t("mailers.budget_investment_created.sincerely") %> -
- - <%= t("mailers.budget_investment_created.signatory") %> - -

+

+ <%= t("mailers.budget_investment_created.sincerely") %> +
+ + <%= t("mailers.budget_investment_created.signatory") %> + +

+ diff --git a/app/views/mailer/budget_investment_selected.html.erb b/app/views/mailer/budget_investment_selected.html.erb new file mode 100644 index 000000000..71d0a475c --- /dev/null +++ b/app/views/mailer/budget_investment_selected.html.erb @@ -0,0 +1,38 @@ + + +

+ <%= t("mailers.budget_investment_selected.hi") %> +

+ +

+ <%= t("mailers.budget_investment_selected.selected_html", + title: @investment.title) %> +

+ +

+ <%= t("mailers.budget_investment_selected.share") %> +

+ + + + + + + +
+ <%= link_to budget_investment_url(@investment.budget, @investment, anchor: "social-share"), style: "font-family: 'Open Sans','Helvetica Neue',arial,sans-serif; background: #f7f5f2; border-radius: 6px; color: #3d3d66 !important; font-weight: bold; margin: 0px; padding: 10px 15px; text-align: center; text-decoration: none; min-width: 160px; display: inline-block;" do %> + <%= image_tag('icon_mailer_share.png', style: "border: 0; display: inline-block; width: 100%; max-width: 16px", alt: "") %> + <%= t('mailers.budget_investment_selected.share_button') %> + <% end %> +
+ +

+ <%= t("mailers.budget_investment_selected.thanks") %> +

+ +

+ <%= t("mailers.budget_investment_selected.sincerely") %>
+ + <%= t("mailers.budget_investment_selected.signatory") %> +

+ \ No newline at end of file diff --git a/app/views/mailer/budget_investment_unselected.html.erb b/app/views/mailer/budget_investment_unselected.html.erb new file mode 100644 index 000000000..ec0224d77 --- /dev/null +++ b/app/views/mailer/budget_investment_unselected.html.erb @@ -0,0 +1,27 @@ + + +

+ <%= t("mailers.budget_investment_unselected.hi") %> +

+ +

+ <%= t("mailers.budget_investment_unselected.unselected_html", + title: @investment.title) %> +

+ +

+ <%= t("mailers.budget_investment_unselected.participate_html", + url: link_to(t("mailers.budget_investment_unselected.participate_url"), + budget_url(@investment.budget), style: "color: #2895F1; text-decoration: underline;")) %> +

+ +

+ <%= t("mailers.budget_investment_unselected.thanks") %> +

+ +

+ <%= t("mailers.budget_investment_unselected.sincerely") %>
+ + <%= t("mailers.budget_investment_unselected.signatory") %> +

+ \ No newline at end of file diff --git a/config/locales/mailers.en.yml b/config/locales/mailers.en.yml index 49143f354..65da97b55 100755 --- a/config/locales/mailers.en.yml +++ b/config/locales/mailers.en.yml @@ -82,4 +82,22 @@ en: signatory: "DEPARTMENT OF PUBLIC PARTICIPATION" sorry: "Sorry for the inconvenience and we again thank you for your invaluable participation." subject: "Your investment project '%{code}' has been marked as unfeasible" - unfeasible_html: "From the City Council we want to thank you for your participation in the participatory budgets. We regret to inform you that your investment '%{title}' will be excluded from this participatory process for the following reason:" \ No newline at end of file + unfeasible_html: "From the City Council we want to thank you for your participation in the participatory budgets. We regret to inform you that your investment '%{title}' will be excluded from this participatory process for the following reason:" + budget_investment_selected: + subject: "Your investment project '%{code}' has been selected" + hi: "Dear user," + selected_html: "From the City Council we want to thank you for your participation in the participatory budgets. We would like to inform you that your investment project '%{title}' has been selected for the final voting phase that will happen from May 15th to June 30th." + share: "Start to get votes, share your investment project on social networks. Share is essential to make it a reality." + share_button: "Share your investment project" + thanks: "Thank you again for participating." + sincerely: "Sincererly" + signatory: "DEPARTMENT OF PUBLIC PARTICIPATION" + budget_investment_unselected: + subject: "Your investment project '%{code}' has not been selected" + hi: "Dear user," + unselected_html: "From the City Council we want to thank you for your participation in the participatory budgets. We regret to inform you that your investment project '%{title}' has not been selected for the final voting phase." + participate_html: "You can continue participating in the final voting phase voting for investments projects from May 15th to June 30th." + participate_url: "participate in the final voting" + thanks: "Thank you again for participating." + sincerely: "Sincererly" + signatory: "DEPARTMENT OF PUBLIC PARTICIPATION" \ No newline at end of file diff --git a/config/locales/mailers.es.yml b/config/locales/mailers.es.yml index 82a03d8de..dc51148f8 100644 --- a/config/locales/mailers.es.yml +++ b/config/locales/mailers.es.yml @@ -72,4 +72,22 @@ es: signatory: "DIRECCIÓN GENERAL DE PARTICIPACIÓN CIUDADANA" sorry: "Sentimos las molestias ocasionadas y volvemos a darte las gracias por tu inestimable participación." subject: "Tu propuesta de inversión '%{code}' ha sido marcada como inviable" - unfeasible_html: "Desde el Ayuntamiento queremos agradecer tu participación en los Presupuestos Participativos. Lamentamos informarte de que tu proyecto '%{title}' quedará excluido de este proceso participativo por el siguiente motivo:" \ No newline at end of file + unfeasible_html: "Desde el Ayuntamiento queremos agradecer tu participación en los Presupuestos Participativos. Lamentamos informarte de que tu proyecto '%{title}' quedará excluido de este proceso participativo por el siguiente motivo:" + budget_investment_selected: + subject: "Tu propuesta de inversión '%{code}' ha sido seleccionada" + hi: "Estimado/a usuario/a" + selected_html: "Desde el Ayuntamiento de Madrid agradecemos que hayas participado con tu idea en los Presupuestos Participativos. Te informamos de que tu proyecto '%{title}' ha sido seleccionado y pasa a la fase de votación final que tiene lugar desde el 15 de mayo hasta el 30 de junio de 2017." + share: "Empieza ya a conseguir votos, comparte tu proyecto de gasto en redes sociales. La difusión es fundamental para conseguir que se haga realidad." + share_button: "Comparte tu proyecto" + thanks: "Gracias de nuevo por tu participación." + sincerely: "Atentamente" + signatory: "DIRECCIÓN GENERAL DE PARTICIPACIÓN CIUDADANA" + budget_investment_unselected: + subject: "Tu propuesta de inversión '%{code}' no ha sido seleccionada" + hi: "Estimado/a usuario/a" + unselected_html: "Desde el Ayuntamiento de Madrid agradecemos que hayas participado con tu idea en los Presupuestos Participativos. Lamentamos informarte de que tu proyecto '%{title}' no ha sido seleccionado para la fase de votación final." + participate_html: "Puedes continuar participando en la votación final votando proyectos para toda la ciudad y el distrito que elijas desde el 15 de mayo hasta el 30 de junio de 2017." + participate_url: "participes en la votación final" + thanks: "Gracias de nuevo por tu participación." + sincerely: "Atentamente" + signatory: "DIRECCIÓN GENERAL DE PARTICIPACIÓN CIUDADANA" diff --git a/lib/tasks/budgets.rake b/lib/tasks/budgets.rake new file mode 100644 index 000000000..f9810ac1c --- /dev/null +++ b/lib/tasks/budgets.rake @@ -0,0 +1,16 @@ +namespace :budgets do + namespace :email do + + desc "Sends emails to authors of selected investments" + task selected: :environment do + Budget.last.email_selected + end + + desc "Sends emails to authors of unselected investments" + task unselected: :environment do + Budget.last.email_unselected + end + + end + +end \ No newline at end of file diff --git a/spec/features/emails_spec.rb b/spec/features/emails_spec.rb index b3e52370d..a42715734 100644 --- a/spec/features/emails_spec.rb +++ b/spec/features/emails_spec.rb @@ -321,5 +321,51 @@ feature 'Emails' do expect(email).to have_body_text(investment.unfeasibility_explanation) end + scenario "Selected investment" do + author1 = create(:user) + author2 = create(:user) + author3 = create(:user) + + investment1 = create(:budget_investment, :selected, author: author1, budget: budget) + investment2 = create(:budget_investment, :selected, author: author2, budget: budget) + investment3 = create(:budget_investment, :unselected, author: author3, budget: budget) + + reset_mailer + budget.email_selected + + expect(find_email investment1.author.email).to be + expect(find_email investment2.author.email).to be + expect(find_email investment3.author.email).to_not be + + email = open_last_email + investment = investment2 + expect(email).to have_subject("Your investment project '#{investment.code}' has been selected") + expect(email).to deliver_to(investment.author.email) + expect(email).to have_body_text(investment.title) + end + + scenario "Unselected investment" do + author1 = create(:user) + author2 = create(:user) + author3 = create(:user) + + investment1 = create(:budget_investment, :unselected, author: author1, budget: budget) + investment2 = create(:budget_investment, :unselected, author: author2, budget: budget) + investment3 = create(:budget_investment, :selected, author: author3, budget: budget) + + reset_mailer + budget.email_unselected + + expect(find_email investment1.author.email).to be + expect(find_email investment2.author.email).to be + expect(find_email investment3.author.email).to_not be + + email = open_last_email + investment = investment2 + expect(email).to have_subject("Your investment project '#{investment.code}' has not been selected") + expect(email).to deliver_to(investment.author.email) + expect(email).to have_body_text(investment.title) + end + end end