取消列表增加采购申请明细
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,11 +8,12 @@ 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
|
||||||
|
|
||||||
def copy_template(self, product_template_id):
|
def copy_template(self, product_template_id):
|
||||||
""" 复制成品模板时,复制采购申请 """
|
""" 复制成品模板时,复制采购申请 """
|
||||||
super(ProductTemplate, self).copy_template(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__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class SaleOrder(models.Model):
|
class SaleOrder(models.Model):
|
||||||
_inherit = 'sale.order'
|
_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
|
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)
|
||||||
# 将模板上的single_manufacturing属性复制到成品上
|
# 将模板上的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)
|
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()
|
||||||
@@ -115,10 +122,11 @@ class SaleOrder(models.Model):
|
|||||||
outsource_id = self.env.ref('sf_dlm.product_embryo_sf_outsource').sudo()
|
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,
|
outsource_embryo = self.env['product.template'].sudo().no_bom_product_create(outsource_id,
|
||||||
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
|
||||||
@@ -138,10 +146,11 @@ class SaleOrder(models.Model):
|
|||||||
elif line.product_id.materials_type_id.gain_way == '采购':
|
elif line.product_id.materials_type_id.gain_way == '采购':
|
||||||
purchase_id = self.env.ref('sf_dlm.product_embryo_sf_purchase').sudo()
|
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,
|
purchase_embryo = self.env['product.template'].sudo().no_bom_product_create(purchase_id,
|
||||||
item,
|
item,
|
||||||
order_id,
|
order_id,
|
||||||
'purchase', product_seria,
|
'purchase',
|
||||||
product)
|
product_seria,
|
||||||
|
product)
|
||||||
if purchase_embryo == -3:
|
if purchase_embryo == -3:
|
||||||
raise UserError('该订单模型的材料型号暂未设置获取方式和供应商,请先配置再进行分配')
|
raise UserError('该订单模型的材料型号暂未设置获取方式和供应商,请先配置再进行分配')
|
||||||
else:
|
else:
|
||||||
@@ -151,15 +160,15 @@ class SaleOrder(models.Model):
|
|||||||
product_bom_purchase.with_user(self.env.ref("base.user_admin")).bom_create_line_has(
|
product_bom_purchase.with_user(self.env.ref("base.user_admin")).bom_create_line_has(
|
||||||
purchase_embryo)
|
purchase_embryo)
|
||||||
return super(SaleOrder, self).action_confirm()
|
return super(SaleOrder, self).action_confirm()
|
||||||
|
|
||||||
def action_show_cancel_wizard(self):
|
def action_show_cancel_wizard(self):
|
||||||
wizard = self.env['sf.sale.order.cancel.wizard'].create({
|
wizard = self.env['sf.sale.order.cancel.wizard'].create({
|
||||||
'order_id': self.id,
|
'order_id': self.id,
|
||||||
})
|
})
|
||||||
|
|
||||||
# 创建关联单据行
|
# 创建关联单据行
|
||||||
self.env['sf.sale.order.cancel.line'].create_from_order(wizard.id, self)
|
self.env['sf.sale.order.cancel.line'].create_from_order(wizard.id, self)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'name': '取消销售订单',
|
'name': '取消销售订单',
|
||||||
'type': 'ir.actions.act_window',
|
'type': 'ir.actions.act_window',
|
||||||
@@ -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