[ic] shipping.asc not working right
kerry blalock
kerry at basicq.com
Tue Jun 25 15:30:57 UTC 2013
On 06/25/2013 10:40 AM, Paul Jordan wrote:
>>> On 2013-06-23, at 10:18 AM, kerry blalock wrote:
>>>
>>>> I am trying to add an additions shipping method to my site and seem
>>>> to be having a problem with the logic. Here is the code that is
>>>> giving me an error on the truckbig method:
>>>>
>>>> truckbigger: Oversize Truck Shipping
>>>> criteria <<EOC
>>>> [calcn]
>>>> foreach my $item (@$Items) {
>>>> if ($item->{width} >= 160) {
>>>> # We have to use this shipping method
>>>> return 1;
>>>> }
>>>> }
>>>> return 0;
>>>> [/calcn]
>>>> EOC
>>>> min 1
>>>> max 1
>>>> cost 170.00
>>>>
>>>> truckbig: Truck Shipping
>>>> criteria <<EOC
>>>> [calcn]
>>>> foreach my $item (@$Items) {
>>>> if (($item->{width} >= 108 and ($item->{width} <=160)) {
>>>> # We have to use truckbigger shipping method
>>>> return 1;
>>>> }
>>>> }
>>>> return 0;
>>>> [/calcn]
>>>> EOC
>>>> min 1
>>>> max 1
>>>> cost 85.00
>>>>
>>>> Truckbigger works as is. But when I want to charge less for rods
>>>> between
>>>> 108 and 160, I get an error,
>>>>
>>>> Note: No match found for mode 'ground', quantity '', returning 0.
>>>> Shipping defaults to the shippin method just below truckbig method.
>>>> Need fresh eyes to help me figure out why this is not working.
>>>>
>>>> Kerry
>>>> _______________________________________________
>>>> interchange-users mailing list
>>>> interchange-users at icdevgroup.org
>>>> http://www.icdevgroup.org/mailman/listinfo/interchange-users
>>>
>>>
>>>> if (($item->{width} >= 108 and ($item->{width} <=160)) {
>>>
>>> Looks like you are missing a closing bracket between "108" and "and".
>>> HTH
>>> Angus
>>>
>> Thanks Angus,
>>
>> I did find the missing bracket and added, but it still did not work.
>>
>> I finally have it kinda working with this:
>>
>> truckbig: Truck Shipping
>> criteria <<EOC
>> [calcn]
>> foreach my $item (@$Items) {
>> if ($item->{width} >= 160) {
>> # We have to use truckbigger shipping method
>> return 2;
>> }
>>
>> if ($item->{width} >= 108) {
>> # We have to use truckbig shipping method
>> return 1;
>> }
>> }
>> return 0;
>> [/calcn]
>> EOC
>> min 1
>> max 1
>> cost 85.00
>>
>> min 2
>> max 2
>> cost 170.00
>>
>> min 3
>> max 3
>> cost 200.00
>>
>> The problem I have now is if a customer adds a item that is 144" and then
>> adds another that is 192", to the same cart, it does not pick up the
> higher
>> shipping cost. That was why I was trying to use the conditional statement
> and
>> two different methods.
>>
>> Not sure why the one above is not picking up the higher cost, but itt
> seems
>> to hold the first if statement used by each method. If I add a 192" and
> then
>> add a 144", it retains the higher cost for the 192" which is fine, but the
> other
>> way around is not.
> Because you have return's inside your if's, so it pretty much guarantee's
> the logic will cease once it encounters its first item that is longer than
> 108".
>
> You need to try and sort the widths before looping through them, or have two
> foreach's, or leave it as you have it and instead of returning inside the
> foreach, track a value to help you determine what the longest item your
> foreach encounters.
>
> Paul
>
>
>
> _______________________________________________
> interchange-users mailing list
> interchange-users at icdevgroup.org
> http://www.icdevgroup.org/mailman/listinfo/interchange-users
I have not tried this as I am not sure if it is even close to right and
do not want to blowup the program.
Am I on the right track? A little info on me: I am not a
programmer, just a hacker. :-)
truckbig: Truck Shipping
criteria <<EOC
[calcn]
$big=0;
$bigger=0;
foreach my $item (@$Items) {
if ($item->{width} >= 160) {
# We have to use oversize shipping
$bigger = 2;
}
if ($item->{width} >= 108) {
# We have to use base truck shipping
$big = 1;
}
}
return 0;
[/calcn]
EOC
min 1
max 2
cost f if ($bigger > $big) {return 170.00} elseif ($big =1)
{return 85.00}
min 3
max 3
cost 200.00
Kerry
More information about the interchange-users
mailing list