Class: Deb::Entry
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Deb::Entry
- Defined in:
- app/models/deb/entry.rb
Class Method Summary collapse
-
.start(&block) ⇒ Object
attr_accessible :transactionable, :description, :kind.
- .start!(&block) ⇒ Object
Instance Method Summary collapse
- #credit_items_presence ⇒ Object
- #debit_items_presence ⇒ Object
- #proper_amounts ⇒ Object
- #rollback!(ref = nil) ⇒ Object
Class Method Details
.start(&block) ⇒ Object
attr_accessible :transactionable, :description, :kind
20 21 22 |
# File 'app/models/deb/entry.rb', line 20 def self.start(&block) Docile.dsl_eval(Deb::Builder.new, &block).build end |
.start!(&block) ⇒ Object
38 39 40 41 42 43 44 |
# File 'app/models/deb/entry.rb', line 38 def self.start!(&block) transaction do start(&block).tap do |t| t.save! end end end |
Instance Method Details
#credit_items_presence ⇒ Object
50 51 52 |
# File 'app/models/deb/entry.rb', line 50 def credit_items_presence errors.add(:base, "no credit items") if credit_items.blank? end |
#debit_items_presence ⇒ Object
46 47 48 |
# File 'app/models/deb/entry.rb', line 46 def debit_items_presence errors.add(:base, "no debit items") if debit_items.blank? end |
#proper_amounts ⇒ Object
54 55 56 |
# File 'app/models/deb/entry.rb', line 54 def proper_amounts errors.add(:base, "wrong credit total is not equal debit total") unless credit_items.collect(&:amount).reduce(:+) == debit_items.collect(&:amount).reduce(:+) end |
#rollback!(ref = nil) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'app/models/deb/entry.rb', line 24 def rollback!(ref = nil) tran = self res = self.class.start! do tran.debit_items.each { |di| credit(di.account, di.amount) } tran.credit_items.each { |ci| debit(ci.account, ci.amount) } reference(ref || tran) kind(tran.kind) description("Rollback of #{tran.description}") end self.rollback_transaction_id = res.id save! res end |