Compare commits
4 Commits
feature/to
...
f6d8cb6267
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f6d8cb6267 | ||
|
|
c898e02860 | ||
|
|
5477582a69 | ||
|
|
9cb22d810e |
@@ -13,7 +13,11 @@ class ProductTemplate(models.Model):
|
||||
template_id.purchase_request = product_id.purchase_request
|
||||
return template_id
|
||||
|
||||
|
||||
class ProdcutProduct(models.Model):
|
||||
_inherit = 'product.product'
|
||||
|
||||
def copy_template(self, product_template_id):
|
||||
""" 复制成品模板时,复制采购申请 """
|
||||
super(ProductTemplate, self).copy_template(product_template_id)
|
||||
super(ProdcutProduct, self).copy_template(product_template_id)
|
||||
self.purchase_request = product_template_id.purchase_request
|
||||
|
||||
@@ -6,6 +6,10 @@ class ProductTemplate(models.Model):
|
||||
is_manual_processing = fields.Boolean(string='人工线下加工')
|
||||
is_customer_provided = fields.Boolean(string='客供料')
|
||||
|
||||
|
||||
class ProductProduct(models.Model):
|
||||
_inherit = 'product.product'
|
||||
|
||||
def copy_template(self, product_template_id):
|
||||
if not isinstance(product_template_id, ProductTemplate):
|
||||
raise ValueError('%s必须是ProductTemplate类型' % product_template_id)
|
||||
|
||||
@@ -4,6 +4,7 @@ import json
|
||||
import logging
|
||||
from odoo.addons.sf_mrs_connect.controllers.controllers import Sf_Mrs_Connect
|
||||
from odoo.addons.sf_manufacturing.controllers.controllers import Manufacturing_Connect
|
||||
from odoo.addons.sf_base.decorators.api_log import api_log
|
||||
from datetime import datetime
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
@@ -12,6 +13,7 @@ class WorkorderExceptionConroller(http.Controller):
|
||||
|
||||
@http.route('/AutoDeviceApi/BillError', type='json', auth='public', methods=['GET', 'POST'], csrf=False,
|
||||
cors="*")
|
||||
@api_log('工单对接错误', requester='中控系统')
|
||||
def workder_exception(self, **kw):
|
||||
"""
|
||||
记录工单异常
|
||||
|
||||
@@ -103,12 +103,19 @@ class PrintingUtils(models.AbstractModel):
|
||||
self.send_to_printer(host, port, zpl_code)
|
||||
|
||||
|
||||
def add_qr_code_to_pdf(self, pdf_path:str, content:str, buttom_text:Optional[str]=False):
|
||||
def add_qr_code_to_pdf(
|
||||
self,
|
||||
pdf_path:str,
|
||||
content:str,
|
||||
qr_code_buttom_text:Optional[str]=False,
|
||||
buttom_text:Optional[str]=False,
|
||||
):
|
||||
"""
|
||||
在PDF文件中添加二维码
|
||||
:param pdf_path: PDF文件路径
|
||||
:param content: 二维码内容
|
||||
:param buttom_text: 二维码下方文字
|
||||
:param qr_code_buttom_text: 二维码下方文字
|
||||
:param buttom_text: 正文下方文字
|
||||
:return: 是否成功
|
||||
"""
|
||||
if not os.path.exists(pdf_path):
|
||||
@@ -156,8 +163,9 @@ class PrintingUtils(models.AbstractModel):
|
||||
existing_pdf = PdfFileReader(original_file)
|
||||
output = PdfFileWriter()
|
||||
|
||||
# 处理第一页
|
||||
page = existing_pdf.getPage(0)
|
||||
# 处理最后一页
|
||||
last_page = existing_pdf.getNumPages() - 1
|
||||
page = existing_pdf.getPage(last_page)
|
||||
# 获取页面尺寸
|
||||
page_width = float(page.mediaBox.getWidth())
|
||||
page_height = float(page.mediaBox.getHeight())
|
||||
@@ -179,13 +187,21 @@ class PrintingUtils(models.AbstractModel):
|
||||
qr_y = margin + 20 # 将二维码向上移动一点,为文字留出空间
|
||||
c.drawImage(qr_temp_path, page_width - qr_size - margin, qr_y, width=qr_size, height=qr_size)
|
||||
|
||||
if buttom_text:
|
||||
if qr_code_buttom_text:
|
||||
# 在二维码下方绘制文字
|
||||
text = buttom_text
|
||||
text = qr_code_buttom_text
|
||||
text_width = c.stringWidth(text, "SimSun" if font_found else "Helvetica", 10) # 准确计算文字宽度
|
||||
text_x = page_width - qr_size - margin + (qr_size - text_width) / 2 # 文字居中对齐
|
||||
text_y = margin + 20 # 文字位置靠近底部
|
||||
c.drawString(text_x, text_y, text)
|
||||
|
||||
if buttom_text:
|
||||
# 在下方中间添加文字
|
||||
text = button_text
|
||||
text_width = c.stringWidth(text, "SimSun" if font_found else "Helvetica", 10) # 准确计算文字宽度
|
||||
text_x = (page_width - text_width) / 2 # 文字居中对齐
|
||||
text_y = margin + 20 # 文字位置靠近底部
|
||||
c.drawString(text_x, text_y, text)
|
||||
|
||||
c.save()
|
||||
|
||||
@@ -196,11 +212,12 @@ class PrintingUtils(models.AbstractModel):
|
||||
|
||||
# 合并原始页面和二维码页面
|
||||
page.mergePage(qr_page)
|
||||
output.addPage(page)
|
||||
|
||||
# 添加剩余的页面
|
||||
for i in range(1, existing_pdf.getNumPages()):
|
||||
for i in range(0, last_page):
|
||||
output.addPage(existing_pdf.getPage(i))
|
||||
|
||||
output.addPage(page)
|
||||
|
||||
# 保存最终的PDF到一个临时文件
|
||||
final_temp_path = pdf_path + '.tmp'
|
||||
|
||||
@@ -56,6 +56,7 @@ class Manufacturing_Connect(http.Controller):
|
||||
|
||||
@http.route('/AutoDeviceApi/GetShiftPlan', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False,
|
||||
cors="*")
|
||||
@api_log('获取日计划', requester='中控系统')
|
||||
def get_ShiftPlan(self, **kw):
|
||||
"""
|
||||
自动化每天获取机台日计划
|
||||
|
||||
@@ -56,10 +56,10 @@ class SaleOrder(models.Model):
|
||||
'jikimo_sale_multiple_supply_methods.product_template_manual_processing').sudo()
|
||||
|
||||
# 复制成品模板上的属性
|
||||
line.product_id.product_tmpl_id.copy_template(product_template_id)
|
||||
line.product_id.copy_template(product_template_id)
|
||||
# 将模板上的single_manufacturing属性复制到成品上
|
||||
line.product_id.single_manufacturing = product_template_id.single_manufacturing
|
||||
line.product_id.tracking = product_template_id.tracking
|
||||
# line.product_id.single_manufacturing = product_template_id.single_manufacturing
|
||||
# line.product_id.tracking = product_template_id.tracking
|
||||
|
||||
order_id = self
|
||||
product = line.product_id
|
||||
@@ -76,7 +76,7 @@ class SaleOrder(models.Model):
|
||||
'embryo_redundancy_id': line.embryo_redundancy_id,
|
||||
}
|
||||
product_name = ''
|
||||
match = re.search(r'(S\d{5}-\d)', product.name)
|
||||
match = re.search(r'(S\d{5}-\d*)', product.name)
|
||||
# 如果匹配成功,提取结果
|
||||
if match:
|
||||
product_name = match.group(0)
|
||||
|
||||
@@ -41,6 +41,7 @@ class Manufacturing_Connect(http.Controller):
|
||||
|
||||
@http.route('/AutoDeviceApi/ToolInventory', type='json', auth='none', methods=['GET', 'POST'], csrf=False,
|
||||
cors="*")
|
||||
@api_log('功能刀具清单', requester='中控系统')
|
||||
def get_functional_tool_inventory_Info(self, **kw):
|
||||
"""
|
||||
功能刀具清单接口
|
||||
@@ -70,6 +71,7 @@ class Manufacturing_Connect(http.Controller):
|
||||
|
||||
@http.route('/AutoDeviceApi/ToolEntity', type='json', auth='none', methods=['GET', 'POST'], csrf=False,
|
||||
cors="*")
|
||||
@api_log('功能刀具', requester='中控系统')
|
||||
def get_functional_tool_entity_Info(self, **kw):
|
||||
"""
|
||||
功能刀具列表接口
|
||||
|
||||
Reference in New Issue
Block a user