Odoo 8: есть ссылка с stock.pic на покупку.order? - PullRequest
1 голос
/ 25 февраля 2020

Это поле для покупки.

'picking_ids': fields.function(_get_picking_ids, method=True, type='one2many', relation='stock.picking', string='Picking List', help="This is the list of receipts that have been generated for this purchase order.")

Похоже, что это поле one2many, так что логика c состоит в том, что у него есть контрагент в stock.picking, но нет, он не имеет контрагента. Код в методе _get_picking_ids выглядит следующим образом:

def _get_picking_ids(self, cr, uid, ids, field_names, args, context=None):
    res = {}
    for po_id in ids:
        res[po_id] = []
    query = """
    SELECT picking_id, po.id FROM stock_picking p, stock_move m, purchase_order_line pol, purchase_order po
        WHERE po.id in %s and po.id = pol.order_id and pol.id = m.purchase_line_id and m.picking_id = p.id
        GROUP BY picking_id, po.id

    """
    cr.execute(query, (tuple(ids), ))
    picks = cr.fetchall()
    for pick_id, po_id in picks:
        res[po_id].append(pick_id)
    return res

Кто-то может объяснить мне, почему? А как связать buy.order и stock.picking без добавления дополнительного поля? (потому что база данных уже в prod начиная с 2k15).

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Поле вычисляется таким образом, что нет необходимости в противоположной части, как в «реальных» полях one2many. Но вы можете попытаться изменить поле picking_ids с purchase.order на stock.picking.

def _get_purchase_order_ids(self, cr, uid, ids, field_names, args, context=None):
    res = {}
    for pick_id in ids:
        res[pick_id] = []
    query = """
    SELECT picking_id, po.id FROM stock_picking p, stock_move m, purchase_order_line pol, purchase_order po
        WHERE p.id in %s and p.id = m.picking_id and m.purchase_line_id = pol.id and pol.order_id = po.id
        GROUP BY picking_id, po.id

    """
    cr.execute(query, (tuple(ids), ))
    picks = cr.fetchall()
    for pick_id, po_id in picks:
        res[pick_id].append(po_id)
    return res


'purchase_order_ids': fields.function(
    _get_purchase_order_ids, method=True, type='one2many',
    relation='purchase.order', string='Purchase Order List')

Это только быстрый пример и не проверен.

0 голосов
/ 25 февраля 2020

Вы можете выполнить поиск в Odoo в модуле purchase_stock , связанному с полем «stock.picking» с именем поля «purchase.order» purchase_id

Спасибо

...