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