Bonjour,

J'ai un petit souci, et je ne comprends pas pourquoi…

Voilà un morceau de code qui est censé injecter des
purchase.product_supplier


    product, = Product.find([('code', '=', article['Article_Id'])])
    template = product.template
    product_supplier = ProductSupplier()
    product_supplier.product = template
    product_supplier.name = template.name

    product_supplier.currency = get_currency()
    #debug('Currency du product supplier = '+str(product_supplier.currency))
    product_supplier.company = get_company()
    product_supplier.code = article['Ref_Fournisseur']
    product_supplier.delivery_time = article['Delai_Reappro']
    #product_supplier.sequence = i

    supplier, = Party.find([('name', '=', 
osi_encode_db(article['Denomination']))])
    product_supplier.party = supplier

    product_supplier.save()

    product_supplier_price = ProductSupplierPrice()
    product_supplier_price.quantity = article['Qte_Minimum']
    product_supplier_price.unit_price = article['Prix_Achat']
    product_supplier.prices.append(product_supplier_price)

    product_supplier.save()


article, c'est un dico tiré d'une base de données
get_currency() est une fonction importée qui renvoie l'instance Euro de
currency.currency

Ce code est dans un script article.py.
Si je lance le script avec un if __name__ == '__main__', tout va bien.
Si j'exécute ce code (une fois) avec ipython, tout va bien également.

Mais si je lance la fonction d'import via mon script principal, là, j'obtiens:

 File "transfert.py", line 408, in <module>
    main(args.modules, args.dossier_id, args.dbopensi)
  File "transfert.py", line 378, in main
    importer_articles(conn_osi)
  File "/home/jm/rcs/OpenSI2Tryton/src/articles.py", line 452, in 
importer_articles
    creer_articles(conn_osi)
  File "/home/jm/rcs/OpenSI2Tryton/src/articles.py", line 435, in creer_articles
    ajouter_fournisseur_article(conn_osi, article['Fiche_Article_Id'])
  File "/home/jm/rcs/OpenSI2Tryton/src/articles.py", line 346, in 
ajouter_fournisseur_article
    product_supplier.save()
  File "/home/jm/rcs/proteus/proteus/__init__.py", line 664, in save
    self.__id, = self._proxy.create([values], context)
  File "/home/jm/rcs/proteus/proteus/config.py", line 144, in __call__
    result = rpc.result(meth(*args, **kwargs))
  File "/home/jm/rcs/trytond/trytond/model/modelsql.py", line 361, in create
    cls.__raise_integrity_error(exception, values)
  File "/home/jm/rcs/trytond/trytond/model/modelsql.py", line 208, in 
__raise_integrity_error
    error_args=cls._get_error_args(field_name))
  File "/home/jm/rcs/trytond/trytond/error.py", line 74, in raise_user_error
    raise UserError(error)
trytond.exceptions.UserError: ('UserError', (u'The field "Currency" on "Product 
Supplier" is required.', ''))

Il me semble bien donner une valeur pour l'attribut currency, justement.

Je ne sais pas trop si ça a rapport directement avec Tryton, ou avec mon
Python qui n'est pas au top, mais si quelqu'un avait une idée, ça
m'arrangerait…

Merci.

-- 
jm

Répondre à