sale_order.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. # -*- coding: utf-8 -*-
  2. from openerp.http import request
  3. _MODEL = 'sale.order'
  4. '''
  5. Get sale orders
  6. '''
  7. def get_sale_orders():
  8. domain = [
  9. ('state', '=', 'manual'),
  10. ('from_pos', '=', True)
  11. ]
  12. return [
  13. {
  14. 'id': sale_order.id,
  15. 'name': sale_order.display_name,
  16. 'createDate': sale_order.create_date,
  17. 'partnerId': sale_order.partner_id.id,
  18. 'userId': sale_order.user_id.id,
  19. 'warehouseId': sale_order.warehouse_id.id,
  20. 'amountTotal': sale_order.amount_total,
  21. 'lines': [
  22. {
  23. 'productId': line.product_id.id,
  24. 'productTmplId': line.product_tmpl_id.id,
  25. 'priceUnit': line.price_unit,
  26. 'quantity': line.product_uom_qty,
  27. } for line in sale_order.order_line
  28. ]
  29. } for sale_order in request.env[_MODEL].search(domain)
  30. ]
  31. '''
  32. Create sale from pos cart
  33. '''
  34. def create_sale_from_cart(partner_id, cart_items, date_confirm, currency_id, payment_term_id=None):
  35. '''
  36. '''
  37. def get_pricelist(currency_id):
  38. domain = [
  39. ('active', '=', True),
  40. ('type', '=', 'sale')
  41. ]
  42. pricelist = request.env['product.pricelist'].search(domain)
  43. if not True in pricelist.mapped(lambda p: p.currency_id.id == currency_id):
  44. pricelist = pricelist[0].copy()
  45. pricelist.write({
  46. 'currency_id': currency_id
  47. })
  48. else:
  49. pricelist = pricelist.filtered(lambda p: p.currency_id.id == currency_id)
  50. return pricelist
  51. '''
  52. '''
  53. def compute_cart_item_price(price, currency_id, partner_id=None):
  54. from_currency = request.env.user.company_id.currency_id
  55. to_currency = request.env['res.currency'].search([('id', '=', currency_id)])
  56. return from_currency.compute(price, to_currency)
  57. '''
  58. '''
  59. def compute_cart_item_discount(price, product_id, currency_id):
  60. from_currency = request.env.user.company_id.currency_id
  61. to_currency = request.env['res.currency'].search([('id', '=', currency_id)])
  62. product = request.env['product.product'].search([('id', '=', product_id)])
  63. computed_price = from_currency.compute(price, to_currency)
  64. return 1.0 - (price / product.list_price)
  65. pricelist = get_pricelist(currency_id)
  66. values = {
  67. 'partner_id': partner_id,
  68. 'order_line': [[0, False, {
  69. 'product_id': int(line.get('id')),
  70. 'product_uom_qty': float(line.get('quantity')),
  71. 'price_unit': compute_cart_item_price(float(line.get('price')), currency_id),
  72. 'discount': compute_cart_item_discount(float(line.get('price')), float(line.get('id')), currency_id)
  73. }] for line in cart_items],
  74. 'picking_policy': 'direct',
  75. 'date_confirm': date_confirm,
  76. 'currency_id': currency_id,
  77. 'pricelist_id': pricelist.id,
  78. 'payment_term': payment_term_id,
  79. 'state': 'draft',
  80. 'from_pos': True
  81. }
  82. return request.env[_MODEL].create(values)
  83. '''
  84. '''
  85. def confirm_sale_order(sale_order_id):
  86. sale_order = request.env['sale.order'].browse(sale_order_id)
  87. sale_order.write({
  88. 'state': 'manual'
  89. })
  90. return sale_order.action_button_confirm()
  91. '''
  92. '''
  93. def force_assign_picking(sale_order_id):
  94. sale_order = request.env['sale.order'].browse(sale_order_id)
  95. for picking in sale_order.picking_ids:
  96. picking.force_assign()
  97. '''
  98. '''
  99. def done_picking(sale_order_id):
  100. sale_order = request.env['sale.order'].browse(sale_order_id)
  101. for picking in sale_order.picking_ids:
  102. picking.action_done()