-
Notifications
You must be signed in to change notification settings - Fork 2.9k
[ADD] estate: add base estate.property model #1152
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?
Changes from all commits
c262b35
6ad274c
784f6c5
81da3c4
4341f51
4e7976f
a33f84b
b381429
b70ee10
87c6dd2
0e26572
a206764
ac4331d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| from . import models |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| { | ||
| "name": "Real Estate", | ||
| "version": "19.0.0", | ||
| "category": "Tutorials", | ||
| "depends": ["base"], | ||
| "author": "hemeh", | ||
| "application": True, | ||
| "summary": "Manage real estate properties", | ||
| "description": """ | ||
| Manage real estate properties. | ||
| """, | ||
| "data": [ | ||
| "security/ir.model.access.csv", | ||
| "views/estate_property_type_views.xml", | ||
| "views/estate_property_offer_views.xml", | ||
| "views/estate_property_tag_views.xml", | ||
| "views/estate_property_views.xml", | ||
| "views/estate_menus.xml", | ||
| ], | ||
| "website": "https://odoo.com", | ||
| "license": "LGPL-3", | ||
| "installable": True, | ||
|
|
||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| from . import ( | ||
| estate_property, | ||
| estate_property_offer, | ||
| estate_property_tag, | ||
| estate_property_type, | ||
| ) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,80 @@ | ||
| from dateutil.relativedelta import relativedelta | ||
|
|
||
| from odoo import fields, models | ||
|
|
||
|
|
||
| class EstateProperty(models.Model): | ||
| _name = "estate.property" | ||
| _description = "estate property used to buy and sell houses" | ||
|
|
||
| name = fields.Char(required=True) | ||
| description = fields.Text() | ||
| postcode = fields.Char() | ||
| date_availability = fields.Date( | ||
| default=lambda self: fields.Date.context_today(self) + relativedelta(months=3), | ||
| copy=False, | ||
| ) | ||
| expected_price = fields.Float(required=True) | ||
| selling_price = fields.Float(readonly=True, copy=False) | ||
| bedrooms = fields.Integer( | ||
| default=2, | ||
| ) | ||
| living_area = fields.Integer() | ||
| facades = fields.Integer() | ||
| garage = fields.Boolean() | ||
| garden = fields.Boolean() | ||
| garden_area = fields.Integer(required=True) | ||
| garden_orientation = fields.Selection( | ||
| selection=[ | ||
| ("north", "North"), | ||
| ("south", "South"), | ||
| ("east", "East"), | ||
| ("west", "West"), | ||
| ], | ||
| ) | ||
| state = fields.Selection( | ||
| selection=[ | ||
| ("new", "New"), | ||
| ("offer_accepted", "Offer Accepted"), | ||
| ("offer_received", "Offer Received"), | ||
| ("sold", "Sold"), | ||
| ("cancelled", "Cancelled"), | ||
| ], | ||
| string="State", | ||
| ) | ||
|
|
||
| active = fields.Boolean(default=False) | ||
|
|
||
| property_type_id = fields.Many2one( | ||
| "estate.property.type", | ||
| string="Property Type", | ||
| ) | ||
|
|
||
| salesman_id = fields.Many2one( | ||
| 'res.users', | ||
| string="Salesman", | ||
| default=lambda self: self.env.user, | ||
|
|
||
| ) | ||
|
|
||
| buyer_id = fields.Many2one( | ||
| 'res.partner', | ||
| string="Buyer", | ||
| copy=False, | ||
| ) | ||
|
|
||
| tag_id = fields.Many2many( | ||
| string='Tags', | ||
| comodel_name='estate.property.tag', | ||
| ) | ||
| property_id = fields.One2many( | ||
| string='property', | ||
| comodel_name='estate.property.offer', | ||
| inverse_name='property_id', | ||
| ) | ||
|
|
||
| offer_id = fields.One2many( | ||
| 'estate.property.offer', | ||
| 'property_id', | ||
| string='Offers', | ||
| ) | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| from odoo import fields, models | ||
|
|
||
|
|
||
| class EstatePropertyOffer(models.Model): | ||
| _name = "estate.property.offer" | ||
| _description = "Real Estate Property Offer" | ||
|
|
||
| price = fields.Float(string="Price") | ||
| status = fields.Selection( | ||
| selection=[ | ||
| ("accepted", "Accepted"), | ||
| ("refused", "Refused"), | ||
| ], | ||
| string="Status", | ||
| copy=False, | ||
| ) | ||
| partner_id = fields.Many2one( | ||
| "res.partner", | ||
| string="Partner", | ||
| required=True, | ||
| ) | ||
| property_id = fields.Many2one( | ||
| "estate.property", | ||
| string="Property", | ||
| required=True, | ||
| ) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| from odoo import fields, models | ||
|
|
||
|
|
||
| class EstatePropertyTag(models.Model): | ||
| _name = "estate.property.tag" | ||
| _description = "Estate Property Tags" | ||
|
|
||
| name = fields.Char(string="Name", required=True) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| from odoo import fields, models | ||
|
|
||
|
|
||
| class EstatePropertyType(models.Model): | ||
| _name = "estate.property.type" | ||
| _description = "Estate Property Types" | ||
|
|
||
| name = fields.Char(string="Property Type", required=True) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| 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 | ||
| access_estate_property_type,access_estate_property_type,model_estate_property_type,base.group_user,1,1,1,1 | ||
| access_estate_property_tag,access_estate_property_tag,model_estate_property_tag,base.group_user,1,1,1,1 | ||
| access_estate_property_,access_estate_property_tag,model_estate_property_tag,base.group_user,1,1,1,1 | ||
| access_estate_property_offer,access_estate_property_offer,model_estate_property_offer,base.group_user,1,1,1,1 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,42 @@ | ||
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <odoo> | ||
| <data> | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I noticed the
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Mam generally the data tag acts as a container inside the odoo tag so that Odoo can load all records correctly. Initially, it worked when I had only one menuitem but later, after adding sub-menus and an action menu it started throwing an exception error . That’s why I included the data tag to ensure everything loads properly |
||
|
|
||
| <menuitem | ||
| id="estate_menu_root" | ||
| name="Real Estate" /> | ||
|
|
||
| <menuitem | ||
| id="estate_menu_advertisements" | ||
| name="Advertisements" | ||
| parent="estate_menu_root" | ||
| sequence="5" /> | ||
|
|
||
| <menuitem | ||
| id="estate_menu_properties" | ||
| name="Properties" | ||
| parent="estate_menu_advertisements" | ||
| action="estate_property_action" /> | ||
|
|
||
| <menuitem | ||
| id="estate_property_menu_settings" | ||
| name="Settings" | ||
| parent="estate_menu_root" /> | ||
|
|
||
| <menuitem | ||
| id="estate_property_menu_types" | ||
| name="Property Types" | ||
| parent="estate_property_menu_settings" | ||
| action="estate_property_type_action" | ||
| sequence="50"/> | ||
|
|
||
| <menuitem | ||
| id="estate_property_menu_tags" | ||
| name="Property Tags" | ||
| action="estate_property_tag_action" | ||
| parent="estate_property_menu_settings" | ||
| sequence="50"/> | ||
|
|
||
|
|
||
| </data> | ||
| </odoo> | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <odoo> | ||
| <record id="estate_property_offer_view__list" model="ir.ui.view"> | ||
| <field name="name">estate.property.offer.list</field> | ||
| <field name="model">estate.property.offer</field> | ||
| <field name="arch" type="xml"> | ||
| <list> | ||
| <field name="property_id"/> | ||
| <field name="price"/> | ||
| <field name="partner_id"/> | ||
| <field name="status"/> | ||
| </list> | ||
| </field> | ||
| </record> | ||
|
|
||
| <record id="estate_property_offer_view_form" model="ir.ui.view"> | ||
| <field name="name">estate.property.offer.form</field> | ||
| <field name="model">estate.property.offer</field> | ||
| <field name="arch" type="xml"> | ||
| <form> | ||
| <sheet> | ||
| <group> | ||
| <field name="property_id"/> | ||
| <field name="price"/> | ||
| <field name="partner_id"/> | ||
| <field name="status"/> | ||
| </group> | ||
| </sheet> | ||
| </form> | ||
| </field> | ||
| </record> | ||
| </odoo> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| <?xml version='1.0' encoding='utf-8'?> | ||
| <odoo> | ||
| <record id="estate_property_tag_view_list" model="ir.ui.view"> | ||
| <field name="name">estate.property.tag.view.list</field> | ||
| <field name="model">estate.property.tag</field> | ||
| <field name="arch" type="xml"> | ||
| <list> | ||
| <field name="name"/> | ||
| </list> | ||
| </field> | ||
| </record> | ||
|
|
||
| <record id="estate_property_tag_view_form" model="ir.ui.view"> | ||
| <field name="name">estate.property.tag.view.form</field> | ||
| <field name="model">estate.property.tag</field> | ||
| <field name="arch" type="xml"> | ||
| <form string=""> | ||
| <sheet> | ||
| <group> | ||
| <field name="name" string="Name"/> | ||
| </group> | ||
| </sheet> | ||
| </form> | ||
| </field> | ||
| </record> | ||
|
|
||
| <record id="estate_property_tag_action" model="ir.actions.act_window"> | ||
| <field name="name">Property Tags</field> | ||
| <field name="res_model">estate.property.tag</field> | ||
| <field name="view_mode">list,form</field> | ||
|
|
||
| </record> | ||
| </odoo> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| <?xml version='1.0' encoding='utf-8'?> | ||
| <odoo> | ||
| <record id="estate_property_type_view_list" model="ir.ui.view"> | ||
| <field name="name">estate.property.type.view.list</field> | ||
| <field name="model">estate.property.type</field> | ||
| <field name="arch" type="xml"> | ||
| <list> | ||
| <field name="name"/> | ||
| </list> | ||
| </field> | ||
| </record> | ||
|
|
||
| <record id="estate_property_type_view_form" model="ir.ui.view"> | ||
| <field name="name">estate.property.type.view.form</field> | ||
| <field name="model">estate.property.type</field> | ||
| <field name="arch" type="xml"> | ||
| <form string=""> | ||
| <sheet> | ||
| <group> | ||
| <field name="name" placeholder="Estate Property Type"/> | ||
| </group> | ||
| </sheet> | ||
| </form> | ||
| </field> | ||
| </record> | ||
|
|
||
| <record id="estate_property_type_action" model="ir.actions.act_window"> | ||
| <field name="name"> Property Types </field> | ||
| <field name="res_model">estate.property.type</field> | ||
| <field name="view_mode">list,form</field> | ||
| </record> | ||
| </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.
Use underscores while defining keys for selection field.
Also the key should always come first, followed by the value.