通过代码创建 account.move - Odoo v8

Creating account.move by code - Odoo v8

我是 Odoo account.account 模型的新手。

我想知道,是否有一些关于如何在 Odoo v8 上创建 account.move 的示例? (新API)

例如,假设我有这些模型:

class model1(models.Model):

    field1 = fields.Float(string="Field 3")
    field2 = fields.Float(string="Field 3")
    field3 = fields.Float(string="Field 3", compute="compute") 
    partner_journal = fields.Many2one('account.account', string="Journal")
    state = fields.Selection([
        ('draft','Draft'),
        ('awaitingraw','Awaiting raw materials'),
        ('work_in_progress','Print in Progress'),
        ('delivered','Delivered'),
        ('cancel','Cancel'),
    ], string="State")
    csheet = fields.One2many('model2', 'sheets', string="Sheets")

    @api.depends('field1','field2','field3')
    def compute(self):
        if self.field1 or self.field2:
            self.field3 = self.field1 + self.field2

class model2(models.Model):

    field4 = fields.Float(string="Field 4")
    field5 = fields.Float(string="Field 5")
    field6 = fields.Float(string="Field 6")
    sheets = fields.Many2one('model1', string="Sheets")

model2 我需要在日记中创建一个 account.move,比方说,我需要 field3 应该是 creditpartner_journal 字段.

我试过这样的事情:

@api.multi
@api.depends('field1', 'field2', 'field3', 'state', 'csheet')
def accounting_scenarios(self):
    for record in self:
        if not len(record.partner_journal):
            raise Warning('Please Enter Journal !')
        if record.state in ('awaitingraw'):
            record.partner_journal.debit = record.csheets.field4

但是,它显然不起作用,因为我们需要创建一个 account.move 并且使用这种方法,我尝试的是直接在 debit 上写 partner_journal字段,field4 数量。

所以,我需要创建一个 account.move 来让它工作。

有什么例子或想法吗?

你问的不是那么简单你需要学习Odoo的会计模块以及Odoo如何处理会计。

所以首先我建议您阅读书籍“Working with Odoo”,其中一小章会让您对帐户模块有一个很好的了解。

然后查看 Odoo 模块中的代码 例如:当您确认 sale.order 以及 Odoo 如何创建包含两个 move.line.

account.move

你会明白什么是account.accountaccount.moveaccount.move.linejournal entry

但总体思路:您需要创建一个 acount.move 和他的 account.move.line

account.move 中,您需要指定此交易与哪个期刊相关以及其他一些有用的信息。 在 account.move.line 中,您可以在此处定义与交易相关的所有数据。货币、合作伙伴(如果有的话)、账户、借方和贷方。

同一个例子 Odoo 8.0:

      # List of move.line 
      move_lines = [
                    (0, 0, {
                        'name': libelle, # a label so accountant can understand where this line come from
                        'debit': self_debit, # amount of debit
                        'credit': self_credit, # amount of credit
                        'account_id': account_id, # account 
                        'date': date,
                        'partner_id': partner_id, # partner if there is one
                        'currency_id': currency_id or (account.currency_id.id or False),
                    }),
                    (0, 0, {
                        'name': libelle,
                        'debit': debit, 
                        'credit': credit,
                        'account_id': writeoff_acc_id,
                        'analytic_account_id': context.get('analytic_id', False),
                        'date': date,
                        'partner_id': partner_id,
                        'currency_id': currency_id or (account.currency_id.id or False),
                    })
                ]

        # Create account move
        self.pool.get('account.move').create(cr, uid, {
                        'period_id': period_id, #Fiscal period
                        'journal_id': journal_id, # journal ex: sale journal, cash journal, bank journal....
                        'date':date,
                        'state': 'draft',
                        'line_id': move_lines, # this is one2many field to account.move.line
                    })