[IMP] Project: improvements in project related modules + yaml
bzr revid: mra@mra-laptop-20100804121124-d1u8d5mqdtdmr160
This commit is contained in:
parent
df92c3558a
commit
dc42df8ed6
|
@ -20,7 +20,6 @@
|
|||
##############################################################################
|
||||
|
||||
import time
|
||||
import decimal_precision as dp
|
||||
|
||||
from osv import fields
|
||||
from osv import osv
|
||||
|
@ -94,11 +93,12 @@ class account_analytic_line(osv.osv):
|
|||
# Compute based on pricetype
|
||||
pricetype=self.pool.get('product.price.type').browse(cr, uid, company_obj.browse(cr,uid,company_id).property_valuation_price_type.id)
|
||||
# Take the company currency as the reference one
|
||||
context['currency_id']=company_obj.browse(cr, uid, company_id).currency_id.id
|
||||
amount_unit=prod.price_get(pricetype.field, context)[prod.id]
|
||||
amount_unit = prod.price_get(pricetype.field, context)[prod.id]
|
||||
amount = amount_unit*unit_amount or 1.0
|
||||
prec = self.pool.get('decimal.precision').precision_get(cr, uid, 'Account')
|
||||
amount = amount_unit*unit_amount or 1.0
|
||||
return {'value': {
|
||||
'amount': - round(amount, 2),
|
||||
'amount': - round(amount, prec),
|
||||
'general_account_id': a,
|
||||
}}
|
||||
return {}
|
||||
|
|
|
@ -104,14 +104,6 @@ where prp.id in %s''',(tuple(ids),))
|
|||
user_uom = obj_tm.id
|
||||
return user_uom, default_uom
|
||||
|
||||
def _compute_duration(self, cr, uid, duration=0.0, to_uom='default'):
|
||||
uom_obj = self.pool.get('product.uom')
|
||||
user_uom, default_uom = self._get_user_and_default_uom_ids(cr, uid)
|
||||
if to_uom == 'default':
|
||||
return uom_obj._compute_qty(cr, uid, user_uom, duration, default_uom)
|
||||
else:
|
||||
return uom_obj._compute_qty(cr, uid, default_uom, duration, user_uom)
|
||||
|
||||
def _progress_rate(self, cr, uid, ids, names, arg, context=None):
|
||||
res = {}.fromkeys(ids, 0.0)
|
||||
progress = {}
|
||||
|
@ -146,12 +138,13 @@ where prp.id in %s''',(tuple(ids),))
|
|||
p = tocompute.pop()
|
||||
for i in range(3):
|
||||
s[i] += progress.get(p, (0.0, 0.0, 0.0))[i]
|
||||
|
||||
|
||||
uom_obj = self.pool.get('product.uom')
|
||||
user_uom, def_uom = self._get_user_and_default_uom_ids(cr, uid)
|
||||
if user_uom != def_uom:
|
||||
s[0] = self._compute_duration(cr, uid, s[0])
|
||||
s[1] = self._compute_duration(cr, uid, s[1])
|
||||
s[2] = self._compute_duration(cr, uid, s[2])
|
||||
s[0] = uom_obj._compute_qty(cr, uid, user_uom, s[0], def_uom)
|
||||
s[1] = uom_obj._compute_qty(cr, uid, user_uom, s[1], def_uom)
|
||||
s[2] = uom_obj._compute_qty(cr, uid, user_uom, s[2], def_uom)
|
||||
|
||||
if project.state == 'close':
|
||||
progress_rate = 100.0
|
||||
|
@ -345,7 +338,7 @@ class task(osv.osv):
|
|||
|
||||
def search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False):
|
||||
for domain in args:
|
||||
if len(domain) == 3 and domain[0] == 'project_id':
|
||||
if domain[0] == 'project_id' and (not isinstance(domain[2], str)):
|
||||
id = isinstance(domain[2], list) and int(domain[2][0]) or int(domain[2])
|
||||
if id:
|
||||
if self.pool.get('project.project').read(cr, user, id, ['state'])['state'] == 'template':
|
||||
|
@ -364,11 +357,12 @@ class task(osv.osv):
|
|||
cr.execute("SELECT task_id, COALESCE(SUM(hours),0) FROM project_task_work WHERE task_id IN %s GROUP BY task_id",(tuple(ids),))
|
||||
hours = dict(cr.fetchall())
|
||||
|
||||
uom_obj = self.pool.get('product.uom')
|
||||
user_uom, default_uom = project_obj._get_user_and_default_uom_ids(cr, uid)
|
||||
if user_uom != default_uom:
|
||||
for task in self.browse(cr, uid, ids, context=context):
|
||||
if hours.get(task.id, False):
|
||||
dur_in_user_uom = project_obj._compute_duration(cr, uid, duration=hours.get(task.id, 0.0), to_uom='user')
|
||||
dur_in_user_uom = uom_obj._compute_qty(cr, uid, default_uom, hours.get(task.id, 0.0), user_uom)
|
||||
hours[task.id] = dur_in_user_uom
|
||||
|
||||
for task in self.browse(cr, uid, ids, context=context):
|
||||
|
@ -665,11 +659,12 @@ class project_work(osv.osv):
|
|||
vals['hours'] = 0.00
|
||||
|
||||
project_obj = self.pool.get('project.project')
|
||||
uom_obj = self.pool.get('product.uom')
|
||||
user_uom, default_uom = project_obj._get_user_and_default_uom_ids(cr, uid)
|
||||
duration = vals['hours']
|
||||
|
||||
if user_uom != default_uom:
|
||||
duration = project_obj._compute_duration(cr, uid, duration=duration, to_uom='user')
|
||||
duration = uom_obj._compute_qty(cr, uid, default_uom, duration, user_uom)
|
||||
cr.execute('update project_task set remaining_hours=remaining_hours - %s where id=%s', (duration, vals['task_id']))
|
||||
return super(project_work,self).create(cr, uid, vals, *args, **kwargs)
|
||||
|
||||
|
@ -680,6 +675,7 @@ class project_work(osv.osv):
|
|||
vals['hours'] = 0.00
|
||||
|
||||
project_obj = self.pool.get('project.project')
|
||||
uom_obj = self.pool.get('product.uom')
|
||||
user_uom, default_uom = project_obj._get_user_and_default_uom_ids(cr, uid)
|
||||
duration = vals['hours']
|
||||
|
||||
|
@ -688,8 +684,8 @@ class project_work(osv.osv):
|
|||
cr.execute('update project_task set remaining_hours=remaining_hours - %s + (%s) where id=%s', (duration, work.hours, work.task_id.id))
|
||||
else:
|
||||
for work in self.browse(cr, uid, ids, context):
|
||||
duration = project_obj._compute_duration(cr, uid, duration=duration, to_uom='user')
|
||||
del_work = project_obj._compute_duration(cr, uid, duration=work.hours, to_uom='user')
|
||||
duration = uom_obj._compute_qty(cr, uid, default_uom, duration, user_uom)
|
||||
del_work = uom_obj._compute_qty(cr, uid, default_uom, work.hours, user_uom)
|
||||
cr.execute('update project_task set remaining_hours=remaining_hours - %s + (%s) where id=%s', (duration, del_work, work.task_id.id))
|
||||
|
||||
return super(project_work,self).write(cr, uid, ids, vals, context)
|
||||
|
@ -704,7 +700,7 @@ class project_work(osv.osv):
|
|||
cr.execute('update project_task set remaining_hours=remaining_hours + %s where id=%s', (work.hours, work.task_id.id))
|
||||
else:
|
||||
for work in self.browse(cr, uid, ids, context):
|
||||
duration = project_obj._compute_duration(cr, uid, duration=work.hours, to_uom='user')
|
||||
duration = uom_obj._compute_qty(cr, uid, default_uom, work.hours, user_uom)
|
||||
cr.execute('update project_task set remaining_hours=remaining_hours + %s where id=%s', (duration, work.task_id.id))
|
||||
return super(project_work,self).unlink(cr, uid, ids, *args, **kwargs)
|
||||
|
||||
|
@ -735,7 +731,35 @@ class config_compute_remaining(osv.osv_memory):
|
|||
_defaults = {
|
||||
'remaining_hours': _get_remaining
|
||||
}
|
||||
|
||||
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
|
||||
tm = obj_tm and obj_tm.name or 'Hours'
|
||||
|
||||
res = super(config_compute_remaining, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu=submenu)
|
||||
|
||||
if tm in ['Hours','Hour']:
|
||||
return res
|
||||
|
||||
eview = etree.fromstring(res['arch'])
|
||||
|
||||
def _check_rec(eview):
|
||||
if eview.attrib.get('widget','') == 'float_time':
|
||||
eview.set('widget','float')
|
||||
for child in eview:
|
||||
_check_rec(child)
|
||||
return True
|
||||
|
||||
_check_rec(eview)
|
||||
|
||||
res['arch'] = etree.tostring(eview)
|
||||
|
||||
for f in res['fields']:
|
||||
if 'Hours' in res['fields'][f]['string']:
|
||||
res['fields'][f]['string'] = res['fields'][f]['string'].replace('Hours',tm)
|
||||
|
||||
return res
|
||||
def compute_hours(self, cr, uid, ids, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
|
@ -762,7 +786,7 @@ class config_compute_remaining(osv.osv_memory):
|
|||
return {
|
||||
'type': 'ir.actions.act_window_close',
|
||||
}
|
||||
|
||||
|
||||
config_compute_remaining()
|
||||
|
||||
class message(osv.osv):
|
||||
|
|
|
@ -214,7 +214,7 @@
|
|||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Reevaluate Hours">
|
||||
<separator colspan="4" string="Change Remaining Hours"/>
|
||||
<separator colspan="4" string="Change Remaining Time"/>
|
||||
<newline/>
|
||||
<field name="remaining_hours" widget="float_time"/>
|
||||
<separator string="" colspan="4"/>
|
||||
|
|
|
@ -64,10 +64,13 @@ class procurement_order(osv.osv):
|
|||
# Creating a project for task.Project is created from Procurement.
|
||||
project_obj = self.pool.get('project.project')
|
||||
proj_name = tools.ustr(so_ref)
|
||||
product_project_id =procurement.product_id.project_id and procurement.product_id.project_id.id or False
|
||||
product_project = procurement.product_id.project_id or False
|
||||
proj_exist_id = project_obj.search(cr, uid, [('name', '=', proj_name)], context=context)
|
||||
if not proj_exist_id:
|
||||
project_id = project_obj.create(cr, uid, {'name': proj_name, 'partner_id': partner_id,'parent_id':product_project_id})
|
||||
if not proj_exist_id:
|
||||
parent_project = False
|
||||
if product_project:
|
||||
parent_project = product_project.analytic_account_id.id
|
||||
project_id = project_obj.create(cr, uid, {'name': proj_name, 'partner_id': partner_id, 'parent_id': parent_project})
|
||||
else:
|
||||
project_id = proj_exist_id[0]
|
||||
|
||||
|
|
|
@ -60,7 +60,10 @@ class project_work(osv.osv):
|
|||
|
||||
def create(self, cr, uid, vals, *args, **kwargs):
|
||||
obj_timesheet = self.pool.get('hr.analytic.timesheet')
|
||||
project_obj = self.pool.get('project.project')
|
||||
task_obj = self.pool.get('project.task')
|
||||
uom_obj = self.pool.get('product.uom')
|
||||
|
||||
vals_line = {}
|
||||
context = kwargs.get('context', {})
|
||||
obj_task = task_obj.browse(cr, uid, vals['task_id'])
|
||||
|
@ -69,7 +72,12 @@ class project_work(osv.osv):
|
|||
vals_line['user_id'] = vals['user_id']
|
||||
vals_line['product_id'] = result['product_id']
|
||||
vals_line['date'] = vals['date'][:10]
|
||||
|
||||
#calculate quantity based on employee's product's uom
|
||||
vals_line['unit_amount'] = vals['hours']
|
||||
user_uom, default_uom = project_obj._get_user_and_default_uom_ids(cr, uid)
|
||||
if result['product_uom_id'] != default_uom:
|
||||
vals_line['unit_amount'] = uom_obj._compute_qty(cr, uid, default_uom, vals['hours'], result['product_uom_id'])
|
||||
acc_id = obj_task.project_id.analytic_account_id.id
|
||||
vals_line['account_id'] = acc_id
|
||||
res = obj_timesheet.on_change_account_id(cr, uid, False, acc_id)
|
||||
|
@ -88,7 +96,7 @@ class project_work(osv.osv):
|
|||
amount_unit = obj_timesheet.on_change_unit_amount(cr, uid, timeline_id,
|
||||
prod_id, amount, unit, context=context)
|
||||
if amount_unit and 'amount' in amount_unit.get('value',{}):
|
||||
updv = { 'amount': amount_unit['value']['amount'] * (-1.0) }
|
||||
updv = { 'amount': amount_unit['value']['amount'] }
|
||||
obj_timesheet.write(cr, uid, [timeline_id], updv, context=context)
|
||||
vals['hr_analytic_timesheet_id'] = timeline_id
|
||||
return super(project_work,self).create(cr, uid, vals, *args, **kwargs)
|
||||
|
@ -98,6 +106,9 @@ class project_work(osv.osv):
|
|||
context = {}
|
||||
obj = self.pool.get('hr.analytic.timesheet')
|
||||
timesheet_obj = self.pool.get('hr.analytic.timesheet')
|
||||
project_obj = self.pool.get('project.project')
|
||||
uom_obj = self.pool.get('product.uom')
|
||||
|
||||
if isinstance(ids, (long, int)):
|
||||
ids = [ids,]
|
||||
|
||||
|
@ -120,15 +131,20 @@ class project_work(osv.osv):
|
|||
if 'date' in vals:
|
||||
vals_line['date'] = vals['date'][:10]
|
||||
if 'hours' in vals:
|
||||
user_uom, default_uom = project_obj._get_user_and_default_uom_ids(cr, uid)
|
||||
vals_line['unit_amount'] = vals['hours']
|
||||
prod_id = vals_line.get('product_id', line_id.product_id.id) # False may be set
|
||||
|
||||
if result['product_uom_id'] and (not result['product_uom_id'] == default_uom):
|
||||
vals_line['unit_amount'] = uom_obj._compute_qty(cr, uid, default_uom, vals['hours'], result['product_uom_id'])
|
||||
|
||||
# Compute based on pricetype
|
||||
amount_unit = obj.on_change_unit_amount(cr, uid, line_id.id,
|
||||
prod_id=prod_id,
|
||||
unit_amount=vals_line['unit_amount'], unit=False, context=context)
|
||||
|
||||
if amount_unit and 'amount' in amount_unit.get('value',{}):
|
||||
vals_line['amount'] = amount_unit['value']['amount'] * (-1.0)
|
||||
vals_line['amount'] = amount_unit['value']['amount']
|
||||
|
||||
obj.write(cr, uid, [line_id.id], vals_line, context=context)
|
||||
|
||||
|
@ -139,7 +155,7 @@ class project_work(osv.osv):
|
|||
hat_ids = []
|
||||
for task in self.browse(cr, uid, ids):
|
||||
if task.hr_analytic_timesheet_id:
|
||||
hat_ids.append(task.hr_analytic_timesheet_id)
|
||||
hat_ids.append(task.hr_analytic_timesheet_id.id)
|
||||
# delete entry from timesheet too while deleting entry to task.
|
||||
if hat_ids:
|
||||
hat_obj.unlink(cr, uid, hat_ids, *args, **kwargs)
|
||||
|
|
|
@ -91,7 +91,6 @@
|
|||
work_ids:
|
||||
- date: '2010-06-03 15:04:47'
|
||||
hours: 10.0
|
||||
hr_analytic_timesheet_id: 3L
|
||||
name: Get work calendar of all employees
|
||||
user_id: res_users_hrmanager0
|
||||
|
||||
|
|
Loading…
Reference in New Issue