[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