[ic] How to give each cart item its own flat rate shipping
cost?AutoModifier, mv_sku/code problems
John1
list_subscriber at yahoo.co.uk
Sun Oct 23 16:51:27 EDT 2005
On Sunday, October 23, 2005 3:23 PM, mike at perusion.com wrote:
> Quoting John1 (list_subscriber at yahoo.co.uk):
>> I believe if I change AutoModifier to:
>> AutoModifier products:shipping_cost:mv_sku
>>
>> it would then work for matrix option products but not standard
>> products.
>>
>> How do I set it up so that the delivery cost is always looked up from
>> the field shipping_cost in the products table, regardless of whether
>> the cart item is a product with matrix options or a standard product.
>>
>
> Hmm. I believe you are correct. Actually, I would want
>
> AutoModifier shipping_cost
>
> to work, as we should use item_common to populate it. But alas, it
> does not.
>
Great, thanks. So if I use ship.pm from the CVS my scenario should work
now?
I noticed the call to "item_common" to populate AutoModifier. What is
item_common?
> That is now fixed in CVS. It only works for the no-table case of
> the attribute (i.e. shipping_cost or other_mod=shipping_cost).
>
> It also might not be completely what would always be wanted, since
> it has the precedence:
>
> mv_ib->code
> mv_ib->mv_sku
> products->code
> products->mv_sku
> variants->code
> variants->mv_sku
>
> It is important in this case to make sure you have the table set
> in the item mv_ib pointer, as otherwise products->mv_sku will shadow
> variants->code.
>
I think I see what you are saying - are you saying that I must
explicitly define the table used for variants in catalog.cfg in order
for the variants->code to take precedence over products->mv_sku?
BTW, in the end I found another solution to my problem by creating a
[calc_shipping] user tag to be called via "f [calc_shipping]" in
shipping.asc
The user tag code is:
#######
UserTag calc_shipping Order
UserTag calc_shipping Routine <<EOR
sub {
my $total_shipping_cost;
for (@$Items) {
my $sku = $_->{mv_sku} || $_->{code};
unless (defined $_->{shipping_cost}) {$_->{deliv_cost} =
tag_data('products','shipping_cost',$sku);}
$total_deliv_cost += $_->{quantity} * $_->{shipping_cost};
}
return $total_shipping_cost;
}
EOR
#######
This seemed to do the trick, so I am happy. I am not much of a Perl
programmer so would be grateful for any suggestions on improving the
above code if necessary.
Now I have this [calc_shipping] tag I haven't even bothered setting
AutoModifier or MV_SHIP_MODIFIERS. Instead, I have tried to ensure the
database is only queried once by using "unless (defined
$_->{shipping_cost})" - is this a reasonable approach?
Thank you for your help Mike - it is always very much appreciated...
More information about the interchange-users
mailing list