取消列表增加采购申请明细

This commit is contained in:
mgw
2025-03-19 11:00:48 +08:00
parent 08cd1a176b
commit 5b979ffc34
5 changed files with 85 additions and 22 deletions

View File

@@ -1,2 +1,3 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from . import product_template from . import product_template
from . import purchase_request

View File

@@ -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

View 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 = '采购申请明细'

View File

@@ -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)

View File

@@ -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)