Files
enterprise-addons/pos_urban_piper/models/pos_order.py
T

61 lines
2.3 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
import json
from odoo import fields, models, api, _
from odoo.exceptions import UserError
class PosOrder(models.Model):
_inherit = 'pos.order'
delivery_status = fields.Selection([
('placed', 'Placed'),
('acknowledged', 'Acknowledged'),
('food_ready', 'Food Ready'),
('dispatched', 'Dispatched'),
('completed', 'Completed'),
('cancelled', 'Cancelled')], string='Delivery Status', help='Status of the order as provided by UrbanPiper.')
delivery_provider_id = fields.Many2one(
'pos.delivery.provider',
string='Delivery Provider',
help='Responsible delivery provider for online order, e.g., UberEats, Zomato.'
)
delivery_identifier = fields.Char(string='Delivery ID', help='Unique delivery ID provided by UrbanPiper.')
delivery_json = fields.Json(string='Delivery JSON', help='JSON data of the order.', store=True)
delivery_rider_json = fields.Json(string='Delivery Rider JSON', help='JSON data of the delivery rider.', store=True)
prep_time = fields.Integer(
string='Food Preparation Time',
help='Preparation time for the food as provided by UrbanPiper.'
)
@api.ondelete(at_uninstall=False)
def _unlink_except_online_order(self):
if (self.filtered(lambda o: o.delivery_identifier)):
raise UserError(_('Online orders cannot be deleted. If needed, reject the order instead or contact the food delivery provider.'))
@api.model
def _load_pos_preparation_data_fields(self):
res = super()._load_pos_preparation_data_fields()
return res + ['delivery_status', 'delivery_provider_id', 'delivery_identifier', 'prep_time', 'config_id']
def mark_urbanpiper_prep_order_as_printed(self):
self.ensure_one()
# Lock the line
self.env.cr.execute(
'SELECT id FROM pos_order WHERE id = %s FOR UPDATE NOWAIT',
(self.id,)
)
lopc = json.loads(self.last_order_preparation_change) if self.last_order_preparation_change else {
'lines': {},
'metadata': {},
}
if lopc.get('urbanpiper_printed', False):
return False
lopc['urbanpiper_printed'] = True
self.last_order_preparation_change = json.dumps(lopc)
return True