use of org.broadleafcommerce.core.catalog.domain.CategoryProductXref in project BroadleafCommerce by BroadleafCommerce.
the class ProductParentCategoryFieldPersistenceProvider method getDefaultCategory.
protected Category getDefaultCategory(Product product) {
Category response = null;
List<CategoryProductXref> xrefs = product.getAllParentCategoryXrefs();
if (!CollectionUtils.isEmpty(xrefs)) {
for (CategoryProductXref xref : xrefs) {
if (xref.getCategory().isActive() && xref.getDefaultReference() != null && xref.getDefaultReference()) {
response = xref.getCategory();
break;
}
}
}
return response;
}
use of org.broadleafcommerce.core.catalog.domain.CategoryProductXref 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.CategoryProductXref in project BroadleafCommerce by BroadleafCommerce.
the class ProductDaoImpl method readFilteredActiveProductsByCategoryInternal.
protected List<Product> readFilteredActiveProductsByCategoryInternal(Long categoryId, Date currentDate, SearchCriteria searchCriteria) {
// Set up the criteria query that specifies we want to return Products
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Product> criteria = builder.createQuery(Product.class);
// The root of our search is Category since we are browsing
Root<CategoryProductXrefImpl> productXref = criteria.from(CategoryProductXrefImpl.class);
// We want to filter on attributes from product and sku
Join<CategoryProductXref, Product> product = productXref.join("product");
Join<Product, Sku> sku = product.join("defaultSku");
Join<CategoryProductXref, Category> category = productXref.join("category");
// Product objects are what we want back
criteria.select(product);
// We only want results from the determine category
List<Predicate> restrictions = new ArrayList<Predicate>();
restrictions.add(category.get("id").in(sandBoxHelper.mergeCloneIds(CategoryImpl.class, categoryId)));
attachSearchCriteria(searchCriteria, product, sku, restrictions);
attachActiveRestriction(currentDate, product, sku, restrictions);
attachOrderBy(searchCriteria, product, sku, criteria);
// Execute the query with the restrictions
criteria.where(restrictions.toArray(new Predicate[restrictions.size()]));
TypedQuery<Product> typedQuery = em.createQuery(criteria);
return typedQuery.getResultList();
}
use of org.broadleafcommerce.core.catalog.domain.CategoryProductXref in project BroadleafCommerce by BroadleafCommerce.
the class CatalogTest method testCatalog.
@Test(groups = { "testCatalog" })
@Transactional
public void testCatalog() throws Exception {
Category category = new CategoryImpl();
category.setName("Soaps");
category = catalogService.saveCategory(category);
Category category2 = new CategoryImpl();
category2.setName("Towels");
category2 = catalogService.saveCategory(category2);
Category category3 = new CategoryImpl();
category3.setName("SuperCategory");
category3 = catalogService.saveCategory(category3);
CategoryXref temp = new CategoryXrefImpl();
temp.setCategory(category);
temp.setSubCategory(category3);
category3.getAllParentCategoryXrefs().add(temp);
category3 = catalogService.saveCategory(category3);
// Test category hierarchy
Long cat3Id = category3.getId();
category3 = null;
category3 = catalogService.findCategoryById(cat3Id);
category3.getAllParentCategoryXrefs().clear();
CategoryXref temp2 = new CategoryXrefImpl();
temp2.setCategory(category);
temp2.setSubCategory(category3);
category3.getAllParentCategoryXrefs().add(temp2);
CategoryXref temp3 = new CategoryXrefImpl();
temp3.setCategory(category2);
temp3.setSubCategory(category3);
category3.getAllParentCategoryXrefs().add(temp3);
category3 = catalogService.saveCategory(category3);
assert category3.getAllParentCategoryXrefs().size() == 2;
Product newProduct = new ProductImpl();
Sku newDefaultSku = new SkuImpl();
newDefaultSku = catalogService.saveSku(newDefaultSku);
newProduct.setDefaultSku(newDefaultSku);
newProduct.setName("Lavender Soap");
Calendar activeStartCal = Calendar.getInstance();
activeStartCal.add(Calendar.DAY_OF_YEAR, -2);
newProduct.setActiveStartDate(activeStartCal.getTime());
// newProduct.setAllParentCategories(allParentCategories);
newProduct.setDefaultCategory(category);
newProduct.getAllParentCategoryXrefs().clear();
newProduct = catalogService.saveProduct(newProduct);
CategoryProductXref categoryXref = new CategoryProductXrefImpl();
categoryXref.setProduct(newProduct);
categoryXref.setCategory(category);
newProduct.getAllParentCategoryXrefs().add(categoryXref);
CategoryProductXref categoryXref2 = new CategoryProductXrefImpl();
categoryXref2.setProduct(newProduct);
categoryXref2.setCategory(category2);
newProduct.getAllParentCategoryXrefs().add(categoryXref2);
newProduct = catalogService.saveProduct(newProduct);
Long newProductId = newProduct.getId();
Product testProduct = catalogService.findProductById(newProductId);
assert testProduct.getId().equals(testProduct.getId());
Category testCategory = catalogService.findCategoryByName("Soaps");
assert testCategory.getId().equals(category.getId());
testCategory = catalogService.findCategoryById(category.getId());
assert testCategory.getId().equals(category.getId());
Media media = new MediaImpl();
media.setAltText("test");
media.setTitle("large");
media.setUrl("http://myUrl");
category.getCategoryMediaXref().put("large", new CategoryMediaXrefImpl(category, media, "large"));
catalogService.saveCategory(testCategory);
testCategory = catalogService.findCategoryById(category.getId());
assert (testCategory.getCategoryMediaXref().get("large") != null);
List<Category> categories = catalogService.findAllCategories();
assert categories != null && categories.size() == 3;
List<Product> products = catalogService.findAllProducts();
boolean foundProduct = false;
for (Product product : products) {
if (product.getId().equals(newProductId)) {
foundProduct = true;
}
}
assert foundProduct == true;
products = catalogService.findProductsByName(newProduct.getName());
foundProduct = false;
for (Product product : products) {
if (product.getId().equals(newProductId)) {
foundProduct = true;
}
}
assert foundProduct == true;
Sku newSku = new SkuImpl();
newSku.setName("Under Armor T-Shirt -- Red");
newSku.setRetailPrice(new Money(14.99));
newSku.setActiveStartDate(activeStartCal.getTime());
newSku = catalogService.saveSku(newSku);
List<Sku> allSkus = new ArrayList<>();
allSkus.add(newSku);
newProduct.setAdditionalSkus(allSkus);
newProduct = catalogService.saveProduct(newProduct);
Long skuId = newProduct.getSkus().get(0).getId();
Sku testSku = catalogService.findSkuById(skuId);
assert testSku.getId().equals(skuId);
List<Sku> testSkus = catalogService.findAllSkus();
boolean foundSku = false;
for (Sku sku : testSkus) {
if (sku.getId().equals(skuId)) {
foundSku = true;
}
}
assert foundSku == true;
List<Long> skuIds = new ArrayList<>();
skuIds.add(skuId);
testSkus = catalogService.findSkusByIds(skuIds);
foundSku = false;
for (Sku sku : testSkus) {
if (sku.getId().equals(skuId)) {
foundSku = true;
}
}
assert foundSku == true;
}
use of org.broadleafcommerce.core.catalog.domain.CategoryProductXref 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;
}
Aggregations