odoo二次开发教程

Odoo开发案例-从SO带入资讯到财务凭证

2019-04-14  本文已影响12人  OdooLive

近日接到财务需求,要从销售订单增加部门,并将部门与原始的合约带入到会计凭证以便进行财务分析。
首先厘清需求:

  1. SO新增部门栏位
  2. 会计凭证增加部门及合约栏位
  3. 出货单验证后会产生凭证
  4. 开立发票后产生凭证

开发步骤:

  1. 在sale_order先增加department_id(Odoo本身就已经在SO上面存在project_id了)
  2. 在stock.picking增加department_id和project_id,以便于产生会计凭证时可以取得栏位
  3. 在account_move增加department_id和project_id

代码追踪及功能实现:

self.signal_workflow(cr, uid, ids, 'order_confirm')
    def action_ship_create(self):
        res = super(BelstarSaleOrderExtend, self).action_ship_create()
        picking = self.env['stock.picking'].search([('group_id', '=', self.procurement_group_id.id)])
        picking.write({'department_id': self.department_id.id, 'project_id': self.project_id.id})
        return res
move_lines = self._prepare_account_move_line(cr, uid, move, qty, cost, credit_account_id, debit_account_id, context=context)

debit_line_vals = {
    'name': move.name,
    'product_id': move.product_id.id,
    'quantity': qty,
    'product_uom_id': move.product_id.uom_id.id,
    'ref': move.picking_id and move.picking_id.name or False,
    'date': fields.date.context_today(self, cr, uid, context=context),
    'partner_id': partner_id,
    'debit': valuation_amount > 0 and valuation_amount or 0,
    'credit': valuation_amount < 0 and -valuation_amount or 0,
    'account_id': debit_account_id,
}


credit_line_vals = {
    'name': move.name,
    'product_id': move.product_id.id,
    'quantity': qty,
    'product_uom_id': move.product_id.uom_id.id,
    'ref': move.picking_id and move.picking_id.name or False,
    'date': fields.date.context_today(self, cr, uid, context=context),
    'partner_id': partner_id,
    'credit': valuation_amount > 0 and valuation_amount or 0,
    'debit': valuation_amount < 0 and -valuation_amount or 0,
    'account_id': credit_account_id,
}
line = inv.finalize_invoice_move_lines(line)

for el in line:
    el[2].update({'analytic_account_3': inv.department_id and inv.department_id.id or False,
                  'analytic_account': inv.project_id and inv.project_id.id or False
                  })

move_vals = {
    'ref': inv.reference or inv.name,
    'line_id': line,
    'journal_id': journal.id,
    'date': inv.date_invoice,
    'narration': inv.comment,
    'company_id': inv.company_id.id,
    'analytic_account': inv.project_id and inv.project_id.id or False,
    'analytic_account_3': inv.department_id and inv.department_id.id or False,
}

总结:

  1. Odoo8同时存在的old api及new api对开发造成相当的困扰,一个Model有时要开两个文件来继承修改以区分api/old api
  2. workflow在后续版本拿掉真的是必然,在debug的时候要从程式代码和workflow切来切去很不方便,并且对版本管控来说workflow也不是良好的实现方式
  3. 当原生模块就已经继承的时候,要找到关键的代码片段也不是一件容易的事情
上一篇 下一篇

猜你喜欢

热点阅读