A7Krs9dWSAobIL@o%}
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
literal 0
HcmV?d00001
diff --git a/jikimo_frontend/static/src/img/jikimo.ico b/jikimo_frontend/static/src/img/jikimo.ico
new file mode 100644
index 0000000000000000000000000000000000000000..69e69db9f0593f3fd14de275cfffd179c6b80ce3
GIT binary patch
literal 3142
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
literal 0
HcmV?d00001
diff --git a/jikimo_frontend/views/bye_odoo.xml b/jikimo_frontend/views/bye_odoo.xml
new file mode 100644
index 00000000..0930f551
--- /dev/null
+++ b/jikimo_frontend/views/bye_odoo.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ jikimo.res.config.settings.view.form.inherit.base.setup
+ res.config.settings
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From c788392b36174dc504f49dae06c4704156308d7a Mon Sep 17 00:00:00 2001
From: mgw <1392924357@qq.com>
Date: Wed, 20 Mar 2024 16:58:57 +0800
Subject: [PATCH 4/5] =?UTF-8?q?=E6=89=93=E5=8D=B0=E9=85=8D=E7=BD=AE?=
=?UTF-8?q?=E5=88=9D=E6=AD=A5=E4=BC=98=E5=8C=96=E5=B9=B6=E6=B5=8B=E8=AF=95?=
=?UTF-8?q?=E6=88=90=E5=8A=9F=EF=BC=8C=E8=87=AA=E6=B5=8B=E6=B5=81=E7=A8=8B?=
=?UTF-8?q?=E6=88=90=E5=8A=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_base/__manifest__.py | 1 +
sf_base/commons/Printer.py | 12 ++++
sf_base/commons/__init__.py | 1 +
sf_base/commons/common.py | 2 +-
sf_base/security/ir.model.access.csv | 3 +
sf_base/views/Printer.xml | 53 ++++++++++++++++
sf_manufacturing/models/stock.py | 72 ++++++++++++++--------
sf_manufacturing/views/stock_lot_views.xml | 2 +-
sf_warehouse/models/model.py | 20 ++++--
9 files changed, 133 insertions(+), 33 deletions(-)
create mode 100644 sf_base/commons/Printer.py
create mode 100644 sf_base/views/Printer.xml
diff --git a/sf_base/__manifest__.py b/sf_base/__manifest__.py
index 59ad967a..ceedcdd0 100644
--- a/sf_base/__manifest__.py
+++ b/sf_base/__manifest__.py
@@ -24,6 +24,7 @@
'views/tool_menu.xml',
'views/menu_fixture_view.xml',
'views/change_base_view.xml',
+ 'views/Printer.xml',
],
'demo': [
diff --git a/sf_base/commons/Printer.py b/sf_base/commons/Printer.py
new file mode 100644
index 00000000..894a274c
--- /dev/null
+++ b/sf_base/commons/Printer.py
@@ -0,0 +1,12 @@
+from odoo import models, fields
+
+
+class PrinterConfiguration(models.Model):
+ _name = 'printer.configuration'
+ _description = 'Printer Configuration'
+
+ name = fields.Char(string='名称', required=True)
+ ip_address = fields.Char(string='IP 地址', required=True)
+ port = fields.Integer(string='端口', default=9100)
+ model = fields.Many2one('ir.model', string='模型名称')
+ # 其他相关字段...
diff --git a/sf_base/commons/__init__.py b/sf_base/commons/__init__.py
index e4193cf0..63b820e7 100644
--- a/sf_base/commons/__init__.py
+++ b/sf_base/commons/__init__.py
@@ -1 +1,2 @@
from . import common
+from . import Printer
diff --git a/sf_base/commons/common.py b/sf_base/commons/common.py
index 683e8ece..9f359c9c 100644
--- a/sf_base/commons/common.py
+++ b/sf_base/commons/common.py
@@ -54,7 +54,7 @@ class PrintingUtils(models.AbstractModel):
# 假设{code}文本需要位于资产编号和二维码下方,中间位置
# 设置{code}文本位置并启用自动换行
zpl_code += "^FO300,120\n" # {code}文本的起始位置
- zpl_code += "^FB500,4,0,L,0\n" # 定义一个宽度为500点的文本框,最多4行,左对齐
+ zpl_code += "^FB400,4,0,L,0\n" # 定义一个宽度为500点的文本框,最多4行,左对齐
zpl_code += f"^A1N,40,40^FD{code}^FS\n"
# 在{code}文本框周围绘制线框
diff --git a/sf_base/security/ir.model.access.csv b/sf_base/security/ir.model.access.csv
index 92bebe5b..81cec454 100644
--- a/sf_base/security/ir.model.access.csv
+++ b/sf_base/security/ir.model.access.csv
@@ -188,3 +188,6 @@ access_sf_machine_brand_tags_group_sale_director,sf_machine_brand_tags_group_sal
access_sf_machine_brand_tags_group_plan_director,sf_machine_brand_tags_group_plan_director,model_sf_machine_brand_tags,sf_base.group_plan_director,1,0,0,0
access_sf_machine_brand_tags_group_purchase,sf_machine_brand_tags_group_purchase,model_sf_machine_brand_tags,sf_base.group_purchase,1,0,0,0
access_sf_machine_brand_tags_group_purchase_director,sf_machine_brand_tags_group_purchase_director,model_sf_machine_brand_tags,sf_base.group_purchase_director,1,0,0,0
+
+
+access_printer_configuration,printer.configuration,model_printer_configuration,base.group_user,1,1,1,1
\ No newline at end of file
diff --git a/sf_base/views/Printer.xml b/sf_base/views/Printer.xml
new file mode 100644
index 00000000..97099f42
--- /dev/null
+++ b/sf_base/views/Printer.xml
@@ -0,0 +1,53 @@
+
+
+
+
+ printer.configuration.tree
+ printer.configuration
+
+
+
+
+
+
+
+
+
+
+
+
+
+ printer.configuration.form
+ printer.configuration
+
+
+
+
+
+
+
+
+
+ 打印配置
+ printer.configuration
+ tree,form
+
+
+
+
+
+
diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py
index c9c2ebf2..2b0066b6 100644
--- a/sf_manufacturing/models/stock.py
+++ b/sf_manufacturing/models/stock.py
@@ -219,7 +219,8 @@ class StockRule(models.Model):
class ProductionLot(models.Model):
- _inherit = 'stock.lot'
+ _name = 'stock.lot'
+ _inherit = ['stock.lot', 'printing.utils']
@api.model
def generate_lot_names1(self, display_name, first_lot, count):
@@ -307,36 +308,53 @@ class ProductionLot(models.Model):
record.qr_code_image = encoded_image
- def print_qr_code(self):
- self.ensure_one() # 确保这个方法只为一个记录调用
- # if not self.lot_id:
- # raise UserError("没有找到序列号。")
- # 假设_lot_qr_code方法已经生成了二维码并保存在字段中
+ def print_single_method(self):
+
+ self.ensure_one()
qr_code_data = self.qr_code_image
if not qr_code_data:
raise UserError("没有找到二维码数据。")
+ lot_name = self.name
+ # host = "192.168.50.110" # 可以根据实际情况修改
+ # port = 9100 # 可以根据实际情况修改
- # 生成下载链接或直接触发下载
- # 此处的实现依赖于你的具体需求,以下是触发下载的一种示例
- attachment = self.env['ir.attachment'].sudo().create({
- 'datas': self.qr_code_image,
- 'type': 'binary',
- 'description': '二维码图片',
- 'name': self.name + '.png',
- # 'res_id': invoice.id,
- # 'res_model': 'stock.picking',
- 'public': True,
- 'mimetype': 'application/x-png',
- # 'model_name': 'stock.picking',
- })
- # 返回附件的下载链接
- 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',
- }
+ # 获取默认打印机配置
+ printer_config = self.env['printer.configuration'].search([('model', '=', self._name)], limit=1)
+ if not printer_config:
+ raise UserError('请先配置打印机')
+ host = printer_config.ip_address
+ port = printer_config.port
+ self.print_qr_code(lot_name, host, port)
+
+ # self.ensure_one() # 确保这个方法只为一个记录调用
+ # # if not self.lot_id:
+ # # raise UserError("没有找到序列号。")
+ # # 假设_lot_qr_code方法已经生成了二维码并保存在字段中
+ # qr_code_data = self.qr_code_image
+ # if not qr_code_data:
+ # raise UserError("没有找到二维码数据。")
+ #
+ # # 生成下载链接或直接触发下载
+ # # 此处的实现依赖于你的具体需求,以下是触发下载的一种示例
+ # attachment = self.env['ir.attachment'].sudo().create({
+ # 'datas': self.qr_code_image,
+ # 'type': 'binary',
+ # 'description': '二维码图片',
+ # 'name': self.name + '.png',
+ # # 'res_id': invoice.id,
+ # # 'res_model': 'stock.picking',
+ # 'public': True,
+ # 'mimetype': 'application/x-png',
+ # # 'model_name': 'stock.picking',
+ # })
+ # # 返回附件的下载链接
+ # 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 StockPicking(models.Model):
diff --git a/sf_manufacturing/views/stock_lot_views.xml b/sf_manufacturing/views/stock_lot_views.xml
index f637d401..bd04005c 100644
--- a/sf_manufacturing/views/stock_lot_views.xml
+++ b/sf_manufacturing/views/stock_lot_views.xml
@@ -10,7 +10,7 @@
diff --git a/sf_warehouse/models/model.py b/sf_warehouse/models/model.py
index bdf4ce32..b9f048e8 100644
--- a/sf_warehouse/models/model.py
+++ b/sf_warehouse/models/model.py
@@ -471,8 +471,15 @@ class Sf_stock_move_line(models.Model):
if not qr_code_data:
raise UserError("没有找到二维码数据。")
lot_name = self.lot_name
- host = "192.168.50.110" # 可以根据实际情况修改
- port = 9100 # 可以根据实际情况修改
+ # host = "192.168.50.110" # 可以根据实际情况修改
+ # port = 9100 # 可以根据实际情况修改
+
+ # 获取默认打印机配置
+ printer_config = self.env['printer.configuration'].search([('model', '=', self._name)], limit=1)
+ if not printer_config:
+ raise UserError('请先配置打印机')
+ host = printer_config.ip_address
+ port = printer_config.port
self.print_qr_code(lot_name, host, port)
# 返回当前wizard页面
@@ -972,6 +979,11 @@ class CustomStockMove(models.Model):
# todo 待控制
if not lot_name:
raise ValidationError("请先分配序列号")
- host = "192.168.50.110" # 可以根据实际情况修改
- port = 9100 # 可以根据实际情况修改
+ # host = "192.168.50.110" # 可以根据实际情况修改
+ # port = 9100 # 可以根据实际情况修改
+
+ # 获取默认打印机配置
+ printer_config = self.env['printer.configuration'].search([('model', '=', self._name)], limit=1)
+ host = printer_config.ip_address
+ port = printer_config.port
record.print_qr_code(lot_name, host, port)
From ba79b358a92f29486ed4d10d20b014e2adc9015a Mon Sep 17 00:00:00 2001
From: mgw <1392924357@qq.com>
Date: Wed, 20 Mar 2024 17:32:17 +0800
Subject: [PATCH 5/5] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=89=93=E5=8D=B0?=
=?UTF-8?q?=E6=9C=BA=E6=A8=A1=E5=9E=8B=E7=BB=93=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_base/commons/Printer.py | 22 ++++++-
sf_base/security/ir.model.access.csv | 1 +
sf_base/views/Printer.xml | 85 +++++++++++++++++++++++-----
sf_manufacturing/models/stock.py | 4 +-
sf_warehouse/models/model.py | 10 ++--
5 files changed, 100 insertions(+), 22 deletions(-)
diff --git a/sf_base/commons/Printer.py b/sf_base/commons/Printer.py
index 894a274c..563d9dea 100644
--- a/sf_base/commons/Printer.py
+++ b/sf_base/commons/Printer.py
@@ -1,12 +1,28 @@
from odoo import models, fields
+class Printer(models.Model):
+ _name = 'printer'
+ _description = 'Printer'
+
+ name = fields.Char(string='名称', required=True)
+ ip_address = fields.Char(string='IP 地址', required=True)
+ port = fields.Integer(string='端口', default=9100)
+
+
+class TableStyle(models.Model):
+ _name = 'table.style'
+ _description = '标签样式'
+
+ name = fields.Char(string='名称', required=True)
+ # todo
+
+
class PrinterConfiguration(models.Model):
_name = 'printer.configuration'
_description = 'Printer Configuration'
name = fields.Char(string='名称', required=True)
- ip_address = fields.Char(string='IP 地址', required=True)
- port = fields.Integer(string='端口', default=9100)
+ printer_id = fields.Many2one('printer', string='打印机')
model = fields.Many2one('ir.model', string='模型名称')
- # 其他相关字段...
+# # 其他相关字段...
diff --git a/sf_base/security/ir.model.access.csv b/sf_base/security/ir.model.access.csv
index 81cec454..4eaddff0 100644
--- a/sf_base/security/ir.model.access.csv
+++ b/sf_base/security/ir.model.access.csv
@@ -190,4 +190,5 @@ access_sf_machine_brand_tags_group_purchase,sf_machine_brand_tags_group_purchase
access_sf_machine_brand_tags_group_purchase_director,sf_machine_brand_tags_group_purchase_director,model_sf_machine_brand_tags,sf_base.group_purchase_director,1,0,0,0
+access_printer,printer,model_printer,base.group_user,1,1,1,1
access_printer_configuration,printer.configuration,model_printer_configuration,base.group_user,1,1,1,1
\ No newline at end of file
diff --git a/sf_base/views/Printer.xml b/sf_base/views/Printer.xml
index 97099f42..0e199b32 100644
--- a/sf_base/views/Printer.xml
+++ b/sf_base/views/Printer.xml
@@ -1,17 +1,44 @@
+
+ printer.tree
+ printer
+
+
+
+
+
+
+
+
+
+
+
+ printer.form
+ printer
+
+
+
+
+
printer.configuration.tree
printer.configuration
-
-
-
-
-
-
+
+
+
+
@@ -24,8 +51,7 @@
-
-
+
@@ -36,6 +62,12 @@
+
+ 打印机
+ printer
+ tree,form
+
+
打印配置
@@ -44,10 +76,37 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py
index 2b0066b6..ea271afc 100644
--- a/sf_manufacturing/models/stock.py
+++ b/sf_manufacturing/models/stock.py
@@ -322,8 +322,8 @@ class ProductionLot(models.Model):
printer_config = self.env['printer.configuration'].search([('model', '=', self._name)], limit=1)
if not printer_config:
raise UserError('请先配置打印机')
- host = printer_config.ip_address
- port = printer_config.port
+ host = printer_config.printer_id.ip_address
+ port = printer_config.printer_id.port
self.print_qr_code(lot_name, host, port)
# self.ensure_one() # 确保这个方法只为一个记录调用
diff --git a/sf_warehouse/models/model.py b/sf_warehouse/models/model.py
index b9f048e8..43f84d69 100644
--- a/sf_warehouse/models/model.py
+++ b/sf_warehouse/models/model.py
@@ -478,8 +478,8 @@ class Sf_stock_move_line(models.Model):
printer_config = self.env['printer.configuration'].search([('model', '=', self._name)], limit=1)
if not printer_config:
raise UserError('请先配置打印机')
- host = printer_config.ip_address
- port = printer_config.port
+ host = printer_config.printer_id.ip_address
+ port = printer_config.printer_id.port
self.print_qr_code(lot_name, host, port)
# 返回当前wizard页面
@@ -984,6 +984,8 @@ class CustomStockMove(models.Model):
# 获取默认打印机配置
printer_config = self.env['printer.configuration'].search([('model', '=', self._name)], limit=1)
- host = printer_config.ip_address
- port = printer_config.port
+ if not printer_config:
+ raise UserError('请先配置打印机')
+ host = printer_config.printer_id.ip_address
+ port = printer_config.printer_id.port
record.print_qr_code(lot_name, host, port)