Skip to content

[ADD] estate : real estate module implementation#1232

Draft
aykhu-odoo wants to merge 16 commits intoodoo:19.0from
odoo-dev:19.0-tutorials-estate-aykhu
Draft

[ADD] estate : real estate module implementation#1232
aykhu-odoo wants to merge 16 commits intoodoo:19.0from
odoo-dev:19.0-tutorials-estate-aykhu

Conversation

@aykhu-odoo
Copy link
Copy Markdown

Implementation of Real Estate Advertisement module

Features:

  • Property and offer management (create, sell, accept/refuse offers)
  • Relational models (Many2one, One2many, Many2many)
  • Business logic with Python (computed fields, onchange, constraints)
  • SQL constraints for data integrity
  • List, Form, and Search views
  • Actions, menus, and buttons
  • Access rights and record rules

…tion

- Configured manifest with required metadata and dependencies.
- It covers chapter- 2 and 3 task
- Added the required fields.
- Completed Ch 4 task for Access Rights
@robodoo
Copy link
Copy Markdown

robodoo commented Apr 13, 2026

Pull request status dashboard

@aykhu-odoo aykhu-odoo force-pushed the 19.0-tutorials-estate-aykhu branch 4 times, most recently from a0a9563 to 4fe99f0 Compare April 15, 2026 17:59
- Created an action
- Define main menu and submenus
- Add views to manifest 'data' list
- Completed Ch 5 Action and Menu part
- Added is_active and state fields in form
- Added fields in list view
- Improved and adjusted fields in Form View
- Completed Ch 5 and Ch 6 List and Form Views
- Implemented search view
- Added property types, tags, and offers models
- Linked properties with buyer, salesperson, types, tags, and offers
- Completed Ch 6 and Ch 7.
- Added Best Offer and Total Area fields in property form view
- Covers 2 tasks of chapter 8.
…nction

- Added Validity and date_deadline fields with inverse function
- Implemented onchange logic for garden_area and garden_orientation
- Suggested fixes implemented
- Covers last 2 tasks of chapter 8.
- Added sold and cancelled action buttons for state transition
- Prevent invalid transitions between 'sold' and 'cancelled' states
- Introduce Accept and Refuse buttons for property offers
- Assign buyer and selling price to property on acceptance
- Restrict multiple offers from being accepted for the same property
- Chapter 9 Completed.
- Ensure positive property and offer prices
- Ensure unique property tag and type names
- Chapter 10 task 1 completed.
- Adds constraint using float_compare, ignores zero selling price.
- Chapter 10 completed.
- Added inline list view for property types
- Implemented statusbar widget for property state
- Defined default ordering on models
- Added conditional visibility and readonly attributes
- Enhanced list views with decorations and optional fields
- Introduced stat button on property type to access related offers
- Added related field and computed offer count for property types
- Chapter 11 completed
- Extended CRUD methods for offer validation, state update
- Added constraints to prevent invalid operations (state and offer price check)
- Inherited res.users to add property_ids relation
- Implemented view inheritance to display properties in user form
- Completed chapter 12
- Integrated account module to create invoices from sold properties
- Reused account.move for financial operations
- Enhanced kanban view using QWeb templating
- Implemented conditional UI logic with t-if and raw values
- Chapter 13 and 14 completed.
- Added visit scheduling with list, form, and calendar views
- Added constraint to prevent overlapping visits within the same property
- Automatically create calendar events on visit creation
- Added issue reporting with list and form views
- Completed Group Tasks.
@aykhu-odoo aykhu-odoo force-pushed the 19.0-tutorials-estate-aykhu branch from 4fe99f0 to b8bc03e Compare April 16, 2026 09:35
@bit-odoo bit-odoo closed this Apr 16, 2026
@bit-odoo bit-odoo reopened this Apr 16, 2026
- Added chatter and activities
- Implemented logic to reject all other offers when one is accepted
- Added “Accept Best Offer” action to simplify offer selection
- Added rainbow animation when a property is marked as sold
- Display sold ribbon in form and kanban views
- Updated kanban default grouping to state and disabled record drag
- Made “Sold” and “Accept Best Offer” buttons conditional primary actions
@aykhu-odoo aykhu-odoo force-pushed the 19.0-tutorials-estate-aykhu branch from 26c6c8b to 92ab5a6 Compare April 20, 2026 08:35
Copy link
Copy Markdown

@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?

Thanks


from odoo import api, fields, models

AVAILABLE_PRIORITIES = [
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

name is not aligned with the values

Comment thread estate/models/estate_property.py Outdated
def action_property_sold(self):
for record in self:
if record.state == "cancelled":
raise UserError("Cancelled property cannot be set as sold.")
Copy link
Copy Markdown

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(_("Cancelled property cannot be set as sold."))

@api.depends('visit_ids')
def _compute_issue_count(self):
for record in self:
record.issue_count = len(record.issue_ids)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Can you try it using read_group?

<field name="arch" type="xml">
<form>
<header>
<button name="action_rainbow_man" string="Sold" class="btn-primary" type="object" invisible="state != 'offer_accepted'"/>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

The name is not aligned with the string.


def action_accepted(self):
for offer in self.property_id.offer_ids:
if offer.status == "accepted":
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

You already made the button invisible. No need for this condition.

<field name="property_type_id"/>
<field name="validity" width="100"/>
<field name="date_deadline"/>
<button name="action_accepted" type="object" string="Accept" icon="fa-check" invisible="status != False"/>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggested change
<button name="action_accepted" type="object" string="Accept" icon="fa-check" invisible="status != False"/>
<button name="action_offer_accepted" type="object" string="Accept" icon="fa-check" invisible="status != False"/>

<field name="validity" width="100"/>
<field name="date_deadline"/>
<button name="action_accepted" type="object" string="Accept" icon="fa-check" invisible="status != False"/>
<button name="action_refused" type="object" string="Refuse" icon="fa-times" invisible="status != False"/>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggested change
<button name="action_refused" type="object" string="Refuse" icon="fa-times" invisible="status != False"/>
<button name="action_offer_refused" type="object" string="Refuse" icon="fa-times" invisible="status != False"/>

Comment on lines +17 to +20
<field name="property_type_id"/>
<field name="property_tags_ids" widget="many2many_tags" options="{'color_field': 'color'}" width="300"/>
<field name="bedrooms"/>
<field name="living_area"/>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

No need to display too many fields. You can make these fields optional.

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