As of this post, there arent any projects that have been planned for Commerce that would allow the declaration of a quote instead of a price (no price entered/displayed on a product). I really need such a feature for a few sites that require customer/seller interaction before deciding on a final price.

Pretty much the same features as http://drupal.org/project/uc_quotes, which includes an Add to Quote button instead of Add to Cart, and the selection between Price or Quote upon item creation.

I dont think the task would be difficult. If I can be lead in the right direction, I could even try to start it myself.

Support from Acquia helps fund testing for Drupal Acquia logo

Comments

rszrama’s picture

Title: Price Quotes » Let customers build a "quote" cart and request a quote instead of checkout
Component: Price » Contributed modules
Status: Active » Postponed

You probably don't need any specific module to do a majority of this. All you'd have to do is add $0.00 prices to all your products and then just don't display those prices anywhere. You don't have to show product price fields in your display nodes, and you can edit your cart Views so they don't include prices any more. The only thing you'd really have to change is the text pertaining to the shopping cart. You could do this with a module like String Overrides or just alter the various places directly with a hook in a site customizations module.

When it comes time to submit the quote, I suppose you may want a custom button on the Cart form that changes the status of the order to "Needs quote" or something - if that's true, then that's all your custom module should really be responsible for. Think you'll be developing that? If so, please link to the project from the issue when you post it. : )

veleiro’s picture

Thank you for the information, I'll see what I can do with it now and report back sometime

myliefie’s picture

I would support and agree with Veleiro there is a definite need for a quote module. There needs to be a means of offering a quote alongside selling the product/s. There are organisations who as part of their procedures require a quote before they can make a purchase. Most of the functionality to do this is inherently there already. The module would just need to add the addition of a “quote/add to quote” button, a new template very much like an invoice template, a send quote rather than checkout form and have the “order” have a status of quote, this could change later if the customer then makes the purchase.

tr33m4n’s picture

subscribe

odisey’s picture

Subscribed ....

hmartens’s picture

Thank you Ryan for the rundown, this is a good start as I need to build 2 such websites for a client. I think I'll use the string override method as it's probably the easiest.

I should really go through the drupalize.me material for module building and build a module for this :) One day I'll get to it...now I need to put food on the table :)

hmartens’s picture

I got this working quite easily! As Ryan said, make all product prices $0. Use Strong Override module and override a couple of the basic syntaxes. Edit a couple of Views where certain terms/words still creeped through. When you see syntax that needs to be changed on a view and you've already used String Override for it but it's not overriding it, just click on the right corner of the view on the gear to edit view. Then change the wording on there. I also had to remove or change some of the text that were on some views but under the "FOOTER" section (middle section of view). I had to do this a lot for the cart and checkout views.

I added another checkout rule under Store>Configuration>Checkout Settings under "Send Request"-section to email me when the person places a request.

I hope this helps someone. It works perfect on my side.

chiko.mukwenha’s picture

@hmartens #7

How do they send a request? On every item where I put 0 for amount, no button displays, am I missing something?

hmartens’s picture

@mukwenhac

That is strange! I didn't do anything wrt to that aspect. I've got the normal "Example Payment" selected as payment method so I didn't change anything there. And in "Product Pricing Rules" I've got the default "Unset the price of disabled products in the cart" rule added and that's all. So I didn't change anything other than the changes I mentioned in my previous post. The rest is just a standard commerce setup. Maybe something is wrong with your setup because you are allowed to offer free items so if something is $0 then you should still be allowed to "Add to cart" in a normal shop...

Anyone else that can think of what could be wrong on mukwenhac's side?

cdykstra’s picture

I'm working on a quote 'cart' right now...I used Commerce Kickstart which may or may not have configured some of this for me.

But I have a field in my Product Display, under the manage fields tab, called Product. I've set it to Label hidden, Format Add To Cart form. You can configure this widget to show or hide a quantity box.

Hope this helps..

csander’s picture

subscribe

maxchock’s picture

subcribe

hmartens’s picture

I've completed my quote website built on Drupal Commerce as per #7 :)
www.ntecsa.co.za

cdykstra’s picture

Very nice hmartens! I am about to launch a quote only Commerce site next week and am happy with the results by following the advice in #7 as well. Just one question: does the site maintainer see a price field in the product entry? That is the last thing I would like to get rid of (although I will instruct client to enter 0 in that field, it would be nice if they didn't even see it).

hmartens’s picture

Hi c11a

I disabled that :) I went to Structure>Content Types> and clicked on "manage display" for "Product Display" or if your content type is just called "Product" then it's that one. On the next screen "Hide" the "Product: Price" as you can see in the attached image.

I hope this helped?

cdykstra’s picture

Yes, that hides it from the front end, but have you found a way to hide it in the backend when my client enters/updates products?

hmartens’s picture

The IMPORTANT thing for the quote thing to work is that a price for a product must be $0...so if you hide it then Commerce won't know what to do with it because a product has to have a price...

If the quote system didn't need a price to work, you could hide the price by going to Store>Products>Product Types and clicking on "manage display" next to "Product" and on next screen hide the "Price". You can try this and see if it works? Would like to know whether this will work but I think that it won't work unless you find a way (a setting) that assigns a $0 to all products by default.

Please post your findings?

cdykstra’s picture

My findings are the same as yours...the system won't let you hide the price field because it is required.

hmartens’s picture

Perhaps someone like rszrama can let us know how you can automatically assign a price to a product upon creating the product...

GaborTorok’s picture

A separate quote cart would be the ideal solution for me.

I'm building a site, where the products must have prices, but the customer can only put together a quote cart, because the products are not sold separately at the moment, but only as a complete system with assembly and installation included. The installation prices have to be calculated and the cart must be validated before purchase, to make sure the selected products are compatible and can work together as a complete system at the customers site.
I would like to keep the original Cart, because we may sell individual items later.

Is it possible to create a separate Quote Cart without the requirement for the products to have 0 price? The solution doesn't have to be simple, it may require some coding.

GaborTorok’s picture

I just realized that the difference may only be in the checkout process or quoting could be a payment method. I'm wondering, if quoting was a payment method, then would it be possible to do a second checkout on a quoted order using a "real" payment method after the customer accepts the quote.
Another idea I came across is multiple cart configurations, and for example the configuration to use can be determined based on current customer, etc.. One

(I haven't looked into Drupal Commerce and this quoting issue yet, but I have these ideas I thought I would share before I forget them.)

hmartens’s picture

As the Drupal Commerce guys would put it "Anything is possible with Rules". You can do anything in Commerce if you know how to set up rules for it ;) That's your key to getting your project done...Rules!

wunderdog’s picture

I'd like to add another datapoint to the group.
It is fairly common for industrial equipment customer that independent of price being available
customers want to have quotes issued. The main reason are the price tickets tend to be high,
thus, they need to go send a request of purchase internally. To do that they need a quote.
Thus, I agree with most of you that for completeness we need a separate option to issue a quote.
I'm not sure if on every page instead of add to cart, but definitely at least during the checkout process.

Pablo Romero’s picture

I need a similar solution to the one @GaborTorok explained in #20.

I have to show prices for all products because users may select one or another depending on their prices and attributes. But products in this store are just "a raw base", which may (and should) be altered/customized in many possible ways (with compatibility issues).
Commerce No Payment module would probably do the trick for a quote-only site, but I would like to have quotes apart from real orders (immediate payments when no customization is needed).

Subscribing.

GaborTorok’s picture

I have written a custom module and I looked into the sources and documentation of Drupal Commerce since my last post, and I have new ideas how to solve this issue. I only started working with Drupal a few months ago, but if there is no more experienced Drupal/DrupalCommerce developer who has time to work on this feature, I will start a new module. Any help is welcome :)

I welcome comments on my ideas below.

I think that first that we need some new order statuses, but I'm not sure how to group the statuses into states.
Statuses: "quote request" (the user is creating the request), "quote request pending" (waiting to be processed), "quote" (the quote for the request).
In my case, for one quote request, we must respond with more than one quote so the user can choose the most suitable. I might use a separate status, "quote processed" for the original request, and attach order references to it which point to the ready quote(s). Is this additional feature useful for anybody else?

The states may be: Quote request (statuses: "quote request", "quote request pending", "quote request processed") and Quote ("quote")

The "quote request" status could be a cart status, so this order is shown as a cart. To create a cart with this status, there may be a button at the regular cart to convert it to a "Quote cart", so the status becomes "quote request", or there may be a "Quote" button at the products to create a new cart as a "Quote cart". This solution makes it impossible to have a regular cart and a "Quote cart" at the same time, this may be a drawback or an advantage. I don't know whether this is an acceptable solution for most of us, but it would avoid code duplication (active quote tracking in session for anonymous users, quote cart display, etc.)

If a site needs it, the user should be able to proceed to checkout when the quote is ready.

GaborTorok’s picture

I do not need all of the above functionality yet, I just thought that if I start it, I might write a general quote module. First, I will just use it from code as a part of a system that creates a quote request based on a questionnaire, so someone could finish the parts later that I'm not yet interested in :)

xatoo’s picture

Gabor, I am also working on a quotes module, care to bundle forces? I'll have to clean up my code from some custom stuff but then I will upload it to a sandbox. My idea is that people should be able to choose between ordering an order or requesting a quote during the first step of the checkout phase. I have included two views, one for users where they can see there pending quote requests and returned quotes and one for shop administrators where they can see incoming quote requests.

xatoo’s picture

Here is a first attempt:
http://drupal.org/sandbox/xatoo/1860944

Note that I still have to cleanup the views and remove some Dutch strings.

GaborTorok’s picture

xatoo, I'm happy with joining forces, as long as my requirement of providing multiple quotes for one request is compatible with your module :)
I haven't contributed to any project on drupal.org before - where should we discuss things and should I only submit patches or be a co-maintainer (if that is possible for a sandbox project...)?

xatoo’s picture

Status: Postponed » Needs review

I think that people might have quite some different approaches in mind on how a quote request should work. It might be a good start to gather requirements and see if we can come to a workflow that covers most needs.

In my opinion, quote request and quote are just some extra states an order can be in. This means that having multiple quotes for one request is not possible unless you would create a copy of an order-request when replying. This could be done a bit like the Commerce Reorder module does. In my current code, just one quote per request is possible.

GaborTorok’s picture

It's OK for me if Commerce Quotes doesn't support multiple quote responses, I just would like it to not to make it very hard for me to implement it in a custom module (I was thinking about using order/entity references between the request and the results). I won't need manual quote responses yet, but I would also like to use a standardised workflow.

I agree with you that quote requests and responses are just extra states/statuses. I would use slightly different state/status combinations as I said in #25, but I think that's all. I had a quick look at parts of the code you uploaded, and it looks good for me.
I would divide the "Quote" state you used to "Quote request" and "Quote", because I think they are separate things. I also suggested two extra statuses. The "quote request processed" status may not be meaningful for a 1-1 request-response relation, it is only to build one "processed quote request" - multiple "quote response" relations, so this may not belong to Commerce Quotes. I thought that the "quote request pending" status would be useful for signalling that somebody has began working on that request, so other shop admins are aware of this. Maybe "quote_request_processing" would be a better status name.

As you mentioned Commerce Reorder, I started thinking about whether placing and order using a quote response may be a king of reordering, or should it be a different process?

xatoo’s picture

FileSize
72.13 KB

Attached is an image explaining how I see the quotes workflow. I agree that a quote_processing status is a good thing to have, and i also agree on "Quote request" and "Quote" being different states. In the workflow the whole review page is skipped since I see asking for and receiving a quote as some sort of alternative to reviewing an order. (The user already reviews the quote before accepting it). From a usability perspective I believe that a separate cart for quote requests is not very useful. Having two carts might be confusing.

The step where an order gets turned into a quote request is now hardcoded to depend on a form value but imo this should be done using rules so that site builders can determine for themselves on what conditions to allow or force orders to become quote requests. I have for instance a use case where a site has multiple products without a price and as soon as an order contains such an item the cart can not be ordered but should become a request for a quote.

I would love to receive some more input on what other users might think about the quotes workflow. I'm also still not sure what to think about the 'one request - multiple responses' thing. Should multiple simultaneous responses be possible or will a seconds response only be given after the first one is declined by the customer?

GaborTorok’s picture

xatoo:
If accepting the quote converts it to the order (order in the business sense), will the original quote be easily accessible? I can imagine a company where the quotes must be kept, but I'm not sure how many sites would require this. I have two ideas to retrieve original quotes: one is looking for the last revision of the commerce_order with quote state when retrieving and the other is copying the order when the quote is accepted and continuing checkout with this copy.
Another thing that I thought of is that some companies use different numbering/naming for quotes and different for placed orders. Should it be possible? Or is this quote ID / order ID question out of the scope of the current problem?

GaborTorok’s picture

I tell my 'one request - multiple responses' use case, so it may give others some ideas:
My case is a special one (automated small renewable electricity generation system quoting) and I do not expect to solve it without custom coding, because request creation and quote calculation will both be programmatic (in most cases). The customers can request quotes for systems with filling in a questionnaire about their needs and constraints. The quoting system takes these into account, and prepares some quotes that fit the requirements. There may be a cheap but lower quality solution, and more expensive ones. It is possible for a higher quality main component to make the whole system cheaper because of better parameters. There are many parameters and system components, and sometimes it is impossible to compare the prices without calculating detailed quotes for the few best looking solutions.

xatoo’s picture

Ok, after thinking it over I believe that the right approach is to do every state change via rules. The module should provide a set of triggers, actions and default rules but users should be able to alter the workflow be defining their own rules. So for instance a rule might be:

If state changes to checkout_preview and there are line items with no price, change the state to quote_request instead.
Or, if a user accepts a quote, change te state to pending. (Which for your use case you might want change to: copy the order and set the order state of the copy to 'pending' while setting the state of the original to 'quote_accepted'.)

I would however love to get some input from someone who is more familiar with commerce just to know that we are thinking towards the right solution.

maik1’s picture

Title: Let customers build a "quote" cart and request a quote instead of checkout » How to show
FileSize
22.76 KB

hi,
in regards to #13, could you please explain how to display the "Your information" fieldset instead of login or create account buttons which are default in commerce?

thanks

rszrama’s picture

Title: How to show » Let customers build a "quote" cart and request a quote instead of checkout

(Please leave the title as is.)

maik1’s picture

Alan D.’s picture

We have a similar project using node checkout for fixed price tasks, or a custom quotation that is loosely based off the same idea

Users can create the node and save as per normal (no integration)
Admin goes in and updates the details / prices and creates the order that is added to the users cart. Base products are $0 items. This is all custom coding.
User goes to the checkout and pays as per any normal order.

The only two downsides is #1971886: Allow modules to skip updates to line items in commerce_cart_order_refresh() and currently I have not discovered a way to allow the administers to edit the prices via the administration screen when the product is in the early checkout states (haven't investigated this one yet)

lunk rat’s picture

I was able to accomplish a quote building system using Ubercart 7.x, String Overrides, and tpl customization. I didn't want to bother with UC6 > Commerce upgrade so I just upgraded to D7 Ubercart and got along just fine.

coloryan’s picture

#7 worked for me, thanks! http://www.coloradoshippingcontainers.com/

String override, some template mods, and I'm up and running.

rszrama’s picture

Very cool, thanks for sharing. Be sure to fill out the showcase form on DrupalCommerce.org if you want to see it featured there: http://www.drupalcommerce.org/showcase/feature-your-store

ilyasmdgh’s picture

Was anybody able to get both quote system and cart with prices together?(which uc_quotes does).
Does anybody seen this type of solutions both drupal and outside of drupal?

jetwodru’s picture

Hi,
I want Add To Quote & Add To Cart on a commerce built site, possible ? Seemingly the solutions given here were either you use commerce for quotes or for selling, not both on the same site. Thanks

jetwodru’s picture

Hi,
Is this project https://drupal.org/sandbox/xatoo/1860944 going on ? I really love the concepts of the project instead of rszrama who just changed the entire shooping cart to a quote cart which doesn't seem to work if I want to have both Add To Quote and Add To Buy (Cart) on a site. Thanks

cjaspencer’s picture

I'm indeed interested in this as well.

My client has an existing site with drupal commerce (for years now) and there are hundreds of unique antique items available. He product list is long and keeps growing. This needs to stay the same. However, he wants to include items that are "price upon request" aka a "quote" in addition to the regular cart. Is this possible? I don't (and he doesn't) want to create a separate website and a separate system to handle both options. He would much rather choose when he is creating his product and creating his product display. Any additional information would be fantastic. Thank you.

rszrama’s picture

Issue summary: View changes
Status: Needs review » Postponed
klonos’s picture

@rszrama: I realize Drupal Commerce is a large project and that you might have other priorities like fixing bugs, implementing other (more popular) requested features etc, but I would like to ask if this feature is in the roadmap at all. I promise I won't ask any "are we there yet?" questions.

I just need this for an upcoming project and because the customer does not actually require an eshop (in the sense of online purchasing) but a quote engine, I would like to make a decision on whether commerce would be a choice or if I should put something custom together using webform/workflow and rules.

@everybody else in this queue: what solution have you guys come up with in the end? I see that xatoo's module is still a sandbox and in fact he stated in #2147423: Is this project abandoned ? that he will not continue development. Is anyone using it in production nevertheless? If so, I would like to hear your thoughts.

Thanx in advance.

lunk rat’s picture

@klonos I think you will probably be better off with a custom solution using webform/entityform, entityreference, and rules.

I think a really useful module in this situation is entityreference_prepopulate. You can have users browse the site and click products to add them to a quote.

Cheers.

rszrama’s picture

Yeah, I don't personally have any plans to implement a quote cart solution as a standalone module. I do like the idea of alternate solutions, though, besides maintaining a completely separate shopping cart order. Maybe the Flag module could be of use here? The only issue with this approach would be including taxes / shipping in the quote.

klonos’s picture

A "recipe" on how to put such an alternative solution would help a lot then. Anything related in the documentation?

redkelpie’s picture

I ran into a similar need with a non-commerce site. We needed functionality for a "Get a Quote" form where visitors could add items to a contact form that would be sent to sales for follow-up.

The closest solution I've found to addressing this is using a combination of:

  • Webform
  • Flag
  • Session API
  • Webform View

Steps:

  1. Enable all the modules
  2. Create a webform
  3. Create a flag and assign the content type(s) you want users to be able to flag
  4. Create a view that has a relationship set to the flag. For Fields, add "Content: title" (and any other fields) and "Flag link"(using the relationship). This will allow users to remove items when they are on the webform.
  5. In the webform, create a field of the type "Embedded view" and select the view you created.

Using the session api, you can open this up to anon users. When the webform is submitted it will store the flagged items that can be viewed by site admins when in "edit" mode of the submission. I'm not sure about the limitations for sending the info through the webform email. One might need to use Rules to get that data into an email.

stewart.adam’s picture

If you are comfortable writing custom code, another way to go about this is to alter the default checkout workflow and add a new states. Commerce supports placing configured orders back into checkout, so you could build a system where:

  1. A customer creates an order in the cart
  2. Instead of proceeding to checkout, the order is set to 'quote' status
  3. Using order comments, the order can be negotiated or commented upon as necessary by users/admins
  4. When a quote is finalized, it is set back to 'in checkout' and the customer is directed to checkout (redirect them to /checkout/order-id)
paulwdru’s picture

Hi,

This module Commerce Quotes perfectly illustrated the quotes workflow but sadly the project had been abandoned.

Hopefully someone would take up

bijbij’s picture

Let me introduce you guys to "Erpal Platform" a complete out of box ERP solution and drupal distribution by brightsolutions .

https://www.drupal.org/project/erpal_platform

Creating quote, order and invoice is one of this amazing distribution.
you can test it on simplytest.me

ugintl’s picture

I am looking for something you would call reverse quote. Similar to reverse auction. Where the buyer posts a job or product and asks for quotes. Then accept or reject the quote. There is a module commerce_auction which provides reverse auction functionality, but there is an issue which seems to be partially solved https://www.drupal.org/project/commerce_auction/issues/2299929

rszrama’s picture

Status: Postponed » Closed (outdated)
flamesquirrel’s picture

I'm busy building a "Quote Request" system in D8 for a client and, using @redkelpie's concept (#52), have something close to working using Views, Webform and Flag. The current set up is a product content type with a 'Add to quote' flag and a view that displays all flagged products. I then have a Webform that captures the user's details with an embedded view of the quote from Views. All good so far.

My issue is that the data from the quote view is not passed to the Webform email (it shows up as blank or "empty"). Is there a way to use tokens or another method to embed the quote view data into 1) The Webform email/handler and 2) To store it with the Webform record (At the moment the if I look at a submission from the webform I see the quote view however the products displayed are based on the current user's flags and not the flags of the user who submitted the form).

If anyone could point me in right direction to get this working I'd greatly appreciate it.

ugintl’s picture

Flag is fieldable. Create fields for your flag. You will need a form which will allow users to fill those fields. For D7 there is a module https://www.drupal.org/project/flagging_form I haven't tried it. You can also use https://www.drupal.org/project/drupalmoduleupgrader to upgrade module to D8. I have no idea whether it is going to work or not. Just sharing in the hope it might help. Another option might the registration module.

I am trying to achieve something similar for D7, but never finished, still confused. Also see https://www.drupal.org/sandbox/xatoo/1860944 and https://github.com/alexrayu/c2w

erpal_platform is also something interesting. Let me know when make up something.

abahia’s picture

The way I'm doing it is creating views with the product characteristic and create a RFQ Cart flag and create a view called RFQ Cart requiring the RFQ Cart flag relationship by the user. Then create an RFQ flag that will appear in the RFQ Cart view, once flagged by the user will appear in a vendor window view called Customers RFQs, requiring the relationship with content creator and content flagged by RFQ cart by any user. So the vendor can go to the product and update price, and delivery terms. This will appear in another view called Quotations to customers with a Quote flag so the user have specific quotations for specific product that could be used in add to cart and proceed with the procurement process. Everything goes ok until the customers wants to request a quotation for the same item in the future. Because the user just can flag once, if I make a rule to delete the flags once the user receive the quotation I loss the RFQ list that is very important for future references. Any idea about how to deal with this ?