提交 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):
_name = 'common.common'
_description = u'公用基础类'
def get_local_time(self, local_time=None):
def get_local_time(self, local_time=None, user_obj=False):
"""获取Odoo时区的时间
Args:
local_time: 本地时间,如果不提供则使用当前时间
......@@ -27,7 +27,9 @@ class CommonCommon(models.Model):
local_time = datetime.datetime.now()
try:
# 获取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))
return local_time.strftime('%Y-%m-%d %H:%M:%S'), timezone_offset
......@@ -36,22 +38,7 @@ class CommonCommon(models.Model):
logging.warning(f"获取Odoo时区失败,使用UTC时间: {str(e)}")
return self.get_utc_time(), '+0'
def get_timezone_offset(self):
"""
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):
def get_local_rfc3339_time(self, local_time=None, user_obj=False):
"""获取Odoo本地时区的RFC3339格式时间
Args:
local_time: 本地时间,如果不提供则使用当前时间
......@@ -61,7 +48,11 @@ class CommonCommon(models.Model):
if not local_time:
local_time = datetime.datetime.now()
# 获取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)
# 确保时间是本地时区
if local_time.tzinfo is None:
......
# -*- coding: utf-8 -*-
# © <2016> <ToproERP hy>
# 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 pdfplumber
from io import BytesIO
from datetime import datetime, timedelta
import json
import logging
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__)
import html
......@@ -106,8 +107,9 @@ class OrderStateChangeRule(models.Model):
return data_arr
def upload_cds_attachment(self, bl_obj, name, data):
file_obj = self.env['cc.clearance.file'].sudo().search([('file_name', '=', '海关CDS申报单(import和授权方式检查拉齐等)'),
('bl_id', '=', bl_obj.id)], limit=1)
file_obj = self.env['cc.clearance.file'].sudo().search(
[('file_name', '=', '海关CDS申报单(import和授权方式检查拉齐等)'),
('bl_id', '=', bl_obj.id)], limit=1)
file_obj.file = base64.encodebytes(data)
file_obj.attachment_name = name
file_obj.is_upload = False
......@@ -116,7 +118,7 @@ class OrderStateChangeRule(models.Model):
def upload_pod_attachment(self, bl_obj, name, data):
"""尾程交接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
......@@ -165,7 +167,8 @@ class OrderStateChangeRule(models.Model):
timezone_offset = self.env['common.common'].sudo().get_time_zone(tz)
# print(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)
result = self._cr.fetchall()
bl_obj = self.env['cc.bl'].sudo().search([('id', '=', result[0][0])]) if result else False
......@@ -177,7 +180,9 @@ class OrderStateChangeRule(models.Model):
if redis_conn == 'no':
raise ValidationError('未连接redis')
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:
logging.error('fetch_mail_dlv_attachment--error:%s' % str(err))
......@@ -254,7 +259,8 @@ class OrderStateChangeRule(models.Model):
# 调整时区
utc_time = local_time - timedelta(hours=timezone_offset)
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)
result = self._cr.fetchall()
print(result)
......@@ -265,7 +271,8 @@ class OrderStateChangeRule(models.Model):
if redis_conn == 'no':
raise ValidationError('未连接redis')
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:
logging.error('fetch_mail_dlv--error:%s' % str(err))
......
......@@ -25,14 +25,14 @@
<field name="inherit_id" ref="ccs_base.form_cc_bl_view"/>
<field name="arch" type="xml">
<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 name="%(ccs_base.action_batch_input_bl_status_wizard)d" position="before">
<button name="batch_action_sync" string="Sync CC Attachment" type="object"/>
</button>
<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 name="action_show_ship_package" position="replace">
......@@ -73,7 +73,7 @@
<field name="state">code</field>
<field name="code">
if records:
records.callback_track()
records.action_callback_track()
</field>
</record>
......@@ -85,7 +85,7 @@
<field name="state">code</field>
<field name="code">
if records:
records.callback_track_bl()
records.action_callback_track_bl()
</field>
</record>
......
......@@ -8,12 +8,12 @@ import redis
import config
# 默认字符gbk
logging.basicConfig(filename='./push_data_logger.log', level=logging.INFO)
# logging.basicConfig(filename='./push_data_logger.log', level=logging.INFO)
# 设置文件字符为utf-8
# logging.basicConfig(handlers=[logging.FileHandler('logs/mail_push.log', 'a', 'utf-8')],
# format='%(asctime)s %(levelname)s %(message)s', level=logging.INFO)
logging.basicConfig(handlers=[logging.FileHandler('logs/mail_push.log', 'a', 'utf-8')],
format='%(asctime)s %(levelname)s %(message)s', level=logging.INFO)
class Order_dispose(object):
......@@ -40,7 +40,8 @@ class Order_dispose(object):
bl_record = bl_obj.browse(data['id'])
# utc_time = datetime.strptime(data['utc_time'], "%Y-%m-%d %H:%M:%S")
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:
logging.error('mail_auto_push error:%s' % str(ex))
return res_data
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论