Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/制造功能优化
This commit is contained in:
@@ -1361,9 +1361,9 @@ class MrpProduction(models.Model):
|
|||||||
@api.model_create_multi
|
@api.model_create_multi
|
||||||
def create(self, vals_list):
|
def create(self, vals_list):
|
||||||
"""
|
"""
|
||||||
重载创建制造订单的方法,单件制造订单只创建一个采购组,用于后续单据的创建
|
重载创建制造订单的方法,单个制造订单,同一成品只创建一个采购组,用于后续单据的创建
|
||||||
"""
|
"""
|
||||||
group_id = None
|
product_group_id = {}
|
||||||
for vals in vals_list:
|
for vals in vals_list:
|
||||||
if not vals.get('name', False) or vals['name'] == _('New'):
|
if not vals.get('name', False) or vals['name'] == _('New'):
|
||||||
picking_type_id = vals.get('picking_type_id')
|
picking_type_id = vals.get('picking_type_id')
|
||||||
@@ -1374,9 +1374,13 @@ class MrpProduction(models.Model):
|
|||||||
if not vals.get('procurement_group_id'):
|
if not vals.get('procurement_group_id'):
|
||||||
product_id = self.env['product.product'].browse(vals['product_id'])
|
product_id = self.env['product.product'].browse(vals['product_id'])
|
||||||
if product_id.product_tmpl_id.single_manufacturing:
|
if product_id.product_tmpl_id.single_manufacturing:
|
||||||
procurement_group_vals = self._prepare_procurement_group_vals(vals)
|
if product_id.id not in product_group_id.keys():
|
||||||
group_id = self.env["procurement.group"].create(procurement_group_vals).id if not group_id else group_id
|
procurement_group_vals = self._prepare_procurement_group_vals(vals)
|
||||||
vals['procurement_group_id'] = group_id
|
group_id = self.env["procurement.group"].create(procurement_group_vals).id
|
||||||
|
vals['procurement_group_id'] = group_id
|
||||||
|
product_group_id[product_id.id] = group_id
|
||||||
|
else:
|
||||||
|
vals['procurement_group_id'] = product_group_id[product_id.id]
|
||||||
return super(MrpProduction, self).create(vals_list)
|
return super(MrpProduction, self).create(vals_list)
|
||||||
|
|
||||||
@api.depends('procurement_group_id.stock_move_ids.created_purchase_line_id.order_id', 'procurement_group_id.stock_move_ids.move_orig_ids.purchase_line_id.order_id')
|
@api.depends('procurement_group_id.stock_move_ids.created_purchase_line_id.order_id', 'procurement_group_id.stock_move_ids.move_orig_ids.purchase_line_id.order_id')
|
||||||
@@ -1384,7 +1388,7 @@ class MrpProduction(models.Model):
|
|||||||
for production in self:
|
for production in self:
|
||||||
# 找到来源的第一张制造订单的采购组
|
# 找到来源的第一张制造订单的采购组
|
||||||
if production.product_id.product_tmpl_id.single_manufacturing == True:
|
if production.product_id.product_tmpl_id.single_manufacturing == True:
|
||||||
first_production = self.env['mrp.production'].search([('origin', '=', production.origin)], limit=1, order='id asc')
|
first_production = self.env['mrp.production'].search([('origin', '=', production.origin), ('product_id', '=', production.product_id.id)], limit=1, order='id asc')
|
||||||
production.purchase_order_count = len(first_production.procurement_group_id.stock_move_ids.created_purchase_line_id.order_id |
|
production.purchase_order_count = len(first_production.procurement_group_id.stock_move_ids.created_purchase_line_id.order_id |
|
||||||
first_production.procurement_group_id.stock_move_ids.move_orig_ids.purchase_line_id.order_id)
|
first_production.procurement_group_id.stock_move_ids.move_orig_ids.purchase_line_id.order_id)
|
||||||
else:
|
else:
|
||||||
@@ -1395,7 +1399,7 @@ class MrpProduction(models.Model):
|
|||||||
def _compute_picking_ids(self):
|
def _compute_picking_ids(self):
|
||||||
for order in self:
|
for order in self:
|
||||||
if order.product_id.product_tmpl_id.single_manufacturing == True:
|
if order.product_id.product_tmpl_id.single_manufacturing == True:
|
||||||
first_order = self.env['mrp.production'].search([('origin', '=', order.origin)], limit=1, order='id asc')
|
first_order = self.env['mrp.production'].search([('origin', '=', order.origin), ('product_id', '=', order.product_id.id)], limit=1, order='id asc')
|
||||||
order.picking_ids = self.env['stock.picking'].search([
|
order.picking_ids = self.env['stock.picking'].search([
|
||||||
('group_id', '=', first_order.procurement_group_id.id), ('group_id', '!=', False),
|
('group_id', '=', first_order.procurement_group_id.id), ('group_id', '!=', False),
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -125,36 +125,30 @@ class StockRule(models.Model):
|
|||||||
|
|
||||||
product = self.env['product.product'].search(
|
product = self.env['product.product'].search(
|
||||||
[("id", '=', item[0].product_id.id)])
|
[("id", '=', item[0].product_id.id)])
|
||||||
# 如果产品是坯料,则根据作业类型来设置采购组
|
product_tmpl = self.env['product.template'].search(
|
||||||
if product.categ_id.name == '坯料':
|
["&", ("id", '=', product.product_tmpl_id.id), ('single_manufacturing', "!=", False)])
|
||||||
if item[1]['picking_type_id'].name in ['生产发料', '内部调拨']:
|
if product_tmpl:
|
||||||
item[0][7]['group_id'] = procurements[0][0][7]['group_id']
|
if num > 1:
|
||||||
list2.append(item)
|
for no in range(1, num + 1):
|
||||||
else:
|
Procurement = namedtuple('Procurement', ['product_id', 'product_qty',
|
||||||
product_tmpl = self.env['product.template'].search(
|
'product_uom', 'location_id', 'name', 'origin',
|
||||||
["&", ("id", '=', product.product_tmpl_id.id), ('single_manufacturing', "!=", False)])
|
'company_id',
|
||||||
if product_tmpl:
|
'values'])
|
||||||
if num > 1:
|
s = Procurement(product_id=item[0].product_id, product_qty=1.0, product_uom=item[0].product_uom,
|
||||||
for no in range(1, num + 1):
|
location_id=item[0].location_id,
|
||||||
Procurement = namedtuple('Procurement', ['product_id', 'product_qty',
|
name=item[0].name,
|
||||||
'product_uom', 'location_id', 'name', 'origin',
|
origin=item[0].origin,
|
||||||
'company_id',
|
company_id=item[0].company_id,
|
||||||
'values'])
|
values=item[0].values,
|
||||||
s = Procurement(product_id=item[0].product_id, product_qty=1.0, product_uom=item[0].product_uom,
|
)
|
||||||
location_id=item[0].location_id,
|
item1 = list(item)
|
||||||
name=item[0].name,
|
item1[0] = s
|
||||||
origin=item[0].origin,
|
|
||||||
company_id=item[0].company_id,
|
|
||||||
values=item[0].values,
|
|
||||||
)
|
|
||||||
item1 = list(item)
|
|
||||||
item1[0] = s
|
|
||||||
|
|
||||||
list2.append(tuple(item1))
|
list2.append(tuple(item1))
|
||||||
else:
|
|
||||||
list2.append(item)
|
|
||||||
else:
|
else:
|
||||||
list2.append(item)
|
list2.append(item)
|
||||||
|
else:
|
||||||
|
list2.append(item)
|
||||||
|
|
||||||
for procurement, rule in list2:
|
for procurement, rule in list2:
|
||||||
procure_method = rule.procure_method
|
procure_method = rule.procure_method
|
||||||
@@ -214,9 +208,12 @@ class StockRule(models.Model):
|
|||||||
'''创建制造订单'''
|
'''创建制造订单'''
|
||||||
productions = self.env['mrp.production'].with_user(SUPERUSER_ID).sudo().with_company(company_id).create(
|
productions = self.env['mrp.production'].with_user(SUPERUSER_ID).sudo().with_company(company_id).create(
|
||||||
productions_values)
|
productions_values)
|
||||||
# 将这一批制造订单的采购组设置为不同的采购组
|
# 将这一批制造订单的采购组根据成品设置为不同的采购组
|
||||||
|
product_group_id = {}
|
||||||
for index, production in enumerate(productions):
|
for index, production in enumerate(productions):
|
||||||
if index > 0:
|
if production.product_id.id not in product_group_id.keys():
|
||||||
|
product_group_id[production.product_id.id] = production.procurement_group_id.id
|
||||||
|
else:
|
||||||
productions_values[index].update({'name': production.name})
|
productions_values[index].update({'name': production.name})
|
||||||
procurement_group_vals = production._prepare_procurement_group_vals(productions_values[index])
|
procurement_group_vals = production._prepare_procurement_group_vals(productions_values[index])
|
||||||
production.procurement_group_id = self.env["procurement.group"].create(procurement_group_vals).id
|
production.procurement_group_id = self.env["procurement.group"].create(procurement_group_vals).id
|
||||||
@@ -968,11 +965,11 @@ class ReStockMove(models.Model):
|
|||||||
|
|
||||||
def _single_manufactuing_mo_generate_origin(self, res):
|
def _single_manufactuing_mo_generate_origin(self, res):
|
||||||
"""
|
"""
|
||||||
单件制造订单的完成move单据修改来源为制造订单
|
单个制造订单的完成move单据修改来源为该制造订单关联的销售订单下所有成品相同的制造订单
|
||||||
"""
|
"""
|
||||||
if self[0].origin and self.picking_type_id.name in ['生产发料', '内部调拨']:
|
if self[0].origin and self.picking_type_id.name in ['生产发料', '内部调拨']:
|
||||||
production = self.env['mrp.production'].search([('name', '=', self[0].origin)], limit=1, order='id asc')
|
production = self.env['mrp.production'].search([('name', '=', self[0].origin)], limit=1, order='id asc')
|
||||||
productions = self.env['mrp.production'].search([('origin', '=', production.origin)])
|
productions = self.env['mrp.production'].search([('origin', '=', production.origin), ('product_id', '=', production.product_id.id)])
|
||||||
res['origin'] = ','.join(productions.mapped('name'))
|
res['origin'] = ','.join(productions.mapped('name'))
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|||||||
@@ -114,7 +114,7 @@
|
|||||||
<!-- <field name="production_line_state" readonly="1"/>-->
|
<!-- <field name="production_line_state" readonly="1"/>-->
|
||||||
<field name="part_name"/>
|
<field name="part_name"/>
|
||||||
<field name="part_number" string="零件图号"/>
|
<field name="part_number" string="零件图号"/>
|
||||||
<field name="tool_state"/>
|
<field name="tool_state" attrs="{'invisible': [('production_type', 'not in', ['自动化产线加工'])]}"/>
|
||||||
<field name="tool_state_remark" string="备注" attrs="{'invisible': [('tool_state', '!=', '1')]}"/>
|
<field name="tool_state_remark" string="备注" attrs="{'invisible': [('tool_state', '!=', '1')]}"/>
|
||||||
<field name="deadline_of_delivery" readonly="1"/>
|
<field name="deadline_of_delivery" readonly="1"/>
|
||||||
<field name="tool_state_remark2" invisible="1"/>
|
<field name="tool_state_remark2" invisible="1"/>
|
||||||
@@ -381,6 +381,12 @@
|
|||||||
</page>
|
</page>
|
||||||
|
|
||||||
</xpath>
|
</xpath>
|
||||||
|
<xpath expr="//sheet/group/group/div[@class='d-flex flex-row align-items-start']/span[last()]" position="attributes">
|
||||||
|
<attribute name="invisible">True</attribute>
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//sheet/group/group/div[@class='d-flex flex-row align-items-start']/button[@name='action_product_forecast_report']" position="attributes">
|
||||||
|
<attribute name="invisible">True</attribute>
|
||||||
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|||||||
@@ -285,7 +285,7 @@
|
|||||||
<field name="material_height" class="o_address_zip"/>
|
<field name="material_height" class="o_address_zip"/>
|
||||||
</div>
|
</div>
|
||||||
<field name="part_name"/>
|
<field name="part_name"/>
|
||||||
<field name="part_number" string="成品的零件图号"/>
|
<field name="part_number" string="零件图号"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//label[1]" position="attributes">
|
<xpath expr="//label[1]" position="attributes">
|
||||||
<attribute name="string">计划加工时间</attribute>
|
<attribute name="string">计划加工时间</attribute>
|
||||||
|
|||||||
Reference in New Issue
Block a user