Browse Source

Feb 03 : [ADD] Initial Commit 'event_management'

pull/186/merge
RisvanaCybro 1 year ago
parent
commit
1850340a9b
  1. 65
      event_management/README.rst
  2. 25
      event_management/__init__.py
  3. 60
      event_management/__manifest__.py
  4. 22
      event_management/controllers/__init__.py
  5. 55
      event_management/controllers/event_management.py
  6. 50
      event_management/data/event_management_data.xml
  7. 5
      event_management/doc/RELEASE_NOTES.md
  8. 24
      event_management/models/__init__.py
  9. 199
      event_management/models/event_management.py
  10. 60
      event_management/models/event_management_type.py
  11. 66
      event_management/models/event_service_line.py
  12. 22
      event_management/report/__init__.py
  13. 63
      event_management/report/event_management_report.py
  14. 11
      event_management/report/event_management_reports.xml
  15. 95
      event_management/report/event_management_templates.xml
  16. 17
      event_management/security/event_management_groups.xml
  17. 11
      event_management/security/event_management_security.xml
  18. 5
      event_management/security/ir.model.access.csv
  19. BIN
      event_management/static/description/assets/icons/check.png
  20. BIN
      event_management/static/description/assets/icons/chevron.png
  21. BIN
      event_management/static/description/assets/icons/cogs.png
  22. BIN
      event_management/static/description/assets/icons/consultation.png
  23. BIN
      event_management/static/description/assets/icons/ecom-black.png
  24. BIN
      event_management/static/description/assets/icons/education-black.png
  25. BIN
      event_management/static/description/assets/icons/hotel-black.png
  26. BIN
      event_management/static/description/assets/icons/license.png
  27. BIN
      event_management/static/description/assets/icons/lifebuoy.png
  28. BIN
      event_management/static/description/assets/icons/manufacturing-black.png
  29. BIN
      event_management/static/description/assets/icons/pos-black.png
  30. BIN
      event_management/static/description/assets/icons/puzzle.png
  31. BIN
      event_management/static/description/assets/icons/restaurant-black.png
  32. BIN
      event_management/static/description/assets/icons/service-black.png
  33. BIN
      event_management/static/description/assets/icons/trading-black.png
  34. BIN
      event_management/static/description/assets/icons/training.png
  35. BIN
      event_management/static/description/assets/icons/update.png
  36. BIN
      event_management/static/description/assets/icons/user.png
  37. BIN
      event_management/static/description/assets/icons/wrench.png
  38. BIN
      event_management/static/description/assets/misc/categories.png
  39. BIN
      event_management/static/description/assets/misc/check-box.png
  40. BIN
      event_management/static/description/assets/misc/compass.png
  41. BIN
      event_management/static/description/assets/misc/corporate.png
  42. BIN
      event_management/static/description/assets/misc/customer-support.png
  43. BIN
      event_management/static/description/assets/misc/cybrosys-logo.png
  44. BIN
      event_management/static/description/assets/misc/features.png
  45. BIN
      event_management/static/description/assets/misc/logo.png
  46. BIN
      event_management/static/description/assets/misc/pictures.png
  47. BIN
      event_management/static/description/assets/misc/pie-chart.png
  48. BIN
      event_management/static/description/assets/misc/right-arrow.png
  49. BIN
      event_management/static/description/assets/misc/star.png
  50. BIN
      event_management/static/description/assets/misc/support.png
  51. BIN
      event_management/static/description/assets/misc/whatsapp.png
  52. BIN
      event_management/static/description/assets/modules/1.png
  53. BIN
      event_management/static/description/assets/modules/2.jpg
  54. BIN
      event_management/static/description/assets/modules/3.png
  55. BIN
      event_management/static/description/assets/modules/4.png
  56. BIN
      event_management/static/description/assets/modules/5.png
  57. BIN
      event_management/static/description/assets/modules/6.png
  58. BIN
      event_management/static/description/assets/screenshots/1.png
  59. BIN
      event_management/static/description/assets/screenshots/2.png
  60. BIN
      event_management/static/description/assets/screenshots/3.png
  61. BIN
      event_management/static/description/assets/screenshots/4.png
  62. BIN
      event_management/static/description/assets/screenshots/5.png
  63. BIN
      event_management/static/description/assets/screenshots/6.png
  64. BIN
      event_management/static/description/assets/screenshots/7.png
  65. BIN
      event_management/static/description/assets/screenshots/8.png
  66. BIN
      event_management/static/description/assets/screenshots/9.png
  67. BIN
      event_management/static/description/assets/screenshots/hero.gif
  68. BIN
      event_management/static/description/banner.png
  69. BIN
      event_management/static/description/icon.png
  70. 758
      event_management/static/description/index.html
  71. BIN
      event_management/static/img/event_type_image1.jpg
  72. BIN
      event_management/static/img/event_type_image2.jpeg
  73. BIN
      event_management/static/img/event_type_image3.jpeg
  74. BIN
      event_management/static/img/event_type_image4.jpeg
  75. BIN
      event_management/static/img/event_type_image5.jpeg
  76. BIN
      event_management/static/img/event_type_image6.jpeg
  77. BIN
      event_management/static/img/event_type_image7.png
  78. 12
      event_management/static/src/css/event_dashboard.css
  79. 30
      event_management/static/src/js/action_manager.js
  80. 11
      event_management/views/assets.xml
  81. 8
      event_management/views/dashboard_action.xml
  82. 119
      event_management/views/event_management_type_views.xml
  83. 221
      event_management/views/event_management_views.xml
  84. 22
      event_management/wizard/__init__.py
  85. 192
      event_management/wizard/event_management_report.py
  86. 49
      event_management/wizard/event_management_report_views.xml

65
event_management/README.rst

@ -0,0 +1,65 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
Event Management
================
Event management is a core module which can manage any type of events.
The user can selectively download and install different service modules to extend the scope of this module.
The new service will be automatically get attached to this core Event management module.
It is different from Odoo's event module.
Here you can manage different types of events and allocate services to different users.
Note: Presently we have released the service “Event Catering” under this module. New services are being developed by our team.
Configuration
=============
* No additional configuration required
Features
========
* Event order creation.
* Automatically creates service orders.
* Allocate the services to different users.
* Integrated with Accounting module.
* Simple Workflow.
* Attractive Design.
Installation
============
- www.odoo.com/documentation/14.0/setup/install.html
- Install our custom addon
License
-------
General Public License, Version 3 (AGPL v3).
(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
Company
-------
`Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
=======
* Developer: (V14) Mohammed Dilshad Tk , Contact: odoo@cybrosys.com
Contacts
--------
* Mail Contact : odoo@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 https://www.cybrosys.com
Further information
===================
HTML Description: `<static/description/index.html>`__

25
event_management/__init__.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: MOHAMMED DILSHAD TK (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 controllers
from . import models
from . import report
from . import wizard

60
event_management/__manifest__.py

@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: MOHAMMED DILSHAD TK (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': 'Event Management',
'version': '14.0.1.0.0',
"category": "Industries",
'summary': """Event management is a core module which can manage any
type of events in odoo 14.""",
'description': """Event management module use to manage different service
modules to extend the scope of this module. The new service will be
automatically get attached to this core Event management module. It is
different from Odoo's event module. Here you can manage different types of
events and allocate services to different users.""",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
'depends': ['account'],
'data': ['security/event_management_groups.xml',
'security/event_management_security.xml',
'security/ir.model.access.csv',
'data/event_management_data.xml',
'views/assets.xml',
'views/event_management_views.xml',
'views/event_management_type_views.xml',
'views/dashboard_action.xml',
'report/event_management_templates.xml',
'report/event_management_reports.xml',
'wizard/event_management_report_views.xml',
],
'assets': {
'web.assets_backend': [
"event_management/static/src/css/event_dashboard.css",
],
},
'images': ['static/description/banner.png'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': True,
}

22
event_management/controllers/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: MOHAMMED DILSHAD TK (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 event_management

55
event_management/controllers/event_management.py

@ -0,0 +1,55 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: MOHAMMED DILSHAD TK (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/>.
#
################################################################################
import json
from odoo import http
from odoo.http import content_disposition, request
from odoo.http import serialize_exception as _serialize_exception
from odoo.tools import html_escape
class XLSXReportController(http.Controller):
"""Controller Class for xlsx report"""
@http.route('/xlsx_reports', type='http', auth='user',
methods=['POST'], csrf=False)
def get_report_xlsx(self, model, options, output_format, report_name):
"""Method for passing data to xlsx report"""
uid = request.session.uid
report_obj = request.env[model].with_user(uid)
options = json.loads(options)
try:
if output_format == 'xlsx':
response = request.make_response(
None,
headers=[('Content-Type', 'application/vnd.ms-excel'), (
'Content-Disposition',
content_disposition(report_name + '.xlsx'))])
report_obj.get_xlsx_report(options, response)
return response
except Exception as err:
exception = _serialize_exception(err)
error = {
'code': 200,
'message': 'Odoo Server Error',
'data': exception
}
return request.make_response(html_escape(json.dumps(error)))

50
event_management/data/event_management_data.xml

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- Default event management type (Wedding)-->
<record id="event_management_type_wedding" model="event.management.type">
<field name="name">Wedding</field>
<field name="image" type="base64"
file="event_management/static/img/event_type_image1.jpg"/>
</record>
<!-- Default event management type (Birthday)-->
<record id="event_management_type_birthday" model="event.management.type">
<field name="name">Birthday</field>
<field name="image" type="base64"
file="event_management/static/img/event_type_image2.jpeg"/>
</record>
<!-- Default event management type (Family Events)-->
<record id="event_management_type_family_events" model="event.management.type">
<field name="name">Family Events</field>
<field name="image" type="base64"
file="event_management/static/img/event_type_image3.jpeg"/>
</record>
<!-- Default event management type (Press Conference)-->
<record id="event_management_type_press_conference" model="event.management.type">
<field name="name">Press Conference</field>
<field name="image" type="base64"
file="event_management/static/img/event_type_image4.jpeg"/>
</record>
<!-- Default event management type (Seminars)-->
<record id="event_management_type_seminars" model="event.management.type">
<field name="name">Seminars</field>
<field name="image" type="base64"
file="event_management/static/img/event_type_image5.jpeg"/>
</record>
<!-- Default event management type (Conferences)-->
<record id="event_management_type_conferences" model="event.management.type">
<field name="name">Conferences</field>
<field name="image" type="base64"
file="event_management/static/img/event_type_image6.jpeg"/>
</record>
<!-- Event sequence order -->
<record id="seq_event_order" model="ir.sequence">
<field name="name">Event Order</field>
<field name="code">event.order.sequence</field>
<field name="suffix">%(day)s/%(month)s/%(year)s</field>
<field name="prefix">EVE-</field>
<field name="number_increment">1</field>
<field name="padding">2</field>
</record>
</data>
</odoo>

5
event_management/doc/RELEASE_NOTES.md

@ -0,0 +1,5 @@
## Module <event_management>
#### 09.11.2023
#### Version 14.0.1.0.0
#### Add
- Initial commit for Event Management

24
event_management/models/__init__.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: MOHAMMED DILSHAD TK (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 event_management
from . import event_management_type
from . import event_service_line

199
event_management/models/event_management.py

@ -0,0 +1,199 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: MOHAMMED DILSHAD TK (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 odoo import api, fields, models, _
from odoo.exceptions import UserError, ValidationError
class EventManagement(models.Model):
"""Model for managing Event Management"""
_name = 'event.management'
_description = 'Event Management'
name = fields.Char(string="Name", readonly=True, copy=False,
help="Name of the event management")
ref = fields.Char(string="Ref", readonly=True, help="Event Management "
"Reference")
type_of_event_id = fields.Many2one('event.management.type',
string="Type",
required=True, help="Type of the event")
partner_id = fields.Many2one('res.partner', string="Customer",
required=True, help="Client")
date = fields.Date(string="Date", default=fields.Date.today, required=True,
help="Current Date")
start_date = fields.Datetime(string="Start date",
default=lambda self: fields.datetime.now(),
required=True, help="Start date of the event"
" management")
end_date = fields.Datetime(string="End date", required=True,
help="End date of the event management")
service_line_ids = fields.One2many(comodel_name='event.service.line',
inverse_name='event_id',
string="Services",
help="Services of the event. "
"Automatically adds when "
"service modules are downloaded.")
state = fields.Selection(selection=
[('draft', 'Draft'), ('confirm', 'Confirmed'),
('invoice', 'Invoiced'), ('close', 'Close'), ('cancel', 'Canceled')],
string="State", default="draft", help="stages of"
" the event")
note = fields.Text(string="Terms and conditions", help="Note for the event")
price_subtotal = fields.Float(string='Total',
compute='_compute_price_subtotal', store=True,
help="Sub total price")
image = fields.Binary(string="Image", attachment=True,
help="This field holds the image used as image for "
"the event, limited to 1080x720px.")
currency_id = fields.Many2one(comodel_name='res.currency', readonly=True,
default=lambda self:
self.env.user.company_id.currency_id,
help="Default currency is currency of the "
"company", string="Currency")
invoice_count = fields.Integer(string="Invoice Count", help="Count of "
"the invoices")
invoice_ids = fields.Many2many(comodel_name="account.move", copy=False,
string="Invoices", help="Corresponding "
"invoices")
pending_invoice = fields.Boolean(string="Invoice Pending",
compute='_compute_pending_invoice',
help="Is invoice Pending")
@api.depends('service_line_ids', 'service_line_ids.state')
def _compute_pending_invoice(self):
"""Computes the invoices"""
self.pending_invoice = any(
line.state == 'done' and not line.invoiced for line in
self.service_line_ids)
@api.depends('service_line_ids', 'service_line_ids.amount')
def _compute_price_subtotal(self):
""" Computes price total """
total = 0
for items in self.service_line_ids:
total += items.amount
self.price_subtotal = total
@api.model
def create(self, values):
"""Create method for sequencing and checking dates while creating"""
if values['start_date'] >= values['end_date']:
raise UserError(_('Start date must be less than End date'))
name = f"%s-%s-%s" % (
self.env['res.partner'].browse(values['partner_id']
).name,
self.env['event.management.type'].browse(
values['type_of_event_id']).name, values['date'])
values['name'] = name
values['ref'] = self.env['ir.sequence'].next_by_code(
'event.order.sequence')
return super(EventManagement, self).create(values)
def action_event_confirm(self):
"""Button action to confirm"""
self.state = "confirm"
def action_event_cancel(self):
"""Button action to cancel"""
self.state = "cancel"
def action_event_close(self):
"""Button action to close"""
pending = 0
for lines in self.service_line_ids:
if lines.invoiced is False:
pending = 1
if pending == 1:
raise ValidationError(_('You can close an event only when all '
'services is Done and Invoiced'))
self.state = "close"
def action_view_invoice_event(self):
"""Button action to View the related invoice"""
invoices = self.mapped('invoice_ids')
action = self.env.ref('account.action_move_out_invoice_type'
).sudo().read()[0]
if len(invoices) > 1:
action['domain'] = [('id', 'in', invoices.ids)]
elif len(invoices) == 1:
action['views'] = [
(self.env.ref('account.view_move_form').id, 'form')]
action['res_id'] = invoices.ids[0]
else:
action = {'type': 'ir.actions.act_window_close'}
return action
def action_event_invoice_create(self):
"""Button action to create related invoice"""
product_line = []
payment_list = []
for line in self.service_line_ids:
if line.invoiced is False and line.state == "done":
product_line.append({'product_id': line.related_product_id,
'price_unit': line.amount})
line.invoiced = True
if len(product_line) > 0:
partner = self.partner_id
for records in product_line:
product_id = records['product_id']
if product_id.property_account_income_id.id:
income_account = product_id.property_account_income_id.id
elif product_id.categ_id.property_account_income_categ_id.id:
income_account = product_id.categ_id. \
property_account_income_categ_id.id
else:
raise UserError(
_('Please define income account for'
' this product: "%s" (id:%d).') % (
product_id.name, product_id.id))
inv_line_data = {
'name': self.name,
'account_id': income_account,
'price_unit': records['price_unit'],
'quantity': 1,
'product_id': product_id.id,
'product_uom_id': product_id.uom_id.id,
}
payment_list.append((0, 0, inv_line_data))
inv_data = {
'move_type': 'out_invoice',
'ref': self.name,
'bank_partner_id': partner.property_account_payable_id.id,
'partner_id': partner.id,
'payment_reference': self.name,
'company_id': self.env.user.company_id.id,
'invoice_line_ids': payment_list,
}
inv_id = self.env['account.move'].create(inv_data)
result = {
'view_type': 'form',
'res_model': 'account.move',
'res_id': inv_id.id,
'view_id': False,
'view_mode': 'form',
'type': 'ir.actions.act_window'
}
self.state = "invoice"
all_invoice_ids = self.invoice_ids.ids
all_invoice_ids.append(inv_id.id)
self.update({'invoice_ids': all_invoice_ids,
'invoice_count': self.invoice_count + 1})
return result

60
event_management/models/event_management_type.py

@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: MOHAMMED DILSHAD TK (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 fields, models
class EventManagementType(models.Model):
"""Model for managing the Event types"""
_name = 'event.management.type'
_description = 'Event Management Type'
name = fields.Char(string="Name", help="Name of event type")
image = fields.Binary(string="Image", attachment=True,
help="This field holds the image used as "
"image for the event, limited to 1080x720px.")
event_count = fields.Integer(string="# of Events",
compute='_compute_event_count',
help="Count of event")
def _compute_event_count(self):
"""Computes the count of event """
for records in self:
records.event_count = self.env['event.management'].search_count([
('type_of_event_id', '=', records.id)])
def _get_action(self, action_xml_id):
""" Passes the values to Event management kanban """
action = self.env['ir.actions.actions']._for_xml_id(action_xml_id)
if self:
action['display_name'] = self.display_name
context = {
'search_default_type_of_event_id': [self.id],
'default_type_of_event_id': self.id,
}
context = {**literal_eval(action['context']), **context}
action['context'] = context
return action
def get_event_type_action_event(self):
"""Event type action """
return self._get_action('event_management.event_management_action')

66
event_management/models/event_service_line.py

@ -0,0 +1,66 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: MOHAMMED DILSHAD TK (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 odoo import api, fields, models, _
from odoo.exceptions import ValidationError
class EventServiceLine(models.Model):
"""Model to manage the service lines of the event management"""
_name = 'event.service.line'
_description = 'Event Service Line'
service = fields.Selection([('', '')], string="Services",
required=True, help="Name of service")
event_id = fields.Many2one('event.management', string="Event",
help="Name of the events")
date_from = fields.Datetime(string="Date from", required=True,
help="Start date of service")
date_to = fields.Datetime(string="Date to", required=True,
help="End date of the service")
amount = fields.Float(string="Amount", readonly=True, help="Total amount "
"of a service")
state = fields.Selection([('done', 'Done'), ('pending', 'Pending')],
string="State", default="pending",
readonly=True, help="Stages of the events")
currency_id = fields.Many2one('res.currency', readonly=True,
default=lambda self:
self.env.user.company_id.currency_id,
help="Currency of current company",
string="Currency")
invoiced = fields.Boolean(string="Invoiced", readonly=True,
help="Is this service invoiced")
related_product_id = fields.Many2one('product.product',
string="Related Product",
help="List of related Products")
_sql_constraints = [('event_supplier_unique', 'unique(event_id, service)',
'Duplication Of Service In The Service Lines '
'Is not Allowed')]
@api.constrains('date_from', 'date_to')
def _check_date_to_date_from(self):
""" Checking is end date less than start date"""
for rec in self:
if rec.date_to < rec.date_from:
raise ValidationError(_("Date to cannot be set before "
"`Date from` Check the 'Date from' and "
"'Date to' of the '%s' service"
% rec.service))

22
event_management/report/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: MOHAMMED DILSHAD TK (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 event_management_report

63
event_management/report/event_management_report.py

@ -0,0 +1,63 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# This program is free software: you can modify
# it under the terms of the GNU Affero General Public License (AGPL) as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
################################################################################
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
class ReportHotelManagement(models.AbstractModel):
"""Class for fetch and carry off pdf data to template"""
_name = "report.event_management.report_event_management"
_description = "Event Management Report"
@api.model
def _get_report_values(self, docids, data=None):
""" Gets report values """
form_data = data['form']
where = '1=1'
if form_data['date_from'] and form_data['date_to'] \
and form_data['date_from'] > form_data['date_to']:
raise ValidationError(_('From Date must be less than To Date'))
if form_data["partner_id"]:
where += f"""AND e.partner_id = '{form_data['partner_id'][0]}'"""
if form_data['date_from']:
where += f"""AND e.date>='{form_data['date_from']}'"""
if form_data['date_to']:
where += f"""AND e.date <= '{form_data['date_to']}'"""
if form_data['type_event_ids']:
event_list = data['event_types']
event_ids = f"({event_list[0]})" if len(event_list) == 1 else tuple(
event_list)
where += f"""AND e.type_of_event_id IN {event_ids}"""
if form_data['event_state']:
where += f"""AND e.state = '{form_data['event_state']}'"""
self.env.cr.execute(f"""
SELECT e.name as event, t.name as type, r.name as partner,
e.state, e.date,
e.start_date, e.end_date
from event_management e inner join
res_partner r on e.partner_id = r.id
inner join event_management_type t on
e.type_of_event_id = t.id
where {where} order by e.date""")
return {
'docs': self.env.cr.dictfetchall(),
'docs2': form_data,
'today_date': fields.Datetime.now()
}

11
event_management/report/event_management_reports.xml

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Event management report action-->
<record id="action_report_event_management_report" model="ir.actions.report">
<field name="name">Event Management Report</field>
<field name="model">event.management</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">event_management.report_event_management</field>
<field name="report_file">event_management.report_event_management</field>
</record>
</odoo>

95
event_management/report/event_management_templates.xml

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Event management report template-->
<template id="report_event_management">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<div class="oe_structure"/>
<div class="row">
<div class="col-md-12">
<h2>
<span>Event Report</span>
</h2>
</div>
</div>
<br/>
<br/>
<div>
<span>Date:</span>
<span t-esc="today_date"/>
</div>
<br/>
<div>
<span t-if="docs2['date_from']">
<b>From:</b>
<span style="margin-left:3px;margin-right:17px;margin-bottom:3px"
t-esc="docs2['date_from']"/>
</span>
<span t-if="docs2['date_to']">
<b>To:</b>
<span style="margin-left:3px;margin-right:17px;margin-bottom:3px"
t-esc="docs2['date_to']"/>
</span>
<span t-if="docs2['partner_id']">
<b>Customer:</b>
<span style="margin-left:3px;margin-bottom:3px"
t-esc="docs2['partner_id'][1]"/>
</span>
</div>
<br/>
<div class="row">
<div class="col-md-12">
<table class="table table-sm">
<thead>
<tr>
<th>Sl.no</th>
<th>Name</th>
<th>Type</th>
<th>Customer</th>
<th>Date</th>
<th>Start Date</th>
<th>End Date</th>
<th>State</th>
</tr>
</thead>
<tbody>
<t t-foreach="docs" t-as="l">
<tr>
<td>
<t t-esc="l_index + 1"/>
</td>
<td>
<span t-esc="l['event']"/>
</td>
<td>
<span t-esc="l['type']"/>
</td>
<td>
<span t-esc="l['partner']"/>
</td>
<td>
<span t-esc="l['date']"/>
</td>
<td>
<span t-esc="l['start_date']"/>
</td>
<td>
<span t-esc="l['end_date']"/>
</td>
<td>
<span t-esc="{'draft': 'Draft', 'confirm': 'Confirmed', 'cancel': 'Cancelled', 'invoice': 'Invoiced', 'close': 'Closed'}
[l['state']]"/>
</td>
</tr>
</t>
</tbody>
</table>
</div>
</div>
<div class="oe_structure"/>
</div>
</t>
</t>
</template>
</odoo>

17
event_management/security/event_management_groups.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Category event management-->
<record id="event_management.module_category_event_management"
model="ir.module.category">
<field name="name">Event Management</field>
<field name="sequence">19</field>
</record>
<!-- Event management manager group-->
<record id="group_event_manager" model="res.groups">
<field name="name">Event Manager</field>
<field name="category_id"
ref="event_management.module_category_event_management"/>
<field name="users"
eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
</record>
</odoo>

11
event_management/security/event_management_security.xml

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Manager see all events rule -->
<record id="event_mngr_see_all_events" model="ir.rule">
<field name="name">Event Manager see all Events</field>
<field name="model_id" ref="event_management.model_event_management"/>
<field name="domain_force">[]</field>
<field name="groups"
eval="[(4, ref('event_management.group_event_manager'))]"/>
</record>
</odoo>

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

@ -0,0 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_event_management_event_manager,access.event.management.event_management,model_event_management,event_management.group_event_manager,1,1,1,1
access_event_service_line_event_manager,access.event.service.line.event_manager,model_event_service_line,event_management.group_event_manager,1,1,1,1
access_event_management_type_event_manager,access.event.management.type.event_manager,model_event_management_type,event_management.group_event_manager,1,1,1,1
access_event_management_report_event_manager,access.event.management.report.event_manager,model_event_management_report,event_management.group_event_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_event_management_event_manager access.event.management.event_management model_event_management event_management.group_event_manager 1 1 1 1
3 access_event_service_line_event_manager access.event.service.line.event_manager model_event_service_line event_management.group_event_manager 1 1 1 1
4 access_event_management_type_event_manager access.event.management.type.event_manager model_event_management_type event_management.group_event_manager 1 1 1 1
5 access_event_management_report_event_manager access.event.management.report.event_manager model_event_management_report event_management.group_event_manager 1 1 1 1

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
event_management/static/description/assets/modules/2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
event_management/static/description/assets/screenshots/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 KiB

BIN
event_management/static/description/assets/screenshots/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 KiB

BIN
event_management/static/description/assets/screenshots/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

BIN
event_management/static/description/assets/screenshots/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
event_management/static/description/assets/screenshots/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

BIN
event_management/static/description/assets/screenshots/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
event_management/static/description/assets/screenshots/7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
event_management/static/description/assets/screenshots/8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 517 KiB

BIN
event_management/static/description/assets/screenshots/9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 KiB

BIN
event_management/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
event_management/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

758
event_management/static/description/index.html

@ -0,0 +1,758 @@
<div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div 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 -->
<!-- APP HERO -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Event Management
</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
A Module For Managing Different Kind Of Events
</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif"
style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 85%; left: 12%; 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">
Event management is a core module which can manage any type of events.
The user can selectively download and install different service modules
to extend the scope of this module. The new service will be
automatically
get attached to this core Event management module. It is different from
Odoo's event module. Here you can manage different types of events and
allocate services to different users. Note: Presently we have released
the service 'Event Catering' under this module. New services are being
developed by our team.
</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="col-sm-12 col-md-6">
<div class="d-flex align-items-start"
style="margin-top: 40px; margin-bottom: 40px">
<img src="./assets/misc/check-box.png" class="mr-2"/>
<div>
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Event Order.
</span>
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 12px;">
Can create new Event management orders.
</span>
</div>
</div>
<div class="d-flex align-items-start"
style="margin-top: 40px; margin-bottom: 40px">
<img src="./assets/misc/check-box.png" class="mr-2"/>
<div>
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Automatically service orders.
</span>
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 12px;">
Service orders are automatically created on confirming event orders.
</span>
</div>
</div>
<div class="d-flex align-items-start"
style="margin-top: 40px; margin-bottom: 40px">
<img src="./assets/misc/check-box.png" class="mr-2"/>
<div>
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Integrated with Accounting Module.
</span>
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 12px;">
Can create and view invoices based on services.
</span>
</div>
</div>
<div class="d-flex align-items-start"
style="margin-top: 40px; margin-bottom: 40px">
<img src="./assets/misc/check-box.png" class="mr-2"/>
<div>
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Informative Dashboard
</span>
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 12px;">
Event type related order count is visible and can see the event order
related to each type on clicking the type from Dashboard.
</span>
</div>
</div>
<div class="d-flex align-items-start"
style="margin-top: 40px; margin-bottom: 40px">
<img src="./assets/misc/check-box.png" class="mr-2"/>
<div>
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Event Types.
</span>
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 12px;">
User can configure new Event types and can delete the old ones.
Can configure types from the Dashboard itself.
</span>
</div>
</div>
<div class="d-flex align-items-start"
style="margin-top: 40px; margin-bottom: 40px">
<img src="./assets/misc/check-box.png" class="mr-2"/>
<div>
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Reports
</span>
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 12px;">
Event Management Report in Pdf and Xlsx is available.
</span>
</div>
</div>
</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;">
Event Management Dashboard View
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Dashboard view with all the event types and related order counts
</p>
<img src="./assets/screenshots/1.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;">
Event order Kanban view
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Kanban view with Event type image and Event reference.
</p>
<img src="./assets/screenshots/2.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;">
Event order Tree view
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Several details including Customer, Start and End date, State
etc.
</p>
<img src="./assets/screenshots/3.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;">
Event order Form view
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
In form view user can add the details of order and the services to be provided.The user only able to add services to service lines
only if service modules are downloaded(after install automatically add to order line).
</p>
<img src="./assets/screenshots/4.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;">
Event Management Report
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Can print pdf and xlsx report with several details including
Customer, Event type,
State and also based on Dates.
</p>
<img src="./assets/screenshots/5.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;">
Pdf Report
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Pdf report with the Event order details based on the details
from Report wizard.
</p>
<img src="./assets/screenshots/6.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;">
Excel Report
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Excel report with the Event order details based on the details
from Report wizard.
</p>
<img src="./assets/screenshots/7.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;">
Event Type Form view
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Configure different Event type with name and Image.
</p>
<img src="./assets/screenshots/8.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;">
Event Type Tree view
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Tree view of Event type.
</p>
<img src="./assets/screenshots/9.png"
class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center"
style="text-align: center; padding: 2.5rem 1rem !important;">
<h2 style="color: #212529 !important;">Suggested Products</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/>
<div id="demo1" class="row carousel slide" 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/14.0/fleet_rental/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
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/14.0/fleet_car_workshop/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/2.jpg">
</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/14.0/salon_management/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/3.png">
</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/14.0/insurance_management_cybro/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
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/14.0/laundry_management/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
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/14.0/medical_lab_management/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
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="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="#demo1" 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>
</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"
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"
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 -->

BIN
event_management/static/img/event_type_image1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

BIN
event_management/static/img/event_type_image2.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
event_management/static/img/event_type_image3.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
event_management/static/img/event_type_image4.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
event_management/static/img/event_type_image5.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

BIN
event_management/static/img/event_type_image6.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
event_management/static/img/event_type_image7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 KiB

12
event_management/static/src/css/event_dashboard.css

@ -0,0 +1,12 @@
.style_event {
text-align: center;
flex: none !important;
background: none !important;
box-shadow: none !important;
}
.style_event_type {
text-align: center;
flex: none !important;
background: none !important;
box-shadow: none !important;
}

30
event_management/static/src/js/action_manager.js

@ -0,0 +1,30 @@
odoo.define('event_management.action_manager', function (require) {
"use strict";
/**
* The purpose of this file is to add the actions of type
* 'ir_actions_xlsx_download' to the ActionManager.
*/
var ActionManager = require('web.ActionManager');
var framework = require('web.framework');
var session = require('web.session');
ActionManager.include({ _executeXlsxReportDownloadAction: function (action) {
framework.blockUI();
var def = $.Deferred();
session.get_file({
url: '/xlsx_reports',
data: action.data,
success: def.resolve.bind(def),
error: (error) => this.call('crash_manager', 'rpc_error', error),
complete: framework.unblockUI,
});
return def;
},
_handleAction: function (action, options) {
if (action.report_type === 'xlsx') {
return this._executeXlsxReportDownloadAction(action, options);
}
return this._super.apply(this, arguments);
},
});
});

11
event_management/views/assets.xml

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Add action_manager js file in to assets_backend-->
<template id="assets_backend" name="xls_assets"
inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript"
src="/event_management/static/src/js/action_manager.js"/>
</xpath>
</template>
</odoo>

8
event_management/views/dashboard_action.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Dashboard client actions-->
<record id="event_dashboard_action" model="ir.actions.client">
<field name="name">Event Types</field>
<field name="tag">event_type</field>
</record>
</odoo>

119
event_management/views/event_management_type_views.xml

@ -0,0 +1,119 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Event management type view tree-->
<record id="event_management_type_view_tree" model="ir.ui.view">
<field name="name">event.management.type.view.tree</field>
<field name="model">event.management.type</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
</tree>
</field>
</record>
<!-- Event management type view form-->
<record id="event_management_type_view_form" model="ir.ui.view">
<field name="name">event.management.type.view.form</field>
<field name="model">event.management.type</field>
<field name="arch" type="xml">
<form>
<sheet>
<div style="text-align:center;padding-top:20px;">
<field name="image" widget='image'
style="box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);"/>
</div>
<h1 style="text-align: center;margin-top: 20px;">
<field name="name" required="1"/>
</h1>
</sheet>
</form>
</field>
</record>
<!-- Event management type action-->
<record id="event_management_type_view_tree_action"
model="ir.actions.act_window">
<field name="name">Event type</field>
<field name="res_model">event.management.type</field>
<field name="type">ir.actions.act_window</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to add an event type.
</p>
<p>
Here you can create different types of events.
</p>
</field>
</record>
<!-- Event management type view kanban-->
<record id="event_management_type_view_kanban" model="ir.ui.view">
<field name="name">event.management.type.view.kanban</field>
<field name="model">event.management.type</field>
<field name="type">kanban</field>
<field name="arch" type="xml">
<kanban class="oe_background_grey o_kanban_dashboard" create="0">
<field name="name"/>
<field name="event_count"/>
<field name="id"/>
<templates>
<t t-name="kanban-box">
<div class="col-md-12 oe_kanban_card">
<div>
<button type="edit" string="Settings"
class="button_background"
groups="event_management.group_event_manager"
style="float: right;margin-top: 2px;background: none !important;border: none !IMPORTANT;FONT-SIZE: 16px;">
<i class="fa fa-cog" title="setting"/>
</button>
</div>
<div class="o_primary style_event_type col-md-12"
style="padding-bottom: 4%;">
<div class="col-md-10">
<a type="object"
name="get_event_type_action_event">
<h2 style="text-align:left;">
<field name="name"/>
</h2>
</a>
</div>
<div class="col-md-12">
<img t-att-src="kanban_image('event.management.type', 'image', record.id.raw_value)"
alt="Image"
style="width:100%; border-radius: 13px;height:150px;"/>
</div>
<div class="col-md-12">
<span style="margin-top: 20%;margin-bottom: 2%;font-size: 18px;">
<span class=" o_primary"
style="float: left;margin-top:2px;">
Total Orders :
</span>
<field name="event_count"/>
</span>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- Event management type view kanban action-->
<record id="event_management_type_action"
model="ir.actions.act_window">
<field name="name">Dashboard</field>
<field name="res_model">event.management.type</field>
<field name="view_mode">kanban,form</field>
<field name="context">{}</field>
</record>
<!-- Event management dashboard menu-->
<menuitem id="event_management_dashboard_menu"
parent="event_management.event_management_root_menu"
action="event_management_type_action" sequence="1"/>
<!-- Event management configuration menu-->
<menuitem id="event_management_configuration_menu" name="Configuration"
parent="event_management_root_menu"
groups="event_management.group_event_manager"/>
<!-- Event management type menu-->
<menuitem id="event_management_type_menu" name="Event Type"
parent="event_management_configuration_menu"
action="event_management_type_view_tree_action"/>
</odoo>

221
event_management/views/event_management_views.xml

@ -0,0 +1,221 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Event management view tree -->
<record id="event_management_view_tree" model="ir.ui.view">
<field name="name">event.management.view.tree</field>
<field name="model">event.management</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="type_of_event_id"/>
<field name="partner_id"/>
<field name="date"/>
<field name="start_date"/>
<field name="end_date"/>
<field name="state"/>
</tree>
</field>
</record>
<!-- Event management view kanban -->
<record id="event_management_view_kanban" model="ir.ui.view">
<field name="name">event.management.view.kanban</field>
<field name="model">event.management</field>
<field name="arch" type="xml">
<kanban quick_create="false">
<field name="type_of_event_id"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_global_click col-md-2 style_event">
<div class="o_kanban_image"
style="width:100%; ">
<t>
<img t-att-src="kanban_image('event.management.type', 'image', record.type_of_event_id.raw_value)"
alt="type"
style="width:100%; border-radius: 23px;"/>
</t>
</div>
<div class="oe_kanban_content"
style="padding-left: 0px !important;">
<div style="text-align: center;;font-size:15px;">
<strong>
<field name="name"/>
</strong>
</div>
</div>
<div class="oe_clear"/>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- Event management view form -->
<record id="event_management_view_form" model="ir.ui.view">
<field name="name">event.management.view.form</field>
<field name="model">event.management</field>
<field name="arch" type="xml">
<form>
<header>
<button name="action_event_confirm" string="Confirm"
type="object" class="oe_highlight"
states="draft"/>
<button name="action_event_invoice_create"
string="Create Invoice" type="object"
class="oe_highlight"
attrs="{'invisible': ['|', ('state', 'not in', ['invoice', 'confirm']), ('pending_invoice', '=', False)]}"/>
<button name="action_event_cancel" string="Cancel"
type="object" states="draft"/>
<button name="action_event_close" string="Close"
type="object" states="invoice"/>
<field name="state" widget="statusbar"
statusbar_visible="draft,confirm,invoice,close"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="action_view_invoice_event"
type="object"
class="oe_stat_button"
icon="fa-pencil-square-o"
attrs="{'invisible': [('state', 'not in', ['invoice', 'close'])]}">
<field name="invoice_count" widget="statinfo"
string="Invoices"/>
</button>
</div>
<h1 class="mt0">
<field name="name" readonly="1"/>
</h1>
<group>
<group>
<field name="type_of_event_id"
attrs="{'readonly': [('state', 'not in', ['draft'])]}"/>
<field name="partner_id"
attrs="{'readonly': [('state', 'not in', ['draft'])]}"/>
<field name="ref" readonly="1"/>
</group>
<group>
<field name="date"
attrs="{'readonly': [('state', 'not in', ['draft'])]}"/>
<field name="start_date"
attrs="{'readonly': [('state', 'not in', ['draft'])]}"/>
<field name="end_date"
attrs="{'readonly': [('state', 'not in', ['draft'])]}"/>
<field name="currency_id" invisible="1"/>
<field name="pending_invoice" invisible="1"/>
</group>
</group>
<notebook>
<page string="Service Lines">
<field name="service_line_ids" mode="tree"
attrs="{'readonly': [('state', 'not in', ['draft'])]}">
<tree string="Service Lines Tree"
editable="bottom">
<field name="service"/>
<field name="date_from"/>
<field name="date_to"/>
<field name="state" readonly="1"/>
<field name="invoiced" readonly="1"/>
<field name="currency_id"
invisible="1"/>
<field name="related_product_id"
invisible="1"/>
<field name="invoiced" invisible="1"/>
<field name="amount" widget="monetary"
options="{'currency_field': 'currency_id'}"/>
</tree>
</field>
<group class="oe_subtotal_footer oe_right"
colspan="2" name="event_total">
<div class="oe_subtotal_footer_separator oe_inline o_td_label">
<label for="price_subtotal"/>
</div>
<field name="price_subtotal" nolabel="1"
class="oe_subtotal_footer_separator"
widget="monetary"
options="{'currency_field': 'currency_id'}"/>
</group>
<field name="note" class="oe_inline"
placeholder="Setup default terms and conditions in your company settings."
attrs="{'readonly': [('state', 'not in', ['draft'])]}"/>
<div class="oe_clear"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- Event management search view -->
<record id="event_management_view_search" model="ir.ui.view">
<field name="name">event.management.view.search</field>
<field name="model">event.management</field>
<field name="arch" type="xml">
<search string="Event Management">
<field name="ref"/>
<field name="type_of_event_id"/>
<field name="partner_id"/>
<field name="service_line_ids"/>
<group expand="0" string="Group By">
<filter string="Event Type" name="group_by_event"
domain="[]"
context="{'group_by':'type_of_event_id'}"/>
<filter string="State" name="group_by_state" domain="[]"
context="{'group_by':'state'}"/>
</group>
</search>
</field>
</record>
<!-- Event management calendar view -->
<record id="event_management_view_calender" model="ir.ui.view">
<field name="name">event.management.view.calendar</field>
<field name="model">event.management</field>
<field name="arch" type="xml">
<calendar string="Event Orders" date_start="start_date"
date_stop="end_date" color="type_of_event_id">
<field name="name"/>
<field name="partner_id"/>
<field name="state"/>
</calendar>
</field>
</record>
<!-- Event management graph view -->
<record id="event_management_view_graph" model="ir.ui.view">
<field name="name">event.management.view.graph</field>
<field name="model">event.management</field>
<field name="arch" type="xml">
<graph string="Event Orders">
<field name="partner_id"/>
<field name="type_of_event_id"/>
<field name="price_subtotal" type="measure"/>
</graph>
</field>
</record>
<!-- Event management kanban view window action-->
<record id="event_management_action"
model="ir.actions.act_window">
<field name="name">Event Management</field>
<field name="res_model">event.management</field>
<field name="type">ir.actions.act_window</field>
<field name="view_mode">kanban,tree,form,calendar,graph</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to add an event order.
</p>
<p>
Here you can create and manage your events.
</p>
</field>
</record>
<!-- Event management root menu-->
<menuitem id="event_management_root_menu" name="Event Management"
web_icon="event_management,static/description/icon.png"/>
<!-- Event management sub menu 1-->
<menuitem id="event_management_sub_menu1" name="Event Management"
parent="event_management_root_menu"
sequence="5"/>
<!-- Event management sub menu 2-->
<menuitem id="event_management_sub_menu2" name="Event Management"
parent="event_management_sub_menu1"
action="event_management_action" sequence="2"/>
<!-- Event management service menu -->
<menuitem id="event_management_service_menu" name="Service"
parent="event_management_sub_menu1" sequence="4"/>
</odoo>

22
event_management/wizard/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: MOHAMMED DILSHAD TK (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 event_management_report

192
event_management/wizard/event_management_report.py

@ -0,0 +1,192 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: MOHAMMED DILSHAD TK (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/>.
#
################################################################################
import json
from odoo import fields, models, _
from odoo.exceptions import ValidationError
from odoo.tools import date_utils, io, xlsxwriter
class EventManagementReport(models.TransientModel):
"""Class for Event Management Report"""
_name = 'event.management.report'
_description = 'Event Management Report'
date_from = fields.Date(string="From", help='From a date')
date_to = fields.Date(string="To", help='To a date')
partner_id = fields.Many2one('res.partner', string='Customer',
help='Customer of event')
type_event_ids = fields.Many2many('event.management.type',
'event_type_rel',
'report_id', 'type_id',
string="Type",
help='Event management types')
event_state = fields.Selection(
[('draft', 'Draft'), ('confirm', 'Confirmed'),
('invoice', 'Invoiced'), ('close', 'Close'), ('cancel', 'Canceled')],
string="State", help='State of event')
def action_print_pdf_report(self):
"""Method for printing pdf report"""
data = {
'model': 'event.management.report',
'form': self.read()[0],
'event_types': self.type_event_ids.ids
}
return (self.env.ref(
'event_management.action_report_event_management_report')
.report_action(self, data=data))
def action_print_xls_report(self):
"""Method of button for printing xlsx report"""
rec = self.env.user.sudo().company_id
if self.date_from and self.date_to and self.date_from > self.date_to:
raise ValidationError(_('From Date must be less than To Date'))
data = {
'event_type': self.type_event_ids.ids,
'date_from': self.date_from,
'date_to': self.date_to,
'customer': self.partner_id.id,
'state': self.event_state,
'today_date': fields.datetime.now(),
'company': [rec.partner_id.name, rec.street, rec.favicon]
}
return {
'type': 'ir.actions.report',
'report_type': 'xlsx',
'data': {'model': 'event.management.report',
'output_format': 'xlsx',
'options': json.dumps(data,
default=date_utils.json_default),
'report_name': 'Event Management Report', },
}
def get_xlsx_report(self, data, response):
"""Method for fetching data and printing xlsx report from controller"""
output = io.BytesIO()
workbook = xlsxwriter.Workbook(output, {'in_memory': True})
sheet = workbook.add_worksheet()
head = workbook.add_format({'align': 'center',
'bold': True, 'font_size': '20px'})
cell_head_format = workbook.add_format({'font_size': '12px'})
cell_data_format = workbook.add_format({'font_size': '10px'})
txt_head = workbook.add_format({'font_size': '10px', 'border': 2})
txt = workbook.add_format({'font_size': '10px', 'border': 2})
sheet.merge_range('F2:M3', 'EVENT MANAGEMENT REPORT', head)
sheet.merge_range('B4:E4', data['company'][0], cell_head_format)
sheet.merge_range('B5:E5', data['company'][1], cell_head_format)
sheet.write('B6', 'Date:', cell_head_format)
sheet.merge_range('C6:E6', data['today_date'], cell_data_format)
if data['date_from'] and data['date_to'] and data['customer']:
customer_name = self.env['res.partner'].browse(int(
data['customer'])).name
sheet.write('B8', 'From:', cell_head_format)
sheet.merge_range('C8:D8', data['date_from'], cell_data_format)
sheet.write('F8', 'To:', cell_head_format)
sheet.merge_range('G8:H8', data['date_to'], cell_data_format)
sheet.merge_range('J8:K8', 'Customer:', cell_head_format)
sheet.merge_range('L8:N8', customer_name, cell_data_format)
elif data['date_from'] and data['date_to']:
sheet.write('B8', 'From:', cell_head_format)
sheet.merge_range('C8:D8', data['date_from'],
cell_data_format)
sheet.write('F8', 'To:', cell_head_format)
sheet.merge_range('G8:H8', data['date_to'], cell_data_format)
elif data['date_from'] and data['customer']:
customer_name = self.env['res.partner'].browse(int(
data['customer'])).name
sheet.write('B8', 'From:', cell_head_format)
sheet.merge_range('C8:D8', data['date_from'], cell_data_format)
sheet.merge_range('F8:G8', 'Customer:', cell_head_format)
sheet.merge_range('H8:J8', customer_name, cell_data_format)
elif data['customer'] and data['date_to']:
customer_name = self.env['res.partner'].browse(int(
data['customer'])).name
sheet.write('B8', 'To:', cell_head_format)
sheet.merge_range('C8:D8', data['date_to'], cell_data_format)
sheet.merge_range('F8:G8', 'Customer:', cell_head_format)
sheet.merge_range('H8:J8', customer_name, cell_data_format)
elif data['date_from']:
sheet.write('B8', 'From:', cell_head_format)
sheet.merge_range('C8:D8', data['date_from'], cell_data_format)
elif data['date_to']:
sheet.write('B8', 'To:', cell_head_format)
sheet.merge_range('C8:D8', data['date_to'], cell_data_format)
elif data['customer']:
customer_name = self.env['res.partner'].browse(int(
data['customer'])).name
sheet.merge_range('B8:C8', 'Customer:', cell_head_format)
sheet.merge_range('D8:E8', customer_name, cell_data_format)
sheet.write(10, 0, 'Sl.no', txt_head)
sheet.merge_range('B11:E11', 'Name', txt_head)
sheet.merge_range('F11:H11', 'Type', txt_head)
sheet.merge_range('I11:K11', 'Customer', txt_head)
sheet.merge_range('L11:M11', 'Date', txt_head)
sheet.merge_range('N11:O11', 'Start Date', txt_head)
sheet.merge_range('P11:Q11', 'End Date', txt_head)
sheet.write(10, 17, 'State', txt_head)
where = '1=1'
if data["customer"]:
where += """AND e.partner_id = %s""" % int(data['customer'])
if data['date_from']:
where += """AND e.date>='%s'""" % (data['date_from'])
if data['date_to']:
where += """AND e.date <= '%s'""" % (data['date_to'])
if data['event_type']:
event_list = data['event_type']
event_ids = f"({event_list[0]})" if len(
event_list) == 1 else tuple(event_list)
where += """AND e.type_of_event_id IN {}""".format(event_ids)
if data['state']:
where += """AND e.state = '%s'""" % (data['state'])
self.env.cr.execute("""
SELECT e.name as event, t.name as type, r.name as partner,
e.state, e.date,
e.start_date, e.end_date
from event_management e inner join
res_partner r on e.partner_id = r.id
inner join event_management_type t on
e.type_of_event_id = t.id
where %s order by e.date""" % where)
rec = self.env.cr.fetchall()
col = 11
row = 1
for i in range(0, len(rec)):
sheet.write(col, 0, row, txt)
sheet.merge_range('B%d:E%d' % (col + 1, col + 1), rec[i][0], txt)
sheet.merge_range('F%d:H%d' % (col + 1, col + 1), rec[i][1], txt)
sheet.merge_range('I%d:K%d' % (col + 1, col + 1), rec[i][2], txt)
sheet.merge_range('L%d:M%d' % (col + 1, col + 1),
fields.Date.to_string(rec[i][4]), txt)
sheet.merge_range('N%d:O%d' % (col + 1, col + 1),
fields.Datetime.to_string(rec[i][5]), txt)
sheet.merge_range('P%d:Q%d' % (col + 1, col + 1),
fields.Datetime.to_string(rec[i][6]), txt)
sheet.write(col, 17,
dict(self.env['event.management']._fields[
'state'].selection).get(rec[i][3]), txt)
col += 1
row += 1
workbook.close()
output.seek(0)
response.stream.write(output.read())
output.close()

49
event_management/wizard/event_management_report_views.xml

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Event management report view form-->
<record id="event_management_report_view_form" model="ir.ui.view">
<field name="name">event.management.report.view.form</field>
<field name="model">event.management.report</field>
<field name="arch" type="xml">
<form string="Wizard">
<group>
<group>
<field name="partner_id"/>
<field name="type_event_ids" widget="many2many_tags"/>
<field name="event_state"/>
</group>
<group>
<field name="date_from"/>
<field name="date_to"/>
</group>
</group>
<footer>
<button name="action_print_pdf_report" type="object"
class="oe_highlight" string="Print PDF"/>
<button name="action_print_xls_report" type="object"
class="oe_highlight" string="Print Excel"/>
</footer>
</form>
</field>
</record>
<!-- Event management report action-->
<record id="event_management_report_action"
model="ir.actions.act_window">
<field name="name">Event Management Report</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">event.management.report</field>
<field name="view_mode">form</field>
<field name="view_id" ref="event_management_report_view_form"/>
<field name="target">new</field>
</record>
<!-- Event management report menu-->
<menuitem id="event_management_report_menu" name="Reporting"
parent="event_management.event_management_root_menu" sequence="5">
<menuitem id="event_managements_reports_menu"
name="Event Management Report">
<menuitem id="event_management_report_menu_sub"
name="Event Management Report" sequence="1"
action="event_management_report_action"/>
</menuitem>
</menuitem>
</odoo>
Loading…
Cancel
Save