-
Notifications
You must be signed in to change notification settings - Fork 2.9k
[ADD] Estate Property Module #1103
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
base: 19.0
Are you sure you want to change the base?
Conversation
1. Architecture Overview 2. A New Application
Fixed the white space error, added a space after the colon ( : ).
{
'name': 'Real Estate',
'author': 'Kunj Koradiya',
'description': 'This is the description'
}
Added space after each colon.
Added the line after the end of the code
{
'name': 'Real Estate',
'author': 'Kunj Koradiya',
'description': 'This is the description'
}
Added a new line at the end.
Fixed the white space error, which was at the end of the line in the description
'description': 'This is the description'
Removed the space from the end of the line
Fixed the license error, which later added at the last 'license': 'LGPL-3' Added the license
-Added the initial estate property model with basic fields. -Configured access rights via ir.model.access.csv to enable CRUD operation. -Introduced menu items to expose the model in the UI. -Created custom list, form, and search views to replace default generic views. -Improved usability by defining proper field layouts and search filters. Completed Chapter 3-6
-Removed the unwanted imports from the estate_property.py Completed chapter 3-6
- Added property types, tags, and offers models with views - Linked properties with buyer, salesperson, types, tags, and offers - Displayed offers and relations in property views Completed the Chapter 7
- Fixed the line Spacing in the __init__.py file Completed the Chapter 7
mash-odoo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello @kukor-odoo,
Nice start for the module.
Please apply the suggested changes wherever necessary.
- Updated naming conventions for models and views - Cleaned up imports, spacing, and unnecessary attributes - Aligned selection fields and filters with Odoo standards
- Removed the comma
buyer_id = fields.Many2one('res.users')
Add a computed field `best_price` on `estate.property`, calculated from the highest offer price (using `@api.depends`). Also implement an `@api.onchange` on the `garden` field to set default values for `garden_area` and `garden_orientation`. Completed Chapter 8
- Replaced inconsistent use of single and double quotes across Python files. - Fixed quote usage in the manifest file to align with coding standards.
- Added server actions and buttons to manage property state transitions - Implemented logic to accept/refuse offers and mark properties as sold - Added SQL constraints to ensure valid and consistent data - Added Python constraints to enforce business rules on pricing Completed Chapters 9 and 10
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello,
I am getting this traceback, can you please resolve it?
Also, please update your PR title and description.
- Resolved the traceback issue in the estate module. - Removed the unnecessary property_id field from the offer form, as it is not required.
543fb53 to
7dde16c
Compare
- Improve estate views following the Sprinkles tutorial. - Add list decorations, inline editing, and statusbar widgets. - Apply deterministic ordering and sequence handling. - Enhance overall UI clarity and usability.
cf9976a to
bb1dd37
Compare
- Implement maintenance tracking with title, cost, and status fields. - Prevent property sale when maintenance requests are pending and calculate total maintenance costs.
de376d5 to
2ab5de2
Compare
mash-odoo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello,
Good going on this task..
Please go through my questions and suggestions
- Applied the requested review changes to the estate module. - Improved the offer acceptance flow and updated related property behavior. - Adjusted views and field options to better match the expected workflow. - Overall, the module now follows the reviewed structure and logic.
4ed62d3 to
7b321f5
Compare
7b321f5 to
2aae513
Compare
- Add recordset operations, domain filtering, and computed fields following the Sprinkles chapter. - Extend existing models using proper inheritance and method overrides. - Introduce a new module with models, views, and access rights, and integrate it with the estate app. Completed Chapters 11, 12, and 13
2aae513 to
54dcff3
Compare
Added draft invoice creation logic for estate transactions. Implemented Kanban views for estate-related models. Designed card layouts with key fields and visual indicators. Improved workflow visibility and usability following Odoo 19 standards. Completed Chapters 14 and 15
af41f9f to
2d94f55
Compare
mash-odoo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello!
Good going on the task..
Please look at the comments..
| <?xml version="1.0" encoding="utf-8"?> | ||
| <odoo> | ||
|
|
||
|
|
||
|
|
||
| </odoo> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's the need of this file?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is no longer any need for this file in the current state of the Estate module. However, it was required earlier when I was creating and displaying fields in the form view. At that time, I was working with data from the estate.property table and needed to show those records, so I inherited the fields from that module and used this file for that purpose.
After successfully completing the task, the file was no longer needed, but I forgot to remove it.
| <field name="model">res.users</field> | ||
| <field name="inherit_id" ref="base.view_users_form"/> | ||
| <field name="arch" type="xml"> | ||
| <xpath expr="//notebook" position="inside"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| <xpath expr="//notebook" position="inside"> | |
| <notebook position="inside"> |
You can directly give paths like this
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Got it, thanks for pointing that out. I’ve removed the <xpath> and directly used the <notebook> to add the content inside the existing notebook.
<notebook position="inside">
<page string="Properties">
<group>
<field name="property_ids"/>
<field name="unsold_cost"/>
</group>
</page>
</notebook>
| Expected Price: | ||
| <field name="expected_price"/> | ||
| </div> | ||
| <t t-if="record.property_type_id.raw_value"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do we need to write here raw_value?
| required=True, | ||
| help="This field tells us the state of the property.", | ||
| ) | ||
| total_area = fields.Integer(compute='_compute_total_area') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we perform search on the total_area without using store=True?
| <field name="model">estate.property</field> | ||
| <field name="arch" type="xml"> | ||
| <form> | ||
| <header> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add one more button in the header for accepting the best offer directly by a click?
| </h4> | ||
| </div> | ||
| <div class="ms-auto d-flex"> | ||
| <field name="partner_id" widget="many2one_avatar_user" class="ms-2"/> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is this widget used for?
| _inherit = 'estate.property' | ||
|
|
||
| def action_sold(self): | ||
| res = super().action_sold() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is the use of calling super()?
| <field name="arch" type="xml"> | ||
| <kanban default_group_by="property_type_id" highlight_color="color" options="{'color_field' : 'color'}"> | ||
| <field name="state"/> | ||
| <progressbar field="state" colors='{"offer_accepted": "success", "offer_received": "warning", "cancelled": "danger"}' sum_field="expected_price"/> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you know where are all these attributes of xml file defined?
| from odoo import api, fields, models | ||
|
|
||
|
|
||
| class EstatePropertyType(models.Model): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why did you use here models.Model?
What are the other types of models that you can use and what are their specifications?

Uh oh!
There was an error while loading. Please reload this page.