Browse Source

[MVD]Moved To OpenHRMS Repo

pull/82/head
Sreejith P 7 years ago
parent
commit
cca6d57740
  1. 47
      hr_custody/README.rst
  2. 24
      hr_custody/__init__.py
  3. 50
      hr_custody/__manifest__.py
  4. 6
      hr_custody/doc/RELEASE_NOTES.md
  5. 25
      hr_custody/models/__init__.py
  6. 208
      hr_custody/models/custody.py
  7. 118
      hr_custody/models/hr_employee.py
  8. 48
      hr_custody/models/wizard_reason.py
  9. 23
      hr_custody/reports/__init__.py
  10. 84
      hr_custody/reports/custody_report.py
  11. 27
      hr_custody/reports/custody_report.xml
  12. 16
      hr_custody/security/custody_security.xml
  13. 13
      hr_custody/security/ir.model.access.csv
  14. BIN
      hr_custody/static/description/HRMS-BUTTON.png
  15. BIN
      hr_custody/static/description/banner.jpg
  16. BIN
      hr_custody/static/description/custody_property.png
  17. BIN
      hr_custody/static/description/custody_request.png
  18. BIN
      hr_custody/static/description/cybro-service.png
  19. BIN
      hr_custody/static/description/cybro_logo.png
  20. BIN
      hr_custody/static/description/icon.png
  21. 111
      hr_custody/static/description/index.html
  22. 222
      hr_custody/views/custody_view.xml
  23. 15
      hr_custody/views/hr_custody_notification.xml
  24. 20
      hr_custody/views/hr_employee_view.xml
  25. 24
      hr_custody/views/notification_mail.xml
  26. 30
      hr_custody/views/wizard_reason_view.xml
  27. 43
      hr_employee_shift/README.rst
  28. 6
      hr_employee_shift/RELEASE_NOTES.md
  29. 23
      hr_employee_shift/__init__.py
  30. 46
      hr_employee_shift/__manifest__.py
  31. 23
      hr_employee_shift/models/__init__.py
  32. 75
      hr_employee_shift/models/hr_employee_contract.py
  33. 41
      hr_employee_shift/models/hr_employee_shift.py
  34. 101
      hr_employee_shift/models/hr_generate_shift.py
  35. 109
      hr_employee_shift/models/hr_shift_payroll.py
  36. 16
      hr_employee_shift/security/hr_employee_shift_security.xml
  37. 3
      hr_employee_shift/security/ir.model.access.csv
  38. BIN
      hr_employee_shift/static/description/HRMS-BUTTON.png
  39. BIN
      hr_employee_shift/static/description/banner.jpg
  40. BIN
      hr_employee_shift/static/description/contract1.png
  41. BIN
      hr_employee_shift/static/description/create_shift.png
  42. BIN
      hr_employee_shift/static/description/cybro-service.png
  43. BIN
      hr_employee_shift/static/description/cybro_logo.png
  44. BIN
      hr_employee_shift/static/description/generate_schedule.png
  45. BIN
      hr_employee_shift/static/description/icon.png
  46. 129
      hr_employee_shift/static/description/index.html
  47. BIN
      hr_employee_shift/static/description/shift.png
  48. 7
      hr_employee_shift/static/src/css/shift_dashboard.css
  49. 18
      hr_employee_shift/static/src/less/shift_dashboard.less
  50. 29
      hr_employee_shift/views/hr_employee_contract_view.xml
  51. 76
      hr_employee_shift/views/hr_employee_shift_view.xml
  52. 50
      hr_employee_shift/views/hr_generate_shift_view.xml
  53. 9
      hr_employee_shift/views/templates.xml
  54. 39
      hr_employee_transfer/README.rst
  55. 2
      hr_employee_transfer/__init__.py
  56. 45
      hr_employee_transfer/__manifest__.py
  57. 6
      hr_employee_transfer/docs/RELEASE_NOTES.md
  58. 4
      hr_employee_transfer/models/__init__.py
  59. 90
      hr_employee_transfer/models/employee_transfer.py
  60. 16
      hr_employee_transfer/models/hr_contract.py
  61. 19
      hr_employee_transfer/models/hr_employee.py
  62. 40
      hr_employee_transfer/models/res_company.py
  63. 18
      hr_employee_transfer/security/branch_security.xml
  64. 5
      hr_employee_transfer/security/ir.model.access.csv
  65. BIN
      hr_employee_transfer/static/description/HRMS-BUTTON.png
  66. BIN
      hr_employee_transfer/static/description/banner.jpg
  67. BIN
      hr_employee_transfer/static/description/create_a_transfer.png
  68. BIN
      hr_employee_transfer/static/description/create_contract.png
  69. BIN
      hr_employee_transfer/static/description/cybro-service.png
  70. BIN
      hr_employee_transfer/static/description/cybro_logo.png
  71. BIN
      hr_employee_transfer/static/description/icon.png
  72. 103
      hr_employee_transfer/static/description/index.html
  73. 80
      hr_employee_transfer/views/employee_transfer.xml
  74. 17
      hr_employee_updation/README.md
  75. 25
      hr_employee_updation/__init__.py
  76. 44
      hr_employee_updation/__manifest__.py
  77. 11
      hr_employee_updation/doc/RELEASE_NOTES.md
  78. 27
      hr_employee_updation/models/__init__.py
  79. 107
      hr_employee_updation/models/hr_employee.py
  80. 7
      hr_employee_updation/security/ir.model.access.csv
  81. BIN
      hr_employee_updation/static/description/HRMS-BUTTON.png
  82. BIN
      hr_employee_updation/static/description/banner.jpg
  83. BIN
      hr_employee_updation/static/description/cybro-service.png
  84. BIN
      hr_employee_updation/static/description/cybro_logo.png
  85. BIN
      hr_employee_updation/static/description/emergency_contact.png
  86. BIN
      hr_employee_updation/static/description/family_info.png
  87. BIN
      hr_employee_updation/static/description/icon.png
  88. 127
      hr_employee_updation/static/description/index.html
  89. BIN
      hr_employee_updation/static/description/joining_date.png
  90. BIN
      hr_employee_updation/static/description/personal_info.png
  91. 84
      hr_employee_updation/views/hr_employee_view.xml
  92. 15
      hr_employee_updation/views/hr_notification.xml
  93. 39
      hr_insurance/README.rst
  94. 6
      hr_insurance/RELEASE_NOTES.md
  95. 24
      hr_insurance/__init__.py
  96. 49
      hr_insurance/__manifest__.py
  97. 25
      hr_insurance/models/__init__.py
  98. 121
      hr_insurance/models/employee_insurance.py
  99. 33
      hr_insurance/models/policy_details.py
  100. 16
      hr_insurance/security/hr_insurance_security.xml

47
hr_custody/README.rst

@ -1,47 +0,0 @@
Open HRMS Custody Management
============================
Functionality to give and track the assets of a company to employees.
- Creates a new menu item Custody Management under Employees
- Can create custody contract with an employee
- Can take the report of custody
Depends
=======
[hr, mail, hr_employee_updation] addon Odoo
Tech
====
* [Python] - Models
* [XML] - Odoo views
Installation
============
- www.odoo.com/documentation/10.0/setup/install.html
- Install our custom addon
License
=======
GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 (AGPLv3)
(http://www.gnu.org/licenses/agpl.html)
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
------
Developers: Avinash Nk <avinash@cybrosys.in>
Jesni Banu <jesni@cybrosys.in>
Maintainer
----------
This module is maintained by Cybrosys Technologies.
For support and more information, please visit https://www.cybrosys.com.

24
hr_custody/__init__.py

@ -1,24 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Authors: Avinash Nk, Jesni Banu (<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/>.
#
###################################################################################
from . import models
from . import reports

50
hr_custody/__manifest__.py

@ -1,50 +0,0 @@
# -*- 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>).
# Authors: Avinash Nk, Jesni Banu (<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 Custody',
'version': '10.0.1.0.0',
'summary': """Manage the company properties when it is in the custody of an employee""",
'description': 'Manage the company properties when it is in the custody of an employee',
'category': 'Human Resources',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.openhrms.com",
'depends': ['hr', 'mail', 'hr_employee_updation'],
'data': [
'security/ir.model.access.csv',
'security/custody_security.xml',
'views/wizard_reason_view.xml',
'views/custody_view.xml',
'views/hr_custody_notification.xml',
'views/hr_employee_view.xml',
'views/notification_mail.xml',
'reports/custody_report.xml'
],
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'demo': [],
'installable': True,
'auto_install': False,
'application': False,
}

6
hr_custody/doc/RELEASE_NOTES.md

@ -1,6 +0,0 @@
## Module hr_custody
#### 30.03.2018
#### Version 10.0.1.0.0
##### ADD
- Initial commit for OpenHrms Project

25
hr_custody/models/__init__.py

@ -1,25 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Authors: Avinash Nk, Jesni Banu (<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/>.
#
###################################################################################
from . import custody
from . import hr_employee
from . import wizard_reason

208
hr_custody/models/custody.py

@ -1,208 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Authors: Avinash Nk, Jesni Banu (<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/>.
#
###################################################################################
from datetime import datetime, timedelta
from odoo import models, fields, api, _
from odoo.exceptions import Warning, UserError
from odoo.tools import image_resize_images
class HrCustody(models.Model):
"""
Hr custody contract creation model.
"""
_name = 'hr.custody'
_description = 'Hr Custody Management'
_inherit = ['mail.thread', 'ir.needaction_mixin']
def mail_reminder(self):
now = datetime.now() + timedelta(days=1)
date_now = now.date()
match = self.search([('state', '=', 'approved')])
for i in match:
if i.return_date:
exp_date = fields.Date.from_string(i.return_date)
if exp_date <= date_now:
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
url = base_url + _('/web#id=%s&view_type=form&model=hr.custody&menu_id=') % i.id
mail_content = _('Hi %s,<br>As per the %s you took %s on %s for the reason of %s. S0 here we '
'remind you that you have to return that on or before %s. Otherwise, you can '
'renew the reference number(%s) by extending the return date through following '
'link.<br> <div style = "text-align: center; margin-top: 16px;"><a href = "%s"'
'style = "padding: 5px 10px; font-size: 12px; line-height: 18px; color: #FFFFFF; '
'border-color:#875A7B;text-decoration: none; display: inline-block; '
'margin-bottom: 0px; font-weight: 400;text-align: center; vertical-align: middle; '
'cursor: pointer; white-space: nowrap; background-image: none; '
'background-color: #875A7B; border: 1px solid #875A7B; border-radius:3px;">'
'Renew %s</a></div>') % \
(i.employee.name, i.name, i.custody_name.name, i.date_request, i.purpose,
date_now, i.name, url, i.name)
main_content = {
'subject': _('REMINDER On %s') % i.name,
'author_id': self.env.user.partner_id.id,
'body_html': mail_content,
'email_to': i.employee.work_email,
}
mail_id = self.env['mail.mail'].create(main_content)
mail_id.mail_message_id.body = mail_content
mail_id.send()
if i.employee.user_id:
mail_id.mail_message_id.write({'needaction_partner_ids': [(4, i.employee.user_id.partner_id.id)]})
mail_id.mail_message_id.write({'partner_ids': [(4, i.employee.user_id.partner_id.id)]})
@api.model
def create(self, vals):
vals['name'] = self.env['ir.sequence'].next_by_code('hr.custody')
return super(HrCustody, self).create(vals)
@api.multi
def sent(self):
self.state = 'to_approve'
@api.multi
def send_mail(self):
template = self.env.ref('hr_custody.custody_email_notification_template')
self.env['mail.template'].browse(template.id).send_mail(self.id)
self.mail_send = True
@api.multi
def set_to_draft(self):
self.state = 'draft'
@api.multi
def renew_approve(self):
for custody in self.env['hr.custody'].search([('custody_name', '=', self.custody_name.id)]):
if custody.state == "approved":
raise UserError(_("Custody is not available now"))
self.return_date = self.renew_date
self.renew_date = ''
self.state = 'approved'
@api.multi
def renew_refuse(self):
for custody in self.env['hr.custody'].search([('custody_name', '=', self.custody_name.id)]):
if custody.state == "approved":
raise UserError(_("Custody is not available now"))
self.renew_date = ''
self.state = 'approved'
@api.multi
def approve(self):
for custody in self.env['hr.custody'].search([('custody_name', '=', self.custody_name.id)]):
if custody.state == "approved":
raise UserError(_("Custody is not available now"))
self.state = 'approved'
@api.multi
def set_to_return(self):
self.state = 'returned'
self.return_date = fields.datetime.now()
# return date validation
@api.constrains('return_date')
def validate_return_date(self):
if self.return_date < self.date_request:
raise Warning('Please Give Valid Return Date')
name = fields.Char(string='Code', copy=False)
company_id = fields.Many2one('res.company', 'Company', readonly=True,
default=lambda self: self.env.user.company_id)
rejected_reason = fields.Text(string='Rejected Reason', copy=False, readonly=1)
renew_rejected_reason = fields.Text(string='Renew Rejected Reason', copy=False, readonly=1)
date_request = fields.Date(string='Requested Date', required=True, track_visibility='always', readonly=True,
states={'draft': [('readonly', False)]})
employee = fields.Many2one('hr.employee', string='Employee', required=True, readonly=True,
states={'draft': [('readonly', False)]})
purpose = fields.Char(string='Reason', track_visibility='always', required=True, readonly=True,
states={'draft': [('readonly', False)]})
custody_name = fields.Many2one('custody.property', string='Property', required=True, readonly=True,
states={'draft': [('readonly', False)]})
return_date = fields.Date(string='Return Date', required=True, track_visibility='always', readonly=True,
states={'draft': [('readonly', False)]})
renew_date = fields.Date(string='Renewal Return Date', track_visibility='always', readonly=True, copy=False)
notes = fields.Html(string='Notes')
renew_return_date = fields.Boolean(default=False, copy=False)
renew_reject = fields.Boolean(default=False, copy=False)
state = fields.Selection([('draft', 'Draft'), ('to_approve', 'Waiting For Approval'), ('approved', 'Approved'),
('returned', 'Returned'), ('rejected', 'Refused')], string='Status', default='draft',
track_visibility='always')
mail_send = fields.Boolean(string="Mail Send")
class HrPropertyName(models.Model):
"""
Hr property creation model.
"""
_name = 'custody.property'
_description = 'Property Name'
name = fields.Char(string='Property Name', required=True)
image = fields.Binary(
"Image", attachment=True,
help="This field holds the image used for this provider, limited to 1024x1024px")
image_medium = fields.Binary(
"Medium-sized image", attachment=True,
help="Medium-sized image of this provider. It is automatically "
"resized as a 128x128px image, with aspect ratio preserved. "
"Use this field in form views or some kanban views.")
image_small = fields.Binary(
"Small-sized image", attachment=True,
help="Small-sized image of this provider. It is automatically "
"resized as a 64x64px image, with aspect ratio preserved. "
"Use this field anywhere a small image is required.")
desc = fields.Html(string='Description')
company_id = fields.Many2one('res.company', 'Company',
default=lambda self: self.env.user.company_id)
@api.model
def create(self, vals):
image_resize_images(vals)
return super(HrPropertyName, self).create(vals)
@api.multi
def write(self, vals):
image_resize_images(vals)
return super(HrPropertyName, self).write(vals)
class HrReturnDate(models.TransientModel):
"""Hr custody contract renewal wizard"""
_name = 'wizard.return.date'
_description = 'Hr Custody Name'
returned_date = fields.Date(string='Renewal Date', required=1)
# renewal date validation
@api.constrains('returned_date')
def validate_return_date(self):
context = self._context
custody_obj = self.env['hr.custody'].search([('id', '=', context.get('custody_id'))])
if self.returned_date <= custody_obj.date_request:
raise Warning('Please Give Valid Renewal Date')
@api.multi
def proceed(self):
context = self._context
custody_obj = self.env['hr.custody'].search([('id', '=', context.get('custody_id'))])
custody_obj.write({'renew_return_date': True,
'renew_date': self.returned_date,
'state': 'to_approve'})

118
hr_custody/models/hr_employee.py

@ -1,118 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Authors: Avinash Nk, Jesni Banu (<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/>.
#
###################################################################################
from odoo import models, fields, api, _
class HrCustody(models.Model):
_inherit = 'hr.employee'
custody_count = fields.Integer(compute='_custody_count', string='# Custody')
equipment_count = fields.Integer(compute='_equipment_count', string='# Equipments')
# count of all custody contracts
@api.multi
def _custody_count(self):
for each in self:
custody_ids = self.env['hr.custody'].search([('employee', '=', each.id)])
each.custody_count = len(custody_ids)
# count of all custody contracts that are in approved state
@api.multi
def _equipment_count(self):
for each in self:
equipment_obj = self.env['hr.custody'].search([('employee', '=', each.id), ('state', '=', 'approved')])
equipment_ids = []
for each1 in equipment_obj:
if each1.custody_name.id not in equipment_ids:
equipment_ids.append(each1.custody_name.id)
each.equipment_count = len(equipment_ids)
# smart button action for returning the view of all custody contracts related to the current employee
@api.multi
def custody_view(self):
for each1 in self:
custody_obj = self.env['hr.custody'].search([('employee', '=', each1.id)])
custody_ids = []
for each in custody_obj:
custody_ids.append(each.id)
view_id = self.env.ref('hr_custody.hr_custody_form_view').id
if custody_ids:
if len(custody_ids) <= 1:
value = {
'view_type': 'form',
'view_mode': 'form',
'res_model': 'hr.custody',
'view_id': view_id,
'type': 'ir.actions.act_window',
'name': _('Custody'),
'res_id': custody_ids and custody_ids[0]
}
else:
value = {
'domain': str([('id', 'in', custody_ids)]),
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'hr.custody',
'view_id': False,
'type': 'ir.actions.act_window',
'name': _('Custody'),
'res_id': custody_ids
}
return value
# smart button action for returning the view of all custody contracts that are in approved state,
# related to the current employee
@api.multi
def equipment_view(self):
for each1 in self:
equipment_obj = self.env['hr.custody'].search([('employee', '=', each1.id), ('state', '=', 'approved')])
equipment_ids = []
for each in equipment_obj:
if each.custody_name.id not in equipment_ids:
equipment_ids.append(each.custody_name.id)
view_id = self.env.ref('hr_custody.custody_custody_form_view').id
if equipment_ids:
if len(equipment_ids) <= 1:
value = {
'view_type': 'form',
'view_mode': 'form',
'res_model': 'custody.property',
'view_id': view_id,
'type': 'ir.actions.act_window',
'name': _('Equipments'),
'res_id': equipment_ids and equipment_ids[0]
}
else:
value = {
'domain': str([('id', 'in', equipment_ids)]),
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'custody.property',
'view_id': False,
'type': 'ir.actions.act_window',
'name': _('Equipments'),
'res_id': equipment_ids
}
return value

48
hr_custody/models/wizard_reason.py

@ -1,48 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Authors: Avinash Nk, Jesni Banu (<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/>.
#
###################################################################################
from odoo import models, fields, api, _
class WizardReason(models.TransientModel):
"""
Hr custody contract refuse wizard.
"""
_name = 'wizard.reason'
@api.multi
def send_reason(self):
context = self._context
reject_obj = self.env[context.get('model_id')].search([('id', '=', context.get('reject_id'))])
if 'renew' in context.keys():
reject_obj.write({'state': 'approved',
'renew_reject': True,
'renew_rejected_reason': self.reason})
else:
if context.get('model_id') == 'hr.holidays':
reject_obj.write({'rejected_reason': self.reason})
reject_obj.action_refuse()
else:
reject_obj.write({'state': 'rejected',
'rejected_reason': self.reason})
reason = fields.Text(string="Reason")

23
hr_custody/reports/__init__.py

@ -1,23 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Authors: Avinash Nk, Jesni Banu (<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/>.
#
###################################################################################
from . import custody_report

84
hr_custody/reports/custody_report.py

@ -1,84 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Authors: Avinash Nk, Jesni Banu (<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/>.
#
###################################################################################
from odoo import models, fields, tools
class CustodyHistory(models.Model):
_name = "report.custody"
_description = "Custody Analysis"
_auto = False
name = fields.Char(string='Code')
date_request = fields.Date(string='Requested Date')
employee = fields.Many2one('hr.employee', string='Employee')
purpose = fields.Char(string='Reason')
custody_name = fields.Many2one('custody.property', string='Custody Name')
return_date = fields.Date(string='Return Date')
renew_date = fields.Date(string='Renewal Return Date')
renew_return_date = fields.Boolean(string='Renewal Return Date')
state = fields.Selection([('draft', 'Draft'), ('to_approve', 'Waiting For Approval'), ('approved', 'Approved'),
('returned', 'Returned'), ('rejected', 'Refused')], string='Status')
_order = 'name desc'
def _select(self):
select_str = """
SELECT
(select 1 ) AS nbr,
t.id as id,
t.name as name,
t.date_request as date_request,
t.employee as employee,
t.purpose as purpose,
t.custody_name as custody_name,
t.return_date as return_date,
t.renew_date as renew_date,
t.renew_return_date as renew_return_date,
t.state as state
"""
return select_str
def _group_by(self):
group_by_str = """
GROUP BY
t.id,
name,
date_request,
employee,
purpose,
custody_name,
return_date,
renew_date,
renew_return_date,
state
"""
return group_by_str
def init(self):
tools.sql.drop_view_if_exists(self._cr, 'report_custody')
self._cr.execute("""
CREATE view report_custody as
%s
FROM hr_custody t
%s
""" % (self._select(), self._group_by()))

27
hr_custody/reports/custody_report.xml

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<record id="view_report_custody" model="ir.ui.view">
<field name="name">report.custody.pivot</field>
<field name="model">report.custody</field>
<field name="arch" type="xml">
<pivot string="Ticket Analysis" display_quantity="true" disable_linking="True">
<field name="name" type="row"/>
</pivot>
</field>
</record>
<record id="action_report_custody" model="ir.actions.act_window">
<field name="name">Custody Analysis</field>
<field name="res_model">report.custody</field>
<field name="view_type">form</field>
<field name="view_mode">pivot</field>
<field name="context">{'group_by_no_leaf':1,'group_by':[]}</field>
<field name="help">This report allows you to analyse all Custody Requests. </field>
</record>
<menuitem name="Custody Analysis" action="action_report_custody" id="menu_custody_analysis"
groups="hr.group_hr_manager"
parent="hr_employee_updation.employee_report_menu" sequence="1"/>
</data>
</odoo>

16
hr_custody/security/custody_security.xml

@ -1,16 +0,0 @@
<?xml version="1.0" ?>
<odoo>
<record id="property_rule_custody" model="ir.rule">
<field name="name">Custody Multi Company</field>
<field name="model_id" ref="model_custody_property"/>
<field eval="True" name="global"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
<record id="property_rule_custody_req" model="ir.rule">
<field name="name">Custody Request Multi Company</field>
<field name="model_id" ref="model_hr_custody"/>
<field eval="True" name="global"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
</odoo>

13
hr_custody/security/ir.model.access.csv

@ -1,13 +0,0 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_hr_custody_hr","hr.custody.hr","model_hr_custody","hr.group_hr_manager",1,1,1,1
"access_hr_custody_hr_manager","hr.custody.user","model_hr_custody","hr.group_hr_user",1,1,1,1
"access_hr_custody_hr_employee","hr.custody.employee","model_hr_custody","base.group_user",1,1,1,0
"access_hr_custody_hr1","hr.custody.hr1","model_custody_property","hr.group_hr_manager",1,1,1,1
"access_hr_custody_hr_manager1","hr.custody.user1","model_custody_property","hr.group_hr_user",1,1,1,1
"access_hr_custody_hr_employee1","hr.custody.employee1","model_custody_property","base.group_user",1,1,1,0
"access_hr_custody_hr2","hr.custody.hr2","model_wizard_return_date","hr.group_hr_manager",1,1,1,1
"access_hr_custody_hr3","hr.custody.hr3","model_report_custody","hr.group_hr_manager",1,1,1,1
"access_hr_custody_hr_manager2","hr.custody.user2","model_wizard_return_date","hr.group_hr_user",1,1,1,1
"access_hr_custody_hr_manager3","hr.custody.user3","model_report_custody","hr.group_hr_user",1,1,1,1
"access_hr_custody_hr_employee2","hr.custody.employee2","model_wizard_return_date","base.group_user",1,1,1,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_hr_custody_hr hr.custody.hr model_hr_custody hr.group_hr_manager 1 1 1 1
3 access_hr_custody_hr_manager hr.custody.user model_hr_custody hr.group_hr_user 1 1 1 1
4 access_hr_custody_hr_employee hr.custody.employee model_hr_custody base.group_user 1 1 1 0
5 access_hr_custody_hr1 hr.custody.hr1 model_custody_property hr.group_hr_manager 1 1 1 1
6 access_hr_custody_hr_manager1 hr.custody.user1 model_custody_property hr.group_hr_user 1 1 1 1
7 access_hr_custody_hr_employee1 hr.custody.employee1 model_custody_property base.group_user 1 1 1 0
8 access_hr_custody_hr2 hr.custody.hr2 model_wizard_return_date hr.group_hr_manager 1 1 1 1
9 access_hr_custody_hr3 hr.custody.hr3 model_report_custody hr.group_hr_manager 1 1 1 1
10 access_hr_custody_hr_manager2 hr.custody.user2 model_wizard_return_date hr.group_hr_user 1 1 1 1
11 access_hr_custody_hr_manager3 hr.custody.user3 model_report_custody hr.group_hr_user 1 1 1 1
12 access_hr_custody_hr_employee2 hr.custody.employee2 model_wizard_return_date base.group_user 1 1 1 0

BIN
hr_custody/static/description/HRMS-BUTTON.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

BIN
hr_custody/static/description/banner.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

BIN
hr_custody/static/description/custody_property.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

BIN
hr_custody/static/description/custody_request.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

BIN
hr_custody/static/description/cybro-service.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 KiB

BIN
hr_custody/static/description/cybro_logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

BIN
hr_custody/static/description/icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

111
hr_custody/static/description/index.html

@ -1,111 +0,0 @@
<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">Open HRMS Custody Management</h2>
<h3 class="oe_slogan">Manages Custody Handling Process</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;"> &#9745; </span> Managing custody handling process.<br/>
<span style="color:green;"> &#9745; </span> Option to renewal.<br/>
<span style="color:green;"> &#9745; </span> Option to take reports.<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;">
Blues over resource tracking? No more worries.
OHRMS Custody Management system constitutes the ultimate
solution for a transparent custody of company resources.
</p>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h4 class="oe_slogan">Custody Request</h4>
<div class="oe_span12">
<p class='oe_mt32'>
&#x261B; Create a Custody Request.<br>
&#x261B; Send for Approval.<br>
</p>
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="custody_request.png">
</div>
</div>
</div>
</section>
<section class="oe_container ">
<div class="oe_row oe_spaced">
<h4 class="oe_slogan">Property</h4>
<div class="oe_span12">
<p class='oe_mt32'>
&#x261B; Create a Property of Company.<br>
<p>
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="custody_property.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>
<section class="oe_container oe_dark">
<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"><i
class="fa fa-envelope"></i> Email </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="https://www.cybrosys.com/contact/"><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.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<br>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
</div>
</section>

222
hr_custody/views/custody_view.xml

@ -1,222 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="seq_hr_custody_seq" model="ir.sequence">
<field name="name">Custody Code</field>
<field name="code">hr.custody</field>
<field name="prefix">CR</field>
<field eval="4" name="padding" />
<field eval="False" name="company_id"/>
</record>
<record model='ir.ui.view' id='wizard_return_date_form'>
<field name="name">wizard.return.date.form</field>
<field name="model">wizard.return.date</field>
<field name="arch" type="xml">
<form string="Renewal Request">
<group>
<group>
<field name="returned_date"/>
</group>
</group>
<footer>
<button name="proceed" string="Proceed" type="object" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel" />
</footer>
</form>
</field>
</record>
<record model='ir.ui.view' id='custody_custody_form_view'>
<field name="name">custody.property.form</field>
<field name="model">custody.property</field>
<field name="arch" type="xml">
<form string="Equipments">
<sheet>
<field name="image" widget='image' class="oe_avatar" options='{"preview_image": "image_medium"}'/>
<div class="oe_title">
<h1><field name="name" placeholder="Name"/></h1>
</div>
<group>
<group>
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
</group>
<group></group>
</group>
<notebook>
<page name="desc" string="Description">
<field name="desc"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record model='ir.actions.act_window' id='wizard_return_date_act'>
<field name="name">Custody Request</field>
<field name="res_model">wizard.return.date</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="wizard_return_date_form"/>
<field name="target">new</field>
</record>
<record id="hr_custody_form_view" model="ir.ui.view">
<field name="name">hr.custody.form</field>
<field name="model">hr.custody</field>
<field name="arch" type="xml">
<form string="Custody">
<header>
<button string="Send For Approval" type="object" name="sent"
attrs="{'invisible': [('state','not in',('draft'))]}"/>
<button string="Approve" groups="hr.group_hr_manager" type="object" name="approve"
attrs="{'invisible': ['|',('state','not in',('to_approve')),
('renew_return_date','=',True)]}"/>
<button string="Renewal Approval" groups="hr.group_hr_manager" type="object" name="renew_approve"
attrs="{'invisible': ['|',('state','not in',('to_approve')),
('renew_return_date','=',False)]}"/>
<button string="Refuse" groups="hr.group_hr_manager" type="action" name="%(hr_custody.wizard_reason_act)d"
attrs="{'invisible': ['|',('state','not in',('to_approve')),
('renew_return_date','=',True)]}" class="btn-primary" context="{'reject_id':id,'model_id':'hr.custody'}"/>
<button class="btn-primary" name="%(hr_custody.wizard_reason_act)d" string="Refuse" groups="hr.group_hr_manager" type="action"
attrs="{'invisible': ['|',('state','not in',('to_approve')),
('renew_return_date','=',False)]}" context="{'reject_id':id,'model_id':'hr.custody','renew': 'renew'}"/>
<button string="Set to Draft" type="object" name="set_to_draft"
attrs="{'invisible': [('state','not in',('rejected'))]}"/>
<button string="Return" type="object" name="set_to_return" groups="hr.group_hr_manager"
attrs="{'invisible': [('state','not in',('approved'))]}"/>
<button string="Send Mail" type="object" name="send_mail" groups="hr.group_hr_manager"
attrs="{'invisible': ['|',('mail_send', '=', False),('state','not in',('approved'))]}"/>
<button string="Send Mail" type="object" class="oe_highlight" name="send_mail" groups="hr.group_hr_manager"
attrs="{'invisible': ['|',('mail_send', '=', True),('state','not in',('approved'))]}"/>
<button string="Renew" type="action" name="%(wizard_return_date_act)d"
context="{'custody_id':id}"
attrs="{'invisible': ['|',('state','not in',('approved')),
('renew_return_date','=',True)]}"/>
<field name="state" widget="statusbar" statusbar_visible="draft,to_approve,approved,returned"/>
</header>
<sheet>
<h1>
<field name="name" readonly="1" nolabel="1"/>
</h1>
<group>
<group>
<field name="custody_name" options="{'no_open':True,'no_create':True}"
domain="[('company_id','child_of',[company_id])]"/>
<field name="renew_return_date" invisible="1"/>
<field name="renew_reject" invisible="1"/>
<field name="mail_send" invisible="1"/>
<field name="employee"/>
<field name="purpose"/>
</group>
<group>
<field name="date_request"/>
<field name="return_date" attrs="{'invisible': [('renew_return_date','=',True),
('renew_date','not in',[None,False]),('renew_reject','=',False)]}"/>
<field name="renew_date" attrs="{'invisible': ['|',('renew_return_date','=',False),
('state','!=','to_approve')]}"/>
<field name="rejected_reason" attrs="{'invisible': [('state','not in',('rejected'))]}"/>
<field name="renew_rejected_reason" attrs="{'invisible': ['|',('renew_reject','=',False),('state','not in',('approved'))]}"/>
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
</group>
</group>
<notebook>
<page string="Notes">
<field name="notes"/>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</form>
</field>
</record>
<record id="hr_custody_tree_view" model="ir.ui.view">
<field name="name">hr.custody.tree</field>
<field name="model">hr.custody</field>
<field name="arch" type="xml">
<tree decoration-info="state == 'draft'" colors="red:current_date > return_date;grey:state == 'rejected';green:state == 'approved';
black:state == 'to_approve';grey:state == 'returned';">
<field name="name"/>
<field name="custody_name"/>
<field name="employee"/>
<field name="purpose"/>
<field name="date_request"/>
<field name="return_date"/>
<field name="state"/>
</tree>
</field>
</record>
<record id="hr_property_tree_view" model="ir.ui.view">
<field name="name">hr_property_tree_view.tree</field>
<field name="model">custody.property</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
</tree>
</field>
</record>
<record id="hr_custody_search_view" model="ir.ui.view">
<field name="name">hr.custody.search</field>
<field name="model">hr.custody</field>
<field name="arch" type="xml">
<search string="Custody">
<field name="name"/>
<field name="custody_name"/>
<field name="employee"/>
<field name="purpose"/>
<field name="date_request"/>
<field name="return_date"/>
<field name="state"/>
<separator/>
<group expand="0" string="Group By">
<filter string="Status" domain="[]" context="{'group_by':'state'}"/>
<filter string="Employee" domain="[]" context="{'group_by':'employee'}"/>
<filter string="Custody Name" domain="[]" context="{'group_by':'custody_name'}"/>
</group>
</search>
</field>
</record>
<record id="action_hr_custody" model="ir.actions.act_window">
<field name="name">Custody</field>
<field name="res_model">hr.custody</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="hr_custody_search_view"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to Create a New Record.
</p>
</field>
</record>
<record id="action_hr_property" model="ir.actions.act_window">
<field name="name">Property</field>
<field name="res_model">custody.property</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to Create a New Record.
</p>
</field>
</record>
<menuitem id="hr_custody_main_menu" parent="hr.menu_hr_root"
name="Custody Management" sequence="20"/>
<menuitem action="action_hr_custody" id="hr_custody_menu" parent="hr_custody.hr_custody_main_menu"
name="Custody Request" sequence="1"/>
<menuitem action="action_hr_property" id="hr_property_menu" parent="hr_custody.hr_custody_main_menu"
name="Property" sequence="5" groups="hr.group_hr_user"/>
</data>
</odoo>

15
hr_custody/views/hr_custody_notification.xml

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record model="ir.cron" id="hr_custody_data_reminder">
<field name="name">HR Custody Return Notification</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
<field name="model" eval="'hr.custody'"/>
<field name="function" eval="'mail_reminder'"/>
<field name="args" eval="'()'" />
</record>
</data>
</odoo>

20
hr_custody/views/hr_employee_view.xml

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.ui.view" id="custody_hr_employee_inherit_form_view">
<field name="name">hr.employee.form.inherit.view</field>
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.view_employee_form"/>
<field name="arch" type="xml">
<div class="oe_button_box" position="inside">
<button class="oe_stat_button" name="custody_view" type="object" icon="fa-list-ol">
<field string="Custody" name="custody_count" widget="statinfo"/>
</button>
<button class="oe_stat_button" name="equipment_view" type="object" icon="fa-tablet">
<field string="Equipments" name="equipment_count" widget="statinfo"/>
</button>
</div>
</field>
</record>
</data>
</odoo>

24
hr_custody/views/notification_mail.xml

@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="custody_email_notification_template" model="mail.template">
<field name="name">Custody e-mail template</field>
<field name="email_from">${object.company_id and object.company_id.email or ''}</field>
<field name="subject">Notification to return company asset-${object.custody_name.name}</field>
<field name="email_to">${object.email|safe}</field>
<field name="lang">${object.lang}</field>
<field name="model_id" ref="hr_custody.model_hr_custody"/>
<field name="auto_delete" eval="True"/>
<field name="body_html">
<![CDATA[
<p>Dear ${(object.employee.name)},<br/><br/>
You are in possession of the company asset
<strong>"${(object.custody_name.name)}"</strong>
since <strong>${(object.return_date)}.</strong><br/><br/>
Please kindly return the property as soon as possible.<br/><br/></p>
Regards,<br/><br/>
${(object.company_id.name)}]]>
</field>
</record>
</data>
</odoo>

30
hr_custody/views/wizard_reason_view.xml

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model='ir.ui.view' id='wizard_reason_form'>
<field name="name">wizard.reason.form</field>
<field name="model">wizard.reason</field>
<field name="arch" type="xml">
<form string="Update Reason">
<group>
<field name="reason" required="True"/>
</group>
<footer>
<button name="send_reason" string="Proceed" type="object" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel" />
</footer>
</form>
</field>
</record>
<record model='ir.actions.act_window' id='wizard_reason_act'>
<field name="name">Update Reason</field>
<field name="res_model">wizard.reason</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="wizard_reason_form"/>
<field name="target">new</field>
</record>
</data>
</odoo>

43
hr_employee_shift/README.rst

@ -1,43 +0,0 @@
OHRMS Employee Shift v10
========================
Easily create, manage, and track employee shift schedules
Depends
=======
[hr] addon Odoo
Tech
====
* [Python] - Models
* [XML] - Odoo views
Installation
============
- www.odoo.com/documentation/10.0/setup/install.html
- Install our custom addon
License
=======
GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 (LGPLv3)
(http://www.gnu.org/licenses/agpl.html)
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: Saritha Sahadevan, saritha@cybrosys.in
Maintainer
----------
This module is maintained by Cybrosys Technologies.
For support and more information, please visit https://www.cybrosys.com.

6
hr_employee_shift/RELEASE_NOTES.md

@ -1,6 +0,0 @@
## Module hr_employee_shift
#### 30.03.2018
#### Version 10.0.1.0.0
##### ADD
- Initial commit for OpenHrms Project

23
hr_employee_shift/__init__.py

@ -1,23 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHrms Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Saritha Sahadevan (<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/>.
#
###################################################################################
from . import models

46
hr_employee_shift/__manifest__.py

@ -1,46 +0,0 @@
# -*- 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: Saritha Sahadevan (<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 Employee Shift",
'version': '10.0.1.0',
'summary': """Easily create, manage, and track employee shift schedules.""",
'description': """Easily create, manage, and track employee shift schedules.""",
'category': 'Human Resource',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.openhrms.com",
'depends': ['hr', 'hr_payroll'],
'data': [
'security/ir.model.access.csv',
'security/hr_employee_shift_security.xml',
'views/hr_employee_shift_view.xml',
'views/hr_employee_contract_view.xml',
'views/hr_generate_shift_view.xml',
'views/templates.xml',
],
'images': ["static/description/banner.jpg"],
'license': "AGPL-3",
'installable': True,
'application': True,
}

23
hr_employee_shift/models/__init__.py

@ -1,23 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHrms Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Saritha Sahadevan (<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/>.
#
###################################################################################
from . import hr_employee_shift, hr_employee_contract, hr_generate_shift, hr_shift_payroll

75
hr_employee_shift/models/hr_employee_contract.py

@ -1,75 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHrms Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Saritha Sahadevan (<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/>.
#
###################################################################################
from odoo.exceptions import Warning
from odoo import models, fields, api, _
class HrEmployeeContract(models.Model):
_inherit = 'hr.contract'
shift_schedule = fields.One2many('hr.shift.schedule', 'rel_hr_schedule', string="Shift Schedule")
working_hours = fields.Many2one('resource.calendar', string='Working Schedule')
department_id = fields.Many2one('hr.department', string="Department", required=True)
class HrSchedule(models.Model):
_name = 'hr.shift.schedule'
start_date = fields.Date(string="Date From", required=True)
end_date = fields.Date(string="Date To", required=True)
rel_hr_schedule = fields.Many2one('hr.contract')
hr_shift = fields.Many2one('resource.calendar', string="Shift", required=True)
@api.onchange('start_date', 'end_date')
def get_department(self):
"""Adding domain to the hr_shift field"""
hr_department = None
if self.start_date:
hr_department = self.rel_hr_schedule.department_id.id
return {
'domain': {
'hr_shift': [('hr_department', '=', hr_department)]
}
}
@api.multi
def write(self, vals):
self._check_overlap(vals)
return super(HrSchedule, self).write(vals)
@api.model
def create(self, vals):
self._check_overlap(vals)
return super(HrSchedule, self).create(vals)
def _check_overlap(self, vals):
if vals.get('start_date', False) and vals.get('end_date', False):
shifts = self.env['hr.shift.schedule'].search([('rel_hr_schedule', '=', vals.get('rel_hr_schedule'))])
for each in shifts:
if each != shifts[-1]:
if each.end_date >= vals.get('start_date') or each.start_date >= vals.get('start_date'):
raise Warning(_('The dates may not overlap with one another.'))
if vals.get('start_date') > vals.get('end_date'):
raise Warning(_('Start date should be less than end date.'))
return True

41
hr_employee_shift/models/hr_employee_shift.py

@ -1,41 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHrms Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Saritha Sahadevan (<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/>.
#
###################################################################################
from odoo.exceptions import ValidationError
from odoo import models, fields, api
class HrEmployeeShift(models.Model):
_inherit = 'resource.calendar'
color = fields.Integer(string='Color Index')
hr_department = fields.Many2one('hr.department', string="Department", required=True)
sequence = fields.Integer(string="Sequence", required=True, default=1)
@api.constrains('sequence')
def validate_seq(self):
record = self.env['resource.calendar'].search([('hr_department', '=', self.hr_department.id),
('sequence', '=', self.sequence)
])
if len(record) > 1:
raise ValidationError("One record with same sequence is already active."
"You can't activate more than one record at a time")

101
hr_employee_shift/models/hr_generate_shift.py

@ -1,101 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHrms Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Saritha Sahadevan (<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/>.
#
###################################################################################
from odoo import models, fields
class HrGenerateShift(models.Model):
_name = 'hr.shift.generate'
hr_department = fields.Many2one('hr.department', string="Department")
start_date = fields.Date(string="Start Date", required=True)
end_date = fields.Date(string="End Date", required=True)
def action_schedule_shift(self):
"""Create mass schedule for all departments based on the shift scheduled in corresponding employee's contract"""
if self.hr_department:
for contract in self.env['hr.contract'].search([('department_id', '=', self.hr_department.id)]):
if contract.shift_schedule:
for shift_val in contract.shift_schedule:
shift = shift_val.hr_shift
start_date = self.start_date
end_date = self.end_date
shift_obj = self.env['resource.calendar'].search([('hr_department', '=', self.hr_department.id),
('name', '=', shift.name)], limit=1)
sequence = shift_obj.sequence
seq_no = sequence + 1
new_shift = self.env['resource.calendar'].search([
('sequence', '=', seq_no), ('hr_department', '=', self.hr_department.id)], limit=1)
if new_shift:
shift_ids = [(0, 0, {
'hr_shift': new_shift.id,
'start_date': start_date,
'end_date': end_date
})]
contract.shift_schedule = shift_ids
else:
seq_no = 1
new_shift = self.env['resource.calendar'].search([
('sequence', '=', seq_no), ('hr_department', '=', self.hr_department.id)], limit=1)
if new_shift:
shift_ids = [(0, 0, {
'hr_shift': new_shift.id,
'start_date': start_date,
'end_date': end_date
})]
contract.shift_schedule = shift_ids
else:
for contract in self.env['hr.contract'].search([]):
if contract.shift_schedule and contract.department_id:
for shift_val in contract.shift_schedule:
shift = shift_val.hr_shift
start_date = self.start_date
end_date = self.end_date
shift_obj = self.env['resource.calendar'].search([('hr_department', '=', contract.department_id.id),
('name', '=', shift.name)], limit=1)
sequence = shift_obj.sequence
seq_no = sequence + 1
new_shift = self.env['resource.calendar'].search([
('sequence', '=', seq_no), ('hr_department', '=', contract.department_id.id)], limit=1)
if new_shift:
shift_ids = [(0, 0, {
'hr_shift': new_shift.id,
'start_date': start_date,
'end_date': end_date
})]
contract.shift_schedule = shift_ids
else:
seq_no = 1
new_shift = self.env['resource.calendar'].search([
('sequence', '=', seq_no), ('hr_department', '=', contract.department_id.id)], limit=1)
shift_ids = [(0, 0, {
'hr_shift': new_shift.id,
'start_date': start_date,
'end_date': end_date
})]
contract.shift_schedule = shift_ids

109
hr_employee_shift/models/hr_shift_payroll.py

@ -1,109 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHrms Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Saritha Sahadevan (<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/>.
#
###################################################################################
from datetime import datetime, timedelta
from odoo import models, fields, api, _, tools
class HrPayroll(models.Model):
_inherit = 'hr.payslip'
@api.model
def get_worked_day_lines(self, contract_ids, date_from, date_to):
"""
@param contract_ids: list of contract id
@return: returns a list of dict containing the input that should be applied for the given contract between date_from and date_to
"""
def was_on_leave_interval(employee_id, date_from, date_to):
date_from = fields.Datetime.to_string(date_from)
date_to = fields.Datetime.to_string(date_to)
return self.env['hr.holidays'].search([
('state', '=', 'validate'),
('employee_id', '=', employee_id),
('type', '=', 'remove'),
('date_from', '<=', date_from),
('date_to', '>=', date_to)
], limit=1)
res = []
# fill only if the contract as a working schedule linked
uom_day = self.env.ref('product.product_uom_day', raise_if_not_found=False)
for contract in self.env['hr.contract'].browse(contract_ids).filtered(lambda contract: contract):
uom_hour = contract.employee_id.resource_id.calendar_id.uom_id or self.env.ref('product.product_uom_hour',
raise_if_not_found=False)
interval_data = []
holidays = self.env['hr.holidays']
attendances = {
'name': _("Normal Working Days paid at 100%"),
'sequence': 1,
'code': 'WORK100',
'number_of_days': 0.0,
'number_of_hours': 0.0,
'contract_id': contract.id,
}
leaves = {}
# Gather all intervals and holidays
for days in contract.shift_schedule:
start_date = datetime.strptime(days.start_date, tools.DEFAULT_SERVER_DATE_FORMAT)
end_date = datetime.strptime(days.end_date, tools.DEFAULT_SERVER_DATE_FORMAT)
nb_of_days = (end_date - start_date).days + 1
for day in range(0, nb_of_days):
working_intervals_on_day = days.hr_shift.get_working_intervals_of_day(
start_dt=start_date + timedelta(days=day))
for interval in working_intervals_on_day:
interval_data.append(
(interval, was_on_leave_interval(contract.employee_id.id, interval[0], interval[1])))
# Extract information from previous data. A working interval is considered:
# - as a leave if a hr.holiday completely covers the period
# - as a working period instead
for interval, holiday in interval_data:
holidays |= holiday
hours = (interval[1] - interval[0]).total_seconds() / 3600.0
if holiday:
# if he was on leave, fill the leaves dict
if holiday.holiday_status_id.name in leaves:
leaves[holiday.holiday_status_id.name]['number_of_hours'] += hours
else:
leaves[holiday.holiday_status_id.name] = {
'name': holiday.holiday_status_id.name,
'sequence': 5,
'code': holiday.holiday_status_id.name,
'number_of_days': 0.0,
'number_of_hours': hours,
'contract_id': contract.id,
}
else:
# add the input vals to tmp (increment if existing)
attendances['number_of_hours'] += hours
# Clean-up the results
leaves = [value for key, value in leaves.items()]
for data in [attendances] + leaves:
data['number_of_days'] = uom_hour._compute_quantity(data['number_of_hours'], uom_day) \
if uom_day and uom_hour \
else data['number_of_hours'] / 8.0
res.append(data)
return res

16
hr_employee_shift/security/hr_employee_shift_security.xml

@ -1,16 +0,0 @@
<?xml version="1.0" ?>
<odoo>
<record id="property_rule_hr_shift" model="ir.rule">
<field name="name">Hr Shift Multi Company</field>
<field name="model_id" ref="model_hr_shift_schedule"/>
<field eval="True" name="global"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
<record id="property_rule_hr_shift_generate" model="ir.rule">
<field name="name">Hr Shift Genarate Multi Company</field>
<field name="model_id" ref="model_hr_shift_generate"/>
<field eval="True" name="global"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
</odoo>

3
hr_employee_shift/security/ir.model.access.csv

@ -1,3 +0,0 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_hr_employee_shift_hr_employee_shift,hr_employee_shift.hr_shift_schedule,model_hr_shift_schedule,hr.group_hr_manager,1,1,1,1
access_hr_employee_shift_hr_employee_shift1,hr_employee_shift.hr_shift_generate,model_hr_shift_generate,hr.group_hr_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_hr_employee_shift_hr_employee_shift hr_employee_shift.hr_shift_schedule model_hr_shift_schedule hr.group_hr_manager 1 1 1 1
3 access_hr_employee_shift_hr_employee_shift1 hr_employee_shift.hr_shift_generate model_hr_shift_generate hr.group_hr_manager 1 1 1 1

BIN
hr_employee_shift/static/description/HRMS-BUTTON.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

BIN
hr_employee_shift/static/description/banner.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

BIN
hr_employee_shift/static/description/contract1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

BIN
hr_employee_shift/static/description/create_shift.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

BIN
hr_employee_shift/static/description/cybro-service.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 KiB

BIN
hr_employee_shift/static/description/cybro_logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

BIN
hr_employee_shift/static/description/generate_schedule.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

BIN
hr_employee_shift/static/description/icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

129
hr_employee_shift/static/description/index.html

@ -1,129 +0,0 @@
<section class="oe_container bg-gray-lighter" xmlns="http://www.w3.org/1999/html">
<div class="oe_row">
<div class="oe_span">
<h2 class="oe_slogan">Open HRMS</h2>
<h3 class="oe_slogan">Most advanced open source HR management software</h3>
</div>
</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">
<div class="oe_span12">
<h2 class="oe_slogan">Employee Shift Management</h2>
<h3 class="oe_slogan">Easily create, manage, and track employee shift schedules.</h3>
<h3 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a> </h3>
</div>
<div class="oe_row oe_spaced">
<h4><p style="margin-left: 42px;">Major Features:</p></h4>
<ul>
<li style="list-style:none !important;"><span style="color:green;"> &#9733;</span>&nbsp;&nbsp; Define list of Work Shifts</li>
<li style="list-style:none !important;"><span style="color:green;"> &#9733;</span>&nbsp;&nbsp; Define flexible hour wise shift</li>
<li style="list-style:none !important;"><span style="color:green;"> &#9733;</span>&nbsp;&nbsp; Assign shift in employee contract</li>
<li style="list-style:none !important;"><span style="color:green;"> &#9733;</span>&nbsp;&nbsp; Assign new shift automatically</li>
</ul>
</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">
Employee Shift Management is a component of Open HRMS suit.
This module allows the user to create and manage employee work shifts.
Administrator can create various shifts according to the working hours and assign the Shift in
employee work contract. The module also helps to automatically assign new shift according to
the shift sequence
</p>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<p><h2>Create Employee Shift</h2> </p>
<div class="oe_demo oe_picture oe_screenshot">
<img src="create_shift.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<p><h2>Employee Shift In Contract</h2> </p>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<img src="contract1.png">
</div>
</div>
<div class="oe_span6">
<p>Have an option to schedule shift in employee contract form.
It is very important to create atleast one shift schedule manually in contract form</p>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<p><h2>Generate Automatic Shifts</h2></p>
<p class="oe_mt32">
<p>Automatically assign new shift according to the shift sequence</p>
</p>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<img src="generate_schedule.png">
</div>
</div>
<div class="oe_span6">
<p><h2> Employee Shifts</h2> </p>
<div class="oe_demo oe_picture oe_screenshot">
<img src="shift.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"><i
class="fa fa-envelope"></i> Email </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="https://www.cybrosys.com/contact/"><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.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<br>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
</div>
</section>

BIN
hr_employee_shift/static/description/shift.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

7
hr_employee_shift/static/src/css/shift_dashboard.css

@ -1,7 +0,0 @@
.style_shift{
color: black !important;
font-size: 15px;
text-align: center;
padding: 10px 0px 2px 3px;
}

18
hr_employee_shift/static/src/less/shift_dashboard.less

@ -1,18 +0,0 @@
@dashboard-bg-color: white;
.o_kanban_view.o_kanban_dashboard.o_shift_kanban {
@sale-table-spacing: 20px;
.o_kanban_record {
min-height: 150px;
max-width: 250px !important;
@media (min-width: @screen-sm-min) {
min-width: 20px;
}
}
.oe_kanban_content{
padding-top: 50px!important;
}
}

29
hr_employee_shift/views/hr_employee_contract_view.xml

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="employee_contract_form_inherited" model="ir.ui.view">
<field name="name">employee.contract</field>
<field name="model">hr.contract</field>
<field name="inherit_id" ref="hr_contract.hr_contract_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='working_hours']" position="replace">
<field name="working_hours" invisible="1"/>
</xpath>
<xpath expr="//field[@name='department_id']" position="replace">
<field name="department_id"/>
</xpath>
<xpath expr="//group[@name='duration_group']" position="after">
<group colspan="2" string="Shift Schedule">
<field name="shift_schedule" nolabel="1">
<tree editable="1">
<field name="start_date"/>
<field name="end_date"/>
<field name="hr_shift"/>
</tree>
</field>
</group>
</xpath>
</field>
</record>
</data>
</odoo>

76
hr_employee_shift/views/hr_employee_shift_view.xml

@ -1,76 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="resource_calendar_form" model="ir.ui.view">
<field name="name">resource.calendar</field>
<field name="model">resource.calendar</field>
<field name="inherit_id" ref="resource.resource_calendar_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="after">
<field name="hr_department"/>
<field name="sequence"/>
<field name="color" invisible="1"/>
</xpath>
</field>
</record>
<record id="shift_template_kanban_view" model="ir.ui.view">
<field name="name">employee.shift.kanban</field>
<field name="model">resource.calendar</field>
<field name="arch" type="xml">
<kanban class="oe_background_grey o_kanban_dashboard o_shift_kanban">
<field name="color"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click ">
<div class="o_dropdown_kanban dropdown">
<a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
<span class="fa fa-bars fa-lg"/>
</a>
<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
<t t-if="widget.editable"><li><a type="edit">Edit</a></li></t>
<t t-if="widget.deletable"><li><a type="delete">Delete</a></li></t>
<li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
</ul>
</div>
<div class="oe_kanban_content">
<div class="row">
<div class="o_primary style_shift">
<div class="text-center"><strong><field name="name"/></strong></div>
</div>
</div>
</div>
<div class="oe_kanban_details">
<strong>
<div class="text-center">
<span t-if="record.hr_department.value">[<field name="hr_department"/>]</span>
</div>
</strong>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="resource.action_resource_calendar_form" model="ir.actions.act_window">
<field name="name">Shift Working Time</field>
<field name="res_model">resource.calendar</field>
<field name="view_type">form</field>
<field name="view_mode">kanban,tree,form</field>
<field name="view_id" eval="False"/>
<field name="search_view_id" ref="resource.view_resource_calendar_search"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Define working hours and time table that could be scheduled to your project members
</p>
</field>
</record>
<menuitem name="Shifts" id="hr_employee_shift.menu_shift" parent="hr.menu_human_resources_configuration"
action="resource.action_resource_calendar_form"/>
</data>
</odoo>

50
hr_employee_shift/views/hr_generate_shift_view.xml

@ -1,50 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- explicit wizard view definition -->
<record model="ir.ui.view" id="hr_employee_shift.generate_schedule_form">
<field name="name">hr_employee_shift_generate_schedule form</field>
<field name="model">hr.shift.generate</field>
<field name="arch" type="xml">
<form create="false" edit="false">
<sheet>
<group>
<group>
<field name="hr_department"/>
</group>
</group>
<group>
<group>
<field name="start_date"/>
</group>
<group>
<field name="end_date"/>
</group>
</group>
<footer>
<button string="Generate" name="action_schedule_shift" type="object"
class="oe_highlight"/>
<button string="Cancel" special="cancel"
class="oe_link"/>
</footer>
</sheet>
</form>
</field>
</record>
<!-- actions opening views on models -->
<record model="ir.actions.act_window" id="hr_employee_shift.generate_schedule_action_window">
<field name="name">Employee Shift</field>
<field name="res_model">hr.shift.generate</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<!-- menu item -->
<menuitem name="Employee Shift" id="menu_shift_schedule_generate_id_menu" parent="hr.menu_hr_root" action="hr_employee_shift.generate_schedule_action_window" groups="hr.group_hr_manager"/>
<menuitem name="Generate Schedule" id="hr_employee_shift.menu_shift_schedule_generate_id" parent="menu_shift_schedule_generate_id_menu" action="hr_employee_shift.generate_schedule_action_window" groups="hr.group_hr_manager"/>
</data>
</odoo>

9
hr_employee_shift/views/templates.xml

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="assets_backend" name="project assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<link rel="stylesheet" href="/hr_employee_shift/static/src/css/shift_dashboard.css"/>
<link rel="stylesheet" href="/hr_employee_shift/static/src/less/shift_dashboard.less"/>
</xpath>
</template>
</odoo>

39
hr_employee_transfer/README.rst

@ -1,39 +0,0 @@
Open HRMS Employee Transfer v10
===============================
Employee transfer between branches.
Depends
=======
[hr] addon Odoo
Tech
====
* [Python] - Models
* [XML] - Odoo views
Installation
============
- www.odoo.com/documentation/10.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.

2
hr_employee_transfer/__init__.py

@ -1,2 +0,0 @@
# -*- coding: utf-8 -*-
from . import models

45
hr_employee_transfer/__manifest__.py

@ -1,45 +0,0 @@
# -*- 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': '10.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',
}

6
hr_employee_transfer/docs/RELEASE_NOTES.md

@ -1,6 +0,0 @@
## Module hr_employee_transfer
#### 30.03.2018
#### Version 10.0.1.0.0
##### ADD
- Initial commit for OpenHrms Project

4
hr_employee_transfer/models/__init__.py

@ -1,4 +0,0 @@
# -*- coding: utf-8 -*-
from . import employee_transfer
from . import hr_contract
from . import res_company

90
hr_employee_transfer/models/employee_transfer.py

@ -1,90 +0,0 @@
# -*- coding: utf-8 -*-
from datetime import date
from odoo import models, fields, api, _
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
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="/")
employee_id = fields.Many2one('hr.employee', string='Employee', required=True)
date = fields.Date(string='Date', default=fields.Date.today())
branch = fields.Many2one('transfer.company', string='Transfer Branch', requried=True, copy=False)
state = fields.Selection(
[('draft', 'New'), ('cancel', 'Cancelled'), ('transfer', 'Transferred'), ('done', 'Post')],
string='Status', readonly=True, copy=False, default='draft')
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 = {}
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):
print self.employee_id.company_id.id
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'

16
hr_employee_transfer/models/hr_contract.py

@ -1,16 +0,0 @@
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

19
hr_employee_transfer/models/hr_employee.py

@ -1,19 +0,0 @@
# -*- 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')

40
hr_employee_transfer/models/res_company.py

@ -1,40 +0,0 @@
# -*- 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

18
hr_employee_transfer/security/branch_security.xml

@ -1,18 +0,0 @@
<?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>

5
hr_employee_transfer/security/ir.model.access.csv

@ -1,5 +0,0 @@
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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_employee_transfer employee.transfer model_employee_transfer hr.group_hr_user 1 1 0 0
3 access_employee_transfer_manager employee.transfer.manager model_employee_transfer hr.group_hr_manager 1 1 1 0
4 access_employee_transfer_company employee.company.manager base.model_res_company hr.group_hr_manager 1 1 1 0
5 access_transfer_company transfer.company.manager model_transfer_company hr.group_hr_manager 1 1 1 0

BIN
hr_employee_transfer/static/description/HRMS-BUTTON.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

BIN
hr_employee_transfer/static/description/banner.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

BIN
hr_employee_transfer/static/description/create_a_transfer.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

BIN
hr_employee_transfer/static/description/create_contract.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

BIN
hr_employee_transfer/static/description/cybro-service.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 KiB

BIN
hr_employee_transfer/static/description/cybro_logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

BIN
hr_employee_transfer/static/description/icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

103
hr_employee_transfer/static/description/index.html

@ -1,103 +0,0 @@
<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;"> &#9745; </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
</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'>
&#x261B; Create a Employee Transfer.<br>
&#x261B; Select the Transfer Company.<br>
&#x261B; 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'>
&#x261B; 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 oe_dark">
<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"><i
class="fa fa-envelope"></i> Email </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="https://www.cybrosys.com/contact/"><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.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<br>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
</div>
</section>

80
hr_employee_transfer/views/employee_transfer.xml

@ -1,80 +0,0 @@
<?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>

17
hr_employee_updation/README.md

@ -1,17 +0,0 @@
Open HRMS Employee Info
-----------------------
Supporting Addon for Open HRMS, Added Advanced Fields On Employee Master.
Connect with experts
--------------------
If you have any question/queries/additional works on OpenHRMS or this module, You can drop an email directly to Cybrosys.
Contacts
--------
info - info@cybrosys.com
Jesni Banu - jesni@cybrosys.in
Website:
https://www.openhrms.com
https://www.cybrosys.com

25
hr_employee_updation/__init__.py

@ -1,25 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Jesni Banu (<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/>.
#
###################################################################################
from . import models

44
hr_employee_updation/__manifest__.py

@ -1,44 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Jesni Banu (<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 Employee Info',
'version': '10.0.1.1.0',
'summary': """Adding Advanced Fields In Employee Master""",
'description': 'This module helps you to add more information in employee records.',
'category': 'Generic Modules/Human Resources',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'website': "https://www.openhrms.com",
'depends': ['base', 'hr', 'mail', 'hr_gamification'],
'data': [
'security/ir.model.access.csv',
'views/hr_employee_view.xml',
'views/hr_notification.xml',
],
'demo': [],
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

11
hr_employee_updation/doc/RELEASE_NOTES.md

@ -1,11 +0,0 @@
## Module <hr_employee_updation>
#### 07.04.2018
#### Version 10.0.1.1.0
##### CHG
- Index updated.
#### 30.03.2018
#### Version 10.0.1.0.0
##### ADD
- Initial commit for Open HRMS Project

27
hr_employee_updation/models/__init__.py

@ -1,27 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Jesni Banu (<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/>.
#
###################################################################################
from . import hr_employee

107
hr_employee_updation/models/hr_employee.py

@ -1,107 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Jesni Banu (<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/>.
#
###################################################################################
from datetime import datetime, timedelta
from odoo import models, fields, _
GENDER_SELECTION = [('male', 'Male'),
('female', 'Female'),
('other', 'Other')]
class HrEmployeeContractName(models.Model):
"""This class is to add emergency contact table"""
_name = 'hr.emergency.contact'
_description = 'HR Emergency Contact'
number = fields.Char(string='Number', help='Contact Number')
relation = fields.Char(string='Contact', help='Relation with employee')
employee_obj = fields.Many2one('hr.employee', invisible=1)
class HrEmployeeFamilyInfo(models.Model):
"""Table for keep employee family information"""
_name = 'hr.employee.family'
_description = 'HR Employee Family'
member_name = fields.Char(string='Name', related='employee_ref.name', store=True)
employee_ref = fields.Many2one(string="Is Employee",
help='If family member currently is an employee of same company, '
'then please tick this field',
comodel_name='hr.employee')
employee_id = fields.Many2one(string="Employee", help='Select corresponding Employee', comodel_name='hr.employee',
invisible=1)
relation = fields.Selection([('father', 'Father'),
('mother', 'Mother'),
('daughter', 'Daughter'),
('son', 'Son'),
('wife', 'Wife')], string='Relationship', help='Relation with employee')
member_contact = fields.Char(string='Contact No', related='employee_ref.personal_mobile', store=True)
class HrEmployee(models.Model):
_inherit = 'hr.employee'
def mail_reminder(self):
now = datetime.now() + timedelta(days=1)
date_now = now.date()
match = self.search([])
for i in match:
if i.id_expiry_date:
exp_date = fields.Date.from_string(i.id_expiry_date) - timedelta(days=14)
if date_now >= exp_date:
mail_content = " Hello " + i.name + ",<br>Your ID " + i.identification_id + "is going to expire on " + \
str(i.id_expiry_date) + ". Please renew it before expiry date"
main_content = {
'subject': _('ID-%s Expired On %s') % (i.identification_id, i.id_expiry_date),
'author_id': self.env.user.partner_id.id,
'body_html': mail_content,
'email_to': i.work_email,
}
self.env['mail.mail'].create(main_content).send()
match1 = self.search([])
for i in match1:
if i.passport_expiry_date:
exp_date1 = fields.Date.from_string(i.passport_expiry_date) - timedelta(days=180)
if date_now >= exp_date1:
mail_content = " Hello " + i.name + ",<br>Your Passport " + i.passport_id + "is going to expire on " + \
str(i.passport_expiry_date) + ". Please renew it before expiry date"
main_content = {
'subject': _('Passport-%s Expired On %s') % (i.passport_id, i.passport_expiry_date),
'author_id': self.env.user.partner_id.id,
'body_html': mail_content,
'email_to': i.work_email,
}
self.env['mail.mail'].create(main_content).send()
personal_mobile = fields.Char(string='Mobile', related='address_home_id.mobile', store=True)
emergency_contact = fields.One2many('hr.emergency.contact', 'employee_obj', string='Emergency Contact')
joining_date = fields.Date(string='Joining Date')
id_expiry_date = fields.Date(string='Expiry Date', help='Expiry date of Identification ID')
passport_expiry_date = fields.Date(string='Expiry Date', help='Expiry date of Passport ID')
id_attachment_id = fields.Many2many('ir.attachment', 'id_attachment_rel', 'id_ref', 'attach_ref',
string="Attachment", help='You can attach the copy of your Id')
passport_attachment_id = fields.Many2many('ir.attachment', 'passport_attachment_rel', 'passport_ref', 'attach_ref1',
string="Attachment",
help='You can attach the copy of Passport')
fam_ids = fields.One2many('hr.employee.family', 'employee_id', string='Family', help='Family Information')

7
hr_employee_updation/security/ir.model.access.csv

@ -1,7 +0,0 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_hr_employee_family_employee","hr.employee.family_employee","model_hr_employee_family","base.group_user",1,0,0,0
"access_hr_employee_family_manager","hr.employee.family_manager","model_hr_employee_family","hr.group_hr_manager",1,1,1,1
"access_hr_employee_family_user","hr.employee.family_user","model_hr_employee_family","hr.group_hr_user",1,1,1,1
"access_hr_employee_emergency_contact","hr.emergency.contact","model_hr_emergency_contact","base.group_user",1,0,0,0
"access_hr_employee_emergency_contact_manager","hr.emergency.contact","model_hr_emergency_contact","hr.group_hr_manager",1,1,1,1
"access_hr_employee_emergency_contact_user","hr.emergency.contact","model_hr_emergency_contact","hr.group_hr_user",1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_hr_employee_family_employee hr.employee.family_employee model_hr_employee_family base.group_user 1 0 0 0
3 access_hr_employee_family_manager hr.employee.family_manager model_hr_employee_family hr.group_hr_manager 1 1 1 1
4 access_hr_employee_family_user hr.employee.family_user model_hr_employee_family hr.group_hr_user 1 1 1 1
5 access_hr_employee_emergency_contact hr.emergency.contact model_hr_emergency_contact base.group_user 1 0 0 0
6 access_hr_employee_emergency_contact_manager hr.emergency.contact model_hr_emergency_contact hr.group_hr_manager 1 1 1 1
7 access_hr_employee_emergency_contact_user hr.emergency.contact model_hr_emergency_contact hr.group_hr_user 1 1 1 1

BIN
hr_employee_updation/static/description/HRMS-BUTTON.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

BIN
hr_employee_updation/static/description/banner.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

BIN
hr_employee_updation/static/description/cybro-service.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 KiB

BIN
hr_employee_updation/static/description/cybro_logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

BIN
hr_employee_updation/static/description/emergency_contact.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

BIN
hr_employee_updation/static/description/family_info.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

BIN
hr_employee_updation/static/description/icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

127
hr_employee_updation/static/description/index.html

@ -1,127 +0,0 @@
<section class="oe_container">
<div class="oe_row">
<h2 class="oe_slogan"><a href="https://www.openhrms.com">Open HRMS</a></h2>
<h3 class="oe_slogan">Most advanced open source HR management software</h3>
</div>
</section>
<section class="oe_container oe_dark">
<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 class="oe_demo_footer oe_centeralign">Online Demo</div>
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan">Open HRMS Employee Info</h2>
<h3 class="oe_slogan">Added Advance Fields On Employee Master</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;"> &#9745; </span> Added family information.<br/>
<span style="color:green;"> &#9745; </span> Added joining date and contact info.<br/>
<span style="color:green;"> &#9745; </span> Added passport and id expiry date and attachments.<br/>
<span style="color:green;"> &#9745; </span> Added expiry notification for passport and id documents.<br/>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<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;">
This module added some advanced features on Employee master.
Such as family info, joining date, passport and Id expiry date.
This module also sends expiry notification for passport and id to corresponding employees.
</p>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h4 class="oe_slogan">Identification ID & Passport ID</h4>
<div class="oe_span12">
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="personal_info.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h4 class="oe_slogan">Emergency Contact Number</h4>
<div class="oe_span12">
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="emergency_contact.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h4 class="oe_slogan">Family Information</h4>
<div class="oe_span12">
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="family_info.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h4 class="oe_slogan">Joining Date</h4>
<div class="oe_span12">
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="joining_date.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>
<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"><i
class="fa fa-envelope"></i> Email </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="https://www.cybrosys.com/contact/"><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.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<br>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
</div>
</section>

BIN
hr_employee_updation/static/description/joining_date.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

BIN
hr_employee_updation/static/description/personal_info.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

84
hr_employee_updation/views/hr_employee_view.xml

@ -1,84 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<menuitem id="employee_report_menu" name="Reports" parent="hr.menu_hr_root" sequence="30"
groups="hr.group_hr_manager,hr.group_hr_user"/>
<menuitem id="menu_hr_management" name="HR Management" parent="hr.menu_hr_root" sequence="5"
groups="hr.group_hr_manager,hr.group_hr_user"/>
<record model="ir.ui.view" id="hr_employee_inherit_form_view">
<field name="name">hr.employee.form.view</field>
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.view_employee_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='personal_information']/group" position="inside">
<group name="emergency_contact" colspan="4" string="Emergency Contact">
<field name="emergency_contact">
<tree editable="bottom">
<field name="number"/>
<field name="relation"/>
</tree>
</field>
</group>
</xpath>
<field name="address_home_id" position="after">
<field name="personal_mobile"/>
</field>
<field name="user_id" position="after">
<field name="joining_date"/>
</field>
<field name="identification_id" position="replace"/>
<field name="passport_id" position="replace"/>
<xpath expr="//page[@name='personal_information']/group/group[1]" position="after">
<group name="identification_id" string="Identification ID">
<field name="identification_id"/>
<field name="id_expiry_date" groups="hr.group_hr_user" attrs="{'invisible': [('identification_id', 'in', [None,False])]}"/>
<field name="id_attachment_id" groups="hr.group_hr_user" widget="many2many_binary" class="oe_inline" attrs="{'invisible': [('identification_id', 'in', [None,False])]}"/>
</group>
<group name="passport_id" string="Passport ID">
<field name="passport_id"/>
<field name="passport_expiry_date" groups="hr.group_hr_user" attrs="{'invisible': [('passport_id', 'in', [None,False])]}"/>
<field name="passport_attachment_id" groups="hr.group_hr_user" widget="many2many_binary" class="oe_inline" attrs="{'invisible': [('passport_id', 'in', [None,False])]}"/>
</group>
</xpath>
<page name="hr_settings" position="after">
<page name="family_info" string="Family Information" groups="hr.group_hr_user">
<group string="Family">
<field name="fam_ids" nolabel="1">
<tree editable="bottom">
<field name="member_name"/>
<field name="relation"/>
<field name="member_contact"/>
</tree>
</field>
</group>
</page>
</page>
</field>
</record>
<record id="hr_gamification.hr_hr_employee_view_form" model="ir.ui.view">
<field name="name">hr.employee.view.form.inherit</field>
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.view_employee_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='public']" position="after">
<page string="Received Badges" attrs="{'invisible': [('user_id', '=', False)]}">
<div name="badges" groups="hr.group_hr_user">
<field name="has_badges" invisible="1"/>
<button string="Grant a Badge" type="action" name="%(hr_gamification.action_reward_wizard)d"/> to reward this employee for a good action
<div class="oe_view_nocontent" attrs="{'invisible': [('has_badges', '=', True)]}">
<p class="oe_view_nocontent_create">
Click to grant this employee his first badge
</p><p class="oe_grey">
Badges are rewards of good work. Give them to people you believe deserve it.
</p>
</div>
</div>
<field name="badge_ids" widget="many2many_kanban" />
</page>
</xpath>
</field>
</record>
</data>
</odoo>

15
hr_employee_updation/views/hr_notification.xml

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record model="ir.cron" id="employee_data_reminder">
<field name="name">HR Employee Data Expiration</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
<field name="model" eval="'hr.employee'"/>
<field name="function" eval="'mail_reminder'"/>
<field name="args" eval="'()'" />
</record>
</data>
</odoo>

39
hr_insurance/README.rst

@ -1,39 +0,0 @@
OHRMS Employee Insurance Management v10
=======================================
Employee insurance management for Open HRMS.
Depends
=======
[hr] addon Odoo
Tech
====
* [Python] - Models
* [XML] - Odoo views
Installation
============
- www.odoo.com/documentation/10.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: Treesa Maria Jude @ cybrosys, treesa@cybrosys.in
Maintainer
----------
This module is maintained by Cybrosys Technologies.
For support and more information, please visit https://www.cybrosys.com.

6
hr_insurance/RELEASE_NOTES.md

@ -1,6 +0,0 @@
## Module hr_insurance
#### 30.03.2018
#### Version 10.0.1.0.0
##### ADD
- Initial commit for OpenHrms Project

24
hr_insurance/__init__.py

@ -1,24 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Treesa Maria Jude (<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/>.
#
###################################################################################
from . import models

49
hr_insurance/__manifest__.py

@ -1,49 +0,0 @@
# -*- 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: Treesa Maria Jude (<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 Employee Insurance Management',
'version': '10.0.1.0.0',
'summary': """Employee Insurance Management for Open HRMS.""",
'description': """Manages insurance amounts for employees to be deducted from salary""",
'category': 'Human Resources',
'author': 'Cybrosys Techno solutions',
'maintainer': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'website': 'https://www.openhrms.com',
'depends': [
'base', 'hr', 'hr_payroll',
],
'data': [
'security/ir.model.access.csv',
'security/hr_insurance_security.xml',
'views/employee_insurance_view.xml',
'views/insurance_salary_stucture.xml',
'views/policy_management.xml',
],
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

25
hr_insurance/models/__init__.py

@ -1,25 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Treesa Maria Jude (<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/>.
#
###################################################################################
from . import policy_details
from . import employee_insurance

121
hr_insurance/models/employee_insurance.py

@ -1,121 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Treesa Maria Jude (<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/>.
#
###################################################################################
import time
from datetime import datetime
from dateutil import relativedelta
from odoo import models, fields, api, _
class EmployeeInsurance(models.Model):
_name = 'hr.insurance'
_description = 'HR Insurance'
_rec_name = 'employee_id'
employee_id = fields.Many2one('hr.employee', string='Employee', required=True)
policy_id = fields.Many2one('insurance.policy', string='Policy', required=True)
amount = fields.Float(string='Policy Amount', required=True)
sum_insured = fields.Float(string="Sum Insured", required=True)
policy_coverage = fields.Selection([('monthly', 'Monthly'), ('yearly', 'Yearly')],
required=True, default='monthly',
string='Policy Coverage',)
date_from = fields.Date(string='Date From',
default=time.strftime('%Y-%m-%d'), readonly=True)
date_to = fields.Date(string='Date To', readonly=True,
default=str(datetime.now() + relativedelta.relativedelta(months=+1, day=1, days=-1))[:10])
state = fields.Selection([('active', 'Active'),
('expired', 'Expired'), ],
default='active', string="State",compute='get_status')
company_id = fields.Many2one('res.company', string='Company', required=True,
default=lambda self: self.env.user.company_id)
def get_status(self):
current_datetime = datetime.now()
for i in self:
x = datetime.strptime(i.date_from, '%Y-%m-%d')
y = datetime.strptime(i.date_to, '%Y-%m-%d')
print x
print current_datetime
print y
if x <= current_datetime and y >= current_datetime:
i.state = 'active'
else:
i.state = 'expired'
@api.constrains('policy_coverage')
@api.onchange('policy_coverage')
def get_policy_period(self):
if self.policy_coverage == 'monthly':
self.date_to = str(datetime.now() + relativedelta.relativedelta(months=+1, day=1, days=-1))[:10]
if self.policy_coverage == 'yearly':
self.date_to = str(datetime.now() + relativedelta.relativedelta(months=+12))[:10]
class HrInsurance(models.Model):
_inherit = 'hr.employee'
insurance_percentage = fields.Float(string="Company Percentage ")
deduced_amount_per_month = fields.Float(string="Salary deduced per month", compute="get_deduced_amount")
deduced_amount_per_year = fields.Float(string="Salary deduced per year", compute="get_deduced_amount")
insurance = fields.One2many('hr.insurance', 'employee_id', string="Insurance",
domain=[('state', '=', 'active')])
def get_deduced_amount(self):
current_datetime = datetime.now()
for emp in self:
ins_amount = 0
for ins in emp.insurance:
x = datetime.strptime(ins.date_from, '%Y-%m-%d')
y = datetime.strptime(ins.date_to, '%Y-%m-%d')
if x < current_datetime and y > current_datetime:
if ins.policy_coverage == 'monthly':
ins_amount = ins_amount + (ins.amount*12)
else:
ins_amount = ins_amount + ins.amount
emp.deduced_amount_per_year = ins_amount-((ins_amount*emp.insurance_percentage)/100)
emp.deduced_amount_per_month = emp.deduced_amount_per_year/12
class InsuranceRuleInput(models.Model):
_inherit = 'hr.payslip'
# insurance_amount = fields.Float("Insurance amount", compute='get_inputs')
def get_inputs(self, contract_ids, date_from, date_to):
"""This Compute the other inputs to employee payslip.
"""
res = super(InsuranceRuleInput, self).get_inputs(contract_ids, date_from, date_to)
contract_obj = self.env['hr.contract']
emp_id = contract_obj.browse(contract_ids[0]).employee_id
for result in res:
if emp_id.deduced_amount_per_month != 0 and result.get('code') == 'INSUR':
result['amount'] = emp_id.deduced_amount_per_month
return res

33
hr_insurance/models/policy_details.py

@ -1,33 +0,0 @@
# -*- coding: utf-8 -*-
###################################################################################
# A part of OpenHRMS Project <https://www.openhrms.com>
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>).
# Author: Treesa Maria Jude (<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/>.
#
###################################################################################
from odoo import models, fields, api
class InsurancePolicy(models.Model):
_name = 'insurance.policy'
name = fields.Char(string='Name', required=True)
note_field = fields.Html(string='Comment')
company_id = fields.Many2one('res.company', string='Company', required=True,
default=lambda self: self.env.user.company_id)

16
hr_insurance/security/hr_insurance_security.xml

@ -1,16 +0,0 @@
<?xml version="1.0" ?>
<odoo>
<record id="property_rule_hr_shift" model="ir.rule">
<field name="name">Hr Insurancy Company</field>
<field name="model_id" ref="model_hr_insurance"/>
<field eval="True" name="global"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
<record id="property_rule_hr_shift_generate" model="ir.rule">
<field name="name">Hr Insurance Policy company</field>
<field name="model_id" ref="model_insurance_policy"/>
<field eval="True" name="global"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
</odoo>

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save