| @ -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> | |||