diff --git a/jikimo_frontend/static/src/scss/custom_style.scss b/jikimo_frontend/static/src/scss/custom_style.scss index 2b1c6cfc..d8e2ab85 100644 --- a/jikimo_frontend/static/src/scss/custom_style.scss +++ b/jikimo_frontend/static/src/scss/custom_style.scss @@ -434,4 +434,19 @@ div:has(.o_required_modifier) > label::before { .o_list_renderer .flex-row-reverse > .text-end { text-align: left!important; +} + +// 设置modal弹窗样式 +.modal.o_technical_modal { + .modal-lg { + @media (min-width: 992px) { + max-width: 1200px; + } + @media (min-width: 576px) { + .o_form_view .o_inner_group { + grid-template-columns: auto; + } + } + + } } \ No newline at end of file diff --git a/sf_base/models/base.py b/sf_base/models/base.py index a2565d6d..6fc86e94 100644 --- a/sf_base/models/base.py +++ b/sf_base/models/base.py @@ -48,7 +48,7 @@ class MachineBrand(models.Model): active = fields.Boolean('有效', default=True) -#机床 +# 机床 class MachineTool(models.Model): _name = 'sf.machine_tool' _description = '机床' @@ -92,7 +92,8 @@ class MachineTool(models.Model): type_id = fields.Many2one('sf.machine_tool.type', '型号') brand_id = fields.Many2one('sf.machine.brand', string='品牌') state = fields.Selection( - [("正常", "正常"), ("故障停机", "故障停机"), ("计划维保", "计划维保"),("空闲", "空闲"),("封存(报废)", "封存(报废)")], + [("正常", "正常"), ("故障停机", "故障停机"), ("计划维保", "计划维保"), ("空闲", "空闲"), + ("封存(报废)", "封存(报废)")], default='正常', string="机床状态") # 0606新增字段 machine_tool_picture = fields.Binary('图片') @@ -357,8 +358,7 @@ class MachineToolType(models.Model): lq_image_id = fields.Many2many('maintenance.equipment.image', 'lq_equipment_id', string='冷却方式', domain="[('type', '=', '冷却方式')]") - - #待删除字段 + # 待删除字段 precision_min = fields.Float('X轴定位精度min(mm)', digits=(12, 3)) precision_max = fields.Float('X轴定位精度max(mm)', digits=(12, 3)) lead_screw = fields.Char('丝杆') diff --git a/sf_base/models/basic_parameters_fixture.py b/sf_base/models/basic_parameters_fixture.py index a1b1a9a6..7bd69a35 100644 --- a/sf_base/models/basic_parameters_fixture.py +++ b/sf_base/models/basic_parameters_fixture.py @@ -85,8 +85,10 @@ class BasicParametersFixture(models.Model): 'boolean_chip_blowing_function': obj['boolean_chip_blowing_function'], 'carrying_capacity_max': obj['carrying_capacity_max'], 'rigidity': obj['rigidity'], - 'materials_model_id': obj['materials_model_id'], - 'machine_tool_type_id': obj['machine_tool_type_id'], + 'materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, + 'machine_tool_type_id': self.env['sf.machine_tool.type'].sudo().search( + [('code', '=', obj['machine_tool_type_id']), ('active', '=', True)]).id, }) return zero_chuck_param_str @@ -106,7 +108,8 @@ class BasicParametersFixture(models.Model): 'way_to_install': obj['way_to_install'], 'type_of_drive': obj['type_of_drive'], 'carrying_capacity_max': obj['carrying_capacity_max'], - 'materials_model_id': obj['materials_model_id'], + 'materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'rigidity': obj['rigidity'], }) return zero_tray_param_str @@ -129,9 +132,11 @@ class BasicParametersFixture(models.Model): 'chucking_power_max': obj['chucking_power_max'], 'carrying_capacity_max': obj['carrying_capacity_max'], 'rated_air_pressure': obj['rated_air_pressure'], - 'materials_model_id': obj['materials_model_id'], + 'materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'rigidity': obj['rigidity'], - 'interface_materials_model_id': obj['interface_materials_model_id'], + 'interface_materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'type_of_drive': obj['type_of_drive'], }) return pneumatic_fixture_param_str @@ -155,9 +160,11 @@ class BasicParametersFixture(models.Model): 'carrying_capacity_max': obj['carrying_capacity_max'], 'transverse_groove': obj['transverse_groove'], 'longitudinal_fitting_groove': obj['longitudinal_fitting_groove'], - 'materials_model_id': obj['materials_model_id'], + 'materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'rigidity': obj['rigidity'], - 'interface_materials_model_id': obj['interface_materials_model_id'], + 'interface_materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'type_of_drive': obj['type_of_drive'], }) return jaw_vice_fixture_param_str @@ -182,9 +189,11 @@ class BasicParametersFixture(models.Model): 'magnetic_field_height': obj['magnetic_field_height'], 'magnetic_pole_plate_grinding_allowance': obj['magnetic_pole_plate_grinding_allowance'], 'carrying_capacity_max': obj['carrying_capacity_max'], - 'materials_model_id': obj['materials_model_id'], + 'materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'rigidity': obj['rigidity'], - 'interface_materials_model_id': obj['interface_materials_model_id'], + 'interface_materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'type_of_drive': obj['type_of_drive'], }) return magnet_fixture_param_str @@ -206,7 +215,8 @@ class BasicParametersFixture(models.Model): 'gripper_diameter_max': obj['gripper_diameter_max'], 'chucking_power_max': obj['chucking_power_max'], 'carrying_capacity_max': obj['carrying_capacity_max'], - 'materials_model_id': obj['materials_model_id'], + 'materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'rigidity': obj['rigidity'], 'screw_size': obj['screw_size'], 'via_hole_diameter': obj['via_hole_diameter'], @@ -232,7 +242,8 @@ class BasicParametersFixture(models.Model): 'gripper_diameter_max': obj['gripper_diameter_max'], 'chucking_power_max': obj['chucking_power_max'], 'carrying_capacity_max': obj['carrying_capacity_max'], - 'materials_model_id': obj['materials_model_id'], + 'materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'rigidity': obj['rigidity'], 'mounting_hole_depth': obj['mounting_hole_depth'], 'centering_diameter': obj['centering_diameter'], diff --git a/sf_base/models/common.py b/sf_base/models/common.py index f6e6771a..7450fff9 100644 --- a/sf_base/models/common.py +++ b/sf_base/models/common.py @@ -1,7 +1,9 @@ # -*- coding: utf-8 -*- import logging from urllib.parse import urlencode -from odoo import fields, models +from odoo import fields, models, api +from odoo.exceptions import UserError + _logger = logging.getLogger(__name__) @@ -59,6 +61,14 @@ class MrsMaterialModel(models.Model): supplier_ids = fields.One2many('sf.supplier.sort', 'materials_model_id', string='供应商') active = fields.Boolean('有效', default=True) + @api.constrains('gain_way', 'supplier_ids') + def _check_gain_way(self): + if not self.gain_way: + raise UserError("请输入获取方式") + if self.gain_way in ['外协', '采购']: + if not self.supplier_ids: + raise UserError("请添加供应商") + class MrsProductionProcessCategory(models.Model): _name = 'sf.production.process.category' diff --git a/sf_base/models/fixture.py b/sf_base/models/fixture.py index c1591745..52e2baf7 100644 --- a/sf_base/models/fixture.py +++ b/sf_base/models/fixture.py @@ -31,7 +31,7 @@ class FixtureModel(models.Model): fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name') multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型", required=True) brand_id = fields.Many2one('sf.machine.brand', string="品牌") - model_file = fields.Binary(string="3D模型图") + model_file = fields.Binary(string="图片") status = fields.Boolean('状态') active = fields.Boolean('有效', default=False) @@ -49,43 +49,42 @@ class FixtureModel(models.Model): string='转接板(锁板)夹具基本参数') scroll_chuck_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='三爪卡盘基本参数') - - def _get_code(self, fixture_model_type_code): - fixture_model = self.env['sf.fixture.model'].sudo().search( - [('code', 'ilike', fixture_model_type_code)], - limit=1, - order="id desc") - if not fixture_model: - num = "%03d" % 1 - else: - m = int(fixture_model.code[-3:]) + 1 - num = "%03d" % m - return "%s%s" % (fixture_model_type_code, num) - code = fields.Char(string='编码', readonly=True) - def _onchange_fixture_material_id(self, fixture_material_id): - if fixture_material_id: - if self.fixture_material_id.name == "气动夹具": - code = self._get_code("JKM-C-JJWL-QDJJ-") - elif self.fixture_material_id.name == "转接板(锁板)夹具": - code = self._get_code("JKM-C-JJWL-ZJJJ-") - elif self.fixture_material_id.name == "磁吸夹具": - code = self._get_code("JKM-C-JJWL-CXJJ-") - elif self.fixture_material_id.name == "虎钳夹具": - code = self._get_code("JKM-C-JJWL-HQJJ-") - elif self.fixture_material_id.name == "零点托盘": - code = self._get_code("JKM-C-JJWL-LDTP-") - elif self.fixture_material_id.name == "三爪卡盘": - code = self._get_code("JKM-C-JJWL-SZKP-") - else: - code = self._get_code("JKM-C-JJWL-LDKP-") - return code - - @api.model_create_multi - def create(self, vals): - obj = super(FixtureModel, self).create(vals) - if obj.fixture_material_id: - code = self._onchange_fixture_material_id(obj.fixture_material_id) - obj.code = code - return obj + # def _get_code(self, fixture_model_type_code): + # fixture_model = self.env['sf.fixture.model'].sudo().search( + # [('code', 'ilike', fixture_model_type_code)], + # limit=1, + # order="id desc") + # if not fixture_model: + # num = "%03d" % 1 + # else: + # m = int(fixture_model.code[-3:]) + 1 + # num = "%03d" % m + # return "%s%s" % (fixture_model_type_code, num) + # + # def _onchange_fixture_material_id(self, fixture_material_id): + # if fixture_material_id: + # if self.fixture_material_id.name == "气动夹具": + # code = self._get_code("JKM-C-JJWL-QDJJ-") + # elif self.fixture_material_id.name == "转接板(锁板)夹具": + # code = self._get_code("JKM-C-JJWL-ZJJJ-") + # elif self.fixture_material_id.name == "磁吸夹具": + # code = self._get_code("JKM-C-JJWL-CXJJ-") + # elif self.fixture_material_id.name == "虎钳夹具": + # code = self._get_code("JKM-C-JJWL-HQJJ-") + # elif self.fixture_material_id.name == "零点托盘": + # code = self._get_code("JKM-C-JJWL-LDTP-") + # elif self.fixture_material_id.name == "三爪卡盘": + # code = self._get_code("JKM-C-JJWL-SZKP-") + # else: + # code = self._get_code("JKM-C-JJWL-LDKP-") + # return code + # + # @api.model_create_multi + # def create(self, vals): + # obj = super(FixtureModel, self).create(vals) + # if obj.fixture_material_id: + # code = self._onchange_fixture_material_id(obj.fixture_material_id) + # obj.code = code + # return obj diff --git a/sf_base/models/tool_base_new.py b/sf_base/models/tool_base_new.py index 7f3921a2..474c46f3 100644 --- a/sf_base/models/tool_base_new.py +++ b/sf_base/models/tool_base_new.py @@ -106,11 +106,8 @@ class CuttingToolModel(models.Model): chuck_basic_parameters_ids = fields.One2many('sf.tool.materials.basic.parameters', 'standard_library_id', string='夹头基本参数') cutting_speed_ids = fields.One2many('sf.cutting.speed', 'standard_library_id', string='切削速度Vc') - feed_per_tooth_ids = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz', - domain=[('cutting_speed', '!=', False)]) - feed_per_tooth_ids_3 = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz', - domain=[('cutting_speed', '!=', False)]) - + feed_per_tooth_ids = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz(整体式刀具)') + feed_per_tooth_ids_3 = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz(刀片)') material_model_id = fields.Many2one('sf.materials.model', '材料型号') # 适用夹头型号可以多选 # chuck_ids = fields.Many2many( diff --git a/sf_base/models/tool_other_features.py b/sf_base/models/tool_other_features.py index ec3ad238..7ad32bc2 100644 --- a/sf_base/models/tool_other_features.py +++ b/sf_base/models/tool_other_features.py @@ -122,7 +122,7 @@ class ToolMaterialsBasicParameters(models.Model): inner_diameter = fields.Float('内径(mm)') run_out_accuracy = fields.Char('跳动精度(mm)', size=20) top_diameter = fields.Float('顶部直径(mm)') - weight = fields.Float('重量(kg)', size=20) + weight = fields.Float('重量(kg)') clamping_length = fields.Float('夹持长度(mm)') clamping_tolerance = fields.Char('夹持公差(mm)', size=20) cooling_jacket = fields.Char('适用冷却套型号', size=50) @@ -162,7 +162,6 @@ class FeedPerTooth(models.Model): _order = 'blade_diameter,cutting_width_depth_id,materials_type_id' name = fields.Char('名称') - cutting_speed = fields.Char('切削速度', required=True) product_template_id = fields.Many2one('product.template') standard_library_id = fields.Many2one('sf.cutting_tool.standard.library', string='标准库') blade_diameter = fields.Integer('刃部直径(mm)', readonly=True) diff --git a/sf_base/views/fixture_view.xml b/sf_base/views/fixture_view.xml index 0a7d1e8e..692c3b7f 100644 --- a/sf_base/views/fixture_view.xml +++ b/sf_base/views/fixture_view.xml @@ -32,30 +32,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - 夹具物料 ir.actions.act_window @@ -96,28 +72,6 @@ - - - - - - - - - - - - - - - - - - - - - - 联装类型 ir.actions.act_window diff --git a/sf_base/views/tool_views.xml b/sf_base/views/tool_views.xml index 29f14547..77b5d1d8 100644 --- a/sf_base/views/tool_views.xml +++ b/sf_base/views/tool_views.xml @@ -509,7 +509,7 @@ 刀具组 ir.actions.act_window sf.tool.groups - tree,form,search + tree diff --git a/sf_dlm/views/product_template_view.xml b/sf_dlm/views/product_template_view.xml index 3748a669..7803b263 100644 --- a/sf_dlm/views/product_template_view.xml +++ b/sf_dlm/views/product_template_view.xml @@ -13,6 +13,18 @@ + + product.template.tree.inherit.sf + product.template + + + + False + + + + + product.template.stock.property.form.inherit product.template diff --git a/sf_maintenance/security/ir.model.access.csv b/sf_maintenance/security/ir.model.access.csv index 998c6744..575afec5 100644 --- a/sf_maintenance/security/ir.model.access.csv +++ b/sf_maintenance/security/ir.model.access.csv @@ -16,7 +16,7 @@ access_sf_robot_axis_num,sf_robot_axis_num,model_sf_robot_axis_num,sf_group_equi access_maintenance_request_group_plan_dispatch,maintenance.request,maintenance.model_maintenance_request,sf_base.group_plan_dispatch,1,0,0,0 -access_maintenance_equipment_group_plan_dispatch,maintenance.equipment,maintenance.model_maintenance_equipment,sf_base.group_plan_dispatch,1,1,1,1 +access_maintenance_equipment_group_plan_dispatch,maintenance.equipment,maintenance.model_maintenance_equipment,sf_base.group_plan_dispatch,1,0,0,0 access_sf_maintenance_logs_group_plan_dispatch,sf_maintenance_logs,model_sf_maintenance_logs,sf_base.group_plan_dispatch,1,0,0,0 access_maintenance_standard_image_group_plan_dispatch,maintenance_standard_image,model_maintenance_standard_image,sf_base.group_plan_dispatch,1,0,0,0 access_equipment_maintenance_standards_group_plan_dispatch,equipment_maintenance_standards,model_equipment_maintenance_standards,sf_base.group_plan_dispatch,1,0,0,0 diff --git a/sf_manufacturing/__init__.py b/sf_manufacturing/__init__.py index 0650744f..f7209b17 100644 --- a/sf_manufacturing/__init__.py +++ b/sf_manufacturing/__init__.py @@ -1 +1,2 @@ from . import models +from . import controllers diff --git a/sf_manufacturing/controllers/__init__.py b/sf_manufacturing/controllers/__init__.py new file mode 100644 index 00000000..e046e49f --- /dev/null +++ b/sf_manufacturing/controllers/__init__.py @@ -0,0 +1 @@ +from . import controllers diff --git a/sf_manufacturing/controllers/controllers.py b/sf_manufacturing/controllers/controllers.py new file mode 100644 index 00000000..c4fd6b87 --- /dev/null +++ b/sf_manufacturing/controllers/controllers.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +import logging +import json +import base64 +from odoo import http +from odoo.http import request + + +class Manufacturing_Connect(http.Controller): + + @http.route('/AutoDeviceApi/GetWoInfo', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False, + cors="*") + def get_Work_Info(self, **kw): + """ + 自动化传递工单号获取工单信息 + :param kw: + :return: + """ + logging.info('get_Work_Info:%s' % kw) + try: + res = {'Succeed': True, 'Datas': []} + datas = request.httprequest.data + ret = json.loads(datas) + ret = json.loads(ret['result']) + logging.info('RfidCode:%s' % ret) + workorder = request.env['mrp.workorder'].sudo().search([('name', '=', ret['RfidCode'])]) + if workorder: + for item in workorder: + res['Datas'].append({ + 'BillId': item.production_id.name, + 'ProductionLine': item.production_line, + 'CraftName': item.name, + 'Quantity': 1, + 'MaterialId': item.product_id.default_code, + 'MaterialName': item.product_id.name, + # 'Spec':item.mat, + 'Material': item.materials_type_id.name + }) + except Exception as e: + res = {'Succeed': False, 'ErrorCode': 202, 'Error': e} + logging.info('get_Work_Info error:%s' % e) + return json.JSONEncoder().encode(res) diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index dd3c54e9..185817e9 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -6,6 +6,7 @@ import requests from odoo import api, fields, models, _ from odoo.exceptions import UserError from odoo.addons.sf_base.commons.common import Common +from odoo.tools import float_compare, float_round, float_is_zero, format_datetime from odoo.tools import float_compare, float_is_zero diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index c8461e8a..cac61045 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -437,7 +437,7 @@ class ResProductMo(models.Model): cutting_tool_blade_diameter = fields.Float('刃径/刃部直径(mm)') cutting_tool_cutter_arbor_diameter = fields.Float('刀杆直径(mm)') cutting_tool_min_machining_aperture = fields.Integer('最小加工孔径(mm)') - cutting_tool_install_blade_tip_num = fields.Integer('可装刀片数/齿数(个)', size=20) + cutting_tool_install_blade_tip_num = fields.Integer('可装刀片数/齿数(个)') cutting_tool_installing_structure = fields.Char('安装结构', size=20) cutting_tool_blade_id = fields.Many2one( 'sf.cutting_tool.standard.library', diff --git a/sf_manufacturing/security/ir.model.access.csv b/sf_manufacturing/security/ir.model.access.csv index 246e1d0f..7632686f 100644 --- a/sf_manufacturing/security/ir.model.access.csv +++ b/sf_manufacturing/security/ir.model.access.csv @@ -89,13 +89,15 @@ access_mrp_workcenter_capacity_manager,mrp.workcenter.capacity.manager,mrp.model access_mrp_production,mrp_production,model_mrp_production,sf_base.group_plan_dispatch,1,1,1,0 access_mrp_workorder,mrp_workorder,model_mrp_workorder,sf_base.group_plan_dispatch,1,1,1,0 -access_sf_production_line,sf.production.line,model_sf_production_line,sf_base.group_plan_dispatch,1,1,1,0 +access_sf_production_line_group_plan_dispatch,sf.production.line,model_sf_production_line,sf_base.group_plan_dispatch,1,0,0,0 +access_sf_production_line_group_plan_director,sf.production.line,model_sf_production_line,sf_base.group_plan_director,1,1,1,0 access_sf_production_line,sf.production.line,model_sf_production_line,sf_maintenance.sf_group_equipment_user,1,1,1,0 access_mrp_workcenter,mrp_workcenter,model_mrp_workcenter,sf_base.group_plan_dispatch,1,1,1,0 access_mrp_bom,mrp.bom,mrp.model_mrp_bom,sf_base.group_plan_dispatch,1,1,1,0 access_mrp_bom_line,mrp.bom.line,mrp.model_mrp_bom_line,sf_base.group_plan_dispatch,1,0,0,0 access_mrp_unbuild,mrp.unbuild,mrp.model_mrp_unbuild,sf_base.group_plan_dispatch,1,1,1,0 -access_stock_scrap,stock.scrap,stock.model_stock_scrap,sf_base.group_plan_dispatch,1,1,1,0 +access_stock_scrap_group_plan_dispatch,stock.scrap,stock.model_stock_scrap,sf_base.group_plan_dispatch,1,0,0,0 + access_sf_model_type,sf.model.type,model_sf_model_type,sf_base.group_plan_dispatch,1,1,1,0 access_mrp_routing_workcenter,mrp.routing.workcenter,mrp.model_mrp_routing_workcenter,sf_base.group_plan_dispatch,1,1,1,0 access_mrp_document,mrp.document,mrp.model_mrp_document,sf_base.group_plan_dispatch,1,0,0,0 diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index b23b87b2..df9437ba 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -1465,7 +1465,7 @@ class SyncFixtureModel(models.Model): if result.get('fixture_model_yesterday_list'): for item in result['fixture_model_yesterday_list']: if item: - fixture_model = self.search([("code", '=', item['code'])]) + fixture_model = self.search([("code", '=', item['code']), ('active', 'in', [True, False])]) zero_chuck_list = [] for zero_chuck_id in item['zero_chuck_ids']: zero_chuck_list.append( @@ -1520,6 +1520,17 @@ class SyncFixtureModel(models.Model): "active": item['active'], }) else: + fixture_model.write({ + "zero_chuck_ids": [(5, 0, 0)], + "zero_tray_ids": [(5, 0, 0)], + "pneumatic_fixture_ids": [(5, 0, 0)], + "jaw_vice_fixture_ids": [(5, 0, 0)], + "magnet_fixture_ids": [(5, 0, 0)], + "adapter_board_fixture_ids": [(5, 0, 0)], + "scroll_chuck_ids": [(5, 0, 0)], + }) + self.env['sf.fixture.materials.basic.parameters'].sudo().search( + [('fixture_model_id', '=', False)]).unlink() fixture_model.write({ "name": item['name'], "code": item['code'], @@ -1555,7 +1566,7 @@ class SyncFixtureModel(models.Model): if result.get('fixture_model_all_list'): for item in result['fixture_model_all_list']: if item: - fixture_model = self.search([("code", '=', item['code'])]) + fixture_model = self.search([('code', '=', item['code']), ('active', 'in', [True, False])]) zero_chuck_list = [] for zero_chuck_id in item['zero_chuck_ids']: zero_chuck_list.append( @@ -1610,6 +1621,17 @@ class SyncFixtureModel(models.Model): "active": item['active'], }) else: + fixture_model.write({ + "zero_chuck_ids": [(5, 0, 0)], + "zero_tray_ids": [(5, 0, 0)], + "pneumatic_fixture_ids": [(5, 0, 0)], + "jaw_vice_fixture_ids": [(5, 0, 0)], + "magnet_fixture_ids": [(5, 0, 0)], + "adapter_board_fixture_ids": [(5, 0, 0)], + "scroll_chuck_ids": [(5, 0, 0)], + }) + self.env['sf.fixture.materials.basic.parameters'].sudo().search( + [('fixture_model_id', '=', False)]).unlink() fixture_model.write({ "name": item['name'], "code": item['code'], diff --git a/sf_plan/models/custom_plan.py b/sf_plan/models/custom_plan.py index 03117a3a..96e98773 100644 --- a/sf_plan/models/custom_plan.py +++ b/sf_plan/models/custom_plan.py @@ -220,7 +220,7 @@ class sf_production_plan(models.Model): """ sequence = workorder_id_list.index(item.id) - 1 # 计算CNC加工之前工单的开始结束时间 - for i in range(sequence): + for i in range(1 if sequence == 0 else sequence): current_workorder_id = (item.id - (i + 1)) current_workorder_obj = self.env['mrp.workorder'].sudo().search( [('id', '=', current_workorder_id)]) diff --git a/sf_plan_management/i18n/zh_CN.po b/sf_plan_management/i18n/zh_CN.po index ac175e4e..086067ab 100644 --- a/sf_plan_management/i18n/zh_CN.po +++ b/sf_plan_management/i18n/zh_CN.po @@ -39704,7 +39704,7 @@ msgstr "付款中" #: model_terms:ir.ui.view,arch_db:quality.quality_alert_view_search #: model_terms:ir.ui.view,arch_db:quality_control.quality_check_view_search msgid "In Progress" -msgstr "待排程" +msgstr "进行中" #. module: stock #: model:ir.model.fields,field_description:stock.field_stock_warehouse__in_type_id @@ -55392,7 +55392,7 @@ msgstr "覆盖作者EMail" #: model_terms:ir.ui.view,arch_db:mrp.mrp_bom_form_view #: model_terms:ir.ui.view,arch_db:stock.view_stock_rules_report msgid "Overview" -msgstr "概述" +msgstr "驾驶舱" #. module: base #: model:ir.model.fields,field_description:base.field_base_language_import__overwrite @@ -114487,6 +114487,11 @@ msgstr "" msgid "径跳精度(mm)" msgstr "" +#. module: sf_manufacturing +#: model:ir.model.fields.selection,name:sf_manufacturing.selection__mrp_production__state__progress +msgid "待排程" +msgstr "待排程" + #. module: sf_base #: model:ir.model.fields,field_description:sf_base.field_sf_cutting_tool_model__jump_accuracy msgid "径跳精度(um)" @@ -116186,7 +116191,7 @@ msgstr "" #: model:ir.actions.act_window,name:sf_manufacturing.mrp_workcenter_kanban_action1 #: model:ir.ui.menu,name:sf_manufacturing.menu_mrp_dashboard msgid "生产线驾驶舱" -msgstr "" +msgstr "生产线驾驶舱" #. module: sf_warehouse #: model_terms:ir.ui.view,arch_db:sf_warehouse.view_location_form_sf_inherit diff --git a/sf_quality/security/ir.model.access.csv b/sf_quality/security/ir.model.access.csv index 8e91f577..4374715d 100644 --- a/sf_quality/security/ir.model.access.csv +++ b/sf_quality/security/ir.model.access.csv @@ -12,6 +12,8 @@ access_quality_check_group_quality,quality_check_group_quality,quality.model_qua access_quality_check_group_quality_director,quality_check_group_quality_director,quality.model_quality_check,sf_base.group_quality_director,1,1,1,0 access_quality_check_group_plan_dispatch,quality_check_group_plan_dispatch,quality.model_quality_check,sf_base.group_plan_dispatch,1,0,0,0 access_quality_check_group_plan_director,quality_check_group_plan_director,quality.model_quality_check,sf_base.group_plan_director,1,0,0,0 +access_quality_check_group_purchase,quality_check_group_purchase,quality.model_quality_check,sf_base.group_purchase,1,0,0,0 +access_quality_check_group_purchase_director,quality_check_group_purchase_director,quality.model_quality_check,sf_base.group_purchase_director,1,0,0,0 access_quality_check_group_sf_equipment_user,quality_check_group_sf_equipment_user,quality.model_quality_check,sf_base.group_sf_equipment_user,1,0,0,0 access_quality_check_group_sf_tool_user,quality_check_group_sf_tool_user,quality.model_quality_check,sf_base.group_sf_tool_user,1,0,0,0 access_quality_check_group_sf_order_user,quality_check_group_sf_order_user,quality.model_quality_check,sf_base.group_sf_order_user,1,0,0,0 @@ -64,4 +66,8 @@ access_quality_reason_type_group_quality_director,quality_reason_group_quality_d access_quality_alert_stage,quality.alert.stage,quality.model_quality_alert_stage,sf_base.group_plan_dispatch,1,0,0,0 +access_stock_move_group_quality,stock_move_group_quality,stock.model_stock_move,sf_base.group_quality,1,1,0,0 +access_stock_move_group_quality_director,stock_move_group_quality_director,stock.model_stock_move,sf_base.group_quality_director,1,1,0,0 + + diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index 29a9be13..d2e97272 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -166,20 +166,20 @@ class ResPartnerToSale(models.Model): @api.constrains('name') def _check_name(self): - obj = self.sudo().search([('name', '=', self.name), ('id', '!=', self.id)]) + obj = self.sudo().search([('name', '=', self.name), ('id', '!=', self.id), ('active', '=', True)]) if obj: raise UserError('该名称已存在,请重新输入') @api.constrains('vat') def _check_vat(self): - obj = self.sudo().search([('vat', '=', self.vat), ('id', '!=', self.id)]) + obj = self.sudo().search([('vat', '=', self.vat), ('id', '!=', self.id), ('active', '=', True)]) if obj: raise UserError('该税ID已存在,请重新输入') @api.constrains('email') def _check_email(self): if self.customer_rank > 0: - obj = self.sudo().search([('email', '=', self.email), ('id', '!=', self.id)]) + obj = self.sudo().search([('email', '=', self.email), ('id', '!=', self.id), ('active', '=', True)]) if obj: raise UserError('该邮箱已存在,请重新输入') @@ -197,7 +197,7 @@ class ResPartnerToSale(models.Model): else: domain = [('id', '=', False)] return self._search(domain, limit=limit, access_rights_uid=name_get_uid) - elif self._context.get('is_supplier'): + elif self._context.get('is_supplier') or self.env.user.has_group('sf_base.group_purchase_director'): if self.env.user.has_group('sf_base.group_purchase_director'): domain = [('supplier_rank', '>', 0)] elif self.env.user.has_group('sf_base.group_purchase'): @@ -240,7 +240,7 @@ class ResUserToSale(models.Model): return self._search(domain, limit=limit, access_rights_uid=name_get_uid) elif self._context.get('supplier_rank'): if self.env.user.has_group('sf_base.group_purchase_director'): - domain = [('supplier_rank', '>', 0)] + domain = [] elif self.env.user.has_group('sf_base.group_purchase'): if self.id != self.env.user.id: domain = [('id', '=', self.id)] diff --git a/sf_sale/security/ir.model.access.csv b/sf_sale/security/ir.model.access.csv index 3f9eee1f..9f2223d0 100644 --- a/sf_sale/security/ir.model.access.csv +++ b/sf_sale/security/ir.model.access.csv @@ -37,16 +37,16 @@ access_stock_move_group_purchase,stock_move_group_purchase,stock.model_stock_mov access_stock_move_group_purchase_director,stock_move_group_purchase_director,stock.model_stock_move,sf_base.group_purchase_director,1,0,0,0 access_stock_warehouse_orderpoint_group_sale_salemanager,stock_warehouse_orderpoint_group_sale_salemanager,stock.model_stock_warehouse_orderpoint,sf_base.group_sale_salemanager,1,0,0,0 access_stock_warehouse_orderpoint_group_sale_director,stock_warehouse_orderpoint_group_sale_director,stock.model_stock_warehouse_orderpoint,sf_base.group_sale_director,1,0,0,0 -access_stock_warehouse_orderpoint_group_purchase,stock_warehouse_orderpoint_group_purchase,stock.model_stock_warehouse_orderpoint,sf_base.group_purchase,1,0,0,0 -access_stock_warehouse_orderpoint_group_purchase_director,stock_warehouse_orderpoint_group_purchase_director,stock.model_stock_warehouse_orderpoint,sf_base.group_purchase_director,1,0,0,0 +access_stock_warehouse_orderpoint_group_purchase,stock_warehouse_orderpoint_group_purchase,stock.model_stock_warehouse_orderpoint,sf_base.group_purchase,1,1,0,0 +access_stock_warehouse_orderpoint_group_purchase_director,stock_warehouse_orderpoint_group_purchase_director,stock.model_stock_warehouse_orderpoint,sf_base.group_purchase_director,1,1,0,0 access_uom_uom_group_sale_salemanager,uom_uom_group_sale_salemanager,uom.model_uom_uom,sf_base.group_sale_salemanager,1,0,0,0 access_uom_uom_group_sale_director,uom_uom_group_sale_director,uom.model_uom_uom,sf_base.group_sale_director,1,1,1,0 access_uom_uom_group_purchase,uom_uom_group_purchase,uom.model_uom_uom,sf_base.group_purchase,1,0,0,0 -access_uom_uom_group_purchase_director,uom_uom_group_purchase_director,uom.model_uom_uom,sf_base.group_purchase_director,1,0,0,0 +access_uom_uom_group_purchase_director,uom_uom_group_purchase_director,uom.model_uom_uom,sf_base.group_purchase_director,1,1,1,0 access_uom_category_group_sale_salemanager,uom_category_group_sale_salemanager,uom.model_uom_category,sf_base.group_sale_salemanager,1,0,0,0 access_uom_category_group_sale_director,uom_category_group_sale_director,uom.model_uom_category,sf_base.group_sale_director,1,1,1,0 access_uom_category_group_purchase,uom_category_group_purchase,uom.model_uom_category,sf_base.group_purchase,1,0,0,0 -access_uom_category_group_purchase_director,uom_category_group_purchase_director,uom.model_uom_category,sf_base.group_purchase_director,1,0,0,0 +access_uom_category_group_purchase_director,uom_category_group_purchase_director,uom.model_uom_category,sf_base.group_purchase_director,1,1,1,0 access_sale_order_check_wizard_group_sale_salemanager,sale_order_check_wizard_group_sale_salemanager,model_sale_order_check_wizard,sf_base.group_sale_salemanager,1,1,1,0 access_sale_order_check_wizard_group_sale_director,sale_order_check_wizard_group_sale_director,model_sale_order_check_wizard,sf_base.group_sale_director,1,1,1,0 access_account_move_line_group_sale_salemanager,account_move_line_group_sale_salemanager,account.model_account_move_line,sf_base.group_sale_salemanager,1,1,1,0 @@ -81,5 +81,9 @@ access_sale_advance_payment_inv_group_sale_salemanager,sale_advance_payment_inv_ access_sale_advance_payment_inv_group_sale_director,sale_advance_payment_inv_group_sale_director,sale.model_sale_advance_payment_inv,sf_base.group_sale_director,1,1,1,0 access_sale_report_group_sale_salemanager,sale_report_group_sale_salemanager,sale.model_sale_report,sf_base.group_sale_salemanager,1,0,1,0 access_sale_report_group_sale_director,sale_report_group_sale_director,sale.model_sale_report,sf_base.group_sale_director,1,0,1,0 +access_product_supplierinfo_group_purchase_director,product.supplierinfo group_purchase_director,product.model_product_supplierinfo,sf_base.group_purchase_director,1,1,1,0 +access_product_category_group_purchase_director,product.category group_purchase_director,product.model_product_category,sf_base.group_purchase_director,1,1,1,0 + + diff --git a/sf_sale/views/sale_order_view.xml b/sf_sale/views/sale_order_view.xml index bfbf5520..247bbc75 100644 --- a/sf_sale/views/sale_order_view.xml +++ b/sf_sale/views/sale_order_view.xml @@ -54,6 +54,9 @@ sale.order + + +