27 lines
1.2 KiB
Python
27 lines
1.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from odoo import models, fields
|
|
|
|
|
|
class ProductProduct(models.Model):
|
|
_inherit = 'product.product'
|
|
|
|
is_forecast_ok = fields.Boolean(string='Участвует в прогнозах')
|
|
|
|
def find_available_bom(self, qty=1):
|
|
"""Возвращает первый не-виртуальный BOM, для которого все компоненты есть на складе.
|
|
Возвращает (bom, notes) или (False, причина).
|
|
"""
|
|
for s in self:
|
|
boms = s.bom_ids.filtered(lambda b: not b.is_virtual)
|
|
if not boms:
|
|
return False, 'Нет спецификаций для продукта ' + s.name
|
|
for bom in boms:
|
|
if bom.bom_available(qty):
|
|
return bom, 'Найдена доступная спецификация'
|
|
return False, 'Нет спецификации, для которой все компоненты есть на складе (' + s.name + ')'
|
|
|
|
def start_planning(self, qty):
|
|
"""Точка входа для подбора BOM из строки прогноза."""
|
|
return self.find_available_bom(qty)
|