36 lines
1.8 KiB
Python
36 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from odoo import http, _
|
|
from odoo.exceptions import UserError
|
|
from odoo.addons.pos_self_order.controllers.orders import PosSelfOrderController
|
|
|
|
class PosSelfOrderPreparationDisplayController(PosSelfOrderController):
|
|
@http.route()
|
|
def process_order(self, order, access_token, table_identifier, device_type):
|
|
res = super().process_order(order, access_token, table_identifier, device_type)
|
|
self._send_to_preparation_display(res['pos.order'][0]['id'])
|
|
return res
|
|
|
|
@http.route()
|
|
def change_printer_status(self, access_token, has_paper):
|
|
super().change_printer_status(access_token, has_paper)
|
|
pos_config = self._verify_pos_config(access_token)
|
|
pos_config.env['pos.prep.display']._paper_status_change(pos_config)
|
|
|
|
@http.route()
|
|
def remove_order(self, access_token, order_id, order_access_token):
|
|
pos_config = self._verify_pos_config(access_token)
|
|
pos_order = pos_config.env['pos.order'].browse(order_id)
|
|
if not pos_order.can_be_cancelled():
|
|
raise UserError(_("This order cannot be cancelled because it's already in preparation."))
|
|
super().remove_order(access_token, order_id, order_access_token)
|
|
|
|
def _send_to_preparation_display(self, pos_order_id):
|
|
"""Send order to the preparation display when paid, no valid payment method, or Pay After Meal is selected."""
|
|
pos_order = http.request.env['pos.order'].browse(pos_order_id).exists()
|
|
is_after_meal = pos_order.config_id.self_ordering_pay_after == 'meal'
|
|
valid_payment_method = pos_order.config_id.has_valid_self_payment_method()
|
|
|
|
if not valid_payment_method or pos_order.state == "paid" or is_after_meal:
|
|
pos_order.env['pos.prep.order'].sudo().process_order(pos_order.id)
|