Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/同步夹具型号Bug修复

This commit is contained in:
jinling.yang
2023-08-23 10:29:09 +08:00
7 changed files with 191 additions and 137 deletions

View File

@@ -22,11 +22,10 @@
'views/ftp_button.xml', 'views/ftp_button.xml',
'views/compensation.xml', 'views/compensation.xml',
# 'views/SfWorkOrderBarcodes.xml',
'views/SfWorkOrderBarcodes.xml',
'views/WorkCenterBarcodes.xml', 'views/WorkCenterBarcodes.xml',
'views/Stock_picking_Barcodes.xml', 'views/Stock_picking_Barcodes.xml',
'views/machine_monitor.xml', # 'views/machine_monitor.xml',
'views/machine_info_present.xml', 'views/machine_info_present.xml',
'views/delivery_record.xml', 'views/delivery_record.xml',
'views/res_config_settings_views.xml', 'views/res_config_settings_views.xml',

View File

@@ -13,6 +13,11 @@ from odoo.exceptions import ValidationError
from odoo.exceptions import UserError from odoo.exceptions import UserError
from odoo.addons.sf_machine_connect.models import py2opcua, ftp_operate from odoo.addons.sf_machine_connect.models import py2opcua, ftp_operate
import shutil
from io import BytesIO
from zipfile import ZipFile
from odoo.exceptions import MissingError
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
@@ -537,21 +542,69 @@ class WorkCenterBarcode(models.Model):
else: else:
return False return False
def cnc_file_download(self):
"""
一个下载当前cnc所有nc文件为一个zip包的功能
"""
self.ensure_one()
class CuttingTimeToolType(models.Model): # 如果没有附件,直接返回
_inherit = 'sf.cutting_tool.type' if not self.cnc_ids:
total_cut_time = fields.Char(string='总切削时长') return
predict_life_time = fields.Char(string='预估寿命')
# 只能看到未被占用的刀位,或者有提示说占没占用
tool_position = fields.Char(string='选择刀位')
# cnc_ids = fields.One2many(string='选择机床')
is_connect_tool_position = fields.Boolean(string='是否已绑定刀位', default=False)
def tool_connect_machine(self): # 处理第一个附件的文件名
pass first_attachment = self.cnc_ids[0].cnc_id
file_name = first_attachment.display_name.split('-')[0] + '.zip'
def tool_unconnect_machine(self): # 创建一个内存文件和一个zip文件
pass memory_file = BytesIO()
with ZipFile(memory_file, 'w') as zipf:
# 遍历需要下载的附件
for item in self.cnc_ids:
a = item.cnc_id
datas = base64.standard_b64decode(a.datas)
# 将nc文件写入zip文件
zipf.writestr(a.display_name, datas)
# 然后可以创建一个ir.attachment对象将生成的zip文件保存为一个新的附件
memory_file.seek(0)
output = base64.b64encode(memory_file.read())
memory_file.close()
attachment_data = {
'name': file_name,
'type': 'binary',
'res_model': self._name,
'res_id': self.id,
'datas': output
}
attachment = self.env['ir.attachment'].create(attachment_data)
# 返回附件的下载链接
download_url = '/web/content/%s?download=true' % attachment.id
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
return {
'type': 'ir.actions.act_url',
'url': str(base_url) + download_url,
'target': 'self',
}
# class CuttingTimeToolType(models.Model):
# _inherit = 'sf.cutting_tool.type'
# total_cut_time = fields.Char(string='总切削时长')
# predict_life_time = fields.Char(string='预估寿命')
# # 只能看到未被占用的刀位,或者有提示说占没占用
# tool_position = fields.Char(string='选择刀位')
# # cnc_ids = fields.One2many(string='选择机床')
# is_connect_tool_position = fields.Boolean(string='是否已绑定刀位', default=False)
#
# def tool_connect_machine(self):
# pass
#
# def tool_unconnect_machine(self):
# pass
class DeliveryRecord(models.Model): class DeliveryRecord(models.Model):
@@ -579,4 +632,3 @@ class DeliveryRecord(models.Model):
# return super().create(values) # return super().create(values)
# except: # except:
# raise Exception('b_purchase_order.py:create()') # raise Exception('b_purchase_order.py:create()')

View File

@@ -5,6 +5,9 @@
<field name="model">mrp.workorder</field> <field name="model">mrp.workorder</field>
<field name="inherit_id" ref="sf_manufacturing.view_mrp_production_workorder_tray_form_inherit_sf"/> <field name="inherit_id" ref="sf_manufacturing.view_mrp_production_workorder_tray_form_inherit_sf"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//header" position="inside">
<button string="程序下载" name="cnc_file_download" type="object" class="oe_highlight"/>
</xpath>
<xpath expr="//page//field[@name='cnc_ids']" position="before"> <xpath expr="//page//field[@name='cnc_ids']" position="before">
<group> <group>
<group> <group>

View File

@@ -8,7 +8,7 @@ class ProcedureEquipmentResourceSetting(models.Model):
name = 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='工作中心名称') work_center_name_id = fields.Many2one('mrp.workcenter', string='工作中心名称')
equipment_code = fields.Char(string='机台号(原设备编码)', readonly=True, compute='_onchange_equipment_name_id') equipment_code = fields.Char(string='机台号', readonly=True, compute='_onchange_equipment_name_id')
equipment_name_id = fields.Many2one('maintenance.equipment', equipment_name_id = fields.Many2one('maintenance.equipment',
string='设备名称', string='设备名称',
readonly=True, readonly=True,
@@ -41,9 +41,9 @@ class ProcedureEquipmentResourceSetting(models.Model):
@api.onchange('equipment_name_id') @api.onchange('equipment_name_id')
def _onchange_equipment_name_id(self): def _onchange_equipment_name_id(self):
for record in self: for record in self:
record.equipment_code = record.equipment_name_id.code, record.equipment_code = record.equipment_name_id.code
record.brand = record.equipment_name_id.brand_id.name, record.brand = record.equipment_name_id.brand_id.name
record.model = record.equipment_name_id.type_id.name, record.model = record.equipment_name_id.type_id.name
record.status = record.equipment_name_id.state record.status = record.equipment_name_id.state
@api.depends('working_calendar_id') @api.depends('working_calendar_id')

View File

@@ -26,14 +26,14 @@ class WorkLogSetting(models.Model):
code = fields.Char(string='序号', default=_get_code) code = fields.Char(string='序号', default=_get_code)
name = fields.Char(string='工作日历名称', required=True, size=15, length=30) name = fields.Char(string='工作日历名称', required=True, size=15, length=30)
working_shift_ids = fields.Many2many('sf.working.shift', string='班次') working_shift_ids = fields.Many2many('sf.working.shift', string='班次', required=True)
start_time = fields.Datetime(string='日开始时间', readonly=True, compute='_compute_working_shift_ids') start_time = fields.Datetime(string='日开始时间', readonly=True, compute='_compute_working_shift_ids')
end_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_working_shift_ids')
day_off_ids = fields.Many2many('sf.day.off', string='休息日', required=True) day_off_ids = fields.Many2many('sf.day.off', string='休息日', required=True)
status = fields.Boolean(string='状态', default=True) status = fields.Selection([('正常', '正常'), ('禁用', '禁用')], string='状态', default='正常')
update_person = fields.Char(string='更新人', default=lambda self: self.env.user.name) update_person = fields.Char(string='更新人', default=lambda self: self.env.user.name)
update_time = fields.Datetime(string='更新时间', default=lambda self: fields.Datetime.now()) update_time = fields.Datetime(string='更新时间', default=lambda self: fields.Datetime.now())

View File

@@ -7,20 +7,20 @@
sequence="599" sequence="599"
/> />
<menuitem id="menu_sf_work_log_setting"
name="工作日历设置"
parent="menu_sf_basic_setting"
action="sf_work_log_setting_act"
sequence="0"
/>
<menuitem id="menu_sf_procedure_equipment_resource_setting" <menuitem id="menu_sf_procedure_equipment_resource_setting"
name="产线设备资源设置" name="产线设备资源设置"
parent="menu_sf_basic_setting" parent="menu_sf_basic_setting"
action="sf_procedure_equipment_resource_setting_act" action="sf_procedure_equipment_resource_setting_act"
sequence="0"
/>
<menuitem id="menu_sf_work_log_setting"
name="工作日历设置"
parent="menu_sf_basic_setting"
action="sf_work_log_setting_act"
sequence="10" sequence="10"
/> />
<menuitem id="menu_sf_working_shift" <menuitem id="menu_sf_working_shift"
name="班次" name="班次"
parent="menu_sf_basic_setting" parent="menu_sf_basic_setting"

View File

@@ -5,14 +5,14 @@
<field name="name">工作日历设置</field> <field name="name">工作日历设置</field>
<field name="model">sf.work.log.setting</field> <field name="model">sf.work.log.setting</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree> <tree string="工作日历设置">
<field name="code"/> <field name="code"/>
<field name="name"/> <field name="name"/>
<field name="start_time"/>
<field name="end_time"/>
<field name="duration"/>
<field name="day_off_ids" widget="many2many_tags"/> <field name="day_off_ids" widget="many2many_tags"/>
<field name="working_shift_ids" widget="many2many_tags"/> <field name="working_shift_ids" widget="many2many_tags"/>
<field name="start_time" optional="hide"/>
<field name="end_time" optional="hide"/>
<field name="duration" optional="hide"/>
<field name="status"/> <field name="status"/>
<field name="update_person"/> <field name="update_person"/>
<field name="update_time"/> <field name="update_time"/>
@@ -30,38 +30,39 @@
<field name="model">sf.work.log.setting</field> <field name="model">sf.work.log.setting</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form> <form>
<header>
<button string="查看日历"
type="object"
name="open_work_schedule_calendar"
class="oe_highlight"
/>
<field name="status" widget="statusbar" statusbar_visible="正常,禁用"/>
</header>
<sheet string-="工作日历设置"> <sheet string-="工作日历设置">
<group string="基础信息"> <div class="oe_title">
<group> <h1>
<field name="name"/> <field name="name"/>
</group> </h1>
<group> </div>
<field name="code"/>
</group>
</group>
<group string="选择班次">
<field name="working_shift_ids"/>
</group>
<group string="工作时间">
<group>
<field name="start_time"/>
</group>
<group>
<field name="end_time"/>
</group>
</group>
<group> <group>
<group> <group>
<field name="duration"/> <field name="code"/>
<field name="day_off_ids" <field name="day_off_ids" widget="many2many_tags"
widget="many2many_tags"
options="{'no_create': True, 'no_quick_create': True}"/> options="{'no_create': True, 'no_quick_create': True}"/>
<field name="status"/>
</group>
<group string="工作时间">
<field name="start_time"/>
<field name="end_time"/>
<field name="duration"/>
</group> </group>
</group> </group>
<group string="日历状态"> <notebook>
<field name="status"/> <page string="选择班次">
<field name="setting_to_calendar_ids" invisible="True"/> <field name="working_shift_ids"/>
</group> </page>
</notebook>
<field name="setting_to_calendar_ids" invisible="True"/>
</sheet> </sheet>
</form> </form>
</field> </field>
@@ -79,7 +80,7 @@
<field name="name">休息日</field> <field name="name">休息日</field>
<field name="model">sf.day.off</field> <field name="model">sf.day.off</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree> <tree string="休息日" editable="bottom" delete="0">
<field name="name"/> <field name="name"/>
</tree> </tree>
</field> </field>
@@ -88,7 +89,7 @@
<record id="sf_day_off_act" model="ir.actions.act_window"> <record id="sf_day_off_act" model="ir.actions.act_window">
<field name="name">休息日</field> <field name="name">休息日</field>
<field name="res_model">sf.day.off</field> <field name="res_model">sf.day.off</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree</field>
</record> </record>
@@ -97,7 +98,7 @@
<field name="name">班次</field> <field name="name">班次</field>
<field name="model">sf.working.shift</field> <field name="model">sf.working.shift</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree> <tree string="班次" editable="bottom" >
<field name="code"/> <field name="code"/>
<field name="name"/> <field name="name"/>
<field name="start_time"/> <field name="start_time"/>
@@ -107,32 +108,32 @@
</field> </field>
</record> </record>
<record id="sf_working_shift_form" model="ir.ui.view"> <!-- <record id="sf_working_shift_form" model="ir.ui.view">-->
<field name="name">班次</field> <!-- <field name="name">班次</field>-->
<field name="model">sf.working.shift</field> <!-- <field name="model">sf.working.shift</field>-->
<field name="arch" type="xml"> <!-- <field name="arch" type="xml">-->
<form> <!-- <form>-->
<sheet> <!-- <sheet>-->
<group> <!-- <group>-->
<group> <!-- <group>-->
<field name="name"/> <!-- <field name="name"/>-->
<field name="start_time"/> <!-- <field name="start_time"/>-->
<field name="end_time"/> <!-- <field name="end_time"/>-->
<field name="remark"/> <!-- <field name="remark"/>-->
</group> <!-- </group>-->
<group> <!-- <group>-->
<field name="code"/> <!-- <field name="code"/>-->
</group> <!-- </group>-->
</group> <!-- </group>-->
</sheet> <!-- </sheet>-->
</form> <!-- </form>-->
</field> <!-- </field>-->
</record> <!-- </record>-->
<record id="sf_working_shift_act" model="ir.actions.act_window"> <record id="sf_working_shift_act" model="ir.actions.act_window">
<field name="name">班次</field> <field name="name">班次</field>
<field name="res_model">sf.working.shift</field> <field name="res_model">sf.working.shift</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree</field>
</record> </record>
@@ -141,34 +142,35 @@
<field name="name">工作日历</field> <field name="name">工作日历</field>
<field name="model">sf.work.schedule.calendar</field> <field name="model">sf.work.schedule.calendar</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree> <tree string="工作日历" editable="bottom">
<field name="name_id" invisible="True"/> <field name="calendar_code"/>
<field name="name"/> <field name="name"/>
<field name="name_id"/>
<field name="date_time"/> <field name="date_time"/>
</tree> </tree>
</field> </field>
</record> </record>
<record id="sf_work_schedule_calendar_form" model="ir.ui.view"> <!-- <record id="sf_work_schedule_calendar_form" model="ir.ui.view">-->
<field name="name">工作日历</field> <!-- <field name="name">工作日历</field>-->
<field name="model">sf.work.schedule.calendar</field> <!-- <field name="model">sf.work.schedule.calendar</field>-->
<field name="arch" type="xml"> <!-- <field name="arch" type="xml">-->
<form> <!-- <form>-->
<sheet> <!-- <sheet>-->
<group string="日历基本信息"> <!-- <group string="日历基本信息">-->
<group> <!-- <group>-->
<field name="name"/> <!-- <field name="name"/>-->
<field name="date_time"/> <!-- <field name="date_time"/>-->
</group> <!-- </group>-->
<group> <!-- <group>-->
<field name="name_id"/> <!-- <field name="name_id"/>-->
<field name="calendar_code"/> <!-- <field name="calendar_code"/>-->
</group> <!-- </group>-->
</group> <!-- </group>-->
</sheet> <!-- </sheet>-->
</form> <!-- </form>-->
</field> <!-- </field>-->
</record> <!-- </record>-->
<record id="sf_work_schedule_calendar_search" model="ir.ui.view"> <record id="sf_work_schedule_calendar_search" model="ir.ui.view">
<field name="name">工作日历</field> <field name="name">工作日历</field>
@@ -196,7 +198,7 @@
<record id="sf_work_schedule_calendar_act" model="ir.actions.act_window"> <record id="sf_work_schedule_calendar_act" model="ir.actions.act_window">
<field name="name">工作日历</field> <field name="name">工作日历</field>
<field name="res_model">sf.work.schedule.calendar</field> <field name="res_model">sf.work.schedule.calendar</field>
<field name="view_mode">calendar,search,tree,form</field> <field name="view_mode">calendar,search,tree</field>
</record> </record>
@@ -207,15 +209,15 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="产线设备资源设置"> <tree string="产线设备资源设置">
<field name="work_center_name_id"/> <field name="work_center_name_id"/>
<field name="equipment_code"/>
<field name="equipment_name_id"/> <field name="equipment_name_id"/>
<field name="brand"/> <field name="equipment_code"/>
<field name="model"/> <field name="brand" optional="hide"/>
<field name="model" optional="hide"/>
<field name="working_procedure"/> <field name="working_procedure"/>
<field name="production_capacity"/> <field name="production_capacity" optional="hide"/>
<field name="working_calendar_id"/> <field name="working_calendar_id" optional="hide"/>
<field name="working_shift_id" widget="many2many_tags"/> <field name="working_shift_id" widget="many2many_tags" optional="hide"/>
<field name="create_time"/> <field name="create_time" optional="hide"/>
<field name="status"/> <field name="status"/>
<field name="participate_in_scheduling"/> <field name="participate_in_scheduling"/>
<field name="name" invisible="True"/> <field name="name" invisible="True"/>
@@ -229,41 +231,39 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="产线设备资源设置"> <form string="产线设备资源设置">
<sheet> <sheet>
<group string="生产线"> <div>
<group> <h1>
<field name="name"/> <field name="name"/>
</group> </h1>
</group> </div>
<group string="工作中心信息"> <group>
<group> <group>
<field name="work_center_name_id"/> <field name="work_center_name_id"/>
<field name="production_capacity"/> <field name="production_capacity"/>
</group>
<group>
<field name="working_procedure"/>
<field name="participate_in_scheduling"/>
</group>
</group>
<group string="设备信息">`
<group>
<field name="equipment_name_id"/>
<field name="brand"/>
<field name="status"/>
</group>
<group>
<field name="equipment_code" string="机台号"/>
<field name="model"/>
</group>
</group>
<group string="工作日历信息">
<group>
<field name="working_calendar_id"/> <field name="working_calendar_id"/>
<field name="create_time"/> <field name="create_time"/>
</group> </group>
<group> <group>
<field name="working_procedure"/>
<field name="participate_in_scheduling"/>
<field name="working_shift_id" widget="many2many_tags"/> <field name="working_shift_id" widget="many2many_tags"/>
</group> </group>
</group> </group>
<notebook>
<page string="设备信息">
<group>`
<group>
<field name="equipment_name_id"/>
<field name="brand"/>
<field name="status"/>
</group>
<group>
<field name="equipment_code" string="机台号"/>
<field name="model"/>
</group>
</group>
</page>
</notebook>
</sheet> </sheet>
</form> </form>
</field> </field>