Hi there,
I have a customer that requires a highly customized assortment for their users. Here's the situation:
1. There are 5000 products in the catalog (rough estimate)
2. A customer has access to one or more products in that catalog (rough estimate: each customer has a few hundred products at most)
3. Which customer has access to which products is defined in an XML that we'll receive daily (a mapping between a customer number and a bunch of product numbers)
4. Each customer can have a unique price for the product (also defined in the XML)
5. To make it more interesting, each customer can have its own categorization of the products. So for example, even though the catalog looks like this:
Group 1
Product 1
Product 2
Product 3
Group 2
Product 4
Product 5
Product 6
It could be that it should be presented to a specific customer as follows:
New Group Name
Product 2
Other name
Product 6
Yet another name
Product 4
Customers can have products in arbitrary new groups (also defined in XML) so there isn't a simple one to one mapping between the catalog groups and the user groups (in other words, we cannot simply change the name being shown).
What would be the best way to model this? I see a few options, but all of them seem to have some issues:
Use Assortments
This would solve the custom product list issue but it would mean a lot of work to build the assortments in the backend. Also, with hundreds of customers, this can become messy. Custom prices and custom grouping could be handled during import and a priceprovider and some template extenders.
Build a group tree per customer
This solves the problem of the custom groups as each customer can have its own tree of groups in the product catalog. However, maintenance could still be messy. Custom prices could be handled during import and a price provider.
Extensibility API
We could hook into something like eCommerce.ProductList.BeforeSort or eCommerce.ProductList.BeforePaging (which gives us access to all products) and then filter out those that the user doesn't have access to. Prices and grouping can be handled with price provider and some template extenders. However, with thousands of products, this could be too expensive and slow.
We don't need searching and filtering as all available products are always shown to the user on a single page (like a spread sheet, showing all at once for easy ordering)
Any recommendations on how to do this? We're going to build a prototype first to validate our assumptions and I could use some guidance.
Thanks,
Imar