Class: Deb::Transaction
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Deb::Transaction
- Defined in:
- app/models/deb/transaction.rb
Class Method Summary collapse
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
18 19 20 |
# File 'app/models/deb/transaction.rb', line 18 def self.start(&block) Docile.dsl_eval(Deb::Builder.new, &block).build end |
.start!(&block) ⇒ Object
36 37 38 39 40 41 42 |
# File 'app/models/deb/transaction.rb', line 36 def self.start!(&block) transaction do start(&block).tap do |t| t.save! end end end |
Instance Method Details
#credit_items_presence ⇒ Object
48 49 50 |
# File 'app/models/deb/transaction.rb', line 48 def credit_items_presence errors.add(:base, "no credit items") if credit_items.blank? end |
#debit_items_presence ⇒ Object
44 45 46 |
# File 'app/models/deb/transaction.rb', line 44 def debit_items_presence errors.add(:base, "no debit items") if debit_items.blank? end |
#proper_amounts ⇒ Object
52 53 54 |
# File 'app/models/deb/transaction.rb', line 52 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
22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'app/models/deb/transaction.rb', line 22 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 |