pos_order.py 4.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. from openerp import models, fields, api
  2. from openerp.osv import osv
  3. from openerp.tools.translate import _
  4. class pos_order(models.Model):
  5. _inherit = "pos.order"
  6. def create_picking(self, cr, uid, ids, context=None):
  7. ''' Below code will create another picking for packs'''
  8. picking_obj = self.pool['stock.picking']
  9. partner_obj = self.pool['res.partner']
  10. move_obj = self.pool['stock.move']
  11. packs_exist = False
  12. for order in self.browse(cr, uid, ids, context=context):
  13. for line in order.lines:
  14. if line.product_id.pack:
  15. packs_exist = True
  16. addr = order.partner_id and partner_obj.address_get(
  17. cr, uid, [order.partner_id.id],
  18. ['delivery']) or {}
  19. picking_type = order.picking_type_id
  20. picking_id = False
  21. if picking_type and packs_exist:
  22. picking_id = picking_obj.create(cr, uid, {
  23. 'origin': order.name,
  24. 'partner_id': addr.get('delivery', False),
  25. 'date_done': order.date_order,
  26. 'picking_type_id': picking_type.id,
  27. 'company_id': order.company_id.id,
  28. 'move_type': 'direct',
  29. 'note': order.note or "",
  30. 'invoice_state': 'none',
  31. }, context=context)
  32. self.write(cr, uid, [order.id], {
  33. 'picking_id': picking_id}, context=context)
  34. location_id = order.location_id.id
  35. if order.partner_id:
  36. destination_id = order.partner_id.property_stock_customer.id
  37. elif picking_type:
  38. if not picking_type.default_location_dest_id:
  39. raise osv.except_osv(_('Error!'), _(
  40. 'Missing source or destination location for picking type %s. Please configure those fields and try again.' % (picking_type.name,)))
  41. destination_id = picking_type.default_location_dest_id.id
  42. else:
  43. destination_id = partner_obj.default_get(
  44. cr, uid, ['property_stock_customer'],
  45. context=context)['property_stock_customer']
  46. if packs_exist:
  47. for line in order.lines:
  48. if line.product_id.pack:
  49. for pack_line in line.product_id.pack_line_ids:
  50. move_list = []
  51. move_list.append(move_obj.create(cr, uid, {
  52. 'name': pack_line.product_id.name,
  53. 'product_uom': pack_line.product_id.uom_id.id,
  54. 'product_uos': pack_line.product_id.uom_id.id,
  55. 'picking_id': picking_id,
  56. 'picking_type_id': picking_type.id,
  57. 'product_id': pack_line.product_id.id,
  58. 'product_uos_qty': abs(pack_line.quantity * line.qty),
  59. 'product_uom_qty': abs(pack_line.quantity * line.qty),
  60. 'state': 'draft',
  61. 'location_id': location_id if line.qty >= 0 else destination_id,
  62. 'location_dest_id': destination_id if line.qty >= 0 else location_id,
  63. }, context=context))
  64. if picking_id:
  65. picking_obj.action_confirm(
  66. cr, uid, [picking_id], context=context)
  67. picking_obj.force_assign(
  68. cr, uid, [picking_id], context=context)
  69. picking_obj.action_done(
  70. cr, uid, [picking_id], context=context)
  71. elif move_list:
  72. move_obj.action_confirm(
  73. cr, uid, move_list, context=context)
  74. move_obj.force_assign(
  75. cr, uid, move_list, context=context)
  76. move_obj.action_done(
  77. cr, uid, move_list, context=context)
  78. '''this call will create pickings for normal products'''
  79. super(pos_order, self).create_picking(
  80. cr, uid, ids, context=context)
  81. return True