use of org.broadleafcommerce.core.catalog.domain.ProductBundle in project BroadleafCommerce by BroadleafCommerce.
the class ProductCustomPersistenceHandler method update.
@Override
public Entity update(PersistencePackage persistencePackage, DynamicEntityDao dynamicEntityDao, RecordHelper helper) throws ServiceException {
Entity entity = persistencePackage.getEntity();
try {
PersistencePerspective persistencePerspective = persistencePackage.getPersistencePerspective();
Map<String, FieldMetadata> adminProperties = helper.getSimpleMergedProperties(Product.class.getName(), persistencePerspective);
BasicFieldMetadata defaultCategory = ((BasicFieldMetadata) adminProperties.get("defaultCategory"));
defaultCategory.setFriendlyName("ProductImpl_Parent_Category");
if (entity.findProperty("defaultCategory") != null && !StringUtils.isEmpty(entity.findProperty("defaultCategory").getValue())) {
// Change the inherited type so that this property is disconnected from the entity and validation is temporarily skipped.
// This is useful when the defaultCategory was previously completely empty for whatever reason. Without this, such
// a case would fail the validation, even though the property was specified in the submission.
defaultCategory.setInheritedFromType(String.class.getName());
}
Object primaryKey = helper.getPrimaryKey(entity, adminProperties);
Product adminInstance = (Product) dynamicEntityDao.retrieve(Class.forName(entity.getType()[0]), primaryKey);
if (adminInstance instanceof ProductBundle) {
removeBundleFieldRestrictions((ProductBundle) adminInstance, adminProperties, entity);
}
CategoryProductXref oldDefault = getCurrentDefaultXref(adminInstance);
// so override required flag for that field during deployment
if (BroadleafRequestContext.getBroadleafRequestContext().isProductionSandBox()) {
((BasicFieldMetadata) adminProperties.get("defaultCategory")).setRequiredOverride(false);
}
adminInstance = (Product) helper.createPopulatedInstance(adminInstance, entity, adminProperties, false);
adminInstance = dynamicEntityDao.merge(adminInstance);
boolean handled = false;
if (extensionManager != null) {
ExtensionResultStatusType result = extensionManager.getProxy().manageParentCategoryForUpdate(persistencePackage, adminInstance);
handled = ExtensionResultStatusType.NOT_HANDLED != result;
extensionManager.getProxy().manageFields(persistencePackage, adminInstance);
}
if (!handled) {
setupXref(adminInstance);
removeOldDefault(adminInstance, oldDefault, entity);
}
return helper.getRecord(adminProperties, adminInstance, null, null);
} catch (Exception e) {
throw new ServiceException("Unable to update entity for " + entity.getType()[0], e);
}
}
use of org.broadleafcommerce.core.catalog.domain.ProductBundle in project BroadleafCommerce by BroadleafCommerce.
the class SkuSiteMapGenerator method addSiteMapEntries.
@Override
public void addSiteMapEntries(SiteMapGeneratorConfiguration smgc, SiteMapBuilder siteMapBuilder) {
int pageNum = 0;
List<Sku> skus;
do {
skus = skuDao.readAllActiveSkus(pageNum++, pageSize);
for (Sku sku : skus) {
Product defaultProduct = sku.getDefaultProduct();
if (defaultProduct != null && CollectionUtils.isNotEmpty(defaultProduct.getAdditionalSkus())) {
continue;
}
if (defaultProduct instanceof ProductBundle) {
continue;
}
if (StringUtils.isEmpty(sku.getProduct().getUrl() + sku.getUrlKey())) {
continue;
}
SiteMapURLWrapper siteMapUrl = new SiteMapURLWrapper();
// location
siteMapUrl.setLoc(generateUri(siteMapBuilder, sku));
// change frequency
siteMapUrl.setChangeFreqType(smgc.getSiteMapChangeFreq());
// priority
siteMapUrl.setPriorityType(smgc.getSiteMapPriority());
// lastModDate
siteMapUrl.setLastModDate(generateDate(sku));
constructImageURLs(siteMapBuilder, siteMapUrl, sku);
siteMapBuilder.addUrl(siteMapUrl);
}
} while (skus.size() == pageSize);
}
use of org.broadleafcommerce.core.catalog.domain.ProductBundle in project BroadleafCommerce by BroadleafCommerce.
the class OfferDataItemProvider method createOrderWithBundle.
/**
* Create order with a bundle with two items. Bundle has a quantity of 2.
* Bundle item 1 has quantity of 2, bundle item 2 has quantity of 3
* @return
*/
public Order createOrderWithBundle() {
Order order = new OrderImpl();
order.setId(getOrderId());
Category category1 = new CategoryImpl();
category1.setName("test1");
category1.setId(1L);
Product product1 = new ProductImpl();
Sku sku1 = new SkuImpl();
sku1.setName("test1");
sku1.setId(1L);
sku1.setDiscountable(true);
sku1.setRetailPrice(new Money(10D));
product1.setDefaultSku(sku1);
CategoryProductXref xref1 = new CategoryProductXrefImpl();
xref1.setProduct(product1);
xref1.setCategory(category1);
category1.getAllProductXrefs().add(xref1);
Category category2 = new CategoryImpl();
category2.setName("test2");
category2.setId(2L);
Product product2 = new ProductImpl();
Sku sku2 = new SkuImpl();
sku2.setName("test2");
sku2.setId(2L);
sku2.setDiscountable(true);
sku2.setRetailPrice(new Money(10D));
product2.setDefaultSku(sku2);
CategoryProductXref xref2 = new CategoryProductXrefImpl();
xref2.setProduct(product2);
xref2.setCategory(category2);
category2.getAllProductXrefs().add(xref2);
ProductBundle pb = new ProductBundleImpl();
pb.setPricingModel(ProductBundlePricingModelType.ITEM_SUM);
BundleOrderItem bundleOrderItem = new BundleOrderItemImpl();
bundleOrderItem.setCategory(category1);
bundleOrderItem.setName("test1");
bundleOrderItem.setOrder(order);
bundleOrderItem.setOrderItemType(OrderItemType.DISCRETE);
bundleOrderItem.setQuantity(2);
bundleOrderItem.setId(getOrderItemId());
bundleOrderItem.setOrder(order);
bundleOrderItem.setRetailPrice(new Money(10D));
bundleOrderItem.setProductBundle(pb);
OrderItemPriceDetail priceDetail = new OrderItemPriceDetailImpl();
priceDetail.setOrderItem(bundleOrderItem);
priceDetail.setQuantity(2);
bundleOrderItem.getOrderItemPriceDetails().add(priceDetail);
order.getOrderItems().add(bundleOrderItem);
DiscreteOrderItem orderItem1 = new DiscreteOrderItemImpl();
orderItem1.setCategory(category1);
orderItem1.setName("test1");
orderItem1.setOrder(order);
orderItem1.setOrderItemType(OrderItemType.DISCRETE);
orderItem1.setProduct(product1);
orderItem1.setQuantity(2);
orderItem1.setSku(sku1);
orderItem1.setId(getOrderItemId());
orderItem1.setOrder(order);
OrderItemPriceDetail priceDetail1 = new OrderItemPriceDetailImpl();
priceDetail1.setOrderItem(orderItem1);
priceDetail1.setQuantity(2);
orderItem1.getOrderItemPriceDetails().add(priceDetail1);
bundleOrderItem.getDiscreteOrderItems().add(orderItem1);
DiscreteOrderItem orderItem2 = new DiscreteOrderItemImpl();
orderItem2.setCategory(category2);
orderItem2.setName("test2");
orderItem2.setOrder(order);
orderItem2.setOrderItemType(OrderItemType.DISCRETE);
orderItem2.setProduct(product2);
orderItem2.setQuantity(3);
orderItem2.setSku(sku2);
orderItem2.setId(getOrderItemId());
orderItem2.setOrder(order);
OrderItemPriceDetail priceDetail2 = new OrderItemPriceDetailImpl();
priceDetail2.setOrderItem(orderItem2);
priceDetail2.setQuantity(3);
orderItem2.getOrderItemPriceDetails().add(priceDetail2);
bundleOrderItem.getDiscreteOrderItems().add(orderItem2);
Customer customer = new CustomerImpl();
customer.setEmailAddress("test@test.com");
customer.setFirstName("John");
customer.setLastName("Tester");
customer.setReceiveEmail(true);
customer.setRegistered(true);
order.setCustomer(customer);
order.setEmailAddress("test@test.com");
FulfillmentGroup fg1 = new FulfillmentGroupImpl();
fg1.setId(1L);
Address address1 = new AddressImpl();
address1.setAddressLine1("123 Test Road");
address1.setCity("Dallas");
Country country = new CountryImpl();
country.setAbbreviation("US");
country.setName("United States");
ISOCountry isoCountry = new ISOCountryImpl();
isoCountry.setAlpha2("US");
isoCountry.setName("UNITED STATES");
address1.setCountry(country);
address1.setIsoCountryAlpha2(isoCountry);
address1.setDefault(true);
address1.setFirstName("John");
address1.setLastName("Tester");
address1.setPostalCode("75244");
Phone primary = new PhoneImpl();
primary.setPhoneNumber("972-976-1234");
address1.setPhonePrimary(primary);
State state = new StateImpl();
state.setAbbreviation("TX");
state.setCountry(country);
state.setName("Texas");
address1.setState(state);
address1.setIsoCountrySubdivision("US-TX");
fg1.setAddress(address1);
fg1.setOrder(order);
fg1.setPrimary(true);
fg1.setRetailShippingPrice(new Money(10D));
fg1.setShippingPrice(new Money(10D));
fg1.setType(FulfillmentType.PHYSICAL_SHIP);
fg1.setOrder(order);
FulfillmentGroupItem fgItem1 = new FulfillmentGroupItemImpl();
fgItem1.setFulfillmentGroup(fg1);
fgItem1.setOrderItem(orderItem1);
fgItem1.setQuantity(2);
// fgItem1.setRetailPrice(new Money(19.99D));
fg1.getFulfillmentGroupItems().add(fgItem1);
order.getFulfillmentGroups().add(fg1);
FulfillmentGroup fg2 = new FulfillmentGroupImpl();
fg2.setId(2L);
Address address2 = new AddressImpl();
address2.setAddressLine1("124 Test Road");
address2.setCity("Dallas");
Country country2 = new CountryImpl();
country2.setAbbreviation("US");
country2.setName("United States");
ISOCountry isoCountry2 = new ISOCountryImpl();
isoCountry2.setAlpha2("US");
isoCountry2.setName("UNITED STATES");
address2.setCountry(country2);
address2.setIsoCountryAlpha2(isoCountry2);
address2.setDefault(true);
address2.setFirstName("John");
address2.setLastName("Tester");
address2.setPostalCode("75244");
Phone primary2 = new PhoneImpl();
primary2.setPhoneNumber("972-976-1234");
address2.setPhonePrimary(primary2);
State state2 = new StateImpl();
state2.setAbbreviation("TX");
state2.setCountry(country2);
state2.setName("Texas");
address2.setState(state2);
address2.setIsoCountrySubdivision("US-TX");
fg2.setAddress(address2);
fg2.setOrder(order);
fg2.setPrimary(true);
fg2.setRetailShippingPrice(new Money(20D));
fg2.setShippingPrice(new Money(20D));
fg2.setType(FulfillmentType.PHYSICAL_SHIP);
fg2.setOrder(order);
FulfillmentGroupItem fgItem2 = new FulfillmentGroupItemImpl();
fgItem2.setFulfillmentGroup(fg2);
fgItem2.setOrderItem(orderItem2);
fgItem2.setQuantity(3);
// fgItem2.setRetailPrice(new Money(29.99D));
fg2.getFulfillmentGroupItems().add(fgItem2);
order.getFulfillmentGroups().add(fg2);
order.setSubTotal(new Money((2 * 19.99D) + (3 * 29.99D)));
orders.put(order.getId(), order);
return order;
}
use of org.broadleafcommerce.core.catalog.domain.ProductBundle in project BroadleafCommerce by BroadleafCommerce.
the class OrderItemServiceImpl method createBundleOrderItem.
@Override
public BundleOrderItem createBundleOrderItem(final ProductBundleOrderItemRequest itemRequest, boolean saveItem) {
ProductBundle productBundle = itemRequest.getProductBundle();
BundleOrderItem bundleOrderItem = (BundleOrderItem) orderItemDao.create(OrderItemType.BUNDLE);
bundleOrderItem.setQuantity(itemRequest.getQuantity());
bundleOrderItem.setCategory(itemRequest.getCategory());
bundleOrderItem.setSku(itemRequest.getSku());
bundleOrderItem.setName(itemRequest.getName());
bundleOrderItem.setProductBundle(productBundle);
bundleOrderItem.setOrder(itemRequest.getOrder());
if (itemRequest.getSalePriceOverride() != null) {
bundleOrderItem.setSalePriceOverride(Boolean.TRUE);
bundleOrderItem.setSalePrice(itemRequest.getSalePriceOverride());
bundleOrderItem.setBaseSalePrice(itemRequest.getSalePriceOverride());
}
if (itemRequest.getRetailPriceOverride() != null) {
bundleOrderItem.setRetailPriceOverride(Boolean.TRUE);
bundleOrderItem.setRetailPrice(itemRequest.getRetailPriceOverride());
bundleOrderItem.setBaseRetailPrice(itemRequest.getRetailPriceOverride());
}
for (SkuBundleItem skuBundleItem : productBundle.getSkuBundleItems()) {
Product bundleProduct = skuBundleItem.getBundle();
Sku bundleSku = skuBundleItem.getSku();
Category bundleCategory = null;
if (itemRequest.getCategory() != null) {
bundleCategory = itemRequest.getCategory();
}
if (bundleCategory == null && bundleProduct != null) {
bundleCategory = bundleProduct.getDefaultCategory();
}
DiscreteOrderItemRequest bundleItemRequest = new DiscreteOrderItemRequest();
bundleItemRequest.setCategory(bundleCategory);
bundleItemRequest.setProduct(bundleProduct);
bundleItemRequest.setQuantity(skuBundleItem.getQuantity());
bundleItemRequest.setSku(bundleSku);
bundleItemRequest.setItemAttributes(itemRequest.getItemAttributes());
bundleItemRequest.setSalePriceOverride(skuBundleItem.getSalePrice());
bundleItemRequest.setBundleOrderItem(bundleOrderItem);
DiscreteOrderItem bundleDiscreteItem = createDiscreteOrderItem(bundleItemRequest);
bundleDiscreteItem.setSkuBundleItem(skuBundleItem);
bundleOrderItem.getDiscreteOrderItems().add(bundleDiscreteItem);
}
if (saveItem) {
bundleOrderItem = (BundleOrderItem) saveOrderItem(bundleOrderItem);
}
applyAdditionalOrderItemProperties(bundleOrderItem);
return bundleOrderItem;
}
Aggregations