You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ofbiz.apache.org by "Alexander Tzvetanov (Jira)" <ji...@apache.org> on 2021/08/13 05:49:00 UTC

[jira] [Created] (OFBIZ-12303) ChoppingCart object does not recognize two products with different configurations

Alexander Tzvetanov created OFBIZ-12303:
-------------------------------------------

             Summary: ChoppingCart object does not recognize two products with different configurations
                 Key: OFBIZ-12303
                 URL: https://issues.apache.org/jira/browse/OFBIZ-12303
             Project: OFBiz
          Issue Type: Bug
          Components: ecommerce
    Affects Versions: 17.12.04
         Environment: Centos Linux 8;

openjdk version "11.0.9" 2020-10-20 LTS;
PostgreSQL 12.1
            Reporter: Alexander Tzvetanov


By adding two equal products with different configurations in eCommerce cart it results in qty aggregation instead of adding 2 separate cart lines.
This is very easy to reproduce in Ofbiz demo site.
1. Select PC configuration as it is by default  with 2 GB memory;
2. Add it to cart;
3. Change a little PC's - i.e. with different memory (1 GB);
4. Add to cart again.
In result of that in the cart appears the first config with 2 GB twice. The correct behavior is to add 2 different cart lines with 2 different prices.

I found that the issue is in the class ConfigItem - equals method.
In my site I've done a quick fix. I am attaching my code to this bug only for demonstration of the problem.
Please apply fix for the next Ofbiz version.

 FIle: pplications/product/src/main/java/org/apache/ofbiz/product/config/ProductConfigWrapper.java
----------------------------------------------------------------------------------------
 Original code:
         @Override
         public boolean equals(Object o) {
             if (this == o) return true;
             if (o == null || getClass() != o.getClass()) return false;
             ConfigItem that = (ConfigItem) o;
             return Objects.equals(getConfigItem(), that.getConfigItem()) &&
                     Objects.equals(getConfigItemAssoc(), that.getConfigItemAssoc()) &&
                     Objects.equals(getOptions(), that.getOptions());
         }
 
 -----------------------------------------------------------------------------------------
 Changed code:
         private boolean isConfigOptionsSelectionEqual( List<ConfigOption> otherOptions) {
             List<ConfigOption> mineOptions = getOptions();
             for (int i = 0; i < mineOptions.size(); i ++) {
                 if (!(mineOptions.get(i).getId().equals(otherOptions.get(i).getId()) && 
                       mineOptions.get(i).isSelected()==otherOptions.get(i).isSelected())) {
                     return false;
                 }
                 
             }
             return true;
         }
         
         @Override
         public boolean equals(Object o) {
             if (this == o) return true;
             if (o == null || getClass() != o.getClass()) return false;
             ConfigItem that = (ConfigItem) o;
             return Objects.equals(getConfigItem(), that.getConfigItem()) &&
                     Objects.equals(getConfigItemAssoc(), that.getConfigItemAssoc()) &&
                     // Objects.equals(getOptions(), that.getOptions()
                     isConfigOptionsSelectionEqual(that.getOptions());
         } 

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)