Accept Merge Request #1927: (feature/制造功能优化 -> develop)
Merge Request: 取消列表增加采购申请明细 Created By: @马广威 Accepted By: @马广威 URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/1927?initial=true
This commit is contained in:
@@ -1,2 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from . import product_template
|
from . import product_template
|
||||||
|
from . import purchase_request
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
from odoo import models, fields
|
from odoo import models, fields
|
||||||
|
|
||||||
|
|
||||||
class ProductTemplate(models.Model):
|
class ProductTemplate(models.Model):
|
||||||
_inherit = 'product.template'
|
_inherit = 'product.template'
|
||||||
|
|
||||||
@@ -7,7 +8,8 @@ class ProductTemplate(models.Model):
|
|||||||
|
|
||||||
def no_bom_product_create(self, product_id, item, order_id, route_type, i, finish_product):
|
def no_bom_product_create(self, product_id, item, order_id, route_type, i, finish_product):
|
||||||
""" 创建坯料时,复制采购申请 """
|
""" 创建坯料时,复制采购申请 """
|
||||||
template_id = super(ProductTemplate, self).no_bom_product_create(product_id, item, order_id, route_type, i, finish_product)
|
template_id = super(ProductTemplate, self).no_bom_product_create(product_id, item, order_id, route_type, i,
|
||||||
|
finish_product)
|
||||||
template_id.purchase_request = product_id.purchase_request
|
template_id.purchase_request = product_id.purchase_request
|
||||||
return template_id
|
return template_id
|
||||||
|
|
||||||
|
|||||||
14
jikimo_purchase_request/models/purchase_request.py
Normal file
14
jikimo_purchase_request/models/purchase_request.py
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
from odoo import models, fields
|
||||||
|
|
||||||
|
|
||||||
|
class PurchaseRequest(models.Model):
|
||||||
|
_inherit = 'purchase.request'
|
||||||
|
_description = '采购申请'
|
||||||
|
|
||||||
|
# 为state添加取消状态
|
||||||
|
state = fields.Selection(selection_add=[('cancel', '已取消')])
|
||||||
|
|
||||||
|
|
||||||
|
class PurchaseRequestLine(models.Model):
|
||||||
|
_inherit = 'purchase.request.line'
|
||||||
|
_description = '采购申请明细'
|
||||||
@@ -5,6 +5,7 @@ from odoo.exceptions import UserError
|
|||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class SaleOrder(models.Model):
|
class SaleOrder(models.Model):
|
||||||
_inherit = 'sale.order'
|
_inherit = 'sale.order'
|
||||||
|
|
||||||
@@ -39,12 +40,15 @@ class SaleOrder(models.Model):
|
|||||||
product_template_id = self.env.ref('sf_dlm.product_template_sf').sudo().product_tmpl_id
|
product_template_id = self.env.ref('sf_dlm.product_template_sf').sudo().product_tmpl_id
|
||||||
elif line.supply_method == 'outsourcing':
|
elif line.supply_method == 'outsourcing':
|
||||||
bom_type = 'subcontract'
|
bom_type = 'subcontract'
|
||||||
product_template_id = self.env.ref('jikimo_sale_multiple_supply_methods.product_template_outsourcing').sudo()
|
product_template_id = self.env.ref(
|
||||||
|
'jikimo_sale_multiple_supply_methods.product_template_outsourcing').sudo()
|
||||||
elif line.supply_method == 'purchase':
|
elif line.supply_method == 'purchase':
|
||||||
product_template_id = self.env.ref('jikimo_sale_multiple_supply_methods.product_template_purchase').sudo()
|
product_template_id = self.env.ref(
|
||||||
|
'jikimo_sale_multiple_supply_methods.product_template_purchase').sudo()
|
||||||
elif line.supply_method == 'manual':
|
elif line.supply_method == 'manual':
|
||||||
bom_type = 'normal'
|
bom_type = 'normal'
|
||||||
product_template_id = self.env.ref('jikimo_sale_multiple_supply_methods.product_template_manual_processing').sudo()
|
product_template_id = self.env.ref(
|
||||||
|
'jikimo_sale_multiple_supply_methods.product_template_manual_processing').sudo()
|
||||||
|
|
||||||
# 复制成品模板上的属性
|
# 复制成品模板上的属性
|
||||||
line.product_id.product_tmpl_id.copy_template(product_template_id)
|
line.product_id.product_tmpl_id.copy_template(product_template_id)
|
||||||
@@ -70,13 +74,15 @@ class SaleOrder(models.Model):
|
|||||||
bom_data = self.env['mrp.bom'].with_user(self.env.ref("base.user_admin")).get_bom(product)
|
bom_data = self.env['mrp.bom'].with_user(self.env.ref("base.user_admin")).get_bom(product)
|
||||||
_logger.info('bom_data:%s' % bom_data)
|
_logger.info('bom_data:%s' % bom_data)
|
||||||
if bom_data:
|
if bom_data:
|
||||||
bom = self.env['mrp.bom'].with_user(self.env.ref("base.user_admin")).bom_create(product, 'normal', False)
|
bom = self.env['mrp.bom'].with_user(self.env.ref("base.user_admin")).bom_create(product, 'normal',
|
||||||
|
False)
|
||||||
bom.with_user(self.env.ref("base.user_admin")).bom_create_line_has(bom_data)
|
bom.with_user(self.env.ref("base.user_admin")).bom_create_line_has(bom_data)
|
||||||
else:
|
else:
|
||||||
# 当成品上带有客供料选项时,生成坯料时选择“客供料”路线
|
# 当成品上带有客供料选项时,生成坯料时选择“客供料”路线
|
||||||
if line.embryo_redundancy_id:
|
if line.embryo_redundancy_id:
|
||||||
# 将成品模板的内容复制到成品上
|
# 将成品模板的内容复制到成品上
|
||||||
customer_provided_embryo = self.env.ref('jikimo_sale_multiple_supply_methods.product_template_embryo_customer_provided').sudo()
|
customer_provided_embryo = self.env.ref(
|
||||||
|
'jikimo_sale_multiple_supply_methods.product_template_embryo_customer_provided').sudo()
|
||||||
# 创建坯料,客供料的批量不需要创建bom
|
# 创建坯料,客供料的批量不需要创建bom
|
||||||
material_customer_provided_embryo = self.env['product.template'].sudo().no_bom_product_create(
|
material_customer_provided_embryo = self.env['product.template'].sudo().no_bom_product_create(
|
||||||
customer_provided_embryo.with_context(active_test=False).product_variant_id,
|
customer_provided_embryo.with_context(active_test=False).product_variant_id,
|
||||||
@@ -86,7 +92,8 @@ class SaleOrder(models.Model):
|
|||||||
product_bom_material_customer_provided = self.env['mrp.bom'].with_user(
|
product_bom_material_customer_provided = self.env['mrp.bom'].with_user(
|
||||||
self.env.ref("base.user_admin")).bom_create(
|
self.env.ref("base.user_admin")).bom_create(
|
||||||
product, bom_type, 'product')
|
product, bom_type, 'product')
|
||||||
product_bom_material_customer_provided.with_user(self.env.ref("base.user_admin")).bom_create_line_has(
|
product_bom_material_customer_provided.with_user(
|
||||||
|
self.env.ref("base.user_admin")).bom_create_line_has(
|
||||||
material_customer_provided_embryo)
|
material_customer_provided_embryo)
|
||||||
elif line.product_id.materials_type_id.gain_way == '自加工':
|
elif line.product_id.materials_type_id.gain_way == '自加工':
|
||||||
self_machining_id = self.env.ref('sf_dlm.product_embryo_sf_self_machining').sudo()
|
self_machining_id = self.env.ref('sf_dlm.product_embryo_sf_self_machining').sudo()
|
||||||
@@ -118,7 +125,8 @@ class SaleOrder(models.Model):
|
|||||||
item,
|
item,
|
||||||
order_id,
|
order_id,
|
||||||
'subcontract',
|
'subcontract',
|
||||||
product_seria, product)
|
product_seria,
|
||||||
|
product)
|
||||||
if outsource_embryo == -3:
|
if outsource_embryo == -3:
|
||||||
raise UserError('该订单模型的材料型号暂未设置获取方式和供应商,请先配置再进行分配')
|
raise UserError('该订单模型的材料型号暂未设置获取方式和供应商,请先配置再进行分配')
|
||||||
# 创建坯料的bom
|
# 创建坯料的bom
|
||||||
@@ -140,7 +148,8 @@ class SaleOrder(models.Model):
|
|||||||
purchase_embryo = self.env['product.template'].sudo().no_bom_product_create(purchase_id,
|
purchase_embryo = self.env['product.template'].sudo().no_bom_product_create(purchase_id,
|
||||||
item,
|
item,
|
||||||
order_id,
|
order_id,
|
||||||
'purchase', product_seria,
|
'purchase',
|
||||||
|
product_seria,
|
||||||
product)
|
product)
|
||||||
if purchase_embryo == -3:
|
if purchase_embryo == -3:
|
||||||
raise UserError('该订单模型的材料型号暂未设置获取方式和供应商,请先配置再进行分配')
|
raise UserError('该订单模型的材料型号暂未设置获取方式和供应商,请先配置再进行分配')
|
||||||
@@ -169,6 +178,7 @@ class SaleOrder(models.Model):
|
|||||||
'res_id': wizard.id,
|
'res_id': wizard.id,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class SaleOrderLine(models.Model):
|
class SaleOrderLine(models.Model):
|
||||||
_inherit = 'sale.order.line'
|
_inherit = 'sale.order.line'
|
||||||
part_number = fields.Char('零件图号', related='product_id.part_number', readonly=True)
|
part_number = fields.Char('零件图号', related='product_id.part_number', readonly=True)
|
||||||
|
|||||||
@@ -72,6 +72,20 @@ class SFSaleOrderCancelWizard(models.TransientModel):
|
|||||||
if purchase_orders:
|
if purchase_orders:
|
||||||
purchase_orders.write({'state': 'cancel'})
|
purchase_orders.write({'state': 'cancel'})
|
||||||
|
|
||||||
|
# 取消销售订单关联的采购申请明细
|
||||||
|
purchase_request_lines = self.env['purchase.request.line'].search([
|
||||||
|
('origin', '=', self.order_id.name)
|
||||||
|
])
|
||||||
|
if purchase_request_lines:
|
||||||
|
purchase_request_lines.write({'state': 'cancel'})
|
||||||
|
|
||||||
|
# 取消销售订单关联的采购申请
|
||||||
|
purchase_requests = self.env['purchase.request'].search([
|
||||||
|
('origin', '=', self.order_id.name)
|
||||||
|
])
|
||||||
|
if purchase_requests:
|
||||||
|
purchase_requests.write({'state': 'cancel'})
|
||||||
|
|
||||||
# 取消销售订单
|
# 取消销售订单
|
||||||
result = self.order_id.action_cancel()
|
result = self.order_id.action_cancel()
|
||||||
|
|
||||||
@@ -444,6 +458,28 @@ class SFSaleOrderCancelLine(models.TransientModel):
|
|||||||
}
|
}
|
||||||
lines.append(self.create(vals))
|
lines.append(self.create(vals))
|
||||||
|
|
||||||
|
# 检查采购申请明细
|
||||||
|
purchase_request_lines = self.env['purchase.request.line'].search([
|
||||||
|
('origin', '=', order.name)
|
||||||
|
])
|
||||||
|
if purchase_request_lines:
|
||||||
|
prl_count = 0
|
||||||
|
for purchase_request_line in purchase_request_lines:
|
||||||
|
prl_count += 1
|
||||||
|
vals = {
|
||||||
|
'wizard_id': wizard_id,
|
||||||
|
'sequence': sequence,
|
||||||
|
'category': module_name_dict[purchase_request_line._original_module],
|
||||||
|
'doc_name': purchase_request_line._description,
|
||||||
|
'doc_number': purchase_request_line.name,
|
||||||
|
'line_number': prl_count,
|
||||||
|
'product_name': f'[{purchase_request_line.product_id.default_code}] {purchase_request_line.product_id.name}',
|
||||||
|
'quantity': purchase_request_line.product_qty,
|
||||||
|
'doc_state': map_dict.get(purchase_request_line.state, purchase_request_line.state),
|
||||||
|
'cancel_reason': '已有异动' if purchase_request_line.state not in ['draft', 'cancel'] else ''
|
||||||
|
}
|
||||||
|
lines.append(self.create(vals))
|
||||||
|
|
||||||
# 检查制造订单
|
# 检查制造订单
|
||||||
manufacturing_orders = self.env['mrp.production'].search([
|
manufacturing_orders = self.env['mrp.production'].search([
|
||||||
('origin', '=', order.name)
|
('origin', '=', order.name)
|
||||||
|
|||||||
Reference in New Issue
Block a user