Add online order status management and backend views for online orders
This commit is contained in:
parent
6256ebd13d
commit
c08a25d536
@ -21,12 +21,6 @@
|
|||||||
'views/backend_online_orders.xml',
|
'views/backend_online_orders.xml',
|
||||||
],
|
],
|
||||||
'assets': {
|
'assets': {
|
||||||
'point_of_sale._assets_pos': [
|
|
||||||
'dine360_online_orders/static/src/css/online_orders.css',
|
|
||||||
'dine360_online_orders/static/src/js/online_orders_screen.js',
|
|
||||||
'dine360_online_orders/static/src/js/online_orders_navbar.js',
|
|
||||||
'dine360_online_orders/static/src/xml/online_orders_screen.xml',
|
|
||||||
],
|
|
||||||
'web.assets_frontend': [
|
'web.assets_frontend': [
|
||||||
'dine360_online_orders/static/src/css/service_mode.css',
|
'dine360_online_orders/static/src/css/service_mode.css',
|
||||||
'dine360_online_orders/static/src/js/service_mode.js',
|
'dine360_online_orders/static/src/js/service_mode.js',
|
||||||
|
|||||||
@ -13,7 +13,7 @@ class PosOrder(models.Model):
|
|||||||
help='Indicates this order came from the website shop'
|
help='Indicates this order came from the website shop'
|
||||||
)
|
)
|
||||||
online_order_status = fields.Selection([
|
online_order_status = fields.Selection([
|
||||||
('pending', 'Pending'),
|
('pending', 'Pending Kitchen'),
|
||||||
('confirmed', 'Confirmed'),
|
('confirmed', 'Confirmed'),
|
||||||
('rejected', 'Rejected'),
|
('rejected', 'Rejected'),
|
||||||
], string='Online Order Status', default='pending')
|
], string='Online Order Status', default='pending')
|
||||||
|
|||||||
@ -39,6 +39,60 @@ class SaleOrderOnline(models.Model):
|
|||||||
return False
|
return False
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
online_order_status = fields.Selection([
|
||||||
|
('pending', 'Pending Kitchen'),
|
||||||
|
('confirmed', 'Confirmed'),
|
||||||
|
('rejected', 'Rejected'),
|
||||||
|
], string='Online Order Status', compute='_compute_online_order_status', store=True)
|
||||||
|
|
||||||
|
is_online_order_accepted_manually = fields.Boolean(string='Manually Accepted', default=False)
|
||||||
|
|
||||||
|
@api.depends('pos_order_id.online_order_status', 'state', 'order_source', 'is_online_order_accepted_manually')
|
||||||
|
def _compute_online_order_status(self):
|
||||||
|
for order in self:
|
||||||
|
if order.pos_order_id:
|
||||||
|
order.online_order_status = order.pos_order_id.online_order_status
|
||||||
|
elif order.state == 'cancel':
|
||||||
|
order.online_order_status = 'rejected'
|
||||||
|
elif order.order_source == 'online' and order.state in ['draft', 'sent', 'sale']:
|
||||||
|
if order.is_online_order_accepted_manually:
|
||||||
|
order.online_order_status = 'confirmed'
|
||||||
|
else:
|
||||||
|
order.online_order_status = 'pending'
|
||||||
|
else:
|
||||||
|
order.online_order_status = False
|
||||||
|
|
||||||
|
def action_accept_online_order(self):
|
||||||
|
for order in self:
|
||||||
|
if order.state in ['draft', 'sent']:
|
||||||
|
order.action_confirm()
|
||||||
|
|
||||||
|
if not order.pos_order_id and order.state == 'sale':
|
||||||
|
try:
|
||||||
|
if hasattr(order, '_create_pos_order_for_kds'):
|
||||||
|
order._create_pos_order_for_kds(order)
|
||||||
|
except Exception as e:
|
||||||
|
_logger.error("Failed to create POS order during accept: %s", str(e))
|
||||||
|
|
||||||
|
if order.pos_order_id:
|
||||||
|
order.pos_order_id.action_confirm_online_order()
|
||||||
|
else:
|
||||||
|
order.is_online_order_accepted_manually = True
|
||||||
|
|
||||||
|
order._compute_online_order_status()
|
||||||
|
return {'type': 'ir.actions.client', 'tag': 'reload'}
|
||||||
|
|
||||||
|
def action_reject_online_order(self):
|
||||||
|
for order in self:
|
||||||
|
if order.state in ['draft', 'sent', 'sale']:
|
||||||
|
order._action_cancel()
|
||||||
|
|
||||||
|
if order.pos_order_id:
|
||||||
|
order.pos_order_id.action_reject_online_order()
|
||||||
|
|
||||||
|
order._compute_online_order_status()
|
||||||
|
return {'type': 'ir.actions.client', 'tag': 'reload'}
|
||||||
|
|
||||||
def _check_cart_is_ready_to_be_paid(self):
|
def _check_cart_is_ready_to_be_paid(self):
|
||||||
try:
|
try:
|
||||||
return super(SaleOrderOnline, self)._check_cart_is_ready_to_be_paid()
|
return super(SaleOrderOnline, self)._check_cart_is_ready_to_be_paid()
|
||||||
|
|||||||
@ -2,11 +2,47 @@
|
|||||||
<odoo>
|
<odoo>
|
||||||
<data>
|
<data>
|
||||||
|
|
||||||
|
<!-- Tree View specifically for Online Orders -->
|
||||||
|
<record id="view_backend_online_order_tree" model="ir.ui.view">
|
||||||
|
<field name="name">sale.order.online.tree</field>
|
||||||
|
<field name="model">sale.order</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Online Orders" decoration-info="online_order_status == 'pending'" decoration-success="online_order_status == 'confirmed'" decoration-muted="online_order_status == 'rejected'" create="false">
|
||||||
|
<field name="name" string="Order Number"/>
|
||||||
|
<field name="date_order" string="Order Date"/>
|
||||||
|
<field name="partner_id" string="Customer"/>
|
||||||
|
<field name="amount_total" string="Total"/>
|
||||||
|
<field name="online_order_status" string="Status" widget="badge" decoration-info="online_order_status == 'pending'" decoration-success="online_order_status == 'confirmed'" decoration-danger="online_order_status == 'rejected'"/>
|
||||||
|
<button name="action_accept_online_order" string="Accept" type="object" class="btn-success" invisible="online_order_status != 'pending'"/>
|
||||||
|
<button name="action_reject_online_order" string="Reject" type="object" class="btn-danger" invisible="online_order_status != 'pending'"/>
|
||||||
|
<field name="state" column_invisible="1"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Form View override for Online Orders buttons -->
|
||||||
|
<record id="view_order_form_online_orders" model="ir.ui.view">
|
||||||
|
<field name="name">sale.order.form.online</field>
|
||||||
|
<field name="model">sale.order</field>
|
||||||
|
<field name="inherit_id" ref="sale.view_order_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//header" position="inside">
|
||||||
|
<field name="order_source" invisible="1"/>
|
||||||
|
<button name="action_accept_online_order" string="Accept Online Order" type="object" class="btn-success" invisible="order_source != 'online' or online_order_status != 'pending'"/>
|
||||||
|
<button name="action_reject_online_order" string="Reject Online Order" type="object" class="btn-danger" invisible="order_source != 'online' or online_order_status != 'pending'"/>
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//field[@name='payment_term_id']" position="after">
|
||||||
|
<field name="online_order_status" invisible="order_source != 'online'" readonly="1" widget="badge" decoration-info="online_order_status == 'pending'" decoration-success="online_order_status == 'confirmed'" decoration-danger="online_order_status == 'rejected'"/>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
<!-- Action to open Online Orders (Sale Orders from website) -->
|
<!-- Action to open Online Orders (Sale Orders from website) -->
|
||||||
<record id="action_backend_online_orders" model="ir.actions.act_window">
|
<record id="action_backend_online_orders" model="ir.actions.act_window">
|
||||||
<field name="name">Online Orders</field>
|
<field name="name">Online Orders</field>
|
||||||
<field name="res_model">sale.order</field>
|
<field name="res_model">sale.order</field>
|
||||||
<field name="view_mode">tree,kanban,form,calendar,pivot,graph,activity</field>
|
<field name="view_mode">tree,kanban,form,calendar,pivot,graph,activity</field>
|
||||||
|
<field name="view_id" ref="view_backend_online_order_tree"/>
|
||||||
<field name="domain">[('order_source', '=', 'online')]</field>
|
<field name="domain">[('order_source', '=', 'online')]</field>
|
||||||
<field name="context">{'default_order_source': 'online'}</field>
|
<field name="context">{'default_order_source': 'online'}</field>
|
||||||
<field name="help" type="html">
|
<field name="help" type="html">
|
||||||
|
|||||||
3
check_so.py
Normal file
3
check_so.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
so = env['sale.order'].search([('name','=','S00001')])
|
||||||
|
print("STATE:", so.state)
|
||||||
|
print("POS ORDER:", so.pos_order_id)
|
||||||
Loading…
x
Reference in New Issue
Block a user