<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Odoo on Janik von Rotz</title>
    <link>https://janikvonrotz.ch/tags/odoo/</link>
    <description>Recent content in Odoo on Janik von Rotz</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 30 Apr 2026 17:35:27 +0200</lastBuildDate>
    <atom:link href="https://janikvonrotz.ch/tags/odoo/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Confidently Wrong</title>
      <link>https://janikvonrotz.ch/2026/04/30/confidently-wrong/</link>
      <pubDate>Thu, 30 Apr 2026 17:35:27 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2026/04/30/confidently-wrong/</guid>
      <description>&lt;p&gt;In two days I had two customers that sent me a zip file containing an Odoo module and asked to install it on their server. This is new and for some reason made me angry.&lt;/p&gt;&#xA;&lt;p&gt;Developing Odoo modules and maintaining them over many Odoo versions is what I am doing as an Odoo developer for the past six year. My experience and learning from others has been accumulated into many best practices and patterns.&lt;/p&gt;&#xA;&lt;p&gt;Is this only about pride or much more? Let&amp;rsquo;s find out.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo Development:  Settings fields for your module</title>
      <link>https://janikvonrotz.ch/2024/08/28/odoo-development-settings-fields-for-your-module/</link>
      <pubDate>Wed, 28 Aug 2024 16:41:29 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2024/08/28/odoo-development-settings-fields-for-your-module/</guid>
      <description>&lt;p&gt;Odoo modules store their settings on the settings page. The fields definitions for the settings are different from the module. These fields can be mapped with system parameters. I  would like to show how you can add settings field for your Odoo module.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Build and deploy Odoo with and without Jenkins</title>
      <link>https://janikvonrotz.ch/2024/04/11/build-and-build-odoo-with-and-without-jenkins/</link>
      <pubDate>Thu, 11 Apr 2024 14:15:28 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2024/04/11/build-and-build-odoo-with-and-without-jenkins/</guid>
      <description>&lt;p&gt;Jenkins is a popular but outdated CI/CD system. Compared to modern CI/CD systems such as GitHub Actions or GitLab Workflows, Jenkins does not deliver on containerization. As Docker containers are high in demand for building and hosting applications Jenkins has to go some extra miles. Nonetheless, Jenkins is yet the only self-hostable feature-rich CI/CD solution. For a project I went with Jenkins to deploy a multi-stage Odoo environment.&lt;/p&gt;&#xA;&lt;p&gt;In this post I would like to present the main parts of the final project such as the Docker setup or the Jenkins pipeline. An important goal was that the deployment can be done without Jenkins.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo Development: Tree view with custom styles</title>
      <link>https://janikvonrotz.ch/2022/09/26/odoo-development-tree-view-with-custom-styles/</link>
      <pubDate>Mon, 26 Sep 2022 09:13:47 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2022/09/26/odoo-development-tree-view-with-custom-styles/</guid>
      <description>&lt;p&gt;The Odoo UI cannot be customized as easy as reports and websites. Using modules we can easily inject custom CSS styles.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo Development: Show last updated date above list view</title>
      <link>https://janikvonrotz.ch/2022/06/08/odoo-development-show-last-updated-date-above-list-view/</link>
      <pubDate>Wed, 08 Jun 2022 10:01:06 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2022/06/08/odoo-development-show-last-updated-date-above-list-view/</guid>
      <description>&lt;p&gt;Odoo runs various reports in the background. Some of these report take a while to finish and therefore seeing the last updated date is important. In a few steps I will show how you can add the last updated date to a list view.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://janikvonrotz.ch/images/odoo-development-last-updated.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo Development: Show message dialog</title>
      <link>https://janikvonrotz.ch/2022/02/01/odoo-development-show-message-dialog/</link>
      <pubDate>Tue, 01 Feb 2022 09:21:25 +0100</pubDate>
      <guid>https://janikvonrotz.ch/2022/02/01/odoo-development-show-message-dialog/</guid>
      <description>&lt;p&gt;Some things are easily done in the Odoo framework, others are more difficult. An easy thing such as opening a dialog window with a custom message is more difficult than expected.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo Development: Set attributes conditionally</title>
      <link>https://janikvonrotz.ch/2021/11/24/odoo-development-set-attributes-conditionally/</link>
      <pubDate>Wed, 24 Nov 2021 14:06:11 +0100</pubDate>
      <guid>https://janikvonrotz.ch/2021/11/24/odoo-development-set-attributes-conditionally/</guid>
      <description>&lt;p&gt;Attributes such as &lt;code&gt;invisible&lt;/code&gt; can be set on fields, widgets and buttons based on a condition. By using the &lt;code&gt;attrs&lt;/code&gt; attribute the field and condition can be passed to the element. Here is an example: &lt;code&gt;attrs=&amp;quot;{&#39;invisible&#39;: [(&#39;active&#39;, &#39;=&#39;, True)]}&amp;quot;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;But how do we achive this for &lt;code&gt;tree&lt;/code&gt; elements where &lt;code&gt;attrs&lt;/code&gt; is not available?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo Development: Group by related field</title>
      <link>https://janikvonrotz.ch/2021/09/29/odoo_development_group_by_related_field/</link>
      <pubDate>Wed, 29 Sep 2021 08:24:59 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2021/09/29/odoo_development_group_by_related_field/</guid>
      <description>&lt;p&gt;The Odoo ORM provides a &lt;a href=&#34;https://www.odoo.com/documentation/14.0/developer/reference/addons/orm.html?highlight=group#odoo.models.Model.read_group&#34;&gt;&lt;code&gt;read_group&lt;/code&gt;&lt;/a&gt; method. Calling this method and passing a domain definition, fieldnames and a groupby fieldname will return a domain recordset grouped by the fieldname. A big drawback is that you cannot pass a relation to a subfield. Importing the &lt;code&gt;itertools&lt;/code&gt; library gives us new options to do so.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo Development: Create a settings page</title>
      <link>https://janikvonrotz.ch/2021/09/14/odoo_development_create_a_settings_page/</link>
      <pubDate>Tue, 14 Sep 2021 16:36:23 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2021/09/14/odoo_development_create_a_settings_page/</guid>
      <description>&lt;p&gt;Odoo stores all module settings in the &lt;code&gt;res.config.settings&lt;/code&gt; model. This model is based on the &lt;code&gt;models.TransientModel&lt;/code&gt; class, which means that the settings data is not persisted with this model.&lt;/p&gt;&#xA;&lt;p&gt;This is just nice to know. I will show how you can create a settings page for your Odoo module and let you know about its limitations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo Development: Enable multi edit</title>
      <link>https://janikvonrotz.ch/2021/09/14/odoo_development_enable_multi_edit/</link>
      <pubDate>Tue, 14 Sep 2021 13:19:22 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2021/09/14/odoo_development_enable_multi_edit/</guid>
      <description>&lt;p&gt;With Odoo 13 an new attribute was introduced to the tree view that enables editing multiple rows at once.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo Development: Create a smart button with a counter</title>
      <link>https://janikvonrotz.ch/2021/08/26/odoo-development-create-a-smart-button-with-a-counter/</link>
      <pubDate>Thu, 26 Aug 2021 08:29:56 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2021/08/26/odoo-development-create-a-smart-button-with-a-counter/</guid>
      <description>&lt;p&gt;Smart buttons help navigating between linked models in Odoo. Creating a smart button requires three components: counter field, compute function, view action and a button box on the view.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo Development: Prevent deletion with custom constraint</title>
      <link>https://janikvonrotz.ch/2021/07/26/odoo-development-prevent-deletion-with-custom-constraint/</link>
      <pubDate>Mon, 26 Jul 2021 10:09:50 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2021/07/26/odoo-development-prevent-deletion-with-custom-constraint/</guid>
      <description>&lt;p&gt;By default Odoo asks for confirmation if a record is being deleted. Making validations before deletion is up to the developer. I will show how you can add a custom constraint that prevents a record being deleted.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo Development: Add archiving functionality</title>
      <link>https://janikvonrotz.ch/2021/07/26/odoo-development-add-archiving-functionality/</link>
      <pubDate>Mon, 26 Jul 2021 09:58:30 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2021/07/26/odoo-development-add-archiving-functionality/</guid>
      <description>&lt;p&gt;Odoo has a builtin archiving function for any model. Once a record is archived it will not be displayed in any views and selections, but can is easily be unarchived. This functionality ensures that relations must not be removed if linked records is obsolete.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo Development: Configurable Kanban state</title>
      <link>https://janikvonrotz.ch/2021/07/14/odoo-development-configurable-kanban-state/</link>
      <pubDate>Wed, 14 Jul 2021 13:32:44 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2021/07/14/odoo-development-configurable-kanban-state/</guid>
      <description>&lt;p&gt;With the Odoo framework it is pretty easy to create a kanban view that groups and sorts an item by a state field. I&amp;rsquo;ll show how a kanban view can be added in a few steps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo Development: Add activity button</title>
      <link>https://janikvonrotz.ch/2021/07/14/odoo_development_add_activity_button/</link>
      <pubDate>Wed, 14 Jul 2021 10:07:47 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2021/07/14/odoo_development_add_activity_button/</guid>
      <description>&lt;p&gt;The activity button is part of the chatter. Every model form can have activities. I will show how you can enable the activity button for your model form using the mixin class.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Develop business applications with Odoo</title>
      <link>https://janikvonrotz.ch/2020/12/07/develop-business-applications-with-odoo/</link>
      <pubDate>Mon, 07 Dec 2020 15:59:44 +0100</pubDate>
      <guid>https://janikvonrotz.ch/2020/12/07/develop-business-applications-with-odoo/</guid>
      <description>&lt;p&gt;In Odoo, various applications are packaged, which work together, but also standalone. For example, the Contact app stores all address data of the company. The Human Resources application for managing employees or the CRM access this address data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Challenge ERP system</title>
      <link>https://janikvonrotz.ch/2020/11/09/challenge-erp-system/</link>
      <pubDate>Mon, 09 Nov 2020 09:08:38 +0100</pubDate>
      <guid>https://janikvonrotz.ch/2020/11/09/challenge-erp-system/</guid>
      <description>&lt;p&gt;Four factors are responsible why the implementation of an ERP system project fails.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Lack of support from management&lt;/li&gt;&#xA;&lt;li&gt;Too much customization&lt;/li&gt;&#xA;&lt;li&gt;Missing requirement analysis&lt;/li&gt;&#xA;&lt;li&gt;Poor data quality&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Restore Odoo database with this script</title>
      <link>https://janikvonrotz.ch/2020/05/19/restore-odoo-database-with-this-script/</link>
      <pubDate>Tue, 19 May 2020 10:29:27 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2020/05/19/restore-odoo-database-with-this-script/</guid>
      <description>&lt;p&gt;Odoo&amp;rsquo;s database manager provides an simple interface to backup and restore an Odoo database (aka tenant). This interface can be used to run scripted restores. In the same manner as the &lt;a href=&#34;https://janikvonrotz.ch/2020/04/02/automate-odoo-backups-with-this-script/&#34;&gt;Odoo backup script&lt;/a&gt; I&amp;rsquo;ve created a restore script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo OAuth authentication with Keycloak</title>
      <link>https://janikvonrotz.ch/2020/04/24/odoo-oauth-authentication-with-keycloak/</link>
      <pubDate>Fri, 24 Apr 2020 17:08:49 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2020/04/24/odoo-oauth-authentication-with-keycloak/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;OAuth is an authorization framework that enables applications to obtain limited access to user accounts on an HTTP service. It works by delegating user authentication to the service that hosts the user account, and authorizing third-party applications to access the user account.&lt;/p&gt;&#xA;&lt;p&gt;In our scenario Keycloak acts as the OAuth service and Odoo as the application that delegates the user authentication. In this guide you learn how to configure Odoo and Keycloak to handle an implicit OAuth flow.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automate Odoo backups with this script</title>
      <link>https://janikvonrotz.ch/2020/04/02/automate-odoo-backups-with-this-script/</link>
      <pubDate>Thu, 02 Apr 2020 11:38:06 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2020/04/02/automate-odoo-backups-with-this-script/</guid>
      <description>&lt;p&gt;Odoo&amp;rsquo;s database manager provides an simple interface to backup an odoo database (tenant). This interface can be used to run automated backups. I have created a script to easily request odoo backup archives. The script works like every other command line tool.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
