87 lines
3.3 KiB
Python
87 lines
3.3 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import models, fields, api, _
|
||
|
from odoo.exceptions import UserError
|
||
|
|
||
|
|
||
|
class PosOrderLine(models.Model):
|
||
|
_inherit = "pos.order.line"
|
||
|
|
||
|
combo_id = fields.Many2one('product.combo', string='Combo reference')
|
||
|
|
||
|
@api.model_create_multi
|
||
|
def create(self, vals_list):
|
||
|
for vals in vals_list:
|
||
|
if (vals.get('combo_parent_uuid')):
|
||
|
vals.update([
|
||
|
('combo_parent_id', self.search([('uuid', '=', vals.get('combo_parent_uuid'))]).id)
|
||
|
])
|
||
|
if 'combo_parent_uuid' in vals:
|
||
|
del vals['combo_parent_uuid']
|
||
|
return super().create(vals_list)
|
||
|
|
||
|
def write(self, vals):
|
||
|
if (vals.get('combo_parent_uuid')):
|
||
|
vals.update([
|
||
|
('combo_parent_id', self.search([('uuid', '=', vals.get('combo_parent_uuid'))]).id)
|
||
|
])
|
||
|
if 'combo_parent_uuid' in vals:
|
||
|
del vals['combo_parent_uuid']
|
||
|
return super().write(vals)
|
||
|
|
||
|
class PosOrder(models.Model):
|
||
|
_inherit = "pos.order"
|
||
|
|
||
|
table_stand_number = fields.Char(string="Table Stand Number")
|
||
|
|
||
|
@api.model
|
||
|
def _load_pos_self_data_domain(self, data):
|
||
|
return [('id', '=', False)]
|
||
|
|
||
|
@api.model
|
||
|
def sync_from_ui(self, orders):
|
||
|
for order in orders:
|
||
|
if order.get('id'):
|
||
|
order_id = order['id']
|
||
|
|
||
|
if isinstance(order_id, int):
|
||
|
old_order = self.env['pos.order'].browse(order_id)
|
||
|
if old_order.takeaway:
|
||
|
order['takeaway'] = old_order.takeaway
|
||
|
|
||
|
return super().sync_from_ui(orders)
|
||
|
|
||
|
def _get_open_order(self, order):
|
||
|
open_order = super()._get_open_order(order)
|
||
|
if not self.env.context.get('from_self'):
|
||
|
return open_order
|
||
|
elif open_order:
|
||
|
del order['table_id']
|
||
|
return self.env['pos.order'].search([('uuid', '=', order.get('uuid'))], limit=1)
|
||
|
|
||
|
def _process_saved_order(self, draft):
|
||
|
res = super()._process_saved_order(draft)
|
||
|
|
||
|
if self.env.context.get('from_self') is not True:
|
||
|
self._send_notification(self)
|
||
|
|
||
|
return res
|
||
|
|
||
|
@api.model
|
||
|
def remove_from_ui(self, server_ids):
|
||
|
order_ids = self.env['pos.order'].browse(server_ids)
|
||
|
order_ids.state = 'cancel'
|
||
|
self._send_notification(order_ids)
|
||
|
return super().remove_from_ui(server_ids)
|
||
|
|
||
|
def _send_notification(self, order_ids):
|
||
|
for order in order_ids:
|
||
|
order._notify('ORDER_STATE_CHANGED', {
|
||
|
'pos.order': order.read(order._load_pos_self_data_fields(order.config_id.id), load=False),
|
||
|
'pos.order.line': order.lines.read(order._load_pos_self_data_fields(order.config_id.id), load=False),
|
||
|
'pos.payment': order.payment_ids.read(order.payment_ids._load_pos_data_fields(order.config_id.id), load=False),
|
||
|
'pos.payment.method': order.payment_ids.mapped('payment_method_id').read(self.env['pos.payment.method']._load_pos_data_fields(order.config_id.id), load=False),
|
||
|
'product.attribute.custom.value': order.lines.custom_attribute_value_ids.read(order.lines.custom_attribute_value_ids._load_pos_data_fields(order.config_id.id), load=False),
|
||
|
})
|