[ic] shipping.asc not working right

kerry blalock kerry at basicq.com
Mon Jun 24 17:25:41 UTC 2013


On 06/24/2013 12:49 PM, kerry blalock wrote:
> On 06/24/2013 12:32 PM, Paul Jordan wrote:
>>> On 06/24/2013 11:46 AM, Paul Jordan wrote:
>>>>> On 06/24/2013 10:32 AM, Paul Jordan wrote:
>>>>>>> From: interchange-users-bounces at icdevgroup.org
>>>>>>> [mailto:interchange-users-bounces at icdevgroup.org] On Behalf Of
>>>>>>> kerry blalock
>>>>>>> Sent: Sunday, June 23, 2013 7:19 AM
>>>>>>> To: interchange-users at icdevgroup.org
>>>>>>> Subject: [ic] shipping.asc not working right
>>>>>>>
>>>>>>> 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.
>>>>>> I know this might sound crazy, but try putting the truckbig above
>>>>>> the truckbigger method. I have found oddities in the past that lead
>>>>>> me to believe (at times), the system does a substring match on
>>>>>> shipping methods. I think your truckbig is never getting found
>>>>>> because of it. I am most likely wrong, but try it for giggles.
>>>>>>
>>>>>> If all you are doing is raising the price on these (assuming these
>>>>>> are not simplified for your question), you can combine them, just
>>>>>> return a '2' for above 160 and have 2 cost 170. You can also
>>>>>> explicitly call truckbigger from inside of truckbig like this:
>>>>>>
>>>>>>     min         2
>>>>>>     max         2
>>>>>>     cost        >>truckbigger
>>>>>>
>>>>>> Your #comment in truckbig is incorrect BTW.
>>>>>>
>>>>>> Oh, one other thing (that I am probably also wrong about). At times,
>>>>>> I have noticed that things don't work as I expect if they don't have
>>>>>> one-more-final cost above my maximum. IIRC I may have reported this
>>>>>> and it may have been an actual bug (and fixed) but I have a habit of
>>>> adding
>>>>> just one more anyways.
>>>>>> So for you, you can add a...
>>>>>>
>>>>>>    min 3
>>>>>>    max 3
>>>>>>    cost 200
>>>>>>
>>>>>> It will never be invoked, but things have led me to believe it is
>>>> necessary.
>>>>>> As you can see, my shipping.asc is by habit built upon folklore and
>>>>>> wives-tales, but probably like you, once I get it working, I don't
>>>>>> dare question anything I have done.
>>>>>>
>>>>>>
>>>>>> Paul
>>>>>>
>>>>> Tried switching and truckbig works but I get same error when I add
>>>>> one
>>>> that
>>>>> should be truckbigger. Where would I insert the
>>>>>
>>>>>     min         2
>>>>>     max         2
>>>>>     cost        >>truckbigger
>>>>> ?? And should I use two if statements instead of the two conditions?
>>>>> I missed the comment as I have tried using two if statements and some
>>>> other
>>>>> attempts to get it to work.
>>>>>
>>>>> Also found missing ), but adding it did not help.
>>>>>
>>>>> I do have other shipping methods in shipping.asc it is just these two
>>>>> that
>>>> are
>>>>> not playing nice together.
>>>> So we've determined that they both work, but only the top one works
>>>> when invoked. That's normally what I would run into. At this stage, I
>>>> would try adding in a final range on both methods...
>>>>
>>>>        min     1
>>>>        max     1
>>>>        cost    170.00
>>>>
>>>>        min     2
>>>>        max     2
>>>>        cost    200.00
>>>>
>>>> and similar for truckbig. I have found that if the range I want to use
>>>> is the last range listed, sometimes it does not work. But again, that
>>>> might be fixed (or have been folklore).
>>>>
>>>> But, if you just want to adjust price only, then couldn't you just do:
>>>>
>>>>        criteria <<EOC
>>>>  [calcn]
>>>>          foreach my $item (@$Items) {
>>>>                  if ($item->{width} >= 160) {
>>>>                          return 2;
>>>>                 }
>>>>          foreach my $item (@$Items) {
>>>>                  if ($item->{width} >= 108) {
>>>> 	        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 last one thrown in to ward off bad spirits). Untested.
>>>>
>>>> Paul
>>> I did get it 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
>>>
>>> I am still getting the error, but it has tested ok for the two truck
>> prices which
>>> is what I wanted. Have to look at the other methods to see if something is
>>> wrong with them. And, like you said, once it is working, I shutter as
>> changing
>>> more stuff. Did not seem to need the second foreach you had with your
>>> suggestion. I first tried with the redirect, but that failed, so I changed
>> cost to
>>> 170.00 and that is working. Will have to test more to be sure I did not
>> break
>>> something else as it is live.
>> I had the second foreach because your cart has unordered widths, you don't
>> know when your foreach will encounter long items. Yours above can
>> incorrectly return for a 108" item even though a 160" item is in the cart
>> somewhere.
>>
>> You can do it like you have if you remove the returns in your foreach and
>> track which are being triggers somehow.
>>
>> Paul
>>
>> _______________________________________________
>> interchange-users mailing list
>> interchange-users at icdevgroup.org
>> http://www.icdevgroup.org/mailman/listinfo/interchange-users
> I just found that out just as you are explaining it, so I will add the
> foreach and hope that takes care of the last little detail.
>
>
OK, ITT not happy with the second foreach, even after I added the
missing }. It just bypasses to the next method.

I tried

 criteria <<EOC
 [calcn]
         foreach my $item (@$Items) {
                 if ($item->{width} >= 160) {
                         return 2;
                }
          }                          <<<<<------added here
 foreach my $item (@$Items) {
                 if ($item->{width} >= 108) {
	        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


and

 criteria <<EOC
 [calcn]
         foreach my $item (@$Items) {
                 if ($item->{width} >= 160) {
                         return 2;
                }
         foreach my $item (@$Items) {
                 if ($item->{width} >= 108) {
	        return 1;
                }
         }
         }                   <<<------added here
         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






More information about the interchange-users mailing list