Odoo 11: хотите реализовать счета за сырье в зависимости от модели sale.order - PullRequest
0 голосов
/ 10 января 2019

Я очень новичок в Odoo и часто зацикливаюсь. Теперь я действительно застрял без решения. Моя цель - подсчитать потребляемое сырье. Проблема заключается в том, что я хочу инициализировать модель (здесьvaluation.raw.material) с product_id в mrp.bom.line. Я попытался с "default =", ".create ()", но это не работает. Я думаю, что если я получу весь product_id из всех исходных материалов, я легко заполнил бы весь столбец запросами sql. Вы можете мне помочь? Или я ошибаюсь? Или у тебя есть идея получше? Спасибо. Извините за мой плохой английский.

class AssessmentRawMaterials(models.Model):
    _name = 'assessment.raw.materials'


    # get the product_id from mrp.bom.line
    # which is nomenclature of each
    # finished product
    product_id = fields.Many2one(
        string='Matières premières',
        comodel_name='mrp.bom.line',
        ondelete="no action",
        store=True
   )

    # get the product unit of measure
    # by calling the variable name of 
    # product_id
    product_uom_name = fields.Char(
        string=u'Unité de mesure',
        related='product_id.product_id.name'
   )

    # compute using sql query, 
    # long long 
    # inner join
    # from sale.order to mrp.bom.line
    raw_material_qty = fields.Integer(
       string=u'Quantité de matières premières',
       default=0
   )

1 Ответ

0 голосов
/ 10 января 2019

Если у вас есть взаимно-однозначное отношение между базовой линией и исходным сырьем для оценки и вы хотите использовать информацию о продукте базовых линий, используйте соответствующие поля:

bom_line_id = fields.Many2one(
    string='Matières premières',
    comodel_name='mrp.bom.line',
    ondelete="no action")  # store not needed default True
product_id = fields.Many2one(
    comodel_name='product.product',
    related='bom_line_id.product_id',
    store=True)  # store explanation for related fields after code

В обычных полях many2one параметр хранилища по умолчанию True. На смежных полях вам действительно нужно решить, что должно происходить в базе данных:

  1. setting store=True создаст новый столбец в вашей таблице assessment_raw_materials и Odoo скажет копировать значение из таблицы product_product при каждом его изменении. Так что это немного избыточно, но иногда желательно.
  2. установка store=False не будет создавать новый столбец, но вместо этого Odoo всегда будет получать значение из таблицы product_product.
...