Skip to content

Conversation

@Yoann-bary
Copy link

Initial commit of my technical onboarding exercises, corresponding to chapters 1 and 2 of server framework 101.

Initialization of a new module named 'estate'.

Initial commit of my technical onboarding exercises, corresponding to
chapters 1 and 2 of server framework 101.

Initialisation of a new module named 'estate'.
@robodoo
Copy link

robodoo commented Jan 19, 2026

Pull request status dashboard

@artn-odoo artn-odoo self-requested a review January 19, 2026 13:45
Copy link

@artn-odoo artn-odoo left a comment

Choose a reason for hiding this comment

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

All good so far, just a small styling issue to be fixed but you can change it on future commits

Creation of the estate module's basic property data model.

This corresponds to chapter 3 of the functional onboarding exercise.
Added all permission for group_user to view the estate property data.

This corresponds to chapter 4 of the technical onboarding exercise.
Added proper menus to edit estate properties, and the appropraite
restriction on field edition.

This corresponds to chapter 5 of the functional onboarding.
Added list and form views, as well as search filters for estate property
model.

This corresponds to chapter 6 of the technical onboarding exercise.
Copy link

@artn-odoo artn-odoo left a comment

Choose a reason for hiding this comment

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

Nice one, just some small styling nitpicks.

Added property offer, type and tag models to flesh out the property
descriptions and track potential buyers.

This corresponds to chapter 7 of the functional onboarding exercise.
Added update logic to set related fields when editing estate property
record to reduce busywork.

This corresponds to chapter 8 of the functional onboarding exercise.
Added buttons to manage offer status seamlessly.

This corresponds to chapter 9 of the functional onboarding exercise.
Added constraints to prevent invalid amounts and duplicate tag names
from being entered in the database.

This corresponds to chapter 1à of the functional onboarding exercise.
Added color and widgets to make menus more intuitive.

This corresponds to chapter 11 of the functional onboarding exercise.
Linked the properties to the salesman user and updated the user view to
contain the list of relevant properties.

This corresponds to chapter 12 of the functional onboarding exercise.
Added a link module between estate and account that allows automatic
generation of invoices when a property is sold through estate.

This corresponds to chapter 13 of the functional onboarding exercise.
Added a kanban view to organize property management by type and display
the relevant pricing information.

This corresponds to chapter 14 of the functional onboarding exercise.
Copy link

@artn-odoo artn-odoo left a comment

Choose a reason for hiding this comment

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

Nice one, you could try to amend your last commit to apply those changes if you feel like it. Good luck with the JS

expected_price = fields.Float(required=True)
selling_price = fields.Float(readonly=True, copy=False)
bedrooms = fields.Integer(default=2)
living_area = fields.Integer(string="Living Area (sqm)")

Choose a reason for hiding this comment

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

You don't have to change all of it at this point but we usually prefer to use simple quotes in Python files

Comment on lines +35 to +43
state = fields.Selection(required=True, default="new", copy=False, string="status",
selection=[
('new', 'New'),
('offer_received', 'Offer Received'),
('offer_accepted', 'Offer Accepted'),
('sold', 'Sold'),
('cancelled', 'Cancelled')
],
)

Choose a reason for hiding this comment

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

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

Comment on lines +6 to +7
property_ids = fields.One2many("estate.property", "salesman_id", string="Real Estate Properties",
domain=['|', ('state', '=', 'new'), ('state', '=', 'offer_received')])

Choose a reason for hiding this comment

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

I would either leave it in one line or break it down on multiple lines where each parameter is on it's own line

Suggested change
property_ids = fields.One2many("estate.property", "salesman_id", string="Real Estate Properties",
domain=['|', ('state', '=', 'new'), ('state', '=', 'offer_received')])
property_ids = fields.One2many(
"estate.property",
"salesman_id",
string="Real Estate Properties",
domain=['|', ('state', '=', 'new'), ('state', '=', 'offer_received')]
)

Created new OWL components Counter and Card and connected them via props
to the parent playground.

This corresponds to parts 1-6 of chapter 1 of the web tutorial.
Added a todo list composed of task as well as the necessary logic and
interface needed to manage the addition, removal and completion of
tasks.

This corresponds to parts 7-11 of chapter 1 of the web framework
tutorial.
Allows the card body to contain template components and added a button
to toggle visibility of the body.

This corresponds to parts 13-14 of chapter 1 of the web framework
tutorial.
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