Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/修改设备基础参数

This commit is contained in:
qihao.gong@jikimo.com
2023-07-18 10:47:43 +08:00
22 changed files with 2290 additions and 1419 deletions

View File

@@ -1,4 +1,2 @@
from . import models
from . import commons
from . import wizard

View File

@@ -18,8 +18,6 @@
'views/common_view.xml',
'views/fixture_view.xml',
'views/functional_fixture_view.xml',
'wizard/workpiece_clamping_wizard_view.xml',
'wizard/stock_removal_wizard_view.xml',
'views/menu_view.xml',
"views/tool_views.xml",
"views/tool_menu.xml",

View File

@@ -32,21 +32,18 @@ class FixtureModel(models.Model):
clamping_way = fields.Char(string="装夹方式")
port_type = fields.Char(string="接口类型")
model_file = fields.Binary(string="3D模型图")
length = fields.Char(string="长度[mm]")
width = fields.Char(string="宽度[mm]")
height = fields.Char(string="高度[mm]")
weight = fields.Char(string="重量[kg]")
clamp_workpiece_length_max = fields.Char(string="夹持工件长度MAX[mm]")
clamp_workpiece_width_max = fields.Char(string="夹持工件宽度MAX[mm]")
clamp_workpiece_height_max = fields.Char(string="夹持工件高度MAX[mm]")
clamp_workpiece_diameter_max = fields.Char(string="夹持工件直径MAX[mm]")
maximum_carrying_weight = fields.Char(string="最大承载重量[kg]")
maximum_clamping_force = fields.Char(string="最大夹持力[n]")
length = fields.Char(string="长度[mm]", size=6)
width = fields.Char(string="宽度[mm]", size=6)
height = fields.Char(string="高度[mm]", size=6)
weight = fields.Char(string="重量[kg]", size=4)
clamp_workpiece_length_max = fields.Char(string="夹持工件长度MAX[mm]", size=6)
clamp_workpiece_width_max = fields.Char(string="夹持工件宽度MAX[mm]", size=6)
clamp_workpiece_height_max = fields.Char(string="夹持工件高度MAX[mm]", size=6)
clamp_workpiece_diameter_max = fields.Char(string="夹持工件直径MAX[mm]", size=6)
maximum_carrying_weight = fields.Char(string="最大承载重量[kg]", size=4)
maximum_clamping_force = fields.Char(string="最大夹持力[n]", size=8)
materials_model_id = fields.Many2one('sf.materials.model', string="材料型号")
driving_way = fields.Char(string="驱动方式")
apply_machine_tool_type = fields.Char(string="适用机床型号")
apply_machine_tool_type_id = fields.Many2one('sf.machine_tool.type', string="适用机床型号")
through_hole_size = fields.Integer(string="过孔大小[mm]", size=6)
screw_size = fields.Integer(string="螺牙大小[mm]", size=6)

View File

@@ -24,8 +24,6 @@ access_sf_multi_mounting_type,sf_multi_mounting_type,model_sf_multi_mounting_typ
access_sf_fixture_model,sf_fixture_model,model_sf_fixture_model,base.group_user,1,1,1,1
access_sf_functional_fixture_type,sf_functional_fixture_type,model_sf_functional_fixture_type,base.group_user,1,1,1,1
access_sf_functional_fixture,sf_functional_fixture,model_sf_functional_fixture,base.group_user,1,1,1,1
access_sf_workpiece_clamping_wizard,sf_workpiece_clamping_wizard,model_sf_workpiece_clamping_wizard,base.group_user,1,1,1,1
access_sf_stock_removal_wizard,sf_stock_removal_wizard,model_sf_stock_removal_wizard,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
24 access_sf_fixture_model sf_fixture_model model_sf_fixture_model base.group_user 1 1 1 1
25 access_sf_functional_fixture_type sf_functional_fixture_type model_sf_functional_fixture_type base.group_user 1 1 1 1
26 access_sf_functional_fixture sf_functional_fixture model_sf_functional_fixture base.group_user 1 1 1 1
access_sf_workpiece_clamping_wizard sf_workpiece_clamping_wizard model_sf_workpiece_clamping_wizard base.group_user 1 1 1 1
access_sf_stock_removal_wizard sf_stock_removal_wizard model_sf_stock_removal_wizard base.group_user 1 1 1 1
27
28
29

View File

@@ -239,7 +239,7 @@
attrs='{"invisible": [("fixture_material_type","!=",("转接板(锁板)托盘"))]}'/>
<field name="driving_way"
attrs='{"invisible": [("fixture_material_type","not in",("虎钳托盘","零点卡盘"))]}'/>
<field name="apply_machine_tool_type"
<field name="apply_machine_tool_type_id"
attrs='{"invisible": [("fixture_material_type","!=",("零点卡盘"))]}'/>
</group>
</group>

View File

@@ -1,4 +0,0 @@
# -*- coding: utf-8 -*-
from . import workpiece_clamping_wizard
from . import stock_removal_wizard

View File

@@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
import logging
_logger = logging.getLogger(__name__)
class StockRemovalWizard(models.Model):
_name = 'sf.stock.removal.wizard'
_description = "出库"
code = fields.Char(string="功能夹具编码", size=25, required=True)
name = fields.Char(string="功能夹具名称", size=25, required=True)
type = fields.Char(string="功能夹具类型", required=True)
production_line = fields.Char(string="生产线", required=True)
machine_tool = fields.Many2one('sf.machine_tool', string="机床", required=True)
def submit(self):
return 1

View File

@@ -1,36 +0,0 @@
<openerp>
<data>
<record model="ir.ui.view" id="stock_removal_wizard_form_view">
<field name="name">sf.stock.removal.wizard.form.view</field>
<field name="model">sf.stock.removal.wizard</field>
<field name="arch" type="xml">
<form string="装夹">
<sheet>
<group>
<group>
<field name="code" string="功能夹具编码"></field>
<field name="type" string="类型"></field>
<field name="machine_tool" string="机台"></field>
</group>
<group>
<field name="name" string="功能夹具名称"></field>
<field name="production_line"></field>
</group>
</group>
<footer>
<button string="确定" name="submit" type="object" class="oe_highlight"/>
<button string="取消" class="btn btn-secondary" special="cancel"/>
</footer>
</sheet>
</form>
</field>
</record>
<record id="action_stock_removal_wizard" model="ir.actions.act_window">
<field name="name">出库</field>
<field name="res_model">sf.stock.removal.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</data>
</openerp>

View File

@@ -1,56 +0,0 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
import logging
_logger = logging.getLogger(__name__)
class WorkpieceClampingWizard(models.Model):
_name = 'sf.workpiece.clamping.wizard'
_description = "工件装夹"
# 以下为坯料(工件)申请信息
apply_code = fields.Char(string="申请坯料编码", size=25, required=True)
apply_name = fields.Char(string="申请坯料名称", size=25, required=True)
material_id = fields.Many2one('sf.production.materials', string="坯料材料", required=True)
apply_width = fields.Float(string="申请宽度", required=True)
apply_length = fields.Float(string="申请长度", required=True)
apply_height = fields.Float(string="申请高度", required=True)
apply_weight = fields.Float(string="申请重量", required=True)
apply_diameter = fields.Float(string="申请直径", required=True)
surface_accuracy = fields.Char(string="表面精度", required=True)
# 以下为坯料(工件)装夹信息
chuck_name = fields.Char(string="卡盘名称", required=True)
chuck_brand_id = fields.Many2one('sf.machine.brand', string="卡盘品牌", required=True)
chuck_type_id = fields.Char(string="卡盘类型", required=True)
chuck_model_id = fields.Char(string="卡盘型号", required=True)
tray_name = fields.Char(string="托盘名称", required=True)
tray_brand_id = fields.Many2one('sf.machine.brand', string="托盘品牌", required=True)
tray_type_id = fields.Char(string="托盘类型", required=True)
tray_model_id = fields.Char(string="托盘型号", required=True)
real_code = fields.Char(string="真实坯料编码", size=25, required=True)
real_name = fields.Char(string="真实坯料名称", size=25, required=True)
real_width = fields.Float(string="真实宽度", required=True)
real_length = fields.Float(string="真实长度", required=True)
real_height = fields.Float(string="真实高度", required=True)
real_diameter = fields.Float(string="真实直径", required=True)
# 以下为坯料(工件)预调信息
# hole_site = fields.Char(string="孔位", required=True)
# curve = fields.Char(string="曲线", required=True)
# straight_line = fields.Char(string="直线", required=True)
# x_axis = fields.Float(string="X轴", required=True)
# y_axis = fields.Float(string="Y轴", required=True)
# z_axis = fields.Float(string="Z轴", required=True)
# tool_radius = fields.Float(string="刀具半径", required=True)
# tool_length = fields.Float(string="刀具长度", required=True)
# tool_offset_point = fields.Float(string="刀具偏移点", required=True)
# tool_compensation_value = fields.Float(string="刀具补偿值", required=True)
# cutting_spindle_speed = fields.Float(string="切削主轴转速", required=True)
# cutting_feed_rate = fields.Float(string="切削进给速度", required=True)
# depth_of_cutting = fields.Float(string="切削深度", required=True)
# cutting_direction = fields.Char(string="切削方向", required=True)
preset_program_information = fields.Char(string="预调程序信息", required=True)
def submit(self):
return 1

View File

@@ -1,87 +0,0 @@
<openerp>
<data>
<record model="ir.ui.view" id="workpiece_clamping_wizard_form_view">
<field name="name">sf.workpiece.clamping.wizard.form.view</field>
<field name="model">sf.workpiece.clamping.wizard</field>
<field name="arch" type="xml">
<form string="装夹">
<sheet>
<group string="坯料(工件)申请信息">
<group>
<field name="apply_code" string="坯料编码"></field>
<field name="material_id" string="坯料材质"></field>
</group>
<group>
<field name="apply_name" string="坯料名称"></field>
<label for="apply_length" string="尺寸[mm]"/>
<div class="o_address_format">
<label for="apply_length" string="长"/>
<field name="apply_length" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="apply_width" string="宽"/>
<field name="apply_width" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="apply_height" string="高"/>
<field name="apply_height" class="o_address_zip"
options="{'format': false}"/>
</div>
<field name="apply_diameter" string="直径[mm]"></field>
</group>
</group>
<group string="坯料(工件)装夹信息">
<group string="卡盘">
<field name="chuck_type_id"></field>
<field name="chuck_name"></field>
<field name="chuck_brand_id"></field>
<field name="chuck_model_id"></field>
</group>
<group string="托盘">
<field name="tray_type_id"></field>
<field name="tray_name"></field>
<field name="tray_brand_id"></field>
<field name="tray_model_id"></field>
</group>
<group string="坯料">
<field name="real_code" string="坯料编码"></field>
<field name="real_name" string="坯料名称"></field>
<label for="real_length" string="尺寸[mm]"/>
<div class="o_address_format">
<label for="real_length" string="长"/>
<field name="real_length" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="real_width" string="宽"/>
<field name="real_width" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<label for="real_height" string="高"/>
<field name="real_height" class="o_address_zip"
options="{'format': false}"/>
</div>
<field name="real_diameter" string="直径[mm]"></field>
</group>
</group>
<group>
<group>
<field name="preset_program_information"></field>
</group>
</group>
<footer>
<button string="确定" name="submit" type="object" class="oe_highlight"/>
<button string="取消" class="btn btn-secondary" special="cancel"/>
</footer>
</sheet>
</form>
</field>
</record>
<record id="action_workpiece_clamping_wizard" model="ir.actions.act_window">
<field name="name">装夹</field>
<field name="res_model">sf.workpiece.clamping.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</data>
</openerp>

View File

@@ -34,12 +34,6 @@ class Sf_Bf_Connect(http.Controller):
logging.info('get_bfm_process_or===================================:%s' % order_id.name)
aa.default_code = kw['order_number']
logging.info('get_bfm_process_order_listaaaaaaaaaaaaaaaaaaaaaaaaaaaa================:%s' % aa.default_code)
# # 给stock.picking的default_code字段赋值
# bb = request.env['stock.picking'].sudo().search([('origin', '=', order_id.name)])
# logging.info('get_bfm_process_or===================================:%s' % order_id.name)
# bb.default_code = kw['order_number']
# logging.info('get_bfm_process_order_listbbbbbbbbbbbbbbbbbbbbbbbbbbbb================:%s' % bb.default_code)
for item in bfm_process_order_list:
product = request.env['product.template'].sudo().product_create(product_id, item, order_id,
kw['order_number'], i)

View File

@@ -15,7 +15,6 @@
'data': [
'data/product_data.xml',
'data/uom_data.xml',
# 'data/cutting_tool_data.xml',
'views/product_template_view.xml',
'views/product_workorder.xml'
],

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="product_category_cutting_tool_sf" model="product.category">
<field name="name">刀具</field>
<field name="type">刀具</field>
</record>
<record id="product_category_clamp_sf" model="product.category">
<field name="name">夹具</field>
<field name="type">夹具</field>
</record>
</data>
</odoo>

View File

@@ -79,7 +79,7 @@
<page string="刀具物料参数" attrs="{'invisible': [('categ_type', '!=', '刀具')]}">
<group>
<!--整体式刀具-->
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '整体式刀具')]}">
<group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '整体式刀具')]}">
<field name="brand_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')],'required': [('cutting_tool_type', '=', '整体式刀具')]}"/>
<field name="cutting_tool_total_length"/>
@@ -91,10 +91,9 @@
<field name="cutting_tool_blade_number"
attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')]}"/>
</group>
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '整体式刀具')]}">
<group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '整体式刀具')]}">
<field name="cutting_tool_material_model_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')],'required': [('cutting_tool_type', '=', '整体式刀具')]}"/>
/>
<field name="cutting_tool_front_angle"
attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')]}"/>
<field name="cutting_tool_rear_angle"
@@ -109,7 +108,7 @@
attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')]}"/>
</group>
<!--刀片-->
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀片')]}">
<group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀片')]}">
<field name="brand_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'required': [('cutting_tool_type', '=', '刀片')]}"/>
<field name="cutting_tool_top_angle"/>
@@ -123,7 +122,7 @@
<field name="cutting_tool_working_hardness"
attrs="{'required': [('cutting_tool_type', '=', '刀片')]}"/>
</group>
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀片')]}">
<group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀片')]}">
<field name="cutting_tool_material_model_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')],'required': [('cutting_tool_type', '=', '刀片')]}"/>
<label for="tool_length" string="尺寸[mm]"/>
@@ -140,14 +139,12 @@
<field name="cutting_tool_radius"/>
<field name="cutting_tool_nut"
attrs="{'invisible': [('cutting_tool_type', '!=', '刀片')]}"/>
<field name="cutting_tool_cutter_bar_ids" widget="many2many_tags"
attrs="{'required': [('cutting_tool_type', '=', '刀片')]}"/>
<field name="cutting_tool_cutter_pad_ids" widget="many2many_tags"
attrs="{'required': [('cutting_tool_type', '=', '刀片')]}"/>
<field name="cutting_tool_cutter_bar_ids" widget="many2many_tags"/>
<field name="cutting_tool_cutter_pad_ids" widget="many2many_tags"/>
</group>
<!--刀杆/刀盘-->
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}">
<group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}">
<field name="brand_id"
attrs="{'invisible': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])],'required': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}"/>
<field name="cutting_tool_c_diameter"/>
@@ -160,7 +157,7 @@
attrs="{'invisible': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}"/>
</group>
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}">
<group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}">
<field name="cutting_tool_material_model_id"
attrs="{'invisible': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])],'required': [('cutting_tool_type', 'not in', ['刀杆','刀盘'])]}"/>
<field name="cutting_tool_rounded_corner"/>
@@ -170,7 +167,7 @@
<field name="cutting_tool_hardness"/>
</group>
<!--刀柄-->
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀柄')]}">
<group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀柄')]}">
<field name="brand_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'required': [('cutting_tool_type', '=', '刀柄')]}"/>
<field name="cutting_tool_handle_length"/>
@@ -185,7 +182,7 @@
<field name="cutting_tool_chuck_model_ids" widget="many2many_tags"
attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'required': [('cutting_tool_type', '=', '刀柄')]}"/>
</group>
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀柄')]}">
<group attrs="{'invisible':['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '刀柄')]}">
<field name="cutting_tool_material_model_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '刀柄')],'required': [('cutting_tool_type', '=', '刀柄')]}"/>
<field name="cutting_tool_detection_accuracy"/>
@@ -193,7 +190,7 @@
<field name="cutting_tool_standard_speed"/>
</group>
<!--夹头-->
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '夹头')]}">
<group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '夹头')]}">
<field name="brand_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '夹头')],'required': [('cutting_tool_type', '=', '夹头')]}"/>
<field name="cutting_tool_outer_diameter"/>
@@ -206,7 +203,7 @@
<field name="cutting_tool_handle_model_ids" widget="many2many_tags"
attrs="{'invisible': [('cutting_tool_type', '!=', '夹头')]}"/>
</group>
<group attrs="{'invisible': ['|',('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '夹头')]}">
<group attrs="{'invisible': ['|','|',('cutting_tool_model_id','=',False),('categ_type', '!=', '刀具'),('cutting_tool_type', '!=', '夹头')]}">
<field name="cutting_tool_material_model_id"
attrs="{'invisible': [('cutting_tool_type', '!=', '夹头')],'required': [('cutting_tool_type', '=', '夹头')]}"/>
<field name="tool_height" string="高度[mm]"
@@ -217,30 +214,29 @@
</page>
<page string="夹具物料参数" attrs="{'invisible': [('categ_type', '!=', '夹具')]}">
<group>
<group>
<group attrs='{"invisible": ["|",("fixture_model_id", "=", False),("fixture_material_type","not in",("气动托盘","转接板(锁板)托盘","磁吸托盘","虎钳托盘","零点卡盘"))]}'>
<field name="brand_id"/>
<field name="fixture_multi_mounting_type_id"/>
</group>
<group>
<!-- <field name="upload_model_file" widget="many2many_binary"/>-->
<field name="fixture_model_file" widget="Viewer3D" string="模型" readonly="1"
force_save="1"
attrs="{'invisible': [('fixture_model_file', '=', False)]}"/>
</group>
</group>
<group string="参数"
attrs='{"invisible": [("fixture_material_type","not in",("气动托盘","转接板(锁板)托盘","磁吸托盘","虎钳托盘","零点卡盘"))]}'>
attrs='{"invisible": ["|",("fixture_model_id", "=", False),("fixture_material_type","not in",("气动托盘","转接板(锁板)托盘","磁吸托盘","虎钳托盘","零点卡盘"))]}'>
<group>
<label for="tool_length" string="尺寸[mm]"/>
<div class="o_address_format">
<label for="tool_length" string="长"/>
<field name="tool_length" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<!-- <span>&amp;nbsp;</span>-->
<label for="tool_width" string="宽"/>
<field name="tool_width" class="o_address_zip"
options="{'format': false}"/>
<span>&amp;nbsp;</span>
<!-- <span>&amp;nbsp;</span>-->
<label for="tool_height" string="高"/>
<field name="tool_height" class="o_address_zip"
options="{'format': false}"/>
@@ -254,12 +250,12 @@
<field name="fixture_clamp_workpiece_length_max" class="o_address_zip"
options="{'format': false}"
attrs="{'required': [('fixture_material_type', 'in',('气动托盘','转接板(锁板)托盘','磁吸托盘','虎钳托盘'))]}"/>
<span>&amp;nbsp;</span>
<!-- <span>&amp;nbsp;</span>-->
<label for="fixture_clamp_workpiece_width_max" string="宽"/>
<field name="fixture_clamp_workpiece_width_max" class="o_address_zip"
options="{'format': false}"
attrs="{'required': [('fixture_material_type', 'in',('气动托盘','转接板(锁板)托盘','磁吸托盘','虎钳托盘'))]}"/>
<span>&amp;nbsp;</span>
<!-- <span>&amp;nbsp;</span>-->
<label for="fixture_clamp_workpiece_height_max" string="高"/>
<field name="fixture_clamp_workpiece_height_max" class="o_address_zip"
options="{'format': false}"
@@ -282,7 +278,7 @@
attrs='{"invisible": [("fixture_material_type","!=",("转接板(锁板)托盘"))]}'/>
<field name="fixture_driving_way"
attrs='{"invisible": [("fixture_material_type","not in",("虎钳托盘","零点卡盘"))]}'/>
<field name="fixture_apply_machine_tool_type"
<field name="fixture_apply_machine_tool_type_id"
attrs='{"invisible": [("fixture_material_type","!=",("零点卡盘"))]}'/>
</group>
</group>

View File

@@ -46,19 +46,19 @@ class ResProductMo(models.Model):
)
brand_id = fields.Many2one('sf.machine.brand', '品牌')
tool_length = fields.Float('长度L[mm]')
tool_width = fields.Float('宽度D[mm])')
tool_height = fields.Float('高度T[mm]')
tool_weight = fields.Float('重量[kg]')
tool_length = fields.Integer('长度L[mm]', size=6)
tool_width = fields.Integer('宽度D[mm])', size=6)
tool_height = fields.Integer('高度T[mm]', size=6)
tool_weight = fields.Float('重量[kg]', size=4)
# 整体式刀具参数
cutting_tool_total_length = fields.Float('总长度[mm]')
cutting_tool_shank_length = fields.Float('柄部长度[mm]')
cutting_tool_blade_length = fields.Float('刃部长度[mm]')
cutting_tool_diameter = fields.Float('直径[mm]')
cutting_tool_blade_number = fields.Integer('刃数')
cutting_tool_front_angle = fields.Float('前角(°)')
cutting_tool_rear_angle = fields.Float('后角(°)')
cutting_tool_main_included_angle = fields.Float('主偏角(°)')
cutting_tool_front_angle = fields.Float('前角[°]')
cutting_tool_rear_angle = fields.Float('后角[°]')
cutting_tool_main_included_angle = fields.Float('主偏角[°]')
cutting_tool_material_model_id = fields.Many2one('sf.materials.model', '材料型号')
cutting_tool_nut = fields.Float('配对螺母[mm]')
# 适用夹头型号可以多选
@@ -72,8 +72,8 @@ class ResProductMo(models.Model):
cutting_tool_scope = fields.Char('适用范围')
# 刀片参数
cutting_tool_top_angle = fields.Float('顶角(°)')
cutting_tool_r_angle = fields.Float('R角(°)')
cutting_tool_top_angle = fields.Float('顶角[°]')
cutting_tool_r_angle = fields.Float('R角[°]')
cutting_tool_working_hardness = fields.Char('加工硬度')
cutting_tool_cutter_bar_ids = fields.Many2many(
'sf.cutting.tool.model',
@@ -108,7 +108,7 @@ class ResProductMo(models.Model):
cutting_tool_screw = fields.Float('配备螺丝[mm]')
cutting_tool_accuracy_level = fields.Char('精度等级')
cutting_tool_rounded_corner = fields.Float('刀尖圆角半径[mm]')
cutting_tool_hardness = fields.Char('硬度(°)')
cutting_tool_hardness = fields.Char('硬度[°]')
# 刀柄参数
cutting_tool_handle_length = fields.Float('L[mm]')
cutting_tool_length1 = fields.Float('L1[mm]')
@@ -140,14 +140,14 @@ class ResProductMo(models.Model):
fixture_clamping_way = fields.Char(string="装夹方式")
fixture_port_type = fields.Char(string="接口类型")
fixture_model_file = fields.Binary(string="3D模型图")
fixture_clamp_workpiece_length_max = fields.Char(string="夹持工件长度MAX[mm]")
fixture_clamp_workpiece_width_max = fields.Char(string="夹持工件宽度MAX[mm]")
fixture_clamp_workpiece_height_max = fields.Char(string="夹持工件高度MAX[mm]")
fixture_clamp_workpiece_diameter_max = fields.Char(string="夹持工件直径MAX[mm]")
fixture_maximum_carrying_weight = fields.Char(string="最大承载重量[kg]")
fixture_maximum_clamping_force = fields.Char(string="最大夹持力[n]")
fixture_clamp_workpiece_length_max = fields.Integer(string="夹持工件长度MAX[mm]", size=6)
fixture_clamp_workpiece_width_max = fields.Integer(string="夹持工件宽度MAX[mm]", size=6)
fixture_clamp_workpiece_height_max = fields.Integer(string="夹持工件高度MAX[mm]", size=6)
fixture_clamp_workpiece_diameter_max = fields.Float(string="夹持工件直径MAX[mm]", digits=(16, 6))
fixture_maximum_carrying_weight = fields.Float(string="最大承载重量[kg]", digits=(16, 4))
fixture_maximum_clamping_force = fields.Integer(string="最大夹持力[n]", size=8)
fixture_driving_way = fields.Char(string="驱动方式")
fixture_apply_machine_tool_type = fields.Char(string="适用机床型号")
fixture_apply_machine_tool_type_id = fields.Many2one('sf.machine_tool.type', string="适用机床型号")
fixture_through_hole_size = fields.Integer(string="过孔大小[mm]", size=6)
fixture_screw_size = fields.Integer(string="螺牙大小[mm]", size=6)
@@ -163,6 +163,7 @@ class ResProductMo(models.Model):
def _onchange_categ_id(self):
if self.categ_type in ('刀具', '夹具'):
self.invoice_policy = 'delivery'
self.detailed_type = 'product'
self.sale_ok = False
@api.onchange('cutting_tool_material_id')
@@ -171,119 +172,40 @@ class ResProductMo(models.Model):
if item.cutting_tool_material_id.id != item.cutting_tool_model_id.mrs_cutting_tool_material_id.id:
item.cutting_tool_model_id = False
@api.onchange('fixture_material_id')
def _onchange_fixture_material_id(self):
for item in self:
if item.fixture_material_id.id != item.fixture_model_id.fixture_material_id.id:
item.fixture_model_id = False
@api.onchange('fixture_model_id')
def _onchange_fixture_model_id(self):
for item in self:
if self.cutting_tool_type == '整体式刀具':
item.brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
item.cutting_tool_total_length = item.cutting_tool_model_id.integral_total_length
item.cutting_tool_shank_length = item.cutting_tool_model_id.integral_shank_length
item.cutting_tool_blade_length = item.cutting_tool_model_id.integral_blade_length
item.cutting_tool_diameter = item.cutting_tool_model_id.integral_diameter
item.cutting_tool_nut = item.cutting_tool_model_id.integral_nut
item.cutting_tool_blade_number = item.cutting_tool_model_id.integral_blade_number
item.cutting_tool_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
item.cutting_tool_front_angle = item.cutting_tool_model_id.integral_front_angle
item.cutting_tool_rear_angle = item.cutting_tool_model_id.integral_rear_angle
item.cutting_tool_main_included_angle = item.cutting_tool_model_id.integral_main_included_angle
item.cutting_tool_chuck_model_ids = self._get_ids(
item.cutting_tool_model_id.mrs_cutting_tool_model_handle_chuck_model_ids)
item.cutting_tool_scope = item.cutting_tool_model_id.integral_scope
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
elif self.cutting_tool_type == '刀片':
item.brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
item.cutting_tool_top_angle = item.cutting_tool_model_id.blade_top_angle
item.cutting_tool_front_angle = item.cutting_tool_model_id.blade_front_angle
item.cutting_tool_rear_angle = item.cutting_tool_model_id.blade_rear_angle
item.cutting_tool_main_included_angle = item.cutting_tool_model_id.blade_main_included_angle
item.cutting_tool_r_angle = item.cutting_tool_model_id.blade_r_angle
item.cutting_tool_working_hardness = item.cutting_tool_model_id.blade_hardness
item.cutting_tool_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
item.tool_length = item.cutting_tool_model_id.blade_length
item.tool_width = item.cutting_tool_model_id.blade_width
item.tool_height = item.cutting_tool_model_id.blade_height
item.cutting_tool_radius = item.cutting_tool_model_id.blade_radius
item.cutting_tool_nut = item.cutting_tool_model_id.blade_nut
item.cutting_tool_cutter_bar_ids = self._get_ids(
item.cutting_tool_model_id.mrs_cutting_tool_model_blade_cutter_bar_ids)
item.cutting_tool_cutter_pad_ids = self._get_ids(
item.cutting_tool_model_id.mrs_cutting_tool_model_blade_cutter_pad_ids)
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
elif self.cutting_tool_type == '刀杆':
item.brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
item.cutting_tool_c_diameter = item.cutting_tool_model_id.bar_c_diameter
item.cutting_tool_d_diameter = item.cutting_tool_model_id.bar_d_diameter
item.cutting_tool_l_total_length = item.cutting_tool_model_id.bar_total_length
item.cutting_tool_wrench = item.cutting_tool_model_id.bar_wrench
item.cutting_tool_screw = item.cutting_tool_model_id.bar_screw
item.cutting_tool_blade_ids = self._get_ids(
item.cutting_tool_model_id.mrs_cutting_tool_model_pad_blade_ids)
item.cutting_tool_scope = item.cutting_tool_model_id.bar_scope
item.cutting_tool_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
item.cutting_tool_rounded_corner = item.cutting_tool_model_id.bar_radius
item.cutting_tool_accuracy_level = item.cutting_tool_model_id.bar_accuracy
item.cutting_tool_blade_number = item.cutting_tool_model_id.bar_blade_number
item.cutting_tool_hardness = item.cutting_tool_model_id.bar_hardness
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
elif self.cutting_tool_type == '刀盘':
item.brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
item.cutting_tool_c_diameter = item.cutting_tool_model_id.pad_c_diameter
item.cutting_tool_d_diameter = item.cutting_tool_model_id.pad_d_diameter
item.cutting_tool_l_total_length = item.cutting_tool_model_id.pad_total_length
item.cutting_tool_wrench = item.cutting_tool_model_id.pad_wrench
item.cutting_tool_screw = item.cutting_tool_model_id.pad_screw
item.cutting_tool_blade_ids = self._get_ids(
item.cutting_tool_model_id.mrs_cutting_tool_model_pad_blade_ids)
item.cutting_tool_scope = item.cutting_tool_model_id.pad_scope
item.cutting_tool_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
item.cutting_tool_rounded_corner = item.cutting_tool_model_id.pad_radius
item.cutting_tool_accuracy_level = item.cutting_tool_model_id.pad_accuracy
item.cutting_tool_blade_number = item.cutting_tool_model_id.pad_blade_number
item.cutting_tool_hardness = item.cutting_tool_model_id.pad_hardness
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
elif self.cutting_tool_type == '刀柄':
item.brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
item.cutting_tool_handle_length = item.cutting_tool_model_id.handle_length
item.cutting_tool_length1 = item.cutting_tool_model_id.handle_length
item.cutting_tool_diameter1 = item.cutting_tool_model_id.handle_diameter
item.cutting_tool_body_accuracy = item.cutting_tool_model_id.handle_body_accuracy
item.cutting_tool_nut = item.cutting_tool_model_id.handle_nut
item.cutting_tool_clamping_range = item.cutting_tool_model_id.handle_clamping_range
item.tool_weight = item.cutting_tool_model_id.handle_weight
item.cutting_tool_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
item.cutting_tool_chuck_model_ids = self._get_ids(
item.cutting_tool_model_id.mrs_cutting_tool_model_handle_chuck_model_ids)
item.cutting_tool_detection_accuracy = item.cutting_tool_model_id.handle_detection_accuracy
item.cutting_tool_detection_hardness = item.cutting_tool_model_id.handle_detection_hardness
item.cutting_tool_standard_speed = item.cutting_tool_model_id.handle_standard_speed
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
elif self.cutting_tool_type == '夹头':
item.brand_id = item.cutting_tool_model_id.mrs_machine_brand_id.id
item.cutting_tool_outer_diameter = item.cutting_tool_model_id.chuck_diameter
item.cutting_tool_inner_diameter = item.cutting_tool_model_id.chuck_inner_diameter
item.cutting_tool_accuracy = item.cutting_tool_model_id.chuck_accuracy
item.cutting_tool_nut = item.cutting_tool_model_id.chuck_nut
item.cutting_tool_clamping_range = item.cutting_tool_model_id.chuck_clamping_range
item.cutting_tool_handle_model_ids = self._get_ids(
item.cutting_tool_model_id.mrs_cutting_tool_model_chuck_handle_model_ids)
item.cutting_tool_material_model_id = item.cutting_tool_model_id.mrs_materials_model_id.id
item.tool_height = item.cutting_tool_model_id.chuck_height
item.cutting_tool_feature = item.cutting_tool_model_id.chuck_feature
item.image_1920 = '' if not item.cutting_tool_model_id.image else item.cutting_tool_model_id.image
else:
item.brand_id = False
item.cutting_tool_total_length = False
item.cutting_tool_shank_length = False
item.cutting_tool_blade_length = False
item.cutting_tool_diameter = False
item.cutting_tool_nut = False
item.cutting_tool_blade_number = False
item.cutting_tool_material_model_id = False
item.cutting_tool_front_angle = False
item.cutting_tool_rear_angle = False
item.cutting_tool_main_included_angle = False
item.cutting_tool_chuck_model_ids = False
item.cutting_tool_scope = False
if self.fixture_material_type in ['气动托盘', '转接板(锁板)托盘', '磁吸托盘', '虎钳托盘', '零点卡盘']:
item.brand_id = item.fixture_model_id.brand_id.id
item.fixture_multi_mounting_type_id = item.fixture_model_id.multi_mounting_type_id.id
item.fixture_model_file = item.fixture_model_id.model_file
item.tool_length = item.fixture_model_id.length
item.tool_width = item.fixture_model_id.width
item.tool_height = item.fixture_model_id.height
item.tool_weight = item.fixture_model_id.weight
item.materials_type_id = item.fixture_model_id.materials_model_id.id
item.fixture_maximum_carrying_weight = item.fixture_model_id.maximum_carrying_weight
item.fixture_maximum_clamping_force = item.fixture_model_id.maximum_clamping_force
if self.fixture_material_type in ['零点卡盘', '转接板(锁板)托盘']:
item.fixture_clamping_way = item.fixture_model_id.clamping_way
item.fixture_port_type = item.fixture_model_id.port_type
if self.fixture_material_type in ['气动托盘', '转接板(锁板)托盘', '磁吸托盘']:
item.fixture_driving_way = item.fixture_model_id.driving_way
if self.fixture_material_type in ['气动托盘', '磁吸托盘', '虎钳托盘', '零点卡盘']:
item.fixture_through_hole_size = item.fixture_model_id.through_hole_size
item.fixture_screw_size = item.fixture_model_id.screw_size
if self.fixture_material_type in ['气动托盘', '转接板(锁板)托盘', '磁吸托盘', '虎钳托盘']:
item.fixture_clamp_workpiece_length_max = item.fixture_model_id.clamp_workpiece_length_max
item.fixture_clamp_workpiece_width_max = item.fixture_model_id.clamp_workpiece_width_max
item.fixture_clamp_workpiece_height_max = item.fixture_model_id.clamp_workpiece_height_max
item.fixture_clamp_workpiece_diameter_max = item.fixture_model_id.clamp_workpiece_diameter_max
item.fixture_apply_machine_tool_type_id = item.fixture_model_id.apply_machine_tool_type_id.id
@api.onchange('cutting_tool_model_id')
def _onchange_cutting_tool_model_id(self):

View File

@@ -1561,7 +1561,8 @@ class SyncFixtureModel(models.Model):
"materials_model_id": self.env['sf.materials.model'].search(
[('materials_no', '=', item['materials_model_code'])]).id,
"driving_way": item['driving_way'],
"apply_machine_tool_type": item['apply_machine_tool_type'],
"apply_machine_tool_type_id": self.env['sf.machine_tool.type'].search(
[('code', '=', item['apply_machine_tool_type_code'])]).id,
"through_hole_size": item['through_hole_size'],
"screw_size": item['screw_size'],
})
@@ -1589,7 +1590,8 @@ class SyncFixtureModel(models.Model):
"materials_model_id": self.env['sf.materials.model'].search(
[('materials_no', '=', item['materials_model_code'])]).id,
"driving_way": item['driving_way'],
"apply_machine_tool_type": item['apply_machine_tool_type'],
"apply_machine_tool_type_id": self.env['sf.machine_tool.type'].search(
[('code', '=', item['apply_machine_tool_type_code'])]).id,
"through_hole_size": item['through_hole_size'],
"screw_size": item['screw_size'],
})
@@ -1639,7 +1641,8 @@ class SyncFixtureModel(models.Model):
"materials_model_id": self.env['sf.materials.model'].search(
[('materials_no', '=', item['materials_model_code'])]).id,
"driving_way": item['driving_way'],
"apply_machine_tool_type": item['apply_machine_tool_type'],
"apply_machine_tool_type_id": self.env['sf.machine_tool.type'].search(
[('code', '=', item['apply_machine_tool_type_code'])]).id,
"through_hole_size": item['through_hole_size'],
"screw_size": item['screw_size'],
})
@@ -1667,7 +1670,8 @@ class SyncFixtureModel(models.Model):
"materials_model_id": self.env['sf.materials.model'].search(
[('materials_no', '=', item['materials_model_code'])]).id,
"driving_way": item['driving_way'],
"apply_machine_tool_type": item['apply_machine_tool_type'],
"apply_machine_tool_type_id": self.env['sf.machine_tool.type'].search(
[('code', '=', item['apply_machine_tool_type_code'])]).id,
"through_hole_size": item['through_hole_size'],
"screw_size": item['screw_size'],
})

View File

@@ -6,7 +6,7 @@ class ProcedureEquipmentResourceSetting(models.Model):
_name = 'sf.procedure.equipment.resource.setting'
_description = '产线设备资源设置'
production_line_id = fields.Many2one('sf.production.line', string='生产线', required=True)
name = fields.Many2one('sf.production.line', string='生产线', required=True)
work_center_name_id = fields.Many2one('mrp.workcenter', string='工作中心名称')
equipment_code = fields.Char(string='机台号(原设备编码)', readonly=True, compute='_onchange_equipment_name_id')
equipment_name_id = fields.Many2one('maintenance.equipment',
@@ -49,7 +49,7 @@ class ProcedureEquipmentResourceSetting(models.Model):
@api.depends('working_calendar_id')
def _onchange_working_calendar_id(self):
for record in self:
record.working_shift_id = record.working_calendar_id.working_shift_id
record.working_shift_id = record.working_calendar_id.working_shift_ids

View File

@@ -1,21 +1,6 @@
from datetime import datetime, timedelta, date
import logging
from datetime import datetime, timedelta
from odoo import models, fields, api
import re
from odoo.exceptions import ValidationError
def time_H_selection():
return [('00', '00'), ('01', '01'), ('02', '02'), ('03', '03'), ('04', '04'), ('05', '05'),
('06', '06'), ('07', '07'), ('08', '08'), ('09', '09'), ('10', '10'), ('11', '11'),
('12', '12'), ('13', '13'), ('14', '14'), ('15', '15'), ('16', '16'), ('17', '17'),
('18', '18'), ('19', '19'), ('20', '20'), ('21', '21'), ('22', '22'), ('23', '23')]
def time_M_or_S_selection():
return [('00', '00'), ('05', '05'), ('10', '10'), ('15', '15'), ('20', '20'), ('25', '25'),
('30', '30'), ('35', '35'), ('40', '40'), ('45', '45'), ('50', '50'), ('55', '55')]
class WorkLogSetting(models.Model):
@@ -38,20 +23,15 @@ class WorkLogSetting(models.Model):
num = "%03d" % m
return num
code = fields.Char(string='序号', default=_get_code, readonly=True)
code = fields.Char(string='序号', default=_get_code)
name = fields.Char(string='工作日历名称', required=True, size=15, length=30)
start_time = fields.Char(string='日开始时间', readonly=True, compute='_compute_start_time')
start_time_H = fields.Selection(time_H_selection(), '', required=True)
start_time_M = fields.Selection(time_M_or_S_selection(), '', required=True)
end_time = fields.Char(string='日结束时间', readonly=True, compute='_compute_end_time')
end_time_H = fields.Selection(time_H_selection(), '', required=True)
end_time_M = fields.Selection(time_M_or_S_selection(), '', required=True)
working_shift_ids = fields.Many2many('sf.working.shift', string='班次')
start_time = fields.Datetime(string='日开始时间', readonly=True, compute='_compute_working_shift_ids')
end_time = fields.Datetime(string='日结束时间', readonly=True, compute='_compute_working_shift_ids')
duration = fields.Char(string='时长', readonly=True, compute='_compute_working_shift_ids')
duration = fields.Char(string='时长', readonly=True, compute='_compute_duration')
day_off_id = fields.Many2many('sf.day.off', string='休息日', required=True)
working_shift_id = fields.Many2many('sf.working.shift', string='班次')
day_off_ids = fields.Many2many('sf.day.off', string='休息日', required=True)
status = fields.Boolean(string='状态', default=True)
update_person = fields.Char(string='更新人', default=lambda self: self.env.user.name)
@@ -59,48 +39,28 @@ class WorkLogSetting(models.Model):
setting_to_calendar_ids = fields.One2many('sf.work.schedule.calendar', 'name_id', '工作日历')
# @api.model
# def create(self, vals):
# vals['setting_to_calendar_ids'] = [(4, child.id)]
# return super(WorkLogSetting, self).create(vals)
@api.depends('start_time_H', 'start_time_M')
def _compute_start_time(self):
@api.depends('working_shift_ids')
def _compute_working_shift_ids(self):
"""
设置输入日开始时间
根据所选班次自动生成开始时间和结束时间,同时计算出工作时长
:return:
"""
for record in self:
record.start_time = f"{record.start_time_H}:{record.start_time_M}:00"
if record:
for working_shift_id in record.working_shift_ids:
if not record.start_time:
record.start_time = working_shift_id.start_time
record.end_time = working_shift_id.end_time
else:
if (working_shift_id.start_time - record.start_time).total_seconds() < 0:
record.start_time = working_shift_id.start_time
if (working_shift_id.end_time - record.end_time).total_seconds() > 0:
record.end_time = working_shift_id.end_time
@api.depends('end_time_H', 'end_time_M')
def _compute_end_time(self):
"""
设置输入日结束时间
:return:
"""
for record in self:
record.end_time = f"{record.end_time_H}:{record.end_time_M}:00"
record.duration = record.end_time - record.start_time
@api.depends('start_time_H', 'start_time_M', 'end_time_H', 'end_time_M')
def _compute_duration(self):
"""
根据日开始时间和日结束时间计算每日工作时长
:return:
"""
for record in self:
st_h = float(record.start_time_H)
st_m = float(record.start_time_M)
end_h = float(record.end_time_H)
end_m = float(record.end_time_M)
# 日开始时间小于日结束时间
if st_h < end_h:
record.duration = str(round(end_h - st_h + (end_m - st_m) / 60, 2))
else:
record.duration = str(round(end_h - st_h + (end_m - st_m) / 60 + 24, 2))
# @api.onchange('day_off_id')
# def _onchange_day_off_id(self):
# @api.onchange('day_off_ids')
# def _onchange_day_off_ids(self):
# # 先删除之前创建的工作日历事件记录
# self.env['sf.work.schedule.calendar'].search([('calendar_code', '=', self.code)]).unlink()
#
@@ -152,6 +112,7 @@ class WorkLogSetting(models.Model):
创建记录时,生成工作日历
"""
record = super(WorkLogSetting, self).create(vals)
logging.info("工作日历设置【新建】记录时,创建工作日历记录!!!")
record.generate_work_calendar()
return record
@@ -162,6 +123,7 @@ class WorkLogSetting(models.Model):
# 先删除之前创建的工作日历事件记录
self.env['sf.work.schedule.calendar'].search([('calendar_code', '=', self.code)]).unlink()
result = super(WorkLogSetting, self).write(vals)
logging.info("工作日历设置【更新】记录时,创建工作日历记录!!!")
self.generate_work_calendar()
return result
@@ -169,14 +131,16 @@ class WorkLogSetting(models.Model):
"""
生成工作日历
"""
logging.info('开始创建工作日历记录')
self.ensure_one()
# start_date = date.today() # 开始日期
# end_date = start_date + timedelta(days=365) # 结束日期
# 获取本年第一天和最后一天
start_date = datetime.now().replace(month=1, day=1).date()
end_date = datetime.now().replace(month=12, day=31).date()
logging.info(f'start_date: {start_date} , end_date: {end_date}')
# 休息日列表
rest_days = self.day_off_id.mapped('name')
rest_days = self.day_off_ids.mapped('name')
for single_date in self.daterange(start_date, end_date):
is_workday = single_date.strftime("%A")
if is_workday in rest_days:
@@ -185,6 +149,8 @@ class WorkLogSetting(models.Model):
'name': '休息日',
'name_id': self.id,
'date_time': single_date})
logging.info('创建一条工作日历记录,休息时间: %s' % is_workday)
logging.info('工作日历记录创建完成')
@staticmethod
def daterange(start_date, end_date):

View File

@@ -11,8 +11,8 @@
<field name="start_time"/>
<field name="end_time"/>
<field name="duration"/>
<field name="day_off_id" widget="many2many_tags"/>
<field name="working_shift_id" widget="many2many_tags"/>
<field name="day_off_ids" widget="many2many_tags"/>
<field name="working_shift_ids" widget="many2many_tags"/>
<field name="status"/>
<field name="update_person"/>
<field name="update_time"/>
@@ -40,30 +40,20 @@
</group>
</group>
<group string="选择班次">
<field name="working_shift_id"/>
<field name="working_shift_ids"/>
</group>
<group string="工作时间">
<group>
<group>
<field name="start_time"/>
<field name="end_time"/>
</group>
<group>
<field name="start_time_H"/>
<field name="end_time_H"/>
</group>
<field name="start_time"/>
</group>
<group>
<group>
<field name="start_time_M"/>
<field name="end_time_M"/>
</group>
<field name="end_time"/>
</group>
</group>
<group>
<group>
<field name="duration"/>
<field name="day_off_id"
<field name="day_off_ids"
widget="many2many_tags"
options="{'no_create': True, 'no_quick_create': True}"/>
</group>
@@ -198,6 +188,7 @@
<field name="arch" type="xml">
<calendar string="工作日历" mode="year" date_start="date_time">
<field name="name"/>
<!-- <field name="monthly_rest_days" widget="char" position="right_bottom"/>-->
</calendar>
</field>
</record>
@@ -227,7 +218,7 @@
<field name="create_time"/>
<field name="status"/>
<field name="participate_in_scheduling"/>
<field name="production_line_id" invisible="True"/>
<field name="name" invisible="True"/>
</tree>
</field>
</record>
@@ -240,7 +231,7 @@
<sheet>
<group string="生产线">
<group>
<field name="production_line_id"/>
<field name="name"/>
</group>
</group>
<group string="工作中心信息">
@@ -296,7 +287,7 @@
<field name="status"/>
<field name="participate_in_scheduling"/>
<searchpanel>
<field name="production_line_id" icon="fa-building" enable_counters="1"/>
<field name="name" icon="fa-building" enable_counters="1"/>
</searchpanel>
</search>
</field>

File diff suppressed because it is too large Load Diff

View File

@@ -62,16 +62,16 @@ function makeMenus(env, menusData, fetchLoadMenus) {
return menusData[menuID];
},
getCurrentApp() {
if (!currentAppId) {
return;
}
var target_tag = '.o_navbar_apps_menu a.main_link[data-menu='+currentAppId+']'
$(target_tag).addClass('active');
if($(target_tag).hasClass('dropdown-btn')){
var ultag = $(target_tag).parent().find('.header-sub-menus')
$(ultag).addClass('show');
}
return this.getMenu(currentAppId);
// if (!currentAppId) {
// return;
// }
// var target_tag = '.o_navbar_apps_menu a.main_link[data-menu='+currentAppId+']'
// $(target_tag).addClass('active');
// if($(target_tag).hasClass('dropdown-btn')){
// var ultag = $(target_tag).parent().find('.header-sub-menus')
// $(ultag).addClass('show');
// }
// return this.getMenu(currentAppId);
},
getMenuAsTree(menuID) {
const menu = this.getMenu(menuID);

File diff suppressed because one or more lines are too long