Bonjour, Voici mon code :
# -*- coding: utf-8 -*- ############################################################################## # # Copyright (c) 2010 BIO ECO FORESTS SAS. (http://bioecoforests.com) # All Rights Reserved. # # Pascal Obstetar <[email protected]> # # Ce logiciel est un programme informatique servant à automatiser l'écriture # de fichiers python Tryton à partir de schéma UML DIA. # # Ce logiciel est régi par la licence [CeCILL|CeCILL-B|CeCILL-C] soumise au droit français et # respectant les principes de diffusion des logiciels libres. Vous pouvez # utiliser, modifier et/ou redistribuer ce programme sous les conditions # de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA # sur le site "http://www.cecill.info". # # En contrepartie de l'accessibilité au code source et des droits de copie, # de modification et de redistribution accordés par cette licence, il n'est # offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, # seule une responsabilité restreinte pèse sur l'auteur du programme, le # titulaire des droits patrimoniaux et les concédants successifs. # # A cet égard l'attention de l'utilisateur est attirée sur les risques # associés au chargement, à l'utilisation, à la modification et/ou au # développement et à la reproduction du logiciel par l'utilisateur étant # donné sa spécificité de logiciel libre, qui peut le rendre complexe à # manipuler et qui le réserve donc à des développeurs et des professionnels # avertis possédant des connaissances informatiques approfondies. Les # utilisateurs sont donc invités à charger et tester l'adéquation du # logiciel à leurs besoins dans des conditions permettant d'assurer la # sécurité de leurs systèmes et ou de leurs données et, plus généralement, # à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. # # Le fait que vous puissiez accéder à cet en-tête signifie que vous avez # pris connaissance de la licence CeCILL, et que vous en avez accepté les # termes. # # ############################################################################## from trytond.model import ModelView, ModelSQL, fields class Arbres(ModelSQL, ModelView): 'Arbres' _name = 'arbres.arbres' _description = __doc__ arb_essence = fields.Many2One('essence.essence', 'Essence', required=True, help='Essence') arb_qualite = fields.Many2One('qualite.qualite', 'Qualité', required=True, help='Qualité') arb_cycle = fields.Integer('Cycle') arb_placette = fields.Integer('Placette') name = fields.Char('Numéro') arb_azimut = fields.Float('Azimut') arb_distance = fields.Float('Distance') arb_diam1 = fields.Float('Diamètre1') arb_diam2 = fields.Float('Diamètre2') arb_haut_tot = fields.Float('Hauteur totale') arb_haut_large = fields.Float('Hauteur large') arb_rayon1 = fields.Float('Rayon1') arb_diam_houp1 = fields.Float('Diam houp1') arb_rayon2 = fields.Float('Rayon2') arb_diam_houp2 = fields.Float('Diam houp2') arb_observation = fields.Text('Observation') arb_type = fields.Selection([('A','Arbre'),('M','Mort'), ('P','Perche'),('V','Volis')],'Type d\'arbre', help='Utilisé pour le cubage') arb_stade = fields.Integer('Stade', help='Stade de décomposition') arb_coupe = fields.Selection([('C',u'Chablis'), ('E',u'Exploité')],'Nature coupe') arb_code_eco = fields.One2Many('arbres.arbres-ecologie.ecologie', 'arbres', 'Code écologique') def __init__(self): super(Arbres, self).__init__() def write(self, cursor, user, ids, vals, context=None): if vals.get('name'): vals = vals.copy() return super(Arbres, self).write(cursor, user, ids, vals, context=context) def arb_code_eco_get(self, cursor, user, party_id, type=None, context=None): """ Try to find a code ecolo for the given type, if no type match the first code is return. """ code_obj = self.pool.get("arbres.arb_code_eco") code_ids = code_obj.search( cursor, user, [("arbres", "=", arbres_id)], order=[('id', 'ASC')], context=context) if not code_ids: return False default_code = code_ids[0] if not type: return default_code for code in code_obj.browse(cursor, user, code_ids, context=context): if code[type]: return code.id return default_code Arbres() class ArbresEcologie(ModelSQL, ModelView): 'ArbresEcologie' _name = 'arbres.arbres-ecologie.ecologie' _table = 'arbres_ecologie_rel' _description = __doc__ arbres = fields.Many2One('arbres.arbres', 'Numéro d\'arbres', ondelete='CASCADE', required=True, select=1) ecologie = fields.Many2One('ecologie.ecologie', 'Code écologique', ondelete='CASCADE', required=True, select=1) note = fields.Integer('Note écologique', select=1) #sequence = fields.Integer("Sequence") full_code = fields.Function(fields.Text('Full Code'), 'get_full_code') def __init__(self): super(ArbresEcologie, self).__init__() #self._order.insert(1, ('sequence', 'ASC')) self._error_messages.update({ 'write_code': 'Vous ne pouvez pas modifier le code écologique d''un arbre !', }) def default_active(self, cursor, user, context=None): return True def get_full_code(self, cursor, user, ids, name, context=None): if not ids: return {} res = {} for code in self.browse(cursor, user, ids, context=context): res[code.id] = '' if code.arbres: res[code.id] += code.arbres if code.ecologie: if res[code.id]: res[code.id] += '\n' res[code.id] += code.ecologie if code.note: if res[code.id]: res[code.id] += '\n' res[code.id] += code.note return res def get_rec_name(self, cursor, user, ids, name, context=None): if not ids: return {} res = {} for code in self.browse(cursor, user, ids, context=context): res[code.id] = ", ".join(x for x in [code.arbres, code.ecologie, code.note] if x) return res def search_rec_name(self, cursor, user, name, clause, context=None): ids = self.search(cursor, user, ['OR', ('ecologie',) + clause[1:], ], order=[], context=context) if ids: return [('id', 'in', ids)] return [('arbres',) + clause[1:]] def write(self, cursor, user, ids, vals, context=None): if 'arbres' in vals: if isinstance(ids, (int, long)): ids = [ids] for code in self.browse(cursor, user, ids, context=context): if code.arbres.id != vals['arbres']: self.raise_user_error(cursor, 'write_arbres', context=context) return super(ArbresEcologie, self).write(cursor, user, ids, vals, context=context) ArbresEcologie() Lors de l'enregistrement d'un arbre avec un code écologique, j'obtiens cette erreur sur le write() mais que je ne comprends pas : quels arguments manquent : Traceback (most recent call last): File "/trytond/protocols/netrpc.py", line 48, in run res = dispatch(host, port, 'NetRPC', *msg) File "/trytond/protocols/dispatcher.py", line 136, in dispatch res = getattr(obj, method)(*args, **kargs) TypeError: write() takes at least 5 arguments (3 given) Quel fonction write est concernée, celle d'Arbres ? @+ -- [email protected] mailing list
