diff --git a/Workspace/client/src/main/java/com/pqt/client/gui/modules/stock_screen/product_manager_screen/ProductManagerScreenModel.java b/Workspace/client/src/main/java/com/pqt/client/gui/modules/stock_screen/product_manager_screen/ProductManagerScreenModel.java index 962390fb..4469bd58 100644 --- a/Workspace/client/src/main/java/com/pqt/client/gui/modules/stock_screen/product_manager_screen/ProductManagerScreenModel.java +++ b/Workspace/client/src/main/java/com/pqt/client/gui/modules/stock_screen/product_manager_screen/ProductManagerScreenModel.java @@ -1,9 +1,7 @@ package com.pqt.client.gui.modules.stock_screen.product_manager_screen; -import com.pqt.client.gui.ressources.strings.GUIStringTool; import com.pqt.client.module.stock.StockService; import com.pqt.core.entities.product.Category; -import com.pqt.core.entities.product.LightweightProduct; import com.pqt.core.entities.product.Product; import java.util.*; @@ -40,12 +38,38 @@ class ProductManagerScreenModel { } boolean isProductCreationPossible() { - return (initialData!=null && !currentData.equals(initialData)) + return (initialData==null || !areProductsEqual(initialData, currentData)) && !currentData.getName().isEmpty() && currentData.getCategory()!=null && currentData.getPrice()>=0; } + private boolean areProductsEqual(Product p1, Product p2){ + + /* + Ces listes sont des différentiels entre les deux listes de composants des deux produits. + + Elles sont toutes les deux vides ssi les produits ont les mêmes composants. + + Si la liste diff de p1 contient un produit après le diff, c'est que ce produit n'était pas un composant de + p2, et vice-versa. + */ + + List p1Diff = new ArrayList<>(p1.getComponents()), + p2Diff = new ArrayList<>(p2.getComponents()); + p1Diff.removeAll(p2.getComponents()); + p2Diff.removeAll(p1.getComponents()); + + return p1.getName().equals(p2.getName()) + && p1.getPrice() == p2.getPrice() + && p1.getCategory() == p2.getCategory() + && p1.getAmountSold() == p2.getAmountSold() + && p1.getAmountRemaining() == p2.getAmountRemaining() + && p1.isSellable() == p2.isSellable() + && p1Diff.size()==0 + && p2Diff.size()==0; + } + void addComponent(Product product) { currentData.getComponents().add(product); }