[ic] shipping.asc not working right

Kerry Blalock kerry at basicq.com
Tue Jun 25 17:17:19 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
>>
>
> What about something like this (untested):
>
> [calcn]
>          my $big=0;
>          foreach my $item (@$Items) {
>                  if ($item->{width} >= 160) {
>                          # We have to use the largest shipping available,
> no
> need to check anymore
>                         return 2;
>                 } elsif ($item->{width} >= 108) {
>                          # We have to use base truck shipping
>                           $big = 1;
>                 }
>         }
>         return $big;
>  [/calcn]
>  EOC
>          min     1
>          max    1
>          cost    85
>
>          min     2
>          max    2
>          cost    170
>
>          min     3
>          max    3
>          cost    200.00
>
> Paul
>
>

After several tests with different combinations, this looks like it
solves this problem.
Not sure why it did not work with elseif, but time to go to the next
project.

Thanks for the help.

truckbig:       Truck Shipping
        criteria <<EOC
[calcn]
         my $big=0;
         foreach my $item (@$Items) {
                if ($item->{width} >= 160) {
                        # We have to use  largest shipping
                        return 2;
               }

               if ($item->{width} >= 108) {
                        # We have to use base truck shipping
                         $big = 1;
               }
       }
       return $big;
[/calcn]
EOC
        min     1
        max     1
        cost    85.00

        min    2
        max    2
        cost   170.00

        min     3
        max     3
        cost    200.00
BasicQ Inc
http://decor.basicq.com
800-448-0655




More information about the interchange-users mailing list