[IMP] hr related modules improvements
bzr revid: mra@mra-laptop-20100727071145-4n3z9i1jj1zosp8z
This commit is contained in:
parent
148d09d6dc
commit
4b1348a989
|
@ -4,10 +4,9 @@
|
||||||
|
|
||||||
<menuitem id="menu_hr_root" icon="terp-hr" name="Human Resources" sequence="15"/>
|
<menuitem id="menu_hr_root" icon="terp-hr" name="Human Resources" sequence="15"/>
|
||||||
<menuitem id="menu_hr_main" parent="menu_hr_root" name="Human Resources" sequence="0"/>
|
<menuitem id="menu_hr_main" parent="menu_hr_root" name="Human Resources" sequence="0"/>
|
||||||
<menuitem id="menu_hr_configuration" name="Configuration" parent="hr.menu_hr_root" groups="group_hr_manager" sequence="50" />
|
<menuitem id="menu_hr_configuration" name="Configuration" parent="hr.menu_hr_root" groups="group_hr_manager" sequence="50"/>
|
||||||
<menuitem id="menu_hr_management" name="Human Resources" parent="hr.menu_hr_configuration" groups="group_hr_manager" sequence="1" />
|
<menuitem id="menu_hr_management" name="Human Resources" parent="hr.menu_hr_configuration" groups="group_hr_manager" sequence="1"/>
|
||||||
<menuitem id="menu_view_employee_category_configuration_form" parent="hr.menu_hr_management" name="Employees"
|
<menuitem id="menu_view_employee_category_configuration_form" parent="hr.menu_hr_management" name="Employees" sequence="1"/>
|
||||||
sequence="1"/>
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
==========
|
==========
|
||||||
|
|
|
@ -48,7 +48,7 @@ class hr_installer(osv.osv_memory):
|
||||||
help="Simplifies the management of employee attendances."),
|
help="Simplifies the management of employee attendances."),
|
||||||
'hr_payroll': fields.boolean('Payroll',
|
'hr_payroll': fields.boolean('Payroll',
|
||||||
help="Generic Payroll system"),
|
help="Generic Payroll system"),
|
||||||
'hr_payroll_account': fields.boolean('Payroll',
|
'hr_payroll_account': fields.boolean('Payroll Accounting',
|
||||||
help="Generic Payroll system Integrated with Accountings."),
|
help="Generic Payroll system Integrated with Accountings."),
|
||||||
}
|
}
|
||||||
_defaults = {
|
_defaults = {
|
||||||
|
|
|
@ -74,8 +74,6 @@
|
||||||
<field name="help">Time Tracking functionality aims to manage employee's attendances on the basis of the actions (Sign in/Sign out) performed by them. You can also link this to an attndance machine using OpenERP's webservices features.</field>
|
<field name="help">Time Tracking functionality aims to manage employee's attendances on the basis of the actions (Sign in/Sign out) performed by them. You can also link this to an attndance machine using OpenERP's webservices features.</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!--<menuitem id="menu_hr_attendance" name="Attendances" parent="hr.menu_hr_root"
|
|
||||||
groups="group_hr_attendance"/>-->
|
|
||||||
<menuitem id="menu_hr_time_tracking" name="Time Tracking" parent="hr.menu_hr_root" sequence="3"/>
|
<menuitem id="menu_hr_time_tracking" name="Time Tracking" parent="hr.menu_hr_root" sequence="3"/>
|
||||||
<menuitem action="open_view_attendance" id="menu_open_view_attendance" parent="menu_hr_time_tracking" groups="hr.group_hr_manager" sequence="3"/>
|
<menuitem action="open_view_attendance" id="menu_open_view_attendance" parent="menu_hr_time_tracking" groups="hr.group_hr_manager" sequence="3"/>
|
||||||
|
|
||||||
|
|
|
@ -104,18 +104,22 @@ class hr_employee(osv.osv):
|
||||||
}
|
}
|
||||||
|
|
||||||
def run_employee_evaluation(self, cr, uid, automatic=False, use_new_cursor=False, context=None):
|
def run_employee_evaluation(self, cr, uid, automatic=False, use_new_cursor=False, context=None):
|
||||||
|
obj_evaluation = self.pool.get('hr_evaluation.evaluation')
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
for id in self.browse(cr, uid, self.search(cr, uid, [], context=context), context=context):
|
for id in self.browse(cr, uid, self.search(cr, uid, [], context=context), context=context):
|
||||||
if id.evaluation_plan_id and id.evaluation_date:
|
if id.evaluation_plan_id and id.evaluation_date:
|
||||||
if (dt.ISO.ParseAny(id.evaluation_date) + dt.RelativeDateTime(months = int(id.evaluation_plan_id.month_next))).strftime('%Y-%m-%d') <= time.strftime("%Y-%m-%d"):
|
if (dt.ISO.ParseAny(id.evaluation_date) + dt.RelativeDateTime(months = int(id.evaluation_plan_id.month_next))).strftime('%Y-%m-%d') <= time.strftime("%Y-%m-%d"):
|
||||||
self.write(cr, uid, id.id, {'evaluation_date' : (dt.ISO.ParseAny(id.evaluation_date) + dt.RelativeDateTime(months =+ int(id.evaluation_plan_id.month_next))).strftime('%Y-%m-%d')}, context=context)
|
self.write(cr, uid, id.id, {'evaluation_date' : (dt.ISO.ParseAny(id.evaluation_date) + dt.RelativeDateTime(months =+ int(id.evaluation_plan_id.month_next))).strftime('%Y-%m-%d')}, context=context)
|
||||||
self.pool.get("hr_evaluation.evaluation").create(cr, uid, {'employee_id' : id.id, 'plan_id': id.evaluation_plan_id}, context)
|
obj_evaluation.create(cr, uid, {'employee_id' : id.id, 'plan_id': id.evaluation_plan_id}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def onchange_evaluation_plan_id(self, cr, uid, ids, evaluation_plan_id, evaluation_date, context=None):
|
def onchange_evaluation_plan_id(self, cr, uid, ids, evaluation_plan_id, evaluation_date, context=None):
|
||||||
evaluation_date = evaluation_date or False
|
evaluation_date = evaluation_date or False
|
||||||
evaluation_plan_obj=self.pool.get('hr_evaluation.plan')
|
evaluation_plan_obj=self.pool.get('hr_evaluation.plan')
|
||||||
|
obj_evaluation = self.pool.get('hr_evaluation.evaluation')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
if evaluation_plan_id:
|
if evaluation_plan_id:
|
||||||
flag = False
|
flag = False
|
||||||
evaluation_plan = evaluation_plan_obj.browse(cr, uid, [evaluation_plan_id], context=context)[0]
|
evaluation_plan = evaluation_plan_obj.browse(cr, uid, [evaluation_plan_id], context=context)[0]
|
||||||
|
@ -131,9 +135,11 @@ class hr_employee(osv.osv):
|
||||||
return {'value': {'evaluation_date': evaluation_date}}
|
return {'value': {'evaluation_date': evaluation_date}}
|
||||||
|
|
||||||
def create(self, cr, uid, vals, context=None):
|
def create(self, cr, uid, vals, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
id = super(hr_employee, self).create(cr, uid, vals, context=context)
|
id = super(hr_employee, self).create(cr, uid, vals, context=context)
|
||||||
if vals.get('evaluation_plan_id', False):
|
if vals.get('evaluation_plan_id', False):
|
||||||
self.pool.get("hr_evaluation.evaluation").create(cr, uid, {'employee_id' : id, 'plan_id': vals['evaluation_plan_id']}, context=context)
|
obj_evaluation.create(cr, uid, {'employee_id' : id, 'plan_id': vals['evaluation_plan_id']}, context=context)
|
||||||
return id
|
return id
|
||||||
|
|
||||||
hr_employee()
|
hr_employee()
|
||||||
|
@ -173,10 +179,12 @@ class hr_evaluation(osv.osv):
|
||||||
'state' : lambda *a: 'draft',
|
'state' : lambda *a: 'draft',
|
||||||
}
|
}
|
||||||
|
|
||||||
def name_get(self, cr, uid, ids, context={}):
|
def name_get(self, cr, uid, ids, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
if not len(ids):
|
if not len(ids):
|
||||||
return []
|
return []
|
||||||
reads = self.browse(cr, uid, ids, context)
|
reads = self.browse(cr, uid, ids, context=context)
|
||||||
res = []
|
res = []
|
||||||
for record in reads:
|
for record in reads:
|
||||||
name = record.plan_id.name
|
name = record.plan_id.name
|
||||||
|
@ -185,6 +193,8 @@ class hr_evaluation(osv.osv):
|
||||||
|
|
||||||
def onchange_employee_id(self, cr, uid, ids, employee_id, context=None):
|
def onchange_employee_id(self, cr, uid, ids, employee_id, context=None):
|
||||||
employee_obj=self.pool.get('hr.employee')
|
employee_obj=self.pool.get('hr.employee')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
evaluation_plan_id=''
|
evaluation_plan_id=''
|
||||||
if employee_id:
|
if employee_id:
|
||||||
for employee in employee_obj.browse(cr, uid, [employee_id], context=context):
|
for employee in employee_obj.browse(cr, uid, [employee_id], context=context):
|
||||||
|
@ -194,8 +204,11 @@ class hr_evaluation(osv.osv):
|
||||||
return {'value': {'plan_id':evaluation_plan_id}}
|
return {'value': {'plan_id':evaluation_plan_id}}
|
||||||
|
|
||||||
def button_plan_in_progress(self, cr, uid, ids, context=None):
|
def button_plan_in_progress(self, cr, uid, ids, context=None):
|
||||||
|
hr_eval_inter_obj = self.pool.get('hr.evaluation.interview')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
apprai_id = []
|
apprai_id = []
|
||||||
for evaluation in self.browse(cr, uid, ids, context):
|
for evaluation in self.browse(cr, uid, ids, context=context):
|
||||||
wait = False
|
wait = False
|
||||||
for phase in evaluation.plan_id.phase_ids:
|
for phase in evaluation.plan_id.phase_ids:
|
||||||
childs = []
|
childs = []
|
||||||
|
@ -210,7 +223,6 @@ class hr_evaluation(osv.osv):
|
||||||
if not child.user_id:
|
if not child.user_id:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
hr_eval_inter_obj = self.pool.get('hr.evaluation.interview')
|
|
||||||
int_id = hr_eval_inter_obj.create(cr, uid, {
|
int_id = hr_eval_inter_obj.create(cr, uid, {
|
||||||
'evaluation_id': evaluation.id,
|
'evaluation_id': evaluation.id,
|
||||||
'survey_id': phase.survey_id.id,
|
'survey_id': phase.survey_id.id,
|
||||||
|
@ -235,18 +247,24 @@ class hr_evaluation(osv.osv):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def button_final_validation(self, cr, uid, ids, context=None):
|
def button_final_validation(self, cr, uid, ids, context=None):
|
||||||
self.write(cr, uid, ids, {'state':'progress'})
|
|
||||||
request_obj = self.pool.get('hr.evaluation.interview')
|
request_obj = self.pool.get('hr.evaluation.interview')
|
||||||
for id in self.browse(cr, uid ,ids,context=context):
|
if context is None:
|
||||||
if len(id.survey_request_ids) != len(request_obj.search(cr, uid, [('evaluation_id', '=', id.id),('state', '=', 'done')],context=context)):
|
context = {}
|
||||||
|
self.write(cr, uid, ids, {'state':'progress'}, context=context)
|
||||||
|
for id in self.browse(cr, uid ,ids, context=context):
|
||||||
|
if len(id.survey_request_ids) != len(request_obj.search(cr, uid, [('evaluation_id', '=', id.id),('state', '=', 'done')], context=context)):
|
||||||
raise osv.except_osv(_('Warning !'),_("You cannot change state, because some appraisal in waiting answer or draft state"))
|
raise osv.except_osv(_('Warning !'),_("You cannot change state, because some appraisal in waiting answer or draft state"))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def button_done(self,cr, uid, ids, context=None):
|
def button_done(self,cr, uid, ids, context=None):
|
||||||
self.write(cr,uid,ids,{'state':'done', 'date_close': time.strftime('%Y-%m-%d')}, context=context)
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
self.write(cr, uid, ids,{'state':'done', 'date_close': time.strftime('%Y-%m-%d')}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def button_cancel(self, cr, uid, ids, context=None):
|
def button_cancel(self, cr, uid, ids, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
self.write(cr, uid, ids,{'state':'cancel'}, context=context)
|
self.write(cr, uid, ids,{'state':'cancel'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -277,20 +295,22 @@ class hr_evaluation_interview(osv.osv):
|
||||||
}
|
}
|
||||||
|
|
||||||
def survey_req_waiting_answer(self, cr, uid, ids, context=None):
|
def survey_req_waiting_answer(self, cr, uid, ids, context=None):
|
||||||
self.write(cr, uid, ids, { 'state' : 'waiting_answer'})
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
self.write(cr, uid, ids, { 'state' : 'waiting_answer'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def survey_req_done(self, cr, uid, ids, context=None):
|
def survey_req_done(self, cr, uid, ids, context=None):
|
||||||
|
hr_eval_obj = self.pool.get('hr_evaluation.evaluation')
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
hr_eval_obj = self.pool.get('hr_evaluation.evaluation')
|
|
||||||
for id in self.browse(cr, uid, ids, context=context):
|
for id in self.browse(cr, uid, ids, context=context):
|
||||||
flag = False
|
flag = False
|
||||||
wating_id = 0
|
wating_id = 0
|
||||||
tot_done_req = 0
|
tot_done_req = 0
|
||||||
if not id.evaluation_id.id:
|
if not id.evaluation_id.id:
|
||||||
raise osv.except_osv(_('Warning !'),_("You cannot start evaluation without Evaluation."))
|
raise osv.except_osv(_('Warning !'),_("You cannot start evaluation without Evaluation."))
|
||||||
records = hr_eval_obj.browse(cr, uid, [id.evaluation_id.id],context=context)[0].survey_request_ids
|
records = hr_eval_obj.browse(cr, uid, [id.evaluation_id.id], context=context)[0].survey_request_ids
|
||||||
for child in records:
|
for child in records:
|
||||||
if child.state == "draft" :
|
if child.state == "draft" :
|
||||||
wating_id = child.id
|
wating_id = child.id
|
||||||
|
@ -300,16 +320,20 @@ class hr_evaluation_interview(osv.osv):
|
||||||
else :
|
else :
|
||||||
tot_done_req += 1
|
tot_done_req += 1
|
||||||
if not flag and wating_id:
|
if not flag and wating_id:
|
||||||
self.survey_req_waiting_answer(cr, uid, [wating_id], context)
|
self.survey_req_waiting_answer(cr, uid, [wating_id], context=context)
|
||||||
hr_eval_obj.write(cr, uid, [id.evaluation_id.id], {'progress': tot_done_req * 100 / len(records)}, context=context)
|
hr_eval_obj.write(cr, uid, [id.evaluation_id.id], {'progress': tot_done_req * 100 / len(records)}, context=context)
|
||||||
self.write(cr, uid, ids, { 'state': 'done'})
|
self.write(cr, uid, ids, { 'state': 'done'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def survey_req_draft(self, cr, uid, ids, context=None):
|
def survey_req_draft(self, cr, uid, ids, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
self.write(cr, uid, ids, { 'state': 'draft'}, context=context)
|
self.write(cr, uid, ids, { 'state': 'draft'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def survey_req_cancel(self, cr, uid, ids, context=None):
|
def survey_req_cancel(self, cr, uid, ids, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
self.write(cr, uid, ids, { 'state': 'cancel'}, context=context)
|
self.write(cr, uid, ids, { 'state': 'cancel'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -326,7 +350,7 @@ class hr_evaluation_interview(osv.osv):
|
||||||
"""
|
"""
|
||||||
if not context:
|
if not context:
|
||||||
context = {}
|
context = {}
|
||||||
record = self.browse(cr, uid, ids, context)
|
record = self.browse(cr, uid, ids, context=context)
|
||||||
record = record and record[0]
|
record = record and record[0]
|
||||||
context.update({'survey_id': record.survey_id.id, 'response_id': [record.response.id], 'response_no':0,})
|
context.update({'survey_id': record.survey_id.id, 'response_id': [record.response.id], 'response_no':0,})
|
||||||
value = self.pool.get("survey").action_print_survey(cr, uid, ids, context)
|
value = self.pool.get("survey").action_print_survey(cr, uid, ids, context)
|
||||||
|
|
|
@ -238,7 +238,7 @@
|
||||||
<filter icon="terp-go-week" string="7 Days" help="Evaluations to close within the next 7 days"
|
<filter icon="terp-go-week" string="7 Days" help="Evaluations to close within the next 7 days"
|
||||||
domain="[('date', '>=', (datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]" />
|
domain="[('date', '>=', (datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]" />
|
||||||
<filter icon="terp-gnome-cpu-frequency-applet+" string="Overpassed"
|
<filter icon="terp-gnome-cpu-frequency-applet+" string="Overpassed"
|
||||||
help="Evaluations that overpassed the deadline" domain="[('date','>=',(datetime.date.today()))]" />
|
help="Evaluations that overpassed the deadline" domain="[('date','>=',str(datetime.date.today()))]" />
|
||||||
<separator orientation="vertical"/>
|
<separator orientation="vertical"/>
|
||||||
<field name="employee_id" />
|
<field name="employee_id" />
|
||||||
<field name="plan_id" widget="selection" />
|
<field name="plan_id" widget="selection" />
|
||||||
|
|
|
@ -30,6 +30,8 @@ class hr_evaluation_reminder(osv.osv_memory):
|
||||||
|
|
||||||
def send_mail(self, cr, uid, ids, context=None):
|
def send_mail(self, cr, uid, ids, context=None):
|
||||||
hr_evaluation_obj = self.pool.get('hr_evaluation.evaluation')
|
hr_evaluation_obj = self.pool.get('hr_evaluation.evaluation')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
evaluation_data = self.read(cr, uid, ids, context=context)[0]
|
evaluation_data = self.read(cr, uid, ids, context=context)[0]
|
||||||
for waiting_id in hr_evaluation_obj.browse(cr, uid, evaluation_data['evaluation_id'], context=context).survey_request_ids:
|
for waiting_id in hr_evaluation_obj.browse(cr, uid, evaluation_data['evaluation_id'], context=context).survey_request_ids:
|
||||||
if waiting_id.state == "waiting_answer" and waiting_id.user_to_review_id.work_email :
|
if waiting_id.state == "waiting_answer" and waiting_id.user_to_review_id.work_email :
|
||||||
|
|
|
@ -25,7 +25,9 @@ from osv import fields, osv
|
||||||
from tools.translate import _
|
from tools.translate import _
|
||||||
|
|
||||||
def _employee_get(obj, cr, uid, context=None):
|
def _employee_get(obj, cr, uid, context=None):
|
||||||
ids = obj.pool.get('hr.employee').search(cr, uid, [('user_id', '=', uid)])
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
ids = obj.pool.get('hr.employee').search(cr, uid, [('user_id', '=', uid)], context=context)
|
||||||
if ids:
|
if ids:
|
||||||
return ids[0]
|
return ids[0]
|
||||||
return False
|
return False
|
||||||
|
@ -33,21 +35,27 @@ def _employee_get(obj, cr, uid, context=None):
|
||||||
class hr_expense_expense(osv.osv):
|
class hr_expense_expense(osv.osv):
|
||||||
|
|
||||||
def copy(self, cr, uid, id, default=None, context=None):
|
def copy(self, cr, uid, id, default=None, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
if not default: default = {}
|
if not default: default = {}
|
||||||
default.update({'invoice_id': False, 'date_confirm': False, 'date_valid': False, 'user_valid': False})
|
default.update({'invoice_id': False, 'date_confirm': False, 'date_valid': False, 'user_valid': False})
|
||||||
return super(hr_expense_expense, self).copy(cr, uid, id, default, context)
|
return super(hr_expense_expense, self).copy(cr, uid, id, default, context=context)
|
||||||
|
|
||||||
def _amount(self, cr, uid, ids, field_name, arg, context=None):
|
def _amount(self, cr, uid, ids, field_name, arg, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
cr.execute("SELECT s.id,COALESCE(SUM(l.unit_amount*l.unit_quantity),0) AS amount FROM hr_expense_expense s LEFT OUTER JOIN hr_expense_line l ON (s.id=l.expense_id) WHERE s.id IN %s GROUP BY s.id ", (tuple(ids),))
|
cr.execute("SELECT s.id,COALESCE(SUM(l.unit_amount*l.unit_quantity),0) AS amount FROM hr_expense_expense s LEFT OUTER JOIN hr_expense_line l ON (s.id=l.expense_id) WHERE s.id IN %s GROUP BY s.id ", (tuple(ids),))
|
||||||
res = dict(cr.fetchall())
|
res = dict(cr.fetchall())
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def _get_currency(self, cr, uid, context=None):
|
def _get_currency(self, cr, uid, context=None):
|
||||||
user = self.pool.get('res.users').browse(cr, uid, [uid])[0]
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
user = self.pool.get('res.users').browse(cr, uid, [uid], context=context)[0]
|
||||||
if user.company_id:
|
if user.company_id:
|
||||||
return user.company_id.currency_id.id
|
return user.company_id.currency_id.id
|
||||||
else:
|
else:
|
||||||
return self.pool.get('res.currency').search(cr, uid, [('rate','=',1.0)])[0]
|
return self.pool.get('res.currency').search(cr, uid, [('rate','=',1.0)], context=context)[0]
|
||||||
|
|
||||||
_name = "hr.expense.expense"
|
_name = "hr.expense.expense"
|
||||||
_description = "Expense"
|
_description = "Expense"
|
||||||
|
@ -115,6 +123,8 @@ class hr_expense_expense(osv.osv):
|
||||||
def action_invoice_create(self, cr, uid, ids):
|
def action_invoice_create(self, cr, uid, ids):
|
||||||
res = False
|
res = False
|
||||||
invoice_obj = self.pool.get('account.invoice')
|
invoice_obj = self.pool.get('account.invoice')
|
||||||
|
property_obj = self.pool.get('ir.property')
|
||||||
|
sequence_obj = self.pool.get('ir.sequence')
|
||||||
for exp in self.browse(cr, uid, ids):
|
for exp in self.browse(cr, uid, ids):
|
||||||
lines = []
|
lines = []
|
||||||
for l in exp.line_ids:
|
for l in exp.line_ids:
|
||||||
|
@ -125,7 +135,7 @@ class hr_expense_expense(osv.osv):
|
||||||
acc = l.product_id.categ_id.property_account_expense_categ
|
acc = l.product_id.categ_id.property_account_expense_categ
|
||||||
tax_id = [x.id for x in l.product_id.supplier_taxes_id]
|
tax_id = [x.id for x in l.product_id.supplier_taxes_id]
|
||||||
else:
|
else:
|
||||||
acc = self.pool.get('ir.property').get(cr, uid, 'property_account_expense_categ', 'product.category')
|
acc = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category')
|
||||||
if not acc:
|
if not acc:
|
||||||
raise osv.except_osv(_('Error !'), _('Please configure Default Expanse account for Product purchase, `property_account_expense_categ`'))
|
raise osv.except_osv(_('Error !'), _('Please configure Default Expanse account for Product purchase, `property_account_expense_categ`'))
|
||||||
|
|
||||||
|
@ -145,7 +155,7 @@ class hr_expense_expense(osv.osv):
|
||||||
payment_term_id = exp.employee_id.address_id.partner_id.property_payment_term.id
|
payment_term_id = exp.employee_id.address_id.partner_id.property_payment_term.id
|
||||||
inv = {
|
inv = {
|
||||||
'name': exp.name,
|
'name': exp.name,
|
||||||
'reference': self.pool.get('ir.sequence').get(cr, uid, 'hr.expense.invoice'),
|
'reference': sequence_obj.get(cr, uid, 'hr.expense.invoice'),
|
||||||
'account_id': acc,
|
'account_id': acc,
|
||||||
'type': 'in_invoice',
|
'type': 'in_invoice',
|
||||||
'partner_id': exp.employee_id.address_id.partner_id.id,
|
'partner_id': exp.employee_id.address_id.partner_id.id,
|
||||||
|
@ -184,6 +194,8 @@ class hr_expense_line(osv.osv):
|
||||||
_description = "Expense Line"
|
_description = "Expense Line"
|
||||||
|
|
||||||
def _amount(self, cr, uid, ids, field_name, arg, context=None):
|
def _amount(self, cr, uid, ids, field_name, arg, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
if not len(ids):
|
if not len(ids):
|
||||||
return {}
|
return {}
|
||||||
cr.execute("SELECT l.id,COALESCE(SUM(l.unit_amount*l.unit_quantity),0) AS amount FROM hr_expense_line l WHERE id IN %s GROUP BY l.id ",(tuple(ids),))
|
cr.execute("SELECT l.id,COALESCE(SUM(l.unit_amount*l.unit_quantity),0) AS amount FROM hr_expense_line l WHERE id IN %s GROUP BY l.id ",(tuple(ids),))
|
||||||
|
@ -215,16 +227,16 @@ class hr_expense_line(osv.osv):
|
||||||
context = {}
|
context = {}
|
||||||
v = {}
|
v = {}
|
||||||
if product_id:
|
if product_id:
|
||||||
product=self.pool.get('product.product').browse(cr, uid, product_id, context=context)
|
product = self.pool.get('product.product').browse(cr, uid, product_id, context=context)
|
||||||
v['name']=product.name
|
v['name'] = product.name
|
||||||
# Compute based on pricetype of employee company
|
# Compute based on pricetype of employee company
|
||||||
pricetype_id = self.pool.get('hr.employee').browse(cr, uid, employee_id).user_id.company_id.property_valuation_price_type.id
|
pricetype_id = self.pool.get('hr.employee').browse(cr, uid, employee_id, context=context).user_id.company_id.property_valuation_price_type.id
|
||||||
context['currency_id']=self.pool.get('hr.employee').browse(cr, uid, employee_id).user_id.company_id.currency_id.id
|
context['currency_id'] = self.pool.get('hr.employee').browse(cr, uid, employee_id, context=context).user_id.company_id.currency_id.id
|
||||||
pricetype=self.pool.get('product.price.type').browse(cr, uid, pricetype_id)
|
pricetype = self.pool.get('product.price.type').browse(cr, uid, pricetype_id, context=context)
|
||||||
amount_unit=product.price_get(pricetype.field, context)[product.id]
|
amount_unit = product.price_get(pricetype.field, context)[product.id]
|
||||||
v['unit_amount']=amount_unit
|
v['unit_amount'] = amount_unit
|
||||||
if not uom_id:
|
if not uom_id:
|
||||||
v['uom_id']=product.uom_id.id
|
v['uom_id'] = product.uom_id.id
|
||||||
return {'value': v}
|
return {'value': v}
|
||||||
|
|
||||||
hr_expense_line()
|
hr_expense_line()
|
||||||
|
|
|
@ -33,8 +33,10 @@ class hr_holidays_status(osv.osv):
|
||||||
_description = "Leave Type"
|
_description = "Leave Type"
|
||||||
|
|
||||||
def get_days_cat(self, cr, uid, ids, category_id, return_false, context=None):
|
def get_days_cat(self, cr, uid, ids, category_id, return_false, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
res = {}
|
res = {}
|
||||||
for record in self.browse(cr, uid, ids, context):
|
for record in self.browse(cr, uid, ids, context=context):
|
||||||
res[record.id] = {}
|
res[record.id] = {}
|
||||||
max_leaves = leaves_taken = 0
|
max_leaves = leaves_taken = 0
|
||||||
if not return_false:
|
if not return_false:
|
||||||
|
@ -50,6 +52,8 @@ class hr_holidays_status(osv.osv):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def get_days(self, cr, uid, ids, employee_id, return_false, context=None):
|
def get_days(self, cr, uid, ids, employee_id, return_false, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
res = {}
|
res = {}
|
||||||
for record in self.browse(cr, uid, ids, context=context):
|
for record in self.browse(cr, uid, ids, context=context):
|
||||||
res[record.id] = {}
|
res[record.id] = {}
|
||||||
|
@ -67,16 +71,18 @@ class hr_holidays_status(osv.osv):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def _user_left_days(self, cr, uid, ids, name, args, context=None):
|
def _user_left_days(self, cr, uid, ids, name, args, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
return_false = False
|
return_false = False
|
||||||
employee_id = False
|
employee_id = False
|
||||||
res = {}
|
res = {}
|
||||||
|
|
||||||
if context and context.has_key('employee_id'):
|
if context and context.has_key('employee_id'):
|
||||||
if not context['employee_id']:
|
if not context['employee_id']:
|
||||||
return_false = True
|
return_false = True
|
||||||
employee_id = context['employee_id']
|
employee_id = context['employee_id']
|
||||||
else:
|
else:
|
||||||
employee_ids = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)])
|
employee_ids = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)], context=context)
|
||||||
if employee_ids:
|
if employee_ids:
|
||||||
employee_id = employee_ids[0]
|
employee_id = employee_ids[0]
|
||||||
else:
|
else:
|
||||||
|
@ -112,7 +118,9 @@ class hr_holidays(osv.osv):
|
||||||
_order = "type desc, date_from asc"
|
_order = "type desc, date_from asc"
|
||||||
|
|
||||||
def _employee_get(obj, cr, uid, context=None):
|
def _employee_get(obj, cr, uid, context=None):
|
||||||
ids = obj.pool.get('hr.employee').search(cr, uid, [('user_id', '=', uid)])
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
ids = obj.pool.get('hr.employee').search(cr, uid, [('user_id', '=', uid)], context=context)
|
||||||
if ids:
|
if ids:
|
||||||
return ids[0]
|
return ids[0]
|
||||||
return False
|
return False
|
||||||
|
@ -152,13 +160,17 @@ class hr_holidays(osv.osv):
|
||||||
|
|
||||||
def _create_resource_leave(self, cr, uid, vals, context=None):
|
def _create_resource_leave(self, cr, uid, vals, context=None):
|
||||||
'''This method will create entry in resource calendar leave object at the time of holidays validated '''
|
'''This method will create entry in resource calendar leave object at the time of holidays validated '''
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
obj_res_leave = self.pool.get('resource.calendar.leaves')
|
obj_res_leave = self.pool.get('resource.calendar.leaves')
|
||||||
return obj_res_leave.create(cr, uid, vals)
|
return obj_res_leave.create(cr, uid, vals, context=context)
|
||||||
|
|
||||||
def _remove_resouce_leave(self, cr, uid, ids, context=None):
|
def _remove_resouce_leave(self, cr, uid, ids, context=None):
|
||||||
'''This method will create entry in resource calendar leave object at the time of holidays cancel/removed'''
|
'''This method will create entry in resource calendar leave object at the time of holidays cancel/removed'''
|
||||||
obj_res_leave = self.pool.get('resource.calendar.leaves')
|
obj_res_leave = self.pool.get('resource.calendar.leaves')
|
||||||
leave_ids = obj_res_leave.search(cr, uid, [('holiday_id', 'in', ids)])
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
leave_ids = obj_res_leave.search(cr, uid, [('holiday_id', 'in', ids)], context=context)
|
||||||
return obj_res_leave.unlink(cr, uid, leave_ids)
|
return obj_res_leave.unlink(cr, uid, leave_ids)
|
||||||
|
|
||||||
def create(self, cr, uid, vals, context=None):
|
def create(self, cr, uid, vals, context=None):
|
||||||
|
@ -231,6 +243,8 @@ class hr_holidays(osv.osv):
|
||||||
_constraints = [(_check_date, 'Start date should not be larger than end date!\nNumber of Days should be greater than 1!', ['number_of_days_temp'])]
|
_constraints = [(_check_date, 'Start date should not be larger than end date!\nNumber of Days should be greater than 1!', ['number_of_days_temp'])]
|
||||||
|
|
||||||
def unlink(self, cr, uid, ids, context=None):
|
def unlink(self, cr, uid, ids, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
self._update_user_holidays(cr, uid, ids)
|
self._update_user_holidays(cr, uid, ids)
|
||||||
self._remove_resouce_leave(cr, uid, ids, context=context)
|
self._remove_resouce_leave(cr, uid, ids, context=context)
|
||||||
return super(hr_holidays, self).unlink(cr, uid, ids, context)
|
return super(hr_holidays, self).unlink(cr, uid, ids, context)
|
||||||
|
@ -252,9 +266,11 @@ class hr_holidays(osv.osv):
|
||||||
return self.onchange_date_from(cr, uid, ids, date_to, date_from)
|
return self.onchange_date_from(cr, uid, ids, date_to, date_from)
|
||||||
|
|
||||||
def onchange_sec_id(self, cr, uid, ids, status, context=None):
|
def onchange_sec_id(self, cr, uid, ids, status, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
warning = {}
|
warning = {}
|
||||||
if status:
|
if status:
|
||||||
brows_obj = self.pool.get('hr.holidays.status').browse(cr, uid, [status])[0]
|
brows_obj = self.pool.get('hr.holidays.status').browse(cr, uid, [status], context=context)[0]
|
||||||
if brows_obj.categ_id and brows_obj.categ_id.section_id and not brows_obj.categ_id.section_id.allow_unlink:
|
if brows_obj.categ_id and brows_obj.categ_id.section_id and not brows_obj.categ_id.section_id.allow_unlink:
|
||||||
warning = {
|
warning = {
|
||||||
'title': "Warning for ",
|
'title': "Warning for ",
|
||||||
|
@ -369,6 +385,9 @@ class hr_holidays(osv.osv):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def check_holidays(self, cr, uid, ids):
|
def check_holidays(self, cr, uid, ids):
|
||||||
|
holi_status_obj = self.pool.get('hr.holidays.status')
|
||||||
|
emp_obj = self.pool.get('hr.employee')
|
||||||
|
meeting_obj = self.pool.get('crm.meeting')
|
||||||
for record in self.browse(cr, uid, ids):
|
for record in self.browse(cr, uid, ids):
|
||||||
if not record.number_of_days:
|
if not record.number_of_days:
|
||||||
raise osv.except_osv(_('Warning!'), _('Wrong leave definition.'))
|
raise osv.except_osv(_('Warning!'), _('Wrong leave definition.'))
|
||||||
|
@ -376,14 +395,14 @@ class hr_holidays(osv.osv):
|
||||||
leave_asked = record.number_of_days
|
leave_asked = record.number_of_days
|
||||||
if leave_asked < 0.00:
|
if leave_asked < 0.00:
|
||||||
if not record.holiday_status_id.limit:
|
if not record.holiday_status_id.limit:
|
||||||
leaves_rest = self.pool.get('hr.holidays.status').get_days(cr, uid, [record.holiday_status_id.id], record.employee_id.id, False)[record.holiday_status_id.id]['remaining_leaves']
|
leaves_rest = holi_status_obj.get_days(cr, uid, [record.holiday_status_id.id], record.employee_id.id, False)[record.holiday_status_id.id]['remaining_leaves']
|
||||||
if leaves_rest < -(leave_asked):
|
if leaves_rest < -(leave_asked):
|
||||||
raise osv.except_osv(_('Warning!'),_('You Cannot Validate leaves while available leaves are less than asked leaves.'))
|
raise osv.except_osv(_('Warning!'),_('You Cannot Validate leaves while available leaves are less than asked leaves.'))
|
||||||
elif record.holiday_type == 'category' and record.category_id:
|
elif record.holiday_type == 'category' and record.category_id:
|
||||||
leave_asked = record.number_of_days
|
leave_asked = record.number_of_days
|
||||||
if leave_asked < 0.00:
|
if leave_asked < 0.00:
|
||||||
if not record.holiday_status_id.limit:
|
if not record.holiday_status_id.limit:
|
||||||
leaves_rest = self.pool.get('hr.holidays.status').get_days_cat(cr, uid, [record.holiday_status_id.id], record.category_id.id, False)[record.holiday_status_id.id]['remaining_leaves']
|
leaves_rest = holi_status_obj.get_days_cat(cr, uid, [record.holiday_status_id.id], record.category_id.id, False)[record.holiday_status_id.id]['remaining_leaves']
|
||||||
if leaves_rest < -(leave_asked):
|
if leaves_rest < -(leave_asked):
|
||||||
raise osv.except_osv(_('Warning!'),_('You Cannot Validate leaves while available leaves are less than asked leaves.'))
|
raise osv.except_osv(_('Warning!'),_('You Cannot Validate leaves while available leaves are less than asked leaves.'))
|
||||||
else:# This condition will never meet!!
|
else:# This condition will never meet!!
|
||||||
|
@ -401,10 +420,10 @@ class hr_holidays(osv.osv):
|
||||||
'allocation_type': record.allocation_type,
|
'allocation_type': record.allocation_type,
|
||||||
'parent_id': record.id,
|
'parent_id': record.id,
|
||||||
}
|
}
|
||||||
employee_ids = self.pool.get('hr.employee').search(cr, uid, [])
|
employee_ids = emp_obj.search(cr, uid, [])
|
||||||
for employee in employee_ids:
|
for employee in employee_ids:
|
||||||
vals['employee_id'] = employee
|
vals['employee_id'] = employee
|
||||||
user_id = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)])
|
user_id = emp_obj.search(cr, uid, [('user_id','=',uid)])
|
||||||
if user_id:
|
if user_id:
|
||||||
vals['user_id'] = user_id[0]
|
vals['user_id'] = user_id[0]
|
||||||
holiday_ids.append(self.create(cr, uid, vals, context=None))
|
holiday_ids.append(self.create(cr, uid, vals, context=None))
|
||||||
|
@ -435,7 +454,7 @@ class hr_holidays(osv.osv):
|
||||||
'user_id' : record.user_id.id,
|
'user_id' : record.user_id.id,
|
||||||
'date' : record.date_from,
|
'date' : record.date_from,
|
||||||
}
|
}
|
||||||
case_id = self.pool.get('crm.meeting').create(cr, uid, vals)
|
case_id = meeting_obj.create(cr, uid, vals)
|
||||||
self.write(cr, uid, ids, {'case_id': case_id})
|
self.write(cr, uid, ids, {'case_id': case_id})
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -41,7 +41,7 @@ class hr_holidays_summary_dept(osv.osv_memory):
|
||||||
def print_report(self, cr, uid, ids, context=None):
|
def print_report(self, cr, uid, ids, context=None):
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
data = self.read(cr, uid, ids, [])[0]
|
data = self.read(cr, uid, ids, [], context=context)[0]
|
||||||
if not data['depts']:
|
if not data['depts']:
|
||||||
raise osv.except_osv(_('Error'), _('You have to select at least 1 Department. And try again'))
|
raise osv.except_osv(_('Error'), _('You have to select at least 1 Department. And try again'))
|
||||||
datas = {
|
datas = {
|
||||||
|
|
|
@ -40,7 +40,7 @@ class hr_holidays_summary_employee(osv.osv_memory):
|
||||||
def print_report(self, cr, uid, ids, context=None):
|
def print_report(self, cr, uid, ids, context=None):
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
data = self.read(cr, uid, ids, [])[0]
|
data = self.read(cr, uid, ids, [], context=context)[0]
|
||||||
data['emp'] = context['active_ids']
|
data['emp'] = context['active_ids']
|
||||||
datas = {
|
datas = {
|
||||||
'ids': [],
|
'ids': [],
|
||||||
|
|
|
@ -21,15 +21,14 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
import time
|
import time
|
||||||
|
from datetime import date, datetime, timedelta
|
||||||
import netsvc
|
import netsvc
|
||||||
from osv import osv
|
|
||||||
from osv import fields
|
from osv import fields, osv
|
||||||
from tools import config
|
from tools import config
|
||||||
from tools.translate import _
|
from tools.translate import _
|
||||||
|
|
||||||
from datetime import date
|
|
||||||
from datetime import datetime
|
|
||||||
from datetime import timedelta
|
|
||||||
|
|
||||||
def prev_bounds(cdate=False):
|
def prev_bounds(cdate=False):
|
||||||
when = date.fromtimestamp(time.mktime(time.strptime(cdate,"%Y-%m-%d")))
|
when = date.fromtimestamp(time.mktime(time.strptime(cdate,"%Y-%m-%d")))
|
||||||
|
@ -114,12 +113,14 @@ class hr_payroll_structure(osv.osv):
|
||||||
|
|
||||||
@return: returns a id of newly created record
|
@return: returns a id of newly created record
|
||||||
"""
|
"""
|
||||||
code = self.browse(cr, uid, id).code
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
code = self.browse(cr, uid, id, context=context).code
|
||||||
default = {
|
default = {
|
||||||
'code':code+"(copy)",
|
'code':code+"(copy)",
|
||||||
'company_id':self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
|
'company_id':self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
|
||||||
}
|
}
|
||||||
res_id = super(hr_payroll_structure, self).copy(cr, uid, id, default, context)
|
res_id = super(hr_payroll_structure, self).copy(cr, uid, id, default, context=context)
|
||||||
return res_id
|
return res_id
|
||||||
|
|
||||||
hr_payroll_structure()
|
hr_payroll_structure()
|
||||||
|
@ -153,13 +154,13 @@ class payroll_register(osv.osv):
|
||||||
_name = 'hr.payroll.register'
|
_name = 'hr.payroll.register'
|
||||||
_description = 'Payroll Register'
|
_description = 'Payroll Register'
|
||||||
|
|
||||||
def _calculate(self, cr, uid, ids, field_names, arg, context):
|
def _calculate(self, cr, uid, ids, field_names, arg, context=None):
|
||||||
res = {}
|
res = {}
|
||||||
allounce = 0.0
|
allounce = 0.0
|
||||||
deduction = 0.0
|
deduction = 0.0
|
||||||
net = 0.0
|
net = 0.0
|
||||||
grows = 0.0
|
grows = 0.0
|
||||||
for register in self.browse(cr, uid, ids, context):
|
for register in self.browse(cr, uid, ids, context=context):
|
||||||
for slip in register.line_ids:
|
for slip in register.line_ids:
|
||||||
allounce += slip.allounce
|
allounce += slip.allounce
|
||||||
deduction += slip.deduction
|
deduction += slip.deduction
|
||||||
|
@ -210,21 +211,23 @@ class payroll_register(osv.osv):
|
||||||
context=context).company_id.id,
|
context=context).company_id.id,
|
||||||
}
|
}
|
||||||
|
|
||||||
def compute_sheet(self, cr, uid, ids, context={}):
|
def compute_sheet(self, cr, uid, ids, context=None):
|
||||||
emp_pool = self.pool.get('hr.employee')
|
emp_pool = self.pool.get('hr.employee')
|
||||||
slip_pool = self.pool.get('hr.payslip')
|
slip_pool = self.pool.get('hr.payslip')
|
||||||
func_pool = self.pool.get('hr.payroll.structure')
|
func_pool = self.pool.get('hr.payroll.structure')
|
||||||
slip_line_pool = self.pool.get('hr.payslip.line')
|
slip_line_pool = self.pool.get('hr.payslip.line')
|
||||||
wf_service = netsvc.LocalService("workflow")
|
wf_service = netsvc.LocalService("workflow")
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
|
||||||
vals = self.browse(cr, uid, ids)[0]
|
vals = self.browse(cr, uid, ids, context=context)[0]
|
||||||
|
|
||||||
emp_ids = emp_pool.search(cr, uid, [])
|
emp_ids = emp_pool.search(cr, uid, [], context=context)
|
||||||
|
|
||||||
for emp in emp_pool.browse(cr, uid, emp_ids):
|
for emp in emp_pool.browse(cr, uid, emp_ids, context=context):
|
||||||
old_slips = slip_pool.search(cr, uid, [('employee_id','=', emp.id), ('date','=',vals.date)])
|
old_slips = slip_pool.search(cr, uid, [('employee_id','=', emp.id), ('date','=',vals.date)], context=context)
|
||||||
if old_slips:
|
if old_slips:
|
||||||
slip_pool.write(cr, uid, old_slips, {'register_id':ids[0]})
|
slip_pool.write(cr, uid, old_slips, {'register_id':ids[0]}, context=context)
|
||||||
for sid in old_slips:
|
for sid in old_slips:
|
||||||
wf_service.trg_validate(uid, 'hr.payslip', sid, 'compute_sheet', cr)
|
wf_service.trg_validate(uid, 'hr.payslip', sid, 'compute_sheet', cr)
|
||||||
else:
|
else:
|
||||||
|
@ -237,48 +240,54 @@ class payroll_register(osv.osv):
|
||||||
'journal_id':vals.journal_id.id,
|
'journal_id':vals.journal_id.id,
|
||||||
'bank_journal_id':vals.bank_journal_id.id
|
'bank_journal_id':vals.bank_journal_id.id
|
||||||
}
|
}
|
||||||
slip_id = slip_pool.create(cr, uid, res)
|
slip_id = slip_pool.create(cr, uid, res, context=context)
|
||||||
wf_service.trg_validate(uid, 'hr.payslip', slip_id, 'compute_sheet', cr)
|
wf_service.trg_validate(uid, 'hr.payslip', slip_id, 'compute_sheet', cr)
|
||||||
|
|
||||||
number = self.pool.get('ir.sequence').get(cr, uid, 'salary.register')
|
number = self.pool.get('ir.sequence').get(cr, uid, 'salary.register')
|
||||||
self.write(cr, uid, ids, {'state':'draft', 'number':number})
|
self.write(cr, uid, ids, {'state':'draft', 'number':number}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def verify_sheet(self, cr, uid, ids, context={}):
|
def verify_sheet(self, cr, uid, ids, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
slip_pool = self.pool.get('hr.payslip')
|
slip_pool = self.pool.get('hr.payslip')
|
||||||
|
|
||||||
for id in ids:
|
for id in ids:
|
||||||
sids = slip_pool.search(cr, uid, [('register_id','=',id)])
|
sids = slip_pool.search(cr, uid, [('register_id','=',id)], context=context)
|
||||||
wf_service = netsvc.LocalService("workflow")
|
wf_service = netsvc.LocalService("workflow")
|
||||||
for sid in sids:
|
for sid in sids:
|
||||||
wf_service.trg_validate(uid, 'hr.payslip', sid, 'verify_sheet', cr)
|
wf_service.trg_validate(uid, 'hr.payslip', sid, 'verify_sheet', cr)
|
||||||
|
|
||||||
self.write(cr, uid, ids, {'state':'hr_check'})
|
self.write(cr, uid, ids, {'state':'hr_check'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def final_verify_sheet(self, cr, uid, ids, context={}):
|
def final_verify_sheet(self, cr, uid, ids, context=None):
|
||||||
slip_pool = self.pool.get('hr.payslip')
|
slip_pool = self.pool.get('hr.payslip')
|
||||||
advice_pool = self.pool.get('hr.payroll.advice')
|
advice_pool = self.pool.get('hr.payroll.advice')
|
||||||
advice_line_pool = self.pool.get('hr.payroll.advice.line')
|
advice_line_pool = self.pool.get('hr.payroll.advice.line')
|
||||||
|
sequence_pool = self.pool.get('ir.sequence')
|
||||||
|
users_pool = self.pool.get('res.users')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
|
||||||
for id in ids:
|
for id in ids:
|
||||||
sids = slip_pool.search(cr, uid, [('register_id','=',id), ('state','=','hr_check')])
|
sids = slip_pool.search(cr, uid, [('register_id','=',id), ('state','=','hr_check')], context=context)
|
||||||
wf_service = netsvc.LocalService("workflow")
|
wf_service = netsvc.LocalService("workflow")
|
||||||
for sid in sids:
|
for sid in sids:
|
||||||
wf_service.trg_validate(uid, 'hr.payslip', sid, 'final_verify_sheet', cr)
|
wf_service.trg_validate(uid, 'hr.payslip', sid, 'final_verify_sheet', cr)
|
||||||
|
|
||||||
for reg in self.browse(cr, uid, ids):
|
for reg in self.browse(cr, uid, ids, context=context):
|
||||||
accs = {}
|
accs = {}
|
||||||
for slip in reg.line_ids:
|
for slip in reg.line_ids:
|
||||||
pid = False
|
pid = False
|
||||||
if accs.get(slip.employee_id.property_bank_account.code, False) == False:
|
if accs.get(slip.employee_id.property_bank_account.code, False) == False:
|
||||||
advice = {
|
advice = {
|
||||||
'name': 'Payment Advice from %s / Bank Account %s' % (self.pool.get('res.users').browse(cr, uid, uid).company_id.name, slip.employee_id.property_bank_account.name),
|
'name': 'Payment Advice from %s / Bank Account %s' % (users_pool.browse(cr, uid, uid, context=context).company_id.name, slip.employee_id.property_bank_account.name),
|
||||||
'number': self.pool.get('ir.sequence').get(cr, uid, 'payment.advice'),
|
'number': sequence_pool.get(cr, uid, 'payment.advice'),
|
||||||
'register_id':reg.id,
|
'register_id':reg.id,
|
||||||
'account_id':slip.employee_id.property_bank_account.id
|
'account_id':slip.employee_id.property_bank_account.id
|
||||||
}
|
}
|
||||||
pid = advice_pool.create(cr, uid, advice)
|
pid = advice_pool.create(cr, uid, advice, context=context)
|
||||||
accs[slip.employee_id.property_bank_account.code] = pid
|
accs[slip.employee_id.property_bank_account.code] = pid
|
||||||
else:
|
else:
|
||||||
pid = accs[slip.employee_id.property_bank_account.code]
|
pid = accs[slip.employee_id.property_bank_account.code]
|
||||||
|
@ -290,21 +299,21 @@ class payroll_register(osv.osv):
|
||||||
'amount':slip.other_pay + slip.net,
|
'amount':slip.other_pay + slip.net,
|
||||||
'bysal':slip.net
|
'bysal':slip.net
|
||||||
}
|
}
|
||||||
id = advice_line_pool.create(cr, uid, pline)
|
id = advice_line_pool.create(cr, uid, pline, context=context)
|
||||||
|
|
||||||
#, 'advice_ids':[(6, 0, [pid])]
|
#, 'advice_ids':[(6, 0, [pid])]
|
||||||
self.write(cr, uid, ids, {'state':'confirm'})
|
self.write(cr, uid, ids, {'state':'confirm'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def process_sheet(self, cr, uid, ids, context={}):
|
def process_sheet(self, cr, uid, ids, context=None):
|
||||||
slip_pool = self.pool.get('hr.payslip')
|
slip_pool = self.pool.get('hr.payslip')
|
||||||
for id in ids:
|
for id in ids:
|
||||||
sids = slip_pool.search(cr, uid, [('register_id','=',id), ('state','=','confirm')])
|
sids = slip_pool.search(cr, uid, [('register_id','=',id), ('state','=','confirm')], context=context)
|
||||||
wf_service = netsvc.LocalService("workflow")
|
wf_service = netsvc.LocalService("workflow")
|
||||||
for sid in sids:
|
for sid in sids:
|
||||||
wf_service.trg_validate(uid, 'hr.payslip', sid, 'process_sheet', cr)
|
wf_service.trg_validate(uid, 'hr.payslip', sid, 'process_sheet', cr)
|
||||||
|
|
||||||
self.write(cr, uid, ids, {'state':'done'})
|
self.write(cr, uid, ids, {'state':'done'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
payroll_register()
|
payroll_register()
|
||||||
|
@ -341,16 +350,22 @@ class payroll_advice(osv.osv):
|
||||||
context=context).company_id.id,
|
context=context).company_id.id,
|
||||||
}
|
}
|
||||||
|
|
||||||
def confirm_sheet(self, cr, uid, ids, context={}):
|
def confirm_sheet(self, cr, uid, ids, context=None):
|
||||||
self.write(cr, uid, ids, {'state':'confirm'})
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
self.write(cr, uid, ids, {'state':'confirm'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def set_to_draft(self, cr, uid, ids, context={}):
|
def set_to_draft(self, cr, uid, ids, context=None):
|
||||||
self.write(cr, uid, ids, {'state':'draft'})
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
self.write(cr, uid, ids, {'state':'draft'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def cancel_sheet(self, cr, uid, ids, context={}):
|
def cancel_sheet(self, cr, uid, ids, context=None):
|
||||||
self.write(cr, uid, ids, {'state':'cancel'})
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
self.write(cr, uid, ids, {'state':'cancel'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
payroll_advice()
|
payroll_advice()
|
||||||
|
@ -374,15 +389,17 @@ class payroll_advice_line(osv.osv):
|
||||||
'flag': lambda *a: 'C',
|
'flag': lambda *a: 'C',
|
||||||
}
|
}
|
||||||
|
|
||||||
def onchange_employee_id(self, cr, uid, ids, ddate, employee_id, context={}):
|
def onchange_employee_id(self, cr, uid, ids, ddate, employee_id, context=None):
|
||||||
vals = {}
|
vals = {}
|
||||||
slip_pool = self.pool.get('hr.payslip')
|
slip_pool = self.pool.get('hr.payslip')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
if employee_id:
|
if employee_id:
|
||||||
dates = prev_bounds(ddate)
|
dates = prev_bounds(ddate)
|
||||||
sids = False
|
sids = False
|
||||||
sids = slip_pool.search(cr, uid, [('paid','=',False),('state','=','confirm'),('date','>=',dates[0]), ('employee_id','=',employee_id), ('date','<=',dates[1])])
|
sids = slip_pool.search(cr, uid, [('paid','=',False),('state','=','confirm'),('date','>=',dates[0]), ('employee_id','=',employee_id), ('date','<=',dates[1])], context=context)
|
||||||
if sids:
|
if sids:
|
||||||
slip = slip_pool.browse(cr, uid, sids[0])
|
slip = slip_pool.browse(cr, uid, sids[0], context=context)
|
||||||
vals['name'] = slip.employee_id.otherid
|
vals['name'] = slip.employee_id.otherid
|
||||||
vals['amount'] = slip.net + slip.other_pay
|
vals['amount'] = slip.net + slip.other_pay
|
||||||
vals['bysal'] = slip.net
|
vals['bysal'] = slip.net
|
||||||
|
@ -398,24 +415,26 @@ class contrib_register(osv.osv):
|
||||||
_name = 'hr.contibution.register'
|
_name = 'hr.contibution.register'
|
||||||
_description = 'Contribution Register'
|
_description = 'Contribution Register'
|
||||||
|
|
||||||
def _total_contrib(self, cr, uid, ids, field_names, arg, context={}):
|
def _total_contrib(self, cr, uid, ids, field_names, arg, context=None):
|
||||||
line_pool = self.pool.get('hr.contibution.register.line')
|
line_pool = self.pool.get('hr.contibution.register.line')
|
||||||
period_id = self.pool.get('account.period').search(cr,uid,[('date_start','<=',time.strftime('%Y-%m-%d')),('date_stop','>=',time.strftime('%Y-%m-%d'))])[0]
|
if context is None:
|
||||||
fiscalyear_id = self.pool.get('account.period').browse(cr, uid, period_id).fiscalyear_id
|
context = {}
|
||||||
|
period_id = self.pool.get('account.period').search(cr,uid,[('date_start','<=',time.strftime('%Y-%m-%d')),('date_stop','>=',time.strftime('%Y-%m-%d'))], context=context)[0]
|
||||||
|
fiscalyear_id = self.pool.get('account.period').browse(cr, uid, period_id, context=context).fiscalyear_id
|
||||||
res = {}
|
res = {}
|
||||||
for cur in self.browse(cr, uid, ids):
|
for cur in self.browse(cr, uid, ids, context=context):
|
||||||
current = line_pool.search(cr, uid, [('period_id','=',period_id),('register_id','=',cur.id)])
|
current = line_pool.search(cr, uid, [('period_id','=',period_id),('register_id','=',cur.id)], context=context)
|
||||||
years = line_pool.search(cr, uid, [('period_id.fiscalyear_id','=',fiscalyear_id.id), ('register_id','=',cur.id)])
|
years = line_pool.search(cr, uid, [('period_id.fiscalyear_id','=',fiscalyear_id.id), ('register_id','=',cur.id)], context=context)
|
||||||
|
|
||||||
e_month = 0.0
|
e_month = 0.0
|
||||||
c_month = 0.0
|
c_month = 0.0
|
||||||
for i in line_pool.browse(cr, uid, current):
|
for i in line_pool.browse(cr, uid, current, context=context):
|
||||||
e_month += i.emp_deduction
|
e_month += i.emp_deduction
|
||||||
c_month += i.comp_deduction
|
c_month += i.comp_deduction
|
||||||
|
|
||||||
e_year = 0.0
|
e_year = 0.0
|
||||||
c_year = 0.0
|
c_year = 0.0
|
||||||
for j in line_pool.browse(cr, uid, years):
|
for j in line_pool.browse(cr, uid, years, context=context):
|
||||||
e_year += i.emp_deduction
|
e_year += i.emp_deduction
|
||||||
c_year += i.comp_deduction
|
c_year += i.comp_deduction
|
||||||
|
|
||||||
|
@ -454,9 +473,11 @@ class contrib_register_line(osv.osv):
|
||||||
_name = 'hr.contibution.register.line'
|
_name = 'hr.contibution.register.line'
|
||||||
_description = 'Contribution Register Line'
|
_description = 'Contribution Register Line'
|
||||||
|
|
||||||
def _total(self, cr, uid, ids, field_names, arg, context):
|
def _total(self, cr, uid, ids, field_names, arg, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
res={}
|
res={}
|
||||||
for line in self.browse(cr, uid, ids, context):
|
for line in self.browse(cr, uid, ids, context=context):
|
||||||
res[line.id] = line.emp_deduction + line.comp_deduction
|
res[line.id] = line.emp_deduction + line.comp_deduction
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
@ -564,22 +585,23 @@ class company_contribution(osv.osv):
|
||||||
context=context).company_id.id,
|
context=context).company_id.id,
|
||||||
}
|
}
|
||||||
|
|
||||||
def execute_function(self, cr, uid, id, value, context):
|
def execute_function(self, cr, uid, id, value, context=None):
|
||||||
"""
|
"""
|
||||||
self: pointer to self object
|
self: pointer to self object
|
||||||
cr: cursor to database
|
cr: cursor to database
|
||||||
uid: user id of current executer
|
uid: user id of current executer
|
||||||
"""
|
"""
|
||||||
|
|
||||||
line_pool = self.pool.get('company.contribution.line')
|
line_pool = self.pool.get('company.contribution.line')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
res = 0
|
res = 0
|
||||||
ids = line_pool.search(cr, uid, [('category_id','=',id), ('to_val','>=',value),('from_val','<=',value)])
|
ids = line_pool.search(cr, uid, [('category_id','=',id), ('to_val','>=',value),('from_val','<=',value)], context=context)
|
||||||
if not ids:
|
if not ids:
|
||||||
ids = line_pool.search(cr, uid, [('category_id','=',id), ('from','<=',value)])
|
ids = line_pool.search(cr, uid, [('category_id','=',id), ('from','<=',value)], context=context)
|
||||||
if not ids:
|
if not ids:
|
||||||
res = 0
|
res = 0
|
||||||
else:
|
else:
|
||||||
res = line_pool.browse(cr, uid, ids)[0].value
|
res = line_pool.browse(cr, uid, ids, context=context)[0].value
|
||||||
return res
|
return res
|
||||||
|
|
||||||
company_contribution()
|
company_contribution()
|
||||||
|
@ -645,9 +667,12 @@ class hr_payslip(osv.osv):
|
||||||
_name = 'hr.payslip'
|
_name = 'hr.payslip'
|
||||||
_description = 'Pay Slip'
|
_description = 'Pay Slip'
|
||||||
|
|
||||||
def _calculate(self, cr, uid, ids, field_names, arg, context):
|
def _calculate(self, cr, uid, ids, field_names, arg, context=None):
|
||||||
|
slip_line_obj = self.pool.get('hr.payslip.line')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
res = {}
|
res = {}
|
||||||
for rs in self.browse(cr, uid, ids, context):
|
for rs in self.browse(cr, uid, ids, context=context):
|
||||||
allow = 0.0
|
allow = 0.0
|
||||||
deduct = 0.0
|
deduct = 0.0
|
||||||
others = 0.0
|
others = 0.0
|
||||||
|
@ -698,7 +723,7 @@ class hr_payslip(osv.osv):
|
||||||
elif line.type == 'otherpay':
|
elif line.type == 'otherpay':
|
||||||
others += amount
|
others += amount
|
||||||
|
|
||||||
self.pool.get('hr.payslip.line').write(cr, uid, [line.id], {'total':amount})
|
slip_line_obj.write(cr, uid, [line.id], {'total':amount}, context=context)
|
||||||
|
|
||||||
record = {
|
record = {
|
||||||
'allounce':round(allow),
|
'allounce':round(allow),
|
||||||
|
@ -759,6 +784,8 @@ class hr_payslip(osv.osv):
|
||||||
}
|
}
|
||||||
|
|
||||||
def copy(self, cr, uid, id, default=None, context=None):
|
def copy(self, cr, uid, id, default=None, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
|
company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
|
||||||
default = {
|
default = {
|
||||||
'line_ids': False,
|
'line_ids': False,
|
||||||
|
@ -770,7 +797,7 @@ class hr_payslip(osv.osv):
|
||||||
'basic_before_leaves':0,
|
'basic_before_leaves':0,
|
||||||
'basic':0
|
'basic':0
|
||||||
}
|
}
|
||||||
res_id = super(hr_payslip, self).copy(cr, uid, id, default, context)
|
res_id = super(hr_payslip, self).copy(cr, uid, id, default, context=context)
|
||||||
return res_id
|
return res_id
|
||||||
|
|
||||||
def create_voucher(self, cr, uid, ids, name, voucher, sequence=5):
|
def create_voucher(self, cr, uid, ids, name, voucher, sequence=5):
|
||||||
|
@ -784,31 +811,45 @@ class hr_payslip(osv.osv):
|
||||||
}
|
}
|
||||||
slip_move.create(cr, uid, res)
|
slip_move.create(cr, uid, res)
|
||||||
|
|
||||||
def set_to_draft(self, cr, uid, ids, context={}):
|
def set_to_draft(self, cr, uid, ids, context=None):
|
||||||
self.write(cr, uid, ids, {'state':'draft'})
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
self.write(cr, uid, ids, {'state':'draft'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def cancel_sheet(self, cr, uid, ids, context={}):
|
def cancel_sheet(self, cr, uid, ids, context=None):
|
||||||
self.write(cr, uid, ids, {'state':'cancel'})
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
self.write(cr, uid, ids, {'state':'cancel'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def account_check_sheet(self, cr, uid, ids, context={}):
|
def account_check_sheet(self, cr, uid, ids, context=None):
|
||||||
self.write(cr, uid, ids, {'state':'accont_check'})
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
self.write(cr, uid, ids, {'state':'accont_check'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def hr_check_sheet(self, cr, uid, ids, context={}):
|
def hr_check_sheet(self, cr, uid, ids, context=None):
|
||||||
self.write(cr, uid, ids, {'state':'hr_check'})
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
self.write(cr, uid, ids, {'state':'hr_check'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def process_sheet(self, cr, uid, ids, context={}):
|
def process_sheet(self, cr, uid, ids, context=None):
|
||||||
self.write(cr, uid, ids, {'state':'done'})
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
self.write(cr, uid, ids, {'state':'done'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def verify_sheet(self, cr, uid, ids, context={}):
|
def verify_sheet(self, cr, uid, ids, context=None):
|
||||||
self.write(cr, uid, ids, {'state':'confirm'})
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
self.write(cr, uid, ids, {'state':'confirm'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def get_contract(self, cr, uid, employee, date, context={}):
|
def get_contract(self, cr, uid, employee, date, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
sql_req= '''
|
sql_req= '''
|
||||||
SELECT c.id as id, c.wage as wage, struct_id as function
|
SELECT c.id as id, c.wage as wage, struct_id as function
|
||||||
FROM hr_contract c
|
FROM hr_contract c
|
||||||
|
@ -828,7 +869,7 @@ class hr_payslip(osv.osv):
|
||||||
|
|
||||||
return contract
|
return contract
|
||||||
|
|
||||||
def _get_leaves(self, cr, user, slip, employee, context={}):
|
def _get_leaves(self, cr, user, slip, employee, context=None):
|
||||||
"""
|
"""
|
||||||
Compute leaves for an employee
|
Compute leaves for an employee
|
||||||
|
|
||||||
|
@ -840,7 +881,8 @@ class hr_payslip(osv.osv):
|
||||||
|
|
||||||
@return: return a result
|
@return: return a result
|
||||||
"""
|
"""
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
result = []
|
result = []
|
||||||
|
|
||||||
dates = prev_bounds(slip.date)
|
dates = prev_bounds(slip.date)
|
||||||
|
@ -856,14 +898,17 @@ class hr_payslip(osv.osv):
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def compute_sheet(self, cr, uid, ids, context={}):
|
def compute_sheet(self, cr, uid, ids, context=None):
|
||||||
emp_pool = self.pool.get('hr.employee')
|
emp_pool = self.pool.get('hr.employee')
|
||||||
slip_pool = self.pool.get('hr.payslip')
|
slip_pool = self.pool.get('hr.payslip')
|
||||||
func_pool = self.pool.get('hr.payroll.structure')
|
func_pool = self.pool.get('hr.payroll.structure')
|
||||||
slip_line_pool = self.pool.get('hr.payslip.line')
|
slip_line_pool = self.pool.get('hr.payslip.line')
|
||||||
holiday_pool = self.pool.get('hr.holidays')
|
holiday_pool = self.pool.get('hr.holidays')
|
||||||
|
contract_obj = self.pool.get('hr.contract')
|
||||||
date = self.read(cr, uid, ids, ['date'])[0]['date']
|
sequence_obj = self.pool.get('ir.sequence')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
date = self.read(cr, uid, ids, ['date'], context=context)[0]['date']
|
||||||
|
|
||||||
#Check for the Holidays
|
#Check for the Holidays
|
||||||
def get_days(start, end, month, year, calc_day):
|
def get_days(start, end, month, year, calc_day):
|
||||||
|
@ -874,25 +919,25 @@ class hr_payslip(osv.osv):
|
||||||
count += 1
|
count += 1
|
||||||
return count
|
return count
|
||||||
|
|
||||||
for slip in self.browse(cr, uid, ids):
|
for slip in self.browse(cr, uid, ids, context=context):
|
||||||
contracts = self.get_contract(cr, uid, slip.employee_id, date, context)
|
contracts = self.get_contract(cr, uid, slip.employee_id, date, context)
|
||||||
|
|
||||||
if contracts.get('id', False) == False:
|
if contracts.get('id', False) == False:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
contract = self.pool.get('hr.contract').browse(cr, uid, contracts.get('id'))
|
contract = contract_obj.browse(cr, uid, contracts.get('id'), context=context)
|
||||||
sal_type = contract.wage_type_id.type
|
sal_type = contract.wage_type_id.type
|
||||||
function = contract.struct_id.id
|
function = contract.struct_id.id
|
||||||
|
|
||||||
lines = []
|
lines = []
|
||||||
if function:
|
if function:
|
||||||
func = func_pool.read(cr, uid, function, ['line_ids'])
|
func = func_pool.read(cr, uid, function, ['line_ids'], context=context)
|
||||||
lines = slip_line_pool.browse(cr, uid, func['line_ids'])
|
lines = slip_line_pool.browse(cr, uid, func['line_ids'], context=context)
|
||||||
|
|
||||||
lines += slip.employee_id.line_ids
|
lines += slip.employee_id.line_ids
|
||||||
|
|
||||||
old_slip_id = slip_line_pool.search(cr, uid, [('slip_id','=',slip.id)])
|
old_slip_ids = slip_line_pool.search(cr, uid, [('slip_id','=',slip.id)], context=context)
|
||||||
slip_line_pool.unlink(cr, uid, old_slip_id)
|
slip_line_pool.unlink(cr, uid, old_slip_ids, context=context)
|
||||||
|
|
||||||
ad = []
|
ad = []
|
||||||
lns = {}
|
lns = {}
|
||||||
|
@ -972,14 +1017,14 @@ class hr_payslip(osv.osv):
|
||||||
value = line.amount
|
value = line.amount
|
||||||
|
|
||||||
elif line.amount_type == 'func':
|
elif line.amount_type == 'func':
|
||||||
value = self.pool.get('hr.payslip.line').execute_function(cr, uid, line.id, amt, context)
|
value = slip_line_pool.execute_function(cr, uid, line.id, amt, context)
|
||||||
line.amount = value
|
line.amount = value
|
||||||
else:
|
else:
|
||||||
if line.amount_type in ('fix', 'per'):
|
if line.amount_type in ('fix', 'per'):
|
||||||
value = line.amount
|
value = line.amount
|
||||||
|
|
||||||
elif line.amount_type == 'func':
|
elif line.amount_type == 'func':
|
||||||
value = self.pool.get('hr.payslip.line').execute_function(cr, uid, line.id, amt, context)
|
value = slip_line_pool.execute_function(cr, uid, line.id, amt, context)
|
||||||
line.amount = value
|
line.amount = value
|
||||||
|
|
||||||
if line.type == 'allowance':
|
if line.type == 'allowance':
|
||||||
|
@ -997,7 +1042,7 @@ class hr_payslip(osv.osv):
|
||||||
'base':base
|
'base':base
|
||||||
}
|
}
|
||||||
slip_line_pool.copy(cr, uid, line.id, vals, {})
|
slip_line_pool.copy(cr, uid, line.id, vals, {})
|
||||||
|
|
||||||
if sal_type in ('gross', 'net'):
|
if sal_type in ('gross', 'net'):
|
||||||
sal = contract.wage
|
sal = contract.wage
|
||||||
if sal_type == 'net':
|
if sal_type == 'net':
|
||||||
|
@ -1015,7 +1060,7 @@ class hr_payslip(osv.osv):
|
||||||
else:
|
else:
|
||||||
basic = contract.wage
|
basic = contract.wage
|
||||||
|
|
||||||
number = self.pool.get('ir.sequence').get(cr, uid, 'salary.slip')
|
number = sequence_obj.get(cr, uid, 'salary.slip')
|
||||||
ttyme = datetime.fromtimestamp(time.mktime(time.strptime(slip.date,"%Y-%m-%d")))
|
ttyme = datetime.fromtimestamp(time.mktime(time.strptime(slip.date,"%Y-%m-%d")))
|
||||||
update.update({
|
update.update({
|
||||||
'deg_id':function,
|
'deg_id':function,
|
||||||
|
@ -1027,9 +1072,9 @@ class hr_payslip(osv.osv):
|
||||||
'contract_id':contract.id,
|
'contract_id':contract.id,
|
||||||
'company_id':slip.employee_id.company_id.id
|
'company_id':slip.employee_id.company_id.id
|
||||||
})
|
})
|
||||||
self.write(cr, uid, [slip.id], update)
|
self.write(cr, uid, [slip.id], update, context=context)
|
||||||
|
|
||||||
for slip in self.browse(cr, uid, ids):
|
for slip in self.browse(cr, uid, ids, context=context):
|
||||||
|
|
||||||
if not slip.contract_id :
|
if not slip.contract_id :
|
||||||
continue
|
continue
|
||||||
|
@ -1055,7 +1100,7 @@ class hr_payslip(osv.osv):
|
||||||
|
|
||||||
total_leave = 0.0
|
total_leave = 0.0
|
||||||
paid_leave = 0.0
|
paid_leave = 0.0
|
||||||
for hday in holiday_pool.browse(cr, uid, leave_ids):
|
for hday in holiday_pool.browse(cr, uid, leave_ids, context=context):
|
||||||
res = {
|
res = {
|
||||||
'slip_id':slip.id,
|
'slip_id':slip.id,
|
||||||
'name':hday.holiday_status_id.name + '-%s' % (hday.number_of_days),
|
'name':hday.holiday_status_id.name + '-%s' % (hday.number_of_days),
|
||||||
|
@ -1089,7 +1134,7 @@ class hr_payslip(osv.osv):
|
||||||
leave += days
|
leave += days
|
||||||
total += perday * days
|
total += perday * days
|
||||||
|
|
||||||
slip_line_pool.create(cr, uid, res)
|
slip_line_pool.create(cr, uid, res, context=context)
|
||||||
basic = basic - total
|
basic = basic - total
|
||||||
leaves = total
|
leaves = total
|
||||||
|
|
||||||
|
@ -1100,7 +1145,7 @@ class hr_payslip(osv.osv):
|
||||||
'worked_days':working_day - leave,
|
'worked_days':working_day - leave,
|
||||||
'working_days':working_day,
|
'working_days':working_day,
|
||||||
})
|
})
|
||||||
self.write(cr, uid, [slip.id], update)
|
self.write(cr, uid, [slip.id], update, context=context)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -1203,18 +1248,20 @@ class hr_payslip_line(osv.osv):
|
||||||
}
|
}
|
||||||
_order = 'sequence'
|
_order = 'sequence'
|
||||||
|
|
||||||
def execute_function(self, cr, uid, id, value, context):
|
def execute_function(self, cr, uid, id, value, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
line_pool = self.pool.get('hr.payslip.line.line')
|
line_pool = self.pool.get('hr.payslip.line.line')
|
||||||
res = 0
|
res = 0
|
||||||
ids = line_pool.search(cr, uid, [('slipline_id','=',id), ('from_val','<=',value), ('to_val','>=',value)])
|
ids = line_pool.search(cr, uid, [('slipline_id','=',id), ('from_val','<=',value), ('to_val','>=',value)], context=context)
|
||||||
|
|
||||||
if not ids:
|
if not ids:
|
||||||
ids = line_pool.search(cr, uid, [('slipline_id','=',id), ('from_val','<=',value)])
|
ids = line_pool.search(cr, uid, [('slipline_id','=',id), ('from_val','<=',value)], context=context)
|
||||||
|
|
||||||
if not ids:
|
if not ids:
|
||||||
return res
|
return res
|
||||||
|
|
||||||
res = line_pool.browse(cr, uid, ids)[-1].value
|
res = line_pool.browse(cr, uid, ids, context=context)[-1].value
|
||||||
return res
|
return res
|
||||||
|
|
||||||
hr_payslip_line()
|
hr_payslip_line()
|
||||||
|
|
|
@ -32,37 +32,38 @@ class hr_payroll_create_analytic(osv.osv_memory):
|
||||||
}
|
}
|
||||||
|
|
||||||
def do_duplicate(self, cr, uid, ids, context=None):
|
def do_duplicate(self, cr, uid, ids, context=None):
|
||||||
|
account_pool = self.pool.get('account.analytic.account')
|
||||||
account_pool =self.pool.get('account.analytic.account')
|
|
||||||
func_pool = self.pool.get('hr.employee.grade')
|
func_pool = self.pool.get('hr.employee.grade')
|
||||||
ad_pool = self.pool.get('hr.allounce.deduction.categoty')
|
ad_pool = self.pool.get('hr.allounce.deduction.categoty')
|
||||||
data = self.read(cr,uid,ids)[0]
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
data = self.read(cr, uid, ids, context=context)[0]
|
||||||
tpy = data['type']
|
tpy = data['type']
|
||||||
company = data['company_id']
|
company = data['company_id']
|
||||||
|
|
||||||
function_ids = func_pool.search(cr, uid, [])
|
function_ids = func_pool.search(cr, uid, [], context=context)
|
||||||
ad_ids = ad_pool.search(cr, uid, [])
|
ad_ids = ad_pool.search(cr, uid, [], context=context)
|
||||||
|
|
||||||
if tpy == 'bydeg':
|
if tpy == 'bydeg':
|
||||||
for function in func_pool.browse(cr, uid, function_ids):
|
for function in func_pool.browse(cr, uid, function_ids, context=context):
|
||||||
res = {
|
res = {
|
||||||
'name':function.name,
|
'name':function.name,
|
||||||
'company_id':company
|
'company_id':company
|
||||||
}
|
}
|
||||||
fid = account_pool.create(cr, uid, res)
|
fid = account_pool.create(cr, uid, res, context=context)
|
||||||
res = {
|
res = {
|
||||||
'name':'Basic Salary',
|
'name':'Basic Salary',
|
||||||
'company_id':company,
|
'company_id':company,
|
||||||
'parent_id': fid
|
'parent_id': fid
|
||||||
}
|
}
|
||||||
account_pool.create(cr, uid, res)
|
account_pool.create(cr, uid, res, context=context)
|
||||||
for ad in ad_pool.browse(cr, uid, ad_ids):
|
for ad in ad_pool.browse(cr, uid, ad_ids, context=context):
|
||||||
res = {
|
res = {
|
||||||
'name':ad.name,
|
'name':ad.name,
|
||||||
'company_id':company,
|
'company_id':company,
|
||||||
'parent_id': fid
|
'parent_id': fid
|
||||||
}
|
}
|
||||||
account_pool.create(cr, uid, res)
|
account_pool.create(cr, uid, res, context=context)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -71,28 +72,28 @@ class hr_payroll_create_analytic(osv.osv_memory):
|
||||||
'name':'Basic Salary',
|
'name':'Basic Salary',
|
||||||
'company_id':company
|
'company_id':company
|
||||||
}
|
}
|
||||||
adid = account_pool.create(cr, uid, res)
|
adid = account_pool.create(cr, uid, res, context=context)
|
||||||
for function in func_pool.browse(cr, uid, function_ids):
|
for function in func_pool.browse(cr, uid, function_ids, context=context):
|
||||||
res = {
|
res = {
|
||||||
'name':function.name,
|
'name':function.name,
|
||||||
'company_id':company,
|
'company_id':company,
|
||||||
'parent_id': adid
|
'parent_id': adid
|
||||||
}
|
}
|
||||||
account_pool.create(cr, uid, res)
|
account_pool.create(cr, uid, res, context=context)
|
||||||
|
|
||||||
for ad in ad_pool.browse(cr, uid, ad_ids):
|
for ad in ad_pool.browse(cr, uid, ad_ids, context=context):
|
||||||
res = {
|
res = {
|
||||||
'name':ad.name,
|
'name':ad.name,
|
||||||
'company_id':company,
|
'company_id':company,
|
||||||
}
|
}
|
||||||
adid = account_pool.create(cr, uid, res)
|
adid = account_pool.create(cr, uid, res, context=context)
|
||||||
for function in func_pool.browse(cr, uid, function_ids):
|
for function in func_pool.browse(cr, uid, function_ids, context=context):
|
||||||
res = {
|
res = {
|
||||||
'name':function.name,
|
'name':function.name,
|
||||||
'company_id':company,
|
'company_id':company,
|
||||||
'parent_id': adid
|
'parent_id': adid
|
||||||
}
|
}
|
||||||
account_pool.create(cr, uid, res)
|
account_pool.create(cr, uid, res, context=context)
|
||||||
|
|
||||||
return {}
|
return {}
|
||||||
hr_payroll_create_analytic()
|
hr_payroll_create_analytic()
|
||||||
|
|
|
@ -31,8 +31,10 @@ class hr_payroll_employees_detail(osv.osv_memory):
|
||||||
'employee_ids': fields.many2many('hr.employee', 'payroll_emp_rel','payroll_id','emp_id', 'Employees',required=True),
|
'employee_ids': fields.many2many('hr.employee', 'payroll_emp_rel','payroll_id','emp_id', 'Employees',required=True),
|
||||||
'fiscalyear_id': fields.many2one('account.fiscalyear', 'Fiscal Year', required=True)
|
'fiscalyear_id': fields.many2one('account.fiscalyear', 'Fiscal Year', required=True)
|
||||||
}
|
}
|
||||||
def _get_fiscalyear(self, cr, uid, ids, context={}):
|
def _get_fiscalyear(self, cr, uid, ids, context=None):
|
||||||
fiscal_ids=self.pool.get('account.fiscalyear').search(cr,uid,[])
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
fiscal_ids = self.pool.get('account.fiscalyear').search(cr,uid,[], context=context)
|
||||||
if fiscal_ids:
|
if fiscal_ids:
|
||||||
return fiscal_ids[0]
|
return fiscal_ids[0]
|
||||||
return False
|
return False
|
||||||
|
@ -50,7 +52,8 @@ class hr_payroll_employees_detail(osv.osv_memory):
|
||||||
@param context: A standard dictionary
|
@param context: A standard dictionary
|
||||||
@return : return report
|
@return : return report
|
||||||
"""
|
"""
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
datas = {'ids': context.get('active_ids', [])}
|
datas = {'ids': context.get('active_ids', [])}
|
||||||
|
|
||||||
res = self.read(cr, uid, ids, ['employee_ids', 'fiscalyear_id'], context=context)
|
res = self.read(cr, uid, ids, ['employee_ids', 'fiscalyear_id'], context=context)
|
||||||
|
|
|
@ -33,7 +33,9 @@ class hr_payroll_year_salary(osv.osv_memory):
|
||||||
}
|
}
|
||||||
|
|
||||||
def _get_fiscalyear(self, cr, uid, ids, context=None):
|
def _get_fiscalyear(self, cr, uid, ids, context=None):
|
||||||
fiscal_ids=self.pool.get('account.fiscalyear').search(cr,uid,[],context=context)
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
fiscal_ids=self.pool.get('account.fiscalyear').search(cr, uid, [], context=context)
|
||||||
if fiscal_ids:
|
if fiscal_ids:
|
||||||
return fiscal_ids[0]
|
return fiscal_ids[0]
|
||||||
return False
|
return False
|
||||||
|
@ -52,7 +54,8 @@ class hr_payroll_year_salary(osv.osv_memory):
|
||||||
@param context: A standard dictionary
|
@param context: A standard dictionary
|
||||||
@return : return report
|
@return : return report
|
||||||
"""
|
"""
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
datas = {'ids': context.get('active_ids', [])}
|
datas = {'ids': context.get('active_ids', [])}
|
||||||
|
|
||||||
res = self.read(cr, uid, ids, ['employee_ids', 'fiscalyear_id','salary_on'], context=context)
|
res = self.read(cr, uid, ids, ['employee_ids', 'fiscalyear_id','salary_on'], context=context)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#-*- coding:utf-8 -*-
|
#-*- coding:utf-8 -*-
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
# OpenERP, Open Source Management Solution
|
# OpenERP, Open Source Management Solution
|
||||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
|
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
|
||||||
# d$
|
# d$
|
||||||
#
|
#
|
||||||
|
@ -22,14 +22,13 @@
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import netsvc
|
import netsvc
|
||||||
from osv import osv
|
from datetime import date, datetime, timedelta
|
||||||
from osv import fields
|
|
||||||
|
from osv import fields, osv
|
||||||
from tools import config
|
from tools import config
|
||||||
from tools.translate import _
|
from tools.translate import _
|
||||||
|
|
||||||
from datetime import date
|
|
||||||
from datetime import datetime
|
|
||||||
from datetime import timedelta
|
|
||||||
|
|
||||||
def prev_bounds(cdate=False):
|
def prev_bounds(cdate=False):
|
||||||
when = date.fromtimestamp(time.mktime(time.strptime(cdate,"%Y-%m-%d")))
|
when = date.fromtimestamp(time.mktime(time.strptime(cdate,"%Y-%m-%d")))
|
||||||
|
@ -49,14 +48,14 @@ class hr_payslip(osv.osv):
|
||||||
'''
|
'''
|
||||||
_inherit = 'hr.payslip'
|
_inherit = 'hr.payslip'
|
||||||
_description = 'Pay Slip'
|
_description = 'Pay Slip'
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'move_ids':fields.one2many('hr.payslip.account.move', 'slip_id', 'Accounting vouchers', required=False),
|
'move_ids':fields.one2many('hr.payslip.account.move', 'slip_id', 'Accounting vouchers', required=False),
|
||||||
'move_line_ids':fields.many2many('account.move.line', 'payslip_lines_rel', 'slip_id', 'line_id', 'Accounting Lines', readonly=True),
|
'move_line_ids':fields.many2many('account.move.line', 'payslip_lines_rel', 'slip_id', 'line_id', 'Accounting Lines', readonly=True),
|
||||||
'move_payment_ids':fields.many2many('account.move.line', 'payslip_payment_rel', 'slip_id', 'payment_id', 'Payment Lines', readonly=True),
|
'move_payment_ids':fields.many2many('account.move.line', 'payslip_payment_rel', 'slip_id', 'payment_id', 'Payment Lines', readonly=True),
|
||||||
'period_id': fields.many2one('account.period', 'Force Period', domain=[('state','<>','done')], help="Keep empty to use the period of the validation(Payslip) date."),
|
'period_id': fields.many2one('account.period', 'Force Period', domain=[('state','<>','done')], help="Keep empty to use the period of the validation(Payslip) date."),
|
||||||
}
|
}
|
||||||
|
|
||||||
def create_voucher(self, cr, uid, ids, name, voucher, sequence=5):
|
def create_voucher(self, cr, uid, ids, name, voucher, sequence=5):
|
||||||
slip_move = self.pool.get('hr.payslip.account.move')
|
slip_move = self.pool.get('hr.payslip.account.move')
|
||||||
for slip in ids:
|
for slip in ids:
|
||||||
|
@ -67,78 +66,83 @@ class hr_payslip(osv.osv):
|
||||||
'name':name
|
'name':name
|
||||||
}
|
}
|
||||||
slip_move.create(cr, uid, res)
|
slip_move.create(cr, uid, res)
|
||||||
|
|
||||||
def cancel_sheet(self, cr, uid, ids, context={}):
|
def cancel_sheet(self, cr, uid, ids, context=None):
|
||||||
move_pool = self.pool.get('account.move')
|
move_pool = self.pool.get('account.move')
|
||||||
slip_move = self.pool.get('hr.payslip.account.move')
|
slip_move = self.pool.get('hr.payslip.account.move')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
move_ids = []
|
move_ids = []
|
||||||
for slip in self.browse(cr, uid, ids, context):
|
for slip in self.browse(cr, uid, ids, context=context):
|
||||||
for line in slip.move_ids:
|
for line in slip.move_ids:
|
||||||
move_ids.append(line.id)
|
move_ids.append(line.id)
|
||||||
if line.move_id:
|
if line.move_id:
|
||||||
if line.move_id.state == 'posted':
|
if line.move_id.state == 'posted':
|
||||||
move_pool.button_cancel(cr, uid [line.move_id.id], context)
|
move_pool.button_cancel(cr, uid [line.move_id.id], context)
|
||||||
move_pool.unlink(cr, uid, [line.move_id.id])
|
move_pool.unlink(cr, uid, [line.move_id.id], context=context)
|
||||||
|
|
||||||
slip_move.unlink(cr, uid, move_ids)
|
slip_move.unlink(cr, uid, move_ids, context=context)
|
||||||
self.write(cr, uid, ids, {'state':'cancel'})
|
self.write(cr, uid, ids, {'state':'cancel'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def process_sheet(self, cr, uid, ids, context={}):
|
def process_sheet(self, cr, uid, ids, context=None):
|
||||||
move_pool = self.pool.get('account.move')
|
move_pool = self.pool.get('account.move')
|
||||||
movel_pool = self.pool.get('account.move.line')
|
movel_pool = self.pool.get('account.move.line')
|
||||||
invoice_pool = self.pool.get('account.invoice')
|
invoice_pool = self.pool.get('account.invoice')
|
||||||
|
fiscalyear_pool = self.pool.get('account.fiscalyear')
|
||||||
for slip in self.browse(cr,uid,ids):
|
period_pool = self.pool.get('account.period')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
|
||||||
|
for slip in self.browse(cr, uid, ids, context=context):
|
||||||
line_ids = []
|
line_ids = []
|
||||||
partner = False
|
partner = False
|
||||||
partner_id = False
|
partner_id = False
|
||||||
exp_ids = []
|
exp_ids = []
|
||||||
|
|
||||||
partner = slip.employee_id.bank_account_id.partner_id
|
partner = slip.employee_id.bank_account_id.partner_id
|
||||||
partner_id = partner.id
|
partner_id = partner.id
|
||||||
|
|
||||||
fiscal_year_ids = self.pool.get('account.fiscalyear').search(cr, uid, [])
|
fiscal_year_ids = fiscalyear_pool.search(cr, uid, [], context=context)
|
||||||
if not fiscal_year_ids:
|
if not fiscal_year_ids:
|
||||||
raise osv.except_osv(_('Warning !'), _('Please define fiscal year for perticular contract'))
|
raise osv.except_osv(_('Warning !'), _('Please define fiscal year for perticular contract'))
|
||||||
fiscal_year_objs = self.pool.get('account.fiscalyear').read(cr, uid, fiscal_year_ids, ['date_start','date_stop'])
|
fiscal_year_objs = fiscalyear_pool.read(cr, uid, fiscal_year_ids, ['date_start','date_stop'], context=context)
|
||||||
year_exist = False
|
year_exist = False
|
||||||
for fiscal_year in fiscal_year_objs:
|
for fiscal_year in fiscal_year_objs:
|
||||||
if ((fiscal_year['date_start'] <= slip.date) and (fiscal_year['date_stop'] >= slip.date)):
|
if ((fiscal_year['date_start'] <= slip.date) and (fiscal_year['date_stop'] >= slip.date)):
|
||||||
year_exist = True
|
year_exist = True
|
||||||
if not year_exist:
|
if not year_exist:
|
||||||
raise osv.except_osv(_('Warning !'), _('Fiscal Year is not defined for slip date %s'%slip.date))
|
raise osv.except_osv(_('Warning !'), _('Fiscal Year is not defined for slip date %s'%slip.date))
|
||||||
search_period = self.pool.get('account.period').search(cr,uid,[('date_start','<=',slip.date),('date_stop','>=',slip.date)])
|
search_periods = period_pool.search(cr, uid, [('date_start','<=',slip.date),('date_stop','>=',slip.date)], context=context)
|
||||||
if not search_period:
|
if not search_periods:
|
||||||
raise osv.except_osv(_('Warning !'), _('Period is not defined for slip date %s'%slip.date))
|
raise osv.except_osv(_('Warning !'), _('Period is not defined for slip date %s'%slip.date))
|
||||||
period_id = search_period[0]
|
period_id = search_periods[0]
|
||||||
name = 'Payment of Salary to %s' % (slip.employee_id.name)
|
name = 'Payment of Salary to %s' % (slip.employee_id.name)
|
||||||
move = {
|
move = {
|
||||||
'journal_id': slip.bank_journal_id.id,
|
'journal_id': slip.bank_journal_id.id,
|
||||||
'period_id': period_id,
|
'period_id': period_id,
|
||||||
'date': slip.date,
|
'date': slip.date,
|
||||||
'type':'bank_pay_voucher',
|
'type':'bank_pay_voucher',
|
||||||
'ref':slip.number,
|
'ref':slip.number,
|
||||||
'narration': name
|
'narration': name
|
||||||
}
|
}
|
||||||
move_id = move_pool.create(cr, uid, move)
|
move_id = move_pool.create(cr, uid, move, context=context)
|
||||||
self.create_voucher(cr, uid, [slip.id], name, move_id)
|
self.create_voucher(cr, uid, [slip.id], name, move_id)
|
||||||
|
|
||||||
name = "To %s account" % (slip.employee_id.name)
|
name = "To %s account" % (slip.employee_id.name)
|
||||||
ded_rec = {
|
ded_rec = {
|
||||||
'move_id':move_id,
|
'move_id':move_id,
|
||||||
'name': name,
|
'name': name,
|
||||||
#'partner_id': partner_id,
|
#'partner_id': partner_id,
|
||||||
'date': slip.date,
|
'date': slip.date,
|
||||||
'account_id': slip.employee_id.property_bank_account.id,
|
'account_id': slip.employee_id.property_bank_account.id,
|
||||||
'debit': 0.0,
|
'debit': 0.0,
|
||||||
'credit' : slip.total_pay,
|
'credit' : slip.total_pay,
|
||||||
'journal_id' : slip.journal_id.id,
|
'journal_id' : slip.journal_id.id,
|
||||||
'period_id' :period_id,
|
'period_id' :period_id,
|
||||||
'ref':slip.number
|
'ref':slip.number
|
||||||
}
|
}
|
||||||
line_ids += [movel_pool.create(cr, uid, ded_rec)]
|
line_ids += [movel_pool.create(cr, uid, ded_rec, context=context)]
|
||||||
name = "By %s account" % (slip.employee_id.property_bank_account.name)
|
name = "By %s account" % (slip.employee_id.property_bank_account.name)
|
||||||
cre_rec = {
|
cre_rec = {
|
||||||
'move_id':move_id,
|
'move_id':move_id,
|
||||||
|
@ -152,8 +156,8 @@ class hr_payslip(osv.osv):
|
||||||
'period_id' :period_id,
|
'period_id' :period_id,
|
||||||
'ref':slip.number
|
'ref':slip.number
|
||||||
}
|
}
|
||||||
line_ids += [movel_pool.create(cr, uid, cre_rec)]
|
line_ids += [movel_pool.create(cr, uid, cre_rec, context=context)]
|
||||||
|
|
||||||
other_pay = slip.other_pay
|
other_pay = slip.other_pay
|
||||||
#Process all Reambuse Entries
|
#Process all Reambuse Entries
|
||||||
for line in slip.line_ids:
|
for line in slip.line_ids:
|
||||||
|
@ -169,40 +173,40 @@ class hr_payslip(osv.osv):
|
||||||
invoice_pool.pay_and_reconcile(cr, uid, invids, amount, acc_id, period_id, journal_id, False, period_id, False, context, name)
|
invoice_pool.pay_and_reconcile(cr, uid, invids, amount, acc_id, period_id, journal_id, False, period_id, False, context, name)
|
||||||
other_pay -= amount
|
other_pay -= amount
|
||||||
#TODO: link this account entries to the Payment Lines also Expanse Entries to Account Lines
|
#TODO: link this account entries to the Payment Lines also Expanse Entries to Account Lines
|
||||||
l_ids = movel_pool.search(cr, uid, [('name','=',name)])
|
l_ids = movel_pool.search(cr, uid, [('name','=',name)], context=context)
|
||||||
line_ids += l_ids
|
line_ids += l_ids
|
||||||
|
|
||||||
l_ids = movel_pool.search(cr, uid, [('invoice','=',line.expanse_id.invoice_id.id)])
|
l_ids = movel_pool.search(cr, uid, [('invoice','=',line.expanse_id.invoice_id.id)], context=context)
|
||||||
exp_ids += l_ids
|
exp_ids += l_ids
|
||||||
|
|
||||||
#Process for Other payment if any
|
#Process for Other payment if any
|
||||||
other_move_id = False
|
other_move_id = False
|
||||||
if slip.other_pay > 0:
|
if slip.other_pay > 0:
|
||||||
narration = 'Payment of Other Payeble amounts to %s' % (slip.employee_id.name)
|
narration = 'Payment of Other Payeble amounts to %s' % (slip.employee_id.name)
|
||||||
move = {
|
move = {
|
||||||
'journal_id': slip.bank_journal_id.id,
|
'journal_id': slip.bank_journal_id.id,
|
||||||
'period_id': period_id,
|
'period_id': period_id,
|
||||||
'date': slip.date,
|
'date': slip.date,
|
||||||
'type':'bank_pay_voucher',
|
'type':'bank_pay_voucher',
|
||||||
'ref':slip.number,
|
'ref':slip.number,
|
||||||
'narration': narration
|
'narration': narration
|
||||||
}
|
}
|
||||||
other_move_id = move_pool.create(cr, uid, move)
|
other_move_id = move_pool.create(cr, uid, move, context=context)
|
||||||
self.create_voucher(cr, uid, [slip.id], narration, move_id)
|
self.create_voucher(cr, uid, [slip.id], narration, move_id)
|
||||||
|
|
||||||
name = "To %s account" % (slip.employee_id.name)
|
name = "To %s account" % (slip.employee_id.name)
|
||||||
ded_rec = {
|
ded_rec = {
|
||||||
'move_id':other_move_id,
|
'move_id':other_move_id,
|
||||||
'name':name,
|
'name':name,
|
||||||
'date':slip.date,
|
'date':slip.date,
|
||||||
'account_id':slip.employee_id.property_bank_account.id,
|
'account_id':slip.employee_id.property_bank_account.id,
|
||||||
'debit': 0.0,
|
'debit': 0.0,
|
||||||
'credit': other_pay,
|
'credit': other_pay,
|
||||||
'journal_id':slip.journal_id.id,
|
'journal_id':slip.journal_id.id,
|
||||||
'period_id':period_id,
|
'period_id':period_id,
|
||||||
'ref':slip.number
|
'ref':slip.number
|
||||||
}
|
}
|
||||||
line_ids += [movel_pool.create(cr, uid, ded_rec)]
|
line_ids += [movel_pool.create(cr, uid, ded_rec, context=context)]
|
||||||
name = "By %s account" % (slip.employee_id.property_bank_account.name)
|
name = "By %s account" % (slip.employee_id.property_bank_account.name)
|
||||||
cre_rec = {
|
cre_rec = {
|
||||||
'move_id':other_move_id,
|
'move_id':other_move_id,
|
||||||
|
@ -216,85 +220,94 @@ class hr_payslip(osv.osv):
|
||||||
'period_id':period_id,
|
'period_id':period_id,
|
||||||
'ref':slip.number
|
'ref':slip.number
|
||||||
}
|
}
|
||||||
line_ids += [movel_pool.create(cr, uid, cre_rec)]
|
line_ids += [movel_pool.create(cr, uid, cre_rec, context=context)]
|
||||||
|
|
||||||
rec = {
|
rec = {
|
||||||
'state':'done',
|
'state':'done',
|
||||||
'move_payment_ids':[(6, 0, line_ids)],
|
'move_payment_ids':[(6, 0, line_ids)],
|
||||||
'paid':True
|
'paid':True
|
||||||
}
|
}
|
||||||
self.write(cr, uid, [slip.id], rec)
|
self.write(cr, uid, [slip.id], rec, context=context)
|
||||||
for exp_id in exp_ids:
|
for exp_id in exp_ids:
|
||||||
self.write(cr, uid, [slip.id], {'move_line_ids':[(4, exp_id)]})
|
self.write(cr, uid, [slip.id], {'move_line_ids':[(4, exp_id)]}, context=context)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def account_check_sheet(self, cr, uid, ids, context={}):
|
def account_check_sheet(self, cr, uid, ids, context=None):
|
||||||
self.write(cr, uid, ids, {'state':'accont_check'})
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
self.write(cr, uid, ids, {'state':'accont_check'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def hr_check_sheet(self, cr, uid, ids, context={}):
|
def hr_check_sheet(self, cr, uid, ids, context=None):
|
||||||
self.write(cr, uid, ids, {'state':'hr_check'})
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
self.write(cr, uid, ids, {'state':'hr_check'}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def verify_sheet(self, cr, uid, ids, context={}):
|
def verify_sheet(self, cr, uid, ids, context=None):
|
||||||
|
|
||||||
move_pool = self.pool.get('account.move')
|
move_pool = self.pool.get('account.move')
|
||||||
movel_pool = self.pool.get('account.move.line')
|
movel_pool = self.pool.get('account.move.line')
|
||||||
exp_pool = self.pool.get('hr.expense.expense')
|
exp_pool = self.pool.get('hr.expense.expense')
|
||||||
|
fiscalyear_pool = self.pool.get('account.fiscalyear')
|
||||||
for slip in self.browse(cr,uid,ids):
|
period_pool = self.pool.get('account.period')
|
||||||
|
property_pool = self.pool.get('ir.property')
|
||||||
|
payslip_pool = self.pool.get('hr.payslip.line')
|
||||||
|
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
for slip in self.browse(cr, uid, ids, context=context):
|
||||||
total_deduct = 0.0
|
total_deduct = 0.0
|
||||||
|
|
||||||
line_ids = []
|
line_ids = []
|
||||||
partner = False
|
partner = False
|
||||||
partner_id = False
|
partner_id = False
|
||||||
|
|
||||||
if not slip.employee_id.bank_account_id:
|
if not slip.employee_id.bank_account_id:
|
||||||
raise osv.except_osv(_('Integrity Error !'), _('Please defined bank account for %s !' % (slip.employee_id.name)))
|
raise osv.except_osv(_('Integrity Error !'), _('Please defined bank account for %s !' % (slip.employee_id.name)))
|
||||||
|
|
||||||
if not slip.employee_id.bank_account_id.partner_id:
|
if not slip.employee_id.bank_account_id.partner_id:
|
||||||
raise osv.except_osv(_('Integrity Error !'), _('Please defined partner in bank account for %s !' % (slip.employee_id.name)))
|
raise osv.except_osv(_('Integrity Error !'), _('Please defined partner in bank account for %s !' % (slip.employee_id.name)))
|
||||||
|
|
||||||
partner = slip.employee_id.bank_account_id.partner_id
|
partner = slip.employee_id.bank_account_id.partner_id
|
||||||
partner_id = slip.employee_id.bank_account_id.partner_id.id
|
partner_id = slip.employee_id.bank_account_id.partner_id.id
|
||||||
|
|
||||||
period_id = False
|
period_id = False
|
||||||
|
|
||||||
if slip.period_id:
|
if slip.period_id:
|
||||||
period_id = slip.period_id.id
|
period_id = slip.period_id.id
|
||||||
else:
|
else:
|
||||||
fiscal_year_ids = self.pool.get('account.fiscalyear').search(cr, uid, [])
|
fiscal_year_ids = fiscalyear_pool.search(cr, uid, [], context=context)
|
||||||
if not fiscal_year_ids:
|
if not fiscal_year_ids:
|
||||||
raise osv.except_osv(_('Warning !'), _('Please define fiscal year for perticular contract'))
|
raise osv.except_osv(_('Warning !'), _('Please define fiscal year for perticular contract'))
|
||||||
fiscal_year_objs = self.pool.get('account.fiscalyear').read(cr, uid, fiscal_year_ids, ['date_start','date_stop'])
|
fiscal_year_objs = fiscalyear_pool.read(cr, uid, fiscal_year_ids, ['date_start','date_stop'], context=context)
|
||||||
year_exist = False
|
year_exist = False
|
||||||
for fiscal_year in fiscal_year_objs:
|
for fiscal_year in fiscal_year_objs:
|
||||||
if ((fiscal_year['date_start'] <= slip.date) and (fiscal_year['date_stop'] >= slip.date)):
|
if ((fiscal_year['date_start'] <= slip.date) and (fiscal_year['date_stop'] >= slip.date)):
|
||||||
year_exist = True
|
year_exist = True
|
||||||
if not year_exist:
|
if not year_exist:
|
||||||
raise osv.except_osv(_('Warning !'), _('Fiscal Year is not defined for slip date %s'%slip.date))
|
raise osv.except_osv(_('Warning !'), _('Fiscal Year is not defined for slip date %s'%slip.date))
|
||||||
search_period = self.pool.get('account.period').search(cr,uid,[('date_start','<=',slip.date),('date_stop','>=',slip.date)])
|
search_periods = period_pool.search(cr,uid,[('date_start','<=',slip.date),('date_stop','>=',slip.date)], context=context)
|
||||||
if not search_period:
|
if not search_periods:
|
||||||
raise osv.except_osv(_('Warning !'), _('Period is not defined for slip date %s'%slip.date))
|
raise osv.except_osv(_('Warning !'), _('Period is not defined for slip date %s'%slip.date))
|
||||||
period_id = search_period[0]
|
period_id = search_periods[0]
|
||||||
|
|
||||||
move = {
|
move = {
|
||||||
#'name': slip.name,
|
#'name': slip.name,
|
||||||
'journal_id': slip.journal_id.id,
|
'journal_id': slip.journal_id.id,
|
||||||
'period_id': period_id,
|
'period_id': period_id,
|
||||||
'date': slip.date,
|
'date': slip.date,
|
||||||
'ref':slip.number,
|
'ref':slip.number,
|
||||||
'narration': slip.name
|
'narration': slip.name
|
||||||
}
|
}
|
||||||
move_id = move_pool.create(cr, uid, move)
|
move_id = move_pool.create(cr, uid, move, context=context)
|
||||||
self.create_voucher(cr, uid, [slip.id], slip.name, move_id)
|
self.create_voucher(cr, uid, [slip.id], slip.name, move_id)
|
||||||
|
|
||||||
line = {
|
line = {
|
||||||
'move_id':move_id,
|
'move_id':move_id,
|
||||||
'name': "By Basic Salary / " + slip.employee_id.name,
|
'name': "By Basic Salary / " + slip.employee_id.name,
|
||||||
'date': slip.date,
|
'date': slip.date,
|
||||||
'account_id': slip.employee_id.salary_account.id,
|
'account_id': slip.employee_id.salary_account.id,
|
||||||
'debit': slip.basic,
|
'debit': slip.basic,
|
||||||
'credit': 0.0,
|
'credit': 0.0,
|
||||||
'quantity':slip.working_days,
|
'quantity':slip.working_days,
|
||||||
|
@ -303,20 +316,20 @@ class hr_payslip(osv.osv):
|
||||||
'analytic_account_id': False,
|
'analytic_account_id': False,
|
||||||
'ref':slip.number
|
'ref':slip.number
|
||||||
}
|
}
|
||||||
|
|
||||||
#Setting Analysis Account for Basic Salary
|
#Setting Analysis Account for Basic Salary
|
||||||
if slip.employee_id.analytic_account:
|
if slip.employee_id.analytic_account:
|
||||||
line['analytic_account_id'] = slip.employee_id.analytic_account.id
|
line['analytic_account_id'] = slip.employee_id.analytic_account.id
|
||||||
|
|
||||||
move_line_id = movel_pool.create(cr, uid, line)
|
move_line_id = movel_pool.create(cr, uid, line, context=context)
|
||||||
line_ids += [move_line_id]
|
line_ids += [move_line_id]
|
||||||
|
|
||||||
line = {
|
line = {
|
||||||
'move_id':move_id,
|
'move_id':move_id,
|
||||||
'name': "To Basic Paysble Salary / " + slip.employee_id.name,
|
'name': "To Basic Paysble Salary / " + slip.employee_id.name,
|
||||||
'partner_id': partner_id,
|
'partner_id': partner_id,
|
||||||
'date': slip.date,
|
'date': slip.date,
|
||||||
'account_id': slip.employee_id.employee_account.id,
|
'account_id': slip.employee_id.employee_account.id,
|
||||||
'debit': 0.0,
|
'debit': 0.0,
|
||||||
'quantity':slip.working_days,
|
'quantity':slip.working_days,
|
||||||
'credit': slip.basic,
|
'credit': slip.basic,
|
||||||
|
@ -324,20 +337,20 @@ class hr_payslip(osv.osv):
|
||||||
'period_id': period_id,
|
'period_id': period_id,
|
||||||
'ref':slip.number
|
'ref':slip.number
|
||||||
}
|
}
|
||||||
line_ids += [movel_pool.create(cr, uid, line)]
|
line_ids += [movel_pool.create(cr, uid, line, context=context)]
|
||||||
|
|
||||||
for line in slip.line_ids:
|
for line in slip.line_ids:
|
||||||
name = "[%s] - %s / %s" % (line.code, line.name, slip.employee_id.name)
|
name = "[%s] - %s / %s" % (line.code, line.name, slip.employee_id.name)
|
||||||
amount = line.total
|
amount = line.total
|
||||||
|
|
||||||
if line.type == 'leaves':
|
if line.type == 'leaves':
|
||||||
continue
|
continue
|
||||||
|
|
||||||
rec = {
|
rec = {
|
||||||
'move_id':move_id,
|
'move_id':move_id,
|
||||||
'name': name,
|
'name': name,
|
||||||
'date': slip.date,
|
'date': slip.date,
|
||||||
'account_id': line.account_id.id,
|
'account_id': line.account_id.id,
|
||||||
'debit': 0.0,
|
'debit': 0.0,
|
||||||
'credit' : 0.0,
|
'credit' : 0.0,
|
||||||
'journal_id' : slip.journal_id.id,
|
'journal_id' : slip.journal_id.id,
|
||||||
|
@ -346,13 +359,13 @@ class hr_payslip(osv.osv):
|
||||||
'ref':slip.number,
|
'ref':slip.number,
|
||||||
'quantity':1
|
'quantity':1
|
||||||
}
|
}
|
||||||
|
|
||||||
#Setting Analysis Account for Salary Slip Lines
|
#Setting Analysis Account for Salary Slip Lines
|
||||||
if line.analytic_account_id:
|
if line.analytic_account_id:
|
||||||
rec['analytic_account_id'] = line.analytic_account_id.id
|
rec['analytic_account_id'] = line.analytic_account_id.id
|
||||||
else:
|
else:
|
||||||
rec['analytic_account_id'] = slip.deg_id.account_id.id
|
rec['analytic_account_id'] = slip.deg_id.account_id.id
|
||||||
|
|
||||||
if line.type == 'allowance' or line.type == 'otherpay':
|
if line.type == 'allowance' or line.type == 'otherpay':
|
||||||
rec['debit'] = amount
|
rec['debit'] = amount
|
||||||
if not partner.property_account_payable:
|
if not partner.property_account_payable:
|
||||||
|
@ -361,8 +374,8 @@ class hr_payslip(osv.osv):
|
||||||
'move_id':move_id,
|
'move_id':move_id,
|
||||||
'name': name,
|
'name': name,
|
||||||
'partner_id': partner_id,
|
'partner_id': partner_id,
|
||||||
'date': slip.date,
|
'date': slip.date,
|
||||||
'account_id': partner.property_account_payable.id,
|
'account_id': partner.property_account_payable.id,
|
||||||
'debit': 0.0,
|
'debit': 0.0,
|
||||||
'quantity':1,
|
'quantity':1,
|
||||||
'credit' : amount,
|
'credit' : amount,
|
||||||
|
@ -370,7 +383,7 @@ class hr_payslip(osv.osv):
|
||||||
'period_id' :period_id,
|
'period_id' :period_id,
|
||||||
'ref':slip.number
|
'ref':slip.number
|
||||||
}
|
}
|
||||||
line_ids += [movel_pool.create(cr, uid, ded_rec)]
|
line_ids += [movel_pool.create(cr, uid, ded_rec, context=context)]
|
||||||
elif line.type == 'deduction' or line.type == 'otherdeduct':
|
elif line.type == 'deduction' or line.type == 'otherdeduct':
|
||||||
if not partner.property_account_receivable:
|
if not partner.property_account_receivable:
|
||||||
raise osv.except_osv(_('Integrity Error !'), _('Please Configure Partners Receivable Account!!'))
|
raise osv.except_osv(_('Integrity Error !'), _('Please Configure Partners Receivable Account!!'))
|
||||||
|
@ -380,24 +393,24 @@ class hr_payslip(osv.osv):
|
||||||
'move_id':move_id,
|
'move_id':move_id,
|
||||||
'name': name,
|
'name': name,
|
||||||
'partner_id': partner_id,
|
'partner_id': partner_id,
|
||||||
'date': slip.date,
|
'date': slip.date,
|
||||||
'quantity':1,
|
'quantity':1,
|
||||||
'account_id': partner.property_account_receivable.id,
|
'account_id': partner.property_account_receivable.id,
|
||||||
'debit': amount,
|
'debit': amount,
|
||||||
'credit' : 0.0,
|
'credit' : 0.0,
|
||||||
'journal_id' : slip.journal_id.id,
|
'journal_id' : slip.journal_id.id,
|
||||||
'period_id' :period_id,
|
'period_id' :period_id,
|
||||||
'ref':slip.number
|
'ref':slip.number
|
||||||
}
|
}
|
||||||
line_ids += [movel_pool.create(cr, uid, ded_rec)]
|
line_ids += [movel_pool.create(cr, uid, ded_rec, context=context)]
|
||||||
|
|
||||||
line_ids += [movel_pool.create(cr, uid, rec)]
|
line_ids += [movel_pool.create(cr, uid, rec, context=context)]
|
||||||
|
|
||||||
for contrub in line.category_id.contribute_ids:
|
for contrub in line.category_id.contribute_ids:
|
||||||
print contrib.name, contrub.code, contrub.amount_type, contrib.contribute_per, line.total
|
print contrib.name, contrub.code, contrub.amount_type, contrib.contribute_per, line.total
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# if line.company_contrib > 0:
|
# if line.company_contrib > 0:
|
||||||
# company_contrib = line.company_contrib
|
# company_contrib = line.company_contrib
|
||||||
## if line.category_id.amount_type == 'per':
|
## if line.category_id.amount_type == 'per':
|
||||||
|
@ -405,9 +418,9 @@ class hr_payslip(osv.osv):
|
||||||
|
|
||||||
# narration = """Company Contribution of %s Encode same as a Company Expanse @ %s""" % (line.name, company_contrib)
|
# narration = """Company Contribution of %s Encode same as a Company Expanse @ %s""" % (line.name, company_contrib)
|
||||||
# move = {
|
# move = {
|
||||||
# #'name': slip.name,
|
# #'name': slip.name,
|
||||||
# 'journal_id': slip.journal_id.id,
|
# 'journal_id': slip.journal_id.id,
|
||||||
# 'period_id': period_id,
|
# 'period_id': period_id,
|
||||||
# 'date': slip.date,
|
# 'date': slip.date,
|
||||||
# 'ref':slip.number,
|
# 'ref':slip.number,
|
||||||
# 'narration': narration
|
# 'narration': narration
|
||||||
|
@ -415,11 +428,11 @@ class hr_payslip(osv.osv):
|
||||||
# company_contrib_move_id = move_pool.create(cr, uid, move)
|
# company_contrib_move_id = move_pool.create(cr, uid, move)
|
||||||
# name = "[%s] - %s / %s - Company Contribution" % (line.code, line.name, slip.employee_id.name)
|
# name = "[%s] - %s / %s - Company Contribution" % (line.code, line.name, slip.employee_id.name)
|
||||||
# self.create_voucher(cr, uid, [slip.id], name, company_contrib_move_id)
|
# self.create_voucher(cr, uid, [slip.id], name, company_contrib_move_id)
|
||||||
#
|
#
|
||||||
# ded_deb = {
|
# ded_deb = {
|
||||||
# 'move_id':company_contrib_move_id,
|
# 'move_id':company_contrib_move_id,
|
||||||
# 'name': name,
|
# 'name': name,
|
||||||
# 'date': slip.date,
|
# 'date': slip.date,
|
||||||
# 'quantity':1,
|
# 'quantity':1,
|
||||||
# 'account_id': line.category_id.account_id.id,
|
# 'account_id': line.category_id.account_id.id,
|
||||||
# 'debit': company_contrib,
|
# 'debit': company_contrib,
|
||||||
|
@ -432,7 +445,7 @@ class hr_payslip(osv.osv):
|
||||||
# ded_cre = {
|
# ded_cre = {
|
||||||
# 'move_id':company_contrib_move_id,
|
# 'move_id':company_contrib_move_id,
|
||||||
# 'name': name,
|
# 'name': name,
|
||||||
# 'date': slip.date,
|
# 'date': slip.date,
|
||||||
# 'quantity':1,
|
# 'quantity':1,
|
||||||
# 'account_id': line.category_id.register_id.account_id.id,
|
# 'account_id': line.category_id.register_id.account_id.id,
|
||||||
# 'debit': 0.0,
|
# 'debit': 0.0,
|
||||||
|
@ -442,26 +455,26 @@ class hr_payslip(osv.osv):
|
||||||
# 'ref':slip.number
|
# 'ref':slip.number
|
||||||
# }
|
# }
|
||||||
# line_ids += [movel_pool.create(cr, uid, ded_cre)]
|
# line_ids += [movel_pool.create(cr, uid, ded_cre)]
|
||||||
#
|
#
|
||||||
# if line.category_id.include_in_salary:
|
# if line.category_id.include_in_salary:
|
||||||
# narration = """Company Contribution of %s Deducted from Employee %s""" % (line.name, company_contrib)
|
# narration = """Company Contribution of %s Deducted from Employee %s""" % (line.name, company_contrib)
|
||||||
# move = {
|
# move = {
|
||||||
# #'name': slip.name,
|
# #'name': slip.name,
|
||||||
# 'journal_id': slip.journal_id.id,
|
# 'journal_id': slip.journal_id.id,
|
||||||
# 'period_id': period_id,
|
# 'period_id': period_id,
|
||||||
# 'date': slip.date,
|
# 'date': slip.date,
|
||||||
# 'ref':slip.number,
|
# 'ref':slip.number,
|
||||||
# 'narration': narration
|
# 'narration': narration
|
||||||
# }
|
# }
|
||||||
# include_in_salary_move_id = move_pool.create(cr, uid, move)
|
# include_in_salary_move_id = move_pool.create(cr, uid, move)
|
||||||
# self.create_voucher(cr, uid, [slip.id], narration, include_in_salary_move_id)
|
# self.create_voucher(cr, uid, [slip.id], narration, include_in_salary_move_id)
|
||||||
#
|
#
|
||||||
# total_deduct += company_contrib
|
# total_deduct += company_contrib
|
||||||
# ded_deb = {
|
# ded_deb = {
|
||||||
# 'move_id':include_in_salary_move_id,
|
# 'move_id':include_in_salary_move_id,
|
||||||
# 'name': name,
|
# 'name': name,
|
||||||
# 'partner_id': partner_id,
|
# 'partner_id': partner_id,
|
||||||
# 'date': slip.date,
|
# 'date': slip.date,
|
||||||
# 'quantity':1,
|
# 'quantity':1,
|
||||||
# 'account_id': partner.property_account_receivable.id,
|
# 'account_id': partner.property_account_receivable.id,
|
||||||
# 'debit': company_contrib,
|
# 'debit': company_contrib,
|
||||||
|
@ -474,7 +487,7 @@ class hr_payslip(osv.osv):
|
||||||
# ded_cre = {
|
# ded_cre = {
|
||||||
# 'move_id':include_in_salary_move_id,
|
# 'move_id':include_in_salary_move_id,
|
||||||
# 'name': name,
|
# 'name': name,
|
||||||
# 'date': slip.date,
|
# 'date': slip.date,
|
||||||
# 'quantity':1,
|
# 'quantity':1,
|
||||||
# 'account_id': line.category_id.account_id.id,
|
# 'account_id': line.category_id.account_id.id,
|
||||||
# 'debit': 0.0,
|
# 'debit': 0.0,
|
||||||
|
@ -497,14 +510,14 @@ class hr_payslip(osv.osv):
|
||||||
# }
|
# }
|
||||||
# if line.category_id.contribute:
|
# if line.category_id.contribute:
|
||||||
# ctr['comp_deduction'] = amount
|
# ctr['comp_deduction'] = amount
|
||||||
#
|
#
|
||||||
# company = 0.0
|
# company = 0.0
|
||||||
# employee = 0.0
|
# employee = 0.0
|
||||||
# if line.category_id.contribute and line.category_id.include_in_salary and line.category_id.amount_type == 'per':
|
# if line.category_id.contribute and line.category_id.include_in_salary and line.category_id.amount_type == 'per':
|
||||||
# new_amount = (amount * (line.category_id.contribute_per / (1+line.category_id.contribute_per)))
|
# new_amount = (amount * (line.category_id.contribute_per / (1+line.category_id.contribute_per)))
|
||||||
# company = new_amount
|
# company = new_amount
|
||||||
# employee = amount - company
|
# employee = amount - company
|
||||||
#
|
#
|
||||||
# elif line.category_id.contribute and line.category_id.include_in_salary and line.category_id.amount_type == 'fix':
|
# elif line.category_id.contribute and line.category_id.include_in_salary and line.category_id.amount_type == 'fix':
|
||||||
# company = line.category_id.contribute_per
|
# company = line.category_id.contribute_per
|
||||||
# employee = amount - company
|
# employee = amount - company
|
||||||
|
@ -512,11 +525,11 @@ class hr_payslip(osv.osv):
|
||||||
# elif line.category_id.contribute and line.category_id.include_in_salary and line.category_id.amount_type == 'func':
|
# elif line.category_id.contribute and line.category_id.include_in_salary and line.category_id.amount_type == 'func':
|
||||||
# company = self.pool.get('hr.allounce.deduction.categoty').execute_function(cr, uid, line.category_id.id, line.slip_id.basic, context)
|
# company = self.pool.get('hr.allounce.deduction.categoty').execute_function(cr, uid, line.category_id.id, line.slip_id.basic, context)
|
||||||
# employee = amount
|
# employee = amount
|
||||||
#
|
#
|
||||||
# elif line.category_id.contribute and not line.category_id.include_in_salary and line.category_id.amount_type == 'per':
|
# elif line.category_id.contribute and not line.category_id.include_in_salary and line.category_id.amount_type == 'per':
|
||||||
# company = amount * line.category_id.contribute_per
|
# company = amount * line.category_id.contribute_per
|
||||||
# employee = amount
|
# employee = amount
|
||||||
#
|
#
|
||||||
# elif line.category_id.contribute and not line.category_id.include_in_salary and line.category_id.amount_type == 'fix':
|
# elif line.category_id.contribute and not line.category_id.include_in_salary and line.category_id.amount_type == 'fix':
|
||||||
# company = line.category_id.contribute_per
|
# company = line.category_id.contribute_per
|
||||||
# employee = amount
|
# employee = amount
|
||||||
|
@ -524,10 +537,10 @@ class hr_payslip(osv.osv):
|
||||||
# elif line.category_id.contribute and not line.category_id.include_in_salary and line.category_id.amount_type == 'func':
|
# elif line.category_id.contribute and not line.category_id.include_in_salary and line.category_id.amount_type == 'func':
|
||||||
# company = self.pool.get('hr.allounce.deduction.categoty').execute_function(cr, uid, line.category_id.id, line.slip_id.basic, context)
|
# company = self.pool.get('hr.allounce.deduction.categoty').execute_function(cr, uid, line.category_id.id, line.slip_id.basic, context)
|
||||||
# employee = amount
|
# employee = amount
|
||||||
#
|
#
|
||||||
# ctr['emp_deduction'] = employee
|
# ctr['emp_deduction'] = employee
|
||||||
# ctr['comp_deduction'] = company
|
# ctr['comp_deduction'] = company
|
||||||
#
|
#
|
||||||
# self.pool.get('hr.contibution.register.line').create(cr, uid, ctr)
|
# self.pool.get('hr.contibution.register.line').create(cr, uid, ctr)
|
||||||
|
|
||||||
adj_move_id = False
|
adj_move_id = False
|
||||||
|
@ -539,16 +552,16 @@ class hr_payslip(osv.osv):
|
||||||
'ref':slip.number,
|
'ref':slip.number,
|
||||||
'narration': 'Adjustment : %s' % (slip.name)
|
'narration': 'Adjustment : %s' % (slip.name)
|
||||||
}
|
}
|
||||||
adj_move_id = move_pool.create(cr, uid, move)
|
adj_move_id = move_pool.create(cr, uid, move, context=context)
|
||||||
name = "Adjustment Entry - %s" % (slip.employee_id.name)
|
name = "Adjustment Entry - %s" % (slip.employee_id.name)
|
||||||
self.create_voucher(cr, uid, [slip.id], name, adj_move_id)
|
self.create_voucher(cr, uid, [slip.id], name, adj_move_id)
|
||||||
|
|
||||||
ded_rec = {
|
ded_rec = {
|
||||||
'move_id':adj_move_id,
|
'move_id':adj_move_id,
|
||||||
'name': name,
|
'name': name,
|
||||||
'partner_id': partner_id,
|
'partner_id': partner_id,
|
||||||
'date': slip.date,
|
'date': slip.date,
|
||||||
'account_id': partner.property_account_receivable.id,
|
'account_id': partner.property_account_receivable.id,
|
||||||
'debit': 0.0,
|
'debit': 0.0,
|
||||||
'quantity':1,
|
'quantity':1,
|
||||||
'credit' : total_deduct,
|
'credit' : total_deduct,
|
||||||
|
@ -556,13 +569,13 @@ class hr_payslip(osv.osv):
|
||||||
'period_id' :period_id,
|
'period_id' :period_id,
|
||||||
'ref':slip.number
|
'ref':slip.number
|
||||||
}
|
}
|
||||||
line_ids += [movel_pool.create(cr, uid, ded_rec)]
|
line_ids += [movel_pool.create(cr, uid, ded_rec, context=context)]
|
||||||
cre_rec = {
|
cre_rec = {
|
||||||
'move_id':adj_move_id,
|
'move_id':adj_move_id,
|
||||||
'name': name,
|
'name': name,
|
||||||
'partner_id': partner_id,
|
'partner_id': partner_id,
|
||||||
'date': slip.date,
|
'date': slip.date,
|
||||||
'account_id': partner.property_account_payable.id,
|
'account_id': partner.property_account_payable.id,
|
||||||
'debit': total_deduct,
|
'debit': total_deduct,
|
||||||
'quantity':1,
|
'quantity':1,
|
||||||
'credit' : 0.0,
|
'credit' : 0.0,
|
||||||
|
@ -570,7 +583,7 @@ class hr_payslip(osv.osv):
|
||||||
'period_id' :period_id,
|
'period_id' :period_id,
|
||||||
'ref':slip.number
|
'ref':slip.number
|
||||||
}
|
}
|
||||||
line_ids += [movel_pool.create(cr, uid, cre_rec)]
|
line_ids += [movel_pool.create(cr, uid, cre_rec, context=context)]
|
||||||
|
|
||||||
rec = {
|
rec = {
|
||||||
'state':'confirm',
|
'state':'confirm',
|
||||||
|
@ -578,12 +591,12 @@ class hr_payslip(osv.osv):
|
||||||
}
|
}
|
||||||
if not slip.period_id:
|
if not slip.period_id:
|
||||||
rec['period_id'] = period_id
|
rec['period_id'] = period_id
|
||||||
|
|
||||||
dates = prev_bounds(slip.date)
|
dates = prev_bounds(slip.date)
|
||||||
exp_ids = exp_pool.search(cr, uid, [('date_valid','>=',dates[0]), ('date_valid','<=',dates[1]), ('state','=','invoiced')])
|
exp_ids = exp_pool.search(cr, uid, [('date_valid','>=',dates[0]), ('date_valid','<=',dates[1]), ('state','=','invoiced')], context=context)
|
||||||
if exp_ids:
|
if exp_ids:
|
||||||
acc = self.pool.get('ir.property').get(cr, uid, 'property_account_expense_categ', 'product.category')
|
acc = property_pool.get(cr, uid, 'property_account_expense_categ', 'product.category')
|
||||||
for exp in exp_pool.browse(cr, uid, exp_ids):
|
for exp in exp_pool.browse(cr, uid, exp_ids, context=context):
|
||||||
exp_res = {
|
exp_res = {
|
||||||
'name':exp.name,
|
'name':exp.name,
|
||||||
'amount_type':'fix',
|
'amount_type':'fix',
|
||||||
|
@ -594,12 +607,12 @@ class hr_payslip(osv.osv):
|
||||||
'expanse_id':exp.id,
|
'expanse_id':exp.id,
|
||||||
'account_id':acc
|
'account_id':acc
|
||||||
}
|
}
|
||||||
self.pool.get('hr.payslip.line').create(cr, uid, exp_res)
|
payslip_pool.create(cr, uid, exp_res, context=context)
|
||||||
|
|
||||||
self.write(cr, uid, [slip.id], rec)
|
self.write(cr, uid, [slip.id], rec, context=context)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
hr_payslip()
|
hr_payslip()
|
||||||
|
|
||||||
class account_move_link_slip(osv.osv):
|
class account_move_link_slip(osv.osv):
|
||||||
|
|
|
@ -136,11 +136,14 @@ class hr_applicant(osv.osv, crm.crm_case):
|
||||||
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
|
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
|
||||||
}
|
}
|
||||||
|
|
||||||
def onchange_job(self,cr, uid, ids, job, context={}):
|
def onchange_job(self,cr, uid, ids, job, context=None):
|
||||||
|
job_obj = self.pool.get('hr.job')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
result = {}
|
result = {}
|
||||||
|
|
||||||
if job:
|
if job:
|
||||||
job_obj = self.pool.get('hr.job')
|
result['department_id'] = job_obj.browse(cr, uid, job, context=context).department_id.id
|
||||||
result['department_id'] = job_obj.browse(cr, uid, job).department_id.id
|
|
||||||
return {'value': result}
|
return {'value': result}
|
||||||
return {'value': {'department_id': []}}
|
return {'value': {'department_id': []}}
|
||||||
|
|
||||||
|
@ -152,14 +155,15 @@ class hr_applicant(osv.osv, crm.crm_case):
|
||||||
@param uid: the current user’s ID for security checks,
|
@param uid: the current user’s ID for security checks,
|
||||||
@param ids: List of case IDs
|
@param ids: List of case IDs
|
||||||
@param context: A standard dictionary for contextual values"""
|
@param context: A standard dictionary for contextual values"""
|
||||||
|
stage_obj = self.pool.get('hr.recruitment.stage')
|
||||||
if not context:
|
if not context:
|
||||||
context = {}
|
context = {}
|
||||||
for case in self.browse(cr, uid, ids, context):
|
for case in self.browse(cr, uid, ids, context=context):
|
||||||
department = (case.department_id.id or False)
|
department = (case.department_id.id or False)
|
||||||
st = case.stage_id.id or False
|
st = case.stage_id.id or False
|
||||||
stage_ids = self.pool.get('hr.recruitment.stage').search(cr, uid, ['|',('department_id','=',department),('department_id','=',False)])
|
stage_ids = stage_obj.search(cr, uid, ['|',('department_id','=',department),('department_id','=',False)], context=context)
|
||||||
if st and stage_ids.index(st):
|
if st and stage_ids.index(st):
|
||||||
self.write(cr, uid, [case.id], {'stage_id': stage_ids[stage_ids.index(st)-1]})
|
self.write(cr, uid, [case.id], {'stage_id': stage_ids[stage_ids.index(st)-1]}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def stage_next(self, cr, uid, ids, context=None):
|
def stage_next(self, cr, uid, ids, context=None):
|
||||||
|
@ -170,14 +174,15 @@ class hr_applicant(osv.osv, crm.crm_case):
|
||||||
@param uid: the current user’s ID for security checks,
|
@param uid: the current user’s ID for security checks,
|
||||||
@param ids: List of case IDs
|
@param ids: List of case IDs
|
||||||
@param context: A standard dictionary for contextual values"""
|
@param context: A standard dictionary for contextual values"""
|
||||||
|
stage_obj = self.pool.get('hr.recruitment.stage')
|
||||||
if not context:
|
if not context:
|
||||||
context = {}
|
context = {}
|
||||||
for case in self.browse(cr, uid, ids, context):
|
for case in self.browse(cr, uid, ids, context=context):
|
||||||
department = (case.department_id.id or False)
|
department = (case.department_id.id or False)
|
||||||
st = case.stage_id.id or False
|
st = case.stage_id.id or False
|
||||||
stage_ids = self.pool.get('hr.recruitment.stage').search(cr, uid, ['|',('department_id','=',department),('department_id','=',False)])
|
stage_ids = stage_obj.search(cr, uid, ['|',('department_id','=',department),('department_id','=',False)], context=context)
|
||||||
if st and len(stage_ids) != stage_ids.index(st)+1:
|
if st and len(stage_ids) != stage_ids.index(st)+1:
|
||||||
self.write(cr, uid, [case.id], {'stage_id': stage_ids[stage_ids.index(st)+1]})
|
self.write(cr, uid, [case.id], {'stage_id': stage_ids[stage_ids.index(st)+1]}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def action_makeMeeting(self, cr, uid, ids, context=None):
|
def action_makeMeeting(self, cr, uid, ids, context=None):
|
||||||
|
@ -191,13 +196,14 @@ class hr_applicant(osv.osv, crm.crm_case):
|
||||||
|
|
||||||
@return : Dictionary value for created Meeting view
|
@return : Dictionary value for created Meeting view
|
||||||
"""
|
"""
|
||||||
|
data_obj = self.pool.get('ir.model.data')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
value = {}
|
value = {}
|
||||||
for opp in self.browse(cr, uid, ids):
|
for opp in self.browse(cr, uid, ids, context=context):
|
||||||
data_obj = self.pool.get('ir.model.data')
|
|
||||||
|
|
||||||
# Get meeting views
|
# Get meeting views
|
||||||
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_meetings_filter')
|
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_meetings_filter')
|
||||||
res = data_obj.read(cr, uid, result, ['res_id'])
|
res = data_obj.read(cr, uid, result, ['res_id'], context=context)
|
||||||
id1 = data_obj._get_id(cr, uid, 'crm', 'crm_case_calendar_view_meet')
|
id1 = data_obj._get_id(cr, uid, 'crm', 'crm_case_calendar_view_meet')
|
||||||
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_meet')
|
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_meet')
|
||||||
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_meet')
|
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_meet')
|
||||||
|
@ -243,13 +249,13 @@ class hr_applicant(osv.osv, crm.crm_case):
|
||||||
"""
|
"""
|
||||||
if not context:
|
if not context:
|
||||||
context = {}
|
context = {}
|
||||||
record = self.browse(cr, uid, ids, context)
|
record = self.browse(cr, uid, ids, context=context)
|
||||||
record = record and record[0]
|
record = record and record[0]
|
||||||
context.update({'survey_id': record.survey.id, 'response_id' : [record.response], 'response_no':0, })
|
context.update({'survey_id': record.survey.id, 'response_id' : [record.response], 'response_no':0, })
|
||||||
value = self.pool.get("survey").action_print_survey(cr, uid, ids, context)
|
value = self.pool.get("survey").action_print_survey(cr, uid, ids, context)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def message_new(self, cr, uid, msg, context):
|
def message_new(self, cr, uid, msg, context=None):
|
||||||
"""
|
"""
|
||||||
Automatically calls when new email message arrives
|
Automatically calls when new email message arrives
|
||||||
|
|
||||||
|
@ -257,8 +263,10 @@ class hr_applicant(osv.osv, crm.crm_case):
|
||||||
@param cr: the current row, from the database cursor,
|
@param cr: the current row, from the database cursor,
|
||||||
@param uid: the current user’s ID for security checks
|
@param uid: the current user’s ID for security checks
|
||||||
"""
|
"""
|
||||||
|
|
||||||
mailgate_pool = self.pool.get('email.server.tools')
|
mailgate_pool = self.pool.get('email.server.tools')
|
||||||
|
attach_obj = self.pool.get('ir.attachment')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
|
||||||
subject = msg.get('subject')
|
subject = msg.get('subject')
|
||||||
body = msg.get('body')
|
body = msg.get('body')
|
||||||
|
@ -278,7 +286,7 @@ class hr_applicant(osv.osv, crm.crm_case):
|
||||||
res = mailgate_pool.get_partner(cr, uid, msg.get('from'))
|
res = mailgate_pool.get_partner(cr, uid, msg.get('from'))
|
||||||
if res:
|
if res:
|
||||||
vals.update(res)
|
vals.update(res)
|
||||||
res = self.create(cr, uid, vals, context)
|
res = self.create(cr, uid, vals, context=context)
|
||||||
|
|
||||||
message = _('A Job Request created') + " '" + subject + "' " + _("from Mailgate.")
|
message = _('A Job Request created') + " '" + subject + "' " + _("from Mailgate.")
|
||||||
self.log(cr, uid, res, message)
|
self.log(cr, uid, res, message)
|
||||||
|
@ -293,17 +301,19 @@ class hr_applicant(osv.osv, crm.crm_case):
|
||||||
'res_model': self._name,
|
'res_model': self._name,
|
||||||
'res_id': res,
|
'res_id': res,
|
||||||
}
|
}
|
||||||
self.pool.get('ir.attachment').create(cr, uid, data_attach)
|
attach_obj.create(cr, uid, data_attach, context=context)
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def message_update(self, cr, uid, ids, vals={}, msg="", default_act='pending', context={}):
|
def message_update(self, cr, uid, ids, vals={}, msg="", default_act='pending', context=None):
|
||||||
"""
|
"""
|
||||||
@param self: The object pointer
|
@param self: The object pointer
|
||||||
@param cr: the current row, from the database cursor,
|
@param cr: the current row, from the database cursor,
|
||||||
@param uid: the current user’s ID for security checks,
|
@param uid: the current user’s ID for security checks,
|
||||||
@param ids: List of update mail’s IDs
|
@param ids: List of update mail’s IDs
|
||||||
"""
|
"""
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
|
||||||
if isinstance(ids, (str, int, long)):
|
if isinstance(ids, (str, int, long)):
|
||||||
ids = [ids]
|
ids = [ids]
|
||||||
|
@ -329,7 +339,7 @@ class hr_applicant(osv.osv, crm.crm_case):
|
||||||
vls[key] = res.group(2).lower()
|
vls[key] = res.group(2).lower()
|
||||||
|
|
||||||
vals.update(vls)
|
vals.update(vls)
|
||||||
res = self.write(cr, uid, ids, vals)
|
res = self.write(cr, uid, ids, vals, context=context)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def msg_send(self, cr, uid, id, *args, **argv):
|
def msg_send(self, cr, uid, id, *args, **argv):
|
||||||
|
|
|
@ -1,50 +1,47 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<openerp>
|
<openerp>
|
||||||
<data>
|
<data>
|
||||||
<menuitem icon="terp-hr" id="base.menu_hr" name="Human Resources"/>
|
|
||||||
|
|
||||||
######################## JOB OPPORTUNITIES (menu) ###########################
|
######################## JOB OPPORTUNITIES (menu) ###########################
|
||||||
<record model="ir.actions.act_window" id="crm_case_categ0_act_job">
|
<record model="ir.actions.act_window" id="crm_case_categ0_act_job">
|
||||||
<field name="name">Applicants</field>
|
<field name="name">Applicants</field>
|
||||||
<field name="res_model">hr.applicant</field>
|
<field name="res_model">hr.applicant</field>
|
||||||
<field name="view_mode">tree,form,graph,calendar</field>
|
<field name="view_mode">tree,form,graph,calendar</field>
|
||||||
<field name="view_id" ref="crm_case_tree_view_job"/>
|
<field name="view_id" ref="crm_case_tree_view_job"/>
|
||||||
<field name="context">{"search_default_user_id":uid, 'search_default_current': 1}</field>
|
<field name="context">{"search_default_user_id":uid, 'search_default_current': 1}</field>
|
||||||
<field name="search_view_id" ref="view_crm_case_jobs_filter"/>
|
<field name="search_view_id" ref="view_crm_case_jobs_filter"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
</record>
|
<record model="ir.actions.act_window.view" id="action_hr_sec_tree_view_act_job">
|
||||||
<record model="ir.actions.act_window.view" id="action_hr_sec_tree_view_act_job">
|
<field name="sequence" eval="1"/>
|
||||||
<field name="sequence" eval="1"/>
|
<field name="view_mode">tree</field>
|
||||||
<field name="view_mode">tree</field>
|
<field name="view_id" ref="crm_case_tree_view_job"/>
|
||||||
<field name="view_id" ref="crm_case_tree_view_job"/>
|
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
|
||||||
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
|
</record>
|
||||||
</record>
|
|
||||||
<record model="ir.actions.act_window.view" id="action_hr_sec_form_view_act_job">
|
|
||||||
<field name="sequence" eval="3"/>
|
|
||||||
<field name="view_mode">form</field>
|
|
||||||
<field name="view_id" ref="crm_case_form_view_job"/>
|
|
||||||
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
|
|
||||||
</record>
|
|
||||||
<record model="ir.actions.act_window.view" id="action_hr_sec_graph_view_act_job">
|
|
||||||
<field name="sequence" eval="4"/>
|
|
||||||
<field name="view_mode">graph</field>
|
|
||||||
<field name="view_id" ref="crm_case_graph_view_job"/>
|
|
||||||
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
|
|
||||||
</record>
|
|
||||||
<!--<menuitem
|
|
||||||
name="Jobs - Hiring Process"
|
|
||||||
id="menu_crm_case_job_req_main"
|
|
||||||
parent="base.menu_hr"/>-->
|
|
||||||
<menuitem
|
|
||||||
name="Recruitment"
|
|
||||||
id="base.menu_crm_case_job_req_main"
|
|
||||||
parent="base.menu_hr"
|
|
||||||
sequence="1"/>
|
|
||||||
|
|
||||||
<!--
|
<record model="ir.actions.act_window.view" id="action_hr_sec_form_view_act_job">
|
||||||
ALL JOBS REQUESTS
|
<field name="sequence" eval="3"/>
|
||||||
-->
|
<field name="view_mode">form</field>
|
||||||
<menuitem name="Applicants" parent="base.menu_crm_case_job_req_main" id="menu_crm_case_categ0_act_job" action="crm_case_categ0_act_job" sequence="1"/>
|
<field name="view_id" ref="crm_case_form_view_job"/>
|
||||||
|
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
</data>
|
<record model="ir.actions.act_window.view" id="action_hr_sec_graph_view_act_job">
|
||||||
|
<field name="sequence" eval="4"/>
|
||||||
|
<field name="view_mode">graph</field>
|
||||||
|
<field name="view_id" ref="crm_case_graph_view_job"/>
|
||||||
|
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem
|
||||||
|
name="Recruitment"
|
||||||
|
id="base.menu_crm_case_job_req_main"
|
||||||
|
parent="hr.menu_hr_root"
|
||||||
|
sequence="1"/>
|
||||||
|
|
||||||
|
<!-- ALL JOBS REQUESTS -->
|
||||||
|
|
||||||
|
<menuitem name="Applicants" parent="base.menu_crm_case_job_req_main" id="menu_crm_case_categ0_act_job" action="crm_case_categ0_act_job" sequence="1"/>
|
||||||
|
|
||||||
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -31,9 +31,11 @@ class hr_recruitment_partner_create(osv.osv_memory):
|
||||||
|
|
||||||
def view_init(self, cr , uid , fields_list, context=None):
|
def view_init(self, cr , uid , fields_list, context=None):
|
||||||
case_obj = self.pool.get('hr.applicant')
|
case_obj = self.pool.get('hr.applicant')
|
||||||
for case in case_obj.browse(cr, uid, context['active_ids']):
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
for case in case_obj.browse(cr, uid, context['active_ids'], context=context):
|
||||||
if case.partner_id:
|
if case.partner_id:
|
||||||
raise osv.except_osv(_('Warning !'),
|
raise osv.except_osv(_('Error !'),
|
||||||
_('A partner is already defined on this job request.'))
|
_('A partner is already defined on this job request.'))
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -45,31 +47,31 @@ class hr_recruitment_partner_create(osv.osv_memory):
|
||||||
|
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
data = self.read(cr, uid, ids, [], context)[0]
|
data = self.read(cr, uid, ids, [], context=context)[0]
|
||||||
result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
|
result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
|
||||||
res = mod_obj.read(cr, uid, result, ['res_id'])
|
res = mod_obj.read(cr, uid, result, ['res_id'], context=context)
|
||||||
|
|
||||||
for case in case_obj.browse(cr, uid, context['active_ids']):
|
for case in case_obj.browse(cr, uid, context['active_ids'], context=context):
|
||||||
partner_id = partner_obj.search(cr, uid, [('name', '=', case.partner_name or case.name)])
|
partner_id = partner_obj.search(cr, uid, [('name', '=', case.partner_name or case.name)], context=context)
|
||||||
if partner_id:
|
if partner_id:
|
||||||
raise osv.except_osv(_('Warning !'),_('A partner is already existing with the same name.'))
|
raise osv.except_osv(_('Error !'),_('A partner is already existing with the same name.'))
|
||||||
partner_id = partner_obj.create(cr, uid, {
|
partner_id = partner_obj.create(cr, uid, {
|
||||||
'name': case.partner_name or case.name,
|
'name': case.partner_name or case.name,
|
||||||
'user_id': case.user_id.id,
|
'user_id': case.user_id.id,
|
||||||
'comment': case.description,
|
'comment': case.description,
|
||||||
})
|
}, context=context)
|
||||||
contact_id = contact_obj.create(cr, uid, {
|
contact_id = contact_obj.create(cr, uid, {
|
||||||
'partner_id': partner_id,
|
'partner_id': partner_id,
|
||||||
'name': case.partner_name,
|
'name': case.partner_name,
|
||||||
'phone': case.partner_phone,
|
'phone': case.partner_phone,
|
||||||
'mobile': case.partner_mobile,
|
'mobile': case.partner_mobile,
|
||||||
'email': case.email_from
|
'email': case.email_from
|
||||||
})
|
}, context=context)
|
||||||
|
|
||||||
case_obj.write(cr, uid, case.id, {
|
case_obj.write(cr, uid, case.id, {
|
||||||
'partner_id': partner_id,
|
'partner_id': partner_id,
|
||||||
'partner_address_id': contact_id
|
'partner_address_id': contact_id
|
||||||
})
|
}, context=context)
|
||||||
if data['close']:
|
if data['close']:
|
||||||
case_obj.case_close(cr, uid, context['active_ids'])
|
case_obj.case_close(cr, uid, context['active_ids'])
|
||||||
|
|
||||||
|
|
|
@ -9,9 +9,7 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Convert To Partner">
|
<form string="Convert To Partner">
|
||||||
<group col="4" colspan="6">
|
<group col="4" colspan="6">
|
||||||
<label string="Are you sure you want to create a partner based on this job request ?" colspan="4"/>
|
<label string="Are you sure you want to create a partner based on this job request ?"/>
|
||||||
<label string="You may have to verify that this partner does not exist already." colspan="4"/>
|
|
||||||
<!--field name="close"/-->
|
|
||||||
</group>
|
</group>
|
||||||
<separator colspan="4"/>
|
<separator colspan="4"/>
|
||||||
<group col="2" colspan="4">
|
<group col="2" colspan="4">
|
||||||
|
@ -31,15 +29,5 @@
|
||||||
<field name="target">new</field>
|
<field name="target">new</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- <record model="ir.values" id="hr_recruitment_partner_create_values">
|
|
||||||
<field name="model_id" ref="model_hr_applicant" />
|
|
||||||
<field name="object" eval="1" />
|
|
||||||
<field name="name">Create Partner</field>
|
|
||||||
<field name="key2">client_action_multi</field>
|
|
||||||
<field name="value" eval="'ir.actions.act_window,' + str(ref('action_hr_recruitment_partner_create'))" />
|
|
||||||
<field name="key">action</field>
|
|
||||||
<field name="model">hr.applicant</field>
|
|
||||||
</record> -->
|
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
|
@ -36,16 +36,22 @@ class job2phonecall(osv.osv_memory):
|
||||||
|
|
||||||
def _date_user(self, cr, uid, context=None):
|
def _date_user(self, cr, uid, context=None):
|
||||||
case_obj = self.pool.get('hr.applicant')
|
case_obj = self.pool.get('hr.applicant')
|
||||||
case = case_obj.browse(cr, uid, context['active_id'])
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
case = case_obj.browse(cr, uid, context['active_id'], context=context)
|
||||||
return case.user_id and case.user_id.id or False
|
return case.user_id and case.user_id.id or False
|
||||||
|
|
||||||
def _date_category(self, cr, uid, context=None):
|
def _date_category(self, cr, uid, context=None):
|
||||||
categ_id = self.pool.get('crm.case.categ').search(cr, uid, [('name','=','Outbound')])
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
categ_id = self.pool.get('crm.case.categ').search(cr, uid, [('name','=','Outbound')], context=context)
|
||||||
return categ_id and categ_id[0] or case.categ_id and case.categ_id.id or False
|
return categ_id and categ_id[0] or case.categ_id and case.categ_id.id or False
|
||||||
|
|
||||||
def _get_note(self, cr, uid, context=None):
|
def _get_note(self, cr, uid, context=None):
|
||||||
case_obj = self.pool.get('hr.applicant')
|
case_obj = self.pool.get('hr.applicant')
|
||||||
case = case_obj.browse(cr, uid, context['active_id'])
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
case = case_obj.browse(cr, uid, context['active_id'], context=context)
|
||||||
return case.description or ''
|
return case.description or ''
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
|
@ -59,11 +65,12 @@ class job2phonecall(osv.osv_memory):
|
||||||
job_case_obj = self.pool.get('hr.applicant')
|
job_case_obj = self.pool.get('hr.applicant')
|
||||||
data_obj = self.pool.get('ir.model.data')
|
data_obj = self.pool.get('ir.model.data')
|
||||||
phonecall_case_obj = self.pool.get('crm.phonecall')
|
phonecall_case_obj = self.pool.get('crm.phonecall')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
form = self.read(cr, uid, ids, [], context=context)[0]
|
form = self.read(cr, uid, ids, [], context=context)[0]
|
||||||
# form = data['form']
|
# form = data['form']
|
||||||
result = mod_obj._get_id(cr, uid, 'crm', 'view_crm_case_phonecalls_filter')
|
result = mod_obj._get_id(cr, uid, 'crm', 'view_crm_case_phonecalls_filter')
|
||||||
res = mod_obj.read(cr, uid, result, ['res_id'])
|
res = mod_obj.read(cr, uid, result, ['res_id'], context=context)
|
||||||
# Select the view
|
# Select the view
|
||||||
|
|
||||||
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_phone_tree_view')
|
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_phone_tree_view')
|
||||||
|
@ -73,7 +80,7 @@ class job2phonecall(osv.osv_memory):
|
||||||
if id3:
|
if id3:
|
||||||
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
||||||
|
|
||||||
for job in job_case_obj.browse(cr, uid, context['active_ids']):
|
for job in job_case_obj.browse(cr, uid, context['active_ids'], context=context):
|
||||||
#TODO : Take other info from job
|
#TODO : Take other info from job
|
||||||
new_phonecall_id = phonecall_case_obj.create(cr, uid, {
|
new_phonecall_id = phonecall_case_obj.create(cr, uid, {
|
||||||
'name' : job.name,
|
'name' : job.name,
|
||||||
|
@ -90,11 +97,11 @@ class job2phonecall(osv.osv_memory):
|
||||||
'description':job.description,
|
'description':job.description,
|
||||||
'date':job.date,
|
'date':job.date,
|
||||||
}, context=context)
|
}, context=context)
|
||||||
new_phonecall = phonecall_case_obj.browse(cr, uid, new_phonecall_id)
|
new_phonecall = phonecall_case_obj.browse(cr, uid, new_phonecall_id, context=context)
|
||||||
vals = {}
|
vals = {}
|
||||||
# if not job.case_id:
|
# if not job.case_id:
|
||||||
# vals.update({'phonecall_id' : new_phonecall.id})
|
# vals.update({'phonecall_id' : new_phonecall.id})
|
||||||
job_case_obj.write(cr, uid, [job.id], vals)
|
job_case_obj.write(cr, uid, [job.id], vals, context=context)
|
||||||
job_case_obj.case_cancel(cr, uid, [job.id])
|
job_case_obj.case_cancel(cr, uid, [job.id])
|
||||||
phonecall_case_obj.case_open(cr, uid, [new_phonecall_id])
|
phonecall_case_obj.case_open(cr, uid, [new_phonecall_id])
|
||||||
|
|
||||||
|
@ -111,4 +118,4 @@ class job2phonecall(osv.osv_memory):
|
||||||
|
|
||||||
job2phonecall()
|
job2phonecall()
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:>>>>>>> MERGE-SOURCE
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
# OpenERP, Open Source Management Solution
|
# OpenERP, Open Source Management Solution
|
||||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||||
#
|
#
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
# GNU Affero General Public License for more details.
|
# GNU Affero General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
# 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/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
|
@ -39,13 +39,16 @@ hr_timesheet_invoice_factor()
|
||||||
|
|
||||||
|
|
||||||
class account_analytic_account(osv.osv):
|
class account_analytic_account(osv.osv):
|
||||||
def _invoiced_calc(self, cr, uid, ids, name, arg, context={}):
|
def _invoiced_calc(self, cr, uid, ids, name, arg, context=None):
|
||||||
|
obj_invoice = self.pool.get('account.invoice')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
res = {}
|
res = {}
|
||||||
for account in self.browse(cr, uid, ids):
|
for account in self.browse(cr, uid, ids, context=context):
|
||||||
invoiced = {}
|
invoiced = {}
|
||||||
cr.execute('select distinct(l.invoice_id) from hr_analytic_timesheet h left join account_analytic_line l on (h.line_id=l.id) where account_id=%s', (account.id,))
|
cr.execute('select distinct(l.invoice_id) from hr_analytic_timesheet h left join account_analytic_line l on (h.line_id=l.id) where account_id=%s', (account.id,))
|
||||||
invoice_ids = filter(None, map(lambda x: x[0], cr.fetchall()))
|
invoice_ids = filter(None, map(lambda x: x[0], cr.fetchall()))
|
||||||
for invoice in self.pool.get('account.invoice').browse(cr, uid, invoice_ids, context):
|
for invoice in obj_invoice.browse(cr, uid, invoice_ids, context=context):
|
||||||
res.setdefault(account.id, 0.0)
|
res.setdefault(account.id, 0.0)
|
||||||
res[account.id] += invoice.amount_untaxed
|
res[account.id] += invoice.amount_untaxed
|
||||||
for id in ids:
|
for id in ids:
|
||||||
|
@ -73,20 +76,24 @@ account_analytic_account()
|
||||||
class account_analytic_line(osv.osv):
|
class account_analytic_line(osv.osv):
|
||||||
_inherit = 'account.analytic.line'
|
_inherit = 'account.analytic.line'
|
||||||
_columns = {
|
_columns = {
|
||||||
'invoice_id': fields.many2one('account.invoice', 'Invoice', ondelete="set null"),
|
'invoice_id': fields.many2one('account.invoice', 'Invoice', ondelete="set null"),
|
||||||
'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Type of Invoicing'),
|
'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Type of Invoicing'),
|
||||||
}
|
}
|
||||||
|
|
||||||
def unlink(self, cursor, user, ids, context=None):
|
def unlink(self, cursor, user, ids, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
return super(account_analytic_line,self).unlink(cursor, user, ids,
|
return super(account_analytic_line,self).unlink(cursor, user, ids,
|
||||||
context=context)
|
context=context)
|
||||||
|
|
||||||
def write(self, cr, uid, ids, vals, context=None):
|
def write(self, cr, uid, ids, vals, context=None):
|
||||||
self._check_inv(cr, uid, ids,vals)
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
self._check_inv(cr, uid, ids, vals)
|
||||||
return super(account_analytic_line,self).write(cr, uid, ids, vals,
|
return super(account_analytic_line,self).write(cr, uid, ids, vals,
|
||||||
context=context)
|
context=context)
|
||||||
|
|
||||||
def _check_inv(self, cr, uid, ids,vals):
|
def _check_inv(self, cr, uid, ids, vals):
|
||||||
select = ids
|
select = ids
|
||||||
if isinstance(select, (int, long)):
|
if isinstance(select, (int, long)):
|
||||||
select = [ids]
|
select = [ids]
|
||||||
|
@ -98,12 +105,14 @@ class account_analytic_line(osv.osv):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def copy(self, cursor, user, obj_id, default=None, context=None):
|
def copy(self, cursor, user, obj_id, default=None, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
if default is None:
|
if default is None:
|
||||||
default = {}
|
default = {}
|
||||||
default = default.copy()
|
default = default.copy()
|
||||||
default.update({'invoice_id': False})
|
default.update({'invoice_id': False})
|
||||||
return super(account_analytic_line, self).copy(cursor, user, obj_id,
|
return super(account_analytic_line, self).copy(cursor, user, obj_id,
|
||||||
default, context)
|
default, context=context)
|
||||||
|
|
||||||
account_analytic_line()
|
account_analytic_line()
|
||||||
|
|
||||||
|
@ -126,12 +135,14 @@ class hr_analytic_timesheet(osv.osv):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def copy(self, cursor, user, obj_id, default=None, context=None):
|
def copy(self, cursor, user, obj_id, default=None, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
if default is None:
|
if default is None:
|
||||||
default = {}
|
default = {}
|
||||||
default = default.copy()
|
default = default.copy()
|
||||||
default.update({'invoice_id': False})
|
default.update({'invoice_id': False})
|
||||||
return super(hr_analytic_timesheet, self).copy(cursor, user, obj_id,
|
return super(hr_analytic_timesheet, self).copy(cursor, user, obj_id,
|
||||||
default, context)
|
default, context=context)
|
||||||
|
|
||||||
hr_analytic_timesheet()
|
hr_analytic_timesheet()
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ class hr_timesheet_analytic_cost_ledger(osv.osv_memory):
|
||||||
datas = {
|
datas = {
|
||||||
'ids': 'active_ids' in context and context['active_ids'] or [],
|
'ids': 'active_ids' in context and context['active_ids'] or [],
|
||||||
'model': 'account.analytic.account',
|
'model': 'account.analytic.account',
|
||||||
'form': self.read(cr, uid, ids)[0]
|
'form': self.read(cr, uid, ids, context=context)[0]
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
'type': 'ir.actions.report.xml',
|
'type': 'ir.actions.report.xml',
|
||||||
|
|
|
@ -48,16 +48,16 @@ class account_analytic_profit(osv.osv_memory):
|
||||||
line_obj = self.pool.get('account.analytic.line')
|
line_obj = self.pool.get('account.analytic.line')
|
||||||
product_obj = self.pool.get('product.product')
|
product_obj = self.pool.get('product.product')
|
||||||
price_obj = self.pool.get('product.pricelist')
|
price_obj = self.pool.get('product.pricelist')
|
||||||
data = {}
|
|
||||||
data['form'] = self.read(cr, uid , ids, [], context=context)[0]
|
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
|
data = {}
|
||||||
|
data['form'] = self.read(cr, uid , ids, [], context=context)[0]
|
||||||
ids_chk = line_obj.search(cr, uid, [
|
ids_chk = line_obj.search(cr, uid, [
|
||||||
('date', '>=', data['form']['date_from']),
|
('date', '>=', data['form']['date_from']),
|
||||||
('date', '<=', data['form']['date_to']),
|
('date', '<=', data['form']['date_to']),
|
||||||
('journal_id', 'in', data['form']['journal_ids']),
|
('journal_id', 'in', data['form']['journal_ids']),
|
||||||
('user_id', 'in', data['form']['employee_ids']),
|
('user_id', 'in', data['form']['employee_ids']),
|
||||||
])
|
], context=context)
|
||||||
if not ids_chk:
|
if not ids_chk:
|
||||||
raise osv.except_osv(_('Data Insufficient!'), _('No Records Found for Report!'))
|
raise osv.except_osv(_('Data Insufficient!'), _('No Records Found for Report!'))
|
||||||
|
|
||||||
|
|
|
@ -46,17 +46,21 @@ class final_invoice_create(osv.osv_memory):
|
||||||
analytic_account_obj = self.pool.get('account.analytic.account')
|
analytic_account_obj = self.pool.get('account.analytic.account')
|
||||||
res_partner_obj = self.pool.get('res.partner')
|
res_partner_obj = self.pool.get('res.partner')
|
||||||
account_payment_term_obj = self.pool.get('account.payment.term')
|
account_payment_term_obj = self.pool.get('account.payment.term')
|
||||||
|
invoice_obj = self.pool.get('account.invoice')
|
||||||
|
product_obj = self.pool.get('product.product')
|
||||||
|
fiscal_pos_obj = self.pool.get('account.fiscal.position')
|
||||||
|
invoice_line_obj = self.pool.get('account.invoice.line')
|
||||||
invoices = []
|
invoices = []
|
||||||
|
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
result = mod_obj._get_id(cr, uid, 'account', 'view_account_invoice_filter')
|
result = mod_obj._get_id(cr, uid, 'account', 'view_account_invoice_filter')
|
||||||
res = mod_obj.read(cr, uid, result, ['res_id'])
|
res = mod_obj.read(cr, uid, result, ['res_id'], context=context)
|
||||||
|
|
||||||
data = self.read(cr, uid, ids, [], context)[0]
|
data = self.read(cr, uid, ids, [], context=context)[0]
|
||||||
account_ids = 'active_ids' in context and context['active_ids'] or []
|
account_ids = 'active_ids' in context and context['active_ids'] or []
|
||||||
|
|
||||||
for account in analytic_account_obj.browse(cr, uid, account_ids, context):
|
for account in analytic_account_obj.browse(cr, uid, account_ids, context=context):
|
||||||
partner = account.partner_id
|
partner = account.partner_id
|
||||||
amount_total=0.0
|
amount_total=0.0
|
||||||
if (not partner) or not (account.pricelist_id):
|
if (not partner) or not (account.pricelist_id):
|
||||||
|
@ -77,15 +81,15 @@ class final_invoice_create(osv.osv_memory):
|
||||||
curr_invoice = {
|
curr_invoice = {
|
||||||
'name': time.strftime('%D')+' - '+account.name,
|
'name': time.strftime('%D')+' - '+account.name,
|
||||||
'partner_id': account.partner_id.id,
|
'partner_id': account.partner_id.id,
|
||||||
'address_contact_id': self.pool.get('res.partner').address_get(cr, uid, [account.partner_id.id], adr_pref=['contact'])['contact'],
|
'address_contact_id': res_partner_obj.address_get(cr, uid, [account.partner_id.id], adr_pref=['contact'])['contact'],
|
||||||
'address_invoice_id': self.pool.get('res.partner').address_get(cr, uid, [account.partner_id.id], adr_pref=['invoice'])['invoice'],
|
'address_invoice_id': res_partner_obj.address_get(cr, uid, [account.partner_id.id], adr_pref=['invoice'])['invoice'],
|
||||||
'payment_term': partner.property_payment_term.id or False,
|
'payment_term': partner.property_payment_term.id or False,
|
||||||
'account_id': partner.property_account_receivable.id,
|
'account_id': partner.property_account_receivable.id,
|
||||||
'currency_id': account.pricelist_id.currency_id.id,
|
'currency_id': account.pricelist_id.currency_id.id,
|
||||||
'date_due': date_due,
|
'date_due': date_due,
|
||||||
'fiscal_position': account.partner_id.property_account_position.id
|
'fiscal_position': account.partner_id.property_account_position.id
|
||||||
}
|
}
|
||||||
last_invoice = self.pool.get('account.invoice').create(cr, uid, curr_invoice)
|
last_invoice = invoice_obj.create(cr, uid, curr_invoice, context=context)
|
||||||
invoices.append(last_invoice)
|
invoices.append(last_invoice)
|
||||||
|
|
||||||
context2=context.copy()
|
context2=context.copy()
|
||||||
|
@ -116,14 +120,14 @@ class final_invoice_create(osv.osv_memory):
|
||||||
line.product_uom_id,
|
line.product_uom_id,
|
||||||
move_line.ref""", (account.id,))
|
move_line.ref""", (account.id,))
|
||||||
for product_id, amount, account_id, product_uom_id, ref in cr.fetchall():
|
for product_id, amount, account_id, product_uom_id, ref in cr.fetchall():
|
||||||
product = self.pool.get('product.product').browse(cr, uid, product_id, context2)
|
product = product_obj.browse(cr, uid, product_id, context2)
|
||||||
|
|
||||||
if product:
|
if product:
|
||||||
taxes = product.taxes_id
|
taxes = product.taxes_id
|
||||||
else:
|
else:
|
||||||
taxes = []
|
taxes = []
|
||||||
|
|
||||||
tax = self.pool.get('account.fiscal.position').map_tax(cr, uid, account.partner_id.property_account_position, taxes)
|
tax = fiscal_pos_obj.map_tax(cr, uid, account.partner_id.property_account_position, taxes)
|
||||||
curr_line = {
|
curr_line = {
|
||||||
'price_unit': -amount,
|
'price_unit': -amount,
|
||||||
'quantity': 1.0,
|
'quantity': 1.0,
|
||||||
|
@ -136,14 +140,13 @@ class final_invoice_create(osv.osv_memory):
|
||||||
'account_id': account_id,
|
'account_id': account_id,
|
||||||
'account_analytic_id': account.id
|
'account_analytic_id': account.id
|
||||||
}
|
}
|
||||||
self.pool.get('account.invoice.line').create(cr, uid, curr_line)
|
invoice_line_obj.create(cr, uid, curr_line, context=context)
|
||||||
|
|
||||||
if not data['balance_product']:
|
if not data['balance_product']:
|
||||||
raise osv.except_osv(_('Balance product needed'), _('Please fill a Balance product in the wizard'))
|
raise osv.except_osv(_('Balance product needed'), _('Please fill a Balance product in the wizard'))
|
||||||
product = self.pool.get('product.product').browse(cr, uid, data['balance_product'], context2)
|
product = product_obj.browse(cr, uid, data['balance_product'], context2)
|
||||||
|
|
||||||
taxes = product.taxes_id
|
taxes = product.taxes_id
|
||||||
tax = self.pool.get('account.fiscal.position').map_tax(cr, uid, account.partner_id.property_account_position, taxes)
|
tax = fiscal_pos_obj.map_tax(cr, uid, account.partner_id.property_account_position, taxes)
|
||||||
account_id = product.product_tmpl_id.property_account_income.id or product.categ_id.property_account_income_categ.id
|
account_id = product.product_tmpl_id.property_account_income.id or product.categ_id.property_account_income_categ.id
|
||||||
curr_line = {
|
curr_line = {
|
||||||
'price_unit': account.amount_max - amount_total,
|
'price_unit': account.amount_max - amount_total,
|
||||||
|
@ -157,9 +160,9 @@ class final_invoice_create(osv.osv_memory):
|
||||||
'account_id': account_id,
|
'account_id': account_id,
|
||||||
'account_analytic_id': account.id
|
'account_analytic_id': account.id
|
||||||
}
|
}
|
||||||
self.pool.get('account.invoice.line').create(cr, uid, curr_line)
|
invoice_line_obj.create(cr, uid, curr_line, context=context)
|
||||||
if account.amount_max < amount_total:
|
if account.amount_max < amount_total:
|
||||||
self.pool.get('account.invoice').write(cr, uid, [last_invoice], {'type': 'out_refund',})
|
invoice_obj.write(cr, uid, [last_invoice], {'type': 'out_refund',}, context=context)
|
||||||
cr.execute('update account_analytic_line set invoice_id=%s where invoice_id is null and account_id=%s', (last_invoice, account.id))
|
cr.execute('update account_analytic_line set invoice_id=%s where invoice_id is null and account_id=%s', (last_invoice, account.id))
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -49,7 +49,7 @@ class hr_timesheet_invoice_create(osv.osv_memory):
|
||||||
if not len(context['active_ids']):
|
if not len(context['active_ids']):
|
||||||
return {}
|
return {}
|
||||||
#Checking whether the analytic line is invoiced or not
|
#Checking whether the analytic line is invoiced or not
|
||||||
analytic_line_obj = self.pool.get('account.analytic.line').browse(cr, uid, context['active_ids'], context)
|
analytic_line_obj = self.pool.get('account.analytic.line').browse(cr, uid, context['active_ids'], context=context)
|
||||||
for obj_acc in analytic_line_obj:
|
for obj_acc in analytic_line_obj:
|
||||||
if obj_acc.invoice_id and obj_acc.invoice_id.state !='cancel':
|
if obj_acc.invoice_id and obj_acc.invoice_id.state !='cancel':
|
||||||
raise osv.except_osv(_('Warning'),_('The analytic entry "%s" is already invoiced!')%(obj_acc.name,))
|
raise osv.except_osv(_('Warning'),_('The analytic entry "%s" is already invoiced!')%(obj_acc.name,))
|
||||||
|
@ -67,13 +67,21 @@ class hr_timesheet_invoice_create(osv.osv_memory):
|
||||||
analytic_account_obj = self.pool.get('account.analytic.account')
|
analytic_account_obj = self.pool.get('account.analytic.account')
|
||||||
res_partner_obj = self.pool.get('res.partner')
|
res_partner_obj = self.pool.get('res.partner')
|
||||||
account_payment_term_obj = self.pool.get('account.payment.term')
|
account_payment_term_obj = self.pool.get('account.payment.term')
|
||||||
|
invoice_obj = self.pool.get('account.invoice')
|
||||||
|
product_obj = self.pool.get('product.product')
|
||||||
|
invoice_factor_obj = self.pool.get('hr_timesheet_invoice.factor')
|
||||||
|
pro_price_obj = self.pool.get('product.pricelist')
|
||||||
|
fiscal_pos_obj = self.pool.get('account.fiscal.position')
|
||||||
|
product_uom_obj = self.pool.get('product.uom')
|
||||||
|
invoice_line_obj = self.pool.get('account.invoice.line')
|
||||||
invoices = []
|
invoices = []
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
result = mod_obj._get_id(cr, uid, 'account', 'view_account_invoice_filter')
|
result = mod_obj._get_id(cr, uid, 'account', 'view_account_invoice_filter')
|
||||||
res = mod_obj.read(cr, uid, result, ['res_id'])
|
res = mod_obj.read(cr, uid, result, ['res_id'], context=context)
|
||||||
data = self.read(cr, uid, ids, [], context)[0]
|
data = self.read(cr, uid, ids, [], context=context)[0]
|
||||||
account_ids = data['accounts']
|
account_ids = data['accounts']
|
||||||
for account in analytic_account_obj.browse(cr, uid, account_ids, context):
|
for account in analytic_account_obj.browse(cr, uid, account_ids, context=context):
|
||||||
partner = account.partner_id
|
partner = account.partner_id
|
||||||
if (not partner) or not (account.pricelist_id):
|
if (not partner) or not (account.pricelist_id):
|
||||||
raise osv.except_osv(_('Analytic Account incomplete'),
|
raise osv.except_osv(_('Analytic Account incomplete'),
|
||||||
|
@ -106,7 +114,7 @@ class hr_timesheet_invoice_create(osv.osv_memory):
|
||||||
'date_due': date_due,
|
'date_due': date_due,
|
||||||
'fiscal_position': account.partner_id.property_account_position.id
|
'fiscal_position': account.partner_id.property_account_position.id
|
||||||
}
|
}
|
||||||
last_invoice = self.pool.get('account.invoice').create(cr, uid, curr_invoice)
|
last_invoice = invoice_obj.create(cr, uid, curr_invoice, context=context)
|
||||||
invoices.append(last_invoice)
|
invoices.append(last_invoice)
|
||||||
|
|
||||||
context2 = context.copy()
|
context2 = context.copy()
|
||||||
|
@ -115,14 +123,14 @@ class hr_timesheet_invoice_create(osv.osv_memory):
|
||||||
"FROM account_analytic_line as line " \
|
"FROM account_analytic_line as line " \
|
||||||
"WHERE account_id = %s " \
|
"WHERE account_id = %s " \
|
||||||
"AND id IN %s AND to_invoice IS NOT NULL " \
|
"AND id IN %s AND to_invoice IS NOT NULL " \
|
||||||
"GROUP BY product_id,to_invoice", (account.id,tuple(context['active_ids']),))
|
"GROUP BY product_id,to_invoice", (account.id, tuple(context['active_ids']),))
|
||||||
|
|
||||||
for product_id,factor_id,qty in cr.fetchall():
|
for product_id, factor_id, qty in cr.fetchall():
|
||||||
product = self.pool.get('product.product').browse(cr, uid, product_id, context2)
|
product = product_obj.browse(cr, uid, product_id, context2)
|
||||||
if not product:
|
if not product:
|
||||||
raise osv.except_osv(_('Error'), _('At least one line has no product !'))
|
raise osv.except_osv(_('Error'), _('At least one line has no product !'))
|
||||||
factor_name = ''
|
factor_name = ''
|
||||||
factor = self.pool.get('hr_timesheet_invoice.factor').browse(cr, uid, factor_id, context2)
|
factor = invoice_factor_obj.browse(cr, uid, factor_id, context2)
|
||||||
|
|
||||||
if not data['product']:
|
if not data['product']:
|
||||||
if factor.customer_name:
|
if factor.customer_name:
|
||||||
|
@ -130,16 +138,16 @@ class hr_timesheet_invoice_create(osv.osv_memory):
|
||||||
else:
|
else:
|
||||||
factor_name = product.name
|
factor_name = product.name
|
||||||
else:
|
else:
|
||||||
factor_name = self.pool.get('product.product').name_get(cr, uid, [data['product']], context=context)[0][1]
|
factor_name = product_obj.name_get(cr, uid, [data['product']], context=context)[0][1]
|
||||||
|
|
||||||
if account.pricelist_id:
|
if account.pricelist_id:
|
||||||
pl = account.pricelist_id.id
|
pl = account.pricelist_id.id
|
||||||
price = self.pool.get('product.pricelist').price_get(cr,uid,[pl], data['product'] or product_id, qty or 1.0, account.partner_id.id)[pl]
|
price = pro_price_obj.price_get(cr,uid,[pl], data['product'] or product_id, qty or 1.0, account.partner_id.id)[pl]
|
||||||
else:
|
else:
|
||||||
price = 0.0
|
price = 0.0
|
||||||
|
|
||||||
taxes = product.taxes_id
|
taxes = product.taxes_id
|
||||||
tax = self.pool.get('account.fiscal.position').map_tax(cr, uid, account.partner_id.property_account_position, taxes)
|
tax = fiscal_pos_obj.map_tax(cr, uid, account.partner_id.property_account_position, taxes)
|
||||||
account_id = product.product_tmpl_id.property_account_income.id or product.categ_id.property_account_income_categ.id
|
account_id = product.product_tmpl_id.property_account_income.id or product.categ_id.property_account_income_categ.id
|
||||||
curr_line = {
|
curr_line = {
|
||||||
'price_unit': price,
|
'price_unit': price,
|
||||||
|
@ -169,7 +177,7 @@ class hr_timesheet_invoice_create(osv.osv_memory):
|
||||||
details.append(line['date'])
|
details.append(line['date'])
|
||||||
if data['time']:
|
if data['time']:
|
||||||
if line['product_uom_id']:
|
if line['product_uom_id']:
|
||||||
details.append("%s %s" % (line['unit_amount'], self.pool.get('product.uom').browse(cr, uid, [line['product_uom_id']],context2)[0].name))
|
details.append("%s %s" % (line['unit_amount'], product_uom_obj.browse(cr, uid, [line['product_uom_id']],context2)[0].name))
|
||||||
else:
|
else:
|
||||||
details.append("%s" % (line['unit_amount'], ))
|
details.append("%s" % (line['unit_amount'], ))
|
||||||
if data['name']:
|
if data['name']:
|
||||||
|
@ -179,17 +187,17 @@ class hr_timesheet_invoice_create(osv.osv_memory):
|
||||||
note.append(u' - '.join(map(lambda x: unicode(x) or '',details)))
|
note.append(u' - '.join(map(lambda x: unicode(x) or '',details)))
|
||||||
|
|
||||||
curr_line['note'] = "\n".join(map(lambda x: unicode(x) or '',note))
|
curr_line['note'] = "\n".join(map(lambda x: unicode(x) or '',note))
|
||||||
self.pool.get('account.invoice.line').create(cr, uid, curr_line)
|
invoice_line_obj.create(cr, uid, curr_line, context=context)
|
||||||
cr.execute("update account_analytic_line set invoice_id=%s WHERE account_id = %s and id IN %s" ,(last_invoice, account.id,tuple(data['ids'])))
|
cr.execute("update account_analytic_line set invoice_id=%s WHERE account_id = %s and id IN %s" ,(last_invoice, account.id,tuple(data['ids'])))
|
||||||
|
|
||||||
self.pool.get('account.invoice').button_reset_taxes(cr, uid, [last_invoice], context)
|
invoice_obj.button_reset_taxes(cr, uid, [last_invoice], context)
|
||||||
|
|
||||||
mod_obj = self.pool.get('ir.model.data')
|
mod_obj = self.pool.get('ir.model.data')
|
||||||
act_obj = self.pool.get('ir.actions.act_window')
|
act_obj = self.pool.get('ir.actions.act_window')
|
||||||
|
|
||||||
mod_id = mod_obj.search(cr, uid, [('name', '=', 'action_invoice_tree1')])[0]
|
mod_ids = mod_obj.search(cr, uid, [('name', '=', 'action_invoice_tree1')], context=context)[0]
|
||||||
res_id = mod_obj.read(cr, uid, mod_id, ['res_id'])['res_id']
|
res_id = mod_obj.read(cr, uid, mod_ids, ['res_id'], context=context)['res_id']
|
||||||
act_win = act_obj.read(cr, uid, res_id, [])
|
act_win = act_obj.read(cr, uid, res_id, [], context=context)
|
||||||
act_win['domain'] = [('id','in',invoices),('type','=','out_invoice')]
|
act_win['domain'] = [('id','in',invoices),('type','=','out_invoice')]
|
||||||
act_win['name'] = _('Invoices')
|
act_win['name'] = _('Invoices')
|
||||||
return act_win
|
return act_win
|
||||||
|
|
|
@ -20,10 +20,9 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
import time
|
import time
|
||||||
from osv import fields
|
|
||||||
from osv import osv
|
|
||||||
import netsvc
|
import netsvc
|
||||||
|
|
||||||
|
from osv import fields, osv
|
||||||
from mx import DateTime
|
from mx import DateTime
|
||||||
from tools.translate import _
|
from tools.translate import _
|
||||||
|
|
||||||
|
@ -139,7 +138,7 @@ class hr_timesheet_sheet(osv.osv):
|
||||||
for sheet in self.browse(cr, uid, ids, context=context):
|
for sheet in self.browse(cr, uid, ids, context=context):
|
||||||
result[sheet.id] = 'none'
|
result[sheet.id] = 'none'
|
||||||
emp_ids2 = emp_obj.search(cr, uid,
|
emp_ids2 = emp_obj.search(cr, uid,
|
||||||
[('user_id', '=', sheet.user_id.id)])
|
[('user_id', '=', sheet.user_id.id)], context=context)
|
||||||
if emp_ids2:
|
if emp_ids2:
|
||||||
link_emp[emp_ids2[0]] = sheet.id
|
link_emp[emp_ids2[0]] = sheet.id
|
||||||
emp_ids.append(emp_ids2[0])
|
emp_ids.append(emp_ids2[0])
|
||||||
|
@ -169,11 +168,11 @@ class hr_timesheet_sheet(osv.osv):
|
||||||
context = {}
|
context = {}
|
||||||
for sheet in self.browse(cr, uid, ids, context=context):
|
for sheet in self.browse(cr, uid, ids, context=context):
|
||||||
if DateTime.now() <= DateTime.strptime(sheet.date_from, '%Y-%m-%d'):
|
if DateTime.now() <= DateTime.strptime(sheet.date_from, '%Y-%m-%d'):
|
||||||
self.write(cr, uid, [sheet.id], {'date_current': sheet.date_from,})
|
self.write(cr, uid, [sheet.id], {'date_current': sheet.date_from,}, context=context)
|
||||||
elif DateTime.now() >= DateTime.strptime(sheet.date_to, '%Y-%m-%d'):
|
elif DateTime.now() >= DateTime.strptime(sheet.date_to, '%Y-%m-%d'):
|
||||||
self.write(cr, uid, [sheet.id], {'date_current': sheet.date_to,})
|
self.write(cr, uid, [sheet.id], {'date_current': sheet.date_to,}, context=context)
|
||||||
else:
|
else:
|
||||||
self.write(cr, uid, [sheet.id], {'date_current': time.strftime('%Y-%m-%d')})
|
self.write(cr, uid, [sheet.id], {'date_current': time.strftime('%Y-%m-%d')}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def date_previous(self, cr, uid, ids, context=None):
|
def date_previous(self, cr, uid, ids, context=None):
|
||||||
|
@ -181,11 +180,11 @@ class hr_timesheet_sheet(osv.osv):
|
||||||
context = {}
|
context = {}
|
||||||
for sheet in self.browse(cr, uid, ids, context=context):
|
for sheet in self.browse(cr, uid, ids, context=context):
|
||||||
if DateTime.strptime(sheet.date_current, '%Y-%m-%d') <= DateTime.strptime(sheet.date_from, '%Y-%m-%d'):
|
if DateTime.strptime(sheet.date_current, '%Y-%m-%d') <= DateTime.strptime(sheet.date_from, '%Y-%m-%d'):
|
||||||
self.write(cr, uid, [sheet.id], {'date_current': sheet.date_from,})
|
self.write(cr, uid, [sheet.id], {'date_current': sheet.date_from,}, context=context)
|
||||||
else:
|
else:
|
||||||
self.write(cr, uid, [sheet.id], {
|
self.write(cr, uid, [sheet.id], {
|
||||||
'date_current': (DateTime.strptime(sheet.date_current, '%Y-%m-%d') + DateTime.RelativeDateTime(days=-1)).strftime('%Y-%m-%d'),
|
'date_current': (DateTime.strptime(sheet.date_current, '%Y-%m-%d') + DateTime.RelativeDateTime(days=-1)).strftime('%Y-%m-%d'),
|
||||||
})
|
}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def date_next(self, cr, uid, ids, context=None):
|
def date_next(self, cr, uid, ids, context=None):
|
||||||
|
@ -193,11 +192,11 @@ class hr_timesheet_sheet(osv.osv):
|
||||||
context = {}
|
context = {}
|
||||||
for sheet in self.browse(cr, uid, ids, context=context):
|
for sheet in self.browse(cr, uid, ids, context=context):
|
||||||
if DateTime.strptime(sheet.date_current, '%Y-%m-%d') >= DateTime.strptime(sheet.date_to, '%Y-%m-%d'):
|
if DateTime.strptime(sheet.date_current, '%Y-%m-%d') >= DateTime.strptime(sheet.date_to, '%Y-%m-%d'):
|
||||||
self.write(cr, uid, [sheet.id], {'date_current': sheet.date_to,})
|
self.write(cr, uid, [sheet.id], {'date_current': sheet.date_to,}, context=context)
|
||||||
else:
|
else:
|
||||||
self.write(cr, uid, [sheet.id], {
|
self.write(cr, uid, [sheet.id], {
|
||||||
'date_current': (DateTime.strptime(sheet.date_current, '%Y-%m-%d') + DateTime.RelativeDateTime(days=1)).strftime('%Y-%m-%d'),
|
'date_current': (DateTime.strptime(sheet.date_current, '%Y-%m-%d') + DateTime.RelativeDateTime(days=1)).strftime('%Y-%m-%d'),
|
||||||
})
|
}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def button_dummy(self, cr, uid, ids, context=None):
|
def button_dummy(self, cr, uid, ids, context=None):
|
||||||
|
@ -205,31 +204,31 @@ class hr_timesheet_sheet(osv.osv):
|
||||||
context = {}
|
context = {}
|
||||||
for sheet in self.browse(cr, uid, ids, context=context):
|
for sheet in self.browse(cr, uid, ids, context=context):
|
||||||
if DateTime.strptime(sheet.date_current, '%Y-%m-%d') <= DateTime.strptime(sheet.date_from, '%Y-%m-%d'):
|
if DateTime.strptime(sheet.date_current, '%Y-%m-%d') <= DateTime.strptime(sheet.date_from, '%Y-%m-%d'):
|
||||||
self.write(cr, uid, [sheet.id], {'date_current': sheet.date_from,})
|
self.write(cr, uid, [sheet.id], {'date_current': sheet.date_from,}, context=context)
|
||||||
elif DateTime.strptime(sheet.date_current, '%Y-%m-%d') >= DateTime.strptime(sheet.date_to, '%Y-%m-%d'):
|
elif DateTime.strptime(sheet.date_current, '%Y-%m-%d') >= DateTime.strptime(sheet.date_to, '%Y-%m-%d'):
|
||||||
self.write(cr, uid, [sheet.id], {'date_current': sheet.date_to,})
|
self.write(cr, uid, [sheet.id], {'date_current': sheet.date_to,}, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def sign_in(self, cr, uid, ids, context=None):
|
def sign_in(self, cr, uid, ids, context=None):
|
||||||
emp_obj = self.pool.get('hr.employee')
|
emp_obj = self.pool.get('hr.employee')
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
if not self.browse(cr, uid, ids, context)[0].date_current == time.strftime('%Y-%m-%d'):
|
if not self.browse(cr, uid, ids, context=context)[0].date_current == time.strftime('%Y-%m-%d'):
|
||||||
raise osv.except_osv(_('Error !'), _('You can not sign in from an other date than today'))
|
raise osv.except_osv(_('Error !'), _('You can not sign in from an other date than today'))
|
||||||
emp_id = emp_obj.search(cr, uid, [('user_id', '=', uid)])
|
emp_ids = emp_obj.search(cr, uid, [('user_id', '=', uid)], context=context)
|
||||||
context['sheet_id']=ids[0]
|
context['sheet_id']=ids[0]
|
||||||
success = emp_obj.attendance_action_change(cr, uid, emp_id, type='sign_in', context=context,)
|
success = emp_obj.attendance_action_change(cr, uid, emp_ids, type='sign_in', context=context,)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def sign_out(self, cr, uid, ids, context=None):
|
def sign_out(self, cr, uid, ids, context=None):
|
||||||
emp_obj = self.pool.get('hr.employee')
|
emp_obj = self.pool.get('hr.employee')
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
if not self.browse(cr, uid, ids, context)[0].date_current == time.strftime('%Y-%m-%d'):
|
if not self.browse(cr, uid, ids, context=context)[0].date_current == time.strftime('%Y-%m-%d'):
|
||||||
raise osv.except_osv(_('Error !'), _('You can not sign out from an other date than today'))
|
raise osv.except_osv(_('Error !'), _('You can not sign out from an other date than today'))
|
||||||
emp_id = emp_obj.search(cr, uid, [('user_id', '=', uid)])
|
emp_ids = emp_obj.search(cr, uid, [('user_id', '=', uid)])
|
||||||
context['sheet_id']=ids[0]
|
context['sheet_id']=ids[0]
|
||||||
success = emp_obj.attendance_action_change(cr, uid, emp_id, type='sign_out', context=context,)
|
success = emp_obj.attendance_action_change(cr, uid, emp_ids, type='sign_out', context=context,)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
|
@ -268,7 +267,9 @@ class hr_timesheet_sheet(osv.osv):
|
||||||
'department_id':fields.many2one('hr.department','Department'),
|
'department_id':fields.many2one('hr.department','Department'),
|
||||||
}
|
}
|
||||||
|
|
||||||
def _default_date_from(self,cr, uid, context={}):
|
def _default_date_from(self,cr, uid, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
||||||
r = user.company_id and user.company_id.timesheet_range or 'month'
|
r = user.company_id and user.company_id.timesheet_range or 'month'
|
||||||
if r=='month':
|
if r=='month':
|
||||||
|
@ -279,7 +280,7 @@ class hr_timesheet_sheet(osv.osv):
|
||||||
return time.strftime('%Y-01-01')
|
return time.strftime('%Y-01-01')
|
||||||
return time.strftime('%Y-%m-%d')
|
return time.strftime('%Y-%m-%d')
|
||||||
|
|
||||||
def _default_date_to(self,cr, uid, context={}):
|
def _default_date_to(self,cr, uid, context=None):
|
||||||
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
||||||
r = user.company_id and user.company_id.timesheet_range or 'month'
|
r = user.company_id and user.company_id.timesheet_range or 'month'
|
||||||
if r=='month':
|
if r=='month':
|
||||||
|
@ -330,17 +331,19 @@ class hr_timesheet_sheet(osv.osv):
|
||||||
wf_service.trg_create(uid, self._name, id, cr)
|
wf_service.trg_create(uid, self._name, id, cr)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def name_get(self, cr, uid, ids, context={}):
|
def name_get(self, cr, uid, ids, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
if not len(ids):
|
if not len(ids):
|
||||||
return []
|
return []
|
||||||
return [(r['id'], r['date_from'] + ' - ' + r['date_to']) \
|
return [(r['id'], r['date_from'] + ' - ' + r['date_to']) \
|
||||||
for r in self.read(cr, uid, ids, ['date_from', 'date_to'],
|
for r in self.read(cr, uid, ids, ['date_from', 'date_to'],
|
||||||
context, load='_classic_write')]
|
context=context, load='_classic_write')]
|
||||||
|
|
||||||
def unlink(self, cr, uid, ids, context=None):
|
def unlink(self, cr, uid, ids, context=None):
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
sheets = self.read(cr, uid, ids, ['state','total_attendance'])
|
sheets = self.read(cr, uid, ids, ['state','total_attendance'], context=context)
|
||||||
for sheet in sheets:
|
for sheet in sheets:
|
||||||
if sheet['state'] in ('confirm', 'done'):
|
if sheet['state'] in ('confirm', 'done'):
|
||||||
raise osv.except_osv(_('Invalid action !'), _('Cannot delete Sheet(s) which are already confirmed !'))
|
raise osv.except_osv(_('Invalid action !'), _('Cannot delete Sheet(s) which are already confirmed !'))
|
||||||
|
@ -354,14 +357,17 @@ hr_timesheet_sheet()
|
||||||
class hr_timesheet_line(osv.osv):
|
class hr_timesheet_line(osv.osv):
|
||||||
_inherit = "hr.analytic.timesheet"
|
_inherit = "hr.analytic.timesheet"
|
||||||
|
|
||||||
def _get_default_date(self, cr, uid, context={}):
|
def _get_default_date(self, cr, uid, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
if 'date' in context:
|
if 'date' in context:
|
||||||
return context['date']
|
return context['date']
|
||||||
return time.strftime('%Y-%m-%d')
|
return time.strftime('%Y-%m-%d')
|
||||||
|
|
||||||
def _sheet(self, cursor, user, ids, name, args, context):
|
def _sheet(self, cursor, user, ids, name, args, context=None):
|
||||||
sheet_obj = self.pool.get('hr_timesheet_sheet.sheet')
|
sheet_obj = self.pool.get('hr_timesheet_sheet.sheet')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
cursor.execute('SELECT l.id, COALESCE(MAX(s.id), 0) \
|
cursor.execute('SELECT l.id, COALESCE(MAX(s.id), 0) \
|
||||||
FROM hr_timesheet_sheet_sheet s \
|
FROM hr_timesheet_sheet_sheet s \
|
||||||
LEFT JOIN (hr_analytic_timesheet l \
|
LEFT JOIN (hr_analytic_timesheet l \
|
||||||
|
@ -386,6 +392,8 @@ class hr_timesheet_line(osv.osv):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def _sheet_search(self, cursor, user, obj, name, args, context=None):
|
def _sheet_search(self, cursor, user, obj, name, args, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
if not len(args):
|
if not len(args):
|
||||||
return []
|
return []
|
||||||
sheet_obj = self.pool.get('hr_timesheet_sheet.sheet')
|
sheet_obj = self.pool.get('hr_timesheet_sheet.sheet')
|
||||||
|
@ -395,7 +403,7 @@ class hr_timesheet_line(osv.osv):
|
||||||
fargs = args[i][0].split('.', 1)
|
fargs = args[i][0].split('.', 1)
|
||||||
if len(fargs) > 1:
|
if len(fargs) > 1:
|
||||||
args[i] = (fargs[0], 'in', sheet_obj.search(cursor, user,
|
args[i] = (fargs[0], 'in', sheet_obj.search(cursor, user,
|
||||||
[(fargs[1], args[i][1], args[i][2])]))
|
[(fargs[1], args[i][1], args[i][2])], context=context))
|
||||||
i += 1
|
i += 1
|
||||||
continue
|
continue
|
||||||
if isinstance(args[i][2], basestring):
|
if isinstance(args[i][2], basestring):
|
||||||
|
@ -472,12 +480,16 @@ hr_timesheet_line()
|
||||||
class hr_attendance(osv.osv):
|
class hr_attendance(osv.osv):
|
||||||
_inherit = "hr.attendance"
|
_inherit = "hr.attendance"
|
||||||
|
|
||||||
def _get_default_date(self, cr, uid, context={}):
|
def _get_default_date(self, cr, uid, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
if 'name' in context:
|
if 'name' in context:
|
||||||
return context['name'] + time.strftime(' %H:%M:%S')
|
return context['name'] + time.strftime(' %H:%M:%S')
|
||||||
return time.strftime('%Y-%m-%d %H:%M:%S')
|
return time.strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
def _sheet(self, cursor, user, ids, name, args, context):
|
def _sheet(self, cursor, user, ids, name, args, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
sheet_obj = self.pool.get('hr_timesheet_sheet.sheet')
|
sheet_obj = self.pool.get('hr_timesheet_sheet.sheet')
|
||||||
cursor.execute("SELECT a.id, COALESCE(MAX(s.id), 0) \
|
cursor.execute("SELECT a.id, COALESCE(MAX(s.id), 0) \
|
||||||
FROM hr_timesheet_sheet_sheet s \
|
FROM hr_timesheet_sheet_sheet s \
|
||||||
|
@ -506,14 +518,16 @@ class hr_attendance(osv.osv):
|
||||||
def _sheet_search(self, cursor, user, obj, name, args, context=None):
|
def _sheet_search(self, cursor, user, obj, name, args, context=None):
|
||||||
if not len(args):
|
if not len(args):
|
||||||
return []
|
return []
|
||||||
sheet_obj = self.pool.get('hr_timesheet_sheet.sheet')
|
|
||||||
|
|
||||||
|
sheet_obj = self.pool.get('hr_timesheet_sheet.sheet')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
i = 0
|
i = 0
|
||||||
while i < len(args):
|
while i < len(args):
|
||||||
fargs = args[i][0].split('.', 1)
|
fargs = args[i][0].split('.', 1)
|
||||||
if len(fargs) > 1:
|
if len(fargs) > 1:
|
||||||
args[i] = (fargs[0], 'in', sheet_obj.search(cursor, user,
|
args[i] = (fargs[0], 'in', sheet_obj.search(cursor, user,
|
||||||
[(fargs[1], args[i][1], args[i][2])]))
|
[(fargs[1], args[i][1], args[i][2])], context=context))
|
||||||
i += 1
|
i += 1
|
||||||
continue
|
continue
|
||||||
if isinstance(args[i][2], basestring):
|
if isinstance(args[i][2], basestring):
|
||||||
|
@ -570,7 +584,7 @@ class hr_attendance(osv.osv):
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
if 'sheet_id' in context:
|
if 'sheet_id' in context:
|
||||||
ts = self.pool.get('hr_timesheet_sheet.sheet').browse(cr, uid, context['sheet_id'])
|
ts = self.pool.get('hr_timesheet_sheet.sheet').browse(cr, uid, context['sheet_id'], context=context)
|
||||||
if ts.state not in ('draft', 'new'):
|
if ts.state not in ('draft', 'new'):
|
||||||
raise osv.except_osv(_('Error !'), _('You cannot modify an entry in a confirmed timesheet !'))
|
raise osv.except_osv(_('Error !'), _('You cannot modify an entry in a confirmed timesheet !'))
|
||||||
res = super(hr_attendance,self).create(cr, uid, vals, context=context)
|
res = super(hr_attendance,self).create(cr, uid, vals, context=context)
|
||||||
|
@ -584,7 +598,7 @@ class hr_attendance(osv.osv):
|
||||||
self._check(cr, uid, ids)
|
self._check(cr, uid, ids)
|
||||||
return super(hr_attendance,self).unlink(cr, uid, ids,*args, **kwargs)
|
return super(hr_attendance,self).unlink(cr, uid, ids,*args, **kwargs)
|
||||||
|
|
||||||
def write(self, cr, uid, ids, vals, context={}):
|
def write(self, cr, uid, ids, vals, context=None):
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
self._check(cr, uid, ids)
|
self._check(cr, uid, ids)
|
||||||
|
|
|
@ -29,18 +29,20 @@ class hr_timesheet_current_open(osv.osv_memory):
|
||||||
|
|
||||||
def open_timesheet(self, cr, uid, ids, context=None):
|
def open_timesheet(self, cr, uid, ids, context=None):
|
||||||
ts = self.pool.get('hr_timesheet_sheet.sheet')
|
ts = self.pool.get('hr_timesheet_sheet.sheet')
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
view_type = 'form,tree'
|
view_type = 'form,tree'
|
||||||
|
|
||||||
user_ids = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)])
|
user_ids = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)], context=context)
|
||||||
if not len(user_ids):
|
if not len(user_ids):
|
||||||
raise osv.except_osv(_('Error !'), _('No employee defined for your user !'))
|
raise osv.except_osv(_('Error !'), _('No employee defined for your user !'))
|
||||||
ids = ts.search(cr, uid, [('user_id','=',uid),('state','=','draft'),('date_from','<=',time.strftime('%Y-%m-%d')), ('date_to','>=',time.strftime('%Y-%m-%d'))])
|
ids = ts.search(cr, uid, [('user_id','=',uid),('state','=','draft'),('date_from','<=',time.strftime('%Y-%m-%d')), ('date_to','>=',time.strftime('%Y-%m-%d'))], context=context)
|
||||||
|
|
||||||
if len(ids) > 1:
|
if len(ids) > 1:
|
||||||
view_type = 'tree,form'
|
view_type = 'tree,form'
|
||||||
domain = "[('id','in',["+','.join(map(str, ids))+"]),('user_id', '=', uid)]"
|
domain = "[('id','in',["+','.join(map(str, ids))+"]),('user_id', '=', uid)]"
|
||||||
elif len(ids)==1:
|
elif len(ids)==1:
|
||||||
ts.write(cr, uid, ids, {'date_current': time.strftime('%Y-%m-%d')})
|
ts.write(cr, uid, ids, {'date_current': time.strftime('%Y-%m-%d')}, context=context)
|
||||||
domain = "[('user_id', '=', uid)]"
|
domain = "[('user_id', '=', uid)]"
|
||||||
else:
|
else:
|
||||||
domain = "[('user_id', '=', uid)]"
|
domain = "[('user_id', '=', uid)]"
|
||||||
|
|
Loading…
Reference in New Issue