2012-02-03 42 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关系,因此可以认为自动发生到账。