如何更改SaleOrder的名称格式? Odoo 10

时间:2017-12-01 10:01:59

标签: python-2.7 openerp odoo-10

您知道如何更改销售订单的名称格式吗?

我尝试以下代码:

# -*- coding: utf-8 -*-
from datetime import datetime
from odoo import models, fields, api, _

class SaleOrder(models.Model):

    _inherit = 'sale.order'

    name = fields.Char(string='Order Reference', required=True, copy=False, readonly=True, states={'draft': [('readonly', False)]}, index=True, default=lambda self: _('New'), compute='_assign_name')
    project = fields.Char(string='Project Name')

    qt_name = fields.Char(string='Quotaion Name', readonly=True, compute='get_qt_name')
    so_name = fields.Char(string='Sale Order Name', readonly=True, compute='get_so_name')
    so_number = fields.Integer(string='SO Number', readonly=True)

    @api.one
    def _assign_name(self):
        if self.state != 'sale':
            self.name = self.qt_name
        else:
            self.name = self.so_name

    @api.one
    def get_qt_name(self):
        formated_date = datetime.strptime(self.create_date,'%Y-%m-%d %H:%M:%S').strftime('%Y%m')
        self.qt_name = 'QT%s%04d' % (formated_date, self.id)

    @api.one
    def get_so_name(self):
        if self.confirmation_date:
            formated_date = datetime.strptime(self.confirmation_date,'%Y-%m-%d %H:%M:%S').strftime('%Y%m')
            self.so_name = 'SO%s%04d' % (formated_date, self.so_number)

    def action_confirm(self):
        super(SaleOrder,self).action_confirm()
        if not self.so_number:
            self.update({'so_number': self.env['ir.sequence'].get('sale.order.number')})

    def should_draft(self, old_state, val):
        return super(SaleOrder,self).should_draft(old_state,val) and 'so_number' not in val

但是,当我尝试打印报价名称时,它不起作用。

你有更好的解决方案吗?

谢谢〜!

1 个答案:

答案 0 :(得分:2)

使用@api.depends装饰器,请尝试以下代码。

@api.one
@api.depends('state')
def _assign_name(self):
    if self.state != 'sale':
        self.name = self.qt_name
    else:
        self.name = self.so_name

希望它会对你有所帮助。