@ -24,15 +24,20 @@ from odoo.exceptions import UserError 
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					class  StockPicking ( models . Model ) : class  StockPicking ( models . Model ) :  
			
		
	
		
		
			
				
					    """ Inheriting model stock.picking """  
			
		
	
		
		
			
				
					    _inherit  =  ' stock.picking '     _inherit  =  ' stock.picking '  
			
		
	
		
		
			
				
					
					    invoice_count  =  fields . Integer ( string = ' Invoices ' ,  compute = ' _compute_invoice_count ' ) 
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					    invoice_count  =  fields . Integer ( string = ' Invoices ' ,  
			
		
	
		
		
			
				
					                                   compute = ' _compute_invoice_count ' )  
			
		
	
		
		
			
				
					    operation_code  =  fields . Selection ( related = ' picking_type_id.code ' )     operation_code  =  fields . Selection ( related = ' picking_type_id.code ' )  
			
		
	
		
		
			
				
					    is_return  =  fields . Boolean ( )     is_return  =  fields . Boolean ( )  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					    def  _compute_invoice_count ( self ) :     def  _compute_invoice_count ( self ) :  
			
		
	
		
		
			
				
					
					        """ This compute function used to count the number of invoice for the picking """         """ This compute function used to count the number of invoice for  
			
				
				
			
		
	
		
		
	
		
		
			
				
					        the  picking """  
			
		
	
		
		
			
				
					        for  picking_id  in  self :         for  picking_id  in  self :  
			
		
	
		
		
			
				
					
					            move_ids  =  picking_id . env [ ' account.move ' ] . search ( [ ( ' invoice_origin ' ,  ' = ' ,  picking_id . name ) ] )             move_ids  =  picking_id . env [ ' account.move ' ] . search (  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                [ ( ' transfer_ids ' ,  ' in ' ,  picking_id . id ) ] )  
			
		
	
		
		
			
				
					            if  move_ids :             if  move_ids :  
			
		
	
		
		
			
				
					                self . invoice_count  =  len ( move_ids )                 self . invoice_count  =  len ( move_ids )  
			
		
	
		
		
			
				
					            else :             else :  
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -44,19 +49,31 @@ class StockPicking(models.Model): 
			
		
	
		
		
			
				
					        for  picking_id  in  self :         for  picking_id  in  self :  
			
		
	
		
		
			
				
					            current_user  =  self . env . uid             current_user  =  self . env . uid  
			
		
	
		
		
			
				
					            if  picking_id . picking_type_id . code  ==  ' outgoing ' :             if  picking_id . picking_type_id . code  ==  ' outgoing ' :  
			
		
	
		
		
			
				
					
					                customer_journal_id  =  picking_id . env [ ' ir.config_parameter ' ] . sudo ( ) . get_param (                 customer_journal_id  =  \ 
			
				
				
			
		
	
		
		
			
				
					
					                    ' stock_move_invoice.customer_journal_id ' )  or  False                     picking_id . env [ ' ir.config_parameter ' ] . sudo ( ) . \ 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					                        get_param ( ' stock_move_invoice.customer_journal_id ' )  or  \ 
			
		
	
		
		
			
				
					                    False  
			
		
	
		
		
			
				
					                if  not  customer_journal_id :                 if  not  customer_journal_id :  
			
		
	
		
		
			
				
					
					                    raise  UserError ( _ ( " Please configure the journal from settings " ) )                     raise  UserError (  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                        _ ( " Please configure the journal from settings " ) )  
			
		
	
		
		
			
				
					                invoice_line_list  =  [ ]                 invoice_line_list  =  [ ]  
			
		
	
		
		
			
				
					
					                for  move_ids_without_package  in  picking_id . move_ids_without_package :                 for  move_ids_without_package  in  picking_id . \ 
			
				
				
			
		
	
		
		
	
		
		
			
				
					                        move_ids_without_package :  
			
		
	
		
		
			
				
					                    vals  =  ( 0 ,  0 ,  {                     vals  =  ( 0 ,  0 ,  {  
			
		
	
		
		
			
				
					                        ' name ' :  move_ids_without_package . description_picking ,                         ' name ' :  move_ids_without_package . description_picking ,  
			
		
	
		
		
			
				
					                        ' product_id ' :  move_ids_without_package . product_id . id ,                         ' product_id ' :  move_ids_without_package . product_id . id ,  
			
		
	
		
		
			
				
					
					                        ' price_unit ' :  move_ids_without_package . product_id . lst_price ,                         ' price_unit ' :  
			
				
				
			
		
	
		
		
			
				
					
					                        ' account_id ' :  move_ids_without_package . product_id . property_account_income_id . id  if  move_ids_without_package . product_id . property_account_income_id                             move_ids_without_package . product_id . lst_price ,  
			
				
				
			
		
	
		
		
			
				
					
					                        else  move_ids_without_package . product_id . categ_id . property_account_income_categ_id . id ,                         ' account_id ' :  
			
				
				
			
		
	
		
		
			
				
					
					                        ' tax_ids ' :  [ ( 6 ,  0 ,  [ picking_id . company_id . account_sale_tax_id . id ] ) ] ,                             move_ids_without_package . product_id .  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					                            property_account_income_id . id  if  
			
		
	
		
		
			
				
					                            move_ids_without_package .  
			
		
	
		
		
			
				
					                            product_id . property_account_income_id  
			
		
	
		
		
			
				
					                        else  move_ids_without_package .  
			
		
	
		
		
			
				
					                            product_id . categ_id .  
			
		
	
		
		
			
				
					                            property_account_income_categ_id . id ,  
			
		
	
		
		
			
				
					                        ' tax_ids ' :  [ ( 6 ,  0 ,  [  
			
		
	
		
		
			
				
					                            picking_id . company_id . account_sale_tax_id . id ] ) ] ,  
			
		
	
		
		
			
				
					                        ' quantity ' :  move_ids_without_package . quantity_done ,                         ' quantity ' :  move_ids_without_package . quantity_done ,  
			
		
	
		
		
			
				
					                    } )                     } )  
			
		
	
		
		
			
				
					                    invoice_line_list . append ( vals )                     invoice_line_list . append ( vals )  
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -66,11 +83,13 @@ class StockPicking(models.Model): 
			
		
	
		
		
			
				
					                        ' invoice_user_id ' :  current_user ,                         ' invoice_user_id ' :  current_user ,  
			
		
	
		
		
			
				
					                        ' narration ' :  picking_id . name ,                         ' narration ' :  picking_id . name ,  
			
		
	
		
		
			
				
					                        ' partner_id ' :  picking_id . partner_id . id ,                         ' partner_id ' :  picking_id . partner_id . id ,  
			
		
	
		
		
			
				
					
					                        ' currency_id ' :  picking_id . env . user . company_id . currency_id . id ,                         ' currency_id ' :  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                            picking_id . env . user . company_id . currency_id . id ,  
			
		
	
		
		
			
				
					                        ' journal_id ' :  int ( customer_journal_id ) ,                         ' journal_id ' :  int ( customer_journal_id ) ,  
			
		
	
		
		
			
				
					                        ' payment_reference ' :  picking_id . name ,                         ' payment_reference ' :  picking_id . name ,  
			
		
	
		
		
			
				
					                        ' picking_id ' :  picking_id . id ,                         ' picking_id ' :  picking_id . id ,  
			
		
	
		
		
			
				
					
					                        ' invoice_line_ids ' :  invoice_line_list                         ' invoice_line_ids ' :  invoice_line_list ,  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                        ' transfer_ids ' :  self  
			
		
	
		
		
			
				
					                    } )                     } )  
			
		
	
		
		
			
				
					                    return  invoice                     return  invoice  
			
		
	
		
		
			
				
					
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -80,19 +99,29 @@ class StockPicking(models.Model): 
			
		
	
		
		
			
				
					        for  picking_id  in  self :         for  picking_id  in  self :  
			
		
	
		
		
			
				
					            current_user  =  self . env . uid             current_user  =  self . env . uid  
			
		
	
		
		
			
				
					            if  picking_id . picking_type_id . code  ==  ' incoming ' :             if  picking_id . picking_type_id . code  ==  ' incoming ' :  
			
		
	
		
		
			
				
					
					                vendor_journal_id  =  picking_id . env [ ' ir.config_parameter ' ] . sudo ( ) . get_param (                 vendor_journal_id  =  picking_id . env [  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                                        ' ir.config_parameter ' ] . sudo ( ) . get_param (  
			
		
	
		
		
			
				
					                    ' stock_move_invoice.vendor_journal_id ' )  or  False                     ' stock_move_invoice.vendor_journal_id ' )  or  False  
			
		
	
		
		
			
				
					                if  not  vendor_journal_id :                 if  not  vendor_journal_id :  
			
		
	
		
		
			
				
					
					                    raise  UserError ( _ ( " Please configure the journal from the settings. " ) )                     raise  UserError (  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                        _ ( " Please configure the journal from the settings. " ) )  
			
		
	
		
		
			
				
					                invoice_line_list  =  [ ]                 invoice_line_list  =  [ ]  
			
		
	
		
		
			
				
					
					                for  move_ids_without_package  in  picking_id . move_ids_without_package :                 for  move_ids_without_package  in  picking_id . \ 
			
				
				
			
		
	
		
		
	
		
		
			
				
					                        move_ids_without_package :  
			
		
	
		
		
			
				
					                    vals  =  ( 0 ,  0 ,  {                     vals  =  ( 0 ,  0 ,  {  
			
		
	
		
		
			
				
					                        ' name ' :  move_ids_without_package . description_picking ,                         ' name ' :  move_ids_without_package . description_picking ,  
			
		
	
		
		
			
				
					                        ' product_id ' :  move_ids_without_package . product_id . id ,                         ' product_id ' :  move_ids_without_package . product_id . id ,  
			
		
	
		
		
			
				
					
					                        ' price_unit ' :  move_ids_without_package . product_id . lst_price ,                         ' price_unit ' :  
			
				
				
			
		
	
		
		
			
				
					
					                        ' account_id ' :  move_ids_without_package . product_id . property_account_income_id . id  if  move_ids_without_package . product_id . property_account_income_id                             move_ids_without_package . product_id . lst_price ,  
			
				
				
			
		
	
		
		
			
				
					
					                        else  move_ids_without_package . product_id . categ_id . property_account_income_categ_id . id ,                         ' account_id ' :  
			
				
				
			
		
	
		
		
			
				
					
					                        ' tax_ids ' :  [ ( 6 ,  0 ,  [ picking_id . company_id . account_purchase_tax_id . id ] ) ] ,                             move_ids_without_package . product_id .  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					                            property_account_income_id . id  if  
			
		
	
		
		
			
				
					                            move_ids_without_package . product_id .  
			
		
	
		
		
			
				
					                            property_account_income_id  
			
		
	
		
		
			
				
					                        else  move_ids_without_package . product_id . categ_id .  
			
		
	
		
		
			
				
					                            property_account_income_categ_id . id ,  
			
		
	
		
		
			
				
					                        ' tax_ids ' :  [ ( 6 ,  0 ,  [  
			
		
	
		
		
			
				
					                            picking_id . company_id . account_purchase_tax_id . id ] ) ] ,  
			
		
	
		
		
			
				
					                        ' quantity ' :  move_ids_without_package . quantity_done ,                         ' quantity ' :  move_ids_without_package . quantity_done ,  
			
		
	
		
		
			
				
					                    } )                     } )  
			
		
	
		
		
			
				
					                    invoice_line_list . append ( vals )                     invoice_line_list . append ( vals )  
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -102,11 +131,13 @@ class StockPicking(models.Model): 
			
		
	
		
		
			
				
					                        ' invoice_user_id ' :  current_user ,                         ' invoice_user_id ' :  current_user ,  
			
		
	
		
		
			
				
					                        ' narration ' :  picking_id . name ,                         ' narration ' :  picking_id . name ,  
			
		
	
		
		
			
				
					                        ' partner_id ' :  picking_id . partner_id . id ,                         ' partner_id ' :  picking_id . partner_id . id ,  
			
		
	
		
		
			
				
					
					                        ' currency_id ' :  picking_id . env . user . company_id . currency_id . id ,                         ' currency_id ' :  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                            picking_id . env . user . company_id . currency_id . id ,  
			
		
	
		
		
			
				
					                        ' journal_id ' :  int ( vendor_journal_id ) ,                         ' journal_id ' :  int ( vendor_journal_id ) ,  
			
		
	
		
		
			
				
					                        ' payment_reference ' :  picking_id . name ,                         ' payment_reference ' :  picking_id . name ,  
			
		
	
		
		
			
				
					                        ' picking_id ' :  picking_id . id ,                         ' picking_id ' :  picking_id . id ,  
			
		
	
		
		
			
				
					
					                        ' invoice_line_ids ' :  invoice_line_list                         ' invoice_line_ids ' :  invoice_line_list ,  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                        ' transfer_ids ' :  self  
			
		
	
		
		
			
				
					                    } )                     } )  
			
		
	
		
		
			
				
					                    return  invoice                     return  invoice  
			
		
	
		
		
			
				
					
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -116,19 +147,29 @@ class StockPicking(models.Model): 
			
		
	
		
		
			
				
					        for  picking_id  in  self :         for  picking_id  in  self :  
			
		
	
		
		
			
				
					            current_user  =  picking_id . env . uid             current_user  =  picking_id . env . uid  
			
		
	
		
		
			
				
					            if  picking_id . picking_type_id . code  ==  ' incoming ' :             if  picking_id . picking_type_id . code  ==  ' incoming ' :  
			
		
	
		
		
			
				
					
					                customer_journal_id  =  picking_id . env [ ' ir.config_parameter ' ] . sudo ( ) . get_param (                 customer_journal_id  =  \ 
			
				
				
			
		
	
		
		
			
				
					
					                    ' stock_move_invoice.customer_journal_id ' )  or  False                     picking_id . env [ ' ir.config_parameter ' ] . sudo ( ) . \ 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					                        get_param ( ' stock_move_invoice.customer_journal_id ' )  or  \ 
			
		
	
		
		
			
				
					                    False  
			
		
	
		
		
			
				
					                if  not  customer_journal_id :                 if  not  customer_journal_id :  
			
		
	
		
		
			
				
					
					                    raise  UserError ( _ ( " Please configure the journal from settings " ) )                     raise  UserError (  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                        _ ( " Please configure the journal from settings " ) )  
			
		
	
		
		
			
				
					                invoice_line_list  =  [ ]                 invoice_line_list  =  [ ]  
			
		
	
		
		
			
				
					
					                for  move_ids_without_package  in  picking_id . move_ids_without_package :                 for  move_ids_without_package  in  picking_id . \ 
			
				
				
			
		
	
		
		
	
		
		
			
				
					                        move_ids_without_package :  
			
		
	
		
		
			
				
					                    vals  =  ( 0 ,  0 ,  {                     vals  =  ( 0 ,  0 ,  {  
			
		
	
		
		
			
				
					                        ' name ' :  move_ids_without_package . description_picking ,                         ' name ' :  move_ids_without_package . description_picking ,  
			
		
	
		
		
			
				
					                        ' product_id ' :  move_ids_without_package . product_id . id ,                         ' product_id ' :  move_ids_without_package . product_id . id ,  
			
		
	
		
		
			
				
					
					                        ' price_unit ' :  move_ids_without_package . product_id . lst_price ,                         ' price_unit ' :  
			
				
				
			
		
	
		
		
			
				
					
					                        ' account_id ' :  move_ids_without_package . product_id . property_account_income_id . id  if  move_ids_without_package . product_id . property_account_income_id                             move_ids_without_package . product_id . lst_price ,  
			
				
				
			
		
	
		
		
			
				
					
					                        else  move_ids_without_package . product_id . categ_id . property_account_income_categ_id . id ,                         ' account_id ' :  move_ids_without_package . product_id .  
			
				
				
			
		
	
		
		
			
				
					
					                        ' tax_ids ' :  [ ( 6 ,  0 ,  [ picking_id . company_id . account_sale_tax_id . id ] ) ] ,                             property_account_income_id . id  if  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					                        move_ids_without_package . product_id .  
			
		
	
		
		
			
				
					                            property_account_income_id  
			
		
	
		
		
			
				
					                        else  move_ids_without_package . product_id . categ_id .  
			
		
	
		
		
			
				
					                            property_account_income_categ_id . id ,  
			
		
	
		
		
			
				
					                        ' tax_ids ' :  [ ( 6 ,  0 ,  [  
			
		
	
		
		
			
				
					                            picking_id . company_id . account_sale_tax_id . id ] ) ] ,  
			
		
	
		
		
			
				
					                        ' quantity ' :  move_ids_without_package . quantity_done ,                         ' quantity ' :  move_ids_without_package . quantity_done ,  
			
		
	
		
		
			
				
					                    } )                     } )  
			
		
	
		
		
			
				
					                    invoice_line_list . append ( vals )                     invoice_line_list . append ( vals )  
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -138,11 +179,13 @@ class StockPicking(models.Model): 
			
		
	
		
		
			
				
					                        ' invoice_user_id ' :  current_user ,                         ' invoice_user_id ' :  current_user ,  
			
		
	
		
		
			
				
					                        ' narration ' :  picking_id . name ,                         ' narration ' :  picking_id . name ,  
			
		
	
		
		
			
				
					                        ' partner_id ' :  picking_id . partner_id . id ,                         ' partner_id ' :  picking_id . partner_id . id ,  
			
		
	
		
		
			
				
					
					                        ' currency_id ' :  picking_id . env . user . company_id . currency_id . id ,                         ' currency_id ' :  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                            picking_id . env . user . company_id . currency_id . id ,  
			
		
	
		
		
			
				
					                        ' journal_id ' :  int ( customer_journal_id ) ,                         ' journal_id ' :  int ( customer_journal_id ) ,  
			
		
	
		
		
			
				
					                        ' payment_reference ' :  picking_id . name ,                         ' payment_reference ' :  picking_id . name ,  
			
		
	
		
		
			
				
					                        ' picking_id ' :  picking_id . id ,                         ' picking_id ' :  picking_id . id ,  
			
		
	
		
		
			
				
					
					                        ' invoice_line_ids ' :  invoice_line_list                         ' invoice_line_ids ' :  invoice_line_list ,  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                        ' transfer_ids ' :  self  
			
		
	
		
		
			
				
					                    } )                     } )  
			
		
	
		
		
			
				
					                    return  invoice                     return  invoice  
			
		
	
		
		
			
				
					
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -152,19 +195,28 @@ class StockPicking(models.Model): 
			
		
	
		
		
			
				
					        for  picking_id  in  self :         for  picking_id  in  self :  
			
		
	
		
		
			
				
					            current_user  =  self . env . uid             current_user  =  self . env . uid  
			
		
	
		
		
			
				
					            if  picking_id . picking_type_id . code  ==  ' outgoing ' :             if  picking_id . picking_type_id . code  ==  ' outgoing ' :  
			
		
	
		
		
			
				
					
					                vendor_journal_id  =  picking_id . env [ ' ir.config_parameter ' ] . sudo ( ) . get_param (                 vendor_journal_id  =  picking_id . env [  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                                        ' ir.config_parameter ' ] . sudo ( ) . get_param (  
			
		
	
		
		
			
				
					                    ' stock_move_invoice.vendor_journal_id ' )  or  False                     ' stock_move_invoice.vendor_journal_id ' )  or  False  
			
		
	
		
		
			
				
					                if  not  vendor_journal_id :                 if  not  vendor_journal_id :  
			
		
	
		
		
			
				
					
					                    raise  UserError ( _ ( " Please configure the journal from the settings. " ) )                     raise  UserError (  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                        _ ( " Please configure the journal from the settings. " ) )  
			
		
	
		
		
			
				
					                invoice_line_list  =  [ ]                 invoice_line_list  =  [ ]  
			
		
	
		
		
			
				
					
					                for  move_ids_without_package  in  picking_id . move_ids_without_package :                 for  move_ids_without_package  in  picking_id . \ 
			
				
				
			
		
	
		
		
	
		
		
			
				
					                        move_ids_without_package :  
			
		
	
		
		
			
				
					                    vals  =  ( 0 ,  0 ,  {                     vals  =  ( 0 ,  0 ,  {  
			
		
	
		
		
			
				
					                        ' name ' :  move_ids_without_package . description_picking ,                         ' name ' :  move_ids_without_package . description_picking ,  
			
		
	
		
		
			
				
					                        ' product_id ' :  move_ids_without_package . product_id . id ,                         ' product_id ' :  move_ids_without_package . product_id . id ,  
			
		
	
		
		
			
				
					
					                        ' price_unit ' :  move_ids_without_package . product_id . lst_price ,                         ' price_unit ' :  
			
				
				
			
		
	
		
		
			
				
					
					                        ' account_id ' :  move_ids_without_package . product_id . property_account_income_id . id  if  move_ids_without_package . product_id . property_account_income_id                             move_ids_without_package . product_id . lst_price ,  
			
				
				
			
		
	
		
		
			
				
					
					                        else  move_ids_without_package . product_id . categ_id . property_account_income_categ_id . id ,                         ' account_id ' :  move_ids_without_package . product_id .  
			
				
				
			
		
	
		
		
			
				
					
					                        ' tax_ids ' :  [ ( 6 ,  0 ,  [ picking_id . company_id . account_purchase_tax_id . id ] ) ] ,                             property_account_income_id . id  if  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					                        move_ids_without_package . product_id .  
			
		
	
		
		
			
				
					                            property_account_income_id  
			
		
	
		
		
			
				
					                        else  move_ids_without_package . product_id . categ_id .  
			
		
	
		
		
			
				
					                            property_account_income_categ_id . id ,  
			
		
	
		
		
			
				
					                        ' tax_ids ' :  [ ( 6 ,  0 ,  [  
			
		
	
		
		
			
				
					                            picking_id . company_id . account_purchase_tax_id . id ] ) ] ,  
			
		
	
		
		
			
				
					                        ' quantity ' :  move_ids_without_package . quantity_done ,                         ' quantity ' :  move_ids_without_package . quantity_done ,  
			
		
	
		
		
			
				
					                    } )                     } )  
			
		
	
		
		
			
				
					                    invoice_line_list . append ( vals )                     invoice_line_list . append ( vals )  
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -174,11 +226,13 @@ class StockPicking(models.Model): 
			
		
	
		
		
			
				
					                        ' invoice_user_id ' :  current_user ,                         ' invoice_user_id ' :  current_user ,  
			
		
	
		
		
			
				
					                        ' narration ' :  picking_id . name ,                         ' narration ' :  picking_id . name ,  
			
		
	
		
		
			
				
					                        ' partner_id ' :  picking_id . partner_id . id ,                         ' partner_id ' :  picking_id . partner_id . id ,  
			
		
	
		
		
			
				
					
					                        ' currency_id ' :  picking_id . env . user . company_id . currency_id . id ,                         ' currency_id ' :  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                            picking_id . env . user . company_id . currency_id . id ,  
			
		
	
		
		
			
				
					                        ' journal_id ' :  int ( vendor_journal_id ) ,                         ' journal_id ' :  int ( vendor_journal_id ) ,  
			
		
	
		
		
			
				
					                        ' payment_reference ' :  picking_id . name ,                         ' payment_reference ' :  picking_id . name ,  
			
		
	
		
		
			
				
					                        ' picking_id ' :  picking_id . id ,                         ' picking_id ' :  picking_id . id ,  
			
		
	
		
		
			
				
					
					                        ' invoice_line_ids ' :  invoice_line_list                         ' invoice_line_ids ' :  invoice_line_list ,  
			
				
				
			
		
	
		
		
	
		
		
			
				
					                        ' transfer_ids ' :  self  
			
		
	
		
		
			
				
					                    } )                     } )  
			
		
	
		
		
			
				
					                    return  invoice                     return  invoice  
			
		
	
		
		
			
				
					
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -190,18 +244,134 @@ class StockPicking(models.Model): 
			
		
	
		
		
			
				
					            ' type ' :  ' ir.actions.act_window ' ,             ' type ' :  ' ir.actions.act_window ' ,  
			
		
	
		
		
			
				
					            ' view_mode ' :  ' tree,form ' ,             ' view_mode ' :  ' tree,form ' ,  
			
		
	
		
		
			
				
					            ' res_model ' :  ' account.move ' ,             ' res_model ' :  ' account.move ' ,  
			
		
	
		
		
			
				
					
					            ' domain ' :  [ ( ' invoice_origin ' ,  ' = ' ,  self . name ) ] ,             ' domain ' :  [ ( ' transfer_ids ' ,  ' in ' ,  self . id ) ] ,  
			
				
				
			
		
	
		
		
	
		
		
			
				
					            ' context ' :  { ' create ' :  False } ,             ' context ' :  { ' create ' :  False } ,  
			
		
	
		
		
			
				
					            ' target ' :  ' current '             ' target ' :  ' current '  
			
		
	
		
		
			
				
					        }         }  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					    def  action_create_multi_invoice_for_multi_transfer ( self ) :  
			
		
	
		
		
			
				
					        """ This is the function for creating customer invoice  
			
		
	
		
		
			
				
					        from  the  picking """  
			
		
	
		
		
			
				
					        picking_type  =  list ( self . picking_type_id )  
			
		
	
		
		
			
				
					        if  all ( first  ==  picking_type [ 0 ]  for  first  in  picking_type ) :  
			
		
	
		
		
			
				
					            if  self . picking_type_id . code  ==  ' outgoing ' :  
			
		
	
		
		
			
				
					                partner  =  list ( self . partner_id )  
			
		
	
		
		
			
				
					                if  all ( first  ==  partner [ 0 ]  for  first  in  partner ) :  
			
		
	
		
		
			
				
					                    partner_id  =  self . partner_id  
			
		
	
		
		
			
				
					                    invoice_line_list  =  [ ]  
			
		
	
		
		
			
				
					                    customer_journal_id  =  \ 
			
		
	
		
		
			
				
					                        self . env [ ' ir.config_parameter ' ] . sudo ( ) . \ 
			
		
	
		
		
			
				
					                            get_param ( ' stock_move_invoice.customer_journal_id ' )  \ 
			
		
	
		
		
			
				
					                        or  False  
			
		
	
		
		
			
				
					                    if  not  customer_journal_id :  
			
		
	
		
		
			
				
					                        raise  UserError (  
			
		
	
		
		
			
				
					                            _ ( " Please configure the journal from settings " ) )  
			
		
	
		
		
			
				
					                    for  picking_id  in  self :  
			
		
	
		
		
			
				
					                        for  move_ids_without_package  in  picking_id . \ 
			
		
	
		
		
			
				
					                                move_ids_without_package :  
			
		
	
		
		
			
				
					                            vals  =  ( 0 ,  0 ,  {  
			
		
	
		
		
			
				
					                                ' name ' :  
			
		
	
		
		
			
				
					                                    move_ids_without_package . description_picking  
			
		
	
		
		
			
				
					                                ,  
			
		
	
		
		
			
				
					                                ' product_id ' :  
			
		
	
		
		
			
				
					                                    move_ids_without_package . product_id . id ,  
			
		
	
		
		
			
				
					                                ' price_unit ' :  move_ids_without_package .  
			
		
	
		
		
			
				
					                                    product_id . lst_price ,  
			
		
	
		
		
			
				
					                                ' account_id ' :  move_ids_without_package .  
			
		
	
		
		
			
				
					                                    product_id . property_account_income_id . id  if  
			
		
	
		
		
			
				
					                                move_ids_without_package . product_id .  
			
		
	
		
		
			
				
					                                    property_account_income_id  
			
		
	
		
		
			
				
					                                else  move_ids_without_package .  
			
		
	
		
		
			
				
					                                    product_id . categ_id .  
			
		
	
		
		
			
				
					                                    property_account_income_categ_id . id ,  
			
		
	
		
		
			
				
					                                ' tax_ids ' :  [ ( 6 ,  0 ,  [ picking_id . company_id .  
			
		
	
		
		
			
				
					                                             account_purchase_tax_id . id ] ) ] ,  
			
		
	
		
		
			
				
					                                ' quantity ' :  
			
		
	
		
		
			
				
					                                    move_ids_without_package . quantity_done ,  
			
		
	
		
		
			
				
					                            } )  
			
		
	
		
		
			
				
					                            invoice_line_list . append ( vals )  
			
		
	
		
		
			
				
					                    invoice  =  self . env [ ' account.move ' ] . create ( {  
			
		
	
		
		
			
				
					                        ' move_type ' :  ' out_invoice ' ,  
			
		
	
		
		
			
				
					                        ' invoice_origin ' :  picking_id . name ,  
			
		
	
		
		
			
				
					                        ' invoice_user_id ' :  self . env . uid ,  
			
		
	
		
		
			
				
					                        ' narration ' :  picking_id . name ,  
			
		
	
		
		
			
				
					                        ' partner_id ' :  partner_id . id ,  
			
		
	
		
		
			
				
					                        ' currency_id ' :  
			
		
	
		
		
			
				
					                            picking_id . env . user . company_id . currency_id . id ,  
			
		
	
		
		
			
				
					                        ' journal_id ' :  int ( customer_journal_id ) ,  
			
		
	
		
		
			
				
					                        ' payment_reference ' :  picking_id . name ,  
			
		
	
		
		
			
				
					                        ' invoice_line_ids ' :  invoice_line_list ,  
			
		
	
		
		
			
				
					                        ' transfer_ids ' :  self  
			
		
	
		
		
			
				
					                    } )  
			
		
	
		
		
			
				
					                else :  
			
		
	
		
		
			
				
					                    for  picking_id  in  self :  
			
		
	
		
		
			
				
					                        picking_id . create_invoice ( )  
			
		
	
		
		
			
				
					            elif  self . picking_type_id . code  ==  ' incoming ' :  
			
		
	
		
		
			
				
					                partner  =  list ( self . partner_id )  
			
		
	
		
		
			
				
					                if  all ( first  ==  partner [ 0 ]  for  first  in  partner ) :  
			
		
	
		
		
			
				
					                    partner_id  =  self . partner_id  
			
		
	
		
		
			
				
					                    bill_line_list  =  [ ]  
			
		
	
		
		
			
				
					                    vendor_journal_id  =  \ 
			
		
	
		
		
			
				
					                        self . env [ ' ir.config_parameter ' ] . sudo ( ) . \ 
			
		
	
		
		
			
				
					                            get_param ( ' stock_move_invoice.vendor_journal_id ' )  \ 
			
		
	
		
		
			
				
					                        or  False  
			
		
	
		
		
			
				
					                    if  not  vendor_journal_id :  
			
		
	
		
		
			
				
					                        raise  UserError ( _ ( " Please configure the journal from  "  
			
		
	
		
		
			
				
					                                          " the settings. " ) )  
			
		
	
		
		
			
				
					                    for  picking_id  in  self :  
			
		
	
		
		
			
				
					                        for  move_ids_without_package  in  picking_id . \ 
			
		
	
		
		
			
				
					                                move_ids_without_package :  
			
		
	
		
		
			
				
					                            vals  =  ( 0 ,  0 ,  {  
			
		
	
		
		
			
				
					                                ' name ' :  
			
		
	
		
		
			
				
					                                    move_ids_without_package . description_picking  
			
		
	
		
		
			
				
					                                ,  
			
		
	
		
		
			
				
					                                ' product_id ' :  
			
		
	
		
		
			
				
					                                    move_ids_without_package . product_id . id ,  
			
		
	
		
		
			
				
					                                ' price_unit ' :  move_ids_without_package .  
			
		
	
		
		
			
				
					                                    product_id . lst_price ,  
			
		
	
		
		
			
				
					                                ' account_id ' :  move_ids_without_package .  
			
		
	
		
		
			
				
					                                    product_id . property_account_income_id . id  if  
			
		
	
		
		
			
				
					                                move_ids_without_package . product_id .  
			
		
	
		
		
			
				
					                                    property_account_income_id  
			
		
	
		
		
			
				
					                                else  move_ids_without_package .  
			
		
	
		
		
			
				
					                                    product_id . categ_id .  
			
		
	
		
		
			
				
					                                    property_account_income_categ_id . id ,  
			
		
	
		
		
			
				
					                                ' tax_ids ' :  [ ( 6 ,  0 ,  [ picking_id . company_id .  
			
		
	
		
		
			
				
					                                             account_purchase_tax_id . id ] ) ] ,  
			
		
	
		
		
			
				
					                                ' quantity ' :  
			
		
	
		
		
			
				
					                                    move_ids_without_package . quantity_done ,  
			
		
	
		
		
			
				
					                            } )  
			
		
	
		
		
			
				
					                            bill_line_list . append ( vals )  
			
		
	
		
		
			
				
					                    invoice  =  self . env [ ' account.move ' ] . create ( {  
			
		
	
		
		
			
				
					                        ' move_type ' :  ' in_invoice ' ,  
			
		
	
		
		
			
				
					                        ' invoice_origin ' :  picking_id . name ,  
			
		
	
		
		
			
				
					                        ' invoice_user_id ' :  self . env . uid ,  
			
		
	
		
		
			
				
					                        ' narration ' :  picking_id . name ,  
			
		
	
		
		
			
				
					                        ' partner_id ' :  partner_id . id ,  
			
		
	
		
		
			
				
					                        ' currency_id ' :  
			
		
	
		
		
			
				
					                            picking_id . env . user . company_id . currency_id . id ,  
			
		
	
		
		
			
				
					                        ' journal_id ' :  int ( vendor_journal_id ) ,  
			
		
	
		
		
			
				
					                        ' payment_reference ' :  picking_id . name ,  
			
		
	
		
		
			
				
					                        ' picking_id ' :  picking_id . id ,  
			
		
	
		
		
			
				
					                        ' invoice_line_ids ' :  bill_line_list ,  
			
		
	
		
		
			
				
					                        ' transfer_ids ' :  self  
			
		
	
		
		
			
				
					                    } )  
			
		
	
		
		
			
				
					                else :  
			
		
	
		
		
			
				
					                    for  picking_id  in  self :  
			
		
	
		
		
			
				
					                        picking_id . create_bill ( )  
			
		
	
		
		
			
				
					        else :  
			
		
	
		
		
			
				
					            raise  UserError (  
			
		
	
		
		
			
				
					                _ ( " Please select single type transfer " ) )  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					class  StockReturnInvoicePicking ( models . TransientModel ) : class  StockReturnInvoicePicking ( models . TransientModel ) :  
			
		
	
		
		
			
				
					    _inherit  =  ' stock.return.picking '     _inherit  =  ' stock.return.picking '  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					    def  _create_returns ( self ) :     def  _create_returns ( self ) :  
			
		
	
		
		
			
				
					        """ in this function the picking is marked as return """         """ in this function the picking is marked as return """  
			
		
	
		
		
			
				
					
					        new_picking ,  pick_type_id  =  super ( StockReturnInvoicePicking ,  self ) . _create_returns ( ) 
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					        new_picking ,  pick_type_id  =  \ 
			
		
	
		
		
			
				
					            super ( StockReturnInvoicePicking ,  self ) . _create_returns ( )  
			
		
	
		
		
			
				
					        picking  =  self . env [ ' stock.picking ' ] . browse ( new_picking )         picking  =  self . env [ ' stock.picking ' ] . browse ( new_picking )  
			
		
	
		
		
			
				
					        picking . write ( { ' is_return ' :  True } )         picking . write ( { ' is_return ' :  True } )  
			
		
	
		
		
			
				
					        return  new_picking ,  pick_type_id         return  new_picking ,  pick_type_id