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

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 -*-
from . import product_template
from . import product_template
from . import purchase_request

View File

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

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

View File

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