diff options
| author | fka-odoo <fka@openerp.com> | 2016-03-30 17:09:50 +0200 |
|---|---|---|
| committer | Jérome Maes <jem@openerp.com> | 2016-04-14 10:47:39 +0200 |
| commit | 095d0174fd716d08d66f62a11169dca9aa649aa7 (patch) | |
| tree | ebae087f29d202db4aefdbe5497df5f7d0d2aadd | |
| parent | 2196b511ee2a2847461763241d8e32095a10afad (diff) | |
[MIG] hr_contract : migrate the code to new api
| -rw-r--r-- | addons/hr_contract/__openerp__.py | 3 | ||||
| -rw-r--r-- | addons/hr_contract/data/hr_contract_data.xml | 4 | ||||
| -rw-r--r-- | addons/hr_contract/models/base_action_rule.py | 37 | ||||
| -rw-r--r-- | addons/hr_contract/models/hr_contract.py | 193 | ||||
| -rw-r--r-- | addons/hr_contract/views/base_action_rule_views.xml | 8 | ||||
| -rw-r--r-- | addons/hr_contract/views/hr_contract_views.xml | 77 |
6 files changed, 146 insertions, 176 deletions
diff --git a/addons/hr_contract/__openerp__.py b/addons/hr_contract/__openerp__.py index b4361b7c234..2750480674b 100644 --- a/addons/hr_contract/__openerp__.py +++ b/addons/hr_contract/__openerp__.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. - { 'name': 'Employee Contracts', 'version': '1.0', @@ -21,9 +20,9 @@ You can assign several contracts per employee. 'depends': ['base_action_rule', 'hr'], 'data': [ 'security/ir.model.access.csv', - 'views/hr_contract_views.xml', 'data/hr_contract_data.xml', 'views/base_action_rule_views.xml', + 'views/hr_contract_views.xml', ], 'demo': [], 'test': ['test/test_hr_contract.yml'], diff --git a/addons/hr_contract/data/hr_contract_data.xml b/addons/hr_contract/data/hr_contract_data.xml index 9bf558d5148..edaa93b16c0 100644 --- a/addons/hr_contract/data/hr_contract_data.xml +++ b/addons/hr_contract/data/hr_contract_data.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<openerp> +<odoo> <data noupdate="1"> <!-- Contract Types --> @@ -109,4 +109,4 @@ </record> </data> -</openerp> +</odoo> diff --git a/addons/hr_contract/models/base_action_rule.py b/addons/hr_contract/models/base_action_rule.py index 462e92e8daf..8998c9d2288 100644 --- a/addons/hr_contract/models/base_action_rule.py +++ b/addons/hr_contract/models/base_action_rule.py @@ -1,36 +1,27 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from openerp.addons.base_action_rule.base_action_rule import get_datetime -from openerp.osv import fields, osv +from odoo import api, fields, models +from odoo.fields import Datetime -class base_action_rule(osv.Model): +class BaseActionRule(models.Model): """ Add resource and calendar for time-based conditions """ - _name = 'base.action.rule' - _inherit = ['base.action.rule'] - _columns = { - 'trg_date_resource_field_id': fields.many2one( - 'ir.model.fields', 'Use employee work schedule', - help='Use the user\'s working schedule.', - ), - } + _inherit = 'base.action.rule' - def _check_delay(self, cr, uid, action, record, record_dt, context=None): + trg_date_resource_field_id = fields.Many2one('ir.model.fields', string='Use employee work schedule', help='Use the user\'s working schedule.') + + @api.model + def _check_delay(self, action, record, record_dt): """ Override the check of delay to try to use a user-related calendar. - If no calendar is found, fallback on the default behavior. """ + If no calendar is found, fallback on the default behavior. + """ if action.trg_date_calendar_id and action.trg_date_range_type == 'day' and action.trg_date_resource_field_id: user = record[action.trg_date_resource_field_id.name] - if user.employee_ids and user.employee_ids[0].contract_id \ - and user.employee_ids[0].contract_id.working_hours: + if user.employee_ids and user.employee_ids[0].contract_id and user.employee_ids[0].contract_id.working_hours: calendar = user.employee_ids[0].contract_id.working_hours - start_dt = get_datetime(record_dt) + start_dt = Datetime.from_string(record_dt) resource_id = user.employee_ids[0].resource_id.id - action_dt = self.pool['resource.calendar'].schedule_days_get_date( - cr, uid, calendar.id, action.trg_date_range, - day_date=start_dt, compute_leaves=True, resource_id=resource_id, - context=context - ) - return action_dt - return super(base_action_rule, self)._check_delay(cr, uid, action, record, record_dt, context=context) + return calendar.schedule_days_get_date(action.trg_date_range, day_date=start_dt, compute_leaves=True, resource_id=resource_id) + return super(BaseActionRule, self)._check_delay(action, record, record_dt) diff --git a/addons/hr_contract/models/hr_contract.py b/addons/hr_contract/models/hr_contract.py index f649fb86636..e6a4a9b85c9 100644 --- a/addons/hr_contract/models/hr_contract.py +++ b/addons/hr_contract/models/hr_contract.py @@ -1,130 +1,101 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -import time +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError -from openerp import SUPERUSER_ID -from openerp.osv import fields, osv -class hr_employee(osv.osv): - _name = "hr.employee" - _description = "Employee" +class Employee(models.Model): + _inherit = "hr.employee" - def _get_latest_contract(self, cr, uid, ids, field_name, args, context=None): - res = {} - obj_contract = self.pool.get('hr.contract') - for emp in self.browse(cr, uid, ids, context=context): - contract_ids = obj_contract.search(cr, uid, [('employee_id', '=', emp.id)], order='date_start', context=context) - if contract_ids: - res[emp.id] = contract_ids[-1:][0] - else: - res[emp.id] = False - return res - - def _contracts_count(self, cr, uid, ids, field_name, arg, context=None): - Contract = self.pool['hr.contract'] - return { - employee_id: Contract.search_count(cr, SUPERUSER_ID, [('employee_id', '=', employee_id)], context=context) - for employee_id in ids - } - - _columns = { - 'manager': fields.boolean('Is a Manager'), - 'medic_exam': fields.date('Medical Examination Date'), - 'place_of_birth': fields.char('Place of Birth'), - 'children': fields.integer('Number of Children'), - 'vehicle': fields.char('Company Vehicle'), - 'vehicle_distance': fields.integer('Home-Work Dist.', help="In kilometers"), - 'contract_ids': fields.one2many('hr.contract', 'employee_id', 'Contracts'), - 'contract_id': fields.function(_get_latest_contract, string='Current Contract', type='many2one', relation="hr.contract", help='Latest contract of the employee'), - 'contracts_count': fields.function(_contracts_count, type='integer', string='Contracts'), - } - - -class hr_contract_type(osv.osv): + manager = fields.Boolean(string='Is a Manager') + medic_exam = fields.Date(string='Medical Examination Date') + place_of_birth = fields.Char('Place of Birth') + children = fields.Integer(string='Number of Children') + vehicle = fields.Char(string='Company Vehicle') + vehicle_distance = fields.Integer(string='Home-Work Dist.', help="In kilometers") + contract_ids = fields.One2many('hr.contract', 'employee_id', string='Contracts') + contract_id = fields.Many2one('hr.contract', compute='_compute_contract_id', string='Current Contract', help='Latest contract of the employee') + contracts_count = fields.Integer(compute='_compute_contracts_count', string='Contracts') + + def _compute_contract_id(self): + """ get the lastest contract """ + Contract = self.env['hr.contract'] + for employee in self: + employee.contract_id = Contract.search([('employee_id', '=', employee.id)], order='date_start', limit=1) + + def _compute_contracts_count(self): + # read_group as sudo, since contract count is displayed on form view + contract_data = self.env['hr.contract'].sudo().read_group([('employee_id', 'in', self.ids)], ['employee_id'], ['employee_id']) + result = dict((data['employee_id'][0], data['employee_id_count']) for data in contract_data) + for employee in self: + employee.contracts_count = result.get(employee.id, 0) + + +class ContractType(models.Model): + _name = 'hr.contract.type' _description = 'Contract Type' _order = 'sequence, id' - _columns = { - 'name': fields.char('Contract Type', required=True), - 'sequence': fields.integer('Sequence', help="Gives the sequence when displaying a list of Contract."), - } - defaults = { - 'sequence': 10 - } + name = fields.Char(string='Contract Type', required=True) + sequence = fields.Integer(help="Gives the sequence when displaying a list of Contract.", default=10) + +class Contract(models.Model): -class hr_contract(osv.osv): _name = 'hr.contract' _description = 'Contract' _inherit = ['mail.thread', 'ir.needaction_mixin'] - _columns = { - 'name': fields.char('Contract Reference', required=True), - 'employee_id': fields.many2one('hr.employee', "Employee", required=True), - 'department_id': fields.many2one('hr.department', string="Department"), - 'type_id': fields.many2one('hr.contract.type', "Contract Type", required=True), - 'job_id': fields.many2one('hr.job', 'Job Title'), - 'date_start': fields.date('Start Date', required=True), - 'date_end': fields.date('End Date'), - 'trial_date_start': fields.date('Trial Start Date'), - 'trial_date_end': fields.date('Trial End Date'), - 'working_hours': fields.many2one('resource.calendar', 'Working Schedule'), - 'wage': fields.float('Wage', digits=(16, 2), required=True, help="Basic Salary of the employee"), - 'advantages': fields.text('Advantages'), - 'notes': fields.text('Notes'), - 'permit_no': fields.char('Work Permit No', required=False, readonly=False), - 'visa_no': fields.char('Visa No', required=False, readonly=False), - 'visa_expire': fields.date('Visa Expire Date'), - 'state': fields.selection( - [('draft', 'New'), ('open', 'Running'), ('pending', 'To Renew'), ('close', 'Expired')], - string='Status', track_visibility='onchange', - help='Status of the contract'), - } - - def _get_type(self, cr, uid, context=None): - type_ids = self.pool.get('hr.contract.type').search(cr, uid, [], limit=1) - return type_ids and type_ids[0] or False - - _defaults = { - 'date_start': lambda *a: time.strftime("%Y-%m-%d"), - 'type_id': _get_type, - 'state': 'draft', - } - - def onchange_employee_id(self, cr, uid, ids, employee_id, context=None): - if not employee_id: - return {'value': {'job_id': False, 'department_id': False}} - emp_obj = self.pool.get('hr.employee').browse(cr, uid, employee_id, context=context) - job_id = dept_id = False - if emp_obj.job_id: - job_id = emp_obj.job_id.id - if emp_obj.department_id: - dept_id = emp_obj.department_id.id - return {'value': {'job_id': job_id, 'department_id': dept_id}} - - def _check_dates(self, cr, uid, ids, context=None): - for contract in self.read(cr, uid, ids, ['date_start', 'date_end'], context=context): - if contract['date_start'] and contract['date_end'] and contract['date_start'] > contract['date_end']: - return False - return True - - _constraints = [ - (_check_dates, 'Error! Contract start-date must be less than contract end-date.', ['date_start', 'date_end']) - ] - - def set_as_pending(self, cr, uid, ids, context=None): - return self.write(cr, uid, ids, {'state': 'pending'}, context=context) - - def set_as_close(self, cr, uid, ids, context=None): - return self.write(cr, uid, ids, {'state': 'close'}, context=context) - - def _track_subtype(self, cr, uid, ids, init_values, context=None): - record = self.browse(cr, uid, ids[0], context=context) - if 'state' in init_values and record.state == 'pending': + name = fields.Char('Contract Reference', required=True) + employee_id = fields.Many2one('hr.employee', string='Employee', required=True) + department_id = fields.Many2one('hr.department', string="Department") + type_id = fields.Many2one('hr.contract.type', string="Contract Type", required=True, default=lambda self: self.env['hr.contract.type'].search([], limit=1)) + job_id = fields.Many2one('hr.job', string='Job Title') + date_start = fields.Date('Start Date', required=True, default=fields.Date.today) + date_end = fields.Date('End Date') + trial_date_start = fields.Date('Trial Start Date') + trial_date_end = fields.Date('Trial End Date') + working_hours = fields.Many2one('resource.calendar', string='Working Schedule') + wage = fields.Float('Wage', digits=(16, 2), required=True, help="Basic Salary of the employee") + advantages = fields.Text('Advantages') + notes = fields.Text('Notes') + permit_no = fields.Char('Work Permit No') + visa_no = fields.Char('Visa No') + visa_expire = fields.Date('Visa Expire Date') + state = fields.Selection([ + ('draft', 'New'), + ('open', 'Running'), + ('pending', 'To Renew'), + ('close', 'Expired'), + ], string='Status', track_visibility='onchange', help='Status of the contract', default='draft') + + @api.onchange('employee_id') + def _onchange_employee_id(self): + if self.employee_id: + self.job_id = self.employee_id.job_id + self.department_id = self.employee_id.department_id + + @api.constrains('date_start', 'date_end') + def _check_dates(self): + if self.filtered(lambda c: c.date_end and c.date_start > c.date_end): + raise ValidationError(_('Contract start date must be less than contract end date.')) + + @api.multi + def set_as_pending(self): + return self.write({'state': 'pending'}) + + @api.multi + def set_as_close(self): + return self.write({'state': 'close'}) + + @api.multi + def _track_subtype(self, init_values): + self.ensure_one() + if 'state' in init_values and self.state == 'pending': return 'hr_contract.mt_contract_pending' - elif 'state' in init_values and record.state == 'close': + elif 'state' in init_values and self.state == 'close': return 'hr_contract.mt_contract_close' - return super(hr_contract, self)._track_subtype(cr, uid, ids, init_values, context=context) + return super(Contract, self)._track_subtype(init_values) diff --git a/addons/hr_contract/views/base_action_rule_views.xml b/addons/hr_contract/views/base_action_rule_views.xml index c37628b8c37..6f9a2f3414e 100644 --- a/addons/hr_contract/views/base_action_rule_views.xml +++ b/addons/hr_contract/views/base_action_rule_views.xml @@ -1,7 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<openerp> - <data> - +<odoo> <record model="ir.ui.view" id="view_base_action_rule_form_resource"> <field name="name">base.action.rule.form</field> <field name="model">base.action.rule</field> @@ -14,6 +12,4 @@ </xpath> </field> </record> - - </data> -</openerp> +</odoo> diff --git a/addons/hr_contract/views/hr_contract_views.xml b/addons/hr_contract/views/hr_contract_views.xml index 541f4a05854..20ab4adf15b 100644 --- a/addons/hr_contract/views/hr_contract_views.xml +++ b/addons/hr_contract/views/hr_contract_views.xml @@ -1,33 +1,29 @@ <?xml version="1.0" encoding="utf-8"?> -<openerp> - <data> - - -<!-- Contracts Button on Employee Form --> +<odoo> <record id="act_hr_employee_2_hr_contract" model="ir.actions.act_window"> + <field name="name">Contracts</field> <field name="res_model">hr.contract</field> <field name="view_type">form</field> - <field name="name">Contracts</field> <field name="view_mode">tree,form</field> <field name="context">{'search_default_employee_id': [active_id], 'default_employee_id': active_id}</field> </record> - + <record id="hr_hr_employee_view_form2" model="ir.ui.view"> <field name="name">hr.hr.employee.view.form2</field> <field name="model">hr.employee</field> <field name="inherit_id" ref="hr.view_employee_form"/> <field name="arch" type="xml"> <data> - <div name="button_box" position="inside"> - <button name="%(act_hr_employee_2_hr_contract)d" - class="oe_stat_button" - icon="fa-book" + <xpath expr="//div[@name='button_box']" position="inside"> + <button name="%(act_hr_employee_2_hr_contract)d" + class="oe_stat_button" + icon="fabook" type="action" groups="base.group_hr_manager"> <field name="contracts_count" widget="statinfo" string="Contracts"/> </button> - </div> + </xpath> <xpath expr="//field[@name='coach_id']" position="after"> <field name="manager" groups="base.group_no_one"/> </xpath> @@ -38,21 +34,21 @@ <field name="vehicle_distance"/> </group> </xpath> - <field name="marital" position="after"> + <xpath expr="//field[@name='marital']" position="after"> <field name="children"/> - </field> - <field name="birthday" position="after"> + </xpath> + <xpath expr="//field[@name='birthday']" position="after"> <field name="place_of_birth"/> - </field> - <field name="bank_account_id" position="replace"> + </xpath> + <xpath expr="//field[@name='bank_account_id']" position="replace"> <field name="bank_account_id" context="{'display_partner':True}"/> - </field> + </xpath> </data> </field> </record> <record id="hr_contract_view_search" model="ir.ui.view"> - <field name="name">hr.contract.view.search</field> + <field name="name">hr.contract.search</field> <field name="model">hr.contract</field> <field name="arch" type="xml"> <search string="Search Contract"> @@ -67,7 +63,7 @@ <separator /> <filter string="Current Employee" name="current_employee" domain="[('employee_id.active','=',True)]"/> <separator/> - <filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/> + <filter string="Important Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/> <group expand="0" string="Group By"> <filter string="Employee" domain="[]" context="{'group_by':'employee_id'}"/> <filter string="Job" domain="[]" context="{'group_by':'job_id'}"/> @@ -78,7 +74,7 @@ </record> <record id="hr_contract_view_form" model="ir.ui.view"> - <field name="name">hr.contract.view.form</field> + <field name="name">hr.contract.form</field> <field name="model">hr.contract</field> <field name="arch" type="xml"> <form string="Current Contract"> @@ -94,7 +90,7 @@ </div> <group> <group> - <field name="employee_id" on_change="onchange_employee_id(employee_id)"/> + <field name="employee_id"/> <field name="job_id"/> </group> <group> @@ -142,7 +138,7 @@ </record> <record id="hr_contract_view_tree" model="ir.ui.view"> - <field name="name">hr.contract.view.tree</field> + <field name="name">hr.contract.tree</field> <field name="model">hr.contract</field> <field name="arch" type="xml"> <tree string="Contracts" decoration-bf="message_needaction == True"> @@ -167,10 +163,15 @@ <field name="domain">[]</field> <field name="context">{'search_default_current':1}</field> <field name="search_view_id" ref="hr_contract_view_search"/> + <field name="help" type="html"> + <p class="oe_view_nocontent_create"> + Click here to create new contracts. + </p> + </field> </record> <record id="hr_contract_type_view_form" model="ir.ui.view"> - <field name="name">hr.contract.type.view.form</field> + <field name="name">hr.contract.type.form</field> <field name="model">hr.contract.type</field> <field name="arch" type="xml"> <form string="Contract Type"> @@ -181,23 +182,24 @@ </field> </record> - <record id="hr_contract_type_view_tree" model="ir.ui.view"> - <field name="name">hr.contract.type.view.tree</field> + <record id="hr_contract_type_view_tree" model="ir.ui.view"> + <field name="name">hr.contract.type.tree</field> <field name="model">hr.contract.type</field> <field name="arch" type="xml"> <tree string="Contract Type"> + <field name="sequence" widget="handle"/> <field colspan="4" name="name"/> </tree> </field> </record> <record id="hr_contract_type_view_search" model="ir.ui.view"> - <field name="name">hr.contract.type.view.search</field> + <field name="name">hr.contract.type.search</field> <field name="model">hr.contract.type</field> <field name="arch" type="xml"> <search string="Search Contract Type"> <field name="name" string="Contract Type"/> - <field name="sequence" widget="handle" string="Sequence"/> + <field name="sequence" string="Sequence"/> </search> </field> </record> @@ -210,8 +212,19 @@ <field name="search_view_id" ref="hr_contract_type_view_search"/> </record> - <menuitem action="action_hr_contract_type" id="hr_menu_contract_type" parent="hr.menu_human_resources_configuration" sequence="3" groups="base.group_no_one"/> - <menuitem action="action_hr_contract" id="hr_menu_contract" parent="hr.menu_hr_root" name="Contracts" sequence="4" groups="base.group_hr_manager"/> + <menuitem + id="hr_menu_contract_type" + action="action_hr_contract_type" + parent="hr.menu_human_resources_configuration" + sequence="3" + groups="base.group_no_one"/> + + <menuitem + id="hr_menu_contract" + name="Contracts" + action="action_hr_contract" + parent="hr.menu_hr_root" + sequence="4" + groups="base.group_hr_manager"/> - </data> -</openerp> +</odoo> |
