Page 1 of 1

Confusing Checkout Page

Posted: Wed Oct 05, 2016 1:26 pm
by egormsen
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.
Product1.png
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.
Checkout2.png
Checkout3.png
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

Re: Confusing Checkout Page

Posted: Thu Oct 06, 2016 8:56 pm
by mazhar
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.

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;
        }
Now replace it with following code

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;
        }
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.

Re: Confusing Checkout Page

Posted: Fri Oct 07, 2016 2:53 am
by egormsen
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.
Checkout4.png

Re: Confusing Checkout Page

Posted: Fri Oct 07, 2016 3:54 am
by mazhar
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.