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