From fccc44bb2e3609ce67284c5f5e97a678f30817c4 Mon Sep 17 00:00:00 2001 From: Matt Marcha Date: Wed, 31 Jul 2024 08:54:43 -1000 Subject: [PATCH] Chapter 12 --- estate/__manifest__.py | 3 ++- estate/models/__init__.py | 3 ++- estate/models/estate_property.py | 8 ++++++++ estate/models/estate_property_offer.py | 9 +++++++++ estate/models/res_users.py | 7 +++++++ estate/views/res_users_views.xml | 17 +++++++++++++++++ 6 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 estate/models/res_users.py create mode 100644 estate/views/res_users_views.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 42f7839..ab70a45 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -13,8 +13,9 @@ 'views/estate_property_type_views.xml', 'views/estate_property_tag_views.xml', 'views/estate_property_views.xml', + 'views/res_users_views.xml', 'views/estate_menus_view.xml', - 'security/ir.model.access.csv' + 'security/ir.model.access.csv', ], 'license': 'AGPL-3', } \ No newline at end of file diff --git a/estate/models/__init__.py b/estate/models/__init__.py index 9e4c8fe..89af74d 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -3,4 +3,5 @@ from . import estate_property from . import estate_property_type from . import estate_property_tag -from . import estate_property_offer \ No newline at end of file +from . import estate_property_offer +from . import res_users \ No newline at end of file diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index b837358..e9aa90d 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -41,6 +41,14 @@ class EstateProperty(models.Model): total_area = fields.Integer(compute="_get_total_area", readonly=True) best_price = fields.Float(compute="_compute_best_price") + # ----------------- CRUD methods --------------------------- # + + @api.ondelete(at_uninstall=False) + def _unlink_if_new_cancelled(self): + for record in self: + if record.state not in ('new', 'cancelled'): + raise exceptions.UserError("Cannot delete a property not new or cancelled") + # ------------- Compute methods ------------------------- # @api.depends('living_area', 'garden_area') diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index 496c4a2..45f822e 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -23,6 +23,15 @@ class EstatePropertyOffer(models.Model): validity = fields.Integer(default=7, string='validity (days)') date_deadline = fields.Date(compute="_compute_date_deadline", inverse="_inverse_date_deadline") property_type_id = fields.Many2one(related="property_id.property_type_id", store="True") + + # ---------------- CRUD Methods ------------------------- # + + @api.model + def create(self, vals): + if self.env['estate.property'].browse(vals['property_id']).state == 'new': + self.env['estate.property'].browse(vals['property_id']).write({'state': 'offer_received'}) + + return super().create(vals) # ------------- Compute methods ------------------------- # diff --git a/estate/models/res_users.py b/estate/models/res_users.py new file mode 100644 index 0000000..9827db1 --- /dev/null +++ b/estate/models/res_users.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +from odoo import models, fields + +class ResUsers(models.Model): + _inherit = 'res.users' + + property_ids = fields.One2many(comodel_name="estate.property", inverse_name="salesman_id") \ No newline at end of file diff --git a/estate/views/res_users_views.xml b/estate/views/res_users_views.xml new file mode 100644 index 0000000..41efd20 --- /dev/null +++ b/estate/views/res_users_views.xml @@ -0,0 +1,17 @@ + + + + res.users.view.form.inherit.estate + res.users + + + + + + + + + + + + \ No newline at end of file