From 1b86493950321826930cb55f2716ba69be5ada40 Mon Sep 17 00:00:00 2001 From: Nicolas Bally Date: Fri, 7 Oct 2016 13:51:18 +0200 Subject: [PATCH] contacts --- app/assets/stylesheets/admin.css.scss | 1 + app/assets/stylesheets/admin/contacts.scss | 15 ++++ .../admin/contact_actions_controller.rb | 71 ++++++++++++++++++ app/controllers/admin/contacts_controller.rb | 11 ++- app/models/contact.rb | 2 + app/models/contact_action.rb | 5 ++ app/models/contact_action_pattern.rb | 2 + .../contact_actions/_contact_action.html.haml | 27 +++++++ app/views/admin/contact_actions/_form.haml | 15 ++++ .../admin/contact_actions/_show.html.haml | 63 ++++++++++++++++ app/views/admin/contact_actions/create.js.erb | 2 + .../admin/contact_actions/destroy.js.erb | 1 + app/views/admin/contact_actions/edit.haml | 4 + app/views/admin/contact_actions/edit.js.erb | 1 + .../admin/contact_actions/index.html.haml | 43 +++++++++++ app/views/admin/contact_actions/index.js.erb | 2 + app/views/admin/contact_actions/new.haml | 4 + app/views/admin/contact_actions/new.js.erb | 1 + .../admin/contact_actions/show.html.haml | 6 ++ app/views/admin/contact_actions/update.js.erb | 2 + app/views/admin/contacts/_contact.html.haml | 24 ++++-- app/views/admin/contacts/_form.haml | 2 + app/views/admin/contacts/index.html.haml | 12 ++- app/views/admin/contacts/show.html.haml | 30 +++++++- public/provenance/1.png | Bin 0 -> 30371 bytes test/fixtures/contact_action_patterns.yml | 9 +++ test/fixtures/contact_actions.yml | 15 ++++ test/models/contact_action_pattern_test.rb | 7 ++ test/models/contact_action_test.rb | 7 ++ 29 files changed, 369 insertions(+), 15 deletions(-) create mode 100644 app/assets/stylesheets/admin/contacts.scss create mode 100644 app/controllers/admin/contact_actions_controller.rb create mode 100644 app/models/contact_action.rb create mode 100644 app/models/contact_action_pattern.rb create mode 100644 app/views/admin/contact_actions/_contact_action.html.haml create mode 100644 app/views/admin/contact_actions/_form.haml create mode 100644 app/views/admin/contact_actions/_show.html.haml create mode 100644 app/views/admin/contact_actions/create.js.erb create mode 100644 app/views/admin/contact_actions/destroy.js.erb create mode 100644 app/views/admin/contact_actions/edit.haml create mode 100644 app/views/admin/contact_actions/edit.js.erb create mode 100644 app/views/admin/contact_actions/index.html.haml create mode 100644 app/views/admin/contact_actions/index.js.erb create mode 100644 app/views/admin/contact_actions/new.haml create mode 100644 app/views/admin/contact_actions/new.js.erb create mode 100644 app/views/admin/contact_actions/show.html.haml create mode 100644 app/views/admin/contact_actions/update.js.erb create mode 100644 public/provenance/1.png create mode 100644 test/fixtures/contact_action_patterns.yml create mode 100644 test/fixtures/contact_actions.yml create mode 100644 test/models/contact_action_pattern_test.rb create mode 100644 test/models/contact_action_test.rb diff --git a/app/assets/stylesheets/admin.css.scss b/app/assets/stylesheets/admin.css.scss index 59ad8a1..4dc6367 100644 --- a/app/assets/stylesheets/admin.css.scss +++ b/app/assets/stylesheets/admin.css.scss @@ -11,6 +11,7 @@ @import "vendor/select2"; @import "admin/topics"; +@import "admin/contacts"; #admin_navbar{ border-radius:0px; diff --git a/app/assets/stylesheets/admin/contacts.scss b/app/assets/stylesheets/admin/contacts.scss new file mode 100644 index 0000000..57761f5 --- /dev/null +++ b/app/assets/stylesheets/admin/contacts.scss @@ -0,0 +1,15 @@ +#contact_actions{ + margin-top:50px; + + .contact_action{ + margin-bottom:50px; + padding:20px; + border:2px solid black; + + .name{ + float:right; + + } + } + +} \ No newline at end of file diff --git a/app/controllers/admin/contact_actions_controller.rb b/app/controllers/admin/contact_actions_controller.rb new file mode 100644 index 0000000..caa6917 --- /dev/null +++ b/app/controllers/admin/contact_actions_controller.rb @@ -0,0 +1,71 @@ +class Admin::ContactActionsController < ApplicationController + layout "admin" + + before_filter :auth_admin + + def index + + @contact_actions = ContactAction.order("created_at DESC").all + end + + + def show + @contact_action = ContactAction.find(params[:id]) + + @contact_action_actions = @contact_action.contact_action_actions + + end + + + def new + @contact_action = ContactAction.new(:contact_id => params[:contact_id],:admin_id => current_admin.id, :action_at => Time.now) + + end + + def edit + @contact_action = ContactAction.find(params[:id]) + @contact_action.action_at = @contact_action.action_at.in_time_zone("Paris") + end + + def create + @contact_action = ContactAction.new(contact_action_params) + @contact = @contact_action.contact + + if @contact_action.save + @contact_actions = @contact.contact_actions.order("action_at DESC").all + else + render :action => "new" + end + end + + def update + @contact_action = ContactAction.find(params[:id]) + @contact = @contact_action.contact + + if @contact_action.update_attributes(contact_action_params) + @contact_actions = @contact.contact_actions.order("action_at DESC").all + else + render :action => "edit" + end + + end + + + + def destroy + @contact_action = ContactAction.find(params[:id]) + + @contact_action.destroy + @contact = @contact_action.contact + @contact_actions = @contact.contact_actions.order("action_at DESC").all + + end + + private + def contact_action_params + params.require(:contact_action).permit! + end + + + +end diff --git a/app/controllers/admin/contacts_controller.rb b/app/controllers/admin/contacts_controller.rb index 0acb1bc..d1602ae 100644 --- a/app/controllers/admin/contacts_controller.rb +++ b/app/controllers/admin/contacts_controller.rb @@ -5,7 +5,14 @@ class Admin::ContactsController < ApplicationController def index - @contacts = Contact.order("created_at DESC").all + @contacts = Contact.order("created_at DESC") + + if params[:archived] + @contacts = @contacts.where(:archived => true) + else + @contacts = @contacts.where("archived IS NULL or archived = 0") + end + end @@ -16,6 +23,8 @@ class Admin::ContactsController < ApplicationController @contact.readed = true @contact.save end + + @contact_actions = @contact.contact_actions end diff --git a/app/models/contact.rb b/app/models/contact.rb index ea4833f..08b528e 100644 --- a/app/models/contact.rb +++ b/app/models/contact.rb @@ -1,5 +1,7 @@ class Contact < ActiveRecord::Base + belongs_to :admin + has_many :contact_actions validates :name, :presence => true validates :email, :presence => true, :format => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i validates :message, :presence => true diff --git a/app/models/contact_action.rb b/app/models/contact_action.rb new file mode 100644 index 0000000..831d5b6 --- /dev/null +++ b/app/models/contact_action.rb @@ -0,0 +1,5 @@ +class ContactAction < ActiveRecord::Base + belongs_to :contact + belongs_to :admin + belongs_to :contact_action_pattern +end diff --git a/app/models/contact_action_pattern.rb b/app/models/contact_action_pattern.rb new file mode 100644 index 0000000..01118c8 --- /dev/null +++ b/app/models/contact_action_pattern.rb @@ -0,0 +1,2 @@ +class ContactActionPattern < ActiveRecord::Base +end diff --git a/app/views/admin/contact_actions/_contact_action.html.haml b/app/views/admin/contact_actions/_contact_action.html.haml new file mode 100644 index 0000000..801d5be --- /dev/null +++ b/app/views/admin/contact_actions/_contact_action.html.haml @@ -0,0 +1,27 @@ +.contact_action#contact_action{:id => contact_action.id, :style => "border-color:#{contact_action.admin.color};"} + %p.name + + -if contact_action.contact.admin + %span{:style => "background:#{contact_action.admin.color};padding:5px 10px;color:white"} + =contact_action.admin.username + %p + =l contact_action.action_at + + %p + %strong + -if contact_action.contact_action_pattern + =contact_action.contact_action_pattern.title + + %p + = contact_action.action_message + + .actions + + + = link_to i(:"trash-o"), [:admin, contact_action], :confirm => 'Voulez-vous vraiment supprimer cette action ?', :method => :delete, :remote => true + + = link_to i(:pencil), edit_admin_contact_action_path(contact_action), :remote => true + + + + diff --git a/app/views/admin/contact_actions/_form.haml b/app/views/admin/contact_actions/_form.haml new file mode 100644 index 0000000..45bb293 --- /dev/null +++ b/app/views/admin/contact_actions/_form.haml @@ -0,0 +1,15 @@ += semantic_form_for [:admin, @contact_action], :remote => true do |f| + .content + =f.hidden_field :contact_id + =f.inputs do + = f.input :contact_action_pattern_id, :label => "Action", :collection => (ContactActionPattern.all.map{|u|[ u.title, u.id]}), :as => :select, :include_blank => false + = f.input :action_at, :label => "Date", :as =>:qi_datetime_picker + = f.input :admin_id, :label => "Par ?", :collection => (Admin.where(:contact_role => true).all.map{|u|[ u.username, u.id]}), :as => :select + + = f.input :action_message, :label => "Message" + + + .actions + =f.submit "Sauvegarder", :class => "btn btn-primary" + + \ No newline at end of file diff --git a/app/views/admin/contact_actions/_show.html.haml b/app/views/admin/contact_actions/_show.html.haml new file mode 100644 index 0000000..7478512 --- /dev/null +++ b/app/views/admin/contact_actions/_show.html.haml @@ -0,0 +1,63 @@ + +%table.table + %tr + %td + Date + %td + =l @contact.created_at + %tr + %td + Nom + %td + =@contact.name + %tr + %td + Email + %td + =@contact.email + %tr + %td + Téléphone + %td + =@contact.tel + %tr + %td + Lieu + %td + =@contact.place + + + +%hr + =simple_format @contact.message +%hr + + +%table.table + %tr + %td + Adresse + %td + =@contact.address + %tr + %td + Adresse suite + %td + =@contact.address2 + %tr + %td + Ville + %td + =@contact.cp + =@contact.city + + %tr + %td + Pays + + %td + =@contact.country + +%hr + =simple_format @contact.notes +%hr \ No newline at end of file diff --git a/app/views/admin/contact_actions/create.js.erb b/app/views/admin/contact_actions/create.js.erb new file mode 100644 index 0000000..7586aaf --- /dev/null +++ b/app/views/admin/contact_actions/create.js.erb @@ -0,0 +1,2 @@ +$('#contact_actions').html("<%= escape_javascript(render(@contact_actions))%>"); +close_pane_hover(); \ No newline at end of file diff --git a/app/views/admin/contact_actions/destroy.js.erb b/app/views/admin/contact_actions/destroy.js.erb new file mode 100644 index 0000000..e112011 --- /dev/null +++ b/app/views/admin/contact_actions/destroy.js.erb @@ -0,0 +1 @@ +$('#contact_action_<%= @contact_action.id %>').remove(); \ No newline at end of file diff --git a/app/views/admin/contact_actions/edit.haml b/app/views/admin/contact_actions/edit.haml new file mode 100644 index 0000000..015bb4e --- /dev/null +++ b/app/views/admin/contact_actions/edit.haml @@ -0,0 +1,4 @@ +.container + %h1 Modifier une fiche étudiant + + =render :partial => "form" \ No newline at end of file diff --git a/app/views/admin/contact_actions/edit.js.erb b/app/views/admin/contact_actions/edit.js.erb new file mode 100644 index 0000000..6c8f015 --- /dev/null +++ b/app/views/admin/contact_actions/edit.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",700,900); \ No newline at end of file diff --git a/app/views/admin/contact_actions/index.html.haml b/app/views/admin/contact_actions/index.html.haml new file mode 100644 index 0000000..f151858 --- /dev/null +++ b/app/views/admin/contact_actions/index.html.haml @@ -0,0 +1,43 @@ += link_to 'Ajouter une action', new_admin_contact_action_path, :class => "btn btn-primary", :style => "float:right;", :remote => true + + +%h1 Liste des contact_actions + + +%table.table.table-hover + %thead#Admin_rows_header.rows_header + + %tr + %td + %td + Date + %td + Nom + %td + Coordonnées + + + %td Géré par + + %td{:style => "width:150px"} +   + + + + + %tbody#admin_rows.rows + + =render @contact_actions + + + + + + + + + + + + + diff --git a/app/views/admin/contact_actions/index.js.erb b/app/views/admin/contact_actions/index.js.erb new file mode 100644 index 0000000..6a4e08d --- /dev/null +++ b/app/views/admin/contact_actions/index.js.erb @@ -0,0 +1,2 @@ + +$('#Admin_index_block').replaceWith("<%= escape_javascript(render(:partial => "index_block")) %>"); \ No newline at end of file diff --git a/app/views/admin/contact_actions/new.haml b/app/views/admin/contact_actions/new.haml new file mode 100644 index 0000000..198f5a5 --- /dev/null +++ b/app/views/admin/contact_actions/new.haml @@ -0,0 +1,4 @@ +.container + %h1 Ajouter une action + + =render :partial => "form" \ No newline at end of file diff --git a/app/views/admin/contact_actions/new.js.erb b/app/views/admin/contact_actions/new.js.erb new file mode 100644 index 0000000..6c8f015 --- /dev/null +++ b/app/views/admin/contact_actions/new.js.erb @@ -0,0 +1 @@ +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",700,900); \ No newline at end of file diff --git a/app/views/admin/contact_actions/show.html.haml b/app/views/admin/contact_actions/show.html.haml new file mode 100644 index 0000000..dc76093 --- /dev/null +++ b/app/views/admin/contact_actions/show.html.haml @@ -0,0 +1,6 @@ += link_to i(:pencil), edit_admin_contact_path(@contact), :remote => true += link_to "retour", admin_contacts_path(), :class => "btn btn-primary" +#show=render :partial => "show" + + + diff --git a/app/views/admin/contact_actions/update.js.erb b/app/views/admin/contact_actions/update.js.erb new file mode 100644 index 0000000..7586aaf --- /dev/null +++ b/app/views/admin/contact_actions/update.js.erb @@ -0,0 +1,2 @@ +$('#contact_actions').html("<%= escape_javascript(render(@contact_actions))%>"); +close_pane_hover(); \ No newline at end of file diff --git a/app/views/admin/contacts/_contact.html.haml b/app/views/admin/contacts/_contact.html.haml index d8f17ed..d30753f 100644 --- a/app/views/admin/contacts/_contact.html.haml +++ b/app/views/admin/contacts/_contact.html.haml @@ -1,23 +1,31 @@ -%tr.vertical_center.contact#contact{:id => contact.id, :class => ("success" if !contact.readed)} - +%tr.vertical_center.contact#contact{:id => contact.id} + %td{:style => "vertical-align:middle;"} + =image_tag "/provenance/#{contact.provenance_id}.png", :style => "width:20px;border-radius:50%;box-shadow:0 0 3px rgba(0,0,0,0.5)" + %td{:style => "vertical-align:middle;"} + -if !contact.readed + %span{:style => "display:inline-block;width:10px;height:10px;border-radius:50%;background:#00B3EC"} + %td =l contact.created_at %td =contact.name %td =contact.email - %td + %br =contact.tel - - %td.actions + %td + -if contact.admin + %span{:style => "background:#{contact.admin.color};padding:5px 10px;color:white"} + =contact.admin.username + %td.actions{:style => "width:430px;text-align:right;"} - = link_to i(:"trash-o"), [:admin, contact], :confirm => 'Voulez-vous vraiment supprimer cet utilisateur ?', :method => :delete, :remote => true + = link_to ic(:"trash-o"), [:admin, contact], :confirm => 'Voulez-vous vraiment supprimer cet utilisateur ?', :method => :delete, :remote => true, :class => "btn btn-danger" - = link_to i(:pencil), edit_admin_contact_path(contact), :remote => true + = link_to ic(:pencil)+" modifier / attribuer la fiche", edit_admin_contact_path(contact), :remote => true, :class => "btn btn-warning" - = link_to i(:eye), [:admin, contact] + = link_to ic(:eye)+ " détail de la fiche ", [:admin, contact], :class => "btn btn-primary" diff --git a/app/views/admin/contacts/_form.haml b/app/views/admin/contacts/_form.haml index 5fc4cb3..975f03e 100644 --- a/app/views/admin/contacts/_form.haml +++ b/app/views/admin/contacts/_form.haml @@ -2,6 +2,8 @@ .content =f.inputs do = f.input :readed, :label => "Lu ?" + = f.input :admin_id, :label => "Géré par ?", :collection => (Admin.where(:contact_role => true).all.map{|u|[ u.username, u.id]}), :as => :select + = f.input :archived, :label => "Archivé ?" = f.input :name, :label => "Nom" = f.input :email, :label => "Email" = f.input :tel, :label => "Téléphone" diff --git a/app/views/admin/contacts/index.html.haml b/app/views/admin/contacts/index.html.haml index de753b7..238a958 100644 --- a/app/views/admin/contacts/index.html.haml +++ b/app/views/admin/contacts/index.html.haml @@ -3,22 +3,26 @@ %h1 Liste des contacts +%p + =link_to "Actifs", admin_contacts_path + + =link_to "Archivés", admin_contacts_path(:archived => true) %table.table.table-hover %thead#Admin_rows_header.rows_header %tr + %td + %td %td Date %td Nom %td - Email - %td - Tel + Coordonnées - + %td Géré par %td{:style => "width:150px"}   diff --git a/app/views/admin/contacts/show.html.haml b/app/views/admin/contacts/show.html.haml index dc76093..c332ad9 100644 --- a/app/views/admin/contacts/show.html.haml +++ b/app/views/admin/contacts/show.html.haml @@ -1,6 +1,32 @@ -= link_to i(:pencil), edit_admin_contact_path(@contact), :remote => true -= link_to "retour", admin_contacts_path(), :class => "btn btn-primary" +.right + = link_to "retour", admin_contacts_path(), :class => "btn btn-primary" + = link_to ic(:pencil)+" modifier / attribuer la fiche", edit_admin_contact_path(@contact), :remote => true, :class => "btn btn-warning" +%br +%br #show=render :partial => "show" += link_to 'Ajouter une action', new_admin_contact_action_path(:contact_id => @contact.id, :test => "test"), :class => "btn btn-success", :style => "float:right;", :remote => true + + +%h2 Interactions + + +#contact_actions + =render @contact_actions + + + + + + + + + + + + + + + diff --git a/public/provenance/1.png b/public/provenance/1.png new file mode 100644 index 0000000000000000000000000000000000000000..21a10730448af007aab0d857c12456eb3b0de472 GIT binary patch literal 30371 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