[IMP] point_of_sale: facilite inheritance to create picking from pos

closes odoo/odoo#52946

Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
This commit is contained in:
Carlos Lopez
2020-06-23 05:24:14 +00:00
committed by Martin Trigaux
parent 000a329f8f
commit 5899fb36bb
+33 -29
View File
@@ -12,6 +12,16 @@ class StockPicking(models.Model):
pos_session_id = fields.Many2one('pos.session')
pos_order_id = fields.Many2one('pos.order')
def _prepare_picking_vals(self, partner, picking_type, location_id, location_dest_id):
return {
'partner_id': partner.id if partner else False,
'user_id': False,
'picking_type_id': picking_type.id,
'move_type': 'direct',
'location_id': location_id,
'location_dest_id': location_dest_id,
}
@api.model
@@ -27,14 +37,9 @@ class StockPicking(models.Model):
if positive_lines:
location_id = picking_type.default_location_src_id.id
positive_picking = self.env['stock.picking'].create({
'partner_id': partner.id if partner else False,
'user_id': False,
'picking_type_id': picking_type.id,
'move_type': 'direct',
'location_id': location_id,
'location_dest_id': location_dest_id,
})
positive_picking = self.env['stock.picking'].create(
self._prepare_picking_vals(partner, picking_type, location_id, location_dest_id)
)
positive_picking._create_move_from_pos_order_lines(positive_lines)
try:
@@ -52,14 +57,9 @@ class StockPicking(models.Model):
return_picking_type = picking_type
return_location_id = picking_type.default_location_src_id.id
negative_picking = self.env['stock.picking'].create({
'partner_id': partner.id if partner else False,
'user_id': False,
'picking_type_id': return_picking_type.id,
'move_type': 'direct',
'location_id': location_dest_id,
'location_dest_id': return_location_id,
})
negative_picking = self.env['stock.picking'].create(
self._prepare_picking_vals(partner, return_picking_type, location_dest_id, return_location_id)
)
negative_picking._create_move_from_pos_order_lines(negative_lines)
try:
with self.env.cr.savepoint():
@@ -68,7 +68,20 @@ class StockPicking(models.Model):
pass
pickings |= negative_picking
return pickings
def _prepare_stock_move_vals(self, first_line, order_lines):
return {
'name': first_line.name,
'product_uom': first_line.product_id.uom_id.id,
'picking_id': self.id,
'picking_type_id': self.picking_type_id.id,
'product_id': first_line.product_id.id,
'product_uom_qty': abs(sum(order_lines.mapped('qty'))),
'state': 'draft',
'location_id': self.location_id.id,
'location_dest_id': self.location_dest_id.id,
'company_id': self.company_id.id,
}
def _create_move_from_pos_order_lines(self, lines):
self.ensure_one()
@@ -76,18 +89,9 @@ class StockPicking(models.Model):
for product, lines in lines_by_product:
order_lines = self.env['pos.order.line'].concat(*lines)
first_line = order_lines[0]
current_move = self.env['stock.move'].create({
'name': first_line.name,
'product_uom': first_line.product_id.uom_id.id,
'picking_id': self.id,
'picking_type_id': self.picking_type_id.id,
'product_id': first_line.product_id.id,
'product_uom_qty': abs(sum(order_lines.mapped('qty'))),
'state': 'draft',
'location_id': self.location_id.id,
'location_dest_id': self.location_dest_id.id,
'company_id': self.company_id.id,
})
current_move = self.env['stock.move'].create(
self._prepare_stock_move_vals(first_line, order_lines)
)
if first_line.product_id.tracking != 'none' and (self.picking_type_id.use_existing_lots or self.picking_type_id.use_create_lots):
for line in order_lines:
sum_of_lots = 0