Начальное наполнение

This commit is contained in:
parent edb71139b5
commit 806ccca64f
181 changed files with 93085 additions and 0 deletions

4
__init__.py Normal file
View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models

46
__manifest__.py Normal file
View File

@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
'name': 'Restaurant',
'version': '1.0',
'category': 'Sales/Point of Sale',
'sequence': 6,
'summary': 'Restaurant extensions for the Point of Sale ',
'description': """
This module adds several features to the Point of Sale that are specific to restaurant management:
- Bill Printing: Allows you to print a receipt before the order is paid
- Bill Splitting: Allows you to split an order into different orders
- Kitchen Order Printing: allows you to print orders updates to kitchen or bar printers
""",
'depends': ['point_of_sale'],
'website': 'https://www.odoo.com/app/point-of-sale-restaurant',
'data': [
'security/ir.model.access.csv',
'views/pos_order_views.xml',
'views/pos_restaurant_views.xml',
'views/res_config_settings_views.xml',
'data/pos_restaurant_data.xml',
],
'demo': [
'data/pos_restaurant_demo.xml',
],
'installable': True,
'application': True,
'assets': {
'point_of_sale._assets_pos': [
'pos_restaurant/static/src/**/*',
('after', 'point_of_sale/static/src/scss/pos.scss', 'pos_restaurant/static/src/scss/restaurant.scss'),
],
'web.assets_backend': [
'point_of_sale/static/src/scss/pos_dashboard.scss',
],
'web.assets_tests': [
'pos_restaurant/static/tests/tours/**/*',
],
},
'license': 'LGPL-3',
}

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="pos_config_main_restaurant" model="pos.config">
<field name="name">Restaurant</field>
<field name="module_pos_restaurant">True</field>
<field name="iface_splitbill">True</field>
<field name="iface_printbill">False</field>
<field name="iface_orderline_notes">True</field>
<field name="iface_tipproduct">False</field>
<field name="start_category">False</field>
<field name="limit_categories">False</field>
</record>
<function model="pos.config" name="_setup_main_restaurant_defaults">
<value eval="[ref('pos_config_main_restaurant')]"/>
</function>
</data>
</odoo>

View File

@ -0,0 +1,930 @@
<odoo>
<data noupdate="1">
<record id="drinks" model="pos.category">
<field name="name">Drinks</field>
<field name="image_128" type="base64" file="pos_restaurant/static/img/drink_category.png" />
</record>
<record id="product_category_pos_food" model="product.category">
<field name="parent_id" ref="point_of_sale.product_category_pos"/>
<field name="name">Food</field>
</record>
<record id="food" model="pos.category">
<field name="name">Food</field>
<field name="image_128" type="base64" file="pos_restaurant/static/img/food_category.png" />
</record>
<!-- Food -->
<record id="pos_food_margherita" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">7.0</field>
<field name="name">Margherita</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-pizza-ma.jpg"/>
</record>
<record id="pos_food_funghi" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">7.0</field>
<field name="name">Funghi</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-pizza-fu.jpg"/>
</record>
<record id="pos_food_vege" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">7.0</field>
<field name="name">Vegetarian</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-pizza-ve.jpg"/>
</record>
<record id="pos_food_bolo" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">4.5</field>
<field name="name">Pasta Bolognese</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-pasta.jpg"/>
</record>
<record id="pos_food_4formaggi" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">5.5</field>
<field name="name">Pasta 4 formaggi </field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-pasta-4f.jpg"/>
</record>
<record id="pos_food_bacon" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">7.5</field>
<field name="name">Bacon Burger</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-burger.jpg"/>
</record>
<record id="pos_food_cheeseburger" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">7.0</field>
<field name="name">Cheese Burger</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-cheeseburger.jpg"/>
</record>
<record id="pos_food_chicken" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">3.0</field>
<field name="name">Chicken Curry Sandwich</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-sandwich.jpg"/>
</record>
<record id="pos_food_tuna" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">3.0</field>
<field name="name">Spicy Tuna Sandwich</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-tuna.jpg"/>
</record>
<record id="pos_food_mozza" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">3.9</field>
<field name="name">Mozzarella Sandwich</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-mozza.jpg"/>
</record>
<record id="pos_food_club" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">3.4</field>
<field name="name">Club Sandwich</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-club.jpg"/>
</record>
<record id="pos_food_maki" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">12.0</field>
<field name="name">Lunch Maki 18pc</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-maki.jpg"/>
</record>
<record id="pos_food_salmon" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">13.80</field>
<field name="name">Lunch Salmon 20pc</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-salmon.jpg"/>
</record>
<record id="pos_food_temaki" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">14.0</field>
<field name="name">Lunch Temaki mix 3pc</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-temaki.jpg"/>
</record>
<record id="pos_food_chirashi" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">9.25</field>
<field name="name">Salmon and Avocado</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-salmon-avocado.jpg"/>
</record>
<!-- Drinks -->
<record id="coke" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">2.20</field>
<field name="name">Coca-Cola</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="categ_id" ref="point_of_sale.product_category_pos"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-coke.jpg"/>
</record>
<record id="water" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">2.20</field>
<field name="name">Water</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="categ_id" ref="point_of_sale.product_category_pos"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-water.jpg"/>
</record>
<record id="minute_maid" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">2.20</field>
<field name="name">Minute Maid</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="categ_id" ref="point_of_sale.product_category_pos"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-minute_maid.jpg"/>
</record>
<record id="espresso" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">4.70</field>
<field name="name">Espresso</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-espresso.jpg"/>
</record>
<record id="green_tea" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">4.70</field>
<field name="name">Green Tea</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-green_tea.jpg"/>
</record>
<record id="milkshake_banana" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">3.60</field>
<field name="name">Milkshake Banana</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-milkshake_banana.jpg"/>
</record>
<record id="ice_tea" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">2.20</field>
<field name="name">Ice Tea</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-ice_tea.jpg"/>
</record>
<record id="schweppes" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">2.20</field>
<field name="name">Schweppes</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-schweppes.jpg"/>
</record>
<record id="fanta" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">2.20</field>
<field name="name">Fanta</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-fanta.jpg"/>
</record>
<!-- Combo -->
<record id="cheeseburger_combo_line" model="pos.combo.line">
<field name="product_id" ref="pos_food_cheeseburger"/>
<field name="combo_price">0</field>
</record>
<record id="bacon_burger_combo_line" model="pos.combo.line">
<field name="product_id" ref="pos_food_bacon"/>
<field name="combo_price">0</field>
</record>
<record id="burger_combo" model="pos.combo">
<field name="name">Burgers Choice</field>
<field name="combo_line_ids" eval="[(6, 0, [ref('cheeseburger_combo_line'), ref('bacon_burger_combo_line')])]"/>
</record>
<record id="coke_combo_line" model="pos.combo.line">
<field name="product_id" ref="coke"/>
<field name="combo_price">0</field>
</record>
<record id="water_combo_line" model="pos.combo.line">
<field name="product_id" ref="water"/>
<field name="combo_price">0</field>
</record>
<record id="maid_combo_line" model="pos.combo.line">
<field name="product_id" ref="minute_maid"/>
<field name="combo_price">0</field>
</record>
<record id="milkshake_combo_line" model="pos.combo.line">
<field name="product_id" ref="milkshake_banana"/>
<field name="combo_price">2</field>
</record>
<record id="drink_combo" model="pos.combo">
<field name="name">Drinks choice</field>
<field name="combo_line_ids" eval="[(6, 0, [ref('coke_combo_line'), ref('water_combo_line'), ref('maid_combo_line'), ref('milkshake_combo_line')])]"/>
</record>
<record id="burger_drink_combo" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">10</field>
<field name="name">Burger Menu Combo</field>
<field name="type">combo</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/combo-hamb.jpg"/>
<field name="combo_ids" eval="[(6, 0, [ref('drink_combo'), ref('burger_combo')])]"/>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="taxes_id" eval="[(5,)]"/> <!-- no taxes -->
</record>
<function model="restaurant.floor" name="unlink">
<value model="restaurant.floor" eval="obj().search([
('pos_config_ids', 'in', ref('pos_config_main_restaurant')),
]).id"/>
</function>
<!-- Pos Config -->
<record model="pos.config" id="pos_config_main_restaurant">
<field name="iface_printbill">True</field>
<field name="limit_categories">True</field>
<field name="iface_available_categ_ids"
eval="[(6, 0, [ref('drinks'), ref('food')])]" />
</record>
<!-- Closed Sessions -->
<!-- forcecreate is set to false in order to not create record when updating the db -->
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'pos_restaurant.payment_method',
'record': obj().env.ref('pos_restaurant.pos_config_main_restaurant')._get_payment_method('bank'),
'noupdate': True,
}]" />
</function>
<!-- Closed Session 3 -->
<record id="pos_closed_session_3" model="pos.session" forcecreate="False">
<field name="config_id" ref="pos_config_main_restaurant" />
<field name="user_id" ref="base.user_admin" />
<field name="start_at" eval="(DateTime.today() + relativedelta(days=-1)).strftime('%Y-%m-%d %H:%M:%S')" />
<field name="stop_at"
eval="(DateTime.today() + relativedelta(days=-1, hours=1)).strftime('%Y-%m-%d %H:%M:%S')" />
</record>
<record id="pos_closed_order_3_1" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_closed_session_3" />
<field name="company_id" ref="base.main_company" />
<field name="name">ClosedDemo/0005</field>
<field name="state">paid</field>
<field name="amount_total">14.0</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">14.0</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00000-003-1001</field>
</record>
<record id="pos_closed_orderline_3_1_1" model="pos.order.line" forcecreate="False">
<field name="name">Closed Orderline 3.1.1</field>
<field name="product_id" ref="pos_food_margherita" />
<field name="price_subtotal">7.0</field>
<field name="price_subtotal_incl">7.0</field>
<field name="price_unit">7.0</field>
<field name="order_id" ref="pos_closed_order_3_1" />
<field name="full_product_name">Margherita</field>
</record>
<record id="pos_closed_orderline_3_1_2" model="pos.order.line" forcecreate="False">
<field name="name">Closed Orderline 3.1.2</field>
<field name="product_id" ref="pos_food_funghi" />
<field name="price_subtotal">7.0</field>
<field name="price_subtotal_incl">7.0</field>
<field name="price_unit">7.0</field>
<field name="order_id" ref="pos_closed_order_3_1" />
<field name="full_product_name">Funghi</field>
</record>
<record id="pos_payment_1" model="pos.payment" forcecreate="False">
<field name="payment_method_id" ref="pos_restaurant.payment_method" />
<field name="pos_order_id" ref="pos_closed_order_3_1" />
<field name="amount">14.0</field>
</record>
<record id="pos_closed_order_3_2" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_closed_session_3" />
<field name="company_id" ref="base.main_company" />
<field name="name">ClosedDemo/0006</field>
<field name="state">paid</field>
<field name="amount_total">7.0</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">7.0</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00000-003-1002</field>
</record>
<record id="pos_closed_orderline_3_2_1" model="pos.order.line" forcecreate="False">
<field name="name">Closed Orderline 3.2.1</field>
<field name="product_id" ref="pos_food_vege" />
<field name="price_subtotal">7.0</field>
<field name="price_subtotal_incl">7.0</field>
<field name="price_unit">7.0</field>
<field name="order_id" ref="pos_closed_order_3_2" />
<field name="full_product_name">Vegetarian</field>
</record>
<record id="pos_payment_2" model="pos.payment" forcecreate="False">
<field name="payment_method_id" ref="pos_restaurant.payment_method" />
<field name="pos_order_id" ref="pos_closed_order_3_2" />
<field name="amount">7.0</field>
</record>
<function model="pos.session" name="action_pos_session_closing_control"
eval="[[ref('pos_closed_session_3')]]" />
<!-- Closed Session 4 -->
<record id="pos_closed_session_4" model="pos.session" forcecreate="False">
<field name="config_id" ref="pos_config_main_restaurant" />
<field name="user_id" ref="base.user_admin" />
<field name="start_at" eval="(DateTime.today() + relativedelta(days=-1)).strftime('%Y-%m-%d %H:%M:%S')" />
<field name="stop_at"
eval="(DateTime.today() + relativedelta(days=-1, hours=1)).strftime('%Y-%m-%d %H:%M:%S')" />
</record>
<record id="pos_closed_order_4_1" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_closed_session_4" />
<field name="company_id" ref="base.main_company" />
<field name="name">ClosedDemo/0007</field>
<field name="state">paid</field>
<field name="amount_total">6.7</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">6.7</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00000-004-1001</field>
</record>
<record id="pos_closed_orderline_4_1_1" model="pos.order.line" forcecreate="False">
<field name="name">Closed Orderline 4.1.1</field>
<field name="product_id" ref="water" />
<field name="price_subtotal">2.20</field>
<field name="price_subtotal_incl">2.20</field>
<field name="price_unit">2.20</field>
<field name="order_id" ref="pos_closed_order_4_1" />
<field name="full_product_name">Water</field>
</record>
<record id="pos_closed_orderline_4_1_2" model="pos.order.line" forcecreate="False">
<field name="name">Closed Orderline 4.1.2</field>
<field name="product_id" ref="pos_food_bolo" />
<field name="price_subtotal">4.5</field>
<field name="price_subtotal_incl">4.5</field>
<field name="price_unit">4.5</field>
<field name="order_id" ref="pos_closed_order_4_1" />
<field name="full_product_name">Pasta Bolognese</field>
</record>
<record id="pos_payment_3" model="pos.payment" forcecreate="False">
<field name="payment_method_id" ref="pos_restaurant.payment_method" />
<field name="pos_order_id" ref="pos_closed_order_4_1" />
<field name="amount">6.7</field>
</record>
<record id="pos_closed_order_4_2" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_closed_session_4" />
<field name="company_id" ref="base.main_company" />
<field name="name">ClosedDemo/0008</field>
<field name="state">paid</field>
<field name="amount_total">28.0</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">28.0</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00000-004-1002</field>
</record>
<record id="pos_closed_orderline_4_2_1" model="pos.order.line" forcecreate="False">
<field name="name">Closed Orderline 4.2.1</field>
<field name="product_id" ref="pos_food_cheeseburger" />
<field name="price_subtotal">28.0</field>
<field name="price_subtotal_incl">28.0</field>
<field name="price_unit">7.0</field>
<field name="qty">4</field>
<field name="order_id" ref="pos_closed_order_4_2" />
<field name="full_product_name">Cheese Burger</field>
</record>
<record id="pos_payment_4" model="pos.payment" forcecreate="False">
<field name="payment_method_id" ref="pos_restaurant.payment_method" />
<field name="pos_order_id" ref="pos_closed_order_4_2" />
<field name="amount">28.0</field>
</record>
<function model="pos.session" name="action_pos_session_closing_control"
eval="[[ref('pos_closed_session_4')]]" />
<!-- Floors: Main Floor -->
<record id="floor_main" model="restaurant.floor">
<field name="name">Main Floor</field>
<field name="background_color">rgb(249,250,251)</field>
<field name="pos_config_ids" eval="[(6, 0, [ref('pos_restaurant.pos_config_main_restaurant')])]" />
</record>
<record id="table_01" model="restaurant.table">
<field name="name">1</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">50</field>
<field name="position_v">50</field>
</record>
<record id="table_02" model="restaurant.table">
<field name="name">2</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">212</field>
<field name="position_v">50</field>
</record>
<record id="table_03" model="restaurant.table">
<field name="name">3</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">374</field>
<field name="position_v">50</field>
</record>
<record id="table_04" model="restaurant.table">
<field name="name">4</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">536</field>
<field name="position_v">50</field>
</record>
<record id="table_05" model="restaurant.table">
<field name="name">5</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">698</field>
<field name="position_v">50</field>
</record>
<record id="table_06" model="restaurant.table">
<field name="name">6</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">860</field>
<field name="position_v">50</field>
</record>
<record id="table_07" model="restaurant.table">
<field name="name">7</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(235,109,109)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">50</field>
<field name="position_v">280</field>
</record>
<record id="table_08" model="restaurant.table">
<field name="name">8</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(235,109,109)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">212</field>
<field name="position_v">280</field>
</record>
<record id="table_09" model="restaurant.table">
<field name="name">9</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">6</field>
<field name="color">rgb(235,109,109)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">698</field>
<field name="position_v">280</field>
</record>
<record id="table_10" model="restaurant.table">
<field name="name">10</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">6</field>
<field name="color">rgb(235,109,109)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">860</field>
<field name="position_v">280</field>
</record>
<record id="table_11" model="restaurant.table">
<field name="name">11</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">6</field>
<field name="color">rgb(78,210,190)</field>
<field name="shape">round</field>
<field name="width">210</field>
<field name="height">210</field>
<field name="position_h">400</field>
<field name="position_v">230</field>
</record>
<!-- Restaurant Floor: Patio -->
<record id="floor_patio" model="restaurant.floor">
<field name="name">Patio</field>
<field name="background_color">rgb(130, 233, 171)</field>
<field name="pos_config_ids" eval="[(6, 0, [ref('pos_restaurant.pos_config_main_restaurant')])]" />
</record>
<!-- Patio: Left table row -->
<record id="table_21" model="restaurant.table">
<field name="name">1</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">100</field>
<field name="position_v">50</field>
</record>
<record id="table_22" model="restaurant.table">
<field name="name">2</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">100</field>
<field name="position_v">166</field>
</record>
<record id="table_23" model="restaurant.table">
<field name="name">3</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">100</field>
<field name="position_v">283</field>
</record>
<record id="table_24" model="restaurant.table">
<field name="name">4</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">100</field>
<field name="position_v">400</field>
</record>
<!-- Patio: Right table row -->
<record id="table_25" model="restaurant.table">
<field name="name">5</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">800</field>
<field name="position_v">50</field>
</record>
<record id="table_26" model="restaurant.table">
<field name="name">6</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">800</field>
<field name="position_v">166</field>
</record>
<record id="table_27" model="restaurant.table">
<field name="name">7</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">800</field>
<field name="position_v">283</field>
</record>
<record id="table_28" model="restaurant.table">
<field name="name">8</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">800</field>
<field name="position_v">400</field>
</record>
<!-- Patio: Center table block -->
<record id="table_29" model="restaurant.table">
<field name="name">9</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">4</field>
<field name="color">rgb(235,191,109)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">120</field>
<field name="position_h">330</field>
<field name="position_v">100</field>
</record>
<record id="table_29" model="restaurant.table">
<field name="name">9</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">4</field>
<field name="color">rgb(235,191,109)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">120</field>
<field name="position_h">330</field>
<field name="position_v">100</field>
</record>
<record id="table_30" model="restaurant.table">
<field name="name">10</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">4</field>
<field name="color">rgb(235,191,109)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">120</field>
<field name="position_h">560</field>
<field name="position_v">100</field>
</record>
<record id="table_31" model="restaurant.table">
<field name="name">11</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">4</field>
<field name="color">rgb(235,191,109)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">120</field>
<field name="position_h">330</field>
<field name="position_v">315</field>
</record>
<record id="table_32" model="restaurant.table">
<field name="name">12</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">4</field>
<field name="color">rgb(235,191,109)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">120</field>
<field name="position_h">560</field>
<field name="position_v">315</field>
</record>
<function model="pos.config" name="add_cash_payment_method" />
<!-- Open Session -->
<record id="pos_open_session_2" model="pos.session" forcecreate="False">
<field name="config_id" ref="pos_config_main_restaurant" />
<field name="user_id" ref="base.user_admin" />
</record>
<record id="pos_open_order_2" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_open_session_2" />
<field name="company_id" ref="base.main_company" />
<field name="name">Restaurant/00001</field>
<field name="state">draft</field>
<field name="amount_total">22.90</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">0.0</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00002-001-0000</field>
<field name="partner_id" ref="base.res_partner_1" />
<field name="table_id" ref="table_01" />
<field name="customer_count">8</field>
</record>
<record id="pos_orderline_2" model="pos.order.line" forcecreate="False">
<field name="name">Orderline 2</field>
<field name="product_id" ref="coke" />
<field name="price_subtotal">4.40</field>
<field name="price_subtotal_incl">4.40</field>
<field name="price_unit">2.20</field>
<field name="qty">2</field>
<field name="order_id" ref="pos_open_order_2" />
<field name="full_product_name">Coca-Cola</field>
<field name="uuid">00000000-0000-4000-000000000000</field>
</record>
<record id="pos_orderline_3" model="pos.order.line" forcecreate="False">
<field name="name">Orderline 3</field>
<field name="product_id" ref="pos_food_chirashi" />
<field name="price_subtotal">18.5</field>
<field name="price_subtotal_incl">18.5</field>
<field name="price_unit">9.25</field>
<field name="qty">2</field>
<field name="order_id" ref="pos_open_order_2" />
<field name="full_product_name">Salmon and Avocado</field>
<field name="uuid">00000000-0000-4000-000000000001</field>
</record>
<record id="pos_open_order_3" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_open_session_2" />
<field name="company_id" ref="base.main_company" />
<field name="name">Restaurant/00002</field>
<field name="state">draft</field>
<field name="amount_total">21.8</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">0.0</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00002-002-0000</field>
<field name="partner_id" ref="base.res_partner_2" />
<field name="table_id" ref="table_02" />
<field name="customer_count">3</field>
</record>
<record id="pos_orderline_4" model="pos.order.line" forcecreate="False">
<field name="name">Orderline 4</field>
<field name="product_id" ref="pos_food_temaki" />
<field name="price_subtotal">14.0</field>
<field name="price_subtotal_incl">14.0</field>
<field name="price_unit">14.0</field>
<field name="qty">1</field>
<field name="order_id" ref="pos_open_order_3" />
<field name="full_product_name">Lunch Temaki mix 3pc</field>
<field name="uuid">00000000-0000-4000-000000000002</field>
</record>
<record id="pos_orderline_5" model="pos.order.line" forcecreate="False">
<field name="name">Orderline 5</field>
<field name="product_id" ref="pos_food_mozza" />
<field name="price_subtotal">7.8</field>
<field name="price_subtotal_incl">7.8</field>
<field name="price_unit">3.9</field>
<field name="qty">2</field>
<field name="order_id" ref="pos_open_order_3" />
<field name="full_product_name">Mozzarella Sandwich</field>
<field name="uuid">00000000-0000-4000-000000000003</field>
</record>
<record id="pos_open_order_4" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_open_session_2" />
<field name="company_id" ref="base.main_company" />
<field name="name">Restaurant/00003</field>
<field name="state">draft</field>
<field name="amount_total">10.5</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">0.0</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00002-003-0000</field>
<field name="partner_id" ref="base.res_partner_4" />
<field name="table_id" ref="table_04" />
<field name="customer_count">5</field>
</record>
<record id="pos_orderline_6" model="pos.order.line" forcecreate="False">
<field name="name">Orderline 6</field>
<field name="product_id" ref="pos_food_chicken" />
<field name="price_subtotal">3.0</field>
<field name="price_subtotal_incl">3.0</field>
<field name="price_unit">3.0</field>
<field name="qty">1</field>
<field name="order_id" ref="pos_open_order_4" />
<field name="full_product_name">Chicken Curry Sandwich</field>
<field name="uuid">00000000-0000-4000-000000000004</field>
</record>
<record id="pos_orderline_7" model="pos.order.line" forcecreate="False">
<field name="name">Orderline 7</field>
<field name="product_id" ref="pos_food_bacon" />
<field name="price_subtotal">7.5</field>
<field name="price_subtotal_incl">7.5</field>
<field name="price_unit">7.5</field>
<field name="qty">1</field>
<field name="order_id" ref="pos_open_order_4" />
<field name="full_product_name">Bacon Burger</field>
<field name="uuid">00000000-0000-4000-000000000005</field>
</record>
<record id="pos_open_order_5" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_open_session_2" />
<field name="company_id" ref="base.main_company" />
<field name="name">Restaurant/00004</field>
<field name="state">draft</field>
<field name="amount_total">5.5</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">0.0</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00002-004-0000</field>
<field name="partner_id" ref="base.res_partner_10" />
<field name="table_id" ref="table_06" />
<field name="customer_count">1</field>
</record>
<record id="pos_orderline_8" model="pos.order.line" forcecreate="False">
<field name="name">Orderline 8</field>
<field name="product_id" ref="pos_food_4formaggi" />
<field name="price_subtotal">5.5</field>
<field name="price_subtotal_incl">5.5</field>
<field name="price_unit">5.5</field>
<field name="qty">1</field>
<field name="order_id" ref="pos_open_order_5" />
<field name="full_product_name">Pizza 4 Formaggi</field>
</record>
<function model="pos.session" name="_set_last_order_preparation_change"
eval="[[ref('pos_open_order_2'), ref('pos_open_order_3'), ref('pos_open_order_4')]]"/>
</data>
</odoo>

View File

@ -0,0 +1,235 @@
<odoo>
<record id="drinks" model="pos.category">
<field name="name">Drinks</field>
<field name="image_128" type="base64" file="pos_restaurant/static/img/drink_category.png" />
</record>
<record id="product_category_pos_food" model="product.category">
<field name="parent_id" ref="point_of_sale.product_category_pos"/>
<field name="name">Food</field>
</record>
<record id="food" model="pos.category">
<field name="name">Food</field>
<field name="image_128" type="base64" file="pos_restaurant/static/img/food_category.png" />
</record>
<!-- Food -->
<record id="pos_food_margherita" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">7.0</field>
<field name="name">Margherita</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-pizza-ma.jpg"/>
</record>
<record id="pos_food_funghi" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">7.0</field>
<field name="name">Funghi</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-pizza-fu.jpg"/>
</record>
<record id="pos_food_vege" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">7.0</field>
<field name="name">Vegetarian</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-pizza-ve.jpg"/>
</record>
<record id="pos_food_bolo" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">4.5</field>
<field name="name">Pasta Bolognese</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-pasta.jpg"/>
</record>
<record id="pos_food_4formaggi" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">5.5</field>
<field name="name">Pasta 4 formaggi </field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-pasta-4f.jpg"/>
</record>
<record id="pos_food_bacon" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">7.5</field>
<field name="name">Bacon Burger</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-burger.jpg"/>
</record>
<record id="pos_food_cheeseburger" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">7.0</field>
<field name="name">Cheese Burger</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-cheeseburger.jpg"/>
</record>
<record id="pos_food_chicken" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">3.0</field>
<field name="name">Chicken Curry Sandwich</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-sandwich.jpg"/>
</record>
<record id="pos_food_tuna" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">3.0</field>
<field name="name">Spicy Tuna Sandwich</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-tuna.jpg"/>
</record>
<record id="pos_food_mozza" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">3.9</field>
<field name="name">Mozzarella Sandwich</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-mozza.jpg"/>
</record>
<record id="pos_food_club" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">3.4</field>
<field name="name">Club Sandwich</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-club.jpg"/>
</record>
<record id="pos_food_maki" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">12.0</field>
<field name="name">Lunch Maki 18pc</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-maki.jpg"/>
</record>
<record id="pos_food_salmon" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">13.80</field>
<field name="name">Lunch Salmon 20pc</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-salmon.jpg"/>
</record>
<record id="pos_food_temaki" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">14.0</field>
<field name="name">Lunch Temaki mix 3pc</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-temaki.jpg"/>
</record>
<record id="pos_food_chirashi" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">9.25</field>
<field name="name">Salmon and Avocado</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('food')])]"/>
<field name="categ_id" ref="pos_restaurant.product_category_pos_food"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-salmon-avocado.jpg"/>
</record>
<!-- Drinks -->
<record id="coke" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">2.20</field>
<field name="name">Coca-Cola</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="categ_id" ref="point_of_sale.product_category_pos"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-coke.jpg"/>
</record>
<record id="water" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">2.20</field>
<field name="name">Water</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="categ_id" ref="point_of_sale.product_category_pos"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-water.jpg"/>
</record>
<record id="minute_maid" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">2.20</field>
<field name="name">Minute Maid</field>
<field name="weight">0.01</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="categ_id" ref="point_of_sale.product_category_pos"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-minute_maid.jpg"/>
</record>
<record id="espresso" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">4.70</field>
<field name="name">Espresso</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-espresso.jpg"/>
</record>
<record id="green_tea" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">4.70</field>
<field name="name">Green Tea</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-green_tea.jpg"/>
</record>
<record id="milkshake_banana" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">3.60</field>
<field name="name">Milkshake Banana</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-milkshake_banana.jpg"/>
</record>
<record id="ice_tea" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">2.20</field>
<field name="name">Ice Tea</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-ice_tea.jpg"/>
</record>
<record id="schweppes" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">2.20</field>
<field name="name">Schweppes</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-schweppes.jpg"/>
</record>
<record id="fanta" model="product.product">
<field name="available_in_pos">True</field>
<field name="list_price">2.20</field>
<field name="name">Fanta</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('drinks')])]"/>
<field name="image_1920" type="base64" file="pos_restaurant/static/img/th-fanta.jpg"/>
</record>
<function model="pos.config" name="add_cash_payment_method" />
</odoo>

View File

@ -0,0 +1,486 @@
<odoo>
<!-- Pos Config -->
<record model="pos.config" id="pos_config_main_restaurant">
<field name="name">Restaurant</field>
<field name="iface_printbill">True</field>
</record>
<!-- Closed Sessions -->
<!-- forcecreate is set to false in order to not create record when updating the db -->
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'pos_restaurant.payment_method',
'record': obj().env.ref('pos_restaurant.pos_config_main_restaurant')._get_payment_method('bank'),
'noupdate': True,
}]" />
</function>
<!-- Closed Session 3 -->
<record id="pos_closed_session_3" model="pos.session" forcecreate="False" context="{'onboarding_creation': True}">
<field name="config_id" ref="pos_config_main_restaurant" />
<field name="user_id" ref="base.user_admin" />
<field name="start_at" eval="(DateTime.today() + relativedelta(days=-1)).strftime('%Y-%m-%d %H:%M:%S')" />
<field name="stop_at"
eval="(DateTime.today() + relativedelta(days=-1, hours=1)).strftime('%Y-%m-%d %H:%M:%S')" />
</record>
<record id="pos_closed_order_3_1" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_closed_session_3" />
<field name="company_id" ref="base.main_company" />
<field name="name">ClosedDemo/0005</field>
<field name="state">paid</field>
<field name="amount_total">14.0</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">14.0</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00000-003-1001</field>
</record>
<record id="pos_closed_orderline_3_1_1" model="pos.order.line" forcecreate="False">
<field name="name">Closed Orderline 3.1.1</field>
<field name="product_id" ref="pos_food_margherita" />
<field name="price_subtotal">7.0</field>
<field name="price_subtotal_incl">7.0</field>
<field name="price_unit">7.0</field>
<field name="order_id" ref="pos_closed_order_3_1" />
<field name="full_product_name">Margherita</field>
</record>
<record id="pos_closed_orderline_3_1_2" model="pos.order.line" forcecreate="False">
<field name="name">Closed Orderline 3.1.2</field>
<field name="product_id" ref="pos_food_funghi" />
<field name="price_subtotal">7.0</field>
<field name="price_subtotal_incl">7.0</field>
<field name="price_unit">7.0</field>
<field name="order_id" ref="pos_closed_order_3_1" />
<field name="full_product_name">Funghi</field>
</record>
<record id="pos_payment_1" model="pos.payment" forcecreate="False">
<field name="payment_method_id" ref="pos_restaurant.payment_method" />
<field name="pos_order_id" ref="pos_closed_order_3_1" />
<field name="amount">14.0</field>
</record>
<record id="pos_closed_order_3_2" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_closed_session_3" />
<field name="company_id" ref="base.main_company" />
<field name="name">ClosedDemo/0006</field>
<field name="state">paid</field>
<field name="amount_total">7.0</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">7.0</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00000-003-1002</field>
</record>
<record id="pos_closed_orderline_3_2_1" model="pos.order.line" forcecreate="False">
<field name="name">Closed Orderline 3.2.1</field>
<field name="product_id" ref="pos_food_vege" />
<field name="price_subtotal">7.0</field>
<field name="price_subtotal_incl">7.0</field>
<field name="price_unit">7.0</field>
<field name="order_id" ref="pos_closed_order_3_2" />
<field name="full_product_name">Vegetarian</field>
</record>
<record id="pos_payment_2" model="pos.payment" forcecreate="False">
<field name="payment_method_id" ref="pos_restaurant.payment_method" />
<field name="pos_order_id" ref="pos_closed_order_3_2" />
<field name="amount">7.0</field>
</record>
<function model="pos.session" name="action_pos_session_closing_control"
eval="[[ref('pos_closed_session_3')]]" />
<!-- Closed Session 4 -->
<record id="pos_closed_session_4" model="pos.session" forcecreate="False" context="{'onboarding_creation': True}">
<field name="config_id" ref="pos_config_main_restaurant" />
<field name="user_id" ref="base.user_admin" />
<field name="start_at" eval="(DateTime.today() + relativedelta(days=-1)).strftime('%Y-%m-%d %H:%M:%S')" />
<field name="stop_at"
eval="(DateTime.today() + relativedelta(days=-1, hours=1)).strftime('%Y-%m-%d %H:%M:%S')" />
</record>
<record id="pos_closed_order_4_1" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_closed_session_4" />
<field name="company_id" ref="base.main_company" />
<field name="name">ClosedDemo/0007</field>
<field name="state">paid</field>
<field name="amount_total">6.7</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">6.7</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00000-004-1001</field>
</record>
<record id="pos_closed_orderline_4_1_1" model="pos.order.line" forcecreate="False">
<field name="name">Closed Orderline 4.1.1</field>
<field name="product_id" ref="water" />
<field name="price_subtotal">2.20</field>
<field name="price_subtotal_incl">2.20</field>
<field name="price_unit">2.20</field>
<field name="order_id" ref="pos_closed_order_4_1" />
<field name="full_product_name">Water</field>
</record>
<record id="pos_closed_orderline_4_1_2" model="pos.order.line" forcecreate="False">
<field name="name">Closed Orderline 4.1.2</field>
<field name="product_id" ref="pos_food_bolo" />
<field name="price_subtotal">4.5</field>
<field name="price_subtotal_incl">4.5</field>
<field name="price_unit">4.5</field>
<field name="order_id" ref="pos_closed_order_4_1" />
<field name="full_product_name">Pasta Bolognese</field>
</record>
<record id="pos_payment_3" model="pos.payment" forcecreate="False">
<field name="payment_method_id" ref="pos_restaurant.payment_method" />
<field name="pos_order_id" ref="pos_closed_order_4_1" />
<field name="amount">6.7</field>
</record>
<record id="pos_closed_order_4_2" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_closed_session_4" />
<field name="company_id" ref="base.main_company" />
<field name="name">ClosedDemo/0008</field>
<field name="state">paid</field>
<field name="amount_total">28.0</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">28.0</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00000-004-1002</field>
</record>
<record id="pos_closed_orderline_4_2_1" model="pos.order.line" forcecreate="False">
<field name="name">Closed Orderline 4.2.1</field>
<field name="product_id" ref="pos_food_cheeseburger" />
<field name="price_subtotal">28.0</field>
<field name="price_subtotal_incl">28.0</field>
<field name="price_unit">7.0</field>
<field name="qty">4</field>
<field name="order_id" ref="pos_closed_order_4_2" />
<field name="full_product_name">Cheese Burger</field>
</record>
<record id="pos_payment_4" model="pos.payment" forcecreate="False">
<field name="payment_method_id" ref="pos_restaurant.payment_method" />
<field name="pos_order_id" ref="pos_closed_order_4_2" />
<field name="amount">28.0</field>
</record>
<function model="pos.session" name="action_pos_session_closing_control"
eval="[[ref('pos_closed_session_4')]]" />
<!-- Floors: Main Floor -->
<record id="floor_main" model="restaurant.floor">
<field name="name">Main Floor</field>
<field name="background_color">rgb(249,250,251)</field>
<field name="pos_config_ids" eval="[(6, 0, [ref('pos_restaurant.pos_config_main_restaurant')])]" />
</record>
<record id="table_01" model="restaurant.table">
<field name="name">1</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">50</field>
<field name="position_v">50</field>
</record>
<record id="table_02" model="restaurant.table">
<field name="name">2</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">212</field>
<field name="position_v">50</field>
</record>
<record id="table_03" model="restaurant.table">
<field name="name">3</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">374</field>
<field name="position_v">50</field>
</record>
<record id="table_04" model="restaurant.table">
<field name="name">4</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">536</field>
<field name="position_v">50</field>
</record>
<record id="table_05" model="restaurant.table">
<field name="name">5</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">698</field>
<field name="position_v">50</field>
</record>
<record id="table_06" model="restaurant.table">
<field name="name">6</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">860</field>
<field name="position_v">50</field>
</record>
<record id="table_07" model="restaurant.table">
<field name="name">7</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(235,109,109)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">50</field>
<field name="position_v">280</field>
</record>
<record id="table_08" model="restaurant.table">
<field name="name">8</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(235,109,109)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">212</field>
<field name="position_v">280</field>
</record>
<record id="table_09" model="restaurant.table">
<field name="name">9</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(235,109,109)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">698</field>
<field name="position_v">280</field>
</record>
<record id="table_10" model="restaurant.table">
<field name="name">10</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(235,109,109)</field>
<field name="shape">square</field>
<field name="width">100</field>
<field name="height">100</field>
<field name="position_h">860</field>
<field name="position_v">280</field>
</record>
<record id="table_11" model="restaurant.table">
<field name="name">11</field>
<field name="floor_id" ref="pos_restaurant.floor_main" />
<field name="seats">4</field>
<field name="color">rgb(78,210,190)</field>
<field name="shape">round</field>
<field name="width">210</field>
<field name="height">210</field>
<field name="position_h">400</field>
<field name="position_v">230</field>
</record>
<!-- Restaurant Floor: Patio -->
<record id="floor_patio" model="restaurant.floor">
<field name="name">Patio</field>
<field name="background_color">rgb(130, 233, 171)</field>
<field name="pos_config_ids" eval="[(6, 0, [ref('pos_restaurant.pos_config_main_restaurant')])]" />
</record>
<!-- Patio: Left table row -->
<record id="table_21" model="restaurant.table">
<field name="name">1</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">100</field>
<field name="position_v">50</field>
</record>
<record id="table_22" model="restaurant.table">
<field name="name">2</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">100</field>
<field name="position_v">166</field>
</record>
<record id="table_23" model="restaurant.table">
<field name="name">3</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">100</field>
<field name="position_v">283</field>
</record>
<record id="table_24" model="restaurant.table">
<field name="name">4</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">100</field>
<field name="position_v">400</field>
</record>
<!-- Patio: Right table row -->
<record id="table_25" model="restaurant.table">
<field name="name">5</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">800</field>
<field name="position_v">50</field>
</record>
<record id="table_26" model="restaurant.table">
<field name="name">6</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">800</field>
<field name="position_v">166</field>
</record>
<record id="table_27" model="restaurant.table">
<field name="name">7</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">800</field>
<field name="position_v">283</field>
</record>
<record id="table_28" model="restaurant.table">
<field name="name">8</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">2</field>
<field name="color">rgb(53,211,116)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">85</field>
<field name="position_h">800</field>
<field name="position_v">400</field>
</record>
<!-- Patio: Center table block -->
<record id="table_29" model="restaurant.table">
<field name="name">9</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">4</field>
<field name="color">rgb(235,191,109)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">120</field>
<field name="position_h">330</field>
<field name="position_v">100</field>
</record>
<record id="table_29" model="restaurant.table">
<field name="name">9</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">4</field>
<field name="color">rgb(235,191,109)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">120</field>
<field name="position_h">330</field>
<field name="position_v">100</field>
</record>
<record id="table_30" model="restaurant.table">
<field name="name">10</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">4</field>
<field name="color">rgb(235,191,109)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">120</field>
<field name="position_h">560</field>
<field name="position_v">100</field>
</record>
<record id="table_31" model="restaurant.table">
<field name="name">11</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">4</field>
<field name="color">rgb(235,191,109)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">120</field>
<field name="position_h">330</field>
<field name="position_v">315</field>
</record>
<record id="table_32" model="restaurant.table">
<field name="name">12</field>
<field name="floor_id" ref="pos_restaurant.floor_patio" />
<field name="seats">4</field>
<field name="color">rgb(235,191,109)</field>
<field name="shape">square</field>
<field name="width">130</field>
<field name="height">120</field>
<field name="position_h">560</field>
<field name="position_v">315</field>
</record>
</odoo>

View File

@ -0,0 +1,154 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Open Session -->
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'pos_restaurant.pos_open_session_2',
'record': obj().env.ref('pos_restaurant.pos_config_main_restaurant').current_session_id,
'noupdate': True,
}]" />
</function>
<record id="pos_open_order_2" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_open_session_2" />
<field name="company_id" ref="base.main_company" />
<field name="name">Restaurant/00001</field>
<field name="state">draft</field>
<field name="amount_total">22.90</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">0.0</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00002-001-0000</field>
<field name="table_id" ref="table_01" />
<field name="customer_count">8</field>
</record>
<record id="pos_orderline_2" model="pos.order.line" forcecreate="False">
<field name="name">Orderline 2</field>
<field name="product_id" ref="coke" />
<field name="price_subtotal">4.40</field>
<field name="price_subtotal_incl">4.40</field>
<field name="price_unit">2.20</field>
<field name="qty">2</field>
<field name="order_id" ref="pos_open_order_2" />
<field name="full_product_name">Coca-Cola</field>
<field name="uuid">00000000-0000-4000-000000000000</field>
</record>
<record id="pos_orderline_3" model="pos.order.line" forcecreate="False">
<field name="name">Orderline 3</field>
<field name="product_id" ref="pos_food_chirashi" />
<field name="price_subtotal">18.5</field>
<field name="price_subtotal_incl">18.5</field>
<field name="price_unit">9.25</field>
<field name="qty">2</field>
<field name="order_id" ref="pos_open_order_2" />
<field name="full_product_name">Salmon and Avocado</field>
<field name="uuid">00000000-0000-4000-000000000001</field>
</record>
<record id="pos_open_order_3" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_open_session_2" />
<field name="company_id" ref="base.main_company" />
<field name="name">Restaurant/00002</field>
<field name="state">draft</field>
<field name="amount_total">21.8</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">0.0</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00002-002-0000</field>
<field name="table_id" ref="table_02" />
<field name="customer_count">3</field>
</record>
<record id="pos_orderline_4" model="pos.order.line" forcecreate="False">
<field name="name">Orderline 4</field>
<field name="product_id" ref="pos_food_temaki" />
<field name="price_subtotal">14.0</field>
<field name="price_subtotal_incl">14.0</field>
<field name="price_unit">14.0</field>
<field name="qty">1</field>
<field name="order_id" ref="pos_open_order_3" />
<field name="full_product_name">Lunch Temaki mix 3pc</field>
<field name="uuid">00000000-0000-4000-000000000002</field>
</record>
<record id="pos_orderline_5" model="pos.order.line" forcecreate="False">
<field name="name">Orderline 5</field>
<field name="product_id" ref="pos_food_mozza" />
<field name="price_subtotal">7.8</field>
<field name="price_subtotal_incl">7.8</field>
<field name="price_unit">3.9</field>
<field name="qty">2</field>
<field name="order_id" ref="pos_open_order_3" />
<field name="full_product_name">Mozzarella Sandwich</field>
<field name="uuid">00000000-0000-4000-000000000003</field>
</record>
<record id="pos_open_order_4" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_open_session_2" />
<field name="company_id" ref="base.main_company" />
<field name="name">Restaurant/00003</field>
<field name="state">draft</field>
<field name="amount_total">10.5</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">0.0</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00002-003-0000</field>
<field name="table_id" ref="table_04" />
<field name="customer_count">5</field>
</record>
<record id="pos_orderline_6" model="pos.order.line" forcecreate="False">
<field name="name">Orderline 6</field>
<field name="product_id" ref="pos_food_chicken" />
<field name="price_subtotal">3.0</field>
<field name="price_subtotal_incl">3.0</field>
<field name="price_unit">3.0</field>
<field name="qty">1</field>
<field name="order_id" ref="pos_open_order_4" />
<field name="full_product_name">Chicken Curry Sandwich</field>
<field name="uuid">00000000-0000-4000-000000000004</field>
</record>
<record id="pos_orderline_7" model="pos.order.line" forcecreate="False">
<field name="name">Orderline 7</field>
<field name="product_id" ref="pos_food_bacon" />
<field name="price_subtotal">7.5</field>
<field name="price_subtotal_incl">7.5</field>
<field name="price_unit">7.5</field>
<field name="qty">1</field>
<field name="order_id" ref="pos_open_order_4" />
<field name="full_product_name">Bacon Burger</field>
<field name="uuid">00000000-0000-4000-000000000005</field>
</record>
<record id="pos_open_order_5" model="pos.order" forcecreate="False">
<field name="session_id" ref="pos_open_session_2" />
<field name="company_id" ref="base.main_company" />
<field name="name">Restaurant/00004</field>
<field name="state">draft</field>
<field name="amount_total">5.5</field>
<field name="amount_tax">0.0</field>
<field name="amount_paid">0.0</field>
<field name="amount_return">0.0</field>
<field name="pos_reference">Order 00002-004-0000</field>
<field name="table_id" ref="table_06" />
<field name="customer_count">1</field>
</record>
<record id="pos_orderline_8" model="pos.order.line" forcecreate="False">
<field name="name">Orderline 8</field>
<field name="product_id" ref="pos_food_4formaggi" />
<field name="price_subtotal">5.5</field>
<field name="price_subtotal_incl">5.5</field>
<field name="price_unit">5.5</field>
<field name="qty">1</field>
<field name="order_id" ref="pos_open_order_5" />
<field name="full_product_name">Pizza 4 Formaggi</field>
</record>
<function model="pos.session" name="_set_last_order_preparation_change"
eval="[[ref('pos_open_order_2'), ref('pos_open_order_3'), ref('pos_open_order_4')]]"/>
</odoo>

1236
i18n/af.po Normal file

File diff suppressed because it is too large Load Diff

1344
i18n/ar.po Normal file

File diff suppressed because it is too large Load Diff

1237
i18n/az.po Normal file

File diff suppressed because it is too large Load Diff

1330
i18n/bg.po Normal file

File diff suppressed because it is too large Load Diff

1237
i18n/bs.po Normal file

File diff suppressed because it is too large Load Diff

1345
i18n/ca.po Normal file

File diff suppressed because it is too large Load Diff

1328
i18n/cs.po Normal file

File diff suppressed because it is too large Load Diff

1347
i18n/da.po Normal file

File diff suppressed because it is too large Load Diff

1360
i18n/de.po Normal file

File diff suppressed because it is too large Load Diff

1241
i18n/el.po Normal file

File diff suppressed because it is too large Load Diff

1235
i18n/en_GB.po Normal file

File diff suppressed because it is too large Load Diff

1361
i18n/es.po Normal file

File diff suppressed because it is too large Load Diff

1363
i18n/es_419.po Normal file

File diff suppressed because it is too large Load Diff

1234
i18n/es_BO.po Normal file

File diff suppressed because it is too large Load Diff

1234
i18n/es_CL.po Normal file

File diff suppressed because it is too large Load Diff

1238
i18n/es_CO.po Normal file

File diff suppressed because it is too large Load Diff

1234
i18n/es_CR.po Normal file

File diff suppressed because it is too large Load Diff

1235
i18n/es_DO.po Normal file

File diff suppressed because it is too large Load Diff

1239
i18n/es_EC.po Normal file

File diff suppressed because it is too large Load Diff

1235
i18n/es_PE.po Normal file

File diff suppressed because it is too large Load Diff

1234
i18n/es_PY.po Normal file

File diff suppressed because it is too large Load Diff

1234
i18n/es_VE.po Normal file

File diff suppressed because it is too large Load Diff

1337
i18n/et.po Normal file

File diff suppressed because it is too large Load Diff

1234
i18n/eu.po Normal file

File diff suppressed because it is too large Load Diff

1324
i18n/fa.po Normal file

File diff suppressed because it is too large Load Diff

1362
i18n/fi.po Normal file

File diff suppressed because it is too large Load Diff

1361
i18n/fr.po Normal file

File diff suppressed because it is too large Load Diff

1234
i18n/fr_CA.po Normal file

File diff suppressed because it is too large Load Diff

1234
i18n/gl.po Normal file

File diff suppressed because it is too large Load Diff

1236
i18n/gu.po Normal file

File diff suppressed because it is too large Load Diff

1326
i18n/he.po Normal file

File diff suppressed because it is too large Load Diff

1245
i18n/hr.po Normal file

File diff suppressed because it is too large Load Diff

1327
i18n/hu.po Normal file

File diff suppressed because it is too large Load Diff

1351
i18n/id.po Normal file

File diff suppressed because it is too large Load Diff

1232
i18n/is.po Normal file

File diff suppressed because it is too large Load Diff

1357
i18n/it.po Normal file

File diff suppressed because it is too large Load Diff

1337
i18n/ja.po Normal file

File diff suppressed because it is too large Load Diff

1234
i18n/ka.po Normal file

File diff suppressed because it is too large Load Diff

1234
i18n/kab.po Normal file

File diff suppressed because it is too large Load Diff

1237
i18n/km.po Normal file

File diff suppressed because it is too large Load Diff

1335
i18n/ko.po Normal file

File diff suppressed because it is too large Load Diff

1232
i18n/lb.po Normal file

File diff suppressed because it is too large Load Diff

1328
i18n/lt.po Normal file

File diff suppressed because it is too large Load Diff

1348
i18n/lv.po Normal file

File diff suppressed because it is too large Load Diff

1239
i18n/mk.po Normal file

File diff suppressed because it is too large Load Diff

1245
i18n/mn.po Normal file

File diff suppressed because it is too large Load Diff

1239
i18n/nb.po Normal file

File diff suppressed because it is too large Load Diff

1361
i18n/nl.po Normal file

File diff suppressed because it is too large Load Diff

1330
i18n/pl.po Normal file

File diff suppressed because it is too large Load Diff

1329
i18n/pos_restaurant.pot Normal file

File diff suppressed because it is too large Load Diff

1341
i18n/pt.po Normal file

File diff suppressed because it is too large Load Diff

1357
i18n/pt_BR.po Normal file

File diff suppressed because it is too large Load Diff

1242
i18n/ro.po Normal file

File diff suppressed because it is too large Load Diff

1360
i18n/ru.po Normal file

File diff suppressed because it is too large Load Diff

1314
i18n/sk.po Normal file

File diff suppressed because it is too large Load Diff

1318
i18n/sl.po Normal file

File diff suppressed because it is too large Load Diff

1235
i18n/sq.po Normal file

File diff suppressed because it is too large Load Diff

1354
i18n/sr.po Normal file

File diff suppressed because it is too large Load Diff

1238
i18n/sr@latin.po Normal file

File diff suppressed because it is too large Load Diff

1324
i18n/sv.po Normal file

File diff suppressed because it is too large Load Diff

1340
i18n/th.po Normal file

File diff suppressed because it is too large Load Diff

1363
i18n/tr.po Normal file

File diff suppressed because it is too large Load Diff

1351
i18n/uk.po Normal file

File diff suppressed because it is too large Load Diff

1350
i18n/vi.po Normal file

File diff suppressed because it is too large Load Diff

1339
i18n/zh_CN.po Normal file

File diff suppressed because it is too large Load Diff

1336
i18n/zh_TW.po Normal file

File diff suppressed because it is too large Load Diff

9
models/__init__.py Normal file
View File

@ -0,0 +1,9 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import pos_config
from . import pos_order
from . import pos_payment
from . import pos_restaurant
from . import pos_session
from . import res_config_settings

163
models/pos_config.py Normal file
View File

@ -0,0 +1,163 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
import json
from collections import defaultdict
class PosConfig(models.Model):
_inherit = 'pos.config'
iface_splitbill = fields.Boolean(string='Bill Splitting', help='Enables Bill Splitting in the Point of Sale.')
iface_printbill = fields.Boolean(string='Bill Printing', help='Allows to print the Bill before payment.')
iface_orderline_notes = fields.Boolean(string='Internal Notes', help='Allow custom Internal notes on Orderlines.')
floor_ids = fields.Many2many('restaurant.floor', string='Restaurant Floors', help='The restaurant floors served by this point of sale.')
set_tip_after_payment = fields.Boolean('Set Tip After Payment', help="Adjust the amount authorized by payment terminals to add a tip after the customers left or at the end of the day.")
module_pos_restaurant = fields.Boolean(default=True)
module_pos_restaurant_appointment = fields.Boolean("Table Booking")
def get_tables_order_count_and_printing_changes(self):
self.ensure_one()
floors = self.env['restaurant.floor'].search([('pos_config_ids', '=', self.id)])
tables = self.env['restaurant.table'].search([('floor_id', 'in', floors.ids)])
domain = [('state', '=', 'draft'), ('table_id', 'in', tables.ids)]
order_stats = self.env['pos.order']._read_group(domain, ['table_id'], ['__count'])
linked_orderlines = self.env['pos.order.line'].search([('order_id.state', '=', 'draft'), ('order_id.table_id', 'in', tables.ids)])
orders_map = {table.id: count for table, count in order_stats}
changes_map = defaultdict(lambda: 0)
skip_changes_map = defaultdict(lambda: 0)
for line in linked_orderlines:
# For the moment, as this feature is not compatible with pos_self_order,
# we ignore last_order_preparation_change when it is set to false.
# In future, pos_self_order will send the various changes to the order.
if not line.order_id.last_order_preparation_change:
line.order_id.last_order_preparation_change = '{}'
last_order_preparation_change = json.loads(line.order_id.last_order_preparation_change)
prep_change = {}
for line_uuid in last_order_preparation_change:
prep_change[last_order_preparation_change[line_uuid]['line_uuid']] = last_order_preparation_change[line_uuid]
quantity_changed = 0
if line.uuid in prep_change:
quantity_changed = line.qty - prep_change[line.uuid]['quantity']
else:
quantity_changed = line.qty
if line.skip_change:
skip_changes_map[line.order_id.table_id.id] += quantity_changed
else:
changes_map[line.order_id.table_id.id] += quantity_changed
result = []
for table in tables:
result.append({'id': table.id, 'orders': orders_map.get(table.id, 0), 'changes': changes_map.get(table.id, 0), 'skip_changes': skip_changes_map.get(table.id, 0)})
return result
def _get_forbidden_change_fields(self):
forbidden_keys = super(PosConfig, self)._get_forbidden_change_fields()
forbidden_keys.append('floor_ids')
return forbidden_keys
def _set_tips_after_payment_if_country_custom(self):
self.ensure_one()
company = self.company_id or self.env.company or self.env['res.company']._get_main_company()
if company and company.country_id and company.country_id.code == 'US':
self.update({
'iface_tipproduct': True,
'set_tip_after_payment': True,
})
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
is_restaurant = 'module_pos_restaurant' not in vals or vals['module_pos_restaurant']
if is_restaurant and 'iface_splitbill' not in vals:
vals['iface_splitbill'] = True
if not is_restaurant or not vals.get('iface_tipproduct', False):
vals['set_tip_after_payment'] = False
vals["iface_orderline_notes"] = is_restaurant
pos_configs = super().create(vals_list)
for config in pos_configs:
if config.module_pos_restaurant:
self._setup_default_floor(config)
return pos_configs
def write(self, vals):
if ('module_pos_restaurant' in vals and vals['module_pos_restaurant'] is False):
vals['floor_ids'] = [(5, 0, 0)]
if ('module_pos_restaurant' in vals and not vals['module_pos_restaurant']) or ('iface_tipproduct' in vals and not vals['iface_tipproduct']):
vals['set_tip_after_payment'] = False
if ('module_pos_restaurant' in vals and vals['module_pos_restaurant']):
self._setup_default_floor(self)
return super().write(vals)
@api.model
def post_install_pos_localisation(self, companies=False):
self = self.sudo()
if not companies:
companies = self.env['res.company'].search([])
super(PosConfig, self).post_install_pos_localisation(companies)
for company in companies.filtered('chart_template'):
pos_configs = self.search([
*self.env['account.journal']._check_company_domain(company),
('module_pos_restaurant', '=', True),
])
if not pos_configs:
pos_configs = self.env['pos.config'].with_company(company).create({
'name': _('Bar'),
'company_id': company.id,
'module_pos_restaurant': True,
'iface_splitbill': True,
'iface_printbill': True,
'iface_orderline_notes': True,
})
pos_configs.setup_defaults(company)
def setup_defaults(self, company):
main_restaurant = self.env.ref('pos_restaurant.pos_config_main_restaurant', raise_if_not_found=False)
main_restaurant_is_present = main_restaurant and self.filtered(lambda cfg: cfg.id == main_restaurant.id)
if main_restaurant_is_present:
non_main_restaurant_configs = self - main_restaurant
non_main_restaurant_configs.assign_payment_journals(company)
main_restaurant._setup_main_restaurant_defaults()
self.generate_pos_journal(company)
self.setup_invoice_journal(company)
else:
super().setup_defaults(company)
def _setup_main_restaurant_defaults(self):
self.ensure_one()
self._set_tips_after_payment_if_country_custom()
self._link_same_non_cash_payment_methods_if_exists('point_of_sale.pos_config_main')
self._ensure_cash_payment_method('MRCSH', _('Cash Restaurant'))
self._archive_shop()
def _archive_shop(self):
shop = self.env.ref('point_of_sale.pos_config_main', raise_if_not_found=False)
if shop:
session_count = self.env['pos.session'].search_count([('config_id', '=', shop.id)])
if session_count == 0:
shop.update({'active': False})
def _setup_default_floor(self, pos_config):
if not pos_config.floor_ids:
main_floor = self.env['restaurant.floor'].create({
'name': pos_config.company_id.name,
'pos_config_ids': [(4, pos_config.id)],
})
self.env['restaurant.table'].create({
'name': '1',
'floor_id': main_floor.id,
'seats': 1,
'position_h': 100,
'position_v': 100,
'width': 100,
'height': 100,
})

95
models/pos_order.py Normal file
View File

@ -0,0 +1,95 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from functools import partial
from odoo import api, fields, models
class PosOrderLine(models.Model):
_inherit = 'pos.order.line'
note = fields.Char('Internal Note added by the waiter.')
class PosOrder(models.Model):
_inherit = 'pos.order'
table_id = fields.Many2one('restaurant.table', string='Table', help='The table where this order was served', index='btree_not_null', readonly=True)
customer_count = fields.Integer(string='Guests', help='The amount of customers that have been served by this order.', readonly=True)
@api.model
def remove_from_ui(self, server_ids):
tables = self.env['pos.order'].search([('id', 'in', server_ids)]).table_id
order_ids = super().remove_from_ui(server_ids)
self.send_table_count_notification(tables)
return order_ids
def _process_saved_order(self, draft):
order_id = super()._process_saved_order(draft)
self.send_table_count_notification(self.table_id)
return order_id
def send_table_count_notification(self, table_ids):
messages = []
for config in self.env['pos.config'].search([('floor_ids', 'in', table_ids.floor_id.ids)]):
config_cur_session = config.current_session_id
if config_cur_session:
order_count = config.get_tables_order_count_and_printing_changes()
messages.append((config_cur_session._get_bus_channel_name(), 'TABLE_ORDER_COUNT', order_count))
self.env['bus.bus']._sendmany(messages)
def set_tip(self, tip_line_vals):
"""Set tip to `self` based on values in `tip_line_vals`."""
self.ensure_one()
PosOrderLine = self.env['pos.order.line']
process_line = partial(PosOrderLine._order_line_fields, session_id=self.session_id.id)
# 1. add/modify tip orderline
processed_tip_line_vals = process_line([0, 0, tip_line_vals])[2]
processed_tip_line_vals.update({ "order_id": self.id })
tip_line = self.lines.filtered(lambda line: line.product_id == self.session_id.config_id.tip_product_id)
if not tip_line:
tip_line = PosOrderLine.create(processed_tip_line_vals)
else:
tip_line.write(processed_tip_line_vals)
# 2. modify payment
payment_line = self.payment_ids.filtered(lambda line: not line.is_change)[0]
# TODO it would be better to throw error if there are multiple payment lines
# then ask the user to select which payment to update, no?
payment_line._update_payment_line_for_tip(tip_line.price_subtotal_incl)
# 3. flag order as tipped and update order fields
self.write({
"is_tipped": True,
"tip_amount": tip_line.price_subtotal_incl,
"amount_total": self.amount_total + tip_line.price_subtotal_incl,
"amount_paid": self.amount_paid + tip_line.price_subtotal_incl,
})
def set_no_tip(self):
"""Override this method to introduce action when setting no tip."""
self.ensure_one()
self.write({
"is_tipped": True,
"tip_amount": 0,
})
@api.model
def _order_fields(self, ui_order):
order_fields = super(PosOrder, self)._order_fields(ui_order)
order_fields['table_id'] = ui_order.get('table_id', False)
order_fields['customer_count'] = ui_order.get('customer_count', 0)
return order_fields
def _export_for_ui(self, order):
result = super(PosOrder, self)._export_for_ui(order)
result['table_id'] = order.table_id.id
result['customer_count'] = order.customer_count
return result
@api.model
def export_for_ui_table_draft(self, table_ids):
orders = self.env['pos.order'].search([('state', '=', 'draft'), ('table_id', 'in', table_ids)])
return orders.export_for_ui()

15
models/pos_payment.py Normal file
View File

@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
class PosConfig(models.Model):
_inherit = 'pos.payment'
def _update_payment_line_for_tip(self, tip_amount):
"""Inherit this method to perform reauthorization or capture on electronic payment."""
self.ensure_one()
self.write({
"amount": self.amount + tip_amount,
})

101
models/pos_restaurant.py Normal file
View File

@ -0,0 +1,101 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _, Command
from odoo.exceptions import UserError
class RestaurantFloor(models.Model):
_name = 'restaurant.floor'
_description = 'Restaurant Floor'
_order = "sequence, name"
name = fields.Char('Floor Name', required=True)
pos_config_ids = fields.Many2many('pos.config', string='Point of Sales', domain="[('module_pos_restaurant', '=', True)]")
background_image = fields.Binary('Background Image')
background_color = fields.Char('Background Color', help='The background color of the floor in a html-compatible format', default='rgb(210, 210, 210)')
table_ids = fields.One2many('restaurant.table', 'floor_id', string='Tables')
sequence = fields.Integer('Sequence', default=1)
active = fields.Boolean(default=True)
@api.ondelete(at_uninstall=False)
def _unlink_except_active_pos_session(self):
confs = self.mapped('pos_config_ids').filtered(lambda c: c.module_pos_restaurant)
opened_session = self.env['pos.session'].search([('config_id', 'in', confs.ids), ('state', '!=', 'closed')])
if opened_session and confs:
error_msg = _("You cannot remove a floor that is used in a PoS session, close the session(s) first: \n")
for floor in self:
for session in opened_session:
if floor in session.config_id.floor_ids:
error_msg += _("Floor: %s - PoS Config: %s \n", floor.name, session.config_id.name)
raise UserError(error_msg)
def write(self, vals):
for floor in self:
for config in floor.pos_config_ids:
if config.has_active_session and (vals.get('pos_config_ids') or vals.get('active')):
raise UserError(
'Please close and validate the following open PoS Session before modifying this floor.\n'
'Open session: %s' % (' '.join(config.mapped('name')),))
return super(RestaurantFloor, self).write(vals)
def rename_floor(self, new_name):
for floor in self:
floor.name = new_name
@api.model
def create_from_ui(self, name, background_color, config_id):
floor_fields = {
"name": name,
"background_color": background_color,
}
pos_floor = self.create(floor_fields)
pos_floor.pos_config_ids = [Command.link(config_id)]
return {
'id': pos_floor.id,
'name': pos_floor.name,
'background_color': pos_floor.background_color,
'table_ids': [],
'sequence': pos_floor.sequence,
'tables': [],
}
def deactivate_floor(self, session_id):
draft_orders = self.env['pos.order'].search([('session_id', '=', session_id), ('state', '=', 'draft'), ('table_id.floor_id', '=', self.id)])
if draft_orders:
raise UserError(_("You cannot delete a floor when orders are still in draft for this floor."))
for table in self.table_ids:
table.active = False
self.active = False
class RestaurantTable(models.Model):
_name = 'restaurant.table'
_description = 'Restaurant Table'
name = fields.Char('Table Name', required=True, help='An internal identification of a table')
floor_id = fields.Many2one('restaurant.floor', string='Floor')
shape = fields.Selection([('square', 'Square'), ('round', 'Round')], string='Shape', required=True, default='square')
position_h = fields.Float('Horizontal Position', default=10,
help="The table's horizontal position from the left side to the table's center, in pixels")
position_v = fields.Float('Vertical Position', default=10,
help="The table's vertical position from the top to the table's center, in pixels")
width = fields.Float('Width', default=50, help="The table's width in pixels")
height = fields.Float('Height', default=50, help="The table's height in pixels")
seats = fields.Integer('Seats', default=1, help="The default number of customer served at this table.")
color = fields.Char('Color', help="The table's color, expressed as a valid 'background' CSS property value", default="#35D374")
active = fields.Boolean('Active', default=True, help='If false, the table is deactivated and will not be available in the point of sale')
def are_orders_still_in_draft(self):
draft_orders_count = self.env['pos.order'].search_count([('table_id', 'in', self.ids), ('state', '=', 'draft')])
return draft_orders_count > 0
@api.ondelete(at_uninstall=False)
def _unlink_except_active_pos_session(self):
confs = self.mapped('floor_id.pos_config_ids').filtered(lambda c: c.module_pos_restaurant)
opened_session = self.env['pos.session'].search([('config_id', 'in', confs.ids), ('state', '!=', 'closed')])
if opened_session:
error_msg = _("You cannot remove a table that is used in a PoS session, close the session(s) first.")
if confs:
raise UserError(error_msg)

103
models/pos_session.py Normal file
View File

@ -0,0 +1,103 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, Command, api
from odoo.tools import convert
from itertools import groupby
from odoo.osv.expression import AND
import json
class PosSession(models.Model):
_inherit = 'pos.session'
def _pos_ui_models_to_load(self):
result = super()._pos_ui_models_to_load()
if self.config_id.module_pos_restaurant:
result.append('restaurant.floor')
return result
def _loader_params_restaurant_floor(self):
return {
'search_params': {
'domain': [('pos_config_ids', '=', self.config_id.id)],
'fields': ['name', 'background_color', 'table_ids', 'sequence'],
},
}
def _loader_params_restaurant_table(self):
return {
'search_params': {
'domain': [('active', '=', True)],
'fields': [
'name', 'width', 'height', 'position_h', 'position_v',
'shape', 'floor_id', 'color', 'seats', 'active'
],
},
}
def _get_pos_ui_restaurant_floor(self, params):
floors = self.env['restaurant.floor'].search_read(**params['search_params'])
floor_ids = [floor['id'] for floor in floors]
table_params = self._loader_params_restaurant_table()
table_params['search_params']['domain'] = AND([table_params['search_params']['domain'], [('floor_id', 'in', floor_ids)]])
tables = self.env['restaurant.table'].search(table_params['search_params']['domain'], order='floor_id')
tables_by_floor_id = {}
for floor_id, table_group in groupby(tables, key=lambda table: table.floor_id):
floor_tables = self.env['restaurant.table'].concat(*table_group)
tables_by_floor_id[floor_id.id] = floor_tables.read(table_params['search_params']['fields'])
for floor in floors:
floor['tables'] = tables_by_floor_id.get(floor['id'], [])
return floors
def get_pos_ui_restaurant_floor(self):
return self._get_pos_ui_restaurant_floor(self._loader_params_restaurant_floor())
def get_onboarding_data(self):
results = super().get_onboarding_data()
if self.config_id.module_pos_restaurant:
results.update({
'restaurant.floor': self._load_model('restaurant.floor'),
})
return results
@api.model
def _load_onboarding_data(self):
super()._load_onboarding_data()
convert.convert_file(self.env, 'pos_restaurant', 'data/pos_restaurant_onboarding.xml', None, mode='init', kind='data')
restaurant_config = self.env.ref('pos_restaurant.pos_config_main_restaurant', raise_if_not_found=False)
if restaurant_config:
convert.convert_file(self.env, 'pos_restaurant', 'data/pos_restaurant_onboarding_main_config.xml', None, mode='init', kind='data')
if len(restaurant_config.session_ids.filtered(lambda s: s.state == 'opened')) == 0:
self.env['pos.session'].create({
'config_id': restaurant_config.id,
'user_id': self.env.ref('base.user_admin').id,
})
convert.convert_file(self.env, 'pos_restaurant', 'data/pos_restaurant_onboarding_open_session.xml', None, mode='init', kind='data')
def _after_load_onboarding_data(self):
super()._after_load_onboarding_data()
configs = self.config_id.filtered('module_pos_restaurant')
if configs:
configs.with_context(bypass_categories_forbidden_change=True).write({
'limit_categories': True,
'iface_available_categ_ids': [Command.link(self.env.ref('pos_restaurant.food').id), Command.link(self.env.ref('pos_restaurant.drinks').id)]
})
@api.model
def _set_last_order_preparation_change(self, order_ids):
for order_id in order_ids:
order = self.env['pos.order'].browse(order_id)
last_order_preparation_change = {}
for orderline in order['lines']:
last_order_preparation_change[orderline.uuid + " - "] = {
"line_uuid": orderline.uuid,
"name": orderline.full_product_name,
"note": "",
"product_id": orderline.product_id.id,
"quantity": orderline.qty,
"attribute_value_ids": orderline.attribute_value_ids.ids,
}
order.write({'last_order_preparation_change': json.dumps(last_order_preparation_change)})

View File

@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
from odoo import fields, models, api
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
pos_floor_ids = fields.Many2many(related='pos_config_id.floor_ids', readonly=False)
pos_iface_orderline_notes = fields.Boolean(compute='_compute_pos_module_pos_restaurant', store=True, readonly=False)
pos_iface_printbill = fields.Boolean(compute='_compute_pos_module_pos_restaurant', store=True, readonly=False)
pos_iface_splitbill = fields.Boolean(compute='_compute_pos_module_pos_restaurant', store=True, readonly=False)
pos_set_tip_after_payment = fields.Boolean(compute='_compute_pos_set_tip_after_payment', store=True, readonly=False)
pos_module_pos_restaurant_appointment = fields.Boolean(related="pos_config_id.module_pos_restaurant_appointment", readonly=False)
@api.depends('pos_module_pos_restaurant', 'pos_config_id')
def _compute_pos_module_pos_restaurant(self):
for res_config in self:
if not res_config.pos_module_pos_restaurant:
res_config.update({
'pos_iface_orderline_notes': False,
'pos_iface_printbill': False,
'pos_iface_splitbill': False,
})
else:
res_config.update({
'pos_iface_orderline_notes': res_config.pos_config_id.iface_orderline_notes,
'pos_iface_printbill': res_config.pos_config_id.iface_printbill,
'pos_iface_splitbill': res_config.pos_config_id.iface_splitbill,
})
@api.depends('pos_iface_tipproduct', 'pos_config_id')
def _compute_pos_set_tip_after_payment(self):
for res_config in self:
if res_config.pos_iface_tipproduct:
res_config.pos_set_tip_after_payment = res_config.pos_config_id.set_tip_after_payment
else:
res_config.pos_set_tip_after_payment = False

View File

@ -0,0 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_restaurant_floor,restaurant.floor.user,model_restaurant_floor,point_of_sale.group_pos_user,1,0,0,0
access_restaurant_floor_manager,restaurant.floor.manager,model_restaurant_floor,point_of_sale.group_pos_manager,1,1,1,1
access_restaurant_table,restaurant.table.user,model_restaurant_table,point_of_sale.group_pos_user,1,0,0,0
access_restaurant_table_manager,restaurant.table.manager,model_restaurant_table,point_of_sale.group_pos_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_restaurant_floor restaurant.floor.user model_restaurant_floor point_of_sale.group_pos_user 1 0 0 0
3 access_restaurant_floor_manager restaurant.floor.manager model_restaurant_floor point_of_sale.group_pos_manager 1 1 1 1
4 access_restaurant_table restaurant.table.user model_restaurant_table point_of_sale.group_pos_user 1 0 0 0
5 access_restaurant_table_manager restaurant.table.manager model_restaurant_table point_of_sale.group_pos_manager 1 1 1 1

BIN
static/description/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1 @@
<svg width="50" height="50" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg"><circle cx="25" cy="25.001" r="17" fill="#985184"/><path d="m42.586 15.587-8.172-8.172c-1.26-1.26-.367-3.414 1.414-3.414H42a4 4 0 0 1 4 4v6.171c0 1.782-2.154 2.675-3.414 1.415ZM7.414 34.415l8.172 8.172c1.26 1.26.367 3.414-1.414 3.414H8a4 4 0 0 1-4-4v-6.172c0-1.781 2.154-2.674 3.414-1.414Zm27 8.172 8.172-8.172c1.26-1.26 3.414-.367 3.414 1.414v6.172a4 4 0 0 1-4 4h-6.172c-1.781 0-2.674-2.154-1.414-3.414ZM15.586 7.415l-8.172 8.172C6.154 16.847 4 15.954 4 14.172v-6.17a4 4 0 0 1 4-4h6.172c1.781 0 2.674 2.154 1.414 3.414Z" fill="#FBB945"/></svg>

After

Width:  |  Height:  |  Size: 628 B

BIN
static/img/combo-hamb.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
static/img/th-burger.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
static/img/th-club.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
static/img/th-coke.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
static/img/th-espresso.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
static/img/th-fanta.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
static/img/th-green_tea.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
static/img/th-ice_tea.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
static/img/th-maki.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
static/img/th-mozza.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
static/img/th-pasta-4f.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
static/img/th-pasta.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Some files were not shown because too many files have changed in this diff Show More