From 5c067dbbb6df5d1f21d894b6334d54917f1a2b00 Mon Sep 17 00:00:00 2001
From: AjmalCybro
Date: Wed, 6 Sep 2023 16:25:36 +0530
Subject: [PATCH] Sep 6 [ADD] : Initial Commit 'venue_booking_management'
---
venue_booking_management/README.rst | 55 +
venue_booking_management/__init__.py | 27 +
venue_booking_management/__manifest__.py | 72 +
.../controllers/__init__.py | 25 +
.../controllers/portal.py | 258 +
.../controllers/venue_booking_management.py | 92 +
.../data/confirmation_email_template_data.xml | 30 +
.../data/venue_type_data.xml | 60 +
venue_booking_management/doc/RELEASE_NOTES.md | 8 +
venue_booking_management/models/__init__.py | 33 +
venue_booking_management/models/amenities.py | 32 +
.../models/res_config_settings.py | 35 +
venue_booking_management/models/venue.py | 111 +
.../models/venue_booking.py | 492 +
venue_booking_management/models/venue_type.py | 33 +
venue_booking_management/report/__init__.py | 25 +
.../report/form_venue_booking_report.py | 77 +
.../report/venue_booking_report.py | 74 +
.../report/venue_booking_report_templates.xml | 186 +
.../report/venue_booking_report_views.xml | 110 +
.../report/venue_booking_rerports.xml | 14 +
.../security/ir.model.access.csv | 10 +
.../venue_booking_management_groups.xml | 22 +
.../security/venue_booking_secruity.xml | 22 +
.../static/description/assets/icons/check.png | Bin 0 -> 3676 bytes
.../description/assets/icons/chevron.png | Bin 0 -> 310 bytes
.../static/description/assets/icons/cogs.png | Bin 0 -> 1377 bytes
.../description/assets/icons/consultation.png | Bin 0 -> 1458 bytes
.../description/assets/icons/ecom-black.png | Bin 0 -> 576 bytes
.../assets/icons/education-black.png | Bin 0 -> 733 bytes
.../description/assets/icons/hotel-black.png | Bin 0 -> 911 bytes
.../description/assets/icons/license.png | Bin 0 -> 1095 bytes
.../description/assets/icons/lifebuoy.png | Bin 0 -> 1199 bytes
.../assets/icons/manufacturing-black.png | Bin 0 -> 673 bytes
.../description/assets/icons/pos-black.png | Bin 0 -> 878 bytes
.../description/assets/icons/puzzle.png | Bin 0 -> 653 bytes
.../assets/icons/restaurant-black.png | Bin 0 -> 905 bytes
.../assets/icons/service-black.png | Bin 0 -> 839 bytes
.../assets/icons/trading-black.png | Bin 0 -> 427 bytes
.../description/assets/icons/training.png | Bin 0 -> 627 bytes
.../description/assets/icons/update.png | Bin 0 -> 1225 bytes
.../static/description/assets/icons/user.png | Bin 0 -> 988 bytes
.../description/assets/icons/wrench.png | Bin 0 -> 1205 bytes
.../description/assets/misc/categories.png | Bin 0 -> 1532 bytes
.../description/assets/misc/check-box.png | Bin 0 -> 1118 bytes
.../description/assets/misc/compass.png | Bin 0 -> 1931 bytes
.../description/assets/misc/corporate.png | Bin 0 -> 1177 bytes
.../assets/misc/customer-support.png | Bin 0 -> 2136 bytes
.../description/assets/misc/cybrosys-logo.png | Bin 0 -> 4496 bytes
.../description/assets/misc/features.png | Bin 0 -> 589 bytes
.../static/description/assets/misc/logo.png | Bin 0 -> 3452 bytes
.../description/assets/misc/pictures.png | Bin 0 -> 1692 bytes
.../description/assets/misc/pie-chart.png | Bin 0 -> 2338 bytes
.../description/assets/misc/right-arrow.png | Bin 0 -> 967 bytes
.../static/description/assets/misc/star.png | Bin 0 -> 1642 bytes
.../description/assets/misc/support.png | Bin 0 -> 3892 bytes
.../description/assets/misc/whatsapp.png | Bin 0 -> 5097 bytes
.../static/description/assets/modules/1.png | Bin 0 -> 90143 bytes
.../static/description/assets/modules/2.png | Bin 0 -> 82627 bytes
.../static/description/assets/modules/3.png | Bin 0 -> 80602 bytes
.../static/description/assets/modules/4.png | Bin 0 -> 93782 bytes
.../static/description/assets/modules/5.png | Bin 0 -> 83809 bytes
.../static/description/assets/modules/6.png | Bin 0 -> 76062 bytes
.../description/assets/screenshots/hero.gif | Bin 0 -> 698871 bytes
.../assets/screenshots/venue_1.png | Bin 0 -> 136333 bytes
.../assets/screenshots/venue_10.png | Bin 0 -> 78434 bytes
.../assets/screenshots/venue_11.png | Bin 0 -> 66811 bytes
.../assets/screenshots/venue_12.png | Bin 0 -> 87908 bytes
.../assets/screenshots/venue_13.png | Bin 0 -> 218885 bytes
.../assets/screenshots/venue_14.png | Bin 0 -> 126399 bytes
.../assets/screenshots/venue_15.png | Bin 0 -> 111838 bytes
.../assets/screenshots/venue_16.png | Bin 0 -> 129798 bytes
.../assets/screenshots/venue_17.png | Bin 0 -> 128048 bytes
.../assets/screenshots/venue_18.png | Bin 0 -> 152128 bytes
.../assets/screenshots/venue_19.png | Bin 0 -> 155202 bytes
.../assets/screenshots/venue_2.png | Bin 0 -> 136700 bytes
.../assets/screenshots/venue_20.png | Bin 0 -> 126193 bytes
.../assets/screenshots/venue_21.png | Bin 0 -> 145174 bytes
.../assets/screenshots/venue_22.png | Bin 0 -> 127136 bytes
.../assets/screenshots/venue_23.png | Bin 0 -> 92644 bytes
.../assets/screenshots/venue_24.png | Bin 0 -> 98088 bytes
.../assets/screenshots/venue_25.png | Bin 0 -> 129690 bytes
.../assets/screenshots/venue_26.png | Bin 0 -> 688965 bytes
.../assets/screenshots/venue_27.png | Bin 0 -> 69396 bytes
.../assets/screenshots/venue_28.png | Bin 0 -> 88288 bytes
.../assets/screenshots/venue_29.png | Bin 0 -> 64699 bytes
.../assets/screenshots/venue_3.png | Bin 0 -> 142926 bytes
.../assets/screenshots/venue_30.png | Bin 0 -> 50348 bytes
.../assets/screenshots/venue_31.png | Bin 0 -> 50882 bytes
.../assets/screenshots/venue_32.png | Bin 0 -> 71940 bytes
.../assets/screenshots/venue_33.png | Bin 0 -> 53383 bytes
.../assets/screenshots/venue_34.png | Bin 0 -> 67325 bytes
.../assets/screenshots/venue_35.png | Bin 0 -> 114385 bytes
.../assets/screenshots/venue_36.png | Bin 0 -> 78869 bytes
.../assets/screenshots/venue_37.png | Bin 0 -> 84913 bytes
.../assets/screenshots/venue_38.png | Bin 0 -> 93852 bytes
.../assets/screenshots/venue_39.png | Bin 0 -> 71115 bytes
.../assets/screenshots/venue_4.png | Bin 0 -> 1004943 bytes
.../assets/screenshots/venue_40.png | Bin 0 -> 81664 bytes
.../assets/screenshots/venue_41.png | Bin 0 -> 158370 bytes
.../assets/screenshots/venue_42.png | Bin 0 -> 169461 bytes
.../assets/screenshots/venue_43.png | Bin 0 -> 85020 bytes
.../assets/screenshots/venue_44.png | Bin 0 -> 175821 bytes
.../assets/screenshots/venue_45.png | Bin 0 -> 170366 bytes
.../assets/screenshots/venue_46.png | Bin 0 -> 292641 bytes
.../assets/screenshots/venue_47.png | Bin 0 -> 193421 bytes
.../assets/screenshots/venue_48.png | Bin 0 -> 154771 bytes
.../assets/screenshots/venue_49.png | Bin 0 -> 105655 bytes
.../assets/screenshots/venue_5.png | Bin 0 -> 109232 bytes
.../assets/screenshots/venue_50.png | Bin 0 -> 48897 bytes
.../assets/screenshots/venue_51.png | Bin 0 -> 132316 bytes
.../assets/screenshots/venue_52.png | Bin 0 -> 78567 bytes
.../assets/screenshots/venue_53.png | Bin 0 -> 86386 bytes
.../assets/screenshots/venue_54.png | Bin 0 -> 96356 bytes
.../assets/screenshots/venue_6.png | Bin 0 -> 54802 bytes
.../assets/screenshots/venue_7.png | Bin 0 -> 63910 bytes
.../assets/screenshots/venue_8.png | Bin 0 -> 70761 bytes
.../assets/screenshots/venue_9.png | Bin 0 -> 61756 bytes
.../static/description/banner.png | Bin 0 -> 75599 bytes
.../static/description/icon.png | Bin 0 -> 17333 bytes
.../static/description/index.html | 1007 +
.../static/img/venue_booking.jpeg | Bin 0 -> 8063 bytes
.../static/img/venue_type1.jpeg | Bin 0 -> 102970 bytes
.../static/img/venue_type2.jpeg | Bin 0 -> 71913 bytes
.../static/img/venue_type3.jpeg | Bin 0 -> 7830 bytes
.../static/img/venue_type4.jpeg | Bin 0 -> 9418 bytes
.../static/img/venue_type5.jpeg | Bin 0 -> 64498 bytes
.../static/img/venue_type6.jpeg | Bin 0 -> 100720 bytes
.../static/img/venue_type7.jpeg | Bin 0 -> 11390 bytes
.../static/img/venue_type8.jpeg | Bin 0 -> 5623 bytes
.../static/img/venue_type9.jpeg | Bin 0 -> 11586 bytes
.../static/src/css/venue_dashboard.css | 115 +
.../static/src/css/website_page.css | 90 +
.../static/src/js/action_manager.js | 20 +
.../static/src/js/dashboard_action.js | 457 +
.../static/src/js/lib/chart_bundle.js | 19287 ++++++++++++++++
.../static/src/js/website_venue_booking.js | 42 +
.../static/src/scss/venue_booking.scss | 237 +
.../static/src/xml/dashboard_templates.xml | 265 +
.../views/amenities_views.xml | 52 +
.../views/dashboard_views.xml | 85 +
.../views/res_config_settings_views.xml | 58 +
.../views/res_partner_views.xml | 29 +
.../views/venue_booking_views.xml | 306 +
.../views/venue_type_views.xml | 54 +
.../views/venue_views.xml | 125 +
.../views/website_portal_templates.xml | 182 +
.../views/website_venue_booking_templates.xml | 135 +
venue_booking_management/wizards/__init__.py | 30 +
.../wizards/check_venue_availability.py | 85 +
.../check_venue_availability_views.xml | 51 +
.../wizards/venue_booking_analysis.py | 200 +
.../wizards/venue_booking_analysis_views.xml | 49 +
153 files changed, 24864 insertions(+)
create mode 100644 venue_booking_management/README.rst
create mode 100644 venue_booking_management/__init__.py
create mode 100644 venue_booking_management/__manifest__.py
create mode 100644 venue_booking_management/controllers/__init__.py
create mode 100644 venue_booking_management/controllers/portal.py
create mode 100644 venue_booking_management/controllers/venue_booking_management.py
create mode 100644 venue_booking_management/data/confirmation_email_template_data.xml
create mode 100644 venue_booking_management/data/venue_type_data.xml
create mode 100644 venue_booking_management/doc/RELEASE_NOTES.md
create mode 100644 venue_booking_management/models/__init__.py
create mode 100644 venue_booking_management/models/amenities.py
create mode 100644 venue_booking_management/models/res_config_settings.py
create mode 100644 venue_booking_management/models/venue.py
create mode 100644 venue_booking_management/models/venue_booking.py
create mode 100644 venue_booking_management/models/venue_type.py
create mode 100644 venue_booking_management/report/__init__.py
create mode 100644 venue_booking_management/report/form_venue_booking_report.py
create mode 100644 venue_booking_management/report/venue_booking_report.py
create mode 100644 venue_booking_management/report/venue_booking_report_templates.xml
create mode 100644 venue_booking_management/report/venue_booking_report_views.xml
create mode 100644 venue_booking_management/report/venue_booking_rerports.xml
create mode 100644 venue_booking_management/security/ir.model.access.csv
create mode 100644 venue_booking_management/security/venue_booking_management_groups.xml
create mode 100644 venue_booking_management/security/venue_booking_secruity.xml
create mode 100644 venue_booking_management/static/description/assets/icons/check.png
create mode 100644 venue_booking_management/static/description/assets/icons/chevron.png
create mode 100644 venue_booking_management/static/description/assets/icons/cogs.png
create mode 100644 venue_booking_management/static/description/assets/icons/consultation.png
create mode 100644 venue_booking_management/static/description/assets/icons/ecom-black.png
create mode 100644 venue_booking_management/static/description/assets/icons/education-black.png
create mode 100644 venue_booking_management/static/description/assets/icons/hotel-black.png
create mode 100644 venue_booking_management/static/description/assets/icons/license.png
create mode 100644 venue_booking_management/static/description/assets/icons/lifebuoy.png
create mode 100644 venue_booking_management/static/description/assets/icons/manufacturing-black.png
create mode 100644 venue_booking_management/static/description/assets/icons/pos-black.png
create mode 100644 venue_booking_management/static/description/assets/icons/puzzle.png
create mode 100644 venue_booking_management/static/description/assets/icons/restaurant-black.png
create mode 100644 venue_booking_management/static/description/assets/icons/service-black.png
create mode 100644 venue_booking_management/static/description/assets/icons/trading-black.png
create mode 100644 venue_booking_management/static/description/assets/icons/training.png
create mode 100644 venue_booking_management/static/description/assets/icons/update.png
create mode 100644 venue_booking_management/static/description/assets/icons/user.png
create mode 100644 venue_booking_management/static/description/assets/icons/wrench.png
create mode 100644 venue_booking_management/static/description/assets/misc/categories.png
create mode 100644 venue_booking_management/static/description/assets/misc/check-box.png
create mode 100644 venue_booking_management/static/description/assets/misc/compass.png
create mode 100644 venue_booking_management/static/description/assets/misc/corporate.png
create mode 100644 venue_booking_management/static/description/assets/misc/customer-support.png
create mode 100644 venue_booking_management/static/description/assets/misc/cybrosys-logo.png
create mode 100644 venue_booking_management/static/description/assets/misc/features.png
create mode 100644 venue_booking_management/static/description/assets/misc/logo.png
create mode 100644 venue_booking_management/static/description/assets/misc/pictures.png
create mode 100644 venue_booking_management/static/description/assets/misc/pie-chart.png
create mode 100644 venue_booking_management/static/description/assets/misc/right-arrow.png
create mode 100644 venue_booking_management/static/description/assets/misc/star.png
create mode 100644 venue_booking_management/static/description/assets/misc/support.png
create mode 100644 venue_booking_management/static/description/assets/misc/whatsapp.png
create mode 100644 venue_booking_management/static/description/assets/modules/1.png
create mode 100644 venue_booking_management/static/description/assets/modules/2.png
create mode 100644 venue_booking_management/static/description/assets/modules/3.png
create mode 100644 venue_booking_management/static/description/assets/modules/4.png
create mode 100644 venue_booking_management/static/description/assets/modules/5.png
create mode 100644 venue_booking_management/static/description/assets/modules/6.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/hero.gif
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_1.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_10.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_11.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_12.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_13.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_14.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_15.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_16.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_17.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_18.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_19.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_2.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_20.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_21.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_22.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_23.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_24.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_25.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_26.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_27.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_28.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_29.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_3.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_30.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_31.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_32.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_33.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_34.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_35.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_36.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_37.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_38.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_39.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_4.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_40.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_41.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_42.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_43.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_44.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_45.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_46.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_47.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_48.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_49.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_5.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_50.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_51.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_52.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_53.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_54.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_6.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_7.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_8.png
create mode 100644 venue_booking_management/static/description/assets/screenshots/venue_9.png
create mode 100644 venue_booking_management/static/description/banner.png
create mode 100644 venue_booking_management/static/description/icon.png
create mode 100644 venue_booking_management/static/description/index.html
create mode 100644 venue_booking_management/static/img/venue_booking.jpeg
create mode 100644 venue_booking_management/static/img/venue_type1.jpeg
create mode 100644 venue_booking_management/static/img/venue_type2.jpeg
create mode 100644 venue_booking_management/static/img/venue_type3.jpeg
create mode 100644 venue_booking_management/static/img/venue_type4.jpeg
create mode 100644 venue_booking_management/static/img/venue_type5.jpeg
create mode 100644 venue_booking_management/static/img/venue_type6.jpeg
create mode 100644 venue_booking_management/static/img/venue_type7.jpeg
create mode 100644 venue_booking_management/static/img/venue_type8.jpeg
create mode 100644 venue_booking_management/static/img/venue_type9.jpeg
create mode 100644 venue_booking_management/static/src/css/venue_dashboard.css
create mode 100644 venue_booking_management/static/src/css/website_page.css
create mode 100644 venue_booking_management/static/src/js/action_manager.js
create mode 100644 venue_booking_management/static/src/js/dashboard_action.js
create mode 100644 venue_booking_management/static/src/js/lib/chart_bundle.js
create mode 100644 venue_booking_management/static/src/js/website_venue_booking.js
create mode 100644 venue_booking_management/static/src/scss/venue_booking.scss
create mode 100644 venue_booking_management/static/src/xml/dashboard_templates.xml
create mode 100644 venue_booking_management/views/amenities_views.xml
create mode 100644 venue_booking_management/views/dashboard_views.xml
create mode 100644 venue_booking_management/views/res_config_settings_views.xml
create mode 100644 venue_booking_management/views/res_partner_views.xml
create mode 100644 venue_booking_management/views/venue_booking_views.xml
create mode 100644 venue_booking_management/views/venue_type_views.xml
create mode 100644 venue_booking_management/views/venue_views.xml
create mode 100644 venue_booking_management/views/website_portal_templates.xml
create mode 100644 venue_booking_management/views/website_venue_booking_templates.xml
create mode 100644 venue_booking_management/wizards/__init__.py
create mode 100644 venue_booking_management/wizards/check_venue_availability.py
create mode 100644 venue_booking_management/wizards/check_venue_availability_views.xml
create mode 100644 venue_booking_management/wizards/venue_booking_analysis.py
create mode 100644 venue_booking_management/wizards/venue_booking_analysis_views.xml
diff --git a/venue_booking_management/README.rst b/venue_booking_management/README.rst
new file mode 100644
index 000000000..8681e5b34
--- /dev/null
+++ b/venue_booking_management/README.rst
@@ -0,0 +1,55 @@
+.. 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
+
+================================
+Venue / Event Booking Management
+================================
+The 'Venue / Event Booking Management' is a core module which can manage any type of venue reservation.
+
+Features
+========
+* Venue Booking creation.
+* Allocate the Booking to different users.
+* Integrated with Accounting module.
+* Simple Workflow.
+* Attractive Design.
+
+Configuration
+=============
+* No additional configurations needed
+
+License
+-------
+Gnu Affero General Public License, v3.0 (AGPL v3).
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+Credits
+-------
+* Developer : (V16) Risvana AR, Contact : odoo@cybrosys.com
+
+Contacts
+--------
+* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
+
+Bug Tracker
+-----------
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Maintainer
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit `Our Website `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/venue_booking_management/__init__.py b/venue_booking_management/__init__.py
new file mode 100644
index 000000000..6362a6cbd
--- /dev/null
+++ b/venue_booking_management/__init__.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Risvana AR (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 .
+#
+###############################################################################
+from . import controllers
+from . import models
+from . import report
+from . import wizards
+
+
diff --git a/venue_booking_management/__manifest__.py b/venue_booking_management/__manifest__.py
new file mode 100644
index 000000000..984704491
--- /dev/null
+++ b/venue_booking_management/__manifest__.py
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Risvana AR (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 .
+#
+###############################################################################
+{
+ 'name': 'Venue / Event Booking Management',
+ 'version': '16.0.1.0.0',
+ 'summary': """Core Module for Managing Different Types of Venue/ Event Booking.""",
+ 'description': """Core Module for Managing Different Types of Venue/ Event Booking, Event Booking, Venue Booking,
+ Space Booking, Booking, Event, Venue, Wedding, Birthday, Party, Hall Booking, Room Booking""",
+ "category": "Industry",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['base', 'account', 'website', ],
+ 'data': [
+ 'security/venue_booking_management_groups.xml',
+ 'security/ir.model.access.csv',
+ 'data/venue_type_data.xml',
+ 'data/confirmation_email_template_data.xml',
+ 'views/venue_booking_views.xml',
+ 'views/venue_type_views.xml',
+ 'views/amenities_views.xml',
+ 'views/venue_views.xml',
+ 'views/dashboard_views.xml',
+ 'views/res_partner_views.xml',
+ 'views/res_config_settings_views.xml',
+ 'wizards/check_venue_availability_views.xml',
+ 'report/venue_booking_report_views.xml',
+ 'report/venue_booking_report_templates.xml',
+ 'report/venue_booking_rerports.xml',
+ 'wizards/venue_booking_analysis_views.xml',
+ 'views/website_venue_booking_templates.xml',
+ 'views/website_portal_templates.xml',
+ ],
+ 'assets': {
+ 'web.assets_frontend': [
+ 'venue_booking_management/static/src/css/website_page.css',
+ 'venue_booking_management/static/src/js/website_venue_booking.js'
+ ],
+ 'web.assets_backend': [
+ 'venue_booking_management/static/src/css/venue_dashboard.css',
+ 'venue_booking_management/static/src/scss/venue_booking.scss',
+ 'venue_booking_management/static/src/js/action_manager.js',
+ 'venue_booking_management/static/src/js/lib/chart_bundle.js',
+ 'venue_booking_management/static/src/js/dashboard_action.js',
+ 'venue_booking_management/static/src/xml/dashboard_templates.xml'
+ ]
+ },
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'application': True,
+}
diff --git a/venue_booking_management/controllers/__init__.py b/venue_booking_management/controllers/__init__.py
new file mode 100644
index 000000000..fbaba83d7
--- /dev/null
+++ b/venue_booking_management/controllers/__init__.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Risvana AR (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 .
+#
+###############################################################################
+from . import venue_booking_management
+from . import portal
+
+
diff --git a/venue_booking_management/controllers/portal.py b/venue_booking_management/controllers/portal.py
new file mode 100644
index 000000000..7ca6e90d5
--- /dev/null
+++ b/venue_booking_management/controllers/portal.py
@@ -0,0 +1,258 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Risvana AR (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 .
+#
+###############################################################################
+from collections import OrderedDict
+from datetime import timedelta
+from odoo import fields,http, _
+from odoo.http import request
+from odoo.osv import expression
+from odoo.osv.expression import OR
+from odoo.addons.portal.controllers import portal
+from odoo.addons.portal.controllers.portal import CustomerPortal, pager as portal_pager
+
+
+class CustomerPortal(portal.CustomerPortal):
+ """Class for Venue booking portal that gives the record and counts of the Bookings"""
+ def _prepare_home_portal_values(self, counters):
+ """ Function for finding the number of document """
+ values = super()._prepare_home_portal_values(counters)
+ uid = request.env.user.partner_id.id
+ venue_booking_count = request.env['venue.booking'].search_count([('partner_id', '=', uid)])
+ values.update({'venue_booking_count': venue_booking_count})
+ return values
+
+ @http.route(['/my/venue_booking', '/my/venue_booking/page/'],
+ type='http', auth='user',
+ website=True)
+ def create_venue_booking_management(self, page=1, date_begin=None,
+ date_end=None,
+ sortby=None, filterby=None,
+ search=None,
+ search_in='content', ):
+ """ Function to fetch booking records and pass to the portal template"""
+ uid = request.env.user.partner_id.id
+ venue_booking_management = request.env['venue.booking'].sudo().search(
+ [('partner_id', '=', uid)])
+ values = self._prepare_my_booking_values(page, date_begin, date_end,
+ sortby, filterby, search,
+ search_in)
+ # Pager
+ pager = portal_pager(**values['pager'])
+ venue = values['venue'](pager['offset'])
+ request.session['my_venue_booking_history'] = venue.ids[:100]
+ values.update({
+ 'venue_booking_management': venue_booking_management,
+ 'venues': venue,
+ 'pager': pager,
+ })
+ return request.render(
+ "venue_booking_management.portal_my_venue_booking_documents",
+ values)
+
+ def _prepare_my_booking_values(self, page, date_begin, date_end, sortby,
+ filterby, search, search_in,
+ domain=None, url="/my/venue_booking"):
+ """Add all event values to the portal. Which will return the
+ values event, page, pager, filter, sort, and search"""
+ values = self._prepare_portal_layout_values()
+ Venue = request.env['venue.booking']
+ domain = expression.AND([
+ domain or [],
+ self._get_booking_domain(),
+ ])
+ searchbar_sortings = self._get_venue_booking_searchbar_sortings()
+ # default sort by order
+ if not sortby:
+ sortby = 'date'
+ order = searchbar_sortings[sortby]['order']
+ searchbar_filters = self._get_venue_booking_searchbar_filters()
+ # default filter by value
+ if not filterby:
+ filterby = 'all'
+ domain += searchbar_filters[filterby]['domain']
+ searchbar_inputs = self._get_venue_booking_searchbar_inputs()
+ if search and search_in:
+ domain += self._get_venue_booking_search_domain(search_in, search)
+ if date_begin and date_end:
+ domain += [('create_date', '>', date_begin),
+ ('create_date', '<=', date_end)]
+ values.update({
+ 'date': date_begin,
+ 'venue': lambda pager_offset: self._get_grouped_venues(Venue,
+ domain,
+ order,
+ pager_offset),
+ 'page_name': 'venue_booking',
+ 'pager': {
+ "url": url,
+ "url_args": {'date_begin': date_begin, 'date_end': date_end,
+ 'sortby': sortby, 'search_in': search_in,
+ 'search': search},
+ "total": Venue.search_count(domain),
+ "page": page,
+ "step": self._items_per_page,
+ },
+ 'default_url': url,
+ 'searchbar_sortings': searchbar_sortings,
+ 'sortby': sortby,
+ 'searchbar_filters': OrderedDict(
+ sorted(searchbar_filters.items())),
+ 'filterby': filterby,
+ 'searchbar_inputs': searchbar_inputs,
+ 'search_in': search_in,
+ 'search': search,
+ })
+ return values
+
+ def _get_venue_page_view_values(self, venue, access_token, **kwargs):
+ """Get the page view values"""
+ values = {
+ 'venue': venue,
+ 'page_name': 'venue_booking',
+ }
+ return self._get_page_view_values(venue, access_token, values,
+ 'my_venue_booking_history', False, **kwargs)
+
+ def _get_booking_domain(self):
+ """Returns the booking that are in stage 'cancel' and 'draft'"""
+ return [('state', 'not in', ('cancel', 'closed'))]
+
+ def _get_venue_booking_searchbar_sortings(self):
+ """Sort the booking based on the date and name"""
+ return {
+ 'date': {'label': _('Date'), 'order': 'create_date desc'},
+ 'name': {'label': _('Name'), 'order': 'name asc'},
+ }
+
+ def _get_venue_booking_searchbar_filters(self):
+ """Filter the events by All, Last month, This Month, Last Week,
+ This Week, Last Year, This Year, Today and This Quarter"""
+ today = fields.Date.today()
+ this_month_start = today.replace(day=1)
+ this_quarter_start = today.replace(day=1, month=((
+ today.month - 1) // 3) * 3 + 1)
+ this_week_start = today - timedelta(days=today.weekday())
+ this_year_start = today.replace(month=1, day=1)
+ return {
+ 'all': {'label': _('All'), 'domain': []},
+ 'last_month': {
+ 'label': _('Last Month'),
+ 'domain': [('create_date', '>=',
+ (this_month_start - timedelta(days=30)).strftime(
+ '%Y-%m-%d')),
+ ('create_date', '<=',
+ (this_month_start - timedelta(days=1)).strftime(
+ '%Y-%m-%d'))]
+ },
+ 'this_month': {
+ 'label': _('This Month'),
+ 'domain': [
+ (
+ 'create_date', '>=',
+ this_month_start.strftime('%Y-%m-%d')),
+ ('create_date', '<=', today.strftime('%Y-%m-%d'))]
+ },
+ 'last_week': {
+ 'label': _('Last Week'),
+ 'domain': [('create_date', '>=',
+ (this_week_start - timedelta(days=7)).strftime(
+ '%Y-%m-%d')),
+ ('create_date', '<=',
+ (this_week_start - timedelta(days=1)).strftime(
+ '%Y-%m-%d'))]
+ },
+ 'this_week': {
+ 'label': _('This Week'),
+ 'domain': [
+ (
+ 'create_date', '>=', this_week_start.strftime('%Y-%m-%d')),
+ ('create_date', '<=', today.strftime('%Y-%m-%d'))]
+ },
+ 'last_year': {
+ 'label': _('Last Year'),
+ 'domain': [('create_date', '>=',
+ (this_year_start - timedelta(days=365)).strftime(
+ '%Y-%m-%d')),
+ ('create_date', '<=',
+ (this_year_start - timedelta(days=1)).strftime(
+ '%Y-%m-%d'))]
+ },
+ 'this_year': {
+ 'label': _('This Year'),
+ 'domain': [
+ (
+ 'create_date', '>=', this_year_start.strftime('%Y-%m-%d')),
+ ('create_date', '<=', today.strftime('%Y-%m-%d'))]
+ },
+ 'today': {
+ 'label': _('Today'),
+ 'domain': [('create_date', '=', today.strftime('%Y-%m-%d'))]
+ },
+ 'this_quarter': {
+ 'label': _('This Quarter'),
+ 'domain': [
+ ('create_date', '>=',
+ this_quarter_start.strftime('%Y-%m-%d')),
+ ('create_date', '<=', today.strftime('%Y-%m-%d'))]
+ }
+ }
+
+ def _get_venue_booking_search_domain(self, search_in, search):
+ """Returns the events for the given search(If we have not entered
+ the full name which will also gives the output"""
+ search_domain = []
+ if search_in == 'all':
+ search_domain.append([('name', 'ilike',
+ f'{search}%')])
+ search_domain.append([('phone', 'ilike',
+ f'{search}%')])
+ if search_in in ('venue', 'all'):
+ search_domain.append([('venue_id', 'ilike',
+ f'{search}%')])
+ return OR(search_domain)
+
+ def _get_venue_booking_searchbar_inputs(self):
+ """Which will returns a dictionary of values by the search contents
+ as Search in All, in Content, Search in states, Search in Venues"""
+ values = {
+ 'all': {'input': 'all', 'label': _('Search in All'), 'order': 1},
+ 'venue': {'input': 'venue', 'label': _('Search in Venue'),
+ 'order': 2},
+ }
+ return dict(sorted(values.items(), key=lambda item: item[1]["order"]))
+
+ def _get_grouped_venues(self, Venue, domain, order, pager_offset, ):
+ """Returns the grouped venues for a given domain"""
+ venues = Venue.search(domain, order=order, limit=self._items_per_page,
+ offset=pager_offset)
+ return venues
+
+ @http.route(['/my/booking_data/'], type='http',
+ auth="user", website=True)
+ def portal_my_venue_booking(self, record):
+ """ Function to fetch data of selected visitors record and pass to
+ the portal template"""
+ booking_record = request.env['venue.booking'].sudo().browse(record)
+
+ return http.request.render(
+ 'venue_booking_management.booking_portal_form',
+ {'booking_record': booking_record,
+ 'page_name': 'venue_booking_management_record'})
diff --git a/venue_booking_management/controllers/venue_booking_management.py b/venue_booking_management/controllers/venue_booking_management.py
new file mode 100644
index 000000000..87fc76206
--- /dev/null
+++ b/venue_booking_management/controllers/venue_booking_management.py
@@ -0,0 +1,92 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Risvana AR (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 .
+#
+###############################################################################
+import json
+from odoo import fields,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('/venue_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)))
+
+
+class VenueBookingController(http.Controller):
+ """Class to add Venue booking menu in website"""
+ @http.route('/venue/booking', type='http', auth='public', website=True)
+ def venue_booking(self):
+ """Function to render venue booking values to XML"""
+ venue_ids = request.env['venue'].sudo().search([])
+ state_ids = request.env['res.country.state'].sudo().search([])
+ country_ids = request.env['res.country'].sudo().search([])
+ return http.request.render('venue_booking_management.venue_booking_page',
+ {'venue_ids': venue_ids,
+ 'state_ids': state_ids,
+ 'country_ids': country_ids})
+
+ @http.route('/booking/submit', type='http', auth='public', website=True)
+ def booking_success_page(self, **post):
+ """Function to create booking and return to success page"""
+ partner_id = request.env['res.partner'].sudo().create({
+ 'name': post.get('name'),
+ 'mobile': post.get('mobile_no'),
+ 'city': post.get('city'),
+ 'state_id': post.get('state'),
+ 'country_id': post.get('country')
+ })
+ venue_id = request.env['venue'].browse(int(post.get('venue_type')))
+ values = {
+ 'partner_id': partner_id.id,
+ 'venue_id': venue_id.id,
+ 'start_date': post.get('from_date'),
+ 'end_date': post.get('to_date'),
+ 'booking_type': post.get('booking_type'),
+ 'date': fields.Date.today()
+ }
+ booking_id = request.env['venue.booking'].sudo().create(values)
+ return request.render('venue_booking_management.venue_booking_success_page',
+ {'partner_id': partner_id,
+ 'booking_id': booking_id})
diff --git a/venue_booking_management/data/confirmation_email_template_data.xml b/venue_booking_management/data/confirmation_email_template_data.xml
new file mode 100644
index 000000000..b24100844
--- /dev/null
+++ b/venue_booking_management/data/confirmation_email_template_data.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+ Confirmed Venue Booking
+ Venue booking: Received the Venue Booking for
+ {{ object.venue_id.name }}
+
+
+ {{ (object.env.user.login) }}
+
+
+
+ Dear customer ,
+ We have received a booking for the venue
+ . Please proceed
+ with necessary actions.
+
+ Thank You
+
+ ]]>
+
+ {{ object.partner_id.lang or '' }}
+
+
+
+
diff --git a/venue_booking_management/data/venue_type_data.xml b/venue_booking_management/data/venue_type_data.xml
new file mode 100644
index 000000000..2d5d10601
--- /dev/null
+++ b/venue_booking_management/data/venue_type_data.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+ Conference centers
+
+
+
+ Meeting Room
+
+
+
+ Convention centers
+
+
+
+ Social clubs and lounges
+
+
+
+ Mini Conference centers
+
+
+
+ Stadiums
+
+
+
+ Community centers
+
+
+
+ Resorts
+
+
+
+ Auditorium
+
+
+
+
+ Venue Booking
+ venue.booking.sequence
+ %(day)s/%(month)s/%(year)s
+ VENUE-
+ 1
+ 3
+
+
+
diff --git a/venue_booking_management/doc/RELEASE_NOTES.md b/venue_booking_management/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..7b3ef274e
--- /dev/null
+++ b/venue_booking_management/doc/RELEASE_NOTES.md
@@ -0,0 +1,8 @@
+## Module
+
+#### 02.09.2023
+#### Version 16.0.1.0.0
+#### ADD
+
+- Initial Commit for Venue / Event Booking Management
+
diff --git a/venue_booking_management/models/__init__.py b/venue_booking_management/models/__init__.py
new file mode 100644
index 000000000..bb147e308
--- /dev/null
+++ b/venue_booking_management/models/__init__.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Risvana AR (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 .
+#
+###############################################################################
+from . import amenities
+from . import res_config_settings
+from . import venue
+from . import venue_type
+from . import venue_booking
+
+
+
+
+
+
+
diff --git a/venue_booking_management/models/amenities.py b/venue_booking_management/models/amenities.py
new file mode 100644
index 000000000..836797197
--- /dev/null
+++ b/venue_booking_management/models/amenities.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Risvana AR (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 .
+#
+###############################################################################
+from odoo import fields, models
+
+
+class Amenities(models.Model):
+ """Model for managing the Amenities"""
+ _name = 'amenities'
+ _inherit = ['mail.thread', 'mail.activity.mixin']
+ _description = 'Amenities'
+
+ name = fields.Char(string="Name", help="Name of the Amenities")
+ amount = fields.Float(string='Amount', help="Amount of the Amenities")
diff --git a/venue_booking_management/models/res_config_settings.py b/venue_booking_management/models/res_config_settings.py
new file mode 100644
index 000000000..acafbefd1
--- /dev/null
+++ b/venue_booking_management/models/res_config_settings.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Risvana AR (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 .
+#
+###############################################################################
+from odoo import fields, models
+
+
+class ResConfigSettings(models.TransientModel):
+ """Inherit the model res.config.settings to add Additional fields"""
+ _inherit = 'res.config.settings'
+
+ is_extra = fields.Boolean(string='Apply Extra Amount',
+ config_parameter='venue_booking_management.is_extra',
+ default=False,
+ help="Enable, if extra charge want to add")
+ extra_amount = fields.Float(string='Extra Amount',
+ config_parameter='venue_booking_management.extra_amount',
+ help='Enter extra amount/KM')
diff --git a/venue_booking_management/models/venue.py b/venue_booking_management/models/venue.py
new file mode 100644
index 000000000..7e95389df
--- /dev/null
+++ b/venue_booking_management/models/venue.py
@@ -0,0 +1,111 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Risvana AR (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 .
+#
+###############################################################################
+from odoo import api, fields, models
+
+
+class Venue(models.Model):
+ """Model for managing the Venue that used to add new fields and
+ functions to create the Venue"""
+ _name = 'venue'
+ _inherit = ['mail.thread', 'mail.activity.mixin']
+ _description = 'Venue'
+
+ name = fields.Char(string="Name", help="Name of the venue type")
+ image = fields.Binary("Image", attachment=True,
+ help="This field holds the image used as "
+ "image for the event, limited to 1080x720px.")
+ venue_type_id = fields.Many2one('venue.type',
+ 'Venue Type',
+ help='Used to choose the type of the '
+ 'particular venue')
+ venue_location = fields.Char(string='Location', required=True,
+ help='The venue location for Booking')
+ capacity = fields.Integer(string='Capacity', help='The capacity of the venue')
+ seating = fields.Integer(string='Seating', help='The Seating of the venue')
+ venue_charge_hour = fields.Float(string='Charge Per Hour',
+ help='The charge per hour of the venue')
+ venue_charge_day = fields.Float(string='Charge Per Day',
+ help='The charge per day of the venue')
+ additional_charge_hour = fields.Float(string=' Additional Charge Per Hour',
+ help='The charge per hour of the venue')
+ additional_charge_day = fields.Float(string='Additional Charge Per Day',
+ help='The charge per day of the venue')
+ venue_count = fields.Integer(string="# of Events",
+ compute='_compute_venue_count',
+ help='Compute field for calculate the venue count')
+ open_time = fields.Float(string=' Open Time', help='Open time of the venue')
+ closed_time = fields.Float(string=' Close Time',
+ help='Close time of the venue')
+ venue_line_ids = fields.One2many('venue.lines',
+ 'venue_id', string='Amenities',
+ help='Amenities for the venue')
+ price_subtotal = fields.Float(string='Total', help='Total price of the venue',
+ compute='_compute_price_subtotal',
+ readonly=True, store=True)
+
+ @api.depends('venue_line_ids', 'venue_line_ids.sub_total')
+ def _compute_price_subtotal(self):
+ """Compute function for calculating the Amenities Price Subtotal"""
+ self.price_subtotal = sum(item.sub_total for item in self.venue_line_ids)
+
+ def _compute_venue_count(self):
+ """Compute function for calculating the venue count"""
+ for records in self:
+ venues = self.env['venue.booking'].search([
+ ('venue_id', '=', records.id)])
+ records.venue_count = len(venues)
+
+ def get_venue_type_action(self):
+ """Get the venue type action for the venue bookings"""
+ return self._get_action(
+ 'venue_booking_management.venue_booking_action_view_kanban')
+
+
+class VenueLines(models.Model):
+ """Model for managing the Venue lines"""
+ _name = 'venue.lines'
+ _description = 'Venue Lines'
+
+ venue_id = fields.Many2one('venue', string='Venue Lines',
+ help='The relational field for the venue model')
+ amenities_id = fields.Many2one('amenities', string='Amenities',
+ help='The field used to link the amenities model')
+ quantity = fields.Float(string="Quantity", default=1,
+ help="Quantity of the Amenities")
+ amount = fields.Float(string="Amount", help="Amount of the Amenities",
+ related='amenities_id.amount')
+ sub_total = fields.Float(string="Sub Total", compute="_compute_sub_total",
+ readonly=True, help="Sub Total of the Values")
+ currency_id = fields.Many2one('res.currency', readonly=True,
+ string='Currency',
+ default=lambda self:
+ self.env.user.company_id.currency_id,
+ help="Currency value of the Venue")
+ status = fields.Selection([('open', 'Open'), ('done', 'Done')],
+ string="Status", default='open',
+ help="Status of the Venue")
+
+ @api.depends('quantity', 'amount')
+ def _compute_sub_total(self):
+ """Compute the Sub Total of the Venue values"""
+ for item in self:
+ item.sub_total = item.quantity * item.amount
diff --git a/venue_booking_management/models/venue_booking.py b/venue_booking_management/models/venue_booking.py
new file mode 100644
index 000000000..e6a227ff6
--- /dev/null
+++ b/venue_booking_management/models/venue_booking.py
@@ -0,0 +1,492 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Risvana AR (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 .
+#
+###############################################################################
+from odoo import api, fields, models, _
+from odoo.exceptions import UserError, ValidationError
+
+
+class VenueBooking(models.Model):
+ """Model for managing the Venue Booking"""
+ _name = 'venue.booking'
+ _inherit = ['mail.thread', 'mail.activity.mixin']
+ _description = 'Venue Reservation'
+
+ name = fields.Char(string="Name", help="Name of the venue type")
+ ref = fields.Char(string='Ref', readonly=True,
+ help="Name of the venue that created as sequencing")
+ venue_id = fields.Many2one('venue', string='Venue',
+ help="Venue for the Event", required=True)
+ venue_type_id = fields.Many2one('venue.type',
+ 'Venue Type',
+ related='venue_id.venue_type_id', readonly=True,
+ help='Used to choose the type of the particular venue')
+ image = fields.Binary("Image", attachment=True,
+ related='venue_type_id.image',
+ help="This field holds the image used as "
+ "image for the event, limited to 1080x720px.")
+ partner_id = fields.Many2one('res.partner', string="Customer",
+ required=True,
+ help='Used to Choose the Booking Person')
+ date = fields.Date(string="Date", default=fields.Date.today, required=True,
+ help='Date field for booking the Venue')
+ currency_id = fields.Many2one('res.currency', readonly=True,
+ string='Currency',
+ default=lambda self:
+ self.env.user.company_id.currency_id,
+ help='Currency field for booking Venue')
+ start_date = fields.Datetime(string="Start date",
+ default=lambda self: fields.datetime.now(),
+ required=True,
+ help='Venue Booking Start Date')
+ end_date = fields.Datetime(string="End date", required=True,
+ help='Venue Booking End Date')
+ state = fields.Selection([('draft', 'Draft'),
+ ('confirm', 'Confirmed'),
+ ('invoice', 'Invoiced'),
+ ('close', 'Close'), ('cancel', 'Canceled')],
+ string="State", default="draft",
+ help="State of venue booking")
+ booking_type = fields.Selection([('day', 'Day'),
+ ('hour', 'Hours')], string='Booking Type',
+ default='day',
+ help='The selection field for Booking Type')
+ venue_booking_line_ids = fields.One2many('venue.booking.line',
+ 'venue_booking_id',
+ string="Venues",
+ help='Booking Line for the given venue')
+ note = fields.Text(string='Terms and conditions',
+ help='The note field for Venue Booking')
+ pending_invoice = fields.Boolean(string="Invoice Pending",
+ compute='_compute_pending_invoice',
+ help='Find out is there any pending invoice')
+ total = fields.Monetary(string="Total Amount", store=True,
+ compute='_compute_total_amount',
+ help='Total amount for the Venue Booking')
+ booking_charge_per_day = fields.Float(string="Booking Charge Per Day",
+ related='venue_id.venue_charge_day',
+ help='Field for adding Booking Charge Per Day')
+ booking_charge_per_hour = fields.Float(string="Booking Charge Per Hour",
+ related='venue_id.venue_charge_hour',
+ help='Field for adding Booking Charge Per hour')
+ booking_charge = fields.Float(string="Venue Amenities Charge",
+ compute='_compute_booking_charge',
+ help='Compute the total Booking cost includes the amenities')
+ days_difference = fields.Integer(string='Days Difference',
+ compute='_compute_days_difference',
+ help='Number of Days to Booking the venue')
+ invoice_count = fields.Integer(string="Invoice Count",
+ compute='_compute_invoice_count',
+ help='Total invoice count')
+ is_additional_charge = fields.Boolean(string="Add Extra Charge?",
+ help='Add additional charge for the booking')
+ amenity_line_ids = fields.One2many('venue.booking.line',
+ 'venue_booking_id',
+ string="Included Amenities",
+ compute='_compute_amenity_line_ids',
+ help='Booking Line for the given venue')
+
+ @api.constrains('venue_booking_line_ids')
+ def _check_venue_booking_line_ids(self):
+ """Check if the venue bookings line contains already taken amenities"""
+ amenities_list = []
+ name_list = []
+ if self.venue_id.venue_line_ids:
+ amenities = self.venue_id.venue_line_ids.mapped('amenities_id')
+ for line in self.venue_booking_line_ids:
+ if line.amenity_id in amenities:
+ amenities_list.append(line.amenity_id)
+ name_list.append(line.amenity_id.name)
+ if amenities_list:
+ names = ', '.join(name_list)
+ raise ValidationError(
+ _("Amenities %s are already Include in Your Venue Booking %s"
+ % (str(names), str(self.venue_id.name))))
+
+ @api.model
+ def create(self, values):
+ """Create method for sequencing and checking dates while Booking the Venues"""
+ start_date = values['start_date']
+ end_date = values['end_date']
+ date = values['date']
+ partner_name = self.env['res.partner'].browse(
+ values['partner_id']).name
+ if start_date >= end_date:
+ raise UserError(_('Start date must be less than End date'))
+ values['name'] = '%s- %s' % (partner_name, date)
+ values['ref'] = self.env['ir.sequence'].next_by_code('venue.booking.sequence')
+ res = super().create(values)
+ return res
+
+ @api.depends('amenity_line_ids')
+ def _compute_amenity_line_ids(self):
+ """Compute function to add Already added amenities into the one2many field"""
+ for rec in self:
+ if rec.venue_id.venue_line_ids:
+ rec.amenity_line_ids = rec.venue_id.venue_line_ids.ids
+ else:
+ rec.amenity_line_ids = False
+
+ @api.onchange('start_date', 'end_date')
+ def _onchange_booking_dates(self):
+ """Checking dates while Booking the Venues based on the changes of the Dates"""
+ if self.venue_id:
+ booking = self.env['venue.booking'].search([('start_date', '<', self.end_date),
+ ('end_date', '>', self.start_date), ('venue_id', '=', self.venue_id.id)])
+ if booking:
+ raise ValidationError(
+ "Venue is not available for the selected time range.")
+
+ @api.depends('start_date', 'end_date')
+ def _compute_days_difference(self):
+ """Compute the difference between start and end dates for Calculating the days"""
+ for record in self:
+ if record.start_date and record.end_date:
+ delta = record.end_date - record.start_date
+ record.days_difference = delta.days
+ else:
+ record.days_difference = 0
+
+ @api.depends('booking_charge', 'venue_id')
+ def _compute_booking_charge(self):
+ """Compute booking charge for the given venue with the Amenities"""
+ for rec in self:
+ rec.booking_charge = rec.venue_id.price_subtotal if rec.venue_id else 0.0
+
+ @api.depends('venue_booking_line_ids', 'venue_booking_line_ids.state')
+ def _compute_pending_invoice(self):
+ """Compute function for finding the pending Invoices"""
+ for pending in self:
+ pending.pending_invoice = any(
+ not line.is_invoiced and line.state == "done" for line in
+ pending.venue_booking_line_ids)
+
+ @api.depends('venue_booking_line_ids.sub_total', 'booking_charge_per_hour',
+ 'booking_charge_per_day')
+ def _compute_total_amount(self):
+ """Compute total amount of bookings with the Charge of the Particular venue"""
+ total = sum(item.sub_total for item in self.venue_booking_line_ids)
+ for rec in self:
+ if rec.booking_type == 'day':
+ total += (rec.booking_charge_per_day * rec.days_difference)
+ if rec.venue_id.additional_charge_day != 0.0:
+ total += rec.venue_id.additional_charge_day
+ elif rec.booking_type == 'hour':
+ total += (rec.booking_charge_per_hour * rec.days_difference)
+ if rec.venue_id.additional_charge_hour != 0.0:
+ total += rec.venue_id.additional_charge_hour
+ rec.total = total + rec.booking_charge
+
+ @api.constrains('start_date', 'end_date', 'venue_id')
+ def check_date_overlap(self):
+ """Check the date overlap between the start and end dates"""
+ for booking in self:
+ overlapping_bookings = self.env['venue.booking'].search([
+ ('venue_id', '=', booking.venue_id.id),
+ ('start_date', '<', booking.end_date),
+ ('end_date', '>', booking.start_date),
+ ('id', '!=', booking.id), # Exclude the current record itself
+ ])
+ if overlapping_bookings:
+ raise ValidationError(
+ "Booking dates overlap with existing bookings.")
+
+ def action_booking_confirm(self):
+ """Button action to confirm"""
+ for booking in self:
+ bookings = self.env['venue.booking'].search([
+ ('venue_id', '=', booking.venue_id.id),
+ ('start_date', '<', booking.end_date),
+ ('end_date', '>', booking.start_date),
+ ('id', '!=', booking.id), # Exclude the current record itself
+ ])
+ if bookings:
+ raise ValidationError(
+ "Booking dates overlap with existing bookings.")
+ else:
+ self.state = "confirm"
+
+ def action_reset_to_draft(self):
+ """Button action to reset"""
+ self.state = "draft"
+
+ def action_send_confirmation_mail(self):
+ """Button action to send confirmation mail"""
+ template = self.env.ref(
+ 'venue_booking_management.mail_template_notify_venue_booking').sudo()
+ template.send_mail(self._origin.id, force_send=True,
+ email_values={
+ 'email_to': self.partner_id.email})
+
+ def action_booking_invoice_create(self):
+ """Button action to create related invoice"""
+ invoice_id = self.env['account.move'].search(
+ [('invoice_origin', '=', self.ref), ('state', '=', 'draft')])
+ amenity_lists = []
+ def add_charge(name, price_unit, quantity=1):
+ amenity_lists.append({
+ 'name': name,
+ 'price_unit': price_unit,
+ 'quantity': quantity,
+ })
+ if self.booking_type == 'day':
+ total = self.booking_charge_per_day + self.venue_id.additional_charge_day
+ elif self.booking_type == 'hour':
+ total = self.booking_charge_per_hour + self.venue_id.additional_charge_hour
+ else:
+ total = 0
+ add_charge('Amenities charge', self.booking_charge)
+ add_charge('Booking Charges', total)
+ for rec in self.venue_booking_line_ids:
+ add_charge(rec.amenity_id.name, rec.amount, rec.quantity)
+ if self.is_additional_charge:
+ is_extra = self.env['ir.config_parameter'].sudo(). \
+ get_param('venue_booking_management.is_extra')
+ if is_extra:
+ amount = self.env['ir.config_parameter'].sudo(). \
+ get_param('venue_booking_management.extra_amount')
+ amenity_lists.append({
+ 'name': 'Extra charges',
+ 'price_unit': amount,
+ 'quantity': '1',
+ })
+ invoice_vals = {
+ 'move_type': 'out_invoice',
+ 'partner_id': self.partner_id.id,
+ 'invoice_origin': self.ref,
+ 'invoice_line_ids': [(0, 0, line) for line in amenity_lists],
+ }
+ if not invoice_id:
+ invoice = self.env['account.move'].create([invoice_vals])
+ self.state = "invoice"
+ return {
+ 'name': 'Invoice',
+ 'view_mode': 'form',
+ 'res_id': invoice.id,
+ 'res_model': 'account.move',
+ 'type': 'ir.actions.act_window',
+ 'target': 'current',
+ }
+ else:
+ # Unlink existing lines
+ invoice_id.invoice_line_ids.unlink()
+ invoice_id.write(
+ {'invoice_line_ids': [(0, 0, line) for line in amenity_lists]})
+ self.state = "invoice"
+ return {
+ 'name': 'Invoice',
+ 'view_mode': 'form',
+ 'res_id': invoice_id.id,
+ 'res_model': 'account.move',
+ 'type': 'ir.actions.act_window',
+ 'target': 'current',
+ }
+
+ def action_view_invoice(self):
+ """Smart button to view the Corresponding Invoices for the Venue Booking"""
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Invoice',
+ 'view_mode': 'tree,form',
+ 'res_model': 'account.move',
+ 'target': 'current',
+ 'domain': [('invoice_origin', '=', self.ref)],
+ 'context': {"create": False},
+ }
+
+ def _compute_invoice_count(self):
+ """Function to count invoice"""
+ for record in self:
+ record.invoice_count = self.env['account.move'].\
+ search_count([('invoice_origin', '=', self.ref)])
+
+ def action_booking_cancel(self):
+ """Button action to move the cancel state"""
+ self.state = "cancel"
+
+ def action_booking_close(self):
+ """Button action to close the records"""
+ if any(not line.is_invoiced for line in self.venue_booking_line_ids):
+ raise ValidationError(_('You can close The Booking only when all '
+ 'Procedure is Done and Invoiced'))
+ else:
+ self.state = "close"
+
+ @api.model
+ def get_total_booking(self):
+ """Function to get total booking, distance and invoice amount details"""
+ total_booking = self.env['venue.booking'].search_count([])
+ booking_ids = self.env['venue.booking'].search([('state', 'not in', ['draft', 'cancel', 'close'])])
+ invoice_ids = self.env['venue.booking']. \
+ search([('state', '=', 'invoice')]).mapped('total')
+ venue_ids = self.env['venue'].search_count([])
+ return {'total_booking': total_booking,
+ 'total_invoice': sum(invoice_ids),
+ 'total_amount': sum(booking_ids.mapped('total')),
+ 'total_venue': venue_ids}
+
+ @api.model
+ def get_top_venue(self):
+ """Function to return top venue and customer details query to js"""
+ self.env.cr.execute('''select fv.name,count(tb.name) from venue_booking as tb
+ inner join venue as fv on fv.id = tb.venue_id
+ group by fv.name order by count(tb.name) desc limit 10''')
+ venue = self.env.cr.dictfetchall()
+ self.env.cr.execute('''select pr.name,count(tb.name) from venue_booking as tb
+ inner join res_partner as pr on pr.id = tb.partner_id
+ group by pr.name order by count(tb.name) desc limit 10''')
+ customer = self.env.cr.dictfetchall()
+ self.env.cr.execute('''select tb.ref, pr.name, tb.date from
+ venue_booking as tb
+ inner join res_partner as pr on pr.id = tb.partner_id
+ where tb.date >= '%s' and tb.state = 'invoice'
+ order by tb.date''' % fields.date.today())
+ upcoming = self.env.cr.dictfetchall()
+ return {'venue': venue, 'customer': customer, 'upcoming': upcoming}
+
+ @api.model
+ def get_booking_analysis(self):
+ """Function to return customer details to js for graph view"""
+ self.env.cr.execute('''select pr.name,sum(tb.total) from venue_booking as tb
+ inner join res_partner as pr on pr.id = tb.partner_id
+ group by pr.name order by sum(tb.total)''')
+ booking = self.env.cr.dictfetchall()
+ count = []
+ customer = []
+ for record in booking:
+ customer.append(record.get('name'))
+ count.append(record.get('sum'))
+ value = {'name': customer, 'count': count}
+ return value
+
+ @api.model
+ def get_venue_analysis(self):
+ """Function to return truck details to js for graph view"""
+ self.env.cr.execute('''select fv.name,sum(tb.total) from venue_booking as tb
+ inner join venue as fv on fv.id = tb.venue_id
+ group by fv.name order by sum(tb.total)''')
+ booking = self.env.cr.dictfetchall()
+ count = []
+ customer = []
+ for record in booking:
+ customer.append(record.get('name'))
+ count.append(record.get('sum'))
+ return {'name': customer, 'count': count}
+
+ @api.model
+ def get_select_filter(self, option):
+ """Function to filter data on the bases of the year"""
+ if option == 'year':
+ create_date = '''create_date between (now() - interval '1 year') and now()'''
+ elif option == 'month':
+ create_date = '''create_date between (now() - interval '1 months') and now()'''
+ elif option == 'week':
+ create_date = '''create_date between (now() - interval '7 day') and now()'''
+ elif option == 'day':
+ create_date = '''create_date between (now() - interval '1 day') and now()'''
+
+ self.env.cr.execute('''select count(*) from venue_booking
+ where %s''' % create_date)
+ booking = self.env.cr.dictfetchall()
+ self.env.cr.execute('''select sum(total) from venue_booking
+ where %s''' % create_date)
+ amount = self.env.cr.dictfetchall()
+ self.env.cr.execute('''select sum(total) from venue_booking
+ where state = 'invoice' and %s''' % create_date)
+ invoice = self.env.cr.dictfetchall()
+ self.env.cr.execute('''select fv.name,count(name) from venue_booking as tb
+ inner join venue as fv on fv.id = tb.venue_id
+ where tb.%s
+ group by name
+ order by count desc
+ limit 10''' % create_date)
+ venue = self.env.cr.dictfetchall()
+ self.env.cr.execute('''select pr.name,count(name) from venue_booking as tb
+ inner join res_partner as pr on pr.id = tb.partner_id
+ where tb.%s group by name
+ order by count desc limit 10''' % create_date)
+ customer = self.env.cr.dictfetchall()
+ self.env.cr.execute('''select pr.name,sum(tb.total) from venue_booking as tb
+ inner join res_partner as pr on pr.id = tb.partner_id
+ where tb.%s group by name''' % create_date)
+ cust_invoice = self.env.cr.dictfetchall()
+ cust_invoice_name = []
+ cust_invoice_sum = []
+ for record in cust_invoice:
+ cust_invoice_name.append(record.get('name'))
+ cust_invoice_sum.append(record.get('sum'))
+ self.env.cr.execute('''select fv.name,sum(tb.total) from venue_booking as tb
+ inner join venue as fv on fv.id = tb.venue_id
+ where tb.%s group by name''' % create_date)
+ truck_invoice = self.env.cr.dictfetchall()
+ truck_invoice_name = []
+ truck_invoice_count = []
+ for record in truck_invoice:
+ truck_invoice_name.append(record.get('name'))
+ truck_invoice_count.append(record.get('sum'))
+
+ return {'booking': booking, 'amount': amount,
+ 'invoice': invoice, 'venue': venue, 'customer': customer,
+ 'cust_invoice_name': cust_invoice_name, 'cust_invoice_sum':
+ cust_invoice_sum, 'truck_invoice_name': truck_invoice_name,
+ 'truck_invoice_count': truck_invoice_count,
+ }
+
+
+class VenueBookingLine(models.Model):
+ """Model to manage the Venue Booking lines of the Venue Reservation"""
+ _name = 'venue.booking.line'
+ _description = "Venue Booking"
+
+ venue_booking_id = fields.Many2one('venue.booking',
+ string="Venue Booking",
+ help='The relation added for the venue Booking ')
+ state = fields.Selection([('done', 'Done'), ('pending', 'Pending')],
+ string="State", default="pending",
+ readonly=True,
+ help="The state of the venue Booking line")
+ currency_id = fields.Many2one('res.currency', readonly=True,
+ default=lambda self:
+ self.env.user.company_id.currency_id,
+ string="Currency",
+ help="The currency of the booking line")
+ is_invoiced = fields.Boolean(string="Invoiced", readonly=True,
+ help="The boolean value used for finding the "
+ "venue booking is invoiced or not")
+ venue_type_id = fields.Many2one('venue.type',
+ string="Related Venue Type",
+ related='venue_booking_id.venue_type_id',
+ help="The venue type of the booking line")
+ amenity_id = fields.Many2one('amenities', string='Amenities',
+ help='The relational field for the booking '
+ 'line with the amenities model')
+ quantity = fields.Float(string="Quantity", default=1,
+ help="Quantity of the Amenities")
+ amount = fields.Float(string="Amount", help="Amount of the Amenities",
+ related='amenity_id.amount')
+ sub_total = fields.Float(string="Sub Total",
+ compute="_compute_extra_sub_total",
+ readonly=True, help="Sub Total of the Values")
+
+ @api.depends('quantity', 'amount')
+ def _compute_extra_sub_total(self):
+ """Compute function for the Amenities"""
+ for booking in self:
+ booking.sub_total = booking.quantity * booking.amount
diff --git a/venue_booking_management/models/venue_type.py b/venue_booking_management/models/venue_type.py
new file mode 100644
index 000000000..47fbeba6b
--- /dev/null
+++ b/venue_booking_management/models/venue_type.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Risvana AR (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 .
+#
+###############################################################################
+from odoo import fields, models
+
+
+class VenueType(models.Model):
+ """Model for managing the Venue types"""
+ _name = 'venue.type'
+ _description = 'Venue Type'
+
+ name = fields.Char(string="Name", help="Name of the venue type")
+ image = fields.Binary("Image", attachment=True,
+ help="This field holds the image used as "
+ "image for the event, limited to 1080x720px.")
diff --git a/venue_booking_management/report/__init__.py b/venue_booking_management/report/__init__.py
new file mode 100644
index 000000000..f1c5d7700
--- /dev/null
+++ b/venue_booking_management/report/__init__.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Risvana AR (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 .
+#
+###############################################################################
+from . import venue_booking_report
+from . import form_venue_booking_report
+
+
diff --git a/venue_booking_management/report/form_venue_booking_report.py b/venue_booking_management/report/form_venue_booking_report.py
new file mode 100644
index 000000000..f4662c3af
--- /dev/null
+++ b/venue_booking_management/report/form_venue_booking_report.py
@@ -0,0 +1,77 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Risvana AR (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 .
+#
+###############################################################################
+import pytz
+from odoo import api, fields, models
+from odoo.exceptions import ValidationError
+
+
+class VenueBookingReport(models.AbstractModel):
+ """Class is used to print pdf report for the venue_booking module form view"""
+ _name = 'report.venue_booking_management.report_venue_booking'
+
+ @api.model
+ def _get_report_values(self, docids, data=None):
+ """Function to return values for the report,
+ docids: it will provide the current id the model"""
+ current = fields.datetime.now().astimezone(
+ pytz.timezone(self.env.user.tz))
+ current = current.strftime("%d-%m-%Y %H:%M:%S")
+ if docids:
+ doc_ids = self.env['venue.booking'].sudo().browse(docids)
+ return {
+ 'doc_ids': doc_ids,
+ 'today_date': current,
+ }
+ else:
+ form_data = data['form']
+ # Initialize the SQL WHERE clause
+ where = '1=1'
+ # Check if the start_date is greater than end_date
+ if form_data['start_date'] and form_data['end_date'] and form_data[
+ 'start_date'] > form_data['end_date']:
+ raise ValidationError('Start Date must be less than End Date')
+ # Add conditions to the WHERE clause based on form data
+ if form_data["partner_id"]:
+ where += """ AND tb.partner_id = %s""" % form_data['partner_id'][0]
+ if form_data['start_date']:
+ where += """ AND tb.date >= '%s'""" % form_data['start_date']
+ if form_data['end_date']:
+ where += """ AND tb.date <= '%s'""" % form_data['end_date']
+ if form_data['venue_id']:
+ where += """ AND tb.venue_id = %s""" % form_data['venue_id'][0]
+ # Execute the SQL query with the WHERE clause
+ self.env.cr.execute("""
+ SELECT tb.ref, pr.name, fv.name as venue, tb.booking_type,
+ tb.date, tb.start_date, tb.end_date, tb.state
+ FROM venue_booking as tb
+ INNER JOIN res_partner as pr ON pr.id = tb.partner_id
+ INNER JOIN venue as fv ON fv.id = tb.venue_id
+ WHERE %s
+ """ % where)
+ # Fetch the query results
+ rec = self.env.cr.dictfetchall()
+ # Return the data for the report
+ return {
+ 'docs': rec,
+ 'docs2': form_data,
+ 'today_date': current,
+ }
diff --git a/venue_booking_management/report/venue_booking_report.py b/venue_booking_management/report/venue_booking_report.py
new file mode 100644
index 000000000..307600f5e
--- /dev/null
+++ b/venue_booking_management/report/venue_booking_report.py
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Risvana AR (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 .
+#
+###############################################################################
+from odoo import fields, models, tools
+
+
+class VenueBookingReport(models.Model):
+ _name = "venue.booking.report"
+ _description = "Venue Booking Analysis Report"
+ _auto = False
+ _rec_name = 'date'
+ _order = 'date desc'
+
+ name = fields.Char('Booking Reference', readonly=True,
+ help="Booking Reference field for the Reporting")
+ date = fields.Datetime('Booking Date', readonly=True,
+ help="Booking Date field for the Reporting")
+ partner_id = fields.Many2one('res.partner',
+ 'Customer', readonly=True,
+ help="Partner ID field for the Reporting")
+ total = fields.Float('Total', readonly=True,
+ help="Total amount for the Booking Values")
+ state = fields.Selection([
+ ('draft', 'Enquiry'),
+ ('confirm', 'Confirmed'),
+ ('invoice', 'Invoiced'),
+ ('close', 'Closed'),
+ ('cancel', 'Cancelled'),
+ ], string='Status', readonly=True, help="The selection field for the Booking")
+
+ def init(self):
+ """Initialize the function to get the Booking Details"""
+ tools.drop_view_if_exists(self._cr, self._table)
+ self._cr.execute("""
+ CREATE OR REPLACE VIEW %s AS (
+ SELECT
+ vb.id as id,
+ vb.name as name,
+ vb.date as date,
+ vb.partner_id as partner_id,
+ vb.total as total,
+ vb.state as state
+ FROM venue_booking vb
+ WHERE vb.state IN ('confirm', 'invoice')
+ GROUP BY
+ vb.id,
+ vb.name,
+ vb.date,
+ vb.partner_id,
+ vb.total,
+ vb.state
+ ORDER BY vb.id
+ )
+ """ % (self._table,))
+
+
diff --git a/venue_booking_management/report/venue_booking_report_templates.xml b/venue_booking_management/report/venue_booking_report_templates.xml
new file mode 100644
index 000000000..0c4c6509d
--- /dev/null
+++ b/venue_booking_management/report/venue_booking_report_templates.xml
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+ Venue/Event Booking Report
+
+
+
+
+
+
+ Date:
+
+
+
+
+
+
+ From:
+
+
+
+ To:
+
+
+
+
+
+ Customer:
+
+
+
+
+
+ Venue:
+
+
+
+
+
+
+
+
+ Sl.no |
+ Ref.No |
+ Venue |
+ Booking Type |
+ Customer |
+ Start Date |
+ End Date |
+ State |
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+ From:
+
+
+
+ To:
+
+
+
+
+
+ Customer:
+
+
+
+
+
+ Venue:
+
+
+
+
+
+
+
+
+
+
+ Sl.no |
+ Ref.No |
+ Venue |
+ Booking Type |
+ Customer |
+ Start Date |
+ End Date |
+ State |
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/venue_booking_management/report/venue_booking_report_views.xml b/venue_booking_management/report/venue_booking_report_views.xml
new file mode 100644
index 000000000..11af59c4e
--- /dev/null
+++ b/venue_booking_management/report/venue_booking_report_views.xml
@@ -0,0 +1,110 @@
+
+
+
+
+ venue.booking.report.view.pivot
+ venue.booking.report
+
+
+
+
+
+
+
+
+
+
+
+ venue.booking.report.view.graph
+ venue.booking.report
+
+
+
+
+
+
+
+
+
+
+ venue.booking.report.view.tree
+ venue.booking.report
+
+
+
+
+
+
+
+
+
+
+
+ venue.booking.report.view.search
+ venue.booking.report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Venue Booking Analysis
+ venue.booking.report
+ graph,pivot
+
+ {'group_by_no_leaf':1,'group_by':[],
+ 'search_default_filter_order_date': 1}
+
+ This report performs analysis on your Venue
+ Booking.
+
+
+
+
+ Venue Booking Analysis
+ venue.booking.report
+ pivot
+
+
+
+
+
+
diff --git a/venue_booking_management/report/venue_booking_rerports.xml b/venue_booking_management/report/venue_booking_rerports.xml
new file mode 100644
index 000000000..2069a3c8b
--- /dev/null
+++ b/venue_booking_management/report/venue_booking_rerports.xml
@@ -0,0 +1,14 @@
+
+
+
+
+ Venue Booking
+ venue.booking
+ qweb-pdf
+ venue_booking_management.report_venue_booking
+ venue_booking_management.report_venue_booking
+
+ report
+
+
+
diff --git a/venue_booking_management/security/ir.model.access.csv b/venue_booking_management/security/ir.model.access.csv
new file mode 100644
index 000000000..9fc24ff71
--- /dev/null
+++ b/venue_booking_management/security/ir.model.access.csv
@@ -0,0 +1,10 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_venue_type_manager,access.venue.type.manager,model_venue_type,base.group_user,1,1,1,1
+access_venue_booking,access.venue.booking,model_venue_booking,base.group_user,1,1,1,1
+access_amenities,access.amenities,model_amenities,base.group_user,1,1,1,1
+access_venue,access.venue,model_venue,base.group_user,1,1,1,1
+access_venue_lines,access.venue.lines,model_venue_lines,base.group_user,1,1,1,1
+access_venue_booking_line,access.venue.booking.line,model_venue_booking_line,base.group_user,1,1,1,1
+access_check_venue_availability,access.check.venue.availability,model_check_venue_availability,base.group_user,1,1,1,1
+access_venue_booking_report,access.venue.booking.report,model_venue_booking_report,base.group_user,1,1,1,1
+access_venue_booking_analysis,access.venue.booking.analysis,model_venue_booking_analysis,base.group_user,1,1,1,1
diff --git a/venue_booking_management/security/venue_booking_management_groups.xml b/venue_booking_management/security/venue_booking_management_groups.xml
new file mode 100644
index 000000000..cdc40a6da
--- /dev/null
+++ b/venue_booking_management/security/venue_booking_management_groups.xml
@@ -0,0 +1,22 @@
+
+
+
+ Venue Booking Management
+ Category for Venue Booking Management
+
+
+
+ User
+
+
+
+
+ Manager
+
+
+
+
+
+
diff --git a/venue_booking_management/security/venue_booking_secruity.xml b/venue_booking_management/security/venue_booking_secruity.xml
new file mode 100644
index 000000000..80211c1de
--- /dev/null
+++ b/venue_booking_management/security/venue_booking_secruity.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ View Own Docs
+
+ ['|',('user_id', '=',
+ user.id),('create_uid',
+ '=', user.id)]
+
+
+
+
+
+ View All Docs
+
+ [(1, '=', 1)]
+
+
+
diff --git a/venue_booking_management/static/description/assets/icons/check.png b/venue_booking_management/static/description/assets/icons/check.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8e85f51d612c626d167e4def7bccdbe1d6d17bd
GIT binary patch
literal 3676
zcmcgvdsGuw8jpg4iY%zK;)6~HwPkUVnaO)JDiRS~W01#+Tdm%CgiJ{?ab|#k+GElB
zs)m`Fq^5i_*c#09+YQPFKr}nwM5Uo-TAL;V~rhtuFtx>&0g#C#25Hk&m#sUb-WA~31MBLg4ikrG=iSUHIid9Tb1
z9z?MSXrWNHppa=`3T|)6tVasU1O?OhfLBAPab-$=Aj^bs-a^skcg`{z&c(Sok1Rnf
z5yC>1Y_<@*U9)a?2rbEDiXfxl+}cG;IVE0Blf_9wp~!G!ilE2DR$`Kz#XXhg1%^X-
zXt38Q$b#e)IuIe${frbc@94mx((??I^YI-(m7WmPOQnh&kOeVE5L~UXliA7*Aqh2!
zygrHdutKqvq)a?GfU^Rbv!F1L2n;u3q&9~jDV>4R8gLYj5g8$Gdf5;PM8e91VHO}tH2a0L8XijPj4WT@OfXUAT
zJnhf*@K9tDMU;r4{0y>T@q!c#dc9U3Y|rFt)F2wJDdXk4$u2;9M#3=B({jWE?ZT8AH%
zg#Ynm7{OD-iERSQ3q%07QcjdCs6!Oo2=IDcJmb$VO_7HU?ogqWL}USZT7WtfjpanX
zO$@a45~6_o7yUgq;$EyC{@)i#qZ|N_R=_bJvw}bMOMXYUaeIWvk1PbW5LY2pwz5%~)8GxdCY^PssXRx5eoz
zoO^~fem~r``@rOd6TkZU8il$gE8}Oz-;cgl{mIK`Pdv;QZ%-|s
z|GM{J*isd7WKnONICtpgNp#AiUeQbceyF&&T9d++kK5LH+xFP3BM=)2;)S)A$sTiU6of)b*Y#j{o#0g@7kQ@$&^?Xwd#C)
z*?`OMhxblls7-52Hx9e<G~?b~~OYW?LWQyXXH
zri{BfJ2omM>(N5CCh8@jy!2dILd_cwrrn5}-u1H`e?0w$}WEW5P9XVW2;W}-E(N#mKb@>!_?9;7EcMc
z{$}01S5Kra9GY1>s2abs9zQ>M^!2#Wa|ZgdtCP$7HxD_{=b{ky&9Q_CH6!ldap(T*
zf}8Jcd_*M`3GY@f|5wb3WaRUu4KwLk^ZH)Cx@g9Gqrd$0VaEMIzioWH^;l}xdpp8T
z8}{xXW=4I#;LY(#$DH;dANHu-yZ<(gnNzG17ONUnb$vS3
zb*fD2Tp8xe4);ae*%)~z`kF2F+Q6#SXw|Se#$N^e?zR2i*OIq99+Iy7|H~LN!Mc6)
H^s@f|!zCx=
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/icons/chevron.png b/venue_booking_management/static/description/assets/icons/chevron.png
new file mode 100644
index 0000000000000000000000000000000000000000..2089293d6ad94cfc015cc0a8c07bb03efd4a689e
GIT binary patch
literal 310
zcmV-60m=S}P)fLA$g5CzAh99{FF(tp
zz^tD4))$4c^0SZV9_X~njUYum@4i`~v!i=obU%PG(6q`OMK>{HG>r}*tHKc2@w+qg
z7|l>B76qkX(U2E&K_1Nf!JbCtpGzwGSJ~CkU>QcDY&q>lnbwQm<|2>>iH5vL6qJIP
zp;W{K-Snrb@Z2gLMVZAQQ5jU>DXT)0mtk@hpq-Sb{2q6{0V4Z;tNXT3P5=M^07*qo
IM6N<$f_?6Y+W-In
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/icons/cogs.png b/venue_booking_management/static/description/assets/icons/cogs.png
new file mode 100644
index 0000000000000000000000000000000000000000..95d0bad62cf22361b148e1d6cefe2ceab605955d
GIT binary patch
literal 1377
zcmV-n1)lneP)lH5n~Zj$eiG;8wLI!*reT1_VfljL=sA}=JrOptsX2RfC&)+l61t|6JPeb$mZ
z6v1wNClWXiLSlOh+mR64U7bjvhva*zJ0HRRaDbgl@(q$*^PYf*$fE&7)c&&!Rfm?&yLyFbQ?2&R6W6v@rWu!;bZU9|_!
z4Je^Q5$r!vH2{)*ok-wK1%Wz7TG;LgvHhtN39JtxLC&_yAzs|bhFaWtFLrukMR}l_
zP~>z0rF26#(W+H@aXx?6lf(f454Uv()R+QrlZafX3t}g5wp6-Blj;u$XaE#h->+xC
z005Fp0GtMpYoBiuo)VG0UP0_GltOix%1(%-bKgbA0o1pB3&6VoRs+}%fFWUi1MmQV
zmjH~{WZwYT7ng4njIz1iD4PuYIM&NvU6NVO4kNuj`IZ(nzL#XTM^~@uFGT>-aT6dh
zAgaP68%9MDu}+cu7uohT0RHqW9d8lhD-kJqd^i9;Rw)OT!X*D$Y?MvID9;=%I@23T
z$~m4}V3f^0BG}d<_%@?#emG&81LI_NvTQ!T$gzGzil=|K?VCM%e*mZ`d`!0R--N(>
zX_T!|fX{f;z6ZDfz>JL{bFu7UqLI0BExN7c!HmOYg;$V?QB4==-_|4!R<1p=W!b
zXM0?cbrc+q5buUe#ZpdV?VzCxk-Rm+);3(wb8q`(#{e8FI_3z8RwJLQk>}&nRHK0|
zNhvzkFo4$qbT=sr4i@y>Bdr`7j(HfwmH^uc7xH9%r%nnDB_ty3>&opGxGMoP9kf;<
zd%_$N;{SC3V62>WZcCaxpx6frT|FlOj5R5zGbh3vrqY>j1H`{Bkt_d-PcIzGcOeS&
z0OimpMB04AZ5M$FkksHx)9_uX*rDTKrDER^Aij2r>}i8vD4G(OFwKFYV|^yVP5w23
z`asH~GaMjZ={ojt!?Lb#lcy352^1ZBLpqIV|5
zLfz5N09ce%03XI(J-h5`5#>QuTr`wWt<}xj9|=Odm?U{1pyiQF6&>pYfaOUB0`PfX
zSMHvKeKvO?5vfw7-bq{v4vAnDh^?3%L|Q@w6Pmd9iD(;0IfB{ww?bB5NS1mno@&9c
zXC4%!P8Bklxq~Ew%%g071mXR`&iMY{dhWR!JtLt}njRD_-Cxi%N0X&qj~Nq_rI}Yn
za8e0TJ(H#J00000NkvXXu0mjfE=YKA
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/icons/consultation.png b/venue_booking_management/static/description/assets/icons/consultation.png
new file mode 100644
index 0000000000000000000000000000000000000000..8319d4baa09d6afac9362dff318f63a0f96f555e
GIT binary patch
literal 1458
zcmV;j1x@;iP)fo-7eN@Nx;}%h)9e^5-C?E
zsEH&b3Z#%2B-}L7v^LRRD&QZ8A<7MshM0yxF7rU)x4)gW;*vW;3
z#hX3&)M|C@Hzy`0dbVF71Cp#6E*?;(1E5ZgN|t#IpsRseZTS;fmL2OZ%G1F2%+iN5
z?1unK-3Ni+4&6W$B|ic7=Z$mSG;E8PyRX^_00(R
zZhUjoBfjtdy_aS#1FePDP8??a5dOFCh
z*MWRv)G@zc9y@oAQ6L5)gF{}MFZh1tt%7=2kn>q6`mgJDye)VpNyeX>nXy(;k)8%5c~P{u8)+YKOVK2Ka7pM_X}a`O
zk#~c24MYp^y)u3b+*+!2>R#%t}=?wy_<
zpYKn-%7CQNC`x``VuKC^f_Kx@zC4JDHDk0HCO^O4#RC{@^;{j6<{9
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/icons/ecom-black.png b/venue_booking_management/static/description/assets/icons/ecom-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..a9385ff13f696e96d517a56ce2b2ff7d282c748a
GIT binary patch
literal 576
zcmV-G0>Ax5}Z)a!cc0ra5uqqg5lnhXD
zTbP_`oKdQ!!sJxrjN&KdC#M>hn6H53Z@_@W06J)|I<5r7bODP7TpFfK@D$$y9ro1J
z_#n7|3NU9+Eg3t67i6kk1G7mAm}&y~>LPq;59$DNz9rz_PKFAe2JQYcbvs+lNHw^F+;#7cCP*z(AJ2&$C0H1W+ddn*~CoC?@7snGmV!9
z<==r}6|tyA>`?)>6k{b=2d<=(_5rWxzxsKgUs~Q{+du)!y5s>SG|Pu>T2kaR7OcV&-NYURtom{p?~^a9V+
z7O-a3C?=EC%HIJ!R*hUb72^tZzf-`AuuDDSkJJnF?!xs=oN3JbnbTGPz&Os^S>dl1
z(84w;APbb-b_k@KC|~4YkNmz@^KPH*e34{*2J>2yF9_24A}NIoShST-^{Ye_(vLmm
zd~pgm3F$kIkw;g)NYXe9tbV#5fWaonr$h>8ffe1h+u&f*`C7F2cl-b`l5Ye!`u+O=
O0000##3Xw+{I#MbTYoZ-I?3FUBiCh!QRfyd*8S0
zzBhAFP*6~?-lzdrfLY+Hwprk^9?LDGz;$2=SdFk>z#U*LBaI?QQKD9e7VcUbxCb21
zK<^(;Xc0+8N7+;0G_au`qDwm1ixh;r_7XS;lzSn3Ks%r7fpFK}0T+SIX$T+G&OY=(
zxNCJ_5*Q8nGpO{QD=gKm=?w>jvsI4EeCbfxmVgL)==l)8DLS{4AE!e?Z8#kPQdt|>qP=~
z0Jlc(3Gg?f*M1lL)`j_1YkWB%UdQh2b66h*ZnCzsy7n_B0ckvzW`}^r+Q1XwyiR6N
z+Zb>`kF^u{kzSF3ZWCxE2%MHJ3h_5t<4fjdNthVL50AOsk~o%60t*2`LXkdVyV0$h
z3!el&2Fvm1lW@sw^on`m-Vx`wwB6`P4R}rO
zE6^)ow-A5YnfJ&y0Ye!WLUqzpz$M^$fY4`p?Mdxxh|Yg2?gAd7ipc|DXJ`UZ90Kkq
z5IzMQOgng*oJH-CT;UDiOoqC=IL6w|-va-Bgt_N1s&c*2*98Ry1?!OCgV~htO4|
P00000NkvXXu0mjf_K8qG
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/icons/hotel-black.png b/venue_booking_management/static/description/assets/icons/hotel-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..130f613be065b02c7b942088c4d90db37ed8acf3
GIT binary patch
literal 911
zcmV;A191F_P)sqyP_dDm_d+wti*Wu|Jegr#e_!#{@68vYp!)bLlu6Zk`LG>4b)
zEtVJfV|c&7EyFk1UEqgt9*;Njw1VZ>g|{(-Ih??2*p8dxr0-%j^2hNC#&IhqaU^nc
z@$+Ql#-r}>$jwGuyQA&xajp}QpNYQgQvRX3un9j@9GJrg7>xWw!mm^1U#(2=6#lMo
z|KQokEyJGV*$a3$^4H^V!vBQLO`Y#xXJTY1;rCX!>CE#}6@DtiPgnT82{)9?y|d)x
z(wYD^;79DoMQqIQU*HgKi6iBw;@FUI9sNVmM#^uDbMB8mr2J(psR`f_e2lfYQ^?Pc
zD*O(-j!VKyGmVpx8^nFlK|*>Q!@2nVHmt#iLfSnlYCO2
zdFMZq-%%fsUm+%4DcBAM@nlB#OJUtlu?=@5vKyk0-(~c{nEb2TSI|FD&|jC)U02XO
zP_VtPpg&ess@n%zfz}7m^l)@9-pa_g6!iB9hqNkI7IY^HwJpfkw1vjiEIS#Wpt0?`HcKIp}DC=(*S1hNk)FAp#M3(Ph`2hp<^Rwd!~tF
ztxuuW2aq1-#_&}}?@!(9I-!5fU3;7r`rs;-;>L{bUqXMKVkK5&4iq?1871GE)(+iE(2hg+zdgWT>s_5?n3yszX(6k07r<#7z+xi};Iw>y+AElqG*-EPDTmCjr_EtL
l9oc+vR{1Wfk3Rkj{so);rk=IPI$i((002ovPDHLkV1j5u&D{V1
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/icons/license.png b/venue_booking_management/static/description/assets/icons/license.png
new file mode 100644
index 0000000000000000000000000000000000000000..a5869797ecaa7583c552c3bb7c9bce5910df78e0
GIT binary patch
literal 1095
zcmV-N1i1T&P)?DLX
z+1Y*BO%2WWvTu05Ki}`p`@J{sJ=nx1)&%L)P@|a%i#deKSU(9Ndee~mRtn|o9hqkt
zsH)g_?j-1Oz*{rH&X9nd_6n5~S%#SclCXXhkhBHYOR<={+%T9HHm_+Rj=iH!?az_sX`LfziH+4|52SPxCd(lFQ#&
zy}6O4ybXVUJ6qGPGqH9kZO+TqO1)ZNXdyA~iK
zjU@8F177OZcQq)~$=N9vU#B7D6{_#K`1J!DzKA!x0H-08MD^1m@!Cu1^1Ay68A9JiW%_
zS;VTfBGKSzreWdMUn09>mmHnKrHDNn2a^cnnZ|MXDzMjuSf_9uLfT_HXSmEliE3?k
zXG5qm?Zm1JIMsm2cnJK_V=hkE@UzgSfJcoDFQBI%WSu~xnTe+6cI1o%43w{m$eK<(
z*6j^w>_69x>X$9vq!B%D)n2i2Fx3eCH`fw(T?A+}`>a(i3QK#4M*6$U2tPE#;4RnK
z>mxwS8DJZNZzlfX70^76^jmNLyX*lJ7YEWlH{
zcu!SGBHwAI5D}|zA|-av#xj{i{y7^5SAdUFv(H6FZ!P*Haqu>f2gqsj_qOq~2-w*F
zS(Vp;I|v^e^)8@E=esPmmg4ZVjs4>wpR8c|FGJSOYN$8)|IM@rI3xAI#QT>#L{?m_|*Crlo{0DLwqmu7G?&JUf
N002ovPDHLkV1nf|8?OKW
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/icons/lifebuoy.png b/venue_booking_management/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 0000000000000000000000000000000000000000..658d56cccfbc0e46060ad4850b9fc60c656baf18
GIT binary patch
literal 1199
zcmV;g1W@~lP)K~!jg?OD%n8$}d;Z#;H3_Ux`{Y$>IOhC`GK2Z&mUBGl%91P8y|S)kfJ7y@Fv(h8fJTCuS1y-dl~V3Bn@u?h-V-e;5wUK!dy#X#2mo{Oe@Ws202*N!
zUYebq1*Oz(7=|0J>pn(AT~tHi06fpT5Cp+8=UfzYF~>QdlTyCudEUcDqp?-Q3ClZy
zh`8_jS1ilAN<>A)|0jSkVOiEy-}kQ++2pw<5YcQ91S^cOdS0R|Fvb>wAgB}3_lVdx
zo@Z(pi+`PnCN6%2qaJh2n$9r_fQWby1S^wxWem84@B1sJuai*#Qp(HIeDX(8DwXO|
z%F8CUnE~{Az4MH*g_Fz52gcZf=Xn=0?a~H`hylQ*oZNq<_}k0ls8Xpc6H#iiO$}f$
z7+lQz-Xr3jB4gvg7!%!YH+A(>1Bjw%(UgpcwAQ*+tJSUpz&ZeoCZ;U_SQA3r;GDOJ
z$T;)HSw0bo%R@wVuh)CagoKDRBK{zR*fFtJO3f3|HAFNzMEd>yw@I~AqJ#bY{dp7T
z002bv$W%N4fDmGbh<-J-uT(0DT8^y%5pku|M*#3XBv+M(*h9qcYPH&RL>!t5ih0Vt
zUhhjHdIJES%P?;Pz-K~;bwmtD2ac^kEdHi}cmRNNMD(sw>ZYmi5uOi;=pD!w4*<{v
zfK{c`>d}E?De;q!JM+w*2G6)Xkk{#{&dFU)|KBh!fb9Z)o)nlf5uR}Y
zd|trusm)0`Mppsg1Ndk6r(q8O?g$}n6g)=1h>y{88Rl&O_*4k-$x*rHnJTQfhuU9KK{~
ze{gV+s3kFgxc1mJAwWb%MAv-ZUm~J%N@uP-7z~#3)Ik8So7O{0t+hLy&I_FLR}6^`
z@phbH$Kh*4{3egHFbsdG*XzG0ji){Z*L5FjtyLbvcvB|f%{;ykQM#_XnP!t303zyA
zsq`QZDWumnCUwuh==b}N5RuYsGT*~mt@c!Fo%$4}0j>3>Nw>~uBiXinKZ>Hx$z_=#
zilR=d)w*wDYuue4X>6r_BNNeAsf38{WsIw8wR+FAJ7-+XA!5H;t=^mFN<>lA$s-;h
zXEln5eaCU`PGe7Ktv4OVxtm8kK!NspT#NkddEOtDN@bZbcA|D8B1!;w=r~T1>a_U%
zK%>#vBBJeXx4STU!I1-p7aW^eM`ao&dc|bh_WW=-{0Wl3r~lMizvej3Q$);_Ad@h$
zFS2H{DJ{#|0D#*mX186}-I$d4sUW^)U5g92(PHl7XX2Xm3}<-8@HhS0PsfeRnq&X~
N002ovPDHLkV1i;vH)8+*
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/icons/manufacturing-black.png b/venue_booking_management/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..697eb0e9f2c06e40c9c720df7b80b8f6fac63b34
GIT binary patch
literal 673
zcmV;S0$%-zP)xK~!jg?U=D^6hRope;$f(2!dRQAe>DQQeT=B*H{T+6R=CPGo?i;
zwb3GCV`G=p7B(h-MB0d*S1Kujl2}+MniNSfJM7zGW^Qgb$r_ypLnbqCci)@+?wfB1
zGBPqU+Qfwk`Okp9XM78I>x?Y|Ll1WcSarsR1>c9|Nd%6=HgM!=YaZ@efV=JCJ_>M;
z#tG_7>fmofHqbV*fwqwi6!_g1x2b_In2ly7f%_eJ0o+aC9sujWOnqs7*p2KnX7jli
z;o6OCA9xO2jd1No_NTb+#z~0v;T`Z0zwl|`n*9F~cmiDUaJy7Xk_W&W{K7lHtvX^;
z(Zj6p4`48cdl|FZyT#uaI>0^PBmPpQF;uv%TS5j@xaEcnsPI^=RU1CxAp>3Du_HWW
zz$g4f4a9`I24ccp10CQ#@F~J=WS|GU0)9pwVB0W3xNXY`!W$Ww23{u$x9zmJwG4zl
zNZM#Y1GyGz8>t31fw`hBIdgN;Ml!xCHr9#=MoC1iB|&YhBqA8G
zu?X7OSOnBURJ8DgX)FXmEY-qi6Qc+|;sZf^#TXGy#8}J>ckeKJckY?{hP0VaJzj0X8RhK^60Y~Xz{&a9?$@^
z`*!wmV5Zy_F}!tF1}J$Bj0DI7)BwvuZXk8w60j{qaRkSJJyKzx5OU#xRG|a+LWHFb
zOd6COC^gCslp0b8n(}BvP?neGfxW0~`7uN}P!H_L!mj|jfWyE~sgms!uaGmXN9#VL
z&o{&wH`(XFRQ($pDUuL+1@xib4Gb0l2lVkR;3DeD8LS7k>f__UV1%mzx>4a$5ZEDf
zFs9!N;)lCQb0feM2j7i5gwE^pjd8|FLg;tGbr&DyCbIB3L*hWI<61T88h);WH`i)_
z#w>i!kj#Nyz$P-ET7zx?XMsbOOtb!-1`Gk8B3ufXFR%lU=Ye?%_gs{PuhlItkT`G~
z*iYsNGy_*qE6PdWv?bF996`l@7wT=!Aca~OHVbSKIdC1d{b6GWSPEPQ9$MUMlmo*+
zzeDyaLI);$B1?p11lFKJCR&>;B)yV!00U$$m*(l#18adt5v~eYC$PgCrL2V#6Pa`s
z8YOcQ*O0DT0KSqr0(GRrbsYE};VKANl_YcE0xA?5BdrDarup5doDk*PG&c?`vA8VaO=C>m4%I|X)lqm$yVLT0P+oIdY}GtOrO29vww9VSooqbBNnh
zcu(I|YQ)0zb`*zp)aRe-TomMhG1NxyHQX;fPUPZ16kAXwMG|^ZYrnxPV4v0J8EW^T
zsOZBl9Hv`x%N>1ggc$PASEFSIN{zAurN)2jfOsd(fgd5lQU?Y?lv>E=CtGh+0(VGG
zWW%UGZ@o!Njc1h3(oB}@JmzAS!6!o=#PN)%o0h~rfH{E-AX#fBK07*qoM6N<$
Eg49ZXX8-^I
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/icons/puzzle.png b/venue_booking_management/static/description/assets/icons/puzzle.png
new file mode 100644
index 0000000000000000000000000000000000000000..65cf854e7ea72e36142ffc1a407bf2b8355cc85c
GIT binary patch
literal 653
zcmV;80&@L{P)9a`;n_Do>R91)@YfrZ;WIBYI)WE@w%y
z7IC%30~nX`B(&|Bi6!}ZGuBf8IAM^
zQA&SX2=P2@*<+`kI7+k$-1A&gaYV-{Ks?g2#0TH?II!as;HNYK-X1sS_e0Z#CLzvF_5wZZ}7k)9y#mQhdC00000NkvXXu0mjfog*sX
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/icons/restaurant-black.png b/venue_booking_management/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..4a35eb939cf065c6f8cf83781a15f357348769da
GIT binary patch
literal 905
zcmV;419tq0P)?`PC*pLe{WG*jTWtl`Uu)I!h(oI7q&uZZ6pM-kw|Ur
zMPftz3s_jOvBN@wkko<{5h@lmjYJTFNYSdk7WZDgxt))5&f8mkk}hV>Idh-qo-=c2
z<}K*Z0h|JE0{hdxYd{s)k+v@ZXMrAIo@0zw;4N@F7c(R11%8u|tpdl>{-S`voX=~=
zI9qe}3E(2Iz)Gr4;kyl(s~mqF&>XN=fMdX2piMb8pcAmd@&I7Dz-K#&h$ije8Ud@c
zgQt)P0N6-UPAX^wv}*@XAr$~{fXT%{gxOL;d7J^}NS&nu>IqNA5SA(ZHvoI3&Qbww
zBrApmt%jI`Qb(zPr3MliEX(6AgxqFAfF%PhK$pZ(DxlHPm#x|JJ?#vOh0iFWL*gX;
zvNkySP6D04&a{0VI7IUG&7=5n`XhX%X!6%0pdIMTwKt`IMHB^02%jlh^`s@_+Eq$X
zUua7+@KNF<74Svq=fdYgTbhAkiIY^oW1*i5PYP{`fFHnsWN@i~VW3~=Tf~(@TO!~V
ziHK=MH!#NJVMOxR&(xQ+UJ$o$y2)oaLNW;@b@MoYxa>1*DRX}LjYb1P&7s^nlmWWk=>z*h>g|NU{%5MtF5CHx%
zsv|6})E_wVDBiwF?G1#>YfMYTD&SYd?mLjjCb;?_Zxs-Gkk1|~y%8;uG6am{&rq!N
z-f4+g1^f)yLT_-QuCw0J!G4)Cg3XY
f0eA)+t%bl}x(3Cqe?`Zc00000NkvXXu0mjfu`-q5
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/icons/service-black.png b/venue_booking_management/static/description/assets/icons/service-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..301ab51cb1363cb8a0063c4f9f7cb9cf73c91e10
GIT binary patch
literal 839
zcmV-N1GxN&P)wG}3wsU*IR)z|Z&+>zafrqJwCq*x@FjvNVI2F^z|C
zN%{bO#A+2K9mjI&psYL^8b1O*HWO0*iAfK
zwBzye?BGqTEZN2s-YR-iRRhR^{{@@H!rmxCX)mp)h^Mf|a7g;p*wW?ud=J0RL?CEP
zkEcMj#QI2Tc@Mv*2kEq`DKw7vdi=Jb&-aer)!-Z0qjz+QFK@N1&aRXO}`izA!9+A#$97UmLtKG(#D$V@JG;R0Xua%1u4_kNMazOP^ayYznp(_+pa
zmHp&*7l9|T=r9&<9@|?Ko;a_$GXn6R3=
z-_eWeE8>!NN6sWQh>p|@{|B~~h0NN}OyO(k|0o{Eevvy?ir79Q%G}xZ=i2u5tSHu2
zwf(N(bFnYJT6O^a^n}=lCZF8Nx;w2}uUkB4XPd5v`7Z>im~HzdJMCK7trz|-8@38>5jc3xX@h`{
zh@iEj_%)@#V~J@-!i)2n-XCy!_SC5Qyigi**PVuC+h<}!~>FElyR+PxP0svs|A}^vKikR
z#>I0>S!0;4UyI{*IK1PzbOF;IshL(A_k5A?+#7WY^+>e^YX;p
z=xW)DcRQbIOIo!~v-$kABZfD^J?Ag~CjG!0N_ye{SWo@7I2vn7n(V-R~kb-3M9=yBBG68O-n8v2ber%t!Zu
Pq0ivy>gTe~DWM4f&Ev8V
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/icons/training.png b/venue_booking_management/static/description/assets/icons/training.png
new file mode 100644
index 0000000000000000000000000000000000000000..884ca024d71ca9127a5393134632ee92a61b07c4
GIT binary patch
literal 627
zcmV-(0*w8MP)Ji_yZ6G
zgCi9sC+SZOF3B?A-3o?c9a^B`5B^xi{atdGlsx
zfu5coC)9d9*W)+29w+CYx6HE5(7FIXTmz`}IuU&auvT&%3np6<$3JExZ8|Qv1`yF6
z{uK`ZBO-bN;C9iN>oGlP1At#74phASP()5l1Dq?6>v00$qR~ktYISg_G~Q>PN9l*Pyjm+=0joaxS5K;Rj(=Ddy)iyD^P2j9tz7$MRPPN-6X6Ic<
zC{O?T4(yVQo5t(DjmAqa0UQ-9Bj}SmO~ZA+0wO7a=S3S8?~`nFrw($EDaoG!IQ?TF
zt|2?U(I}QLQFZXyQiDB8SX$~v-8kVA@YGU+KFk?f>fJUiwWsHQ*BQQneoi*
zIdjgY7w2;~&-47A-}lQiGr#AVfgU}2^thi$w2V8gP8xe`iYA|^nQ(?HLC@=`7Uk<})
zLeWEQiU$yZ^@<(}ZFDXOrZ=@2KTECwL3TGYp{o5;VR!&Zenfb(Y~lunk>o@WhF_@a
z!ghmmZ=oQx3ZUrTMV_|@z*@URl_LrpnuMspmx02LayE1`&DBGH7
zIB$fJR!y{I;6E2v5gyA7yJ&>%uIrAsk}Qk0c3q+z1eRyI&Umi#qKMSynj`laxQDEG
z$>9=BWqAjWxCde)_&ZYtQ_uHfppNAb)C&iMgDG4Yayz-APl492qWnZ
z+2s4qPerk;Qd
zRTxgcUKCf(0QEW%Si8S$d^23v9Y;Bm$|Jh7D5kUlU|v?DQjz!5DcCSIHI;o!&C;0x
zy1x?jTA~w;DMb2S$s6C7*Wr6^*LJGyqHt8;>Dg;xBk)zTu^q3#d?0F4bwS{Xys;0Y
z0b}%PxF6sy{*u>yU@TD!7kg>wn=-H#OA+vz;H27KSYpwM_&kp%X2ny`^Yp0@|(y-wyRtOEu)
zkZMr2S!>sIk}ylBD^a-LQPoOlqjSJ;L-U^%BWoPTxn4GDGXiV(qm1VDmv{z1L}Jvu
zn`vGi$NH_RE@&E5g2~Cr0o8JExjDBIzCUyV^vhJEFcOB*@hFO_Ws){xtzG=^;Lve_
zQnzMHdm+ztcL8TpjlxKr=$THQiK!@hAyIz4N4%2V3+2+10THPgVGEG`aJ3>)#)7~e
zj-qI|S!^?IMA7OXjJ}pce+C{;_v(adyt>r~yRAcuwRTCOd=IQ`K0+rHj*6O7#^_|N
zR=ZNIR{yzq^QL#_j;<2XwFs{P&o>X}q=;_wJnsh7KQIfj8}c9GwohHEy0HGyN#1EU
zwtz&CPhEFtR77q!cFdS4^%iP|h}3+~+kwg^h2P66zKc$%k(WHr*_9O!^)V)55l)iG=bkroSVWSt8oK?9X|oC&>t|S94mi~JQz6J@L4Q+~({Wt+
nVe#UD%iYS|qeqV(_m6)8sc^)gW+q6200000NkvXXu0mjfv*t}m
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/icons/user.png b/venue_booking_management/static/description/assets/icons/user.png
new file mode 100644
index 0000000000000000000000000000000000000000..6ffb23d9f036834a32954f83bcfeca00790ee443
GIT binary patch
literal 988
zcmV<210(#2P)cAU
zg%n1_!UO~hi=Zajq!7VI@CUR>p`!Rx*a$&o3k`~bXb@RtC1&nyR*WQ@xp&s=+|MHZ
z%qBDA%sD6P7W>?P9RqF}kWv6&A-zOAepFK7
zn%moe*=$Tc@)I0INT*#4Q(tpt!c>;Iw0DH*Nr(MZj6)>|hd7}=D`NRPh
zXvGuSy!q^~M868;^;_^453rHAwcCa0XTYMJUi@XTxY>o~XCPvW7k?SF)lGsQoZDZQ
zP)=G_j{)g77n-L5oA={)hSIDH&Cfs)ee1>VM9F4cXnqDNc7ia=s32eb!iDI$gsOi4
zLvKEpLvw7Jbc*9=pw+k^81;$)fYoTt-RZ*gtblIt<9DK%bYb~+p`ZNt9gylSG|w)y
z^f7S3E5=1EFtYA*7owK|ZMZhYc+MxrUpVY~%?xuR%hGp%`<%$)6(zO(uDSg$G#5pD
z;K6<0FLeNz{gRNEPQuWq)1OJI*Gp=<<_=N;X(Gq;tOM~GAMp_MS;a)29s}JqVCIjM
z)b8=k8|EJXBpK4+2QuS_5P5?c0HB~e#B8sn^Ebj8h&ak%8{2szdo@hTfKXDKM!FmH
zW1nf?P!ziqZws=70=&$bXf^g?93W~xqS9P$i-O)xkbdQkw>_W_=3j
zHL&MZ+4h#Vli`J@6>FxCSeAZmS!$N0X3g}h<>^5?bLOg^ymRRmYovK~+eD>9insPXvj3+6Gb@v&hmf9xq1t2!EP|dQ8Gk{Nb(_%F
zfZ2)l~DhpZ1%x!dRjm
zO=;u!cb$X1D_}gv>Jbl6rqq7)(!s6*&8$S;I1dcnm#;8RsZyKh9Ozzw#ra8ApLl@n
zmu`~X4VYcGB63`?zPU_W_r4w%$5|}xSP?5ge^6@en%S9MO4}qmpBLGc
z+0FjUY-Um~^1{NNbKdiv_nq_2d}juhaAqNAYGGAPQ!by+?CdIx=|Q!EF@IoLzlew*
zHqN3N&|>jiL`D#~5!H3TiYBy2#kO~cjhT*5UTf&o)WxJyJAvB(gK7(+j!7;TT0A7Y
z1FE_V&)W$+3}iZx$0V2A6?Kio3}~@vBQg$L-C2d~l5BRYn{^UNAuSXJ5cvdH*O{zi
zV%uGb2Qb}EY>Q0hdBTeCB5i_*J%!Y9hB4-|&cua_ha`5unC%@oF^Pv{Qs|lv<4<)f
zUXLH|SJ!zQN!xgltnuI
zA*#cGrK&x(v3Ly_Q|`zSxko)OA2y^qPL@<^KO#f_bvjN$1}w`3PIqAS3hH^A
zP<=n*vz)54C3ehdJM0g+#tCDPU9e*A9n+;vw!rRxEBni5
z)-Ry*UUp(jA$8sBfPFx3TrnGPh-`L9MCxAWV%Y)pyc>XbNlyG}DwX>i#X}4RsyFRk
zVEIC0wZTI&IM}qlEXaTsi?^UUPIBUXU{q}T#a4t=w~?!r^mSlaglPrljv8T7?RP}(
z65D>Q9jU9ESY3A%*b`~K>IAlZtB6c%p|F}v<_biHP`wm58|VX$0ly;h9+vfvh)j11
z8_9sG3ZAzI7>zOy_>^pRvxuCEIIkl@7qaR%o>zf8Bd&3X>FJx35Dy`DKpiKGG2_6-
zi1EL|_pg8qr_|L-ofg+klMsFq4s0+U^c|Cvl?
zW76WGjRAGt5q$puurgxIe=ugV^!5FI`VHxE7Je0$oQCSazOkXL=HEJ@iy7)<8ccM
zi$(+ef&T;QIOo)jsy2Ql_>yw@-e%|Y#X_Tj-|AYa)EhMu>Nvyr{xgBmKbe`?Dr?r9
zOju)E)IDj`^R}b-mDwQojt1IgQcl=+(LyKais%c845mdJTs}XVW{eu|uie$6SB5Pd25|YHf6OMZB
Tt+q0v00000NkvXXu0mjf(ZE2?
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/misc/categories.png b/venue_booking_management/static/description/assets/misc/categories.png
new file mode 100644
index 0000000000000000000000000000000000000000..bedf1e0b189ab85a0800d2bf16f8907ae0f9b225
GIT binary patch
literal 1532
zcmZ{keKgZ+9Kav<&g)v_b;hk!gv>VTU}Ro~txRZnf7vk1>ts^0E+H?ytaOVCAAtJwqh7z>jo|))?0E=;^I0L}r!q@1EP`)*ij%*d2<}K;)isHiUuO(K8sRsh
z-Pis3{YvV^@OQmmNs&NQU=)KXv{AlE^1MknPJ@r9OQ`&Nj0POs^TNY&qa1m>k$^h9D8PU8DqJ&&5k(K{sH@
z>V&X6c_01q(%2SvYvLlvZnd>@@hKBUnCj~2ChNaWzfP;#&qp?|WQ{%Kh@)Q3?|Ni0
z=(zu3N5auKDLJw+J9M|2X2;&ImwC4Jf<@^EEM+385H^D2h1?zJ3CZs;Z5fLh)hk%5
z92LCeycC`uoi_YZVuu}XVj@bJ4%>5%sl%Pd2NlL!H`UvThTU6LJEXe^gn}6qo&D*^
zm^{E}_)%2m+Lg7mTKSD%vkXWsw?3^(z8CV2X1=Ih+$)FISZ`Q1W>#&(U;Pf3754az
zInOwxDLL*iQ+nNfq^Y+ffJ{jKv)@>P_0P3jxYZ!D3cFG&Z(+^{gBw2KslvLZ6k9pp
zcav^CwSZWm8XpNq>1*NKY-M4jgw>z=OfFMf(-%Ced^p_UI?=L>ul247laA={vAc40
z&MbkA
zQp*daY+?&xt97XHt%JJN_4~;wCD(^h2BpL1xp@X^wlU;+cG@IQw(58Lm3j6ZZ+dn9)
zlL|m@Tzt8QBUiJiT2oW)3o_`6!%f0b4fhFzCeI?t)lB#3@yOj}Mt_vsQ;lPFV#O6{
z#%pHl7`Xv@3G+~0gf4=9HDk7006U7#X5b?aGavvftd$iSYlF73p<;LAaeMIAHoLG`
zJQn*_0WSNWkeD3Bj6U{lp)90@1PP}9O<*$<8L4b~BJ10ZkX&2>Ie_fuMQn7To%{z~
C2BR$i
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/misc/check-box.png b/venue_booking_management/static/description/assets/misc/check-box.png
new file mode 100644
index 0000000000000000000000000000000000000000..42caf24b98062c6ea6bb4a636808964262e04e64
GIT binary patch
literal 1118
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
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/misc/cybrosys-logo.png b/venue_booking_management/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..cc3cc0ccfdaf8dff2e8ebcb010e24ad9e636b494
GIT binary patch
literal 4496
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
B&Kv*$
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/misc/logo.png b/venue_booking_management/static/description/assets/misc/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..478462d3e73d73cc9bae9fea8e7f8fac84fab049
GIT binary patch
literal 3452
zcmV-?4TJKDP)Px#PEbr#MIs&_+uGWlo1Co^85R-~_VxAb=;{Ce|FR(_
z1OfvvEiGJHTFS}EY-(z&tE;-XxsHsCJUKc_M@Xp&4t;xj#adq9qNMD=!Jz;F(0O|#
z0#`!-01V7YL_t(|+U%Qcd!sB9hJgTP5CM&8+W-GYAKnE-lXUy+{bB2Fk2X;OPp%n;
z0nzY#ymR11AVJo77$n$_D1Fa*M>=QEcK-jP$1)5n#rB6~d~zCl$I9(F{&nvkAO9ph
zZk0E!D<&x8lR&!%ENtM{+ogYeew|k&i7`3}nEb8BW1RD&1{tHmIf-94S7J!G8q0)l
zRHN1zA6qEuA3%ot?Rs>49viS+5yWG3O(t|03_>CvNUX^e{FjJM%zBl0-qk$M<78wi
zZ5HWPcTOzhYV;lwBO{HKib*w%lS@3c;(;M$IgB(HDrTLo3hhDRGoI2zNH$E9$0sa4
zX~X~t9~X!CrZarEBlE=*b$VV_qRc|=vlwdojLR{pT;cTaSQ@MH*}}k5BYz&|Wf8v7
zbPNC)mL%S~*kktRglTFe?)zC`jNM;!QRPWP0U3KrFF>b>IyzX-p->PKN7%L|+enzC
z|1529OcG;hDK0DZ74p#7EZ*0!UTxYv1pP#84Z@Wt_{U<>f2LZ=)?q5
zl%ho&oes98L+CH=#!~yA53k|7eR_29*K>TUZ7PDIN!qqI;KL}i*Hpe3l9A$!&wuT%
zge)I_4h7J`-BkPpR2&@O?Yu1*a-A~c8&oKimX1J!V6kCE4=~Gb-973n#{2c~rSpd!
zL|(wRLb$Q?J4t;J0-bp&jNB|tH+&Iwf5f&NSN@a3qR=jE>Y%|HWbYP8V#ET
zbAS@el6uqDNQ)7V!U4V$^^HSh=iBjdy*$OI{6mWtX`+Cd=XQNJ3?23PXLbkf;Tz__
zmKS1k1KoB^u*uvRDd6&4@{2muL2rjQk>QNown}VV10w2ovt>L3AjS#Bg%i{}N9Hi30;SF?@-*!@@{&F^1nh6ur6MUln
zf!UYjjW$MkkIyIgybP#lGSu!slhNb$+eB(B$OLMCB!i(jU?}jHc0`gxO72OmQ8CDprg)
zp-H}rFGU`#!B<-E9-oYNpH3;~O@0LQ5x&Vs#+wtZ)ki9w#^I=b$Pj~v7(hc31)$b4
zVl3)gB8nk+zzK_uo~ILh9p9Je;X-{OL-2KmFUA4lJew7R1#NNF-ag_}*iI|J&24d`
zg@jMJ$ebo?jqbncw1kY8O7enkv=n1!$a)VS30Cw3Uo@A+
zdKcNj7m^M3_lWt
zT--F{7kytE4msM?ce#e<-Y{G@URY>6)n>X+t4vZE}Jh3
zf<%XbOJ0~!31DNs3$168LwOTkQ3_#RGhUwNryIV@HI!B+4fgnwV$2hKioSr4SK-_i
z_pul_PVEFk^}=RXhuUPWMWkB!moPu9@>W)>ypSy_r%I>za?dQZG+sY);3sq5IMG^v
z0$-ZWlQwWkwx${}cPDNBd||k8lXa=G6xPZL&4znd8T
zLG|TY=EhJv2`d@!tyMOjw!uM9eVi_>m;rb3&9q)!%WbmuP{w(e=hZ{9h_4kL46o*B8IG0HQzrE5%pb0BN1+U>N
zll3Xh6!U@goHw;tZu$4ZZiYC%B#kMkMp~D;SHn~FmEOU30gQcogDKX=QwzBOA*&3_
zYwNrw%two+u(6FeReyl4)E8##d4VkYJ6;bAc>vXZeackg15`YEQI|kvj$FmdYe$H)
zXQFix+68B{a6A-5p&SY;&r*Xn8@|+qC-qU7W$tiF)o_51Jw6^EAMVHgk?7ekJ}kZ4
z!4{XV!#yt2=S%3kDy`Kt10}l^e~LPJK^(uPlUZ%hWaqbH&3zD0<;9^mCxe{8!=qck
zT_tB&JHLZgw&A0*Md6dBZppiyy{fkG==-cpsc|dl*x1fd2Pp%W)VsKyEcWM?cdlUn
z)$vw>vq_mun;ZPDh&q^etN6u{VjPU1J}iEnm(R;1PB(HDrtCJ`aRSA?7=_;=Os=jn
zzeB;WYJjaO-AcnSa!hPlVzKOD#77A$XQBJ?fP1HRu{4$F?H>~7yM7p%mU$Wf+SZ`F
z&1Dwz)CeWcI{4}~*SxwrD9t*|g2brLvd!I@Sj6|?#{%nVntznSH2mww89x8*<-w2E
z&=K%oe24hhJ>XNv_{cB59ljin__X{lzBlpR)49hpeDoLJ4qr;j+rv$9f7SOMzUybk
z=Q7JXe02WBcZP4XUY9Ot@qsk-*LY9x6`26HtG>cVLB+)OulkPg74pN^&jO$D^S1RgsPdmF5h#akuhRcVeSh|<7ys)wcJaAop)$SX
z-`Mg~ZM?vF;DSj$@Y{{S>#V*H50mdsBJtCO)%Wl<`peod6rP05D@^MObX~`9ShnpP
z{e66Lfp2P8q94Y0z1;4*wh#gIS=hWd1NW(UGJQt|e}HdL-^KUS#v9&(x$`Y=&+!OA
zpHJF+V$I{j-*AlbKf*WsJU$2TdjI<3*sLyf4)rFYvyr#66=~4Kw7b8!GR=E?5+paI
z)&iG$&}N5K5~82sV~P;jyRmucl55%CXj<28ow}B9;d3T@yFHZ4Vbga~1|59ss>bGW
zxez7h1|Jzmn41;s$t4Mk&
z(c;s-I$kd+_~3@OYHPPND|-l9?~9QGlmC(Wur)wqlq!WV3f><&8hmVaOWHL)9QLd<
zTcaC%DvU!=ZC6r`DQ+6h>(2^|Ypt$dv+Ta!@g6?$P2Y!mAr8g;z(v>E=;4bm(@gb1
z-QbHaJwVk>Od#h@*%>|poroV#K+XT!xw7R7K^O|O;7CN4v7Pq+f3y&NFd^P$#+QzA
zpRUT{@eo4hgyAgqy|?mewHlIr|J%ERz`pdHeJHXB4=3-uw!?)fqgPxb&)|#eeAjzZ
zW08Q<`|!ExX!81TdUfeoa6}}DTq7+Y3hZOHuZf{RQR*T=d|~iO-;6TUO8RBXdu;z5
z>2aAwr+$3~v;ID$-_KVwF|yktxpylF-MpOC=z(fZo60j}3P5UvF_bSFMQNGtXA%3P
z_&1`j*Yd1g1_rS&0D(RjyF`UCGmmGf7If|v@7oBzk90u4=w!*qlmv0FW8)G+=OXLS
z9o=A)QdGY&g|I|jtCKY^1mjF?lKEj7m|mdPrnzS}<^o(MTp)Xl`tBnYf#X>|S@0r4
z1^vKn9@f)Oq_P=@2lx67q!j~CuD@hm7p_8u7pd(~{nazu|j{eyO@#<+LdI)!=KE&Yc(6x*mMz$NTPb
e!*|2?|H>Z_>p))&1OWs90000l?
zWKy}bLYpqAEQ(GYLL;Gb(D`-#IL~wb=zX5=`+48*`+lDHkMH++vpn2fWTn-m0RWIC
z9Kam{srDn};o#iz@f{BYjOs*k0)QL&sI?$TaIX_`;1CG_67>Kel?4EQfvMC#0pJ80
z0A>OKz_uI!ROyu+p7!7YJlNF*2NE3LoOvlAr055ZFhBlyRK=FmTchU@1VS5t^%)rBQM9x$MwS_
zIXL28E0Jutq+4j;o%BRKk^5frRo5||pMzOotWxt7e`AC8&_%_GFa5wg4|BIgM?sHX}t!3?X6PLp4$UBYR*G4H&
zMWX78_VXrTlyZUMxJRvzIRlyY?ck;R``%gwo;iG&QYPkRhHGmxV&U|J?Y^rE3saY1
zG~M-*5Q7+U3lPx5rh}=!OE26Gy*noAY^$SS1z(p>+80-3tY&2q4P(pi=oiXZbv==y
zXNz%@hg?y+v5^*UM&psGr?#W?#oy?vVT!Nq;xo2R2u5H<#RL5qj7dO4ac@0F^!ngf
z&PKr*uOm|Ap(E|9ZzYaPLWnC%tr3r8Ip>Osz(!1gNeva3Mwcv72UG3Cw(^a2VSqj+
zi^Gw7-K8=_q3X|GY3d)JcoS`y2fuJ>cPr!LN#P&A2aWB|#WZhQ72J@Mi-2%_f2*#Y
zN>HTSP7l8m-qvJ*mJe2QXf)d?xw#rCH_dEO(a3Z^O8y(8pbhe*mx~XuA}pYj%F=G$6K(s;ly_O+L&wbDL`GV~pO~%~
zb-PH}OteCdwx9+4m(buZi#6EN`j}3e6EiuG#AL|cKo&hdUL+J{m?}#zsV1<9ax%nz
zu6S>pFkEA{-8Z>oTkYo&~Ct(r52;n35<_46W44SR|=yRZb>u`vCFL|O%y
zvHd+g6~vOiaEwWo&Gx1)vM`!ybp5j9d~a2FcK#-HcUG{IW9kF$JJMax#<6T@tbvx@
z$jqUkmA=~0F9J@|)1nwszzpy4gMpl7U8}JtE7}@?iFZV
zi%UJkou|bMX>_Z&mia{Gm1ER8qI{S!4wYU=N;1}ifE8wL*nd%HI-fmC8l2CMv-R~u
zvLDDM5}tj44JzEQ*b$bs1|hT<=)srdA^a+{tvf8CrMN979i}O4ehAemf%4cedr{mn
zGO;GJJ6*4d5f{8kimVX0tGi;q66V;a5r+ll#Tf1JQR?ITA_3c#FgN#Z&wSd7rsk1#
zz@rm(^=;c#Bj>sSsWVIc7rsY+Ik(`8u_yE!zp6Cn)=S25Z^cV3AX(?Dbv!U6gQlBt
zNC{m%*Y<{X>)BW2u_SzBEef}Y{Dt+>dGfohq3m#N@KS^KHSx!Gg!cfYpwHXRC9@B$
z4an`Ay4?85=X%4ZN>1Uk%ZcT8LJ)2eT3WnQW+Lo>r(h_TX1>tfcWOr&Dyk3?X=J36
zKdbY6a*BJb<@)(GsIql|R|Wyu3I4h}nRq`YC5Rbn8xj`^0>Gd#7-O`RF~;gJ+QJrX
zZHvb2LZfZbXvv51_x~qE|3ZlfOZd6KWD8G&g28_;Fe9Qv8O)$)`p=ymdGocP0}$|T
JxMpl%+CQV6u!vJ6b2LQ+{
z08k|5Hl8;V48(lSS)m0K*v8qWXaU4Y)|bKr#QoPfLFWB}1Vpy6w*bw8ppr_kLt{~G
zg3c!!^cfdyd+o&tj0-_-IqKL|DT#v*Tt(VR^p4|6prn%In@+FjDyl+Ba-xF~Di*o1
zx1guX{>c}`ffisl;XpCP%2;L>T(T8x-gJ;p+_7=b(m`FN+@eG_S^4z(swp$6AOG}(RGqLPX`>E|>w!|QLqhG3-1qHCT)(Q)h~`IeQAoQ|B(Fe(k=IQDJyJ-)3slV5N9QB$+<
zu4?=JxT>vkq}G80CL?V-ntJN=@c2yUm&LetGTO2T(#j^OseJ*DCoC?G5Q?B&pWvkm
zOYoE;DdcSqJUen1_q3ZEmgOznZDExTJ)V_&Rh)`E95GzJ4&G^q{F$r}|7E&o>+(ec
z64CLp)6^!M!3fo%=MZluDcd<1WlhCFjp4Bl4#q!@b*1&Xwa{w%sl7v6O-=ScLhV0;
z47)u%PF004qYRdY9GTLSaf>OCK~;YtPt6V3z-srmem%XD3*m0au-^8>2S>(GiYsD)
zpO-i4^Dmc2^2iIJL37{IB_*OpP`gM*{r#;A#$k<&;^~d;9KudWS?k0v&zimPlH?|J
z;knX-i?W2q)DsQlGC4*m`V4HUu4;M&+t4(GUC+0%aXetc60Y;`z{a8cy)H|gYm={j
z;l{W9T$SPNFVBC(rBJ#sc(pp-rX=*iu67=eLx|jWLQcNE{{sE{`T7@1Z)9bD8zf0(
zjj~_mT4SZ%t3rjZ)!{+2vp?nO{UgKK5#yNL>do)RTlsz2bB}HLdTS3{kkn^F2U7gp
zeaCg}X@l?hW~nDsTvy+m_*r&&mzT4%)(9!}{CMT15>^6t%fNQzma@FX@aRa|1l0z*qvGe-ASXo+H75MF{hm1@$B`s6e`mtp!u{1kM23&ZI?Q~aH
zN9c6V;=6*9!4dO;r|zZd$_WOZQV@&;NNnA|Q?IR?yF8?du)`6$l_(0$V9J1RKmcV*
zL8?eOFOMC}v{Q;TXr?v4(8$Y*4M*d5teg-LQu7*+Szj~fKj&n^&=_#Bn>!WDNFV)p
zKhqa@bvz1L=JLch`E!DQQi`PCX&pZg7N>Eq;&or4tJE-I1D?u=@o}LTUVUV9Z1x9K
zl-W1V4UY3U$sz7&6*jVHxCmv$zDA`E312662$dQQFCCh1p7TfJ34T$BgE}dRTB|LT-;YEoNK7ViA>jCqdQH
zKBcB6G4S@&$Lel2T2^;NazX~5d1xAxU`Q7a_L)UzJ8>v}+Nh30S#B5{KE{W0
z#*57t-V&9JQeIkH6N@r-4+)waqjM8>2F_r#b(0B(>Dx`rM_;dK`EU>?=Qro7lB?mj
zx7S_n@%OR(i)Ai{8Me<&+UvtElV8*v3lri0qIr4s
zu+es*p>Y-FhM%-{8Q?+x5Ci4jtTNiRdwT3D*)8iinnteUB|-VY!51KxoFN{psB7JI
zKNn5!NMef%;b~SiLeB68D2@4D9cerQV-6f;Tjg~E`
z?bzd}7Tt$!x1AqrR-WumDLffbZQ^=ao6`5U;WZ~2%Nx&p^xjAh*d9)kkNG}$%5A+VOdR^iev6_9*0mc5>s>W({cMY*pr&6E+Y%Cnm&&+Xg{{c=MKK%dy
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/misc/right-arrow.png b/venue_booking_management/static/description/assets/misc/right-arrow.png
new file mode 100644
index 0000000000000000000000000000000000000000..730984a0635c971661c6ccafc2fec83a2dee1632
GIT binary patch
literal 967
zcmeAS@N?(olHy`uVBq!ia0vp^4j?SR1|)y|Tss#?v7|ftIx;Y9?C1WI$O_~uBzpw;
zGB8xBF)%c=0965n8eT9klo~KFyh>nTu$sZZAYL$MSD+10f-TA0-33Sk!B6Mi^+1ZV
zz$3C4NGE{this?wKn8n>r>`sfGj=I%4b4g4AADwDU~2MoaSW-r_4bZ!MsT3Sv5((f
zj=RO|;#kCS=}}7XL8tDJKN>$74xU}fF>8v}j2jEzPD!~~B4D&6V6&)t;iMZW0#n(z
zM5Ri70$rZ#WgS)W=yTpFs=aW@vwOvPpZ>4?exP>p_lE`Vt_v~(ZHIzC=1bq*>z0|h
zL$rJ5x+8)Hu@2<{TBXXnCcMxU`O+qJVZYbXC(k_;P{=m
zoy94kwEF;O_c>0rrT6}e&e$-V*P8MWRF-G>B-@r{Pc42%%tE>x>1&hK=0!iJj_bFU=Io=^F7{M7dD=9_DxO9dJFZ;G)nC3NUIDloLooN-(2f)V94EWEpbZ~Z
zma#f64Z4`2v~cT7d6xV)e1{w_vmT7DkGCt5Ur=3pHLa;*5f
zc07h}=2!o+4~gCP*(>6B_RmB<{nj$JXpjQAjcb8g9~ebTzfTZ+G3jl;^Y7o%?q9u4
zqt|+Q)SXiP9{zRhqs#@~+wA#bT
zfk+J(R@O0J6qFZ;eYtTmFny?&xJHzuB$lLFB^RXvDF!10BO_e{b6q2|5JN*N69X#~
zLu~^CD+2>trOB!&8glbfGSez?Yw)Spo(a^T0k@$fGdH!kBr&%Dw;t&%E;pba22WQ%
Jmvv4FO#tlhdcptz
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/misc/star.png b/venue_booking_management/static/description/assets/misc/star.png
new file mode 100644
index 0000000000000000000000000000000000000000..2eb9ab29f722b495b4ab0ece3ad21e7b82394f3a
GIT binary patch
literal 1642
zcmZ{kX;cze6o8)_%zz{|jy5T_nC3DXlBrQ{D7dhQ;$CJZkW?-u8k#BY>10{CONm2j
zS(=t;$2D_paV=a*EprsoO3bpw(qZPuoHIYV=iK|<`|kP9`*+i+6h{PXBMbn5aCUNV
zmvO^CiG;{%wRoyg2F1g6WIF(A&cnY2D#_-}K~C;u0Aln2;3fm`RrbV{01$}=VD2CQ
z*n9vq!g&pDdu0pAA)=#$jI#J*-xx2$&*4tK5i%b9H>F2${jvtib|&MYvrtXNjmD2)
z)OG-rbe$dSJbcS0T_J9h7=ba)GD@Y)Z4%I{m53aoBzyMi|aQIi2zE_#N__+%0Hh141
zV)v5xuhe>IzQVca4VwMpL#TJ;||e=cM%{MUEOMwYghQ!59{b=zmX~BHv&X<2eM{7
zJT{LNN4icLnLvP!Ewik?>43_Xk-W6c`%|~N(~8YTkzAaqSziUr9cx*2f;C`S`~LK_)qAtD+(@_
z6v)gsESJaedKJd
zzMz`=g#GSPA~$k=udY|Ck-;UK7mXS^iJi>UHmr|=+dAkFfWO*vQtF3n``AUWOpI3?
zEF}hZww+i>%gM19tGjo*w3hd8vdUn+qao=`9HKDAWo2bhnFHc|DnA>=!aD;R&9l;G
zrwWa{zm=aejS%-0j~v5vqoQM1>P{-W3`>n-jAv(FHm_W(Z&AkG=F|jOSK(ic-5I2q
zp)4Nr(r>kMkR2V|4FR2FtE>9(`mG_+yRU7hY2+g&CU!hL`;9QIiA=8G?$yohE_xEw)9HD{!>f`iy!}WHSiub;MVCN)k+@T?13yj(M
z(wU){=%JR=)P$>47q{kzQ08MINlTgk`ZK3+cJZm))tuKtzop@eZ`mK)k_5)%yT-<7
z9>}Gn-m+S!GDG8%lC}JoekmU2LoW3`l}DF}z68$8dut|51%IB1IJv-dbq-=RL+?-g
z=H}ajB8^x1x2RWPoD5kp^ImzQ|4BH!2EX=(xl8!F0Zc!ydxizbxY`!bGQy8pW&lifskd_1(
zFYZ(53wrAabdp3|dUg+}e8=5%A|-3}=ymk=whX)8wAK1OEL4xj(R3@wdMT7sJC|V^
z|CRlxnxbWERUd83oF(h=9O)w4%Br^=^;tdl>2P8Jr}${b9}yZ0%ebU-feJ@{fnBBz
zfGa-!2#}ixv)1#}|2o?*cE3B2V4sr0LpUbrqX$H{3T>_F7mKZQOx9b)1)$F|JAE&Q
zk~~ENSjzTiKU4itCzMx8>g>~i?O)fwAEN9c)Q;mH+0mFo`w+J
z!*=e&?(uBBSn&Qnk5{r7?c-OxFaJUbhB{pk_WapsiU)LORr3U6oHn`k4GMwBkwiW3
zD*crDtFt&2UOG^Vq{eP>JGmCMJ#_qOG1MYg^(i+MY4Mb~cg
zU!IW~3F^Z|k&AaZ6EokH)C$R2*K0o-%WkMH8}GxW2eKL1pc4!k00xc07^5wWF%}+Z
zGc3j&YqrY>jmDzU^5^=x{wIWl(OJys9}5vrqGDu%{(nEPSs{!Fc3?>OkDYB@-lZ}J
NIO8b}Rk(wRe*?eI-Sq$f
literal 0
HcmV?d00001
diff --git a/venue_booking_management/static/description/assets/misc/support.png b/venue_booking_management/static/description/assets/misc/support.png
new file mode 100644
index 0000000000000000000000000000000000000000..4f18b8b8201e3a268ab1d8ceb8bf46d7a7a37dd9
GIT binary patch
literal 3892
zcmbtXXHe7M(*BXq5u`{_3{^sq7J?#0Aas!$dM7FY1cD${YNDth2nvXF5D-I`7F1dg
z5Fzv)x+sSF7b!~T=6-o+-aB(Y-I;yPb9Q#0-ScU8PMo=^0XypjRsaCl4R7dL&=~h`
zaMIIGm3Kj48qs@bnP>q(brRdrEe4t|a_5GH2>^saX?ZaKaPaT^WdI0*1HdX8094Zf
zfZs3s6Y4rG0J?2tpbG${&&3fmkHznXeE^MVSu|{VYY)&aOo4_bdQ3l=1i@lrh8U_0
z?IqiWx>{DDQyV$q=GJ5UT@x)h)|&$7FBje5&bJ`ESRyD~C@I9G+_B93gY1GLa=Jx_
zdpt+aU$!(bfbmlT
zHDUcJw$K1SYUS7LAP5#k&bN@J>XF`M>t3xnt6n1FU}n~2tYnqWgYT^;7d-F1cJ3Qj
z`JAn?aB@6rtrk2Dsn8RS4c8_^5?lA`wtX|LTogtSs(b4E3vFXf1qSEGUBfdK&XP=!h
zDUlJO*hVH}17fzR_@}~YSjPsY*jRu=m^k-7`jovli)m+l#X;pfSXkrY-cP|bNc~%e
zbTxjo@9D}b5Ihj(w~`$6rM#RzPkkB^HiJApAr+h0BpL5D%!3klJeoK$h%O(ZPxBK-
z5k;QmQA1*H!x|?KxFxzZ$aHhWjN}~Boko!b@{~;O3d#OH{!429+mmK%$q#4L2)b-;
zjj_+G^}uiXQ4r*-0(lBLD^iYOYaacnvSrw?ptWM<^0#UEO*3Q1{0(&J@V2dxS_1QR
zQ7vNmpOr2FxCh7JOnJqfTW`
z>gcpr`uekPfsU>QGiKtE`vP!kA{?vitx8u3i-GX?n^c2%UTGl3kXU}OCdA9&VpF_9
zU+Y0m8~LceARJxpyq~4?VB0ZY#_Mi9y{xQ@+8t)&i~{F3oI;|c}N!*
z4k2zaN7I~F9Bkl9XCCRu^>q2ZL@73B2l4!?-fm<_$m06Y@rWsWu#N7w0vi|ub5O~d3&kY
z_@!)~TE6jlVfD+t4DP)zWD6so{q7Rxw~aDQyq5GA%OId^-c(&wH!6MzLi$!t(j}*0
z$W&igW3Jxy!*ZW}AIm3Q9kH*v$tkot1;(5#`bH6_QIsu8@fkjOJ~h&0bWnZFelSX>{vGLbR02Ar83|A|Xi;GsN97q(lw(^_k2Xj4VH3_c2W(AwVLz-{;KLmGtDRpt*-|rnA
zE}%tk`d04clD-5l&@;uxTehA|-#d7{)R|wNK&UV|b~jFN>0Dj~dQ9h*J$JJ@JHyhJ
zHeeM?``fD_v-J$fQ012}hY3GmTI#Yzb1%Jo24wk&WpHw)?egUvSu#H-#kduYh=kzo
z{ut51R#am4>BX{Ck{gz70#E2YS=^Oz8=;wC&w9YhwaVMR1-RZvcjMgb)Krggf#`F5
z`WOA(wF8F1P-mbRj}_op`2L?*PEMesjoS3q)?|Oj&8)0iG(Nz+wB%()QzM-aCvyE~
zkzGL$@0WAofQz!lJ49Ff?tlcxILV4DOGLNTt`EF||}Yoyu8;O`H+
zmoIh0|2m{Z=#0>j43eOkny#h(XVx!iFaMoq
zsi^pzrw|=opdRj))v-OMf4J^{pEqa(_!=`&{xP%aG6BV^bt+St`o|-W)OjQe9xEJD(xi=RtkN89JsA2a&
zb{N}Maz2L`!Q^dEwJf;dKIzM+))0W1U4nb5Y_=t*y2247?Yk-8Q|{$ey2oGDa`{u?
z90)xMyA_eg3tO{Fa>fmRO*k*!(;~M=A6v{@XG5OZllwv{!%Rk!hs;UNCHTo#ylJ5ME5ck6sLwDC`hwd=~Sypr~^W#Gv7|HMBRv7fJNu9a^j6DbY)X>!-fdl96SfY%o)qF0M3{DS!=*
zB6-qY0B&xC`7^9yF;98I7wDGC^(%CRq-_yU=JO+-V+R+PkX-Me8L_dzL(#Z0r$&Lwxe
zO6Di4&F8j}k+%5wI9Yq`bKC`G*@W^@*9U@nNVJHk>Ou5_FqETFd3l1uPy%7j%6jFn
zX~wA_LovgUI^xjQ{uy`Go3ysNv#$YB0l|M>5T7q%5P;fI?3r^WU4RgT2DlHp%j&
zttA}HIngE9+v$dD<{nIL-`k(^7@0|Sbe(#?%NN;2
zO=_-BYE9P16N+LcyHgUbUir}RBA0ovRx&i0_`PDBh;1lp3CV1N^1KgtXO|d2MU#!F
zWI)^i^jdCZn*zcOTcAn6yPjUngBwm!-qL%I&h`+?41i0L)6vCvK6k|z>C5Lb_RH<3
zF!D~Y=}I9wxL-c@DST3OCFtA3di#$RuT{i#EIFbM>MZ-|H@rs2M
zC><9UZK*FnRB?a*sVM51ZJAv>&vMkk;@5Sp2X}breeDpSEyrL%kR=b%iDoz;(uVewiVfq$*i&XIvKnzIJm>pu#@w
zZYeM(2);AcwlApXJ=&*Yrbi3SRXx031@0q099vS5x-p@;C_B&nQym@rgbVoDGa1|K
zz!fEsnTFJKt`I|LMAKw`09ExU!VMGWh@We|cZ~HUAkIX7XU9x6R`h*(#)M