Make StockEvent a base class for Delivery and StockTaking

This helps to share code between the two entities and allows easier
extensions in the future.
This commit is contained in:
Patrick Gansterer 2020-08-01 20:11:25 +02:00
parent a5582e9542
commit 785313ac23
9 changed files with 69 additions and 33 deletions

View file

@ -1,12 +1,11 @@
class Delivery < ApplicationRecord
class Delivery < StockEvent
belongs_to :supplier
belongs_to :invoice
has_many :stock_changes, -> { includes(:stock_article).order('articles.name ASC') }, :dependent => :destroy
scope :recent, -> { order('created_at DESC').limit(10) }
validates_presence_of :supplier_id, :date
validates_presence_of :supplier_id
validate :stock_articles_must_be_unique
accepts_nested_attributes_for :stock_changes, :allow_destroy => :true

View file

@ -1,7 +1,7 @@
class StockChange < ApplicationRecord
belongs_to :delivery
belongs_to :delivery, foreign_key: 'stock_event_id'
belongs_to :order
belongs_to :stock_taking
belongs_to :stock_taking, foreign_key: 'stock_event_id'
belongs_to :stock_article
validates_presence_of :stock_article_id, :quantity

View file

@ -0,0 +1,8 @@
class StockEvent < ApplicationRecord
has_many :stock_changes, dependent: :destroy
has_many :stock_articles, through: :stock_changes
validates_presence_of :date
end

View file

@ -1,10 +1,4 @@
class StockTaking < ApplicationRecord
has_many :stock_changes, :dependent => :destroy
has_many :stock_articles, :through => :stock_changes
validates_presence_of :date
class StockTaking < StockEvent
def stock_change_attributes=(stock_change_attributes)
for attributes in stock_change_attributes
stock_changes.build(attributes) unless attributes[:quantity].to_i == 0