openerp-community-reviewer team mailing list archive
-
openerp-community-reviewer team
-
Mailing list archive
-
Message #03900
[Merge] lp:~camptocamp/carriers-deliveries/7.0-delivery_carrier_label_postlogistics-tracking_ids into lp:carriers-deliveries
Guewen Baconnier @ Camptocamp has proposed merging lp:~camptocamp/carriers-deliveries/7.0-delivery_carrier_label_postlogistics-tracking_ids into lp:carriers-deliveries.
Requested reviews:
Stock and Logistic Core Editors (stock-logistic-core-editors)
For more details, see:
https://code.launchpad.net/~camptocamp/carriers-deliveries/7.0-delivery_carrier_label_postlogistics-tracking_ids/+merge/207202
Change the signature to be aligned with this change: https://code.launchpad.net/~camptocamp/carriers-deliveries/7.0-base_delivery_carrier_label-tracking_ids/+merge/207199 (so this one needs to be merged before...)
Now, if the caller gives a list of tracking_ids, it will only generate the labels of these packs.
--
https://code.launchpad.net/~camptocamp/carriers-deliveries/7.0-delivery_carrier_label_postlogistics-tracking_ids/+merge/207202
Your team Stock and Logistic Core Editors is requested to review the proposed merge of lp:~camptocamp/carriers-deliveries/7.0-delivery_carrier_label_postlogistics-tracking_ids into lp:carriers-deliveries.
=== modified file 'delivery_carrier_label_postlogistics/postlogistics/web_service.py'
--- delivery_carrier_label_postlogistics/postlogistics/web_service.py 2013-12-17 07:45:50 +0000
+++ delivery_carrier_label_postlogistics/postlogistics/web_service.py 2014-02-19 14:13:57 +0000
@@ -252,14 +252,11 @@
codes = [name, pack_no]
return "+".join(c for c in codes if c)
- def _prepare_item_list(self, picking, recipient, attributes):
+ def _prepare_item_list(self, picking, recipient, attributes, trackings):
""" Return a list of item made from the pickings """
item_list = []
- # A label will be generated per pack and if there is no pack only one
- # label will be generated
- packs = set([line.tracking_id.name for line in picking.move_lines])
- for pack_no in packs:
- itemid = self._get_itemid(picking, pack_no)
+ for pack in trackings:
+ itemid = self._get_itemid(picking, pack.name)
item = {
'ItemID': itemid,
'Recipient': recipient,
@@ -310,11 +307,12 @@
}
return envelope
- def generate_label(self, picking, user_lang='en_US'):
+ def generate_label(self, picking, trackings, user_lang='en_US'):
""" Generate a label for a picking
:param picking: picking browse record
- :param lang: OpenERP language code
+ :param user_lang: OpenERP language code
+ :param trackings: list of ids of trackings to filter on
:return: {
value: [{item_id: pack id
binary: file returned by API
@@ -334,7 +332,8 @@
attributes = self._prepare_attributes(picking)
recipient = self._prepare_recipient(picking)
- item_list = self._prepare_item_list(picking, recipient, attributes)
+ item_list = self._prepare_item_list(picking, recipient, attributes,
+ trackings)
data = self._prepare_data(item_list)
envelope = self._prepare_envelope(picking, post_customer, data)
=== modified file 'delivery_carrier_label_postlogistics/stock.py'
--- delivery_carrier_label_postlogistics/stock.py 2013-12-23 12:46:25 +0000
+++ delivery_carrier_label_postlogistics/stock.py 2014-02-19 14:13:57 +0000
@@ -18,6 +18,8 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
+from operator import attrgetter
+
from openerp.osv import orm, fields
from postlogistics.web_service import PostlogisticsWebService
@@ -27,7 +29,8 @@
_inherit = 'stock.picking'
def _generate_postlogistics_label(self, cr, uid, picking,
- webservice_class=None, context=None):
+ webservice_class=None,
+ tracking_ids=None, context=None):
""" Generate labels and write tracking numbers received """
user_obj = self.pool.get('res.users')
user = user_obj.browse(cr, uid, uid, context=context)
@@ -35,14 +38,27 @@
if webservice_class is None:
webservice_class = PostlogisticsWebService
+ if tracking_ids is None:
+ # get all the trackings of the picking
+ # no tracking_id wil return a False, meaning that
+ # we want a label for the picking
+ trackings = sorted(set(
+ line.tracking_id for line in picking.move_lines
+ ), key=attrgetter('name'))
+ else:
+ # restrict on the provided trackings
+ tracking_obj = self.pool['stock.tracking']
+ trackings = tracking_obj.browse(cr, uid, tracking_ids,
+ context=context)
+
web_service = webservice_class(company)
- res = web_service.generate_label(picking, user.lang)
+ res = web_service.generate_label(picking,
+ trackings,
+ user_lang=user.lang)
if 'errors' in res:
raise orm.except_orm('Error', '\n'.join(res['errors']))
- trackings = set([line.tracking_id for line in picking.move_lines])
-
labels = []
# if there are no pack defined, write tracking_number on picking
# otherwise, write it on serial field of each pack
@@ -50,6 +66,10 @@
if not track:
# ignore lines without tracking when there is tracking
# in a picking
+ # Example: if I have 1 move with a tracking and 1
+ # without, I will have [False, a_tracking] in
+ # `trackings`. In that case, we are using packs, not the
+ # picking for the tracking numbers.
if len(trackings) > 1:
continue
label = res['value'][0]
@@ -65,7 +85,7 @@
tracking_number = label['tracking_number']
track.write({'serial': tracking_number})
break
- labels.append({'tracking_id': track and track.id or False,
+ labels.append({'tracking_id': track.id if track else False,
'file': label['binary'].decode('base64'),
'file_type': label['file_type'],
'name': tracking_number,
@@ -73,17 +93,21 @@
return labels
- def generate_shipping_labels(self, cr, uid, ids, context=None):
+ def generate_shipping_labels(self, cr, uid, ids, tracking_ids=None,
+ context=None):
""" Add label generation for Postlogistics """
if isinstance(ids, (long, int)):
ids = [ids]
assert len(ids) == 1
picking = self.browse(cr, uid, ids[0], context=context)
if picking.carrier_id.type == 'postlogistics':
- return self._generate_postlogistics_label(cr, uid, picking,
- context=context)
- return super(stock_picking, self
- ).generate_shipping_labels(cr, uid, ids, context=context)
+ return self._generate_postlogistics_label(
+ cr, uid, picking,
+ tracking_ids=tracking_ids,
+ context=context)
+ return super(stock_picking, self).\
+ generate_shipping_labels(cr, uid, ids, tracking_ids=tracking_ids,
+ context=context)
class ShippingLabel(orm.Model):
Follow ups