Odoo自动化银行对账 - xiaohao0576/odoo-doc GitHub Wiki
使用Python代码创建发票或账单,然后和已经导入的银行对账单进行对账,代码如下
wizard = self.env['bank.rec.widget'].with_context(default_st_line_id=st_line.id).new({})
wizard._action_add_new_amls(bill.line_ids.filtered(lambda x: x.account_type == 'liability_payable'))
wizard._action_validate()
bank.rec.widget
代表Odoo对账界面左侧某一条银行对账单明细,st_line_id
字段关联银行对账单明细,代码如下
st_line_id = fields.Many2one(comodel_name='account.bank.statement.line')
line_ids = fields.One2many(
comodel_name='bank.rec.widget.line',
inverse_name='wizard_id',
compute='_compute_line_ids',
compute_sudo=False,
store=True,
readonly=False,
)
line_ids
代表的是对账界面右上方即将和银行/现金科目对账的account.move.lines,模型是bank.rec.widget.line
,此模型的重要字段是source_aml_id
,代表的是对账界面右下方已经存在,可以手动选择的 account.move.lines。 模型bank.rec.widget.line
根据选择的source_aml_id
自动计算出将要生成的对账金额、科目、联系人等信息。
source_aml_id = fields.Many2one(comodel_name='account.move.line')
参考代码
def test_early_payment_included_intracomm_bill(self):
tax_tags = self.env['account.account.tag'].create({
'name': f'tax_tag_{i}',
'applicability': 'taxes',
'country_id': self.env.company.account_fiscal_country_id.id,
} for i in range(6))
intracomm_tax = self.env['account.tax'].create({
'name': 'tax20',
'amount_type': 'percent',
'amount': 20,
'type_tax_use': 'purchase',
'invoice_repartition_line_ids': [
# pylint: disable=bad-whitespace
Command.create({'repartition_type': 'base', 'factor_percent': 100.0, 'tag_ids': [Command.set(tax_tags[0].ids)]}),
Command.create({'repartition_type': 'tax', 'factor_percent': 100.0, 'tag_ids': [Command.set(tax_tags[1].ids)]}),
Command.create({'repartition_type': 'tax', 'factor_percent': -100.0, 'tag_ids': [Command.set(tax_tags[2].ids)]}),
],
'refund_repartition_line_ids': [
# pylint: disable=bad-whitespace
Command.create({'repartition_type': 'base', 'factor_percent': 100.0, 'tag_ids': [Command.set(tax_tags[3].ids)]}),
Command.create({'repartition_type': 'tax', 'factor_percent': 100.0, 'tag_ids': [Command.set(tax_tags[4].ids)]}),
Command.create({'repartition_type': 'tax', 'factor_percent': -100.0, 'tag_ids': [Command.set(tax_tags[5].ids)]}),
],
})
early_payment_term = self.env['account.payment.term'].create({
'name': "early_payment_term",
'company_id': self.company_data['company'].id,
'early_pay_discount_computation': 'included',
'early_discount': True,
'discount_percentage': 2,
'discount_days': 7,
'line_ids': [
Command.create({
'value': 'percent',
'value_amount': 100.0,
'nb_days': 30,
}),
],
})
bill = self.env['account.move'].create({
'move_type': 'in_invoice',
'partner_id': self.partner_a.id,
'invoice_payment_term_id': early_payment_term.id,
'invoice_date': '2019-01-01',
'date': '2019-01-01',
'invoice_line_ids': [
Command.create({
'name': 'line',
'price_unit': 1000.0,
'tax_ids': [Command.set(intracomm_tax.ids)],
}),
],
})
bill.action_post()
st_line = self._create_st_line(
-980.0,
date='2017-01-01',
)
wizard = self.env['bank.rec.widget'].with_context(default_st_line_id=st_line.id).new({})
wizard._action_add_new_amls(bill.line_ids.filtered(lambda x: x.account_type == 'liability_payable'))
wizard._action_validate()