Отправка пользовательских полей из строк MO BoM в строки заказа на поставку в Odoo - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь изменить строки BoM , добавив два настраиваемых поля: measure и единица измерения , например: enter image description here

И я добавил то же самое для PO : enter image description here

Это была простая часть, но, как вы можетесм., PO заказ не принимает меру и единицу измерения значения из BoM линий.

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

Как мы можем создать такое поведение?Какие функции справляются с этим?

1 Ответ

0 голосов
/ 30 октября 2018

Мы должны взять эти значения из запаса движения из заданного values.

Сначала мы добавим оба значения в соответствующих моделях:

class MrpBomLine(models.Model):
    _inherit = 'mrp.bom.line'

    item_num = fields.Integer(_('CAD Item Position'), help=_(
        "This is the item reference position into the CAD document that declares this BoM."))
    measure = fields.Char(_('Measure'))
    measure_uom_id = fields.Many2one(
        'product.uom',
        'Unit of Measure',
        help="Unit of Measure (Unit of Measure) is the unit of measurement for the products measure")

class PurchaseOrderLine(models.Model):
    _inherit = 'purchase.order.line'

    measure = fields.Char(_('Measure'))
    measure_uom_id = fields.Many2one(
        'product.uom',
        'Unit of Measure',
        help="Unit of Measure (Unit of Measure) is the unit of measurement for the products measure"
    )

Мы не делаемНужно добавить любую другую вещь в модель mrp.

Во-вторых, нам нужно переопределить методы, которые готовят строки заказа на покупку, это в правиле закупок.Итак, мы наследуем модель правила заготовки:

class ProcurementRule(models.Model):
    _inherit = 'procurement.rule'

Мы продолжаем с функцией подготовки:

@api.multi
def _prepare_purchase_order_line(
        self, product_id, product_qty, product_uom, values, po, supplier
):
    result = super(ProcurementRule, self)._prepare_purchase_order_line(
        product_id, product_qty, product_uom, values, po, supplier
    )
    if values.get('move_dest_ids', False):
        result['measure'] = values['move_dest_ids'].bom_line_id.measure
        result['measure_uom_id'] = values['move_dest_ids'].bom_line_id.measure_uom_id.id

    return result

Нам не нужно добавлять настраиваемые поля для перемещения запаса или другихфункция, это из-за Odoo создания дескриптора с использованием словаря данных, в данном случае это values, внутри этого значения мы можем найти все связанные переменные и поля, bom.line переменные, где мы включили пользовательскийполя.

До этого момента мы решали проблему переноса информации с bom.line на purchase.order.

Теперь нам нужно избегать дубликатов в заказе на покупку, для этого мы будемизмените функцию _run_buy:

    # Create Line
    po_line = False

    for line in po.order_line:
        if line.product_id == product_id and \
                line.product_uom == product_id.uom_po_id and \
                values.get('move_dest_ids', False) and \
                line.measure == values['move_dest_ids'].bom_line_id.measure and \
                line.measure_uom_id.id == values['move_dest_ids'].bom_line_id.measure_uom_id.id:
            if line._merge_in_existing_line(
                    product_id, product_qty, product_uom,
                    location_id, name, origin, values
            ):
                vals = self._update_purchase_order_line(
                    product_id, product_qty, product_uom,
                    values, line, partner
                )
                po_line = line.write(vals)
                break

Сначала проверяем, существует ли клавиша move_dest_ids;после этого мы проверяем, что продукт в строке заказа имеет ту же меру, что и продукт в строке BoM, и, наконец, мы проверяем, совпадает ли единица измерения меры.Именно так.

Таким образом, мы добавили два пользовательских поля в модель Bom Line, и значения этих полей переносятся из одной модели в другую с минимально необходимым кодом и минимальным вмешательством всистемный поток.

...