Activity Monitor + Video size + Changes imposed by Daniel
This commit is contained in:
parent
4fae39de24
commit
8538404a9a
@ -56,6 +56,7 @@ content_type_to_move =false
|
||||
|
||||
$(document).ready ->
|
||||
|
||||
|
||||
$(document).on 'click', 'input.datepicker', ->
|
||||
$(this).datetimepicker(
|
||||
language: 'fr'
|
||||
@ -397,6 +398,3 @@ $(document).on "click", "#menu_item_informations .save", ->
|
||||
$(document).on "click", "#menu_item_informations h4", ->
|
||||
$(this).next(".panel").toggle()
|
||||
return false
|
||||
|
||||
|
||||
|
||||
|
2
app/assets/javascripts/bootstrap.js
vendored
2
app/assets/javascripts/bootstrap.js
vendored
@ -2,7 +2,7 @@
|
||||
//= require bootstrap/alert
|
||||
//= require bootstrap/button
|
||||
//= require bootstrap/carousel
|
||||
|
||||
//= require bootstrap/collapse
|
||||
//= require bootstrap/dropdown
|
||||
//= require bootstrap/tab
|
||||
//= require bootstrap/transition
|
||||
|
@ -691,3 +691,10 @@ height: 100%;
|
||||
cursor: inherit;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.mfp-iframe-holder .mfp-content {
|
||||
|
||||
width: 90%;
|
||||
max-width: 100%;
|
||||
|
||||
}
|
||||
|
@ -20,6 +20,16 @@ class Admin::CustomersController < ApplicationController
|
||||
end
|
||||
|
||||
|
||||
def connected_customers
|
||||
|
||||
@customers_5m = Customer.where("last_activity > ?", DateTime.now - 5.minutes)
|
||||
@customers_1h = Customer.where("last_activity > ?", DateTime.now - 1.hour)
|
||||
@customers_24h = Customer.where("last_activity > ?", DateTime.now - 24.hours)
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
def show
|
||||
@customer = Customer.find(params[:id])
|
||||
end
|
||||
|
@ -68,7 +68,7 @@ class Admin::NeedsController < ApplicationController
|
||||
|
||||
def download_devis
|
||||
@need = Need.find(params[:need_id])
|
||||
send_file @need.devis.file.path, :filename => "devis-need-#{@need.id}.#{@need.devis.file.extension}"
|
||||
send_file @need.devis.file.path, :filename => "proposition-besoin-#{@need.id}.#{@need.devis.file.extension}"
|
||||
end
|
||||
|
||||
def create
|
||||
@ -150,7 +150,7 @@ class Admin::NeedsController < ApplicationController
|
||||
def accept
|
||||
@need = Need.find(params[:id])
|
||||
if @need.offers.length < 1
|
||||
flash[:error] = "Vous devez créer au moins une proposition avant de passer ce besoin en négocié"
|
||||
flash[:error] = "Vous devez créer au moins une offre avant de passer ce besoin en négocié"
|
||||
else
|
||||
if @need.accept!
|
||||
flash[:notice] = "Le besoin est maintenant négocié"
|
||||
|
@ -65,7 +65,7 @@ class Admin::OffersController < ApplicationController
|
||||
@offer = Offer.new(offer_params)
|
||||
if @offer.save
|
||||
@need.offers << @offer
|
||||
flash[:notice] = "Proposition créée avec succès."
|
||||
flash[:notice] = "Offre créée avec succès."
|
||||
@offer.validate!
|
||||
redirect_to admin_need_offers_path(@need)
|
||||
else
|
||||
@ -83,7 +83,7 @@ class Admin::OffersController < ApplicationController
|
||||
def update
|
||||
@offer = Offer.find(params[:id])
|
||||
if @offer.update_attributes(offer_params)
|
||||
flash[:notice] = "Proposition modifiée avec succès."
|
||||
flash[:notice] = "Offre modifiée avec succès."
|
||||
if params[:need_id]
|
||||
@need = Need.find(params[:need_id])
|
||||
redirect_to admin_need_offers_path(@need)
|
||||
@ -99,9 +99,9 @@ class Admin::OffersController < ApplicationController
|
||||
@offer = Offer.find(params[:id])
|
||||
|
||||
if(@offer.destroy)
|
||||
flash[:notice] = "Proposition supprimée avec succès."
|
||||
flash[:notice] = "Offre supprimée avec succès."
|
||||
else
|
||||
flash[:error] = "Impossible de supprimer cette proposition"
|
||||
flash[:error] = "Impossible de supprimer cette offre"
|
||||
end
|
||||
|
||||
if params[:need_id]
|
||||
|
@ -16,6 +16,9 @@ class ApplicationController < ActionController::Base
|
||||
if !current_customer
|
||||
session[:before_auth_url] = request.url
|
||||
redirect_to new_public_customers_auth_path(:p => params[:p], :for_annonce => (true if params[:controller] == "public/annonces"))
|
||||
else
|
||||
@current_customer.last_activity = DateTime.now
|
||||
@current_customer.save
|
||||
end
|
||||
end
|
||||
|
||||
@ -43,6 +46,7 @@ class ApplicationController < ActionController::Base
|
||||
a_c = Customer.find_by_token(cookies[:customer_auth_token])
|
||||
if !a_c.lock
|
||||
@current_customer = a_c
|
||||
|
||||
else
|
||||
cookies[:customer_auth_token] = nil
|
||||
nil
|
||||
|
@ -7,7 +7,7 @@ class Public::AcceptedOffersController < ApplicationController
|
||||
def download_devis
|
||||
@accepted_offer = AcceptedOffer.find(params[:id])
|
||||
if(@accepted_offer.customer.id != current_customer.id)
|
||||
flash[:error] = "Vous n'avez pas la permission de télécharger ce devis"
|
||||
flash[:error] = "Vous n'avez pas la permission de télécharger cette offre"
|
||||
redirect_back_or_default :root
|
||||
else
|
||||
@accepted_offer.state = :devis_downloaded
|
||||
|
@ -78,7 +78,7 @@ class Public::NeedsController < ApplicationController
|
||||
return redirect_to :back
|
||||
end
|
||||
|
||||
send_file @need.devis.file.path, filename: "devis-need-#{@need.id}.#{@need.devis.file.extension}"
|
||||
send_file @need.devis.file.path, filename: "proposition-need-#{@need.id}.#{@need.devis.file.extension}"
|
||||
end
|
||||
|
||||
|
||||
@ -117,8 +117,9 @@ class Public::NeedsController < ApplicationController
|
||||
def create
|
||||
@need = Need.new(need_params)
|
||||
@need.author = current_customer
|
||||
if !@need.devis?
|
||||
flash[:error] = "Vous devez joindre un devis au format PDF"
|
||||
|
||||
if !@need.devis? && !@need.note?
|
||||
flash[:error] = "Vous devez joindre une proposition au format PDF ou au moins préciser son prix dans le champ d'information"
|
||||
return render :action => "new"
|
||||
end
|
||||
|
||||
|
@ -7,7 +7,7 @@ class Public::OffersController < ApplicationController
|
||||
|
||||
def accept
|
||||
if @offer.customers.include?(current_customer)
|
||||
flash[:error] = "Vous avez déjà accepter cette proposition"
|
||||
flash[:error] = "Vous avez déjà accepter cette offre"
|
||||
return redirect_back_or_default :root
|
||||
end
|
||||
@accepted_offer = AcceptedOffer.new
|
||||
@ -15,7 +15,7 @@ class Public::OffersController < ApplicationController
|
||||
@accepted_offer.offer = @offer
|
||||
|
||||
@document = Document.new
|
||||
@document.title = "Proposition"
|
||||
@document.title = "Offre"
|
||||
@accepted_offer.documents << @document
|
||||
|
||||
if @accepted_offer.save
|
||||
@ -26,7 +26,7 @@ class Public::OffersController < ApplicationController
|
||||
|
||||
CustomerMailer.offer_accepted(current_customer, @accepted_offer).deliver
|
||||
|
||||
flash[:notice] = "Proposition acceptée avec succès !"
|
||||
flash[:notice] = "Offre acceptée avec succès !"
|
||||
|
||||
|
||||
|
||||
|
@ -87,7 +87,7 @@ class Public::WishesController < ApplicationController
|
||||
return redirect_to :back
|
||||
end
|
||||
|
||||
send_file @wish.devis.file.path, filename: "devis-need-#{@need.id}.#{@wish.devis.file.extension}"
|
||||
send_file @wish.devis.file.path, filename: "proposition-need-#{@need.id}.#{@wish.devis.file.extension}"
|
||||
end
|
||||
|
||||
|
||||
|
@ -78,21 +78,21 @@ class CustomerMailer < ApplicationMailer
|
||||
def offer_accepted(customer, accepted_offer)
|
||||
@accepted_offer = accepted_offer
|
||||
@customer = customer
|
||||
mail to: @customer.email, :subject => "Vous avez accepté une proposition"
|
||||
mail to: @customer.email, :subject => "Vous avez accepté une offre"
|
||||
end
|
||||
|
||||
|
||||
def document_available(customer, document)
|
||||
@document = document
|
||||
@customer = customer
|
||||
mail to: @customer.email, :subject => "Document disponible pour la proposition #{@document.accepted_offer.offer.need.title}"
|
||||
mail to: @customer.email, :subject => "Document disponible pour l'offre #{@document.accepted_offer.offer.need.title}"
|
||||
end
|
||||
|
||||
|
||||
def document_verified(customer, document)
|
||||
@document = document
|
||||
@customer = customer
|
||||
mail to: @customer.email, :subject => "Document vérifié pour la proposition #{@document.accepted_offer.offer.need.title}"
|
||||
mail to: @customer.email, :subject => "Document vérifié pour l'offre #{@document.accepted_offer.offer.need.title}"
|
||||
end
|
||||
|
||||
|
||||
|
@ -4,7 +4,7 @@ class Wish < ActiveRecord::Base
|
||||
|
||||
mount_uploader :devis, WishDevisUploader
|
||||
|
||||
validates :devis, :presence => true
|
||||
validates :note, presence: true, if: "!devis?"
|
||||
validates :need, :presence => true
|
||||
validates :customer, :presence => true
|
||||
end
|
||||
|
23
app/views/admin/customers/_connected_customers.html.haml
Normal file
23
app/views/admin/customers/_connected_customers.html.haml
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
|
||||
%tr#customer_row
|
||||
%td
|
||||
= link_to "#{customer.firstname} #{customer.name} ",edit_admin_customer_path(customer)
|
||||
%td
|
||||
= link_to customer.organisation, edit_admin_customer_path(customer)
|
||||
|
||||
%td
|
||||
-if customer.phone?
|
||||
= i("phone") + " #{customer.phone}"
|
||||
%td
|
||||
=customer.city
|
||||
|
||||
%td
|
||||
=link_to customer.email, "mailto:#{customer.email}"
|
||||
%td
|
||||
=customer.last_activity
|
||||
="(Il y a #{time_ago_in_words(customer.last_activity)})"
|
||||
|
||||
|
||||
%td.actions{:style => "width:150px;text-align:right;"}
|
||||
=link_to i(:"comments"), admin_conversation_path(customer)
|
@ -21,6 +21,7 @@
|
||||
|
||||
|
||||
%td.actions{:style => "width:150px;text-align:right;"}
|
||||
=link_to i(:"comments"), admin_conversation_path(customer)
|
||||
= link_to i(:"trash-o"), [:admin, customer], :data => {:confirm => 'Voulez-vous vraiment supprimer ce compte utilisateur ?'}, :method => :delete, :remote => true
|
||||
=# link_to i(:eye), [:admin, customer]
|
||||
= link_to i(:pencil), edit_admin_customer_path(customer)
|
||||
|
82
app/views/admin/customers/connected_customers.html.haml
Normal file
82
app/views/admin/customers/connected_customers.html.haml
Normal file
@ -0,0 +1,82 @@
|
||||
%h1 Moniteur d'activité
|
||||
|
||||
%h3 Utilisateurs actifs ces 5 dernières minutes
|
||||
|
||||
%table.table.table-hover.table-striped.customer_table
|
||||
%thead#customer_rows_header.rows_header
|
||||
|
||||
%tr
|
||||
%th
|
||||
Prénom/Nom
|
||||
%th
|
||||
Société
|
||||
%th
|
||||
Téléphone
|
||||
%th
|
||||
Ville
|
||||
%th
|
||||
Email
|
||||
|
||||
%th
|
||||
Dernière activité
|
||||
%th
|
||||
|
||||
%tbody#customer_rows.rows
|
||||
|
||||
=render partial: "admin/customers/connected_customers", collection: @customers_5m, as: :customer
|
||||
|
||||
|
||||
%h3 Utilisateurs ayant été actifs durant ces 60 dernières minutes
|
||||
|
||||
%table.table.table-hover.table-striped.customer_table
|
||||
%thead#customer_rows_header.rows_header
|
||||
|
||||
%tr
|
||||
%th
|
||||
Prénom/Nom
|
||||
%th
|
||||
Société
|
||||
%th
|
||||
Téléphone
|
||||
%th
|
||||
Ville
|
||||
%th
|
||||
Email
|
||||
|
||||
%th
|
||||
Dernière activité
|
||||
%th
|
||||
|
||||
%tbody#customer_rows.rows
|
||||
|
||||
=render partial: "admin/customers/connected_customers", collection: @customers_1h, as: :customer
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
%h3 Utilisateurs ayant été actifs au cours de ces dernières 24 heures
|
||||
|
||||
|
||||
%table.table.table-hover.table-striped.customer_table
|
||||
%thead#customer_rows_header.rows_header
|
||||
|
||||
%tr
|
||||
%th
|
||||
Prénom/Nom
|
||||
%th
|
||||
Société
|
||||
%th
|
||||
Téléphone
|
||||
%th
|
||||
Ville
|
||||
%th
|
||||
Email
|
||||
|
||||
%th
|
||||
Dernière activité
|
||||
%th
|
||||
|
||||
%tbody#customer_rows.rows
|
||||
|
||||
=render partial: "admin/customers/connected_customers", collection: @customers_24h, as: :customer
|
@ -11,7 +11,7 @@
|
||||
=f.input :description, :label => "Description : ", :rows => 5, :input_html => {:style => "height:100px;"}
|
||||
=f.input :image_file_id, :label => "Image", :as => :qi_image_select
|
||||
=f.input :author, :label => "Auteur", include_blank: "Administrateur"
|
||||
= f.input :note, :label => "Informations supplémentaires pour Négos", :rows => 5, :input_html => {:style => "height:100px;"}
|
||||
-#= f.input :note, :label => "Informations supplémentaires pour Négos (Si vous n'avez pas attaché de proposition, merci de préciser son prix dans ce champ)", :rows => 5, :input_html => {:style => "height:100px;"}
|
||||
|
||||
.actions
|
||||
= f.submit "Sauvegarder", :class => "btn btn-primary"
|
||||
|
@ -15,10 +15,10 @@
|
||||
|
||||
%td.actions{:style => "width:150px;text-align:right"}
|
||||
-if @need
|
||||
= link_to i(:"cog"), accepted_admin_offer_path(offer), title: "Gérer les propositions par client"
|
||||
= link_to i(:"trash"), [:admin,@need, offer], :data => {:confirm => 'Voulez-vous vraiment supprimer cette proposition ?'}, :method => :delete
|
||||
= link_to i(:"cog"), accepted_admin_offer_path(offer), title: "Gérer les offres par client"
|
||||
= link_to i(:"trash"), [:admin,@need, offer], :data => {:confirm => 'Voulez-vous vraiment supprimer cette offre ?'}, :method => :delete
|
||||
= link_to i(:pencil), edit_admin_need_offer_path(@need, offer)
|
||||
-else
|
||||
= link_to i(:"cog"), accepted_admin_offer_path(offer), title: "Gérer les propositions par client"
|
||||
= link_to i(:"trash"), [:admin, offer], :data => {:confirm => 'Voulez-vous vraiment supprimer cette proposition ?'}, :method => :delete
|
||||
= link_to i(:"cog"), accepted_admin_offer_path(offer), title: "Gérer les offres par client"
|
||||
= link_to i(:"trash"), [:admin, offer], :data => {:confirm => 'Voulez-vous vraiment supprimer cette offre ?'}, :method => :delete
|
||||
= link_to i(:pencil), edit_admin_offer_path(offer)
|
||||
|
@ -1,5 +1,5 @@
|
||||
%h1
|
||||
= "Gestion des propositions par client pour le besoin "
|
||||
= "Gestion des offres par client pour le besoin "
|
||||
<strong>
|
||||
= @offer.need.title
|
||||
</strong>
|
||||
@ -10,7 +10,7 @@
|
||||
=pluralize(@offer.need.wishes.length, "Personne")
|
||||
</strong>
|
||||
%h4
|
||||
= "Propositions acceptées: "
|
||||
= "Offres acceptées: "
|
||||
<strong>
|
||||
=pluralize(@offer.accepted_offers.length, "Personne")
|
||||
</strong>
|
||||
@ -37,7 +37,7 @@
|
||||
%th
|
||||
Email
|
||||
%th{style:"text-align:center"}
|
||||
Propositions acceptée?
|
||||
Offres acceptée?
|
||||
%th{style:"text-align:center"}
|
||||
Documents
|
||||
%th{style:"text-align:center"}
|
||||
|
@ -1,4 +1,4 @@
|
||||
%h1
|
||||
Modifier une proposition
|
||||
Modifier une offre
|
||||
|
||||
=render :partial => "form"
|
||||
|
@ -1,33 +1,33 @@
|
||||
-if @need
|
||||
%h1
|
||||
Gestion des propositions pour le besoin
|
||||
Gestion des offres pour le besoin
|
||||
%strong= @need.title
|
||||
%p.alert.alert-info
|
||||
Seul les propositions concernant le besoin
|
||||
Seul les offres concernant le besoin
|
||||
%strong= @need.title
|
||||
sont affichées sur cette page.
|
||||
%br
|
||||
Pour voir toutes les propositions, aller dans l'onglet
|
||||
%strong Gestion des propositions
|
||||
Pour voir toutes les offres, aller dans l'onglet
|
||||
%strong Gestion des offres
|
||||
depuis la barre de navigation
|
||||
-else
|
||||
%h1
|
||||
Gestion des propositions
|
||||
Gestion des offres
|
||||
%p.alert.alert-info
|
||||
Cette page affiche toutes les propositions existantes.
|
||||
Cette page affiche toutes les offres existantes.
|
||||
%br
|
||||
Pour créer une proposition, il faut d'abord choisir un besoin. Pour cela, passer par l'onglet
|
||||
Pour créer une offre, il faut d'abord choisir un besoin. Pour cela, passer par l'onglet
|
||||
%strong Gestion des besoins
|
||||
puis cliquer sur le bouton
|
||||
%strong= ic(:gift)
|
||||
en face du besoin de votre choix.
|
||||
|
||||
-if @offers.length < 1
|
||||
Aucune proposition actuellement
|
||||
Aucune offre actuellement
|
||||
-if @need
|
||||
%br
|
||||
%br
|
||||
=link_to "Ajouter une proposition", new_admin_need_offer_path(@need),class:"btn btn-primary"
|
||||
=link_to "Ajouter une offre", new_admin_need_offer_path(@need),class:"btn btn-primary"
|
||||
%br
|
||||
-else
|
||||
.row
|
||||
@ -38,7 +38,7 @@
|
||||
|
||||
%tr
|
||||
%th
|
||||
Besoin concerné par la proposition
|
||||
Besoin concerné par l'offre
|
||||
%th
|
||||
Fournisseur
|
||||
%th
|
||||
@ -46,7 +46,7 @@
|
||||
%th{style:"text-align:center;"}
|
||||
Clients Intéressés
|
||||
%th{style:"text-align:center;"}
|
||||
Propositions Acceptées
|
||||
Offres Acceptées
|
||||
%th{:style => "width:100px"}
|
||||
|
||||
|
||||
@ -57,7 +57,7 @@
|
||||
.pagination.pull-right= paginate @offers
|
||||
.col-md-2
|
||||
-if @need
|
||||
=link_to "Ajouter une proposition", new_admin_need_offer_path(@need),class:"btn btn-primary btn-block"
|
||||
=link_to "Ajouter une offre", new_admin_need_offer_path(@need),class:"btn btn-primary btn-block"
|
||||
%br
|
||||
= semantic_form_for :search, :html => {id: :search_form, :method => :get } do |f|
|
||||
= f.inputs do
|
||||
|
@ -1,4 +1,4 @@
|
||||
%h1
|
||||
Créer une proposition pour le besoin
|
||||
Créer une offre pour le besoin
|
||||
%strong= @need.title
|
||||
=render :partial => "form"
|
||||
|
@ -6,9 +6,9 @@
|
||||
=wish.created_at
|
||||
%td
|
||||
-if wish.devis?
|
||||
= link_to ic(:download) + " Télécharger devis", download_devis_admin_need_wish_path(wish.need, wish), class:"btn btn-primary btn-sm"
|
||||
= link_to ic(:download) + " Télécharger sa proposition", download_devis_admin_need_wish_path(wish.need, wish), class:"btn btn-primary btn-sm"
|
||||
-else
|
||||
Aucun devis
|
||||
Aucune proposition attachée
|
||||
%td
|
||||
-if wish.note?
|
||||
=wish.note
|
||||
|
@ -10,7 +10,7 @@
|
||||
%th
|
||||
Intéressé le
|
||||
%th
|
||||
Devis
|
||||
Proposition
|
||||
%th
|
||||
Informations supplémentaires
|
||||
%th{:style => "width:100px"}
|
||||
|
@ -3,5 +3,5 @@
|
||||
%p
|
||||
Le client
|
||||
%strong= @accepted_offer.customer.fullname
|
||||
vient d'accepter la proposition concernant le besoin
|
||||
vient d'accepter l'offre concernant le besoin
|
||||
%strong= @accepted_offer.offer.need.title
|
||||
|
@ -1,7 +1,7 @@
|
||||
%p Bonjour,
|
||||
|
||||
%p
|
||||
Un document est disponible pour une proposition que vous avez récemment acceptée:
|
||||
Un document est disponible pour une offre que vous avez récemment acceptée:
|
||||
%strong= @document.accepted_offer.offer.need.title
|
||||
|
||||
%p
|
||||
|
@ -1,7 +1,7 @@
|
||||
%p Bonjour,
|
||||
|
||||
%p
|
||||
Un document que vous nous avez récemment retourné pour la proposition
|
||||
Un document que vous nous avez récemment retourné pour l'offre
|
||||
%strong= @document.accepted_offer.offer.need.title
|
||||
vient d'être vérifié
|
||||
|
||||
|
@ -5,6 +5,6 @@
|
||||
%strong= @need.title
|
||||
vient d'être négocié !"
|
||||
|
||||
%p Rendez-vous sur notre site afin de voir notre proposition
|
||||
%p Rendez-vous sur notre site afin de voir notre offre
|
||||
|
||||
%p Merci
|
||||
|
@ -1,7 +1,7 @@
|
||||
%p Bonjour,
|
||||
|
||||
%p
|
||||
Vous venez d'accepter une proposition pour le besoin
|
||||
Vous venez d'accepter une offre pour le besoin
|
||||
%strong= @accepted_offer.offer.need.title
|
||||
|
||||
%p Merci
|
||||
|
@ -16,7 +16,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
%body.admin
|
||||
%nav#admin_nav.navbar.navbar-default.navbar-inverse{role: "navigation"}
|
||||
.container-fluid
|
||||
@ -50,12 +49,13 @@
|
||||
%li= link_to " Besoins", admin_needs_path
|
||||
|
||||
%li= link_to " Catégories", admin_need_categories_path
|
||||
%li= link_to " Propositions", admin_offers_path
|
||||
%li= link_to " Offres", admin_offers_path
|
||||
- unread_messages = ContactMessage.where(read_by_admin: false).count
|
||||
-if unread_messages > 0
|
||||
%li=link_to content_tag(:span,unread_messages , style:"background-color:#D9534F", class: 'badge') + " Contacts", admin_conversations_path
|
||||
-else
|
||||
%li= link_to " Contacts", admin_conversations_path
|
||||
%li= link_to " Moniteur d'activité", admin_connected_customers_path
|
||||
|
||||
|
||||
%ul.nav.navbar-nav.navbar-right
|
||||
|
@ -1,4 +1,4 @@
|
||||
|
||||
.center.white.row
|
||||
.row.gutter
|
||||
%h1= i(:"file") + " Documents à retourner pour la proposition #{@accepted_offer.offer.need.title}"
|
||||
%h1= i(:"file") + " Documents à retourner pour l'offre #{@accepted_offer.offer.need.title}"
|
||||
|
@ -47,30 +47,31 @@
|
||||
=link_to "Modifier mes infos", public_edit_infos_path, :class => "btn btn-primary"
|
||||
.padding.center.white
|
||||
%h3
|
||||
Mes propositions acceptées
|
||||
Mes offres acceptées
|
||||
%div.alert.alert-info
|
||||
%p
|
||||
Voici la liste de toutes les propositions que vous avez acceptées.
|
||||
Voici la liste de toutes les offres que vous avez acceptées.
|
||||
C’est ici que vous pouvez accéder aux offres disponibles.
|
||||
%p
|
||||
Une fois téléchargé, vous devez nous renvoyer le mandat signé afin de pour bénéficier de la proposition.
|
||||
Une fois téléchargé, vous devez nous renvoyer le mandat signé afin de pouvoir bénéficier de l'offre.
|
||||
%p
|
||||
N’oubliez pas que c’est l’intérêt de chacun de contribuer à NEGOS, en participant, en communiquant afin d’obtenir la meilleure proposition
|
||||
%strong
|
||||
N’oubliez pas que c’est l’intérêt de chacun de contribuer à NEGOS, en participant, en communiquant afin d’obtenir la meilleure offre
|
||||
|
||||
-if @accepted_offers.length > 0
|
||||
=render "public/needs/accepted_offers_index", accepted_offers: @accepted_offers
|
||||
.pagination= paginate @accepted_offers, param_name: 'page_offers'
|
||||
-else
|
||||
%p
|
||||
Vous n'avez pas encore accepté de proposition
|
||||
Vous n'avez pas encore accepté d'offre
|
||||
.padding.center.white
|
||||
%h3
|
||||
Mes besoins
|
||||
Mes intérêts
|
||||
%div.alert.alert-info
|
||||
%p
|
||||
Signaler votre intérêt, vous permet d’accéder au fil de discussion ainsi qu’au suivi propre à chaque besoin.
|
||||
%p
|
||||
Cela nous permet de vous envoyer des propositions intéressantes si nous décidons de négocier ce besoin.
|
||||
Cela nous permet de vous envoyer des offres intéressantes si nous décidons de négocier ce besoin.
|
||||
-if @wishes.length > 0
|
||||
=render "public/wishes/index", wishes: @wishes
|
||||
.pagination= paginate @wishes , param_name: 'page_wishes'
|
||||
@ -79,12 +80,12 @@
|
||||
Vous n'êtes encore intéressé par aucun besoin
|
||||
.padding.center.white
|
||||
%h3
|
||||
Mes propositions de besoin
|
||||
Mes besoins
|
||||
%div.alert.alert-info
|
||||
%p
|
||||
Si vous avez un besoin qui ne fait pas encore parti de notre liste, vous pouvez vous-même le proposer à Négos.
|
||||
%p
|
||||
Votre proposition sera alors soumise à une courte validation par l'un de nos modérateurs.
|
||||
Votre proposition de besoin sera alors soumise à une courte validation par l'un de nos modérateurs.
|
||||
%p
|
||||
Vous serez informé par courriel de son acceptation.
|
||||
-if @needs.length > 0
|
||||
|
@ -3,7 +3,7 @@
|
||||
= f.input :title, :label => "Titre de votre besoin"
|
||||
= f.input :category, :as => :select, include_blank: "Toute catégorie", :collection => @tree.map{|c| [(c.level > 0 ? (' ' * (c.level - 1)) + "|- ": "").html_safe + c.name, c.id]}, label: "Catégorie de besoin"
|
||||
= f.input :description, :label => "Description", :rows => 5, :input_html => {:style => "height:100px;"}
|
||||
= f.input :devis, type: :file, :label => "Devis/Offre (Fichier au format PDF)"
|
||||
= f.input :devis, type: :file, :label => "Votre proposition (Fichier au format PDF)"
|
||||
= f.input :note, :label => "Informations supplémentaires (visibles uniquement par les administrateurs Négos)", :rows => 5, :input_html => {:style => "height:100px;"}
|
||||
|
||||
%br
|
||||
|
@ -64,7 +64,7 @@
|
||||
|
||||
-elsif(need.negociated?)
|
||||
-if(need.customers.include?(current_customer))
|
||||
=link_to i(:"download") +" Voir les propositions", public_need_path(need), class: "btn btn-success pull-right"
|
||||
=link_to i(:"download") +" Voir les offres", public_need_path(need), class: "btn btn-success pull-right"
|
||||
-else
|
||||
=link_to i(:"times-circle") + " Négociation terminée", public_need_path(need) , class: "btn btn-danger pull-right"
|
||||
|
||||
|
@ -27,7 +27,7 @@
|
||||
= f.input :c, as: :category, selected: params[:c], input_html: {:name => 'c' }, label: 'Filtrer par catégorie', :include_blank => "Toute catégorie" , :as => :select, :collection => @tree.map{|c| [(c.level > 0 ? (' ' * (c.level - 1)) + "|- ": "").html_safe + c.name, c.id]}
|
||||
.clear
|
||||
= f.inputs do
|
||||
= f.input :s, as: :state, selected: params[:s], input_html: {:name => 's' }, label: 'Filter par état', :include_blank => "Tous les états" , :as => :select, :collection => [["En sondage","verified"],["En négociation","negociating"],["Négocié","negociated"],["Négociation échouée","failed"]]
|
||||
= f.input :s, as: :state, selected: params[:s], input_html: {:name => 's' }, label: 'Filter par état', :include_blank => "Tous les états" , :as => :select, :collection => [["En sondage","verified"],["En négociation","negociating"],["Négocié","negociated"]]
|
||||
.clear
|
||||
|
||||
:javascript
|
||||
|
@ -54,7 +54,7 @@
|
||||
%h3 Vous avez aussi ce besoin ? signalez-le nous !
|
||||
%p Vous pouvez marquer votre interêt pour ce besoin en cliquant sur le bouton <strong>Ça m'intéresse !</strong>
|
||||
%p Si il y a un nombre suffisant de personnes intéressées par ce même besoin, une négociation sera entamée auprès des fournisseurs afin de vous faire une offre intéressante.
|
||||
%p Une fois la négociation terminée, vous serez libre d'accepter ou non la proposition.
|
||||
%p Une fois la négociation terminée, vous serez libre d'accepter ou non l'offre.
|
||||
|
||||
-elsif @need.negociating?
|
||||
-if @need.customers.include?(current_customer)
|
||||
@ -74,8 +74,8 @@
|
||||
.alert.alert-success
|
||||
%h3 Négociation terminée
|
||||
%p= "Nous avons négocié ce besoin à partir de #{number_to_currency(offers.first.price, locale: :fr)}"
|
||||
%p Vous avez maintenant le choix d'accepter ou refuser la proposition.
|
||||
%p <strong>Une fois la proposition acceptée, vous devrez nous retourner au plus vite le mandat signé</strong>
|
||||
%p Vous avez maintenant le choix d'accepter ou refuser l'offre.
|
||||
%p <strong>Une fois l'offre acceptée, vous devrez nous retourner au plus vite le mandat signé</strong>
|
||||
-else
|
||||
.alert.alert-success
|
||||
%h3 Négociation terminée
|
||||
@ -103,7 +103,7 @@
|
||||
|
||||
-elsif @need.negociated?
|
||||
-if @need.offers.length > 0
|
||||
%h2= i(:"gift") + " Les propositions négociées"
|
||||
%h2= i(:"gift") + " Les offres négociées"
|
||||
-@need.offers.each do |offer|
|
||||
.offer
|
||||
|
||||
@ -113,18 +113,18 @@
|
||||
-if offer.need.customers.include?(current_customer)
|
||||
-if !offer.customers.include?(current_customer)
|
||||
.accept-offer
|
||||
=link_to i(:"check") + " Accepter la proposition", accept_public_need_offer_path(@need, offer), data: {confirm: "Voulez-vous vraiment accepter cette proposition ? Attention, cette action vous engage à payer la somme proposée."}, class: "btn btn-lg btn-success "
|
||||
=link_to i(:"check") + " Accepter l'offre", accept_public_need_offer_path(@need, offer), data: {confirm: "Voulez-vous vraiment accepter cette offre ? Attention, cette action vous engage à payer la somme proposée."}, class: "btn btn-lg btn-success "
|
||||
-else
|
||||
.offer-accepted
|
||||
=i(:"check") + " Proposition Acceptée"
|
||||
=i(:"check") + " Offre Acceptée"
|
||||
|
||||
.my-account-link
|
||||
Vous devez maintenant nous retourner le mandat signé, rendez-vous rubrique
|
||||
=link_to "Mon compte", public_my_account_path
|
||||
pour gérer vos propositions acceptées.
|
||||
pour gérer vos offres acceptées.
|
||||
-else
|
||||
.offer-not-aceptable
|
||||
Proposition non disponible
|
||||
Offre non disponible
|
||||
|
||||
|
||||
.clear
|
||||
|
@ -2,13 +2,13 @@
|
||||
=f.inputs do
|
||||
|
||||
-if @wish.devis?
|
||||
= link_to ic(:download) + " Voir votre devis actuel", download_devis_public_need_wish_path(@need, @wish), class: "btn btn-primary"
|
||||
= link_to ic(:download) + " Télécharger votre proposition", download_devis_public_need_wish_path(@need, @wish), class: "btn btn-primary"
|
||||
%br
|
||||
%br
|
||||
-else
|
||||
= f.input :devis, type: :file, :label => "Devis de votre offre actuelle (Fichier au format PDF)"
|
||||
= f.input :devis, type: :file, :label => "Votre proposition (Fichier au format PDF)"
|
||||
|
||||
= f.input :note, :label => "Informations supplémentaires (visibles uniquement par les administrateurs Négos)", :rows => 5, :input_html => {:style => "height:100px;"}
|
||||
= f.input :note, :label => "Informations supplémentaires (Si vous n'avez pas attaché de proposition, merci de préciser son prix dans ce champ)", :rows => 5, :input_html => {:style => "height:100px;"}
|
||||
|
||||
%br
|
||||
|
||||
|
@ -5,8 +5,8 @@
|
||||
Je signale mon intérêt pour le besoin
|
||||
=link_to @need.title, public_need_path(@need)
|
||||
.alert.alert-info
|
||||
%h2 Joindre mon devis
|
||||
%p Si vous êtes intéressé par ce besoin, faites nous part de votre offre actuelle en nous fournissant un devis.
|
||||
%h2 Joindre ma proposition
|
||||
%p Si vous êtes intéressé par ce besoin, faites nous part de votre proposition actuelle au format PDF.
|
||||
%p
|
||||
Une fois ce formulaire validé, vous pourrez si besoin revenir sur cette page depuis l'onglet
|
||||
%strong Mon Compte
|
||||
|
@ -269,6 +269,8 @@ Rails.application.routes.draw do
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
resources :need_categories
|
||||
resources :needs do
|
||||
get :download_devis
|
||||
@ -324,9 +326,11 @@ Rails.application.routes.draw do
|
||||
get :accepted
|
||||
end
|
||||
end
|
||||
|
||||
get :connected_customers, to: "customers#connected_customers"
|
||||
resources :customers do
|
||||
|
||||
member do
|
||||
|
||||
get :validate
|
||||
end
|
||||
end
|
||||
|
5
db/migrate/20160413101451_add_last_activity_to_user.rb
Normal file
5
db/migrate/20160413101451_add_last_activity_to_user.rb
Normal file
@ -0,0 +1,5 @@
|
||||
class AddLastActivityToUser < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :customers, :last_activity, :datetime, default:nil
|
||||
end
|
||||
end
|
@ -11,7 +11,7 @@
|
||||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20160318165409) do
|
||||
ActiveRecord::Schema.define(version: 20160413101451) do
|
||||
|
||||
create_table "accepted_offers", force: :cascade do |t|
|
||||
t.datetime "created_at", null: false
|
||||
@ -223,6 +223,7 @@ ActiveRecord::Schema.define(version: 20160318165409) do
|
||||
t.datetime "account_validated_at"
|
||||
t.float "latitude", limit: 24
|
||||
t.float "longitude", limit: 24
|
||||
t.datetime "last_activity"
|
||||
end
|
||||
|
||||
create_table "data_files", force: :cascade do |t|
|
||||
|
Loading…
x
Reference in New Issue
Block a user