[IMP]:improvements in project
bzr revid: pap@tinyerp.co.in-20100710131844-lpklkvv1bagc02zw
This commit is contained in:
parent
0ef7ccb6d1
commit
26fc1b1b3e
|
@ -20,6 +20,7 @@
|
|||
##############################################################################
|
||||
|
||||
from lxml import etree
|
||||
from datetime import date, datetime
|
||||
import time
|
||||
|
||||
from tools.translate import _
|
||||
|
@ -170,6 +171,9 @@ class project(osv.osv):
|
|||
return res
|
||||
|
||||
def set_done(self, cr, uid, ids, context=None):
|
||||
task_obj = self.pool.get('project.task')
|
||||
for task in self.read(cr, uid, ids, ['tasks'])[0]['tasks']:
|
||||
task_obj.write(cr, uid, task, {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
|
||||
self.write(cr, uid, ids, {'state':'close'}, context=context)
|
||||
for (id, name) in self.name_get(cr, uid, ids):
|
||||
message = _('Project ') + " '" + name + "' "+ _("is Closed.")
|
||||
|
@ -198,16 +202,37 @@ class project(osv.osv):
|
|||
def copy(self, cr, uid, id, default={}, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
|
||||
task_obj = self.pool.get('project.task')
|
||||
proj = self.browse(cr, uid, id, context=context)
|
||||
default = default or {}
|
||||
context['active_test'] = False
|
||||
default['state'] = 'open'
|
||||
if not default.get('name', False):
|
||||
default['name'] = proj.name+_(' (copy)')
|
||||
default['name'] = proj.name+_(' (copy)')
|
||||
res = super(project, self).copy(cr, uid, id, default, context)
|
||||
|
||||
task_ids = task_obj.search(cr, uid, [('project_id','=', res), ('active','=',False)])
|
||||
tasks = task_obj.browse(cr, uid, task_ids)
|
||||
for task in tasks:
|
||||
date_deadline = None
|
||||
date_end = None
|
||||
if task.date_start:
|
||||
ds = date(*time.strptime(task.date_start,'%Y-%m-%d %H:%M:%S')[:3])
|
||||
if task.date_deadline:
|
||||
dd = date(*time.strptime(task.date_deadline,'%Y-%m-%d')[:3])
|
||||
diff = dd-ds
|
||||
date_deadline = (datetime.now()+diff).strftime('%Y-%m-%d %H:%M:%S')
|
||||
if task.date_end:
|
||||
de = date(*time.strptime(task.date_end,'%Y-%m-%d %H:%M:%S')[:3])
|
||||
diff = de-ds
|
||||
date_end = (datetime.now()+diff).strftime('%Y-%m-%d %H:%M:%S')
|
||||
task_obj.write(cr, uid, task.id, {'active':True,
|
||||
'date_start':time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'date_deadline':date_deadline,
|
||||
'date_end':date_end})
|
||||
|
||||
ids = self.search(cr, uid, [('parent_id','child_of', [res])])
|
||||
if ids:
|
||||
cr.execute('update project_task set active=True where project_id IN %s',(tuple(ids),))
|
||||
return res
|
||||
|
||||
def duplicate_template(self, cr, uid, ids, context=None):
|
||||
|
@ -220,13 +245,22 @@ class project(osv.osv):
|
|||
for proj in self.browse(cr, uid, ids, context=context):
|
||||
parent_id = context.get('parent_id', False) # check me where to pass context for parent id ??
|
||||
context.update({'analytic_project_copy': True})
|
||||
date_end = None
|
||||
if proj.date:
|
||||
ds = date(*time.strptime(proj.date_start,'%Y-%m-%d')[:3])
|
||||
de = date(*time.strptime(proj.date,'%Y-%m-%d')[:3])
|
||||
diff = de-ds
|
||||
date_end = (datetime.now()+diff).strftime('%Y-%m-%d %H:%M:%S')
|
||||
print "date_end---",date_end,diff,time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
new_id = project_obj.copy(cr, uid, proj.id, default = {
|
||||
'name': proj.name +_(' (copy)'),
|
||||
'state':'open',
|
||||
'parent_id':parent_id}, context=context)
|
||||
'parent_id':parent_id,
|
||||
'date_start':time.strftime('%Y-%m-%d'),
|
||||
'date': date_end
|
||||
}, context=context)
|
||||
result.append(new_id)
|
||||
cr.execute('select id from project_task where project_id=%s', (proj.id,))
|
||||
res = cr.fetchall()
|
||||
|
||||
child_ids = self.search(cr, uid, [('parent_id','=', proj.category_id.id)], context=context)
|
||||
parent_id = self.read(cr, uid, new_id, ['category_id'])['category_id'][0]
|
||||
if child_ids:
|
||||
|
@ -274,7 +308,7 @@ class task(osv.osv):
|
|||
_description = "Task"
|
||||
_log_create = True
|
||||
_date_name = "date_start"
|
||||
|
||||
|
||||
def _str_get(self, task, level=0, border='***', context=None):
|
||||
return border+' '+(task.user_id and task.user_id.name.upper() or '')+(level and (': L'+str(level)) or '')+(' - %.1fh / %.1fh'%(task.effective_hours or 0.0,task.planned_hours))+' '+border+'\n'+ \
|
||||
border[0]+' '+(task.name or '')+'\n'+ \
|
||||
|
@ -376,6 +410,14 @@ class task(osv.osv):
|
|||
# Override view according to the company definition
|
||||
#
|
||||
|
||||
def create(self, cr, uid, vals, *args, **kwargs):
|
||||
if vals['project_id']:
|
||||
project = self.pool.get('project.project').read(cr, uid, vals['project_id'], ['state'])
|
||||
if project and project['state'] == 'template':
|
||||
vals.update({'active': False})
|
||||
print vals
|
||||
return super(task,self).create(cr, uid, vals, *args, **kwargs)
|
||||
|
||||
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
|
||||
users_obj = self.pool.get('res.users')
|
||||
obj_tm = users_obj.browse(cr, uid, uid, context).company_id.project_time_mode_id
|
||||
|
@ -410,7 +452,6 @@ class task(osv.osv):
|
|||
mod_obj = self.pool.get('ir.model.data')
|
||||
request = self.pool.get('res.request')
|
||||
tasks = self.browse(cr, uid, ids)
|
||||
task_id = ids[0]
|
||||
cntx = {}
|
||||
if len(args):
|
||||
cntx = args[0]
|
||||
|
@ -427,11 +468,9 @@ class task(osv.osv):
|
|||
'ref_doc1': 'project.task,%d'% (task.id,),
|
||||
'ref_doc2': 'project.project,%d'% (project.id,),
|
||||
})
|
||||
elif project.warn_manager and cntx.get('mail_send',False):
|
||||
elif project.warn_manager and cntx.get('mail_send',True):
|
||||
mail_send = True
|
||||
message = _('Task ') + " '" + task.name + "' "+ _("is Done.")
|
||||
self.log(cr, uid, task.id, message)
|
||||
self.write(cr, uid, [task.id], {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
|
||||
|
||||
for parent_id in task.parent_ids:
|
||||
if parent_id.state in ('pending','draft'):
|
||||
reopen = True
|
||||
|
@ -440,23 +479,25 @@ class task(osv.osv):
|
|||
reopen = False
|
||||
if reopen:
|
||||
self.do_reopen(cr, uid, [parent_id.id])
|
||||
if mail_send:
|
||||
model_data_ids = mod_obj.search(cr,uid,[('model','=','ir.ui.view'),('name','=','view_project_close_task')])
|
||||
resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'])[0]['res_id']
|
||||
cntx.update({'task_id': task_id})
|
||||
return {
|
||||
'name': _('Email Send to Customer'),
|
||||
'view_type': 'form',
|
||||
'context': cntx, # improve me
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'close.task',
|
||||
'views': [(resource_id,'form')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'target': 'new',
|
||||
'nodestroy': True
|
||||
}
|
||||
else:
|
||||
self.write(cr, uid, [task_id], {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
|
||||
if mail_send:
|
||||
model_data_ids = mod_obj.search(cr,uid,[('model','=','ir.ui.view'),('name','=','view_project_close_task')])
|
||||
resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'])[0]['res_id']
|
||||
cntx.update({'task_id': task.id})
|
||||
return {
|
||||
'name': _('Email Send to Customer'),
|
||||
'view_type': 'form',
|
||||
'context': cntx, # improve me
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'close.task',
|
||||
'views': [(resource_id,'form')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'target': 'new',
|
||||
'nodestroy': True
|
||||
}
|
||||
else:
|
||||
self.write(cr, uid, [task.id], {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
|
||||
message = _('Task ') + " '" + task.name + "' "+ _("is Done.")
|
||||
self.log(cr, uid, task.id, message)
|
||||
return False
|
||||
|
||||
def do_reopen(self, cr, uid, ids, *args):
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
<record id="project_project_9" model="project.project">
|
||||
<field name="warn_manager">1</field>
|
||||
<field name="name">Open ERP Integration</field>
|
||||
<field name="manager" ref="base.user_root"/>
|
||||
<field eval="[(6, 0, [ref('project_tt_specification'),ref('project_tt_development'),ref('project_tt_testing'),ref('project_tt_merge')])]" name="type_ids"/>
|
||||
</record>
|
||||
<record id="project_project_21" model="project.project">
|
||||
|
@ -39,21 +38,18 @@
|
|||
<field name="priority">10</field>
|
||||
<field name="parent_id" ref="project_project_9"/>
|
||||
<field name="name">Study + Prototype</field>
|
||||
<field name="manager" ref="base.user_root"/>
|
||||
<field eval="[(6, 0, [ref('project_tt_specification'),ref('project_tt_development')])]" name="type_ids"/>
|
||||
</record>
|
||||
<record id="project_project_22" model="project.project">
|
||||
<field name="priority">20</field>
|
||||
<field name="parent_id" ref="project_project_9"/>
|
||||
<field name="name">Specific Developments</field>
|
||||
<field name="manager" ref="base.user_root"/>
|
||||
<field eval="[(6, 0, [ref('project_tt_specification'), ref('project_tt_development')])]" name="type_ids"/>
|
||||
</record>
|
||||
<record id="project_project_23" model="project.project">
|
||||
<field name="priority">30</field>
|
||||
<field name="parent_id" ref="project_project_9"/>
|
||||
<field name="name">Install, data import, configuration</field>
|
||||
<field name="manager" ref="base.user_root"/>
|
||||
<field eval="[(6, 0, [ref('project_tt_development')])]" name="type_ids"/>
|
||||
</record>
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
</group>
|
||||
<newline/>
|
||||
<group col="9" colspan="8">
|
||||
<field name="state" select="1"/>
|
||||
<field name="state" select="1" readonly="1"/>
|
||||
<button name="set_template" string="Set as Template" type="object" states="open" icon="gtk-convert"/>
|
||||
<button name="set_open" string="Reactivate Project" type="object" states="pending,cancelled,done" icon="gtk-ok"/>
|
||||
<button name="set_pending" string="Pending" type="object" states="open" icon="gtk-media-pause"/>
|
||||
|
@ -117,7 +117,6 @@
|
|||
<field name="arch" type="xml">
|
||||
<search string="Search Project">
|
||||
<group col='15' colspan='4'>
|
||||
<filter icon="terp-document-new" string="Draft" domain="[('state', 'in',('draft',))]" help="Draft Projects" default="1"/>
|
||||
<filter icon="terp-check" string="Current" name="Current" domain="[('state', 'in',('open','pending'))]" help="Open and Pending Projects" default="1"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-personal" string="Manager" name="Manager" domain="[('user_id', '=', uid)]" help="Projects in which I am a manager."/>
|
||||
|
@ -322,7 +321,7 @@
|
|||
<field name="partner_id"/>
|
||||
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
|
||||
<group col="4" colspan="2">
|
||||
<field name="type" widget="selection" />
|
||||
<field name="type" widget="selection" readonly="1"/>
|
||||
<button name="prev_type" string="Previous" type="object" icon="gtk-go-back" help="Change to Previous Stage"/>
|
||||
<button name="next_type" string="Next" type="object" icon="gtk-go-forward" help="Change to Next Stage"/>
|
||||
</group>
|
||||
|
@ -652,4 +651,4 @@
|
|||
<act_window domain="[('project_id', '=', active_id)]" id="act_project_messages" name="Messages" res_model="project.message" src_model="project.project"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
</openerp>
|
|
@ -98,6 +98,8 @@ class project_close_task(osv.osv_memory):
|
|||
body = u'%s\n%s\n%s\n\n-- \n%s' % (header, description, footer, signature)
|
||||
email(from_adr, [to_adr], subject, body.encode('utf-8'), email_bcc=[from_adr])
|
||||
task_obj.write(cr, uid, [task.id], {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
|
||||
message = _('Task ') + " '" + task.name + "' "+ _("is Done.")
|
||||
self.log(cr, uid, task.id, message)
|
||||
else:
|
||||
raise osv.except_osv(_('Error'), _("Please specify the email address of partner."))
|
||||
return {}
|
||||
|
|
Loading…
Reference in New Issue