Skip to content

Commit

Permalink
Merge a5d3529 into 7113a0b
Browse files Browse the repository at this point in the history
  • Loading branch information
hendrixcosta committed Oct 24, 2019
2 parents 7113a0b + a5d3529 commit 7cb46c1
Show file tree
Hide file tree
Showing 10 changed files with 215 additions and 52 deletions.
3 changes: 3 additions & 0 deletions l10n_br_hr/__manifest__.py
Expand Up @@ -25,6 +25,9 @@
'views/hr_job_view.xml',
'views/inherited_hr_contract.xml',
],
'demo': [
'demo/hr_employee_dependent_demo.xml',
],
'test': [],
'external_dependencies': {
'python': [
Expand Down
44 changes: 44 additions & 0 deletions l10n_br_hr/demo/hr_employee_dependent_demo.xml
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>

<!--
Resource: hr.employee
-->

<record id="hr.employee_mit" model="hr.employee">
<field name="have_dependent" eval="True" />
</record>

<record id="hr.employee_hne" model="hr.employee">
<field name="have_dependent" eval="True" />
</record>

<!--
Resource: hr.employee.dependent
-->

<record id="hr_employee_dependent_1" model="hr.employee.dependent">
<field name="name">Anita Oliver Son</field>
<field name="employee_id" ref="hr.employee_mit"/>
<field name="dependent_type_id" ref="l10n_br_hr.l10n_br_dependent_3"/>
<field name="dependent_dob" eval="(DateTime.today() - timedelta(days=360)).strftime('%Y-%m-%d 00:00:00')"/>
<field name="cnpj_cpf">791.659.490-05</field>
</record>

<record id="hr_employee_dependent_2" model="hr.employee.dependent">
<field name="name">Anita Oliver Spouse</field>
<field name="employee_id" ref="hr.employee_mit"/>
<field name="dependent_type_id" ref="l10n_br_hr.l10n_br_dependent_1"/>
<field name="dependent_dob" eval="(DateTime.today() - timedelta(days=7200)).strftime('%Y-%m-%d 00:00:00')"/>
<field name="cnpj_cpf">342.667.780-66</field>
</record>

<record id="hr_employee_dependent_3" model="hr.employee.dependent">
<field name="name">Abigail Peterson Son</field>
<field name="employee_id" ref="hr.employee_hne"/>
<field name="dependent_type_id" ref="l10n_br_hr.l10n_br_dependent_3"/>
<field name="dependent_dob" eval="(DateTime.today() - timedelta(days=720)).strftime('%Y-%m-%d 00:00:00')"/>
<field name="cnpj_cpf">160.953.400-04</field>
</record>

</odoo>
2 changes: 1 addition & 1 deletion l10n_br_hr/i18n/l10n_br_hr.pot
Expand Up @@ -470,7 +470,7 @@ msgid "Dependent Infos"
msgstr ""

#. module: l10n_br_hr
#: model:ir.model.fields,field_description:l10n_br_hr.field_hr_employee_dependent__dependent_name
#: model:ir.model.fields,field_description:l10n_br_hr.field_hr_employee_dependent__name
msgid "Dependent name"
msgstr ""

Expand Down
2 changes: 1 addition & 1 deletion l10n_br_hr/i18n/pt_BR.po
Expand Up @@ -498,7 +498,7 @@ msgid "Dependent Infos"
msgstr "Informações dependentes"

#. module: l10n_br_hr
#: model:ir.model.fields,field_description:l10n_br_hr.field_hr_employee_dependent__dependent_name
#: model:ir.model.fields,field_description:l10n_br_hr.field_hr_employee_dependent__name
#, fuzzy
msgid "Dependent name"
msgstr "Informações dependentes"
Expand Down
4 changes: 2 additions & 2 deletions l10n_br_hr/models/hr_employee.py
Expand Up @@ -198,7 +198,7 @@ def _check_dob(self):
for dependent in self.dependent_ids:
if dependent.dependent_dob > fields.Date.context_today(self):
raise ValidationError(_('Invalid birth date for dependent %s')
% dependent.dependent_name)
% dependent.name)

def _check_dependent_type(self):
seen = set()
Expand All @@ -215,7 +215,7 @@ def _check_dependent_type(self):
raise ValidationError(
_('A dependent with the same level of relatedness'
' already exists for dependent %s')
% dependent.dependent_name)
% dependent.name)

@api.constrains('pis_pasep')
def _validate_pis_pasep(self):
Expand Down
91 changes: 49 additions & 42 deletions l10n_br_hr/models/hr_employee_dependent.py
Expand Up @@ -15,81 +15,88 @@ class HrEmployeeDependent(models.Model):
_rec_name = "dependent_name"
_inherits = {"res.partner": "partner_id"}

@api.constrains("dependent_cpf")
def _validate_cpf(self):
if self.dependent_cpf:
if not cnpj_cpf.validar(self.dependent_cpf):
raise ValidationError(
_("Invalid CPF for dependent %s") % self.dependent_name
)

def _get_default_employee(self):
if self.env.user.has_group("base.group_hr_user"):
return False
return self.env.user.employee_ids[0]

employee_id = fields.Many2one(comodel_name="hr.employee", string="Employee ID")

dependent_name = fields.Char(string="Dependent name", size=64, required=True)
employee_id = fields.Many2one(
comodel_name='hr.employee',
string='Employee ID',
default=_get_default_employee,
)

dependent_dob = fields.Date(string="Date of birth", required=True)
dependent_dob = fields.Date(
string='Date of birth',
required=True)

dependent_type_id = fields.Many2one(
string="Relatedness", required=True, comodel_name="hr.dependent.type"
)
string='Relatedness',
required=True,
comodel_name='hr.dependent.type')

pension_benefits = fields.Float(string="Allowance value")
pension_benefits = fields.Float(
string='Allowance value')

dependent_verification = fields.Boolean(string="Is dependent")
dependent_verification = fields.Boolean(
string='Is dependent')

health_verification = fields.Boolean(string="Healthcare plan")
health_verification = fields.Boolean(
string='Healthcare plan')

dependent_gender = fields.Selection(
string="Gender", selection=[("m", "Male"), ("f", "Female")]
)
string='Gender',
selection=[
('m', 'Male'),
('f', 'Female')])

dependent_rg = fields.Char(string="RG")

dependent_cpf = fields.Char(string="CPF")

have_alimony = fields.Boolean(string="Tem Pensão?")
have_alimony = fields.Boolean(
string='Tem Pensão?')

partner_id = fields.Many2one(
comodel_name="res.partner",
string="Partner",
ondelete="cascade",
comodel_name='res.partner',
string='Partner',
ondelete='cascade',
auto_join=True,
required=True,
help="Parceiro que contem as informações de banco do dependente.",
help="Parceiro que contem as informações de banco do dependente."
)

partner_id_bank_ids = fields.One2many(
comodel_name="res.partner.bank",
string="Info Bank",
related="partner_id.bank_ids",
comodel_name='res.partner.bank',
string='Info Bank',
related='partner_id.bank_ids',
)
dep_sf = fields.Boolean(
string='Salário Família?',
)
inc_trab = fields.Boolean(
string='Incapacidade Física ou Mental?',
)
inc_trab_inss_file = fields.Binary(
string='Atestado de incapacidade INSS',
)
dep_sf = fields.Boolean(string="Salário Família?")
inc_trab = fields.Boolean(string="Incapacidade Física ou Mental?")
inc_trab_inss_file = fields.Binary(string="Atestado de incapacidade INSS")
relative_file = fields.Binary(
string="Documento comprobatório da relação",
help="Certidão de Nascimento / Casamento / etc",
string='Documento comprobatório da relação',
help='Certidão de Nascimento / Casamento / etc'
)

@api.model
def create(self, vals):
ctx = self.env.context.copy()
ctx["create_depentent"] = True
ctx["depentent_employee_id"] = vals.get("employee_id", False)
ctx['create_depentent'] = True
ctx['depentent_employee_id'] = vals.get('employee_id', False)
#
# O sudo foi utilizado para evitar a permissão de criação de contato
# para o funcionário.
#
patient = super(HrEmployeeDependent, self.sudo().with_context(ctx)).create(vals)
patient = super(
HrEmployeeDependent, self.sudo().with_context(ctx)
).create(vals)
return patient

@api.onchange('dependent_cpf')
@api.onchange('cnpj_cpf')
def onchange_cpf(self):
cpf = cnpj_cpf.formata(str(self.dependent_cpf))
cpf = cnpj_cpf.formata(str(self.cnpj_cpf))
if cpf:
self.dependent_cpf = cpf
self.cnpj_cpf = cpf
1 change: 1 addition & 0 deletions l10n_br_hr/tests/__init__.py
@@ -1 +1,2 @@
from . import test_l10n_br_hr
from . import test_hr_employee_dependent
104 changes: 104 additions & 0 deletions l10n_br_hr/tests/test_hr_employee_dependent.py
@@ -0,0 +1,104 @@
from dateutil.relativedelta import relativedelta
from odoo.exceptions import ValidationError
from odoo.fields import Date
from odoo.tests import TransactionCase


class TestHrEmployeeDependent(TransactionCase):

def setUp(self):
super(TestHrEmployeeDependent, self).setUp()

self.employee = self.env['hr.employee']
self.employee = self.employee.create({
'address_id': self.env['res.partner'].search([])[0].company_id.id,
'company_id': self.env['res.partner'].search([])[0].company_id.id,
'department_id': self.env['hr.department'],
'civil_certificate_type_id': self.env['hr.civil.certificate.type'],
'deficiency_id': 1,
'deficiency_description': 'Deficiency in index finger',
'name': 'l10n brazil demo employee',
'pis_pasep': '496.85994.95-6',
'cnpj_cpf': '853.334.271-35',
})

self.employee_dependent = self.env['hr.employee.dependent']
self.employee_dependent = self.employee_dependent.create({
'employee_id': self.employee.id,
'name': 'Dependent 01',
'dependent_dob': '2019-01-01',
'inscr_est': '49.365.539-6',
'cnpj_cpf': '417.668.850-55',
'dependent_type_id':
self.env['hr.dependent.type'].search([])[0].id,
})

self.employee._check_dependents()
self.assertTrue(self.employee, 'Error on create a l10n_br employee')
self.assertTrue(
self.employee_dependent, 'Error on create a employee dependent')

def test_invalid_hr_employee_dependent_cpf(self):
try:
result = self.employee_dependent.write({
'cnpj_cpf': '853.334.271-351',
})
except ValidationError:
result = False

self.assertFalse(
result, 'Error on update invalid employee dependent cpf')

def test_onchange_cpf(self):
self.employee_dependent.write({'cnpj_cpf': '78004863035'})
self.employee_dependent.onchange_cpf()

self.assertEqual(
self.employee_dependent.cnpj_cpf, '780.048.630-35')

def test_check_dob(self):
"""
Data de nascimento maior do que hoje.
"""
self.employee_dependent.write({
'dependent_dob': Date.today() + relativedelta(days=1),
})

with self.assertRaises(ValidationError) as context:
self.employee._check_dob()

self.assertEqual(
'Invalid birth date for dependent Dependent 01',
context.exception.name)

def test_check_dependent_type(self):
"""
Dependentes do mesmo tipo.
"""
self.employee_dependent_obj = self.env['hr.employee.dependent']

self.employee_dependent_obj.create({
'employee_id': self.employee.id,
'name': 'Dependent 02',
'dependent_dob': '2019-01-01',
'cnpj_cpf': '994.769.750-91',
'dependent_type_id':
self.env.ref('l10n_br_hr.l10n_br_dependent_1').id,
})

self.employee_dependent_obj.create({
'employee_id': self.employee.id,
'name': 'Dependent 03',
'dependent_dob': '2019-02-01',
'cnpj_cpf': '362.502.120-00',
'dependent_type_id':
self.env.ref('l10n_br_hr.l10n_br_dependent_1').id,
})

with self.assertRaises(ValidationError) as context:
self.employee._check_dependent_type()

self.assertEqual(
'A dependent with the same level of relatedness already '
'exists for dependent Dependent 02',
context.exception.name)
5 changes: 5 additions & 0 deletions l10n_br_hr/tests/test_l10n_br_hr.py
Expand Up @@ -32,6 +32,11 @@ def test_invalid_hr_employee_cpf(self):

self.assertFalse(result, 'Error on update invalid employee cpf')

def test_onchange_cpf(self):
self.employee.write({'cpf': '78004863035'})
self.employee.onchange_cpf()
self.assertEqual(self.employee.cpf, '780.048.630-35')

def test_invalid_employee_pis_pasep(self):
try:
result = self.employee.write({
Expand Down
11 changes: 5 additions & 6 deletions l10n_br_hr/views/hr_employee_dependent_view.xml
Expand Up @@ -10,24 +10,23 @@
<separator string="Dependent Infos" colspan="4"/>
<group>
<group>
<field name="dependent_name"/>
<field name="name"/>
<field name="dependent_dob"/>
<field name="dependent_type_id"/>
<field name="dependent_rg"/>
<field name="dependent_cpf"/>
<field name="inscr_est" string="RG"/>
<field name="cnpj_cpf" string="CPF"/>
</group>
<group>
<field name="dependent_gender"/>
<field name="pension_benefits"/>
<field name="health_verification"/>
<field name="dependent_verification"/>
<field name="have_alimony"/>
<field name="partner_id"/>
<field name="partner_id" readonly="1" required="0" attrs="{'invisible': [('id', '=', False)]}"/>
</group>
</group>
<group attrs="{'invisible':[('have_alimony', '!=', True)]}">
<separator string="Bank account for alimony" colspan="4"/>
<field name="partner_id"/>
<field name="partner_id_bank_ids"/>
</group>
</sheet>
Expand All @@ -40,7 +39,7 @@
<field name="model">hr.employee.dependent</field>
<field name="arch" type="xml">
<tree>
<field name="dependent_name"/>
<field name="name"/>
<field name="dependent_dob"/>
<field name="dependent_type_id" options="{'no_create': True, 'no_open': True}"/>
<field name="pension_benefits"/>
Expand Down

0 comments on commit 7cb46c1

Please sign in to comment.