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 -*-
|
||||
from . import product_template
|
||||
from . import product_template
|
||||
from . import purchase_request
|
||||
@@ -1,5 +1,6 @@
|
||||
from odoo import models, fields
|
||||
|
||||
|
||||
class ProductTemplate(models.Model):
|
||||
_inherit = 'product.template'
|
||||
|
||||
@@ -7,11 +8,12 @@ class ProductTemplate(models.Model):
|
||||
|
||||
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
|
||||
return template_id
|
||||
|
||||
def copy_template(self, product_template_id):
|
||||
""" 复制成品模板时,复制采购申请 """
|
||||
super(ProductTemplate, self).copy_template(product_template_id)
|
||||
self.purchase_request = product_template_id.purchase_request
|
||||
self.purchase_request = product_template_id.purchase_request
|
||||
|
||||
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__)
|
||||
|
||||
|
||||
class SaleOrder(models.Model):
|
||||
_inherit = 'sale.order'
|
||||
|
||||
@@ -39,13 +40,16 @@ class SaleOrder(models.Model):
|
||||
product_template_id = self.env.ref('sf_dlm.product_template_sf').sudo().product_tmpl_id
|
||||
elif line.supply_method == 'outsourcing':
|
||||
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':
|
||||
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':
|
||||
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)
|
||||
# 将模板上的single_manufacturing属性复制到成品上
|
||||
@@ -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)
|
||||
_logger.info('bom_data:%s' % 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)
|
||||
else:
|
||||
# 当成品上带有客供料选项时,生成坯料时选择“客供料”路线
|
||||
# 当成品上带有客供料选项时,生成坯料时选择“客供料”路线
|
||||
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
|
||||
material_customer_provided_embryo = self.env['product.template'].sudo().no_bom_product_create(
|
||||
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(
|
||||
self.env.ref("base.user_admin")).bom_create(
|
||||
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)
|
||||
elif line.product_id.materials_type_id.gain_way == '自加工':
|
||||
self_machining_id = self.env.ref('sf_dlm.product_embryo_sf_self_machining').sudo()
|
||||
@@ -115,10 +122,11 @@ class SaleOrder(models.Model):
|
||||
outsource_id = self.env.ref('sf_dlm.product_embryo_sf_outsource').sudo()
|
||||
# 创建坯料
|
||||
outsource_embryo = self.env['product.template'].sudo().no_bom_product_create(outsource_id,
|
||||
item,
|
||||
order_id,
|
||||
'subcontract',
|
||||
product_seria, product)
|
||||
item,
|
||||
order_id,
|
||||
'subcontract',
|
||||
product_seria,
|
||||
product)
|
||||
if outsource_embryo == -3:
|
||||
raise UserError('该订单模型的材料型号暂未设置获取方式和供应商,请先配置再进行分配')
|
||||
# 创建坯料的bom
|
||||
@@ -138,10 +146,11 @@ class SaleOrder(models.Model):
|
||||
elif line.product_id.materials_type_id.gain_way == '采购':
|
||||
purchase_id = self.env.ref('sf_dlm.product_embryo_sf_purchase').sudo()
|
||||
purchase_embryo = self.env['product.template'].sudo().no_bom_product_create(purchase_id,
|
||||
item,
|
||||
order_id,
|
||||
'purchase', product_seria,
|
||||
product)
|
||||
item,
|
||||
order_id,
|
||||
'purchase',
|
||||
product_seria,
|
||||
product)
|
||||
if purchase_embryo == -3:
|
||||
raise UserError('该订单模型的材料型号暂未设置获取方式和供应商,请先配置再进行分配')
|
||||
else:
|
||||
@@ -151,15 +160,15 @@ class SaleOrder(models.Model):
|
||||
product_bom_purchase.with_user(self.env.ref("base.user_admin")).bom_create_line_has(
|
||||
purchase_embryo)
|
||||
return super(SaleOrder, self).action_confirm()
|
||||
|
||||
|
||||
def action_show_cancel_wizard(self):
|
||||
wizard = self.env['sf.sale.order.cancel.wizard'].create({
|
||||
'order_id': self.id,
|
||||
})
|
||||
|
||||
|
||||
# 创建关联单据行
|
||||
self.env['sf.sale.order.cancel.line'].create_from_order(wizard.id, self)
|
||||
|
||||
|
||||
return {
|
||||
'name': '取消销售订单',
|
||||
'type': 'ir.actions.act_window',
|
||||
@@ -169,6 +178,7 @@ class SaleOrder(models.Model):
|
||||
'res_id': wizard.id,
|
||||
}
|
||||
|
||||
|
||||
class SaleOrderLine(models.Model):
|
||||
_inherit = 'sale.order.line'
|
||||
part_number = fields.Char('零件图号', related='product_id.part_number', readonly=True)
|
||||
|
||||
@@ -72,6 +72,20 @@ class SFSaleOrderCancelWizard(models.TransientModel):
|
||||
if purchase_orders:
|
||||
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()
|
||||
|
||||
@@ -444,6 +458,28 @@ class SFSaleOrderCancelLine(models.TransientModel):
|
||||
}
|
||||
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([
|
||||
('origin', '=', order.name)
|
||||
|
||||
Reference in New Issue
Block a user