Compare commits
3 Commits
feature/pl
...
feature/au
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f557cb8d10 | ||
|
|
d64a814251 | ||
|
|
6054ce39f3 |
@@ -16,8 +16,6 @@
|
|||||||
<field name='is_bfm' invisible="1"/>
|
<field name='is_bfm' invisible="1"/>
|
||||||
<field name='categ_type' invisible="1"/>
|
<field name='categ_type' invisible="1"/>
|
||||||
<field name='part_number' attrs="{'invisible': [('categ_type', '!=', '成品')]}"/>
|
<field name='part_number' attrs="{'invisible': [('categ_type', '!=', '成品')]}"/>
|
||||||
<field name='machining_drawings' attrs="{'invisible': [('categ_type', '!=', '成品')]}" widget="adaptive_viewer"/>
|
|
||||||
<field name='quality_standard' attrs="{'invisible': [('categ_type', '!=', '成品')]}" widget="adaptive_viewer"/>
|
|
||||||
<field name='manual_quotation' attrs="{'invisible':[('upload_model_file', '=', [])]}"/>
|
<field name='manual_quotation' attrs="{'invisible':[('upload_model_file', '=', [])]}"/>
|
||||||
<field name="upload_model_file"
|
<field name="upload_model_file"
|
||||||
widget="many2many_binary"
|
widget="many2many_binary"
|
||||||
@@ -111,6 +109,19 @@
|
|||||||
'刀具')], 'required': True}
|
'刀具')], 'required': True}
|
||||||
</attribute>
|
</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
|
<xpath expr="//sheet//notebook" position="inside">
|
||||||
|
<page string="2D加工图纸">
|
||||||
|
<field name='machining_drawings' attrs="{'invisible': [('categ_type', '!=', '成品')]}"
|
||||||
|
widget="adaptive_viewer"/>
|
||||||
|
</page>
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//sheet//notebook" position="inside">
|
||||||
|
<page string="质检标准">
|
||||||
|
<field name='quality_standard' attrs="{'invisible': [('categ_type', '!=', '成品')]}"
|
||||||
|
widget="adaptive_viewer"/>
|
||||||
|
|
||||||
|
</page>
|
||||||
|
</xpath>
|
||||||
<!-- <xpath expr="//field[@name='default_code']" position="attributes">-->
|
<!-- <xpath expr="//field[@name='default_code']" position="attributes">-->
|
||||||
<!-- <attribute name="attrs">{'readonly': [('categ_type', '=', '刀具')], 'invisible':-->
|
<!-- <attribute name="attrs">{'readonly': [('categ_type', '=', '刀具')], 'invisible':-->
|
||||||
<!-- [('product_variant_count', '>' , 1)]}-->
|
<!-- [('product_variant_count', '>' , 1)]}-->
|
||||||
|
|||||||
@@ -776,6 +776,8 @@ class ResProductMo(models.Model):
|
|||||||
part_number = fields.Char(string='零件图号', readonly=True)
|
part_number = fields.Char(string='零件图号', readonly=True)
|
||||||
machining_drawings = fields.Binary('2D加工图纸', readonly=True)
|
machining_drawings = fields.Binary('2D加工图纸', readonly=True)
|
||||||
quality_standard = fields.Binary('质检标准', readonly=True)
|
quality_standard = fields.Binary('质检标准', readonly=True)
|
||||||
|
machining_drawings_name = fields.Char('2D加工图纸名', readonly=True)
|
||||||
|
quality_standard_name = fields.Char('质检标准名', readonly=True)
|
||||||
|
|
||||||
@api.constrains('tool_length')
|
@api.constrains('tool_length')
|
||||||
def _check_tool_length_size(self):
|
def _check_tool_length_size(self):
|
||||||
@@ -837,6 +839,11 @@ class ResProductMo(models.Model):
|
|||||||
else:
|
else:
|
||||||
return self.env.ref('sf_dlm.product_uom_cubic_millimeter')
|
return self.env.ref('sf_dlm.product_uom_cubic_millimeter')
|
||||||
|
|
||||||
|
def attachment_update(self, name, res_id, res_field):
|
||||||
|
attachment_info = self.env['ir.attachment'].sudo().search(
|
||||||
|
[('res_id', '=', res_id), ('res_field', '=', res_field)], limit=1)
|
||||||
|
attachment_info.write({'name': name})
|
||||||
|
|
||||||
# 业务平台分配工厂后在智能工厂先创建销售订单再创建该产品
|
# 业务平台分配工厂后在智能工厂先创建销售订单再创建该产品
|
||||||
def product_create(self, product_id, item, order_id, order_number, i):
|
def product_create(self, product_id, item, order_id, order_number, i):
|
||||||
copy_product_id = product_id.with_user(self.env.ref("base.user_admin")).copy()
|
copy_product_id = product_id.with_user(self.env.ref("base.user_admin")).copy()
|
||||||
@@ -875,8 +882,11 @@ class ResProductMo(models.Model):
|
|||||||
'manual_quotation': item['manual_quotation'] or False,
|
'manual_quotation': item['manual_quotation'] or False,
|
||||||
'part_number': item.get('part_number') or '',
|
'part_number': item.get('part_number') or '',
|
||||||
'active': True,
|
'active': True,
|
||||||
'machining_drawings': '' if not item['machining_drawings'] else base64.b64decode(item['machining_drawings']),
|
'machining_drawings_name': item['machining_drawings_name'],
|
||||||
'quality_standard': '' if not item['quality_standard'] else base64.b64decode(item['quality_standard']),
|
'quality_standard_name': item['quality_standard_name'],
|
||||||
|
'machining_drawings': '' if not item['machining_drawings'] else base64.b64decode(
|
||||||
|
item['machining_drawings']),
|
||||||
|
'quality_standard': '' if not item['quality_standard'] else base64.b64decode(item['quality_standard']),
|
||||||
}
|
}
|
||||||
tax_id = self.env['account.tax'].sudo().search(
|
tax_id = self.env['account.tax'].sudo().search(
|
||||||
[('type_tax_use', '=', 'sale'), ('amount', '=', item.get('tax')), ('price_include', '=', 'True')])
|
[('type_tax_use', '=', 'sale'), ('amount', '=', item.get('tax')), ('price_include', '=', 'True')])
|
||||||
@@ -884,6 +894,12 @@ class ResProductMo(models.Model):
|
|||||||
vals.update({'taxes_id': [(6, 0, [int(tax_id)])]})
|
vals.update({'taxes_id': [(6, 0, [int(tax_id)])]})
|
||||||
copy_product_id.sudo().write(vals)
|
copy_product_id.sudo().write(vals)
|
||||||
product_id.product_tmpl_id.active = False
|
product_id.product_tmpl_id.active = False
|
||||||
|
if item['machining_drawings'] and item['machining_drawings_name']:
|
||||||
|
self.attachment_update(item['machining_drawings_name'], copy_product_id.product_tmpl_id.id,
|
||||||
|
'machining_drawings')
|
||||||
|
if item['quality_standard'] and item['quality_standard_name']:
|
||||||
|
self.attachment_update(item['quality_standard_name'], copy_product_id.product_tmpl_id.id,
|
||||||
|
'quality_standard')
|
||||||
return copy_product_id
|
return copy_product_id
|
||||||
|
|
||||||
def _get_ids(self, param):
|
def _get_ids(self, param):
|
||||||
|
|||||||
@@ -182,6 +182,11 @@ class StockRule(models.Model):
|
|||||||
moves._action_confirm()
|
moves._action_confirm()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def attachment_update(self, name, res_id, res_field):
|
||||||
|
attachment_info = self.env['ir.attachment'].sudo().search(
|
||||||
|
[('res_id', '=', res_id), ('res_field', '=', res_field)], limit=1)
|
||||||
|
attachment_info.write({'name': name})
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _run_manufacture(self, procurements):
|
def _run_manufacture(self, procurements):
|
||||||
productions_values_by_company = defaultdict(list)
|
productions_values_by_company = defaultdict(list)
|
||||||
@@ -276,6 +281,12 @@ class StockRule(models.Model):
|
|||||||
production.write({'part_number': production.product_id.part_number,
|
production.write({'part_number': production.product_id.part_number,
|
||||||
'part_drawing': production.product_id.machining_drawings,
|
'part_drawing': production.product_id.machining_drawings,
|
||||||
'quality_standard': production.product_id.quality_standard})
|
'quality_standard': production.product_id.quality_standard})
|
||||||
|
if production.product_id.machining_drawings and production.product_id.machining_drawings_name:
|
||||||
|
self.attachment_update(production.product_id.machining_drawings_name, production.id,
|
||||||
|
'part_drawing')
|
||||||
|
if production.product_id.quality_standard and production.product_id.quality_standard_name:
|
||||||
|
self.attachment_update(production.product_id.quality_standard_name, production.id,
|
||||||
|
'quality_standard')
|
||||||
if sale_order:
|
if sale_order:
|
||||||
# sale_order.write({'schedule_status': 'to schedule'})
|
# sale_order.write({'schedule_status': 'to schedule'})
|
||||||
self.env['sf.production.plan'].sudo().with_company(company_id).create({
|
self.env['sf.production.plan'].sudo().with_company(company_id).create({
|
||||||
|
|||||||
@@ -98,8 +98,6 @@
|
|||||||
<field name="production_line_id" readonly="1"/>
|
<field name="production_line_id" readonly="1"/>
|
||||||
<!-- <field name="production_line_state" readonly="1"/>-->
|
<!-- <field name="production_line_state" readonly="1"/>-->
|
||||||
<field name="part_number" string="成品的零件图号"/>
|
<field name="part_number" string="成品的零件图号"/>
|
||||||
<field name="part_drawing" widget="adaptive_viewer"/>
|
|
||||||
<field name="quality_standard" widget="adaptive_viewer"/>
|
|
||||||
<field name="tool_state"/>
|
<field name="tool_state"/>
|
||||||
<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"/>
|
||||||
@@ -330,6 +328,16 @@
|
|||||||
<xpath expr="//field[@name='components_availability']" position="attributes">
|
<xpath expr="//field[@name='components_availability']" position="attributes">
|
||||||
<attribute name="string">投料状态</attribute>
|
<attribute name="string">投料状态</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
|
<xpath expr="//sheet//notebook" position="inside">
|
||||||
|
<page string="零件图纸">
|
||||||
|
<field name="part_drawing" widget="adaptive_viewer"/>
|
||||||
|
</page>
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//sheet//notebook" position="inside">
|
||||||
|
<page string="质检标准">
|
||||||
|
<field name="quality_standard" widget="adaptive_viewer"/>
|
||||||
|
</page>
|
||||||
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|||||||
@@ -268,8 +268,6 @@
|
|||||||
<field name="material_height" class="o_address_zip"/>
|
<field name="material_height" class="o_address_zip"/>
|
||||||
</div>
|
</div>
|
||||||
<field name="part_number" string="成品的零件图号"/>
|
<field name="part_number" string="成品的零件图号"/>
|
||||||
<field name="machining_drawings" widget="adaptive_viewer" attrs="{'invisible': [('routing_type', '!=', 'CNC加工')]}"/>
|
|
||||||
<field name="quality_standard" widget="adaptive_viewer" attrs="{'invisible': [('routing_type', '!=', 'CNC加工')]}"/>
|
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//label[1]" position="attributes">
|
<xpath expr="//label[1]" position="attributes">
|
||||||
<attribute name="string">计划加工时间</attribute>
|
<attribute name="string">计划加工时间</attribute>
|
||||||
@@ -591,7 +589,18 @@
|
|||||||
mrp.group_mrp_manager,sf_base.group_sf_mrp_manager,sf_base.group_sf_equipment_user,sf_base.group_sf_order_user
|
mrp.group_mrp_manager,sf_base.group_sf_mrp_manager,sf_base.group_sf_equipment_user,sf_base.group_sf_order_user
|
||||||
</attribute>
|
</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
|
<xpath expr="//sheet//notebook" position="inside">
|
||||||
|
<page string="2D加工图纸">
|
||||||
|
<field name="machining_drawings" widget="adaptive_viewer"
|
||||||
|
attrs="{'invisible': [('routing_type', '!=', 'CNC加工')]}"/>
|
||||||
|
</page>
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//sheet//notebook" position="inside">
|
||||||
|
<page string="质检标准">
|
||||||
|
<field name="quality_standard" widget="adaptive_viewer"
|
||||||
|
attrs="{'invisible': [('routing_type', '!=', 'CNC加工')]}"/>
|
||||||
|
</page>
|
||||||
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user