From 670ed7bbdcb49a48db2132148465d80c38a357fc Mon Sep 17 00:00:00 2001 From: Matt Marcha Date: Wed, 17 Jul 2024 15:45:07 -1000 Subject: [PATCH] chapt 8 --- estate/models/estate_property.py | 33 ++++++++++++++++++-- estate/models/estate_property_offer.py | 15 +++++++-- estate/views/estate_property_offer_views.xml | 4 +++ estate/views/estate_property_views.xml | 2 ++ 4 files changed, 49 insertions(+), 5 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 8035797..b7603bc 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- - -from odoo import fields, models +from odoo import api, fields, models class EstateProperty(models.Model): _name = "estate.property" @@ -25,4 +24,32 @@ class EstateProperty(models.Model): salesman_id = fields.Many2one("res.users", string="Salesman") buyer_id = fields.Many2one("res.partner", string="Buyer") tag_ids = fields.Many2many("estate.property.tag", string="Tags") - offer_ids = fields.One2many("estate.property.offer", "property_id", string="Offers") \ No newline at end of file + offer_ids = fields.One2many("estate.property.offer", "property_id", string="Offers") + total_area = fields.Integer(compute="_get_total_area", readonly=True) + best_price = fields.Float(compute="_compute_best_price") + + @api.depends('living_area', 'garden_area') + def _get_total_area(self): + for entry in self: + entry.total_area = entry.living_area + entry.garden_area + + @api.depends('offer_ids.price') + def _compute_best_price(self): + for record in self: + record.best_price = max(record.offer_ids.mapped('price')) if record.offer_ids else None + + @api.onchange('garden') + def _onchange_garden(self): + if self.garden: + self.garden_area = 10 + self.garden_orientation = 'north' + else: + self.garden_area = None + self.garden_orientation = None + + @api.onchange('date_availability') + def _onchange_date_availability(self): + if self.date_availability < fields.Date.today(): + return {'warning': { + 'title': ("Warning"), + 'message': ("The date is in the past.")}} \ No newline at end of file diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index 2d6783a..0a28458 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from odoo import fields, models +from odoo import api, fields, models class EstatePropertyOffer(models.Model): _name = "estate.property.offer" @@ -8,4 +8,15 @@ class EstatePropertyOffer(models.Model): price = fields.Float() status = fields.Selection(copy=False, selection=[('accepted', 'Accepted'), ('refused', 'Refused')]) partner_id = fields.Many2one("res.partner", required=True) - property_id = fields.Many2one("estate.property", required=True) \ No newline at end of file + 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") + + @api.depends('validity', 'create_date') + def _compute_date_deadline(self): + for record in self: + record.date_deadline = fields.Date.add(record.create_date or fields.Date.today(), days=record.validity) + + def _inverse_date_deadline(self): + for record in self: + record.validity = (record.date_deadline - (record.create_date.date() or fields.Date.today())).days \ No newline at end of file diff --git a/estate/views/estate_property_offer_views.xml b/estate/views/estate_property_offer_views.xml index 9b67456..6ca370a 100644 --- a/estate/views/estate_property_offer_views.xml +++ b/estate/views/estate_property_offer_views.xml @@ -7,6 +7,8 @@ + + @@ -20,6 +22,8 @@ + + diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index fa94b15..054e965 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -41,6 +41,7 @@ + @@ -55,6 +56,7 @@ +