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 :

Computed field ne s'affiche pas dans la vue


Sujet :

Odoo (ex-OpenERP)

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2020
    Messages : 17
    Par défaut Computed field ne s'affiche pas dans la vue
    Bonjour,

    D'après la documentation odoo il est possible d'afficher un champs calculé en utilisant l'attribut store=True, dans le Field odoo. Voici mon code:

    Code Python : 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
     
     
        x_payment_amount_com = fields.Monetary(
            string="Payment amount", store=True, compute='_compute_amount_b',currency_field="currency_id")
        x_payment_journal_id = fields.Char(string="ID journal", store=True)
        x_payment_date = fields.Date(string="Date of payments", store=True)
        x_payment_type = fields.Char(string="Payment Type",store=True)
        x_view_journal = fields.Char(string="journal view", related ="x_payment_journal_id")
     
    @api.one
    @api.depends('payment_ids','x_amount_surcom','x_payment_amount_com','x_payment_journal_id','x_payment_type','currency_id','x_payment_date','x_payment_type',' x_view_journal ')
        def _compute_amount_b(self):
            payments = self.payment_ids
            amount = self.x_amount_surcom
            currency=self.currency_id
            total = 0
            for px in payments:
                for mv in px.move_line_ids :
                    if (mv.account_id.code.startswith('7') and currency.name==px.currency_id.name):
                        self.x_payment_amount_com = px.amount
                        self.x_payment_journal_id=mv.account_id.code
                        self.x_view_journal=mv.account_id.code
                        self.x_payment_date = px.payment_date
                        self.x_payment_type = px.payment_method_code
                        _logger.info(msg=" mv code "+str(mv.account_id.code))
                        _logger.info(msg=" self code "+str(self.x_payment_journal_id))
                        _logger.info(msg=" amount "+str(px.amount))
                        _logger.info(msg=" self  amount "+str(self.x_payment_amount_com))
                        _logger.info(msg="  date "+str(px.payment_date))  
                        _logger.info(msg=" self date "+str(self.x_payment_date))

    Même si j'ai bien les valeurs correspondants dans le log info je n'arrive pas à afficher ces valeurs dans la vue :

    Code XML : 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
    <record model="ir.ui.view" id="a_w_2.b_listing_view">
            <field name="name"> a_w_2.b_listing_view</field>
            <field name="model">account.invoice</field>
            <field name="inherit_id" ref="account.invoice_tree"/>
            <field name="mode">primary</field>
            <field name="arch" type="xml">
     
                <tree >
                    <field name="x_payment_amount_com" string="Montant Paiement"/>
                    <field name="x_payment_journal_id" string="Journal ID" />
                    <field name="x_payment_date" string="Date de paiement" />
                    <field name="x_payment_type" string="Type de paiement" />
                    <field name="x_view_journal" string=" Journal view" />
     
                    <field name="payment_ids" widget="many2many_tags" options="{'no_create': True}" context="{'form_view_ref' : 'b_payments_form', 'tree_view_ref' : 'b_payments_tree'}" />
     
                </tree>
                <xpath expr="//tree" position="attributes">
                    <attribute name="default_order">user_id asc</attribute>
                </xpath>
                <xpath expr='//tree' position='attributes'>
                    <attribute name="create">false</attribute>
                </xpath>
     
            </field>
        </record>

    J'ai (il me semble ) suivi la doc correctement mais il y a peut être un fonctionnement qui m'échappe ?
    Y a t- il une autre façon pour afficher les champs calculés?

    cdt

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mars 2019
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2019
    Messages : 50
    Par défaut
    Bonjour,

    Cela ne s'affiche pas ou la valeur reste à 0?

    Ton champ dépend d'un compute. Es tu sur que le compute se déclenche bien?

    Un conseil, utilise pdb pour déboguer.

    Ensuite si ton compute se fait, est ce qu'il enregistre bien la valeur dans ton champ? il peut y avoir une erreur plus tard dans le traitement qui provoque un rollback.

    pour info, tu es pas obligé d'ajouter des x à tes champs. Odoo fait cela quand tu ajoutes des champs depuis l'interface mais si tu codes toi même tes champs ce n'est pas utile

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2020
    Messages : 17
    Par défaut
    Ce qu'il me semble c'est ce qu' il y a toujours une valeur en écrasant la précédente même quand on ne passe pas la condition ?(d'où la valeur vide ?) Je vois mal comment ça peut être un rollback ? j'ai pas le temps de tester plus en avant, mais sur un exemple plus simple ici
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     @api.one
        @api.depends('payment_ids','currency_id','x_payment_journal_id')
        def _compute_test(self):
            total=0.0
            for px in self.payment_ids:
                for mv in px.move_line_ids :
                    if (mv.account_id.code.startswith('7') and self.currency_id.name==px.currency_id.name):
                        total=total + px.amount
                        self.x_payment_journal_id=mv.account_id.code
            self.x_test_compute=total
    ici on j'arrive à avoir x_test_compute mais pas x_payment_journal...??

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/11/2005, 15h38
  2. Icone ne s'affichant pas dans la barre de titre
    Par Spartan03 dans le forum Windows
    Réponses: 22
    Dernier message: 05/11/2005, 14h57
  3. [CSS][IE]background d'affiche pas dans div sur IE
    Par Thomzz dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 21/09/2005, 23h32
  4. Noms des colonnes ne s'affichent pas dans un JTable
    Par Bourdet dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 07/07/2005, 15h26
  5. Une valeur ne s'affiche pas dans un champ texte
    Par KibitO dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/03/2005, 20h42

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