поиск товаров в режиме мультикомпании Odoo - PullRequest
1 голос
/ 24 октября 2019

Затронутые версии: Odoo 10 CE с несколькими компаниями

Описание: я пытаюсь добавить случайное буквенно-цифровое значение к default_code продуктов
он отлично работает в одной компании Odoo, но не в несколькихэкземпляр компании

вот мои функции, которые я вызываю в cron, который запускается каждую ночь

@api.multi
def affect_sku(self):
    _logger.info("running affect_sku")
    Product = self.env['product.product']
    _logger.info("Model ::: %s" % Product)
    product_ids = Product.search([('active', '=', True), ('default_code', '=', '')])
    _logger.info("Les Produits ::: %s " % product_ids)
    if product_ids:
        for product_id in product_ids:
            _logger.info("Product id : %s" % product_id)
            product = Product.browse(product_id.id)
            _logger.info("Old Product default code : %s" % product.default_code)
            x = self.randomStringDigits(13)
            y = self.env['product.product'].search([('active', '=', True), ('default_code', '=', x)])
            _logger.info("y = %s" % y)
            while y :
                x = self.randomStringDigits(13)
                y = self.env['product.product'].search([('active', '=', True), ('default_code', '=', x)])
            product.default_code = x
            _logger.info("SKU de %s : %s" % (product.id, product.default_code))

1 Ответ

0 голосов
/ 24 октября 2019

Используйте SUPER USER, потому что он имеет право просматривать все товары, и вы можете немного улучшить свой код:

# and use model for crons
@api.model
def affect_sku(self):
    _logger.info("running affect_sku")
    Product = self.env['product.product'].sudo() # use SUPER USER Jus to skip any access rights
    _logger.info("Model ::: %s" % Product)
    # no need to pass active it's passed by default
    product_ids = Product.search(['|', ('default_code', '=', ''), ('default_code', '=', False)])
    _logger.info("Les Produits ::: %s " % product_ids)
    # no need to check just loop directly
    for product in product_ids:
            _logger.info("Product id : %s" % product)
            # no need to browse it's all ready a record set
            _logger.info("Old Product default code : %s" % product.default_code)
            while True :
                random_code = self.randomStringDigits(13)
                # no need to pass active and use search_count
                if not self.env['product.product'].search_count([('default_code', '=', random_code )]):
                    break
            product.default_code = random_code
            _logger.info("SKU de %s : %s" % (product.id, product.default_code))
...