Skip to content

First commit #823

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

Open
wants to merge 2 commits into
base: 18.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions estate/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
23 changes: 23 additions & 0 deletions estate/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
'name': "Estate",
'version': '1.0',
'depends': ['base'],
'author': "PRIN",
'category': 'Category',
'description': """
Just a dummy estate app
""",
'data' : [
'security/ir.model.access.csv',

'views/estate_property_views.xml',
'views/estate_property_type_views.xml',
'views/estate_property_offer_views.xml',
'views/estate_property_tag_views.xml',

'views/estate_menus.xml',
],
'installable': True,
'application': True,
'license': 'LGPL-3',
}
4 changes: 4 additions & 0 deletions estate/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from . import estate_property
from . import estate_property_type
from . import estate_property_tag
from . import estate_property_offer
74 changes: 74 additions & 0 deletions estate/models/estate_property.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
from odoo import api,fields,models
from dateutil.relativedelta import relativedelta


class estate_property(models.Model):
_name = "estate.property"
_description = "Estate property file"

name = fields.Char('Name',required=True, translate=True, default='Unknown')
description = fields.Text("Description",required=True, translate=True)
postcode = fields.Char("Post code",required=False, translate=True)
Date_avaibility = fields.Date("Avaibility date",required=False, copy=False, default=lambda self: self._default_date_availability(3))
def _default_date_availability(self,number_of_months):
return fields.Date.context_today(self) + relativedelta(months=number_of_months)
expected_price = fields.Float("Expected Price",required=False)
selling_price = fields.Float("Selling Price",readonly=True, copy=False, required=False)
bedrooms = fields.Integer("Bedrooms numbers",required=False, default=2)
living_area = fields.Integer("Living Area",required=False)
facades = fields.Integer("Facades",required=False)
garage = fields.Boolean("Garage",required=False)
garden = fields.Boolean("Garden",required=False)
garden_area = fields.Integer("garden_area",required=False)
Orientation = fields.Selection(
string="Garden Orientation",
selection=[('North','North'),('East','East'),('South','South'),('West','West')]
)
Estate_state = fields.Selection(
string="Estate State",
selection=[('New','New'),('Offer_Received','Offer Received'),('Offer_Accepted','Offer Accepted'),('Sold','Sold'),("Cancelled","Cancelled")],
default="New",
copy=False
)
active = fields.Boolean("active",required=True,default=True,active=True)

property_type_id = fields.Many2one("estate.property.type", string="Property Type")
property_salesman_id = fields.Many2one("res.users", string="Salesman", default=lambda self: self.env.user)
property_buyer_id = fields.Many2one("res.partner", string="Buyer")

property_tags_id = fields.Many2many("estate.property.tag", string="Tags")

property_offers_id = fields.One2many("estate.property.offer","property_id", string="Offers")

total_area = fields.Float(compute="_compute_total_area")
best_offer = fields.Float(compute="_compute_best_offer")

@api.depends("living_area","garden_area")
def _compute_total_area(self):
for prop in self:
prop.total_area = prop.living_area+prop.garden_area


@api.depends("property_offers_id.price")
def _compute_best_offer(self):
for prop in self:
prop.best_offer = max(prop.property_offers_id.mapped("price")) if prop.property_offers_id else 0.0

@api.onchange("garden")
def _onchange_garden(self):
if self.garden == True:
self.garden_area = 100
self.Orientation = "North"
else:
self.garden_area = 0
self.Orientation = False

def action_cancel_property(self):
for record in self:
record.Estate_state = "Cancelled"

def action_sold_property(self):
for record in self:
record.Estate_state = "Sold"

note = fields.Text("Special mentions about the house.")
30 changes: 30 additions & 0 deletions estate/models/estate_property_offer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from odoo import fields,models,api
from dateutil.relativedelta import relativedelta


class estate_property_offer(models.Model):
_name = "estate.property.offer"
_description = "Estate property offer file"

price = fields.Integer('Price',required=True, default=100000)
validity = fields.Integer("validity days", default=7)
date_dateline = fields.Date("Date deadline",compute="_compute_date_deadline", inverse="_inverser_date_deadline")
status = fields.Selection(
string="Offer Status",
selection=[('Accepted','Acccepted'),
('In Waiting','In Waiting'),
('Refused','Refused')],
default="In Waiting",
copy=False
)
partner_id = fields.Many2one("res.partner", string="Partner",required=True)
property_id = fields.Many2one("estate.property", string="Property",required=True)

@api.depends("validity")
def _compute_date_deadline(self):
for record in self:
record.date_dateline=fields.Date.context_today(self)+relativedelta(days=record.validity)

def _inverser_date_deadline(self):
for record in self:
record.validity = (record.date_dateline - fields.Date.context_today(self)).days
8 changes: 8 additions & 0 deletions estate/models/estate_property_tag.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from odoo import fields,models


class estate_property_tag(models.Model):
_name = "estate.property.tag"
_description = "Estate property tag file"

name = fields.Char('Name',required=True, translate=True, default='Unknown')
8 changes: 8 additions & 0 deletions estate/models/estate_property_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from odoo import fields,models


class estate_property_type(models.Model):
_name = "estate.property.type"
_description = "Estate property type file"

name = fields.Char('Name',required=True, translate=True, default='Unknown')
5 changes: 5 additions & 0 deletions estate/security/ir.model.access.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
estate.access_estate_property,access_estate_property,estate.model_estate_property,base.group_user,1,1,1,1
estate.access_estate_property_type,access_estate_property_type,estate.model_estate_property_type,base.group_user,1,1,1,1
estate.access_estate_property_tag,access_estate_property_tag,estate.model_estate_property_tag,base.group_user,1,1,1,1
estate.access_estate_property_offer,access_estate_property_offer,estate.model_estate_property_offer,base.group_user,1,1,1,1
27 changes: 27 additions & 0 deletions estate/views/estate_menus.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<menuitem id="Estate_menu_root" name="Estate">
<menuitem id="Estate_menu_Advertissements" name="Advertissement" sequence="5">
<menuitem id="Estate_menu_Properties" name="Property" action="estate_property_view"/>
<menuitem id="Estate_menu_Properties_offer" name="Offers" action="estate_property_offer_view"/>
</menuitem>
<menuitem id="Estate_menu_settings" name="Settings" sequence="10">
<menuitem id="Estate_menu_Properties_type" name="Property Type" action="estate_property_type_view"/>
<menuitem id="Estate_menu_Properties_tag" name="Property Tags" action="estate_property_tag_view"/>
</menuitem>
</menuitem>
</odoo>



<!-- main -->
<!-- <menuitem id="Estate_menu_root"
name="Estate"/> -->
<!-- Estate menu -->
<!-- <menuitem id="Estate_menu_Advertissements"
name="Advertissement"
parent="Estate_menu_root"/>
<menuitem id="Estate_menu_Properties"
name="Properties"
parents="Estate_menu_Advertissements"
action="estate_property_view_form"/> -->
39 changes: 39 additions & 0 deletions estate/views/estate_property_offer_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?xml version="1.0"?>
<odoo>
<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 string="Estate Property Offers">
<sheet>
<group>
<h1>
<field name="price"/>
</h1>
<field name="status"/>
<field name="partner_id"/>
<field name="property_id"/>
<field name="date_dateline"/>
<field name="validity"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="estate_property_offer_view_tree" 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 string="Channel">
<field name="price"/>
<field name="partner_id"/>
<field name="status"/>
</list>
</field>
</record>
<record id="estate_property_offer_view" model="ir.actions.act_window">
<field name="name">Estate Properties Offers</field>
<field name="res_model">estate.property.offer</field>
<field name="view_mode">list,form</field>
</record>
</odoo>
23 changes: 23 additions & 0 deletions estate/views/estate_property_tag_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0"?>
<odoo>
<record id="estate_property_tag_view_form" model="ir.ui.view">
<field name="name">estate.property.tag.form</field>
<field name="model">estate.property.tag</field>
<field name="arch" type="xml">
<form string="Estate Property Tag">
<sheet>
<group>
<h1>
<field name="name"/>
</h1>
</group>
</sheet>
</form>
</field>
</record>
<record id="estate_property_tag_view" model="ir.actions.act_window">
<field name="name">Estate Properties Tags</field>
<field name="res_model">estate.property.tag</field>
<field name="view_mode">list,form</field>
</record>
</odoo>
23 changes: 23 additions & 0 deletions estate/views/estate_property_type_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0"?>
<odoo>
<record id="estate_property_type_view_form" model="ir.ui.view">
<field name="name">estate.property.type.form</field>
<field name="model">estate.property.type</field>
<field name="arch" type="xml">
<form string="Estate Property Type">
<sheet>
<group>
<h1>
<field name="name"/>
</h1>
</group>
</sheet>
</form>
</field>
</record>
<record id="estate_property_type_view" model="ir.actions.act_window">
<field name="name">Estate Properties Types</field>
<field name="res_model">estate.property.type</field>
<field name="view_mode">list,form</field>
</record>
</odoo>
98 changes: 98 additions & 0 deletions estate/views/estate_property_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
<?xml version="1.0"?>
<odoo>
<record id="estate_property_view_tree" model="ir.ui.view">
<field name="name">estate.property.list</field>
<field name="model">estate.property</field>
<field name="arch" type="xml">
<list string="Channel">
<field name="name"/>
<field name="postcode"/>
<field name="bedrooms"/>
<field name="living_area"/>
<field name="expected_price"/>
<field name="selling_price"/>
<field name="Date_avaibility"/>
</list>
</field>
</record>
<record id="estate_property_view_form" model="ir.ui.view">
<field name="name">estate.property.form</field>
<field name="model">estate.property</field>
<field name="arch" type="xml">
<form string="Estate Property">
<header>
<button name="action_sold_property" type="object" string="Sold"/>
<button name="action_cancel_property" type="object" string="Cancel"/>
</header>
<sheet>
<group>
<group>
<h1>
<field name="name"/>
</h1>
<field name="property_tags_id" widget="many2many_tags"/>
<field name="best_offer"/>
<field name="Estate_state"/>
</group>
<group>
<field name="postcode"/>
<field name="property_type_id"/>
<field name="Date_avaibility"/>
<field name="expected_price"/>
<field name="selling_price"/>
</group>
</group>
<notebook>
<page string="Description">
<group>
<field name="description"/>
<field name="bedrooms"/>
<field name="living_area"/>
<field name="facades"/>
<field name="garage"/>
<field name="garden"/>
<field name="garden_area"/>
<field name="Orientation"/>
<field name="total_area"/>
</group>
</page>
<page string="Offers">
<field name="property_offers_id"/>
</page>
<page string="Other info">
<group>
<field name="property_salesman_id"/>
<field name="property_buyer_id"/>
<field name="note"/>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="estate_property_view_search" model="ir.ui.view">
<field name="name">estate.property.search</field>
<field name="model">estate.property</field>
<field name="arch" type="xml">
<search string="Tests">
<field name="name"/>
<field name="postcode"/>
<field name="expected_price"/>
<field name="bedrooms"/>
<field name="living_area"/>
<field name="facades"/>
<separator/>
<filter string="Unactive" name="active" domain="[('active', '=', False)]"/>
<group expand="1" string="Group By">
<filter string="Region" name="Region" context="{'group_by':'postcode'}"/>
</group>
</search>
</field>
</record>
<record id="estate_property_view" model="ir.actions.act_window">
<field name="name">Estate Properties</field>
<field name="res_model">estate.property</field>
<field name="view_mode">list,form</field>
</record>
</odoo>