Se rendre au contenu
Menu
Cette question a été signalée
2 Réponses
8500 Vues

Hi, I want to put on out invoices the name of the corresponding delivery slip . 

For this I try to find all the Invoice/delivery slip pairs with the same origin. So that you can choose inside a selection field between the delivery slips. 

But self is always account_invoice(). So I never get the active record to compare.

I hope someone can help. I have no Idea where to start with this...


thanks Chris

Code:

https://pastebin.com/uYetfdLu

class inv_text(models.Model):                                                                    

    _name = "account.invoice"                                                                    

    _inherit = "account.invoice"                                                                                                                

                                                                                                 

    delivery_ref = fields.Selection(selection='_get_delivery_name',string='Lieferschein')        

                                                                                                 

    @api.multi                                                                                    

    def _get_delivery_name(self):                                                                

        delivery_list = []                                                                                                                                                    

        deliverys = self.env["stock.picking"].search([("origin","=",self.origin)])                    

        for delivery in deliverys:                                                                

            delivery_list.append((str(delivery.name),str(delivery.name)))                                                                                                                

        return delivery_list

Avatar
Ignorer
Meilleure réponse

Hi Chris,


Try this.

from odoo import fields, model, api

class inv_text(models.Model):                                                                    
   
 _name = "account.invoice"                                                                    
    _inherit = "account.invoice"                                                                                                                
                                                                                                
    @api.model                                                                                    
    def _get_delivery_name(self):                                                                
 
delivery_list = []                                                                                                                                                    
        deliverys = self.env["stock.picking"].search([("origin","=",self.origin)])                    
    for delivery in deliverys:                                                                
          delivery_list.append((str(delivery.name),str(delivery.name)))                                                                                                                

        return delivery_list
     
     


delivery_ref = fields.Selection(selection=lambda self : self._get_delivery_name(), string='Lieferschein')      

Hope this will help.


Happy Odooing...

Regards,

Anil


Avatar
Ignorer
Auteur

Sadly, same output. If i print self inside the method for debug it's account.invoice().

I've structured your code, that how you can use the code while calling method directly in selection. it will work like default get method, you will not able to get data from self. if you want to fetch information from current object, use compute inside field and call your method in compute.

Meilleure réponse

.

Avatar
Ignorer
Publications associées Réponses Vues Activité
1
févr. 24
1978
1
mai 20
2858
1
juil. 18
7362
1
nov. 17
11600
4
août 17
7311