Accepted Offers flow
This commit is contained in:
parent
927a348c5a
commit
a018c87cef
@ -983,3 +983,24 @@ h3{
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.btn-file {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.btn-file input[type=file] {
|
||||||
|
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
min-width: 100%;
|
||||||
|
min-height: 100%;
|
||||||
|
font-size: 100px;
|
||||||
|
text-align: right;
|
||||||
|
filter: alpha(opacity=0);
|
||||||
|
opacity: 0;
|
||||||
|
outline: none;
|
||||||
|
background: white;
|
||||||
|
cursor: inherit;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
background-color:#f0ad4e;
|
background-color:#f0ad4e;
|
||||||
}
|
}
|
||||||
.offer{
|
.offer{
|
||||||
|
|
||||||
position: relative;
|
position: relative;
|
||||||
padding:20px;
|
padding:20px;
|
||||||
height:100px;
|
height:100px;
|
||||||
@ -56,8 +56,18 @@
|
|||||||
font-size:30px;
|
font-size:30px;
|
||||||
font-weight:bold;
|
font-weight:bold;
|
||||||
}
|
}
|
||||||
.offer-accepted{
|
.offer-not-aceptable{
|
||||||
|
|
||||||
|
display:inline-block;
|
||||||
|
float:right;
|
||||||
|
color:#B84442;
|
||||||
|
|
||||||
|
font-size:20px;
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.offer-accepted{
|
||||||
|
|
||||||
display:inline-block;
|
display:inline-block;
|
||||||
float:right;
|
float:right;
|
||||||
@ -65,6 +75,16 @@
|
|||||||
font-size:20px;
|
font-size:20px;
|
||||||
font-weight:bold;
|
font-weight:bold;
|
||||||
}
|
}
|
||||||
|
.my-account-link{
|
||||||
|
display:inline-block;
|
||||||
|
color:#3C763D;
|
||||||
|
font-size:10px;
|
||||||
|
float:right;
|
||||||
|
position:absolute;
|
||||||
|
right:10px;
|
||||||
|
bottom:0 ;
|
||||||
|
|
||||||
|
}
|
||||||
.price{
|
.price{
|
||||||
display:inline;
|
display:inline;
|
||||||
font-size:25px;
|
font-size:25px;
|
||||||
|
58
app/controllers/admin/accepted_offers_controller.rb
Executable file
58
app/controllers/admin/accepted_offers_controller.rb
Executable file
@ -0,0 +1,58 @@
|
|||||||
|
class Admin::AcceptedOffersController < ApplicationController
|
||||||
|
layout "admin"
|
||||||
|
before_filter :auth_admin
|
||||||
|
|
||||||
|
def upload_devis
|
||||||
|
@accepted_offer = AcceptedOffer.find(params[:id])
|
||||||
|
|
||||||
|
if !params[:devis]
|
||||||
|
flash[:error] = "Vous devez sélectionner un fichier"
|
||||||
|
else
|
||||||
|
|
||||||
|
@accepted_offer.devis = params[:devis]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if @accepted_offer.save
|
||||||
|
|
||||||
|
@accepted_offer.state = :devis_available
|
||||||
|
@accepted_offer.save
|
||||||
|
|
||||||
|
|
||||||
|
else
|
||||||
|
flash[:error] = "Impossible de charger le devis"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
redirect_back_or_default :root
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def download
|
||||||
|
@accepted_offer = AcceptedOffer.find(params[:id])
|
||||||
|
send_file @accepted_offer.devis.file.path
|
||||||
|
end
|
||||||
|
|
||||||
|
def delete
|
||||||
|
@accepted_offer = AcceptedOffer.find(params[:id])
|
||||||
|
|
||||||
|
@accepted_offer.remove_devis!
|
||||||
|
@accepted_offer.state = :waiting_devis
|
||||||
|
@accepted_offer.save
|
||||||
|
|
||||||
|
flash[:notice] = "Devis supprimé"
|
||||||
|
redirect_back_or_default :root
|
||||||
|
end
|
||||||
|
|
||||||
|
def received
|
||||||
|
@accepted_offer = AcceptedOffer.find(params[:id])
|
||||||
|
|
||||||
|
@accepted_offer.state = :devis_received
|
||||||
|
@accepted_offer.save
|
||||||
|
|
||||||
|
flash[:notice] = "Devis marqué comme reçu et signé"
|
||||||
|
redirect_back_or_default :root
|
||||||
|
end
|
||||||
|
end
|
@ -119,12 +119,7 @@ class Admin::OffersController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def upload_devis
|
|
||||||
@accepted_offer = AcceptedOffer.find(params[:id])
|
|
||||||
@accepted_offer.devis = params[:devis]
|
|
||||||
@accepted_offer.save
|
|
||||||
redirect_back_or_default :root
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
21
app/controllers/public/accepted_offers_controller.rb
Executable file
21
app/controllers/public/accepted_offers_controller.rb
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
class Public::AcceptedOffersController < ApplicationController
|
||||||
|
layout "public"
|
||||||
|
|
||||||
|
before_filter :auth_customer
|
||||||
|
|
||||||
|
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"
|
||||||
|
redirect_back_or_default :root
|
||||||
|
else
|
||||||
|
@accepted_offer.state = :devis_downloaded
|
||||||
|
@accepted_offer.save
|
||||||
|
send_file @accepted_offer.devis.file.path
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
@ -32,8 +32,20 @@ class AcceptedOffer < ActiveRecord::Base
|
|||||||
when 'devis_downloaded'
|
when 'devis_downloaded'
|
||||||
"En attente de réception du devis signé"
|
"En attente de réception du devis signé"
|
||||||
when 'devis_received'
|
when 'devis_received'
|
||||||
"Devis signé et reçu"
|
"Devis reçu et signé"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def human_admin_state
|
||||||
|
case state
|
||||||
|
when 'waiting_devis'
|
||||||
|
"En attente de création du devis"
|
||||||
|
when 'devis_available'
|
||||||
|
"Devis disponible pour le client mais pas encore téléchargé"
|
||||||
|
when 'devis_downloaded'
|
||||||
|
"Dévis téléchargé par le client, en attente de réception du devis signé"
|
||||||
|
when 'devis_received'
|
||||||
|
"Devis reçu et signé"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -2,50 +2,23 @@
|
|||||||
|
|
||||||
class DevisUploader < CarrierWave::Uploader::Base
|
class DevisUploader < CarrierWave::Uploader::Base
|
||||||
|
|
||||||
# Include RMagick or MiniMagick support:
|
include Rails.application.routes.url_helpers
|
||||||
# include CarrierWave::RMagick
|
|
||||||
# include CarrierWave::MiniMagick
|
|
||||||
|
|
||||||
# Choose what kind of storage to use for this uploader:
|
|
||||||
storage :file
|
|
||||||
# storage :fog
|
|
||||||
|
|
||||||
# Override the directory where uploaded files will be stored.
|
def filename
|
||||||
# This is a sensible default for uploaders that are meant to be mounted:
|
"Devis-#{model.offer.need.title}-pour-#{model.customer.organisation}.#{file.extension}" if original_filename.present?
|
||||||
|
end
|
||||||
|
|
||||||
def store_dir
|
def store_dir
|
||||||
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
"#{Rails.root}/private_medias/devis/#{model.id}"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Provide a default URL as a default if there hasn't been a file uploaded:
|
|
||||||
# def default_url
|
|
||||||
# # For Rails 3.1+ asset pipeline compatibility:
|
|
||||||
# # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
|
|
||||||
#
|
|
||||||
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
|
|
||||||
# end
|
|
||||||
|
|
||||||
# Process files as they are uploaded:
|
|
||||||
# process :scale => [200, 300]
|
|
||||||
#
|
|
||||||
# def scale(width, height)
|
|
||||||
# # do something
|
|
||||||
# end
|
|
||||||
|
|
||||||
# Create different versions of your uploaded files:
|
|
||||||
# version :thumb do
|
|
||||||
# process :resize_to_fit => [50, 50]
|
|
||||||
# end
|
|
||||||
|
|
||||||
# Add a white list of extensions which are allowed to be uploaded.
|
|
||||||
# For images you might use something like this:
|
|
||||||
def extension_white_list
|
def extension_white_list
|
||||||
%w(pdf doc docx)
|
%w(pdf)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Override the filename of the uploaded files:
|
def url
|
||||||
# Avoid using model.id or version_name here, see uploader/store.rb for details.
|
download_admin_offer_accepted_offer_path(model.offer, model)
|
||||||
# def filename
|
end
|
||||||
# "something.jpg" if original_filename
|
|
||||||
# end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -7,12 +7,18 @@
|
|||||||
%td
|
%td
|
||||||
=number_to_currency(offer.price, locale: :fr)
|
=number_to_currency(offer.price, locale: :fr)
|
||||||
|
|
||||||
%td{style:"text-align:center;font-weight:bold;color:#3C763D;"}
|
%td{style:"text-align:center;font-weight:bold;"}
|
||||||
=link_to i(:"cog") + " " + offer.customers.count.to_s + " / " + offer.need.wishes.length.to_s, accepted_admin_offer_path(offer)
|
= ic(:"hand-paper-o") + " " + offer.need.wishes.length.to_s
|
||||||
|
|
||||||
|
%td{style:"text-align:center;font-weight:bold;"}
|
||||||
|
= ic(:"check") + " " + offer.customers.count.to_s
|
||||||
|
|
||||||
%td.actions{:style => "width:150px;text-align:right"}
|
%td.actions{:style => "width:150px;text-align:right"}
|
||||||
-if @need
|
-if @need
|
||||||
|
= 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(:"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)
|
= link_to i(:pencil), edit_admin_need_offer_path(@need, offer)
|
||||||
-else
|
-else
|
||||||
|
= 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(:"trash"), [:admin, offer], :data => {:confirm => 'Voulez-vous vraiment supprimer cette offre ?'}, :method => :delete
|
||||||
= link_to i(:pencil), edit_admin_offer_path(offer)
|
= link_to i(:pencil), edit_admin_offer_path(offer)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
%h1
|
%h1
|
||||||
= "Liste des clients intéressés par le besoin "
|
= "Gestion des offres par client pour le besoin "
|
||||||
<strong>
|
<strong>
|
||||||
= @offer.need.title
|
= @offer.need.title
|
||||||
</strong>
|
</strong>
|
||||||
@ -38,11 +38,17 @@
|
|||||||
Email
|
Email
|
||||||
%th{style:"text-align:center"}
|
%th{style:"text-align:center"}
|
||||||
Offre acceptée?
|
Offre acceptée?
|
||||||
|
%th{style:"text-align:center"}
|
||||||
|
Devis
|
||||||
%th{style:"text-align:center"}
|
%th{style:"text-align:center"}
|
||||||
État
|
État
|
||||||
|
|
||||||
%tbody.rows
|
%tbody.rows
|
||||||
-@offer.need.wishes.each do |wish|
|
-@offer.need.wishes.each do |wish|
|
||||||
%tr
|
-accepted_offer = @offer.accepted_offers.where(customer_id: wish.customer.id).first
|
||||||
|
-if accepted_offer && accepted_offer.devis_received?
|
||||||
|
-class_name = "success"
|
||||||
|
%tr{class: class_name}
|
||||||
%td
|
%td
|
||||||
-if wish.customer.organisation
|
-if wish.customer.organisation
|
||||||
=wish.customer.organisation
|
=wish.customer.organisation
|
||||||
@ -55,13 +61,36 @@
|
|||||||
-if wish.customer.email
|
-if wish.customer.email
|
||||||
= link_to i("envelope-o") + " #{wish.customer.email}", 'mailto:' + wish.customer.email
|
= link_to i("envelope-o") + " #{wish.customer.email}", 'mailto:' + wish.customer.email
|
||||||
%td{style:"text-align:center"}
|
%td{style:"text-align:center"}
|
||||||
-accepted_offer = @offer.accepted_offers.where(customer_id: wish.customer.id).first
|
|
||||||
-if accepted_offer
|
-if accepted_offer
|
||||||
=i(:"check") + " Acceptée"
|
=i(:"check") + " Acceptée"
|
||||||
-else
|
-else
|
||||||
\-
|
\-
|
||||||
|
|
||||||
%td{style:"text-align:center"}
|
%td{style:"text-align:center"}
|
||||||
-if accepted_offer
|
-if accepted_offer
|
||||||
=accepted_offer.human_state
|
|
||||||
|
-if accepted_offer.devis?
|
||||||
|
-if accepted_offer.devis_downloaded?
|
||||||
|
=link_to "Reçu et signé", received_admin_offer_accepted_offer_path(@offer, accepted_offer), :data => {:confirm => 'Voulez-vous vraiment marquer le devis comme reçu et signé ?'}, style:"display:inline-block", class: "btn btn-success btn-sm"
|
||||||
|
|
||||||
|
=link_to "Télécharger le devis", accepted_offer.devis.url, style:"display:inline-block", class: "btn btn-primary btn-sm"
|
||||||
|
=link_to "Supprimer le devis", delete_admin_offer_accepted_offer_path(@offer, accepted_offer), style:"display:inline-block", class: "btn btn-danger btn-sm"
|
||||||
|
-else
|
||||||
|
|
||||||
|
= form_tag upload_devis_admin_offer_accepted_offer_path(@offer, accepted_offer), name: :devis, method: :post, multipart: true do
|
||||||
|
%span.btn.btn-default.btn-file
|
||||||
|
="..."
|
||||||
|
= file_field_tag :devis
|
||||||
|
= submit_tag("Charger" , class:"btn btn-primary")
|
||||||
|
|
||||||
-else
|
-else
|
||||||
Pas encore acceptée
|
\-
|
||||||
|
%td{style:"text-align:center"}
|
||||||
|
-if accepted_offer
|
||||||
|
=accepted_offer.human_admin_state
|
||||||
|
|
||||||
|
-else
|
||||||
|
Offre pas encore acceptée
|
||||||
|
|
||||||
|
:javascript
|
||||||
|
@ -19,11 +19,16 @@
|
|||||||
Pour créer une offre, 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
|
%strong Gestion des besoins
|
||||||
puis cliquer sur le bouton
|
puis cliquer sur le bouton
|
||||||
%strong= i(:gift)
|
%strong= ic(:gift)
|
||||||
en face du besoin de votre choix.
|
en face du besoin de votre choix.
|
||||||
|
|
||||||
-if @offers.length < 1
|
-if @offers.length < 1
|
||||||
Aucune offre actuellement
|
Aucune offre actuellement
|
||||||
|
-if @need
|
||||||
|
%br
|
||||||
|
%br
|
||||||
|
=link_to "Ajouter une offre", new_admin_need_offer_path(@need),class:"btn btn-primary"
|
||||||
|
%br
|
||||||
-else
|
-else
|
||||||
.row
|
.row
|
||||||
|
|
||||||
@ -33,13 +38,15 @@
|
|||||||
|
|
||||||
%tr
|
%tr
|
||||||
%th
|
%th
|
||||||
Besoin
|
Besoin concerné par l'offre
|
||||||
%th
|
%th
|
||||||
Fournisseur
|
Fournisseur
|
||||||
%th
|
%th
|
||||||
Prix négocié
|
Prix négocié
|
||||||
%th{style:"text-align:center;"}
|
%th{style:"text-align:center;"}
|
||||||
Offres acceptées / Intéressés
|
Clients Intéressés
|
||||||
|
%th{style:"text-align:center;"}
|
||||||
|
Offres Acceptées
|
||||||
%th{:style => "width:100px"}
|
%th{:style => "width:100px"}
|
||||||
|
|
||||||
|
|
||||||
@ -47,7 +54,7 @@
|
|||||||
|
|
||||||
=render @offers
|
=render @offers
|
||||||
|
|
||||||
.pagination.pull-right= paginate @offers
|
.pagination.pull-right= paginate @offers
|
||||||
.col-md-2
|
.col-md-2
|
||||||
-if @need
|
-if @need
|
||||||
=link_to "Ajouter une offre", 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"
|
||||||
|
@ -50,7 +50,9 @@
|
|||||||
Mes offres acceptées
|
Mes offres acceptées
|
||||||
%div.alert.alert-info
|
%div.alert.alert-info
|
||||||
%p
|
%p
|
||||||
Voici la liste de toutes les offres que vous avez acceptées
|
Voici la liste de toutes les offres que vous avez acceptées. C'est ici que vous pouvez télécharger les devis quand ils sont disponibles.
|
||||||
|
%p
|
||||||
|
Une fois le devis téléchargé, vous devez nous le renvoyer signé.
|
||||||
|
|
||||||
-if @accepted_offers.length > 0
|
-if @accepted_offers.length > 0
|
||||||
=render "public/needs/accepted_offers_index", accepted_offers: @accepted_offers
|
=render "public/needs/accepted_offers_index", accepted_offers: @accepted_offers
|
||||||
@ -60,15 +62,16 @@
|
|||||||
Vous n'avez pas encore accepté d'offre
|
Vous n'avez pas encore accepté d'offre
|
||||||
.padding.center.white
|
.padding.center.white
|
||||||
%h3
|
%h3
|
||||||
Ma liste de souhait
|
Mes besoins
|
||||||
%div.alert.alert-info
|
%div.alert.alert-info
|
||||||
%p
|
%p
|
||||||
Votre liste de souhait comprend tout les besoins pour lesquels vous avez signalé un intérêt.
|
Votre liste de besoins comprend tout les besoins pour lesquels vous avez signalé un intérêt.
|
||||||
%p
|
%p
|
||||||
Signaler votre intérêt vous permet d'acceder à des offres intéressantes si nous décidons de négocier ce besoin auprès de nos fournisseurs.
|
Signaler votre intérêt vous permet d'acceder à des offres intéressantes si nous décidons par la suite de négocier ce besoin auprès de nos fournisseurs.
|
||||||
%p
|
%p
|
||||||
Signaler un intérêt ne vous engage en rien, vous serez engagé seulement après avoir accepté une offre de notre part.
|
Signaler un intérêt ne vous engage en rien, vous serez engagé seulement après avoir accepté une offre que nous vous proposons.
|
||||||
|
%p
|
||||||
|
Remarque: Vous pouvez signaler/supprimer un intérêt pour un besoin uniquement quand celui-ci est en sondage.
|
||||||
-if @wishes.length > 0
|
-if @wishes.length > 0
|
||||||
=render "public/needs/wishes_index", wishes: @wishes
|
=render "public/needs/wishes_index", wishes: @wishes
|
||||||
.pagination= paginate @wishes , param_name: 'page_wishes'
|
.pagination= paginate @wishes , param_name: 'page_wishes'
|
||||||
|
@ -15,3 +15,7 @@
|
|||||||
%td{style: 'text-align:center'}
|
%td{style: 'text-align:center'}
|
||||||
=accepted_offer.human_state
|
=accepted_offer.human_state
|
||||||
%td{style: 'text-align:right'}
|
%td{style: 'text-align:right'}
|
||||||
|
-if accepted_offer.devis?
|
||||||
|
=link_to i(:"download") + " Télécharger", download_devis_public_accepted_offer_path(accepted_offer), class: "btn btn-primary"
|
||||||
|
-else
|
||||||
|
Pas encore disponible
|
||||||
|
@ -106,14 +106,20 @@
|
|||||||
=number_to_currency(offer.price, locale: :fr)
|
=number_to_currency(offer.price, locale: :fr)
|
||||||
.supplier{style: "position:absolute;bottom:-5px;"}
|
.supplier{style: "position:absolute;bottom:-5px;"}
|
||||||
="Avec #{offer.supplier}"
|
="Avec #{offer.supplier}"
|
||||||
|
-if offer.need.customers.include?(current_customer)
|
||||||
|
-if !offer.customers.include?(current_customer)
|
||||||
|
.accept-offer
|
||||||
|
=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") + " Offre Acceptée"
|
||||||
|
|
||||||
-if !offer.customers.include?(current_customer)
|
.my-account-link
|
||||||
.accept-offer
|
Consulter vos offres depuis la rubrique
|
||||||
=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 "
|
=link_to "Mon compte", public_my_account_path
|
||||||
-else
|
-else
|
||||||
.offer-accepted
|
.offer-not-aceptable
|
||||||
=i(:"check") + " Offre Acceptée"
|
Vous n'êtes pas intéressé
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.clear
|
.clear
|
||||||
|
@ -88,7 +88,11 @@ Rails.application.routes.draw do
|
|||||||
get 'my_account/my_annonces', :as => "my_annonces"
|
get 'my_account/my_annonces', :as => "my_annonces"
|
||||||
get 'my_account/reconfirm', :as => "reconfirm_email"
|
get 'my_account/reconfirm', :as => "reconfirm_email"
|
||||||
|
|
||||||
|
resources :accepted_offers do
|
||||||
|
member do
|
||||||
|
get :download_devis
|
||||||
|
end
|
||||||
|
end
|
||||||
resources :needs do
|
resources :needs do
|
||||||
resources :messages
|
resources :messages
|
||||||
resources :offers do
|
resources :offers do
|
||||||
@ -262,6 +266,16 @@ Rails.application.routes.draw do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
resources :offers do
|
resources :offers do
|
||||||
|
resources :accepted_offers do
|
||||||
|
member do
|
||||||
|
post :upload_devis
|
||||||
|
get :download
|
||||||
|
get :delete
|
||||||
|
get :received
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
member do
|
member do
|
||||||
get :accepted
|
get :accepted
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user