Customers & Users
Hi,
I think there is room for improving the way 'Customers' will be handled in Ubercore.
Our admin people have a lot of trouble dealing with the fact that a 'customer' does not exist until an order has been placed, even though a User for that 'Customer' is created.
I think the customer data for addresses, people, contacts etc could be better abstracted or more tightly tied to the drupal user. As it stands 'Customers' are really just fields in an order and thus you have multiple entries for each company when you View Customers.
Comments
Seems a logical behaviour to me ... ?
May be you have a special use case but AFAK, a customer is not a customer until he/she intends to buy something from you. Otherwise it is a prospect. Don't you agree ?
Not True In Most Situations
Actually, most businesses Orchestra targets with Ubercart are not pure-play ecommerce businesses. Almost all of them have some back-end system driving their ecommerce implementation. Most of the time they want their customers in the system with the appropriate billing addresses, shipping addresses, and user accounts already created.
I would argue that this is almost a universal expectation of my client base - when they turn on ecommerce all of their existing customers (or at least the ones they choose) will already have an account up and going in Drupal/Ubercart. We currently get around this by adding a ton of custom CCK and code to the Users area of Drupal and tieing that in to the order process. It's really hard to do correctly, and I think that having a "customer" object would be awesome.
The Basics of a Customer
Being a "Customer" in most systems requires some basic data. Here is my vision for what this would look like:
Some nice to haves:
Profile2
{dupe}
Profile2
Could Drupal Commerce leverage Profile2 for storing customer data?
See:
http://drupal.org/project/profile2
It's definitely on my radar,
It's definitely on my radar, but I'm not sure it'll make sense here. One of the strongest arguments in favor of a customer entity separate from a user account was by TR, the fact that you might need to join multiple users or customer records from various systems to a single customer account. The customer may or may not have an actual user account on the Drupal site. In this case, an expanded profile wouldn't be helpful, but a separate customer entity with a user reference field would.
In theory, profile2 does not
In theory, profile2 does not assume it's entities are attached to users either. A profile is simple 'a set of data that we know about someone.'
So in my mind, the fact that someone is a customer is simply one of those things we know about them. In this light, a 'customer record' could be nothing more than a set of order IDs stored in a profile.
If you really need something more, then I'd suggest that a customer entity should be nothing more than a collection of Foreign keys to other entities. (orders, profiles, user(s), etc.)
Practically speaking, for example, I'd rather that 'billing address' be a property of a profile rather than a customer. And order might store only a pointer to a particular revision of that particular profile field.