You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

76 lines
3.6 KiB

# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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/>.
#
#############################################################################
import base64
from odoo import http, modules
from odoo.http import request
from odoo.tools import file_open
class PosRestaurantWebMenu(http.Controller):
""" This is the controller for the POS Web Menu App
There is one main route that the user will use to access the
POS Web menu: /menu"""
@http.route("/menu/<config_id>", auth="public", website=True, sitemap=True)
def pos_web_menu_start(self, config_id=None):
"""This route will render the LANDING PAGE of the POS Web App
And it will pass the needed data to the template: the list of products
by category, pos_config_id, table_id, session info...
After that the user will be able to navigate to products and cart
pages to the server, using client side routing."""
pos_config_sudo = request.env["pos.config"].sudo().browse(
int(config_id))
current_session = pos_config_sudo.current_session_id
pos_floor = pos_config_sudo.mapped('floor_ids')
table = {}
for floor in pos_floor:
table[floor.name] = request.env['restaurant.table'].sudo().search(
[('floor_id', '=', floor.id)])
image_path = modules.get_module_resource(
"pos_restaurant_web_menu", "static/src/img",
"default_background.jpg")
bg_image = base64.b64encode(file_open(image_path, "rb").read())
products = request.env["product.product"].sudo().search(
[('available_in_pos', '=', 'True')])
customers = request.env["res.partner"].search([])
pos_category = products.mapped('pos_categ_id.name')
pos_category.sort()
currency = request.env.company.currency_id.symbol
data = {category: products.filtered(
lambda pos: pos.pos_categ_id.name == category) for category in
pos_category}
return request.render(
'pos_restaurant_web_menu.pos_restaurant_menu_index',
{'page_background': bg_image, 'table': table, 'data': data,
'config_id': config_id, 'session_info': current_session,
'customers': customers, 'currency': currency})
@http.route("/product/pos_cart", type='json', auth='public')
def pos_web_cart(self, product_id):
""" Get information about the product for pos web cart.
:param int product_id: The ID of the product.
:return dict: A dictionary containing product information."""
product = request.env['product.product'].sudo().browse(
int(product_id))
currency = request.env.company.currency_id.symbol
return {'id': product_id, 'display_name': product.display_name,
'lst_price': product.lst_price, 'currency': currency}