2

我实际上正在尝试开发一个会计 Rails 应用程序,但我被逻辑困住了......

事实上,我想简化试图自动化“肮脏”借记/贷记内容的用户的生活。

假设我的表单中有这些字段:

  1. 日期 (xxxx)
  2. 银行账户(账户 1)
  3. 费用类别(账户 2)
  4. 金额 (1000)

在会计界,这对应于期刊中的 1 行,如下所示:

  1. 日期:xxxx 借方:account2 贷方:account1 金额:1000

但是如果我使用这个逻辑,计算和报告在 Rails 中将是一场噩梦......

然后我的想法是将它分成 2 行,例如:

  1. 日期:xxxx 账户:account2 金额:1000
  2. 日期:xxxx 账户:account1 金额:-1000

是否有意义?如果是,我发现这样做的唯一方法是在由 JavaScript 代码更新的表单中创建隐藏字段,然后保存记录(听起来有点讨厌我的口味:))

有没有办法在控制器中处理它以在数据库中生成 2 条记录而不使用“幽灵字段”技术?

如果我们想象在其中添加增值税逻辑,问题会变得更加复杂......同样的例子,但假设在操作中有 80 个增值税......

  1. 日期:xxx
  2. 银行账户:账户1
  3. 费用类别:账户2
  4. 金额(含增值税):1000
  5. 增值税账户:账户 3
  6. 增值税金额:80

在会计世界期刊中,它将是:

  1. 日期:xxxx 借方:account2 贷方:account1 金额:1000
  2. 日期:xxxx 借方:account3 贷方:account1 金额:80

在数据库中:

1.日期:xxxx 账号:account2 金额:1000

2.日期:xxxx 账号:account1 金额:-1000

3.日期:xxxx 账号:account3 金额:80

4.日期:xxxx 账号:account1 金额:-80

这意味着使用“鬼域”技术,我需要创建 4 条隐藏线等等......

有一个更好的方法吗?

非常感谢你的帮助。

4

5 回答 5

3

您应该使用回调在模型中制作额外的记录,而不是在控制器中:

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在相应的帐户上创建两条记录。

于 2012-02-03T13:48:51.080 回答
0

大家好,非常感谢您的帮助。

我终于找到了一种方法来使用您的各种帖子的灵感来解决这个问题。

我所做的是在模型级别添加了一些代码来处理 after_create 操作,例如:

after_create :journalize

然后我在另一个 def 中定义了 :journalize 动作,例如:

def journalize Ligne.create({with the various data to create}) end

所以再次感谢您的帮助。和平丹

于 2012-02-25T09:35:33.883 回答
0

我遇到了这个用于会计分类账的宝石:https ://github.com/mbulat/plutus

从自述文件:

plutus 插件提供了一个完整的复式记账系统,可用于任何 Ruby on Rails 应用程序。该插件遵循一般的复式记账做法。所有计算均使用 BigDecimal 完成,以防止浮点舍入错误。该插件还需要数据库上的小数类型。

该系统由维护您的帐户、交易和借方和贷方的表格组成。每笔交易可以有许多借方和贷方。记录您的业务交易的交易表本质上就是您的会计日记帐。

可以认为过帐到分类帐是自动发生的,因为 Accounts 与其贷方或借方交易具有反向的 has_many 关系。

于 2012-05-19T03:48:59.413 回答
0

这可能非常适合 DCI 模式。这意味着您可以创建一个 AddToJournal 上下文,其中会计角色将费用添加到日记帐。这样,您就有了一个逻辑位置,可以轻松测试。

DCI 在 Rails 世界中是一个相当新的概念,因此没有关于如何实现它的约定,但我真的很喜欢这篇文章中采用的方法:http: //mikepackdev.com/blog_posts/24-the-right-way -to-code-dci-in-ruby

于 2012-02-03T13:56:08.453 回答
0

您正在将金额从 account1(借方金额)转移到 account1(贷方金额)。可以通过使用带有要收集的字段的标准表单来完成account_frmaccount_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
于 2012-02-03T14:00:03.480 回答