add Shivasakthi theme layout, dashboard components, and reservation models
This commit is contained in:
parent
bf58ac9667
commit
6daa038bd4
@ -1,6 +1,3 @@
|
|||||||
@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap');
|
|
||||||
@import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css');
|
|
||||||
|
|
||||||
/* Direct FontAwesome font-face declaration with reliable paths */
|
/* Direct FontAwesome font-face declaration with reliable paths */
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'FontAwesome';
|
font-family: 'FontAwesome';
|
||||||
@ -1877,7 +1874,8 @@ body.o_saas_admin_body h4, body.o_saas_admin_body h5, body.o_saas_admin_body h6,
|
|||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
border: 1px solid #e2e8f0;
|
border: 1px solid #e2e8f0;
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
overflow: hidden;
|
overflow-x: auto !important;
|
||||||
|
-webkit-overflow-scrolling: touch !important;
|
||||||
box-shadow: 0 4px 20px -2px rgba(15, 23, 42, 0.08), 0 2px 6px -1px rgba(15, 23, 42, 0.04);
|
box-shadow: 0 4px 20px -2px rgba(15, 23, 42, 0.08), 0 2px 6px -1px rgba(15, 23, 42, 0.04);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2468,114 +2466,444 @@ body.o_saas_admin_body h4, body.o_saas_admin_body h5, body.o_saas_admin_body h6,
|
|||||||
/* -------------------------------------------------------------
|
/* -------------------------------------------------------------
|
||||||
Responsive Mobile & Tablet Viewport Adaptations
|
Responsive Mobile & Tablet Viewport Adaptations
|
||||||
------------------------------------------------------------- */
|
------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Sidebar Brand Row with Close Button */
|
||||||
|
.o_sidebar_brand_row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_btn_sidebar_close {
|
||||||
|
display: none;
|
||||||
|
border: none;
|
||||||
|
background: #f1f5f9;
|
||||||
|
color: #64748b;
|
||||||
|
width: 34px;
|
||||||
|
height: 34px;
|
||||||
|
border-radius: 10px;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 16px;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_btn_sidebar_close:hover {
|
||||||
|
background: #fee2e2;
|
||||||
|
color: #e50000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Off-canvas Overlay Backdrop */
|
||||||
|
.o_sidebar_overlay {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
background: rgba(15, 23, 42, 0.6);
|
||||||
|
backdrop-filter: blur(4px);
|
||||||
|
-webkit-backdrop-filter: blur(4px);
|
||||||
|
z-index: 1040;
|
||||||
|
opacity: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_sidebar_overlay.o_sidebar_open {
|
||||||
|
opacity: 1;
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Topbar Left Controls (Hamburger & Brand) */
|
||||||
|
.o_topbar_left {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 14px;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_btn_mobile_toggle {
|
||||||
|
display: none;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 10px;
|
||||||
|
border: 1px solid #e2e8f0;
|
||||||
|
background: #ffffff;
|
||||||
|
color: #0f172a;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 16px;
|
||||||
|
cursor: pointer;
|
||||||
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_btn_mobile_toggle:hover {
|
||||||
|
background: #fff1f2;
|
||||||
|
color: #e50000;
|
||||||
|
border-color: #fee2e2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_mobile_brand {
|
||||||
|
display: none;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1. Large Tablets & Small Desktops (max-width: 1200px) */
|
||||||
@media (max-width: 1200px) {
|
@media (max-width: 1200px) {
|
||||||
|
.o_middle_grid {
|
||||||
|
grid-template-columns: 1fr 1fr !important;
|
||||||
|
gap: 18px !important;
|
||||||
|
}
|
||||||
|
.o_card_activity {
|
||||||
|
grid-column: span 2 !important;
|
||||||
|
}
|
||||||
|
.o_bottom_grid {
|
||||||
|
grid-template-columns: 1fr !important;
|
||||||
|
gap: 18px !important;
|
||||||
|
}
|
||||||
|
.o_res_row_card {
|
||||||
|
grid-template-columns: 1.4fr 1.4fr 1fr !important;
|
||||||
|
gap: 16px !important;
|
||||||
|
}
|
||||||
|
.o_plans_grid {
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
|
||||||
|
gap: 20px !important;
|
||||||
|
}
|
||||||
.o_apps_grid {
|
.o_apps_grid {
|
||||||
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
|
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
|
||||||
gap: 18px !important;
|
gap: 18px !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 2. Standard Tablets & Mobile Viewports (max-width: 991px) */
|
||||||
@media (max-width: 991px) {
|
@media (max-width: 991px) {
|
||||||
.o_saas_layout {
|
html, body, .o_dine_dashboard_root, .o_restaurant_body {
|
||||||
flex-direction: column !important;
|
max-width: 100vw !important;
|
||||||
width: 100% !important;
|
|
||||||
overflow-x: hidden !important;
|
overflow-x: hidden !important;
|
||||||
}
|
}
|
||||||
.o_saas_sidebar {
|
|
||||||
position: static !important;
|
.o_saas_layout {
|
||||||
|
position: relative !important;
|
||||||
|
flex-direction: column !important;
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
max-width: 100% !important;
|
max-width: 100vw !important;
|
||||||
min-width: 0 !important;
|
overflow-x: hidden !important;
|
||||||
height: auto !important;
|
|
||||||
padding: 14px 16px !important;
|
|
||||||
border-right: none !important;
|
|
||||||
border-bottom: 1px solid #e2e8f0 !important;
|
|
||||||
box-sizing: border-box !important;
|
|
||||||
}
|
}
|
||||||
.o_sidebar_brand {
|
|
||||||
margin-bottom: 12px !important;
|
/* Off-canvas Drawer Navigation */
|
||||||
|
.o_saas_sidebar {
|
||||||
|
position: fixed !important;
|
||||||
|
top: 0 !important;
|
||||||
|
left: 0 !important;
|
||||||
|
bottom: 0 !important;
|
||||||
|
width: 290px !important;
|
||||||
|
max-width: 85vw !important;
|
||||||
|
height: 100vh !important;
|
||||||
|
z-index: 1050 !important;
|
||||||
|
background: #ffffff !important;
|
||||||
|
transform: translateX(-100%) !important;
|
||||||
|
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
padding: 20px 18px !important;
|
||||||
|
overflow-y: auto !important;
|
||||||
}
|
}
|
||||||
.o_sidebar_nav {
|
|
||||||
flex-direction: row !important;
|
.o_saas_sidebar.o_sidebar_open {
|
||||||
overflow-x: auto !important;
|
transform: translateX(0) !important;
|
||||||
flex-wrap: nowrap !important;
|
box-shadow: 0 0 45px rgba(0, 0, 0, 0.35) !important;
|
||||||
gap: 6px !important;
|
|
||||||
-webkit-overflow-scrolling: touch !important;
|
|
||||||
padding-bottom: 4px !important;
|
|
||||||
}
|
}
|
||||||
.o_nav_link {
|
|
||||||
white-space: nowrap !important;
|
.o_btn_sidebar_close {
|
||||||
padding: 6px 12px !important;
|
display: inline-flex !important;
|
||||||
font-size: 13px !important;
|
|
||||||
flex-shrink: 0 !important;
|
|
||||||
}
|
}
|
||||||
.o_nav_link.active::before {
|
|
||||||
display: none !important;
|
.o_btn_mobile_toggle {
|
||||||
|
display: inline-flex !important;
|
||||||
}
|
}
|
||||||
.o_sidebar_promo {
|
|
||||||
display: none !important;
|
.o_mobile_brand {
|
||||||
|
display: inline-flex !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.o_saas_main {
|
.o_saas_main {
|
||||||
margin-left: 0 !important;
|
margin-left: 0 !important;
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
max-width: 100% !important;
|
max-width: 100% !important;
|
||||||
padding: 16px 14px !important;
|
padding: 16px 16px 36px 16px !important;
|
||||||
box-sizing: border-box !important;
|
box-sizing: border-box !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.o_middle_grid {
|
||||||
|
grid-template-columns: 1fr !important;
|
||||||
|
gap: 16px !important;
|
||||||
|
}
|
||||||
|
.o_card_activity {
|
||||||
|
grid-column: span 1 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_res_row_card {
|
||||||
|
grid-template-columns: 1fr 1fr !important;
|
||||||
|
gap: 14px !important;
|
||||||
|
padding: 18px 20px !important;
|
||||||
|
}
|
||||||
|
|
||||||
.o_kpi_grid {
|
.o_kpi_grid {
|
||||||
grid-template-columns: repeat(2, 1fr) !important;
|
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
|
||||||
|
gap: 14px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_settings_grid {
|
||||||
|
grid-template-columns: 1fr !important;
|
||||||
|
gap: 16px !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 3. Small Mobile Devices (max-width: 767px) */
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
.o_saas_topbar {
|
.o_saas_topbar {
|
||||||
flex-direction: column-reverse !important;
|
flex-direction: column !important;
|
||||||
align-items: stretch !important;
|
align-items: stretch !important;
|
||||||
gap: 12px !important;
|
gap: 12px !important;
|
||||||
|
margin-bottom: 20px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.o_topbar_left {
|
||||||
|
justify-content: space-between !important;
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_topbar_actions {
|
||||||
|
width: 100% !important;
|
||||||
|
justify-content: flex-end !important;
|
||||||
|
gap: 8px !important;
|
||||||
|
}
|
||||||
|
|
||||||
.o_search_container {
|
.o_search_container {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
|
max-width: 100% !important;
|
||||||
}
|
}
|
||||||
.o_topbar_actions {
|
|
||||||
justify-content: flex-end !important;
|
|
||||||
width: 100% !important;
|
|
||||||
}
|
|
||||||
.o_page_header {
|
.o_page_header {
|
||||||
flex-direction: column !important;
|
flex-direction: column !important;
|
||||||
align-items: flex-start !important;
|
align-items: stretch !important;
|
||||||
gap: 12px !important;
|
gap: 14px !important;
|
||||||
|
margin-bottom: 18px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.o_heading_title {
|
||||||
|
font-size: 22px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_heading_subtitle {
|
||||||
|
font-size: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
.o_header_controls {
|
.o_header_controls {
|
||||||
flex-wrap: wrap !important;
|
flex-direction: column !important;
|
||||||
|
align-items: stretch !important;
|
||||||
|
gap: 8px !important;
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.o_status_tag, .o_date_picker_btn {
|
||||||
|
width: 100% !important;
|
||||||
|
justify-content: center !important;
|
||||||
|
text-align: center !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_btn_red_action {
|
||||||
|
width: 100% !important;
|
||||||
|
justify-content: center !important;
|
||||||
|
padding: 10px 16px !important;
|
||||||
|
height: 42px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_kpi_grid {
|
||||||
|
grid-template-columns: 1fr !important;
|
||||||
|
gap: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_kpi_card {
|
||||||
|
padding: 18px 16px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_kpi_number {
|
||||||
|
font-size: 26px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_activity_content {
|
||||||
|
flex-direction: column !important;
|
||||||
|
align-items: stretch !important;
|
||||||
|
gap: 16px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_substats_col {
|
||||||
|
border-left: none !important;
|
||||||
|
border-top: 1px solid #f1f5f9 !important;
|
||||||
|
padding-left: 0 !important;
|
||||||
|
padding-top: 16px !important;
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_res_row_card {
|
||||||
|
display: flex !important;
|
||||||
|
flex-direction: column !important;
|
||||||
|
align-items: stretch !important;
|
||||||
|
gap: 14px !important;
|
||||||
|
padding: 16px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_res_actions_col {
|
||||||
|
width: 100% !important;
|
||||||
|
display: flex !important;
|
||||||
|
gap: 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_res_actions_col .o_btn_launch_red,
|
||||||
|
.o_res_actions_col .o_btn_manage_white {
|
||||||
|
flex: 1 !important;
|
||||||
|
text-align: center !important;
|
||||||
|
}
|
||||||
|
|
||||||
.o_page_toolbar {
|
.o_page_toolbar {
|
||||||
flex-direction: column !important;
|
flex-direction: column !important;
|
||||||
align-items: stretch !important;
|
align-items: stretch !important;
|
||||||
gap: 12px !important;
|
gap: 10px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.o_toolbar_search {
|
.o_toolbar_search {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.o_filter_pills {
|
.o_filter_pills {
|
||||||
overflow-x: auto !important;
|
overflow-x: auto !important;
|
||||||
flex-wrap: nowrap !important;
|
flex-wrap: nowrap !important;
|
||||||
padding-bottom: 6px !important;
|
padding-bottom: 6px !important;
|
||||||
-webkit-overflow-scrolling: touch !important;
|
-webkit-overflow-scrolling: touch !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.o_filter_pill {
|
.o_filter_pill {
|
||||||
white-space: nowrap !important;
|
white-space: nowrap !important;
|
||||||
flex-shrink: 0 !important;
|
flex-shrink: 0 !important;
|
||||||
|
padding: 6px 12px !important;
|
||||||
|
font-size: 12px !important;
|
||||||
}
|
}
|
||||||
.o_kpi_grid {
|
|
||||||
grid-template-columns: 1fr !important;
|
.o_modern_table_card {
|
||||||
gap: 14px !important;
|
overflow-x: auto !important;
|
||||||
|
-webkit-overflow-scrolling: touch !important;
|
||||||
|
border-radius: 12px !important;
|
||||||
|
width: 100% !important;
|
||||||
}
|
}
|
||||||
.o_apps_grid {
|
|
||||||
|
.o_modern_table {
|
||||||
|
min-width: 580px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_modern_table th,
|
||||||
|
.o_modern_table td {
|
||||||
|
padding: 12px 14px !important;
|
||||||
|
font-size: 12.5px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_tables_grid {
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
|
||||||
|
gap: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_table_tile {
|
||||||
|
padding: 14px 10px !important;
|
||||||
|
border-radius: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_table_num {
|
||||||
|
font-size: 15px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_plans_grid {
|
||||||
grid-template-columns: 1fr !important;
|
grid-template-columns: 1fr !important;
|
||||||
gap: 16px !important;
|
gap: 16px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.o_apps_grid {
|
||||||
|
grid-template-columns: 1fr !important;
|
||||||
|
gap: 14px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_quick_apps_grid {
|
||||||
|
grid-template-columns: 1fr !important;
|
||||||
|
gap: 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_modal_dialog {
|
||||||
|
width: 95% !important;
|
||||||
|
max-width: 95% !important;
|
||||||
|
margin: 10px !important;
|
||||||
|
border-radius: 16px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_modal_header {
|
||||||
|
padding: 16px 18px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_modal_body {
|
||||||
|
padding: 18px !important;
|
||||||
|
max-height: 80vh !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_modal_footer {
|
||||||
|
padding: 14px 18px !important;
|
||||||
|
flex-direction: column-reverse !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_modal_footer button {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 4. Ultra-compact Phones (max-width: 480px) */
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
.o_saas_main {
|
||||||
|
padding: 12px 10px 28px 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_heading_title {
|
||||||
|
font-size: 20px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_kpi_card {
|
||||||
|
padding: 14px 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_kpi_number {
|
||||||
|
font-size: 24px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_tables_grid {
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
|
||||||
|
gap: 8px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_table_tile {
|
||||||
|
padding: 10px 8px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_table_icon_wrap {
|
||||||
|
width: 38px !important;
|
||||||
|
height: 38px !important;
|
||||||
|
font-size: 16px !important;
|
||||||
|
margin-bottom: 8px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.o_btn_toggle_table {
|
||||||
|
padding: 4px 8px !important;
|
||||||
|
font-size: 11px !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -29,6 +29,63 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
|
// Mobile Navigation Drawer Toggle & Backdrop Handlers
|
||||||
|
// -------------------------------------------------------------
|
||||||
|
const btnMobileToggle = document.getElementById('btnMobileSidebarToggle');
|
||||||
|
const btnSidebarClose = document.getElementById('btnSidebarClose');
|
||||||
|
const sidebarBackdrop = document.getElementById('sidebarBackdrop');
|
||||||
|
const saasSidebar = document.querySelector('.o_saas_sidebar');
|
||||||
|
|
||||||
|
function openMobileSidebar() {
|
||||||
|
if (saasSidebar) saasSidebar.classList.add('o_sidebar_open');
|
||||||
|
if (sidebarBackdrop) sidebarBackdrop.classList.add('o_sidebar_open');
|
||||||
|
document.body.style.overflow = 'hidden';
|
||||||
|
}
|
||||||
|
|
||||||
|
function closeMobileSidebar() {
|
||||||
|
if (saasSidebar) saasSidebar.classList.remove('o_sidebar_open');
|
||||||
|
if (sidebarBackdrop) sidebarBackdrop.classList.remove('o_sidebar_open');
|
||||||
|
document.body.style.overflow = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (btnMobileToggle) {
|
||||||
|
btnMobileToggle.addEventListener('click', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
openMobileSidebar();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (btnSidebarClose) {
|
||||||
|
btnSidebarClose.addEventListener('click', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
closeMobileSidebar();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sidebarBackdrop) {
|
||||||
|
sidebarBackdrop.addEventListener('click', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
closeMobileSidebar();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auto-close drawer on link click in mobile view
|
||||||
|
document.querySelectorAll('.o_saas_sidebar .o_nav_link').forEach(link => {
|
||||||
|
link.addEventListener('click', function () {
|
||||||
|
if (window.innerWidth <= 991) {
|
||||||
|
closeMobileSidebar();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Close on Escape key
|
||||||
|
document.addEventListener('keydown', function (e) {
|
||||||
|
if (e.key === 'Escape') {
|
||||||
|
closeMobileSidebar();
|
||||||
|
}
|
||||||
|
});
|
||||||
// Toast Notification Utility
|
// Toast Notification Utility
|
||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
function showToast(message, type = 'success') {
|
function showToast(message, type = 'success') {
|
||||||
|
|||||||
@ -4,10 +4,11 @@
|
|||||||
<!-- 1. REUSABLE DASHBOARD SIDEBAR COMPONENT -->
|
<!-- 1. REUSABLE DASHBOARD SIDEBAR COMPONENT -->
|
||||||
<!-- ============================================================== -->
|
<!-- ============================================================== -->
|
||||||
<template id="dashboard_sidebar" name="Dashboard Sidebar">
|
<template id="dashboard_sidebar" name="Dashboard Sidebar">
|
||||||
<aside class="o_saas_sidebar">
|
<aside class="o_saas_sidebar" id="dashboardSidebar">
|
||||||
<div class="o_sidebar_top">
|
<div class="o_sidebar_top">
|
||||||
<!-- Logo Brand -->
|
<!-- Logo Brand Row with Close Button for Mobile -->
|
||||||
<a href="/" class="o_sidebar_brand text-decoration-none">
|
<div class="o_sidebar_brand_row">
|
||||||
|
<a href="/" class="o_sidebar_brand text-decoration-none mb-0">
|
||||||
<svg class="o_brand_logo_svg" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg class="o_brand_logo_svg" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path d="M18 4C14.5 4 12 6.5 12 9.5C10 9.8 8.5 11.5 8.5 13.5C8.5 15.2 9.6 16.6 11.2 17.1C11.1 17.5 11 18 11 18.5C11 21.5 13.5 24 16.5 24H19.5C22.5 24 25 21.5 25 18.5C25 18 24.9 17.5 24.8 17.1C26.4 16.6 27.5 15.2 27.5 13.5C27.5 11.5 26 9.8 24 9.5C24 6.5 21.5 4 18 4Z" fill="#fee2e2" stroke="#e50000" stroke-width="2.2" stroke-linejoin="round"/>
|
<path d="M18 4C14.5 4 12 6.5 12 9.5C10 9.8 8.5 11.5 8.5 13.5C8.5 15.2 9.6 16.6 11.2 17.1C11.1 17.5 11 18 11 18.5C11 21.5 13.5 24 16.5 24H19.5C22.5 24 25 21.5 25 18.5C25 18 24.9 17.5 24.8 17.1C26.4 16.6 27.5 15.2 27.5 13.5C27.5 11.5 26 9.8 24 9.5C24 6.5 21.5 4 18 4Z" fill="#fee2e2" stroke="#e50000" stroke-width="2.2" stroke-linejoin="round"/>
|
||||||
<path d="M12 24V28C12 29.1 12.9 30 14 30H22C23.1 30 24 29.1 24 28V24" stroke="#e50000" stroke-width="2.2" stroke-linecap="round"/>
|
<path d="M12 24V28C12 29.1 12.9 30 14 30H22C23.1 30 24 29.1 24 28V24" stroke="#e50000" stroke-width="2.2" stroke-linecap="round"/>
|
||||||
@ -21,6 +22,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
<button type="button" class="o_btn_sidebar_close d-lg-none" id="btnSidebarClose" aria-label="Close Navigation">
|
||||||
|
<i class="fa fa-times"/>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Nav Menu -->
|
<!-- Nav Menu -->
|
||||||
<nav class="o_sidebar_nav">
|
<nav class="o_sidebar_nav">
|
||||||
@ -101,6 +106,8 @@
|
|||||||
</t>
|
</t>
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
|
<!-- Overlay Backdrop for Mobile Drawer -->
|
||||||
|
<div class="o_sidebar_overlay" id="sidebarBackdrop"/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<!-- ============================================================== -->
|
<!-- ============================================================== -->
|
||||||
@ -108,10 +115,18 @@
|
|||||||
<!-- ============================================================== -->
|
<!-- ============================================================== -->
|
||||||
<template id="dashboard_topbar" name="Dashboard Topbar">
|
<template id="dashboard_topbar" name="Dashboard Topbar">
|
||||||
<header class="o_saas_topbar">
|
<header class="o_saas_topbar">
|
||||||
|
<div class="o_topbar_left">
|
||||||
|
<button type="button" class="o_btn_mobile_toggle d-lg-none" id="btnMobileSidebarToggle" aria-label="Toggle Navigation">
|
||||||
|
<i class="fa fa-bars"/>
|
||||||
|
</button>
|
||||||
|
<a href="/" class="o_mobile_brand d-lg-none text-decoration-none">
|
||||||
|
<span class="o_brand_title">Dine<span class="text-danger">360</span></span>
|
||||||
|
</a>
|
||||||
<div class="o_search_container">
|
<div class="o_search_container">
|
||||||
<i class="fa fa-search o_search_icon"/>
|
<i class="fa fa-search o_search_icon"/>
|
||||||
<input type="text" placeholder="Search restaurants, users, or anything..." class="o_search_input"/>
|
<input type="text" placeholder="Search restaurants, users, or anything..." class="o_search_input"/>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="o_topbar_actions">
|
<div class="o_topbar_actions">
|
||||||
<div class="o_icon_btn" title="Notifications">
|
<div class="o_icon_btn" title="Notifications">
|
||||||
|
|||||||
@ -12,7 +12,7 @@ class PosOrderLine(models.Model):
|
|||||||
('ready', 'Ready'),
|
('ready', 'Ready'),
|
||||||
('served', 'Served'),
|
('served', 'Served'),
|
||||||
('cancelled', 'Cancelled')
|
('cancelled', 'Cancelled')
|
||||||
], string='Preparation Status', default='waiting', tracking=True, group_expand='_read_group_preparation_status')
|
], string='Preparation Status', default='waiting', group_expand='_read_group_preparation_status')
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _read_group_preparation_status(self, stages, domain, order):
|
def _read_group_preparation_status(self, stages, domain, order):
|
||||||
@ -25,21 +25,8 @@ class PosOrderLine(models.Model):
|
|||||||
|
|
||||||
table_id = fields.Many2one('restaurant.table', related='order_id.table_id', string='Table', store=True)
|
table_id = fields.Many2one('restaurant.table', related='order_id.table_id', string='Table', store=True)
|
||||||
floor_id = fields.Many2one('restaurant.floor', related='order_id.table_id.floor_id', string='Floor', store=True)
|
floor_id = fields.Many2one('restaurant.floor', related='order_id.table_id.floor_id', string='Floor', store=True)
|
||||||
order_source = fields.Selection([
|
order_source = fields.Selection(related='order_id.order_source', string='Order Source', store=True, readonly=True)
|
||||||
('walk_in', 'Walk-In (Standard POS)'),
|
fulfilment_type = fields.Selection(related='order_id.fulfilment_type', string='Fulfilment Type', store=True, readonly=True)
|
||||||
('phone', 'Telephone Order'),
|
|
||||||
('online', 'Online / eCommerce'),
|
|
||||||
('whatsapp', 'WhatsApp'),
|
|
||||||
('social_media', 'Social Media'),
|
|
||||||
('platform', 'Third-Party Platform'),
|
|
||||||
('kiosk', 'Self-Order Kiosk'),
|
|
||||||
('qr', 'QR Table Order'),
|
|
||||||
], related='order_id.order_source', string='Order Source', store=True)
|
|
||||||
fulfilment_type = fields.Selection([
|
|
||||||
('dine_in', 'Dine-In'),
|
|
||||||
('pickup', 'Pickup'),
|
|
||||||
('delivery', 'Delivery'),
|
|
||||||
], related='order_id.fulfilment_type', string='Fulfilment Type', store=True)
|
|
||||||
|
|
||||||
@api.depends('preparation_time_start', 'preparation_time_end')
|
@api.depends('preparation_time_start', 'preparation_time_end')
|
||||||
def _compute_cooking_time(self):
|
def _compute_cooking_time(self):
|
||||||
|
|||||||
@ -6,7 +6,7 @@ class ReservationHoliday(models.Model):
|
|||||||
_description = 'Reservation Holiday/Override'
|
_description = 'Reservation Holiday/Override'
|
||||||
_order = 'date desc'
|
_order = 'date desc'
|
||||||
|
|
||||||
name = fields.Char(string='Description', required=True, placeholder="e.g. Christmas Day")
|
name = fields.Char(string='Description', required=True)
|
||||||
date = fields.Date(string='Date', required=True)
|
date = fields.Date(string='Date', required=True)
|
||||||
|
|
||||||
is_closed = fields.Boolean(string='Closed for Reservations', default=True)
|
is_closed = fields.Boolean(string='Closed for Reservations', default=True)
|
||||||
|
|||||||
@ -63,7 +63,7 @@ class RestaurantReservation(models.Model):
|
|||||||
('confirmed', 'Confirmed'),
|
('confirmed', 'Confirmed'),
|
||||||
('completed', 'Completed'),
|
('completed', 'Completed'),
|
||||||
('cancelled', 'Cancelled')
|
('cancelled', 'Cancelled')
|
||||||
], string='Status', default='draft', tracking=True)
|
], string='Status', default='draft')
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def create(self, vals):
|
def create(self, vals):
|
||||||
|
|||||||
@ -63,6 +63,20 @@
|
|||||||
color: var(--res-secondary-color) !important;
|
color: var(--res-secondary-color) !important;
|
||||||
border-color: var(--res-primary-color) !important;
|
border-color: var(--res-primary-color) !important;
|
||||||
}
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.s_reservation_form {
|
||||||
|
padding-top: 24px !important;
|
||||||
|
padding-bottom: 24px !important;
|
||||||
|
}
|
||||||
|
.res-title {
|
||||||
|
font-size: 2rem !important;
|
||||||
|
}
|
||||||
|
.slot-btn {
|
||||||
|
min-width: 80px !important;
|
||||||
|
padding: 8px 10px !important;
|
||||||
|
font-size: 0.85rem !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
/* Hide website header and footer on the reservation page */
|
/* Hide website header and footer on the reservation page */
|
||||||
header#top,
|
header#top,
|
||||||
footer#bottom {
|
footer#bottom {
|
||||||
@ -74,13 +88,13 @@
|
|||||||
</style>
|
</style>
|
||||||
</t>
|
</t>
|
||||||
<div id="wrap" class="oe_structure oe_empty">
|
<div id="wrap" class="oe_structure oe_empty">
|
||||||
<section class="s_reservation_form pt64 pb64" style="background: linear-gradient(rgba(0,0,0,0.6), rgba(0,0,0,0.6)), url('/dine360_theme_shivasakthi/static/src/img/bg_reservation.jpg') center/cover no-repeat;">
|
<section class="s_reservation_form pt64 pb64" style="background: linear-gradient(rgba(0,0,0,0.6), rgba(0,0,0,0.6)), url('/dine360_theme_shivasakthi/static/src/img/bg-image.jpg') center/cover no-repeat;">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-lg-7">
|
<div class="col-lg-7">
|
||||||
<div class="card border-0 shadow-lg" style="background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(10px); border-radius: 20px;">
|
<div class="card border-0 shadow-lg" style="background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(10px); border-radius: 20px;">
|
||||||
<div class="card-body p-5">
|
<div class="card-body p-3 p-sm-4 p-md-5">
|
||||||
<div class="text-center mb-5">
|
<div class="text-center mb-4 mb-md-5">
|
||||||
<h2 class="display-4 fw-bold mb-2 res-title">Table Reservation</h2>
|
<h2 class="display-4 fw-bold mb-2 res-title">Table Reservation</h2>
|
||||||
<p class="text-muted mb-1">Book your spot for an authentic South Indian dining experience.</p>
|
<p class="text-muted mb-1">Book your spot for an authentic South Indian dining experience.</p>
|
||||||
<div class="mt-2 text-center">
|
<div class="mt-2 text-center">
|
||||||
@ -383,6 +397,19 @@
|
|||||||
background: color-mix(in srgb, var(--res-primary-color) 80%, black) !important;
|
background: color-mix(in srgb, var(--res-primary-color) 80%, black) !important;
|
||||||
color: var(--res-secondary-color) !important;
|
color: var(--res-secondary-color) !important;
|
||||||
}
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.display-3 {
|
||||||
|
font-size: 2.2rem !important;
|
||||||
|
}
|
||||||
|
.res-success-card {
|
||||||
|
padding: 1.25rem !important;
|
||||||
|
}
|
||||||
|
.res-back-btn {
|
||||||
|
width: 100% !important;
|
||||||
|
padding-left: 20px !important;
|
||||||
|
padding-right: 20px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
/* Hide website header and footer on the reservation success page */
|
/* Hide website header and footer on the reservation success page */
|
||||||
header#top,
|
header#top,
|
||||||
footer#bottom {
|
footer#bottom {
|
||||||
@ -398,11 +425,11 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<div class="p-5 rounded-circle d-inline-block mb-4 res-success-icon-box">
|
<div class="p-4 p-md-5 rounded-circle d-inline-block mb-4 res-success-icon-box">
|
||||||
<i class="fa fa-check-circle display-1 res-success-icon"></i>
|
<i class="fa fa-check-circle display-1 res-success-icon"></i>
|
||||||
</div>
|
</div>
|
||||||
<h1 class="display-3 fw-bold mb-3">Thank You!</h1>
|
<h1 class="display-3 fw-bold mb-3">Thank You!</h1>
|
||||||
<p class="lead text-muted mb-5">Your reservation request <strong><t t-esc="reservation.name"/></strong> has been received. We will contact you shortly to confirm.</p>
|
<p class="lead text-muted mb-4 mb-md-5">Your reservation request <strong><t t-esc="reservation.name"/></strong> has been received. We will contact you shortly to confirm.</p>
|
||||||
<div class="p-4 mb-5 mx-auto res-success-card">
|
<div class="p-4 mb-5 mx-auto res-success-card">
|
||||||
<div class="d-flex justify-content-around align-items-center text-center">
|
<div class="d-flex justify-content-around align-items-center text-center">
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@ -52,7 +52,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="/menu" class="btn btn-warning text-uppercase fw-bold px-4 py-3 rounded-0" style="font-size: 14px; letter-spacing: 1px;">Discover More <i class="fa fa-arrow-right ms-2"></i></a>
|
<a href="/shop" class="btn btn-warning text-uppercase fw-bold px-4 py-3 rounded-0" style="font-size: 14px; letter-spacing: 1px;">Discover More <i class="fa fa-arrow-right ms-2"></i></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -97,6 +97,15 @@
|
|||||||
@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
|
@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
|
||||||
.fadeIn { animation-name: fadeIn; }
|
.fadeIn { animation-name: fadeIn; }
|
||||||
#uber_message strong { display: block; margin-bottom: 4px; }
|
#uber_message strong { display: block; margin-bottom: 4px; }
|
||||||
|
|
||||||
|
@media (max-width: 576px) {
|
||||||
|
.order-type-card { padding: 12px 8px; border-radius: 10px; }
|
||||||
|
.order-type-card i { font-size: 1.4rem; margin-bottom: 4px; }
|
||||||
|
.order-type-card h5 { font-size: 0.9rem; margin-bottom: 2px; }
|
||||||
|
.order-type-card p { font-size: 0.72rem; line-height: 1.2; }
|
||||||
|
.active-mark { top: 6px; right: 6px; font-size: 14px; }
|
||||||
|
.section-header { margin: 20px 0 10px 0; font-size: 0.98rem; }
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div class="row mb-4 g-3 mt-1">
|
<div class="row mb-4 g-3 mt-1">
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
<h1 class="display-3 fw-bold mb-3" style="letter-spacing: 1px;">FAQ</h1>
|
<h1 class="display-3 fw-bold mb-3" style="letter-spacing: 1px;">FAQ</h1>
|
||||||
<nav aria-label="breadcrumb" class="d-flex justify-content-center">
|
<nav aria-label="breadcrumb" class="d-flex justify-content-center">
|
||||||
<ol class="breadcrumb mb-0" style="background: transparent; font-size: 14px; text-transform: uppercase; font-weight: 600;">
|
<ol class="breadcrumb mb-0" style="background: transparent; font-size: 14px; text-transform: uppercase; font-weight: 600;">
|
||||||
<li class="breadcrumb-item"><a href="/home" class="text-white text-decoration-none" style="opacity: 0.8;">Home</a></li>
|
<li class="breadcrumb-item"><a href="/" class="text-white text-decoration-none" style="opacity: 0.8;">Home</a></li>
|
||||||
<!-- Separator (manual or via CSS, bootstrap adds /) -->
|
<!-- Separator (manual or via CSS, bootstrap adds /) -->
|
||||||
<li class="breadcrumb-item active" style="color: #e5b945;" aria-current="page">FAQ</li>
|
<li class="breadcrumb-item active" style="color: #e5b945;" aria-current="page">FAQ</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|||||||
@ -150,7 +150,7 @@
|
|||||||
<ul class="footer-links-list list-unstyled ps-0" style="font-size: 14px;">
|
<ul class="footer-links-list list-unstyled ps-0" style="font-size: 14px;">
|
||||||
<li class="mb-3"><a href="/" class="text-decoration-none text-white">Home</a></li>
|
<li class="mb-3"><a href="/" class="text-decoration-none text-white">Home</a></li>
|
||||||
<li class="mb-3"><a href="/about" class="text-decoration-none text-white">About</a></li>
|
<li class="mb-3"><a href="/about" class="text-decoration-none text-white">About</a></li>
|
||||||
<li class="mb-3"><a href="/menu" class="text-decoration-none text-white">Menu</a></li>
|
<li class="mb-3"><a href="/shop" class="text-decoration-none text-white">Menu</a></li>
|
||||||
<li class="mb-3"><a href="/contactus" class="text-decoration-none text-white">Contact</a></li>
|
<li class="mb-3"><a href="/contactus" class="text-decoration-none text-white">Contact</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user