We have a few products that are causing a little confusion for customers during the checkout process.
The products are books that are available in hardback versions and electronic versions. We have created these products with kitting options that give the customer the option of selecting the hardback version or epub or pdf versions. Here is the screenshot of the product.
This works great because if makes it easy for the customer to pick the book and then decided which format they want, much cleaner than creating separate products for each format of the book.
The problem comes when the get into the checkout process. If the customer picks either of the electronic versions everything works great, they are not asked to pick any shipping methods and the checkout works as expected.
The confusion arieses when they pick the hardcover version which obviously needs to be shipped. The store does correctly give them shipping options during the checkout but the product is displayed as "Non shipable" on the checkout page. Here are a couple of screenshots that show what I am talking about.
Guess the question is why is the store displaying shippable versions of the product as a non-shippable item even though is asks the customer to select a shipping method? Is there something that we can set on the product? We are not going to split them into multiple products as that is more confusing than this.
Eldon
Confusing Checkout Page
Re: Confusing Checkout Page
Thanks for reporting this. I am able to reproduce the issue on ShipMethod page. It seems like we need few improvements on ShipMethod.aspx page to handle this case. Here is a code workaround for you to try.
Edit your Website/Checkout/ShipMethod.aspx.cs file and locate following method.
Now replace it with following code
These new updates in this method code will ensure to handle the kitting scenario you mentioned. I am going to report this issue in our logs for fix.
Edit your Website/Checkout/ShipMethod.aspx.cs file and locate following method.
Code: Select all
protected IList<BasketItem> GetShipmentItems(object dataItem)
{
BasketShipment shipment = (BasketShipment)dataItem;
IList<BasketItem> singleItems = new List<BasketItem>();
foreach (BasketItem item in shipment.Items)
{
if (item.OrderItemType == OrderItemType.Product)
{
if (!item.IsChildItem || item.Product.KitStatus != CommerceBuilder.Products.KitStatus.Member)
{
singleItems.Add(item);
}
}
}
return singleItems;
}
Code: Select all
protected IList<BasketItem> GetShipmentItems(object dataItem)
{
BasketShipment shipment = (BasketShipment)dataItem;
IList<BasketItem> singleItems = new List<BasketItem>();
foreach (BasketItem item in shipment.Items)
{
if (item.OrderItemType == OrderItemType.Product)
{
bool addItem = false;
if (!item.IsChildItem || item.Product.KitStatus != CommerceBuilder.Products.KitStatus.Member) addItem = true;
// ONLY PRODUCT CHILD ITEMS REACH HERE
BasketItem parentItem = item.GetParentItem(true);
// IF THE PARENT ITEM IS ITEMIZED, CHILD PRODUCTS ARE VISIBLE
if (parentItem != null && parentItem.Product != null && parentItem.Product.Kit != null && parentItem.Product.Kit.ItemizeDisplay) addItem = true;
// THE PARENT IS NOT ITEMIZED. IN THIS CASE, WE SHOULD STILL SHOW THE PRODUCT IF THE
// PARENT IS IN A DIFFERENT SHIPMENT (OR POSSIBLY NON-SHIPPING) THIS AVOIDS THE
// POSSIBILITY THAT A SHIPMENT WILL APPEAR TO NOT CONTAIN ANY PRODUCTS
if (parentItem.ShipmentId != shipment.Id) addItem = true;
if (addItem) singleItems.Add(item);
}
}
return singleItems;
}
Re: Confusing Checkout Page
I put this code in and now the product shows up twice on the page, once in the area of shippable items but it is still showing as a non shippable item also.
Here is the updated screenshot.
Here is the updated screenshot.
Re: Confusing Checkout Page
What its doing is listing non shippable master in non shipping items while shippable item in shipment section. As for duplicate entry its actually trying to tell that Hardcover Book is within a kit called History of the Love of God. See there is wor "in" between both book names. If it still seems confusing you can make a code change in ConLib/Utility/BasketItemDetails.ascx.cs and hide master kit product information in your case.