From c20c63d9f760edcc19e5bcba43d3bc052ce8bfe9 Mon Sep 17 00:00:00 2001 From: Matt Marcha Date: Sun, 28 Jul 2024 17:57:29 -1000 Subject: [PATCH] chapter 11 --- estate/__manifest__.py | 2 ++ estate/models/estate_property.py | 1 + estate/models/estate_property_offer.py | 19 +++++++--- estate/models/estate_property_tag.py | 5 ++- estate/models/estate_property_type.py | 21 +++++++++-- estate/views/estate_property_offer_views.xml | 8 ++--- estate/views/estate_property_tag_views.xml | 19 ++++++++++ estate/views/estate_property_type_views.xml | 38 ++++++++++++++++++++ estate/views/estate_property_views.xml | 38 ++++++++------------ 9 files changed, 117 insertions(+), 34 deletions(-) create mode 100644 estate/views/estate_property_tag_views.xml create mode 100644 estate/views/estate_property_type_views.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 41179d6..42f7839 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -10,6 +10,8 @@ ], 'data': [ 'views/estate_property_offer_views.xml', + 'views/estate_property_type_views.xml', + 'views/estate_property_tag_views.xml', 'views/estate_property_views.xml', 'views/estate_menus_view.xml', 'security/ir.model.access.csv' diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 2b0365e..b837358 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -8,6 +8,7 @@ class EstateProperty(models.Model): _name = "estate.property" _description = "Properties for the Estate module" + _order = "id desc" _sql_constraints = [ ('check_expected_price', 'CHECK (expected_price > 0)', 'Expected rice should be superior to 0'), diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index 792461f..496c4a2 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -3,8 +3,18 @@ from odoo import api, fields, models, exceptions from odoo.tools import float_utils as floatTool class EstatePropertyOffer(models.Model): + + # ------------- Private attributes ------------------------- # + _name = "estate.property.offer" _description = "Offers made on properties" + _order = "price desc" + + _sql_constraints = [ + ('check_price', 'CHECK (price > 0)', 'Expected price should be superior to 0'), + ] + + # ------------- Fields ------------------------- # price = fields.Float() state = fields.Selection(copy=False, selection=[('accepted', 'Accepted'), ('refused', 'Refused')]) @@ -12,10 +22,9 @@ class EstatePropertyOffer(models.Model): property_id = fields.Many2one("estate.property", required=True) validity = fields.Integer(default=7, string='validity (days)') date_deadline = fields.Date(compute="_compute_date_deadline", inverse="_inverse_date_deadline") - - _sql_constraints = [ - ('check_price', 'CHECK (price > 0)', 'Expected price should be superior to 0'), - ] + property_type_id = fields.Many2one(related="property_id.property_type_id", store="True") + + # ------------- Compute methods ------------------------- # @api.depends('validity', 'create_date') def _compute_date_deadline(self): @@ -26,6 +35,8 @@ class EstatePropertyOffer(models.Model): for record in self: record.validity = (record.date_deadline - (record.create_date.date() or fields.Date.today())).days + # ------------- Actions ------------------------- # + def action_accept(self): if self.exists(): if "accepted" in self.mapped("property_id.offer_ids.state"): diff --git a/estate/models/estate_property_tag.py b/estate/models/estate_property_tag.py index 0221d7f..27da22f 100644 --- a/estate/models/estate_property_tag.py +++ b/estate/models/estate_property_tag.py @@ -4,5 +4,8 @@ from odoo import fields, models class EstatePropertyTag(models.Model): _name = "estate.property.tag" _description = "Tags for properties" + _order = "sequence asc, name asc" - name = fields.Char(required=True) \ No newline at end of file + name = fields.Char(required=True) + sequence = fields.Integer('Order', default=1) + color = fields.Integer() \ No newline at end of file diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py index 4d4b655..1402d42 100644 --- a/estate/models/estate_property_type.py +++ b/estate/models/estate_property_type.py @@ -1,9 +1,26 @@ # -*- coding: utf-8 -*- -from odoo import fields, models +from itertools import count +from odoo import fields, models, api class EstatePropertyType(models.Model): + + # ------------------ Private attributes ---------------------- + _name = "estate.property.type" _description = "Types of properties" + _order = "name asc" - name = fields.Char(required=True) \ No newline at end of file + # ------------------ Fields ---------------------- + + name = fields.Char(required=True) + property_ids = fields.One2many(comodel_name="estate.property", inverse_name="property_type_id") + offer_ids = fields.One2many(comodel_name="estate.property.offer", inverse_name="property_type_id") + offer_count = fields.Integer(compute="_compute_offer_count") + + # ------------------ Computed fields ---------------------- + + @api.depends('offer_ids') + def _compute_offer_count(self): + for record in self: + record.offer_count = len(record.mapped('offer_ids')) diff --git a/estate/views/estate_property_offer_views.xml b/estate/views/estate_property_offer_views.xml index d43a079..5cb7520 100644 --- a/estate/views/estate_property_offer_views.xml +++ b/estate/views/estate_property_offer_views.xml @@ -4,14 +4,14 @@ estate.property.offer.tree estate.property.offer - + - + +

+ +

+ + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 370c32c..d652a76 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -4,21 +4,25 @@ Properties estate.property tree,form + {'search_default_available': True} + [('property_type_id', '=', active_id)] estate.property.tree estate.property - + + - + + @@ -29,18 +33,18 @@
-

- + - - + @@ -59,8 +63,8 @@ - - + + @@ -71,7 +75,7 @@ - +
@@ -89,7 +93,7 @@ - + @@ -98,16 +102,4 @@ - - - Property Types - estate.property.type - tree,form - - - - Property Tags - estate.property.tag - tree,form - \ No newline at end of file