2017-12-08 14 views
1

私はOdooのaccount.accountモデルを初めて使っています。コードでaccount.moveを作成する - Odoo v8

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から、私はfield3が何であれジャーナルにcreditする必要があります必要がある、のは言わせて、ジャーナルにaccount.moveを作成する必要がありますpartner_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を作成し、この方法でする必要があるので、私がしようとしていたことはpartner_journalに直接書き込むことでしたdebitフィールドには、field4数量です。

したがって、動作させるにはaccount.moveを作成する必要があります。

例やアイデアはありますか?

+0

コールは後に必要なすべての引数を渡した後、あなたのDBにこのデータを書き込むための書き込みメソッドを呼び出して、あなたのモジュールからモデルaccount.moveのメソッドを作成します。 –

答えて

2

あなたが求めていることは、あなたがOdooの会計モジュールと会計をどのように扱うかを学ぶ必要があるのは簡単ではありません。

まず最初に、書籍「Working with Odoo」を読むことをお勧めします。アカウントモジュールについての非常に良いアイデアを提供する小さな章があります。

Odooモジュールのコードを参照してください。sale.orderを確認し、Odooがmove.lineを含むaccount.moveをどのように作成するかを確認します。

あなたはaccount.accountaccount.moveaccount.move.line,journal 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 
        }) 
+0

すごくありがたく、すごい説明のために、文書のすべての州でこのようなことをすべきですか? – NeoVe

+0

あなたは魔法使いのアカウントを定義する必要があります。魔法使いのアカウントはクレジットされ、魔法使いのアカウントは借方に入れられます。なぜなら、アカウントの目標はすべてのアカウントのすべての金額がゼロになるからです。 – Cherif

+0

しかし計算フィールドでこれをしないでください。例えば、検証するためのボタンやワークフローを作成するためにボタンを使用してください。何度もアカウントを再作成する必要はありません。 – Cherif

関連する問題