@ -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> |