diff --git a/app/models/closed_mail.rb b/app/models/closed_mail.rb new file mode 100644 index 000000000..92d8aed80 --- /dev/null +++ b/app/models/closed_mail.rb @@ -0,0 +1,13 @@ +class ClosedMail < ActiveRecord::Base + include MailTemplateConcern + + def name + "Accusé d'acceptation" + end + + def self.default + obj = "Votre dossier TPS N°--numero_dossier-- a été accepté" + body = ActionController::Base.new.render_to_string(template: 'notification_mailer/closed_mail') + ClosedMail.new(object: obj, body: body) + end +end diff --git a/app/models/concerns/mail_template_concern.rb b/app/models/concerns/mail_template_concern.rb new file mode 100644 index 000000000..f63d68990 --- /dev/null +++ b/app/models/concerns/mail_template_concern.rb @@ -0,0 +1,54 @@ +module MailTemplateConcern + extend ActiveSupport::Concern + + include Rails.application.routes.url_helpers + include ActionView::Helpers::UrlHelper + + TAGS = { + numero_dossier: { + description: "Permet d'afficher le numéro de dossier de l'utilisateur." + }, + lien_dossier: { + description: "Permet d'afficher un lien vers le dossier de l'utilisateur." + }, + libelle_procedure: { + description: "Permet d'afficher le libellé de la procédure." + } + } + + def object_for_dossier dossier + replace_tags(object, dossier) + end + + def body_for_dossier dossier + replace_tags(body, dossier) + end + + def replace_tags string, dossier + TAGS.inject(string) do |acc, tag| + acc.gsub!("--#{tag.first}--", replace_tag(tag.first.to_sym, dossier)) || acc + end + end + + module ClassMethods + def slug + self.name.underscore + end + end + + private + + def replace_tag tag, dossier + case tag + when :numero_dossier + dossier.id.to_s + when :lien_dossier + # TPS::Application::URL # quickfix + link_to users_dossier_recapitulatif_url(dossier), users_dossier_recapitulatif_url(dossier), target: '_blank' + when :libelle_procedure + dossier.procedure.libelle + else + '--BALISE_NON_RECONNUE--' + end + end +end diff --git a/app/models/initiated_mail.rb b/app/models/initiated_mail.rb index 2aeaa086c..7a220867a 100644 --- a/app/models/initiated_mail.rb +++ b/app/models/initiated_mail.rb @@ -1,15 +1,13 @@ -class InitiatedMail < MailTemplate +class InitiatedMail < ActiveRecord::Base + include MailTemplateConcern + def name - "E-mail d'accusé de réception" + "Accusé de réception" end def self.default - obj = "[TPS] Accusé de réception pour votre dossier n°--numero_dossier--" + obj = "Votre dossier TPS N°--numero_dossier-- a été bien reçu" body = ActionController::Base.new.render_to_string(template: 'notification_mailer/initiated_mail') InitiatedMail.new(object: obj, body: body) end - - def self.slug - self.name.parameterize - end end diff --git a/app/models/received_mail.rb b/app/models/received_mail.rb new file mode 100644 index 000000000..5af010789 --- /dev/null +++ b/app/models/received_mail.rb @@ -0,0 +1,13 @@ +class ReceivedMail < ActiveRecord::Base + include MailTemplateConcern + + def name + "Accusé de passage en instruction" + end + + def self.default + obj = "Votre dossier TPS N°--numero_dossier-- va être instruit" + body = ActionController::Base.new.render_to_string(template: 'notification_mailer/received_mail') + ReceivedMail.new(object: obj, body: body) + end +end diff --git a/app/models/refused_mail.rb b/app/models/refused_mail.rb new file mode 100644 index 000000000..30b347b77 --- /dev/null +++ b/app/models/refused_mail.rb @@ -0,0 +1,13 @@ +class RefusedMail < ApplicationRecord + include MailTemplateConcern + + def name + "Accusé de rejet du dossier" + end + + def self.default + obj = "Votre dossier TPS N°--numero_dossier-- a été refusé" + body = ActionController::Base.new.render_to_string(template: 'notification_mailer/refused_mail') + RefusedMail.new(object: obj, body: body) + end +end diff --git a/app/models/without_continuation_mail.rb b/app/models/without_continuation_mail.rb new file mode 100644 index 000000000..9bde76f64 --- /dev/null +++ b/app/models/without_continuation_mail.rb @@ -0,0 +1,13 @@ +class WithoutContinuationMail < ApplicationRecord + include MailTemplateConcern + + def name + "Accusé de classement sans suite" + end + + def self.default + obj = "Votre dossier TPS N°--numero_dossier-- a été classé sans suite" + body = ActionController::Base.new.render_to_string(template: 'notification_mailer/without_continuation_mail') + WithoutContinuationMail.new(object: obj, body: body) + end +end diff --git a/app/views/notification_mailer/closed_mail.html.haml b/app/views/notification_mailer/closed_mail.html.haml new file mode 100644 index 000000000..22321d848 --- /dev/null +++ b/app/views/notification_mailer/closed_mail.html.haml @@ -0,0 +1,17 @@ +Bonjour +
+
+Votre dossier N°--numero_dossier-- a été accepté. +
+
+A tout moment, vous pouvez consulter le contenu de vos dossiers et les éventuels commentaires de l'administration à cette adresse : --lien_dossier-- +
+
+Bonne journée +
+
+\--- +
+Merci de ne pas répondre à ce mail. Postez directement vos questions dans votre dossier sur la plateforme. +
+\--- diff --git a/app/views/notification_mailer/dossier_closed.text.erb b/app/views/notification_mailer/dossier_closed.text.erb deleted file mode 100644 index 81d692a64..000000000 --- a/app/views/notification_mailer/dossier_closed.text.erb +++ /dev/null @@ -1,14 +0,0 @@ -Bonjour <%= @user.email %> - -votre dossier N°<%=@dossier.id%> déposé auprès de <%= @dossier.procedure.organisation %> a été accepté ce jour à <%= @dossier.updated_at %>. - -A tout moment, vous pouvez consulter le contenu de vos dossiers et les éventuels commentaires de l'administration à cette adresse : <%=users_dossier_recapitulatif_url(dossier_id: @dossier.id)%> - -Bonne journée - ---- -Merci de ne pas répondre à ce mail. Postez directement vos questions dans votre dossier sur la plateforme. ---- - ---- -L'équide TPS - tps@apientreprise.fr \ No newline at end of file diff --git a/app/views/notification_mailer/dossier_refused.text.erb b/app/views/notification_mailer/dossier_refused.text.erb deleted file mode 100644 index 2024297be..000000000 --- a/app/views/notification_mailer/dossier_refused.text.erb +++ /dev/null @@ -1,14 +0,0 @@ -Bonjour <%= @user.email %> - -votre dossier N°<%=@dossier.id%> déposé auprès de <%= @dossier.procedure.organisation %> a été refusé ce jour à <%= @dossier.updated_at %>. - -Pour en savoir plus sur le motif du refus, vous pouvez consulter le contenu de vos dossiers et les éventuels commentaires de l'administration à cette adresse : <%=users_dossier_recapitulatif_url(dossier_id: @dossier.id)%> - -Bonne journée, - ---- -Merci de ne pas répondre à ce mail. Postez directement vos questions dans votre dossier sur la plateforme. ---- - ---- -L'équide TPS - tps@apientreprise.fr \ No newline at end of file diff --git a/app/views/notification_mailer/dossier_submitted.text.erb b/app/views/notification_mailer/dossier_submitted.text.erb deleted file mode 100644 index 2357b8bbf..000000000 --- a/app/views/notification_mailer/dossier_submitted.text.erb +++ /dev/null @@ -1,12 +0,0 @@ -Bonjour <%= @user.email %> - -Nous vous confirmons que votre dossier N°<%=@dossier.id%> a été déposé auprès de <%= @dossier.procedure.organisation %> avec succès ce jour à <%= @dossier.updated_at %>. - -Bonne journée, - ---- -Merci de ne pas répondre à ce mail. Postez directement vos questions dans votre dossier sur la plateforme. ---- - ---- -L'équide TPS - tps@apientreprise.fr \ No newline at end of file diff --git a/app/views/notification_mailer/dossier_without_continuation.text.erb b/app/views/notification_mailer/dossier_without_continuation.text.erb deleted file mode 100644 index 73fe7d8e2..000000000 --- a/app/views/notification_mailer/dossier_without_continuation.text.erb +++ /dev/null @@ -1,14 +0,0 @@ -Bonjour <%= @user.email %> - -votre dossier N°<%=@dossier.id%> déposé auprès de <%= @dossier.procedure.organisation %> a été classé sans suite ce jour à <%= @dossier.updated_at %>. - -Pour en savoir plus sur les raisons de ce classement sans suite, vous pouvez consulter le contenu de vos dossiers et les éventuels commentaires de l'administration à cette adresse : <%=users_dossier_recapitulatif_url(dossier_id: @dossier.id)%> - -Bonne journée, - ---- -Merci de ne pas répondre à ce mail. Postez directement vos questions dans votre dossier sur la plateforme. ---- - ---- -L'équide TPS - tps@apientreprise.fr \ No newline at end of file diff --git a/app/views/notification_mailer/initiated_mail.html.erb b/app/views/notification_mailer/initiated_mail.html.erb deleted file mode 100644 index 5d29ae64b..000000000 --- a/app/views/notification_mailer/initiated_mail.html.erb +++ /dev/null @@ -1,11 +0,0 @@ -Bonjour, -
-
-Votre administration vous confirme la bonne réception de votre dossier n°--numero_dossier-- complet. Celui-ci sera instruit dans le délai légal déclaré par votre interlocuteur.
-
-En vous souhaitant une bonne journée, -
-
---- -
-L'équipe TPS diff --git a/app/views/notification_mailer/initiated_mail.html.haml b/app/views/notification_mailer/initiated_mail.html.haml new file mode 100644 index 000000000..5b008a02c --- /dev/null +++ b/app/views/notification_mailer/initiated_mail.html.haml @@ -0,0 +1,17 @@ +Bonjour +
+
+Votre administration vous confirme la bonne réception de votre dossier n°--numero_dossier--. +
+
+A tout moment, vous pouvez consulter le contenu de vos dossiers et les éventuels commentaires de l'administration à cette adresse : --lien_dossier-- +
+
+Bonne journée +
+
+\--- +
+Merci de ne pas répondre à ce mail. Postez directement vos questions dans votre dossier sur la plateforme. +
+\--- diff --git a/app/views/notification_mailer/received_mail.html.haml b/app/views/notification_mailer/received_mail.html.haml new file mode 100644 index 000000000..ea25ec013 --- /dev/null +++ b/app/views/notification_mailer/received_mail.html.haml @@ -0,0 +1,14 @@ +Bonjour +
+
+Votre administration vous confirme la bonne réception de votre dossier n°--numero_dossier--. Celui-ci sera instruit dans le délai légal déclaré par votre interlocuteur. +
+
+Bonne journée +
+
+\--- +
+Merci de ne pas répondre à ce mail. Postez directement vos questions dans votre dossier sur la plateforme. +
+\--- diff --git a/app/views/notification_mailer/refused_mail.html.haml b/app/views/notification_mailer/refused_mail.html.haml new file mode 100644 index 000000000..5ea109569 --- /dev/null +++ b/app/views/notification_mailer/refused_mail.html.haml @@ -0,0 +1,17 @@ +Bonjour +
+
+Votre dossier N°--numero_dossier-- a été refusé. +
+
+Pour en savoir plus sur le motif du refus, vous pouvez consulter le contenu de vos dossiers et les éventuels commentaires de l'administration à cette adresse : --lien_dossier-- +
+
+Bonne journée +
+
+\--- +
+Merci de ne pas répondre à ce mail. Postez directement vos questions dans votre dossier sur la plateforme. +
+\--- diff --git a/app/views/notification_mailer/without_continuation_mail.html.haml b/app/views/notification_mailer/without_continuation_mail.html.haml new file mode 100644 index 000000000..9acff2424 --- /dev/null +++ b/app/views/notification_mailer/without_continuation_mail.html.haml @@ -0,0 +1,17 @@ +Bonjour +
+
+Votre dossier N°--numero_dossier-- a été classé sans suite. +
+
+Pour en savoir plus sur les raisons de ce classement sans suite, vous pouvez consulter le contenu de vos dossiers et les éventuels commentaires de l'administration à cette adresse : --lien_dossier-- +
+
+Bonne journée +
+
+\--- +
+Merci de ne pas répondre à ce mail. Postez directement vos questions dans votre dossier sur la plateforme. +
+\--- diff --git a/db/migrate/20170306102116_create_received_mails.rb b/db/migrate/20170306102116_create_received_mails.rb new file mode 100644 index 000000000..dbe07a298 --- /dev/null +++ b/db/migrate/20170306102116_create_received_mails.rb @@ -0,0 +1,11 @@ +class CreateReceivedMails < ActiveRecord::Migration[5.0] + def change + create_table :received_mails do |t| + t.text :body + t.text :object + t.references :procedure, foreign_key: true + + t.timestamps + end + end +end diff --git a/db/migrate/20170306102238_create_closed_mails.rb b/db/migrate/20170306102238_create_closed_mails.rb new file mode 100644 index 000000000..11f6c07ed --- /dev/null +++ b/db/migrate/20170306102238_create_closed_mails.rb @@ -0,0 +1,11 @@ +class CreateClosedMails < ActiveRecord::Migration[5.0] + def change + create_table :closed_mails do |t| + t.text :body + t.text :object + t.belongs_to :procedure, index: true, unique: true, foreign_key: true + + t.timestamps + end + end +end diff --git a/db/migrate/20170306102256_create_refused_mails.rb b/db/migrate/20170306102256_create_refused_mails.rb new file mode 100644 index 000000000..527866530 --- /dev/null +++ b/db/migrate/20170306102256_create_refused_mails.rb @@ -0,0 +1,11 @@ +class CreateRefusedMails < ActiveRecord::Migration[5.0] + def change + create_table :refused_mails do |t| + t.text :body + t.text :object + t.belongs_to :procedure, index: true, unique: true, foreign_key: true + + t.timestamps + end + end +end diff --git a/db/migrate/20170306102320_create_without_continuation_mails.rb b/db/migrate/20170306102320_create_without_continuation_mails.rb new file mode 100644 index 000000000..da65dc8de --- /dev/null +++ b/db/migrate/20170306102320_create_without_continuation_mails.rb @@ -0,0 +1,11 @@ +class CreateWithoutContinuationMails < ActiveRecord::Migration[5.0] + def change + create_table :without_continuation_mails do |t| + t.text :body + t.text :object + t.belongs_to :procedure, index: true, unique: true, foreign_key: true + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 2b5f81ba3..1aff0250d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170302105557) do +ActiveRecord::Schema.define(version: 20170306102320) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -104,6 +104,15 @@ ActiveRecord::Schema.define(version: 20170302105557) do t.index ["type_de_champ_id"], name: "index_champs_on_type_de_champ_id", using: :btree end + create_table "closed_mails", force: :cascade do |t| + t.text "body" + t.text "object" + t.integer "procedure_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["procedure_id"], name: "index_closed_mails_on_procedure_id", using: :btree + end + create_table "commentaires", force: :cascade do |t| t.string "email" t.datetime "created_at", null: false @@ -343,6 +352,24 @@ ActiveRecord::Schema.define(version: 20170302105557) do t.integer "dossier_id" end + create_table "received_mails", force: :cascade do |t| + t.text "body" + t.text "object" + t.integer "procedure_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["procedure_id"], name: "index_received_mails_on_procedure_id", using: :btree + end + + create_table "refused_mails", force: :cascade do |t| + t.text "body" + t.text "object" + t.integer "procedure_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["procedure_id"], name: "index_refused_mails_on_procedure_id", using: :btree + end + create_table "rna_informations", force: :cascade do |t| t.string "association_id" t.string "titre" @@ -394,12 +421,25 @@ ActiveRecord::Schema.define(version: 20170302105557) do t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree end + create_table "without_continuation_mails", force: :cascade do |t| + t.text "body" + t.text "object" + t.integer "procedure_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["procedure_id"], name: "index_without_continuation_mails_on_procedure_id", using: :btree + end + add_foreign_key "cerfas", "dossiers" + add_foreign_key "closed_mails", "procedures" add_foreign_key "commentaires", "dossiers" add_foreign_key "dossiers", "users" add_foreign_key "initiated_mails", "procedures" add_foreign_key "procedure_paths", "administrateurs" add_foreign_key "procedure_paths", "procedures" + add_foreign_key "received_mails", "procedures" + add_foreign_key "refused_mails", "procedures" + add_foreign_key "without_continuation_mails", "procedures" create_view :searches, sql_definition: <<-SQL SELECT dossiers.id AS dossier_id, diff --git a/spec/models/concern/mail_template_concern_spec.rb b/spec/models/concern/mail_template_concern_spec.rb new file mode 100644 index 000000000..028a28f40 --- /dev/null +++ b/spec/models/concern/mail_template_concern_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe MailTemplateConcern do + describe '.replace_tags' do + let(:dossier) { create :dossier } + let(:initiated_mail) { InitiatedMail.default } + + it 'works' do + initiated_mail.object = '[TPS] --numero_dossier-- --libelle_procedure-- --lien_dossier--' + expected = + "[TPS] 1 Demande de subvention " + + "http://localhost:3000/users/dossiers/1/recapitulatif" + + expect(initiated_mail.object_for_dossier(dossier)).to eq(expected) + end + end +end