odoo17企业版破解笔记(20241012)

共修改5处:
1、将\odoo17-e-企业版\odoo_updated_modules17\mail\models\update.py第108行到114行注释失效,添加一行pass,其余不变:完整如下:

            # set_param = self.env['ir.config_parameter'].sudo().set_param
            # set_param('database.expiration_date', result['enterprise_info'].get('expiration_date'))
            # set_param('database.expiration_reason', result['enterprise_info'].get('expiration_reason', 'trial'))
            # set_param('database.enterprise_code', result['enterprise_info'].get('enterprise_code'))
            # set_param('database.already_linked_subscription_url', result['enterprise_info'].get('database_already_linked_subscription_url'))
            # set_param('database.already_linked_email', result['enterprise_info'].get('database_already_linked_email'))
            # set_param('database.already_linked_send_mail_url', result['enterprise_info'].get('database_already_linked_send_mail_url'))
            pass

此处完毕。
2、将\odoo17-e-企业版\odoo_updated_modules17\web\static\src\webclient\settings_form_view\widgets\res_config_edition.js第22行到27行的逻辑修改,完整如下:
将:

setup() {
    this.serverVersion = session.server_version;
    this.expirationDate = session.expiration_date
        ? DateTime.fromSQL(session.expiration_date).toLocaleString(DateTime.DATE_FULL)
        : DateTime.now().plus({ days: 30 }).toLocaleString(DateTime.DATE_FULL);
}

改为:

setup() {
    this.serverVersion = session.server_version;
    this.expirationDate = "This is an open version and has no expiration date."
}

此处完毕。
3、将\odoo17-e-企业版\odoo_updated_modules17\web_enterprise\models\ir_http.py第23行到40行全部注释失效,完整如下:

# def session_info(self):
#     ICP = self.env['ir.config_parameter'].sudo()
#     User = self.env['res.users']

#     if User.has_group('base.group_system'):
#         warn_enterprise = 'admin'
#     elif User.has_group('base.group_user'):
#         warn_enterprise = 'user'
#     else:
#         warn_enterprise = False

#     result = super(Http, self).session_info()
#     result['support_url'] = "https://www.odoo.com/help"
#     if warn_enterprise:
#         result['warning'] = warn_enterprise
#         result['expiration_date'] = ICP.get_param('database.expiration_date')
#         result['expiration_reason'] = ICP.get_param('database.expiration_reason')
#     return result

此处完毕。
4、将\odoo17-e-企业版\odoo_updated_modules17\web_enterprise\static\src\webclient\home_menu\enterprise_subscription_service.js第26行到31行注释失效并修改odoo有效期为6000年【this.expirationDate = DateTime.utc().plus({ years: 6000 });】,完整如下:

    // if (session.expiration_date) {
    //     this.expirationDate = deserializeDateTime(session.expiration_date);
    // } else {
    //     // If no date found, assume 1 month and hope for the best
    //     this.expirationDate = DateTime.utc().plus({ days: 30 });
    // }
    this.expirationDate = DateTime.utc().plus({ years: 6000 });

此处完毕。
第118行到123行完整修改如下:

// async checkStatus() {
//     await this.orm.call("publisher_warranty.contract", "update_notification", [[]]);

//     const expirationDateStr = await this.orm.call("ir.config_parameter", "get_param", [
//         "database.expiration_date",
//     ]);
//     this.lastRequestStatus = "update";
//     this.expirationDate = deserializeDateTime(expirationDateStr);
// }

async checkStatus() {
    await this.orm.call("publisher_warranty.contract", "update_notification", [[]]);
    const expirationDateStr = DateTime.now().plus({ years: 30 }).toLocaleString(DateTime.DATE_FULL);

此处完毕。
5、将\odoo17-e-企业版\odoo_updated_modules17\web_enterprise\static\src\webclient\settings_form_view\res_config_edition.xml全部改为:<?xml version="1.0" encoding="UTF-8"?>

<t t-inherit="web.res_config_edition" t-inherit-mode="extension">

    <!-- <xpath expr="//h3" position="replace">
        <h3 class="px-0">
            Odoo <t t-esc="serverVersion"/> (Enterprise Edition)
        </h3>
    </xpath> -->

    <xpath expr="//h3" position="replace">
        <h3 class="px-0">
            Odoo <t t-esc="serverVersion"/> (Ali Faleh Edition)
        </h3>
    </xpath>

    <xpath expr="//*[@id='license']" position="replace">
        <a id="license" target="_blank" href="https://www.odoo.com/documentation/17.0/legal/licenses.html" style="text-decoration: underline;">Odoo Enterprise Edition License V1.0</a>
    </xpath>

    <!-- <xpath expr="//h3" position="after">
        <t t-if="expirationDate">
            <h5>Database expiration: <t t-esc="expirationDate"/></h5>
        </t>
    </xpath> -->

    <xpath expr="//h3" position="after">
        <t t-if="expirationDate">
            <h5>This is an open version and has no expiration date.</h5>
        </t>
    </xpath>

</t>


此处完毕。

用到了一个odoo容器管理模块:
基于源码安装的odoo,
在odoo里管理容器,
容器里跑的各种版本的odoo,
从odoo8\odoo9\odoo10\odoo11\odoo12\odoo13\odoo14\odoo15\odoo16\odoo17\odoo18。
模块名字叫:micro-saas,中文名叫迷你SAAS模块。
最终跑起来的效果如下图:
2024-08-30T16:10:43.png
2024-08-31T12:52:51.png
源码安装odoo,参考大佬写的这篇教程:
Ubuntu通过源码安装Odoo16

https://www.cnblogs.com/zhengdaojie/p/15832534.html

源码安装好odoo以后,
替换ubuntu的安装源,
再基于国内源再安装docker和docker-compose以及git,
最后把docker的源替换国内源,
注意这里国内源大部分已死掉,
目前1pannel源可用(截止时间20240831凌晨0:14),
从这里

https://cloud.tencent.com/developer/article/2445800

拷出来的docker最新国内源请随时留意更新,
源的问题会造成起容器失败!
因为默认会出国拉取postgresql镜像和odoo镜像,
出国要娣子翻强。

最后忘了贴模块地址了,
odoo官方app市场:

https://apps.odoo.com/apps/modules/17.0/micro_saas

里边有个requirements.txt写着

phonenumbers

用这篇里写的安装方法,增加安装进去。

收功!

浅浅试用了DataEase开源版,并且跟odoo结合起来了。下边是笔记:
1、安装DataEase的docker版:直接起容器:
用官方的或者用github上大佬出品的都可行:
我用的这里:https://github.com/wojiushixiaobai/dataease
2024-08-27T04:55:34.png
2、容器相互之间是隔离的,所以要想办法互通,目的是让DataEase能访问odoo的PG数据库:
先看看odoo的所在网络叫什么,用docker network ls查到叫odoo-13-docker-compose_default,
再看看DataEase的容器名叫什么,用docker ps看到名字叫de_core,
最后用下边命令,让容器de_core可访问odoo-13-docker-compose_default网段:
docker network connect odoo-13-docker-compose_default de_core
3、安装成功,登入DataEase管理后台,建数据源:目的是让DataEase能访问odoo的PG数据库:
http://odoo123.com:8100/
建数据源:
2024-08-27T05:04:40.png
可以在数据源表里看到Odoo的数据表啦:额外说一嘴,可以用来观察学习odoo的数据字典:
2024-08-27T05:05:29.png
4、最后这里安装了odoo的微信小程序商城模块,所以用oe举例建个数据集和仪表盘:
2024-08-27T05:07:01.png
5、数据集和结构:
2024-08-27T05:07:20.png
6、odoo的dataease仪表盘:
2024-08-27T05:08:16.png

有了这个神器,使用发散思维,可联想的空间挺大的。

https://github.com/KittyMissing/oejia下载回来模块,按照Odoo模块安装教程,放到addons目录下。注意事项:git clone得到的路径需要注意:

第一步进入odoo容器内,在docker容器里安装gcc和python-dev:

apt-get update
apt-get install python3-dev
apt-get install gcc
第二步,安装Oejia模块的依赖:
python3 -m pip install pycrypto
python3 -m pip install xmltodict==0.11.0
python3 -m pip install itsdangerous==0.24
python3 -m pip install kdniao==0.1.2
python3 -m pip install wechatpy
python3 -m pip install sqlalchemy==1.2.5
python3 -m pip install kombu==4.1.0
python3 -m pip install celery==4.1.0
第三步,依赖安装好之后,到Odoo安装oejia模块:
最后,配置oejia微信小程序商城模块: