提交 55556065 authored 作者: 刘擎阳's avatar 刘擎阳

Merge branch 'develop' of https://e.coding.net/yizuo/hh_ccs/hh_ccs into develop

...@@ -16,7 +16,7 @@ class CommonCommon(models.Model): ...@@ -16,7 +16,7 @@ class CommonCommon(models.Model):
_name = 'common.common' _name = 'common.common'
_description = u'公用基础类' _description = u'公用基础类'
def get_local_time(self, local_time=None): def get_local_time(self, local_time=None, user_obj=False):
"""获取Odoo时区的时间 """获取Odoo时区的时间
Args: Args:
local_time: 本地时间,如果不提供则使用当前时间 local_time: 本地时间,如果不提供则使用当前时间
...@@ -27,7 +27,9 @@ class CommonCommon(models.Model): ...@@ -27,7 +27,9 @@ class CommonCommon(models.Model):
local_time = datetime.datetime.now() local_time = datetime.datetime.now()
try: try:
# 获取Odoo配置的时区 # 获取Odoo配置的时区
user_tz = self.env.user.tz or 'UTC' if not user_obj:
user_obj = self.env.user
user_tz = user_obj.tz or 'UTC'
timezone_offset = self.env['common.common'].sudo().get_time_zone(user_tz) timezone_offset = self.env['common.common'].sudo().get_time_zone(user_tz)
local_time = local_time + datetime.timedelta(hours=int(timezone_offset)) local_time = local_time + datetime.timedelta(hours=int(timezone_offset))
return local_time.strftime('%Y-%m-%d %H:%M:%S'), timezone_offset return local_time.strftime('%Y-%m-%d %H:%M:%S'), timezone_offset
...@@ -36,22 +38,7 @@ class CommonCommon(models.Model): ...@@ -36,22 +38,7 @@ class CommonCommon(models.Model):
logging.warning(f"获取Odoo时区失败,使用UTC时间: {str(e)}") logging.warning(f"获取Odoo时区失败,使用UTC时间: {str(e)}")
return self.get_utc_time(), '+0' return self.get_utc_time(), '+0'
def get_timezone_offset(self): def get_local_rfc3339_time(self, local_time=None, user_obj=False):
"""
Get UTC offset from Odoo's timezone configuration
Returns format like: UTC+8, UTC-5, etc.
"""
try:
tz = self.env.user.tz or 'UTC'
if self.env.user.name == 'OdooBot':
tz = 'Asia/Shanghai'
user_tz = int(self.init_timezone_data(tz))
return user_tz
except Exception as e:
_logger.error("Timezone offset calculation error: %s", str(e))
return "UTC+0" # Default t
def get_local_rfc3339_time(self, local_time=None):
"""获取Odoo本地时区的RFC3339格式时间 """获取Odoo本地时区的RFC3339格式时间
Args: Args:
local_time: 本地时间,如果不提供则使用当前时间 local_time: 本地时间,如果不提供则使用当前时间
...@@ -61,7 +48,11 @@ class CommonCommon(models.Model): ...@@ -61,7 +48,11 @@ class CommonCommon(models.Model):
if not local_time: if not local_time:
local_time = datetime.datetime.now() local_time = datetime.datetime.now()
# 获取Odoo配置的时区 # 获取Odoo配置的时区
user_tz = self.env.user.tz or 'UTC' if not user_obj:
user_obj = self.env.user
user_tz = user_obj.tz or 'UTC'
timezone_offset = self.env['common.common'].sudo().get_time_zone(user_tz)
local_time = local_time + datetime.timedelta(hours=int(timezone_offset))
local_tz = pytz.timezone(user_tz) local_tz = pytz.timezone(user_tz)
# 确保时间是本地时区 # 确保时间是本地时区
if local_time.tzinfo is None: if local_time.tzinfo is None:
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# © <2016> <ToproERP hy> # © <2016> <ToproERP hy>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from datetime import datetime
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError, Warning
import logging
import json
import xlrd
import base64 import base64
import pdfplumber import json
from io import BytesIO import logging
from datetime import datetime, timedelta
import re import re
from datetime import datetime, timedelta
from io import BytesIO
import pdfplumber
import xlrd
from odoo import models
from odoo.exceptions import ValidationError
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
import html import html
...@@ -106,8 +107,9 @@ class OrderStateChangeRule(models.Model): ...@@ -106,8 +107,9 @@ class OrderStateChangeRule(models.Model):
return data_arr return data_arr
def upload_cds_attachment(self, bl_obj, name, data): def upload_cds_attachment(self, bl_obj, name, data):
file_obj = self.env['cc.clearance.file'].sudo().search([('file_name', '=', '海关CDS申报单(import和授权方式检查拉齐等)'), file_obj = self.env['cc.clearance.file'].sudo().search(
('bl_id', '=', bl_obj.id)], limit=1) [('file_name', '=', '海关CDS申报单(import和授权方式检查拉齐等)'),
('bl_id', '=', bl_obj.id)], limit=1)
file_obj.file = base64.encodebytes(data) file_obj.file = base64.encodebytes(data)
file_obj.attachment_name = name file_obj.attachment_name = name
file_obj.is_upload = False file_obj.is_upload = False
...@@ -116,7 +118,7 @@ class OrderStateChangeRule(models.Model): ...@@ -116,7 +118,7 @@ class OrderStateChangeRule(models.Model):
def upload_pod_attachment(self, bl_obj, name, data): def upload_pod_attachment(self, bl_obj, name, data):
"""尾程交接POD(待大包数量和箱号) 文件上传与同步""" """尾程交接POD(待大包数量和箱号) 文件上传与同步"""
file_objs = self.env['cc.clearance.file'].sudo().search([('file_name', '=', '尾程交接POD(待大包数量和箱号)'), file_objs = self.env['cc.clearance.file'].sudo().search([('file_name', '=', '尾程交接POD(待大包数量和箱号)'),
('bl_id', 'in', bl_obj.ids)]) ('bl_id', 'in', bl_obj.ids)])
# 最大重试次数 # 最大重试次数
max_retries = 2 max_retries = 2
...@@ -165,7 +167,8 @@ class OrderStateChangeRule(models.Model): ...@@ -165,7 +167,8 @@ class OrderStateChangeRule(models.Model):
timezone_offset = self.env['common.common'].sudo().get_time_zone(tz) timezone_offset = self.env['common.common'].sudo().get_time_zone(tz)
# print(timezone_offset) # print(timezone_offset)
utc_time = local_time - timedelta(hours=int(timezone_offset)) utc_time = local_time - timedelta(hours=int(timezone_offset))
sql = "select id from cc_bl where UPPER(REPLACE(REPLACE(REPLACE(bl_no, ' ', ''), '-', ''), '/', '')) = '{0}' order by create_date desc limit 1".format(order_no.replace(' ', '').replace('-', '').replace('/', '')) sql = "select id from cc_bl where UPPER(REPLACE(REPLACE(REPLACE(bl_no, ' ', ''), '-', ''), '/', '')) = '{0}' order by create_date desc limit 1".format(
order_no.replace(' ', '').replace('-', '').replace('/', ''))
self._cr.execute(sql) self._cr.execute(sql)
result = self._cr.fetchall() result = self._cr.fetchall()
bl_obj = self.env['cc.bl'].sudo().search([('id', '=', result[0][0])]) if result else False bl_obj = self.env['cc.bl'].sudo().search([('id', '=', result[0][0])]) if result else False
...@@ -177,7 +180,9 @@ class OrderStateChangeRule(models.Model): ...@@ -177,7 +180,9 @@ class OrderStateChangeRule(models.Model):
if redis_conn == 'no': if redis_conn == 'no':
raise ValidationError('未连接redis') raise ValidationError('未连接redis')
else: else:
redis_conn.lpush('mail_push_package_list', json.dumps({'id': bl_obj.id, 'utc_time': utc_time.strftime("%Y-%m-%d %H:%M:%S")})) redis_conn.lpush('mail_push_package_list', json.dumps(
{'id': bl_obj.id, 'user_login': users_obj.login,
'utc_time': utc_time.strftime("%Y-%m-%d %H:%M:%S")}))
except Exception as err: except Exception as err:
logging.error('fetch_mail_dlv_attachment--error:%s' % str(err)) logging.error('fetch_mail_dlv_attachment--error:%s' % str(err))
...@@ -254,7 +259,8 @@ class OrderStateChangeRule(models.Model): ...@@ -254,7 +259,8 @@ class OrderStateChangeRule(models.Model):
# 调整时区 # 调整时区
utc_time = local_time - timedelta(hours=timezone_offset) utc_time = local_time - timedelta(hours=timezone_offset)
sql = "select id from cc_bl where UPPER(REPLACE(REPLACE(REPLACE(bl_no, ' ', ''), '-', ''), '/', '')) = '{0}' " \ sql = "select id from cc_bl where UPPER(REPLACE(REPLACE(REPLACE(bl_no, ' ', ''), '-', ''), '/', '')) = '{0}' " \
"and transport_tool_name='{1}' order by create_date desc limit 1".format(order_no.replace(' ', '').replace('-', '').replace('/', ''), voyage_name) "and transport_tool_name='{1}' order by create_date desc limit 1".format(
order_no.replace(' ', '').replace('-', '').replace('/', ''), voyage_name)
self._cr.execute(sql) self._cr.execute(sql)
result = self._cr.fetchall() result = self._cr.fetchall()
print(result) print(result)
...@@ -265,7 +271,8 @@ class OrderStateChangeRule(models.Model): ...@@ -265,7 +271,8 @@ class OrderStateChangeRule(models.Model):
if redis_conn == 'no': if redis_conn == 'no':
raise ValidationError('未连接redis') raise ValidationError('未连接redis')
else: else:
redis_conn.lpush('mail_push_package_list', json.dumps({'id': bl_obj.id, 'utc_time': utc_time.strftime("%Y-%m-%d %H:%M:%S")})) redis_conn.lpush('mail_push_package_list', json.dumps(
{'id': bl_obj.id, 'utc_time': utc_time.strftime("%Y-%m-%d %H:%M:%S")}))
except Exception as err: except Exception as err:
logging.error('fetch_mail_dlv--error:%s' % str(err)) logging.error('fetch_mail_dlv--error:%s' % str(err))
......
...@@ -25,14 +25,14 @@ ...@@ -25,14 +25,14 @@
<field name="inherit_id" ref="ccs_base.form_cc_bl_view"/> <field name="inherit_id" ref="ccs_base.form_cc_bl_view"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<button name="%(ccs_base.action_batch_input_ship_package_wizard)d" position="after"> <button name="%(ccs_base.action_batch_input_ship_package_wizard)d" position="after">
<button name="callback_track" string="Sync Package Status" type="object"/> <button name="action_callback_track" string="Sync Package Status" type="object"/>
</button> </button>
<button name="%(ccs_base.action_batch_input_bl_status_wizard)d" position="before"> <button name="%(ccs_base.action_batch_input_bl_status_wizard)d" position="before">
<button name="batch_action_sync" string="Sync CC Attachment" type="object"/> <button name="batch_action_sync" string="Sync CC Attachment" type="object"/>
</button> </button>
<button name="%(ccs_base.action_batch_input_bl_status_wizard)d" position="after"> <button name="%(ccs_base.action_batch_input_bl_status_wizard)d" position="after">
<!--增加同步提单状态的按钮--> <!--增加同步提单状态的按钮-->
<button name="callback_track_bl" string="Sync Bill Of Loading Status" type="object"/> <button name="action_callback_track_bl" string="Sync Bill Of Loading Status" type="object"/>
</button> </button>
<button name="action_show_ship_package" position="replace"> <button name="action_show_ship_package" position="replace">
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
<field name="state">code</field> <field name="state">code</field>
<field name="code"> <field name="code">
if records: if records:
records.callback_track() records.action_callback_track()
</field> </field>
</record> </record>
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
<field name="state">code</field> <field name="state">code</field>
<field name="code"> <field name="code">
if records: if records:
records.callback_track_bl() records.action_callback_track_bl()
</field> </field>
</record> </record>
......
...@@ -8,12 +8,12 @@ import redis ...@@ -8,12 +8,12 @@ import redis
import config import config
# 默认字符gbk # 默认字符gbk
logging.basicConfig(filename='./push_data_logger.log', level=logging.INFO) # logging.basicConfig(filename='./push_data_logger.log', level=logging.INFO)
# 设置文件字符为utf-8 # 设置文件字符为utf-8
# logging.basicConfig(handlers=[logging.FileHandler('logs/mail_push.log', 'a', 'utf-8')], logging.basicConfig(handlers=[logging.FileHandler('logs/mail_push.log', 'a', 'utf-8')],
# format='%(asctime)s %(levelname)s %(message)s', level=logging.INFO) format='%(asctime)s %(levelname)s %(message)s', level=logging.INFO)
class Order_dispose(object): class Order_dispose(object):
...@@ -40,7 +40,8 @@ class Order_dispose(object): ...@@ -40,7 +40,8 @@ class Order_dispose(object):
bl_record = bl_obj.browse(data['id']) bl_record = bl_obj.browse(data['id'])
# utc_time = datetime.strptime(data['utc_time'], "%Y-%m-%d %H:%M:%S") # utc_time = datetime.strptime(data['utc_time'], "%Y-%m-%d %H:%M:%S")
utc_time = data.get('utc_time') utc_time = data.get('utc_time')
bl_record.mail_auto_push(utc_time, ship_packages, action_type) user_login = data.get('user_login')
bl_record.mail_auto_push(utc_time, ship_packages, action_type, user_login, config.pda_db_user)
except Exception as ex: except Exception as ex:
logging.error('mail_auto_push error:%s' % str(ex)) logging.error('mail_auto_push error:%s' % str(ex))
return res_data return res_data
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论