diff --git a/hr_employee_transfer/README.rst b/hr_employee_transfer/README.rst new file mode 100644 index 000000000..df1c26e7b --- /dev/null +++ b/hr_employee_transfer/README.rst @@ -0,0 +1,39 @@ +Open HRMS Employee Transfer v11 +=============================== + +Employee transfer between branches. + +Depends +======= +[hr] addon Odoo + +Tech +==== +* [Python] - Models +* [XML] - Odoo views + +Installation +============ +- www.odoo.com/documentation/11.0/setup/install.html +- Install our custom addon + + +Bug Tracker +=========== +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Credits +======= +* Cybrosys Techno Solutions + +Author +------ + +Developer: Sreejith P @ cybrosys, sreejith@cybrosys.in + +Maintainer +---------- + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit https://www.cybrosys.com. diff --git a/hr_employee_transfer/__init__.py b/hr_employee_transfer/__init__.py new file mode 100644 index 000000000..a0fdc10fe --- /dev/null +++ b/hr_employee_transfer/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import models diff --git a/hr_employee_transfer/__manifest__.py b/hr_employee_transfer/__manifest__.py new file mode 100644 index 000000000..b5e8413cd --- /dev/null +++ b/hr_employee_transfer/__manifest__.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +################################################################################### +# A part of Open HRMS Project +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2018-TODAY Cybrosys Technologies (). +# Author: Sreejith P () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### +{ + 'name': 'Open HRMS Branch Transfer', + 'version': '11.0.1.0.0', + 'summary': 'Employee transfer between branches', + 'category': 'Generic Modules/Human Resources', + 'author': 'Cybrosys Techno solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'website': 'https://www.openhrms.com', + 'depends': ['base', + 'hr_employee_updation' + ], + 'data': [ + 'views/employee_transfer.xml', + 'security/ir.model.access.csv', + 'security/branch_security.xml', + ], + 'images': ['static/description/banner.jpg'], + 'installable': True, + 'application': True, + 'auto_install': False, + 'license': 'AGPL-3', +} diff --git a/hr_employee_transfer/docs/RELEASE_NOTES.md b/hr_employee_transfer/docs/RELEASE_NOTES.md new file mode 100644 index 000000000..6d0031a92 --- /dev/null +++ b/hr_employee_transfer/docs/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module hr_employee_transfer + +#### 21.04.2018 +#### Version 11.0.1.0.0 +##### ADD +- Initial commit for OpenHrms Project diff --git a/hr_employee_transfer/models/__init__.py b/hr_employee_transfer/models/__init__.py new file mode 100644 index 000000000..3adb57604 --- /dev/null +++ b/hr_employee_transfer/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +from . import employee_transfer +from . import hr_contract +from . import res_company diff --git a/hr_employee_transfer/models/employee_transfer.py b/hr_employee_transfer/models/employee_transfer.py new file mode 100644 index 000000000..5772a3907 --- /dev/null +++ b/hr_employee_transfer/models/employee_transfer.py @@ -0,0 +1,106 @@ +# -*- coding: utf-8 -*- +from datetime import date +from odoo import models, fields, api, _ +from odoo.tools import DEFAULT_SERVER_DATE_FORMAT +from odoo.exceptions import Warning + + +class EmployeeTransfer(models.Model): + _name = 'employee.transfer' + _description = 'Employee Transfer' + _order = "id desc" + + def _default_employee(self): + emp_ids = self.env['hr.employee'].search([('user_id', '=', self.env.uid)]) + return emp_ids and emp_ids[0] or False + + name = fields.Char(string='Name', help='Give a name to the Transfer', copy=False, default="/", readonly=True) + employee_id = fields.Many2one('hr.employee', string='Employee', required=True, + help='Select the employee you are going to transfer') + date = fields.Date(string='Date', default=fields.Date.today()) + branch = fields.Many2one('transfer.company', string='Transfer Branch', requried=True, copy=False, + help='The Branch/Company which the employee is transferred') + state = fields.Selection( + [('draft', 'New'), ('cancel', 'Cancelled'), ('transfer', 'Transferred'), ('done', 'Done')], + string='Status', readonly=True, copy=False, default='draft', + help=" * The 'Draft' status is used when a transfer is created and unconfirmed Transfer.\n" + " * The 'Transferred' status is used when the user confirm the transfer. It stays in the open status till the other branch/company receive the employee.\n" + " * The 'Done' status is set automatically when the employee is Joined/Received.\n" + " * The 'Cancelled' status is used when user cancel Transfer." + ) + sequence_number = fields.Integer(string='Sequence Number', help='A unique sequence number for the Transfer', + default=1, copy=False) + company_id = fields.Many2one('res.company', string='Company', required=True, + related='employee_id.company_id', store=True) + note = fields.Text(string='Internal Notes') + responsible = fields.Many2one('hr.employee', string='Responsible', default=_default_employee, readonly=True) + + @api.one + def transfer(self): + obj_emp = self.env['hr.employee'].browse(self.employee_id.id) + emp = {} + if not self.branch: + raise Warning(_( + 'You should select the transfer branch/company.')) + for this in self: + emp = { + 'name': self.employee_id.name, + 'company_id': self.branch.company_id, + + } + new_emp = self.env['hr.employee'].create(emp) + if obj_emp.address_home_id: + obj_emp.address_home_id.active = False + for obj_contract in self.env['hr.contract'].search([('employee_id', '=', self.employee_id.id)]): + if obj_contract.date_end: + continue + if not obj_contract.date_end: + obj_contract.write({'date_end': date.today().strftime(DEFAULT_SERVER_DATE_FORMAT)}) + self.wage = obj_contract.wage + self.state = 'transfer' + self.employee_id = new_emp + obj_emp.write({'active': False}) + + @api.multi + def receive_employee(self): + for this in self: + if this._context is None: + context = {} + partner = {} + for i in this: + partner = { + 'name': i.employee_id.name, + 'company_id': i.branch.company_id, + } + partner_created = self.env['res.partner'].create(partner) + self.env['hr.employee'].browse(this.employee_id.id).write({'address_home_id': partner_created.id}) + return { + 'name': _('Contract'), + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'hr.contract', + 'type': 'ir.actions.act_window', + 'target': 'current', + 'context': {'default_employee_id': this.employee_id.id, + 'default_date_start': this.date, + 'default_emp_transfer': this.id, + }, + } + + @api.one + def cancel_transfer(self): + obj_emp = self.env['hr.employee'].browse(self.employee_id.id) + emp = { + 'name': self.employee_id.name, + 'company_id': self.company_id.id, + } + obj_emp.write(emp) + for obj_contract in self.env['hr.contract'].search([('employee_id', '=', self.employee_id.id)]): + obj_contract.unlink() + self.state = 'cancel' + + @api.model + def create(self, vals): + vals['name'] = "Transfer Of " + self.env['hr.employee'].browse(vals['employee_id']).name + res = super(EmployeeTransfer, self).create(vals) + return res diff --git a/hr_employee_transfer/models/hr_contract.py b/hr_employee_transfer/models/hr_contract.py new file mode 100644 index 000000000..87fc8a0d2 --- /dev/null +++ b/hr_employee_transfer/models/hr_contract.py @@ -0,0 +1,16 @@ +from odoo import models, fields, api + + +class HrContract(models.Model): + _inherit = 'hr.contract' + + company_id = fields.Many2one('res.company', 'Company', default=lambda self: self.env.user.company_id) + from_transfer = fields.Boolean(string='Transferred', default=False) + emp_transfer = fields.Many2one('employee.transfer', string='Transferred Employee') + + @api.model + def create(self, vals): + res = super(HrContract, self).create(vals) + if res.emp_transfer: + self.env['employee.transfer'].browse(res.emp_transfer.id).write({'state': 'done'}) + return res diff --git a/hr_employee_transfer/models/hr_employee.py b/hr_employee_transfer/models/hr_employee.py new file mode 100644 index 000000000..42df9efdd --- /dev/null +++ b/hr_employee_transfer/models/hr_employee.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from odoo import models, fields, api + + +class HrContract(models.Model): + _inherit = 'hr.employee' + + transfer_detail = fields.One2many('transfer.detail', 'employee_id', string='Transfer Details') + + +class TransferDetails(models.Model): + + _name = 'transfer.detail' + _description = 'Transfer Details' + + employee_id = fields.Many2one('hr.employee', string='Employee') + date = fields.Date(string='Date', copy=False) + company_id = fields.Many2one('res.company', string='Company') + pre_company = fields.Many2one('res.company', string='Previous Company') diff --git a/hr_employee_transfer/models/res_company.py b/hr_employee_transfer/models/res_company.py new file mode 100644 index 000000000..77c228a24 --- /dev/null +++ b/hr_employee_transfer/models/res_company.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +from odoo import models, fields, api + + +class EmployeeTransfer(models.Model): + _name = 'transfer.company' + _description = 'Transfer Company' + _order = "id desc" + + name = fields.Char(string='Name', copy=False, ondelete='cascade') + company_id = fields.Integer(string='Company', help='Company name same as res.company', copy=False) + + +class ResCompany(models.Model): + _inherit = 'res.company' + + def init(self): + obj_company = self.env['res.company'].search([]) + + for company in obj_company: + obj_branch = self.env['transfer.company'].search([('company_id', '=', company.id)]) + com = {} + if not obj_branch: + com = { + 'name': company.name, + 'company_id': company.id, + } + obj = self.env['transfer.company'].create(com) + + @api.model + def create(self, res): + result = super(ResCompany, self).create(res) + com = {} + com = { + 'name': result.name, + 'company_id': result.id, + + } + self.env['transfer.company'].create(com) + return result diff --git a/hr_employee_transfer/security/branch_security.xml b/hr_employee_transfer/security/branch_security.xml new file mode 100644 index 000000000..f22cc5870 --- /dev/null +++ b/hr_employee_transfer/security/branch_security.xml @@ -0,0 +1,18 @@ + + + + + Employee Rule + + + ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + + + Contract Rules + + + ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + + diff --git a/hr_employee_transfer/security/ir.model.access.csv b/hr_employee_transfer/security/ir.model.access.csv new file mode 100644 index 000000000..beea229f4 --- /dev/null +++ b/hr_employee_transfer/security/ir.model.access.csv @@ -0,0 +1,5 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_employee_transfer,employee.transfer,model_employee_transfer,hr.group_hr_user,1,1,0,0 +access_employee_transfer_manager,employee.transfer.manager,model_employee_transfer,hr.group_hr_manager,1,1,1,0 +access_employee_transfer_company,employee.company.manager,base.model_res_company,hr.group_hr_manager,1,1,1,0 +access_transfer_company,transfer.company.manager,model_transfer_company,hr.group_hr_manager,1,1,1,0 diff --git a/hr_employee_transfer/static/description/HRMS-BUTTON.png b/hr_employee_transfer/static/description/HRMS-BUTTON.png new file mode 100644 index 000000000..0f1b65bea Binary files /dev/null and b/hr_employee_transfer/static/description/HRMS-BUTTON.png differ diff --git a/hr_employee_transfer/static/description/banner.jpg b/hr_employee_transfer/static/description/banner.jpg new file mode 100644 index 000000000..1859d8b14 Binary files /dev/null and b/hr_employee_transfer/static/description/banner.jpg differ diff --git a/hr_employee_transfer/static/description/create_a_transfer.png b/hr_employee_transfer/static/description/create_a_transfer.png new file mode 100644 index 000000000..ed7e55916 Binary files /dev/null and b/hr_employee_transfer/static/description/create_a_transfer.png differ diff --git a/hr_employee_transfer/static/description/create_contract.png b/hr_employee_transfer/static/description/create_contract.png new file mode 100644 index 000000000..84717bcd2 Binary files /dev/null and b/hr_employee_transfer/static/description/create_contract.png differ diff --git a/hr_employee_transfer/static/description/cybro-service.png b/hr_employee_transfer/static/description/cybro-service.png new file mode 100644 index 000000000..252929a86 Binary files /dev/null and b/hr_employee_transfer/static/description/cybro-service.png differ diff --git a/hr_employee_transfer/static/description/cybro_logo.png b/hr_employee_transfer/static/description/cybro_logo.png new file mode 100644 index 000000000..bb309114c Binary files /dev/null and b/hr_employee_transfer/static/description/cybro_logo.png differ diff --git a/hr_employee_transfer/static/description/icon.png b/hr_employee_transfer/static/description/icon.png new file mode 100644 index 000000000..7fec29119 Binary files /dev/null and b/hr_employee_transfer/static/description/icon.png differ diff --git a/hr_employee_transfer/static/description/index.html b/hr_employee_transfer/static/description/index.html new file mode 100644 index 000000000..2b1e73c71 --- /dev/null +++ b/hr_employee_transfer/static/description/index.html @@ -0,0 +1,111 @@ + +
+
+

Open HRMS

+

Most advanced open source HR management software

+
+
+
+
+
+
+ + + +
+
+
+
+
+
+

Branch Transfer

+

Employee transfer between branches

+

Cybrosys Technologies

+
+
+

Features:

+
+ Transfer Employee between branches.
+
+
+
+ +
+
+
+

Overview

+

+ Transferring employees between company is a basic thing in a organization. Now Odoo lacks a provision for employee transfer. This module gives a basic structure for employee transfer
+ Make sure that you are multi company is enabled. +

+
+
+
+ +
+
+

Employee Transfer

+
+

+ ☛ Create a Employee Transfer.
+ ☛ Select the Transfer Company.
+ ☛ Click on the sent button.
+

+
+ +
+
+
+
+ +
+
+

Contract

+
+

+ ☛ Create new contract.
+

+

+ +
+
+
+
+ +
+
+

Our Odoo Services

+ + +
+ +
+ + + +
+

Need Any Help?

+ +
diff --git a/hr_employee_transfer/views/employee_transfer.xml b/hr_employee_transfer/views/employee_transfer.xml new file mode 100644 index 000000000..a255eb507 --- /dev/null +++ b/hr_employee_transfer/views/employee_transfer.xml @@ -0,0 +1,80 @@ + + + + Employee Transfer + employee.transfer + +
+
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + +
+
+
+
+ + Employee Transfer Tree + employee.transfer + + + + + + + + + + + + + + + Employee Transfer + ir.actions.act_window + employee.transfer + form + tree,form + + [] + +

+ Click to create a new Transfer. +

+ Use this menu to browse previous transfer. To record new + transfer, you may use the create button. +

+
+
+ + +