The amount is authorized when the customer scans its card, then the customer writes the tip on the receipt and the total amount is captured when the waiter manually inputs the tip, either right after or at the end of the day. closes odoo/odoo#56148 Taskid: 2321771 Related: odoo/upgrade#1661 Signed-off-by: pimodoo <pimodoo@users.noreply.github.com>
60 lines
2.8 KiB
Python
60 lines
2.8 KiB
Python
# -*- 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.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='Notes', help='Allow custom notes on Orderlines.')
|
|
floor_ids = fields.One2many('restaurant.floor', 'pos_config_id', string='Restaurant Floors', help='The restaurant floors served by this point of sale.')
|
|
printer_ids = fields.Many2many('restaurant.printer', 'pos_config_printer_rel', 'config_id', 'printer_id', string='Order Printers')
|
|
is_table_management = fields.Boolean('Floors & Tables')
|
|
is_order_printer = fields.Boolean('Order Printer')
|
|
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)
|
|
|
|
@api.onchange('module_pos_restaurant')
|
|
def _onchange_module_pos_restaurant(self):
|
|
if not self.module_pos_restaurant:
|
|
self.update({'iface_printbill': False,
|
|
'iface_splitbill': False,
|
|
'is_order_printer': False,
|
|
'is_table_management': False,
|
|
'iface_orderline_notes': False})
|
|
|
|
@api.onchange('iface_tipproduct')
|
|
def _onchange_iface_tipproduct(self):
|
|
if not self.iface_tipproduct:
|
|
self.set_tip_after_payment = False
|
|
|
|
def get_tables_order_count(self):
|
|
""" """
|
|
self.ensure_one()
|
|
tables = self.env['restaurant.table'].search([('floor_id.pos_config_id', 'in', self.ids)])
|
|
domain = [('state', '=', 'draft'), ('table_id', 'in', tables.ids)]
|
|
|
|
order_stats = self.env['pos.order'].read_group(domain, ['table_id'], 'table_id')
|
|
orders_map = dict((s['table_id'][0], s['table_id_count']) for s in order_stats)
|
|
|
|
result = []
|
|
for table in tables:
|
|
result.append({'id': table.id, 'orders': orders_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('is_table_management')
|
|
forbidden_keys.append('floor_ids')
|
|
return forbidden_keys
|
|
|
|
def write(self, vals):
|
|
if ('is_table_management' in vals and vals['is_table_management'] == False):
|
|
vals['floor_ids'] = [(5, 0, 0)]
|
|
if ('is_order_printer' in vals and vals['is_order_printer'] == False):
|
|
vals['printer_ids'] = [(5, 0, 0)]
|
|
return super(PosConfig, self).write(vals)
|