bemade_fsm: Imported code from durpro_fso to represent equipment models and views for bemade_fsm. Re: #11.

This commit is contained in:
Marc Durepos 2023-06-14 15:51:20 -04:00
parent a2da609643
commit cc8b10f964
17 changed files with 419 additions and 2 deletions

1
.gitignore vendored
View file

@ -1,2 +1 @@
*.pyc

View file

@ -29,8 +29,11 @@
'license': 'OPL-1',
'depends': ['project', 'stock', 'sale', 'sale_project', 'sale_stock', 'industry_fsm_sale'],
'data': ['views/task_template_views.xml',
'views/equipment.xml',
'views/equipment_location.xml',
'security/ir.model.access.csv',
'views/product_views.xml',
'views/res_partner.xml',
],
'assets': {
'web.assets_tests': [

Binary file not shown.

View file

@ -1,3 +1,6 @@
from . import task_template
from . import product_template
from . import sale_order
from . import equipment
from . import task
from . import res_partner

119
models/equipment.py Normal file
View file

@ -0,0 +1,119 @@
from odoo import api, fields, models
class EquipmentTag(models.Model):
_name = "bemade_fsm.equipment.tag"
_description = 'Field service equipment category'
name = fields.Char('Name', required=True, translate=True)
color = fields.Integer('Color Index', default=10)
_sql_constraints = [
('name_uniq', 'unique (name)', "Tag name already exists !"),
]
class EquipmentType(models.Model):
_name = 'bemade_fsm.equipment.type'
_description = 'Field service equipment type'
_order = 'id'
name = fields.Char(string='Intervention Name', required=True, translate=True)
class EquipmentLocation(models.Model):
_name = 'bemade_fsm.equipment.location'
_description = 'Field service location for equipment'
_inherit = ['mail.thread', 'mail.activity.mixin']
name = fields.Char(string='Name', required=True, translate=True)
more_info = fields.Char(string='MOre info')
partner_id = fields.Many2one(comodel_name='res.partner',
string="Address",
tracking=True,
domain="[('is_site', '=', True)]",
required=True)
equipment_count = fields.Integer(compute='_compute_equipment_count',
string='Equipment Count')
equipment_ids = fields.One2many(comodel_name='bemade_fsm.equipment',
inverse_name='equipment_location_id',
string='Equipments')
@api.depends('equipment_ids')
def _compute_equipment_count(self):
for rec in self:
all_equipmemt_ids = self.env['bemade_fsm.equipment'].search([('equipment_location_id', '=', rec.id)])
rec.equipment_count = len(all_equipmemt_ids)
class Equipment(models.Model):
_name = 'bemade_fsm.equipment'
_rec_name = 'complete_name'
_description = 'Field service equipment'
_inherit = ['mail.thread', 'mail.activity.mixin']
pid_tag = fields.Char(string="P&ID Tag", tracking=True)
name = fields.Char(string="Name", tracking=True, required=True)
complete_name = fields.Char(string="Equipment Name", compute="_compute_complete_name", store=True)
tag_ids = fields.Many2many('bemade_fsm.equipment.tag',
string='Application',
tracking=True,
help="Classify and analyze your equipment categories like: Boiler, Laboratory, "
"Waste water, Pure water")
partner_id = fields.Many2one('res.partner',
string="Owner",
tracking=True,
domain="[('is_company', '=', True)]",
required=True)
description = fields.Text(string="Description",
tracking=True,
)
partner_location_id = fields.Many2one('res.partner',
string="Physical Location",
tracking=True,
domain="[('parent_id', '=', partner_id), ('is_site', '=', 'True')]",
required=True)
equipment_location_id = fields.Many2one('bemade_fsm.equipment.location',
string="Location",
tracking=True,
domain="[('partner_id', '=', partner_location_id)]")
location_notes = fields.Text(string="Physical Location Notes",
tracking=True,
)
intervention_ids = fields.One2many(comodel_name='project.task',
inverse_name='equipment_id',
string='Interventions')
@api.depends('pid_tag', 'name')
def _compute_complete_name(self):
for rec in self:
rec.complete_name = "[%s] %s" % (rec.pid_tag or ' ', rec.name)
@api.model
def name_search(self, name='', args=None, operator='ilike', limit=100):
args = args or []
if name:
equipments = self.search([
'|', '|', '|',
('pid_tag', operator, name),
('name', operator, name),
('partner_id.name', operator, name),
('partner_location_id.name', operator, name)],
limit=limit)
else:
equipments = self.search(args, limit=limit)
return equipments.name_get()

41
models/res_partner.py Normal file
View file

@ -0,0 +1,41 @@
from odoo import api, fields, models
class Partner(models.Model):
_inherit = 'res.partner'
equipment_count = fields.Integer(compute='_compute_equipment_count',
string='Equipment Count')
equipment_ids = fields.One2many(comodel_name='bemade_fsm.equipment',
inverse_name='partner_id',
string='Equipments')
equipment_location_count = fields.Integer(compute='_compute_equipment_location_count',
string='Equipment Location Count')
equipment_location_ids = fields.One2many(comodel_name='bemade_fsm.equipment.location',
inverse_name='partner_id',
string='Equipment Location')
is_site = fields.Boolean(string='Is an Equipment Site',
tracking=True,
default=False,
help="Check if the contact is an equipment site, otherwise it is not in that list")
is_site_contact = fields.Boolean(string='Is a site contact',
tracking=True,
default=False,
help="Check if the contact is a site contact, otherwise it is a not in that list")
@api.depends('equipment_ids')
def _compute_equipment_count(self):
for rec in self:
all_equipmemt_ids = self.env['bemade_fsm.equipment'].search([('partner_id', '=', rec.id)])
rec.equipment_count = len(all_equipmemt_ids)
@api.depends('equipment_location_ids')
def _compute_equipment_location_count(self):
for rec in self:
all_equipmemt_location_ids = self.env['bemade_fsm.equipment.location'].search([('partner_id', '=', rec.id)])
rec.equipment_location_count = len(all_equipmemt_location_ids)

7
models/task.py Normal file
View file

@ -0,0 +1,7 @@
from odoo import fields, models, api
class Task(models.Model):
_inherit = "project.task"
equipment_id = fields.Many2one("bemade_fsm.equipment", string="Target Equipment")

View file

@ -1,3 +1,7 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_bemade_fsm_task_template,bemade_fsm_task_template,model_project_task_template,project.group_project_manager,1,1,1,1
access_bemade_fsm_task_template,bemade_fsm_task_template,model_project_task_template,project.group_project_user,1,1,1,1
access_bemade_fsm_task_template,bemade_fsm_task_template,model_project_task_template,project.group_project_user,1,1,1,1
access_bemade_fsm_equipment,bemade_fsm_equipment,model_bemade_fsm_equipment,base.group_user,1,1,1,1
access_bemade_fsm_equipment_tag,bemade_fsm_equipment_tag,model_bemade_fsm_equipment_tag,base.group_user,1,1,1,1
access_bemade_fsm_equipment_type,access_bemade_fsm_equipment_type,model_bemade_fsm_equipment_type,base.group_user,1,0,0,0
access_bemade_fsm_equipment_location,access_bemade_fsm_equipment_location,model_bemade_fsm_equipment_location,base.group_user,1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_bemade_fsm_task_template bemade_fsm_task_template model_project_task_template project.group_project_manager 1 1 1 1
3 access_bemade_fsm_task_template bemade_fsm_task_template model_project_task_template project.group_project_user 1 1 1 1
4 access_bemade_fsm_equipment bemade_fsm_equipment model_bemade_fsm_equipment base.group_user 1 1 1 1
5 access_bemade_fsm_equipment_tag bemade_fsm_equipment_tag model_bemade_fsm_equipment_tag base.group_user 1 1 1 1
6 access_bemade_fsm_equipment_type access_bemade_fsm_equipment_type model_bemade_fsm_equipment_type base.group_user 1 0 0 0
7 access_bemade_fsm_equipment_location access_bemade_fsm_equipment_location model_bemade_fsm_equipment_location base.group_user 1 0 0 0

96
views/equipment.xml Normal file
View file

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Equipment Form View -->
<record id="equipment_view_form" model="ir.ui.view">
<field name="name">durpro_fso.equipment.form</field>
<field name="model">durpro_fso.equipment</field>
<field name="arch" type="xml">
<form string="Equipment">
<sheet>
<group>
<group name="left">
<field name="pid_tag"/>
<field name="name"/>
<field name="description"/>
<field name="location_notes"/>
</group>
<group name="right">
<field name="partner_id"/>
<field name="partner_location_id"
groups="sale.group_delivery_invoice_address"
context="{'default_type': 'delivery', 'show_address': 1}"
options='{"always_reload": True}'/>
<field name="equipment_location_id"/>
<field name="tag_ids" widget="many2many_tags" options="{'no_open': False}"/>
</group>
</group>
<notebook>
<page string="Interventions">
<field name="intervention_ids" mode="tree">
<tree string="Interventions" create="0" edit="0">
<field name="name"/>
<field name="description"/>
<field name="date_planned"/>
<field name="state"/>
</tree>
</field>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="activity_ids" widget="mail_activity"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</form>
</field>
</record>
<record id="equipment_view_tree" model="ir.ui.view">
<field name="name">durpro_fso.equipment.tree</field>
<field name="model">durpro_fso.equipment</field>
<field name="arch" type="xml">
<tree string="Equipment">
<field name="pid_tag"/>
<field name="name"/>
<field name="description"/>
<field name="tag_ids" widget="many2many_tags" options="{'no_open': False}"/>
<field name="partner_id"/>
</tree>
</field>
</record>
<!-- BV: AN OTHER SEARCH VIEW TO BRING BACK
<record id="equipment_view_search" model="ir.ui.view">
<field name="name">durpro_fso.equipment.search</field>
<field name="model">durpro_fso.equipment</field>
<field name="arch" type="xml">
<search string="Equipments">
<field name="name"/>
<field name="partner_id"/>
<field name="pid_tag"/>
<field name="partner_location_id"/>
<group expand="0" string="Group By">
<filter string="Partner" context="{'group_by':'partner_id'}"/>
<filter string="Location" context="{'group_by':'partner_location_id'}"/>
</group>
</search>
</field>
</record>
-->
<record model="ir.actions.act_window" id="action_window_equipment">
<field name="name">Equipment</field>
<field name="res_model">durpro_fso.equipment</field>
<field name="view_mode">tree,form</field>
</record>
<record model="ir.actions.act_window" id="action_window_equipment_tags">
<field name="name">Equipment Tag</field>
<field name="res_model">durpro_fso.equipment.tag</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>

View file

@ -0,0 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="partner_equipment_location_view_form" model="ir.ui.view">
<field name="name">bemade_fsm.partner.equipment.location.form</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='internal_notes']" position="before">
<page name="equipment_locations" string="Equipment Locations">
<field name="equipment_location_ids" mode="kanban" context="{'default_partner_id': active_id }">
<kanban>
<field name="name"/>
<field name="more_info"/>
<field name="equipment_count"/>
<templates>
<t t-name="kanban-box">
<div t-att-class="oe_kanban_global_click">
<div class="oe_kanban_details">
<field name="name"/>
<field name="equipment_count"/>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</page>
</xpath>
</field>
</record>
<!-- Equipment Location Form View -->
<record id="equipment_location_view_form" model="ir.ui.view">
<field name="name">bemade_fsm.equipment.location.form</field>
<field name="model">bemade_fsm.equipment.location</field>
<field name="arch" type="xml">
<form string="Equipment Location">
<sheet>
<group>
<group name="left">
<field name="name"/>
<field name="more_info"/>
<field name="partner_id"/>
</group>
</group>
<notebook>
<page string="Equipments">
<field name="equipment_ids" mode="tree" class="oe_edit_only">
<tree string="Equipments" create="0" edit="0">
<field name="name"/>
</tree>
</field>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="activity_ids" widget="mail_activity"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</form>
</field>
</record>
<record id="equipment_location_view_tree" model="ir.ui.view">
<field name="name">bemade_fsm.equipment.location.tree</field>
<field name="model">bemade_fsm.equipment.location</field>
<field name="arch" type="xml">
<tree string="Equipment">
<field name="name"/>
<field name="more_info"/>
<field name="partner_id"/>
</tree>
</field>
</record>
<!-- BV: AGAIN A SEARCH VIEW TO FIX
<record id="equipment_location_view_search" model="ir.ui.view">
<field name="name">bemade_fsm.equipment.location.search</field>
<field name="model">bemade_fsm.equipment.location</field>
<field name="arch" type="xml">
<search string="Equipment Locations">
<field name="name"/>
<field name="partner_id"/>
<field name="more_info"/>
<group expand="0" string="Group By">
<filter string="Partner" context="{'group_by':'partner_id'}"/>
</group>
</search>
</field>
</record>
-->
<record model="ir.actions.act_window" id="action_window_equipment_location">
<field name="name">Equipment Location</field>
<field name="res_model">bemade_fsm.equipment.location</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>

36
views/res_partner.xml Normal file
View file

@ -0,0 +1,36 @@
<?xml version="1.0"?>
<odoo>
<record id="act_res_partner_2_equipment" model="ir.actions.act_window">
<field name="name">Equipments</field>
<field name="res_model">bemade_fsm.equipment</field>
<field name="view_mode">tree,form</field>
<field name="context">{'default_partner_id': active_id}</field>
<field name="domain">[("partner_id", "=", active_id)]</field>
</record>
<record id="res_partner_view_fso" model="ir.ui.view">
<field name="name">res.partner.view.buttons.fso</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="priority" eval="3"/>
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button class="oe_stat_button" type="action" name="%(bemade_fsm.act_res_partner_2_equipment)d"
icon="fa-tachometer">
<field string="Equipments" name="equipment_count" widget="statinfo"/>
</button>
</div>
<field name="lang" position="after">
<field name="is_site"/>
<field name="is_site_contact"/>
</field>
<xpath expr="/form//field[@name='child_ids']/form//field[@name='comment']" position="after">
<field name="is_site_contact"/>
</xpath>
<xpath expr="/form//field[@name='child_ids']/form/sheet/group/group" position="inside">
<field name="is_site"/>
</xpath>
</field>
</record>
</odoo>