Browse Source

Nov 25 [ADD] : Initial Commit 'event_management'

pull/221/merge
AjmalCybro 2 years ago
parent
commit
904e0bfff6
  1. 33
      event_management/README.rst
  2. 23
      event_management/__init__.py
  3. 53
      event_management/__manifest__.py
  4. 20
      event_management/controllers/__init__.py
  5. 36
      event_management/controllers/main.py
  6. 40
      event_management/data/event_management.xml
  7. 5
      event_management/doc/RELEASE_NOTES.md
  8. 20
      event_management/models/__init__.py
  9. 269
      event_management/models/event_management.py
  10. 20
      event_management/reports/__init__.py
  11. 71
      event_management/reports/event_management_pdf_report.py
  12. 10
      event_management/reports/event_management_pdf_report.xml
  13. 91
      event_management/reports/pdf_report_template.xml
  14. 23
      event_management/security/event_security.xml
  15. 5
      event_management/security/ir.model.access.csv
  16. BIN
      event_management/static/description/assets/icons/check.png
  17. BIN
      event_management/static/description/assets/icons/chevron.png
  18. BIN
      event_management/static/description/assets/icons/cogs.png
  19. BIN
      event_management/static/description/assets/icons/consultation.png
  20. BIN
      event_management/static/description/assets/icons/ecom-black.png
  21. BIN
      event_management/static/description/assets/icons/education-black.png
  22. BIN
      event_management/static/description/assets/icons/hotel-black.png
  23. BIN
      event_management/static/description/assets/icons/license.png
  24. BIN
      event_management/static/description/assets/icons/lifebuoy.png
  25. BIN
      event_management/static/description/assets/icons/manufacturing-black.png
  26. BIN
      event_management/static/description/assets/icons/pos-black.png
  27. BIN
      event_management/static/description/assets/icons/puzzle.png
  28. BIN
      event_management/static/description/assets/icons/restaurant-black.png
  29. BIN
      event_management/static/description/assets/icons/service-black.png
  30. BIN
      event_management/static/description/assets/icons/trading-black.png
  31. BIN
      event_management/static/description/assets/icons/training.png
  32. BIN
      event_management/static/description/assets/icons/update.png
  33. BIN
      event_management/static/description/assets/icons/user.png
  34. BIN
      event_management/static/description/assets/icons/wrench.png
  35. BIN
      event_management/static/description/assets/misc/categories.png
  36. BIN
      event_management/static/description/assets/misc/check-box.png
  37. BIN
      event_management/static/description/assets/misc/compass.png
  38. BIN
      event_management/static/description/assets/misc/corporate.png
  39. BIN
      event_management/static/description/assets/misc/customer-support.png
  40. BIN
      event_management/static/description/assets/misc/cybrosys-logo.png
  41. BIN
      event_management/static/description/assets/misc/features.png
  42. BIN
      event_management/static/description/assets/misc/logo.png
  43. BIN
      event_management/static/description/assets/misc/pictures.png
  44. BIN
      event_management/static/description/assets/misc/pie-chart.png
  45. BIN
      event_management/static/description/assets/misc/right-arrow.png
  46. BIN
      event_management/static/description/assets/misc/star.png
  47. BIN
      event_management/static/description/assets/misc/support.png
  48. BIN
      event_management/static/description/assets/misc/whatsapp.png
  49. BIN
      event_management/static/description/assets/modules/1.png
  50. BIN
      event_management/static/description/assets/modules/2.png
  51. BIN
      event_management/static/description/assets/modules/3.png
  52. BIN
      event_management/static/description/assets/modules/4.png
  53. BIN
      event_management/static/description/assets/modules/5.gif
  54. BIN
      event_management/static/description/assets/modules/6.png
  55. BIN
      event_management/static/description/assets/screenshots/Screenshot1.png
  56. BIN
      event_management/static/description/assets/screenshots/Screenshot2.png
  57. BIN
      event_management/static/description/assets/screenshots/Screenshot3.png
  58. BIN
      event_management/static/description/assets/screenshots/Screenshot4.png
  59. BIN
      event_management/static/description/assets/screenshots/Screenshot5.png
  60. BIN
      event_management/static/description/assets/screenshots/Screenshot6.png
  61. BIN
      event_management/static/description/assets/screenshots/Screenshot7.png
  62. BIN
      event_management/static/description/assets/screenshots/Screenshot8.png
  63. BIN
      event_management/static/description/assets/screenshots/Screenshot9.png
  64. BIN
      event_management/static/description/assets/screenshots/hero.gif
  65. BIN
      event_management/static/description/banner.png
  66. BIN
      event_management/static/description/icon.png
  67. 769
      event_management/static/description/index.html
  68. BIN
      event_management/static/img/event_type_image1.jpg
  69. BIN
      event_management/static/img/event_type_image2.jpeg
  70. BIN
      event_management/static/img/event_type_image3.jpeg
  71. BIN
      event_management/static/img/event_type_image4.jpeg
  72. BIN
      event_management/static/img/event_type_image5.jpeg
  73. BIN
      event_management/static/img/event_type_image6.jpeg
  74. BIN
      event_management/static/img/event_type_image7.png
  75. 12
      event_management/static/src/css/event_dashboard.css
  76. 21
      event_management/static/src/js/action_manager.js
  77. 62
      event_management/views/dashboard.xml
  78. 199
      event_management/views/event_management_view.xml
  79. 52
      event_management/views/event_type_view.xml
  80. 20
      event_management/wizards/__init__.py
  81. 194
      event_management/wizards/event_management_wizard.py
  82. 48
      event_management/wizards/event_management_wizard.xml

33
event_management/README.rst

@ -0,0 +1,33 @@
====================
Event Management v-16
====================
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.
Features
========
* Event order creation.
* Automatically creates service orders.
* Allocate the services to different users.
* Integrated with Accounting module.
* Simple Workflow.
* Attractive Design.
Contributors
============
* (Odoo 14) Avinash Nk <odoo@cybrosys.com>
* (Odoo 16) Robin K <odoo@cybrosys.com>
Maintainer
==========
This module is maintained by Cybrosys Technologies.
For support and more information, please visit https://www.cybrosys.com

23
event_management/__init__.py

@ -0,0 +1,23 @@
# -*- 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 . import models
from . import reports
from . import wizards
from . import controllers

53
event_management/__manifest__.py

@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
###################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Avinash Nk(<avinash@cybrosys.in>)
#
# This program is free software: you can modify
# it under the terms of the GNU Affero General Public License (AGPL) as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
###################################################################################
{
'name': 'Event Management',
'version': '16.0.1.0.0',
'summary': """Core Module for Managing Different Types Of Events.""",
'description': """Core Module for Managing Different Types Of Events""",
"category": "Industry",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
'depends': ['product', 'account'],
'data': ['security/event_security.xml',
'security/ir.model.access.csv',
'views/event_management_view.xml',
'views/event_type_view.xml',
'views/dashboard.xml',
'data/event_management.xml',
'reports/event_management_pdf_report.xml',
'reports/pdf_report_template.xml',
'wizards/event_management_wizard.xml',
],
'assets': {
'web.assets_backend': [
"event_management/static/src/css/event_dashboard.css",
"event_management/static/src/js/action_manager.js"
],
},
'images': ['static/description/banner.png'],
'license': 'AGPL-3',
'installable': True,
'application': True,
}

20
event_management/controllers/__init__.py

@ -0,0 +1,20 @@
# -*- 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 . import main

36
event_management/controllers/main.py

@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
"""Controller for xlsx report"""
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)
token = 'dummy-because-api-expects-one'
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)))

40
event_management/data/event_management.xml

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="event_type1" model="event.management.type">
<field name="name">Wedding</field>
<field name="image" type="base64" file="event_management/static/img/event_type_image1.jpg"/>
</record>
<record id="event_type2" model="event.management.type">
<field name="name">Birthday</field>
<field name="image" type="base64" file="event_management/static/img/event_type_image2.jpeg"/>
</record>
<record id="event_type3" 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>
<record id="event_type4" 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>
<record id="event_type5" model="event.management.type">
<field name="name">Seminars</field>
<field name="image" type="base64" file="event_management/static/img/event_type_image5.jpeg"/>
</record>
<record id="event_type6" model="event.management.type">
<field name="name">Conferences</field>
<field name="image" type="base64" file="event_management/static/img/event_type_image6.jpeg"/>
</record>
<record id="sequence_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>
#### 24.11.2022
#### Version 16.0.1.0.0
#### Module Migrated

20
event_management/models/__init__.py

@ -0,0 +1,20 @@
# -*- 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 . import event_management

269
event_management/models/event_management.py

@ -0,0 +1,269 @@
# -*- coding: utf-8 -*-
"""Event Management"""
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Avinash Nk(<avinash@cybrosys.in>)
#
# 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 ast import literal_eval
from odoo import models, fields, api, _
from odoo.exceptions import UserError, ValidationError
class EventManagement(models.Model):
"""Model for managing Event Management"""
_name = 'event.management'
name = fields.Char('Name', readonly=True, copy=False)
ref = fields.Char(string='Ref', readonly=True)
type_of_event_id = fields.Many2one('event.management.type', string="Type",
required=True)
partner_id = fields.Many2one('res.partner', string="Customer",
required=True)
date = fields.Date(string="Date", default=fields.Date.today, required=True)
start_date = fields.Datetime(string="Start date",
default=lambda self: fields.datetime.now(),
required=True)
end_date = fields.Datetime(string="End date", required=True)
service_line_ids = fields.One2many('event.service.line', 'event_id',
string="Services")
state = fields.Selection([('draft', 'Draft'), ('confirm', 'Confirmed'),
('invoice', 'Invoiced'),
('close', 'Close'), ('cancel', 'Canceled')],
string="State", default="draft")
note = fields.Text('Terms and conditions')
price_subtotal = fields.Float(string='Total',
compute='_compute_price_subtotal',
readonly=True, store=True)
image = fields.Binary("Image", attachment=True,
help="This field holds the image used as image for "
"the event, limited to 1080x720px.")
currency_id = fields.Many2one('res.currency', readonly=True,
default=lambda self:
self.env.user.company_id.currency_id)
invoice_count = fields.Integer(string='# of Invoices')
invoice_ids = fields.Many2many("account.move", string='Invoices',
copy=False)
pending_invoice = fields.Boolean(string="Invoice Pending",
compute='_compute_pending_invoice')
@api.depends('service_line_ids', 'service_line_ids.state')
def _compute_pending_invoice(self):
pending = 0
for lines in self.service_line_ids:
if lines.invoiced is False and lines.state == "done":
pending = 1
if pending == 1:
self.pending_invoice = True
else:
self.pending_invoice = False
@api.depends('service_line_ids', 'service_line_ids.amount')
def _compute_price_subtotal(self):
total = 0
for items in self.service_line_ids:
total += items.amount
self.price_subtotal = total
@api.model
def create(self, values):
"""Crete method for sequencing and checking dates while creating"""
start_date = values['start_date']
end_date = values['end_date']
partner_name = self.env['res.partner'].browse(values['partner_id']).name
event_name = self.env['event.management.type'].browse(
values['type_of_event_id']).name
if start_date >= end_date:
raise UserError(_('Start date must be less than End date'))
name = '%s-%s-%s' % (partner_name, event_name, values['date'])
values['name'] = name
sequence_code = 'event.order.sequence'
sequence_number = self.env['ir.sequence'].next_by_code(sequence_code)
values['ref'] = sequence_number
res = super(EventManagement, self).create(values)
return res
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'))
else:
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:
invoice = self.env['account.move']
move_type = 'out_invoice'
invoice = invoice.with_context(default_move_type=move_type)
journal_id = invoice._compute_journal_id()
company_id = self.env.user.company_id.id
inv_obj = self.env['account.move']
partner = self.partner_id
for records in product_line:
product_id = records['product_id']
price_unit = records['price_unit']
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': 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': move_type,
'ref': self.name,
'bank_partner_id': partner.property_account_payable_id.id,
'partner_id': partner.id,
'payment_reference': self.name,
'company_id': company_id,
'invoice_line_ids': payment_list,
}
inv_id = inv_obj.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
class EventServiceLine(models.Model):
"""Model to manage the service lines of the event management"""
_name = 'event.service.line'
service = fields.Selection([('', '')], string="Services",
required=True)
event_id = fields.Many2one('event.management', string="Event")
date_from = fields.Datetime(string="Date from", required=True)
date_to = fields.Datetime(string="Date to", required=True)
amount = fields.Float(string="Amount", readonly=True)
state = fields.Selection([('done', 'Done'), ('pending', 'Pending')],
string="State", default="pending",
readonly=True)
currency_id = fields.Many2one('res.currency', readonly=True,
default=lambda self:
self.env.user.company_id.currency_id)
invoiced = fields.Boolean(string="Invoiced", readonly=True)
related_product_id = fields.Many2one('product.product',
string="Related Product")
_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):
for rec in self:
if rec.date_to < rec.date_from:
raise ValidationError(_('"Date to" cannot be set before '
'"Date from".\n\n'
'Check the "Date from" and "Date to" '
'of the "%s" service' % rec.service))
class EventManagementType(models.Model):
"""Model for managing the Event types"""
_name = 'event.management.type'
name = fields.Char(string="Name")
image = fields.Binary("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')
def _compute_event_count(self):
for records in self:
events = self.env['event.management'].search([
('type_of_event_id', '=', records.id)])
records.event_count = len(events)
def _get_action(self, action_xml_id):
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,
}
action_context = literal_eval(action['context'])
context = {**action_context, **context}
action['context'] = context
return action
def get_event_type_action_event(self):
return self._get_action(
'event_management.event_management_action_view_kanban')

20
event_management/reports/__init__.py

@ -0,0 +1,20 @@
# -*- 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 . import event_management_pdf_report

71
event_management/reports/event_management_pdf_report.py

@ -0,0 +1,71 @@
# -*- coding: utf-8 -*-
"""Module for pdf data fetching and carry off pdf report data"""
################################################################################
#
# 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/>.
#
################################################################################
import pytz
import datetime
from odoo import fields, models, api
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):
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 += """AND e.partner_id = '%s'""" % \
(form_data['partner_id'][0])
if form_data['date_from']:
where += """AND e.date>='%s'""" % (form_data['date_from'])
if form_data['date_to']:
where += """AND e.date <= '%s'""" % (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 += """AND e.type_of_event_id IN {}""".format(event_ids)
if form_data['event_state']:
where += """AND e.state = '%s'""" % (form_data['event_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.dictfetchall()
user_tz = self.env.user.tz
current = pytz.UTC.localize(fields.datetime.now())
current = current.astimezone(pytz.timezone(user_tz))
current = datetime.datetime.strftime(current, "%d-%m-%Y %H:%M:%S")
return {
'docs': rec,
'docs2': form_data,
'today_date': current
}

10
event_management/reports/event_management_pdf_report.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="action_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>

91
event_management/reports/pdf_report_template.xml

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<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>

23
event_management/security/event_security.xml

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="event_management.module_category_event_management" model="ir.module.category">
<field name="name">Event Management</field>
<field name="sequence">19</field>
</record>
<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>
<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>
</data>
</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,event.management.event.manager,event_management.model_event_management,event_management.group_event_manager,1,1,1,1
access_event_service_line_event_manager,event.service.line.event.manager,event_management.model_event_service_line,event_management.group_event_manager,1,1,1,1
access_event_management_type_event_manager,event.management.type.event.manager,event_management.model_event_management_type,event_management.group_event_manager,1,1,1,1
access_event_management_wizard_event_manager,event.management.wizard.event.manager,event_management.model_event_management_wizard,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 event.management.event.manager event_management.model_event_management event_management.group_event_manager 1 1 1 1
3 access_event_service_line_event_manager event.service.line.event.manager event_management.model_event_service_line event_management.group_event_manager 1 1 1 1
4 access_event_management_type_event_manager event.management.type.event.manager event_management.model_event_management_type event_management.group_event_manager 1 1 1 1
5 access_event_management_wizard_event_manager event.management.wizard.event.manager event_management.model_event_management_wizard 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: 60 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1022 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

BIN
event_management/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
event_management/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

769
event_management/static/description/index.html

@ -0,0 +1,769 @@
<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 -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Event Management System
</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
A Module for managing 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: 45%; left: 12%; right: auto;"/>
</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/Screenshot1.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/Screenshot2.png"
class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
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/Screenshot3.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.
</p>
<img src="./assets/screenshots/Screenshot4.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 wizard
</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/Screenshot5.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/Screenshot6.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/Screenshot7.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/Screenshot8.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/Screenshot9.png"
class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="./assets/misc/categories.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Related
Products
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/dynamic_accounts_report/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="./assets/modules/1.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/custom_gantt_view/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="./assets/modules/2.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/project_custom_gantt/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="./assets/modules/3.png">
</div>
</a>
</div>
</div>
<div class="carousel-item active"
style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/account_reports_xlsx/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="./assets/modules/4.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/base_accounting_kit/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="./assets/modules/5.gif">
</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/15.0/hr_payroll_community/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="./assets/modules/6.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev"
style="width:35px; color:#000"> <span
class="carousel-control-prev-icon"><i
class="fa fa-chevron-left"
style="font-size:24px"></i></span>
</a> <a class="carousel-control-next" href="#demo1"
data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i
class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
<!-- END OF RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="./assets/misc/star.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</div>
<!-- END OF 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 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;
}

21
event_management/static/src/js/action_manager.js

@ -0,0 +1,21 @@
/** @odoo-module **/
import {registry} from "@web/core/registry";
import { download } from "@web/core/network/download";
import framework from 'web.framework';
import session from 'web.session';
registry.category("ir.actions.report handlers").add("xlsx_handler", async (action) => {
if (action.report_type === 'xlsx') {
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;
}
});

62
event_management/views/dashboard.xml

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<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>
<record id="event_management_type_action_view_kanban" 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>
<menuitem id="event_management_dashboard_menu" parent="event_management.event_management_root_menu"
action="event_management_type_action_view_kanban" sequence="1"/>
<record id="action_event_dashboard" model="ir.actions.client">
<field name="name">Event Types</field>
<field name="tag">event_type</field>
</record>
</data>
</odoo>

199
event_management/views/event_management_view.xml

@ -0,0 +1,199 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<!-- Tree Views -->
<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>
<!-- Kanban Views -->
<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>
<!-- Form Views -->
<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'])]}">
<form string="Service Lines Form">
<group>
<group>
<field name="service"/>
<field name="date_from"/>
<field name="date_to"/>
<field name="amount"/>
</group>
</group>
</form>
<tree string="Service Lines Tree" editable="bottom">
<field name="service" class="oe_inline"/>
<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>
<!-- Search Views -->
<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>
<!-- 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>
<!-- 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>
<record id="event_management_action_view_kanban" 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>
<menuitem id="event_management_root_menu" name="Event Management"/>
<menuitem id="event_management_sub_menu1" name="Event Management" parent="event_management_root_menu"
sequence="5"/>
<menuitem id="event_management_sub_menu2" name="Event Management" parent="event_management_sub_menu1"
action="event_management_action_view_kanban" sequence="2"/>
<menuitem id="event_management_service_menu" name="Service" parent="event_management_sub_menu1" sequence="4"/>
</data>
</odoo>

52
event_management/views/event_type_view.xml

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<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>
<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>
<record id="event_management_type_action_view_tree" 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>
<menuitem id="event_management_configuration_menu" name="Configuration" parent="event_management_root_menu"
groups="event_management.group_event_manager"/>
<menuitem id="event_management_type_menu" name="Event Type" parent="event_management_configuration_menu"
action="event_management_type_action_view_tree"/>
</data>
</odoo>

20
event_management/wizards/__init__.py

@ -0,0 +1,20 @@
# -*- 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 . import event_management_wizard

194
event_management/wizards/event_management_wizard.py

@ -0,0 +1,194 @@
# -*- coding: utf-8 -*-
"""Wizard for pdf and xlsx reports"""
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Avinash Nk(<avinash@cybrosys.in>)
#
# This program is free software: you can modify
# it under the terms of the GNU Affero General Public License (AGPL) as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
################################################################################
import json
import pytz
from odoo import fields, models
from odoo.exceptions import ValidationError
from odoo.tools import date_utils, io, xlsxwriter
class HotelManagementWizard(models.TransientModel):
"""Class for wizard"""
_name = 'event.management.wizard'
_description = 'Event Management Wizard'
date_from = fields.Date(string="From")
date_to = fields.Date(string="To")
partner_id = fields.Many2one('res.partner', string='Customer')
type_event_ids = fields.Many2many('event.management.type', 'event_type_rel',
'report_id', 'type_id', string="Type")
event_state = fields.Selection(
[('draft', 'Draft'), ('confirm', 'Confirmed'), ('invoice', 'Invoiced'),
('close', 'Close'), ('cancel', 'Canceled')], string="State")
def print_pdf_report(self):
"""Method for printing pdf report"""
type_select = self.type_event_ids.ids
data = {
'model': 'event.management.wizard',
'form': self.read()[0],
'event_types': type_select
}
return self.env.ref(
'event_management.action_event_management_report').report_action(
self, data=data)
def 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')
user_tz = self.env.user.tz
current = fields.datetime.now()
current = pytz.UTC.localize(current)
current = current.astimezone(pytz.timezone(user_tz))
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': current,
'company': [rec.partner_id.name, rec.street, rec.favicon]
}
return {
'type': 'ir.actions.report',
'report_type': 'xlsx',
'data': {'model': 'event.management.wizard',
'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()
j = 11
k = 1
for i in range(0, len(rec)):
sheet.write(j, 0, k, txt)
sheet.merge_range('B%d:E%d' % (j + 1, j + 1), rec[i][0], txt)
sheet.merge_range('F%d:H%d' % (j + 1, j + 1), rec[i][1], txt)
sheet.merge_range('I%d:K%d' % (j + 1, j + 1), rec[i][2], txt)
sheet.merge_range('L%d:M%d' % (j + 1, j + 1),
fields.Date.to_string(rec[i][4]), txt)
sheet.merge_range('N%d:O%d' % (j + 1, j + 1),
fields.Datetime.to_string(rec[i][5]), txt)
sheet.merge_range('P%d:Q%d' % (j + 1, j + 1),
fields.Datetime.to_string(rec[i][6]), txt)
sheet.write(j, 17,
dict(self.env['event.management']._fields[
'state'].selection).get(rec[i][3]), txt)
j += 1
k += 1
workbook.close()
output.seek(0)
response.stream.write(output.read())
output.close()

48
event_management/wizards/event_management_wizard.xml

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="event_management_wizard_view_form" model="ir.ui.view">
<field name="name">event.management.wizard.view.form</field>
<field name="model">event.management.wizard</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="print_pdf_report" type="object"
class="oe_highlight" string="Print PDF"/>
<button name="print_xls_report" type="object"
class="oe_highlight" string="Print Excel"/>
</footer>
</form>
</field>
</record>
<record id="event_management_wizard_action_view_form"
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.wizard</field>
<field name="view_mode">form</field>
<field name="view_id" ref="event_management_wizard_view_form"/>
<field name="target">new</field>
</record>
<menuitem id="event_management_wizard_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_wizard_menu_do_stuff"
name="Event Management Report" sequence="1"
action="event_management_wizard_action_view_form"/>
</menuitem>
</menuitem>
</odoo>
Loading…
Cancel
Save