16 replies [Last post]
smsnetworking's picture
Offline
Joined: 01/20/2009
Juice: 6

Is it possible to sell services instead of actual tangible items? If so, how?

Thanks

Ryan's picture
Offline
Joined: 08/07/2007
Juice: 15422
Re: Selling Service Items instead of Tangible Items

You'd have to be a little more specific, but it's totally possible... just make sure the products aren't marked as shippable. Example: http://www.sundaysenergy.com

vincew's picture
Offline
Joined: 01/21/2009
Juice: 153
Additional question on the topic

Hello, Im rather new at drupal/ubercart. I try to figure out a 'service selling' item to be used on my site. I looked at the ubercart docs, forums, etc and at http://www.sundaysenergy.com like Ryan suggested. I couldn't find all the information i need to work out a case of what i think is in the line of the first poster (although there wasn't enough information in that post to compare that case to mine)

My 'case' is in short:

  1. Present a service on the site (for instance: translations, like sundaysenergy)
  2. Product description say's what the service is, including the cost
  3. Placing order by customer
  4. Translate the document (uploaded by the customer)
  5. Set a translated document, ready to download for the customer
  6. Notify the customer
  7. Payment by customer
  8. Download by customer

I saw on sundayenergy step 1-3 implemented. The other steps i didn't. What i would like to know is:

  • Is this the proper place to discuss this specific example, or should i direct it somewhere else?
  • Does my case have a correct process flow?
  • Can it be done this way or is there a better way?

tnx
VinceW

-=[ Your Information Matters ]=-

(You may use my personal contact form to discuss drupal/ubercart work.)

Andy's picture
Offline
Administrator
Joined: 08/07/2007
Juice: 1153
Request beyond the scope of Ubercart

I would change the order of your process slightly:

1. Present a service on the site (for instance: translations, like sundaysenergy)
2. Product description say's what the service is, including the cost
3. Placing order by customer
3.1. Payment by customer
4. Translate the document (uploaded by the customer) Ubercart can't do this, you have to do the translation Smiling
5. Set a translated document, ready to download for the customer
6. Notify the customer
8. Download by customer

Ubercart can do all you ask except the actual translation. Step 5 can be done by hand, or it can be automated with a little custom module code. Step 6: Once you have translated the document and linked it to the order you change the order status to "x". You can create your own order custom order status in the Ubercart config. I would call the "x" status "ready for download" or something. Then create an order notification email which is automatically sent to the customer when the order is in status "x" which provides them with a download link to the translated file.

Ubercart's file download default setup assumes that you have one file (a pdf book, or an image or something) which you are selling multiple times. The unusual thing you want to do is upload a file, modify it, and then provide it as a unique download. Uploading a file during checkout is a well documented feature of Ubercart. Modifying the document is beyond the scope of Ubercart (you have to do it). Providing the file for download is also well documented.

I know I have painted this picture with broad strokes. The details are available in the documentation link at the top of this page.

Hope this helps.
Andy

vincew's picture
Offline
Joined: 01/21/2009
Juice: 153
Re: Request beyond the scope of Ubercart

tnx for the feedback Andy. The broad strokes workes for me. It did help me a lot to figure out how ubercart (and drupal) is working (a bit at least, but that is work for me to do).

I have did some time reading the documentation. For me (as a new 2.x user) it is a bit confusing, because not all is covered yet in the 2.x documentation, so i have to fall back on the 1.x documentation witch is at some points slightly different. No problem however, it is getting me on track, so i figure it out somehow.

You suggested to change the order of the process slightly. Perhaps i should explain why i put the payment at a later step on it.

With the example service (translating a document) the price is calculated on the amount of translated words in the final (translated) document. I see no way to calculate the final price before the work is done. That's why the payment comes after the notification to the customer.

I don't know if that can be done? It is perhaps against the original concept of an internet store (order-pay-wait-deliver) this is more of order-wait-pay-deliver.

As you pointed out the product is associated with a file. As far is i can see it there is a one-to-one relationship between the product and the file. In this example there is one product with multiple (order dependable) files related to it.

If different customers buy this product, their download link, is (as far as i can tell at the moment) connected to the same (product)file. In my opinion for this example it should be directing at a order-product-result file.

I was thinking of using a customer directory where they have access to their own files they bought. So the notification-link can point to that directory. Is there a way to have ubercart/drupal move a specific file to a specific dir after payment?

tnx in advance
VinceW

-=[ Your Information Matters ]=-

(You may use my personal contact form to discuss drupal/ubercart work.)

Andy's picture
Offline
Administrator
Joined: 08/07/2007
Juice: 1153
Vince, Your reasoning on the

Vince,
Your reasoning on the payment makes perfect sense and is not a problem with Ubercart. We have an e-commerce site which does something similar. We simply created an order status called "awaiting payment" where an order stays until the customer arranges / confirms payment.

You are correct about Ubercart assuming one file per order. I'm sure there is a way to do what you want with multiple files, I'm just a little uncertain what the best way is. My first guess at a solution is to upload the translated file to your site as a file attachment to a node and use Ubercart's ability to sell access to content http://www.ubercart.org/faq/2876 to give the customer access to the newly created node. I think there will be a problem with limiting a customers access to the particular node / file they need and not having access to all translated files. Hopefully someone else can help you with this since I'm not coming up with much here. Of course you can write / pay someone to write a small custom module to do this. If you take this approach please consider contributing it back to the community.

I've reached the end of my "off the top of my head" ideas. Can anyone in the community provide a better solution here?
Peace,
Andy

vincew's picture
Offline
Joined: 01/21/2009
Juice: 153
Re: Vince, Your reasoning on the

I've been sorting some things out a bit. Your ideas have been very helpfull Andy, tnx.

After reviewing the process again, with the new information you brought to my attention, i've come up with the next process;

  1. Present a service on the site (for instance: translations, like sundaysenergy)
  2. Product description say's what the service is, including the estimated cost
  3. Placing order by customer
  4. Translate the document (status: work-in-progress)
  5. Uploading the translated document to a files directory (status: work-done, payment-awaiting)
  6. Notify the customer the document is ready and payment is awaiting (no downloadlink is provided yet to customer)
  7. On payment unhook article from order and hook up translated file
  8. Notify customer with downloadlink (status: waiting-for-download)
  9. Download by customer (status: complete)

We have discussed step 1-4 already, at the moment as far as i'm concerned there is no need to explicitly work them out.

step 5:
I want to upload the translated file to the files directory. Is it possible to hook this file to a specific order? (even with a little coding). If so a trigger could be executed to change the status of the order and notify the customer (step 6)

step 7:
Is a trigger possible on payment of the order. If yes a small piece of code could attach the document (provided in step 5) to the order and provide a valid upload link just for this customer (step 8 ).

Because hiring is no option for me at the moment, i will have to do it myself. I'll have to dive into mod-development a bit, but thats worth the effort if i know it can be done. I've done a fair chair in PHP, bash, etc so I think i am able to figure out the pieces of code (perhaps with some help). Posting back is no issue in this case. Where would we be if everyone kept on leeching.

I reckon i can use some coaching ...

Most important for me now is, can it be done. and will it be useful?

cu
VinceW

-=[ Your Information Matters ]=-

(You may use my personal contact form to discuss drupal/ubercart work.)

Andy's picture
Offline
Administrator
Joined: 08/07/2007
Juice: 1153
Vince, I am certain this can

Vince,
I am certain this can be done. Based on your self-description, I believe you could have this knocked out in 8-24 hours of work spread out over a week or so (you will need to start with some research, and probably have a couple of stopping points while you are waiting for coaching / advice on the forums). If you do a decent job, it will make a nice addition to Ubercart as a contributed module. I can see people using this for image editing, grading, consulting and probably a few other purposes I haven't thought of. I hope you decide to take this project on and thank you in advance for doing so.
Cheers,
Andy

Andy's picture
Offline
Administrator
Joined: 08/07/2007
Juice: 1153
Re: Vince, I am certain this can

I just talked with Lyle, an expert in this area, about it. He is going to put some thought into the best approach and get back to you. This would be much easier if orders in Ubercart were Drupal "nodes". We had some good reasons not to do this, but I am beginning to think this was a mistake. In the future we might change this in core.

Lyle's picture
Offline
AdministratoreLiTe!
Joined: 08/07/2007
Juice: 6841
Re: Re: Vince, Your reasoning on the

I looked into the capabilities of the uc_file module, and I noticed that you can add any file in the downloads directory to any user through the account edit form. Since all orders are linked to a user, you can notify them for payment whenever the document is ready, and give them access to it when they have paid. The only problem is that doing this doesn't trigger any kind of notification email, so the customer won't know where to get it unless you tell them yourself.

I think that's a deficiency of the file downloads module, but I'm not sure of the best way to fix it. The notification emails require an order to populate the tokens, but there isn't any particular order available on the user pages.

vincew's picture
Offline
Joined: 01/21/2009
Juice: 153
Re: Re: Re: Vince, Your reasoning on the

Tnx Andy for your efforts so far. Hello Lyle, tnx for stepping by and taking time to look into it.

Like Andy said, some research has to be done. I am curious at the initial reasons for not having orders as nodes (background reading or info would be appreciated). Coming here with a relational db background i see some advantages to having uc_ tables separate of the node table.

A thought:

The product in the order is a reference to a product in the uc_products table. The product in the uc_products table can have a file linked to it. For selling a product (like a translation) there is no immediate (at time of buying) need to have a file attached to the product.

I manually experimented somewhat with the admin -> orders. What is working is: removing the initial product manually and replacing it with another product with the translated file attached to it. After changing the status of the order, the customer gets notified. (advantage of hooking up a new product is also the fact of knowing the exact cost). Defining the product as !public would keep it out of a category view.

By hand it can be done Smiling But like most of us, wouldn't it be nice if...... (and.. if it can be done manually, it can be automated)

I'm willing to take this project on. We will see where we end up with Smiling

Please advise on where/how to continue this.

a. here in this forum
b. PM
c. Contribution page
d. combination of a,b and/or c Smiling

VinceW

-=[ Your Information Matters ]=-

(You may use my personal contact form to discuss drupal/ubercart work.)

Ryan's picture
Offline
Joined: 08/07/2007
Juice: 15422
Re: Re: Re: Re: Vince, Your reasoning on the

So... the problem here isn't with limitations in Ubercart's core modules. I think you can accomplish your solution with the pieces as is if you're a little creative with your business model. First off, I'll say that this already sounds like a labor intensive project on your part, since you're looking to actually translate documents. Based on your steps:

Quote:

1. Present a service on the site (for instance: translations, like sundaysenergy)
2. Product description say's what the service is, including the cost
3. Placing order by customer
4. Translate the document (uploaded by the customer)
5. Set a translated document, ready to download for the customer
6. Notify the customer
7. Payment by customer
8. Download by customer

You need the following things:

  1. A way to present the service.
  2. A way to let the customer purchase the service and upload a document at the same time.
  3. A way to post the translated document to a place where customers can find them and download them.
  4. A way to collect payment from the customer and let them know where to find their document.

To be honest, I'm not sure I'd do any labor work (translation) before getting paid, but maybe your clientele is especially trustworthy. I think what you can do here is use core Ubercart with the Views module and the UC Node Checkout module. Core Ubercart obviously handles my #1... presenting the product with a price and an "add to cart" button.

UC Node Checkout handles my #2 and indirectly #3. The module lets a customer create a node at the time of adding the product to the cart. Since it's a node, it will be a cinch to add a CCK filefield to it to get the original document from the user. No messy bothering w/ file uploads through Ubercart... do it all through the node system. You can add a second filefield for the translated document but hide that from the user during node creation through UC Node Checkout's settings. You can also add a hidden status field on here that administrators can update to keep track of when customer's should be able to view this node.

Using Views, you can create a "My documents" page or something like that for your users. It could list out any of these document nodes the customer has created that are visible based on the status field. This status field you will have to update manually when a customer completes payment, and then it should show up in the list along w/ a direct download link to the translated document. You could even add an expiration date to this if you wanted, too.

Am I missing something? If not, I'd recommend this setup.

Andy's picture
Offline
Administrator
Joined: 08/07/2007
Juice: 1153
Orders as Nodes

This discussion probably justifies it's own thread but I will throw out some initial thoughts.
You correctly point out the minor issue of db tables.

In the Drupal world nodes are "content" and orders don't quite fit that definition. There is some overhead related to nodes which is not necessary for orders.

The real issue is poorly written other Drupal modules. Drupal has a permission system, but it is not (and can't be imho) strictly enforced. There have been several issues in the past where a poorly written Drupal module does not pay attention to node permissions. The result is that you could install a module which interacts with nodes and displays order nodes with all their private information to the world. This requires a dumb module, an administrator who is asleep on the job, and a good helping of bad luck, but the results could be disastrous. As it stands now, someone has to be both a competent module developer and unbelievably stupid / malicious to publicly display orders.

Either way this is not much of an issue, and will require a lot of work to change even if their is a general consensus that it needs to be changed. The only time we would consider changing it is in the next major Ubercart version, 3.0. I wouldn't hold your breath.
Andy

webmasterkai's picture
Offline
Uber DonorBug Finder
Joined: 08/09/2007
Juice: 299
Re: Re: Vince, Your reasoning on the

The easiest thing for us has been to have two different products. One product describes the services and gathers required information from the customer along with a down payment. The payment is made using the Customer Information Manager feature at authorize.net so the credit card is available to charge again when the service is finished. This first part could be a free product if you wanted.

When the service is finished we create another product (in your case a file download product) that is the price of the balance. Send them an email with a link to the product and as soon as they pay for it they can download the file.

Biodiesel * (ubercart + drupal) = Sundays Energy

vincew's picture
Offline
Joined: 01/21/2009
Juice: 153
Re: Re: Re: Vince, Your reasoning on the

Hello webmasterkai, tnx for your response on my invitation to have a look in this thread and for sharing your info with us. The way you guys at http://www.sundaysenergy.com/ are handling this is IMO a very practical solution and an example of how flexible drupal/ubercart can be setup/used.

*
Additional question to webmasterkai:
How about the downpayment? Is is the 0.11 cents per translated word, so you can verify the customer, or are you calculating a percentage of the words in document, uploaded by the customer?
*

After reading all of the posts again i see several options, varying from review of the business proces up to a discussion about the fundamentals of ubercart and a few things in between.

As far as i can see at the moment there is no immediate need to start a project/module because of the fact that the problem/solution are not yet clear enough and a few directions have to be explored.

  • webmasterkai's direction is a practical one, however still one with a lot of interaction needed from the user/shopowner. (Though i wonder how it will hold when the number of transactions increases).
  • Ryan's direction is also a practical on, a bit more work at configuring/installation of creating the correct pages/settings at the beginning, but it lowers the workload of the user/shopmaster a lot.
  • Andy, and Lyle also, pointed out that a coding solution is possible, but there are a few (some minor, some serious) catches with it (as there always are Smiling )
  • For me, first i am going to explore the directions of webmasterkai and Ryan. If it is going to work (technically and business process) it will be a nice thing to have.

    Still willing to do some coding on this (when needed), but i think there should be more clarity on the matter before starting to create some lines. I would not want to waste time (your's and/or mine). If there is a need/time for a deeper discussion on a coding solution, i am willing to participate.

    Keep you posted (an the thread tracked) on it.
    VinceW

-=[ Your Information Matters ]=-

(You may use my personal contact form to discuss drupal/ubercart work.)

Alan D.'s picture
Offline
Joined: 11/02/2008
Juice: 10
Re: Selling Service Items instead of Tangible Items

I'm interested in Ryan's solution (#13) with a down payment required before the translation, but there are a couple steps that I can not figure out reading the docs:

My procedure and steps taken are: (The ? show the parts that I can not figure out or that I'm unsure on the right steps)

1. Present a service on the site (for instance: translations, like sundaysenergy)
2. Product description say's what the service is, including the cost
3. Placing order by customer WITH DEPOSIT

Using Node checkout, I added the Product Class "Editing service" and the content type "Manuscript" and associated these. I added fields to the manuscript that are modified during the checkout using "Conditional Actions" for "Custom completes checkout" to mark these as ready for translation. (Using the events registration guide at http://drupaleasy.com/blogs/ultimike/2009/03/event-registration-ubercart)

? Can I use a hook here to modify the order status flag to "translation pending" or something similar? This will be limited to this product class only.

4. Translate the document (uploaded by the customer)
5. Set a translated document, ready to download for the customer
6. Notify the customer

Add to the Manuscript page as a second CCK field, using custom code to hide the field until order status is "payment received" or "complete", set the order status to "translation complete, payment pending"

7. Payment by customer
8. Download by customer

? Does this step require a new product or can the first order be modified to allow the user to enter a second payment? The creation of a new product for the file download seems redundant.

Any advice or hints?

adrian_arg's picture
Offline
Joined: 08/05/2009
Juice: 20
sign up fee

Hello,

I'm very new when it comes to ubercart and drupal in general.

In my case I'm currently fixing a site. And the website is the service and there would be a fee when a user registers. So there is actually no need for a products page or a cart. I actually just need the registration page to ask for the credit card info and show the price of the membership. Then when it is submitted, the account is created and the card charged.

Is this possible with ubercart?
The main reason for choosing ubercart would be for the store management features in the admin area.