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 { | 
				
			|||
    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); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
@ -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; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
@ -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" ?> | 
				
			|||
<odoo> | 
				
			|||
 | 
				
			|||
    <record id="res_partner_view_form" model="ir.ui.view"> | 
				
			|||
      <field name="name">res.partner.view.form.inherit.salon_management</field> | 
				
			|||
      <field name="model">res.partner</field> | 
				
			|||
      <field name="inherit_id" ref="base.view_partner_form" /> | 
				
			|||
      <field name="arch" type="xml"> | 
				
			|||
          <xpath expr="//field[@name='user_id']" position="after"> | 
				
			|||
              <field name="partner_salon" /> | 
				
			|||
          </xpath> | 
				
			|||
      </field> | 
				
			|||
        <field name="name">res.partner.view.form.inherit.salon_management</field> | 
				
			|||
        <field name="model">res.partner</field> | 
				
			|||
        <field name="inherit_id" ref="base.view_partner_form" /> | 
				
			|||
        <field name="arch" type="xml"> | 
				
			|||
            <xpath expr="//field[@name='category_id']" position="after"> | 
				
			|||
                <field name="partner_salon" /> | 
				
			|||
            </xpath> | 
				
			|||
        </field> | 
				
			|||
    </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" ?> | 
				
			|||
<odoo> | 
				
			|||
    <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_chair_dashboard_menu_action" parent="salon_management_menu_root" action="salon_chair_dashboard_action" /> | 
				
			|||
        <menuitem id="salon_management_salon_root" name="Salon" 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" /> | 
				
			|||
        <menuitem id="salon_management_menu_root" name="Salon" | 
				
			|||
                  groups="salon_management.group_salon_user" | 
				
			|||
                  action="salon_action_dashboard" | 
				
			|||
                  web_icon="salon_management,static/description/icon.png"/> | 
				
			|||
        <menuitem id="salon_dashboard_menu_action" | 
				
			|||
                  name="Dashboard" parent="salon_management_menu_root" | 
				
			|||
                  action="salon_action_dashboard" | 
				
			|||
                  sequence="-100" /> | 
				
			|||
        <menuitem id="salon_management_salon_root" name="Salon" | 
				
			|||
                  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> | 
				
			|||
</odoo> | 
				
			|||
</odoo> | 
				
			|||
 | 
				
			|||
					Loading…
					
					
				
		Reference in new issue