# -*- coding: utf-8 -*- from . import models from . import controllers from odoo import api, SUPERUSER_ID def _data_install(cr, registry): env = api.Environment(cr, SUPERUSER_ID, {}) # 获取所有需要设置的产品模板 env.ref('jikimo_sale_multiple_supply_methods.product_template_purchase').product_variant_id.write({'active': False, 'is_bfm': True}) env.ref('jikimo_sale_multiple_supply_methods.product_template_manual_processing').product_variant_id.write({'active': False, 'single_manufacturing': True, 'is_bfm': True}) env.ref('jikimo_sale_multiple_supply_methods.product_template_default').product_variant_id.write({'active': False, 'is_bfm': True}) env.ref('jikimo_sale_multiple_supply_methods.product_template_embryo_customer_provided').product_variant_id.write({'active': False}) env.ref('jikimo_sale_multiple_supply_methods.product_template_outsourcing').product_variant_id.write({'active': False, 'is_bfm': True}) env.ref('sf_dlm.product_embryo_sf_self_machining').product_tmpl_id.write({'categ_type': '坯料'}) env.ref('sf_dlm.product_template_sf').product_tmpl_id.write({'categ_type': '成品'}) env.ref('sf_dlm.product_embryo_sf_outsource').product_tmpl_id.write({'categ_type': '坯料'}) env.ref('sf_dlm.product_embryo_sf_purchase').product_tmpl_id.write({'categ_type': '坯料'}) # 为三步制造增加规则 warehouse = env['stock.warehouse'].search([('company_id', '=', env.company.id)], limit=1) product_route_id = warehouse.pbm_route_id # 创建规则:原料存货区 -> 制造前, 坯料存货区 -> 制造前, 制造后 -> 坯料存货区, 制造后 -> 成品存货区 raw_material_location_id = env['stock.location'].search([('name', '=', '坯料存货区')], limit=1) picking_type_production = warehouse.pbm_type_id picking_type_stock = warehouse.sam_type_id material_location_id = env['stock.location'].search([('name', '=', '原料存货区')], limit=1) # 为mto增加规则 mto_route_id = env.ref('stock.route_warehouse0_mto') # 创建规则:原料存货区 -> 外包位置, 坯料存货区 -> 外包位置 subcontracting_location_id = env.company.subcontracting_location_id picking_type_subcontracting = warehouse.subcontracting_resupply_type_id # 为补给外包商增加规则 resupply_route_id = warehouse.subcontracting_route_id rules_data = [ { 'name': 'WH: 原料存货区 → 制造前', 'location_src_id': material_location_id.id, 'location_dest_id': warehouse.pbm_loc_id.id, 'route_id': product_route_id.id, 'picking_type_id': picking_type_production.id, 'action': 'pull', 'sequence': 20, 'warehouse_id': warehouse.id, 'procure_method': 'mts_else_mto', }, { 'name': 'WH: 坯料存货区 → 制造前', 'location_src_id': raw_material_location_id.id, 'location_dest_id': warehouse.pbm_loc_id.id, 'route_id': product_route_id.id, 'picking_type_id': picking_type_production.id, 'action': 'pull', 'sequence': 21, 'warehouse_id': warehouse.id, 'procure_method': 'mts_else_mto', }, { 'name': 'WH: 制造后 → 坯料存货区', 'location_src_id': warehouse.sam_loc_id.id, 'location_dest_id': raw_material_location_id.id, 'route_id': product_route_id.id, 'picking_type_id': picking_type_stock.id, 'action': 'push', 'sequence': 23, }, { 'name': 'WH: 制造后 → 成品存货区', 'location_src_id': warehouse.sam_loc_id.id, 'location_dest_id': env['stock.location'].search([('name', '=', '成品存货区')], limit=1).id, 'route_id': product_route_id.id, 'picking_type_id': picking_type_stock.id, 'action': 'push', 'sequence': 24, }, { 'name': 'WH: 原料存货区 → 外包位置 (MTO)', 'location_src_id': material_location_id.id, 'location_dest_id': subcontracting_location_id.id, 'route_id': mto_route_id.id, 'picking_type_id': picking_type_subcontracting.id, 'action': 'pull', 'sequence': 24, 'warehouse_id': warehouse.id, 'procure_method': 'mts_else_mto', }, { 'name': 'WH: 坯料存货区 → 外包位置 (MTO)', 'location_src_id': raw_material_location_id.id, 'location_dest_id': subcontracting_location_id.id, 'route_id': mto_route_id.id, 'picking_type_id': picking_type_subcontracting.id, 'action': 'pull', 'sequence': 25, 'warehouse_id': warehouse.id, 'procure_method': 'mts_else_mto', }, { 'name': 'WH: 坯料存货区 → 外包位置', 'location_src_id': raw_material_location_id.id, 'location_dest_id': subcontracting_location_id.id, 'route_id': resupply_route_id.id, 'picking_type_id': picking_type_subcontracting.id, 'action': 'pull', 'sequence': 26, 'warehouse_id': warehouse.id, 'procure_method': 'make_to_stock', } ] # 遍历每个规则数据,执行创建或更新操作 for rule_data in rules_data: _create_or_update_stock_rule(env, rule_data) def _create_or_update_stock_rule(env, rule_data): # 尝试查找现有的 stock.rule existing_rule = env['stock.rule'].search([ ('name', '=', rule_data['name']), ('route_id', '=', rule_data.get('route_id')) ], limit=1) if existing_rule: # 如果存在,更新现有记录 existing_rule.write(rule_data) else: # 如果不存在,创建新记录 env['stock.rule'].create(rule_data) def _data_uninstall(cr, registry): env = api.Environment(cr, SUPERUSER_ID, {}) warehouse = env['stock.warehouse'].search([('company_id', '=', env.company.id)], limit=1) product_route_id = warehouse.pbm_route_id resupply_route_id = warehouse.subcontracting_route_id mto_route_id = env.ref('stock.route_warehouse0_mto') # Fail unlink means that the route is used somewhere (e.g. route_id on stock.rule). In this case # we don't try to do anything. try: with env.cr.savepoint(): env['stock.rule'].search([('name', 'in', ('WH: 原料存货区 → 制造前', 'WH: 坯料存货区 → 制造前', 'WH: 制造后 → 坯料存货区', 'WH: 制造后 → 成品存货区')), ('route_id', '=', product_route_id.id)]).unlink() env['stock.rule'].search([('name', 'in', ('WH: 原料存货区 → 外包位置 (MTO)', 'WH: 坯料存货区 → 外包位置 (MTO)')), ('route_id', '=', mto_route_id.id)]).unlink() env['stock.rule'].search([('name', '=', 'WH: 坯料存货区 → 外包位置'), ('route_id', '=', resupply_route_id.id)]).unlink() except: pass