You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.3 KiB
59 lines
2.3 KiB
# -*- coding: utf-8 -*-
|
|
import logging
|
|
import psycopg2
|
|
from odoo import models, fields, api, tools
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class PosOrder(models.Model):
|
|
"""Inherited model for pos order,all confirmed booking orders are converted as pos orders"""
|
|
_inherit = 'pos.order'
|
|
|
|
booking_ref = fields.Many2one('book.order', string='Booking Ref')
|
|
delivery_address = fields.Char('Delivery Address', help='Address of customer for delivery')
|
|
phone = fields.Char('Contact no', help='Phone of customer for delivery')
|
|
|
|
@api.model
|
|
def create_from_ui(self, orders):
|
|
"""Method to create pos order"""
|
|
references = [o['data']['name'] for o in orders]
|
|
pos_order = self.search([('pos_reference', 'in', references)])
|
|
existing_orders = pos_order.read(['pos_reference'])
|
|
existing_references = set([o['pos_reference'] for o in existing_orders])
|
|
orders_to_save = [o for o in orders if o['data']['name'] not in existing_references]
|
|
order_ids = []
|
|
quot_ids = []
|
|
for tmp_order in orders_to_save:
|
|
to_invoice = tmp_order['to_invoice']
|
|
order = tmp_order['data']
|
|
if to_invoice:
|
|
self._match_payment_to_invoice(order)
|
|
pos_order = self._process_order(order)
|
|
if pos_order.booking_ref:
|
|
pos_order.booking_ref.write({'state': 'confirmed'})
|
|
quot_ids.append(pos_order.booking_ref.id)
|
|
order_ids.append(pos_order.id)
|
|
|
|
try:
|
|
pos_order.action_pos_order_paid()
|
|
except psycopg2.OperationalError:
|
|
raise
|
|
except Exception as e:
|
|
_logger.error('Could not fully process the POS Order: %s', tools.ustr(e))
|
|
|
|
if to_invoice:
|
|
pos_order.action_pos_order_invoice()
|
|
pos_order.invoice_id.sudo().action_invoice_open()
|
|
pos_order.account_move = pos_order.invoice_id.move_id
|
|
return order_ids, quot_ids
|
|
|
|
@api.model
|
|
def _order_fields(self, ui_order):
|
|
order_fields = super(PosOrder, self)._order_fields(ui_order)
|
|
quot_id = False
|
|
if 'quotation_ref' in ui_order:
|
|
if ui_order['quotation_ref']:
|
|
quot_id = ui_order.get('quotation_ref')['id']
|
|
order_fields['booking_ref'] = quot_id
|
|
return order_fields
|