odoo-tutorials/estate/models/estate_property.py
2024-07-31 15:15:15 -10:00

55 lines
2.4 KiB
Python

# -*- coding: utf-8 -*-
from odoo import api, fields, models
class EstateProperty(models.Model):
_name = "estate.property"
_description = "Properties for the Estate module"
name = fields.Char(required=True)
description = fields.Text()
active = fields.Boolean(default=True)
state = fields.Selection(selection=[('new','New'), ('offer_received', 'Offer Received'), ('offer_accepted', 'Offer Accepted'), ('sold', 'Sold'), ('cancelled', 'Cancelled')], required=True, copy=False, default='new')
postcode = fields.Char()
date_availability = fields.Date(copy=False, default=fields.Date.add(fields.Date.today(), months=3))
expected_price = fields.Float(required=True)
selling_price = fields.Float(readonly=True, copy=False)
bedrooms = fields.Integer(default=2)
living_area = fields.Integer()
facades = fields.Integer()
garage = fields.Boolean()
garden = fields.Boolean()
garden_area = fields.Integer()
garden_orientation = fields.Selection(selection=[('north', 'North'), ('south', 'South'), ('east', 'East'), ('west', 'West')])
property_type_id = fields.Many2one("estate.property.type", "Property Type")
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")
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.")}}