Well over the weekend I did a lot of work on E-Commerce in developing a new interface which creates a much better customer interface.
In the past we have really only had 1 way of dealing with customers and that was with the address module. This was not a very good way of storing the information, or being able to extend the information captured. In fact in some situations it just doesn't work.
So in v3 we introduced the ecivicrm module which allowed customers to be taken from a CiviCRM database and used. This was not ideal and duplicated a lot of functionality in both address and ecivicrm.
As part of the changes to create a new receipting system, I realized that I really needed a standard customer record which would store a minimal amount of data and link the transactions to the actual customer record, and allow E-Commerce to query the external database and get all the information that it needed without knowing anything about the customer system.
So gone is linking all customers to a Drupal users. Now all customers are on the same level no matter what customer database that they are in or even if they are an anonymous customers. This also make it every easy to develop new customer databases. In fact as a implementation test I developed a new module ec_location which allows you to use the location module to store the customer information. Infact now customers do not need to be users or contacts, you could actually use CCK to create a Contact Management System and use the nodes as the customers, and bill them with the Invoice system.
Other changes that have occurred is that the new ec_customer module is taking care of the checkout process for collecting the customer address information, and in fact now if you have only 1 payment gateway a registered user will only see a single page for checkout, and with some changes anonymous users will do the same.
This is going to be a great improvement to the cart process. I also have planned other things a long this line as well for other systems, so the checkout process will be much fast and smoother.

Comments
cool change
i have had recurring requests (mainly from civicrm folks) to abstract organic groups members from drupal users. maybe you will stat a trend here. let us know how it works out. sometimes these ideas work well for a while but then get smelly.
So far this looks good, and
So far this looks good, and has been able to clean up some of the code with E-Commerce, and maybe more in the future. But now instead of having to think about all the different types of objects, it just now things about customers, and doesn't care about what is on the other side. The interface just returns the required information.
This has also cleaned up the handling of Anonymous and Registered users
--
Gordon Heydon
Hmmm... Gordon, you're
Hmmm... Gordon, you're making me think now. : )
Right now all Ubercart "customers" are simply users who have placed orders, but we definitely want further integration w/ a CRM in the future (we're stuck with GoldMine at the moment). With Ubercart, there is no way to store customer information without them having an order on the site. What I don't know is would there even be a benefit to having other methods. It seems the module package should just stick to gathering orders and then maybe have some way for order information to be pulled from the database based on a customer's e-mail, name, phone number, etc.
Prior to you making the changes, was there a way for a store admin to create a blank order for a non-customer through the backend? Or was this done to fill the gap and make creating orders like that simpler?
I ask b/c if I can create orders from scratch, I guess I don't need to worry about interfacing with different customer databases... but then maybe I should include the functionality for orders to be created w/ data pre-filled that doesn't necessarily come from the Ubercart orders database.
In E-Commerce customers are
In E-Commerce customers are really anyone who has made a financial interaction with the site, such as a purchase or made a payment. There is a direct link between E-Commerce and the customer system. And it means that you can run as many customer systems that you want. Generally you will be running 2, Anonymous and one for registered users.
You could create transactions for non-customers but it was very kludgy and the invoice module really relied on having a customer record. and worked best with CiviCRM.
E-Commerce has sort of been pushed this way since the beginning, and with the new receipting module, it just made a lot of things much easier.
--
Gordon Heydon
Single Page Check Out Optional?
Hello. I know EC's checkout is being re-written, but I kind of like the multi-step check out (cart review, select address, select payment, final review, purchase).
Although it would be nice to have cart => page-with-prefilled-default-settings-with-options-to-change. I haven't found much on the new system, but just wanted to be sure it wasn't going to turn in to 1 page with a really really really long form.
Could it be more configurable?
If the system were designed so you could make your own process, then you could have as many or as few pages as you like, and just the fields you like.
For example, I want to do digital downloads, so I don't want to ask for a geographical address. I want one short form. Or possibly two pages, the first with mandatory fields, the second with optional fields.
Would it be practical to design a system that was that flexible?
allergy information
allergy information
I have not really started
I have not really started rewritting the checkoutapi yet, but I have make some changes to the addresses which is following a new set of rules for the checkout processes.
With the new customer interface (ec_customer) if you already have an address in the database it will not ask you for the address, it will just skip over the address and choose the primary address. So if you only have 1 method of payment you will go straight to the review page, and then have the option to change the address.
An anonymous customers will enter the address directly on the review page. I may need to change this so that once you have entered the address it will recalc the checkout as the address may attract additional or different charges
--
Gordon Heydon
Could the address be skipped?
Could you provide an option to skip the address (or any other fields)?
allergy information
allergy information
Since e-commerce has become a
Since e-commerce has become a very important part of our lives we should invest both time and resources in finding new and improved methods to handle Internet shopping. It's great that you've decided to add your own improvements to the cart procedure.
Tudor Bran
Customer Database Software