diff --git a/addons/hr_payroll/__openerp__.py b/addons/hr_payroll/__openerp__.py
index e0554c1738f..3efa777885c 100644
--- a/addons/hr_payroll/__openerp__.py
+++ b/addons/hr_payroll/__openerp__.py
@@ -54,6 +54,12 @@
'wizard/hr_payroll_employees_detail.xml',
'wizard/hr_payroll_year_salary.xml',
+ ],
+ 'test': [
+ 'test/payslip.yml',
+ 'test/payment_advice.yml',
+ 'test/payroll_register.yml',
+
],
'demo_xml': [
'hr_payroll_demo.xml'
diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py
index 14e3e231f4a..c04d7eb828a 100644
--- a/addons/hr_payroll/hr_payroll.py
+++ b/addons/hr_payroll/hr_payroll.py
@@ -194,10 +194,10 @@ class payroll_register(osv.osv):
# 'advice_ids':fields.one2many('hr.payroll.advice', 'register_id', 'Bank Advice'),
'company_id':fields.many2one('res.company', 'Company', required=False),
'period_id': fields.many2one('account.period', 'Force Period', domain=[('state','<>','done')], help="Keep empty to use the period of the validation(Payslip) date."),
- 'grows': fields.function(_calculate, method=True, store=True, multi='dc', string='Gross Salary', type='float', digits=(16, 4))),
- 'net': fields.function(_calculate, method=True, store=True, multi='dc', string='Net Salary', digits=(16, 4)),
- 'allounce': fields.function(_calculate, method=True, store=True, multi='dc', string='Allowance', digits=(16, 4)),
- 'deduction': fields.function(_calculate, method=True, store=True, multi='dc', string='Deduction', digits=(16, 4)),
+ 'grows': fields.function(_calculate, method=True, store=True, multi='dc', string='Gross Salary', type='float', digits=(16, int(config['price_accuracy']))),
+ 'net': fields.function(_calculate, method=True, store=True, multi='dc', string='Net Salary', digits=(16, int(config['price_accuracy']))),
+ 'allounce': fields.function(_calculate, method=True, store=True, multi='dc', string='Allowance', digits=(16, int(config['price_accuracy']))),
+ 'deduction': fields.function(_calculate, method=True, store=True, multi='dc', string='Deduction', digits=(16, int(config['price_accuracy']))),
'note': fields.text('Description'),
}
@@ -366,8 +366,8 @@ class payroll_advice_line(osv.osv):
'advice_id':fields.many2one('hr.payroll.advice', 'Bank Advice', required=False),
'name':fields.char('Bank Account A/C', size=64, required=True, readonly=False),
'employee_id':fields.many2one('hr.employee', 'Employee', required=True),
- 'amount': fields.float('Amount', digits=(16, 4)),
- 'bysal': fields.float('By Salary', digits=(16, 4)),
+ 'amount': fields.float('Amount', digits=(16, int(config['price_accuracy']))),
+ 'bysal': fields.float('By Salary', digits=(16, int(config['price_accuracy']))),
'flag':fields.char('D/C', size=8, required=True, readonly=False),
}
_defaults = {
@@ -434,10 +434,10 @@ class contrib_register(osv.osv):
'analytic_account_id':fields.many2one('account.analytic.account', 'Analytic Account', required=False),
'name':fields.char('Name', size=256, required=True, readonly=False),
'register_line_ids':fields.one2many('hr.contibution.register.line', 'register_id', 'Register Line', readonly=True),
- 'yearly_total_by_emp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Employee', digits=(16, 4)),
- 'yearly_total_by_comp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Company', digits=(16, 4)),
- 'monthly_total_by_emp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Employee', digits=(16, 4)),
- 'monthly_total_by_comp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Company', digits=(16, 4)),
+ 'yearly_total_by_emp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Employee', digits=(16, int(config['price_accuracy']))),
+ 'yearly_total_by_comp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Company', digits=(16, int(config['price_accuracy']))),
+ 'monthly_total_by_emp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Employee', digits=(16, int(config['price_accuracy']))),
+ 'monthly_total_by_comp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Company', digits=(16, int(config['price_accuracy']))),
'note': fields.text('Description'),
}
_defaults = {
@@ -466,9 +466,9 @@ class contrib_register_line(osv.osv):
'code':fields.char('Code', size=64, required=False, readonly=False),
'employee_id':fields.many2one('hr.employee', 'Employee', required=True),
'period_id': fields.many2one('account.period', 'Period'),
- 'emp_deduction': fields.float('Employee Deduction', digits=(16, 4)),
- 'comp_deduction': fields.float('Company Deduction', digits=(16, 4)),
- 'total': fields.function(_total, method=True, store=True, string='Total', digits=(16, 4)),
+ 'emp_deduction': fields.float('Employee Deduction', digits=(16, int(config['price_accuracy']))),
+ 'comp_deduction': fields.float('Company Deduction', digits=(16, int(config['price_accuracy']))),
+ 'total': fields.function(_total, method=True, store=True, string='Total', digits=(16, int(config['price_accuracy']))),
}
contrib_register_line()
@@ -539,7 +539,7 @@ class company_contribution(osv.osv):
('fix','Fixed Amount'),
('func','Function Calculation'),
],'Amount Type', select=True),
- 'contribute_per':fields.float('Contribution', digits=(16, 4), help='Define Company contribution ratio 1.00=100% contribution, If Employee Contribute 5% then company will and here 0.50 defined then company will contribute 50% on employee 5% contribution'),
+ 'contribute_per':fields.float('Contribution', digits=(16, int(config['price_accuracy'])), help='Define Company contribution ratio 1.00=100% contribution, If Employee Contribute 5% then company will and here 0.50 defined then company will contribute 50% on employee 5% contribution'),
'account_id':fields.property(
'account.account',
type='many2one',
@@ -596,13 +596,13 @@ class company_contribution_line(osv.osv):
'contribution_id':fields.many2one('company.contribution', 'Contribution', required=False),
'name':fields.char('Name', size=64, required=False, readonly=False),
'umo_id':fields.many2one('product.uom', 'Unite', required=False),
- 'from_val': fields.float('From', digits=(16, 4)),
- 'to_val': fields.float('To', digits=(16, 4)),
+ 'from_val': fields.float('From', digits=(16, int(config['price_accuracy']))),
+ 'to_val': fields.float('To', digits=(16, int(config['price_accuracy']))),
'amount_type':fields.selection([
('fix','Fixed Amount'),
],'Amount Type', select=True),
'sequence':fields.integer('Sequence'),
- 'value': fields.float('Value', digits=(16, 4)),
+ 'value': fields.float('Value', digits=(16, int(config['price_accuracy']))),
}
company_contribution_line()
@@ -1213,9 +1213,9 @@ class hr_payslip_line(osv.osv):
'amount': fields.float('Amount / Percentage', digits=(16, 4)),
'analytic_account_id':fields.many2one('account.analytic.account', 'Analytic Account', required=False),
'account_id':fields.many2one('account.account', 'General Account', required=True),
- 'total': fields.float('Sub Total', readonly=True, digits=(16, 4)),
+ 'total': fields.float('Sub Total', readonly=True, digits=(16, int(config['price_accuracy']))),
#'total': fields.function(_calculate, method=True, type='float', string='Label', store=True),
- 'company_contrib': fields.float('Company Contribution', readonly=True, digits=(16, 4)),
+ 'company_contrib': fields.float('Company Contribution', readonly=True, digits=(16, int(config['price_accuracy']))),
'expanse_id': fields.many2one('hr.expense.expense', 'Expense'),
'sequence': fields.integer('Sequence'),
'note':fields.text('Description'),
@@ -1251,13 +1251,13 @@ class hr_payslip_line_line(osv.osv):
'slipline_id':fields.many2one('hr.payslip.line', 'Slip Line', required=False),
'name':fields.char('Name', size=64, required=False, readonly=False),
'umo_id':fields.many2one('product.uom', 'Unite', required=False),
- 'from_val': fields.float('From', digits=(16, 4)),
- 'to_val': fields.float('To', digits=(16, 4)),
+ 'from_val': fields.float('From', digits=(16, int(config['price_accuracy']))),
+ 'to_val': fields.float('To', digits=(16, int(config['price_accuracy']))),
'amount_type':fields.selection([
('fix','Fixed Amount'),
],'Amount Type', select=True),
'sequence':fields.integer('Sequence'),
- 'value': fields.float('Value', digits=(16, 4)),
+ 'value': fields.float('Value', digits=(16, int(config['price_accuracy']))),
}
hr_payslip_line_line()
diff --git a/addons/hr_payroll/hr_payroll_view.xml b/addons/hr_payroll/hr_payroll_view.xml
index c8810e52c68..f98247236ae 100644
--- a/addons/hr_payroll/hr_payroll_view.xml
+++ b/addons/hr_payroll/hr_payroll_view.xml
@@ -169,6 +169,7 @@
+
diff --git a/addons/hr_payroll/test/payment_advice.yml b/addons/hr_payroll/test/payment_advice.yml
new file mode 100644
index 00000000000..de86d8c27be
--- /dev/null
+++ b/addons/hr_payroll/test/payment_advice.yml
@@ -0,0 +1,54 @@
+-
+ I test the 'Payment Advice' in order to check the hr_payroll in OpenERP
+-
+ I create a new employee “Richie”
+-
+ !record {model: hr.employee, id: hr_employee_richie0}:
+ address_home_id: base.res_partner_address_1
+ address_id: base.res_partner_address_9
+ birthday: '1984-05-01'
+ children: 0.0
+ contract_ids:
+ - advantages_gross: 0.0
+ advantages_net: 0.0
+ date_end: '2011-07-01'
+ date_start: '2010-07-01'
+ name: reference
+ wage: 5000.0
+ wage_type_id: hr_contract.hr_contract_monthly_gross
+ country_id: base.in
+ department_id: hr.dep_it
+ employee_account: account.a_recv
+ gender: male
+ marital: hr.hr_employee_marital_status_single
+ name: Richie
+ pg_joining: '2009-12-01'
+ property_bank_account: account.cash
+ salary_account: account.a_recv
+ vehicle_distance: 0.0
+-
+ Then I create a new payment advice record
+-
+ !record {model: hr.payroll.advice, id: hr_payroll_advice_advice0}:
+ account_id: account.cash
+ line_ids:
+ - amount: 5500.0
+ bysal: 5000.0
+ employee_id: 'hr_employee_richie0'
+ flag: C
+ name: Axis Bank
+ name: advice1
+-
+ In order to confirm a sheet I click on "Confirm Sheet" button
+-
+ !python {model: hr.payroll.advice}: |
+ self.confirm_sheet(cr, uid, [ref("hr_payroll_advice_advice0")], {"lang": "en_US",
+ "active_model": "ir.ui.menu", "active_ids": [ref("hr_payroll.hr_menu_payment_advice")],
+ "tz": False, "active_id": ref("hr_payroll.hr_menu_payment_advice")})
+-
+ I check that a state has transferred from draft to confirm
+-
+ !python {model: hr.payroll.advice}: |
+ from tools.translate import _
+ advice_id=self.browse(cr, uid, ref("hr_payroll_advice_advice0"))
+ assert(advice_id.state == 'confirm'), _('State not changed!')
diff --git a/addons/hr_payroll/test/payroll_register.yml b/addons/hr_payroll/test/payroll_register.yml
new file mode 100644
index 00000000000..317ad40ac32
--- /dev/null
+++ b/addons/hr_payroll/test/payroll_register.yml
@@ -0,0 +1,63 @@
+-
+ I test the 'Payroll Register' in order to check the hr_payroll in OpenERP
+-
+ I create a new employee “Keith”
+-
+ !record {model: hr.employee, id: hr_employee_keith0}:
+ address_home_id: base.res_partner_address_3
+ address_id: base.res_partner_address_9
+ birthday: '1984-05-01'
+ children: 0.0
+ contract_ids:
+ - advantages_gross: 0.0
+ advantages_net: 0.0
+ date_end: '2011-07-01'
+ date_start: '2010-07-01'
+ name: reference
+ wage: 5000.0
+ wage_type_id: hr_contract.hr_contract_monthly_gross
+ country_id: base.in
+ department_id: hr.dep_it
+ employee_account: account.a_recv
+ gender: male
+ marital: hr.hr_employee_marital_status_single
+ name: Keith
+ pg_joining: '2009-12-01'
+ property_bank_account: account.cash
+ salary_account: account.a_recv
+ vehicle_distance: 0.0
+-
+ I create a payroll register record
+-
+ !record {model: hr.payroll.register, id: hr_payroll_register_payroll0}:
+ bank_journal_id: account.bank_journal
+ date: '2010-07-02'
+ journal_id: account.expenses_journal
+ line_ids:
+ - employee_id: hr_payroll.hr_employee_keith0
+ bank_journal_id: account.bank_journal
+ journal_id: account.expenses_journal
+ name: payroll1
+-
+ I click on Compute button
+-
+ !python {model: hr.payroll.register}: |
+ self.compute_sheet(cr, uid, [ref("hr_payroll_register_payroll0")], {"lang": "en_US",
+ "tz": False, "active_model": "ir.ui.menu", "department_id": False, "active_ids":
+ [ref("hr_payroll.hr_menu_payroll_register")], "section_id": False, "active_id":
+ ref("hr_payroll.hr_menu_payroll_register"), })
+-
+ Then I click on Verify Sheet button
+-
+ !python {model: hr.payroll.register}: |
+ self.verify_sheet(cr, uid, [ref("hr_payroll_register_payroll0")], {"lang": "en_US",
+ "tz": False, "active_model": "ir.ui.menu", "department_id": False, "active_ids":
+ [ref("hr_payroll.hr_menu_payroll_register")], "section_id": False, "active_id":
+ ref("hr_payroll.hr_menu_payroll_register"), })
+-
+ I check that a state has transferred from 'Wating for Verification' to 'Wating for HR Verification'state
+-
+ !python {model: hr.payroll.register}: |
+ from tools.translate import _
+ reg_brw=self.browse(cr, uid, ref("hr_payroll_register_payroll0"))
+ assert(reg_brw.state == 'hr_check'), _('State not changed!')
diff --git a/addons/hr_payroll/test/payslip.yml b/addons/hr_payroll/test/payslip.yml
new file mode 100644
index 00000000000..1ecab075da0
--- /dev/null
+++ b/addons/hr_payroll/test/payslip.yml
@@ -0,0 +1,132 @@
+-
+ I test the 'Payment Advice' in order to check the hr_payroll in OpenERP
+-
+ I create a new employee “Richard”
+-
+ !record {model: hr.employee, id: hr_employee_richard0}:
+ address_home_id: base.res_partner_address_2
+ address_id: base.res_partner_address_9
+ birthday: '1984-05-01'
+ children: 0.0
+ contract_ids:
+ - advantages_gross: 0.0
+ advantages_net: 0.0
+ date_end: '2011-07-01'
+ date_start: '2010-07-01'
+ name: reference
+ wage: 5000.0
+ wage_type_id: hr_contract.hr_contract_monthly_gross
+ country_id: base.in
+ department_id: hr.dep_it
+ employee_account: account.a_recv
+ gender: male
+ marital: hr.hr_employee_marital_status_single
+ name: Richard
+ pg_joining: '2009-12-01'
+ property_bank_account: account.cash
+ salary_account: account.a_recv
+ vehicle_distance: 0.0
+-
+ I create a new payroll structure for software developer
+-
+ !record {model: hr.payroll.structure, id: hr_payroll_structure_softwaredeveloper0}:
+ code: SD
+ line_ids:
+ - account_id: account.a_expense
+ amount: 0.40000000000000002
+ amount_type: per
+ category_id: hr_payroll.HRA
+ code: HRA
+ company_contrib: 0.0
+ name: House Rant Allowance
+ sequence: 5
+ total: 0.0
+ type: allowance
+ - account_id: account.a_expense
+ amount: 10000.0
+ amount_type: fix
+ category_id: hr_payroll.CA
+ code: CA
+ company_contrib: 0.0
+ name: Convance Allowance
+ sequence: 10
+ total: 0.0
+ type: allowance
+ - account_id: account.a_pay
+ amount: 10000.0
+ amount_type: fix
+ category_id: hr_payroll.PT
+ code: PT
+ company_contrib: 0.0
+ name: Professional Tax
+ sequence: 15
+ total: 0.0
+ type: deduction
+ - account_id: account.a_pay
+ amount: 0.125
+ amount_type: per
+ category_id: hr_payroll.PF
+ code: PF
+ company_contrib: 0.0
+ name: Provident Fund
+ sequence: 20
+ total: 0.0
+ type: deduction
+ name: Software Developer
+-
+ I create a employee payslip record
+-
+ !record {model: hr.payslip, id: hr_payslip_0}:
+ bank_journal_id: account.bank_journal
+ employee_id: hr_payroll.hr_employee_richard0
+ journal_id: account.expenses_journal
+-
+ I click on 'Compute Sheet' button
+-
+ !workflow {model: hr.payslip, action: compute_sheet, ref: hr_payslip_0}
+-
+ !python {model: hr.payslip}: |
+ self.compute_sheet(cr, uid, [ref("hr_payslip_0")], {"lang": "en_US", "tz": False,
+ "active_model": "ir.ui.menu", "department_id": False, "active_ids": [ref("hr_payroll.menu_department_tree")],
+ "section_id": False, "active_id": ref("hr_payroll.menu_department_tree"),
+ })
+-
+ I check that an order which was in the "New Slip" state has transit to "Wating for Verification" state
+-
+ !python {model: hr.payslip}: |
+ from tools.translate import _
+ payslip_brw=self.browse(cr, uid, ref("hr_payslip_0"))
+ assert(payslip_brw.state == 'draft'), _('State not changed!')
+-
+ Then I click on Verify Sheet button
+-
+ !workflow {model: hr.payslip, action: verify_sheet, ref: hr_payslip_0}
+-
+ I check that an order which was in the "Wating for Verification" state has transit to "Wating for HR Verification" state
+-
+ !python {model: hr.payslip}: |
+ from tools.translate import _
+ payslip_brw=self.browse(cr, uid, ref("hr_payslip_0"))
+ assert(payslip_brw.state == 'hr_check'), _('State not changed!')
+-
+ Then I click on Complete HR Checking button
+-
+ !workflow {model: hr.payslip, action: final_verify_sheet, ref: hr_payslip_0}
+-
+ I check that an order which was in the "'Wating for HR Verification'" state has transit to "Confirm Sheet" state
+-
+ !python {model: hr.payslip}: |
+ from tools.translate import _
+ payslip_brw=self.browse(cr, uid, ref("hr_payslip_0"))
+ assert(payslip_brw.state == 'confirm'), _('State not changed!')
+-
+ Then I click on Pay Salary button
+-
+ !workflow {model: hr.payslip, action: process_sheet, ref: hr_payslip_0}
+-
+ I check that an order which was in the "Confirm Sheet" state has transit to "Paid Salary" state
+-
+ !python {model: hr.payslip}: |
+ from tools.translate import _
+ payslip_brw=self.browse(cr, uid, ref("hr_payslip_0"))
+ assert(payslip_brw.state == 'done'), _('State not changed!')
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index cf3026494aa..6873508023f 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -20,15 +20,13 @@
from datetime import datetime
from dateutil.relativedelta import relativedelta
+import time
from osv import fields, osv
from tools import config
from tools.translate import _
-import math
import netsvc
-import time
import tools
-
import decimal_precision as dp