This comes from the fact that the two options available from CS-Cart don't meet my needs.
1. Using the Discount option, a customer can choose any shipping method and it will not charge them for this. This makes it impossible for them to "upgrade" to a better shipping option and is confusing
2. Setting a manual method with a very high shipping price for the price range that I don't want free shipping and $0 for anything above my threshold. (We'll use $99.00 for these examples.)Again... confusing to the customer, since I want to call it "Free Economy Shipping" and if they order a $5.00 part, it's going to say "Free Economy Shipping" but it's not free.
All that being said, here is the solution we have in place:
1. We configured a manual shipping method and called it "Free Economy Shipping"
2. In my case, we only offer free shipping for orders in the continental US, so we configured a shipping destination which included all states except AK and HI.
3. Then for that destination ONLY, we set a "Cost Dependency". Ours is "More than $0" is $0 and "More than $99" is $0. I don't think the threshold matters much as long as it's set to $0 for shipping. At this point, the system almost works. People in the Continental US will see an option for "Free Economy Shipping" at $0. The problem is that anyone can choose it regardless of whether their order is over $99. So...
4. Matt edited the "/skins/basic/customer/cart_pages/shipping_estimation.tpl" file. Around line 24 there is a line that reads:
{foreach from=$s_rate.rates key=key_id item=r}{math equation="x + y" x=$rate y=$r assign="rate"}{/foreach}
Below this line he added:
{* EDIT *}
{if $shipping_id == 12 && $cart.subtotal < 99}
{else}
{* /EDIT *}
The catch is that the 12 needs to be the shipping ID for the shipping plan that you want to be free.
Then there is a section that is enclosed in <p> </p>... below that add:
{* EDIT *}
{/if}
{* /EDIT *}
Also edit the /skins/basic/customer/cart_pages/shipping_rates.tpl file.
Around line 34, replace this line:
<option value="{$shipping_id}" {if $cart.shipping.$shipping_id}selected="selected"{/if}>{$s_rate.name} ({$s_rate.delivery_time}) - {include file="common_templates/price.tpl" value=$rate}</option>
with this:
{if $shipping_id == 12 && $cart.subtotal < 99}
{else}
<option value="{$shipping_id}" {if $cart.shipping.$shipping_id}selected="selected"{/if}>{$s_rate.name} ({$s_rate.delivery_time}) - {include file="common_templates/price.tpl" value=$rate}</option>
{/if}
After these changes, the Free Shipping method will only show up if the order is over $99. (So change that to whatever you use as your threshold.)
Since I didn't make this change, I'll have to forward any questions to Matt to answer. This was done on version 1.3.5 using the Basic template... Hope it helps.