sf1.0
This commit is contained in:
1
sf_machine_connect/__init__.py
Normal file
1
sf_machine_connect/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import models
|
||||
30
sf_machine_connect/__manifest__.py
Normal file
30
sf_machine_connect/__manifest__.py
Normal file
@@ -0,0 +1,30 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
{
|
||||
'name': 'sf_machine_connect',
|
||||
'version': '1.0',
|
||||
'summary': '智能工厂机床连接模块',
|
||||
'sequence': 10,
|
||||
'description': """
|
||||
这是一个模块
|
||||
====================
|
||||
""",
|
||||
'category': 'Tools',
|
||||
'depends': ['sf_base', 'sf_manufacturing', 'barcodes', ],
|
||||
'data': [
|
||||
# 定义权限组放在最上面
|
||||
# 权限组
|
||||
"security/ir.model.access.csv",
|
||||
'views/compensation.xml',
|
||||
'views/ftp_button.xml',
|
||||
'views/SfWorkOrderBarcodes.xml',
|
||||
'views/WorkCenterBarcodes.xml',
|
||||
'views/Stock_picking_Barcodes.xml',
|
||||
'views/machine_monitor.xml',
|
||||
],
|
||||
|
||||
'installable': True,
|
||||
'application': True,
|
||||
# 'auto_install': False,
|
||||
'license': 'LGPL-3',
|
||||
}
|
||||
3
sf_machine_connect/models/__init__.py
Normal file
3
sf_machine_connect/models/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from . import ftp_client
|
||||
from . import ftp_operate
|
||||
from . import py2opcua
|
||||
44
sf_machine_connect/models/data_collection.py
Normal file
44
sf_machine_connect/models/data_collection.py
Normal file
@@ -0,0 +1,44 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Models for Simulation
|
||||
# ----------------------------------------------------------
|
||||
class Simulation(models.Model):
|
||||
_name = 'simulation'
|
||||
_description = 'SIMULATION'
|
||||
|
||||
name = fields.Char('Name', size=50, readonly=True)
|
||||
place_value = fields.Boolean(String="位值")
|
||||
place_value_random = fields.Boolean(String="位值随机")
|
||||
place_value_ai = fields.Boolean(String="位值自增")
|
||||
place_value_list = fields.Boolean(String="位值列表")
|
||||
|
||||
unsigned_integer_8_DO = fields.Integer(Sting="无符号8位整数D0")
|
||||
unsigned_integer_8_D1 = fields.Integer(Sting="无符号8位整数D1")
|
||||
unsigned_integer_8_random = fields.Integer(Sting="无符号8位整数随机")
|
||||
unsigned_integer_8_ai = fields.Integer(Sting="无符号8位整数自增")
|
||||
unsigned_integer_8_list = fields.Integer(Sting="无符号8位整数列表")
|
||||
|
||||
integer_8 = fields.Integer(String="有符号8位整数")
|
||||
integer_8_random = fields.Integer(String="有符号8位整数随机")
|
||||
integer_8_ai = fields.Integer(String="有符号8位整数自增")
|
||||
integer_8_ad = fields.Integer(String="有符号8位整数自减")
|
||||
integer_16 = fields.Integer(String="有符号16位整数")
|
||||
integer_16_random = fields.Integer(String="有符号16位整数随机")
|
||||
integer_16_list = fields.Integer(String="有符号16位整数列表")
|
||||
|
||||
|
||||
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Models for Mitsubishi
|
||||
# ----------------------------------------------------------
|
||||
class MitsuCnc(models.Model):
|
||||
_name = 'mitsu.cnc'
|
||||
_description = 'Mitsubishi CNC'
|
||||
|
||||
name = fields.Char('Name', size=50, readonly=True)
|
||||
status = fields.Boolean(string="状态")
|
||||
153
sf_machine_connect/models/ftp_client.py
Normal file
153
sf_machine_connect/models/ftp_client.py
Normal file
@@ -0,0 +1,153 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
import base64
|
||||
|
||||
import psycopg2
|
||||
import os
|
||||
import logging
|
||||
from zeep.exceptions import ValidationError
|
||||
|
||||
from odoo import http
|
||||
from ftplib import FTP
|
||||
from odoo.http import request
|
||||
from odoo import api, fields, models
|
||||
from odoo.addons.sf_machine_connect.models import py2opcua, ftp_operate
|
||||
# from .ftp_operate import FtpController
|
||||
# from .py2opcua import Py2opcua
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Models for client
|
||||
# ----------------------------------------------------------
|
||||
|
||||
class FtpButton(models.Model):
|
||||
_inherit = 'sf.cnc.processing'
|
||||
|
||||
def pri(self):
|
||||
print('11111111111111111')
|
||||
s = self.cnc_id
|
||||
s1 = self.cnc_id._filestore()
|
||||
print(s1)
|
||||
v = self.cnc_id.display_name
|
||||
a = self.cnc_id.datas
|
||||
print(v)
|
||||
print(a)
|
||||
ftp_operate.FtpController.prin(self)
|
||||
|
||||
def up(self):
|
||||
# self.env['mrp.workorder'].check_compensation_before_up()
|
||||
ftp = ftp_operate.FtpController()
|
||||
# ftp.delAllfile('C://Users//马广威//Desktop//ftp')
|
||||
a = self.cnc_id
|
||||
print(a.display_name)
|
||||
_logger.info(a.display_name)
|
||||
datas = base64.standard_b64decode(a.datas)
|
||||
# file_path = '{}\{}\{}'.format(a._filestore(), a.store_fname.split('/'[0]), a.display_name)
|
||||
|
||||
# 此方法不走ftp,直接文件写入,暂不确定能否写入ftp服务器,但可以转成ftp方法,只是要把文件暂存到本地,再上传
|
||||
# file_path_local = '{}\{}'.format('C://Users//马广威//Desktop//ftp', a.display_name)
|
||||
file_path_local = '{}/{}'.format('/nc2machine', a.display_name)
|
||||
file_path_remote = '{}\{}'.format('//(192,168,2,141)//DS', a.display_name)
|
||||
|
||||
|
||||
with open(file_path_local, mode='wb+') as file:
|
||||
file.write(datas)
|
||||
|
||||
# file = open(file_path_local, 'wb+')
|
||||
# file.write(datas)
|
||||
# file.close()
|
||||
|
||||
# 存在本地的文件下发到机床
|
||||
ftp.upload_file(remotepath=file_path_remote, localpath=file_path_local)
|
||||
|
||||
|
||||
class FtpClient(models.Model):
|
||||
_name = "ftp.client"
|
||||
_description = 'Ftp Client'
|
||||
|
||||
name = fields.Char('Name', size=50, readonly=True)
|
||||
description = fields.Char(size=50)
|
||||
mobile = fields.Char(size=50)
|
||||
|
||||
def up(self):
|
||||
ftp = ftp_operate.FtpController()
|
||||
# FtpController.__init__(self, host="127.0.0.1", port=2121, username="admin", password="123456")
|
||||
ftp.upload_file(remotepath='/(192,168,199,2)/DS/02-222.NC', localpath='D:/ftp/up/02-222.NC')
|
||||
|
||||
# def delete(self):
|
||||
# ftp = FtpController()
|
||||
# ftp.del_file()
|
||||
|
||||
#
|
||||
# def _compute_ip_url(self):
|
||||
# for box in self:
|
||||
# if not box.ip:
|
||||
# box.ip_url = False
|
||||
# else:
|
||||
# url = 'https://%s' if box.get_base_url()[:5] == 'https' else 'http://%s:8069'
|
||||
# box.ip_url = url % box.ip
|
||||
#
|
||||
# def _compute_device_count(self):
|
||||
# for box in self:
|
||||
# box.device_count = len(box.device_ids)
|
||||
|
||||
|
||||
class Machine_ftp(models.Model):
|
||||
# _name = 'data.collection'
|
||||
_inherit = 'sf.machine_tool'
|
||||
|
||||
timestamp = fields.Datetime('时间戳', readonly=True)
|
||||
signed = fields.Integer('刷新间隔', readonly=True)
|
||||
status = fields.Boolean('在线状态', readonly=True)
|
||||
tool_num = fields.Integer('当前刀具', readonly=True)
|
||||
program = fields.Char('当前程序', readonly=True)
|
||||
|
||||
|
||||
class WorkCenterBarcode(models.Model):
|
||||
"""
|
||||
扫码托盘码可查到制造订单,由制造订单查工单
|
||||
"""
|
||||
_inherit = "mrp.workorder"
|
||||
compensation_value_x = fields.Float(string='X轴补偿值')
|
||||
compensation_value_y = fields.Float(string='Y轴补偿值')
|
||||
|
||||
def compensation(self):
|
||||
'''
|
||||
将节点与其值放入字典,字典作为参数传入
|
||||
:return:
|
||||
'''
|
||||
temp_dict = {}
|
||||
temp_dict['ns=1;s=Project_Default.Group1.Mitsubishi_NC.hongbianliang520'] = self.compensation_value_x
|
||||
temp_dict['ns=1;s=Project_Default.Group1.Mitsubishi_NC.hongbianliang521'] = self.compensation_value_y
|
||||
print("测试补偿能够执行")
|
||||
temp = py2opcua.Py2opcua()
|
||||
_logger.info(temp)
|
||||
temp.connect()
|
||||
temp.write(temp_dict)
|
||||
temp.disconnect()
|
||||
|
||||
def check_compensation_before_up(self):
|
||||
temp_value = self.env['mrp.workorder'].getcenter()
|
||||
_logger.info("====================================================================================")
|
||||
_logger.info(temp_value)
|
||||
if temp_value[0] == 0 or temp_value[1] != 0:
|
||||
temp_dict = {}
|
||||
# temp_dict['ns=1;s=Project_Default.Group1.Mitsubishi_NC.hongbianliang520'] = temp_value[0]
|
||||
temp_dict['ns=1;s=Project_Default.Group1.Mitsubishi_NC.hongbianliang520'] = 111
|
||||
temp_dict['ns=1;s=Project_Default.Group1.Mitsubishi_NC.hongbianliang521'] = 111
|
||||
# temp_dict['ns=1;s=Project_Default.Group1.Mitsubishi_NC.hongbianliang521'] = temp_value[1]
|
||||
print("测试补偿能够执行")
|
||||
temp = py2opcua.Py2opcua()
|
||||
_logger.info(temp)
|
||||
temp.connect()
|
||||
temp.write(temp_dict)
|
||||
temp.disconnect()
|
||||
|
||||
|
||||
|
||||
|
||||
def test(self, barcode):
|
||||
# 托盘对象
|
||||
tray = self.env('sf.tray').search("code", "=", barcode)
|
||||
product = tray.product_id
|
||||
118
sf_machine_connect/models/ftp_operate.py
Normal file
118
sf_machine_connect/models/ftp_operate.py
Normal file
@@ -0,0 +1,118 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import os
|
||||
from ftplib import FTP
|
||||
|
||||
class FTP_P(FTP):
|
||||
def dirs(self, *args):
|
||||
'''List a directory in long form.
|
||||
By default list current directory to stdout.
|
||||
Optional last argument is callback function; all
|
||||
non-empty arguments before it are concatenated to the
|
||||
LIST command. (This *should* only be used for a pathname.)'''
|
||||
cmd = 'LIST'
|
||||
templist = []
|
||||
tempdic = {}
|
||||
func = None
|
||||
if args[-1:] and type(args[-1]) != type(''):
|
||||
args, func = args[:-1], args[-1]
|
||||
for arg in args:
|
||||
if arg:
|
||||
cmd = cmd + (' ' + arg)
|
||||
self.retrlines(cmd, templist.append)
|
||||
# print(templist)
|
||||
# 处理返回结果,只需要目录名称
|
||||
r_files = [file.split(" ")[-1] for file in templist]
|
||||
tempdic['name'] = [file for file in r_files if file != "." and file != ".."]
|
||||
# 去除. ..
|
||||
return tempdic
|
||||
# return [file for file in r_files if file != "." and file != ".."]
|
||||
|
||||
# FTP接口类
|
||||
class FtpController():
|
||||
|
||||
'''
|
||||
这是ftp接口类,在类初始化的时候就连接了ftp服务器,能否成功连接有反馈。
|
||||
类中定义了两个接口:上传接口和删除接口
|
||||
'''
|
||||
# 三菱机床连接
|
||||
def __init__(self, host="192.168.2.158", port=8080, username="MITSUBISHI", password="CNC"):
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.username = username
|
||||
self.password = password
|
||||
ftp = FTP_P()
|
||||
# self.ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
|
||||
ftp.set_pasv(0) #0主动模式 1 #被动模式
|
||||
try:
|
||||
ftp.connect(self.host, self.port)
|
||||
ftp.login(self.username, self.password)
|
||||
print("连接成功")
|
||||
self.ftp = ftp
|
||||
except:
|
||||
print("连接失败")
|
||||
|
||||
# 试验接口
|
||||
def prin(self):
|
||||
print("这是试验接口")
|
||||
|
||||
# 试验ftp服务器连接
|
||||
# def connect(self, host="127.0.0.1", port=2121, username="admin", password="123456"):
|
||||
# ftp = FTP_P()
|
||||
# try:
|
||||
# ftp.connect(host, port)
|
||||
# ftp.login(username, password)
|
||||
# print("连接成功")
|
||||
# ftp1 = ftp
|
||||
# return ftp1
|
||||
# except:
|
||||
# print("连接失败")
|
||||
|
||||
|
||||
# 三菱代码下发
|
||||
def upload_file(self, remotepath='/(192,168,199,2)/DS/Z4.5.NC', localpath='D:/ftp/up/Z4.5.NC'):
|
||||
'''
|
||||
第一个是要上传到ftp服务器路径下的文件,第二个是本地要上传的的路径文件
|
||||
:param remotepath: 上传和下载都需要设置工作目录,注意只能使用文件名,不能有路径中的冒号
|
||||
:param localpath:
|
||||
:return:
|
||||
'''
|
||||
bufsize = 1024
|
||||
fp = open(localpath, 'rb')
|
||||
self.ftp.storbinary('STOR ' + remotepath, fp, bufsize)
|
||||
fp.close()
|
||||
# return "上传成功"
|
||||
|
||||
def delAllfile(self, ftppath):
|
||||
dir_res = []
|
||||
try:
|
||||
print(ftppath)
|
||||
try:
|
||||
self.ftp.cwd(ftppath)
|
||||
except Exception as e:
|
||||
print("进入ftp目录失败" + str(e))
|
||||
self.ftp.dir('.', dir_res.append) # 对当前目录进行dir(),将结果放入列表
|
||||
print(dir_res)
|
||||
# for i in dir_res:
|
||||
# if i.startswith("d"):
|
||||
# dirName = i.split(" ")[-1]
|
||||
# print("开始删除" + dirName + "文件夹")
|
||||
# delAllfile(ftp, ftp.pwd() + "/" + dirName)
|
||||
# ftp.cwd('..')
|
||||
# print(ftppath + "/" + dirName)
|
||||
# ftp.rmd(ftppath + '/' + dirName)
|
||||
# else:
|
||||
# filelist = ftp.getfiles(ftppath)
|
||||
# for f in filelist:
|
||||
# print("删除FTP目录:" + ftppath + "下存在文件:" + f)
|
||||
# ftp.delete(f)
|
||||
except Exception as e:
|
||||
raise e
|
||||
|
||||
# 删除远端ftp文件
|
||||
# 出现550 not found file是路径不对
|
||||
# def del_file(self, delpath='./YIN.NC'):
|
||||
def del_file(self, delpath='/(192,168,199,2)/DS/Z4.5.NC'):
|
||||
self.ftp.delete(delpath) # 删除远程文件
|
||||
|
||||
|
||||
|
||||
32
sf_machine_connect/models/py2opcua.py
Normal file
32
sf_machine_connect/models/py2opcua.py
Normal file
@@ -0,0 +1,32 @@
|
||||
from opcua import ua, Client
|
||||
|
||||
|
||||
class Py2opcua:
|
||||
|
||||
def __init__(self, url='opc.tcp://192.168.2.99:4840'):
|
||||
self.client = Client(url)
|
||||
|
||||
def connect(self):
|
||||
|
||||
try:
|
||||
# 连接客户端
|
||||
self.client.connect()
|
||||
print("opcua服务器连接成功,可以写入")
|
||||
return self.client
|
||||
except:
|
||||
print("opcua服务器连接失败,请检查")
|
||||
|
||||
def write(self, temp_dict):
|
||||
temp_dict = temp_dict
|
||||
temp_list = list(temp_dict.items())
|
||||
for i in range(len(temp_list)):
|
||||
# 寻找节点上的变量
|
||||
var = self.client.get_node(temp_list[i][0])
|
||||
# var.set_value(ua.Variant(1.234, ua.VariantType.Float))
|
||||
# 通过set_value写值
|
||||
var.set_value(ua.Variant(temp_list[i][1], ua.VariantType.Double))
|
||||
print("%s 已写入" % var.get_value())
|
||||
|
||||
def disconnect(self):
|
||||
# 断开连接
|
||||
self.client.disconnect()
|
||||
20
sf_machine_connect/security/iot_security.xml
Normal file
20
sf_machine_connect/security/iot_security.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="iot_box_comp_rule" model="ir.rule">
|
||||
<field name="name">IoT Box multi company rule</field>
|
||||
<field name="model_id" ref="model_iot_box"/>
|
||||
<field eval="True" name="global"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
|
||||
<record id="iot_device_comp_rule" model="ir.rule">
|
||||
<field name="name">IoT Device multi company rule</field>
|
||||
<field name="model_id" ref="model_iot_device"/>
|
||||
<field eval="True" name="global"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
2
sf_machine_connect/security/ir.model.access.csv
Normal file
2
sf_machine_connect/security/ir.model.access.csv
Normal file
@@ -0,0 +1,2 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_ftp_client,ftp.client,model_ftp_client,base.group_user,1,1,1,1
|
||||
|
BIN
sf_machine_connect/static/description/icon.png
Normal file
BIN
sf_machine_connect/static/description/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.5 KiB |
30
sf_machine_connect/static/src/css/MyWidget.css
Normal file
30
sf_machine_connect/static/src/css/MyWidget.css
Normal file
@@ -0,0 +1,30 @@
|
||||
.o_int_colorpicker {
|
||||
.o_color_pill {
|
||||
display: inline-block;
|
||||
height: 25px;
|
||||
width: 25px;
|
||||
margin: 4px;
|
||||
border-radius: 25px;
|
||||
position: relative;
|
||||
@for $size from 1 through length($o-colors) {
|
||||
&.o_color_#{$size - 1} {
|
||||
background-color: nth($o-colors, $size);
|
||||
&:not(.readonly):hover {
|
||||
transform: scale(1.2);
|
||||
transition: 0.3s;
|
||||
cursor: pointer;
|
||||
}
|
||||
&.active:after{
|
||||
content: "\f00c";
|
||||
display: inline-block;
|
||||
font: normal normal normal 14px/1 FontAwesome;
|
||||
font-size: inherit;
|
||||
color: #fff;
|
||||
position: absolute;
|
||||
padding: 4px;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
5
sf_machine_connect/static/src/css/iot.css
Normal file
5
sf_machine_connect/static/src/css/iot.css
Normal file
@@ -0,0 +1,5 @@
|
||||
.o_button_iot {
|
||||
min-width: 120px;
|
||||
min-height: 40px;
|
||||
margin-left: 50px;
|
||||
}
|
||||
94
sf_machine_connect/static/src/xml/Barcode_Scan_template.xml
Normal file
94
sf_machine_connect/static/src/xml/Barcode_Scan_template.xml
Normal file
@@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<templates xml:space="preserve">
|
||||
<t t-name="sf_machine_connect.Barcode_Scan_template" t-inherit="web.Legacy.ControlPanel" t-inherit-mode="extension" owl="1">
|
||||
<xpath expr="//div[hasclass('o_cp_pager')]" position="inside">
|
||||
<button
|
||||
style="float:left"
|
||||
t-on-click="onBarcodeScanned"
|
||||
type="button"
|
||||
class="btn ms-3 o_barcode"
|
||||
tabindex="-1"
|
||||
draggable="false"
|
||||
aria-label="Scan barcode"
|
||||
title="Scan barcode"
|
||||
data-tooltip="Scan barcode"
|
||||
>扫码</button>
|
||||
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
<!-- <t t-name="web.Many2OneField.CreateConfirmationDialog" owl="1">-->
|
||||
<!-- <Dialog title="title" size="'md'">-->
|
||||
<!-- <div>-->
|
||||
<!-- Create <strong t-esc="props.value"/> as a new <t t-esc="props.name"/>?-->
|
||||
<!-- </div>-->
|
||||
<!-- <t t-set-slot="footer">-->
|
||||
<!-- <button class="btn btn-primary" t-on-click="onCreate">Create</button>-->
|
||||
<!-- <button class="btn" t-on-click="() => props.close()">Discard</button>-->
|
||||
<!-- </t>-->
|
||||
<!-- </Dialog>-->
|
||||
<!-- </t>-->
|
||||
|
||||
<!-- <t t-name="web.Many2OneField" owl="1">-->
|
||||
<!-- <t t-if="props.readonly">-->
|
||||
<!-- <t t-if="!props.canOpen">-->
|
||||
<!-- <span>-->
|
||||
<!-- <span t-esc="displayName" />-->
|
||||
<!-- <t t-foreach="extraLines" t-as="extraLine" t-key="extraLine_index">-->
|
||||
<!-- <br />-->
|
||||
<!-- <span t-esc="extraLine" />-->
|
||||
<!-- </t>-->
|
||||
<!-- </span>-->
|
||||
<!-- </t>-->
|
||||
<!-- <t t-else="">-->
|
||||
<!-- <a-->
|
||||
<!-- t-if="props.value"-->
|
||||
<!-- class="o_form_uri"-->
|
||||
<!-- t-att-href="props.value ? `#id=${props.value[0]}&model=${relation}` : '#'"-->
|
||||
<!-- t-on-click.prevent="onClick"-->
|
||||
<!-- >-->
|
||||
<!-- <span t-esc="displayName" />-->
|
||||
<!-- <t t-foreach="extraLines" t-as="extraLine" t-key="extraLine_index">-->
|
||||
<!-- <br />-->
|
||||
<!-- <span t-esc="extraLine" />-->
|
||||
<!-- </t>-->
|
||||
<!-- </a>-->
|
||||
<!-- </t>-->
|
||||
<!-- </t>-->
|
||||
<!-- <t t-else="">-->
|
||||
<!-- <div class="o_field_many2one_selection">-->
|
||||
<!-- <Many2XAutocomplete t-props="Many2XAutocompleteProps"/>-->
|
||||
<!-- <t t-if="hasExternalButton">-->
|
||||
<!-- <button-->
|
||||
<!-- type="button"-->
|
||||
<!-- class="btn btn-secondary fa o_external_button"-->
|
||||
<!-- t-att-class="props.openTarget === 'current' ? 'fa-arrow-right' : 'fa-external-link'"-->
|
||||
<!-- tabindex="-1"-->
|
||||
<!-- draggable="false"-->
|
||||
<!-- aria-label="Internal link"-->
|
||||
<!-- data-tooltip="Internal link"-->
|
||||
<!-- t-on-click="onExternalBtnClick"-->
|
||||
<!-- />-->
|
||||
<!-- </t>-->
|
||||
<!-- <button-->
|
||||
<!-- t-if="hasBarcodeButton"-->
|
||||
<!-- t-on-click="onBarcodeBtnClick"-->
|
||||
<!-- type="button"-->
|
||||
<!-- class="btn ms-3 o_barcode"-->
|
||||
<!-- tabindex="-1"-->
|
||||
<!-- draggable="false"-->
|
||||
<!-- aria-label="Scan barcode"-->
|
||||
<!-- title="Scan barcode"-->
|
||||
<!-- data-tooltip="Scan barcode"-->
|
||||
<!-- />-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="o_field_many2one_extra">-->
|
||||
<!-- <t t-foreach="extraLines" t-as="extraLine" t-key="extraLine_index">-->
|
||||
<!-- <br t-if="!extraLine_first" />-->
|
||||
<!-- <span t-esc="extraLine" />-->
|
||||
<!-- </t>-->
|
||||
<!-- </div>-->
|
||||
<!-- </t>-->
|
||||
<!-- </t>-->
|
||||
|
||||
</templates>
|
||||
10
sf_machine_connect/static/src/xml/Flush.xml
Normal file
10
sf_machine_connect/static/src/xml/Flush.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates xml:space="preserve">
|
||||
<t t-name="owl_demo.PartnerOrderSummary2" owl="1">
|
||||
<div class="row" style="padding-top: 20px;">
|
||||
<p>
|
||||
显示累加字符串:aaaaaabbb
|
||||
</p>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
27
sf_machine_connect/static/src/xml/MyComponent.xml
Normal file
27
sf_machine_connect/static/src/xml/MyComponent.xml
Normal file
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates xml:space="preserve">
|
||||
<t t-name="owl_demo.MyComponent1" owl="1">
|
||||
<div class="container">
|
||||
<div class="jumbotron">
|
||||
<h1>欢迎登陆页面!</h1>
|
||||
<p>这是一个超大屏幕(Jumbotron)的实例。</p>
|
||||
<p><a class="btn btn-primary btn-lg" role="button">
|
||||
学习更多</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="bg-info text-center p-2">-->
|
||||
<!-- <i class="fa fa-arrow-left p-1 left"-->
|
||||
<!-- style="cursor: pointer;"-->
|
||||
<!-- t-on-click="onPrevious"> </i>-->
|
||||
<!-- <b t-esc="messageList[Math.abs(-->
|
||||
<!-- state.currentIndex%4)]"/>-->
|
||||
<!-- <i class="fa fa-arrow-right p-1 right"-->
|
||||
<!-- style="cursor: pointer;"-->
|
||||
<!-- t-on-click="onNext"> </i>-->
|
||||
<!-- <i class="fa fa-close p-1 float-right"-->
|
||||
<!-- style="cursor: pointer;"-->
|
||||
<!-- t-on-click="onRemove"> </i>-->
|
||||
<!-- </div>-->
|
||||
</t>
|
||||
</templates>
|
||||
4
sf_machine_connect/static/src/xml/MyWidget.xml
Normal file
4
sf_machine_connect/static/src/xml/MyWidget.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<templates>
|
||||
|
||||
</templates>
|
||||
32
sf_machine_connect/static/src/xml/PartnerOrderSummary2.xml
Normal file
32
sf_machine_connect/static/src/xml/PartnerOrderSummary2.xml
Normal file
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates xml:space="preserve">
|
||||
<t t-name="sf_machine_connect.PartnerOrderSummary2" owl="1">
|
||||
<!-- <div class="row" style="padding-top: 20px;">-->
|
||||
<div style="padding-top: 20px;">
|
||||
|
||||
<button
|
||||
t-on-click="onBarcodeBtnClick"
|
||||
type="button"
|
||||
class="btn ms-3 o_barcode"
|
||||
tabindex="-1"
|
||||
draggable="false"
|
||||
aria-label="Scan barcode"
|
||||
title="Scan barcode"
|
||||
data-tooltip="Scan barcode"
|
||||
>扫码</button>
|
||||
|
||||
|
||||
<!-- <div class="o_barcode_mobile_container">-->
|
||||
<!-- <a role="button" class="btn btn-primary o_mobile_barcode">-->
|
||||
<!-- <i class="fa fa-camera fa-2x o_barcode_mobile_camera"/>-->
|
||||
<!-- Tap to scan-->
|
||||
<!-- </a>-->
|
||||
<!--<!– <img src="/barcodes/static/img/barcode.png" alt="Barcode"/>–>-->
|
||||
<!-- <span class="o_barcode_laser"/>-->
|
||||
<!-- </div>-->
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</t>
|
||||
</templates>
|
||||
15
sf_machine_connect/static/src/xml/barcodes.xml
Normal file
15
sf_machine_connect/static/src/xml/barcodes.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates xml:space="preserve">
|
||||
|
||||
<t t-name="mobile_barcode_template">
|
||||
<div class="o_barcode_mobile_container">
|
||||
<a role="button" class="btn btn-primary o_mobile_barcode">
|
||||
<i class="fa fa-camera fa-2x o_barcode_mobile_camera"/>
|
||||
Tap to scan
|
||||
</a>
|
||||
<img src="/barcodes/static/img/barcode.png" alt="Barcode"/>
|
||||
<span class="o_barcode_laser"/>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
</templates>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<templates>
|
||||
<div t-name="iot.scan_progress_template">
|
||||
<h4>Range(s) to scan</h4>
|
||||
<ul class="scan_ranges list-group mb-2"/>
|
||||
<div class="input-group mb-4">
|
||||
<input type="text" name="add_scan_range_ip" class="add_scan_range_ip form-control" placeholder="Scan another range, e.g.: 10.1.1.*"/>
|
||||
<a role="button" class="add_scan_range btn btn-primary" tabindex="-1">Add</a>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<h4 class="scan_network"></h4>
|
||||
<h4 class="iot_box_found"></h4>
|
||||
<ul class="found_devices list-group"/>
|
||||
</div>
|
||||
</div>
|
||||
</templates>
|
||||
17
sf_machine_connect/static/src/xml/many2one_field.xml
Normal file
17
sf_machine_connect/static/src/xml/many2one_field.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates xml:space="preserve">
|
||||
|
||||
<t t-name="web.Many2OneField" owl="1">
|
||||
<button
|
||||
t-on-click="onBarcodeBtnClick"
|
||||
type="button"
|
||||
class="btn ms-3 o_barcode"
|
||||
tabindex="-1"
|
||||
draggable="false"
|
||||
aria-label="Scan barcode"
|
||||
title="Scan barcode"
|
||||
data-tooltip="Scan barcode"
|
||||
/>
|
||||
</t>
|
||||
|
||||
</templates>
|
||||
17
sf_machine_connect/static/src/xml/stack.xml
Normal file
17
sf_machine_connect/static/src/xml/stack.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates id="template" >
|
||||
<t t-extend="stock_barcode_lines_template">
|
||||
<t t-jquery="div[class='o_barcode_line list-group-item d-flex flex-row flex-nowrap']"
|
||||
t-operation="append">
|
||||
<div class="o_barcode_pic position-relative text-center mt-2 mb-1">
|
||||
<i class="fa fa-5x mx-auto fa-exclamation-triangle text-white d-none"/>
|
||||
<img class="o_barcode_icon" src="/stock_barcode/static/img/barcode.svg" alt="Barcode" height="40px"/>
|
||||
<!-- <t t-if='widget.mobileMethods.scanBarcode'> -->
|
||||
|
||||
<div class="o_stock_mobile_barcode"/> <!-- Used to open the device scanner -->
|
||||
<span> Tap to scan</span>
|
||||
<!-- </t> -->
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</templates>
|
||||
14
sf_machine_connect/views/Barcode_Scan.xml
Normal file
14
sf_machine_connect/views/Barcode_Scan.xml
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<record id="view_order_form_scan_barcode" model="ir.ui.view">
|
||||
<field name="name">sale.order.form.scan.barcode</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="inherit_id" ref="sale.view_order_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="partner_id" position="after">
|
||||
<!-- invisible="1" -->
|
||||
<field name="_barcode_scanned" widget="barcode_handler"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
15
sf_machine_connect/views/SfWorkOrderBarcodes.xml
Normal file
15
sf_machine_connect/views/SfWorkOrderBarcodes.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<record id="sf_install_the_tray_workorder_form_view__scan_barcode" model="ir.ui.view">
|
||||
<field name="name">sf.install.the.tray.workorder.form.scan.barcode</field>
|
||||
<field name="model">mrp.workorder</field>
|
||||
<field name="inherit_id" ref="sf_manufacturing.view_mrp_production_workorder_tray_form_inherit_sf"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page//field[@name='tray_code']" position="before">
|
||||
<!-- invisible="1" -->
|
||||
<field name="_barcode_scanned" widget="barcode_handler"/>
|
||||
</xpath>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
18
sf_machine_connect/views/Stock_picking_Barcodes.xml
Normal file
18
sf_machine_connect/views/Stock_picking_Barcodes.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<record id="stock_picking_form_vieww_scan_barcode_search" model="ir.ui.view">
|
||||
<field name="name">stock.picking.search</field>
|
||||
<field name="model">stock.picking</field>
|
||||
<field name="inherit_id" ref="stock.view_picking_internal_search"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='name']" position="before">
|
||||
<!-- <field name="tray_code" filter_domain="[('production_id.tray_ids.code','=',self)]"/>-->
|
||||
<field name="origin"/>
|
||||
</xpath>
|
||||
<!-- <xpath expr="//search//group//filter[@name='product']" position="before">-->
|
||||
<!-- <filter string="Tray code" name="traycode" domain="[]" context="{'group_by': 'tray_code'}"/>-->
|
||||
<!-- </xpath>-->
|
||||
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
20
sf_machine_connect/views/WorkCenterBarcodes.xml
Normal file
20
sf_machine_connect/views/WorkCenterBarcodes.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<record id="workcenter_form_vieww_scan_barcode_search" model="ir.ui.view">
|
||||
<field name="name">work.order.search</field>
|
||||
<!-- <field name="model">mrp.workcenter</field>-->
|
||||
<field name="model">mrp.workorder</field>
|
||||
<field name="inherit_id" ref="mrp.view_mrp_production_work_order_search"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='production_id']" position="before">
|
||||
<!-- <field name="name" filter_domain="['|', '|', ('明确的字段内容', 'ilike', self), ('shortdesc', 'ilike', self), ('name', 'ilike', self)]" string="Theme"/>-->
|
||||
<field name="tray_code" filter_domain="[('production_id.tray_ids.code','=',self)]"/>
|
||||
<!-- <field name="production_id"/>-->
|
||||
</xpath>
|
||||
<!-- <xpath expr="//search//group//filter[@name='product']" position="before">-->
|
||||
<!-- <filter string="Tray code" name="traycode" domain="[]" context="{'group_by': 'tray_code'}"/>-->
|
||||
<!-- </xpath>-->
|
||||
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
23
sf_machine_connect/views/compensation.xml
Normal file
23
sf_machine_connect/views/compensation.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<record id="compensation_view" model="ir.ui.view">
|
||||
<field name="name">compensation</field>
|
||||
<field name="model">mrp.workorder</field>
|
||||
<field name="inherit_id" ref="sf_manufacturing.view_mrp_production_workorder_tray_form_inherit_sf"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page//field[@name='cnc_ids']" position="before">
|
||||
<group>
|
||||
<field name="compensation_value_x"/>
|
||||
<field name="compensation_value_y"/>
|
||||
</group>
|
||||
<div>
|
||||
<button string="一键补偿" name="compensation" type="object" confirm="是否确认下发补偿" class="btn-primary"/>
|
||||
</div>
|
||||
|
||||
|
||||
</xpath>
|
||||
<!-- attrs='{"invisible": [("routing_type","!=","CNC加工")]}'-->
|
||||
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
23
sf_machine_connect/views/flush_template.xml
Normal file
23
sf_machine_connect/views/flush_template.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<template id="flush">
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
|
||||
<title>World Map</title>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
setInterval(function () {
|
||||
$("#map").load(location.href + " #map>*", "");//注意后面DIV的ID前面的空格跟 id 后的>*,很重要!
|
||||
}, 1000);//8秒自动刷新
|
||||
})
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</template>
|
||||
</odoo>
|
||||
19
sf_machine_connect/views/ftp_button.xml
Normal file
19
sf_machine_connect/views/ftp_button.xml
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
|
||||
<record id="sf_install_the_tray_workorder_form_view_inherit" model="ir.ui.view">
|
||||
<field name="name">sale.order.inherit</field>
|
||||
<field name="model">mrp.workorder</field>
|
||||
<!-- <field name="model">cnc.processing</field>-->
|
||||
<field name="inherit_id" ref="sf_manufacturing.view_mrp_production_workorder_tray_form_inherit_sf"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='remark']" position="after">
|
||||
<button string="测试按钮" name="pri" type="object" class="btn-primary"/>
|
||||
<button string="下发按钮" name="up" type="object" confirm="是否确认下发此程序" class="btn-primary"/>
|
||||
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
43
sf_machine_connect/views/machine_monitor.xml
Normal file
43
sf_machine_connect/views/machine_monitor.xml
Normal file
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="view_tree_mrs_machine_tool_inherited" model="ir.ui.view">
|
||||
<field name="name">sf_base_extension</field>
|
||||
<field name="model">sf.machine_tool</field>
|
||||
<field name="inherit_id" ref="sf_base.sf_machine_tool_form"/>
|
||||
<!-- <field name="inherit_id" ref="sf_base.form_mrs_machine_tool_type"/>-->
|
||||
<field eval="20" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<!-- <xpath expr="//field[@name='knife_type']" position="before">-->
|
||||
<xpath expr="//form//notebook//page[1]" position="inside">
|
||||
<!-- <xpath expr="//page[@name='other']" position="before">-->
|
||||
<!-- <page string="监控页面">-->
|
||||
<group string="监控">
|
||||
<field name="timestamp"/>
|
||||
<field name="signed"/>
|
||||
<field name="status"/>
|
||||
<!-- <field name="tool_num"/>-->
|
||||
<field name="program"/>
|
||||
</group>
|
||||
<!-- </page>-->
|
||||
|
||||
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
<!--<!–继承了本模块的视图–>-->
|
||||
<!--<?xml version="1.0" encoding="utf-8"?>-->
|
||||
<!--<odoo>-->
|
||||
<!-- <record id="view_tree_mrs_machine_tool_inherited" model="ir.ui.view">-->
|
||||
<!-- <field name="name">sf_base_extension</field>-->
|
||||
<!-- <field name="model">ftp.client</field>-->
|
||||
<!-- <field name="inherit_id" ref="ftp_form"/>-->
|
||||
<!-- <field eval="20" name="priority"/>-->
|
||||
<!-- <field name="arch" type="xml">-->
|
||||
<!-- <xpath expr="//field[@name='name']" position="before">-->
|
||||
<!-- <field name="count_books"/>-->
|
||||
<!-- </xpath>-->
|
||||
<!-- </field>-->
|
||||
<!-- </record>-->
|
||||
<!--</odoo>-->
|
||||
25
sf_machine_connect/views/purchase_barcode.xml
Normal file
25
sf_machine_connect/views/purchase_barcode.xml
Normal file
@@ -0,0 +1,25 @@
|
||||
<record id="view_purchase_order_barcode_inherit_form" model="ir.ui.view">
|
||||
<field name="name">purchase.order.form</field>
|
||||
<field name="model">purchase.order</field>
|
||||
<field name="inherit_id" ref="purchase.purchase_order_form"/>
|
||||
<field name="priority" eval="8"/>
|
||||
<field name="arch" type="xml">
|
||||
<form position="inside">
|
||||
<field name="_barcode_scanned" widget="purchaseorder_barcode_handler"/>
|
||||
</form>
|
||||
|
||||
<xpath expr="//field[@name='order_line']/tree" position="inside">
|
||||
<field name="product_barcode" invisible="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='order_line']/kanban" position="inside">
|
||||
<field name="product_barcode" invisible="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='order_line']//field[@name='product_qty']" position="attributes">
|
||||
<attribute name="options">{'barcode_events': True}</attribute>
|
||||
<attribute name="widget">field_float_scannable</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//button[@name='button_confirm']" position="attributes">
|
||||
<attribute name="barcode_trigger">validate</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
176
sf_machine_connect/views/sf_machine_connnect.xml
Normal file
176
sf_machine_connect/views/sf_machine_connnect.xml
Normal file
@@ -0,0 +1,176 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<!-- Menus -->
|
||||
<menuitem
|
||||
id="ftp_menu_root"
|
||||
name="sf2machine"
|
||||
web_icon="iot,static/description/icon.png"
|
||||
groups="base.group_system"
|
||||
/>
|
||||
IoT Boxes
|
||||
|
||||
<record model="ir.ui.view" id="data_list">
|
||||
<field name="model">ftp.client</field>
|
||||
<field name="arch" type="xml">
|
||||
<!-- <div id="map">-->
|
||||
<tree string="目标">
|
||||
<field name="name"/>
|
||||
<field name="mobile"/>
|
||||
<field name="description"/>
|
||||
</tree>
|
||||
<!-- </div>-->
|
||||
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="barcode_list">
|
||||
<field name="model">mrp.production</field>
|
||||
<field name="arch" type="xml">
|
||||
<!-- <div id="map">-->
|
||||
<tree string="目标">
|
||||
<field name="_barcode_scanned" widget="barcode_handler"/>
|
||||
<field name="aa"/>
|
||||
</tree>
|
||||
<!-- </div>-->
|
||||
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="ftp_form">
|
||||
<field name="model">ftp.client</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="数据采集">
|
||||
<group string="基本信息">
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="mobile"/>
|
||||
<field name="description"/>
|
||||
<field name="_barcode_scanned" widget="barcode_handler"/>
|
||||
<!-- <button string="测试按钮" name="pri" type="object"/>-->
|
||||
<button string="下发程序" name="up" type="object" data-hotkey="enter"/>
|
||||
<button string="扫码" name="on_barcode_scanned" type="object"/>
|
||||
<!-- <button string="删除程序" name="delete" type="object"/>-->
|
||||
<templates xml:space="preserve">
|
||||
|
||||
<t t-name="web.Many2OneField" owl="1">
|
||||
<button t-on-click="onBarcodeBtnClick"
|
||||
type="button"
|
||||
class="btn ms-3 o_barcode"
|
||||
tabindex="-1"
|
||||
draggable="false"
|
||||
aria-label="Scan barcode"
|
||||
title="Scan barcode"
|
||||
data-tooltip="Scan barcode"
|
||||
>saomiao</button>
|
||||
</t>
|
||||
|
||||
</templates>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="barcode_form">
|
||||
<field name="model">mrp.production</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="扫码">
|
||||
<group string="基本信息">
|
||||
<field name="_barcode_scanned" widget="barcode_handler"/>
|
||||
<field name="aa"/>
|
||||
</group>
|
||||
|
||||
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="ftp_action" model="ir.actions.act_window">
|
||||
<field name="name">数据采集</field>
|
||||
<field name="res_model">ftp.client</field>
|
||||
<field name="view_mode">list,form,kanban</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
这是我们的数据采集与程序管理页面!
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
<record id="barcode_action" model="ir.actions.act_window">
|
||||
<field name="name">扫码</field>
|
||||
<field name="res_model">mrp.production</field>
|
||||
<field name="view_mode">list,form,kanban</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
这是我们的扫码页面!
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
id="ftp_data_menu_action"
|
||||
name="数据采集"
|
||||
action="ftp_action"
|
||||
parent="ftp_menu_root"
|
||||
sequence="1"/>
|
||||
<menuitem
|
||||
id="ftp_cnc_data_menu_action"
|
||||
name="CNC"
|
||||
action="ftp_action"
|
||||
parent="ftp_data_menu_action"
|
||||
sequence="1"/>
|
||||
<!-- <menuitem-->
|
||||
<!-- id="ftp_mit_cnc_data_menu_action"-->
|
||||
<!-- name="三菱CNC"-->
|
||||
<!-- action="ftp_action"-->
|
||||
<!-- parent="ftp_cnc_data_menu_action"-->
|
||||
<!-- sequence="1"/>-->
|
||||
<!-- <menuitem-->
|
||||
<!-- id="ftp_sim_cnc_data_menu_action"-->
|
||||
<!-- name="西门子CNC"-->
|
||||
<!-- action="ftp_action"-->
|
||||
<!-- parent="ftp_cnc_data_menu_action"-->
|
||||
<!-- sequence="1"/>-->
|
||||
<!-- <menuitem-->
|
||||
<!-- id="ftp_fan_cnc_data_menu_action"-->
|
||||
<!-- name="发那科CNC"-->
|
||||
<!-- action="ftp_action"-->
|
||||
<!-- parent="ftp_cnc_data_menu_action"-->
|
||||
<!-- sequence="1"/>-->
|
||||
<menuitem
|
||||
id="ftp_plc_data_menu_action"
|
||||
name="PLC"
|
||||
action="ftp_action"
|
||||
parent="ftp_data_menu_action"
|
||||
sequence="3"/>
|
||||
<menuitem
|
||||
id="ftp_instrument_data_menu_action"
|
||||
name="仪器仪表"
|
||||
action="ftp_action"
|
||||
parent="ftp_data_menu_action"
|
||||
sequence="9"/>
|
||||
<menuitem
|
||||
id="ftp_procedure_menu_action"
|
||||
name="程序管理"
|
||||
action="barcode_action"
|
||||
parent="ftp_menu_root"
|
||||
sequence="2"/>
|
||||
<menuitem
|
||||
id="ftp_up_menu_action"
|
||||
name="本地代码"
|
||||
action="ftp_action"
|
||||
parent="ftp_procedure_menu_action"
|
||||
sequence="2"/>
|
||||
<menuitem
|
||||
id="ftp_down_menu_action"
|
||||
name="机床代码"
|
||||
action="ftp_action"
|
||||
parent="ftp_procedure_menu_action"
|
||||
sequence="6"/>
|
||||
|
||||
|
||||
|
||||
</odoo>
|
||||
|
||||
|
||||
45
sf_machine_connect/views/views.xml
Normal file
45
sf_machine_connect/views/views.xml
Normal file
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="sale_order_form_inherit" model="ir.ui.view">
|
||||
<field name="name">sale.order.form.inherit</field>
|
||||
<field name="model">sf.machine_tool</field>
|
||||
<field name="inherit_id" ref="sf_base.sf_machine_tool_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//form//notebook//page[1]" position="inside">
|
||||
|
||||
<group string="监控">
|
||||
<field name="timestamp"/>
|
||||
<field name="signed"/>
|
||||
<field name="signed16"/>
|
||||
<field name="pulse2"/>
|
||||
<field name="tool_num"/>
|
||||
<field name="program"/>
|
||||
</group>
|
||||
<!-- </page>-->
|
||||
<div class="o_partner_order_summary" colspan="2"/>
|
||||
|
||||
|
||||
</xpath>
|
||||
<!-- <field name="payment_term_id" position="after">-->
|
||||
<!-- <field name="create_date" widget="show_units" options="{'units':'UTC'}"/>-->
|
||||
<!-- -->
|
||||
<!-- </field>-->
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
|
||||
<!--<?xml version="1.0" encoding="utf-8"?>-->
|
||||
<!--<odoo>-->
|
||||
<!-- <record id="sale_order_form_inherit" model="ir.ui.view">-->
|
||||
<!-- <field name="name">sale.order.form.inherit</field>-->
|
||||
<!-- <field name="model">sale.order</field>-->
|
||||
<!-- <field name="inherit_id" ref="sale.view_order_form"/>-->
|
||||
<!-- <field name="arch" type="xml">-->
|
||||
<!-- <field name="payment_term_id" position="after">-->
|
||||
<!-- <field name="create_date" widget="show_units" options="{'units':'UTC'}"/>-->
|
||||
<!-- <div class="o_partner_order_summary" colspan="2"/>-->
|
||||
<!-- </field>-->
|
||||
<!-- </field>-->
|
||||
<!-- </record>-->
|
||||
<!--</odoo>-->
|
||||
15
sf_machine_connect/views/views_test_barcode.xml
Normal file
15
sf_machine_connect/views/views_test_barcode.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="sf_install_the_tray_workorder_form_view_inherit" model="ir.ui.view">
|
||||
<field name="name">sale.order.form.inherit</field>
|
||||
<field name="model">mrp.workorder</field>
|
||||
<field name="inherit_id" ref="sf_manufacturing.view_mrp_production_workorder_tray_form_inherit_sf"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="tray_code" position="before">
|
||||
<!-- <field name="create_date" widget="show_units" options="{'units':'UTC'}"/>-->
|
||||
<div class="o_partner_order_summary" colspan="2"/>
|
||||
<!-- <field name="aa"/>-->
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
18
sf_machine_connect/views/workorder_button.xml
Normal file
18
sf_machine_connect/views/workorder_button.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
|
||||
<record id="mrp_workcenter_view_kanban_inherit_workorder_inherit" model="ir.ui.view">
|
||||
<field name="name">mrp.workcenter.view.kanban.inherit.mrpworkorder</field>
|
||||
<field name="model">mrp.workcenter</field>
|
||||
<!-- <field name="model">cnc.processing</field>-->
|
||||
<field name="inherit_id" ref="mrp.mrp_workcenter_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//button[@name='action_work_order']" position="after">
|
||||
<!-- <field name="aaaa"/>-->
|
||||
<button string="扫码查询" name="search_order" type="object" class="btn-primary"/>
|
||||
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user