[IMP] Project: improvements in project related modules + yaml

bzr revid: mra@mra-laptop-20100804121124-d1u8d5mqdtdmr160
This commit is contained in:
PAP(OpenERP) 2010-08-04 17:41:24 +05:30 committed by Mustufa Rangwala
parent df92c3558a
commit dc42df8ed6
6 changed files with 73 additions and 31 deletions

View File

@ -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 {}

View File

@ -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):

View File

@ -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"/>

View File

@ -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]

View File

@ -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)

View File

@ -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