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

    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. .NET周刊【2月第4期 2025-02-23】

    国内文章 [翻译] 为什么 Tracebit 用 C# 开发 https://www.cnblogs.com/liuliu-66/p/-/why-tracebit-is-written-in-c-sh ...

  2. Ethernet协议和ARP协议分析

    实验介绍: 在信息的传输中,协议至关重要. 使用的实验环境是 kali 2017.arp协议还需要用到靶机centos7 如果是kali的其他版本可能会导致无法抓包. 一:网络分析工具(kali) S ...

  3. AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗

    最近在研究AI Agent如何调用三方API,整理了一篇文章,分享给大家. 调用三方 API(Function Calling)不是通过提示词(Prompt)来实现的,而是通过函数调用机制(Funct ...

  4. linux npm 全局安装 command not found

    前言 在 linux 使用 npm 全局安装一个模块时,会提示命令找不到. 例如:npm install @quasar/cli -g 后 $ quasar -v quasar: command no ...

  5. php处理跨域

    1.允许所有域名访问 header('Access-Control-Allow-Origin: *'); 2.允许单个域名访问 header('Access-Control-Allow-Origin: ...

  6. docker mysql SQLSTATE[HY000] [2002] Connection refused

    使用docker搭建lnmp环境,使用的是分容器的搭建方案 框架使用thinkphp,想要连接数据MySQL,一直显示"SQLSTATE[HY000] [2002] Connection r ...

  7. 分享一个我遇到过的“量子力学”级别的BUG。

    你好呀,我是歪歪. 前几天在网上冲浪的时候,看到知乎上的这个话题: 一瞬间,一次历史悠久但是记忆深刻的代码调试经历,"刷"的一下,就在我的脑海中蹦出来了. 虽然最终定位到的原因令人 ...

  8. 堆排序(topk 问题)(NB)

    博客地址:https://www.cnblogs.com/zylyehuo/ # _*_coding:utf-8_*_ # 比较排序 import random def sift(li, low, h ...

  9. 如何让低于1B参数的小型语言模型实现 100% 的准确率

    如何让低于1B参数的小型语言模型实现 100% 的准确率 上下文学习被低估了--ICL 是提升性能的秘密钥匙--教会 AI 说"我不知道"--第 2 部分 Fabio Matric ...

  10. delphi 弹出输入框的InputQuery, InputQuery 函数用法

    delphi 弹出输入框的InputQuery, InputQuery 函数用法 procedure TForm1.Button1Click(Sender: TObject); var str: st ...