You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							73 lines
						
					
					
						
							3.4 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							73 lines
						
					
					
						
							3.4 KiB
						
					
					
				| # -*- coding: utf-8 -*- | |
| ############################################################################# | |
| # | |
| #    Cybrosys Technologies Pvt. Ltd. | |
| # | |
| #    Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |
| #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | |
| # | |
| #    You can modify it under the terms of the GNU LESSER | |
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |
| # | |
| #    This program is distributed in the hope that it will be useful, | |
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |
| # | |
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |
| #    (LGPL v3) along with this program. | |
| #    If not, see <http://www.gnu.org/licenses/>. | |
| # | |
| ############################################################################# | |
| 
 | |
| from odoo import api, fields, models | |
| from odoo.tools import float_is_zero, float_compare | |
| from itertools import groupby | |
| 
 | |
| 
 | |
| class StockPicking(models.Model): | |
|     _inherit = 'stock.picking' | |
| 
 | |
|     def _create_move_from_pos_order_lines(self, lines): | |
|         self.ensure_one() | |
|         lines_by_product = groupby(sorted(lines, key=lambda l: l.product_id.id), key=lambda l: l.product_id.id) | |
|         move_vals = [] | |
|         for dummy, olines in lines_by_product: | |
|             order_lines = self.env['pos.order.line'].concat(*olines) | |
|             move_vals.append(self._prepare_stock_move_vals(order_lines[0], order_lines)) | |
|         moves = self.env['stock.move'].create(move_vals) | |
|         confirmed_moves = moves._action_confirm() | |
|         for move in confirmed_moves: | |
|             if order_lines[0].product_id.is_bom: | |
|                 products = self.env['pos.product.bom'].search( | |
|                     [('product_id.id', '=', | |
|                       order_lines[0].product_id.product_tmpl_id.id)]) | |
|                 bom_components = products.bom_line_ids | |
| 
 | |
|                 bom_qty = products.quantity | |
| 
 | |
|                 for rec in bom_components: | |
|                     rec_required_quantity = rec.quantity / bom_qty | |
|                     bom = rec.product_id.id | |
|                     pos_bom_move = self.env['stock.move'].create( | |
|                         { | |
|                             'name': order_lines[0].name, | |
|                             'date': self.create_date, | |
|                             'product_uom': rec.product_uom_id.id, | |
|                             'picking_id': self.id, | |
|                             'picking_type_id': self.picking_type_id.id, | |
|                             'product_id': bom, | |
|                             # 'product_uom_qty': abs(sum(order_lines.mapped('qty'))) * rec.quantity, | |
|                             'product_uom_qty': abs(sum(order_lines.mapped( | |
|                                 'qty'))) * rec_required_quantity, | |
|                             'state': 'done', | |
|                             'warehouse_id': self.location_dest_id.warehouse_id.id, | |
|                             'location_id': self.location_id.id, | |
|                             'location_dest_id': self.location_dest_id.id, | |
|                             'company_id': self.company_id.id, | |
|                         } | |
|                     ) | |
|                     print('kkkkk', pos_bom_move) | |
|                     pos_bom_move.quantity_done = pos_bom_move.product_uom_qty | |
|             confirmed_moves._add_mls_related_to_order(lines, | |
|                                                       are_qties_done=True) |