[IMP] hr related modules improvements

bzr revid: mra@mra-laptop-20100727071145-4n3z9i1jj1zosp8z
This commit is contained in:
PSI (OpenERP) 2010-07-27 12:41:45 +05:30 committed by Mustufa Rangwala
parent 148d09d6dc
commit 4b1348a989
27 changed files with 653 additions and 490 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -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', '&gt;=', (datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]" /> domain="[('date', '&gt;=', (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','&gt;=',(datetime.date.today()))]" /> help="Evaluations that overpassed the deadline" domain="[('date','&gt;=',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" />

View File

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

View File

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

View File

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

View File

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

View File

@ -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': [],

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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 users ID for security checks, @param uid: the current users 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 users ID for security checks, @param uid: the current users 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 users ID for security checks @param uid: the current users 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 users ID for security checks, @param uid: the current users ID for security checks,
@param ids: List of update mails IDs @param ids: List of update mails 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):

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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