Initial commit: Pos packages

This commit is contained in:
Ernad Husremovic 2025-08-29 15:20:50 +02:00
commit 95dfb9edb0
1301 changed files with 264148 additions and 0 deletions

View file

@ -0,0 +1,16 @@
<?xml version="1.0"?>
<odoo>
<record id="view_pos_pos_form" model="ir.ui.view">
<field name="name">pos.order.form.view.inherit</field>
<field name="model">pos.order</field>
<field name="inherit_id" ref="point_of_sale.view_pos_pos_form"></field>
<field name="arch" type="xml">
<xpath expr="//group[@name='order_fields']" position="inside">
<field name="table_id"/>
<field name="customer_count"/>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,171 @@
<?xml version="1.0"?>
<odoo>
<!-- RESTAURANTS FLOORS -->
<record id="view_restaurant_floor_form" model="ir.ui.view">
<field name="name">Restaurant Floors</field>
<field name="model">restaurant.floor</field>
<field name="arch" type="xml">
<form string="Restaurant Floor">
<sheet>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<field name="active" invisible="1"/>
<group col="4">
<field name="name" />
<field name="pos_config_id" />
<field name="background_color" groups="base.group_no_one" />
</group>
<field name="table_ids">
<tree string='Tables'>
<field name="name" />
<field name="seats" />
<field name="shape" />
</tree>
</field>
</sheet>
</form>
</field>
</record>
<record id="view_restaurant_floor_tree" model="ir.ui.view">
<field name="name">Restaurant Floors</field>
<field name="model">restaurant.floor</field>
<field name="arch" type="xml">
<tree string="Restaurant Floors">
<field name="sequence" widget="handle" />
<field name="name" />
<field name="pos_config_id" />
</tree>
</field>
</record>
<record id="view_restaurant_floor_search" model="ir.ui.view">
<field name="name">restaurant.floor.search</field>
<field name="model">restaurant.floor</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<filter string="Archived" name="active" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<record id="view_restaurant_floor_kanban" model="ir.ui.view">
<field name="name">restaurant.floor.kanban</field>
<field name="model">restaurant.floor</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile">
<field name="name"/>
<field name="pos_config_id" />
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_global_click">
<div><strong>Floor Name: </strong><t t-esc="record.name.value"/></div>
<div><strong>Point of Sale: </strong><t t-esc="record.pos_config_id.value"/></div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="action_restaurant_floor_form" model="ir.actions.act_window">
<field name="name">Floor Plans</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">restaurant.floor</field>
<field name="view_mode">tree,kanban,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Add a new restaurant floor
</p><p>
A restaurant floor represents the place where customers are served, this is where you can
define and position the tables.
</p>
</field>
</record>
<record id="view_restaurant_table_form" model="ir.ui.view">
<field name="name">Restaurant Table</field>
<field name="model">restaurant.table</field>
<field name="arch" type="xml">
<form string="Restaurant Table">
<group col="2">
<field name="name" />
<field name="seats" />
</group>
<group col="4" string="Appearance" groups="base.group_no_one">
<field name="shape" />
<field name="color" />
<field name="position_h" />
<field name="position_v" />
<field name="width" />
<field name="height" />
</group>
</form>
</field>
</record>
<menuitem id="menu_restaurant_floor_all"
parent="point_of_sale.menu_point_config_product"
action="action_restaurant_floor_form"
sequence="10"
groups="base.group_no_one"/>
<!-- RESTAURANT PRINTERS -->
<record id="view_restaurant_printer_form" model="ir.ui.view">
<field name="name">Order Printer</field>
<field name="model">restaurant.printer</field>
<field name="arch" type="xml">
<form string="POS Printer">
<sheet>
<group>
<field name="name" />
<field name="printer_type" widget="radio"/>
<field name="proxy_ip" attrs="{'invisible': [('printer_type', '!=', 'iot')]}"/>
<field name="product_categories_ids" />
</group>
</sheet>
</form>
</field>
</record>
<record id="action_restaurant_printer_form" model="ir.actions.act_window">
<field name="name">Order Printers</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">restaurant.printer</field>
<field name="view_mode">tree,kanban,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Add a new restaurant order printer
</p><p>
Order Printers are used by restaurants and bars to print the
order updates in the kitchen/bar when the waiter updates the order.
</p><p>
Each Order Printer has an IP Address that defines the IoT Box/Hardware
Proxy where the printer can be found, and a list of product categories.
An Order Printer will only print updates for products belonging to one of
its categories.
</p>
</field>
</record>
<record id="view_restaurant_printer" model="ir.ui.view">
<field name="name">Order Printers</field>
<field name="model">restaurant.printer</field>
<field name="arch" type="xml">
<tree string="Restaurant Order Printers">
<field name="name" />
<field name="proxy_ip" />
<field name="product_categories_ids" widget="many2many_tags"/>
</tree>
</field>
</record>
<menuitem id="menu_restaurant_printer_all"
parent="point_of_sale.menu_point_config_product"
action="action_restaurant_printer_form"
sequence="15"
groups="base.group_no_one"/>
</odoo>

View file

@ -0,0 +1,105 @@
<?xml version="1.0"?>
<odoo>
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.pos_restaurant</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="point_of_sale.res_config_settings_view_form"/>
<field name="arch" type="xml">
<div id="warning_text_pos_restaurant" position="replace"/>
<div id="pos_interface_section" position="after">
<h2 class="mt16" attrs="{'invisible': [('pos_module_pos_restaurant', '=', False)]}">Restaurant &amp; Bar</h2>
<div class="row mt16 o_settings_container" id="restaurant_section" attrs="{'invisible': [('pos_module_pos_restaurant', '=', False)]}">
<div class="col-12 col-lg-6 o_setting_box"
id="is_table_management"
attrs="{'invisible': [('pos_module_pos_restaurant', '=', False)]}">
<div class="o_setting_left_pane">
<field name="pos_is_table_management" attrs="{'readonly': [('pos_has_active_session','=', True)]}"/>
</div>
<div class="o_setting_right_pane">
<label for="pos_is_table_management" string="Floors &amp; Tables Map"/>
<div class="text-muted">
Design floors and assign orders to tables
</div>
<div class="content-group" attrs="{'invisible': [('pos_is_table_management','=',False)]}">
<div class="mt16">
<label string="Floors" for="pos_floor_ids" class="o_light_label"/>
<field name="pos_floor_ids" widget="many2many_tags" attrs="{'readonly': [('pos_has_active_session','=', True)]}" />
</div>
<div>
<button name="%(pos_restaurant.action_restaurant_floor_form)d" icon="fa-arrow-right" type="action" string="Floors" class="btn-link"/>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="iface_orderline_notes"
attrs="{'invisible': [('pos_module_pos_restaurant', '=', False)]}">
<div class="o_setting_left_pane">
<field name="pos_iface_orderline_notes"/>
</div>
<div class="o_setting_right_pane">
<label for="pos_iface_orderline_notes" string="Kitchen Notes"/>
<div class="text-muted">
Add internal notes on order lines for the kitchen
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="iface_printbill"
attrs="{'invisible': [('pos_module_pos_restaurant', '=', False)]}">
<div class="o_setting_left_pane">
<field name="pos_iface_printbill"/>
</div>
<div class="o_setting_right_pane">
<label for="pos_iface_printbill" string="Early Receipt Printing" />
<div class="text-muted">
Allow to print receipt before payment
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="iface_splitbill"
attrs="{'invisible': [('pos_module_pos_restaurant', '=', False)]}">
<div class="o_setting_left_pane">
<field name="pos_iface_splitbill" string="Allow Bill Splitting"/>
</div>
<div class="o_setting_right_pane">
<label for="pos_iface_splitbill" string="Allow Bill Splitting"/>
<div class="text-muted">
Split total or order lines
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="is_order_printer"
attrs="{'invisible': [('pos_module_pos_restaurant', '=', False)]}">
<div class="o_setting_left_pane">
<field name="pos_is_order_printer"/>
</div>
<div class="o_setting_right_pane">
<label for="pos_is_order_printer" string="Kitchen Printers"/>
<div class="text-muted">
Print orders at the kitchen, at the bar, etc.
</div>
<div class="content-group" attrs="{'invisible': [('pos_is_order_printer', '=', False)]}">
<div class="mt16">
<label string="Printers" for="pos_printer_ids" class="o_light_label"/>
<field name="pos_printer_ids" widget="many2many_tags"/>
</div>
<div>
<button name="%(pos_restaurant.action_restaurant_printer_form)d" icon="fa-arrow-right" type="action" string="Printers" class="btn-link"/>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="tip_product" position="after">
<div attrs="{'invisible': ['|', ('pos_module_pos_restaurant', '=', False), ('pos_iface_tipproduct', '=', False)]}">
<field name="pos_set_tip_after_payment" class="oe_inline"/>
<label class="fw-normal" for="pos_set_tip_after_payment" string="Add tip after payment (North America specific)"/>
</div>
</div>
</field>
</record>
</odoo>