class Skr::InvLine

Public Instance Methods

ensure_unlocked() click to toggle source
# File lib/skr/models/inv_line.rb, line 49
def ensure_unlocked
    if invoice.is_locked?
        self.errors.add(:invoice_date, "invoice date falls on a locked GL Period")
    end
end
total() click to toggle source
# File lib/skr/models/inv_line.rb, line 45
def total
    (qty||0) * (price||0)
end

Private Instance Methods

gl_origin_description() click to toggle source
# File lib/skr/models/inv_line.rb, line 106
def gl_origin_description
    "INV #{self.invoice.visible_id}:#{self.sku.code}"
end
perform_adjustments() click to toggle source
# File lib/skr/models/inv_line.rb, line 81
def perform_adjustments
    debit  = self.sku.gl_asset_account
    credit = self.invoice.customer.gl_receivables_account
    old_extended_price = self.price_was && self.qty_was ?
                             self.price_was * self.qty_was : BigDecimal.new(0)
    price_change = self.extended_price - old_extended_price

    if self.sku.does_track_inventory?
        changed_qty = self.qty - (qty_was || 0)
        self.sku_trans.build(
            origin: self, qty: changed_qty * -1, sku_loc: self.sku_loc, uom: self.uom,
            mac: 0, cost: price_change,
            origin_description: gl_origin_description,
            debit_gl_account:  debit, credit_gl_account: credit
        )
    else
        GlTransaction.push_or_save(
          owner: self, amount: price_change,
          debit: debit, credit: credit,
          options: {description: gl_origin_description}
        )
    end
    true
end
prevent_destroy() click to toggle source
# File lib/skr/models/inv_line.rb, line 110
def prevent_destroy
    errors.add(:base, "Can not destroy #{self.class.model_name}, only create/modify is allowed" )
end
set_defaults() click to toggle source
# File lib/skr/models/inv_line.rb, line 57
        def set_defaults
#           puts "set_defaults #{self}"
            line = [ self.pt_line, self.so_line ].detect{ |l| ! l.blank? }
            if line
                self.uom         = line.uom if self.uom.blank?
                self.sku_code    = line.sku_code
                self.description ||= line.description
                self.sku_loc     ||= line.sku_loc
                self.qty         ||= line.qty
                self.so_line     ||= line.so_line
            elsif sku
                self.uom           = sku.uoms.default if self.uom_code.blank?
                self.sku_code    ||= sku.code
                self.description ||= sku.description
                self.sku_loc_id  ||= sku.sku_locs.for_location( self.invoice.location ).id if self.invoice && self.invoice.location
            end
            if !price && invoice && invoice.customer && sku_loc && uom.present?
                self.price = Skr.config.pricing_provider.price(
                  sku_loc:sku_loc,  customer:invoice.customer,
                  uom:uom, qty: qty )
            end
            true
        end