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 :

Module ajout colonne dans vue produit


Sujet :

Odoo (ex-OpenERP)

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    nma
    nma est déconnecté
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Par défaut Je crois que c bon !!!
    Bonsoir @ tous,

    Je crois que cette fois c bon.

    product_ttc.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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    import logging
    _logger = logging.getLogger(__name__)
    from openerp.osv import fields, osv
    
    
    class product_product(osv.osv):
        _name = 'product.product'
        _inherit = "product.product" # qui herite elle meme de product.template
    
        
        def _ttc_calc2(self, cr, uid, ids, name, value, args, context=None):
            if context is None:
                context = {}
            
            #_logger.info('ids : %r', ids)
            
            res = {}
         
            for obj in self.browse(cr,uid,ids,context=context):
         
                if obj.taxes_id:
                    
                    #_logger.info('obj : %r', obj.taxes_id)
                    
                    obj_tax = self.pool.get('account.tax')
                    # permet de récupérer la company_id du user
                    obj_user = self.pool.get('res.users')
                    user = obj_user.browse(cr, uid, uid)
                    
                    cr.execute('SELECT tax_id FROM product_taxes_rel WHERE prod_id = %s',(obj.id,))
                    sql = cr.fetchone()                
                    #_logger.info('sql : %r', sql)
                    
                        
                    # ici on récupère les taxes pour la company de l'utilisateur
                    #taxes_ids = obj_tax.search(cr, uid, [('id', 'in', obj.taxes_id), ('company_id', '=', user.company_id.id)])
                    taxes_ids = obj_tax.search(cr, uid, [('id', 'in', sql), ('company_id', '=', user.company_id.id)])                                
                    if taxes_ids:
         
                        # ici on récupère les valeurs de la 1ere taxe
                        tax = obj_tax.browse(cr, uid, taxes_ids[0])
                        tax_amount = tax.amount 
                        tax_type = tax.type
                        tax_include = tax.price_include
                        #_logger.info('TI : %r', tax_include)
                        # le prix du produit
                        p_price = obj.lst_price
         
                        if tax_type == 'percent':
                            if tax_include==False:
                                res[obj.id] = p_price + (p_price * tax_amount)
                            else:
                                res[obj.id] = p_price / (1 + tax_amount)
                                    
                        else:
                            if tax_include==False:
                                res[obj.id] = p_price + tax_amount
                            else:
                                res[obj.id] = p_price - tax_amount
                                
         
            return res
        
        def _amount2(self,cr,uid,ids,field,arg,context=None): 
                    if context is None:
                        context = {}
                    res2 = {}
                    for obj in self.browse(cr,uid,ids,context=context):
                         
                        obj_tax = self.pool.get('account.tax')
                        # permet de récupérer la company_id du user
                        obj_user = self.pool.get('res.users')
                        user = obj_user.browse(cr, uid, uid)
                        
                        cr.execute('SELECT tax_id FROM product_taxes_rel WHERE prod_id = %s',(obj.id,))
                        sql = cr.fetchone()                
                        taxes_ids = obj_tax.search(cr, uid, [('id', 'in', sql), ('company_id', '=', user.company_id.id)])                                
                        
                        if taxes_ids:
                            # ici on récupère les valeurs de la 1ere taxe
                            tax = obj_tax.browse(cr, uid, taxes_ids[0])
                            tax_amount = tax.amount*100
                            tax_type = tax.type
                            if tax.price_include == False:
                                tax_include = 'not include'
                            else:
                                tax_include = 'include'
                            res2[obj.id] = str(tax_amount) + '% - ' + tax_include
                    return res2
       
    
        _columns = {
            'price_ttc': fields.function(_ttc_calc2, string='Ttc/Ht', type='float'),
            'taux_tax': fields.function(_amount2, string='Taxes', type='char'),
                     
        }
        
    product_product()
    Je n'ai plus qu' à vérifier avec quelques modif des produits tarif et tva simple et multiple mais à première vue ça ma l'air bien bon tout ça !!!!

    Merci de vos commentaires, pour amélioration ou autre.

    Nicolas

  2. #2
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    Ben non, on ne devrait pas avoir à exécuter les requêtes SQL directement. On devrait se limiter aux fonctions de l'ORM qui sont suffisantes dans 95% des cas.

    Tu ne devrais pas avoir à interroger la table relationnelle. L'ORM le fait tout seul. Il y a surement un os dans le code que je t'ai mis, mais en le corrigeant tu devrais trouver ce qui cloche.

    Ce n'est pas facile pour ceux qui t'aident d'écrire du code sans avoir le module complet dans les mains, de plus il faut l'installer, et tout et tout, mais tu devrais repartir sur ce que je t'avais mis et trouver la bonne syntaxe/methode

  3. #3
    nma
    nma est déconnecté
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Par défaut
    Bonjour @ tous,

    J'ai trouvé une solution 100% ORM, mais je penses que ce n'est pas la plus courte.
    Voici mon fichier product_ttc.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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    import logging
    _logger = logging.getLogger(__name__)
    from openerp.osv import fields, osv
    
    
    class product_product(osv.osv):
        _name = 'product.product'
        _inherit = "product.product" # qui herite elle meme de product.template
     
    
        
        def _ttc_calc3(self, cr, uid, ids, name, value, args, context=None):
            if context is None:
                context = {}
            
            #_logger.info('ids : %r', ids)
            
            res = {}
         
            for obj in self.browse(cr,uid,ids,context=context):
         
                if obj.taxes_id:
                    obj_tax = self.pool.get('account.tax')
                    # permet de récupérer la company_id du user
                    obj_user = self.pool.get('res.users')
                    user = obj_user.browse(cr, uid, uid)
                    
                    theTax = []
                    for t in obj.taxes_id :
                        theTax.append(t.id)              
                        
                    # ici on récupère les taxes pour la company de l'utilisateur
                    taxes_ids = obj_tax.search(cr, uid, [('id', 'in', (theTax[0],)), ('company_id', '=', user.company_id.id)])                                
                    if taxes_ids:
                        # ici on récupère les valeurs de la 1ere taxe
                        tax = obj_tax.browse(cr, uid, taxes_ids[0])
                        tax_amount = tax.amount 
                        tax_type = tax.type
                        tax_include = tax.price_include
                        #_logger.info('TI : %r', tax_include)
                        # le prix du produit
                        p_price = obj.lst_price
         
                        if tax_type == 'percent':
                            if tax_include==False:
                                res[obj.id] = p_price + (p_price * tax_amount)
                            else:
                                res[obj.id] = p_price / (1 + tax_amount)
                                    
                        else:
                            if tax_include==False:
                                res[obj.id] = p_price + tax_amount
                            else:
                                res[obj.id] = p_price - tax_amount
                                
            return res
        
        def _amount3(self,cr,uid,ids,field,arg,context=None): 
                        if context is None:
                            context = {}
                        res2 = {}
                        for obj in self.browse(cr,uid,ids,context=context):
                             
                            obj_tax = self.pool.get('account.tax')
                            # permet de récupérer la company_id du user
                            obj_user = self.pool.get('res.users')
                            user = obj_user.browse(cr, uid, uid)
                            
                            theTax = []
                            for t in obj.taxes_id :
                                theTax.append(t.id)             
                                
                            # ici on récupère les taxes pour la company de l'utilisateur
                            taxes_ids = obj_tax.search(cr, uid, [('id', 'in', (theTax[0],)), ('company_id', '=', user.company_id.id)])                                
                            if taxes_ids:
                            
                                # ici on récupère les valeurs de la 1ere taxe
                                tax = obj_tax.browse(cr, uid, taxes_ids[0])
                                tax_amount = tax.amount*100
                                tax_type = tax.type
                                if tax.price_include == False:
                                    tax_include = 'not include'
                                else:
                                    tax_include = 'include'
                                res2[obj.id] = str(tax_amount) + '% - ' + tax_include
                        return res2
    
    
        _columns = {
            'price_ttc': fields.function(_ttc_calc3, string='Ttc/Ht', type='float'),
            'taux_tax': fields.function(_amount3, string='Taxes', type='char'),
                     
        }
        
    product_product()
    Donc voila cela semble fonctionner correctement.

    Cependant j'ai deux questions, il y à un truc que je ne comprend pas.

    1/Le champ many2many taxes_id renvoie un tableau contenant un objet et un id
    taxes_id : [browse_record(account.tax, 5), browse_record(account.tax, 4)]

    C'est a dire un objet account.tax avec tous les champs de la table et son id, cependant je n'arrive pas à récupérè le id :
    un truc du genre
    Tous en écrivant mon post, je viens de trouver une autre solution pour ce champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    taxes_ids = obj_tax.search(cr, uid, [('id', 'in', (obj.taxes_id[0].id,)), ('company_id', '=', user.company_id.id)])
    Ou du coup encore plus directe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tax = obj_tax.browse(cr, uid, obj.taxes_id[0].id)
    2/ peut on vider le fichier de log sans problème, je penses que oui mais je préfère une confirmation.

    Merci de vos commentaires.

    En vous remerciant
    Nicolas

Discussions similaires

  1. Module ajout colonne category dans vue product.tree
    Par nma dans le forum Odoo (ex-OpenERP)
    Réponses: 4
    Dernier message: 06/01/2014, 00h20
  2. [WD 14] Ajout Colonne dans un tableau !
    Par Grammaton54 dans le forum WinDev
    Réponses: 2
    Dernier message: 12/05/2009, 15h56
  3. ajout colonne dans fichier directement
    Par Strami dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/02/2009, 10h09
  4. Ajout colonnes Dans Table
    Par cjacquel dans le forum Access
    Réponses: 3
    Dernier message: 11/12/2006, 21h29
  5. [VBA] Ajout colonne dans recordset
    Par le_niak dans le forum Access
    Réponses: 25
    Dernier message: 31/07/2006, 11h35

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