Search in sources :

Example 1 with ProductVariantValue

use of com.axelor.apps.base.db.ProductVariantValue in project axelor-open-suite by axelor.

the class ProductVariantService method createProductVariantValue.

public ProductVariantValue createProductVariantValue(ProductVariantAttr productVariantAttr, String code, String name, BigDecimal priceExtra) {
    ProductVariantValue productVariantValue = new ProductVariantValue();
    productVariantValue.setCode(code);
    productVariantValue.setName(name);
    productVariantValue.setPriceExtra(priceExtra);
    productVariantValue.setProductVariantAttr(productVariantAttr);
    return productVariantValue;
}
Also used : ProductVariantValue(com.axelor.apps.base.db.ProductVariantValue)

Example 2 with ProductVariantValue

use of com.axelor.apps.base.db.ProductVariantValue in project axelor-open-suite by axelor.

the class ProductVariantService method containsProductVariantValue.

private boolean containsProductVariantValue(Product product, ProductVariantValue productVariantValue) {
    ProductVariant productVariantFind = product.getProductVariant();
    ProductVariantValue productVariantValue1 = productVariantFind.getProductVariantValue1();
    ProductVariantValue productVariantValue2 = productVariantFind.getProductVariantValue2();
    ProductVariantValue productVariantValue3 = productVariantFind.getProductVariantValue3();
    ProductVariantValue productVariantValue4 = productVariantFind.getProductVariantValue4();
    if ((productVariantValue1 != null && productVariantValue1.getCode().equals(productVariantValue.getCode()) && productVariantValue1.getProductVariantAttr().getCode().equals(productVariantValue.getProductVariantAttr().getCode())) || (productVariantValue2 != null && productVariantValue2.getCode().equals(productVariantValue.getCode()) && productVariantValue2.getProductVariantAttr().getCode().equals(productVariantValue.getProductVariantAttr().getCode())) || (productVariantValue3 != null && productVariantValue3.getCode().equals(productVariantValue.getCode()) && productVariantValue3.getProductVariantAttr().getCode().equals(productVariantValue.getProductVariantAttr().getCode())) || (productVariantValue4 != null && productVariantValue4.getCode().equals(productVariantValue.getCode()) && productVariantValue4.getProductVariantAttr().getCode().equals(productVariantValue.getProductVariantAttr().getCode()))) {
        return true;
    }
    return false;
}
Also used : ProductVariantValue(com.axelor.apps.base.db.ProductVariantValue) ProductVariant(com.axelor.apps.base.db.ProductVariant)

Example 3 with ProductVariantValue

use of com.axelor.apps.base.db.ProductVariantValue in project axelor-open-suite by axelor.

the class ProductServiceImpl method getProductExtraPrice.

/**
 * @param productVariant
 * @param applicationPriceSelect - 1 : Sale price - 2 : Cost price
 * @return
 */
@Override
public BigDecimal getProductExtraPrice(ProductVariant productVariant, int applicationPriceSelect) {
    BigDecimal extraPrice = BigDecimal.ZERO;
    ProductVariantValue productVariantValue1 = productVariant.getProductVariantValue1();
    ProductVariantValue productVariantValue2 = productVariant.getProductVariantValue2();
    ProductVariantValue productVariantValue3 = productVariant.getProductVariantValue3();
    ProductVariantValue productVariantValue4 = productVariant.getProductVariantValue4();
    if (productVariantValue1 != null && productVariantValue1.getApplicationPriceSelect() == applicationPriceSelect) {
        extraPrice = extraPrice.add(productVariantValue1.getPriceExtra());
    }
    if (productVariantValue2 != null) {
        extraPrice = extraPrice.add(productVariantValue2.getPriceExtra());
    }
    if (productVariantValue3 != null) {
        extraPrice = extraPrice.add(productVariantValue3.getPriceExtra());
    }
    if (productVariantValue4 != null) {
        extraPrice = extraPrice.add(productVariantValue4.getPriceExtra());
    }
    return extraPrice;
}
Also used : ProductVariantValue(com.axelor.apps.base.db.ProductVariantValue) BigDecimal(java.math.BigDecimal)

Example 4 with ProductVariantValue

use of com.axelor.apps.base.db.ProductVariantValue in project axelor-open-suite by axelor.

the class ProductVariantService method createProductVariantAttr.

public ProductVariantAttr createProductVariantAttr(String name) {
    ProductVariantAttr productVariantAttr = new ProductVariantAttr();
    productVariantAttr.setName(name);
    productVariantAttr.setProductVariantValueList(new ArrayList<ProductVariantValue>());
    return productVariantAttr;
}
Also used : ProductVariantValue(com.axelor.apps.base.db.ProductVariantValue) ProductVariantAttr(com.axelor.apps.base.db.ProductVariantAttr)

Example 5 with ProductVariantValue

use of com.axelor.apps.base.db.ProductVariantValue in project axelor-open-suite by axelor.

the class ProductVariantService method getProductVariant.

private Product getProductVariant(ProductVariant parentProductVariant, Product productSearched) {
    LOG.debug("Recherche d'un variant du produit {} ayant des attributs communs avec {}", productSearched.getCode(), parentProductVariant.getName());
    ProductVariantValue productVariantValue1 = parentProductVariant.getProductVariantValue1();
    ProductVariantValue productVariantValue2 = parentProductVariant.getProductVariantValue2();
    ProductVariantValue productVariantValue3 = parentProductVariant.getProductVariantValue3();
    ProductVariantValue productVariantValue4 = parentProductVariant.getProductVariantValue4();
    if (productVariantValue1 != null) {
        LOG.debug("Recherche d'un variant de produit ayant au moins comme attributs {} : {}", productVariantValue1.getProductVariantAttr().getCode(), productVariantValue1.getCode());
        List<? extends Product> productList = productRepo.all().filter("self.parentProduct = ?1 " + "AND ((self.productVariant.productVariantAttr1.code = ?2 AND self.productVariant.productVariantValue1.code = ?3) " + "OR (self.productVariant.productVariantAttr2.code = ?2 AND self.productVariant.productVariantValue2.code = ?3) " + "OR (self.productVariant.productVariantAttr3.code = ?2 AND self.productVariant.productVariantValue3.code = ?3) " + "OR (self.productVariant.productVariantAttr4.code = ?2 AND self.productVariant.productVariantValue4.code = ?3)) ", productSearched, productVariantValue1.getProductVariantAttr().getCode(), productVariantValue1.getCode()).fetch();
        if (productList == null || productList.isEmpty()) {
            return productSearched;
        }
        Product productFind = null;
        int nbAttr = 0;
        for (Product product : productList) {
            if (productVariantValue1 != null && productVariantValue2 != null && productVariantValue3 != null && productVariantValue4 != null) {
                // 4
                if (this.containsProductVariantValue(product, productVariantValue1) && this.containsProductVariantValue(product, productVariantValue2) && this.containsProductVariantValue(product, productVariantValue3) && this.containsProductVariantValue(product, productVariantValue4)) {
                    LOG.debug("Variant de produit trouvé directement : {} avec l'ensemble des attributs (4) en commun", product.getCode());
                    return product;
                }
                // 3
                if (nbAttr < 3) {
                    if (this.containsProductVariantValue(product, productVariantValue1) && this.containsProductVariantValue(product, productVariantValue2) && this.containsProductVariantValue(product, productVariantValue3)) {
                        productFind = product;
                        nbAttr = 3;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue1) && this.containsProductVariantValue(product, productVariantValue2) && this.containsProductVariantValue(product, productVariantValue4)) {
                        productFind = product;
                        nbAttr = 3;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue1) && this.containsProductVariantValue(product, productVariantValue3) && this.containsProductVariantValue(product, productVariantValue4)) {
                        productFind = product;
                        nbAttr = 3;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue2) && this.containsProductVariantValue(product, productVariantValue3) && this.containsProductVariantValue(product, productVariantValue4)) {
                        productFind = product;
                        nbAttr = 3;
                    }
                }
                if (nbAttr < 2) {
                    // 2
                    if (this.containsProductVariantValue(product, productVariantValue1) && this.containsProductVariantValue(product, productVariantValue2)) {
                        productFind = product;
                        nbAttr = 2;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue1) && this.containsProductVariantValue(product, productVariantValue3)) {
                        productFind = product;
                        nbAttr = 2;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue1) && this.containsProductVariantValue(product, productVariantValue4)) {
                        productFind = product;
                        nbAttr = 2;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue2) && this.containsProductVariantValue(product, productVariantValue3)) {
                        productFind = product;
                        nbAttr = 2;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue2) && this.containsProductVariantValue(product, productVariantValue4)) {
                        productFind = product;
                        nbAttr = 2;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue3) && this.containsProductVariantValue(product, productVariantValue4)) {
                        productFind = product;
                        nbAttr = 2;
                    }
                }
                if (nbAttr < 1) {
                    // 1
                    if (this.containsProductVariantValue(product, productVariantValue1)) {
                        productFind = product;
                        nbAttr = 1;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue2)) {
                        productFind = product;
                        nbAttr = 1;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue3)) {
                        productFind = product;
                        nbAttr = 1;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue4)) {
                        productFind = product;
                        nbAttr = 1;
                    }
                }
            }
            if (productVariantValue1 != null && productVariantValue2 != null && productVariantValue3 != null) {
                // 3
                if (this.containsProductVariantValue(product, productVariantValue1) && this.containsProductVariantValue(product, productVariantValue2) && this.containsProductVariantValue(product, productVariantValue3)) {
                    LOG.debug("Variant de produit trouvé directement : {} avec l'ensemble des attributs (3) en commun", product.getCode());
                    return product;
                }
                if (nbAttr < 2) {
                    // 2
                    if (this.containsProductVariantValue(product, productVariantValue1) && this.containsProductVariantValue(product, productVariantValue2)) {
                        productFind = product;
                        nbAttr = 2;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue1) && this.containsProductVariantValue(product, productVariantValue3)) {
                        productFind = product;
                        nbAttr = 2;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue2) && this.containsProductVariantValue(product, productVariantValue3)) {
                        productFind = product;
                        nbAttr = 2;
                    }
                }
                if (nbAttr < 1) {
                    // 1
                    if (this.containsProductVariantValue(product, productVariantValue1)) {
                        productFind = product;
                        nbAttr = 1;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue2)) {
                        productFind = product;
                        nbAttr = 1;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue3)) {
                        productFind = product;
                        nbAttr = 1;
                    }
                }
            }
            if (productVariantValue1 != null && productVariantValue2 != null) {
                // 2
                if (this.containsProductVariantValue(product, productVariantValue1) && this.containsProductVariantValue(product, productVariantValue2)) {
                    LOG.debug("Variant de produit trouvé directement : {} avec l'ensemble des attributs (2) en commun", product.getCode());
                    return product;
                }
                if (nbAttr < 1) {
                    // 1
                    if (this.containsProductVariantValue(product, productVariantValue1)) {
                        productFind = product;
                        nbAttr = 1;
                    }
                    if (this.containsProductVariantValue(product, productVariantValue2)) {
                        productFind = product;
                        nbAttr = 1;
                    }
                }
            }
            if (productVariantValue1 != null) {
                if (this.containsProductVariantValue(product, productVariantValue1)) {
                    LOG.debug("Variant de produit trouvé directement : {} avec l'ensemble des attributs (1) en commun", product.getCode());
                    return product;
                }
            }
        }
        if (productFind != null) {
            LOG.debug("Variant de produit trouvé : {} avec {} attributs en commun", productFind.getCode(), nbAttr);
            return productFind;
        }
    }
    return productSearched;
}
Also used : ProductVariantValue(com.axelor.apps.base.db.ProductVariantValue) Product(com.axelor.apps.base.db.Product)

Aggregations

ProductVariantValue (com.axelor.apps.base.db.ProductVariantValue)5 Product (com.axelor.apps.base.db.Product)1 ProductVariant (com.axelor.apps.base.db.ProductVariant)1 ProductVariantAttr (com.axelor.apps.base.db.ProductVariantAttr)1 BigDecimal (java.math.BigDecimal)1