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.
		
		
		
		
		
			
		
			
				
					
					
						
							106 lines
						
					
					
						
							5.5 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							106 lines
						
					
					
						
							5.5 KiB
						
					
					
				
								# -*- coding: utf-8 -*-
							 | 
						|
								##############################################################################
							 | 
						|
								#
							 | 
						|
								#    Cybrosys Technologies Pvt. Ltd.
							 | 
						|
								#
							 | 
						|
								#    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>
							 | 
						|
								#    Author: Aysha Shalin (odoo@cybrosys.com)
							 | 
						|
								#
							 | 
						|
								#    you can modify it under the terms of the GNU AFFERO
							 | 
						|
								#    GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
							 | 
						|
								#
							 | 
						|
								#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
							 | 
						|
								#    (AGPL v3) along with this program.
							 | 
						|
								#    If not, see <http://www.gnu.org/licenses/>.
							 | 
						|
								#
							 | 
						|
								##############################################################################
							 | 
						|
								from odoo import models
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								class MrpProduction(models.Model):
							 | 
						|
								    """ Extends MRP Production model for creating manufacturing orders from POS
							 | 
						|
								    orders."""
							 | 
						|
								    _inherit = 'mrp.production'
							 | 
						|
								
							 | 
						|
								    def create_mrp_from_pos(self, products):
							 | 
						|
								        """ Function for creating manufacturing orders."""
							 | 
						|
								        product_ids = []
							 | 
						|
								        if products:
							 | 
						|
								            for product in products:
							 | 
						|
								                if self.env['product.product'].browse(
							 | 
						|
								                        int(product['id'])).to_make_mrp:
							 | 
						|
								                    flag = 1
							 | 
						|
								                    if product_ids:
							 | 
						|
								                        for product_id in product_ids:
							 | 
						|
								                            if product_id['id'] == product['id']:
							 | 
						|
								                                product_id['qty'] += product['qty']
							 | 
						|
								                                flag = 0
							 | 
						|
								                    if flag:
							 | 
						|
								                        product_ids.append(product)
							 | 
						|
								            for prod in product_ids:
							 | 
						|
								                if prod['qty'] > 0:
							 | 
						|
								                    bom_count = self.env['mrp.bom'].search([
							 | 
						|
								                        ('product_tmpl_id', '=', prod['product_tmpl_id'])])
							 | 
						|
								                    if bom_count:
							 | 
						|
								                        bom_temp = self.env['mrp.bom'].search([
							 | 
						|
								                            ('product_tmpl_id', '=', prod['product_tmpl_id']),
							 | 
						|
								                            ('product_id', '=', False)])
							 | 
						|
								                        bom_prod = self.env['mrp.bom'].search([
							 | 
						|
								                            ('product_id', '=', prod['id'])])
							 | 
						|
								                        if bom_prod:
							 | 
						|
								                            bom = bom_prod[0]
							 | 
						|
								                        elif bom_temp:
							 | 
						|
								                            bom = bom_temp[0]
							 | 
						|
								                        else:
							 | 
						|
								                            bom = []
							 | 
						|
								                        if bom:
							 | 
						|
								                            vals = {
							 | 
						|
								                                'origin': 'POS-' + prod['pos_reference'],
							 | 
						|
								                                'state': 'confirmed',
							 | 
						|
								                                'product_id': prod['id'],
							 | 
						|
								                                'product_tmpl_id': prod['product_tmpl_id'],
							 | 
						|
								                                'product_uom_id': prod['uom_id'],
							 | 
						|
								                                'product_qty': prod['qty'],
							 | 
						|
								                                'bom_id': bom.id,
							 | 
						|
								                            }
							 | 
						|
								                            mrp_order = self.sudo().create(vals)
							 | 
						|
								                            list_value = []
							 | 
						|
								                            for bom_line in mrp_order.bom_id.bom_line_ids:
							 | 
						|
								                                list_value.append((0, 0, {
							 | 
						|
								                                    'raw_material_production_id': mrp_order.id,
							 | 
						|
								                                    'name': mrp_order.name,
							 | 
						|
								                                    'product_id': bom_line.product_id.id,
							 | 
						|
								                                    'product_uom': bom_line.product_uom_id.id,
							 | 
						|
								                                    'product_uom_qty': (bom_line.product_qty * mrp_order.product_qty)/self.env['mrp.bom'].search([("product_tmpl_id", "=", prod['product_tmpl_id'])]).product_qty,
							 | 
						|
								                                    'picking_type_id': mrp_order.picking_type_id.id,
							 | 
						|
								                                    'location_id': mrp_order.location_src_id.id,
							 | 
						|
								                                    'location_dest_id': bom_line.product_id.with_company(self.company_id.id).property_stock_production.id,
							 | 
						|
								                                    'company_id': mrp_order.company_id.id,
							 | 
						|
								                                }))
							 | 
						|
								                            finished_vals = {
							 | 
						|
								                                'product_id': prod['id'],
							 | 
						|
								                                'product_uom_qty': prod['qty'],
							 | 
						|
								                                'product_uom': prod['uom_id'],
							 | 
						|
								                                'name': mrp_order.name,
							 | 
						|
								                                'date_deadline': mrp_order.date_deadline,
							 | 
						|
								                                'picking_type_id': mrp_order.picking_type_id.id,
							 | 
						|
								                                'location_id': mrp_order.location_src_id.id,
							 | 
						|
								                                'location_dest_id': mrp_order.location_dest_id.id,
							 | 
						|
								                                'company_id': mrp_order.company_id.id,
							 | 
						|
								                                'production_id': mrp_order.id,
							 | 
						|
								                                'warehouse_id': mrp_order.location_dest_id.warehouse_id.id,
							 | 
						|
								                                'origin': mrp_order.name,
							 | 
						|
								                                'group_id': mrp_order.procurement_group_id.id,
							 | 
						|
								                                'propagate_cancel': mrp_order.propagate_cancel,
							 | 
						|
								                            }
							 | 
						|
								                            mrp_order.update({
							 | 
						|
								                                'move_raw_ids': list_value,
							 | 
						|
								                                'move_finished_ids': [
							 | 
						|
								                                    (0, 0, finished_vals)]
							 | 
						|
								                            })
							 | 
						|
								        return True
							 | 
						|
								
							 |