We require a custom shipping cost module for Magento which complies with the standards required to allow future Magento upgrades.
Multiple options of shipping price are required, the the choice of shipping type is set for each item, not by the customer.
When setting up an item we will select the shipping price from either 'Free', 'Flat-Rate', or 'Import'.
There is no option for the customer in the cart, the customer will only see the cost of shipping.
The 'Free' is self explanatory, adding this item adds no extra freight charge to the cart.
'Flat-Rate' is the same as the cart flat-rate standard where the shipping cost is fixed for the order regardless of the number of items added (if all the purchased items are set up as a flat-rate shipping items)
The 3rd shipping charge type of 'Import' is where the cart pulls the freight charge from an existing external web service, passing the SKU and customer postcode in a URL (simple GET) and receiving back a plain-text floating-point value which represents the cost for shipping that item to that postcode. This external web service is not part of the project, is is an existing service we already have in place.
Web Service combined discount value:
When adding 'Import' freight prices for multiple quantity/items the first fright price is at the full cost as per the web service, and each additional freight cost is at the web-service price minus a certain discount amount which is specified in the setup for the freight module.
IE, if the freight prices for the 3 ('import') prices in the cart are $20, $30 and $20 and this discount value is set to $5 the total freight will be $20+($30-$5)+($20-$5)
Also: If the import value is returned as $20 and the quantity is 3 the shipping cost will be $20+($20-$5)+($20-$5)
If there are also any 'fixed-price' freight items in the cart then the fixed-price value is added to the total (once ony).
So, the setup page for the new module will require fields for at least the following data:
Flat-Rate price (float)
Web Service URL (text)
Web Service combined discount value (float)
The Item Setup page will now need to additionally include:
Shipping cost type selection (Flat or Fixed or Import)
Some features required which are not obvious are:
If the customer changes the shipping address the freight must be recalculated in the checkout and the session variable holding the postcode should also be updated.
If the web service returns a '-1' freight charge for any item the checkout will display a message that one or more of the items that are being purchased cannot be delivered that destination. (It is not required to block the checkout flow in this case)
The checkout / cart page needs to display the destination postcode and include an input to allow the customer to change the destination postcode,( or enter a destination postcode if they are not logged in), this would recalculate the freight cost.
If the customer updates their address details the freight should be recaluculated when the customer then returns to the cart. (and the session variable holding the postcode should also be updated)
We currently have a cart using php which works correctly with this customization, this php will be supplied as a sample of what is required.