sale_order.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from openerp import api, fields, models
  2. class SaleOrder(models.Model):
  3. _inherit = 'sale.order'
  4. @api.model
  5. def process_pos_order(self, cart_items, customer_id):
  6. order_line_values = []
  7. for item in cart_items:
  8. order_line_values.append([0, False, {
  9. 'product_id': int(item['id']),
  10. 'product_uom_qty': float(item['qty']),
  11. 'price_unit': float(item['list_price']),
  12. 'discount': 0
  13. }])
  14. order_values = {
  15. 'partner_id': customer_id,
  16. 'partner_invoice_id': customer_id,
  17. 'partner_shipping_id': customer_id,
  18. 'order_line': order_line_values,
  19. 'picking_policy': 'direct',
  20. 'order_policy': 'manual'
  21. }
  22. order = self.env['sale.order'].create(order_values)
  23. # Process order now
  24. order.action_button_confirm()
  25. invoice_id = order.action_invoice_create()
  26. invoice = {}
  27. if invoice_id:
  28. invoice = self.env['account.invoice'].browse(invoice_id)
  29. invoice.signal_workflow('invoice_open')
  30. for picking in order.picking_ids:
  31. picking.force_assign()
  32. picking.action_done()
  33. dummy, view_id = self.env['ir.model.data'].get_object_reference('account_voucher', 'view_vendor_receipt_dialog_form')
  34. return {
  35. 'id': invoice.id,
  36. 'view_id': view_id,
  37. 'name': invoice.name,
  38. 'display_name': invoice.display_name,
  39. 'currency_id': invoice.currency_id.id,
  40. 'partner_account_id': self.env['res.partner']._find_accounting_partner(invoice.partner_id).id,
  41. 'amount': invoice.type in ('out_refund', 'in_refund') and -invoice.residual or invoice.residual,
  42. 'reference': invoice.name,
  43. 'invoice_type': invoice.type,
  44. 'default_type': invoice.type in ('out_invoice', 'out_refund') and 'receipt' or 'payment',
  45. 'type': invoice.type in ('out_invoice','out_refund') and 'receipt' or 'payment'
  46. } if invoice_id else {}