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

    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. JUC并发—15.红黑树详解

    目录 1.红黑树的定义性质和推论 2.红黑树的旋转操作 3.红黑树之添加结点的方法 4.红黑树之删除结点的方法一 5.红黑树之删除结点的方法二 1.红黑树的定义性质和推论 (1)红黑树的定义和性质 ( ...

  2. Spring Boot 3.0深度实战:从核心特性到生产级调优

    一.Spring Boot 3.0核心特性解读 1.1 JDK 17 LTS支持(实测性能提升) 记录类(Record)与Spring Data JPA完美适配 模式匹配简化类型判断 密封类(Seal ...

  3. rabbitmq的基本使用

    使用MQ的三大作用:1.同步变异步2.流量削峰3.解耦降低服务间的耦合性要不要使用MQ,需不需要使用MQ依据项目的需要做选择. 使用场景: 例如:注册用户时候,发送激活邮件.监控应用中抛出的异常,邮件 ...

  4. phpstorm、goland常用快捷键

    1) 文件操作相关的快捷键 快捷键 作用 Ctrl + E 打开最近浏览过的文件 Ctrl + N 快速打开某个 struct 结构体所在的文件 Ctrl + Shift + N 快速打开文件 Shi ...

  5. jquery简单的上传图片预览

    html <div id="bcd"></div> <input type="file" id="abc"&g ...

  6. burp suite使用(一) --- 抓包,截包,改包

    接下来我将以一个新手的角度讲述如何使用burp来抓包,截包和改包. 我采用的是UC浏览器来配合burp的使用. 1.设置浏览器 设置---其他---更改代理设置 由于UC浏览器采用的是ie的内核,所以 ...

  7. LaTeX配置说明

    LaTex_intro 1.VSCode 安装 微软编辑器:VSCode 配置 安装 LaTeX Workshop 插件 settings.json 路径为:C:\Users\Administrato ...

  8. TensorFlow重新导入restore报错: OP_REQUIRES failed at save_restore_v2_ops.cc:184 : Not found: Key Variable not found in checkpoint

    最近在解决TensorFlow模型重新导入时遇到下面这个问题,发现网上很多解决办法都在误导,其实报错已经很明显说明问题的根源,只是我们不一定找到问题的根源.报错显示 不能在快照中找到 对应的键值. 报 ...

  9. Python科学计算系列4—函数和数列极限

    1.数列极限 例1:求下列数列的极限 代码如下: from sympy import * n, k = symbols('n k') f1 = limit(n / (factorial(n) ** ( ...

  10. ESP-IDF教程1 开发环境

    1.开发环境 对于 ESP32 系列芯片的开发环境主要有如下几种方式: ESP-IDF(Espressif IoT Development Framework) Arduino PlatformIO ...