bemade_fsm: Create task from template (from FSM views)
Adds a button to create a task from a task template to the list view and kanban view for the project.task when viewed from the FSM application.
This commit is contained in:
parent
8af9704b67
commit
22936eee1c
9 changed files with 139 additions and 7 deletions
|
|
@ -1 +1,2 @@
|
|||
from . import models
|
||||
from . import wizard
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@
|
|||
'views/sale_order_views.xml',
|
||||
'reports/worksheet_custom_report_templates.xml',
|
||||
'reports/worksheet_custom_reports.xml',
|
||||
'wizard/new_task_from_template.xml',
|
||||
],
|
||||
'assets': {
|
||||
'web.assets_tests': [
|
||||
|
|
@ -62,6 +63,13 @@
|
|||
],
|
||||
'web.report_assets_common': [
|
||||
'bemade_fsm/static/src/scss/bemade_fsm.scss'
|
||||
],
|
||||
'web.assets_backend': [
|
||||
'bemade_fsm/static/src/js/kanban_view.js',
|
||||
'bemade_fsm/static/src/js/list_view.js',
|
||||
],
|
||||
'web.assets_qweb': [
|
||||
'bemade_fsm/static/src/xml/project_view_buttons.xml',
|
||||
]
|
||||
},
|
||||
'installable': True,
|
||||
|
|
|
|||
|
|
@ -5,3 +5,4 @@ access_bemade_fsm_equipment,bemade_fsm_equipment,model_bemade_fsm_equipment,base
|
|||
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_visit,access_bemade_fsm_visit,model_bemade_fsm_visit,base.group_user,1,1,1,1
|
||||
access_bemade_fsm_task_wizard,access_bemade_fsm_task_wizard,model_project_task_from_template_wizard,project.group_project_user,1,1,1,1
|
||||
|
|
|
|||
|
37
bemade_fsm/static/src/js/kanban_view.js
Normal file
37
bemade_fsm/static/src/js/kanban_view.js
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/** @odoo-module **/
|
||||
|
||||
import KanbanController from 'web.KanbanController';
|
||||
import KanbanView from 'web.KanbanView';
|
||||
const viewRegistry = require('web.view_registry')
|
||||
|
||||
const ProjectKanbanController = KanbanController.extend({
|
||||
buttons_template: 'project.KanbanView.buttons',
|
||||
custom_events: _.extend({}, KanbanController.prototype.custom_events, {
|
||||
create_from_template: '_onCreateFromTemplate',
|
||||
}),
|
||||
_onCreateFromTemplate(ev) {
|
||||
ev.stopPropagation();
|
||||
const record = this.model.get(this.handle, {raw: true});
|
||||
let context = record.context;
|
||||
context.active_id = record.project_id;
|
||||
this.do_action({
|
||||
type: 'ir.actions.act_window',
|
||||
res_model: 'project.task.from.template.wizard',
|
||||
views: [[false, 'form']],
|
||||
target: 'new',
|
||||
context: {...record.context, active_id: record.project_id},
|
||||
});
|
||||
},
|
||||
renderButtons ($node) {
|
||||
this._super.apply(this, arguments);
|
||||
this.$buttons.on('click', 'button.o-kanban-button-new-from-template', this._onCreateFromTemplate.bind(this))
|
||||
},
|
||||
})
|
||||
|
||||
const ProjectKanbanView = KanbanView.extend({
|
||||
config: _.extend({}, KanbanView.prototype.config, {
|
||||
Controller: ProjectKanbanController,
|
||||
})
|
||||
});
|
||||
|
||||
viewRegistry.add('project_kanban', ProjectKanbanView)
|
||||
36
bemade_fsm/static/src/js/list_view.js
Normal file
36
bemade_fsm/static/src/js/list_view.js
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
/** @odoo-module **/
|
||||
|
||||
import ListController from 'web.ListController';
|
||||
import ListView from 'web.ListView';
|
||||
const viewRegistry = require('web.view_registry')
|
||||
|
||||
const ProjectListController = ListController.extend({
|
||||
buttons_template: 'project.ListView.buttons',
|
||||
custom_events: _.extend({}, ListController.prototype.custom_events, {
|
||||
create_from_template: '_onCreateFromTemplate',
|
||||
}),
|
||||
_onCreateFromTemplate(ev) {
|
||||
ev.stopPropagation();
|
||||
const record = this.model.get(this.handle, {raw: true});
|
||||
this.do_action({
|
||||
type: 'ir.actions.act_window',
|
||||
res_model: 'project.task.from.template.wizard',
|
||||
views: [[false, 'form']],
|
||||
target: 'new',
|
||||
context: {...record.context, active_id: record.project_id},
|
||||
});
|
||||
},
|
||||
renderButtons ($node) {
|
||||
self = this;
|
||||
this._super.apply(this, arguments);
|
||||
this.$buttons.on('click', 'button.o_list_button_add_from_template', this._onCreateFromTemplate.bind(this))
|
||||
},
|
||||
})
|
||||
|
||||
const ProjectListView = ListView.extend({
|
||||
config: _.extend({}, ListView.prototype.config, {
|
||||
Controller: ProjectListController,
|
||||
})
|
||||
});
|
||||
|
||||
viewRegistry.add('project_list', ProjectListView)
|
||||
21
bemade_fsm/static/src/xml/project_view_buttons.xml
Normal file
21
bemade_fsm/static/src/xml/project_view_buttons.xml
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<templates xml:space="preserve">
|
||||
<!-- Add a button to create a task from a template to task (project) list and kanban views -->
|
||||
<t t-name='project.KanbanView.buttons' t-inherit="web.KanbanView.buttons" t-inherit-mode="primary">
|
||||
<xpath expr="//button[contains(@t-attf-class, 'o-kanban-button-new')]" position="after">
|
||||
<button title="Create Task from Template" t-if="!noCreate" type="button"
|
||||
t-attf-class="btn {{ btnClass }} o-kanban-button-new-from-template">
|
||||
<t t-esc="create_text && (create_text + ' from Template') || _t('Create from Template')"/>
|
||||
</button>
|
||||
</xpath>
|
||||
</t>
|
||||
<t t-name='project.ListView.buttons' t-inherit="web.ListView.buttons" t-inherit-mode="primary">
|
||||
<xpath expr="//button[hasclass('o_list_button_add')]" position="after">
|
||||
<!-- Create is enabled in the parent template at this point; check is done prior -->
|
||||
<button type="button" class="btn btn-primary o_list_button_add_from_template"
|
||||
title="Create Task from Template">
|
||||
Create from Template
|
||||
</button>
|
||||
</xpath>
|
||||
</t>
|
||||
</templates>
|
||||
|
|
@ -98,6 +98,9 @@
|
|||
<field name="model">project.task</field>
|
||||
<field name="inherit_id" ref="industry_fsm.project_task_view_list_fsm"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree position="attributes">
|
||||
<attribute name="js_class">project_list</attribute>
|
||||
</tree>
|
||||
<field name="partner_id" position="after">
|
||||
<field name="work_order_number" optional="show"/>
|
||||
</field>
|
||||
|
|
@ -112,6 +115,16 @@
|
|||
</field>
|
||||
</field>
|
||||
</record>
|
||||
<record id="project_task_view_kanban_fsm_inherit" model="ir.ui.view">
|
||||
<field name="name">project.task.view.kanban.fsm.inherit</field>
|
||||
<field name="model">project.task</field>
|
||||
<field name="inherit_id" ref="industry_fsm.project_task_view_kanban_fsm"/>
|
||||
<field name="arch" type="xml">
|
||||
<kanban position="attributes">
|
||||
<attribute name="js_class">project_kanban</attribute>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
<record id="project_task_view_search_fsm_inherit" model="ir.ui.view">
|
||||
<field name="name">project.task.view.search.fsm.inherit</field>
|
||||
<field name="model">project.task</field>
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ from odoo.exceptions import UserError
|
|||
|
||||
class NewTaskFromTemplateWizard(models.TransientModel):
|
||||
_name = "project.task.from.template.wizard"
|
||||
_description = "Create Task from Template Wizard"
|
||||
|
||||
project_id = fields.Many2one(
|
||||
comodel_name='project.project',
|
||||
|
|
@ -25,9 +26,16 @@ class NewTaskFromTemplateWizard(models.TransientModel):
|
|||
|
||||
def default_get(self, fields_list):
|
||||
res = super().default_get(fields_list)
|
||||
if 'project_id' in fields_list:
|
||||
active_id = self.env.context.get('active_id', False)
|
||||
res.update({'project_id': active_id})
|
||||
active_id = self.env.context.get('active_id', False)
|
||||
active_model = self.env.context.get('active_model', False)
|
||||
if not active_model:
|
||||
params = self.env.context.get('params', False)
|
||||
active_model = params.get('model', False)
|
||||
|
||||
if active_model == 'project.task.template' and active_id and 'task_template_id' in fields_list:
|
||||
res.update({'task_template_id': active_id})
|
||||
if active_model == 'project.task' and 'project_id' in fields_list:
|
||||
res.update({'project_id': self.env.ref('industry_fsm.fsm_project').id})
|
||||
return res
|
||||
|
||||
def action_create_task_from_template(self):
|
||||
|
|
|
|||
|
|
@ -5,10 +5,6 @@
|
|||
<field name="model">project.task.from.template.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<header>
|
||||
<button name="action_create_task_from_template" type="object" string="Create Task"/>
|
||||
<button special="cancel" string="Cancel"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="task_template_id"/>
|
||||
|
|
@ -16,7 +12,18 @@
|
|||
<field name="project_id"/>
|
||||
</group>
|
||||
</sheet>
|
||||
<footer>
|
||||
<button class='btn btn-primary' name="action_create_task_from_template" type="object" string="Create Task"/>
|
||||
<button class='btn btn-secondary' special="cancel" string="Cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.actions.act_window" id="action_new_task_from_template">
|
||||
<field name="name">New Task from Template</field>
|
||||
<field name="res_model">project.task.from.template.wizard</field>
|
||||
<field name="binding_model_id" ref="bemade_fsm.model_project_task_template"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Loading…
Reference in a new issue