2012-02-03 41 views
2

我實際上試着開發一個會計Rails應用程序,我堅持邏輯...Rails:會計邏輯...一次創建多個記錄

事實上,我想簡化生活的用戶試圖自動化「髒」的借記/貸記的東西。

讓說,我有我的表單這些領域:

  1. 日期(XXXX)
  2. 銀行帳戶(帳戶1)
  3. 費用categorie(賬戶2)
  4. 金額(1000)

在會計世界中,這對應於期刊中的1個ligne: 1.日期:xxxx借方:account2 Cre DIT:帳戶1金額:1000

但是,如果我用這個邏輯,計算和報告將是Rails中的噩夢...... 後來我的想法是把它分解成2分法分,如:

  1. 日期:XXXX賬戶:帳戶2金額:1000
  2. 日期:XXXX賬戶:帳戶1量:-1000

是否有意義?如果是的話,我發現這樣做的唯一方法是創建隱藏字段的形式更新一個JavaScript然後保存記錄(聽起來有點太討厭我的口味:))有辦法處理它在控制器在數據庫中生成2條記錄而不使用「鬼域」技術?

問題變得更加複雜,如果我們想象加增值稅邏輯在裏面...同樣的例子,但與假設在操作增值稅的80 ...

  1. 日期:XXXX
  2. 銀行帳戶:帳戶1
  3. 費用類別:帳戶2
  4. 金額(增值稅):1000
  5. VAT帳戶:帳戶3
  6. VAT量:80

在會計世界日報將是:

  1. 日期:XXXX借:帳戶2學分:帳戶1金額:1000
  2. 日期:XXXX借:account3信用:帳戶1金額:80

在數據庫:

1.Date:XXXX賬戶:帳戶2金額:1000

2.日期:xxxx賬號:account1金額:-1000

3。日期:XXXX賬號:account3金額:80

4.Date:XXXX賬戶:帳戶1金額:-80

這意味着,與「鬼田」的技術,我需要創建4條隱藏線等...

有沒有更好的方法來做到這一點?

非常感謝您的幫助。

回答

2

你應該在模型中的額外記錄了回調,而不是在控制器:

class Journal 
    # ... 

    after_create :update_individual_accounts 

    def update_individual_accounts 
    debited_account.create_accounting_entry_with self 
    credited_account.create_accounting_entry_with self 
    end 
end 

現在,每當你添加一個新的記錄Journal,你還創建了兩個AccountingEntry記錄在相應的帳戶上。

+0

聽起來很有趣,但我如何從一個表單填充2個條目? – Dannoel 2012-02-03 13:52:26

+0

你不知道。您的表單發佈一個「日記」條目。如果Journal條目成功創建,則會調用'after_create'。然後,您將在'debited_account'和'credited_account'上創建'AccountingEntry'條目。 (顯然你必須在你的'Account'對象上定義'create_accounting_entry_with'方法。) – 2012-02-03 13:54:34

+0

聰明的ehhehhe:)在增值稅(4行)的情況下會是什麼樣子? – Dannoel 2012-02-03 14:00:22

0

這可能很適合DCI模式。這意味着您可以創建AddToJournal上下文,其中會計師角色將費用添加到日記帳。這樣你就有了一個邏輯單元,可以很容易地測試。

DCI是在Rails社區相當新的概念,所以有關於如何實現它沒有約定,但我真的很喜歡這篇文章中所採取的形式給出:http://mikepackdev.com/blog_posts/24-the-right-way-to-code-dci-in-ruby

0

你正在做從帳戶1量轉移(借方金額)到科目1(貸方金額)。 它可以通過使用標準形式與領域來收集account_frm,account_to & amount。在內部代碼中,您將加載account_frm帳戶對象& account_to並在此後轉帳以創建日記帳分錄。

= form_tag amount_transfer_url do 
    = f.select :account_frm 
    = f.select :accoutn_to 
    = f.text_field :amount 

class AccountsController < .. 
def transfer 
    account1, account2 = Account.find_all_by_id(params[:account_frm], params[:accpunt_to]) 
    account1.transfer(params[:amount], account2) 
end 
end 

class Account < .. 
def transfer(accnt2, amt) 
    # here self is account1 
    # make journal entries after successfull transfer 
end 
end 
0

嗨,大家好,非常感謝您的幫助。

我終於找到了一種方法來解決這個問題,使用靈感從你的各種職位。

我所做的在模型級別來處理像after_create操作添加一些代碼:

after_create:journalize

然後我定義:在另一個journalize行動DEF喜歡:

DEF再次journalize Ligne.create({與各種數據來創建}) 結束

SO感謝您的幫助。 和平 丹

0

我碰到這種寶石附帶的賬簿:https://github.com/mbulat/plutus

自述:

的招財插件提供了完整的複式記賬系統on Rails應用程序在任何Ruby應用。該插件遵循一般的雙重記賬實踐。所有計算均使用BigDecimal完成,以防止浮點舍入錯誤。該插件也需要數據庫中的十進制類型。

該系統由維護您的賬戶,交易和借方和貸方的表格組成。每筆交易可以有很多借記和貸記。記錄您的業務交易的交易表本質上是您的會計期刊。

由於賬戶與信貸或借記交易具有反向has_many關係,因此可以認爲自動發生到賬。