Browse Source

Jan 03: [ADD] Initial Commit 'work_report_from_timesheet'

pull/299/head
Shijin V 1 year ago
parent
commit
f4fc19859c
  1. 48
      work_report_from_timesheet/README.rst
  2. 22
      work_report_from_timesheet/__init__.py
  3. 49
      work_report_from_timesheet/__manifest__.py
  4. 16
      work_report_from_timesheet/data/ir_cron_data.xml
  5. 269
      work_report_from_timesheet/data/mail_data.xml
  6. 6
      work_report_from_timesheet/doc/RELEASE_NOTES.md
  7. 23
      work_report_from_timesheet/models/__init__.py
  8. 102
      work_report_from_timesheet/models/account_analytic_line.py
  9. 67
      work_report_from_timesheet/models/res_config_settings.py
  10. BIN
      work_report_from_timesheet/static/description/assets/icons/check.png
  11. BIN
      work_report_from_timesheet/static/description/assets/icons/chevron.png
  12. BIN
      work_report_from_timesheet/static/description/assets/icons/cogs.png
  13. BIN
      work_report_from_timesheet/static/description/assets/icons/consultation.png
  14. BIN
      work_report_from_timesheet/static/description/assets/icons/ecom-black.png
  15. BIN
      work_report_from_timesheet/static/description/assets/icons/education-black.png
  16. BIN
      work_report_from_timesheet/static/description/assets/icons/hotel-black.png
  17. BIN
      work_report_from_timesheet/static/description/assets/icons/license.png
  18. BIN
      work_report_from_timesheet/static/description/assets/icons/lifebuoy.png
  19. BIN
      work_report_from_timesheet/static/description/assets/icons/manufacturing-black.png
  20. BIN
      work_report_from_timesheet/static/description/assets/icons/pos-black.png
  21. BIN
      work_report_from_timesheet/static/description/assets/icons/puzzle.png
  22. BIN
      work_report_from_timesheet/static/description/assets/icons/restaurant-black.png
  23. BIN
      work_report_from_timesheet/static/description/assets/icons/service-black.png
  24. BIN
      work_report_from_timesheet/static/description/assets/icons/trading-black.png
  25. BIN
      work_report_from_timesheet/static/description/assets/icons/training.png
  26. BIN
      work_report_from_timesheet/static/description/assets/icons/update.png
  27. BIN
      work_report_from_timesheet/static/description/assets/icons/user.png
  28. BIN
      work_report_from_timesheet/static/description/assets/icons/wrench.png
  29. BIN
      work_report_from_timesheet/static/description/assets/misc/categories.png
  30. BIN
      work_report_from_timesheet/static/description/assets/misc/check-box.png
  31. BIN
      work_report_from_timesheet/static/description/assets/misc/compass.png
  32. BIN
      work_report_from_timesheet/static/description/assets/misc/corporate.png
  33. BIN
      work_report_from_timesheet/static/description/assets/misc/customer-support.png
  34. BIN
      work_report_from_timesheet/static/description/assets/misc/cybrosys-logo.png
  35. BIN
      work_report_from_timesheet/static/description/assets/misc/features.png
  36. BIN
      work_report_from_timesheet/static/description/assets/misc/logo.png
  37. BIN
      work_report_from_timesheet/static/description/assets/misc/pictures.png
  38. BIN
      work_report_from_timesheet/static/description/assets/misc/pie-chart.png
  39. BIN
      work_report_from_timesheet/static/description/assets/misc/right-arrow.png
  40. BIN
      work_report_from_timesheet/static/description/assets/misc/star.png
  41. BIN
      work_report_from_timesheet/static/description/assets/misc/support.png
  42. BIN
      work_report_from_timesheet/static/description/assets/misc/whatsapp.png
  43. BIN
      work_report_from_timesheet/static/description/assets/modules/1.png
  44. BIN
      work_report_from_timesheet/static/description/assets/modules/2.png
  45. BIN
      work_report_from_timesheet/static/description/assets/modules/3.png
  46. BIN
      work_report_from_timesheet/static/description/assets/modules/4.png
  47. BIN
      work_report_from_timesheet/static/description/assets/modules/5.png
  48. BIN
      work_report_from_timesheet/static/description/assets/modules/6.png
  49. BIN
      work_report_from_timesheet/static/description/assets/screenshots/Screenshot1.png
  50. BIN
      work_report_from_timesheet/static/description/assets/screenshots/Screenshot3.png
  51. BIN
      work_report_from_timesheet/static/description/assets/screenshots/Screenshot4.png
  52. BIN
      work_report_from_timesheet/static/description/assets/screenshots/Screenshot5.png
  53. BIN
      work_report_from_timesheet/static/description/assets/screenshots/Screenshot6.png
  54. BIN
      work_report_from_timesheet/static/description/assets/screenshots/Screenshot7.png
  55. BIN
      work_report_from_timesheet/static/description/assets/screenshots/hero.gif
  56. BIN
      work_report_from_timesheet/static/description/assets/screenshots/screenshot2.png
  57. BIN
      work_report_from_timesheet/static/description/banner.png
  58. BIN
      work_report_from_timesheet/static/description/icon.png
  59. 544
      work_report_from_timesheet/static/description/index.html
  60. 14
      work_report_from_timesheet/views/account_analytic_line_views.xml
  61. 63
      work_report_from_timesheet/views/res_config_settings_views.xml

48
work_report_from_timesheet/README.rst

@ -0,0 +1,48 @@
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
Work Report From Timesheet
==========================
Create workreport and send to manager based on timesheet created.
Configuration
=============
* Enable 'Generate work report' from timesheet configuration settings
* Employees who should receive the work report can be chosen.
* Configure Outgoing Mail Server.
License
-------
Affero General Public License v3.0 (AGPL v3)
(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
* Developer: (V16) Anagha S, Contact: odoo@cybrosys.com
Contacts
--------
* Mail Contact : odoo@cybrosys.com
* Website : https://cybrosys.com
Bug Tracker
-----------
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
Maintainer
==========
.. image:: https://cybrosys.com/images/logo.png
:target: https://cybrosys.com
This module is maintained by Cybrosys Technologies.
For support and more information, please visit `Our Website <https://cybrosys.com/>`__
Further information
===================
HTML Description: `<static/description/index.html>`__

22
work_report_from_timesheet/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Anagha S (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from . import models

49
work_report_from_timesheet/__manifest__.py

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Anagha S (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
{
'name': "Work Report From Timesheet",
'version': '16.0.1.0.0',
'category': 'Project',
'summary': 'Work Report From Timesheet',
'description': """This module helps to generate employee daily work report
by creating timesheet from the timesheet module and sending them to the
corresponding manager by mail that is configured in the timesheet
configuration.""",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
'depends': ['hr_timesheet', 'mail'],
'data': [
'data/ir_cron_data.xml',
'data/mail_data.xml',
'views/account_analytic_line_views.xml',
'views/res_config_settings_views.xml',
],
'images': [
'static/description/banner.png',
],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

16
work_report_from_timesheet/data/ir_cron_data.xml

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Cron Job: To check close date -->
<record id="send_daily_report" model="ir.cron">
<field name="name">Timesheet: Send Daily Work Report</field>
<field name="model_id" ref="model_account_analytic_line"/>
<field name="state">code</field>
<field name="code">model.send_employee_daily_work_report()</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="nextcall"
eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d 11:00:00')"/>
</record>
</odoo>

269
work_report_from_timesheet/data/mail_data.xml

@ -0,0 +1,269 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!--Employee task report Email template -->
<record id="email_template_work_report_from_timesheet"
model="mail.template">
<field name="name">WorkReport: Task report from timesheet</field>
<field name="model_id" ref="work_report_from_timesheet.model_account_analytic_line"/>
<field name="subject">Task report_{{ object.date.strftime('%b-%d-%Y') }}_{{ (object.employee_id.name) }}</field>
<field name="description">Send Daily work report of employee to the manager</field>
<field name="email_from">{{ (object.user_id.email_formatted or user.email_formatted) }}</field>
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;">
<p style="margin: 0px; padding: 0px; font-size: 13px;">
Hello,<br/>
Here is a report on my daily work.<br/><br/><br/>
<!-- Content-->
<table width="75%"
style="color: #454748; font-size: 12px; border: 1px solid black;
border-collapse: collapse;">
<tr style=" border: 1px solid black; background-color:rgb(183,183,183);
border-collapse: collapse;">
<td width="5%" style=" border: 1px solid black;">
<span style="font-weight:bold;">Sl.no</span>
</td>
<td width="15%" align="center" style=" border: 1px solid black;">
<span style="font-weight:bold;">Project</span>
</td>
<td width="20%" align="center" style=" border: 1px solid black;">
<span style="font-weight:bold;">Task</span>
</td>
<td width="20%" align="center"
style=" border: 1px solid black;">
<span style="font-weight:bold;">Status</span>
</td>
<td width="15%" align="center" style=" border: 1px solid black;">
<span style="font-weight:bold;">Hours spent</span>
</td>
<td width="25%" align="center" style=" border: 1px solid black;">
<span style="font-weight:bold;">Remark</span>
</td>
</tr>
</table>
<table width="75%" style="color: #454748; font-size: 10px; border: 1px solid black;border-collapse: collapse;">
<tr style=" border: 1px solid black; border-collapse: collapse;">
<td colspan="4" width="5%" align="center" style=" border: 1px solid black;">
<span>1</span>
</td>
<td colspan="4" width="15%" align="center" style=" border: 1px solid black;">
<span style="font-weight:bold;" t-out="object.project_id.name or ''">
Project name
</span>
</td>
<td colspan="4" width="20%" align="center"
style=" border: 1px solid black;">
<span style="font-weight:bold;" t-out="object.task_id.name or ''">
Task name
</span>
</td>
<td colspan="4" width="20%" align="center"
t-if="object.status == 'ongoing'"
style="background-color : rgb(255,217,102);border: 1px solid black;">
<span style="font-weight:bold;" t-out="object.status or ''">
Status
</span>
</td>
<td colspan="4" width="20%" align="center" t-if="object.status == 'completed'"
style="background-color : rgb(106,168,79); border: 1px solid black;">
<span style="font-weight:bold;" t-out="object.status or ''">
Status
</span>
</td>
<td colspan="4" width="15%" align="center">
<span style="font-weight:bold;" t-out="object.unit_amount or ''">
Hours spent
</span>
</td>
<td colspan="4" width="25%" align="center" style=" border: 1px solid black;">
<span style="font-weight:bold;" t-out="object.name or ''">
Remarks
</span>
</td>
</tr>
</table>
<br/>
<!-- FOOTER -->
<tr>
<td align="Left" style="min-width: 590px;">
Thanks &amp; Regard,
<table border="0" cellpadding="0" cellspacing="0" width="590"
style="min-width: 590px; background-color: white; font-size: 11px;
padding: 0px 8px 0px 8px; border-collapse:separate;">
<tr>
<td valign="middle" align="left">
<t t-out="object.employee_id.name or ''">
Employee
</t>
</td>
</tr>
<tr>
<td valign="middle" align="left">
<t t-out="user.company_id.name or ''">YourCompany</t>
</td>
</tr>
<tr>
<td valign="middle" align="left" style="opacity: 0.7;">
<t t-out="user.company_id.phone or ''">+1 650-123-4567</t>
<t t-if="user.company_id.phone and (user.company_id.email or user.company_id.website)"> | </t>
<t t-if="user.company_id.email">
<a t-attf-href="'mailto:%s' % {{ user.company_id.email }}" style="text-decoration:none; color: #454748;"
t-out="user.company_id.email or ''">
info@yourcompany.com
</a>
</t>
<t t-if="user.company_id.email and user.company_id.website"> |
</t>
<t t-if="user.company_id.website">
<a t-attf-href="'%s' % {{ user.company_id.website }}"
style="text-decoration:none; color: #454748;"
t-out="user.company_id.website or ''">
http://www.example.com
</a>
</t>
</td>
</tr>
</table>
</td>
</tr>
</p>
</div>
</field>
<field name="auto_delete" eval="True"/>
<field name="lang">${object.env.user.lang}</field>
</record>
<!--Employee daily work report Email template -->
<record id="email_template_daily_report_from_timesheet"
model="mail.template">
<field name="name">WorkReport: Daily Work report from timesheet</field>
<field name="model_id" ref="work_report_from_timesheet.model_account_analytic_line"/>
<field name="description">Send Daily work report of employee to the manager</field>
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;">
<p style="margin: 0px; padding: 0px; font-size: 13px;">
Hello,<br/>
Here is a report on my daily work.<br/><br/><br/>
<!-- Content-->
<table width="75%"
style="color: #454748; font-size: 12px; border: 1px solid black;
border-collapse: collapse;">
<tr style=" border: 1px solid black; background-color:rgb(183,183,183);
border-collapse: collapse;">
<td width="5%" style=" border: 1px solid black;">
<span style="font-weight:bold;">Sl.no</span>
</td>
<td width="15%" align="center" style=" border: 1px solid black;">
<span style="font-weight:bold;">Project</span>
</td>
<td width="20%" align="center" style=" border: 1px solid black;">
<span style="font-weight:bold;">Task</span>
</td>
<td width="20%" align="center"
style=" border: 1px solid black;">
<span style="font-weight:bold;">Status</span>
</td>
<td width="15%" align="center" style=" border: 1px solid black;">
<span style="font-weight:bold;">Hours spent</span>
</td>
<td width="25%" align="center" style=" border: 1px solid black;">
<span style="font-weight:bold;">Remark</span>
</td>
</tr>
</table>
<t t-set="i" t-value="1" />
<t t-foreach="ctx.get('data')" t-as="data">
<table width="75%" style="color: #454748; font-size: 10px; border: 1px solid black;border-collapse: collapse;">
<tr style=" border: 1px solid black; border-collapse: collapse;">
<td colspan="4" width="5%" align="center" style=" border: 1px solid black;">
<span t-esc="i"/>
<t t-set="i" t-value="i+1"/>
</td>
<td colspan="4" width="15%" align="center" style=" border: 1px solid black;">
<span style="font-weight:bold;" t-out="data.project_id.name or ''">
Project name
</span>
</td>
<td colspan="4" width="20%" align="center"
style=" border: 1px solid black;">
<span style="font-weight:bold;" t-out="data.task_id.name or ''">
Task name
</span>
</td>
<td colspan="4" width="20%" align="center"
t-if="data.status == 'ongoing'"
style="background-color : rgb(255,217,102);border: 1px solid black;">
<span style="font-weight:bold;" t-out="data.status or ''">
Status
</span>
</td>
<td colspan="4" width="20%" align="center" t-if="data.status == 'completed'"
style="background-color : rgb(106,168,79); border: 1px solid black;">
<span style="font-weight:bold;" t-out="data.status or ''">
Status
</span>
</td>
<td colspan="4" width="15%" align="center">
<span style="font-weight:bold;" t-out="data.unit_amount or ''">
Hours spent
</span>
</td>
<td colspan="4" width="25%" align="center" style=" border: 1px solid black;">
<span style="font-weight:bold;" t-out="data.name or ''">
Remarks
</span>
</td>
</tr>
</table>
</t>
<br/>
<!-- FOOTER -->
<tr>
<td align="Left" style="min-width: 590px;">
Thanks &amp; Regard,
<table border="0" cellpadding="0" cellspacing="0" width="590"
style="min-width: 590px; background-color: white; font-size: 11px;
padding: 0px 8px 0px 8px; border-collapse:separate;">
<tr>
<td valign="middle" align="left">
<t t-out="data.employee_id.name or ''">
Employee
</t>
</td>
</tr>
<tr>
<td valign="middle" align="left">
<t t-out="user.company_id.name or ''">YourCompany</t>
</td>
</tr>
<tr>
<td valign="middle" align="left" style="opacity: 0.7;">
<t t-out="user.company_id.phone or ''">+1 650-123-4567</t>
<t t-if="user.company_id.phone and (user.company_id.email or user.company_id.website)"> | </t>
<t t-if="user.company_id.email">
<a t-attf-href="'mailto:%s' % {{ user.company_id.email }}" style="text-decoration:none; color: #454748;"
t-out="user.company_id.email or ''">
info@yourcompany.com
</a>
</t>
<t t-if="user.company_id.email and user.company_id.website"> |
</t>
<t t-if="user.company_id.website">
<a t-attf-href="'%s' % {{ user.company_id.website }}"
style="text-decoration:none; color: #454748;"
t-out="user.company_id.website or ''">
http://www.example.com
</a>
</t>
</td>
</tr>
</table>
</td>
</tr>
</p>
</div>
</field>
<field name="auto_delete" eval="True"/>
<field name="lang">{{ object.partner_id.lang or '' }}</field>
</record>
</data>
</odoo>

6
work_report_from_timesheet/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <work_report_from_timesheet>
#### 03.01.2024
#### Version 16.0.1.0.0
#### ADD
- Initial commit for Work Report From Timesheet

23
work_report_from_timesheet/models/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Anagha S (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from . import account_analytic_line
from . import res_config_settings

102
work_report_from_timesheet/models/account_analytic_line.py

@ -0,0 +1,102 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Anagha S (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from ast import literal_eval
from datetime import datetime
from odoo import fields, models
class AccountAnalyticLine(models.Model):
"""This model inherit Account analytic line."""
_inherit = 'account.analytic.line'
status = fields.Selection([('ongoing', 'Ongoing'),
('completed', 'Completed')], string='Status',
default='ongoing', help='Status of task.')
def write(self, values):
"""Generate work report on creating new record."""
work_report = self.env['ir.config_parameter'].sudo().get_param(
'work_report_from_timesheet.report_method')
if work_report == 'task_report':
self._send_daily_task_report()
result = super().write(values)
return result
def _send_daily_task_report(self):
"""Work report for each task will be generated and sent to the
employee that chosen in timesheet settings."""
params = self.env['ir.config_parameter'].sudo()
manager_email = params.get_param(
'work_report_from_timesheet.employee_id')
cc_employees = literal_eval(
params.get_param('work_report_from_timesheet.employee_ids'))
template_id = self.env.ref('work_report_from_timesheet.'
'email_template_work_report_from_timesheet')
for rec in self:
email_vals = {
'message_type': 'notification',
'is_notification': True,
'email_to': self.env['hr.employee'].browse(
int(manager_email)).work_email,
'email_cc': ", ".join(
[self.env['hr.employee'].browse(cc).work_email for cc in
cc_employees]),
'email_from': rec.employee_id.work_email,
"model": 'account.analytic.line',
"res_id": rec.id}
template_id.sudo().send_mail(rec.id, force_send=True,
email_values=email_vals)
def send_employee_daily_work_report(self):
"""A daily work report for all employees will be sent."""
params = self.env['ir.config_parameter'].sudo()
work_report = params.get_param(
'work_report_from_timesheet.report_method')
if work_report == 'daily_report':
manager_email = params.get_param(
'work_report_from_timesheet.employee_id')
cc_employees = literal_eval(
params.get_param('work_report_from_timesheet.employee_ids'))
template_id = self.env.ref('work_report_from_timesheet.'
'email_template_daily_report_from_timesheet')
email_vals = {
'message_type': 'notification',
'is_notification': True,
'email_to': self.env['hr.employee'].browse(
int(manager_email)).work_email,
'email_cc': ", ".join(
[self.env['hr.employee'].browse(cc).work_email for cc in
cc_employees]),
'model': 'account.analytic.line'}
timesheet = self.env['account.analytic.line'].search(
[('date', '=', datetime.today().date())])
employees = list(timesheet.employee_id)
for employee in employees:
data = timesheet.filtered(
lambda emp: emp.employee_id.id == employee.id) # pylint: disable=cell-var-from-loop
email_vals['email_from'] = employee.work_email
email_vals[
'subject'] = f"Daily work report_{datetime.today().date().strftime('%b-%d-%Y')}_{employee.name}"
res_id = [rec.id for rec in data]
template_id.with_context(data=data).send_mail(res_id=res_id[0],
email_values=email_vals,
force_send=True)

67
work_report_from_timesheet/models/res_config_settings.py

@ -0,0 +1,67 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Anagha S (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from ast import literal_eval
from odoo import api, fields, models
class ResConfigSettings(models.TransientModel):
"""Inherit configuration settings."""
_inherit = 'res.config.settings'
generate_work_report = fields.Boolean(string="Generate work report",
help="Generate work report on "
"creating timesheet.",
config_parameter='work_report_from_timesheet.generate_work_report')
report_method = fields.Selection(
[('task_report', 'Task Report'), ('daily_report', 'Daily Report')],
default='task_report', string="Report method",
config_parameter="work_report_from_timesheet.report_method",
help='Task Report: Send task report on creating timesheet.\nDaily '
'Report: Send daily work report of each employee at end '
'of the day.')
employee_id = fields.Many2one('hr.employee', string="Email to",
help='Select employee to whom work report '
'to be send.',
config_parameter='work_report_from_timesheet.employee_id')
employee_ids = fields.Many2many(comodel_name='hr.employee',
string="Email CC",
help='Select employee for cc of email.')
def set_values(self):
"""Inherit the set_values() method of class ResConfigSettings
to save values."""
params = self.env['ir.config_parameter'].sudo()
params.set_param('work_report_from_timesheet.employee_ids',
self.employee_ids.ids)
return super(ResConfigSettings, self).set_values()
@api.model
def get_values(self):
"""Inherit the get_values() method of class ResConfigSettings
to get the values and update settings."""
res = super(ResConfigSettings, self).get_values()
email_cc = self.env['ir.config_parameter'].sudo().get_param(
'work_report_from_timesheet.employee_ids')
res.update(
employee_ids=[
(6, 0, literal_eval(email_cc))] if email_cc else False)
return res

BIN
work_report_from_timesheet/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
work_report_from_timesheet/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
work_report_from_timesheet/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
work_report_from_timesheet/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
work_report_from_timesheet/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
work_report_from_timesheet/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
work_report_from_timesheet/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
work_report_from_timesheet/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
work_report_from_timesheet/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
work_report_from_timesheet/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
work_report_from_timesheet/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
work_report_from_timesheet/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
work_report_from_timesheet/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
work_report_from_timesheet/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
work_report_from_timesheet/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
work_report_from_timesheet/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
work_report_from_timesheet/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
work_report_from_timesheet/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
work_report_from_timesheet/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
work_report_from_timesheet/static/description/assets/misc/categories.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
work_report_from_timesheet/static/description/assets/misc/check-box.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
work_report_from_timesheet/static/description/assets/misc/compass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
work_report_from_timesheet/static/description/assets/misc/corporate.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
work_report_from_timesheet/static/description/assets/misc/customer-support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
work_report_from_timesheet/static/description/assets/misc/cybrosys-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
work_report_from_timesheet/static/description/assets/misc/features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

BIN
work_report_from_timesheet/static/description/assets/misc/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
work_report_from_timesheet/static/description/assets/misc/pictures.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
work_report_from_timesheet/static/description/assets/misc/pie-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
work_report_from_timesheet/static/description/assets/misc/right-arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

BIN
work_report_from_timesheet/static/description/assets/misc/star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
work_report_from_timesheet/static/description/assets/misc/support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
work_report_from_timesheet/static/description/assets/misc/whatsapp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
work_report_from_timesheet/static/description/assets/modules/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
work_report_from_timesheet/static/description/assets/modules/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
work_report_from_timesheet/static/description/assets/modules/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
work_report_from_timesheet/static/description/assets/modules/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
work_report_from_timesheet/static/description/assets/modules/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
work_report_from_timesheet/static/description/assets/modules/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

BIN
work_report_from_timesheet/static/description/assets/screenshots/Screenshot1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

BIN
work_report_from_timesheet/static/description/assets/screenshots/Screenshot3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 KiB

BIN
work_report_from_timesheet/static/description/assets/screenshots/Screenshot4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

BIN
work_report_from_timesheet/static/description/assets/screenshots/Screenshot5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

BIN
work_report_from_timesheet/static/description/assets/screenshots/Screenshot6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
work_report_from_timesheet/static/description/assets/screenshots/Screenshot7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 KiB

BIN
work_report_from_timesheet/static/description/assets/screenshots/hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 433 KiB

BIN
work_report_from_timesheet/static/description/assets/screenshots/screenshot2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

BIN
work_report_from_timesheet/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
work_report_from_timesheet/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

544
work_report_from_timesheet/static/description/index.html

@ -0,0 +1,544 @@
<div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/>
<div>
<div style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
<div style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Odoo.sh
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Work Report From Timesheet</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
Allow Employee to Generate and Send Daily Work Report on Creating Timesheet.
</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif" class="img-responsive"
style="width: 100%; margin-left: auto; margin-right: auto;"/>
</div>
</div>
</div>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Explore This Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn more about this module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View features of this module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View screenshots for this module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Overview </h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">
This module helps to generate employee daily work reports by creating timesheet from
the timesheet module and sending them to the corresponding employee by mail that is set
in the timesheet configuration.
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/features.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Features
</h2>
</div>
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Available in Odoo 16.0 Community, Enterprise and Odoo. sh</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">New Status field to mark either the Task is Completed or Ongoing.</span>
</div>
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">On enabling 'Generate work report' from the configuration
user can choose the employee to whom user want to send the Work Report.</span>
</div>
</div>
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Two report methods available: Task-based reporting and Daily reporting for comprehensive project tracking.</span>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2" style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pictures.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Screenshots
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Generate work report
</h3>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Enable 'Generate work report' from Timesheet -> Configuration -> Settings.
Select Report method as Task Report to send the report on task basis.
Employees who should receive the work report can be chosen from timesheet settings.
</p>
<img src="assets/screenshots/Screenshot1.png"
class="img-thumbnail" width="1470px;">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
New Status field in the tree view of Timesheet to mark weather
Task is 'Ongoing' or 'Completed'.
</h3>
<img src="assets/screenshots/screenshot2.png"
class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Configure the Outgoing Mail Server. Create new Timesheet and Save it.
</h3>
<img src="assets/screenshots/Screenshot3.png" class="img-thumbnail"
width="1470px;">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
After the creation of a timesheet for each task, a work report
will be sent. </h3>
<img src="assets/screenshots/Screenshot4.png" class="img-thumbnail"
width="1470px;">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Select the Report method as 'Daily Report' from Timesheet
Settings to send the report of each employee on a daily
basis. </h3>
<img src="assets/screenshots/Screenshot5.png" class="img-thumbnail"
width="1470px;">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
At a scheduled time, a daily work report for each employee will be sent.</h3>
<img src="assets/screenshots/Screenshot6.png" class="img-thumbnail"
width="1470px;">
<img src="assets/screenshots/Screenshot7.png" class="img-thumbnail"
width="1470px;">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Related Products
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/project_dashboard_odoo/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/1.png">
</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/16.0/project_task_timer/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/2.png">
</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/16.0/timesheet_view_calendar/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/3.png">
</div>
</a>
</div>
</div>
<div class="carousel-item active"
style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/projects_task_checklists/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/4.png">
</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/16.0/project_task_attachments/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/5.png">
</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/16.0/task_overdue_email_odoo/#"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/6.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev"
style="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="#demo1"
data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i
class="fa fa-chevron-right"
style="font-size:24px"></i></span></a>
</div>
</div>
</div>
<!-- END OF RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Hire Odoo Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo Licensing Consultancy</h6>
</div>
</div>
</div>
<!-- END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our Industries
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/trading-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Easily procure and sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/pos-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Easy configuration and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/education-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">A platform for educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/manufacturing-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Plan, track and schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/ecom-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Mobile friendly, awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/service-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">Service Management</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Keep track of services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/restaurant-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Run your bar or restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/hotel-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">An all-inclusive hotel management application</p>
</div>
</div>
</div>
</div>
<!-- END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2" style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48" style="width: 42px; height: 42px;"/>
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help? Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52"
style="width: 52px; height: 52px;"/>
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">+91 86068 27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>
<!-- END OF SUPPORT -->

14
work_report_from_timesheet/views/account_analytic_line_views.xml

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- Add new field to account analytic line tree view-->
<record id="hr_timesheet_line_tree" model="ir.ui.view">
<field name="name">account.analytic.line.view.tree.inherit.work.report.from.timesheet</field>
<field name="model">account.analytic.line</field>
<field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_tree"/>
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='task_id']" position="after">
<field name="status" />
</xpath>
</field>
</record>
</odoo>

63
work_report_from_timesheet/views/res_config_settings_views.xml

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- Timesheet settings form view inherited -->
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">
res.config.settings.view.form.inherit.work.report.from.timesheet
</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="1"/>
<field name="inherit_id"
ref="hr_timesheet.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='section_leaves']" position="after">
<h2>Work Report</h2>
<div name="timesheet_work_report"
class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box"
id="work_report_setting ">
<div class="o_setting_left_pane">
<field name="generate_work_report"/>
</div>
<div class="o_setting_right_pane">
<label for="generate_work_report"
string="Generate work report"/>
<div class="text-muted mb16">
Generate work report and send to manager
</div>
</div>
<div class="o_setting_right_pane row"
attrs="{'invisible':[('generate_work_report','=',False)]}">
<label for="report_method"
class="col-4 o_light_label"/>
<field name="report_method" widget="radio"
class="o_light_label col"
attrs="{'required':[('generate_work_report','=',True)]}"/>
</div>
<div class="o_setting_right_pane"
attrs="{'invisible': [('generate_work_report','=',False)],
'required':[('generate_work_report','=',True)]}">
<label for="employee_id"
string="Email To"/>
<div class="text-muted mb16">
Choose the employee to whom you want to send the
work report.
</div>
<field name="employee_id"/>
</div>
<div class="content-group"
attrs="{'invisible':[('generate_work_report','=',False)],
'required':[('generate_work_report','=',True)]}">
<div class="row mt16 ms-4">
<label class="o_light_label col-lg-3"
string="Email CC" for="employee_ids"/>
<field name="employee_ids"
widget="many2many_tags"/>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>
Loading…
Cancel
Save