Dear Mike,
To understand why things don't work as expected, I'll have to tell you a few details about how the plugin evaluates the zones and the rules:
- The plugin first looks at the first zone, and goes through the rules sequentially (the countries are implicitly added as an additional condition to each rule), until it finds a line where all conditions match and where a shipping cost (or NoShipping) is given. If such a match is found, it is returned.
- If none of the rules of the first zone matches, then the second rule is considered in exactly the same way.
- It is not possible to use one rule as condition to jump out of the current country zone. Each line will be considered separately, and you'll have to add all conditions to each rule. There is simply no way to set conditions that apply to all rules of a zone automatically. So if you have a line like
Name=Shipping to Continental USA Zone 1; 800<=ZIP<=884 OR 889<=ZIP<=899
then the conditions of that line will only apply to that one line, but not to all subsequent rules! You'll have to add the conditions to each rule.
Here's my script for zone 1:
Name=Shipping to Continental USA Zone 1; 800<=ZIP<=884 OR 889<=ZIP<=899
UseWeight<5; Shipping=2.35*ceil(UseWeight)
UseWeight<11; Shipping=2.41*ceil(UseWeight)
UseWeight<16; Shipping=1.05*ceil(UseWeight)
With the above in mind, it should be clear that the ZIP conditions (and the Name=..) are not used in the rules that define the shipping costs, so of course some rule from that zone will match. You'll have to add the ZIP condition to each rule.
However, if I understand you correctly, your zones all have the same basic shipping costs, just different multipliers. In that case, I would not use different country zones.
Variable=VolWeight; Value = TotalLength*TotalWidth*TotalHeight/166
Variable=UseWeight; Value = max(VolWeight, Weight)
Variable=ShipName; 800<=ZIP<=884 OR 889<=ZIP<=899; Value="Shipping to Continental USA Zone 1"
800<=ZIP<=884 OR 889<=ZIP<=899; ExtraShippingMultiplier=1
[...Multipliers and shipping name definitions for zones 2-4...]
Variable=ShipName; 010<=ZIP<=290 OR 320<=ZIP<=340; Value="Shipping to Continental USA Zone 5"
010<=ZIP<=290 OR 320<=ZIP<=340; ExtraShippingMultiplier=2.2
Name="{ShipName}"; UseWeight<5; Shipping=2.35*ceil(UseWeight)
Name="{ShipName}"; UseWeight<11; Shipping=2.41*ceil(UseWeight)
Name="{ShipName}"; UseWeight<16; Shipping=1.05*ceil(UseWeight)
Name="{ShipName}"; UseWeight<21; Shipping=.65*ceil(UseWeight)
Name="{ShipName}"; UseWeight<26; Shipping=1.375*ceil(UseWeight)
Name="{ShipName}, Shipping of 26 lbs and above"; UseWeight>26; Shipping=1.30*ceil(UseWeight)
These rules first define the multiplier (shipping to NY in your case is 2.2 times as much as to Idaho and Utah). The ShipName is required just to have different shipment names displayed in the cart and invoice.
Then the basic shipping rates are defined without any conditions on the ZIP code, because they are already handled through the ExtraShippingMultiplier.
Best regards,
Reinhold