Hello everyone,

I hope you're doing well.

I write here because I think I faced an issue in the ecommerce listing of
products related to the ProductFacility entity and the filtering of out of
stock products.

Here's the context:
- an ecommerce site where products are configured as a virtual-variant
relationship.
- a virtual product (parent) has color and size features associated as
selectable, and its variants are all the combinations of colors and sizes.
- in such a configuration InventoryItem records are registered for variant
products (the actual sold products) and not for virtual products.
- the product store is configured to not show out of stock products.
- a record of ProductFacility is created for each product variant where its
lastInventoryCount is automatically updated as soon as availability are
imported/created (through PHYSICAL INVENTORY);
- virtual products are associated to some ProductCategories;

*Issue*:
Products are not shown in category listing also if they have stock
availability.

*Issue details:*
Listing of products is done through the screen "
*CatalogScreens.xml#categorydetail*" and the *CategoryDetail.groovy* script
is used to retrieve the list of products to show.

In the groovy script the service responsible to get the product category
members to show is *getProductCategoryAndLimitedMembers, *which checks and
filters out of stock products (if ProductStore is configured to do so).

Filtering out of stock products is done using
*ProductWorker.java#filterOutOfStockProducts
*method, that sums up all the lastInventoryCount (in all the facilities) of
each category member and if sum is GT 0 the (virtual) product is kept and
shown in listing.

The lastInventoryCount field in the table ProductFacility is updated
through the eeca service *setLastInventoryCount* on create/update on entity
InventoryItemDetail.
This service works only on the product on which a stock move is committed
(in my case a specific product variant): it's (virtual) parent is never
considered.

That behaviour, in addition to the fact that filterOutOfStock method works
on the category members that are the virtual parents, leads to products to
not be shown in listing also if they have stock availability.

*Possible solutions:*
>From my point of view there are two ways to fix this.

*1)* add the handling of lastInventoryCount on virtual parents to the
service setLastInventoryCount; the lastInventoryCount of the parent should
be the sum of all its variant in the same facility, and each time a variant
is modified, the related parent should be modified too.

*2)* add the handling of virtual products in the ProductWorker.java#
*filterOutOfStockProducts*: here when a virtual product category member is
processed, all its variants should be retrieved and their
lastInventoryCount added up through all facilities.
Only if the sum of all the variants in all the facilities is GT 0, then we
can keep and show the virtual product.

*Considerations:*
After a bit of research within the whole OFBiz project (R17.12.06) the
lastInventoryCount field has quite limited direct usage (basically only for
ecommerce scopes).
I think solution 2) is better, because I think that the ProductFacility
entity should not contain record for "virtual" products (products that
physically won't be sold, since you will sell a variant of it; for the same
reason virtual products should not have InventoryItem records associated).

I think that solution 1) instead is not so clean and forced to adopt
inventory item concepts also for virtual products, that in my opinion it
does not make too much sense.


Sorry for the long email, but I tried to retrieve as many details as
possible and I would be very happy to know your thoughts about it.

I opened an issue in Jira (OFBIZ-12359
<https://issues.apache.org/jira/browse/OFBIZ-12359>) for this.

Thanks in advance for your attention and help.

Giulio

-- 
Giulio Speri


*Mp Styl**e Srl*
via Antonio Meucci, 37
41019 Limidi di Soliera (MO)
T 059/684916
M 347/0965506

www.mpstyle.it

Reply via email to