diff --git a/sf_demand_plan/models/sale_order.py b/sf_demand_plan/models/sale_order.py
index 72e37aa0..fe8966a6 100644
--- a/sf_demand_plan/models/sale_order.py
+++ b/sf_demand_plan/models/sale_order.py
@@ -40,7 +40,8 @@ class ReSaleOrder(models.Model):
'sale_order_line_id': ret.id,
}
demand_plan_info = self.env['sf.demand.plan'].sudo().create(vals)
- vals.update({'demand_plan_id': demand_plan_info.id, 'plan_uom_qty': ret.product_uom_qty})
+ vals.update({'demand_plan_id': demand_plan_info.id, 'plan_uom_qty': ret.product_uom_qty,
+ 'new_supply_method': 'custom_made', 'custom_made_type': 'manual'})
demand_plan = self.env['sf.production.demand.plan'].sudo().create(vals)
demand_plan_info.write({'line_ids': demand_plan.ids})
if demand_plan.product_id.machining_drawings_name:
diff --git a/sf_demand_plan/models/sf_demand_plan.py b/sf_demand_plan/models/sf_demand_plan.py
index 9ca91077..1a41c3ec 100644
--- a/sf_demand_plan/models/sf_demand_plan.py
+++ b/sf_demand_plan/models/sf_demand_plan.py
@@ -9,11 +9,6 @@ class SfDemandPlan(models.Model):
_name = 'sf.demand.plan'
_description = 'sf_demand_plan'
- def _get_machining_precision(self):
- machinings = self.env['sf.machining.accuracy'].sudo().search([])
- list = [(m.sync_id, m.name) for m in machinings]
- return list
-
state = fields.Selection([
('10', '需求确认'),
('20', '待工艺设计'),
@@ -64,9 +59,7 @@ class SfDemandPlan(models.Model):
compute='_compute_model_process_parameters_ids'
, store=True
)
- model_machining_precision = fields.Selection(selection=_get_machining_precision, string='精度',
- related='product_id.model_machining_precision')
-
+ model_machining_precision = fields.Selection(related='product_id.model_machining_precision', string='精度')
inventory_quantity_auto_apply = fields.Float(
string="成品库存",
compute='_compute_inventory_quantity_auto_apply', store=True
@@ -85,6 +78,12 @@ class SfDemandPlan(models.Model):
default=False
)
+ readonly_custom_made_type = fields.Boolean(
+ string='字段自制类型只读',
+ compute='_compute_readonly_custom_made_type',
+ default=False
+ )
+
@api.depends('product_id.part_number', 'product_id.model_name')
def _compute_part_number(self):
for line in self:
@@ -181,17 +180,18 @@ class SfDemandPlan(models.Model):
else:
line.state = '10'
+ @api.depends('line_ids.status')
+ def _compute_readonly_custom_made_type(self):
+ for line in self:
+ production_demand_plan = line.line_ids.filtered(
+ lambda p: p.status in ('50', '60') and p.new_supply_method == 'custom_made')
+ line.readonly_custom_made_type = bool(production_demand_plan)
+
def write(self, vals):
res = super(SfDemandPlan, self).write(vals)
line_ids = self.line_ids.filtered(lambda p: p.plan_uom_qty == 0 or p.plan_uom_qty < 0)
if line_ids:
raise ValidationError(f"计划量不能小于等于0")
- if 'line_ids' in vals:
- for line in self.line_ids:
- if not line.sale_order_id:
- line.sale_order_id = self.sale_order_id
- if not line.sale_order_line_id:
- line.sale_order_line_id = self.sale_order_line_id
return res
def name_get(self):
diff --git a/sf_demand_plan/models/sf_production_demand_plan.py b/sf_demand_plan/models/sf_production_demand_plan.py
index 519917ae..8fc5763d 100644
--- a/sf_demand_plan/models/sf_production_demand_plan.py
+++ b/sf_demand_plan/models/sf_production_demand_plan.py
@@ -17,17 +17,7 @@ class SfProductionDemandPlan(models.Model):
stock_location = self.env['stock.location'].sudo().search([('name', '=', '客户')], limit=1)
return stock_location.id
- def _get_machining_precision(self):
- machinings = self.env['sf.machining.accuracy'].sudo().search([])
- list = [(m.sync_id, m.name) for m in machinings]
- return list
-
- priority = fields.Selection([
- ('1', '紧急'),
- ('2', '高'),
- ('3', '中'),
- ('4', '低'),
- ], string='优先级', related='demand_plan_id.priority')
+ priority = fields.Selection(related='demand_plan_id.priority', string='优先级')
status = fields.Selection([
('10', '草稿'),
('20', '待确认'),
@@ -38,9 +28,9 @@ class SfProductionDemandPlan(models.Model):
], string='状态', default='30', readonly=True)
demand_plan_id = fields.Many2one(comodel_name="sf.demand.plan",
string="物料需求", readonly=True)
- sale_order_id = fields.Many2one(comodel_name="sale.order",
+ sale_order_id = fields.Many2one(comodel_name="sale.order", related='demand_plan_id.sale_order_id',
string="销售订单", readonly=True)
- sale_order_line_id = fields.Many2one(comodel_name="sale.order.line",
+ sale_order_line_id = fields.Many2one(comodel_name="sale.order.line", related='demand_plan_id.sale_order_line_id',
string="销售订单明细", readonly=True)
sale_order_line_number = fields.Char(string='销售订单行', compute='_compute_sale_order_line_number', store=True)
company_id = fields.Many2one(
@@ -58,12 +48,24 @@ class SfProductionDemandPlan(models.Model):
part_name = fields.Char('零件名称', related='product_id.part_name')
part_number = fields.Char('零件图号', related='demand_plan_id.part_number')
is_incoming_material = fields.Boolean('客供料', related='sale_order_line_id.is_incoming_material', store=True)
+
+ new_supply_method = fields.Selection([
+ ('custom_made', "自制"),
+ ('purchase', "外购"),
+ ('outsourcing', "委外加工"),
+ ], string='供货方式', readonly=True)
+
+ custom_made_type = fields.Selection([
+ ('automation', "自动化产线加工"),
+ ('manual', "人工线下加工"),
+ ], string='自制类型', compute='_compute_custom_made_type', store=True)
+
supply_method = fields.Selection([
('automation', "自动化产线加工"),
('manual', "人工线下加工"),
('purchase', "外购"),
('outsourcing', "委外加工"),
- ], string='供货方式', default='manual')
+ ], string='供货方式', compute='_compute_supply_method', store=True, readonly=True)
product_uom_qty = fields.Float(
string="需求数量",
related='sale_order_line_id.product_uom_qty', store=True)
@@ -79,11 +81,11 @@ class SfProductionDemandPlan(models.Model):
model_long = fields.Char('尺寸(mm)', compute='_compute_model_long')
blank_type = fields.Selection([('圆料', '圆料'), ('方料', '方料')], string='坯料分类',
related='product_id.blank_type')
- blank_precision = fields.Selection([('精坯', '精坯'), ('粗坯', '粗坯')], string='坯料类型', related='product_id.blank_precision')
+ blank_precision = fields.Selection([('精坯', '精坯'), ('粗坯', '粗坯')], string='坯料类型',
+ related='product_id.blank_precision')
embryo_long = fields.Char('坯料尺寸(mm)', related='demand_plan_id.embryo_long')
materials_id = fields.Char('材料', related='demand_plan_id.materials_id')
- model_machining_precision = fields.Selection(selection=_get_machining_precision, string='精度',
- related='product_id.model_machining_precision')
+ model_machining_precision = fields.Selection(related='product_id.model_machining_precision', string='精度')
model_process_parameters_ids = fields.Many2many(related='demand_plan_id.model_process_parameters_ids',
string='表面工艺', )
product_remark = fields.Char("产品备注", related='product_id.model_remark')
@@ -121,6 +123,11 @@ class SfProductionDemandPlan(models.Model):
default=False
)
+ readonly_custom_made_type = fields.Boolean(
+ related='demand_plan_id.readonly_custom_made_type',
+ string='字段自制类型只读'
+ )
+
# hide_action_open_mrp_production = fields.Boolean(
# string='显示待工艺确认按钮',
# compute='_compute_hid_button',
@@ -165,6 +172,30 @@ class SfProductionDemandPlan(models.Model):
bom_id = fields.Many2one('mrp.bom', string="BOM", readonly=True)
location_id = fields.Many2one('stock.location', string='需求位置', default=get_location_id, readonly=True)
+ @api.depends('new_supply_method')
+ def _compute_custom_made_type(self):
+ DemandPlan = self.env['sf.production.demand.plan'].sudo()
+ for line in self:
+ if line.new_supply_method != "custom_made":
+ line.custom_made_type = False
+ else:
+ demand_plan_id = line.demand_plan_id._origin.id
+ demand_plan = DemandPlan.search([
+ ('demand_plan_id', '=', demand_plan_id),
+ ('new_supply_method', '=', 'custom_made'),
+ ('status', 'in', ('50', '60'))
+ ], limit=1)
+ if demand_plan:
+ line.custom_made_type = demand_plan.custom_made_type
+
+ @api.depends('new_supply_method', 'custom_made_type')
+ def _compute_supply_method(self):
+ for line in self:
+ if line.new_supply_method == 'custom_made':
+ line.supply_method = line.custom_made_type
+ else:
+ line.supply_method = line.new_supply_method
+
@api.depends('supply_method')
def _compute_route_ids(self):
for pdp in self:
@@ -549,7 +580,7 @@ class SfProductionDemandPlan(models.Model):
def button_release_plan(self):
self.ensure_one()
- if not self.supply_method:
+ if not self.new_supply_method:
raise ValidationError(f"供货方式不能为空!")
if self.plan_uom_qty > self.product_uom_qty:
return {
diff --git a/sf_demand_plan/views/demand_plan.xml b/sf_demand_plan/views/demand_plan.xml
index 5fe049a5..6c1a39d4 100644
--- a/sf_demand_plan/views/demand_plan.xml
+++ b/sf_demand_plan/views/demand_plan.xml
@@ -4,7 +4,7 @@
sf.production.demand.plan
+ class="demand_plan_tree freeze-columns-before-part_number" create="false" delete="false">
@@ -20,7 +20,11 @@
-
+
+
+
diff --git a/sf_demand_plan/views/demand_plan_info.xml b/sf_demand_plan/views/demand_plan_info.xml
index f9806fcf..f7f49ee4 100644
--- a/sf_demand_plan/views/demand_plan_info.xml
+++ b/sf_demand_plan/views/demand_plan_info.xml
@@ -6,8 +6,8 @@