Browse Source

[ADD] Initial Commit

pull/124/head
Ajmalcybrosys 6 years ago
parent
commit
82a6c8fbd6
  1. 30
      automatic_payroll/README.rst
  2. 1
      automatic_payroll/__init__.py
  3. 18
      automatic_payroll/__manifest__.py
  4. 6
      automatic_payroll/doc/RELEASE_NOTES.md
  5. 2
      automatic_payroll/models/__init__.py
  6. 126
      automatic_payroll/models/auto_generate_payslips.py
  7. 36
      automatic_payroll/models/res_config_settings.py
  8. BIN
      automatic_payroll/static/description/automatic-payroll.gif
  9. BIN
      automatic_payroll/static/description/automatic_payroll-1.png
  10. BIN
      automatic_payroll/static/description/automatic_payroll-2.png
  11. BIN
      automatic_payroll/static/description/automatic_payroll-3.png
  12. BIN
      automatic_payroll/static/description/automatic_payroll-4.png
  13. BIN
      automatic_payroll/static/description/automatic_payroll-5.png
  14. BIN
      automatic_payroll/static/description/automatic_payroll-6.png
  15. BIN
      automatic_payroll/static/description/banner.png
  16. BIN
      automatic_payroll/static/description/checked.png
  17. BIN
      automatic_payroll/static/description/employee_orientation.jpeg
  18. BIN
      automatic_payroll/static/description/hr_employee_transfer.jpeg
  19. BIN
      automatic_payroll/static/description/hr_payslip_monthly_report.jpeg
  20. BIN
      automatic_payroll/static/description/icon.png
  21. 452
      automatic_payroll/static/description/index.html
  22. BIN
      automatic_payroll/static/description/oh_appraisal.jpeg
  23. BIN
      automatic_payroll/static/description/send_email_payslip.jpeg
  24. BIN
      automatic_payroll/static/description/timesheet_payroll.jpeg
  25. 39
      automatic_payroll/views/res_config_settings_view.xml
  26. 13
      automatic_payroll/views/schedule_cron.xml

30
automatic_payroll/README.rst

@ -0,0 +1,30 @@
Automatic Payroll
=================
* Generate payslip batches automatically.
* The feature works with the help of scheduler.
Tech
====
* [Python] - Models
* [XML] - Odoo views
Installation
============
- www.odoo.com/documentation/12.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.
Developer: Varsha Vivek, odoo@cybrosys.com
Maintainer
----------
This module is maintained by Cybrosys Technologies.
For support and more information, please visit https://www.cybrosys.com.
Contacts
========
* Cybrosys Technologies <https://www.cybrosys.com>

1
automatic_payroll/__init__.py

@ -0,0 +1 @@
from . import models

18
automatic_payroll/__manifest__.py

@ -0,0 +1,18 @@
{
'name': 'Automatic Payroll',
'version': '12.0.1.0.0',
'category': 'Generic Modules/Human Resources',
'description': """Generate payslips automatically""",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
'maintainer': 'Cybrosys Techno Solutions',
'depends': ['base', 'hr_payroll'],
'data': ['views/schedule_cron.xml',
'views/res_config_settings_view.xml'],
'images': ['static/description/banner.png'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

6
automatic_payroll/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <automatic_payroll>
#### 27.06.2019
#### Version 12.0.1.0.0
##### ADD
- Initial Commit

2
automatic_payroll/models/__init__.py

@ -0,0 +1,2 @@
from . import auto_generate_payslips
from . import res_config_settings

126
automatic_payroll/models/auto_generate_payslips.py

@ -0,0 +1,126 @@
# -*- coding: utf-8 -*-
from datetime import date, datetime
from dateutil.relativedelta import relativedelta
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class HrPayslipRunCron(models.Model):
"""
Automate payslip generation
1.Month First
2.Specific Date
3.Month End
"""
_inherit = 'hr.payslip.run'
@api.onchange('generate_payslip')
def check(self):
"""Check the options and call the corresponding methods"""
if self.env['ir.config_parameter'].sudo().get_param('generate_payslip'):
if self.env['ir.config_parameter'].sudo().get_param(
'option', 'first') == 'first':
self.month_first()
elif self.env['ir.config_parameter'].sudo().get_param(
'option', 'specific') == 'specific':
self.specific_date()
elif self.env['ir.config_parameter'].sudo().get_param(
'option', 'end') == 'end':
self.month_end()
else:
raise UserError(_("Enable configuration settings"))
@api.multi
def month_first(self):
"""Method for automate month first option"""
today = fields.Date.today()
day = today.day
if day == 1:
self.generate_payslips()
else:
raise UserError(_("Today is not month first"))
pass
@api.multi
def month_end(self):
"""Method for automate month end option"""
today = fields.Date.today()
day_today = today.day
last_date = today + relativedelta(day=1, months=+1, days=-1)
last_day = last_date.day
if day_today == last_day:
self.generate_payslips()
else:
raise UserError(_("Today is not month end"))
pass
@api.multi
def specific_date(self):
"""Method for automate specific day option"""
val = int(self.env['ir.config_parameter'].sudo().get_param('generate_day'))
today = fields.Date.today()
day = today.day
if day == val:
self.generate_payslips()
else:
raise UserError(_("Can't generate payslips today"))
pass
@api.multi
def generate_payslips(self):
"""Method for generate payslip batches and payslips,
before that you must assign ongoing contracts for employees"""
batch_id = self.create([{
'name': 'Payslip Batch For ' + date.today().strftime('%B')
+ ' ' + str(date.today().year),
'date_start': fields.Date.to_string(date.today().replace(day=1)),
'date_end': fields.Date.to_string(
(datetime.now() + relativedelta(months=+1, day=1, days=-1)).date())
}])
generate_payslip = self.env['hr.payslip.employees']
contract_ids = self.env['hr.contract'].search([('state', 'in', ['open', 'pending'])])
lst = []
employee_ids = []
for line in contract_ids:
employee_ids.append(line.employee_id)
lst.append({
'name': line.employee_id.id,
'work_phone': line.employee_id.work_phone or None,
'work_email': line.employee_id.work_email or None,
'department_id': line.employee_id.department_id or None,
'job_id': line.employee_id.job_id or None,
'parent_id': line.employee_id.parent_id or None,
})
generate_payslip.create([{
'employee_ids': lst
}])
payslips = self.env['hr.payslip']
[run_data] = batch_id.read(
['date_start', 'date_end', 'credit_note'])
from_date = run_data.get('date_start')
to_date = run_data.get('date_end')
if not employee_ids:
raise UserError(_("You must select employee(s) to generate payslip(s)."))
for employee in employee_ids:
slip_data = self.env['hr.payslip'].onchange_employee_id(from_date, to_date, employee.id,
contract_id=False)
res = {
'employee_id': employee.id,
'name': slip_data['value'].get('name'),
'struct_id': slip_data['value'].get('struct_id'),
'contract_id': slip_data['value'].get('contract_id'),
'payslip_run_id': batch_id.id,
'input_line_ids': [(0, 0, x) for x in slip_data['value'].get('input_line_ids')],
'worked_days_line_ids': [
(0, 0, x) for x in slip_data['value'].get('worked_days_line_ids')],
'date_from': from_date,
'date_to': to_date,
'credit_note': run_data.get('credit_note'),
'company_id': employee.company_id.id,
}
payslips += self.env['hr.payslip'].create(res)
payslips.compute_sheet()
return {'type': 'ir.actions.act_window_close'}

36
automatic_payroll/models/res_config_settings.py

@ -0,0 +1,36 @@
from odoo import api, fields, models
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
generate_payslip = fields.Boolean(help="Automatic generation of payslip batches"
" and payslips using cron job (Monthly)")
option = fields.Selection([
('first', 'Month First'),
('specific', 'Specific date'),
('end', 'Month End'),
], string='Option', default='first', help='Option to select the date to generate payslips')
generate_day = fields.Integer(string="Day", default=1,
help="payslip generated day in a month")
@api.model
def get_values(self):
"""get values from the fields"""
res = super(ResConfigSettings, self).get_values()
res.update(
generate_payslip=self.env['ir.config_parameter'].sudo().get_param('generate_payslip'),
generate_day=int(self.env['ir.config_parameter'].sudo().get_param('generate_day') or 1),
option=self.env['ir.config_parameter'].sudo().get_param('option') or 'first'
)
return res
@api.multi
def set_values(self):
"""Set values in the fields"""
super(ResConfigSettings, self).set_values()
self.env['ir.config_parameter'].sudo().set_param('generate_payslip', self.generate_payslip)
self.env['ir.config_parameter'].sudo().set_param('generate_day', int(self.generate_day))
self.env['ir.config_parameter'].sudo().set_param("option", self.option)

BIN
automatic_payroll/static/description/automatic-payroll.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

BIN
automatic_payroll/static/description/automatic_payroll-1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
automatic_payroll/static/description/automatic_payroll-2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
automatic_payroll/static/description/automatic_payroll-3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
automatic_payroll/static/description/automatic_payroll-4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
automatic_payroll/static/description/automatic_payroll-5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
automatic_payroll/static/description/automatic_payroll-6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
automatic_payroll/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
automatic_payroll/static/description/checked.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
automatic_payroll/static/description/employee_orientation.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
automatic_payroll/static/description/hr_employee_transfer.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
automatic_payroll/static/description/hr_payslip_monthly_report.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

BIN
automatic_payroll/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

452
automatic_payroll/static/description/index.html

@ -0,0 +1,452 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap 101 Template</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="css/font-awesome.min.css">
</head>
<body>
<div class="row" style="margin: 0;padding: 2rem 3rem 4rem;position: relative;color: #000;background-position: center;background: #f9f9f9;">
<div class="col-md-7 col-sm-12 col-xs-12" style="padding: 0px">
<div style=" margin: 0 0 0px;padding: 20px 0 10;font-size: 23px;line-height: 35px;font-weight: 400;color: #000;border-top: 1px solid rgba(255,255,255,0.1);border-bottom: 1px solid rgba(255,255,255,0.11);text-align: left;">
<h1 style="font-size: 39px;font-weight: 600;margin: 0px !important;">Automatic Payroll</h1>
<h3 style="font-size: 21px;margin-top: 8px;position: relative;">Generate payslip batches automatically.</h3>
</div>
<h2 style="font-weight: 600;font-size: 1.8rem;margin-top: 15px;">Key Highlights</h2>
<ul style=" padding: 0 1px; list-style: none; ">
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><img src="checked.png" style=" width: 22px; margin-right: 6px; " alt="check"> Automatic payroll generation for Odoo12 community edition.</li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><img src="checked.png" style=" width: 22px; margin-right: 6px; " alt="check"> Generate payslip batches via adding all active employees.</li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><img src="checked.png" style=" width: 22px; margin-right: 6px; " alt="check"> The feature works with the help of scheduler.</li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><img src="checked.png" style=" width: 22px; margin-right: 6px; " alt="check"> Schedule the activity for month first,month end or specific day. </li>
<div style=" text-align: left; ">
<a href="#video" style="display: -webkit-inline-box;display: -webkit-inline-flex;display: -ms-inline-flexbox; display: inline-flex;-webkit-box-align: center;-webkit-align-items: center;-ms-flex-align: center;align-items: center;-webkit-box-pack: center; -webkit-justify-content: center;-ms-flex-pack: center;justify-content: center;padding: 0 30px;font-size: 15px;height: 56px;text-transform: uppercase;border: 1px solid #f21692;color: #000;border-radius: 50px;text-decoration: none;letter-spacing: 1px;"><i class="fa fa-eye" aria-hidden="true" style="margin-right: 5px;"></i> Video Demo</a>
</div>
</div>
<div class="col-md-5 col-sm-12 col-xs-12">
<img src="automatic-payroll.gif" class="img-responsive" alt="">
</div>
</div>
<div>
<div class="row" style=" margin: 0; padding: 2rem 3rem 1rem; ">
<h2 style="font-weight: 600;text-align: center;width: 100%;">Overview</h2>
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
<h3 class="oe_slogan" style="text-align: center;font-size: 21px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 31px;font-weight: 500;letter-spacing: .5px;margin-bottom: 21px;">
<strong>The module brings you an automatic payroll generation function further improvising the standard Odoo HR Payroll application. The module provisions to generate payslip batches automatically once in a month.
<p style="font-size:20px;">The feature works with the help of scheduler.</p></strong>
<br/>
</div>
<section class="oe_container" style="padding: 2rem 3rem 1rem;background: #f9f9f9;">
<div class="panel with-nav-tabs panel-default" style=" border: none;background-color: #f9f9f9; ">
<div class="panel-heading" style=" border: none;background-color: #f9f9f9;">
<ul class="nav nav-tabs" style="display: flex;justify-content: center">
<li class="active"><a href="#tab1default" data-toggle="tab" style="font-weight: 600;font-size: 20px;padding: 10px 20px;color: #000;">Features</a></li>
<li><a href="#tab2default" data-toggle="tab" style="font-weight: 600;font-size: 20px;padding: 10px 20px;color: #000;">Screenshots</a></li>
</ul>
</div>
<div class="panel-body" style=" background: #fff; ">
<div class="tab-content">
<div class="tab-pane fade active show" id="tab1default">
<h3 class="text-center alert" style="font-weight:500;color: #091E42;background: #f9f9f9;text-align: left;border-radius: 0;" >Automatic Payroll</h3>
<ul>
<li class="mb8" style="font-family: Roboto;color: #000000;list-style-type: square;font-size: 19px;line-height: 34px;">
Available in Odoo 12.0 community edition.
</li>
<li class="mb8" style="font-family: Roboto;color: #000000;list-style-type: square;font-size: 19px;line-height: 34px;">
The feature works with the help of scheduler.
</li>
<li class="mb8" style="font-family: Roboto;color: #000000;list-style-type: square;font-size: 19px;line-height: 34px;">
Scheduler would check the options in the configuration settings and automatically generate payslip batches via adding all active employees possessing active contracts.
</li>
<li class="mb8" style="font-family: Roboto;color: #000000;list-style-type: square;font-size: 19px;line-height: 34px;">
The module helps to generate payslips for month first,month end or specific day in a month.
</li>
<li class="mb8" style="font-family: Roboto;color: #000000;list-style-type: square;font-size: 19px;line-height: 34px;">
The end user can confirm the generated payslip batch as well as the payslips in draft state.
</li>
</ul>
</div>
<div class="tab-pane fade" id="tab2default">
<section class="oe_container">
<div style="margin-bottom:4%;">
<h4 class="text-center mb32 alert" style="font-weight:400;color: #091E42;background: #f9f9f9;text-align: left;border-radius: 0;">
To enable/disable Automatic payroll, go to Payroll > Configuration > Settings > Enable/Disable Automatic Payroll.
</h4>
<div class="mt16 mb16">
<img src="automatic_payroll-1.png" style="width: 100%;" class="img img-responsive center-block">
</div>
</div>
<div style="margin-bottom:4%;">
<h4 class="text-center mb32 alert" style="font-weight:400;color: #091E42;background: #f9f9f9;text-align: left;border-radius: 0;">
Three options are available.
</h4>
<div class="mt16 mb16">
<img src="automatic_payroll-2.png" style="width: 100%;" class="img img-responsive center-block">
</div>
</div>
<div style="margin-bottom:4%;">
<h4 class="text-center mb32 alert" style="font-weight:400;color: #091E42;background: #f9f9f9;text-align: left;border-radius: 0;">
Upon selecting the second option (Specific date), there appears a field to enter specific date of the month. Based on date the scheduler shall generate payslip batches for the month.
</h4>
<div class="mt16 mb16">
<img src="automatic_payroll-3.png" style="width: 100%;" class="img img-responsive center-block">
</div>
</div>
<div style="margin-bottom:4%;">
<h4 class="text-center mb32 alert" style="font-weight:400;color: #091E42;background: #f9f9f9;text-align: left;border-radius: 0;">
The feature works with the help of scheduler.
</h4>
<div class="mt16 mb16">
<img src="automatic_payroll-4.png" style="width: 100%;" class="img img-responsive center-block">
</div>
</div>
<div style="margin-bottom:4%;">
<h4 class="text-center mb32 alert" style="font-weight:400;color: #091E42;background: #f9f9f9;text-align: left;border-radius: 0;">
During execution of scheduler, it would check contract table for active contracts and later create a new payslip batch via adding all active employees.
</h4>
<div class="mt16 mb16">
<img src="automatic_payroll-5.png" style="width: 100%;" class="img img-responsive center-block">
</div>
</div>
</section>
</div>
<div class="tab-pane fade" id="tab3default">Default 3</div>
</div>
</div>
</div>
</section>
<section id="video" class="" style="padding: 2rem 3rem 3rem;height:670px; ">
<div class="col-md-12" style="padding: 0;text-align: center;margin-bottom: 50px;">
<h2 style="font-weight: 600;text-align: center;margin-bottom: 25px;width: 100%;">Video Demo</h2>
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
<p>Odoo12 Automatic Payroll Demo</p>
<a href="https://www.youtube.com/watch?v=3mXktqqDixg&t=1s" target="_blank">
<img src="automatic_payroll-6.png" style="width:80%; height:576px;"></a>
</div>
</section>
<section class="oe_container" style="padding: 2rem 3rem 1rem;">
<h2 style="font-weight: 600;text-align: center;margin-bottom: 25px;width: 100%;">Suggested Products</h2>
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
<div id="demo" class="row carousel slide mt64 mb32" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner">
<div class="carousel-item active" style="min-height: 0px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
<a href="https://apps.odoo.com/apps/modules/12.0/hr_payslip_monthly_report/" target="_blank">
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
<img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="hr_payslip_monthly_report.jpeg">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
<a href="https://apps.odoo.com/apps/modules/10.0/payroll_timesheet/" target="_blank">
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
<img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="timesheet_payroll.jpeg">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
<a href="https://apps.odoo.com/apps/modules/12.0/oh_appraisal/" target="_blank">
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
<img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="oh_appraisal.jpeg">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
<a href="https://apps.odoo.com/apps/modules/9.0/send_email_payslips/" target="_blank">
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
<img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="send_email_payslip.jpeg">
</div>
</a>
</div>
</div>
<div class="carousel-item" style="min-height: 0px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
<a href="https://apps.odoo.com/apps/modules/12.0/employee_orientation/" target="_blank">
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
<img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="employee_orientation.jpeg">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
<a href="https://apps.odoo.com/apps/modules/12.0/hr_employee_transfer/" target="_blank">
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
<img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="hr_employee_transfer.jpeg">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo" data-slide="prev" style="left:-25px;width: 35px;color: #000;">
<span class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span>
</a>
<a class="carousel-control-next" href="#demo" data-slide="next" style="right:-25px;width: 35px;color: #000;">
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span>
</a>
</div>
</section>
<section class="row" style="padding: 2rem 3rem 1rem;margin:0px">
<h2 style="font-weight: 600;margin-bottom: 20px;text-align: center;width: 100%;">Our Service</h2>
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
<div class="row" style=" display: flex; justify-content: center; flex-wrap: wrap;width: 100%; ">
<!-- <div style="display:flex;padding-top: 20px;justify-content: space-between;"> -->
<div class="col-md-2 col-sm-6 col-xs-12">
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;">
<a href="https://www.cybrosys.com/odoo-customization-and-installation/" target="_blank">
<img src="https://www.cybrosys.com/images/odoo-customization.png" style="width: 100%;border-radius: 100%;"/>
</a>
</div>
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;">
<a href="https://www.cybrosys.com/odoo-customization-and-installation/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
Odoo Customization
</a>
</h3>
</div>
<div class="col-md-2 col-sm-6 col-xs-12">
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;">
<a href="https://www.cybrosys.com/odoo-erp-implementation/" target="_blank">
<img src="https://www.cybrosys.com/images/odoo-erp-implementation.png" style="width: 100%;border-radius: 100%;"/>
</a>
</div>
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;">
<a href="https://www.cybrosys.com/odoo-erp-implementation/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
Odoo Implementation </a>
</h3>
</div>
<div class="col-md-2 col-sm-6 col-xs-12">
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;">
<a href="https://www.cybrosys.com/odoo-erp-integration/" target="_blank">
<img src="https://www.cybrosys.com/images/odoo-erp-integration.png" style="width: 100%;border-radius: 100%;"/>
</a>
</div>
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;">
<a href="https://www.cybrosys.com/odoo-erp-integration/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
Odoo Integration
</a>
</h3>
</div>
<div class="col-md-2 col-sm-6 col-xs-12">
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;">
<a href="https://www.cybrosys.com/odoo-erp-support/" target="_blank">
<img src="https://www.cybrosys.com/images/odoo-erp-support.png" style="width: 100%;border-radius: 100%;"/>
</a>
</div>
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;">
<a href="https://www.cybrosys.com/odoo-erp-support/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
Odoo Support</a>
</h3>
</div>
<div class="col-md-2 col-sm-6 col-xs-12">
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;">
<a href="https://www.cybrosys.com/hire-odoo-developer/" target="_blank">
<img src="https://www.cybrosys.com/images/hire-odoo-developer.png" style="width: 100%;border-radius: 100%;"/>
</a>
</div>
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;">
<a href="https://www.cybrosys.com/hire-odoo-developer/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
Hire Odoo Developers</a>
</h3>
</a>
</div>
<!-- </div> -->
</div>
</section>
<section class="row" style="padding: 2rem 3rem 1rem;margin:0px">
<div class="row" style="margin: 0">
<h2 style="font-weight: 600;margin-bottom: 20px;text-align: center;width: 100%;">Our Industries</h2>
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
<!-- <div style="display:flex;justify-content: space-between;flex-wrap:wrap;"> -->
<div class="row" style="width: 100%">
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
<a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/" target="_blank">
<img src="https://www.cybrosys.com/images/odoo-index-industry-1.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/>
</a>
</div>
</div>
<div style="width:70%;float:left;">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;">
<a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;">
Trading
</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;">
Easily procure and sell your products.
</h3>
</div>
</div>
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
<a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/" target="_blank">
<img src="https://www.cybrosys.com/images/odoo-index-industry-2.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/>
</a>
</div>
</div>
<div style="width:70%;float:left;" style=" margin-bottom: 10px; ">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;">
<a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;">
Manufacturing</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;">
Plan, track and schedule your operations.
</h3>
</div>
</div>
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
<a href="https://www.cybrosys.com/odoo/industries/restaurant-management/" target="_blank">
<img src="https://www.cybrosys.com/images/odoo-index-industry-3.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/>
</a>
</div>
</div>
<div style="width:70%;float:left;">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;">
<a href="https://www.cybrosys.com/odoo/industries/restaurant-management/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;">
Restaurant</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;">
Run your bar or restaurant methodical.
</h3>
</div>
</div>
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
<a href="https://www.cybrosys.com/odoo/industries/pos/" target="_blank">
<img src="https://www.cybrosys.com/images/odoo-index-industry-4.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/>
</a>
</div>
</div>
<div style="width:70%;float:left;">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;">
<a href="https://www.cybrosys.com/odoo/industries/pos/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;">
POS</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;">
Easy configuring and convivial selling.
</h3>
</div>
</div>
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
<a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/" target="_blank">
<img src="https://www.cybrosys.com/images/odoo-index-industry-5.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/>
</a>
</div>
</div>
<div style="width:70%;float:left;">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 0px;margin-left: 16px;">
<a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
E-commerce & Website</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;">
Mobile friendly, awe-inspiring product pages.
</h3>
</div>
</div>
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
<a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/" target="_blank">
<img src="https://www.cybrosys.com/images/odoo-index-industry-6.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/>
</a>
</div>
</div>
<div style="width:70%;float:left;">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;">
<a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
Hotel Management</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;">
An all-inclusive hotel management application.
</h3>
</div>
</div>
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
<a href="https://www.cybrosys.com/odoo/industries/education-erp-software/" target="_blank">
<img src="https://www.cybrosys.com/images/odoo-index-industry-7.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/>
</a>
</div>
</div>
<div style="width:70%;float:left;">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;">
<a href="https://www.cybrosys.com/odoo/industries/education-erp-software/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
Education</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;">
A Collaborative platform for educational management.
</h3>
</div>
</div>
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;">
<a href="https://www.cybrosys.com/odoo/industries/service-management/" target="_blank">
<img src="https://www.cybrosys.com/images/odoo-index-industry-8.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/>
</a>
</div>
</div>
<div style="width:70%;float:left;">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;">
<a href="https://www.cybrosys.com/odoo/industries/service-management/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;">
Service Management</a>
</h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;">
Keep track of services and invoice accordingly.
</h3>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-footer-bg.png); background-repeat:no-repeat; background-size:100%;padding: 13% 0% 6% 0%;">
<div class="oe_slogan" style="margin-top:10px !important;margin-bottom: 0px;">
<div style=" display: flex; justify-content: center; flex-wrap: wrap; ">
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="mailto:odoo@cybrosys.com"><i class="fa fa-envelope"></i> Email us </a>
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" 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 style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com/contact/"><i class="fa fa-check-square"></i> Request Customization </a>
</div>
<br>
<img src="https://www.cybrosys.com/images/logo.png" style="width: 190px; margin-bottom: 25px;margin-top: 30px;" class="center-block">
<div style=" display: flex; justify-content: center; flex-wrap: wrap; ">
<a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td>
<a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td>
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px; ;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td>
<a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td>
<a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td>
</div>
</div>
</section>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</body>
</html>

BIN
automatic_payroll/static/description/oh_appraisal.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

BIN
automatic_payroll/static/description/send_email_payslip.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

BIN
automatic_payroll/static/description/timesheet_payroll.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

39
automatic_payroll/views/res_config_settings_view.xml

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="res_config_settings_view_name_form" model="ir.ui.view">
<field name="name">res_config_settings_view</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('settings')]" position="inside">
<div class="app_settings_block" data-string="Payroll" string="Payroll" data-key="hr_payroll" groups="hr_payroll.group_hr_payroll_manager">
<div class="row mt16 o_settings_container" id="payroll_settings">
<div class="col-lg-6 col-12 o_setting_box">
<div class="o_setting_left_pane">
<field name="generate_payslip"/>
</div>
<div class="o_setting_right_pane">
<label string="Automatic Payroll" for="generate_payslip"/>
<div class="text-muted">
Automatic Generation of Payslip batches and Payslips
</div>
<div class="content-group" attrs="{'invisible': [('generate_payslip', '=', False)]}">
<group>
<field name="option" class="o_light_label" widget="radio" required="True"/>
</group>
<div class="text-muted" attrs="{'invisible': [('option', 'in', ['first','end'])]}">
Note that, each month have either 30 or 31 days, with the exception of February,which had 29 days and gained an extra day every fourth year.
</div>
<group col="2">
<field name="generate_day" attrs="{'invisible': [('option', 'in', ['first','end'])]}" string="Day" type="object"/>
</group>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

13
automatic_payroll/views/schedule_cron.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="ir_cron_payslip_generation" model="ir.cron">
<field name="name">Generate payslip batches and payslips</field>
<field name="model_id" ref="hr_payroll.model_hr_payslip_run"/>
<field name="state">code</field>
<field name="code">model.check()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
</odoo>
Loading…
Cancel
Save