一、去除字符串的中文、英文
def remove_letters_and_chinese(self,text):
"""字符串去除字母与中文"""
import re
pattern = r'[\u4e00-\u9fa5a-zA-Z]'
result = re.sub(pattern, '', text)
return result
二、根据时分来判断是当天还是第二天
def set_format_datetime(self,type, date1, date2):
"""
str_date1='2023-06-27'
str_date2='23:30'
"""
from datetime import datetime, timedelta
str_date1 = self.remove_letters_and_chinese(date1)
str_date2 = self.remove_letters_and_chinese(date2)
if type == 'next':
dt = datetime.strptime(f"{str_date1} {str_date2}", "%Y-%m-%d %H:%M")
else:
ql_house = int(str_date2.split(':')[0])
if 13 < ql_house < 24:
date_obj = datetime.strptime(str_date1, '%Y-%m-%d')
next_day = date_obj - timedelta(days=1)
dt = datetime.strptime(f"{next_day.strftime('%Y-%m-%d')} {str_date2}", "%Y-%m-%d %H:%M")
else:
dt = datetime.strptime(f"{str_date1} {str_date2}", "%Y-%m-%d %H:%M")
print('=====dt====----------9999---------------===', dt)
return dt.strftime("%Y-%m-%d %H:%M:%S")
三、获取两个时分的时间差
def get_on_bed_time(self, start_time, end_time):
from datetime import datetime, timedelta
# 将时间字符串转换为datetime对象
start_time = self.remove_letters_and_chinese(start_time)
end_time = self.remove_letters_and_chinese(end_time)
dt1 = datetime.strptime(start_time, '%H:%M')
dt2 = datetime.strptime(end_time, '%H:%M')
# 如果dt2比dt1大,说明时间跨越了一天,需要将dt2加上一天
if dt2 < dt1:
dt2 += timedelta(days=1)
# 计算时间差
delta = dt2 - dt1
# 将时间差转换为小时数
hours = delta.seconds // 3600
# # 将时间差转换为分钟数
minutes = delta.seconds // 60
print(f"时间差为{hours}小时或{minutes}分钟")
return delta.seconds
四、日期的加减加一天减一天
def set_report_date(self, date1):
"""获取日期"""
from datetime import datetime, timedelta
date_obj = datetime.strptime(date1, '%Y-%m-%d')
next_day = date_obj - timedelta(days=1)
return next_day.strftime("%Y-%m-%d")
五、获取区间中的日期
def get_dates_between(self, start_date, end_date):
"""获取区间中的日期"""
from datetime import datetime, timedelta
dates = []
current_date = datetime.strptime(str(start_date), "%Y-%m-%d")
end_date = datetime.strptime(str(end_date), "%Y-%m-%d")
while current_date <= end_date:
dates.append(current_date.strftime("%Y-%m-%d"))
current_date += timedelta(days=1)
return dates
六、write与create常见的操作
class Job(models.Model):
_inherit = 'hr.job'
group_id = fields.Many2one('res.groups', string=u'岗位权限', domain=[('is_job_group', '=', True)])
job_user_ids = fields.Many2many('res.users', 'zimo_m2m_job_user', string=u'岗位人员')
@api.model
def _on_create_job_user_changed(self, job):
if job.group_id and job.job_user_ids:
job.group_id.write({'users': [(4, job_user.id) for job_user in job.job_user_ids]})
@api.model
def _on_write_job_user_changed(self, job, add_user_list, remove_user_list):
if job.group_id:
# 获取当前岗位下已有的用户列表
# 根据新增的岗位人员将人员添加到权限组中
added_users = add_user_list
if added_users:
job.group_id.write({'users': [(4, user.id) for user in added_users]})
# 根据删除的岗位人员将人员从权限组中删除
removed_users = remove_user_list
if removed_users:
job.group_id.write({'users': [(3, user.id) for user in removed_users]})
@api.model_create_multi
def create(self, vals_list):
jobs = super(Job, self).create(vals_list)
for job in jobs:
group_vals = {
'name': job.name,
'category_id': self.env.ref('zimo_increment_base.module_zimo_job_title').id,
'implied_ids': [(6, 0, [self.env.ref('base.group_user').id])],
'is_job_group': True,
'users': [(4, user.id) for user in job.job_user_ids if job.job_user_ids],
}
job.group_id = self.env['res.groups'].create(group_vals)
self._on_create_job_user_changed(job)
return jobs
def write(self, vals):
old_job_user_ids = self.job_user_ids
res = super(Job, self).write(vals)
new_job_user_ids = self.job_user_ids
add_user_list = [i for i in new_job_user_ids if i not in old_job_user_ids]
remove_user_list = [i for i in old_job_user_ids if i not in new_job_user_ids]
# 分别做操作
if 'group_id' in vals or 'job_user_ids' in vals:
for job in self:
self._on_write_job_user_changed(job, add_user_list, remove_user_list)
return res