一、去除字符串的中文、英文

    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

odoo中常用功能代码小片段的更多相关文章

  1. IOS开发-OC学习-常用功能代码片段整理

    IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...

  2. NC65在日常开发中常用的代码写法

    标题 NC65开发相关代码 版本 1.0.1 作者 walton 说明 收集NC在日常开发中常用的代码写法,示例展示 1.查询 1.1 通过BaseDAO查询结果集并转换 //通过BaseDAO进行查 ...

  3. Apache运维中常用功能配置笔记梳理

    Apache 是一款使用量排名第一的 web 服务器,LAMP 中的 A 指的就是它.由于其开源.稳定.安全等特性而被广泛使用.下边记录了使用 Apache 以来经常用到的功能,做此梳理,作为日常运维 ...

  4. 项目中常用功能,如:流媒体、健康数据(步数等)等-b

    整理iOS开发中使用的各种流媒体和常用的高级功能.由于时间关系,目前只写了一部分功能,全部都采用的是系统方法,没用第三方,截图如下: screen1.png screen2.png 个人比较懒,不爱多 ...

  5. 【DRP】-Dao层常用功能代码:增删改查

    本系列博客内容为:做DRP系统中Dao层常用功能. 该项目采用MVC架构 C(Controller)控制器,主要职责;1.取得表单参数:2.调用业务逻辑:3.转向页面 M(Model)模型,主要职责: ...

  6. VS中常用C#代码段快速输入总结

    转自:https://blog.csdn.net/a980433875/article/details/12231673 Visual Studio 中有很多代码段都可以直接简写然后按TAB快速输入编 ...

  7. WebApp 开发中常用的代码片段

    其实这里面的多数都是 iOS 上面的代码.其他平台的就没有去验证了. HTML, 从HTML文档的开始到结束排列: <meta name=”viewport” content=”width=de ...

  8. jquery代码小片段

    1. 使用jQuery来切换样式表 //找出你希望切换的媒体类型(media-type),然后把href设置成新的样式表. $(‘link[media="screen"]‘).at ...

  9. SEO中常用HTML代码大全,及权重排序

    做SEO必须要懂HTML,说的是一点都没错,不过其实是不需要全部都懂,最重点的你懂了会用,基本上都是事半功倍了.可以这么说一个不懂代码的优化人员不算是一个合格的好优化.下面就总结一下做优化,必须要懂得 ...

  10. Android开发中常用的一些小技巧(转载)

    http://www.jb51.net/article/61135.htm Activity.startActivities() 常用于在应用程序中间启动其他的Activity. TextUtils. ...

随机推荐

  1. Opera打不开网页解决办法

    打开目录C:\Users\用户名\AppData\Roaming\Opera Software\Opera Stable 2.查找{"country":"CN" ...

  2. git码云安装及使用菜鸟教程

    1.下载Windows本地码云 https://mirrors.huaweicloud.com/git-for-windows/(华为镜像下载),选择合适的版本下载,此处下载速度要快些 2.登录码云官 ...

  3. php用token做登录认证

    https://blog.csdn.net/qq_20869933/article/details/133201967 作用: PHP 使用token验证可有效的防止非法来源数据提交访问,增加数据操作 ...

  4. 【多进程并发笔记】Python-Multiprocess

    目录 调用函数后,函数内的变量如何释放? python2.7怎么使用多线程加速for loop 多进程进程池,函数序列化错误的处理 Time模块计算程序运行时间 使用多进程,Start()后,如何获得 ...

  5. 【Python】转载一个python 爬虫的帖子

    原帖地址 原帖标题:爬取图网的4K图片自动保存本地 https://www.52pojie.cn/thread-1809600-1-1.html (出处: 吾爱破解论坛) python 代码 impo ...

  6. fs的proxy_media模式失效

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. 在fs的使用过程中,某些场景只需要对rtp媒体做透传,又不需要任何处理. 在fs1.6的版本中,我们可以使用proxy_media来 ...

  7. 三分钟教学:手把手教你实现Arduino发布第三方库

    三分钟教学:手把手教你实现Arduino发布第三方库 原文链接: 手把手教你实现Arduino发布第三方库 摘要 Arduino 发布第三方库的流程包括:构建库的基本框架后将其打包并上传至 GitHu ...

  8. mac 源码编译安装php8.3.9

    前提条件 确保你已经安装了 Homebrew 和 Xcode Command Line Tools.你可以通过以下命令安装它们: /bin/zsh -c "$(curl -fsSL http ...

  9. Redis 持久化机制简介【Redis 系列之三】

    〇.前言 Redis 持久化主要有两种:RDB(数据快照模式).AOF(追加模式),另外就是这两种模式的混合模式用. 本文将对这三种情况进行详细介绍. 博主 Redis 相关文章都在这里了:https ...

  10. jupyter -- 数据分析可视化开发工具

    博客地址:https://www.cnblogs.com/zylyehuo/ jupyter介绍 jupyter就是anaconda提供的一个基于浏览器的可视化开发工具 jupyter的基本使用 启动 ...