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

Répondre à