# -*- 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)