@ -0,0 +1,47 @@ |
|||
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg |
|||
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html |
|||
:alt: License: AGPL-3 |
|||
|
|||
POS THEME SAPPHIRE |
|||
================== |
|||
POS Theme Sapphire is a modern point of sale (POS) app theme designed to help businesses streamline their sales operations. |
|||
|
|||
Configuration |
|||
============= |
|||
* No additional configurations needed |
|||
|
|||
Company |
|||
------- |
|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
|||
|
|||
License |
|||
------- |
|||
General Public License, Version 3 (AGPL v3). |
|||
(https://www.gnu.org/licenses/agpl-3.0-standalone.html) |
|||
|
|||
Credits |
|||
------- |
|||
* Developers: (V18) MOHAMMED DILSHAD TK |
|||
Contact: odoo@cybrosys.com |
|||
|
|||
Contacts |
|||
-------- |
|||
* Mail Contact : odoo@cybrosys.com |
|||
* Website : https://cybrosys.com |
|||
|
|||
Bug Tracker |
|||
----------- |
|||
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. |
|||
|
|||
Maintainer |
|||
========== |
|||
.. image:: https://cybrosys.com/images/logo.png |
|||
:target: https://cybrosys.com |
|||
|
|||
This module is maintained by Cybrosys Technologies. |
|||
|
|||
For support and more information, please visit `Our Website <https://cybrosys.com/>`__ |
|||
|
|||
Further information |
|||
=================== |
|||
HTML Description: `<static/description/index.html>`__ |
@ -0,0 +1,21 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: MOHAMMED DILSHAD TK (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
@ -0,0 +1,50 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: MOHAMMED DILSHAD TK (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
{ |
|||
'name': 'POS Theme Sapphire', |
|||
'version': '18.0.1.0.0', |
|||
'category': 'Themes/Backend', |
|||
'summary': 'The POS Theme Sapphire Is A Responsive And Ultimate ' |
|||
'Theme For Your Odoo V18.This Theme Will Give You ' |
|||
'A New Experience With Odoo.', |
|||
'description': '''Minimalist and elegant backend POS theme for Odoo 18''', |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'maintainer': 'Cybrosys Techno Solutions', |
|||
'website': 'https://www.cybrosys.com', |
|||
'depends': ['point_of_sale'], |
|||
'assets': { |
|||
'point_of_sale._assets_pos': [ |
|||
'pos_theme_sapphire/static/src/js/ProductScreen.js', |
|||
'pos_theme_sapphire/static/src/xml/**/*.xml', |
|||
'pos_theme_sapphire/static/src/css/custom.css', |
|||
], |
|||
}, |
|||
'images': [ |
|||
'static/description/banner.jpg', |
|||
'static/description/theme_screenshot.jpg', |
|||
], |
|||
'license': 'AGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False, |
|||
} |
@ -0,0 +1,6 @@ |
|||
## Module <pos_theme_sapphire> |
|||
#### 2.05.2025 |
|||
#### Version 18.0.1.0.0 |
|||
#### ADD |
|||
|
|||
- Initial commit POS Theme Sapphire |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 542 B |
After Width: | Height: | Size: 576 B |
After Width: | Height: | Size: 733 B |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 911 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 673 B |
After Width: | Height: | Size: 878 B |
After Width: | Height: | Size: 653 B |
After Width: | Height: | Size: 905 B |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 839 B |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 427 B |
After Width: | Height: | Size: 627 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 988 B |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 204 KiB |
After Width: | Height: | Size: 167 KiB |
After Width: | Height: | Size: 182 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 265 KiB |
After Width: | Height: | Size: 235 KiB |
After Width: | Height: | Size: 728 KiB |
After Width: | Height: | Size: 345 KiB |
After Width: | Height: | Size: 103 KiB |
After Width: | Height: | Size: 108 KiB |
After Width: | Height: | Size: 544 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 114 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 552 KiB |
After Width: | Height: | Size: 105 KiB |
After Width: | Height: | Size: 280 KiB |
After Width: | Height: | Size: 223 KiB |
After Width: | Height: | Size: 136 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 315 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 576 B |
After Width: | Height: | Size: 733 B |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 911 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 673 B |
After Width: | Height: | Size: 565 B |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 878 B |
After Width: | Height: | Size: 653 B |
After Width: | Height: | Size: 905 B |
After Width: | Height: | Size: 839 B |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 427 B |
After Width: | Height: | Size: 627 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 988 B |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 1.2 KiB |
@ -0,0 +1,678 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
|
|||
<head> |
|||
<meta charset="UTF-8"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css" |
|||
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> |
|||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.1/css/all.min.css"> |
|||
<link rel="preconnect" href="https://fonts.googleapis.com"> |
|||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> |
|||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"> |
|||
<title>Document</title> |
|||
|
|||
|
|||
<style> |
|||
|
|||
@media screen and (max-width: 1200px) { |
|||
.supports-enterprise { |
|||
width:99% !important; |
|||
} |
|||
} |
|||
|
|||
</style> |
|||
|
|||
|
|||
</head> |
|||
|
|||
<body class=""> |
|||
<div id="wrapwrap" class="loempia_themes_page o_footer_effect_enable"> |
|||
<main style="padding-top: 95.8px;"> |
|||
<div id="wrap" itemscope="" itemtype="http://schema.org/SoftwareApplication" class="js_apps auto_pop"> |
|||
<div class="container apps_page"> |
|||
<div id="module-description"> |
|||
<div class="container loempia_srt_container"> |
|||
<div class="container"> |
|||
<div class="oe_styling_v8"> |
|||
<div class="container"> |
|||
<div class="supports"> |
|||
<div class="row justify-content-between"> |
|||
<div class="col-4"> |
|||
<div class="my-3"> |
|||
<img src="./assets/Cybrosys R.png" |
|||
style="width:auto !important; height:40px !important"> |
|||
</div> |
|||
</div> |
|||
<div class="col-6"> |
|||
<div class="row" style="margin-top:10px;"> |
|||
<div class="col"> |
|||
<span><b>Supports: </b></span> |
|||
</div> |
|||
<div class="text-center col" |
|||
style="background-color:#714b67 !important; font-size:0.8rem !important; color:#fff !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:0px !important; min-width:120px !important"> |
|||
Community |
|||
</div> |
|||
<div class="text-center col" |
|||
style="background-color:#714b67 !important; font-size:0.8rem !important; color:#fff !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:0px !important; min-width:120px !important"> |
|||
Enterprise |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="row" style="margin-top:10px;"> |
|||
<div class="col"> |
|||
<span><b>Availability: </b></span> |
|||
</div> |
|||
<div class="text-center col" |
|||
style="border: 1px solid #017E84; font-size:0.8rem !important; color:#017E84 !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:0px !important; min-width:120px !important"> |
|||
<i class="fa fa-times" style="color: red;"></i> Odoo Online |
|||
</div> |
|||
<div class="text-center col" |
|||
style="font-size:0.8rem !important; border:1px solid #714b67; color:#714b67 !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:0px !important; min-width:120px !important"> |
|||
<i class="fa fa-check" style="color: red;"></i> Odoo.sh |
|||
</div> |
|||
<div class="text-center col" |
|||
style="font-size:0.8rem !important; color:#5B899E !important; border:1px solid #5B899E; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:0px !important; min-width:120px !important"> |
|||
<i class="fa fa-check" style="color: green;"></i> On Premise |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<hr/> |
|||
<div class="container"> |
|||
<div> |
|||
<img src="assets/screenshots/Banner.jpg" alt="" |
|||
width="100%"> |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
<!-- END OF HERO --> |
|||
<!-- OVERVIEW --> |
|||
<div class="container"> |
|||
<div class="row m-0 mt-5"> |
|||
|
|||
|
|||
<div class="col-lg-12 d-flex flex-column justify-content-center"> |
|||
<p class="my-1 " style="line-height: 1.8;"> |
|||
The Code Backend Theme V18 Gives You a Fully Modified View with |
|||
a Full Screen Display. |
|||
This is a Minimalist and Elegant Backend Theme for Odoo 18. |
|||
This Theme Will Change Your Old Experience to a New Experience |
|||
With Odoo. |
|||
It is a Perfect Choice for Your Odoo Backend and an Attractive |
|||
Theme for Your Odoo 18. |
|||
It will Give You a Clean Layout with a New Color Combination and |
|||
a Modified Font. It has a Sidebar with |
|||
New App Icons and Company Logo. This Will Change Your Old |
|||
Kanban, List, and Form Views to A Fully Modified View. |
|||
</p> |
|||
<div class="mt-2"> |
|||
<div class="alert " role="alert" |
|||
style="width: 100%; text-align: center; background-color: #ffeca79a;font-size: 0.87rem !important;padding: 0.7rem !important;"> |
|||
<i class="fa fa-exclamation-triangle mr-2" |
|||
aria-hidden="true"></i> |
|||
Please make sure that you install all your apps prior to the |
|||
installation of this theme. |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="row m-0"> |
|||
<div class="my-4 py-3"> |
|||
<h2 class="my-2">Overview</h2> |
|||
|
|||
<div style="width: 8% !important;height: 4px |
|||
!important;background-color: #556EE6 |
|||
!important;border-radius: 0px 6px 6px 0px!important; |
|||
margin-bottom: 0.4rem;"></div> |
|||
<p |
|||
style="line-height: 1.7 !important;font-size: 1rem;width: 90% !important;"> |
|||
Code |
|||
Backend Theme V18 is an Attractive Theme for Your Odoo |
|||
18. |
|||
This Theme Will Improve Your Experience With |
|||
Odoo. |
|||
This is a Minimalist and Elegant Backend Theme for Odoo |
|||
18 |
|||
And Can Offer a Perfect Choice for Your Odoo Backend. |
|||
</p> |
|||
<ul class="p-0 my-3 list-unstyled" |
|||
style="list-style: none!important; "> |
|||
<li class="mb-3"><span |
|||
style="font-size: 1.1rem;font-weight: 500;max-width: 80%;color: #212529 !important; margin-bottom: 1rem !important;"><i |
|||
class="fa fa-check-circle" |
|||
style="color: #556EE6 !important;margin-right: 0.2rem;"></i>Fully responsive</span> |
|||
</li> |
|||
<li class="mb-3"><span |
|||
style="font-size: 1.1rem;font-weight: 500;max-width: 80%;color: #212529 !important; margin-bottom: 1rem !important;"><i |
|||
class="fa fa-check-circle" |
|||
style="color: #556EE6 !important;margin-right: 0.2rem;"></i>The theme has modern design of a new user experience</span> |
|||
</li> |
|||
|
|||
</ul> |
|||
|
|||
|
|||
</div> |
|||
<div class=""> |
|||
|
|||
|
|||
<div class="row m-0 my-5 py-5 align-items-center"> |
|||
|
|||
<div class="col-6"> |
|||
<h2 class="my-2">Fully Responsive Screen</h2> |
|||
<div |
|||
style="width: 20% !important;height: 4px !important;background-color: #556EE6 !important;border-radius: 0px 6px 6px 0px!important; margin-bottom: 0.4rem;"> |
|||
</div> |
|||
<p |
|||
style=" font-size: 1rem;line-height: 1.7; margin-top: 0.5rem;"> |
|||
Now |
|||
take advantage of everything your POS screen |
|||
has to offer even on the go. Our design are now |
|||
fully responsive, enabling you to view and |
|||
manage everything from the comfort. Everything has |
|||
been designed in a |
|||
meticulous fashion so that every view snaps |
|||
itself to fit the size of the device you are |
|||
using, be it smartphones, tablet or any other |
|||
portables, our theme adjusts itself to fit the |
|||
screen size.</p> |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
</div> |
|||
|
|||
|
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
|
|||
</div> |
|||
</div> |
|||
<div class="container p-0"> |
|||
<img src="assets/screenshots/template01.jpg" class="img-responsive" |
|||
width="100% !important" |
|||
height="auto !important"> |
|||
</div> |
|||
|
|||
<div class="container mb-5 p-0" |
|||
style="background-color: #f1f3fff8 !important;border-radius: 0px 0px 12px 12px;"> |
|||
<ul class="nav nav-tabs d-flex justify-content-around list-unstyled" |
|||
style="list-style:none !important; "> |
|||
<li class="col text-center p-1 py-2" |
|||
style="border-bottom: 1px solid #556EE6 !important;"><a |
|||
data-toggle="tab" href="#tab1" |
|||
style="color: #000;font-weight: 600; text-decoration: none;font-size: 1.4rem;">Features</a> |
|||
</li> |
|||
<li class="col text-center p-1 py-2" |
|||
style="border-bottom: 1px solid #556EE6 !important;"><a |
|||
data-toggle="tab" href="#tab2" |
|||
style="color: #000;font-weight: 600; text-decoration: none !important;font-size: 1.4rem;"> |
|||
|
|||
Screenshots</a></li> |
|||
</ul> |
|||
|
|||
<div class="tab-content overflow-hidden" style="overflow: hidden;"> |
|||
<div id="tab1" class="tab-pane fade in active show"> |
|||
<div class="col-mg-12 active" style="padding: 1rem 2rem;"> |
|||
|
|||
|
|||
<div class="row m-0 align-items-center py-4 "> |
|||
<div class="col-lg-12"> |
|||
<span class=" mb-3" |
|||
style="background-color:#f3003f !important;border-radius: 2px !important;font-size:0.8rem;color:#fff !important;padding: 2px 6px;">New</span> |
|||
<h2 class="my-2">Enhanced Interface Experience</h2> |
|||
<div |
|||
style="width: 20% !important;height: 4px !important;background-color: #556EE6 !important;border-radius: 0px 6px 6px 0px!important; margin-bottom: 0.4rem;"> |
|||
</div> |
|||
|
|||
<p |
|||
style=" font-size: 1rem;line-height: 1.7;margin-top: 0.5rem;"> |
|||
The new feature on the point of sale screen has |
|||
transitioned the navigation bar to a sidebar, enhancing |
|||
the interface experience. With this update, the order |
|||
interface now resides on the right side of the screen, |
|||
offering a streamlined workflow. Additionally, hovering |
|||
over elements allows for easy identification of labels, |
|||
improving user interaction and navigation efficiency. |
|||
This new interface brings a fresh and intuitive approach |
|||
to the user experience, making tasks smoother and more |
|||
manageable.</p> |
|||
|
|||
|
|||
</div> |
|||
<div class="col-lg-12"> |
|||
<div> |
|||
<img src="assets/screenshots/Desktop_view 1.png" |
|||
width="80%" |
|||
height="auto" |
|||
class="img-responsive rounded" |
|||
style="box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2) !important;"> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
<div id="tab2" class="tab-pane fade"> |
|||
<div class="col-mg-12 d-flex align-items-center flex-column active |
|||
justify-content-center" style="padding: 1rem 2rem;"> |
|||
|
|||
<div class="mb-3" style="max-width: 90%;"> |
|||
<div class="d-flex align-items-center gap-2 my-3"> <span |
|||
style="margin-right: 0.4rem !important; font-size: 1rem; |
|||
font-weight: 400; |
|||
color: #f3003f;">01</span> |
|||
<p class="m-0 bold" |
|||
style="font-weight: 500 !important;color: #212529 !important;"> |
|||
Order Screen</p> |
|||
</div> |
|||
<img src="assets/screenshots/Desktop_view 1.png" width="100%" |
|||
height="auto" |
|||
class="img-responsive" |
|||
style="box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2)!important;"> |
|||
</div> |
|||
<div class="mb-3" style="max-width: 90%;"> |
|||
<div class="d-flex align-items-center gap-2 my-3"> <span |
|||
style="margin-right: 0.4rem !important; font-size: 1rem; |
|||
font-weight: 400; |
|||
color: #f3003f;">02</span> |
|||
<p class="m-0 bold" |
|||
style="font-weight: 500 !important;color: #212529 !important; "> |
|||
Payment Screen</p> |
|||
</div> |
|||
<img src="assets/screenshots/Desktop_view 3.png" width="100%" |
|||
height="auto" |
|||
class="img-responsive"> |
|||
</div> |
|||
<div class="mb-3" style="max-width: 90%;"> |
|||
<div class="d-flex align-items-center gap-2 my-3"> <span |
|||
style="margin-right: 0.4rem !important; font-size: 1rem; |
|||
font-weight: 400; |
|||
color: #f3003f;">03</span> |
|||
<p class="m-0 bold" |
|||
style="font-weight: 500 !important;color: #212529 !important;"> |
|||
Customer List Screen |
|||
</p> |
|||
</div> |
|||
<img src="assets/screenshots/Desktop_view 2.png" width="100%" |
|||
height="auto" |
|||
class="img-responsive" |
|||
style="box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2)!important;"> |
|||
</div> |
|||
|
|||
<div class="mb-3" style="max-width: 90%;"> |
|||
<div class="d-flex align-items-center gap-2 my-3"> <span |
|||
style="margin-right: 0.4rem !important; font-size: 1rem; |
|||
font-weight: 400; |
|||
color: #f3003f;">04</span> |
|||
<p class="m-0 bold" |
|||
style="font-weight: 500 !important;color: #212529 !important; "> |
|||
Orders |
|||
</p> |
|||
</div> |
|||
<img src="assets/screenshots/Desktop_view 4.png" width="100%" |
|||
height="auto" |
|||
class="img-responsive" |
|||
style="box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2)!important;"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
<div class="container mt-5"> |
|||
<div |
|||
class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4"> |
|||
<p class="m-0" |
|||
style="font-weight: 600; font-size: 24px; color:#000 !important">Our |
|||
Services</p> |
|||
|
|||
</div> |
|||
|
|||
</div> |
|||
<div class="container my-5"> |
|||
|
|||
<div class="row py-3 m-0"> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px !important; position: relative;border-radius: 4px;"> |
|||
|
|||
<div |
|||
style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div |
|||
style="background-color:#13EA36 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="images/cogs.png" alt="service-icon" width="38px" |
|||
height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Customization |
|||
</p> |
|||
|
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
|||
|
|||
<div |
|||
style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div |
|||
style="background-color:#DBC711; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="images/wrench.png" alt="service-icon" width="38px" |
|||
height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Implementation |
|||
</p> |
|||
|
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px !important; position: relative; border-radius: 4px;"> |
|||
|
|||
<div |
|||
style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%) !important;"> |
|||
<div |
|||
style="background-color:#FF6B6B ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25) !important;"> |
|||
<img src="images/lifebuoy.png" alt="service-icon" |
|||
width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Support</p> |
|||
|
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px !important; position: relative; border-radius: 4px;"> |
|||
|
|||
<div |
|||
style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%) !important;"> |
|||
<div |
|||
style="background-color:#FFA801 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25) !important;"> |
|||
<img src="images/user.png" alt="service-icon" width="38px" |
|||
height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Hire Odoo Developer |
|||
</p> |
|||
|
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px !important; position: relative; border-radius: 4px;"> |
|||
|
|||
<div |
|||
style="position: absolute; top: 0%; left: 50% !important; transform: translate(-50%, -50%) !important;"> |
|||
<div |
|||
style="background-color:#54A0FF; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25) !important;"> |
|||
<img src="images/puzzle.png" alt="service-icon" width="38px" |
|||
height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Integration</p> |
|||
|
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px !important; position: relative;border-radius: 4px;"> |
|||
|
|||
<div |
|||
style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%) !important;"> |
|||
<div |
|||
style="background-color:#6D7680 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25) !important;"> |
|||
<img src="images/update.png" alt="service-icon" width="38px" |
|||
height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Migration</p> |
|||
|
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px !important; position: relative;border-radius: 4px;"> |
|||
|
|||
<div |
|||
style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%) !important;"> |
|||
<div |
|||
style="background-color:#786FA6 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25) !important;"> |
|||
<img src="images/consultation.png" alt="service-icon" |
|||
width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Consultancy</p> |
|||
|
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px !important;position: relative;border-radius: 4px;"> |
|||
|
|||
<div |
|||
style="position: absolute; top: 0%; left: 50% !important; transform: translate(-50%, -50%) !important;"> |
|||
<div |
|||
style="background-color:#F8A5C2 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25) !important;"> |
|||
<img src="images/training.png" alt="service-icon" |
|||
width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Implementation |
|||
</p> |
|||
|
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px !important; position: relative;border-radius: 4px;"> |
|||
|
|||
<div |
|||
style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%) !important;"> |
|||
<div |
|||
style="background-color:#E6BE26; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25) !important;"> |
|||
<img src="images/license.png" alt="service-icon" |
|||
width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Licensing |
|||
Consultancy</p> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
<div class="container mt-5"> |
|||
<div |
|||
class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4"> |
|||
<p class="m-0" |
|||
style="font-weight: 600; font-size: 24px; color:#000 !important">Our |
|||
Industries</p> |
|||
|
|||
</div> |
|||
|
|||
</div> |
|||
<div class="container"> |
|||
<div class="row m-0 my-5 py-4"> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209) !important; border-bottom: 1px solid rgb(209, 209, 209) !important; padding: 30px; box-shadow: 6px 0 10px rgba(228, 227, 227, 0.373) !important;"> |
|||
<img src="images/trading-black.png" width="42px" height="auto" |
|||
alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Trading</p> |
|||
<p>Easily procure and sell your products</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209) !important;border-bottom: 1px solid rgb(209, 209, 209) !important; padding: 30px;"> |
|||
<img src="images/pos-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">POS</p> |
|||
<p>Easy configuration and convivial experience</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209) !important;border-bottom: 1px solid rgba(0, 0, 0, 0.2) !important; padding: 30px; box-shadow: 0 5px 10px rgba(228, 227, 227, 0.373) !important"> |
|||
<img src="images/education-black.png" width="42px" height="auto" |
|||
alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Education</p> |
|||
<p>A platform for educational management</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-bottom: 1px solid rgb(209, 209, 209) !important; padding: 30px; "> |
|||
<img src="images/manufacturing-black.png" width="42px" height="auto" |
|||
alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Manufacturing</p> |
|||
<p>Plan, track and schedule your operations</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209) !important; padding: 30px;"> |
|||
<img src="images/ecom-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">E-commerce & Website</p> |
|||
<p>Mobile friendly, awe-inspiring product pages</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209) !important; padding: 30px;box-shadow: 0 -5px 10px rgba(228, 227, 227, 0.373) !important;"> |
|||
<img src="images/service-black.png" width="42px" height="auto" |
|||
alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Service Management</p> |
|||
<p>Keep track of services and invoice</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209) !important; padding: 30px; "> |
|||
<img src="images/restaurant-black.png" width="42px" height="auto" |
|||
alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Restaurant</p> |
|||
<p>Run your bar or restaurant methodically</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style=" padding: 30px;box-shadow: -5px 0 10px rgba(228, 227, 227, 0.373) !important;"> |
|||
<img src="images/hotel-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Hotel Management</p> |
|||
<p>An all-inclusive hotel management application</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
<div class="container mt-5"> |
|||
<div |
|||
class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-5"> |
|||
<p class="m-0" |
|||
style="font-weight: 600; font-size: 24px; color:#000 !important;"> |
|||
Support |
|||
</p> |
|||
|
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
<div class="container my-5"> |
|||
<div class="row m-0" style="background-color: #FFFAFE;"> |
|||
<div class="col-md-6 pb-4 d-flex align-items-center justify-content-center" |
|||
style="border-right: 1px solid #D9D9D9!important;"> |
|||
<div style="padding: 30px;"> |
|||
<div class="d-flex align-items-center"> |
|||
<img src="images/support (1) 1.svg" alt="" width="60px" |
|||
style="margin-right: 12px;"> |
|||
<div style="padding: 0px 8px;"> |
|||
<span |
|||
style="color: #714B67;font-size: 24px;font-weight: 600;padding-bottom: 1rem!important;">Need |
|||
Help?</span> |
|||
<p class="m-0" style="color:#718096;">Got questions or need |
|||
help? Get in touch.</p> |
|||
<div style="font-weight: 400;"><span><img |
|||
src="images/support-email.svg" alt="" |
|||
width="18px" |
|||
style="filter: invert(1) !important;margin-right: 0.8rem;"></span>odoo@cybrosys.com |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
<div class="col-md-6 pb-4 d-flex align-items-center justify-content-center"> |
|||
<div style="padding: 30px;"> |
|||
<div class="d-flex align-items-center"> |
|||
<img src="images/whatsapp 1.svg" alt="" width="60px" |
|||
style="margin-right: 12px;"> |
|||
<div> |
|||
<span |
|||
style="color: #714B67;font-size: 24px;font-weight: 600;">WhatsApp</span> |
|||
<p class="m-0" style="color:#718096;">Say hi to us on |
|||
WhatsApp!</p> |
|||
<div style="font-weight: 400; font-size: 16px;"><span><img |
|||
src="images/phone.svg" alt="" width="14px" |
|||
style="filter: invert(1) !important; margin-right: 0.8rem;"></span>+91 |
|||
99456767686 |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
|
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</main> |
|||
|
|||
|
|||
</div> |
|||
<script name="plausible" defer="defer" src="https://download.odoo.com/js/plausi_odoo.js" |
|||
data-domain="odoo.com"></script> |
|||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> |
|||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> |
|||
</body> |
|||
</html> |
After Width: | Height: | Size: 552 KiB |
@ -0,0 +1,528 @@ |
|||
.main-app { |
|||
background: linear-gradient(to right bottom, rgb(85, 100, 194), rgb(58, 46, 141)); |
|||
} |
|||
|
|||
.main-app .sidebar { |
|||
width: 80px; |
|||
height: 100%; |
|||
left: 0; |
|||
top: 0; |
|||
bottom: 0; |
|||
background: #fff; |
|||
background: linear-gradient(to right bottom, rgb(85, 100, 194), rgb(58, 46, 141)); |
|||
} |
|||
|
|||
@media (max-width: 768px) { |
|||
.main-app .sidebar { |
|||
width: 60px; |
|||
} |
|||
} |
|||
|
|||
.main-app .main-menu { |
|||
margin-block-start: 0; |
|||
margin-block-end: 0; |
|||
margin-inline-start: 0px; |
|||
margin-inline-end: 0px; |
|||
padding-inline-start: 0; |
|||
display: flex; |
|||
flex-direction: column; |
|||
align-items: center; |
|||
} |
|||
|
|||
.main-app .menu-item { |
|||
list-style: none; |
|||
position: relative; |
|||
width: 85px; |
|||
height: 65px; |
|||
} |
|||
|
|||
.main-app .menu-txt { |
|||
opacity: 0; |
|||
width: 0px; |
|||
min-width: 0px; |
|||
overflow: hidden; |
|||
transition: 300ms linear; |
|||
transition-delay: 250ms; |
|||
display: flex; |
|||
align-items: center; |
|||
position: relative; |
|||
top: 2px; |
|||
white-space: nowrap; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.main-app .menu-a { |
|||
padding: 35px 33.5px; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
text-decoration: none; |
|||
} |
|||
|
|||
.main-app .menu-icon { |
|||
display: block; |
|||
font-size: 1.5rem; |
|||
color: #fefefe; |
|||
position: relative; |
|||
z-index: 100; |
|||
transition: 400ms; |
|||
} |
|||
|
|||
@media (min-width: 768px) { |
|||
.main-app .menu-item:hover .menu-txt { |
|||
opacity: 1; |
|||
width: 100%; |
|||
min-width: 40px; |
|||
padding: 0px 10px; |
|||
transition-delay: 0s; |
|||
color: #4c4c4c; |
|||
font-size: 15px; |
|||
font-weight: 600; |
|||
align-self: center; |
|||
} |
|||
.main-app .menu-item:hover .menu-icon { |
|||
color: #0f0f0f; |
|||
} |
|||
} |
|||
|
|||
.main-app .menu-txt-hld { |
|||
position: absolute; |
|||
z-index: 99; |
|||
background: rgba(255, 255, 255, 0); |
|||
border: 1px solid rgba(0, 0, 0, 0); |
|||
border-radius: 10px; |
|||
font-size: .94rem; |
|||
box-shadow: 0px 0px 8px rgba(0, 0, 0, 0); |
|||
padding: 9.5px 8px; |
|||
transition: 250ms linear; |
|||
display: flex; |
|||
align-items: center; |
|||
transition-delay: 300ms; |
|||
left: 22px; |
|||
} |
|||
|
|||
@media (min-width: 768px) { |
|||
.main-app .menu-item:hover .menu-txt-hld { |
|||
box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.07); |
|||
background: rgb(255, 255, 255); |
|||
border: 1px solid rgba(0, 0, 0, 0.05); |
|||
transition-delay: 0ms; |
|||
left: 5px; |
|||
} |
|||
} |
|||
|
|||
.main-app .active .menu-icon { |
|||
color: #223b6e; |
|||
} |
|||
|
|||
.custom-header .card { |
|||
margin-left: 20px; |
|||
} |
|||
.custom-header .top-container{ |
|||
display: flex; |
|||
align-items: center; |
|||
} |
|||
.custom-header .profile-image{ |
|||
border-radius: 10px; |
|||
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); |
|||
} |
|||
.custom-header .name{ |
|||
font-size: 15px; |
|||
font-weight: bold; |
|||
color: #251F1F; |
|||
position: relative; |
|||
top: 0px; |
|||
} |
|||
.custom-header .mail{ |
|||
font-size: 14px !important; |
|||
color: #251F1F; |
|||
position: relative; |
|||
top: -15px; |
|||
} |
|||
|
|||
.product-card { |
|||
display: flex; |
|||
flex-direction: column; |
|||
align-items: center; |
|||
min-width: 150px; |
|||
max-width: 185px; |
|||
border-radius: 5px; |
|||
overflow: hidden; |
|||
box-shadow: 0 4px 8px 0 rgb(0 0 0 / 20%); |
|||
transition: all 0.3s ease; |
|||
margin: 2px; |
|||
background-color: white; |
|||
} |
|||
|
|||
.product-card .title { |
|||
font-size: 1.2em; |
|||
font-weight: bold; |
|||
margin: 10px; |
|||
} |
|||
|
|||
.product-card .price { |
|||
color: #888; |
|||
margin: 5px; |
|||
} |
|||
|
|||
.pos .product-list { |
|||
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)) !important; |
|||
} |
|||
|
|||
.pos .product-img { |
|||
width: 85%; |
|||
} |
|||
|
|||
.pos .product-img img { |
|||
width: 100%; |
|||
height: 130px; |
|||
object-fit: cover; |
|||
border-radius: 5px; |
|||
margin-top: 10px; |
|||
} |
|||
|
|||
.pos .products-widget .products-widget-control { |
|||
box-shadow: unset !important; |
|||
padding: 5px; |
|||
|
|||
} |
|||
|
|||
.pos .rightpane { |
|||
background: #ededed !important; |
|||
} |
|||
|
|||
.box{ |
|||
position: relative; |
|||
margin-left: auto; |
|||
right: 10px; |
|||
} |
|||
@media (max-width: 768px) { |
|||
.box{ |
|||
position: absolute; |
|||
} |
|||
} |
|||
|
|||
[badge]:after { |
|||
background: #a8a8a8; |
|||
border-radius: 10rem; |
|||
color: #fff; |
|||
content: attr(badge); |
|||
font-size: small; |
|||
min-width: 18px; |
|||
padding: 2px; |
|||
position: absolute; |
|||
text-align: center; |
|||
left: 1.7em; |
|||
bottom: 1.7em; |
|||
z-index: 999; |
|||
} |
|||
|
|||
@media (min-width: 768px) { |
|||
.pos .leftpane { |
|||
max-width: 500px; |
|||
height: calc(100% - 30px); |
|||
margin: 15px; |
|||
box-shadow: 0 4px 8px 0 rgb(0 0 0 / 47%); |
|||
border: unset; |
|||
} |
|||
} |
|||
|
|||
.pos .order-container { |
|||
border-radius: 10px 10px 0px 0px; |
|||
} |
|||
|
|||
.pos *::-webkit-scrollbar { |
|||
width: 0 !important; |
|||
} |
|||
|
|||
.pos .screen { |
|||
background: #ededed !important; |
|||
} |
|||
|
|||
.pos .mode-button.selected-mode { |
|||
background: linear-gradient(to right bottom, rgb(85, 100, 194), rgb(58, 46, 141)); |
|||
} |
|||
|
|||
.pos .button.validation { |
|||
background: linear-gradient(to right bottom, rgb(85, 100, 194), rgb(58, 46, 141)); |
|||
} |
|||
.pos .button.back-button { |
|||
color: white; |
|||
} |
|||
|
|||
.pos .button.validation:hover { |
|||
background: linear-gradient(to right bottom, rgb(61 72 142), rgb(63 54 128)) !important; |
|||
} |
|||
|
|||
.pos .button.pay-order-button { |
|||
background: linear-gradient(to right bottom, rgb(85, 100, 194), rgb(58, 46, 141)); |
|||
} |
|||
|
|||
.pos .button.pay-order-button:hover { |
|||
background: linear-gradient(to right bottom, rgb(61 72 142), rgb(63 54 128)) !important; |
|||
} |
|||
|
|||
.pos .order .orderline.selected { |
|||
background: rgb(70 71 166 / 33%) !important; |
|||
} |
|||
|
|||
.pos .oe_status { |
|||
cursor: default; |
|||
} |
|||
|
|||
.pos .oe_status .d-inline-block{ |
|||
display: inline-block; |
|||
} |
|||
|
|||
.pos .mode-button.selected-mode:hover { |
|||
background: linear-gradient(to right bottom, rgb(74 82 131), rgb(58, 46, 141)) !important; |
|||
} |
|||
|
|||
.pos .category-button { |
|||
display: inline-flex; |
|||
margin: 5px !important; |
|||
width: 160px; |
|||
height: 60px; |
|||
background: #fff; |
|||
border: 1px solid #d7d7d7; |
|||
border-radius: 10px; |
|||
cursor: pointer; |
|||
box-shadow: 0 4px 8px 0 rgb(0 0 0 / 20%); |
|||
} |
|||
|
|||
.pos .category-button .category-img { |
|||
position: relative; |
|||
width: 55px; |
|||
text-align: center; |
|||
cursor: pointer; |
|||
object-fit: contain; |
|||
padding: 5px; |
|||
height: calc(100% - 10px); |
|||
} |
|||
|
|||
.pos .category-button .category-img img { |
|||
object-fit: cover; |
|||
width: 100%; |
|||
height: 50px; |
|||
object-fit: cover; |
|||
border-radius: 5px; |
|||
} |
|||
|
|||
.pos .category-button .category-name { |
|||
display: inline-grid; |
|||
position: relative; |
|||
width: unset; |
|||
align-content: center; |
|||
padding-top: unset; |
|||
font-size: 14px; |
|||
font-family: 'Roboto', sans-serif; |
|||
color: #251F1F; |
|||
} |
|||
|
|||
.pos .category-list { |
|||
background: none; |
|||
} |
|||
|
|||
.pos .categories { |
|||
border-bottom: none; |
|||
} |
|||
|
|||
.pos .category-list-scroller { |
|||
max-height: 85px; |
|||
} |
|||
|
|||
.pos .breadcrumb-button { |
|||
color: #251F1F; |
|||
} |
|||
|
|||
.pos .breadcrumb-arrow { |
|||
width: 10px; |
|||
} |
|||
|
|||
.pos a.button { |
|||
color: #fff; |
|||
} |
|||
|
|||
.ticket-screen .controls button.highlight { |
|||
background: linear-gradient(to right bottom, rgb(85, 100, 194), rgb(58, 46, 141)); |
|||
border-color: #494cab; |
|||
} |
|||
|
|||
.pos .orders .order-row:hover, .pos .orders .order-row.highlight { |
|||
background-color: #4544a2d9; |
|||
} |
|||
|
|||
.pos .control-button.highlight, .pos .button.highlight { |
|||
color:#fff !important; |
|||
background: linear-gradient(to right bottom, rgb(85, 100, 194), rgb(58, 46, 141)) !important; |
|||
border-color: #494cab !important; |
|||
} |
|||
|
|||
.pos .popup .button { |
|||
color: #111; |
|||
border: 1px solid #484aa8; |
|||
} |
|||
|
|||
.screen .top-content .button { |
|||
border: 1px solid #484aa8; |
|||
} |
|||
|
|||
.pos .partner-list tr.partner-line:hover { |
|||
color:#fff; |
|||
background: linear-gradient(to right bottom, rgb(85, 100, 194), rgb(58, 46, 141)) !important; |
|||
} |
|||
#btn-create-cust{ |
|||
color:#fff; |
|||
background: linear-gradient(to right bottom, rgb(85, 100, 194), rgb(58, 46, 141)) !important; |
|||
} |
|||
#btn-confirm{ |
|||
color:#fff; |
|||
background: linear-gradient(to right bottom, rgb(85, 100, 194), rgb(58, 46, 141)) !important; |
|||
} |
|||
|
|||
.pos textarea:focus { |
|||
box-shadow: 0px 0px 0px 3px #484aa8; |
|||
} |
|||
|
|||
.pos .category-simple-button:active { |
|||
color: #484aa8; |
|||
} |
|||
|
|||
.pos .switchpane .btn-switchpane.secondary { |
|||
color: #fff; |
|||
} |
|||
|
|||
.payment-screen .paymentlines-empty .total { |
|||
color: #484aa8; |
|||
} |
|||
|
|||
.pos .rightpane-header { |
|||
flex-direction: unset; |
|||
border-radius: 5px; |
|||
} |
|||
|
|||
.pos .partner-list tr.partner-line.highlight { |
|||
color:#fff; |
|||
background: linear-gradient(to right bottom, rgb(85, 100, 194), rgb(58, 46, 141)) !important; |
|||
} |
|||
|
|||
.menu-item .oe_status i { |
|||
font-size: 22px; |
|||
} |
|||
|
|||
.category-simple-button{ |
|||
font-weight:bold; |
|||
margin-left:10px; |
|||
padding:5px; |
|||
transition: all 0.8s ease; |
|||
} |
|||
.category-simple-button:hover{ |
|||
background: #5564c2;; |
|||
border-radius:5px; |
|||
color:#fff; |
|||
} |
|||
|
|||
.btn.cashier-name{ |
|||
background:none !important; |
|||
} |
|||
.bg-100, .text-bg-100 { |
|||
--background-color: RGBA(248, 249, 250, var(--bg-opacity, 1)); |
|||
background-color: rgb(234 236 237) !important; |
|||
} |
|||
.search-products .h-100{ |
|||
height:30px !important; |
|||
} |
|||
|
|||
.products-widget-control-category{ |
|||
border-radius:7px; |
|||
margin-right: 7px; |
|||
margin-left: 9px; |
|||
margin-bottom:5px; |
|||
} |
|||
|
|||
#search-products .input-container { |
|||
position: relative; |
|||
} |
|||
|
|||
#search-products .input-container input { |
|||
opacity: 0; /* Hide input visually */ |
|||
width: 0; /* Collapse input width */ |
|||
min-width: 0 !important; |
|||
transition: opacity 0.3s ease-in-out, width 0.3s ease-in-out; /* Add transition for smooth animation */ |
|||
} |
|||
|
|||
#search-products .input-container:hover input { |
|||
opacity: 1; /* Show input on hover */ |
|||
width: 300px; /* Expand input width on hover */ /* Adjust width as needed */ |
|||
} |
|||
|
|||
/* Optional animation for icon */ |
|||
#search-products .input-container:hover i { |
|||
animation: search-icon-expand 0.8s ease-in-out; |
|||
} |
|||
|
|||
@keyframes search-icon-expand { |
|||
from { transform: scale(1); } |
|||
to { transform: scale(1.6); } /* Adjust scale as desired */ |
|||
} |
|||
#search-products .input-group{ |
|||
width:34px; |
|||
border-radius:25px; |
|||
background:none !important; |
|||
transition: opacity 2s ease-in-out, width 0.5s ease-in-out; |
|||
} |
|||
#search-products .input-group:hover{ |
|||
width:300px; |
|||
border-radius:20px; |
|||
background:#fff !important; |
|||
} |
|||
.home-category-button{ |
|||
padding:10px; |
|||
margin:15px; |
|||
} |
|||
|
|||
#search-products .input-group > .form-control { |
|||
border: solid 1px; |
|||
border-radius: 20px; |
|||
} |
|||
.menu-a.SyncNotification .btn-light{ |
|||
border:none !important; |
|||
background-color:transparent !important; |
|||
} |
|||
|
|||
.menu-item .menu-txt-hld .px-4{ |
|||
padding-left:5px !important; |
|||
color:#fff; |
|||
} |
|||
.btn-light.active{ |
|||
color: #fff; |
|||
background-color: #71639e; |
|||
border-color: #71639e; |
|||
} |
|||
|
|||
@media (max-width: 768px) { |
|||
.products-widget-control .search-products .lg-screen, .products-widget-control .search-products .lg-screen-cat { |
|||
display: none !important; |
|||
} |
|||
} |
|||
|
|||
@media (min-width: 769px) { |
|||
.products-widget-control .sm-screen, .products-widget-control .sm-screen-cat { |
|||
display: none !important; |
|||
} |
|||
} |
|||
|
|||
.products-widget-control .sm-screen .input-group.h-100{ |
|||
height: 65% !important; |
|||
} |
|||
.cashier-name { |
|||
max-width: 270px; |
|||
border: none !important; |
|||
background: transparent !important; |
|||
box-shadow: none !important; |
|||
} |
|||
.highlight { |
|||
background-color: #5564c2; |
|||
color: white; |
|||
border-radius: 4px; |
|||
} |
@ -0,0 +1,72 @@ |
|||
/** @odoo-module **/ |
|||
import { ProductScreen } from "@point_of_sale/app/screens/product_screen/product_screen"; |
|||
import { useService } from "@web/core/utils/hooks"; |
|||
import { _t } from "@web/core/l10n/translation"; |
|||
import { patch } from "@web/core/utils/patch"; |
|||
import { useState } from "@odoo/owl"; |
|||
import { ProxyStatus } from "@point_of_sale/app/navbar/proxy_status/proxy_status"; |
|||
import { ClosePosPopup } from "@point_of_sale/app/navbar/closing_popup/closing_popup"; |
|||
import { SaleDetailsButton } from "@point_of_sale/app/navbar/sale_details_button/sale_details_button"; |
|||
import { CashMovePopup } from "@point_of_sale/app/navbar/cash_move_popup/cash_move_popup"; |
|||
import { TicketScreen } from "@point_of_sale/app/screens/ticket_screen/ticket_screen"; |
|||
import { BackButton } from "@point_of_sale/app/screens/product_screen/action_pad/back_button/back_button"; |
|||
import { CashierName } from "@point_of_sale/app/navbar/cashier_name/cashier_name"; |
|||
|
|||
ProductScreen.components = { |
|||
...ProductScreen.components, |
|||
ProxyStatus, |
|||
SaleDetailsButton, |
|||
BackButton, |
|||
CashierName, |
|||
} |
|||
|
|||
patch(ProductScreen.prototype, { |
|||
setup() { |
|||
super.setup(...arguments); |
|||
this.hardwareProxy = useService("hardware_proxy"); |
|||
this.selectedCategoryId = null; |
|||
}, |
|||
setSelectedCategory(categoryId) { |
|||
this.selectedCategoryId = categoryId; |
|||
this.pos.setSelectedCategory(categoryId); |
|||
this.render(); // manually trigger re-render
|
|||
}, |
|||
async closeSession() { |
|||
const info = await this.pos.getClosePosInfo(); |
|||
this.dialog.add(ClosePosPopup, info); |
|||
}, |
|||
onCashMoveButtonClick() { |
|||
this.hardwareProxy.openCashbox(_t("Cash in / out")); |
|||
this.dialog.add(CashMovePopup); |
|||
}, |
|||
get orderCount() { |
|||
return this.pos.get_open_orders().length; |
|||
}, |
|||
async onTicketButtonClick() { |
|||
if (this.isTicketScreenShown) { |
|||
this.pos.closeScreen(); |
|||
} else { |
|||
if (this._shouldLoadOrders()) { |
|||
try { |
|||
this.pos.setLoadingOrderState(true); |
|||
const message = await this.pos._syncAllOrdersFromServer(); |
|||
if (message) { |
|||
this.notification.add(message, 5000); |
|||
} |
|||
} finally { |
|||
this.pos.setLoadingOrderState(false); |
|||
this.pos.showScreen("TicketScreen"); |
|||
} |
|||
} else { |
|||
this.pos.showScreen("TicketScreen"); |
|||
} |
|||
} |
|||
}, |
|||
|
|||
_shouldLoadOrders() { |
|||
return this.pos.config.trusted_config_ids.length > 0; |
|||
}, |
|||
showBackButton() { |
|||
return this.pos.showBackButton() && this.ui.isSmall; |
|||
}, |
|||
}); |
@ -0,0 +1,7 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<templates id="template" xml:space="preserve"> |
|||
<!-- Replace Navbar from pos --> |
|||
<t t-name="point_of_sale.Chrome" t-inherit="point_of_sale.Chrome" t-inherit-mode="extension"> |
|||
<xpath expr="//Navbar" position="replace"/> |
|||
</t> |
|||
</templates> |
@ -0,0 +1,20 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<templates id="template" xml:space="preserve"> |
|||
<!-- Current cashier details --> |
|||
<t t-name="CashierName" t-inherit="point_of_sale.CashierName" t-inherit-mode="extension" owl="1"> |
|||
<xpath expr="//button[hasclass('btn-light')]//img[hasclass('avatar')]" position="attributes"> |
|||
<attribute name="class" remove="avatar" add="img-fluid profile-image avatar cashier-name" separator=" "/> |
|||
<attribute name="width">70</attribute> |
|||
</xpath> |
|||
<xpath expr="//button[hasclass('btn-light')]" position="attributes"> |
|||
<attribute name="class" remove="avatar" add="cashier-name" separator=" "/> |
|||
</xpath> |
|||
<xpath expr="//button[hasclass('btn-light')]//span[hasclass('username')]" position="replace"/> |
|||
<xpath expr="//button[hasclass('btn-light')]//img[hasclass('avatar')]" position="after"> |
|||
<div style="" class="d-inline-block"> |
|||
<div><h3 class="name username" style="text-align: left;"><t t-esc="username"/></h3></div> |
|||
<div><h5 class="mail" style="text-align: left;"><t t-esc="email"/></h5></div> |
|||
</div> |
|||
</xpath> |
|||
</t> |
|||
</templates> |
@ -0,0 +1,8 @@ |
|||
<templates id="template" xml:space="preserve"> |
|||
<!-- Add attribute for confirm button --> |
|||
<t t-name="pos_theme_sapphire.CashMovePopup" t-inherit="point_of_sale.CashMovePopup" t-inherit-mode="extension"> |
|||
<xpath expr="//button[hasclass('confirm')]" position="attributes"> |
|||
<attribute name="id">btn-confirm</attribute> |
|||
</xpath> |
|||
</t> |
|||
</templates> |
@ -0,0 +1,8 @@ |
|||
<templates id="template" xml:space="preserve"> |
|||
<!-- Add attribute for create button --> |
|||
<t t-name="pos_theme_sapphire.PartnerList" t-inherit="point_of_sale.PartnerList" t-inherit-mode="extension"> |
|||
<xpath expr="//button[hasclass('btn-primary')]" position="attributes"> |
|||
<attribute name="id">btn-create-cust</attribute> |
|||
</xpath> |
|||
</t> |
|||
</templates> |
@ -0,0 +1,29 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<templates id="template" xml:space="preserve"> |
|||
<!-- Product card section --> |
|||
<t t-name="ProductCard" t-inherit="point_of_sale.ProductCard" |
|||
t-inherit-mode="extension"> |
|||
<xpath expr="//article" position="replace"> |
|||
<div tabindex="0" |
|||
class="product-card" |
|||
t-on-keypress="(event) => event.code === 'Space' ? props.onClick(event) : ()=>{}" |
|||
t-on-click="props.onClick" |
|||
t-att-data-product-id="props.productId" |
|||
t-attf-aria-labelledby="article_product_{{props.productId}}"> |
|||
<div t-if="props.imageUrl" class="product-img"> |
|||
<img class="w-100" t-att-src="props.imageUrl" |
|||
t-att-alt="props.name"/> |
|||
</div> |
|||
<div class="product-content d-flex flex-column justify-content-between h-100 mx-2 py-1"> |
|||
<div class="overflow-hidden lh-sm fw-bolder product-name" |
|||
t-att-class="{'no-image': !props.imageUrl}" |
|||
t-attf-id="article_product_{{props.productId}}" |
|||
t-esc="props.name"/> |
|||
<span t-if="props.price" |
|||
class="price-tag text-primary py-1 fw-bolder" |
|||
t-esc="props.price"/> |
|||
</div> |
|||
</div> |
|||
</xpath> |
|||
</t> |
|||
</templates> |
@ -0,0 +1,244 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<templates id="template" xml:space="preserve"> |
|||
<!-- <!– Point of sale order session page –>--> |
|||
<t t-inherit="point_of_sale.ProductScreen" t-inherit-mode="extension"> |
|||
<xpath expr='//div[hasclass("product-screen")]' position="replace"> |
|||
<div class="product-screen d-flex h-100 bg-100" t-att-class="{'flex-grow-1 w-100 mw-100': ui.isSmall, 'd-none': ui.isSmall and pos.mobile_pane !== 'left'}" > |
|||
<div class="main-app"> |
|||
<div class="sidebar"> |
|||
<nav class="main-nav" style="height: 100%"> |
|||
<ul class="main-menu" style="height: 100%"> |
|||
<li class="menu-item" t-if="showBackButton()"> |
|||
<a href="#" class="menu-a" target="_blank"> |
|||
<div class="menu-txt-hld" t-on-click=""> |
|||
<span class="menu-txt">Back</span> |
|||
<BackButton t-if="showBackButton()"/> |
|||
</div> |
|||
</a> |
|||
</li> |
|||
<li class="menu-item"> |
|||
<a href="#" class="menu-a" target="_blank"> |
|||
<div class="ticket-button menu-txt-hld with-badge" |
|||
t-on-click="onTicketButtonClick" |
|||
t-att-badge="orderCount"> |
|||
<i class="fa fa-ticket menu-icon"/> |
|||
<span class="menu-txt">Orders</span> |
|||
</div> |
|||
</a> |
|||
</li> |
|||
<li class="menu-item"> |
|||
<a href="#" class="menu-a" target="_blank"> |
|||
<div class="cash-move-button menu-txt-hld" |
|||
t-on-click="onCashMoveButtonClick"> |
|||
<i class="fa fa-money menu-icon"/> |
|||
<span class="menu-txt">Cash In/Out</span> |
|||
</div> |
|||
</a> |
|||
</li> |
|||
<li class="menu-item"> |
|||
</li> |
|||
<li class="menu-item"> |
|||
<ProxyStatus t-if="pos.config.use_proxy"/> |
|||
</li> |
|||
<li class="menu-item" style="position: absolute; bottom: 60px;"> |
|||
<a href="#" class="menu-a" target="_blank"> |
|||
<div class="header-button menu-txt-hld" |
|||
t-on-click="() => pos.closePos()"> |
|||
<i class="fa fa-pause menu-icon"/> |
|||
<span class="menu-txt">Backend</span> |
|||
</div> |
|||
</a> |
|||
</li> |
|||
<li class="menu-item" style="position: absolute; bottom: 5px;"> |
|||
<a href="#" class="menu-a" target="_blank"> |
|||
<div class="header-button menu-txt-hld" t-on-click="closeSession"> |
|||
<i class="fa fa-sign-out menu-icon"/> |
|||
<span class="menu-txt">Logout</span> |
|||
</div> |
|||
</a> |
|||
</li> |
|||
</ul> |
|||
</nav> |
|||
</div> |
|||
</div> |
|||
<div class="rightpane overflow-auto d-flex flex-grow-1 flex-column w-60" |
|||
t-if="!ui.isSmall || pos.mobile_pane === 'right'"> |
|||
<div class="position-relative d-flex flex-column flex-grow-1 overflow-hidden" |
|||
t-ref="products-widget"> |
|||
<div class="products-widget-control products-widget-control-header mt-4 d-flex shadow-sm justify-content-between"> |
|||
<CashierName/> |
|||
<div class="d-flex search-products" id="search-products"> |
|||
<Input tModel="[pos, 'searchProductWord']" |
|||
class="'p-2 lg-screen'" |
|||
isSmall="ui.isSmall" |
|||
placeholder="'Search products...'" |
|||
icon="{type: 'fa', value: 'fa-search'}" |
|||
debounceMillis="100"/> |
|||
<div class="home-category-button lg-screen-cat"> |
|||
<span class="breadcrumb-button breadcrumb-home" |
|||
t-on-click="(id) => this.pos.setSelectedCategory(id)"> |
|||
<i class="fa fa-home" role="img" |
|||
aria-label="Home" title="Home" |
|||
style="font-size: 30px;"/> |
|||
</span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="products-widget-control products-widget-control-header mt-4 d-flex shadow-sm justify-content-between"> |
|||
<Input tModel="[pos, 'searchProductWord']" |
|||
class="'p-2 sm-screen'" |
|||
isSmall="ui.isSmall" |
|||
placeholder="'Search products...'" |
|||
icon="{type: 'fa', value: 'fa-search'}" |
|||
debounceMillis="100"/> |
|||
<div class="home-category-button sm-screen-cat"> |
|||
<span class="breadcrumb-button breadcrumb-home" |
|||
t-on-click="(id) => this.pos.setSelectedCategory(id)"> |
|||
<i class="fa fa-home" role="img" |
|||
aria-label="Home" title="Home" |
|||
style="font-size: 30px;"/> |
|||
</span> |
|||
</div> |
|||
</div> |
|||
<t t-set="categories" t-value="getCategoriesAndSub()"/> |
|||
<div t-if="categories.length > 2" |
|||
class="products-widget-control bg-white products-widget-control-category d-flex shadow-sm"> |
|||
<div class="rightpane-header"> |
|||
<div class="categories-header"> |
|||
<div class="category-list simple" |
|||
style="border-radius: 5px; padding: 10px;"> |
|||
<t t-foreach="getCategoriesAndSub()" |
|||
t-as="category" t-key="category.id"> |
|||
<span t-if="category.id != 0" |
|||
class="category-simple-button" |
|||
t-attf-class="{{ selectedCategoryId === category.id ? 'highlight' : '' }}" |
|||
t-on-click="() => this.setSelectedCategory(category.id)"> |
|||
<t t-esc="category.name"/> |
|||
</span> |
|||
</t> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="product-list-container flex-grow-1 overflow-y-auto"> |
|||
<div t-if="productsToDisplay.length != 0 and pos.session._has_available_products" |
|||
t-attf-class="product-list {{this.pos.productListViewMode}} p-1"> |
|||
<ProductCard |
|||
t-foreach="productsToDisplay" t-as="product" t-key="product.id" |
|||
productId="product.id" |
|||
product="product" |
|||
class="pos.productViewMode" |
|||
name="getProductName(product)" |
|||
color="product.pos_categ_ids?.at(-1)?.color" |
|||
price="this.getProductPrice(product)" |
|||
imageUrl="pos.config.show_product_images and this.getProductImage(product)" |
|||
onClick.bind="() => this.addProductToOrder(product)" |
|||
productInfo="true" |
|||
productCartQty="this.state.quantityByProductTmplId[product.raw.product_tmpl_id]" |
|||
onProductInfoClick.bind="() => this.onProductInfoClick(product)"/> |
|||
</div> |
|||
<div t-else="" |
|||
class="product-list-empty no-results-message text-center mt-5"> |
|||
<t t-if="searchWord"> |
|||
<p>No products found for |
|||
<b>" |
|||
<t t-esc="searchWord"/> |
|||
" |
|||
</b> |
|||
in this category. |
|||
</p> |
|||
</t> |
|||
<t t-else=""> |
|||
<t t-if="searchWord"> |
|||
<p>No products found for <b>"<t t-esc="searchWord"/>"</b> |
|||
in this category.</p> |
|||
</t> |
|||
<t t-elif="pos.session._has_available_products"><p>There are no products in this category.</p></t> |
|||
<t t-else=""> |
|||
<div t-if="!state.loadingDemo"> |
|||
<p class="text-large">No products available. Explore |
|||
|
|||
<a role="button" |
|||
class="button-no-demo fw-bolder" |
|||
t-on-click="loadDemoDataProducts">demo data</a> |
|||
or |
|||
<a |
|||
role="button" |
|||
class="button-no-demo fw-bolder" |
|||
t-on-click="createNewProducts">create your own</a>. |
|||
</p> |
|||
</div> |
|||
<div t-else="" |
|||
class="block-top-header position-absolute top-0 start-0 bg-black opacity-50 w-100 h-100 z-1000"> |
|||
<div class="d-flex h-100 w-100 text-white flex-row align-items-center justify-content-center"> |
|||
<div class="o_spinner d-flex flex-column mb-4"> |
|||
<img src="/web/static/img/spin.svg" |
|||
alt="Loading..."/> |
|||
Loading... |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</t> |
|||
</t> |
|||
</div> |
|||
<div t-if="searchWord" |
|||
class="search-more-button d-flex justify-content-center"> |
|||
<button class="btn btn-primary btn-lg" |
|||
t-on-click="onPressEnterKey">Search more</button> |
|||
</div> |
|||
<div class="portal search-database-button no-results-message" |
|||
t-att-class="{ 'd-none': !shouldShowButton }"/></div> |
|||
</div> |
|||
<t t-if="ui.isSmall"> |
|||
<div class="product-reminder d-flex justify-content-center align-items-center py-1 text-bg-warning bg-opacity-50 fw-bolder" |
|||
t-if="state.showProductReminder" t-key="animationKey"> |
|||
<span> |
|||
<t t-esc="selectedOrderlineQuantity"/> |
|||
<t t-esc="selectedOrderlineDisplayName"/> |
|||
<t t-esc="selectedOrderlineTotal"/> |
|||
</span> |
|||
</div> |
|||
<div class="switchpane d-flex h-12"> |
|||
<button class="btn-switchpane pay-button btn w-50 rounded-0 fw-bolder" |
|||
t-attf-class="{{ primaryPayButton ? 'btn-primary' : 'btn-secondary' }}" |
|||
t-on-click="() => currentOrder.pay()"> |
|||
<span class="fs-1 d-block">Pay</span> |
|||
<span> |
|||
<t t-esc="total"/> |
|||
</span> |
|||
</button> |
|||
<button class="btn-switchpane btn w-50 btn-secondary rounded-0 fw-bolder review-button" |
|||
t-on-click="switchPane"> |
|||
<span class="fs-1 d-block">Review</span> |
|||
<span> |
|||
<t t-esc="items"/> |
|||
items |
|||
</span> |
|||
</button> |
|||
</div> |
|||
</t> |
|||
</div> |
|||
<div t-att-class="{'flex-grow-1 w-100 mw-100': ui.isSmall, 'd-none': ui.isSmall and pos.mobile_pane !== 'left'}" style="color:'blue'" |
|||
class="leftpane d-flex flex-column p-2"> |
|||
<OrderSummary /> |
|||
<div class="pads"> |
|||
<div t-attf-class="control-buttons d-flex justify-content-between gap-2 w-100 py-2"> |
|||
<ControlButtons t-if="!ui.isSmall" onClickMore.bind="displayAllControlPopup"/> |
|||
</div> |
|||
<div class="subpads d-flex flex-column gap-2"> |
|||
<Numpad t-if="!currentOrder?.is_empty() and pos.get_order()?.uiState.selected_orderline_uuid" class="'d-grid m-n1'" buttons="getNumpadButtons()" onClick.bind="onNumpadClick"/> |
|||
<ActionpadWidget |
|||
partner="currentOrder?.get_partner()" |
|||
onClickMore.bind="displayAllControlPopup" |
|||
actionName.translate="Payment" |
|||
actionToTrigger="() => pos.pay()" |
|||
showActionButton="!currentOrder?.is_empty()" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</xpath> |
|||
</t> |
|||
</templates> |