Modules being shared and model data

Have in a module in ./lib:
module Pricing
  def sell_price
    (cost.to_f)/((100-(margn.to_f))/100)
  end

  def sell_price_inc
    ((product.cost.to_f)/((100-(product.margn.to_f))/100)*1.14)
  end

  def charge_excl
    (sell_price).to_f * quantity
  end
end

A model product:
class Product < ActiveRecord::Base
  include Pricing
  attr_accessible :name, :code, :cost, :company_id, :margn

  belongs_to :company
  has_many :allocations
  has_many :companies, :through => :allocations
end

An allocation model:
class Allocation < ActiveRecord::Base
  include Pricing
  attr_accessible :company_id, :allocated_product_id, :quantity,
:saledate, :cost
  belongs_to :company
  belongs_to :allocated_product, :class_name => 'Product' #So you have
company.products and company.allocated_products.
end

A products and allocations controller:
class ProductsController < ApplicationController
  def index
    @products = Product.all
  end

class AllocationsController < ApplicationController
  def index
    @products =Product.all
    @allocations = Allocation.all
  end

And the views in product index:

      <td><%=h (sprintf( "R%.02f" ,product.sell_price)) %></td>
      <td><%=h (sprintf( "R%.02f" ,product.sell_price_inc)) %></td>

The above works well !

However in my allocations model and view I am trying to show the price
based on quantity:
  def charge_excl
    (sell_price).to_f * quantity
  end

I get the error: undefined local variable or method `cost'

It is obviously failing as it cannot get access to the cost parameter
and its not accessible

So in a nutshell I can run calculations on one model (product) in the
module but as soon as I require a calculation using two models data
(cost, margin and quantity) it fails

Help is appreciated thanks

 &lt;td&gt;&lt;%=h \(sprintf\( &quot;R%\.02f&quot; ,product\.sell\_price\)\) %&gt;&lt;/td&gt;
 &lt;td&gt;&lt;%=h \(sprintf\( &quot;R%\.02f&quot; ,product\.sell\_price\_inc\)\) %&gt;&lt;/td&gt;

The above works well !

I don't see how it does when you access "product.cost.to_f" in the
sell_price_inc method... when you include that module in Product, it
must be expecting an instance to have an attribute or method called
"product" too (so a chain that looks like
"product.product.cost.to_f").... do you have some other methods you
didn't include in your example?

However in my allocations model and view I am trying to show the price
I get the error: undefined local variable or method `cost'

You specify "attr_accessible :cost" in Allocation, but does the table
have a cost field? If not, how about adding a cost method to
Allocation that returns the product.cost? This would allow the
included module methods to have methods that respond to the calls
they're making...

Micheal
I made an error in my post, the Module Pricing looks like:
  def sell_price
    (cost.to_f)/((100-(margn.to_f))/100)
  end

  def sell_price_inc
    ((cost.to_f)/((100-(margn.to_f))/100)*1.14)
  end

They do both work for the Product model, well spotted!

"You specify "attr_accessible :cost" in Allocation, but does the table
have a cost field? If not, how about adding a cost method to
Allocation that returns the product.cost? This would allow the
included module methods to have methods that respond to the calls
they're making..."

The Allocation table has no cost field only the Product table
What would the method look like?
Would it go in the Allocation model, and how can I access the Product
model to get access to it?

Thanks

Think I am on the right track as I can attain the cost through the
console but the way to handle the method is what I dont get and where to
put it and when to call it

a = Allocation.first

=> #<Allocation id: 1, company_id: 1, allocated_product_id: 1, quantity:
2, saledate: nil>

a.allocated_product.cost

=> #<BigDecimal:b6f12d20,'0.2222E4',4(12)>

Just put a method in Allocation like this:

  def cost
    raise "put some error handling in for when no allocated product
exists" unless self.allocated_product
    self.allocated_product.cost
  end

When the module calls for "cost" when it's included in Product, it
will use the attribute. When it's included in Allocation it will use
the new method (which delegates down to the allocated_product's cost).