J'ai modifiée les classes comme ci-dessous mais j'ai une erreur "Calling
method fields_view_get on model arbres.arbres-ecologie.ecologie is not
allowed !" ?

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.Integer('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 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):
    '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()


Le 3 février 2011 14:25, Cédric Krier <[email protected]> a écrit :

> On 03/02/11 14:20 +0100, pascal obstetar wrote:
> > J'ai créé les classes Arbres, Ecologie et ArbresEcologie comme ci-dessous
> :
> >
> > 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_code_eco =
> > fields.Many2Many('arbres.arbres-ecologie.ecologie','arbres', 'ecologie',
> > 'Code écologique')
>
>     arb_eco = fields.One2Many('arbres.arbres-ecologie.ecologie', 'arbres',
> 'Arbres Eco')
>
> >
> >     def default_code_eco(self):
> >         return Transaction().context.get('arb_code_eco', [])
> >
> > Arbres()
> >
> > class ArbresEcologie(ModelSQL):
> >     'Arbres - Ecologie'
> >     _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)
> >
> > ArbresEcologie()
> >
> > class Ecologie(ModelSQL, ModelView):
> >     'Ecologie'
> >     _name = 'ecologie.ecologie'
> >     _description = __doc__
> >
> >     eco_intitule = fields.Char('Intitulé', help='Intitulé du code')
> >     name = fields.Char('Code', help='Code écologique')
> >
> > Ecologie()
> >
> > Quelle(s) classe(s) dois je modifier et quel(s) champ(s) ?
>
> Ci-dessus.
> Tu peux ajouter le champ ou bien remplacer "arb_code_eco".
>
> --
> Cédric Krier
>
> B2CK SPRL
> Rue de Rotterdam, 4
> 4000 Liège
> Belgium
> Tel: +32 472 54 46 59
> Email/Jabber: [email protected]
> Website: http://www.b2ck.com/
>



-- 
Pascal Obstétar
CEO Bio Eco Forests
Tél : 06 70 614 944
www.forestiersdumonde.org

-- 
[email protected] mailing list

Répondre à