[REM] project_gtd deprecated by notes
bzr revid: al@openerp.com-20140424230801-zmzp2byyk41e7uxf
This commit is contained in:
parent
9cb2b91783
commit
fb4507386d
|
@ -1,24 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# OpenERP, Open Source Management Solution
|
|
||||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
import project_gtd
|
|
||||||
import wizard
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# OpenERP, Open Source Management Solution
|
|
||||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
'name': 'Todo Lists',
|
|
||||||
'version': '1.0',
|
|
||||||
'category': 'Project Management',
|
|
||||||
'sequence': 100,
|
|
||||||
'summary': 'Personal Tasks, Contexts, Timeboxes',
|
|
||||||
'description': """
|
|
||||||
Implement concepts of the "Getting Things Done" methodology
|
|
||||||
===========================================================
|
|
||||||
|
|
||||||
This module implements a simple personal to-do list based on tasks. It adds an editable list of tasks simplified to the minimum required fields in the project application.
|
|
||||||
|
|
||||||
The to-do list is based on the GTD methodology. This world-wide used methodology is used for personal time management improvement.
|
|
||||||
|
|
||||||
Getting Things Done (commonly abbreviated as GTD) is an action management method created by David Allen, and described in a book of the same name.
|
|
||||||
|
|
||||||
GTD rests on the principle that a person needs to move tasks out of the mind by recording them externally. That way, the mind is freed from the job of remembering everything that needs to be done, and can concentrate on actually performing those tasks.
|
|
||||||
""",
|
|
||||||
'author': 'OpenERP SA',
|
|
||||||
'images': ['images/project_gtd.jpeg'],
|
|
||||||
'depends': ['project'],
|
|
||||||
'data': [
|
|
||||||
'project_gtd_data.xml',
|
|
||||||
'project_gtd_view.xml',
|
|
||||||
'security/ir.model.access.csv',
|
|
||||||
'wizard/project_gtd_empty_view.xml',
|
|
||||||
'wizard/project_gtd_fill_view.xml',
|
|
||||||
],
|
|
||||||
'demo': ['project_gtd_demo.xml'],
|
|
||||||
'test':['test/task_timebox.yml'],
|
|
||||||
'installable': True,
|
|
||||||
'auto_install': False,
|
|
||||||
}
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
|
@ -1,122 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# OpenERP, Open Source Management Solution
|
|
||||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from openerp.osv import fields, osv
|
|
||||||
from openerp import tools
|
|
||||||
from openerp.tools.translate import _
|
|
||||||
|
|
||||||
class project_gtd_context(osv.osv):
|
|
||||||
_name = "project.gtd.context"
|
|
||||||
_description = "Context"
|
|
||||||
_columns = {
|
|
||||||
'name': fields.char('Context', size=64, required=True, select=1, translate=1),
|
|
||||||
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of contexts."),
|
|
||||||
}
|
|
||||||
_defaults = {
|
|
||||||
'sequence': 1
|
|
||||||
}
|
|
||||||
_order = "sequence, name"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class project_gtd_timebox(osv.osv):
|
|
||||||
_name = "project.gtd.timebox"
|
|
||||||
_order = "sequence"
|
|
||||||
_columns = {
|
|
||||||
'name': fields.char('Timebox', size=64, required=True, select=1, translate=1),
|
|
||||||
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of timebox."),
|
|
||||||
'icon': fields.selection(tools.icons, 'Icon', size=64),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class project_task(osv.osv):
|
|
||||||
_inherit = "project.task"
|
|
||||||
_columns = {
|
|
||||||
'timebox_id': fields.many2one('project.gtd.timebox', "Timebox",help="Time-laps during which task has to be treated"),
|
|
||||||
'context_id': fields.many2one('project.gtd.context', "Context",help="The context place where user has to treat task"),
|
|
||||||
}
|
|
||||||
|
|
||||||
def copy_data(self, cr, uid, id, default=None, context=None):
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
if not default:
|
|
||||||
default = {}
|
|
||||||
default['timebox_id'] = False
|
|
||||||
default['context_id'] = False
|
|
||||||
return super(project_task,self).copy_data(cr, uid, id, default, context)
|
|
||||||
|
|
||||||
def _get_context(self, cr, uid, context=None):
|
|
||||||
ids = self.pool.get('project.gtd.context').search(cr, uid, [], context=context)
|
|
||||||
return ids and ids[0] or False
|
|
||||||
|
|
||||||
_defaults = {
|
|
||||||
'context_id': _get_context
|
|
||||||
}
|
|
||||||
def next_timebox(self, cr, uid, ids, *args):
|
|
||||||
timebox_obj = self.pool.get('project.gtd.timebox')
|
|
||||||
timebox_ids = timebox_obj.search(cr,uid,[])
|
|
||||||
if not timebox_ids: return True
|
|
||||||
for task in self.browse(cr,uid,ids):
|
|
||||||
timebox = task.timebox_id.id
|
|
||||||
if not timebox:
|
|
||||||
self.write(cr, uid, task.id, {'timebox_id': timebox_ids[0]})
|
|
||||||
elif timebox_ids.index(timebox) != len(timebox_ids)-1:
|
|
||||||
index = timebox_ids.index(timebox)
|
|
||||||
self.write(cr, uid, task.id, {'timebox_id': timebox_ids[index+1]})
|
|
||||||
return True
|
|
||||||
|
|
||||||
def prev_timebox(self, cr, uid, ids, *args):
|
|
||||||
timebox_obj = self.pool.get('project.gtd.timebox')
|
|
||||||
timebox_ids = timebox_obj.search(cr,uid,[])
|
|
||||||
for task in self.browse(cr,uid,ids):
|
|
||||||
timebox = task.timebox_id.id
|
|
||||||
if timebox:
|
|
||||||
if timebox_ids.index(timebox):
|
|
||||||
index = timebox_ids.index(timebox)
|
|
||||||
self.write(cr, uid, task.id, {'timebox_id': timebox_ids[index - 1]})
|
|
||||||
else:
|
|
||||||
self.write(cr, uid, task.id, {'timebox_id': False})
|
|
||||||
return True
|
|
||||||
|
|
||||||
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
|
|
||||||
if not context: context = {}
|
|
||||||
res = super(project_task,self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
|
|
||||||
search_extended = False
|
|
||||||
timebox_obj = self.pool.get('project.gtd.timebox')
|
|
||||||
if (res['type'] == 'search') and context.get('gtd', False):
|
|
||||||
tt = timebox_obj.browse(cr, uid, timebox_obj.search(cr,uid,[]), context=context)
|
|
||||||
search_extended =''
|
|
||||||
for time in tt:
|
|
||||||
if time.icon:
|
|
||||||
icon = time.icon
|
|
||||||
else :
|
|
||||||
icon=""
|
|
||||||
search_extended += '''<filter domain="[('timebox_id','=', ''' + str(time.id) + ''')]" icon="''' + icon + '''" string="''' + time.name + '''" context="{'user_invisible': True}"/>\n'''
|
|
||||||
search_extended +='''<separator orientation="vertical"/>'''
|
|
||||||
|
|
||||||
res['arch'] = tools.ustr(res['arch']).replace('<separator name="gtdsep"/>', search_extended)
|
|
||||||
|
|
||||||
return res
|
|
||||||
|
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
|
@ -1,40 +0,0 @@
|
||||||
<?xml version="1.0" ?>
|
|
||||||
<openerp>
|
|
||||||
<data>
|
|
||||||
<record model="project.gtd.context" id="context_office">
|
|
||||||
<field name="name">Office</field>
|
|
||||||
<field name="sequence">0</field>
|
|
||||||
</record>
|
|
||||||
<record model="project.gtd.context" id="context_travel">
|
|
||||||
<field name="name">Travel</field>
|
|
||||||
<field name="sequence">2</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="project.gtd.timebox" id="timebox_daily">
|
|
||||||
<field name="name">Today</field>
|
|
||||||
<field name="icon">terp-go-today</field>
|
|
||||||
</record>
|
|
||||||
<record model="project.gtd.timebox" id="timebox_weekly">
|
|
||||||
<field name="name">This Week</field>
|
|
||||||
<field name="icon">terp-go-week</field>
|
|
||||||
</record>
|
|
||||||
<record model="project.gtd.timebox" id="timebox_lt">
|
|
||||||
<field name="name">Long Term</field>
|
|
||||||
<field name="icon">terp-project</field>
|
|
||||||
</record>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<data noupdate="1">
|
|
||||||
<!-- notify all employees of module installation -->
|
|
||||||
<record model="mail.message" id="module_install_notification">
|
|
||||||
<field name="model">mail.group</field>
|
|
||||||
<field name="res_id" ref="mail.group_all_employees"/>
|
|
||||||
<field name="type">notification</field>
|
|
||||||
<field name="subtype_id" ref="mail.mt_comment"/>
|
|
||||||
<field name="subject">Todo Lists application installed!</field>
|
|
||||||
<field name="body"><![CDATA[<p>Add todo items on project tasks, to help you organize your work.</p><p>
|
|
||||||
This application supports the Getting Things Done (GTD) methodology, based on David Allen's book.</p>]]></field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</openerp>
|
|
|
@ -1,35 +0,0 @@
|
||||||
<?xml version="1.0" ?>
|
|
||||||
<openerp>
|
|
||||||
<data>
|
|
||||||
|
|
||||||
<record model="project.gtd.context" id="context_home">
|
|
||||||
<field name="name">Home</field>
|
|
||||||
<field name="sequence">3</field>
|
|
||||||
</record>
|
|
||||||
<record model="project.gtd.context" id="context_car">
|
|
||||||
<field name="name">Car</field>
|
|
||||||
<field name="sequence">1</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="project.project_task_10" model="project.task">
|
|
||||||
<field name="timebox_id" ref="timebox_daily"/>
|
|
||||||
<field name="context_id" ref="context_office"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="project.project_task_11" model="project.task">
|
|
||||||
<field name="timebox_id" ref="timebox_daily"/>
|
|
||||||
<field name="context_id" ref="context_office"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="project.project_task_12" model="project.task">
|
|
||||||
<field name="timebox_id" ref="timebox_daily"/>
|
|
||||||
<field name="context_id" ref="context_car"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="project.project_task_13" model="project.task">
|
|
||||||
<field name="timebox_id" ref="timebox_daily"/>
|
|
||||||
<field name="context_id" ref="context_car"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</openerp>
|
|
|
@ -1,132 +0,0 @@
|
||||||
<?xml version="1.0" ?>
|
|
||||||
<openerp>
|
|
||||||
<data>
|
|
||||||
<record model="ir.ui.view" id="view_gtd_context_tree">
|
|
||||||
<field name="name">project.gtd.context.tree</field>
|
|
||||||
<field name="model">project.gtd.context</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<tree string="Context">
|
|
||||||
<field name="sequence" invisible="1"/>
|
|
||||||
<field name="name"/>
|
|
||||||
</tree>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.ui.view" id="view_gtd_context_form">
|
|
||||||
<field name="name">project.gtd.context.form</field>
|
|
||||||
<field name="model">project.gtd.context</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="Context" version="7.0">
|
|
||||||
<group col="4">
|
|
||||||
<field name="name"/>
|
|
||||||
<field name="sequence"/>
|
|
||||||
</group>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.actions.act_window" id="open_gtd_context_tree">
|
|
||||||
<field name="name">Contexts</field>
|
|
||||||
<field name="res_model">project.gtd.context</field>
|
|
||||||
<field name="help">Contexts are defined in the "Getting Things Done" methodology. It allows you to categorize your tasks according to the context in which they have to be done: at the office, at home, when I take my car, etc.</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<menuitem name="Contexts" id="menu_open_gtd_time_contexts"
|
|
||||||
parent="project.menu_tasks_config" action="open_gtd_context_tree" groups="base.group_no_one"/>
|
|
||||||
|
|
||||||
<record model="ir.ui.view" id="view_gtd_timebox_tree">
|
|
||||||
<field name="name">project.gtd.timebox.tree</field>
|
|
||||||
<field name="model">project.gtd.timebox</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<tree string="Timebox">
|
|
||||||
<field name="sequence" invisible="1"/>
|
|
||||||
<field name="name"/>
|
|
||||||
<field name="icon"/>
|
|
||||||
</tree>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.ui.view" id="view_gtd_timebox_form">
|
|
||||||
<field name="name">project.gtd.timebox.form</field>
|
|
||||||
<field name="model">project.gtd.timebox</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="Timeboxes" version="7.0">
|
|
||||||
<group col="4" string="Timebox Definition">
|
|
||||||
<field name="name"/>
|
|
||||||
<field name="sequence"/>
|
|
||||||
<field name="icon"/>
|
|
||||||
</group>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.actions.act_window" id="open_gtd_timebox_tree">
|
|
||||||
<field name="name">Timeboxes</field>
|
|
||||||
<field name="res_model">project.gtd.timebox</field>
|
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">tree,form</field>
|
|
||||||
<field name="view_id" ref="view_gtd_timebox_tree"/>
|
|
||||||
<field name="help">Timeboxes are defined in the "Getting Things Done" methodology. A timebox defines a period of time in order to categorize your tasks: today, this week, this month, long term.</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<menuitem name="Timeboxes" id="menu_open_gtd_time_timeboxes" parent="project.menu_tasks_config" action="open_gtd_timebox_tree" groups="base.group_no_one"/>
|
|
||||||
|
|
||||||
<record model="ir.ui.view" id="project_task_tree">
|
|
||||||
<field name="name">project.task.tree.timebox</field>
|
|
||||||
<field name="model">project.task</field>
|
|
||||||
<field name="inherit_id" ref="project.view_task_tree2" />
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<field name="remaining_hours" position="after">
|
|
||||||
<field string="Timeframe" name="timebox_id" invisible=" not context.get('gtd', False)"/>
|
|
||||||
<field name="context_id" invisible="not context.get('context_show', False)" widget="selection"/>
|
|
||||||
</field>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.ui.view" id="project_task">
|
|
||||||
<field name="name">project.task.form.timebox</field>
|
|
||||||
<field name="model">project.task</field>
|
|
||||||
<field name="inherit_id" ref="project.view_task_form2" />
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<field name="progress" position="after">
|
|
||||||
<field name="context_id" widget="selection" options='{"no_open": True}'/>
|
|
||||||
<field name="timebox_id" widget="selection" options='{"no_open": True}' string="Timeframe"/>
|
|
||||||
</field>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="view_task_gtd_search" model="ir.ui.view">
|
|
||||||
<field name="name">project.task.gtd.search</field>
|
|
||||||
<field name="model">project.task</field>
|
|
||||||
<field name="priority">50</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<search string="My Tasks">
|
|
||||||
<field name="name" string="My Tasks"/>
|
|
||||||
<filter string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/>
|
|
||||||
<separator/>
|
|
||||||
<filter string="No Timebox" domain="[('timebox_id', '=', False)]" help="Tasks having no timebox assigned yet"/>
|
|
||||||
<group expand="0" string="Display">
|
|
||||||
<filter string="Context" name="context_show" context="{'context_show': True}" domain="[]" icon="terp-camera_test" help="Show the context field"/>
|
|
||||||
<filter string="Deadlines" context="{'deadline_visible': False}" domain="[]" help="Show only tasks having a deadline" icon="terp-gnome-cpu-frequency-applet+"/>
|
|
||||||
</group>
|
|
||||||
<group expand="0" string="Group By...">
|
|
||||||
<filter string="Stage" name="group_stage_id" context="{'group_by':'stage_id'}"/>
|
|
||||||
<filter string="Timebox" name="group_timebox_id" context="{'group_by':'timebox_id'}"/>
|
|
||||||
</group>
|
|
||||||
</search>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
<record model="ir.actions.act_window" id="open_gtd_task">
|
|
||||||
<field name="name">My Tasks</field>
|
|
||||||
<field name="res_model">project.task</field>
|
|
||||||
<field name="search_view_id" ref="view_task_gtd_search"/>
|
|
||||||
<field name="context">{'set_editable':True,'set_visible':True,'gtd':True,'user_invisible':True, "search_default_open": 1}</field>
|
|
||||||
<field name="domain">[('user_id','=',uid)]</field>
|
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">kanban,tree,form,calendar,gantt,graph</field>
|
|
||||||
</record>
|
|
||||||
<menuitem action="open_gtd_task" id="menu_open_gtd_timebox_tree" parent="project.menu_project_management" sequence="10"/>
|
|
||||||
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</openerp>
|
|
|
@ -1,5 +0,0 @@
|
||||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
|
||||||
access_project_gtd_context_user,project.gtd.context project user,model_project_gtd_context,project.group_project_user,1,0,0,0
|
|
||||||
access_project_gtd_timebox_user,project.gtd.timebox project user,model_project_gtd_timebox,project.group_project_user,1,0,0,0
|
|
||||||
access_project_gtd_context_manager,project.gtd.context project manager,model_project_gtd_context,project.group_project_manager,1,1,1,1
|
|
||||||
access_project_gtd_timebox_manager,project.gtd.timebox project manager,model_project_gtd_timebox,project.group_project_manager,1,1,1,1
|
|
|
Binary file not shown.
Before Width: | Height: | Size: 7.4 KiB |
|
@ -1,45 +0,0 @@
|
||||||
-
|
|
||||||
In order to test the process of Timebox in Project Management module,
|
|
||||||
I set my task from Daily to Weekly Timebox through Plannify Timebox
|
|
||||||
-
|
|
||||||
!record {model: project.timebox.fill.plan, id: plan_id}:
|
|
||||||
task_ids: [project.project_task_10]
|
|
||||||
timebox_id: timebox_daily
|
|
||||||
timebox_to_id: timebox_weekly
|
|
||||||
-
|
|
||||||
I set the task from Daily Timebox to Weekly Timebox
|
|
||||||
-
|
|
||||||
!python {model: project.timebox.fill.plan}: |
|
|
||||||
self.process(cr, uid, [ref("plan_id")])
|
|
||||||
-
|
|
||||||
I check task is set to Weekly Timebox
|
|
||||||
-
|
|
||||||
!assert {model: project.task, id: project.project_task_10, string: Task should be set to weekly timebox}:
|
|
||||||
- timebox_id.id == ref("timebox_weekly")
|
|
||||||
-
|
|
||||||
I Empty the Weekly Timebox
|
|
||||||
-
|
|
||||||
!python {model: project.timebox.empty}: |
|
|
||||||
self._empty(cr, uid, {"active_model": "project.gtd.timebox",
|
|
||||||
"active_ids":[ref("timebox_weekly")],
|
|
||||||
"active_id": ref("timebox_weekly"),
|
|
||||||
})
|
|
||||||
-
|
|
||||||
I check task 'Develop Module in Sale Management' is no more in Weekly Timebox
|
|
||||||
-
|
|
||||||
!assert {model: project.task, id: project.project_task_10 , string: Task is not in Weekly Timebox }:
|
|
||||||
- timebox_id.id != ref("timebox_weekly")
|
|
||||||
-
|
|
||||||
I set Previous Timebox on task
|
|
||||||
-
|
|
||||||
!python {model: project.task}: |
|
|
||||||
previous_timebox = self.prev_timebox(cr, uid, [ref("project.project_task_10")],
|
|
||||||
{'active_ids': [ref("project_gtd.menu_open_gtd_timebox_tree")],})
|
|
||||||
assert previous_timebox == True, "I set Previous Timebox on task"
|
|
||||||
-
|
|
||||||
I set Next Timebox on task
|
|
||||||
-
|
|
||||||
!python {model: project.task}: |
|
|
||||||
next_timebox = self.next_timebox(cr, uid, [ref("project.project_task_10")],
|
|
||||||
{'active_ids': [ref("project_gtd.menu_open_gtd_timebox_tree")],})
|
|
||||||
assert next_timebox == True, "I set Next Timebox on task"
|
|
|
@ -1,26 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# OpenERP, Open Source Management Solution
|
|
||||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
import project_gtd_empty
|
|
||||||
import project_gtd_fill
|
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# OpenERP, Open Source Management Solution
|
|
||||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
from openerp.osv import fields, osv
|
|
||||||
from openerp.tools.translate import _
|
|
||||||
|
|
||||||
class project_timebox_empty(osv.osv_memory):
|
|
||||||
|
|
||||||
_name = 'project.timebox.empty'
|
|
||||||
_description = 'Project Timebox Empty'
|
|
||||||
_columns = {
|
|
||||||
'name': fields.char('Name', size=32)
|
|
||||||
}
|
|
||||||
|
|
||||||
def view_init(self, cr, uid, fields_list, context=None):
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
self._empty(cr, uid, context=context)
|
|
||||||
pass
|
|
||||||
|
|
||||||
def _empty(self, cr, uid, context=None):
|
|
||||||
close = []
|
|
||||||
up = []
|
|
||||||
obj_tb = self.pool.get('project.gtd.timebox')
|
|
||||||
obj_task = self.pool.get('project.task')
|
|
||||||
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
if not 'active_id' in context:
|
|
||||||
return {}
|
|
||||||
|
|
||||||
ids = obj_tb.search(cr, uid, [], context=context)
|
|
||||||
if not len(ids):
|
|
||||||
raise osv.except_osv(_('Error!'), _('No timebox child of this one!'))
|
|
||||||
tids = obj_task.search(cr, uid, [('timebox_id', '=', context['active_id'])])
|
|
||||||
for task in obj_task.browse(cr, uid, tids, context):
|
|
||||||
if (task.stage_id and task.stage_id.fold) or (task.user_id.id <> uid):
|
|
||||||
close.append(task.id)
|
|
||||||
else:
|
|
||||||
up.append(task.id)
|
|
||||||
if up:
|
|
||||||
obj_task.write(cr, uid, up, {'timebox_id':ids[0]})
|
|
||||||
if close:
|
|
||||||
obj_task.write(cr, uid, close, {'timebox_id':False})
|
|
||||||
return {}
|
|
||||||
|
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
|
@ -1,37 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<openerp>
|
|
||||||
<data>
|
|
||||||
|
|
||||||
<record id="view_project_gtd_empty" model="ir.ui.view">
|
|
||||||
<field name="name">Empty Timebox</field>
|
|
||||||
<field name="model">project.timebox.empty</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="Empty Timebox" version="7.0">
|
|
||||||
<label string="Timebox Empty Process Completed Successfully." />
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="action_project_gtd_empty" model="ir.actions.act_window">
|
|
||||||
<field name="name">Empty Timebox</field>
|
|
||||||
<field name="type">ir.actions.act_window</field>
|
|
||||||
<field name="res_model">project.timebox.empty</field>
|
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">form</field>
|
|
||||||
<field name="view_id" ref="view_project_gtd_empty"/>
|
|
||||||
<field name="context">{'record_id' : active_id}</field>
|
|
||||||
<field name="target">new</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.values" id="project_gtd_empty_values">
|
|
||||||
<field name="model_id" ref="model_project_gtd_timebox" />
|
|
||||||
<field name="name">Empty Timebox</field>
|
|
||||||
<field name="key2">client_action_multi</field>
|
|
||||||
<field name="value" eval="'ir.actions.act_window,' + str(ref('action_project_gtd_empty'))" />
|
|
||||||
<field name="key">action</field>
|
|
||||||
<field name="model">project.gtd.timebox</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</openerp>
|
|
|
@ -1,60 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# OpenERP, Open Source Management Solution
|
|
||||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
from openerp.osv import fields, osv
|
|
||||||
|
|
||||||
class project_timebox_fill(osv.osv_memory):
|
|
||||||
|
|
||||||
_name = 'project.timebox.fill.plan'
|
|
||||||
_description = 'Project Timebox Fill'
|
|
||||||
_columns = {
|
|
||||||
'timebox_id': fields.many2one('project.gtd.timebox', 'Get from Timebox', required=True),
|
|
||||||
'timebox_to_id': fields.many2one('project.gtd.timebox', 'Set to Timebox', required=True),
|
|
||||||
'task_ids': fields.many2many('project.task', 'project_task_rel', 'task_id', 'fill_id', 'Tasks selection')
|
|
||||||
}
|
|
||||||
|
|
||||||
def _get_from_tb(self, cr, uid, context=None):
|
|
||||||
ids = self.pool.get('project.gtd.timebox').search(cr, uid, [], context=context)
|
|
||||||
return ids and ids[0] or False
|
|
||||||
|
|
||||||
def _get_to_tb(self, cr, uid, context=None):
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
if 'active_id' in context:
|
|
||||||
return context['active_id']
|
|
||||||
return False
|
|
||||||
|
|
||||||
_defaults = {
|
|
||||||
'timebox_id': _get_from_tb,
|
|
||||||
'timebox_to_id': _get_to_tb,
|
|
||||||
}
|
|
||||||
|
|
||||||
def process(self, cr, uid, ids, context=None):
|
|
||||||
if not ids:
|
|
||||||
return {}
|
|
||||||
data = self.read(cr, uid, ids, [], context=context)
|
|
||||||
if not data[0]['task_ids']:
|
|
||||||
return {}
|
|
||||||
self.pool.get('project.task').write(cr, uid, data[0]['task_ids'], {'timebox_id':data[0]['timebox_to_id'][0]})
|
|
||||||
return {'type': 'ir.actions.act_window_close'}
|
|
||||||
|
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
|
@ -1,46 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<openerp>
|
|
||||||
<data>
|
|
||||||
|
|
||||||
<record id="view_project_gtd_fill" model="ir.ui.view">
|
|
||||||
<field name="name">Plannify Timebox</field>
|
|
||||||
<field name="model">project.timebox.fill.plan</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="Plannify Timebox" version="7.0">
|
|
||||||
<group col="4">
|
|
||||||
<field name="timebox_id" widget="selection" options='{"no_open": True}'/>
|
|
||||||
<field name="timebox_to_id" widget="selection"/>
|
|
||||||
</group>
|
|
||||||
<field name="task_ids" domain="[('timebox_id','=',timebox_id),('state','=','open')]" />
|
|
||||||
<footer>
|
|
||||||
<button name="process" string="Add to Timebox" type="object" class="oe_highlight"/>
|
|
||||||
or
|
|
||||||
<button string="Cancel" class="oe_link" special="cancel" />
|
|
||||||
</footer>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="action_project_gtd_fill" model="ir.actions.act_window">
|
|
||||||
<field name="name">Plannify Timebox</field>
|
|
||||||
<field name="type">ir.actions.act_window</field>
|
|
||||||
<field name="res_model">project.timebox.fill.plan</field>
|
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">form</field>
|
|
||||||
<field name="view_id" ref="view_project_gtd_fill"/>
|
|
||||||
<field name="context">{'record_id' : active_id}</field>
|
|
||||||
<field name="target">new</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.values" id="project_gtd_fill_values">
|
|
||||||
<field name="model_id" ref="model_project_gtd_timebox" />
|
|
||||||
<field name="name">Plannify Timebox</field>
|
|
||||||
<field name="key2">client_action_multi</field>
|
|
||||||
<field name="value" eval="'ir.actions.act_window,' + str(ref('action_project_gtd_fill'))" />
|
|
||||||
<field name="key">action</field>
|
|
||||||
<field name="model">project.gtd.timebox</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</openerp>
|
|
Loading…
Reference in New Issue