diff --git a/.gitignore b/.gitignore index b6e47617de1..078cf3876be 100644 --- a/.gitignore +++ b/.gitignore @@ -127,3 +127,4 @@ dmypy.json # Pyre type checker .pyre/ +.idea/ \ No newline at end of file diff --git a/estate/__init__.py b/estate/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/estate/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/estate/__manifest__.py b/estate/__manifest__.py new file mode 100644 index 00000000000..e535f304e8f --- /dev/null +++ b/estate/__manifest__.py @@ -0,0 +1,16 @@ +{ + "name": "Real Estate", + "depends": ["base"], + "application": True, + "data": [ + "security/ir.model.access.csv", + "views/estate_property_views.xml", + "views/estate_property_type_views.xml", + "views/estate_property_menus.xml", + ], + "demo": [ + "demo/estate_property_demo.xml", + ], + 'author': 'Hansil Chapadiya', + 'license': 'LGPL-3' +} diff --git a/estate/demo/estate_property_demo.xml b/estate/demo/estate_property_demo.xml new file mode 100644 index 00000000000..d123684ed92 --- /dev/null +++ b/estate/demo/estate_property_demo.xml @@ -0,0 +1,96 @@ + + + + + Villa Sunset + For Sunset Lovers with sea view + 2026-10-01 + 382016 + 400000000 + 4 + 4000 + 3 + True + True + 500 + north + False + True + new + + + + + Skyline Apartment + Modern luxury apartment in city center + 2026-11-15 + 380015 + 15000000 + 2 + 1200 + 1 + True + False + 0 + False + True + offer_received + + + + + Green Valley Bungalow + Peaceful family home with large garden + 2026-09-30 + 382421 + 25000000 + 3 + 2200 + 4 + True + True + 800 + south + False + True + offer_accepted + + + + + Cozy Studio Flat + Ideal for working professionals + 2026-08-01 + 380009 + 5000000 + 1 + 550 + 2 + False + False + 0 + True + False + sold + + + + + Royal Heights Penthouse + Premium penthouse with private terrace garden + 2026-12-01 + 380054 + 85000000 + 5 + 5500 + 4 + True + True + 350 + east + False + True + new + + + diff --git a/estate/models/__init__.py b/estate/models/__init__.py new file mode 100644 index 00000000000..40092a2d810 --- /dev/null +++ b/estate/models/__init__.py @@ -0,0 +1,2 @@ +from . import estate_property +from . import estate_property_type diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py new file mode 100644 index 00000000000..87d24429834 --- /dev/null +++ b/estate/models/estate_property.py @@ -0,0 +1,50 @@ +from datetime import timedelta + +from odoo import fields, models + + +class EstateProperty(models.Model): + _name = "estate.property" + _description = "Real Estate Property" + _order = "name" + + name = fields.Char('Property Name', required=True, translate=True) + description = fields.Text('Property Description', required=True) + date_availability = fields.Date(copy=False, default=lambda self: fields.Date.today() + timedelta(days=3)) + postcode = fields.Char('Postal Code') + selling_price = fields.Float('Selling Price', readonly=True, copy=False, default=1000000) + expected_price = fields.Float('Expected Price', required=True) + bedrooms = fields.Integer('No of. Bedrooms', default=2) + living_area = fields.Integer('Living Area') + facades = fields.Integer('Facades') + garage = fields.Boolean('Garage', default=False) + garden = fields.Boolean('Garden', default=False) + garden_area = fields.Integer('Garden Area') + garden_orientation = fields.Selection( + selection=[ + ('north', 'North'), + ('south', 'South'), + ('east', 'East'), + ('west', 'West'), + ], + string='Garden Orientation', + default='north' + ) + sold = fields.Boolean('Sold', default=False) + active = fields.Boolean('Active', default=True) + state = fields.Selection( + selection=[ + ('new', 'New'), + ('offer_received', 'Offer Received'), + ('offer_accepted', 'Offer Accepted'), + ('sold', 'Sold'), + ('cancelled', 'Cancelled'), + ], + string='State', + default='new', + required=True, + copy=False + ) + property_type_id = fields.Many2one("estate.property.type", string='Property Type') + buyer_id = fields.Many2one('res.partner', string='Buyer') + salesperson_id = fields.Many2one('res.users', string='Salesperson', default=lambda self: self.env.user) diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py new file mode 100644 index 00000000000..73f04e446d0 --- /dev/null +++ b/estate/models/estate_property_type.py @@ -0,0 +1,8 @@ +from odoo import fields, models + + +class EstatePropertyType(models.Model): + _name = 'estate.property.type' + _description = 'Estate Property Type' + + property_name = fields.Char(required=True) diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv new file mode 100644 index 00000000000..80cea04e07f --- /dev/null +++ b/estate/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_estate_property,estate.property.name,model_estate_property,base.group_user,1,1,1,1 +access_estate_property_type,estate.property.type,model_estate_property_type,base.group_user,1,1,1,1 diff --git a/estate/static/description/icon.png b/estate/static/description/icon.png new file mode 100644 index 00000000000..a4963f14a2f Binary files /dev/null and b/estate/static/description/icon.png differ diff --git a/estate/views/estate_property_menus.xml b/estate/views/estate_property_menus.xml new file mode 100644 index 00000000000..f6745b9861e --- /dev/null +++ b/estate/views/estate_property_menus.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/estate/views/estate_property_type_views.xml b/estate/views/estate_property_type_views.xml new file mode 100644 index 00000000000..8df8d6fa1ca --- /dev/null +++ b/estate/views/estate_property_type_views.xml @@ -0,0 +1,8 @@ + + + + Property Types + estate.property.type + list,form + + \ No newline at end of file diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml new file mode 100644 index 00000000000..e32e39f7c27 --- /dev/null +++ b/estate/views/estate_property_views.xml @@ -0,0 +1,101 @@ + + + + estate.property.list + estate.property + + + + + + + + + + + estate.property.form + estate.property + +
+
+ +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + estate.property.search + estate.property + + + + + + + + + + + + + + + + + + All Properties + estate.property + list,form + {'search_default_group_by_garden_orientation' : 1, 'search_default_group_by_state':1} + + +
\ No newline at end of file