You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by nm...@apache.org on 2021/09/28 15:32:51 UTC
[ofbiz-framework] branch trunk updated: Fixed: ShoppingCart object
does not recognize two products with different configurations (OFBIZ-12303)
This is an automated email from the ASF dual-hosted git repository.
nmalin pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/trunk by this push:
new b9c8938 Fixed: ShoppingCart object does not recognize two products with different configurations (OFBIZ-12303)
b9c8938 is described below
commit b9c8938bc13d28d2a8eaaad33856172f3c901803
Author: Nicolas Malin <ni...@nereide.fr>
AuthorDate: Tue Sep 28 17:17:17 2021 +0200
Fixed: ShoppingCart object does not recognize two products with different configurations (OFBIZ-12303)
By adding two equal products with different configurations in eCommerce cart it results in qty aggregation instead of adding 2 separate cart lines.
When we added a new configuration in cart, we analyze all configuration options already present to know if this configuration case is alredy load and merge the quantity added.
Thanks: Alexander Tzvetanov for raise this issue
---
.../ofbiz/product/config/ProductConfigWrapper.java | 23 ++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/applications/product/src/main/java/org/apache/ofbiz/product/config/ProductConfigWrapper.java b/applications/product/src/main/java/org/apache/ofbiz/product/config/ProductConfigWrapper.java
index cdf1c19..e1ba46b 100644
--- a/applications/product/src/main/java/org/apache/ofbiz/product/config/ProductConfigWrapper.java
+++ b/applications/product/src/main/java/org/apache/ofbiz/product/config/ProductConfigWrapper.java
@@ -31,6 +31,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.Set;
+import java.util.stream.Collectors;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.GeneralException;
import org.apache.ofbiz.base.util.UtilMisc;
@@ -694,6 +695,22 @@ public class ProductConfigWrapper implements Serializable {
return null;
}
+ private boolean isConfigOptionsSelectionEqual(ConfigItem other) {
+ List<ConfigOption> mineOptions = getOptions().stream().filter(x -> x.isSelected()).collect(Collectors.toList());
+ List<ConfigOption> otherOptions = other.getOptions().stream().filter(x -> x.isSelected()).collect(Collectors.toList());
+
+ if (otherOptions != null && mineOptions != null
+ && otherOptions.size() != mineOptions.size()) {
+ return false;
+ }
+ for (int i = 0; i < mineOptions.size(); i++) {
+ if (!mineOptions.get(i).equals(otherOptions.get(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -701,7 +718,7 @@ public class ProductConfigWrapper implements Serializable {
ConfigItem that = (ConfigItem) o;
return Objects.equals(getConfigItem(), that.getConfigItem())
&& Objects.equals(getConfigItemAssoc(), that.getConfigItemAssoc())
- && Objects.equals(getOptions(), that.getOptions());
+ && isConfigOptionsSelectionEqual(that);
}
@Override
@@ -1074,7 +1091,9 @@ public class ProductConfigWrapper implements Serializable {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ConfigOption that = (ConfigOption) o;
- return Objects.equals(availabilityDate, that.availabilityDate)
+ return that.getId() == getId()
+ && that.isSelected() == isSelected()
+ && Objects.equals(availabilityDate, that.availabilityDate)
&& Objects.equals(componentList, that.componentList)
&& Objects.equals(getComponentOptions(), that.getComponentOptions())
&& Objects.equals(configOption, that.configOption);