123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- # -*- coding: utf-8 -*-
- import pytz
- import datetime
- from odoo.exceptions import ValidationError
- # @staticmethod
- def is_string(s):
- return isinstance(s, str)
- def is_list(s):
- return type(s).__name__ == 'list'
- # 以小数形式保存的时间(整数部分为小时;小数部分×60为分钟),计算后,得到字符串的时间。
- # 例如:1.33333333333,计算后得到:':01:20'
- def get_time_str_from_time(time_float):
- hour = int(time_float)
- minute = int(round((time_float - hour) * 60))
- return '%(hour)02d:%(minute)02d' % {'hour': hour, 'minute': minute}
- # 按指定步长划分list(最后一组,还剩几个,就只有几个元素)
- def list_split(lst, max_length):
- return [lst[i:i + max_length] for i in range(0, len(lst), max_length)]
- # def split_list(arr, length):
- # return map(lambda b: arr[b:b + length], range(0, len(arr), length))
- def get_dic_from_list(lst):
- dic = {}
- for item in lst:
- if not item or len(item) < 2:
- continue
- dic[item[0]] = item[1]
- return dic
- def get_hour_diff(self):
- """
- 获取时区间(标准时间 -- 东八区)的时间差 --> 小时数
- :return:
- """
- tz_context = self._context.get('tz') or self.env.user.tz or 'Asia/Shanghai'
- tz = pytz.timezone(tz_context)
- hour_diff = int(tz._utcoffset.total_seconds() / 3600)
- return hour_diff
- def get_local_datetime(self, date_str_or_datetime):
- """
- 根据日期时间或字符串(标准时间),得到本地日期时间
- :param self: BO的self
- :param date_str_or_datetime: 日期时间或字符串(标准时间)
- :return: 本地日期时间。datetime类型
- """
- date = get_datetime(date_str_or_datetime)
- diff_hour = get_hour_diff(self)
- local_date = date + datetime.timedelta(hours=diff_hour)
- return local_date
- def get_local_datetime_str(self, date_str_or_datetime):
- """
- 根据日期时间或字符串(标准时间),得到本地日期时间字符串
- :param self: BO的self
- :param date_str_or_datetime: 日期时间或字符串(标准时间)
- :return: 本地日期时间字符串
- """
- local_date = get_local_datetime(self, date_str_or_datetime)
- return local_date.strftime('%Y-%m-%d %H:%M:%S')
- def get_datetime(date_str_or_datetime):
- """
- 根据日期时间或字符串,得到日期时间
- :param date_str_or_datetime: 日期时间或字符串(标准时间)
- :return: 日期时间。datetime类型
- """
- if isinstance(date_str_or_datetime, basestring):
- if len(date_str_or_datetime) > 19:
- _date = date_str_or_datetime[:19]
- elif len(date_str_or_datetime) > 16:
- _date = date_str_or_datetime[:16] + ':00'
- elif len(date_str_or_datetime) > 13:
- _date = date_str_or_datetime[:13] + ':00:00'
- elif len(date_str_or_datetime) > 10:
- _date = date_str_or_datetime[:10] + ' 00:00:00'
- else:
- raise ValidationError(u'不是合法的日期:' + date_str_or_datetime)
- return datetime.datetime.strptime(_date, '%Y-%m-%d %H:%M:%S')
- if isinstance(date_str_or_datetime, datetime.datetime):
- return date_str_or_datetime
- raise ValidationError(u'不是合法的日期:{},类型:{}'.format(date_str_or_datetime, type(date_str_or_datetime).__name__))
- def get_amount_result(bill, amount_values):
- """
- 合计计算时,取要更新的值 -- 如果合计值 与 原来的值一致,那么就不更新
- :param bill:
- :param amount_values:
- :return:
- """
- result = {}
- for key in amount_values:
- if getattr(bill, key) != amount_values[key]:
- result[key] = amount_values[key]
- return result
- def get_second_unit_number(goods_id, main_unit_number):
- """
- 计算 辅数量
- :param goods_id:
- :param main_unit_number:
- :return:
- """
- if not goods_id or not main_unit_number:
- return 0
- if not goods_id.need_change():
- return 0
- if goods_id.second_rate != 0:
- return main_unit_number * goods_id.main_rate / goods_id.second_rate
- def return_message(msg, time_span=1000):
- """
- 提示信息。用于单据中,例如点击按钮后的提示、点击“动作”中的操作(对应为model中的方法)后的提示。
- 示例:return util.return_message(u'操作成功')
- @param msg: 要显示的信息。支持html。例如:u'<font color=#cc9966>没有做任何操作。</font><br>到对应的方法中,取消注销即可测试。<br>一行一个测试'
- @param time_span: 信息显示时间
- @return: 执行显示提示信息的client。用于return 后面。
- """
- return {
- 'type': 'ir.actions.client',
- 'tag': 'show',
- 'params': {'info': msg, 'time': time_span}
- }
- def return_message2(msg_arr, time_span=5000):
- """
- 提示信息。
- 用于单据中,例如点击按钮后的提示、点击“动作”中的操作(对应为model中的方法)后的提示。
- 示例:return util.return_message2([u'操作成功'])
- @param msg_arr: 要显示的信息。
- 数组,每个元素表示一段信息。
- 支持html。例如:[u'<font color=#cc9966>没有做任何操作。</font><br>到对应的方法中,取消注销即可测试。<br>一行一个测试']
- @param time_span: 信息显示时间
- @return: 执行显示提示信息的client。用于return 后面。
- """
- return {
- 'type': 'ir.actions.client',
- 'tag': 'show2',
- 'params': {'info_array': msg_arr, 'time': time_span}
- }
|