143 lines
7.0 KiB
Python
143 lines
7.0 KiB
Python
# -*- 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_raw_material_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 |