
kerry at basicq
Jun 24, 2013, 10:25 AM
Post #9 of 18
(161 views)
Permalink
|
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 >>>>>>> [mailto:interchange-users-bounces [at] icdevgroup] On Behalf Of >>>>>>> kerry blalock >>>>>>> Sent: Sunday, June 23, 2013 7:19 AM >>>>>>> To: interchange-users [at] icdevgroup >>>>>>> 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 >> 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 _______________________________________________ interchange-users mailing list interchange-users [at] icdevgroup http://www.icdevgroup.org/mailman/listinfo/interchange-users
|