diff --git a/addons/delivery/__init__.py b/addons/delivery/__init__.py
index 81fc81d29c9..11529f98733 100644
--- a/addons/delivery/__init__.py
+++ b/addons/delivery/__init__.py
@@ -2,3 +2,4 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import models
+import wizard
diff --git a/addons/delivery/__manifest__.py b/addons/delivery/__manifest__.py
index 06eccbb537b..4a3d32e9a1d 100644
--- a/addons/delivery/__manifest__.py
+++ b/addons/delivery/__manifest__.py
@@ -24,7 +24,7 @@ invoices from picking, the system is able to add and compute the shipping line.
'views/report_shipping.xml',
'views/report_deliveryslip.xml',
'views/sale_config_settings_views.xml',
-
+ 'wizard/choose_delivery_package_views.xml',
],
'demo': ['data/delivery_demo.xml'],
'test': [
diff --git a/addons/delivery/models/stock_picking.py b/addons/delivery/models/stock_picking.py
index 7d5257a5546..22bc35971db 100644
--- a/addons/delivery/models/stock_picking.py
+++ b/addons/delivery/models/stock_picking.py
@@ -31,17 +31,19 @@ class StockPackOperation(models.Model):
@api.multi
def manage_package_type(self):
self.ensure_one()
+ view_id = self.env.ref('delivery.choose_delivery_package_view_form').id;
return {
'name': _('Package Details'),
'type': 'ir.actions.act_window',
'view_mode': 'form',
- 'res_model': 'stock.quant.package',
- 'view_id': self.env.ref('delivery.view_quant_package_form_save').id,
+ 'res_model': 'choose.delivery.package',
+ 'view_id': view_id,
+ 'views': [(view_id, 'form')],
'target': 'new',
- 'res_id': self.result_package_id.id,
'context': {
+ 'default_stock_quant_package_id': self.result_package_id.id,
'current_package_carrier_type': self.picking_id.carrier_id.delivery_type if self.picking_id.carrier_id.delivery_type not in ['base_on_rule', 'fixed'] else 'none',
- },
+ }
}
@@ -120,30 +122,18 @@ class StockPicking(models.Model):
@api.multi
def put_in_pack(self):
- # TDE FIXME: work in batch, please
- self.ensure_one()
- package = super(StockPicking, self).put_in_pack()
-
- current_package_carrier_type = self.carrier_id.delivery_type if self.carrier_id.delivery_type not in ['base_on_rule', 'fixed'] else 'none'
- count_packaging = self.env['product.packaging'].search_count([('package_carrier_type', '=', current_package_carrier_type)])
- if not count_packaging:
- return False
- # By default, sum the weights of all package operations contained in this package
- pack_operation_ids = self.env['stock.pack.operation'].search([('result_package_id', '=', package.id)])
- package_weight = sum([x.qty_done * x.product_id.weight for x in pack_operation_ids])
- package.shipping_weight = package_weight
-
+ view_id = self.env.ref('delivery.choose_delivery_package_view_form').id;
return {
'name': _('Package Details'),
'type': 'ir.actions.act_window',
'view_mode': 'form',
- 'res_model': 'stock.quant.package',
- 'view_id': self.env.ref('delivery.view_quant_package_form_save').id,
+ 'res_model': 'choose.delivery.package',
+ 'view_id': view_id,
+ 'views': [(view_id, 'form')],
'target': 'new',
- 'res_id': package.id,
'context': {
- 'current_package_carrier_type': current_package_carrier_type,
- },
+ 'current_package_carrier_type': self.carrier_id.delivery_type if self.carrier_id.delivery_type not in ['base_on_rule', 'fixed'] else 'none',
+ }
}
@api.multi
diff --git a/addons/delivery/views/delivery_view.xml b/addons/delivery/views/delivery_view.xml
index 4566d69f532..444892802ac 100644
--- a/addons/delivery/views/delivery_view.xml
+++ b/addons/delivery/views/delivery_view.xml
@@ -254,30 +254,6 @@
-
-
- stock.quant.package.form.save
- stock.quant.package
-
-
-
-
-
-
-
stock.move.form.weight
stock.move
diff --git a/addons/delivery/views/product_packaging_view.xml b/addons/delivery/views/product_packaging_view.xml
index e4c0de6336d..0ef59bf946c 100644
--- a/addons/delivery/views/product_packaging_view.xml
+++ b/addons/delivery/views/product_packaging_view.xml
@@ -31,6 +31,7 @@
+
diff --git a/addons/delivery/wizard/__init__.py b/addons/delivery/wizard/__init__.py
new file mode 100644
index 00000000000..8abff5b3232
--- /dev/null
+++ b/addons/delivery/wizard/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import choose_delivery_package
diff --git a/addons/delivery/wizard/choose_delivery_package.py b/addons/delivery/wizard/choose_delivery_package.py
new file mode 100644
index 00000000000..dd5d256f74a
--- /dev/null
+++ b/addons/delivery/wizard/choose_delivery_package.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models, _
+
+
+class ChooseDeliveryPackage(models.TransientModel):
+ _name = 'choose.delivery.package'
+ _description = 'Delivery Package Selection Wizard'
+
+ stock_quant_package_id = fields.Many2one(
+ 'stock.quant.package',
+ default=lambda self: self._default_stock_quant_package_id()
+ )
+ delivery_packaging_id = fields.Many2one(
+ 'product.packaging',
+ default=lambda self: self._default_delivery_packaging_id()
+ )
+ shipping_weight = fields.Float(
+ string='Shipping Weight',
+ default=lambda self: self._default_shipping_weight()
+ )
+
+ def _default_stock_quant_package_id(self):
+ if self.env.context.get('default_stock_quant_package_id'):
+ return self.env['stock.quant.package'].browse(self.env.context['stock_quant_package_id'])
+
+ def _default_delivery_packaging_id(self):
+ res = None
+ if self.env.context.get('default_delivery_packaging_id'):
+ res = self.env['product.packaging'].browse(self.env.context['default_delivery_packaging_id'])
+ if self.env.context.get('default_stock_quant_package_id'):
+ stock_quant_package = self.env['stock.quant.package'].browse(self.env.context['default_stock_quant_package_id'])
+ res = stock_quant_package.packaging_id
+ return res
+
+ def _default_shipping_weight(self):
+ if self.env.context.get('default_stock_quant_package_id'):
+ stock_quant_package = self.env['stock.quant.package'].browse(self.env.context['default_stock_quant_package_id'])
+ return stock_quant_package.shipping_weight
+ else:
+ picking_id = self.env['stock.picking'].browse(self.env.context['active_id'])
+ pack_operation_product_ids = [po for po in picking_id.pack_operation_product_ids if po.qty_done > 0 and not po.result_package_id]
+ pack_operation_pack_ids = [po for po in picking_id.pack_operation_pack_ids if po.qty_done > 0 and not po.result_package_id]
+ total_weight = sum([po.qty_done * po.product_id.weight for po in pack_operation_product_ids]) + sum([po.package_id.weight for po in pack_operation_pack_ids])
+ return total_weight
+
+ def put_in_pack(self):
+ picking_id = self.env['stock.picking'].browse(self.env.context['active_id'])
+ if not self.stock_quant_package_id:
+ stock_quant_package = picking_id._put_in_pack()
+ self.stock_quant_package_id = stock_quant_package
+ # write shipping weight and product_packaging on 'stock_quant_package' if needed
+ if self.delivery_packaging_id:
+ self.stock_quant_package_id.packaging_id = self.delivery_packaging_id
+ if self.shipping_weight:
+ self.stock_quant_package_id.shipping_weight = self.shipping_weight
diff --git a/addons/delivery/wizard/choose_delivery_package_views.xml b/addons/delivery/wizard/choose_delivery_package_views.xml
new file mode 100644
index 00000000000..eec5a4861f6
--- /dev/null
+++ b/addons/delivery/wizard/choose_delivery_package_views.xml
@@ -0,0 +1,24 @@
+
+
+
+ choose.delivery.package.form
+ choose.delivery.package
+
+
+
+
+
+
diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py
index e5c03979b36..f683a7eac4d 100644
--- a/addons/stock/models/stock_picking.py
+++ b/addons/stock/models/stock_picking.py
@@ -987,7 +987,7 @@ class Picking(models.Model):
return backorders
@api.multi
- def put_in_pack(self):
+ def _put_in_pack(self):
# TDE FIXME: reclean me
QuantPackage = self.env["stock.quant.package"]
package = False
@@ -1019,6 +1019,11 @@ class Picking(models.Model):
raise UserError(_('Please process some quantities to put in the pack first!'))
return package
+
+ @api.multi
+ def put_in_pack(self):
+ return self._put_in_pack()
+
@api.multi
def button_scrap(self):
self.ensure_one()