All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.broadleafcommerce.core.catalog.domain.SkuBundleItemImpl Maven / Gradle / Ivy
/*
* #%L
* BroadleafCommerce Framework
* %%
* Copyright (C) 2009 - 2013 Broadleaf Commerce
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package org.broadleafcommerce.core.catalog.domain;
import org.broadleafcommerce.common.extensibility.jpa.copy.DirectCopyTransform;
import org.broadleafcommerce.common.extensibility.jpa.copy.DirectCopyTransformMember;
import org.broadleafcommerce.common.extensibility.jpa.copy.DirectCopyTransformTypes;
import org.broadleafcommerce.common.money.Money;
import org.broadleafcommerce.common.presentation.AdminPresentation;
import org.broadleafcommerce.common.presentation.AdminPresentationClass;
import org.broadleafcommerce.common.presentation.AdminPresentationToOneLookup;
import org.broadleafcommerce.common.presentation.PopulateToOneFieldsEnum;
import org.broadleafcommerce.common.presentation.RequiredOverride;
import org.broadleafcommerce.common.presentation.client.SupportedFieldType;
import org.broadleafcommerce.common.presentation.client.VisibilityEnum;
import org.broadleafcommerce.core.catalog.service.dynamic.DefaultDynamicSkuPricingInvocationHandler;
import org.broadleafcommerce.core.catalog.service.dynamic.DynamicSkuPrices;
import org.broadleafcommerce.core.catalog.service.dynamic.SkuPricingConsiderationContext;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
import org.springframework.util.ClassUtils;
import java.lang.reflect.Proxy;
import java.math.BigDecimal;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "BLC_SKU_BUNDLE_ITEM")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "blProducts")
@AdminPresentationClass(populateToOneFields = PopulateToOneFieldsEnum.FALSE)
@DirectCopyTransform({
@DirectCopyTransformMember(templateTokens = DirectCopyTransformTypes.SANDBOX, skipOverlaps=true),
@DirectCopyTransformMember(templateTokens = DirectCopyTransformTypes.MULTITENANT_CATALOG)
})
public class SkuBundleItemImpl implements SkuBundleItem {
private static final long serialVersionUID = 1L;
/** The id. */
@Id
@GeneratedValue(generator = "SkuBundleItemId")
@GenericGenerator(
name="SkuBundleItemId",
strategy="org.broadleafcommerce.common.persistence.IdOverrideTableGenerator",
parameters = {
@Parameter(name = "segment_value", value = "SkuBundleItemImpl"),
@Parameter(name = "entity_name", value = "org.broadleafcommerce.core.catalog.domain.SkuBundleItemImpl")
}
)
@Column(name = "SKU_BUNDLE_ITEM_ID")
@AdminPresentation(friendlyName = "SkuBundleItemImpl_ID", visibility = VisibilityEnum.HIDDEN_ALL)
protected Long id;
@Column(name = "QUANTITY", nullable=false)
@AdminPresentation(friendlyName = "bundleItemQuantity", prominent = true,
requiredOverride = RequiredOverride.REQUIRED)
protected Integer quantity;
@Column(name = "ITEM_SALE_PRICE", precision=19, scale=5)
@AdminPresentation(friendlyName = "bundleItemSalePrice", prominent = true,
tooltip="bundleItemSalePriceTooltip",
fieldType = SupportedFieldType.MONEY)
protected BigDecimal itemSalePrice;
@ManyToOne(targetEntity = ProductBundleImpl.class, optional = false)
@JoinColumn(name = "PRODUCT_BUNDLE_ID", referencedColumnName = "PRODUCT_ID")
protected ProductBundle bundle;
@ManyToOne(targetEntity = SkuImpl.class, optional = false)
@JoinColumn(name = "SKU_ID", referencedColumnName = "SKU_ID")
@AdminPresentation(friendlyName = "Sku", prominent = true,
order = 0, gridOrder = 0)
@AdminPresentationToOneLookup()
protected Sku sku;
@Transient
protected DynamicSkuPrices dynamicPrices = null;
@Override
public Long getId() {
return id;
}
@Override
public void setId(Long id) {
this.id = id;
}
@Override
public Integer getQuantity() {
return quantity;
}
@Override
public void setQuantity(Integer quantity) {
this.quantity = quantity;
}
public Money getDynamicSalePrice(Sku sku, BigDecimal salePrice) {
Money returnPrice = null;
if (SkuPricingConsiderationContext.hasDynamicPricing()) {
if (dynamicPrices != null) {
returnPrice = dynamicPrices.getSalePrice();
} else {
DefaultDynamicSkuPricingInvocationHandler handler = new DefaultDynamicSkuPricingInvocationHandler(sku, salePrice);
Sku proxy = (Sku) Proxy.newProxyInstance(sku.getClass().getClassLoader(), ClassUtils.getAllInterfacesForClass(sku.getClass()), handler);
dynamicPrices = SkuPricingConsiderationContext.getSkuPricingService().getSkuPrices(proxy, SkuPricingConsiderationContext.getSkuPricingConsiderationContext());
returnPrice = dynamicPrices.getSalePrice();
}
} else {
if (salePrice != null) {
returnPrice = new Money(salePrice,Money.defaultCurrency());
}
}
return returnPrice;
}
@Override
public void setSalePrice(Money salePrice) {
if (salePrice != null) {
this.itemSalePrice = salePrice.getAmount();
} else {
this.itemSalePrice = null;
}
}
@Override
public Money getSalePrice() {
if (itemSalePrice == null) {
return sku.getSalePrice();
} else {
return getDynamicSalePrice(sku, itemSalePrice);
}
}
@Override
public Money getRetailPrice() {
return sku.getRetailPrice();
}
@Override
public ProductBundle getBundle() {
return bundle;
}
@Override
public void setBundle(ProductBundle bundle) {
this.bundle = bundle;
}
@Override
public Sku getSku() {
return sku;
}
@Override
public void setSku(Sku sku) {
this.sku = sku;
}
@Override
public void clearDynamicPrices() {
this.dynamicPrices = null;
}
}