[IMP]compute advice method improved,state workflow changed and place of states are changed.

bzr revid: kbh@tinyerp.com-20120606095508-3rubur9xhrbsxw6u
This commit is contained in:
Khushboo Bhatt (Open ERP) 2012-06-06 15:25:08 +05:30
parent 71a4731a0f
commit 8827fee542
5 changed files with 52 additions and 41 deletions

View File

@ -46,6 +46,7 @@ Indian Payroll Rules.
'update_xml': [
'l10n_in_hr_payroll_view.xml',
'l10n_in_hr_payroll_data.xml',
'l10n_in_hr_payroll_sequence.xml',
'data/hr.salary.rule.csv',
'l10n_in_hr_payroll_report.xml',
],

View File

@ -31,18 +31,6 @@ from calendar import isleap
from osv import fields, osv
import decimal_precision as dp
def prev_bounds(cdate=False):
when = date.fromtimestamp(time.mktime(time.strptime(cdate,"%Y-%m-%d")))
this_first = date(when.year, when.month, 1)
month = when.month + 1
year = when.year
if month > 12:
month = 1
year += 1
next_month = date(year, month, 1)
prev_end = next_month - timedelta(days=1)
return this_first, prev_end
class hr_contract_in(osv.osv):
_inherit = 'hr.contract'
_description = 'contract'
@ -142,25 +130,31 @@ class payroll_advice(osv.osv):
sequence_pool = self.pool.get('ir.sequence')
payslip_line_pool = self.pool.get('hr.payslip.line')
DATETIME_FORMAT = "%Y-%m-%d"
for advice in self.browse(cr, uid, ids, context=context):
dates = prev_bounds(advice.date)
slip_ids = payslip_pool.search(cr, uid, [ ('date_from','<=',advice.date),('date_to','>=',advice.date),('date_from','=',dates[0]),('date_to','=',dates[1])], context=context)
old_line_ids = advice_line_pool.search(cr, uid, [('advice_id','=',advice.id)], context=context)
if old_line_ids:
advice_line_pool.unlink(cr, uid, old_line_ids, context=context)
slip_ids = payslip_pool.search(cr, uid, [('date_from','<=',advice.date),('date_to','>=',advice.date)], context=context)
if not slip_ids:
raise osv.except_osv(_('Error !'), _('You can get only current month payslips') % (slip_ids))
for slip in payslip_pool.browse(cr, uid, slip_ids, context=context):
line_ids = payslip_line_pool.search(cr, uid, [ ('slip_id','in',slip_ids),('code','=',"NET")], context=context)
for line in slip.line_ids:
if not slip.employee_id.bank_account_id:
raise osv.except_osv(_('Error !'), _('Please define bank account for the %s employee') % (slip.employee_id.name))
advice_line= {
'advice_id':advice.id,
'name':slip.employee_id.bank_account_id.acc_number,
'employee_id':slip.employee_id.id,
'bysal':line.total
}
id = advice_line_pool.create(cr, uid, advice_line, context=context)
number = self.pool.get('ir.sequence').get(cr, uid, 'advice.line')
self.write(cr, uid, ids, {'state':'confirm','number':number}, context=context)
advice_date = datetime.strptime(advice.date,DATETIME_FORMAT)
a_date = advice_date.strftime('%B')+'-'+advice_date.strftime('%Y')
raise osv.except_osv(_('Error !'), _('No payslips for %s') % (a_date))
for slip in payslip_pool.browse(cr, uid, slip_ids, context=context):
line_ids = payslip_line_pool.search(cr, uid, [ ('slip_id','in',slip_ids),('code','=',"NET")], context=context)
for line in slip.line_ids:
if not slip.employee_id.bank_account_id:
raise osv.except_osv(_('Error !'), _('Please define bank account for the %s employee') % (slip.employee_id.name))
advice_line= {
'advice_id':advice.id,
'name':slip.employee_id.bank_account_id.acc_number,
'employee_id':slip.employee_id.id,
'bysal':line.total
}
id = advice_line_pool.create(cr, uid, advice_line, context=context)
number = self.pool.get('ir.sequence').get(cr, uid, 'payment.advice')
self.write(cr, uid, ids, {'number':number}, context=context)
def confirm_sheet(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state':'confirm'}, context=context)
@ -195,9 +189,8 @@ class payroll_advice_line(osv.osv):
_description = 'Bank Advice Lines'
_columns = {
'advice_id':fields.many2one('hr.payroll.advice', 'Bank Advice', required=False),
'name':fields.char('Bank Account A/C', size=64, required=True, readonly=False),
'name':fields.char('Bank Account No.', size=64, required=True, readonly=False),
'employee_id':fields.many2one('hr.employee', 'Employee', required=True),
'amount': fields.float('Amount', digits_compute=dp.get_precision('Payroll')),
'bysal': fields.float('By Salary', digits_compute=dp.get_precision('Payroll')),
}

View File

@ -7,7 +7,7 @@
<record id="hr_payroll_salary_structure_emp_ind" model="hr.payroll.structure">
<field name="code">IND</field>
<field name="name">Indian Employee</field>
<field eval="[(6, 0, [ref('hr_salary_rule_medical'),ref('hr_salary_rule_lta'),ref('hr_salary_rule_telephone'), ref('hr_salary_rule_internet'),ref('hr_payroll_rule_child_edu'),ref('hr_salary_rule_gratuity')])]" name="rule_ids"/>
<field eval="[(6, 0, [ref('hr_salary_rule_medical'),ref('hr_salary_rule_lta'),ref('hr_salary_rule_telephone'), ref('hr_salary_rule_internet'),ref('hr_payroll_rule_child1'),ref('hr_salary_rule_gratuity')])]" name="rule_ids"/>
<field name="company_id" ref="base.main_company"/>
<field name="parent_id" ref="hr_payroll.structure_base"/>
</record>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="seq_type_payment_advice" model="ir.sequence.type">
<field name="name">Payment Advice</field>
<field name="code">payment.advice</field>
</record>
<record id="seq_payment_advice" model="ir.sequence">
<field name="name">Payment Advice</field>
<field name="code">payment.advice</field>
<field name="prefix">PAY/</field>
<field name="padding">3</field>
</record>
</data>
</openerp>

View File

@ -67,7 +67,17 @@
<field name="model">hr.payroll.advice</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Bank Advice">
<form string="Bank Advice" layout="manual">
<div class="oe_form_topbar">
<button name="compute_advice" string="Compute Advice" states="draft" type="object"/>
<button name="cancel_sheet" string="Cancel Sheet" states="draft" icon="gtk-cancel" type="object"/>
<button name="confirm_sheet" icon="gtk-apply" string="Confirm Sheet" states="draft" type="object"/>
<button name="set_to_draft" string="Set to Draft" icon="gtk-convert" states="cancel,confirm" type="object"/>
<div class="oe_right">
<field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft"/>
</div>
<div class="oe_clear"/>
</div>
<group col="6" colspan="4">
<field name="name" colspan="4" select="1"/>
<field name="number" select="1"/>
@ -80,7 +90,6 @@
<tree string="Payment Lines" editable="bottom">
<field name="employee_id" on_change="onchange_employee_id(parent.date, employee_id)"/>
<field name="name"/>
<field name="amount"/>
<field name="bysal"/>
</tree>
</field>
@ -94,13 +103,6 @@
<field name="note" colspan="4" nolabel="1"/>
</page>
</notebook>
<group col="6" colspan="6">
<field name="state"/>
<button name="compute_advice" string="Compute Advice" states="draft" type="object"/>
<button name="cancel_sheet" string="Cancel Sheet" states="draft" icon="gtk-cancel" type="object"/>
<button name="confirm_sheet" icon="gtk-apply" string="Confirm Sheet" states="draft" type="object"/>
<button name="set_to_draft" string="Set to Draft" icon="gtk-convert" states="cancel,confirm" type="object"/>
</group>
</form>
</field>
</record>