Skip to content

Commit fe48c0f

Browse files
committed
[ADD] bowling: add module for bowling
Odoo for Bowling Alleys This industry package includes all the essential apps and configurations for small to medium bowling alley businesses to manage bookings, food orders, and a beautiful websites in just a few clicks. Everything is ready for a quick start.  Basics Use the Website app to build a beautiful website for your customers Customers can book a session using the Appointments app's page on your website, and pay in just a few clicks Appointments can be displayed and managed in the Calendar app   Customers are hungry? Allow them to purchase drinks, snacks and a bite through the Point of Sale app You can also manage in-shop bookings using the Point of Sale app, and the Appointments app Task id - 4658034 closes #648 Signed-off-by: Vallaeys Valentin (vava) <[email protected]>
1 parent f5a44a9 commit fe48c0f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+2517
-0
lines changed

.tx/config

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,15 @@ resource_name = bookstore
9191
replace_edited_strings = false
9292
keep_translations = false
9393

94+
[o:odoo:p:odoo-s18-2:r:bowling]
95+
file_filter = bowling/i18n/<lang>.po
96+
source_file = bowling/i18n/bowling.pot
97+
type = PO
98+
minimum_perc = 0
99+
resource_name = bowling
100+
replace_edited_strings = false
101+
keep_translations = false
102+
94103
[o:odoo:p:odoo-s18-2:r:cake_shop]
95104
file_filter = cake_shop/i18n/<lang>.po
96105
source_file = cake_shop/i18n/cake_shop.pot

bowling/__manifest__.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
{
2+
'name': 'Bowling Alleys',
3+
'version': '1.0',
4+
'category': 'Hospitality',
5+
'depends': [
6+
'knowledge',
7+
'planning',
8+
'pos_enterprise',
9+
'pos_restaurant',
10+
'website_appointment',
11+
],
12+
'data': [
13+
'data/appointment_resource.xml',
14+
'data/pos_category.xml',
15+
'data/product_category.xml',
16+
'data/product_product.xml',
17+
'data/appointment_type.xml',
18+
'data/restaurant_floor.xml',
19+
'data/restaurant_table.xml',
20+
'data/knowledge_article.xml',
21+
'data/knowledge_article_favorite.xml',
22+
'data/mail_message.xml',
23+
'data/knowledge_tour.xml',
24+
],
25+
'demo': [
26+
'demo/website.xml',
27+
'demo/website_view.xml',
28+
'demo/website_theme_apply.xml',
29+
'demo/res_partner.xml',
30+
'demo/appointment_type.xml',
31+
'demo/calendar_event.xml',
32+
'demo/appointment_booking_line.xml',
33+
'demo/hr_department.xml',
34+
'demo/hr_employee.xml',
35+
'demo/ir_attachment_post.xml',
36+
'demo/pos_config.xml',
37+
'demo/pos_session.xml',
38+
'demo/pos_order.xml',
39+
'demo/pos_order_line.xml',
40+
],
41+
'license': 'OPL-1',
42+
'assets': {
43+
'web.assets_backend': [
44+
'bowling/static/src/js/my_tour.js',
45+
]
46+
},
47+
'author': 'Odoo S.A.',
48+
"cloc_exclude": [
49+
"data/knowledge_article.xml",
50+
"static/src/js/my_tour.js",
51+
"demo/website_view.xml",
52+
],
53+
'images': ['images/main.png'],
54+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<odoo noupdate="1">
3+
<record id="appointment_resource_14" model="appointment.resource">
4+
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
5+
<field name="name">Bowling Lane 14</field>
6+
<field name="capacity">6</field>
7+
</record>
8+
<record id="appointment_resource_13" model="appointment.resource">
9+
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
10+
<field name="name">Bowling Lane 13</field>
11+
<field name="capacity">6</field>
12+
<field name="source_resource_ids" eval="[(6, 0, [ref('appointment_resource_14')])]"/>
13+
</record>
14+
<record id="appointment_resource_12" model="appointment.resource">
15+
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
16+
<field name="name">Bowling Lane 12</field>
17+
<field name="capacity">6</field>
18+
<field name="source_resource_ids" eval="[(6, 0, [ref('appointment_resource_13'), ref('appointment_resource_14')])]"/>
19+
</record>
20+
<record id="appointment_resource_11" model="appointment.resource">
21+
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
22+
<field name="name">Bowling Lane 11</field>
23+
<field name="capacity">6</field>
24+
<field name="source_resource_ids" eval="[(6, 0, [ref('appointment_resource_12'), ref('appointment_resource_13'), ref('appointment_resource_14')])]"/>
25+
</record>
26+
<record id="appointment_resource_10" model="appointment.resource">
27+
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
28+
<field name="name">Bowling Lane 10</field>
29+
<field name="capacity">6</field>
30+
<field name="source_resource_ids" eval="[(6, 0, [ref('appointment_resource_11'), ref('appointment_resource_12'), ref('appointment_resource_13'), ref('appointment_resource_14')])]"/>
31+
</record>
32+
<record id="appointment_resource_9" model="appointment.resource">
33+
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
34+
<field name="name">Bowling Lane 9</field>
35+
<field name="capacity">6</field>
36+
<field name="source_resource_ids" eval="[(6, 0, [ref('appointment_resource_10'), ref('appointment_resource_11'), ref('appointment_resource_12'), ref('appointment_resource_13'), ref('appointment_resource_14')])]"/>
37+
</record>
38+
<record id="appointment_resource_8" model="appointment.resource">
39+
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
40+
<field name="name">Bowling Lane 8</field>
41+
<field name="capacity">6</field>
42+
<field name="source_resource_ids" eval="[(6, 0, [ref('appointment_resource_9'), ref('appointment_resource_10'), ref('appointment_resource_11'), ref('appointment_resource_12'), ref('appointment_resource_13'), ref('appointment_resource_14')])]"/>
43+
</record>
44+
<record id="appointment_resource_7" model="appointment.resource">
45+
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
46+
<field name="name">Bowling Lane 7</field>
47+
<field name="capacity">6</field>
48+
<field name="source_resource_ids" eval="[(6, 0, [ref('appointment_resource_8'), ref('appointment_resource_9'), ref('appointment_resource_10'), ref('appointment_resource_11'), ref('appointment_resource_12'), ref('appointment_resource_13'), ref('appointment_resource_14')])]"/>
49+
</record>
50+
<record id="appointment_resource_6" model="appointment.resource">
51+
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
52+
<field name="name">Bowling Lane 6</field>
53+
<field name="capacity">6</field>
54+
<field name="source_resource_ids" eval="[(6, 0, [ref('appointment_resource_7'), ref('appointment_resource_8'), ref('appointment_resource_9'), ref('appointment_resource_10'), ref('appointment_resource_11'), ref('appointment_resource_12'), ref('appointment_resource_13'), ref('appointment_resource_14')])]"/>
55+
</record>
56+
<record id="appointment_resource_5" model="appointment.resource">
57+
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
58+
<field name="name">Bowling Lane 5</field>
59+
<field name="capacity">6</field>
60+
<field name="source_resource_ids" eval="[(6, 0, [ref('appointment_resource_6'), ref('appointment_resource_7'), ref('appointment_resource_8'), ref('appointment_resource_9'), ref('appointment_resource_10'), ref('appointment_resource_11'), ref('appointment_resource_12'), ref('appointment_resource_13'), ref('appointment_resource_14')])]"/>
61+
</record>
62+
<record id="appointment_resource_4" model="appointment.resource">
63+
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
64+
<field name="name">Bowling Lane 4</field>
65+
<field name="capacity">6</field>
66+
<field name="source_resource_ids" eval="[(6, 0, [ref('appointment_resource_5'), ref('appointment_resource_6'), ref('appointment_resource_7'), ref('appointment_resource_8'), ref('appointment_resource_9'), ref('appointment_resource_10'), ref('appointment_resource_11'), ref('appointment_resource_12'), ref('appointment_resource_13'), ref('appointment_resource_14')])]"/>
67+
</record>
68+
<record id="appointment_resource_3" model="appointment.resource">
69+
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
70+
<field name="name">Bowling Lane 3</field>
71+
<field name="capacity">6</field>
72+
<field name="source_resource_ids" eval="[(6, 0, [ref('appointment_resource_4'), ref('appointment_resource_5'), ref('appointment_resource_6'), ref('appointment_resource_7'), ref('appointment_resource_8'), ref('appointment_resource_9'), ref('appointment_resource_10'), ref('appointment_resource_11'), ref('appointment_resource_12'), ref('appointment_resource_13'), ref('appointment_resource_14')])]"/>
73+
</record>
74+
<record id="appointment_resource_2" model="appointment.resource">
75+
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
76+
<field name="name">Bowling Lane 2</field>
77+
<field name="capacity">6</field>
78+
<field name="source_resource_ids" eval="[(6, 0, [ref('appointment_resource_3'), ref('appointment_resource_4'), ref('appointment_resource_5'), ref('appointment_resource_6'), ref('appointment_resource_7'), ref('appointment_resource_8'), ref('appointment_resource_9'), ref('appointment_resource_10'), ref('appointment_resource_11'), ref('appointment_resource_12'), ref('appointment_resource_13'), ref('appointment_resource_14')])]"/>
79+
</record>
80+
<record id="appointment_resource_1" model="appointment.resource">
81+
<field name="resource_calendar_id" ref="resource.resource_calendar_std"/>
82+
<field name="name">Bowling Lane 1</field>
83+
<field name="capacity">6</field>
84+
<field name="source_resource_ids" eval="[(6, 0, [ref('appointment_resource_2'), ref('appointment_resource_3'), ref('appointment_resource_4'), ref('appointment_resource_5'), ref('appointment_resource_6'), ref('appointment_resource_7'), ref('appointment_resource_8'), ref('appointment_resource_9'), ref('appointment_resource_10'), ref('appointment_resource_11'), ref('appointment_resource_12'), ref('appointment_resource_13'), ref('appointment_resource_14')])]"/>
85+
</record>
86+
</odoo>

bowling/data/appointment_type.xml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<odoo noupdate="1">
3+
<record id="appointment_type_1" model="appointment.type">
4+
<field name="name">Book a Bowling Game</field>
5+
<field name="appointment_tz" model="res.users" eval="obj().env.ref('base.user_admin').tz or 'Europe/Brussels'"/>
6+
<field name="location_id" ref="base.main_partner"/>
7+
<field name="allow_guests" eval="True"/>
8+
<field name="assign_method">time_auto_assign</field>
9+
<field name="category">recurring</field>
10+
<field name="avatars_display">hide</field>
11+
<field name="message_confirmation"><![CDATA[<div data-oe-version="1.1"><br></div><div><strong>Thank You for Booking!</strong></div><div><br></div><div>We appreciate your reservation at <strong>The Bowling Company</strong>! Get ready for a fun-filled bowling experience. If you have any questions, feel free to reach out. See you soon!</div>]]></field>
12+
<field name="message_intro"><![CDATA[<div data-oe-version="1.1">Get ready to roll! Reserve your lane now for an exciting bowling experience. Choose your preferred date and time, and let the fun begin!</div>]]></field>
13+
<field name="min_cancellation_hours">24.0</field>
14+
<field name="max_schedule_days">45</field>
15+
<field name="schedule_based_on">resources</field>
16+
<field name="staff_user_ids" eval="[(6, 0, [ref('base.user_admin')])]"/>
17+
<field name="resource_ids" eval="[(6, 0, [ref('appointment_resource_1'), ref('appointment_resource_2'), ref('appointment_resource_3'), ref('appointment_resource_4'), ref('appointment_resource_5'), ref('appointment_resource_6'), ref('appointment_resource_7'), ref('appointment_resource_8'), ref('appointment_resource_9'), ref('appointment_resource_10'), ref('appointment_resource_11'), ref('appointment_resource_12'), ref('appointment_resource_13'), ref('appointment_resource_14')])]"/>
18+
<field name="resource_manage_capacity" eval="True"/>
19+
<field name="has_payment_step" eval="True"/>
20+
<field name="product_id" ref="product_product_52"/>
21+
<field name="slot_ids" eval="[
22+
(0, 0, {'weekday': '1', 'start_hour': 9.0, 'end_hour': 12.0}),
23+
(0, 0, {'weekday': '1', 'start_hour': 14.0, 'end_hour': 17.0}),
24+
(0, 0, {'weekday': '2', 'start_hour': 9.0, 'end_hour': 12.0}),
25+
(0, 0, {'weekday': '2', 'start_hour': 14.0, 'end_hour': 17.0}),
26+
(0, 0, {'weekday': '3', 'start_hour': 9.0, 'end_hour': 12.0}),
27+
(0, 0, {'weekday': '3', 'start_hour': 14.0, 'end_hour': 17.0}),
28+
(0, 0, {'weekday': '4', 'start_hour': 9.0, 'end_hour': 12.0}),
29+
(0, 0, {'weekday': '4', 'start_hour': 14.0, 'end_hour': 17.0}),
30+
(0, 0, {'weekday': '5', 'start_hour': 9.0, 'end_hour': 12.0}),
31+
(0, 0, {'weekday': '5', 'start_hour': 14.0, 'end_hour': 17.0}),
32+
]"/>
33+
</record>
34+
</odoo>

bowling/data/knowledge_article.xml

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<odoo>
3+
<template id="welcome_article_body">
4+
<h1 class="oe-hint" data-oe-version="1.1">
5+
<span class="display-4-fs"><strong>Bowling Alleys</strong></span><br />
6+
</h1>
7+
<p>The Bowling Alleys industry is perfect for small to medium bowling alley businesses to manage bookings, food orders, and a beautiful website in just a few clicks. Everything is ready for a quick start. </p>
8+
<h2><span class="h1-fs">Basics</span></h2>
9+
<hr />
10+
<ul>
11+
<li>Use the <strong>Website app </strong>to build a beautiful website for your customers</li>
12+
<li>Customers can book a session using the <strong>Appointments app's page </strong>on your website, and pay in just a few clicks</li>
13+
<li>Appointments can be displayed and managed in the <strong>Calendar app </strong> </li>
14+
<li>Customers are hungry? Allow them to purchase drinks, snacks and a bite through the <strong>Point of Sale app</strong></li>
15+
<li>You can also manage in-shop bookings using the Point of Sale app, and the Appointments app</li>
16+
</ul>
17+
<div class="o_editor_banner user-select-none o_not_editable lh-1 d-flex align-items-center alert alert-warning pb-0 pt-3">
18+
<i class="o_editor_banner_icon mb-3 fst-normal">⚠️</i>
19+
<div class="w-100 px-3">
20+
<p>If you want to easily discover every features of this package, try downloading the Demo Data.</p>
21+
<p>You can still do it by upgrading your package in Apps.</p>
22+
<p>Just be careful, once demo data are uploaded, it cannot be easily deleted. But you can restart a fresh database on <a href="http://Odoo.com/trial">Odoo.com/trial</a></p>
23+
</div>
24+
</div>
25+
<h3>📆 Appointment management</h3>
26+
<p>Your website comes with an Appointment page through which customers can conveniently book timeslots in just a few clicks. </p>
27+
<ul>
28+
<li>Set up your bowling lanes by creating "Ressources" and link them together so appointments can book multiple lanes at once. </li>
29+
<li>Manage how many players can play concurrently per lane in the ressources settings. </li>
30+
<li>
31+
Create appointments for different booking durations, and link them to these same ressources<br />
32+
<br />
33+
</li>
34+
</ul>
35+
<h3>💰 Point of Sale</h3>
36+
<p>Customers hungry, or need to book a lane on the spot? Just use the Point of Sale app to manage food sales, and attribute them to the correct bowling lanes to keep an easy overview of what goes where. </p>
37+
<p>Customers can also rent bowling shoes - keep an eye on which lanes are supposed to return how many shoes at a glance using the Point of Sale order overviews. </p>
38+
<div class="o_editor_banner user-select-none o_not_editable lh-1 d-flex align-items-center alert alert-info pb-0 pt-3">
39+
<i class="o_editor_banner_icon mb-3 fst-normal">💡</i>
40+
<div class="w-100 px-3 o_editable">
41+
<p><strong>Self Ordering</strong></p>
42+
<p>Do you want to allow self-ordering from the bowling lanes? Activate the "Kiosk" setting in the Point of Sale configuration. <br /></p>
43+
</div>
44+
</div>
45+
<h3><a href="https://www.odoo.com/documentation/latest/applications/sales/point_of_sale.html" class="btn btn-outline-primary">🎓 Point of Sale</a></h3>
46+
<h3><br /></h3>
47+
<h3>🌐 Website</h3>
48+
<p>Create a beautiful website and make it yours by adding sections that are relevant to your offering as well as attractive landing pages. </p>
49+
<div class="o_editor_banner user-select-none o_not_editable lh-1 d-flex align-items-center alert alert-info pb-0 pt-3">
50+
<i class="o_editor_banner_icon mb-3 fst-normal">💡</i>
51+
<div class="w-100 px-3 o_editable">
52+
<p><strong>Contact page</strong></p>
53+
<p>You can customize the contact form to obtain more information about enquiries for things such as business events. </p>
54+
</div>
55+
</div>
56+
<p><a class="btn btn-outline-primary" href="https://www.odoo.com/documentation/latest/applications/websites/website.html">🎓 Website</a></p>
57+
<div class="o_editor_banner user-select-none o_not_editable lh-1 d-flex align-items-center alert alert-success pb-0 pt-3">
58+
<i class="o_editor_banner_icon mb-3 fst-normal">✅</i>
59+
<div class="w-100 px-3 o_editable">
60+
<h2><strong>Tips for success</strong></h2>
61+
<ul>
62+
<li>
63+
Go through <strong><a href="https://www.odoo.com/slides">Odoo's eLearning</a></strong> videos for great tips on how to use each different app
64+
</li>
65+
<li>Customize your appointment reminders to tailor them to your company's branding</li>
66+
<li>Don't neglect marketing! Odoo offers a comprehensive marketing suite for email marketing and social media accounts. </li>
67+
</ul>
68+
</div>
69+
</div>
70+
<h1>Do You Want to Go Further?</h1>
71+
<hr />
72+
<ul>
73+
<li>Activate <strong>Kiosk mode</strong> for self-ordering at the bowling lanes</li>
74+
<li>Use <strong>social marketing</strong> &amp; <strong>email marketing</strong> apps to keep your customer base up to date on your latest offerings</li>
75+
<li>Manage your employees using Odoo's HR suite : time-off, expenses, etc. </li>
76+
<li>Manage your accounting needs in Odoo's native <strong>Accounting app </strong>to save time and money. </li>
77+
</ul>
78+
<div class="o_editor_banner user-select-none o_not_editable lh-1 d-flex align-items-center alert alert-info pb-0 pt-3">
79+
<i class="o_editor_banner_icon mb-3 fst-normal">💡</i>
80+
<div class="w-100 px-3">
81+
<p>Would you like to discuss your Odoo setup with us or explore more features?</p>
82+
<p><a href="https://www.odoo.com/contactus" class="btn btn-primary">Reach us</a></p>
83+
</div>
84+
</div>
85+
<p><br /></p>
86+
</template>
87+
88+
<record id="welcome_article" model="knowledge.article">
89+
<field name="name">Bowling</field>
90+
<field name="is_locked" eval="True"/>
91+
<field name="body"><![CDATA[]]></field>
92+
<field name="icon">🎳</field>
93+
<field name="internal_permission">write</field>
94+
<field name="is_article_visible_by_everyone" eval="True"/>
95+
</record>
96+
</odoo>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<odoo noupdate="1">
3+
<record id="knowledge_favorite" model="knowledge.article.favorite">
4+
<field name="article_id" ref="welcome_article"/>
5+
<field name="user_id" ref="base.user_admin"/>
6+
</record>
7+
</odoo>

bowling/data/knowledge_tour.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<odoo noupdate="1">
3+
<record id="knowledge_tour" model="web_tour.tour">
4+
<field name="name">bowling_knowledge_tour</field>
5+
<field name="sequence">2</field>
6+
<field name="rainbow_man_message">Welcome! Happy exploring.</field>
7+
</record>
8+
</odoo>

bowling/data/mail_message.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<odoo noupdate="1">
3+
<record id="notification_knowledge" model="mail.message">
4+
<field name="model">discuss.channel</field>
5+
<field name="res_id" ref="mail.channel_all_employees"/>
6+
<field name="message_type">email</field>
7+
<field name="author_id" ref="base.partner_root"/>
8+
<field name="subtype_id" ref="mail.mt_comment"/>
9+
<field name="subject">🚀 Get started with Odoo For Bowling Alleys</field>
10+
<field name="body" model="knowledge.article" eval="
11+
'&lt;span>&#x1F44B; Hi! Follow this &lt;a href=\''
12+
+ obj().env.ref('bowling.welcome_article').article_url
13+
+ '\'>onboarding guide&lt;/a>. You can find it anytime in the Knowledge app.&lt;/span>'"/>
14+
</record>
15+
</odoo>

0 commit comments

Comments
 (0)