IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Odoo (ex-OpenERP) Discussion :

Récupérer des données d'un champ many2one


Sujet :

Odoo (ex-OpenERP)

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 15
    Points
    15
    Par défaut Récupérer des données d'un champ many2one
    Bonjour,
    voilà ce que je cherche à faire dans un formulaire j'ai un champ 'sous_famille_article' de type many2one, j'ai créé trois autres champs 'couleur_article' qui est une selection, 'code_plu_article' qui est un char, et 'hors_ca_article' qui est un boolean.
    Je cherche à faire une fonction "onchange" qui lorsque l'on sélectionne une nouvelle sous famille dans le champ 'sous_famille_article' cela change les valeurs dans les trois autres champs qui sont en lecture seulement.

    Voici mon code et le début de ma fonction...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'sous_famille_article' : fields.many2one('neoxom.sousfamille', 'Sous-Famille'),
    'couleur_article' : fields.selection([ ('3','Rouge'), ('2','Bleu'),('1','Vert'), ('4','Jaune') ],'Couleur', select=True, readonly=True),
    'code_plu_article' : fields.char('Code P.L.U', size=128, readonly=True),
    'hors_ca_article' : fields.boolean('Hors C.A', readonly=True),
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def on_change_sous_famille(self, cr, uid, ids, sous_famille_article):
    	val = {}
    	famille = self.pool.get('neoxom.sousfamille').browse(cr, uid, ids)
    	if famille:
    		val['couleur_article'] = famille.couleur_famille
    		val['code_plu_article'] = famille.code_plu
    		val['hors_ca_article'] = famille.hors_ca
    	return {'value': val}
    J'ai du mal a arriver a récupérer les données....

    Merci d'avance

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Coyez vous en l'illumination????

    Mdr en relisant mon post j'ai trouvé moi même ma solution ^^ Merci le forum pour cette illumination

    La réponse était:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	def on_change_sous_famille(self, cr, uid, ids, sous_famille_article):
    		val = {}
    		famille = self.pool.get('neoxom.sousfamille').browse(cr, uid, sous_famille_article)
    		if famille:
    			val['couleur_article'] = famille.couleur_famille
    			val['code_plu_article'] = famille.code_plu
    			val['hors_ca_article'] = famille.hors_ca
    		return {'value': val}

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Par contre en parallèle j'en avais un autre et vais le mettre ici pour ne pas spamer le forum.

    Cette fois j'ai 2 champs many2one, dont l'un peut être considéré comme le parents de l'autre ( c'est a dire famille, sous famille), j'aimerais que dans le second champs apparaisse seulement les valeurs dépendant du premier champs!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		'famille_article' : fields.many2one('neoxom.famille', 'Famille', required=True),
    		'sous_famille_article' : fields.many2one('neoxom.sousfamille', 'Sous-Famille'),
    Je pense que c'est dans le domaine mais j'ai du mal a voir comment le mettre en place!

  4. #4
    Membre éprouvé
    Avatar de Gandalf24
    Homme Profil pro
    Integrateur Odoo
    Inscrit en
    Mai 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Integrateur Odoo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 481
    Points : 1 013
    Points
    1 013
    Par défaut
    Salut,

    Ce serait pas plutot un one2many que tu voudrais utiliser ? Il y a plusieurs elements ds ta sous famille non ?

    a+
    Le nom d'un bomerang qui ne revient pas quand on le lance ?
    Un Baton...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Ça sera mieux en mettant les bonne parties de code:

    Voici mon .py:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    class neoxom_famille(osv.osv):
    
    	_name = 'neoxom.famille'
    	
    	_order = 'name'
    	
    	_columns = {
    		'name' : fields.char('Nom famile', size=128, required=True),
    	}
    	
    neoxom_famille()
    
    class neoxom_sous_famille(osv.osv):
    	
    	_name = 'neoxom.sousfamille'
    	
    	_order = 'name'
    	
    	_columns = {
    		'name' : fields.char('Sous-famile', size=128, required=True),
    		'T.V.A_sous_famille' : fields.float('T.V.A', digits=(2,2)),
    		'famille_sous_famille' : fields.many2one('neoxom.famille', 'Famille', required=True),
    		'code_plu' : fields.char('Code P.L.U', size=128), 
    		'couleur_famille' : fields.selection([ ('3','Rouge'), ('2','Bleu'),('1','Vert'), ('4','Jaune') ],'Couleur', select=True), #Ajouter les bonnes valeurs de clefs pour les couleurs
    		'hors_ca' : fields.boolean('Hors C.A'),
    	}
    
    neoxom_sous_famille()
    
    class neoxom_article(osv.osv):
    
    	_name = 'neoxom.article'
    	
    	_order = 'name'
    	
    	_columns = {
    		'name' : fields.char('Nom', size=128, required=True),
    		'famille_article' : fields.many2one('neoxom.famille', 'Famille', required=True),
    		'sous_famille_article' : fields.many2one('neoxom.sousfamille', 'Sous-Famille'),
    		'libelle_court' : fields.char('Libéllé Court', size=128),
    		'libelle_touche' : fields.boolean('Touche'),
    		'prod_impr' : fields.boolean('Production'),
    		'tarif_article' : fields.float('Tarif T.T.C', digits=(10,3)),
    		'couleur_article' : fields.selection([ ('3','Rouge'), ('2','Bleu'),('1','Vert'), ('4','Jaune') ],'Couleur', select=True, readonly=True),
    		'code_plu_article' : fields.char('Code P.L.U', size=128, readonly=True),
    		'hors_ca_article' : fields.boolean('Hors C.A', readonly=True),
    	}
    
    neoxom_article()
    Voici ma vu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <record id="vue_form_neoxom_article" model="ir.ui.view">
                <field name="name">neoxom.article.form.view</field>
                <field name="model">neoxom.article</field>
                <field name="arch" type="xml">
                    <form string="Article" version="7.0">
    			<sheet>
    				<notebook>
    					<page string="Général">
    						<group col="4">
    							<separator string="Données" colspan="4" />
    							<field name="name" />
    							<field name="tarif_article"/>
    						</group>
    						<group col="6" >
    							<field name="libelle_court" />
    							<field name="libelle_touche" />
    							<field name="prod_impr" />
    						</group>
    						<group col="4">
    							<separator string="Famille" colspan="4" />
    							<field name="famille_article" />
    							<field domain="[(famille_article, '=', sous_famille_article)]" name="sous_famille_article" on_change="on_change_sous_famille(sous_famille_article)"/>
    						</group>
    						<group col="6">
    							<field name="couleur_article" />
    							<field name="code_plu_article" />
    							<field name="hors_ca_article" />
    						</group>
    					</page>
    					<page string="T.V.A">
    			
    					</page>
    					<page string="Tarifs">
    					
    					</page>
    					<page string="Association">
    								
    					</page>
    					<page string="Imprimante">
    								
    					</page>
    					<page string="Code Barre">
    								
    					</page>
    				</notebook>
    			</sheet>
    		</form>
             </field>
    </record>
    En fait ce que je voudrais c'est que dans le champs "sous_famille_article" n'apparaisse que les sous famille qui sont lié à la famille sélectionné dans le premier champs "famille_article".

    Un simple champs one2many sans domain pourrais régler mon problème??? Je vais essayer.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Donc non le champ one2many ca ne fait pas ^^ (j'ai un peu la tête en l'air car j'en avait déjà utilisé un)

    Quand je dis apparaisse je veux dire que dans la liste n'apparaisse que ceux en rapport, pas tout ceux qui ont été créé.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Donc je confirme que le one2many n'était pas ce que je voulais, et j'ai réussi à trouver c'était bien dans le domain qu'il fallait rentré les tuples!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    domain="[('famille_sous_famille', '=', famille_article)]"

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Rebonjour ^^,

    J'ai un nouveau petit soucis. Et comme cela va surement encore être une histoire de domain je l'a met ici pour pas spammer le fofo.

    Je cherche dans la vue arbre à n'afficher que les "Vrai" TVA, pas les T.V.A "évènement "que l'on créer à l’intérieur de celle ci dans le champ one2many!

    Voici mon .py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class neoxom_TVA(osv.osv):
    
    	_name = 'neoxom.tva'
    	
    	_columns = {
    		'name' : fields.char('Nom de la T.V.A', size=128, required=True),
    		'taux_tva' : fields.float('Taux', digits=(10,2)),
    		'date_debut' : fields.date('Date de début', required=True),
    		'date_fin' : fields.date('Date de fin'),
    		'tva_ids' : fields.one2many('neoxom.tva', 'idss','T.V.A évenement',),
    		'idss' : fields.many2one('neoxom.tva', 'T.V.A évenement',),
    	}
    	
    neoxom_TVA()
    Et voici ma vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    		<!-- Taux T.V.A -->
    		<record id="vue_form_neoxom_tva" model="ir.ui.view">
                <field name="name">neoxom.tva.form.view</field>
                <field name="model">neoxom.tva</field>
                <field name="arch" type="xml">
                    <form string="T.V.A" version="7.0">
    					<sheet>
    						<group col="4">
    							<separator string="T.V.A" colspan="4" />
    							<field name="name" />
    							<field name="taux_tva" />
    							<field name="date_debut" />
    							<field name="date_fin" />
    							<separator string="T.V.A évènement" colspan="4" />
    							<field name="tva_ids" colspan="4" nolabel="1">
    								<tree string="T.V.A évènement" >
    									<field name="name" />
    									<field name="taux_tva" />
    									<field name="date_debut" />
    									<field name="date_fin" />
    								</tree>
    								<form string="Ajout nouvelle T.V.A évènement">
    									<sheet>
    										<group col="4">
    											<separator string="T.V.A" colspan="4" />
    											<field name="name" />
    											<field name="taux_tva" />
    											<field name="date_debut" />
    											<field name="date_fin" />
    										</group>
    									</sheet>
    								</form>
    							</field>
    						</group>
    					</sheet>
    				</form>
                </field>
            </record>
    		
    		<record id="vue_tree_neoxom_tva" model="ir.ui.view" >
                <field name="name">neoxom.tva.tree.view</field>
                <field name="model">neoxom.tva</field>
    			<field name="domain">[('idss', '=', False )]</field>
    			<!-- <field name="context">{'tva_ids','idss'}</field> -->
                <field name="arch" type="xml">
                    <tree string="T.V.A" >
    					<field name="name" />
    					<field name="taux_tva" />
    					<field name="date_debut" />
    					<field name="date_fin" />
                    </tree>
                </field>
            </record>
    		
    		<!-- L'action du menu T.V.A -->
    		<record id="action_neoxom_tva" model="ir.actions.act_window" >
    			<field name="name">Taux T.V.A</field>
    			<field name="type">ir.actions.act_window</field>
    			<field name="res_model">neoxom.tva</field>
    			<field name="view_type">form</field>
    			<field name="view_mode">tree,form</field>
    			<field name="view_id" ref="vue_tree_neoxom_tva"/>
    			<field name="help" type="html">
    				<p class="oe_view_nocontent_create">
    					Cliquer ici pour créer un nouveau Taux T.V.A
    				</p>
    			</field>
    		</record>
    		<menuitem id="neoxom_menu_tva" action="action_neoxom_tva" parent="neoxom_menu_configuration" sequence="10" />
    Je pense que c'est sur le domain de la vue arbre mais j'ai essayé et rien ne change, faut il un context??? ou autre?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    C'était donc bien un domain mais pas à mettre sur la vue arbre mais sur l'action du menu!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    		<!-- L'action du menu T.V.A -->
    		<record id="action_neoxom_tva" model="ir.actions.act_window" >
    			<field name="name">Taux T.V.A</field>
    			<field name="type">ir.actions.act_window</field>
    			<field name="res_model">neoxom.tva</field>
    			<field name="view_type">form</field>
    			<field name="view_mode">tree,form</field>
    			<field name="view_id" ref="vue_tree_neoxom_tva"/>
    			<field name="domain">[('idss', '=', False )]</field>
    			<field name="help" type="html">
    				<p class="oe_view_nocontent_create">
    					Cliquer ici pour créer un nouveau Taux T.V.A
    				</p>
    			</field>
    		</record>
    		<menuitem id="neoxom_menu_tva" action="action_neoxom_tva" parent="neoxom_menu_configuration" sequence="10" />

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Salut à tous,

    je remonte un peu ce topic car je cherche à faire la même chose que yoanneox dans le post #5, c'est à dire filtrer les résultats d'une liste en fonction d'une première, mais pour que cela fonctionne il manque la fonction on_change_sous_famille qui n’apparaît pas dans le .py de yoanneox !!?
    Quelqu'un saurait-il me dire à quoi elle est censée ressembler ?

    Merci d'avance !


    EDIT: j'ai fini par trouver une fonction qui va bien, je la poste ici si ça peut aider quelqu'un ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        def Nature_Categ_OnChange(self,cr,uid,ids,categ_id):
            event_obj = self.pool.get('test.even')
            event_ids = event_obj.search(cr, uid, [('categ_id','=',categ_id)])
            return {'domain':{'nature_id':[('id','in',event_ids)]}}

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo