customer_applications: basic views are up
This commit is contained in:
parent
cf7a59ad98
commit
c304035edd
10 changed files with 305 additions and 6 deletions
|
|
@ -26,7 +26,13 @@
|
||||||
"website": "http://www.bemade.org",
|
"website": "http://www.bemade.org",
|
||||||
"license": "LGPL-3",
|
"license": "LGPL-3",
|
||||||
"depends": ["contacts", "incrementing_sequence_mixin"],
|
"depends": ["contacts", "incrementing_sequence_mixin"],
|
||||||
"data": [],
|
"data": [
|
||||||
|
"security/ir.model.access.csv",
|
||||||
|
"data/menus_actions.xml",
|
||||||
|
"views/application_type_views.xml",
|
||||||
|
"views/res_partner_views.xml",
|
||||||
|
"views/application_views.xml",
|
||||||
|
],
|
||||||
"assets": {},
|
"assets": {},
|
||||||
"installable": True,
|
"installable": True,
|
||||||
"auto_install": False,
|
"auto_install": False,
|
||||||
|
|
|
||||||
40
customer_applications/data/menus_actions.xml
Normal file
40
customer_applications/data/menus_actions.xml
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<record id="view_application_types" model="ir.actions.act_window">
|
||||||
|
<field name="name">Application Types</field>
|
||||||
|
<field name="res_model">partner.application.type</field>
|
||||||
|
<field name="view_mode">tree,form</field>
|
||||||
|
<field name="help" type="html">
|
||||||
|
<p class="o_view_nocontent_smiling_face">
|
||||||
|
No application types found. Create one?
|
||||||
|
</p>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="partner_related_applications_action" model="ir.actions.act_window">
|
||||||
|
<field name="name">Partner Applications</field>
|
||||||
|
<field name="res_model">partner.application</field>
|
||||||
|
<field name="view_mode">tree,form</field>
|
||||||
|
<field name="domain">[('partner_id', '=', context.get('partner_id'))]</field>
|
||||||
|
<field name="context">{'default_partner_id': context.get('partner_id')}</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="action_view_partner_applications_by_type" model="ir.actions.act_window">
|
||||||
|
<field name="name">Partner Applications by Type</field>
|
||||||
|
<field name="res_model">partner.application</field>
|
||||||
|
<field name="view_mode">tree,form</field>
|
||||||
|
<field name="domain">[
|
||||||
|
('application_type_id', '=', context.get('application_type_id'))
|
||||||
|
]
|
||||||
|
</field>
|
||||||
|
<field name="context">{
|
||||||
|
'default_application_type_id': context.get('application_type_id')
|
||||||
|
}
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
<menuitem id="application_types"
|
||||||
|
parent="contacts.res_partner_menu_config"
|
||||||
|
groups="base.group_partner_manager"
|
||||||
|
action="view_application_types"
|
||||||
|
/>
|
||||||
|
</odoo>
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
from . import application
|
from . import application
|
||||||
from . import application_specification
|
from . import application_specification
|
||||||
from . import application_type
|
from . import application_type
|
||||||
|
from . import res_partner
|
||||||
|
|
|
||||||
|
|
@ -6,22 +6,23 @@ class Application(models.Model):
|
||||||
_description = "Partner Application"
|
_description = "Partner Application"
|
||||||
_inherit = ["mail.thread", "mail.activity.mixin"]
|
_inherit = ["mail.thread", "mail.activity.mixin"]
|
||||||
|
|
||||||
|
name = fields.Char(tracking=1)
|
||||||
|
description = fields.Text(tracking=2)
|
||||||
partner_id = fields.Many2one(
|
partner_id = fields.Many2one(
|
||||||
comodel_name="res.partner",
|
comodel_name="res.partner",
|
||||||
string="Location",
|
|
||||||
required=True,
|
required=True,
|
||||||
tracking=1,
|
tracking=3,
|
||||||
copy=False,
|
copy=False,
|
||||||
)
|
)
|
||||||
application_type_id = fields.Many2one(
|
application_type_id = fields.Many2one(
|
||||||
comodel_name="partner.application.type",
|
comodel_name="partner.application.type",
|
||||||
required=True,
|
required=True,
|
||||||
tracking=2,
|
tracking=4,
|
||||||
)
|
)
|
||||||
specification_ids = fields.One2many(
|
specification_ids = fields.One2many(
|
||||||
comodel_name="partner.application.specification",
|
comodel_name="partner.application.specification",
|
||||||
inverse_name="application_id",
|
inverse_name="application_id",
|
||||||
tracking=3,
|
tracking=5,
|
||||||
)
|
)
|
||||||
|
|
||||||
def copy(self, default=None):
|
def copy(self, default=None):
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
from odoo import models, fields
|
from odoo import models, fields, api
|
||||||
|
|
||||||
|
|
||||||
class PartnerApplicationType(models.Model):
|
class PartnerApplicationType(models.Model):
|
||||||
|
|
@ -7,8 +7,42 @@ class PartnerApplicationType(models.Model):
|
||||||
|
|
||||||
_inherit = ["mail.thread", "mail.activity.mixin"]
|
_inherit = ["mail.thread", "mail.activity.mixin"]
|
||||||
|
|
||||||
|
color = fields.Integer()
|
||||||
name = fields.Char(
|
name = fields.Char(
|
||||||
required=True,
|
required=True,
|
||||||
tracking=1,
|
tracking=1,
|
||||||
)
|
)
|
||||||
description = fields.Text(tracking=2)
|
description = fields.Text(tracking=2)
|
||||||
|
application_ids = fields.One2many(
|
||||||
|
comodel_name="partner.application",
|
||||||
|
inverse_name="application_type_id",
|
||||||
|
tracking=3,
|
||||||
|
)
|
||||||
|
|
||||||
|
applications_count = fields.Integer(
|
||||||
|
string="Applications Count",
|
||||||
|
compute="_compute_applications_count",
|
||||||
|
)
|
||||||
|
|
||||||
|
partner_ids = fields.One2many(
|
||||||
|
comodel_name="res.partner",
|
||||||
|
compute="_compute_partner_ids",
|
||||||
|
search="_search_partner_ids",
|
||||||
|
string="Partners",
|
||||||
|
readonly=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
@api.depends("application_ids", "application_ids.partner_id")
|
||||||
|
def _compute_partner_ids(self):
|
||||||
|
for application_type in self:
|
||||||
|
application_type.partner_ids = application_type.application_ids.mapped(
|
||||||
|
"partner_id"
|
||||||
|
)
|
||||||
|
|
||||||
|
def _search_partner_ids(self, operator, value):
|
||||||
|
return [("application_ids.partner_id", operator, value)]
|
||||||
|
|
||||||
|
@api.depends("application_ids")
|
||||||
|
def _compute_applications_count(self):
|
||||||
|
for record in self:
|
||||||
|
record.applications_count = len(record.application_ids)
|
||||||
|
|
|
||||||
42
customer_applications/models/res_partner.py
Normal file
42
customer_applications/models/res_partner.py
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
from odoo import models, fields, api
|
||||||
|
|
||||||
|
|
||||||
|
class ResPartner(models.Model):
|
||||||
|
_inherit = "res.partner"
|
||||||
|
|
||||||
|
application_ids = fields.One2many(
|
||||||
|
"partner.application",
|
||||||
|
"partner_id",
|
||||||
|
string="Applications",
|
||||||
|
)
|
||||||
|
applications_count = fields.Integer(
|
||||||
|
string="Applications Count",
|
||||||
|
compute="_compute_applications_count",
|
||||||
|
)
|
||||||
|
application_type_ids = fields.One2many(
|
||||||
|
comodel_name="partner.application.type",
|
||||||
|
compute="_compute_application_type_ids",
|
||||||
|
string="Application Types",
|
||||||
|
readonly=True,
|
||||||
|
search="_search_application_type_ids",
|
||||||
|
)
|
||||||
|
|
||||||
|
@api.depends("application_ids.application_type_id")
|
||||||
|
def _compute_application_type_ids(self):
|
||||||
|
for partner in self:
|
||||||
|
partner.application_type_ids = partner.application_ids.mapped(
|
||||||
|
"application_type_id"
|
||||||
|
)
|
||||||
|
|
||||||
|
def _search_application_type_ids(self, operator, value):
|
||||||
|
return [("application_ids.application_type_id", operator, value)]
|
||||||
|
|
||||||
|
@api.depends("application_ids")
|
||||||
|
def _compute_applications_count(self):
|
||||||
|
for partner in self:
|
||||||
|
partner.applications_count = len(partner.application_ids)
|
||||||
|
|
||||||
|
@api.depends("application_ids")
|
||||||
|
def _compute_applications_count(self):
|
||||||
|
for rec in self:
|
||||||
|
rec.applications_count = len(rec.application_ids)
|
||||||
5
customer_applications/security/ir.model.access.csv
Normal file
5
customer_applications/security/ir.model.access.csv
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
|
access_partner_application_user,access.partner.application.user,model_partner_application,base.group_user,1,1,1,1
|
||||||
|
access_partner_application_type_user,access.partner.application.type.user,model_partner_application_type,base.group_user,1,0,0,0
|
||||||
|
access_partner_application_type_manager,access.partner.application.type.manager,model_partner_application_type,base.group_partner_manager,1,1,1,1
|
||||||
|
access_partner_application_specification_user,access.partner.application.specification.user,model_partner_application_specification,base.group_user,1,1,1,1
|
||||||
|
50
customer_applications/views/application_type_views.xml
Normal file
50
customer_applications/views/application_type_views.xml
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<record id="view_partner_application_type_list" model="ir.ui.view">
|
||||||
|
<field name="name">partner.application.type.list</field>
|
||||||
|
<field name="model">partner.application.type</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree multi_edit="True" editable="bottom">
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="description"/>
|
||||||
|
<field name="color" widget="color_picker"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_partner_application_type_form" model="ir.ui.view">
|
||||||
|
<field name="name">partner.application.type.form</field>
|
||||||
|
<field name="model">partner.application.type</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form>
|
||||||
|
|
||||||
|
<group>
|
||||||
|
<field name="name"/>
|
||||||
|
<header>
|
||||||
|
<button name="%(action_view_partner_applications_by_type)d"
|
||||||
|
type="action"
|
||||||
|
class="oe_stat_button"
|
||||||
|
context="{'default_application_type_id': active_id}"
|
||||||
|
>
|
||||||
|
<field name="applications_count" string="Applications" widget="statinfo"/>
|
||||||
|
<field name="color" widget="color_picker"/>
|
||||||
|
</button>
|
||||||
|
</header>
|
||||||
|
<field name="description"/>
|
||||||
|
</group>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_partner_application_type_search" model="ir.ui.view">
|
||||||
|
<field name="name">partner.application.type.search</field>
|
||||||
|
<field name="model">partner.application.type</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<search>
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="description"/>
|
||||||
|
<field name="partner_ids"/>
|
||||||
|
</search>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
75
customer_applications/views/application_views.xml
Normal file
75
customer_applications/views/application_views.xml
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<record id="view_partner_application_form" model="ir.ui.view">
|
||||||
|
<field name="name">partner.application.form</field>
|
||||||
|
<field name="model">partner.application</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Partner Application">
|
||||||
|
<header/>
|
||||||
|
<div name="title" class="oe_title">
|
||||||
|
<div class="oe_title">
|
||||||
|
<div class="oe_edit_only">
|
||||||
|
Application
|
||||||
|
</div>
|
||||||
|
<h1>
|
||||||
|
<field name="name" />
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div name="button_box" class="oe_button_box"/>
|
||||||
|
<sheet>
|
||||||
|
<group>
|
||||||
|
<field name="description"/>
|
||||||
|
<field name="application_type_id"/>
|
||||||
|
<field name="partner_id"/>
|
||||||
|
</group>
|
||||||
|
<notebook>
|
||||||
|
<page string="Specifications">
|
||||||
|
<field name="specification_ids">
|
||||||
|
<tree editable="bottom">
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="value"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</page>
|
||||||
|
</notebook>
|
||||||
|
</sheet>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_partner_application_tree" model="ir.ui.view">
|
||||||
|
<field name="name">partner.application.tree</field>
|
||||||
|
<field name="model">partner.application</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Partner Applications">
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="partner_id"/>
|
||||||
|
<field name="application_type_id"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_partner_application_search" model="ir.ui.view">
|
||||||
|
<field name="name">partner.application.search</field>
|
||||||
|
<field name="model">partner.application</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<search string="Partner Applications">
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="partner_id"/>
|
||||||
|
<field name="application_type_id"/>
|
||||||
|
</search>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="partner_application_action" model="ir.actions.act_window">
|
||||||
|
<field name="name">Partner Applications</field>
|
||||||
|
<field name="res_model">partner.application</field>
|
||||||
|
<field name="view_mode">tree,form</field>
|
||||||
|
<field name="view_id" ref="view_partner_application_tree"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem id="menu_partner_application" name="Applications"
|
||||||
|
parent="contacts.menu_contacts"
|
||||||
|
action="partner_application_action"/>
|
||||||
|
</odoo>
|
||||||
45
customer_applications/views/res_partner_views.xml
Normal file
45
customer_applications/views/res_partner_views.xml
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<record id="view_partner_form" model="ir.ui.view">
|
||||||
|
<field name="name">view.partner.form</field>
|
||||||
|
<field name="model">res.partner</field>
|
||||||
|
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<div name="button_box" position="inside">
|
||||||
|
<button name="%(partner_related_applications_action)d"
|
||||||
|
type="action"
|
||||||
|
class="oe_stat_button"
|
||||||
|
icon="fa-cogs"
|
||||||
|
context="{'partner_id': active_id}"
|
||||||
|
>
|
||||||
|
<field string="Applications" name="applications_count"
|
||||||
|
widget="statinfo"/>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_partner_tree" model="ir.ui.view">
|
||||||
|
<field name="name">view.partner.tree</field>
|
||||||
|
<field name="model">res.partner</field>
|
||||||
|
<field name="inherit_id" ref="base.view_partner_tree"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='display_name']" position="after">
|
||||||
|
<field name="application_type_ids" widget="many2many_tags"
|
||||||
|
optional="show"/>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_partner_search" model="ir.ui.view">
|
||||||
|
<field name="name">view.partner.search</field>
|
||||||
|
<field name="model">res.partner</field>
|
||||||
|
<field name="inherit_id" ref="base.view_res_partner_filter"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<field name="user_id" position="after">
|
||||||
|
<field name="application_type_ids" string="Application Type"/>
|
||||||
|
</field>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
Loading…
Reference in a new issue