Skip to content

rhri - Technical Training #824

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: 18.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -127,3 +127,6 @@ dmypy.json

# Pyre type checker
.pyre/

# VS Code
.vscode
1 change: 1 addition & 0 deletions estate/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
17 changes: 17 additions & 0 deletions estate/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
'name': 'Real Estate',
'depends': [
'base',
],
'data': [
'security/ir.model.access.csv',

'views/estate_property_type_views.xml',
'views/estate_property_tag_views.xml',
'views/estate_property_views.xml',
'views/estate_property_offer_views.xml',
'views/estate_menus.xml',
],
'application': True,
'license': 'AGPL-3'
}
4 changes: 4 additions & 0 deletions estate/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from . import estate_property
from . import estate_property_type
from . import estate_property_tag
from . import estate_property_offer
72 changes: 72 additions & 0 deletions estate/models/estate_property.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
from odoo import api, fields, models

class Property(models.Model):
_name = "estate.property"
_description = "Estate Property"

# misc
name = fields.Char(string='Title', required=True)
description = fields.Text()
postcode = fields.Char()
date_availability = fields.Date(string='Available From', default=fields.Date.add(fields.Date.today(), months=3), copy=False)

# price
expected_price = fields.Float(required=True)
selling_price = fields.Float(readonly=True, copy=False)

# area
bedrooms = fields.Integer(default=2)
living_area = fields.Integer(string='Living Area (sqm)')
facades = fields.Integer()
garage = fields.Boolean()
garden = fields.Boolean()
garden_area = fields.Integer(string='Garden Area (sqm)')
garden_orientation = fields.Selection([
('north', 'North'),
('south', 'South'),
('east', 'East'),
('west', 'West')])

# reserved
active = fields.Boolean(default=True)
state = fields.Selection([
('new', 'New'),
('offer_received', 'Offer Received'),
('offer_accepted', 'Offer Accepted'),
('sold', 'Sold'),
('cancelled', 'Cancelled')],
required=True, default='new', copy=False)

# many2one
property_type_id = fields.Many2one('estate.property.type', string='Property Type')
salesman = fields.Many2one('res.users', default=lambda self: self.env.user)
buyer = fields.Many2one('res.partner', copy=False)

# many2many
tag_ids = fields.Many2many('estate.property.tag', string='Tags')

# one2many
offer_ids = fields.One2many('estate.property.offer', 'property_id', string='Offers')

# computed
total_area = fields.Integer(compute='_compute_total_area', string='Total Area (sqm)')
best_offer = fields.Float(compute='_compute_best_offer')

@api.depends('living_area', 'garden_area')
def _compute_total_area(self):
for record in self:
record.total_area = record.living_area + record.garden_area

@api.depends('offer_ids')
def _compute_best_offer(self):
for record in self:
record.best_offer = max(record.offer_ids.mapped('price'), default=0)

@api.onchange('garden')
def _onchange_garden(self):
if self.garden:
self.garden_area = 10
self.garden_orientation = 'north'
else:
self.garden_area = 0
self.garden_orientation = False
30 changes: 30 additions & 0 deletions estate/models/estate_property_offer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from odoo import api, fields, models

class PropertyOffer(models.Model):
_name = "estate.property.offer"
_description = "Estate Property Offer"

# misc
price = fields.Float()
status = fields.Selection([
('accepted', 'Accepted'),
('refused', 'Refused')],
copy=False)
partner_id = fields.Many2one('res.partner', required=True)
property_id = fields.Many2one('estate.property', required=True)

# computed
validity = fields.Integer(default=7, string='Validity (days)')
date_deadline = fields.Date(compute='_compute_date_deadline', inverse='_inverse_date_deadline', string='Deadline')

@api.depends('validity')
def _compute_date_deadline(self):
for record in self:
safe_create_date = record.create_date or fields.Date.today()
record.date_deadline = fields.Date.add(safe_create_date, days=record.validity)

def _inverse_date_deadline(self):
for record in self:
safe_create_date = record.create_date or fields.Date.today()
delta = record.date_deadline - fields.Date.to_date(safe_create_date)
record.validity = delta.days
8 changes: 8 additions & 0 deletions estate/models/estate_property_tag.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from odoo import fields, models

class PropertyTag(models.Model):
_name = "estate.property.tag"
_description = "Estate Property Tag"

# misc
name = fields.Char(required=True)
8 changes: 8 additions & 0 deletions estate/models/estate_property_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from odoo import fields, models

class PropertyType(models.Model):
_name = "estate.property.type"
_description = "Estate Property Type"

# misc
name = fields.Char(string='Type', required=True)
5 changes: 5 additions & 0 deletions estate/security/ir.model.access.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_estate_property,estate_property,model_estate_property,base.group_user,1,1,1,1
access_estate_property_type,estate_property_type,model_estate_property_type,base.group_user,1,1,1,1
access_estate_property_tag,estate_property_tag,model_estate_property_tag,base.group_user,1,1,1,1
access_estate_property_offer,estate_property_offer,model_estate_property_offer,base.group_user,1,1,1,1
13 changes: 13 additions & 0 deletions estate/views/estate_menus.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0"?>
<odoo>
<menuitem id="estate_menu_root" name="Estate">
<menuitem id="estate_advertisements_menu" name="Advertisements">
<menuitem id="estate_property_menu_action" action="estate_property_action" name="Properties"/>
</menuitem>

<menuitem id="estate_settings_menu" name="Settings">
<menuitem id="estate_property_type_menu_action" action="estate_property_type_action" name="Property Types"/>
<menuitem id="estate_property_tag_menu_action" action="estate_property_tag_action" name="Property Tags"/>
</menuitem>
</menuitem>
</odoo>
37 changes: 37 additions & 0 deletions estate/views/estate_property_offer_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?xml version="1.0"?>
<odoo>
<!-- Form -->
<record id="estate_property_offer_view_form" model="ir.ui.view">
<field name="name">Property Offer Form</field>
<field name="model">estate.property.offer</field>
<field name="arch" type="xml">
<form string="Property Offer">
<sheet>
<group>
<field name="price"/>
<field name="partner_id"/>
<field name="validity"/>
<field name="date_deadline"/>
<field name="status"/>
</group>
</sheet>
</form>
</field>
</record>

<!-- List View -->
<record id="estate_property_offer_view_list" model="ir.ui.view">
<field name="name">Property Offer List</field>
<field name="model">estate.property.offer</field>
<field name="arch" type="xml">
<list string="Property Offer">
<field name="price"/>
<field name="partner_id"/>
<field name="validity"/>
<field name="date_deadline"/>
<field name="status"/>
</list>
</field>
</record>

</odoo>
46 changes: 46 additions & 0 deletions estate/views/estate_property_tag_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?xml version="1.0"?>
<odoo>
<!-- Search -->
<record id="estate_property_tag_view_search" model="ir.ui.view">
<field name="name">Property Tag Search</field>
<field name="model">estate.property.tag</field>
<field name="arch" type="xml">
<search string="Property Tag">
<field name="name"/>
</search>
</field>
</record>

<!-- Form -->
<record id="estate_property_tag_view_form" model="ir.ui.view">
<field name="name">Property Tag Form</field>
<field name="model">estate.property.tag</field>
<field name="arch" type="xml">
<form string="Property Tag">
<sheet>
<group>
<field name="name"/>
</group>
</sheet>
</form>
</field>
</record>

<!-- List View -->
<record id="estate_property_tag_view_list" model="ir.ui.view">
<field name="name">Property Tag List</field>
<field name="model">estate.property.tag</field>
<field name="arch" type="xml">
<list string="Property Tag">
<field name="name"/>
</list>
</field>
</record>

<!-- Action -->
<record id="estate_property_tag_action" model="ir.actions.act_window">
<field name="name">Property Tag</field>
<field name="res_model">estate.property.tag</field>
<field name="view_mode">list,form</field>
</record>
</odoo>
46 changes: 46 additions & 0 deletions estate/views/estate_property_type_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?xml version="1.0"?>
<odoo>
<!-- Search -->
<record id="estate_property_type_view_search" model="ir.ui.view">
<field name="name">Property Type Search</field>
<field name="model">estate.property.type</field>
<field name="arch" type="xml">
<search string="Property Type">
<field name="name"/>
</search>
</field>
</record>

<!-- Form -->
<record id="estate_property_type_view_form" model="ir.ui.view">
<field name="name">Property Type Form</field>
<field name="model">estate.property.type</field>
<field name="arch" type="xml">
<form string="Property Type">
<sheet>
<h1>
<field name="name"/>
</h1>
</sheet>
</form>
</field>
</record>

<!-- List View -->
<record id="estate_property_type_view_list" model="ir.ui.view">
<field name="name">Property Type List</field>
<field name="model">estate.property.type</field>
<field name="arch" type="xml">
<list string="Property Type">
<field name="name"/>
</list>
</field>
</record>

<!-- Action -->
<record id="estate_property_type_action" model="ir.actions.act_window">
<field name="name">Property Type</field>
<field name="res_model">estate.property.type</field>
<field name="view_mode">list,form</field>
</record>
</odoo>
Loading