diff --git a/salon_management/README.rst b/salon_management/README.rst
index c20225e1a..5b0f1f0de 100644
--- a/salon_management/README.rst
+++ b/salon_management/README.rst
@@ -18,7 +18,8 @@ Credits
version 13: Vaishnavi B @cybrosys,Contact: odoo@cybrosys.com
version 14: Jibin James @cybrosys,Contact: odoo@cybrosys.com
version 15: Abhishek E T @cybrosys,Contact: odoo@cybrosys.com
- version 16: Sabeel B @cybrosys,Contact: odoo@cybrosys.com
+ version 16: Sabeel B @cybrosys, Contact: odoo@cybrosys.com
+ version 16: Robin K @cybrosys, Contact: odoo@cybrosys.com
Contacts
--------
* Mail Contact : odoo@cybrosys.com
diff --git a/salon_management/__manifest__.py b/salon_management/__manifest__.py
index d246353d2..bac3786d8 100644
--- a/salon_management/__manifest__.py
+++ b/salon_management/__manifest__.py
@@ -21,7 +21,7 @@
{
'name': 'Beauty Spa Management',
'summary': 'Beauty Parlour Management with Online Booking System',
- 'version': '16.0.1.0.0',
+ 'version': '16.0.2.0.1',
'author': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
'company': 'Cybrosys Techno Solutions',
@@ -29,25 +29,26 @@
'live_test_url':
'https://www.youtube.com/watch?v=TFmupz8MRm0&feature=youtu.be',
"category": "Industries",
- 'depends': ['account', 'base', 'base_setup', 'mail', 'website'],
+ 'depends': ['account', 'base', 'base_setup', 'mail', 'website', 'contacts'],
'data': [
- 'security/salon_management_groups.xml',
- 'security/ir.model.access.csv',
- 'data/data.xml',
- 'data/mail_template.xml',
- 'data/salon_chair_data.xml',
- 'data/salon_holiday_data.xml',
- 'data/salon_order_data.xml',
- 'data/salon_stages_data.xml',
- 'data/salon_working_hours_data.xml',
- 'views/res_config_settings_views.xml',
- 'views/res_partner_views.xml',
- 'views/salon_booking_templates.xml',
- 'views/salon_booking_views.xml',
- 'views/salon_order_views.xml',
- 'views/salon_management_views.xml',
- 'views/salon_management_menus.xml',
- ],
+ 'security/salon_management_groups.xml',
+ 'security/ir.model.access.csv',
+ 'data/data.xml',
+ 'data/mail_template.xml',
+ 'data/salon_chair_data.xml',
+ 'data/salon_holiday_data.xml',
+ 'data/salon_order_data.xml',
+ 'data/salon_stages_data.xml',
+ 'data/salon_working_hours_data.xml',
+ 'views/res_config_settings_views.xml',
+ 'views/res_partner_views.xml',
+ 'views/salon_booking_templates.xml',
+ 'views/salon_booking_views.xml',
+ 'views/salon_order_views.xml',
+ 'views/salon_chairs.xml',
+ 'views/salon_management_views.xml',
+ 'views/salon_management_menus.xml',
+ ],
'images': ['static/description/banner.png'],
'license': 'AGPL-3',
'installable': True,
@@ -55,7 +56,9 @@
'assets': {
'web.assets_backend': [
'salon_management/static/src/css/salon_dashboard.css',
- 'salon_management/static/src/less/salon_dashboard.less',
+ 'salon_management/static/src/xml/salon_dashboard.xml',
+ 'salon_management/static/src/js/salon_dashboard.js',
+ # 'salon_management/static/src/js/salon_chair.js',
],
'web.assets_frontend': [
'salon_management/static/src/css/salon_website.css',
diff --git a/salon_management/controllers/main.py b/salon_management/controllers/main.py
index 29c50609d..f83550d7f 100644
--- a/salon_management/controllers/main.py
+++ b/salon_management/controllers/main.py
@@ -43,12 +43,12 @@ class SalonBookingWeb(http.Controller):
j = 0
service_list = []
while j < (int(kwargs['number'])):
- item = "list_service["+str(j)+"][i]"
+ item = "list_service[" + str(j) + "][i]"
service_list.append(int(kwargs[item]))
j += 1
salon_service_obj = request.env['salon.service'].search([
('id', 'in', service_list)])
- dates_time = date+" "+time+":00"
+ dates_time = date + " " + time + ":00"
date_and_time = pytz.timezone(request.env.user.tz).localize(
datetime.strptime(dates_time, '%m/%d/%Y %H:%M:%S')).astimezone(
pytz.UTC).replace(tzinfo=None)
@@ -86,10 +86,10 @@ class SalonBookingWeb(http.Controller):
'number': order.id,
'start_time_only': fields.Datetime.to_string(pytz.UTC.localize(
order.start_time).astimezone(pytz.timezone(
- request.env.user.tz)).replace(tzinfo=None))[11:16],
+ request.env.user.tz)).replace(tzinfo=None))[11:16],
'end_time_only': fields.Datetime.to_string(pytz.UTC.localize(
order.end_time).astimezone(pytz.timezone(
- request.env.user.tz)).replace(tzinfo=None))[11:16],
+ request.env.user.tz)).replace(tzinfo=None))[11:16],
}
if order.chair_id.id not in order_details:
order_details[order.chair_id.id] = {
@@ -112,7 +112,6 @@ class SalonBookingWeb(http.Controller):
salon_working_hours_obj = request.env['salon.working.hours'].search([])
salon_holiday_obj = request.env['salon.holiday'].search(
[('holiday', '=', True)])
- # date_check = fields.Date.context_today(request)
date_check = datetime.today().date()
date_start = pytz.timezone(request.env.user.tz).localize(
datetime.combine(date_check, time(0, 0, 0))).astimezone(
@@ -135,3 +134,30 @@ class SalonBookingWeb(http.Controller):
'holiday': salon_holiday_obj,
'working_time': salon_working_hours_obj,
})
+
+
+class SalonOrders(http.Controller):
+ @http.route(['/salon/chairs'], type="json", auth="public")
+ def elearning_snippet(self, products_per_slide=3):
+ print('controller')
+ chairs = []
+ salon_chairs = request.env['salon.chair'].sudo().search([])
+ number_of_orders = {}
+
+ for i in salon_chairs:
+ number_of_orders.update({i.id: len(request.env['salon.order'].search(
+ [("chair_id", "=", i.id),
+ ("stage_id", "in", [2, 3])]))})
+ # print(i.id)
+ chairs.append(
+ {'name': i.name, 'id': i.id, 'orders': number_of_orders[i.id]})
+ print(number_of_orders, 'main')
+ values = {
+ 's_chairs': chairs
+ }
+ print(values)
+
+ response = http.Response(
+ template='salon_management.dashboard_salon_chairs', qcontext=values)
+ print(response.render())
+ return response.render()
diff --git a/salon_management/doc/RELEASE_NOTES.md b/salon_management/doc/RELEASE_NOTES.md
index 8209be8bb..db1fd4af4 100644
--- a/salon_management/doc/RELEASE_NOTES.md
+++ b/salon_management/doc/RELEASE_NOTES.md
@@ -5,3 +5,9 @@
#### ADD
- Initial commit for Beauty Spa Management Module
+
+#### 01.10.2022
+#### Version 16.0.2.0.0
+#### UPDT
+
+- Dashboard Updated
diff --git a/salon_management/models/salon_booking.py b/salon_management/models/salon_booking.py
index 2df14c38d..2380737c6 100644
--- a/salon_management/models/salon_booking.py
+++ b/salon_management/models/salon_booking.py
@@ -20,6 +20,7 @@
# along with this program. If not, see .
#
###################################################################################
+import json
import pytz
from datetime import datetime, time
@@ -95,7 +96,8 @@ class SalonBooking(models.Model):
self.env['salon.order.line'].create(service_data)
template = self.env.ref(
'salon_management.mail_template_salon_approved')
- self.env['mail.template'].browse(template.id).send_mail(self.id, force_send=True)
+ self.env['mail.template'].browse(template.id).send_mail(self.id,
+ force_send=True)
self.state = "approved"
def action_reject_booking(self):
@@ -104,5 +106,27 @@ class SalonBooking(models.Model):
"""
template = self.env.ref(
'salon_management.mail_template_salon_rejected')
- self.env['mail.template'].browse(template.id).send_mail(self.id, force_send=True)
+ self.env['mail.template'].browse(template.id).send_mail(self.id,
+ force_send=True)
self.state = "rejected"
+
+ @api.model
+ def get_booking_count(self):
+ salon_bookings = self.env['salon.booking'].search_count(
+ [('state', '=', 'approved')])
+ recent_works = self.env['salon.order'].search_count(
+ [('stage_id', 'in', [3, 4])])
+ salon_orders = self.env['salon.order'].search_count([])
+ salon_clients = self.env['res.partner'].search_count(
+ [('partner_salon', '=', True)])
+
+ salon_chairs = self.env['salon.chair'].search([])
+ values = {
+ 'bookings': salon_bookings,
+ 'sales': recent_works,
+ 'orders': salon_orders,
+ 'clients': salon_clients,
+ 'chairs': salon_chairs
+ }
+ # print(values)
+ return values
diff --git a/salon_management/static/description/assets/screenshots/hero.gif b/salon_management/static/description/assets/screenshots/hero.gif
index 42340fa81..f1024312b 100644
Binary files a/salon_management/static/description/assets/screenshots/hero.gif and b/salon_management/static/description/assets/screenshots/hero.gif differ
diff --git a/salon_management/static/description/assets/screenshots/screenshot-1.png b/salon_management/static/description/assets/screenshots/screenshot-1.png
index 9f6e88192..9afb19d9c 100644
Binary files a/salon_management/static/description/assets/screenshots/screenshot-1.png and b/salon_management/static/description/assets/screenshots/screenshot-1.png differ
diff --git a/salon_management/static/src/css/images/chair.png b/salon_management/static/src/css/images/chair.png
new file mode 100644
index 000000000..8e2eed1b7
Binary files /dev/null and b/salon_management/static/src/css/images/chair.png differ
diff --git a/salon_management/static/src/css/salon_dashboard.css b/salon_management/static/src/css/salon_dashboard.css
index dc06a0afa..e49d975ed 100644
--- a/salon_management/static/src/css/salon_dashboard.css
+++ b/salon_management/static/src/css/salon_dashboard.css
@@ -1,58 +1,254 @@
-.style_chair {
- text-align: center;
- color: white;
- font-size: 17px;
- background: #0f101000;
- padding: 0 !important;
- text-transform: uppercase;
- font-weight: 600;
+.o_action_manager {
+ overflow: auto !important;
+}
+
+.salon_dashboards {
+ padding-top: 10px;
+ background-color: #f8faff !important;
+}
+
+.salon-card h4 {
+ font-size: 1.1rem;
+}
+
+.breadcrumbs {
+ margin-top: 0;
+}
+
+/* Widget One
+---------------------------*/
+.stat-content {
+ display: inline-block;
+ width: 66%;
+}
+
+.stat-icon {
+ display: inline-block;
+}
+
+.stat-widget-one .stat-icon {
+ vertical-align: top;
+ margin: auto;
+ width: 100%;
+ color: #01c490;
+}
+
+.stat-widget-one .stat-icon i {
+ font-size: 30px;
+ font-weight: 900;
+ display: inline-block;
+ color: #01c490;
+}
+
+.stat-widget-one .stat-text {
+ font-size: 14px;
+ color: #868e96;
+ font-weight: bold;
}
-.style_chair_booking{
+
+.stat-widget-one .stat-digit {
+ font-size: 24px;
+ color: #02448b;
+}
+
+.stat-count {
+ font-size: 20px;
text-align: center;
- color: #000000;
+ color: #00438b;
+}
+
+.stat-title {
font-size: 17px;
- background: #0f101000;
- padding: 0 !important;
- text-transform: uppercase;
- font-weight: 600;
-}
-.style_collection {
- color: black !important;
- font-size: 12px;
text-align: center;
- background: #29292900 !important;
- padding: 0 !important;
+ color: #00438b;
}
-.style_collection_booking{
- color: black !important;
- font-size: 12px;
- text-align: center;
- background: #29292900 !important;
- padding: 0 !important;
+
+/*=====================Dashboard===========================*/
+
+.salon_dashboards {
+ background-color: #f8faff !important;
+ padding: 0px !important;
+}
+
+.container-fluid.o_hr_dashboard {
+ padding: 0px !important;
+}
+
+.salon-card {
+ padding: 0px;
+ margin-bottom: 1.5rem;
+ border-radius: 0px;
+ box-shadow: none;
+ background: none;
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
+ will-change: transform, box-shadow;
}
-.no_of_people {
+
+.salon-card:hover {
+ transform: translateY(-2px) translateZ(0) !important;
+ box-shadow: 0 10px 10px 0 rgba(62, 57, 107, 0.12), 0 0 0 transparent !important;
+}
+
+.salon {
+ margin-top: 3%;
+ margin-bottom: 2%;
+}
+
+.salon .stat-icon {
+ border-radius: 15px 0 0 15px;
+ width: 30%;
+ height: 100px;
text-align: center;
- font-size: 41px;
- padding: 0 !important;
- background: #4f535600;
- color: white;
- margin-top: 9px;
- margin-bottom: 30px;
+ padding-top: 10%;
+ background: #314384ff;
+ color: #fff;
}
-span.o_primary.style_collection {
- color: #fff !important;
+
+.salon .salon-card {
+ border-radius: 15px;
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
+ will-change: transform, box-shadow;
+ box-shadow: 0 10px 40px 0 rgba(62, 57, 107, 0.07),
+ 0 2px 9px 0 rgba(62, 57, 107, 0.06);
}
-.no_of_people_booking{
+
+.stat-widget-one .stat-text {
+ font-size: 14px;
+ color: #314384ff;
+ margin: 2rem 0rem 1rem 0rem;
text-align: center;
- font-size: 41px;
- padding: 0 !important;
- background: #4f535600;
- color: #000000;
- margin-top: 9px;
- margin-bottom: 30px;
-}
-.button_background{
- background-color: Transparent;
- border: transparent;
- cursor: pointer;
+}
+
+.stat-widget-one .stat-digit {
+ font-size: 20px;
+ font-weight: bolder;
+ padding: 1px 10px 2px 0;
+ color: #8061a9;
+ text-shadow: 0px 0px 20px #000000;
+ text-align: center;
+}
+
+.stat-widget-one .stat-icon i {
+ /*border-radius: 15px 0 0 15px;*/
+ font-size: 25px;
+ font-weight: 900;
+ display: inline-block;
+ color: #fff;
+}
+
+.stat-widget-one {
+ border-radius: 15px;
+ background-color: white;
+ text-align: inherit !important;
+}
+
+.stat-widget-one {
+ width: 100%;
+}
+
+.salon_sales .stat-icon {
+ background: #964ec2 !important;
+}
+
+.salon_clients .stat-icon {
+ background: #813de6 !important;
+}
+
+.salon_orders .stat-icon {
+ background: #6f23a9 !important;
+}
+
+.salon_sales .stat-widget-one .stat-text {
+ color: #964ec2;
+}
+
+.salon_clients .stat-widget-one .stat-text {
+ color: #813de6;
+}
+
+.salon_orders .stat-widget-one .stat-text {
+ color: #6f23a9;
+}
+
+.salon-card-body {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+/*Chair*/
+img {
+ padding: 5px;
+}
+
+article {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(17em, 1fr));
+ grid-gap: 1em;
+ height: fit-content;
+ margin-left: 1vw;
+}
+
+@media (max-width: 575.98px) {
+ .salon_chair {
+ width: 100%;
+ position: relative;
+ }
+}
+
+.chair_name {
+ opacity: 100%;
+ position: absolute;
+ padding: 26px 26px 3px 73px;
+ color: #ffffff;
+ font-weight: bolder;
+ -webkit-filter: drop-shadow(0px 4px 5px #000000);
+ filter: drop-shadow(0px 4px 5px #000000);
+}
+
+.chair_orders {
+ opacity: 100%;
+ position: absolute;
+ padding: 62px 0px 2px 94px;
+ color: #ffffff;
+ font-weight: bolder;
+ -webkit-filter: drop-shadow(0px 4px 5px #000000);
+ filter: drop-shadow(0px 4px 5px #000000);
+}
+
+.chair_setting {
+ opacity: 0.0;
+ -webkit-transition: all 500ms ease-in-out;
+ -moz-transition: all 500ms ease-in-out;
+ -ms-transition: all 500ms ease-in-out;
+ -o-transition: all 500ms ease-in-out;
+ transition: all 500ms ease-in-out;
+}
+
+.salon_chair:hover .chair_setting {
+ opacity: 1.0;
+ padding: 16px 0 0px 165px;
+ color: #4d4d4d;
+ font-size: medium;
+ -webkit-filter: drop-shadow(0px 4px 5px #da9bff);
+ filter: drop-shadow(0px 2px 6px #d999ff);
+}
+
+.salon_chair {
+ opacity: 85%;
+ background-image: url("images/chair.png");
+ background-repeat: no-repeat;
+ background-size: contain;
+ width: auto;
+ height: 100vw;
+}
+
+.salon_chair {
+ height: 200px;
+ width: 100%;
+}
+
+.salon_chair:hover {
+ -webkit-filter: drop-shadow(0px 4px 4px #3e3e3e);
+ filter: drop-shadow(0px 4px 4px #373737);
}
diff --git a/salon_management/static/src/css/salon_website.css b/salon_management/static/src/css/salon_website.css
index 548b7e72a..012cb2b90 100644
--- a/salon_management/static/src/css/salon_website.css
+++ b/salon_management/static/src/css/salon_website.css
@@ -1,46 +1,46 @@
-.chair_box_website{
- text-align: center;
- border: 1px solid #666;
- padding: 10px 15px;
- box-shadow: 7px 8px 5px #888888;
- background-color: #337ab7;
- color: #000000;
+.chair_box_website {
+ text-align: center;
+ border: 1px solid #666;
+ padding: 10px 15px;
+ box-shadow: 7px 8px 5px #888888;
+ background-color: #337ab7;
+ color: #000000;
}
-.field_booking_chair{
- font-weight: bold;
+.field_booking_chair {
+ font-weight: bold;
}
-input[type="text"]{
- width: 100%;
+input[type="text"] {
+ width: 100%;
}
-input[type="email"]{
- width: 100%;
+input[type="email"] {
+ width: 100%;
}
-input[type=checkbox] + label {
+input[type="checkbox"] + label {
color: #7c7bad;
font-style: italic;
}
-input[type=checkbox]:checked + label {
+input[type="checkbox"]:checked + label {
color: #00a09d;
font-style: normal;
}
-select{
- width: 100%;
-}
-.selection_service{
- height: 6em;
- overflow: auto;
- border: 1px solid #b3b3b3;
- border-radius: 5px;
- background-color: #fcfcfc;
-}
-#booking_chair_details{
- height: 200px!important;
- text-align: center;
- border: 1px solid #666;
- padding: 15px 0px;
- box-shadow: 7px 8px 5px #888888;
- background-color:#7c7bad;
- border-radius:58px;
- color:#fff;
- margin-bottom: 10px;
+select {
+ width: 100%;
+}
+.selection_service {
+ height: 6em;
+ overflow: auto;
+ border: 1px solid #b3b3b3;
+ border-radius: 5px;
+ background-color: #fcfcfc;
+}
+#booking_chair_details {
+ height: 200px !important;
+ text-align: center;
+ border: 1px solid #666;
+ padding: 15px 0px;
+ box-shadow: 7px 8px 5px #888888;
+ background-color: #7c7bad;
+ border-radius: 58px;
+ color: #fff;
+ margin-bottom: 10px;
}
diff --git a/salon_management/static/src/js/salon_dashboard.js b/salon_management/static/src/js/salon_dashboard.js
new file mode 100644
index 000000000..46d01ff63
--- /dev/null
+++ b/salon_management/static/src/js/salon_dashboard.js
@@ -0,0 +1,185 @@
+odoo.define('salon_management.SalonDashboard', function (require) {
+ "use strict";
+ const AbstractAction = require('web.AbstractAction');
+ const core = require('web.core');
+ const rpc = require("web.rpc");
+ var ajax = require("web.ajax");
+ const _t = core._t;
+ const QWeb = core.qweb;
+ const SalonDashboard = AbstractAction.extend({
+ template: 'SalonDashboardMain',
+ events: {
+ 'click .salon_spa_bookings': 'bookings',
+ 'click .salon_spa_sales': 'sales',
+ 'click .salon_spa_clients': 'clients',
+ 'click .salon_spa_orders': 'orders',
+ 'click .salon_chair': 'chairs_click',
+ 'click .chair_setting': 'settings_click'
+ },
+ init: function (parent, context) {
+ this._super(parent, context);
+ this.dashboards_templates = ['SalonSpaDashBoard'];
+
+ },
+
+ start: function () {
+
+ var self = this;
+ this.set("title", 'Dashboard');
+ return this._super().then(function () {
+ self.render_dashboards();
+ self.$el.parent().addClass('oe_background_grey');
+ });
+
+ },
+ render_dashboards: function () {
+ var self = this;
+ var templates = ['SalonSpaDashBoard'];
+ _.each(templates, function (template) {
+ self.$('.spa_salon_dashboard').append(QWeb.render(template, {widget: self}));
+ });
+ rpc.query({
+ model: "salon.booking",
+ method: "get_booking_count",
+ args: [],
+ })
+ .then(function (result) {
+ $("#bookings_count").append("" + result.bookings + "");
+ $("#recent_count").append("" + result.sales + "");
+ $("#orders_count").append("" + result.orders + "");
+ $("#clients_count").append("" + result.clients + "");
+ // console.log("pass to controller");
+ ajax.jsonRpc("/salon/chairs", "call", {}).then(function (values) {
+ $('#chairs_dashboard_view').append(values);
+ });
+ });
+ },
+ on_reverse_breadcrumb: function () {
+ var self = this;
+ self.$('.spa_salon_dashboard').empty();
+ self.render_dashboards();
+ },
+
+ //events
+ chairs_click: function (ev) {
+ var self = this;
+ ev.stopPropagation();
+ ev.preventDefault();
+ var active_id = event.target.id
+ var options = {
+ on_reverse_breadcrumb: this.on_reverse_breadcrumb,
+ };
+ this.do_action({
+ name: _t("Chair Orders"),
+ type: 'ir.actions.act_window',
+ res_model: 'salon.order',
+ view_mode: 'kanban,tree,form',
+ views: [[false, 'kanban'], [false, 'list'], [false, 'form']],
+ domain: [['chair_id', '=', parseInt(active_id)]],
+ context: {
+ default_chair_id: parseInt(active_id)
+ },
+ target: 'current'
+ }, options);
+ },
+
+ settings_click: function (ev) {
+ var self = this;
+ ev.stopPropagation();
+ ev.preventDefault();
+ var active_id = event.target.id
+ console.log(active_id,"acname")
+ var options = {
+ on_reverse_breadcrumb: this.on_reverse_breadcrumb,
+ };
+ this.do_action({
+ name: _t("Chair Orders"),
+ type: 'ir.actions.act_window',
+ res_model: 'salon.chair',
+ view_mode: 'form',
+ views: [[false, 'form']],
+ context: {
+ default_name: active_id
+ },
+ target: 'current'
+ }, options);
+ },
+
+
+ bookings: function (ev) {
+ var self = this;
+ ev.stopPropagation();
+ ev.preventDefault();
+ var options = {
+ on_reverse_breadcrumb: this.on_reverse_breadcrumb,
+ };
+
+ this.do_action({
+ name: _t("Salon Bookings"),
+ type: 'ir.actions.act_window',
+ res_model: 'salon.booking',
+ view_mode: 'tree,form',
+ views: [[false, 'list'], [false, 'form']],
+ domain: [['state', '=', 'approved']],
+ target: 'current'
+ }, options);
+ },
+
+ sales: function (ev) {
+ var self = this;
+ ev.stopPropagation();
+ ev.preventDefault();
+
+ var options = {
+ on_reverse_breadcrumb: this.on_reverse_breadcrumb,
+ };
+
+ this.do_action({
+ name: _t("Recent Works"),
+ type: 'ir.actions.act_window',
+ res_model: 'salon.order',
+ view_mode: 'tree,form',
+ views: [[false, 'list'], [false, 'form']],
+ domain: [['stage_id', 'in', [3, 4]]],
+ target: 'current'
+ }, options);
+ },
+ orders: function (ev) {
+ var self = this;
+ ev.stopPropagation();
+ ev.preventDefault();
+
+ var options = {
+ on_reverse_breadcrumb: this.on_reverse_breadcrumb,
+ };
+
+ this.do_action({
+ name: _t("Salon Orders"),
+ type: 'ir.actions.act_window',
+ res_model: 'salon.order',
+ view_mode: 'tree,form,calendar',
+ views: [[false, 'list'], [false, 'form']],
+ target: 'current'
+ }, options);
+ },
+ clients: function (e) {
+ var self = this;
+ e.stopPropagation();
+ e.preventDefault();
+ var options = {
+ on_reverse_breadcrumb: self.on_reverse_breadcrumb,
+ };
+ self.do_action({
+ name: _t("Clients"),
+ type: 'ir.actions.act_window',
+ res_model: 'res.partner',
+ view_mode: 'tree,form',
+ views: [[false, 'list'], [false, 'form']],
+ domain: [['partner_salon', '=', true]],
+ target: 'current'
+ }, options);
+ },
+ });
+ core.action_registry.add('salon_dashboard', SalonDashboard);
+ return SalonDashboard;
+});
diff --git a/salon_management/static/src/js/website_salon_booking.js b/salon_management/static/src/js/website_salon_booking.js
old mode 100644
new mode 100755
index 0bb272279..cfad6369f
--- a/salon_management/static/src/js/website_salon_booking.js
+++ b/salon_management/static/src/js/website_salon_booking.js
@@ -7,18 +7,18 @@ odoo.define('salon_management.website_salon_booking', function (require) {
var rpc = require('web.rpc');
var QWeb = core.qweb;
- $(document).on('click',"#submit_button", function() {
+ $(document).on('click', "#submit_button", function () {
var name = $("#name").val();
var date = $("#date").val();
var time = $("#time").val();
var phone = $("#phone").val();
var email = $("#email").val();
var service = $('.check_box_salon:checkbox:checked');
- var chair = $( "#chair" ).val();
+ var chair = $("#chair").val();
var list_service = [];
var number = service.length;
- for (var i=0; i<(service.length); i++) {
- var k = {i : service[i].attributes['service-id'].value};
+ for (var i = 0; i < (service.length); i++) {
+ var k = { i: service[i].attributes['service-id'].value };
list_service.push(k);
}
if (name == "" || date == "" || time == "" || phone == "" || email == "" || list_service.length == 0) {
@@ -26,21 +26,20 @@ odoo.define('salon_management.website_salon_booking', function (require) {
} else {
var time_left_char = time.substring(0, 2);
var time_right_char = time.substring(3, 5);
- var time_separator = time.substring(2,3);
+ var time_separator = time.substring(2, 3);
if (isNaN(time_left_char) || isNaN(time_right_char) || time_separator != ":") {
alert("Select a valid Time");
} else {
var time_left = parseInt(time_left_char);
var time_right = parseInt(time_right_char);
if ((time_left < 24) && (time_right < 60) && (time_left >= 0) && (time_right >= 0)) {
- var booking_record = {'name': name, 'date': date, 'time': time, 'phone': phone, 'email': email, 'list_service': list_service, 'chair': chair, 'number': number };
+ var booking_record = { 'name': name, 'date': date, 'time': time, 'phone': phone, 'email': email, 'list_service': list_service, 'chair': chair, 'number': number };
$.ajax({
url: "/page/salon_details",
type: "POST",
dataType: "json",
data: booking_record,
- type: 'POST',
- success: function( data ) {
+ success: function (data) {
window.location.href = "/page/salon_management/salon_booking_thank_you";
},
error: function (error) {
@@ -54,12 +53,12 @@ odoo.define('salon_management.website_salon_booking', function (require) {
}
});
- $(document).on('click', "#check_button", function() {
- var check_date = $( "#check_date" ).val();
+ $(document).on('click', "#check_button", function () {
+ var check_date = $("#check_date").val();
if (check_date != "") {
ajax.jsonRpc("/page/salon_check_date", 'call', {
- 'check_date': check_date
- }).then(function(order_details){
+ 'check_date': check_date
+ }).then(function (order_details) {
var x;
var total_orders = "";
var order = "";
@@ -69,18 +68,18 @@ odoo.define('salon_management.website_salon_booking', function (require) {
var i;
var lines = "";
for (i = 0; i < order_details[x]['orders'].length; i++) {
- lines += '
' + order_details[x]['orders'][i]['number'] +
- ' | ' + order_details[x]['orders'][i]['start_time_only'] +
- ' | ' + order_details[x]['orders'][i]['end_time_only'] + ' |
'
+ lines += '' + order_details[x]['orders'][i]['number'] +
+ ' | ' + order_details[x]['orders'][i]['start_time_only'] +
+ ' | ' + order_details[x]['orders'][i]['end_time_only'] + ' |
'
}
order += '' +
- '
' + chair_name + '' +
- '
Order Details' +
- '
' +
- '
Order No. | Start Time | ' +
- 'End Time | ' +
- lines + '
'
+ 'border: 1px solid #666;padding: 15px 0px;box-shadow: 7px 8px 5px #888888;background-color:#7c7bad;border-radius:58px;color:#fff;margin-bottom: 10px;">' +
+ '' + chair_name + '' +
+ '
Order Details' +
+ '' +
+ '
Order No. | Start Time | ' +
+ 'End Time | ' +
+ lines + '
'
}
total_orders += '' + order + '
'
var res = document.getElementById('booking_chair_div')
@@ -92,8 +91,8 @@ odoo.define('salon_management.website_salon_booking', function (require) {
date_field.innerHTML = date_value;
});
} else {
- alert("Fill the Field");
+ alert("Fill the Field");
}
});
-});
\ No newline at end of file
+});
diff --git a/salon_management/static/src/less/salon_dashboard.less b/salon_management/static/src/less/salon_dashboard.less
deleted file mode 100644
index b11d5105a..000000000
--- a/salon_management/static/src/less/salon_dashboard.less
+++ /dev/null
@@ -1,44 +0,0 @@
-
-.o_kanban_dashboard.o_salon_kanban {
-
- .o_kanban_record > div {
- width: 180px;
- height: 200px;
- border-radius: 90px 90px 20px 20px;
- background: #cc1f2f;
- background: linear-gradient(#cc1f2f 0%, #cc1f2f 63%, #6d0b0b 63%, #cc1f2f 73%);
- position: relative;
- margin: 25px;
- display: inline-block;
- }
- .o_kanban_record:after, .o_kanban_record:before {
- content: "";
- display: block;
- width: 33.3333333333px;
- height: 111.1111111111px;
- position: absolute;
- background: #cc1f2f;
- border-radius: 20px;
- border: 1px solid #000;
- bottom: 25px;
- right: 0;
- left: 185px;
- top: 64px;
- }
- .o_kanban_record:before {
- left: 5px;
- z-index: 9;
- }
- .o_kanban_record:after {
- right: -20px;
- z-index: 9;
- }
- .o_kanban_record.notvacant {
- background: #ccc;
- background: linear-gradient(#ccc 0%, #ccc 70%, #000 70%, #ccc 77%);
- }
- .o_kanban_record.notvacant:before, .o_kanban_record.notvacant:after {
- background: #ccc;
- }
-
-}
\ No newline at end of file
diff --git a/salon_management/static/src/xml/salon_dashboard.xml b/salon_management/static/src/xml/salon_dashboard.xml
new file mode 100644
index 000000000..6c05017af
--- /dev/null
+++ b/salon_management/static/src/xml/salon_dashboard.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/salon_management/views/res_config_settings_views.xml b/salon_management/views/res_config_settings_views.xml
index d4818c001..cb390ebe7 100644
--- a/salon_management/views/res_config_settings_views.xml
+++ b/salon_management/views/res_config_settings_views.xml
@@ -43,12 +43,12 @@
- Settings
- ir.actions.act_window
- res.config.settings
- form
- inline
- {'module' : 'salon_management'}
+ Settings
+ ir.actions.act_window
+ res.config.settings
+ form
+ inline
+ {'module' : 'salon_management'}
diff --git a/salon_management/views/res_partner_views.xml b/salon_management/views/res_partner_views.xml
index fba3a41c5..c94be8ff8 100644
--- a/salon_management/views/res_partner_views.xml
+++ b/salon_management/views/res_partner_views.xml
@@ -1,15 +1,13 @@
-
- res.partner.view.form.inherit.salon_management
- res.partner
-
-
-
-
-
-
+ res.partner.view.form.inherit.salon_management
+ res.partner
+
+
+
+
+
+
-
-
\ No newline at end of file
+
diff --git a/salon_management/views/salon_booking_templates.xml b/salon_management/views/salon_booking_templates.xml
index 9314c308b..707826bc4 100644
--- a/salon_management/views/salon_booking_templates.xml
+++ b/salon_management/views/salon_booking_templates.xml
@@ -1,6 +1,5 @@
-
@@ -10,9 +9,7 @@
@@ -191,8 +179,7 @@
Order Details
-
+
Order No. |
Start Time |
@@ -203,7 +190,8 @@
- .
+
+.
|
@@ -238,4 +226,4 @@
-
\ No newline at end of file
+
diff --git a/salon_management/views/salon_booking_views.xml b/salon_management/views/salon_booking_views.xml
index c562dd5f5..c92bf35e4 100644
--- a/salon_management/views/salon_booking_views.xml
+++ b/salon_management/views/salon_booking_views.xml
@@ -7,6 +7,7 @@
|