Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
782b64a
[ADD] estate: initialize module structure
karad-odoo Jul 2, 2026
7749bf8
[CLN] estate: add missing manifest attributes and fix formatting
karad-odoo Jul 3, 2026
227c9b1
[CLN] estate: reset empty manifest attributes
karad-odoo Jul 3, 2026
d348a75
[ADD] estate: define property model and basic fields
karad-odoo Jul 3, 2026
ccf4c49
[CLN] estate: fix code formatting and linting style
karad-odoo Jul 3, 2026
26db8cd
[ADD] estate: configure access rights for property model
karad-odoo Jul 3, 2026
c9da401
[ADD] estate: add property window action and menu hierarchy
karad-odoo Jul 6, 2026
0679061
[CLN] tutorials: ignore and untrack IDE configuration files
karad-odoo Jul 6, 2026
8ea0503
[ADD] estate: define basic list view for property model
karad-odoo Jul 7, 2026
d71b0a3
[FIX] estate: resolve field name mismatches in property list view
karad-odoo Jul 8, 2026
f71cc19
[ADD] estate: define custom form view for property model
karad-odoo Jul 8, 2026
a1b64f1
[ADD] estate: define search view for property model
karad-odoo Jul 9, 2026
3362e17
[ADD] estate: add filters and grouping to property search view
karad-odoo Jul 13, 2026
39fb51a
[IMP] estate: add field attributes, defaults, and state tracking
karad-odoo Jul 13, 2026
5eaa961
[IMP] estate: bump version to trigger database schema sync
karad-odoo Jul 13, 2026
f137c59
[FIX] estate: improve property model fields and search view layout
karad-odoo Jul 14, 2026
f2a88fc
[REF] estate: move menus to separate file and fix code style
karad-odoo Jul 21, 2026
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
1 change: 0 additions & 1 deletion .gitignore

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unneccary diff.

Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ share/python-wheels/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
Expand Down
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": "Estate",
"version": "1.1",
"category": "",
"summary": "",
"website": "",
"application": True,
"installable": True,
"data": [
"security/ir.model.access.csv",
"views/estate_property_views.xml",
"views/estate_menus.xml",
],
"depends": ["base"],
"author": "Kaushal Radadiya",
"license": "LGPL-3",
}
1 change: 1 addition & 0 deletions estate/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import estate_property
45 changes: 45 additions & 0 deletions estate/models/estate_property.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from odoo import fields, models


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

name = fields.Char(required=True)
description = fields.Text()
postcode = fields.Char()
date_availability = fields.Date()
expected_price = fields.Float(required=True)
selling_price = fields.Float()
bedrooms = fields.Integer()
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"),
],
string="Garden Orientation",
)

state = fields.Selection(
selection=[
("new", "New"),
("offer_received", "Offer Received"),
("offer_accepted", "Offer Accepted"),
("sold", "Sold"),
("cancelled", "Cancelled"),
],
required=True,
copy=False,
default="new",
string="Status",
)

active = fields.Boolean(default=True)
2 changes: 2 additions & 0 deletions estate/security/ir.model.access.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1
18 changes: 18 additions & 0 deletions estate/views/estate_menus.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>

<!-- Top Menu-->
<menuitem id="estate_menu_root"
name="Real Estate"/>

<!-- Category Menu-->
<menuitem id="estate_first_level_menu"
name="Advertisements"
parent="estate_menu_root"/>

<!-- Action Link Menu-->
<menuitem id="estate_property_menu_action"
name="Properties"
parent="estate_first_level_menu"
action="estate_property_action"/>
</odoo>
89 changes: 89 additions & 0 deletions estate/views/estate_property_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="estate_property_action" model="ir.actions.act_window">
<field name="name">Properties</field>
<field name="res_model">estate.property</field>
<field name="view_mode">list,form</field>
</record>

<!-- Task (Tree) View-->
<record id="estate_property_view_list" model="ir.ui.view">
<field name="name">estate.property.list</field>
<field name="model">estate.property</field>
<field name="arch" type="xml">
<list string="Properties">
<field name="name" string="Name"/>
<field name="postcode" string="Postcode"/>
<field name="bedrooms" string="Bedrooms"/>
<field name="living_area" string="Living Area (sqm)"/>
<field name="expected_price" string="Expected Price"/>
<field name="selling_price" string="Selling Price"/>
<field name="date_availability" string="Available From"/>
<field name="state" string="State"/>
</list>
</field>
</record>

<!-- Form View-->
<record id="estate_property_view_form" model="ir.ui.view">
<field name="name">estate.property.form</field>
<field name="model">estate.property</field>
<field name="arch" type="xml">
<form string="Property">
<sheet>
<div>
<h1>
<field name="name" placeholder="Enter Property Name"/>
</h1>
</div>
<group>
<group>
<field name="postcode"/>
<field name="date_availability"/>
</group>
<group>
<field name="expected_price"/>
<field name="selling_price"/>
</group>
</group>
<notebook>
<page string="Description">
<group>
<field name="description"/>
<field name="bedrooms"/>
<field name="living_area"/>
<field name="facades"/>
<field name="garage"/>
<field name="garden"/>
<field name="garden_area"/>
<field name="garden_orientation"/>
<field name="state"/>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>

<!-- Search Filter-->
<record id="estate_property_view_search" model="ir.ui.view">
<field name="name">estate.property.search</field>
<field name="model">estate.property</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<field name="postcode"/>
<field name="expected_price"/>
<field name="bedrooms"/>
<field name="living_area"/>
<field name="facades"/>

<filter name="filter_available" string="Available"
domain="['|', ('state', '=', 'new'), ('state', '=', 'offer_received')]"/>
<filter name="group_by_postcode" string="Postcode" context="{'group_by': 'postcode'}"/>

</search>
</field>
</record>
</odoo>