[IMP] hr_recruitment: date to open and close on hr applicant + changes with report also, access rights
bzr revid: mra@mra-laptop-20100802095742-32tzwof760xlbwih
This commit is contained in:
parent
f0f0dfa7a1
commit
92bb132404
|
@ -19,6 +19,9 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from osv import fields, osv
|
||||
from crm import crm
|
||||
import tools
|
||||
|
@ -77,6 +80,43 @@ class hr_applicant(osv.osv, crm.crm_case):
|
|||
_description = "Applicant"
|
||||
_order = "id desc"
|
||||
_inherit = ['mailgate.thread']
|
||||
|
||||
def _compute_day(self, cr, uid, ids, fields, args, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
"""
|
||||
@param cr: the current row, from the database cursor,
|
||||
@param uid: the current user’s ID for security checks,
|
||||
@param ids: List of Openday’s IDs
|
||||
@return: difference between current date and log date
|
||||
@param context: A standard dictionary for contextual values
|
||||
"""
|
||||
res = {}
|
||||
for issue in self.browse(cr, uid, ids, context=context):
|
||||
for field in fields:
|
||||
res[issue.id] = {}
|
||||
duration = 0
|
||||
ans = False
|
||||
hours = 0
|
||||
|
||||
if field in ['day_open']:
|
||||
if issue.date_open:
|
||||
date_create = datetime.strptime(issue.create_date, "%Y-%m-%d %H:%M:%S")
|
||||
date_open = datetime.strptime(issue.date_open, "%Y-%m-%d %H:%M:%S")
|
||||
ans = date_open - date_create
|
||||
date_until = issue.date_open
|
||||
|
||||
elif field in ['day_close']:
|
||||
if issue.date_closed:
|
||||
date_create = datetime.strptime(issue.create_date, "%Y-%m-%d %H:%M:%S")
|
||||
date_close = datetime.strptime(issue.date_closed, "%Y-%m-%d %H:%M:%S")
|
||||
date_until = issue.date_closed
|
||||
ans = date_close - date_create
|
||||
if ans:
|
||||
duration = float(ans.days)
|
||||
res[issue.id][field] = abs(float(duration))
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Name', size=128, required=True),
|
||||
'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
|
||||
|
@ -100,6 +140,7 @@ class hr_applicant(osv.osv, crm.crm_case):
|
|||
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||
# Applicant Columns
|
||||
'date_closed': fields.datetime('Closed', readonly=True),
|
||||
'date_open': fields.datetime('Opened', readonly=True),
|
||||
'date': fields.datetime('Date'),
|
||||
'date_action': fields.date('Next Action Date'),
|
||||
'title_action': fields.char('Next Action', size=64),
|
||||
|
@ -117,6 +158,10 @@ class hr_applicant(osv.osv, crm.crm_case):
|
|||
'survey' : fields.related('job_id', 'survey_id', type='many2one', relation='survey', string='Survey'),
|
||||
'response' : fields.integer("Response"),
|
||||
'reference': fields.char('Reference', size=128),
|
||||
'day_open': fields.function(_compute_day, string='Days to Open', \
|
||||
method=True, multi='day_open', type="float", store=True),
|
||||
'day_close': fields.function(_compute_day, string='Days to Close', \
|
||||
method=True, multi='day_close', type="float", store=True),
|
||||
}
|
||||
|
||||
def _get_stage(self, cr, uid, context=None):
|
||||
|
@ -343,7 +388,6 @@ class hr_applicant(osv.osv, crm.crm_case):
|
|||
return res
|
||||
|
||||
def msg_send(self, cr, uid, id, *args, **argv):
|
||||
|
||||
""" Send The Message
|
||||
@param self: The object pointer
|
||||
@param cr: the current row, from the database cursor,
|
||||
|
@ -363,6 +407,9 @@ class hr_applicant(osv.osv, crm.crm_case):
|
|||
@param *args: Give Tuple Value
|
||||
"""
|
||||
res = super(hr_applicant, self).case_open(cr, uid, ids, *args)
|
||||
date = self.read(cr, uid, ids, ['date_open'])[0]
|
||||
if not date['date_open']:
|
||||
self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S'),})
|
||||
for (id, name) in self.name_get(cr, uid, ids):
|
||||
message = _('Job request for') + " '" + name + "' "+ _("is Open.")
|
||||
self.log(cr, uid, id, message)
|
||||
|
@ -382,6 +429,19 @@ class hr_applicant(osv.osv, crm.crm_case):
|
|||
self.log(cr, uid, id, message)
|
||||
return res
|
||||
|
||||
def case_reset(self, cr, uid, ids, *args):
|
||||
"""Resets case as draft
|
||||
@param self: The object pointer
|
||||
@param cr: the current row, from the database cursor,
|
||||
@param uid: the current user’s ID for security checks,
|
||||
@param ids: List of case Ids
|
||||
@param *args: Tuple Value for additional Params
|
||||
"""
|
||||
res = super(hr_applicant, self).case_reset(cr, uid, ids, *args)
|
||||
self.write(cr, uid, ids, {'date_open': False, 'date_closed':False})
|
||||
return res
|
||||
|
||||
|
||||
hr_applicant()
|
||||
|
||||
class hr_job(osv.osv):
|
||||
|
|
|
@ -131,6 +131,7 @@
|
|||
<field name="create_date"/>
|
||||
<field name="write_date"/>
|
||||
<field name="date_closed"/>
|
||||
<field name="date_open"/>
|
||||
</group>
|
||||
<separator colspan="4" string="Status"/>
|
||||
<group col="8" colspan="4">
|
||||
|
|
|
@ -93,6 +93,7 @@ class hr_recruitment_report(osv.osv):
|
|||
('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
|
||||
'day': fields.char('Day', size=128, readonly=True),
|
||||
'date': fields.date('Date', readonly=True),
|
||||
'opening_date': fields.date('Date of Opening', readonly=True),
|
||||
'date_closed': fields.date('Closed', readonly=True),
|
||||
'job_id': fields.many2one('hr.job', 'Applied Job',readonly=True),
|
||||
'stage_id': fields.many2one ('hr.recruitment.stage', 'Stage'),
|
||||
|
@ -103,7 +104,11 @@ class hr_recruitment_report(osv.osv):
|
|||
'salary_exp' : fields.float("Salary Expected"),
|
||||
'partner_id': fields.many2one('res.partner', 'Partner',readonly=True),
|
||||
'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact Name',readonly=True),
|
||||
'available' : fields.float("Availability")
|
||||
'available' : fields.float("Availability"),
|
||||
'delay_open': fields.float('Avg. Delay to Open', digits=(16,2), readonly=True, group_operator="avg",
|
||||
help="Number of Days to close the project issue"),
|
||||
'delay_close': fields.float('Avg. Delay to Close', digits=(16,2), readonly=True, group_operator="avg",
|
||||
help="Number of Days to close the project issue"),
|
||||
|
||||
}
|
||||
_order = 'date desc'
|
||||
|
@ -131,6 +136,8 @@ class hr_recruitment_report(osv.osv):
|
|||
s.stage_id,
|
||||
sum(salary_proposed) as salary_prop,
|
||||
sum(salary_expected) as salary_exp,
|
||||
extract('epoch' from (s.date_open-s.create_date))/(3600*24) as delay_open,
|
||||
extract('epoch' from (s.date_closed-s.create_date))/(3600*24) as delay_close,
|
||||
count(*) as nbr
|
||||
from hr_applicant s
|
||||
group by
|
||||
|
@ -139,6 +146,9 @@ class hr_recruitment_report(osv.osv):
|
|||
to_char(s.create_date, 'YYYY-MM-DD') ,
|
||||
date_trunc('day',s.create_date),
|
||||
date_trunc('day',s.date_closed),
|
||||
s.date_open,
|
||||
s.create_date,
|
||||
s.date_closed,
|
||||
s.state,
|
||||
s.partner_id,
|
||||
s.partner_address_id,
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
<field name="nbr" sum="# Cases"/>
|
||||
<field name="salary_prop" sum="Salary Proposed" />
|
||||
<field name="salary_exp" sum="Salary Expected"/>
|
||||
<field name="delay_open" avg='Avg Opening Delay'/>
|
||||
<field name="delay_close" avg='Avg Closing Delay'/>
|
||||
<field name="available" sum="Available"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_hr_applicant","hr.applicant","model_hr_applicant","hr.group_hr_user",1,1,1,1
|
||||
"access_hr_recruitment_report","hr.recruitment.report","model_hr_recruitment_report","hr.group_hr_manager",1,0,0,0
|
||||
"access_hr_recruitment_stage","hr.recruitment.stage","model_hr_recruitment_stage","hr.group_hr_user",1,1,1,1
|
||||
"access_hr_recruitment_degree","hr.recruitment.degree","model_hr_recruitment_degree","hr.group_hr_user",1,1,1,1
|
||||
|
|
|
Loading…
Reference in New Issue