Установить ссылку на поля заказа на продажу при комплектации - odoo

Я хотел бы установить ссылку Команда продаж в комплектовании непосредственно при подтверждении заказа на продажу и создании комплектования.

Но я не получил достаточно подсказки, как я могу этого добиться. Потому что метод, который вызывается во время подтверждения заказа на продажу, выглядит следующим образом.

def action_button_confirm(self, cr, uid, ids, context=None):
    if not context:
        context = {}
    assert len(ids) == 1, 'This option should only be used for a single id at a time.'
    self.signal_workflow(cr, uid, ids, 'order_confirm')
    if context.get('send_email'):
        self.force_quotation_send(cr, uid, ids, context=context)
    return True

Здесь нет никакого намека, как я могу передать его в сбор?

Цель:

Моя цель - установить рекомендации отдела продаж при сборе/отгрузке.


person Emipro Technologies Pvt. Ltd.    schedule 20.07.2017    source источник


Ответы (2)


Это не так просто. Odoo использует procurement.orders для создания stock.moves, а для них stock.pickings. Проблема: Возможно, комплектация имеет более одного заказа на продажу в качестве источника. Таким образом, может быть указано несколько отделов продаж.

Но попробуйте использовать вычисляемое поле:

section_id = fields.Many2one(
    comodel_name="crm.case.section", string="Sales Team",
    compute="_compute_section_id")

@api.multi
def _compute_section_id(self):
    for picking in self:
        section_ids = set()
        for move in picking.move_lines:
            if move.sale_line_id.order_id.section_id
                section_ids.add(move.sale_line_id.order_id.section_id.id)
        if len(section_ids) == 1:
            picking.section_id = section_ids.pop()

Вы также можете использовать связанное поле, но это может иметь очень плохие побочные эффекты. Потому что Odoo сделает первый шаг.

section_id = fields.Many2one(
    comodel_name="crm.case.section", string="Sales Team",
    related="move_lines.sale_line_id.order_id.section_id")
person CZoellner    schedule 20.07.2017
comment
Спасибо за быстрый ответ. Вы уверены, что мы всегда будем получать move.sale_line_id ? - person Emipro Technologies Pvt. Ltd.; 20.07.2017
comment
Новый API больше не выдает эти ошибкиbrowse_null_record, потому что они были выкинуты ;-) Так что это всегда должно работать. - person CZoellner; 20.07.2017
comment
Прямой связи с заказом на продажу и строкой заказа на продажу в комплектации/перемещении в версии 8 нет. Кстати, мне нравится ваше решение, оно очень хорошее. - person Emipro Technologies Pvt. Ltd.; 20.07.2017

Я получил этот метод, откуда он создает сбор. Поэтому я только что унаследовал его и добавил свой код. action_ship_create всегда будет вызываться во время создания отгрузки из заказа на продажу.

 @api.cr_uid_ids_context
    def action_ship_create(self,cr,uid,ids,context={}):
        result=super(sale_order,self).action_ship_create(cr,uid,ids,context=context)
        for order in self.browse(cr,uid,ids,context=context):
            order.picking_ids.write({'section_id':order.section_id.id})
        return result
person Emipro Technologies Pvt. Ltd.    schedule 20.07.2017