You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							118 lines
						
					
					
						
							5.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							118 lines
						
					
					
						
							5.1 KiB
						
					
					
				
								# -*- coding: utf-8 -*-
							 | 
						|
								
							 | 
						|
								import time
							 | 
						|
								
							 | 
						|
								from datetime import datetime, timedelta
							 | 
						|
								from dateutil import relativedelta
							 | 
						|
								
							 | 
						|
								from odoo import fields, tools
							 | 
						|
								from odoo.modules.module import get_module_resource
							 | 
						|
								from odoo.tests import common
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								class TestHrPayrollAccount(common.TransactionCase):
							 | 
						|
								
							 | 
						|
								    def _load(self, module, *args):
							 | 
						|
								        tools.convert_file(
							 | 
						|
								            self.cr, 'hr_payroll_account_community',
							 | 
						|
								            get_module_resource(module, *args), {}, 'init', False, 'test', self.registry._assertion_report)
							 | 
						|
								
							 | 
						|
								    def setUp(self):
							 | 
						|
								        super(TestHrPayrollAccount, self).setUp()
							 | 
						|
								
							 | 
						|
								        self._load('account', 'test', 'account_minimal_test.xml')
							 | 
						|
								
							 | 
						|
								        self.payslip_action_id = self.ref('hr_payroll_community.menu_department_tree')
							 | 
						|
								
							 | 
						|
								        self.res_partner_bank = self.env['res.partner.bank'].create({
							 | 
						|
								            'acc_number': '001-9876543-21',
							 | 
						|
								            'partner_id': self.ref('base.res_partner_12'),
							 | 
						|
								            'acc_type': 'bank',
							 | 
						|
								            'bank_id': self.ref('base.res_bank_1'),
							 | 
						|
								        })
							 | 
						|
								
							 | 
						|
								        self.hr_employee_john = self.env['hr.employee'].create({
							 | 
						|
								            'address_home_id': self.ref('base.res_partner_address_2'),
							 | 
						|
								            'address_id': self.ref('base.res_partner_address_27'),
							 | 
						|
								            'birthday': '1984-05-01',
							 | 
						|
								            'children': 0.0,
							 | 
						|
								            'country_id': self.ref('base.in'),
							 | 
						|
								            'department_id': self.ref('hr.dep_rd'),
							 | 
						|
								            'gender': 'male',
							 | 
						|
								            'marital': 'single',
							 | 
						|
								            'name': 'John',
							 | 
						|
								            'bank_account_id': self.res_partner_bank.bank_id.id,
							 | 
						|
								        })
							 | 
						|
								
							 | 
						|
								        self.hr_structure_softwaredeveloper = self.env['hr.payroll.structure'].create({
							 | 
						|
								            'name': 'Salary Structure for Software Developer',
							 | 
						|
								            'code': 'SD',
							 | 
						|
								            'company_id': self.ref('base.main_company'),
							 | 
						|
								            'parent_id': self.ref('hr_payroll_community.structure_base'),
							 | 
						|
								            'rule_ids': [(6, 0, [
							 | 
						|
								                    self.ref('hr_payroll_community.hr_salary_rule_houserentallowance1'),
							 | 
						|
								                    self.ref('hr_payroll_community.hr_salary_rule_convanceallowance1'),
							 | 
						|
								                    self.ref('hr_payroll_community.hr_salary_rule_professionaltax1'),
							 | 
						|
								                    self.ref('hr_payroll_community.hr_salary_rule_providentfund1'),
							 | 
						|
								                    self.ref('hr_payroll_community.hr_salary_rule_meal_voucher'),
							 | 
						|
								                    self.ref('hr_payroll_community.hr_salary_rule_sales_commission')
							 | 
						|
								            ])],
							 | 
						|
								        })
							 | 
						|
								
							 | 
						|
								        # Create account journal.
							 | 
						|
								        self.hr_contract_john = self.env['hr.contract'].create({
							 | 
						|
								            'date_end': fields.Date.to_string(datetime.now() + timedelta(days=365)),
							 | 
						|
								            'date_start': fields.Date.today(),
							 | 
						|
								            'name': 'Contract for John',
							 | 
						|
								            'wage': 5000.0,
							 | 
						|
								            'type_id': self.ref('hr_contract.hr_contract_type_emp'),
							 | 
						|
								            'employee_id': self.hr_employee_john.id,
							 | 
						|
								            'struct_id': self.hr_structure_softwaredeveloper.id,
							 | 
						|
								            'journal_id': self.ref('hr_payroll_account_community.expenses_journal'),
							 | 
						|
								        })
							 | 
						|
								
							 | 
						|
								        self.hr_payslip = self.env['hr.payslip'].create({
							 | 
						|
								            'employee_id': self.hr_employee_john.id,
							 | 
						|
								            'journal_id': self.ref('hr_payroll_account_community.expenses_journal'),
							 | 
						|
								        })
							 | 
						|
								
							 | 
						|
								    def test_00_hr_payslip(self):
							 | 
						|
								        """ checking the process of payslip. """
							 | 
						|
								
							 | 
						|
								        date_from = time.strftime('%Y-%m-01')
							 | 
						|
								        date_to = str(datetime.now() + relativedelta.relativedelta(months=+1, day=1, days=-1))[:10]
							 | 
						|
								        res = self.hr_payslip.onchange_employee_id(date_from, date_to, self.hr_employee_john.id)
							 | 
						|
								        vals = {
							 | 
						|
								            'struct_id': res['value']['struct_id'],
							 | 
						|
								            'contract_id': res['value']['contract_id'],
							 | 
						|
								            'name': res['value']['name'],
							 | 
						|
								        }
							 | 
						|
								        vals['worked_days_line_ids'] = [(0, 0, i) for i in res['value']['worked_days_line_ids']]
							 | 
						|
								        vals['input_line_ids'] = [(0, 0, i) for i in res['value']['input_line_ids']]
							 | 
						|
								        vals.update({'contract_id': self.hr_contract_john.id})
							 | 
						|
								        self.hr_payslip.write(vals)
							 | 
						|
								
							 | 
						|
								        # I assign the amount to Input data.
							 | 
						|
								        payslip_input = self.env['hr.payslip.input'].search([('payslip_id', '=', self.hr_payslip.id)])
							 | 
						|
								        payslip_input.write({'amount': 5.0})
							 | 
						|
								
							 | 
						|
								        # I verify the payslip is in draft state.
							 | 
						|
								        self.assertEqual(self.hr_payslip.state, 'draft', 'State not changed!')
							 | 
						|
								
							 | 
						|
								        # I click on "Compute Sheet" button.
							 | 
						|
								        context = {"lang": "en_US", "tz": False, "active_model": 'hr.payslip', "department_id": False, "active_ids": [self.payslip_action_id], "section_id": False, "active_id": self.payslip_action_id}
							 | 
						|
								        self.hr_payslip.with_context(context).compute_sheet()
							 | 
						|
								
							 | 
						|
								        # I want to check cancel button. So I first cancel the sheet then make it set to draft.
							 | 
						|
								        self.hr_payslip.action_payslip_cancel()
							 | 
						|
								        self.assertEqual(self.hr_payslip.state, 'cancel', "Payslip is rejected.")
							 | 
						|
								        self.hr_payslip.action_payslip_draft()
							 | 
						|
								
							 | 
						|
								        # Confirm Payslip
							 | 
						|
								        self.hr_payslip.action_payslip_done()
							 | 
						|
								
							 | 
						|
								        # I verify that the Accounting Entries are created.
							 | 
						|
								        self.assertTrue(self.hr_payslip.move_id, 'Accounting Entries has not been created')
							 | 
						|
								
							 | 
						|
								        # I verify that the payslip is in done state.
							 | 
						|
								        self.assertEqual(self.hr_payslip.state, 'done', 'State not changed!')
							 | 
						|
								
							 |