From 3549078ef443cbe00d4cbb38153ae4c2b906a184 Mon Sep 17 00:00:00 2001
From: rde <rde@odoo.com>
Date: Mon, 9 Oct 2017 15:57:18 +0200
Subject: [PATCH] [REF] website: function inverse on computed field is_homepage

Before this commit, we were using data[] array from json call to write on
website model accordingly of is_homepage value.

Now, we use the newly created inverse function of the computed field to handle
that to make it more clear
---
 addons/website/models/website.py | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index 5105aebc474a..5609f8742aa3 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -537,13 +537,23 @@ class Page(models.Model):
     date_publish = fields.Datetime('Publishing Date')
     # This is needed to be able to display if page is a menu in /website/pages
     menu_ids = fields.One2many('website.menu', 'page_id', 'Related Menus')
-    is_homepage = fields.Boolean(compute='_compute_homepage', string='Homepage')
+    is_homepage = fields.Boolean(compute='_compute_homepage', inverse='_set_homepage', string='Homepage')
     is_visible = fields.Boolean(compute='_compute_visible', string='Is Visible')
 
     @api.one
     def _compute_homepage(self):
         self.is_homepage = self == self.env['website'].get_current_website().homepage_id
 
+    @api.one
+    def _set_homepage(self):
+        website = self.env['website'].get_current_website()
+        if self.is_homepage:
+            if website.homepage_id != self:
+                website.write({'homepage_id': self.id})
+        else:
+            if website.homepage_id == self:
+                website.write({'homepage_id': None})
+
     @api.one
     def _compute_visible(self):
         self.is_visible = self.website_published and (not self.date_publish or self.date_publish < fields.Datetime.now())
@@ -558,14 +568,6 @@ class Page(models.Model):
     def save_page_info(self, website_id, data):
         website = self.env['website'].browse(website_id)
 
-        if data['is_homepage'] and website.homepage_id.id != int(data['id']):
-            # If page is set as the new homepage, set it on website (only page can be set as homepage)
-            website.write({'homepage_id': data['id']})
-        else:
-            if not data['is_homepage'] and website.homepage_id.id == int(data['id']):
-                # If the page is not a homepage, check if it was the homepage
-                website.write({'homepage_id': None})
-
         #If URL has been edited, slug it
         page = self.browse(int(data['id']))
         original_url = page.url
@@ -597,7 +599,8 @@ class Page(models.Model):
             'url': url,
             'website_published': data['website_published'],
             'website_indexed': data['website_indexed'],
-            'date_publish': data['date_publish'] or None
+            'date_publish': data['date_publish'] or None,
+            'is_homepage': data['is_homepage'],
         })
 
         # Create redirect if needed
-- 
GitLab