22 changed files with 785 additions and 388 deletions
Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 155 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 237 KiB |
After Width: | Height: | Size: 587 KiB |
@ -1,58 +1,254 @@ |
|||||
.style_chair { |
.o_action_manager { |
||||
text-align: center; |
overflow: auto !important; |
||||
color: white; |
} |
||||
font-size: 17px; |
|
||||
background: #0f101000; |
.salon_dashboards { |
||||
padding: 0 !important; |
padding-top: 10px; |
||||
text-transform: uppercase; |
background-color: #f8faff !important; |
||||
font-weight: 600; |
} |
||||
|
|
||||
|
.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; |
text-align: center; |
||||
color: #000000; |
color: #00438b; |
||||
|
} |
||||
|
|
||||
|
.stat-title { |
||||
font-size: 17px; |
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; |
text-align: center; |
||||
background: #29292900 !important; |
color: #00438b; |
||||
padding: 0 !important; |
|
||||
} |
} |
||||
.style_collection_booking{ |
|
||||
color: black !important; |
/*=====================Dashboard===========================*/ |
||||
font-size: 12px; |
|
||||
text-align: center; |
.salon_dashboards { |
||||
background: #29292900 !important; |
background-color: #f8faff !important; |
||||
padding: 0 !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; |
text-align: center; |
||||
font-size: 41px; |
padding-top: 10%; |
||||
padding: 0 !important; |
background: #314384ff; |
||||
background: #4f535600; |
color: #fff; |
||||
color: white; |
|
||||
margin-top: 9px; |
|
||||
margin-bottom: 30px; |
|
||||
} |
} |
||||
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; |
text-align: center; |
||||
font-size: 41px; |
} |
||||
padding: 0 !important; |
|
||||
background: #4f535600; |
.stat-widget-one .stat-digit { |
||||
color: #000000; |
font-size: 20px; |
||||
margin-top: 9px; |
font-weight: bolder; |
||||
margin-bottom: 30px; |
padding: 1px 10px 2px 0; |
||||
} |
color: #8061a9; |
||||
.button_background{ |
text-shadow: 0px 0px 20px #000000; |
||||
background-color: Transparent; |
text-align: center; |
||||
border: transparent; |
} |
||||
cursor: pointer; |
|
||||
|
.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); |
||||
} |
} |
||||
|
@ -1,46 +1,46 @@ |
|||||
.chair_box_website{ |
.chair_box_website { |
||||
text-align: center; |
text-align: center; |
||||
border: 1px solid #666; |
border: 1px solid #666; |
||||
padding: 10px 15px; |
padding: 10px 15px; |
||||
box-shadow: 7px 8px 5px #888888; |
box-shadow: 7px 8px 5px #888888; |
||||
background-color: #337ab7; |
background-color: #337ab7; |
||||
color: #000000; |
color: #000000; |
||||
} |
} |
||||
.field_booking_chair{ |
.field_booking_chair { |
||||
font-weight: bold; |
font-weight: bold; |
||||
} |
} |
||||
input[type="text"]{ |
input[type="text"] { |
||||
width: 100%; |
width: 100%; |
||||
} |
} |
||||
input[type="email"]{ |
input[type="email"] { |
||||
width: 100%; |
width: 100%; |
||||
} |
} |
||||
input[type=checkbox] + label { |
input[type="checkbox"] + label { |
||||
color: #7c7bad; |
color: #7c7bad; |
||||
font-style: italic; |
font-style: italic; |
||||
} |
} |
||||
input[type=checkbox]:checked + label { |
input[type="checkbox"]:checked + label { |
||||
color: #00a09d; |
color: #00a09d; |
||||
font-style: normal; |
font-style: normal; |
||||
} |
} |
||||
select{ |
select { |
||||
width: 100%; |
width: 100%; |
||||
} |
} |
||||
.selection_service{ |
.selection_service { |
||||
height: 6em; |
height: 6em; |
||||
overflow: auto; |
overflow: auto; |
||||
border: 1px solid #b3b3b3; |
border: 1px solid #b3b3b3; |
||||
border-radius: 5px; |
border-radius: 5px; |
||||
background-color: #fcfcfc; |
background-color: #fcfcfc; |
||||
} |
} |
||||
#booking_chair_details{ |
#booking_chair_details { |
||||
height: 200px!important; |
height: 200px !important; |
||||
text-align: center; |
text-align: center; |
||||
border: 1px solid #666; |
border: 1px solid #666; |
||||
padding: 15px 0px; |
padding: 15px 0px; |
||||
box-shadow: 7px 8px 5px #888888; |
box-shadow: 7px 8px 5px #888888; |
||||
background-color:#7c7bad; |
background-color: #7c7bad; |
||||
border-radius:58px; |
border-radius: 58px; |
||||
color:#fff; |
color: #fff; |
||||
margin-bottom: 10px; |
margin-bottom: 10px; |
||||
} |
} |
||||
|
@ -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("<span class='stat-digit'>" + result.bookings + "</span>"); |
||||
|
$("#recent_count").append("<span class='stat-digit'>" + result.sales + "</span>"); |
||||
|
$("#orders_count").append("<span class='stat-digit'>" + result.orders + "</span>"); |
||||
|
$("#clients_count").append("<span class='stat-digit'>" + result.clients + "</span>"); |
||||
|
// 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; |
||||
|
}); |
@ -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; |
|
||||
} |
|
||||
|
|
||||
} |
|
@ -0,0 +1,81 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<templates id="template" xml:space="preserve"> |
||||
|
<t t-name="SalonDashboardMain"> |
||||
|
<div class="salon_dashboards"> |
||||
|
<div class="container-fluid spa_salon_dashboard"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</t> |
||||
|
<t t-name="SalonSpaDashBoard"> |
||||
|
<link rel="stylesheet" href="/salon_management/static/src/css/salon_dashboard.css"/> |
||||
|
<div class="row main-section"> |
||||
|
<div class="col-sm-6 col-md-3-12 col-md-6 col-lg-3 salon_spa_bookings salon salon_bookings"> |
||||
|
<div class="salon-card"> |
||||
|
<div class="salon-card-body"> |
||||
|
<div class="stat-widget-one"> |
||||
|
<div class="stat-icon"> |
||||
|
<i class="fa fa-calendar"/> |
||||
|
</div> |
||||
|
<div class="stat-content"> |
||||
|
<div class="stat-text">Bookings</div> |
||||
|
<div class="stat-digit" id="bookings_count"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-sm-6 col-md-3-12 col-md-6 col-lg-3 salon_spa_orders salon salon_orders"> |
||||
|
<div class="salon-card"> |
||||
|
<div class="salon-card-body"> |
||||
|
<div class="stat-widget-one"> |
||||
|
<div class="stat-icon"> |
||||
|
<i class="fa fa-calendar"/> |
||||
|
</div> |
||||
|
<div class="stat-content"> |
||||
|
<div class="stat-text">Salon Orders</div> |
||||
|
<div class="stat-digit" id="orders_count"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-sm-6 col-md-3-12 col-md-6 col-lg-3 salon_spa_sales salon salon_sales"> |
||||
|
<div class="salon-card"> |
||||
|
<div class="salon-card-body"> |
||||
|
<div class="stat-widget-one"> |
||||
|
<div class="stat-icon"> |
||||
|
<i class="fa fa-money"/> |
||||
|
</div> |
||||
|
<div class="stat-content"> |
||||
|
<div class="stat-text">Recent Works</div> |
||||
|
<div class="stat-digit" id="recent_count"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-sm-6 col-md-3-12 col-md-6 col-lg-3 salon_spa_clients salon salon_clients"> |
||||
|
<div class="salon-card"> |
||||
|
<div class="salon-card-body"> |
||||
|
<div class="stat-widget-one"> |
||||
|
<div class="stat-icon"> |
||||
|
<i class="fa fa-user "/> |
||||
|
</div> |
||||
|
<div class="stat-content"> |
||||
|
<div class="stat-text">Salon Clients</div> |
||||
|
<div class="stat-digit" id="clients_count"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<article role="main" id="chairs_dashboard_view"> |
||||
|
<!--filled from js--> |
||||
|
</article> |
||||
|
</t> |
||||
|
</templates> |
@ -1,15 +1,13 @@ |
|||||
<?xml version="1.0" encoding="utf-8" ?> |
<?xml version="1.0" encoding="utf-8" ?> |
||||
<odoo> |
<odoo> |
||||
|
|
||||
<record id="res_partner_view_form" model="ir.ui.view"> |
<record id="res_partner_view_form" model="ir.ui.view"> |
||||
<field name="name">res.partner.view.form.inherit.salon_management</field> |
<field name="name">res.partner.view.form.inherit.salon_management</field> |
||||
<field name="model">res.partner</field> |
<field name="model">res.partner</field> |
||||
<field name="inherit_id" ref="base.view_partner_form" /> |
<field name="inherit_id" ref="base.view_partner_form" /> |
||||
<field name="arch" type="xml"> |
<field name="arch" type="xml"> |
||||
<xpath expr="//field[@name='user_id']" position="after"> |
<xpath expr="//field[@name='category_id']" position="after"> |
||||
<field name="partner_salon" /> |
<field name="partner_salon" /> |
||||
</xpath> |
</xpath> |
||||
</field> |
</field> |
||||
</record> |
</record> |
||||
|
|
||||
</odoo> |
</odoo> |
@ -0,0 +1,17 @@ |
|||||
|
<odoo> |
||||
|
<data> |
||||
|
<template id="dashboard_salon_chairs" name="Chairs template"> |
||||
|
<t t-foreach="s_chairs" t-as="chair"> |
||||
|
<div class="salon_chair" t-att-id="chair['id']" t-att-value="chair['id']"> |
||||
|
<h4 class="chair_name" t-att-id="chair['id']"> |
||||
|
<t t-esc="chair['name']"></t> |
||||
|
</h4> |
||||
|
<h2 class="chair_orders" t-att-id="chair['id']"> |
||||
|
<t t-esc="chair['orders']"></t> |
||||
|
</h2> |
||||
|
<i class="fa fa-cog chair_setting" t-att-id="chair['name']"></i> |
||||
|
</div> |
||||
|
</t> |
||||
|
</template> |
||||
|
</data> |
||||
|
</odoo> |
@ -1,16 +1,36 @@ |
|||||
<?xml version="1.0" encoding="utf-8" ?> |
<?xml version="1.0" encoding="utf-8" ?> |
||||
<odoo> |
<odoo> |
||||
<data> |
<data> |
||||
<menuitem id="salon_management_menu_root" name="Salon" groups="salon_management.group_salon_user" web_icon="salon_management,static/description/icon.png" /> |
<menuitem id="salon_management_menu_root" name="Salon" |
||||
<menuitem id="salon_chair_dashboard_menu_action" parent="salon_management_menu_root" action="salon_chair_dashboard_action" /> |
groups="salon_management.group_salon_user" |
||||
<menuitem id="salon_management_salon_root" name="Salon" parent="salon_management_menu_root" /> |
action="salon_action_dashboard" |
||||
<menuitem id="salon_chair_menu_action" name="Chair" parent="salon_management_salon_root" action="salon_chair_action" /> |
web_icon="salon_management,static/description/icon.png"/> |
||||
<menuitem id="salon_service_menu_action" parent="salon_management_salon_root" action="salon_service_action" /> |
<menuitem id="salon_dashboard_menu_action" |
||||
<menuitem id="salon_order_menu_action" parent="salon_management_salon_root" name="Salon Orders" action="salon_order_action" /> |
name="Dashboard" parent="salon_management_menu_root" |
||||
<menuitem id="salon_booking_menu_action" name="Bookings" parent="salon_management_salon_root" action="salon_booking_action" /> |
action="salon_action_dashboard" |
||||
<menuitem id="salon_management_settings_menu_root" parent="salon_management_menu_root" name="Configuration" /> |
sequence="-100" /> |
||||
<menuitem id="salon_config_settings_menu_action" parent="salon_management_settings_menu_root" name="Settings" action="salon_config_settings_action" /> |
<menuitem id="salon_management_salon_root" name="Salon" |
||||
<menuitem id="salon_working_hours_menu_action" parent="salon_management_settings_menu_root" name="Working Hours" action="salon_working_hours_action" /> |
parent="salon_management_menu_root"/> |
||||
|
<menuitem id="salon_chair_menu_action" name="Chair" |
||||
|
parent="salon_management_salon_root" |
||||
|
action="salon_chair_action"/> |
||||
|
<menuitem id="salon_service_menu_action" |
||||
|
parent="salon_management_salon_root" |
||||
|
action="salon_service_action"/> |
||||
|
<menuitem id="salon_order_menu_action" |
||||
|
parent="salon_management_salon_root" name="Salon Orders" |
||||
|
action="salon_order_action"/> |
||||
|
<menuitem id="salon_booking_menu_action" name="Bookings" |
||||
|
parent="salon_management_salon_root" |
||||
|
action="salon_booking_action"/> |
||||
|
<menuitem id="salon_management_settings_menu_root" |
||||
|
parent="salon_management_menu_root" name="Configuration"/> |
||||
|
<menuitem id="salon_config_settings_menu_action" |
||||
|
parent="salon_management_settings_menu_root" name="Settings" |
||||
|
action="salon_config_settings_action"/> |
||||
|
<menuitem id="salon_working_hours_menu_action" |
||||
|
parent="salon_management_settings_menu_root" |
||||
|
name="Working Hours" action="salon_working_hours_action"/> |
||||
|
|
||||
</data> |
</data> |
||||
</odoo> |
</odoo> |
Loading…
Reference in new issue