@ -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 <https://www.cybrosys.com> |
|||
|
|||
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. |
@ -0,0 +1,2 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from . import models |
@ -0,0 +1,45 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################### |
|||
# A part of Open HRMS Project <https://www.openhrms.com> |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
|||
# Author: Sreejith P (<https://www.cybrosys.com>) |
|||
# |
|||
# 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 <https://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################### |
|||
{ |
|||
'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', |
|||
} |
@ -0,0 +1,6 @@ |
|||
## Module hr_employee_transfer |
|||
|
|||
#### 21.04.2018 |
|||
#### Version 11.0.1.0.0 |
|||
##### ADD |
|||
- Initial commit for OpenHrms Project |
@ -0,0 +1,4 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from . import employee_transfer |
|||
from . import hr_contract |
|||
from . import res_company |
@ -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 |
@ -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 |
@ -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') |
@ -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 |
@ -0,0 +1,18 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<record id="employee_rule" model="ir.rule"> |
|||
<field name="name">Employee Rule</field> |
|||
<field name="model_id" ref="hr.model_hr_employee"/> |
|||
<field name="global" eval="True"/> |
|||
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field> |
|||
</record> |
|||
|
|||
<record id="employee_contract_rule" model="ir.rule"> |
|||
<field name="name">Contract Rules</field> |
|||
<field name="model_id" ref="hr_contract.model_hr_contract"/> |
|||
<field name="global" eval="True"/> |
|||
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field> |
|||
</record> |
|||
</data> |
|||
</odoo> |
|
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 221 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 33 KiB |
@ -0,0 +1,111 @@ |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan">Open HRMS</h2> |
|||
<h3 class="oe_slogan">Most advanced open source HR management software</h3> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced oe_mt32"> |
|||
<div class="oe_span"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<a href="https://www.openhrms.com/#request-demo"> |
|||
<img src="HRMS-BUTTON.png"> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan">Branch Transfer</h2> |
|||
<h3 class="oe_slogan">Employee transfer between branches</h3> |
|||
<h4 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a> </h4> |
|||
</div> |
|||
<div class="oe_row oe_spaced" style="padding-left:65px;"> |
|||
<h4>Features:</h4> |
|||
<div> |
|||
<span style="color:green;"> ☑ </span> Transfer Employee between branches.<br/> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container "> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_picture"> |
|||
<h3 class="oe_slogan">Overview</h3> |
|||
<p class="oe_mt32 text-justify" style="text-align: center;"> |
|||
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<br/> |
|||
Make sure that you are multi company is enabled. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h4 class="oe_slogan">Employee Transfer</h4> |
|||
<div class="oe_span12"> |
|||
<p class='oe_mt32'> |
|||
☛ Create a Employee Transfer.<br> |
|||
☛ Select the Transfer Company.<br> |
|||
☛ Click on the sent button.<br> |
|||
</p> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="create_a_transfer.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container "> |
|||
<div class="oe_row oe_spaced"> |
|||
<h4 class="oe_slogan">Contract</h4> |
|||
<div class="oe_span12"> |
|||
<p class='oe_mt32'> |
|||
☛ Create new contract.<br> |
|||
<p> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="create_contract.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<div class="row section-content"> |
|||
<div class="col-md-6 img-content"> |
|||
<h3>Our Odoo Services</h3> |
|||
|
|||
|
|||
</div> <div class="bc-span col-md-12"><div class="inner-span"><a target="_blank" href="https://www.openhrms.com"><img class="img-border img-responsive thumbnail" src="cybro-service.png"></a></div></div> |
|||
|
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
<section class="oe_container"> |
|||
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> |
|||
<div class="oe_slogan" style="margin-top:10px !important;"> |
|||
<div> |
|||
<a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="https://www.cybrosys.com/contact/" target="_blank"><i |
|||
class="fa fa-phone"></i> Contact Us </a> |
|||
|
|||
<a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="https://www.odoo.com/apps/modules/browse?search=open+hrms" target="_blank"><i |
|||
class="fa fa-suitcase"></i> Other Open HRMS Addons </a> |
|||
|
|||
<a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="https://www.cybrosys.com/odoo-customization-and-installation/" target="_blank"><i |
|||
class="fa fa-wrench"></i> Request Customization </a> |
|||
|
|||
</div> |
|||
<br> |
|||
<a href="https://www.cybrosys.com/" target="_blank"> |
|||
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> |
|||
</a> |
|||
</div> |
|||
</section> |
@ -0,0 +1,80 @@ |
|||
<?xml version="1.0" encoding="utf-8" ?> |
|||
<odoo> |
|||
<record id="employee_transfer" model="ir.ui.view"> |
|||
<field name="name">Employee Transfer</field> |
|||
<field name="model">employee.transfer</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Employee Transfer"> |
|||
<header> |
|||
<button name="transfer" string="Transfer" class="oe_highlight" type="object" states="draft" |
|||
groups="hr.group_hr_manager"/> |
|||
<button name="receive_employee" string="Receive" class="oe_highlight" type="object" |
|||
groups="hr.group_hr_manager" states="transfer"/> |
|||
<button name="cancel_transfer" string="Cancel" type="object" |
|||
attrs="{'invisible':[('state','in',('draft', 'cancel'))]}" groups="hr.group_hr_manager"/> |
|||
<field name="state" widget="statusbar" statusbar_visible="draft,transfer,done" /> |
|||
</header> |
|||
<sheet> |
|||
<div class="oe_title oe_left"> |
|||
<h2> |
|||
<field name="name" class="oe_inline" placeholder="Name"/> |
|||
</h2> |
|||
</div> |
|||
<group> |
|||
<group> |
|||
<field name="employee_id" options="{'no_create': True}" attrs="{'readonly' : [('state', '!=', 'draft')] }"/> |
|||
<field name="date" attrs="{'readonly' : [('state', '!=', 'draft')] }"/> |
|||
<field name="branch" groups="base.group_multi_company" options="{'no_create': True}" |
|||
attrs="{'readonly' : [('state', '!=', 'draft')] }"/> |
|||
</group> |
|||
<group> |
|||
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/> |
|||
<field name="responsible" options="{'no_create': True}"/> |
|||
</group> |
|||
</group> |
|||
<notebook colspan="4"> |
|||
<page string="Internal Notes" > |
|||
<field name="note"/> |
|||
</page> |
|||
</notebook> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
<record id="employee_transfer_tree" model="ir.ui.view"> |
|||
<field name="name">Employee Transfer Tree</field> |
|||
<field name="model">employee.transfer</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Employee Transfer" decoration-info="state == 'draft'" decoration-muted="state in ('done','cancel')"> |
|||
<field name="name"/> |
|||
<field name="employee_id"/> |
|||
<field name="date"/> |
|||
<field name="branch" groups="base.group_multi_company"/> |
|||
<!--<field name="amount_total" sum="Amount total" widget="monetary"/>--> |
|||
<field name="company_id" groups="base.group_multi_company"/> |
|||
<field name="state"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_employee_transfer" model="ir.actions.act_window"> |
|||
<field name="name">Employee Transfer</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">employee.transfer</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">tree,form</field> |
|||
<field name="view_id" eval="False"/> |
|||
<field name="domain">[]</field> |
|||
<field name="help" type="html"> |
|||
<p class="oe_view_nocontent_create"> |
|||
Click to create a new Transfer. |
|||
</p><p> |
|||
Use this menu to browse previous transfer. To record new |
|||
transfer, you may use the create button. |
|||
</p> |
|||
</field> |
|||
</record> |
|||
<!--<menuitem id="menu_transfer_root" name="Employee Transfer" parent="hr.menu_hr_root" sequence="2" groups="hr.group_hr_manager"/>--> |
|||
<menuitem id="menu_employee_transfer" name="Employee Transfer" parent="hr_employee_updation.menu_hr_management" sequence="3" |
|||
action="action_employee_transfer" groups="hr.group_hr_manager"/> |
|||
</odoo> |