odoo

如何通过 OIDC 协议实现单点登录?

自古美人都是妖i 提交于 2020-03-27 11:00:55
3 月,跳不动了?>>> 什么是单点登录 我们通过一个例子来说明,假设有一所大学,内部有两个系统,一个是邮箱系统,一个是课表查询系统。现在想实现这样的效果:在邮箱系统中登录一遍,然后此时进入课表系统的网站,无需再次登录,课表网站系统直接跳转到个人课表页面,反之亦然。比较专业的定义如下: 单点登录 (Single Sign On),简称为 SSO ,是目前比较流行的企业业务整合的解决方案之一。 SSO 的定义是在多个应用系统中, 用户只需要登录一次 就可以 访问所有 相互信任的应用系统。 为什么要实现单点登录 单点登录的意义在于能够在不同的系统中统一账号、统一登录。用户不必在每个系统中都进行注册、登录,只需要使用一个统一的账号,登录一次,就可以访问所有系统。 通过 OIDC 协议实现单点登录 创建自己的用户目录 用户目录 这个词很贴切,你的系统的总用户表就像一本书一样,书的封皮上写着“所有用户”四个字。打开第一页,就是目录,里面列满了用户的名字,翻到对应的页码就能看到这个人的邮箱,手机号,生日信息等等。无论你开发多少个应用,要确保你有一份这些应用所有用户信息的 truth source。所有的注册、认证、注销都要到你的用户目录中进行增加、查询、删除操作。你要做的就是 创建一个中央数据表,专门用于存储用户信息 ,不论这个用户是来自 A 应用、B 应用还是 C 应用。 什么是 OIDC

How to pass cron id as arg in method that the cron calls

∥☆過路亽.° 提交于 2020-03-25 08:09:32
问题 I have many crons that call the same method at different time and the method needs to find that which cron called it to find other record based on that cron. The args mustn't be fixed. There'll be the number of crons create by end user on the front end side of odoo so whenever the cron executes and call the method the cron should pass it's own id to the method so it should be dynamic. Python Method that call by cron: @api.model def send_feedback_email_cron(self,id): #id is needed to find

odoo中self的使用

吃可爱长大的小学妹 提交于 2020-03-23 08:58:04
一:self是什么 目前新版的Odoo中使用到的self,是对 游标cr、用户ID、模型、上下文、记录集、缓存 的封装。 我们可以通过 self.XX 获取到这些封装的东西,比如:self.cr、self.uid。 二:通过直接设置属性来改变数据库中字段值 我们在查出某模型的记录后,可以通过 record.XX = value 来直接修改记录的字段内容。 同样,在重写模型的write方法中,也可以通过 self.XX = value 来指定新增记录中某字段的值。 这里需要注意两点: 1:修改查出来的记录字段值来改变数据库内容,是通过改变缓存中的值出发数据库写记录来达到的。 2:重写write方法时,在write方法中每调用一次 self.XX = value 语句,都会触发数据库写操作,因此一般采用: for rec in self: rec.XX = XX 的写法。 三:环境 1:操作缓存 环境储存了模型的缓存记录集,因此我们可以通过环境来获取、增加、修改、删除记录,而触发数据库更改,从而达到操作数据库的目的。 例如:新增一条记录 self.env['模型'].create(vals) 2:改变用户权限 我们可以通过self.sudo()获得超级权限,从而确保我们的操作能够进行。 self.env[‘model'].sudo().create(vals) 3:访问当前用户

how to center barcode image in the table?

不羁岁月 提交于 2020-03-21 06:07:08
问题 i'am trying to desgine barcode label in odoo it printed well if it short barcode otherwise the barcode go over the table border and i can't read it with reader also sometimes it print in 2 label if the the name is in first cell is long so i need to set fixed size for the table here is 2 screenshots for the labels here is the code <div class="col-xs-4" style="padding:0;" align="center"> <table class="table table-bordered mb-0" width="50mm" style="padding:0" > <tr style="font-size: 50%;;padding

how to center barcode image in the table?

核能气质少年 提交于 2020-03-21 06:06:24
问题 i'am trying to desgine barcode label in odoo it printed well if it short barcode otherwise the barcode go over the table border and i can't read it with reader also sometimes it print in 2 label if the the name is in first cell is long so i need to set fixed size for the table here is 2 screenshots for the labels here is the code <div class="col-xs-4" style="padding:0;" align="center"> <table class="table table-bordered mb-0" width="50mm" style="padding:0" > <tr style="font-size: 50%;;padding

(21)odoo中的QWeb模板引擎

那年仲夏 提交于 2020-03-20 20:09:09
----------------- 更新时间 18:13 2016-04-05 星期二 ----------------- * 概述 QWeb是odoo主要模板引擎,采用xml表述,最后生成HTML文件 * 一般用法 #条件表达式 <t t-if="record.effort_estimate.raw_value > 0"> <li>Estimate <field name="effort_estimate"/></li> </t> 比较符号: lt(<) lte(<=) gt(>) gte(>=) 注 < <= 不能用在表达式中,只能用字母代替 # 输出值 t-esc 和 t-raw <t t-esc="record.message_follower_ids.raw_value" /> <t t-raw="record.message_follower_ids.raw_value" /> t-esc 过滤安全值,像html元素 t-raw 数据库中的原始数据 # 循环 <t t-foreach="record.message_follower_ids.raw_value" t-as="rec"> <t t-esc="rec" />; </t> t-foreach="record.message_follower_ids.raw_value.slice(0, 3)" 还可以切片

Odoo12 项目发布与部署 - Ubuntu1804源码安装

空扰寡人 提交于 2020-03-15 19:31:50
本文主要介绍odoo12源码安装项目发布与部署在 Ubuntu1804 首先可以用deb包安装,过程最简单,但是也有很多问题。如不能使用venv,如添加了apt-get源,导致升级时自动更新odoo包,引起系统不稳定。 另外可使用odoo官方的src源码包或github源码安装,过程比较复杂,但是一般推荐线上环境使用这种方式安装部署。 下面我们分别介绍一下。 本节介绍,在ubuntu server上安装部署odoo。这里仍然是用源码安装,rpm deb等安装部署方式在其他的课程中介绍。 >注意 不要使用windows部署线上环境,原因是windows不能开启odoo的多进程worker功能,大大降低了服务器性能(等研究过windows相关的服务器优化方案后,再做补充)。 因为是部署线上生产环境,所以使用odoo版本应该和开发版本保持一致。 如果开发用的github源码,可以通过git log找到最后一天更新的日期(20170408),然后选择一个相同的日期(20170408)的源码压缩包下载(避免修复的bug不一致)。 可以在下面的地址下载到odoo官方每日打包的版本。 > 选择tar.gz压缩版本下载,这个源码包不包含git相关记录,所以比较小(目前大小仅为84MB) https://nightly.odoo.com/ > 安装odoo过程与ubuntu开发环境配置稍有不同

Odoo 打印报表定制方法

喜夏-厌秋 提交于 2020-03-15 19:30:59
本文主要介绍odoo打印报表定制的方法及代码示例 从odoo8.0开始使用基于Qweb,Bootstrap和Wkhtmltopdf的全新报表引擎。一份报表由两个元素构成: 1 在ir.actions.report.xml中定义报表记录,使用定义报表生成的参数。 2 Qweb view定义报表样式 Report title 这里docs是从context发送过来的变量,代表报表内容记录。docs的作用其实是 ,比如你在界面上选定了几条相关模型的记录,然后可以通过docs访问这些记录数据,相当于模型方法中的recordset赋值给 docs = self,然后可以在qweb里读取。 另外还有user代表打印此报表的人 创建的报表可以通过html和pdf格式直接访问 http://localhost:8069/report/html/account.report_invoice/1 http://localhost:8069/report/pdf/account.report_invoice/1 注意 生成pdf需要服务端安装wkhtmltopdf程序, 有时候打印的报表样式丢失,需要正确设置相关参数。另外还会遇到一个样式bug。 report.url = http://localhost:8069 如果你的odoo有使用反向代理,你可以设置url路径为本地访问。web.base.url

odoo12 centos执行shell脚本监测服务状态崩溃重启

青春壹個敷衍的年華 提交于 2020-03-12 12:42:20
原因: 由于其他原因,或者odoo内部服务自动停止掉,需要一个脚本来监测状态,自动启动。 步骤: 1、在任意目录下新建shell脚本odoodaemon.sh 1 #!/bin/sh 2 # ckconfig: 2345 20 81 3 4 while true; 5 do 6 processExist=`ps aux | grep odoo12 | grep -v "grep"` 7 if [ -z $processExist ];then 8 echo "proecss is restarted" 9 systemctl start odoo12 # 启动程序的脚本所在的绝对路径 10 else 11 echo "process is running" 12 fi 13 sleep 60 #每 60s检查一次 14 done 2、把脚本移动到/etc/rc.d/init.d/下 mv odoodaemon.sh /etc/rc.d/init.d/ 3、给权限 chmod u+x odoodaemon.sh 4、加入到系统服务 chkconfig --add odoodaemon.sh 5、启动 systemctl start odoodaemon 6、加入开启自动启动 chkconfig odoodaemon.sh on 7、查看 chkconfig --list

Use name_get in odoo 9

筅森魡賤 提交于 2020-03-06 04:18:41
问题 How to concatenate Many2one field, open drop down list all car is visible. I need [id] and [name]. For example: [01] Audi, [02] BMW car_id = fields.Many2one('my.cars', 'Cars') @api.multi def name_get(self): ??? 回答1: Try with following: @api.multi def name_get(self): result = [] for record in self: name = '[' + str(record.id) + ']' + ' ' + record.name result.append((record.id, name)) return result Note: name_get() method must be set on my.cars object. 来源: https://stackoverflow.com/questions