Skip to content

Conversation

@krpat-odoo
Copy link

@krpat-odoo krpat-odoo commented Jan 1, 2026

Estate Module – Overview
:Users can list their properties and add offers for them.
:Admins can manage offer statuses and property statuses.

:Built custom estate models using Odoo ORM with automatic database management
:Created menus, actions, and list/form views for a user-friendly UI
:Configured access rights and model security
:Added computed fields with dependency tracking
:Implemented model relationships (Many2one, One2many, Many2many)
:Enforced data validation and business rules using constraints

  Create the Model and the Security Folder
  CHP 1 : Architecture Overview
  CHP 2 : A New Application
  CHP 3 : Models and Basic Fields
  CHP 4 :  Security - A Brief Introduction
@robodoo
Copy link

robodoo commented Jan 1, 2026

Pull request status dashboard

Copy link

@bit-odoo bit-odoo left a comment

Choose a reason for hiding this comment

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

Hello,
Great Work!

can you please adapt your all commit message accroding to guidelines.Also adapt the PR message too.

No need to do separate commit for this changes - 72dac89

Thanks.

'author': 'KRPAT',
'website': 'https://www.odoo.com/',
'category': 'Tutorials',
'version': '19.0.0.0',
Copy link

Choose a reason for hiding this comment

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

It is you application version. it should be 1.
You can refer this - https://www.odoo.com/documentation/19.0/developer/reference/backend/module.html#manifest

@@ -0,0 +1,15 @@
{
'name': 'RealEstate',
Copy link

Choose a reason for hiding this comment

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

Suggested change
'name': 'RealEstate',
'name': 'Real Estate',

IMO it is better. What do you think?

Comment on lines 1 to 2
from odoo import models, fields
from dateutil.relativedelta import relativedelta
Copy link

Choose a reason for hiding this comment

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

Copy link

Choose a reason for hiding this comment

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

Please apply these changes.

Comment on lines 1 to 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 No newline at end of file
Copy link

Choose a reason for hiding this comment

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

Should be one empty line at the EOF.

Comment on lines 3 to 9
<data>
<record id="estate_property_action" model="ir.actions.act_window">
<field name="name">Estate Property Actions</field>
<field name="res_model">estate.property</field>
<field name="view_mode">list,form</field>
</record>
</data>
Copy link

Choose a reason for hiding this comment

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

Indentation issue.

@krpat-odoo krpat-odoo force-pushed the 19.0-estate-tutorials-krpat branch from baabfe5 to d5e525b Compare January 2, 2026 11:27
@krpat-odoo
Copy link
Author

Implemented all the changes as per the instruction .

@krpat-odoo krpat-odoo force-pushed the 19.0-estate-tutorials-krpat branch from 2b6ea72 to a65bc69 Compare January 5, 2026 12:39
Copy link

@bit-odoo bit-odoo left a comment

Choose a reason for hiding this comment

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

Hello,

Can you please update your PR description. and update your commit message according to guidelines.

Thanks.

Comment on lines 8 to 10
name = fields.Char(string='Name',
required=True
)
Copy link

Choose a reason for hiding this comment

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

indentation issues.

<field name="expected_price" />
<field name="living_area" string="Living Area (sqm)" />
<field name="facades" />

Copy link

Choose a reason for hiding this comment

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

unneccary space.

<field name="facades" />

<separator />

Copy link

Choose a reason for hiding this comment

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

unneccary space.

<filter name="available" string="Available" domain="['|',('state', '=', 'new'),('state', '=', 'offer_received')]" />

<separator />

Copy link

Choose a reason for hiding this comment

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

unneccary space.

<separator />

<filter name="available" string="Available" domain="['|',('state', '=', 'new'),('state', '=', 'offer_received')]" />

Copy link

Choose a reason for hiding this comment

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

unneccary space.

<field name="name">estate.property.search</field>
<field name="model">estate.property</field>
<field name="arch" type="xml">

Copy link

Choose a reason for hiding this comment

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

unneccary space.

@krpat-odoo krpat-odoo force-pushed the 19.0-estate-tutorials-krpat branch from 02d57c1 to 984bbca Compare January 7, 2026 11:04
Comment on lines 1 to 2
from odoo import api, models, fields
from dateutil.relativedelta import relativedelta
Copy link

Choose a reason for hiding this comment

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

Hello,

I asked you to do this changes multiple time but still you haven't applied these - #1099 (comment)

Can you please tell me the reason behind these?

CHP 6 - Completed

Perform the Estate Property List View , Form View ,Group By and Filters

[FIX] estate: Changed the estate version
Added Many2one relationship for estate property types and
Many2many relationship for estate property tags.

Implement list and form views for property types and tags
Implemented the One2many relation

Created the Estate Property Offer Model
Perform the Validation and Deadline in Offers Page
@krpat-odoo krpat-odoo force-pushed the 19.0-estate-tutorials-krpat branch from 984bbca to ac1b84b Compare January 9, 2026 11:06
Perform the Offer Accepting filtering , Handles the Error
Also implemented the constraints which showcase the invalid input
@krpat-odoo krpat-odoo force-pushed the 19.0-estate-tutorials-krpat branch 2 times, most recently from 8a835cc to ab085fc Compare January 12, 2026 16:41
- Add inline list views for related records to improve readability
- Use widgets such as statusbar and many2many_tags with color support
- Make offer and tag list views editable
- Add list view decorations to visually highlight record states
- Improve search behavior with default filters and custom filter domains
- Add a stat button on property types to access related offers
@krpat-odoo krpat-odoo force-pushed the 19.0-estate-tutorials-krpat branch from ab085fc to 8c6e361 Compare January 12, 2026 17:04
Copy link

@bit-odoo bit-odoo left a comment

Choose a reason for hiding this comment

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

Hello,
As we discussed previously you have to write about your application not that what you learn in the PR description.

Thanks

for record in self:
if float_is_zero(record.selling_price, precision_rounding=0.01):
continue

Choose a reason for hiding this comment

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

unneccary space.

continue

min_price = record.expected_price * 0.9

Choose a reason for hiding this comment

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

unneccary space.

for record in self:
if not record.offer_ids:
raise UserError("There are no offers to accept.")

Choose a reason for hiding this comment

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

unneccary space.

raise UserError("There are no offers to accept.")

best_offer = max(record.offer_ids, key=lambda o: o.price)

Choose a reason for hiding this comment

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

unneccary space.

if record.offer_ids.filtered(lambda o: o.status == "accepted"):
record.selling_price = record.best_price
record.buyer_id = best_offer.partner_id

Choose a reason for hiding this comment

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

unneccary space.

name = fields.Char(required=True)
sequence = fields.Integer(default=10)

_check_unique_type_name = models.Constraint(

Choose a reason for hiding this comment

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

Please follow the coding guidelines.

"property_type_id",
string="Properties",
)

Choose a reason for hiding this comment

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

unneccary space.

offer_ids = fields.One2many(
"estate.property.offer", "property_type_id", string="Offers"
)

Choose a reason for hiding this comment

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

unneccary space.

Comment on lines +106 to +108
if record.state == "cancelled":
raise UserError("A cancelled Property cannot be sold.")
record.state = "sold"

Choose a reason for hiding this comment

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

It's good to make the error message translatable.
raise UserError(_("A cancelled Property cannot be sold."))

We can use filtered() here.

if self.filtered(lamda x: x.state=="cancelled")

Comment on lines +112 to +115
for record in self:
if record.state == "sold":
raise UserError("A sold Property cannot be cancelled.")
record.state = "cancelled"

Choose a reason for hiding this comment

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

It's good to make the error message translatable.
raise UserError(_("A sold Property cannot be cancelled."))

We can use filtered() here.

if self.filtered(lamda x: x.state=="sold")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants