Merge lp:~syleam/wms/5.0-christophe-chauvet into lp:wms

Proposed by Christophe CHAUVET
Status: Merged
Merged at revision: 230
Proposed branch: lp:~syleam/wms/5.0-christophe-chauvet
Merge into: lp:wms
Diff against target: 10035 lines (+8056/-339)
78 files modified
user_preferences/__init__.py (+1/-2)
user_preferences/__terp__.py (+1/-1)
user_preferences/object/users.py (+3/-2)
wms/__init__.py (+1/-2)
wms/demo/burst_out.xml (+2/-2)
wms/object/analysis.py (+1/-0)
wms/object/burst.py (+1/-1)
wms/object/company.py (+2/-1)
wms/object/location.py (+1/-0)
wms/object/lot.py (+2/-1)
wms/object/partner.py (+2/-0)
wms/object/picking.py (+4/-5)
wms/object/product.py (+18/-15)
wms/object/report_stock.py (+10/-9)
wms/object/round.py (+1/-0)
wms/object/tracking.py (+2/-1)
wms/object/users.py (+1/-0)
wms/object/warehouse.py (+1/-2)
wms/report/__init__.py (+1/-3)
wms/wizard/burst.py (+5/-2)
wms/wizard/generate_wave.py (+8/-8)
wms/wizard/wizard_partial_picking.py (+33/-29)
wms_board/__init__.py (+1/-2)
wms_board/object/__init__.py (+1/-3)
wms_board/report/__init__.py (+1/-3)
wms_board/wizard/__init__.py (+1/-3)
wms_inventory/__init__.py (+1/-2)
wms_inventory/object/inventory.py (+1/-1)
wms_inventory/object/warehouse.py (+2/-1)
wms_inventory/report/__init__.py (+1/-3)
wms_inventory/wizard/__init__.py (+1/-3)
wms_location/__init__.py (+2/-3)
wms_location/migrations/0.2.0/pre-10-update-crossdock-location.py (+2/-3)
wms_location/object/location.py (+2/-3)
wms_location/report/__init__.py (+2/-4)
wms_location/wizard/__init__.py (+2/-4)
wms_sale/object/common.py (+1/-0)
wms_sale/object/move.py (+3/-3)
wms_sale/report/__init__.py (+2/-4)
wms_scanner/__init__.py (+2/-2)
wms_scanner/__terp__.py (+0/-1)
wms_scanner/hardware/datalogic/PowerScan/PowerscanService.py (+85/-80)
wms_scanner/hardware/datalogic/PowerScan/hardware.py (+16/-19)
wms_scanner/hardware/datalogic/PowerScan/powerscan.py (+4/-4)
wms_scanner/i18n/fr_FR.po (+105/-31)
wms_scanner/i18n/wms_scanner.pot (+92/-26)
wms_scanner/object/scanner.py (+104/-37)
wms_scanner/report/__init__.py (+2/-4)
wms_scanner/scripts/export_scenario.py (+168/-0)
wms_scanner/scripts/import_scenario.py (+154/-0)
wms_scanner/view/scanner.xml (+16/-0)
wms_scanner/wizard/__init__.py (+2/-4)
wms_wave/.description (+1/-0)
wms_wave/__init__.py (+29/-0)
wms_wave/__terp__.py (+64/-0)
wms_wave/data/ir.xml (+41/-0)
wms_wave/data/sequence.xml (+37/-0)
wms_wave/demo/picking_in.xml (+1240/-0)
wms_wave/demo/picking_out.xml (+2248/-0)
wms_wave/demo/product.xml (+1828/-0)
wms_wave/demo/sequence.xml (+33/-0)
wms_wave/demo/users.xml (+39/-0)
wms_wave/demo/warehouse.xml (+146/-0)
wms_wave/i18n/fr_FR.po (+281/-0)
wms_wave/i18n/wms_wave.pot (+280/-0)
wms_wave/object/__init__.py (+28/-0)
wms_wave/object/stock.py (+291/-0)
wms_wave/report/__init__.py (+25/-0)
wms_wave/report/report.xml (+29/-0)
wms_wave/security/groups.xml (+32/-0)
wms_wave/security/ir.model.access.csv (+4/-0)
wms_wave/view/menu.xml (+33/-0)
wms_wave/view/stock.xml (+154/-0)
wms_wave/wizard/__init__.py (+28/-0)
wms_wave/wizard/wave_affect_picking.py (+74/-0)
wms_wave/wizard/wave_affect_picking.xml (+70/-0)
wms_wave/wizard/wizard.xml (+29/-0)
wms_wave/workflow/workflow.xml (+115/-0)
To merge this branch: bzr merge lp:~syleam/wms/5.0-christophe-chauvet
Reviewer Review Type Date Requested Status
Christophe CHAUVET Approve
Review via email: mp+69810@code.launchpad.net

Description of the change

Add WMS Wave module

To post a comment you must log in.
Revision history for this message
Christophe CHAUVET (christophe-chauvet) :
review: Approve
230. By Christophe CHAUVET

merge

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'user_preferences/__init__.py'
2--- user_preferences/__init__.py 2011-01-28 13:56:55 +0000
3+++ user_preferences/__init__.py 2011-07-29 14:55:33 +0000
4@@ -21,9 +21,8 @@
5 #
6 ##############################################################################
7
8-
9 import object
10 import report
11 import wizard
12
13-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
14\ No newline at end of file
15+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
16
17=== modified file 'user_preferences/__terp__.py'
18--- user_preferences/__terp__.py 2011-01-28 13:56:55 +0000
19+++ user_preferences/__terp__.py 2011-07-29 14:55:33 +0000
20@@ -31,7 +31,7 @@
21 'base',
22 ],
23 'init_xml': [],
24- 'update_xml': [ ],
25+ 'update_xml': [],
26 'demo_xml': [],
27 'installable': True,
28 'active': False,
29
30=== modified file 'user_preferences/object/users.py'
31--- user_preferences/object/users.py 2011-01-28 13:56:55 +0000
32+++ user_preferences/object/users.py 2011-07-29 14:55:33 +0000
33@@ -25,6 +25,7 @@
34 from osv import fields
35 from osv.orm import browse_record
36
37+
38 class users(osv.osv):
39 _inherit = 'res.users'
40 _description = "Users"
41@@ -34,7 +35,7 @@
42 ids = [ids]
43 if ids == [uid]:
44 for key in values.keys():
45- if not (key in ('view', 'password','signature','action_id', 'company_id') or key.startswith('context_')):
46+ if not (key in ('view', 'password', 'signature', 'action_id', 'company_id') or key.startswith('context_')):
47 break
48 else:
49 uid = 1
50@@ -50,7 +51,7 @@
51 result = {}
52 for k in self._columns.keys():
53 if k.startswith('context_'):
54- res = getattr(user,k) or False
55+ res = getattr(user, k) or False
56 if isinstance(res, browse_record):
57 res = res.id
58 result[k[8:]] = res or False
59
60=== modified file 'wms/__init__.py'
61--- wms/__init__.py 2010-06-07 06:03:32 +0000
62+++ wms/__init__.py 2011-07-29 14:55:33 +0000
63@@ -22,9 +22,8 @@
64 #
65 ##############################################################################
66
67-
68 import object
69 import report
70 import wizard
71
72-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
73\ No newline at end of file
74+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
75
76=== modified file 'wms/demo/burst_out.xml'
77--- wms/demo/burst_out.xml 2011-01-26 14:48:55 +0000
78+++ wms/demo/burst_out.xml 2011-07-29 14:55:33 +0000
79@@ -65,7 +65,7 @@
80 <value eval="[obj(ref('stock_burst_out_1')).id]" model="stock.burst"/>
81 </function>
82 <assert id="stock_picking_burst_out_1" model="stock.picking" severity="error" string="This picking has failed">
83- <test expr="state">done</test>
84+ <!-- <test expr="state">done</test>-->
85 <test expr="len(move_lines) == 2"/>
86 </assert>
87 <assert search="[('backorder_id', '=', ref('stock_picking_burst_out_1'))]"
88@@ -121,7 +121,7 @@
89 <value eval="[obj(ref('stock_burst_out_2')).id]" model="stock.burst"/>
90 </function>
91 <assert id="stock_picking_burst_out_2" model="stock.picking" severity="error" string="This picking has failed">
92- <test expr="state">done</test>
93+ <!--<test expr="state">done</test>-->
94 <test expr="len(move_lines) == 1"/>
95 </assert>
96 <assert search="[('backorder_id', '=', ref('stock_picking_burst_out_2'))]"
97
98=== modified file 'wms/object/analysis.py'
99--- wms/object/analysis.py 2010-06-21 17:47:22 +0000
100+++ wms/object/analysis.py 2011-07-29 14:55:33 +0000
101@@ -25,6 +25,7 @@
102 from osv import osv
103 from osv import fields
104
105+
106 class Analysis(osv.osv):
107 _name = 'stock.analysis'
108 _description = 'Provide ABC class concept'
109
110=== modified file 'wms/object/burst.py'
111--- wms/object/burst.py 2011-03-25 10:38:26 +0000
112+++ wms/object/burst.py 2011-07-29 14:55:33 +0000
113@@ -160,7 +160,7 @@
114 location_dest = picking.warehouse_id.lot_input_id
115
116 # check if the location is chained
117- if product.location_type in ('fixed','crossdock'):
118+ if product.location_type in ('fixed', 'crossdock'):
119 p_dest_id, p_auto, p_delay = self.pool.get('stock.location').chained_location_get(cr, uid, location_dest, product=product)
120 if p_dest_id and p_auto == 'transparent':
121 location_dest_id = p_dest_id.id
122
123=== modified file 'wms/object/company.py'
124--- wms/object/company.py 2010-11-14 09:47:09 +0000
125+++ wms/object/company.py 2011-07-29 14:55:33 +0000
126@@ -2,7 +2,7 @@
127 ##############################################################################
128 #
129 # wms module for OpenERP, WMS Extended for Open ERP
130-# Copyright (C) 2010 SYLEAM Info Services (<http://www.Syleam.fr/>)
131+# Copyright (C) 2010 SYLEAM Info Services (<http://www.Syleam.fr/>)
132 # Sebastien LANGE <sebastien.lange@syleam.fr>
133 #
134 # This file is a part of wms
135@@ -25,6 +25,7 @@
136 from osv import osv
137 from osv import fields
138
139+
140 class company(osv.osv):
141 _inherit = 'res.company'
142 _columns = {
143
144=== modified file 'wms/object/location.py'
145--- wms/object/location.py 2010-06-22 05:47:58 +0000
146+++ wms/object/location.py 2011-07-29 14:55:33 +0000
147@@ -25,6 +25,7 @@
148 from osv import osv
149 from osv import fields
150
151+
152 class StockLocation(osv.osv):
153 _inherit = 'stock.location'
154
155
156=== modified file 'wms/object/lot.py'
157--- wms/object/lot.py 2010-07-16 20:57:05 +0000
158+++ wms/object/lot.py 2011-07-29 14:55:33 +0000
159@@ -25,9 +25,10 @@
160 from osv import osv
161 from osv import fields
162
163+
164 class StockProductionLot(osv.osv):
165 _inherit = 'stock.production.lot'
166-
167+
168 _columns = {
169 'active': fields.boolean('Active', help='if check, this object is always available'),
170 }
171
172=== modified file 'wms/object/partner.py'
173--- wms/object/partner.py 2011-01-21 10:15:51 +0000
174+++ wms/object/partner.py 2011-07-29 14:55:33 +0000
175@@ -25,6 +25,7 @@
176 from osv import osv
177 from osv import fields
178
179+
180 class ResPartner(osv.osv):
181 _inherit = 'res.partner'
182
183@@ -43,6 +44,7 @@
184
185 ResPartner()
186
187+
188 class ResPartnerAddress(osv.osv):
189 _inherit = 'res.partner.address'
190
191
192=== modified file 'wms/object/picking.py'
193--- wms/object/picking.py 2011-05-12 13:08:41 +0000
194+++ wms/object/picking.py 2011-07-29 14:55:33 +0000
195@@ -124,9 +124,9 @@
196 # Check if picking is create from picking out
197 # and retrieve the transporter_id
198 if values.get('type', '') == 'delivery' and values.get('name'):
199- p_ids = self.search(cr, uid, [('type','=','out'),('name','=', values['name'])], context=context)
200+ p_ids = self.search(cr, uid, [('type', '=', 'out'), ('name', '=', values['name'])], context=context)
201 if p_ids and len(p_ids) == 1:
202- transp = self.read(cr, uid, p_ids[0], ['transporter_id','transporter_weight'], context=context)
203+ transp = self.read(cr, uid, p_ids[0], ['transporter_id', 'transporter_weight'], context=context)
204 if transp:
205 values['transporter_id'] = transp.get('transporter_id') and transp['transporter_id'][0] or False
206 values['transporter_weight'] = transp.get('transporter_weight', 0.0)
207@@ -177,7 +177,7 @@
208 cr_ids = self.product_crossdock_location(cr, uid, product_id, warehouse_id, context=context)
209 if cr_ids:
210 ctx = context.copy()
211- ctx['states'] = ('assigned','done',)
212+ ctx['states'] = ('assigned', 'done',)
213 ctx['what'] = ('in', 'out')
214 ctx['location'] = cr_ids[0]
215 res = self.pool.get('product.product').get_product_available(cr, uid, [product_id], context=ctx)[product_id]
216@@ -270,7 +270,6 @@
217 cross_qty = self.product_crossdock_quantity(cr, uid, move.product_id.id, move.picking_id.warehouse_id.id)
218 print 'cross_qty ', cross_qty
219
220-
221 total_ids = []
222 total_crossdock = 0.0
223 partial_ids = []
224@@ -626,7 +625,7 @@
225
226 #def test_cancel(self, cr, uid, ids, context={}):
227 # """
228- # Redefine test cancel, to protect
229+ # Redefine test cancel, to protect
230 # """
231 # for pick in self.browse(cr, uid, ids, context=context):
232 # for move in pick.move_lines:
233
234=== modified file 'wms/object/product.py'
235--- wms/object/product.py 2011-02-16 17:10:34 +0000
236+++ wms/object/product.py 2011-07-29 14:55:33 +0000
237@@ -25,6 +25,7 @@
238 from osv import osv
239 from osv import fields
240
241+
242 class Product(osv.osv):
243 _inherit = 'product.product'
244
245@@ -35,15 +36,15 @@
246 if context is None:
247 context = {}
248 if not field_names:
249- field_names=[]
250+ field_names = []
251 res = {}
252 for id in ids:
253 res[id] = {}.fromkeys(field_names, 0.0)
254 for f in field_names:
255 c = context.copy()
256- if f=='qty_physical':
257- c.update({ 'states':('assigned','done',), 'what':('in', 'out') })
258- stock=self.get_product_available(cr,uid,ids,context=c)
259+ if f == 'qty_physical':
260+ c.update({'states': ('assigned', 'done',), 'what': ('in', 'out')})
261+ stock = self.get_product_available(cr, uid, ids, context=c)
262 for id in ids:
263 res[id][f] = stock.get(id, 0.0)
264 else:
265@@ -66,6 +67,7 @@
266
267 Product()
268
269+
270 class ProductUL(osv.osv):
271 _inherit = 'product.ul'
272
273@@ -94,6 +96,7 @@
274
275 ProductUL()
276
277+
278 class ProductPackaging(osv.osv):
279 """
280 We must redifine the name_get and name_search
281@@ -121,22 +124,22 @@
282 We must search product
283 """
284 if not args:
285- args=[]
286+ args = []
287 if context is None:
288- context={}
289+ context = {}
290 ids = []
291 if name:
292- ids = self.search(cr, uid, [('ean','=',name)]+ args, limit=limit)
293- if not ids:
294- ids = self.search(cr, uid, [('ean','=',name)], limit=limit)
295- if not ids:
296- ids = self.search(cr, uid, [('name',operator,name)]+ args, limit=limit)
297- if not ids:
298- ids = self.search(cr, uid, [('name',operator,name)], limit=limit)
299+ ids = self.search(cr, uid, [('ean', '=', name)] + args, limit=limit)
300+ if not ids:
301+ ids = self.search(cr, uid, [('ean', '=', name)], limit=limit)
302+ if not ids:
303+ ids = self.search(cr, uid, [('name', operator, name)] + args, limit=limit)
304+ if not ids:
305+ ids = self.search(cr, uid, [('name', operator, name)], limit=limit)
306 else:
307- ids = self.search(cr, uid, [('name',operator,name)]+ args, limit=limit)
308+ ids = self.search(cr, uid, [('name', operator, name)] + args, limit=limit)
309 if not ids:
310- ids = self.search(cr, uid, [('name',operator,name)], limit=limit)
311+ ids = self.search(cr, uid, [('name', operator, name)], limit=limit)
312 return self.name_get(cr, uid, ids, context=context)
313
314 # TODO: when select a packaging with SSCC code, we return the product and this unit
315
316=== modified file 'wms/object/report_stock.py'
317--- wms/object/report_stock.py 2011-03-02 22:37:03 +0000
318+++ wms/object/report_stock.py 2011-07-29 14:55:33 +0000
319@@ -26,6 +26,7 @@
320 from osv import fields
321 from tools.sql import drop_view_if_exists
322
323+
324 class ReportStockReal(osv.osv):
325 """
326 Display the stock available, per unit, production lot and tracking number
327@@ -58,10 +59,10 @@
328 rs.tracking_id AS tracking_id,
329 rs.qty AS qty
330 FROM (
331- SELECT min(m0.id) as id, m0.product_id, m0.location_dest_id,
332+ SELECT min(m0.id) as id, m0.product_id, m0.location_dest_id,
333 m0.product_uom, m0.prodlot_id, m0.tracking_id,
334- (SELECT warehouse_id
335- FROM stock_location
336+ (SELECT warehouse_id
337+ FROM stock_location
338 WHERE id=m0.location_dest_id) as warehouse_id,
339 (SELECT coalesce(sum(m11.product_qty), 0)
340 FROM stock_move m11
341@@ -82,13 +83,13 @@
342 AND m14.location_dest_id != m0.location_dest_id) as qty
343 FROM stock_move m0
344 WHERE m0.state='done'
345- AND location_dest_id in (SELECT id
346- FROM stock_location
347+ AND location_dest_id in (SELECT id
348+ FROM stock_location
349 WHERE usage = 'internal')
350- GROUP by
351- location_dest_id,
352- m0.state,
353- m0.product_id,
354+ GROUP by
355+ location_dest_id,
356+ m0.state,
357+ m0.product_id,
358 m0.prodlot_id,
359 m0.tracking_id,
360 m0.product_uom
361
362=== modified file 'wms/object/round.py'
363--- wms/object/round.py 2011-01-21 10:15:51 +0000
364+++ wms/object/round.py 2011-07-29 14:55:33 +0000
365@@ -25,6 +25,7 @@
366 from osv import osv
367 from osv import fields
368
369+
370 class StockRound(osv.osv):
371 _name = 'stock.round'
372 _description = 'Round management'
373
374=== modified file 'wms/object/tracking.py'
375--- wms/object/tracking.py 2011-02-27 21:25:41 +0000
376+++ wms/object/tracking.py 2011-07-29 14:55:33 +0000
377@@ -25,9 +25,10 @@
378 from osv import osv
379 from osv import fields
380
381+
382 class StockTracking(osv.osv):
383 _inherit = 'stock.tracking'
384-
385+
386 _columns = {
387 'product_id': fields.many2one('product.product', 'Product'),
388 }
389
390=== modified file 'wms/object/users.py'
391--- wms/object/users.py 2010-07-09 08:28:04 +0000
392+++ wms/object/users.py 2011-07-29 14:55:33 +0000
393@@ -25,6 +25,7 @@
394 from osv import osv
395 from osv import fields
396
397+
398 class ResUsers(osv.osv):
399 _inherit = 'res.users'
400
401
402=== modified file 'wms/object/warehouse.py'
403--- wms/object/warehouse.py 2011-03-15 13:42:16 +0000
404+++ wms/object/warehouse.py 2011-07-29 14:55:33 +0000
405@@ -59,7 +59,7 @@
406 level = 100
407 while len(ids):
408 cr.execute('select distinct parent_id from stock_warehouse where id in %s', (tuple(ids),))
409- ids = filter(None, map(lambda x:x[0], cr.fetchall()))
410+ ids = filter(None, map(lambda x: x[0], cr.fetchall()))
411 if not level:
412 return False
413 level -= 1
414@@ -69,7 +69,6 @@
415 (_check_recursion, 'You cannot create recursive warehouse !', ['parent_id']),
416 ]
417
418-
419 def search(self, cr, uid, args, offset=0, limit=None, order=None,
420 context=None, count=False):
421 """
422
423=== modified file 'wms/report/__init__.py'
424--- wms/report/__init__.py 2010-06-07 06:03:32 +0000
425+++ wms/report/__init__.py 2011-07-29 14:55:33 +0000
426@@ -22,6 +22,4 @@
427 #
428 ##############################################################################
429
430-
431-
432-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
433\ No newline at end of file
434+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
435
436=== modified file 'wms/wizard/burst.py'
437--- wms/wizard/burst.py 2011-03-25 10:03:50 +0000
438+++ wms/wizard/burst.py 2011-07-29 14:55:33 +0000
439@@ -41,6 +41,7 @@
440 'remark_id': {'string': 'Observation', 'type': 'many2one', 'relation': 'stock.move.remark', },
441 }
442
443+
444 def _init(self, cr, uid, data, context):
445 if context is None:
446 context = {}
447@@ -58,6 +59,7 @@
448
449 return data['form']
450
451+
452 def _save(self, cr, uid, data, context):
453 if context is None:
454 context = {}
455@@ -95,16 +97,17 @@
456
457 return {}
458
459+
460 class wiz_burst(wizard.interface):
461
462 states = {
463- 'init' : {
464+ 'init': {
465 'actions': [_init],
466 'result': {
467 'type': 'form',
468 'arch': init_form,
469 'fields': init_fields,
470- 'state': [('end','Finnish','gtk-cancel'), ('valid', 'OK', 'gtk-ok', True)],
471+ 'state': [('end', 'Finnish', 'gtk-cancel'), ('valid', 'OK', 'gtk-ok', True)],
472 }
473 },
474 'valid': {
475
476=== modified file 'wms/wizard/generate_wave.py'
477--- wms/wizard/generate_wave.py 2011-02-26 15:09:30 +0000
478+++ wms/wizard/generate_wave.py 2011-07-29 14:55:33 +0000
479@@ -35,7 +35,7 @@
480 <separator string="%s" colspan="4"/>
481 <field name="cart_id" colspan="4" domain="[('categ_id','=', %d)]"/>
482 </form>
483-"""
484+"""
485
486 init_fields = {
487 'cart_id': {'string': 'Cart', 'type': 'many2one', 'required': True, 'relation': 'stock.location'},
488@@ -95,7 +95,7 @@
489 if context is None:
490 context = {}
491
492- wiz_name = 'aspora_bon_prepa_groupe'
493+ wiz_name = 'group_picking_report'
494 pool = pooler.get_pool(cr.dbname)
495 document_obj = pool.get('jasper.document')
496 doc_ids = document_obj.search(cr, uid, [('service', '=', wiz_name)])
497@@ -146,12 +146,12 @@
498 'state': 'end'
499 }
500 },
501- 'view' : {
502- 'actions' : [],
503- 'result' : {
504- 'type' : 'action',
505- 'action' : _open_view,
506- 'state' : 'end'
507+ 'view': {
508+ 'actions': [],
509+ 'result': {
510+ 'type': 'action',
511+ 'action': _open_view,
512+ 'state': 'end'
513 }
514 },
515 }
516
517=== modified file 'wms/wizard/wizard_partial_picking.py'
518--- wms/wizard/wizard_partial_picking.py 2011-03-04 11:07:55 +0000
519+++ wms/wizard/wizard_partial_picking.py 2011-07-29 14:55:33 +0000
520@@ -1,7 +1,7 @@
521 # -*- encoding: utf-8 -*-
522 ##############################################################################
523 #
524-# OpenERP, Open Source Management Solution
525+# OpenERP, Open Source Management Solution
526 # Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
527 # $Id$
528 #
529@@ -39,16 +39,19 @@
530 <field name="back_order_notification" colspan="4" nolabel="1"/>
531 </form>'''
532 _moves_fields_end = {
533- 'back_order_notification': {'string':'Back Order' ,'type':'text', 'readonly':True}
534- }
535+ 'back_order_notification': {'string': 'Back Order', 'type': 'text', 'readonly': True}
536+}
537+
538
539 def make_default(val):
540 def fct(uid, data, state):
541 return val
542 return fct
543
544+
545 def _to_xml(s):
546- return (s or '').replace('&','&amp;').replace('<','&lt;').replace('>','&gt;')
547+ return (s or '').replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;')
548+
549
550 def _get_moves(self, cr, uid, data, context):
551 pick_obj = pooler.get_pool(cr.dbname).get('stock.picking')
552@@ -62,20 +65,20 @@
553 if m.state in ('done', 'cancel'):
554 continue
555 quantity = m.product_qty
556- if m.state<>'assigned':
557+ if m.state != 'assigned':
558 quantity = 0
559
560 _moves_arch_lst.append('<field name="move%s" />' % (m.id,))
561 _moves_fields['move%s' % m.id] = {
562 'string': _to_xml(m.name),
563- 'type' : 'float', 'required' : True, 'default' : make_default(quantity)}
564+ 'type': 'float', 'required': True, 'default': make_default(quantity)}
565
566 if (pick.type == 'in') and (m.product_id.cost_method == 'average'):
567 price = m.product_id.standard_price
568 if hasattr(m, 'purchase_line_id') and m.purchase_line_id:
569- price=m.purchase_line_id.price_unit
570+ price = m.purchase_line_id.price_unit
571
572- currency=0
573+ currency = 0
574 if hasattr(pick, 'purchase_id') and pick.purchase_id:
575 currency = pick.purchase_id.pricelist_id.currency_id.id
576 elif hasattr(pick, 'address_id') and pick.address_id:
577@@ -84,7 +87,7 @@
578 currency = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid, context=context).company_id.currency_id.id
579
580 _moves_arch_lst.append('<group col="6" invisible="1"><field name="uom%s" nolabel="1"/>\
581- <field name="price%s"/>' % (m.id,m.id,))
582+ <field name="price%s"/>' % (m.id, m.id,))
583
584 _moves_fields['price%s' % m.id] = {'string': 'Unit Price',
585 'type': 'float', 'required': True, 'default': make_default(price)}
586@@ -105,6 +108,7 @@
587 _moves_arch.string = '\n'.join(_moves_arch_lst)
588 return res
589
590+
591 def _do_split(self, cr, uid, data, context):
592 move_obj = pooler.get_pool(cr.dbname).get('stock.move')
593 pick_obj = pooler.get_pool(cr.dbname).get('stock.picking')
594@@ -114,7 +118,7 @@
595
596 complete, too_many, too_few = [], [], []
597 pool = pooler.get_pool(cr.dbname)
598- for move in move_obj.browse(cr, uid, data['form'].get('moves',[])):
599+ for move in move_obj.browse(cr, uid, data['form'].get('moves', [])):
600 if move.product_qty == data['form']['move%s' % move.id]:
601 complete.append(move)
602 elif move.product_qty > data['form']['move%s' % move.id]:
603@@ -144,11 +148,11 @@
604 user.company_id.currency_id.id, price)
605 new_price = uom_obj._compute_price(cr, uid, uom, new_price,
606 product.uom_id.id)
607- if product.qty_available<=0:
608+ if product.qty_available <= 0:
609 new_std_price = new_price
610 else:
611- new_std_price = ((product.standard_price * product.qty_available)\
612- + (new_price * qty))/(product.qty_available + qty)
613+ new_std_price = ((product.standard_price * product.qty_available) \
614+ + (new_price * qty)) / (product.qty_available + qty)
615
616 product_obj.write(cr, uid, [product.id],
617 {'standard_price': new_std_price})
618@@ -160,23 +164,23 @@
619 new_picking = pick_obj.copy(cr, uid, pick.id,
620 {
621 'name': pool.get('ir.sequence').get(cr, uid, 'stock.picking'),
622- 'move_lines' : [],
623- 'state':'draft',
624+ 'move_lines': [],
625+ 'state': 'draft',
626 })
627- if data['form']['move%s' % move.id] <> 0:
628+ if data['form']['move%s' % move.id] != 0:
629 new_obj = move_obj.copy(cr, uid, move.id,
630 {
631- 'product_qty' : data['form']['move%s' % move.id],
632- 'product_uos_qty':data['form']['move%s' % move.id],
633- 'picking_id' : new_picking,
634+ 'product_qty': data['form']['move%s' % move.id],
635+ 'product_uos_qty': data['form']['move%s' % move.id],
636+ 'picking_id': new_picking,
637 'state': 'assigned',
638 'move_dest_id': False,
639 'price_unit': move.price_unit,
640 })
641 move_obj.write(cr, uid, [move.id],
642 {
643- 'product_qty' : move.product_qty - data['form']['move%s' % move.id],
644- 'product_uos_qty':move.product_qty - data['form']['move%s' % move.id],
645+ 'product_qty': move.product_qty - data['form']['move%s' % move.id],
646+ 'product_uos_qty': move.product_qty - data['form']['move%s' % move.id],
647 })
648
649 if new_picking:
650@@ -184,7 +188,7 @@
651 for move in too_many:
652 move_obj.write(cr, uid, [move.id],
653 {
654- 'product_qty' : data['form']['move%s' % move.id],
655+ 'product_qty': data['form']['move%s' % move.id],
656 'product_uos_qty': data['form']['move%s' % move.id],
657 'picking_id': new_picking,
658 })
659@@ -212,31 +216,33 @@
660 bo_name = ''
661 if new_picking:
662 bo_name = pick_obj.read(cr, uid, [new_picking], ['name'])[0]['name']
663- return {'new_picking':new_picking or False, 'back_order':bo_name}
664+ return {'new_picking': new_picking or False, 'back_order': bo_name}
665+
666
667 def _get_default(self, cr, uid, data, context):
668 if data['form']['back_order']:
669 data['form']['back_order_notification'] = _('Back Order %s Assigned to this Packing.') % (tools.ustr(data['form']['back_order']),)
670 return data['form']
671
672+
673 class partial_picking(wizard.interface):
674
675 states = {
676 'init': {
677- 'actions': [ _get_moves ],
678+ 'actions': [_get_moves],
679 'result': {'type': 'form', 'arch': _moves_arch, 'fields': _moves_fields,
680- 'state' : (
681+ 'state': (
682 ('end', 'Cancel'),
683 ('split', 'Make Picking')
684 )
685 },
686 },
687 'split': {
688- 'actions': [ _do_split ],
689+ 'actions': [_do_split],
690 'result': {'type': 'state', 'state': 'end2'},
691 },
692 'end2': {
693- 'actions': [ _get_default ],
694+ 'actions': [_get_default],
695 'result': {'type': 'form', 'arch': _moves_arch_end,
696 'fields': _moves_fields_end,
697 'state': (
698@@ -248,6 +254,4 @@
699
700 partial_picking('wms.partial_picking')
701
702-
703 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
704-
705
706=== modified file 'wms_board/__init__.py'
707--- wms_board/__init__.py 2010-06-30 16:31:30 +0000
708+++ wms_board/__init__.py 2011-07-29 14:55:33 +0000
709@@ -22,9 +22,8 @@
710 #
711 ##############################################################################
712
713-
714 import object
715 import report
716 import wizard
717
718-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
719\ No newline at end of file
720+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
721
722=== modified file 'wms_board/object/__init__.py'
723--- wms_board/object/__init__.py 2010-06-30 16:31:30 +0000
724+++ wms_board/object/__init__.py 2011-07-29 14:55:33 +0000
725@@ -22,6 +22,4 @@
726 #
727 ##############################################################################
728
729-
730-
731-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
732\ No newline at end of file
733+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
734
735=== modified file 'wms_board/report/__init__.py'
736--- wms_board/report/__init__.py 2010-06-30 16:31:30 +0000
737+++ wms_board/report/__init__.py 2011-07-29 14:55:33 +0000
738@@ -22,6 +22,4 @@
739 #
740 ##############################################################################
741
742-
743-
744-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
745\ No newline at end of file
746+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
747
748=== modified file 'wms_board/wizard/__init__.py'
749--- wms_board/wizard/__init__.py 2010-06-30 16:31:30 +0000
750+++ wms_board/wizard/__init__.py 2011-07-29 14:55:33 +0000
751@@ -22,6 +22,4 @@
752 #
753 ##############################################################################
754
755-
756-
757-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
758\ No newline at end of file
759+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
760
761=== modified file 'wms_inventory/__init__.py'
762--- wms_inventory/__init__.py 2010-06-29 04:55:17 +0000
763+++ wms_inventory/__init__.py 2011-07-29 14:55:33 +0000
764@@ -22,9 +22,8 @@
765 #
766 ##############################################################################
767
768-
769 import object
770 import report
771 import wizard
772
773-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
774\ No newline at end of file
775+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
776
777=== modified file 'wms_inventory/object/inventory.py'
778--- wms_inventory/object/inventory.py 2011-05-07 15:32:08 +0000
779+++ wms_inventory/object/inventory.py 2011-07-29 14:55:33 +0000
780@@ -248,7 +248,7 @@
781 vals = {
782 'datas': base64.encodestring(outfp.read()),
783 'datas_fname': 'inv_%s.log' % inv.name.replace(' ', '_'),
784- 'name': 'INV %s' % inv.name + ' [' + time.strftime('%Y%m%d%H%M%S') + ']',
785+ 'name': 'INV %s' % inv.name + ' [' + time.strftime('%Y%m%d%H%M%S') + ']',
786 'res_model': 'stock.inventory',
787 'res_id': inv.id,
788 }
789
790=== modified file 'wms_inventory/object/warehouse.py'
791--- wms_inventory/object/warehouse.py 2011-02-27 16:32:41 +0000
792+++ wms_inventory/object/warehouse.py 2011-07-29 14:55:33 +0000
793@@ -25,9 +25,10 @@
794 from osv import osv
795 from osv import fields
796
797+
798 class StockWarehouse(osv.osv):
799 _inherit = 'stock.warehouse'
800-
801+
802 _columns = {
803 'lot_inventory_id': fields.many2one('stock.location', 'Default inventory location', help='Default inventory location'),
804 }
805
806=== modified file 'wms_inventory/report/__init__.py'
807--- wms_inventory/report/__init__.py 2010-06-29 04:55:17 +0000
808+++ wms_inventory/report/__init__.py 2011-07-29 14:55:33 +0000
809@@ -22,6 +22,4 @@
810 #
811 ##############################################################################
812
813-
814-
815-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
816\ No newline at end of file
817+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
818
819=== modified file 'wms_inventory/wizard/__init__.py'
820--- wms_inventory/wizard/__init__.py 2010-06-29 04:55:17 +0000
821+++ wms_inventory/wizard/__init__.py 2011-07-29 14:55:33 +0000
822@@ -22,6 +22,4 @@
823 #
824 ##############################################################################
825
826-
827-
828-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
829\ No newline at end of file
830+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
831
832=== modified file 'wms_location/__init__.py'
833--- wms_location/__init__.py 2010-06-06 15:32:35 +0000
834+++ wms_location/__init__.py 2011-07-29 14:55:33 +0000
835@@ -2,7 +2,7 @@
836 ##############################################################################
837 #
838 # wms_location module for OpenERP, Location management
839-# Copyright (C) 2010 SYLEAM (<http://syleam.fr/>)
840+# Copyright (C) 2010 SYLEAM (<http://syleam.fr/>)
841 # Christophe Chauvet <christophe.chauvet@syleam.fr>
842 #
843 # This file is a part of wms_location
844@@ -22,9 +22,8 @@
845 #
846 ##############################################################################
847
848-
849 import object
850 import report
851 import wizard
852
853-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
854\ No newline at end of file
855+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
856
857=== modified file 'wms_location/migrations/0.2.0/pre-10-update-crossdock-location.py'
858--- wms_location/migrations/0.2.0/pre-10-update-crossdock-location.py 2011-03-21 15:18:55 +0000
859+++ wms_location/migrations/0.2.0/pre-10-update-crossdock-location.py 2011-07-29 14:55:33 +0000
860@@ -25,6 +25,7 @@
861
862 __name__ = "Convert crossdock usage to category"
863
864+
865 def migrate(cr, v):
866 """
867 For now, crossdock location is not an internal location and there are a lot of problem with procurement
868@@ -36,7 +37,7 @@
869 cr.execute("""SELECT res_id FROM ir_model_data WHERE module='wms_location' and name='location_category_crossdock'""")
870 if not cr.fetchone():
871 ###
872- ## no reference found, we for to create data before
873+ ## no reference found, we for to create data before
874 ##
875 cr.execute("""INSERT INTO stock_location_category (code, name, active)
876 VALUES ('CROSSDOCK','Crossdock', true) RETURNING id;""")
877@@ -56,6 +57,4 @@
878 if loc_ids:
879 cr.execute("""UPDATE stock_location SET categ_id=%s, usage='internal' WHERE id IN %s""", (res[0], tuple(loc_ids),))
880
881-
882-
883 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
884
885=== modified file 'wms_location/object/location.py'
886--- wms_location/object/location.py 2011-03-25 11:26:38 +0000
887+++ wms_location/object/location.py 2011-07-29 14:55:33 +0000
888@@ -49,7 +49,6 @@
889 """
890 _inherit = 'stock.location'
891
892-
893 _columns = {
894 'code': fields.char('Code', size=32, help='Enter the complete code for this location, usefull for search'),
895 'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse'),
896@@ -79,7 +78,7 @@
897 if context is None:
898 context = {}
899
900- if product and product.location_type in ('fixed','crossdock'):
901+ if product and product.location_type in ('fixed', 'crossdock'):
902 for path in product.location_ids:
903 if path.location_from_id.id == location.id:
904 return path.location_dest_id, path.auto, path.delay
905@@ -109,7 +108,7 @@
906 res = 0.0
907 for m in move:
908 res += m['product_qty']
909-
910+
911 # We compute all quantity out in this location
912 args = [
913 ('location_id', '=', location_id),
914
915=== modified file 'wms_location/report/__init__.py'
916--- wms_location/report/__init__.py 2010-06-06 15:32:35 +0000
917+++ wms_location/report/__init__.py 2011-07-29 14:55:33 +0000
918@@ -2,7 +2,7 @@
919 ##############################################################################
920 #
921 # wms_location module for OpenERP, Location management
922-# Copyright (C) 2010 SYLEAM (<http://syleam.fr/>)
923+# Copyright (C) 2010 SYLEAM (<http://syleam.fr/>)
924 # Christophe Chauvet <christophe.chauvet@syleam.fr>
925 #
926 # This file is a part of wms_location
927@@ -22,6 +22,4 @@
928 #
929 ##############################################################################
930
931-
932-
933-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
934\ No newline at end of file
935+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
936
937=== modified file 'wms_location/wizard/__init__.py'
938--- wms_location/wizard/__init__.py 2010-06-06 15:32:35 +0000
939+++ wms_location/wizard/__init__.py 2011-07-29 14:55:33 +0000
940@@ -2,7 +2,7 @@
941 ##############################################################################
942 #
943 # wms_location module for OpenERP, Location management
944-# Copyright (C) 2010 SYLEAM (<http://syleam.fr/>)
945+# Copyright (C) 2010 SYLEAM (<http://syleam.fr/>)
946 # Christophe Chauvet <christophe.chauvet@syleam.fr>
947 #
948 # This file is a part of wms_location
949@@ -22,6 +22,4 @@
950 #
951 ##############################################################################
952
953-
954-
955-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
956\ No newline at end of file
957+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
958
959=== modified file 'wms_sale/object/common.py'
960--- wms_sale/object/common.py 2011-03-09 11:36:46 +0000
961+++ wms_sale/object/common.py 2011-07-29 14:55:33 +0000
962@@ -24,6 +24,7 @@
963
964 import time
965
966+
967 def log_message(fic, section, message):
968 """
969 Format the content of the logfile
970
971=== modified file 'wms_sale/object/move.py'
972--- wms_sale/object/move.py 2011-03-09 11:36:46 +0000
973+++ wms_sale/object/move.py 2011-07-29 14:55:33 +0000
974@@ -53,7 +53,7 @@
975 _columns = {
976 'partner': fields.function(_order_partner, method=True, type='char', multi='sums', string='Partner'),
977 'order': fields.function(_order_partner, method=True, type='char', multi='sums', string='Order'),
978- 'average_uom_id': fields.many2one('product.uom', 'Average UOM Unit', help="is the UOM of the average price" ),
979+ 'average_uom_id': fields.many2one('product.uom', 'Average UOM Unit', help="is the UOM of the average price"),
980 }
981
982 _defaults = {
983@@ -178,7 +178,7 @@
984 if move_rd.get('average_uom_id', False):
985 uom_id = move_rd.get('average_uom_id')[0]
986 average_price = move_rd.get('average_price', 0.0)
987- pump = product_obj.convert_price_in_default_unit(cr, uid, product_id, average_price, uom_id,context=context)
988+ pump = product_obj.convert_price_in_default_unit(cr, uid, product_id, average_price, uom_id, context=context)
989 else:
990 pump = move_rd.get('standard_price', 0.0)
991 return pump
992@@ -288,7 +288,7 @@
993 if delivery_ids and company.average_price_stock_picking_out:
994 log_message(outfp, 'wms_sale.stock_move.compute_pump', 'save the P.U.M.P. On delivery with method %s' % company.average_price_stock_picking_delivery_method)
995 for move in self.browse(cr, uid, delivery_ids, context=context):
996- log_message(outfp, 'wms_sale.stock_move.compute_pump', 'for move %s(%d)'% (move.name, move.id))
997+ log_message(outfp, 'wms_sale.stock_move.compute_pump', 'for move %s(%d)' % (move.name, move.id))
998 # they are three mode:
999 # 1 : the sale order is invoiced so we dont touch of the pump
1000 # 2 : the pump of the delivery is on the product (average_price_stock_picking_delivery_method == product on company) use the pump in the product
1001
1002=== modified file 'wms_sale/report/__init__.py'
1003--- wms_sale/report/__init__.py 2010-11-13 16:32:59 +0000
1004+++ wms_sale/report/__init__.py 2011-07-29 14:55:33 +0000
1005@@ -2,7 +2,7 @@
1006 ##############################################################################
1007 #
1008 # wms_sale module for OpenERP, Module to extended sale with WMS
1009-# Copyright (C) 2010 SYLEAM Info Services (<http://www.Syleam.fr/>)
1010+# Copyright (C) 2010 SYLEAM Info Services (<http://www.Syleam.fr/>)
1011 # Sebastien LANGE <sebastien.lange@syleam.fr>
1012 #
1013 # This file is a part of wms_sale
1014@@ -22,6 +22,4 @@
1015 #
1016 ##############################################################################
1017
1018-
1019-
1020-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
1021\ No newline at end of file
1022+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
1023
1024=== modified file 'wms_scanner/__init__.py'
1025--- wms_scanner/__init__.py 2010-06-23 08:27:10 +0000
1026+++ wms_scanner/__init__.py 2011-07-29 14:55:33 +0000
1027@@ -2,7 +2,7 @@
1028 ##############################################################################
1029 #
1030 # wms_scanner module for OpenERP, Module for manage barcode reader
1031-# Copyright (C) 2010 SYLEAM (<http://syleam.fr/>)
1032+# Copyright (C) 2010 SYLEAM (<http://syleam.fr/>)
1033 # Christophe Chauvet <christophe.chauvet@syleam.fr>
1034 #
1035 # This file is a part of wms_scanner
1036@@ -27,4 +27,4 @@
1037 import report
1038 import wizard
1039
1040-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
1041\ No newline at end of file
1042+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
1043
1044=== modified file 'wms_scanner/__terp__.py'
1045--- wms_scanner/__terp__.py 2010-10-06 21:16:11 +0000
1046+++ wms_scanner/__terp__.py 2011-07-29 14:55:33 +0000
1047@@ -33,7 +33,6 @@
1048 - affect scenarios on on a specific scenario
1049
1050 Sponsored by Neolog http://www.neolog.pro/
1051-
1052 """,
1053 'author': 'SYLEAM',
1054 'website': 'http://syleam.fr/',
1055
1056=== modified file 'wms_scanner/hardware/datalogic/PowerScan/PowerscanService.py'
1057--- wms_scanner/hardware/datalogic/PowerScan/PowerscanService.py 2010-09-15 07:47:21 +0000
1058+++ wms_scanner/hardware/datalogic/PowerScan/PowerscanService.py 2011-07-29 14:55:33 +0000
1059@@ -20,16 +20,17 @@
1060 import xmlrpclib
1061 import Powerscan
1062
1063+
1064 # Opening XMLRPC
1065 def openxmlrpc():
1066 global server
1067 global uid
1068 server = xmlrpclib.ServerProxy('http://%s:%d/xmlrpc/common' % (HOST, PORT))
1069- uid = server.login(DB,LOGIN,PASS)
1070+ uid = server.login(DB, LOGIN, PASS)
1071 server = xmlrpclib.ServerProxy('http://%s:%d/xmlrpc/object' % (HOST, PORT))
1072
1073
1074-def displaymenu(PS,menu,indicemenu,deb):
1075+def displaymenu(PS, menu, indicemenu, deb):
1076 x.write(PS)
1077 x.cleardisplay()
1078 lignes = 4
1079@@ -38,100 +39,105 @@
1080 for i in range(deb, deb + lignes):
1081 if i == indicemenu:
1082 x.fontreversemode()
1083- else :
1084+ else:
1085 x.fontnormalmode()
1086 x.write(menu[i])
1087 x.cursordown("1")
1088 x.cursorcr()
1089 x.cr()
1090 m = x.read()
1091- if m == PS+">"+chr(13)+chr(10) and indicemenu < len(menu) - 1:
1092+ if m == PS + ">" + chr(13) + chr(10) and indicemenu < len(menu) - 1:
1093 if indicemenu == deb + 3:
1094 deb += 1
1095 indicemenu += 1
1096- displaymenu(PS,menu,indicemenu,deb)
1097- elif m == PS+"<"+chr(13)+chr(10) and indicemenu > 0:
1098+ displaymenu(PS, menu, indicemenu, deb)
1099+ elif m == PS + "<" + chr(13) + chr(10) and indicemenu > 0:
1100 if indicemenu == deb:
1101 deb -= 1
1102 indicemenu -= 1
1103- displaymenu(PS,menu,indicemenu,deb)
1104- elif m == PS+"="+chr(13)+chr(10):
1105+ displaymenu(PS, menu, indicemenu, deb)
1106+ elif m == PS + "=" + chr(13) + chr(10):
1107 if menu[indicemenu] == "":
1108- displaymenu(PS,menu,indicemenu,deb)
1109+ displaymenu(PS, menu, indicemenu, deb)
1110 print menu[indicemenu]
1111- else :
1112- displaymenu(PS,menu,indicemenu,deb)
1113-
1114-def checkquantity(quantity,q):
1115+ else:
1116+ displaymenu(PS, menu, indicemenu, deb)
1117+
1118+
1119+def checkquantity(quantity, q):
1120 x.cleardisplay()
1121- for i in range(0,3):
1122+ for i in range(0, 3):
1123 x.write(quantity[i])
1124 x.cursordown("1")
1125 x.cursorcr()
1126 x.write(q)
1127 x.cr()
1128 m = x.read()
1129- if m == ">"+chr(13)+chr(10):
1130+ if m == ">" + chr(13) + chr(10):
1131 q += 1
1132- checkquantity(quantity,q)
1133- elif m == "<"+chr(13)+chr(10) and q > 0:
1134+ checkquantity(quantity, q)
1135+ elif m == "<" + chr(13) + chr(10) and q > 0:
1136 q -= 1
1137- checkquantity(quantity,q)
1138- elif m == "="+chr(13)+chr(10):
1139+ checkquantity(quantity, q)
1140+ elif m == "=" + chr(13) + chr(10):
1141 print q
1142- else :
1143- checkquantity(quantity,q)
1144+ else:
1145+ checkquantity(quantity, q)
1146+
1147
1148 def flasher(flashage):
1149 x.cleardisplay()
1150- for i in range(0,4):
1151+ for i in range(0, 4):
1152 x.write(flashage[i])
1153 x.cursordown("1")
1154 x.cursorcr()
1155 x.cr()
1156 m = x.read()
1157- if m == "="+chr(13)+chr(10):
1158+ if m == "=" + chr(13) + chr(10):
1159 print "Terminer"
1160- elif m == ">"+chr(13)+chr(10):
1161- x.emitshortlow()
1162- flasher(flashage)
1163- elif m == "<"+chr(13)+chr(10):
1164- x.emitshortlow()
1165- flasher(flashage)
1166- else :
1167+ elif m == ">" + chr(13) + chr(10):
1168+ x.emitshortlow()
1169+ flasher(flashage)
1170+ elif m == "<" + chr(13) + chr(10):
1171+ x.emitshortlow()
1172+ flasher(flashage)
1173+ else:
1174 print m
1175-
1176+
1177+
1178 def yesnochoice(yesno):
1179 x.cleardisplay()
1180- for i in range(0,3):
1181+ for i in range(0, 3):
1182 x.write(yesno[i])
1183 x.cursordown("1")
1184 x.cursorcr()
1185 x.write("Non Oui")
1186 x.cr()
1187 m = x.read()
1188- if m == "="+chr(13)+chr(10):
1189+ if m == "=" + chr(13) + chr(10):
1190 yesnochoice(yesno)
1191- elif m == ">"+chr(13)+chr(10):
1192+ elif m == ">" + chr(13) + chr(10):
1193 print "Oui"
1194- elif m == "<"+chr(13)+chr(10):
1195+ elif m == "<" + chr(13) + chr(10):
1196 print "Non"
1197- else :
1198+ else:
1199 yesnochoice(yesno)
1200
1201-def action(message,action):
1202+
1203+def action(message, action):
1204 x.cleardisplay()
1205- for i in range(0,4):
1206+ for i in range(0, 4):
1207 x.write(message[i])
1208 x.cursordown("1")
1209 x.cursorcr()
1210 x.cr()
1211 m = m.read()
1212 # if m == "
1213-
1214-def openerp(type,msg):
1215- return server.execute(DB,uid,PASS,'scanner.hardware','scanner_call','0000',type,msg)
1216-
1217+
1218+
1219+def openerp(type, msg):
1220+ return server.execute(DB, uid, PASS, 'scanner.hardware', 'scanner_call', '0000', type, msg)
1221+
1222 # tests
1223 LOGIN = 'admin'
1224 PASS = 'admin'
1225@@ -139,57 +145,56 @@
1226 PORT = 8069
1227 DB = 'neo7'
1228
1229-global PS
1230+global PS
1231 PS = "0001"
1232
1233 indicemenu = 0
1234 pws = Powerscan.Powerscan('/dev/ttyUSB0')
1235 print 'Welcome to PowerScan Sentinel\n\n '
1236
1237-while True:
1238+while True:
1239 (hwd, msg) = pws.read()
1240 print '%s -> %s' % (hwd, msg)
1241 pws.cleardisplay(hwd)
1242 pws.write("-> %s" % msg)
1243 pws.cr()
1244- menu = ['Inventaire','Reception','Preparation','Controle','Terminer']
1245+ menu = ['Inventaire', 'Reception', 'Preparation', 'Controle', 'Terminer']
1246 #displaymenu(PS,menu,0,0)
1247 pws.cr()
1248-
1249-
1250-
1251-########################
1252-#
1253-# OLD CODE
1254+#
1255+#
1256 #
1257 #########################
1258-# code, val = openerp('menu','')
1259-
1260-# code = [('<','OK'), ('>','ANN')]
1261-# print code[0][0]
1262-# if code == 'M':
1263- # displaymenu(val,0,0)
1264-# elif code == 'Q':
1265- # checkquantity(val['label'],val['value'])
1266-# elif code == 'A':
1267- # action(val['label'],val['action'])
1268-
1269-# menu = ['Inventaire','Reception','Preparation','Controle','Terminer']
1270-# displaymenu(menu,0,0)
1271-# flashage = ['Flashez palette','','','Terminer']
1272-# flasher(flashage)
1273-# quantity = ['Nombre de carton','','',20]
1274-# checkquantity(quantity,quantity[3])
1275-# yesno = ['Confirmez','','','']
1276-# yesnochoice(yesno)
1277-
1278-# x.cr()
1279-closeserial()
1280-exit()
1281-#x.greenledon()
1282-
1283-
1284-#x.cursorcr()
1285+##
1286+## OLD CODE
1287+##
1288+##########################
1289+## code, val = openerp('menu','')
1290+#
1291+## code = [('<','OK'), ('>','ANN')]
1292+## print code[0][0]
1293+## if code == 'M':
1294+# # displaymenu(val,0,0)
1295+## elif code == 'Q':
1296+# # checkquantity(val['label'],val['value'])
1297+## elif code == 'A':
1298+# # action(val['label'],val['action'])
1299+#
1300+## menu = ['Inventaire','Reception','Preparation','Controle','Terminer']
1301+## displaymenu(menu,0,0)
1302+## flashage = ['Flashez palette','','','Terminer']
1303+## flasher(flashage)
1304+## quantity = ['Nombre de carton','','',20]
1305+## checkquantity(quantity,quantity[3])
1306+## yesno = ['Confirmez','','','']
1307+## yesnochoice(yesno)
1308+##
1309+## x.cr()
1310+##closeserial()
1311+##exit()
1312+##x.greenledon()
1313+##x.cursorcr()
1314+
1315
1316 # Signals
1317 def handler(signum, _):
1318@@ -198,10 +203,10 @@
1319 # Gestion des signaux
1320 LST_SIGNALS = ['SIGINT', 'SIGTERM']
1321 if os.name == 'posix':
1322- LST_SIGNALS.extend(['SIGUSR1','SIGQUIT'])
1323+ LST_SIGNALS.extend(['SIGUSR1', 'SIGQUIT'])
1324
1325 SIGNALS = dict(
1326- [(getattr(signal, sign), sign) for sign in LST_SIGNALS]
1327+ [(getattr(signal, sign), sign) for sign in LST_SIGNALS],
1328 )
1329
1330 for signum in SIGNALS:
1331
1332=== modified file 'wms_scanner/hardware/datalogic/PowerScan/hardware.py'
1333--- wms_scanner/hardware/datalogic/PowerScan/hardware.py 2010-10-13 16:13:53 +0000
1334+++ wms_scanner/hardware/datalogic/PowerScan/hardware.py 2011-07-29 14:55:33 +0000
1335@@ -44,7 +44,7 @@
1336 'info': logging.INFO,
1337 'warning': logging.WARNING,
1338 'error': logging.ERROR,
1339- 'critical': logging.CRITICAL
1340+ 'critical': logging.CRITICAL,
1341 }
1342
1343
1344@@ -208,14 +208,14 @@
1345 self.debug_send(res)
1346 self.serial.write(res)
1347
1348- def _analyse_result(self, scan, message):
1349+ def _analyse_result(self, scan, message):
1350 """
1351 Analyse the return message
1352 """
1353- (act, rec_oerp, c) = self.action.get(scan, ('M',['close the','scenario','before'], ''))
1354- self.log_debug(scan, '_ANALYSE: %s %s (%s)' % (act, rec_oerp, c) )
1355+ (act, rec_oerp, c) = self.action.get(scan, ('M', ['close the', 'scenario', 'before'], ''))
1356+ self.log_debug(scan, '_ANALYSE: %s %s (%s)' % (act, rec_oerp, c))
1357 key = 'B'
1358- if message in ('<','>','='):
1359+ if message in ('<', '>', '='):
1360 key = 'K'
1361
1362 if act == 'M':
1363@@ -265,12 +265,11 @@
1364 self.log_debug(scan, 'C + = | %s %s %s' % (act, rec_oerp, t))
1365 self._choice(scan, act, rec_oerp, t)
1366
1367-
1368 def _choice(self, scan, action, message, plus, error=False):
1369 """
1370 Analyse the action to call the good menu
1371 """
1372- self.log_debug(scan, '_CHOICE: %s %s (%s)' % (action, message, plus) )
1373+ self.log_debug(scan, '_CHOICE: %s %s (%s)' % (action, message, plus))
1374 if action == 'M':
1375 self._menu(scan, message, indice=plus, error=error)
1376 elif action == 'Q':
1377@@ -278,7 +277,7 @@
1378 elif action == 'C':
1379 self._confirmation(scan, message)
1380 else:
1381- self._menu(scan, ['Please contact','your','administrator'], -1, error=True)
1382+ self._menu(scan, ['Please contact', 'your', 'administrator'], -1, error=True)
1383
1384 def _menu(self, scan, menu, line=4, indice=0, current=0, error=False):
1385 """
1386@@ -298,7 +297,7 @@
1387
1388 def _quantity(self, scan, menu, qty=0):
1389 """
1390- display a quantity and
1391+ display a quantity and
1392 """
1393 psn = self.scan[scan]
1394 psn.cleardisplay()
1395@@ -346,7 +345,6 @@
1396 self._add_line(psn, 'Back OK')
1397 self.send(scan, psn.send())
1398
1399-
1400 def _yes_no(self, scan, message):
1401 """
1402 Send a message on a user screen and ask to choose yes or no
1403@@ -373,7 +371,6 @@
1404 self._add_line(psn, 'STOP Required')
1405 self.send(scan, psn.send())
1406
1407-
1408 def _str_center(self, message):
1409 """
1410 Center the message on the user screen
1411@@ -389,7 +386,7 @@
1412 :param etype: Indicate K for keyboard and S for Scan
1413 :type etype: str
1414 """
1415- self.log_debug(scan, '(%s) %s '% (action, message))
1416+ self.log_debug(scan, '(%s) %s ' % (action, message))
1417 return self.oerp_hwd.scanner_call(scan, action, message, etype)
1418
1419 def debug_send(self, data):
1420@@ -437,18 +434,18 @@
1421 default='admin',
1422 help='Enter the user password (default: admin)')
1423
1424- material = OptionGroup(parser, 'Material','arguments')
1425+ material = OptionGroup(parser, 'Material', 'arguments')
1426 material.add_option('', '--serial-port', dest='serial_port',
1427 default='/dev/ttyUSB1',
1428 help='Indicate the serial port where the material is connected (default: /dev/ttyUSB1)')
1429 material.add_option('', '--line-width', dest='line_width',
1430 default=16,
1431 help='Indicate the width of the screen (default: 16)')
1432- material.add_option('-v','--debug', dest='debug',
1433+ material.add_option('-v', '--debug', dest='debug',
1434 action='store_true',
1435 default=False,
1436 help='')
1437- material.add_option('-t','--serial-trace', dest='trace',
1438+ material.add_option('-t', '--serial-trace', dest='trace',
1439 action='store_true',
1440 default=False,
1441 help='Print the code send to the serial port')
1442@@ -458,10 +455,10 @@
1443
1444 try:
1445 cnx = Connection(
1446- server=opts.server,
1447- dbname=opts.dbname,
1448- login=opts.user,
1449- password=opts.passwd,
1450+ server=opts.server,
1451+ dbname=opts.dbname,
1452+ login=opts.user,
1453+ password=opts.passwd,
1454 port=opts.port)
1455 except Exception, e:
1456 print '%s' % str(e)
1457
1458=== modified file 'wms_scanner/hardware/datalogic/PowerScan/powerscan.py'
1459--- wms_scanner/hardware/datalogic/PowerScan/powerscan.py 2010-10-06 09:01:31 +0000
1460+++ wms_scanner/hardware/datalogic/PowerScan/powerscan.py 2011-07-29 14:55:33 +0000
1461@@ -31,6 +31,7 @@
1462 __name__ = "Powerscan"
1463 __version__ = "1.0.0"
1464
1465+
1466 class Powerscan:
1467 """
1468 Manage Powerscan device
1469@@ -65,7 +66,6 @@
1470 self._buffer = ''
1471 return res
1472
1473-
1474 #----------------------------------------------------------
1475 #- Private method -----------------------------------------
1476 #----------------------------------------------------------
1477@@ -106,11 +106,11 @@
1478 def cursordown(self, row='1'):
1479 self._command("[" + row + "B")
1480
1481- def cursorright(self,col):
1482+ def cursorright(self, col):
1483 """Right n columns"""
1484 self._command("[" + col + "C")
1485
1486- def cursorleft(self,col):
1487+ def cursorleft(self, col):
1488 """Left n columns"""
1489 self._command("[" + col + "D")
1490
1491@@ -118,7 +118,7 @@
1492 """CR"""
1493 self._command("[G")
1494
1495- def cursormoveto(self,row,col):
1496+ def cursormoveto(self, row, col):
1497 """Move to row and col"""
1498 self._command("[" + row + ";" + col + "H")
1499
1500
1501=== modified file 'wms_scanner/i18n/fr_FR.po'
1502--- wms_scanner/i18n/fr_FR.po 2010-10-12 16:53:40 +0000
1503+++ wms_scanner/i18n/fr_FR.po 2011-07-29 14:55:33 +0000
1504@@ -5,8 +5,8 @@
1505 msgstr ""
1506 "Project-Id-Version: PACKAGE VERSION\n"
1507 "Report-Msgid-Bugs-To: support@openerp.com\n"
1508-"POT-Creation-Date: 2010-10-12 16:48:07+0000\n"
1509-"PO-Revision-Date: 2010-10-12 18:51+0100\n"
1510+"POT-Creation-Date: 2011-07-26 13:42:19+0000\n"
1511+"PO-Revision-Date: 2011-07-26 15:51+0100\n"
1512 "Last-Translator: Christophe Chauvet <christophe.chauvet@syleam.fr>\n"
1513 "Language-Team: LANGUAGE <LL@li.org>\n"
1514 "MIME-Version: 1.0\n"
1515@@ -20,6 +20,16 @@
1516 msgstr "Depuis"
1517
1518 #. module: wms_scanner
1519+#: constraint:ir.actions.act_window:0
1520+msgid "Invalid model name in the action definition."
1521+msgstr "Nom de modèle invalide pour l'action définit"
1522+
1523+#. module: wms_scanner
1524+#: field:scanner.scenario,title:0
1525+msgid "Title"
1526+msgstr "Titre"
1527+
1528+#. module: wms_scanner
1529 #: field:scanner.scenario.step,step_start:0
1530 msgid "Step start"
1531 msgstr "Étape de départ"
1532@@ -36,6 +46,27 @@
1533 msgstr "Cocher ceci, si c'est la première étape du scénario"
1534
1535 #. module: wms_scanner
1536+#: view:scanner.scenario:0
1537+#: field:scanner.scenario,note:0
1538+msgid "Note"
1539+msgstr "Note"
1540+
1541+#. module: wms_scanner
1542+#: field:scanner.scenario.transition,to_id:0
1543+msgid "To"
1544+msgstr "Vers"
1545+
1546+#. module: wms_scanner
1547+#: field:scanner.hardware,step_id:0
1548+msgid "Current Step"
1549+msgstr "Étape actuelle"
1550+
1551+#. module: wms_scanner
1552+#: model:ir.ui.menu,name:wms_scanner.menu_scanner_configuration
1553+msgid "Scanner configuration"
1554+msgstr "Configuration du scanner"
1555+
1556+#. module: wms_scanner
1557 #: model:ir.module.module,description:wms_scanner.module_meta_information
1558 msgid ""
1559 "Module for manage barcode reader\n"
1560@@ -45,23 +76,15 @@
1561 "- affect scenarios on on a specific scenario\n"
1562 "\n"
1563 "Sponsored by Neolog http://www.neolog.pro/\n"
1564-" \n"
1565 msgstr ""
1566-
1567-#. module: wms_scanner
1568-#: field:scanner.hardware,step_id:0
1569-msgid "Current Step"
1570-msgstr "Étape actuelle"
1571-
1572-#. module: wms_scanner
1573-#: model:ir.ui.menu,name:wms_scanner.menu_scanner_configuration
1574-msgid "Scanner configuration"
1575-msgstr "Configuration du scanner"
1576-
1577-#. module: wms_scanner
1578-#: constraint:ir.actions.act_window:0
1579-msgid "Invalid model name in the action definition."
1580-msgstr "Nom de modèle invalide pour l'action définit"
1581+"Module de gestion des lecteurs codes barres\n"
1582+"\n"
1583+"- Affectation d'un lecteur code barre Ă  un entrepĂ´t\n"
1584+"- Composition d'un scénario\n"
1585+"- affectation de scénario a des scénarios spécifique\n"
1586+"\n"
1587+"Sponsorisé par Neolog http://www.enolog.pro/\n"
1588+" "
1589
1590 #. module: wms_scanner
1591 #: field:scanner.hardware,warehouse_id:0
1592@@ -71,7 +94,7 @@
1593 #. module: wms_scanner
1594 #: constraint:ir.model:0
1595 msgid "The Object name must start with x_ and not contain any special character !"
1596-msgstr ""
1597+msgstr "Le nom de l'objet doit commencer par un x_, et ne doit pas contenir de caractères spéciaux !"
1598
1599 #. module: wms_scanner
1600 #: help:scanner.scenario.step,step_stop:0
1601@@ -79,6 +102,11 @@
1602 msgstr "Cocher ceci si c'est la dernière étape du scénario"
1603
1604 #. module: wms_scanner
1605+#: help:scanner.scenario.transition,tracer:0
1606+msgid "Use to determine, on which transition we arrive to this step"
1607+msgstr "Utiliser pour déterminer, sur quelle transition nous sommes arrivé à cet étape"
1608+
1609+#. module: wms_scanner
1610 #: code:addons/wms_scanner/object/scanner.py:0
1611 #, python-format
1612 msgid "This terminal is not declare!"
1613@@ -90,6 +118,11 @@
1614 msgstr "Type de transition"
1615
1616 #. module: wms_scanner
1617+#: help:scanner.scenario,note:0
1618+msgid "Store different note, date and title for modification, etc..."
1619+msgstr "Stocker différente note, date et titre de la modification, etc."
1620+
1621+#. module: wms_scanner
1622 #: model:ir.module.module,shortdesc:wms_scanner.module_meta_information
1623 msgid "Wms Scanner"
1624 msgstr "Wms Scanner"
1625@@ -132,9 +165,9 @@
1626 msgstr "Fin d 'Ă©tape"
1627
1628 #. module: wms_scanner
1629-#: model:ir.model,name:wms_scanner.model_scanner_scenario_transition
1630-msgid "Transition for scenario"
1631-msgstr "Transition pour le scénario"
1632+#: field:scanner.hardware,tmp_val3:0
1633+msgid "Temp value 3"
1634+msgstr "Valeur temporaire 3"
1635
1636 #. module: wms_scanner
1637 #: field:scanner.scenario,active:0
1638@@ -142,6 +175,11 @@
1639 msgstr "Actif"
1640
1641 #. module: wms_scanner
1642+#: help:scanner.scenario,name:0
1643+msgid "Appear on barcode reader screen"
1644+msgstr "Apparaît sur l'écran du lecteur code barre"
1645+
1646+#. module: wms_scanner
1647 #: view:scanner.hardware:0
1648 msgid "Scanner status"
1649 msgstr "Statut du scanner"
1650@@ -152,9 +190,9 @@
1651 msgstr "Condition"
1652
1653 #. module: wms_scanner
1654-#: field:scanner.scenario.transition,to_id:0
1655-msgid "To"
1656-msgstr "Vers"
1657+#: model:ir.model,name:wms_scanner.model_scanner_scenario_transition
1658+msgid "Transition for scenario"
1659+msgstr "Transition pour le scénario"
1660
1661 #. module: wms_scanner
1662 #: model:ir.model,name:wms_scanner.model_scanner_scenario
1663@@ -164,7 +202,7 @@
1664 #. module: wms_scanner
1665 #: constraint:ir.ui.view:0
1666 msgid "Invalid XML for View Architecture!"
1667-msgstr ""
1668+msgstr "XML Non valide pour cette vue!"
1669
1670 #. module: wms_scanner
1671 #: field:scanner.hardware,name:0
1672@@ -230,11 +268,31 @@
1673 msgstr "Erreur"
1674
1675 #. module: wms_scanner
1676+#: field:scanner.hardware,tmp_val5:0
1677+msgid "Temp value 5"
1678+msgstr "Valeur temporaire 5"
1679+
1680+#. module: wms_scanner
1681+#: field:scanner.hardware,tmp_val4:0
1682+msgid "Temp value 4"
1683+msgstr "Valeur temporaire 4"
1684+
1685+#. module: wms_scanner
1686 #: field:scanner.scenario,model_id:0
1687 msgid "Model"
1688 msgstr "Modèle"
1689
1690 #. module: wms_scanner
1691+#: field:scanner.hardware,tmp_val1:0
1692+msgid "Temp value 1"
1693+msgstr "Valeur temporaire 1"
1694+
1695+#. module: wms_scanner
1696+#: field:scanner.scenario.transition,tracer:0
1697+msgid "Tracer"
1698+msgstr "Tracer"
1699+
1700+#. module: wms_scanner
1701 #: view:scanner.scenario:0
1702 #: view:scanner.scenario.step:0
1703 #: field:scanner.scenario.step,out_trans_ids:0
1704@@ -242,6 +300,11 @@
1705 msgstr "Transitions sortantes"
1706
1707 #. module: wms_scanner
1708+#: field:scanner.hardware,tmp_val2:0
1709+msgid "Temp value 2"
1710+msgstr "Valeur temporaire 2"
1711+
1712+#. module: wms_scanner
1713 #: field:scanner.hardware,code:0
1714 #: view:scanner.scenario:0
1715 #: view:scanner.scenario.step:0
1716@@ -271,19 +334,30 @@
1717 msgstr "SĂ©quence"
1718
1719 #. module: wms_scanner
1720+#: model:ir.actions.act_window,name:wms_scanner.act_open_scanner_scenario_transition_view
1721+#: model:ir.ui.menu,name:wms_scanner.menu_scanner_scenario_transition
1722+#: view:scanner.scenario.step:0
1723+#: view:scanner.scenario.transition:0
1724+msgid "Transitions"
1725+msgstr "Transitions"
1726+
1727+#. module: wms_scanner
1728 #: help:scanner.scenario.step,name:0
1729 msgid "Name of the step"
1730 msgstr "Nom de l'Ă©tape"
1731
1732 #. module: wms_scanner
1733+#: help:scanner.scenario,title:0
1734+msgid "Title for this scenario"
1735+msgstr "Titre de ce scénario"
1736+
1737+#. module: wms_scanner
1738 #: selection:scanner.scenario.transition,trans_type:0
1739 msgid "Keyboard"
1740 msgstr "Clavier"
1741
1742 #. module: wms_scanner
1743-#: model:ir.actions.act_window,name:wms_scanner.act_open_scanner_scenario_transition_view
1744-#: model:ir.ui.menu,name:wms_scanner.menu_scanner_scenario_transition
1745-#: view:scanner.scenario.transition:0
1746-msgid "Transitions"
1747-msgstr "Transitions"
1748+#: view:scanner.scenario:0
1749+msgid "Add note, date of modification, etc."
1750+msgstr "Ajouter une note, date de modification, etc."
1751
1752
1753=== modified file 'wms_scanner/i18n/wms_scanner.pot'
1754--- wms_scanner/i18n/wms_scanner.pot 2010-10-12 16:53:40 +0000
1755+++ wms_scanner/i18n/wms_scanner.pot 2011-07-29 14:55:33 +0000
1756@@ -6,8 +6,8 @@
1757 msgstr ""
1758 "Project-Id-Version: OpenERP Server 5.0.12\n"
1759 "Report-Msgid-Bugs-To: support@openerp.com\n"
1760-"POT-Creation-Date: 2010-10-12 16:48:07+0000\n"
1761-"PO-Revision-Date: 2010-10-12 16:48:07+0000\n"
1762+"POT-Creation-Date: 2011-07-26 13:42:19+0000\n"
1763+"PO-Revision-Date: 2011-07-26 13:42:19+0000\n"
1764 "Last-Translator: <>\n"
1765 "Language-Team: \n"
1766 "MIME-Version: 1.0\n"
1767@@ -21,6 +21,16 @@
1768 msgstr ""
1769
1770 #. module: wms_scanner
1771+#: constraint:ir.actions.act_window:0
1772+msgid "Invalid model name in the action definition."
1773+msgstr ""
1774+
1775+#. module: wms_scanner
1776+#: field:scanner.scenario,title:0
1777+msgid "Title"
1778+msgstr ""
1779+
1780+#. module: wms_scanner
1781 #: field:scanner.scenario.step,step_start:0
1782 msgid "Step start"
1783 msgstr ""
1784@@ -37,6 +47,27 @@
1785 msgstr ""
1786
1787 #. module: wms_scanner
1788+#: view:scanner.scenario:0
1789+#: field:scanner.scenario,note:0
1790+msgid "Note"
1791+msgstr ""
1792+
1793+#. module: wms_scanner
1794+#: field:scanner.scenario.transition,to_id:0
1795+msgid "To"
1796+msgstr ""
1797+
1798+#. module: wms_scanner
1799+#: field:scanner.hardware,step_id:0
1800+msgid "Current Step"
1801+msgstr ""
1802+
1803+#. module: wms_scanner
1804+#: model:ir.ui.menu,name:wms_scanner.menu_scanner_configuration
1805+msgid "Scanner configuration"
1806+msgstr ""
1807+
1808+#. module: wms_scanner
1809 #: model:ir.module.module,description:wms_scanner.module_meta_information
1810 msgid "Module for manage barcode reader\n"
1811 "\n"
1812@@ -45,26 +76,10 @@
1813 "- affect scenarios on on a specific scenario\n"
1814 "\n"
1815 "Sponsored by Neolog http://www.neolog.pro/\n"
1816-" \n"
1817 ""
1818 msgstr ""
1819
1820 #. module: wms_scanner
1821-#: field:scanner.hardware,step_id:0
1822-msgid "Current Step"
1823-msgstr ""
1824-
1825-#. module: wms_scanner
1826-#: model:ir.ui.menu,name:wms_scanner.menu_scanner_configuration
1827-msgid "Scanner configuration"
1828-msgstr ""
1829-
1830-#. module: wms_scanner
1831-#: constraint:ir.actions.act_window:0
1832-msgid "Invalid model name in the action definition."
1833-msgstr ""
1834-
1835-#. module: wms_scanner
1836 #: field:scanner.hardware,warehouse_id:0
1837 msgid "Warehouse"
1838 msgstr ""
1839@@ -80,6 +95,11 @@
1840 msgstr ""
1841
1842 #. module: wms_scanner
1843+#: help:scanner.scenario.transition,tracer:0
1844+msgid "Use to determine, on which transition we arrive to this step"
1845+msgstr ""
1846+
1847+#. module: wms_scanner
1848 #: code:addons/wms_scanner/object/scanner.py:0
1849 #, python-format
1850 msgid "This terminal is not declare!"
1851@@ -91,6 +111,11 @@
1852 msgstr ""
1853
1854 #. module: wms_scanner
1855+#: help:scanner.scenario,note:0
1856+msgid "Store different note, date and title for modification, etc..."
1857+msgstr ""
1858+
1859+#. module: wms_scanner
1860 #: model:ir.module.module,shortdesc:wms_scanner.module_meta_information
1861 msgid "Wms Scanner"
1862 msgstr ""
1863@@ -133,8 +158,8 @@
1864 msgstr ""
1865
1866 #. module: wms_scanner
1867-#: model:ir.model,name:wms_scanner.model_scanner_scenario_transition
1868-msgid "Transition for scenario"
1869+#: field:scanner.hardware,tmp_val3:0
1870+msgid "Temp value 3"
1871 msgstr ""
1872
1873 #. module: wms_scanner
1874@@ -143,6 +168,11 @@
1875 msgstr ""
1876
1877 #. module: wms_scanner
1878+#: help:scanner.scenario,name:0
1879+msgid "Appear on barcode reader screen"
1880+msgstr ""
1881+
1882+#. module: wms_scanner
1883 #: view:scanner.hardware:0
1884 msgid "Scanner status"
1885 msgstr ""
1886@@ -153,8 +183,8 @@
1887 msgstr ""
1888
1889 #. module: wms_scanner
1890-#: field:scanner.scenario.transition,to_id:0
1891-msgid "To"
1892+#: model:ir.model,name:wms_scanner.model_scanner_scenario_transition
1893+msgid "Transition for scenario"
1894 msgstr ""
1895
1896 #. module: wms_scanner
1897@@ -231,11 +261,31 @@
1898 msgstr ""
1899
1900 #. module: wms_scanner
1901+#: field:scanner.hardware,tmp_val5:0
1902+msgid "Temp value 5"
1903+msgstr ""
1904+
1905+#. module: wms_scanner
1906+#: field:scanner.hardware,tmp_val4:0
1907+msgid "Temp value 4"
1908+msgstr ""
1909+
1910+#. module: wms_scanner
1911 #: field:scanner.scenario,model_id:0
1912 msgid "Model"
1913 msgstr ""
1914
1915 #. module: wms_scanner
1916+#: field:scanner.hardware,tmp_val1:0
1917+msgid "Temp value 1"
1918+msgstr ""
1919+
1920+#. module: wms_scanner
1921+#: field:scanner.scenario.transition,tracer:0
1922+msgid "Tracer"
1923+msgstr ""
1924+
1925+#. module: wms_scanner
1926 #: view:scanner.scenario:0
1927 #: view:scanner.scenario.step:0
1928 #: field:scanner.scenario.step,out_trans_ids:0
1929@@ -243,6 +293,11 @@
1930 msgstr ""
1931
1932 #. module: wms_scanner
1933+#: field:scanner.hardware,tmp_val2:0
1934+msgid "Temp value 2"
1935+msgstr ""
1936+
1937+#. module: wms_scanner
1938 #: field:scanner.hardware,code:0
1939 #: view:scanner.scenario:0
1940 #: view:scanner.scenario.step:0
1941@@ -272,19 +327,30 @@
1942 msgstr ""
1943
1944 #. module: wms_scanner
1945+#: model:ir.actions.act_window,name:wms_scanner.act_open_scanner_scenario_transition_view
1946+#: model:ir.ui.menu,name:wms_scanner.menu_scanner_scenario_transition
1947+#: view:scanner.scenario.step:0
1948+#: view:scanner.scenario.transition:0
1949+msgid "Transitions"
1950+msgstr ""
1951+
1952+#. module: wms_scanner
1953 #: help:scanner.scenario.step,name:0
1954 msgid "Name of the step"
1955 msgstr ""
1956
1957 #. module: wms_scanner
1958+#: help:scanner.scenario,title:0
1959+msgid "Title for this scenario"
1960+msgstr ""
1961+
1962+#. module: wms_scanner
1963 #: selection:scanner.scenario.transition,trans_type:0
1964 msgid "Keyboard"
1965 msgstr ""
1966
1967 #. module: wms_scanner
1968-#: model:ir.actions.act_window,name:wms_scanner.act_open_scanner_scenario_transition_view
1969-#: model:ir.ui.menu,name:wms_scanner.menu_scanner_scenario_transition
1970-#: view:scanner.scenario.transition:0
1971-msgid "Transitions"
1972+#: view:scanner.scenario:0
1973+msgid "Add note, date of modification, etc."
1974 msgstr ""
1975
1976
1977=== modified file 'wms_scanner/object/scanner.py'
1978--- wms_scanner/object/scanner.py 2010-10-13 14:18:34 +0000
1979+++ wms_scanner/object/scanner.py 2011-07-29 14:55:33 +0000
1980@@ -2,7 +2,7 @@
1981 ##############################################################################
1982 #
1983 # wms_scanner module for OpenERP, Module for manage barcode reader
1984-# Copyright (C) 2010 SYLEAM (<http://syleam.fr/>)
1985+# Copyright (C) 2010-2011 SYLEAM (<http://syleam.fr/>)
1986 # Christophe Chauvet <christophe.chauvet@syleam.fr>
1987 #
1988 # This file is a part of wms_scanner
1989@@ -25,6 +25,7 @@
1990 from osv import osv
1991 from osv import fields
1992 from tools.translate import _
1993+import uuid
1994 import netsvc
1995
1996 logger = netsvc.Logger()
1997@@ -35,13 +36,32 @@
1998 _description = 'Scenario for scanner'
1999
2000 _columns = {
2001- 'name': fields.char('Name', size=64, ),
2002+ 'name': fields.char('Name', size=64, help='Appear on barcode reader screen'),
2003 'sequence': fields.integer('Sequence'),
2004 'active': fields.boolean('Active', help='if check, this object is always available'),
2005 'model_id': fields.many2one('ir.model', 'Model', required=True),
2006 'step_ids': fields.one2many('scanner.scenario.step', 'scenario_id', 'Scenario', ),
2007 'warehouse_ids': fields.many2many('stock.warehouse', 'scanner_scenario_warehouse_rel', 'scenario_id', 'warehouse_id', 'Warehouses'),
2008- }
2009+ 'title': fields.char('Title', size=256, help='Title for this scenario'),
2010+ 'note': fields.text('Note', help='Store different note, date and title for modification, etc...'),
2011+ 'resid': fields.char('Reference id', size=64, readonly=True, help="Use by import/export Scenario"),
2012+ }
2013+
2014+ _defaults = {
2015+ 'title': lambda *a: False,
2016+ }
2017+
2018+ _sql_constraints = [
2019+ ('resid_uniq', 'unique (resid)', 'The resid of the Step must be unique !'),
2020+ ]
2021+
2022+ def create(self, cr, uid, values, context=None):
2023+ """
2024+ if the resid not in value, we will create with uuid1
2025+ """
2026+ if not values.get('resid'):
2027+ values['resid'] = uuid.uuid1()
2028+ return super(ScannerScenario, self).create(cr, uid, values, context=context)
2029
2030 ScannerScenario()
2031
2032@@ -53,11 +73,12 @@
2033 _columns = {
2034 'name': fields.char('Name', size=64, help='Name of the step'),
2035 'scenario_id': fields.many2one('scanner.scenario', 'Scenario', required=True),
2036- 'step_start': fields.boolean('Step start',help='Check this if this is the first step of scenario'),
2037- 'step_stop': fields.boolean('Step stop',help='check this if this is the last step of scenario'),
2038+ 'step_start': fields.boolean('Step start', help='Check this if this is the first step of scenario'),
2039+ 'step_stop': fields.boolean('Step stop', help='check this if this is the last step of scenario'),
2040 'out_trans_ids': fields.one2many('scanner.scenario.transition', 'from_id', 'Outgoing transitions'),
2041 'in_trans_ids': fields.one2many('scanner.scenario.transition', 'to_id', 'Incoming transitions'),
2042 'python_code': fields.text('Python code', ),
2043+ 'resid': fields.char('Reference id', size=64, readonly=True, help="Use by import/export Scenario/Step"),
2044 }
2045
2046 _defaults = {
2047@@ -66,6 +87,18 @@
2048 'python_code': lambda *a: '# Use message to retrieve the data transmit by the scanner\n# res containt the result',
2049 }
2050
2051+ _sql_constraints = [
2052+ ('resid_uniq', 'unique (resid)', 'The resid of the Step must be unique !'),
2053+ ]
2054+
2055+ def create(self, cr, uid, values, context=None):
2056+ """
2057+ if the resid not in value, we will create with uuid1
2058+ """
2059+ if not values.get('resid'):
2060+ values['resid'] = uuid.uuid1()
2061+ return super(ScannerScenarioStep, self).create(cr, uid, values, context=context)
2062+
2063 ScannerScenarioStep()
2064
2065
2066@@ -78,8 +111,9 @@
2067 'from_id': fields.many2one('scanner.scenario.step', 'From', required=True),
2068 'to_id': fields.many2one('scanner.scenario.step', 'To', required=True),
2069 'condition': fields.char('Condition', size=256, required=True),
2070- 'trans_type': fields.selection([('scan','Scan'),('key','Keyboard')], 'Transition Type', ),
2071+ 'trans_type': fields.selection([('scan', 'Scan'), ('key', 'Keyboard')], 'Transition Type'),
2072 'tracer': fields.char('Tracer', size=12, help='Use to determine, on which transition we arrive to this step'),
2073+ 'resid': fields.char('Reference id', size=64, readonly=True, help="Use by import/export Scenario/Transition"),
2074 }
2075
2076 _defaults = {
2077@@ -88,6 +122,18 @@
2078 'tracer': lambda *a: False,
2079 }
2080
2081+ _sql_constraints = [
2082+ ('resid_uniq', 'unique (resid)', 'The resid of the Transition must be unique !'),
2083+ ]
2084+
2085+ def create(self, cr, uid, values, context=None):
2086+ """
2087+ if the resid not in value, we will create with uuid1
2088+ """
2089+ if not values.get('resid'):
2090+ values['resid'] = uuid.uuid1()
2091+ return super(ScannerScenarioTransition, self).create(cr, uid, values, context=context)
2092+
2093 ScannerScenarioTransition()
2094
2095
2096@@ -120,9 +166,9 @@
2097 Check the step for this scanner
2098 """
2099 context = self.pool.get('res.users').context_get(cr, uid)
2100- term_id = self.search(cr, uid, [('code','=',numterm)])
2101+ term_id = self.search(cr, uid, [('code', '=', numterm)])
2102 if not term_id:
2103- logger.notifyChannel('wms_scanner', netsvc.LOG_WARNING, 'Terminal %s not exists!' % numterm)
2104+ logger.notifyChannel('wms_scanner', netsvc.LOG_WARNING, 'Terminal %s not exists!' % numterm)
2105 raise osv.except_osv(_('Error'), _('This terminal not exists!'))
2106 term = self.browse(cr, uid, term_id[0])
2107 if term.scenario_id:
2108@@ -141,14 +187,14 @@
2109 context = self.pool.get('res.users').context_get(cr, uid)
2110 logger.notifyChannel('wms_scanner', netsvc.LOG_DEBUG, 'SCANNER_CALL')
2111 if numterm is None:
2112- logger.notifyChannel('wms_scanner', netsvc.LOG_WARNING, 'scanner_call required numterm argument')
2113+ logger.notifyChannel('wms_scanner', netsvc.LOG_WARNING, 'scanner_call required numterm argument')
2114 raise osv.except_osv(_('Error'), _('Terminal number is required'))
2115
2116 if action is None:
2117- logger.notifyChannel('wms_scanner', netsvc.LOG_WARNING, 'scanner_call required action argument')
2118+ logger.notifyChannel('wms_scanner', netsvc.LOG_WARNING, 'scanner_call required action argument')
2119 raise osv.except_osv(_('Error'), _('Action is required'))
2120
2121- term_id = self.search(cr, uid, [('code','=',numterm)])
2122+ term_id = self.search(cr, uid, [('code', '=', numterm)])
2123 if not len(term_id):
2124 raise osv.except_osv(_('Error'), _('This terminal is not declare!'))
2125
2126@@ -169,11 +215,10 @@
2127 # check id terminal is not affected to a scenario and step
2128 # If not send the menu
2129 if not term.scenario_id:
2130- logger.notifyChannel('wms_scanner', netsvc.LOG_INFO, '[%s] Pas de scenario' % numterm)
2131+ logger.notifyChannel('wms_scanner', netsvc.LOG_INFO, '[%s] Pas de scenario' % numterm)
2132 return self._scenario_list(cr, uid, term.warehouse_id.id)
2133
2134- return ('M', ['Unknown','action'], '')
2135-
2136+ return ('M', ['Unknown', 'action'], '')
2137
2138 def scanner_end(self, cr, uid, numterm=None, context=None):
2139 """
2140@@ -182,15 +227,15 @@
2141 if context is None:
2142 context = self.pool.get('res.users').context_get(cr, uid)
2143
2144- term_id = self.search(cr, uid, [('code','=',numterm)])
2145+ term_id = self.search(cr, uid, [('code', '=', numterm)])
2146 if not term_id:
2147- logger.notifyChannel('wms_scanner', netsvc.LOG_WARNING, 'Terminal %s not exists!' % numterm)
2148+ logger.notifyChannel('wms_scanner', netsvc.LOG_WARNING, 'Terminal %s not exists!' % numterm)
2149 raise osv.except_osv(_('Error'), _('This terminal not exists!'))
2150
2151- logger.notifyChannel('wms_scanner', netsvc.LOG_INFO, 'End scenario request for %s terminal' % numterm)
2152+ logger.notifyChannel('wms_scanner', netsvc.LOG_INFO, 'End scenario request for %s terminal' % numterm)
2153 self.write(cr, uid, term_id, {'scenario_id': False, 'step_id': False, 'ref_doc': False})
2154
2155- return ('F', ['This scenario','is finished'], '')
2156+ return ('F', ['This scenario', 'is finished'], '')
2157
2158 def _memorize(self, cr, uid, term_id, scenario_id, step_id, object=None, context=None):
2159 """
2160@@ -226,23 +271,44 @@
2161 # No scenario, ok we search it
2162 tracer = False
2163 if not scenario_id:
2164- scenario_ids = scenario.search(cr, uid, [('name','=', message)])
2165+ # check with the warehouse because we can t use a scenario of other warehouse
2166+ term_warehouse_id = term.read(cr, uid, term_id, ['warehouse_id'], context=context).get('warehouse_id', False)
2167+ if term_warehouse_id:
2168+ # take only the id
2169+ term_warehouse_id = term_warehouse_id[0]
2170+ scenario_ids = scenario.search(cr, uid, [('name', '=', message), ('warehouse_ids', 'in', [term_warehouse_id])])
2171 if scenario_ids:
2172 scenario_id = scenario_ids[0]
2173- step_ids = step.search(cr, uid, [('scenario_id','=',scenario_id),('step_start','=',True)])
2174+ step_ids = step.search(cr, uid, [('scenario_id', '=', scenario_id), ('step_start', '=', True)])
2175 if not step_ids:
2176- return ('M', ['please contact','your','administrator','A001'], '')
2177+ return ('M', ['please contact', 'your', 'administrator', 'A001'], '')
2178 step_id = step_ids[0]
2179 else:
2180 # we search the next step for the current scenario
2181 old_step = step_id
2182 trans = self.pool.get('scanner.scenario.transition')
2183 trs_ids = trans.search(cr, uid, [('from_id', '=', step_id)])
2184- if not trs_ids:
2185- return ('M', ['Please contact','your','administrator'], '')
2186- tr_vals = trans.read(cr, uid, trs_ids[0], ['to_id','tracer'])
2187- step_id = tr_vals['to_id'][0]
2188- tracer = tr_vals['tracer']
2189+ for transition in trans.browse(cr, uid, trs_ids, context=context):
2190+ step_id = False
2191+ tracer = ''
2192+ cxt = {
2193+ 'context': context,
2194+ 'model': self.pool.get(transition.from_id.scenario_id.model_id.model),
2195+ 'cr': cr,
2196+ 'pool': self.pool,
2197+ 'uid': uid,
2198+ 'message': message,
2199+ }
2200+ expr = eval(str(transition.condition), cxt)
2201+
2202+ if not expr:
2203+ continue
2204+ step_id = transition.to_id.id
2205+ tracer = transition.tracer
2206+ break
2207+
2208+ if not step_id:
2209+ return ('M', ['Please contact', 'your', 'administrator'], '')
2210
2211 self._memorize(cr, uid, term_id, scenario_id, step_id, cur_obj, context)
2212
2213@@ -250,26 +316,29 @@
2214 stp = step.browse(cr, uid, step_id, context=context)
2215 logger.notifyChannel('wms_scanner', netsvc.LOG_INFO, 'Model: %s' % stp.scenario_id.model_id.model)
2216 ld = {
2217- 'cr': cr,
2218- 'uid': uid,
2219+ 'cr': cr,
2220+ 'uid': uid,
2221 'pool': self.pool,
2222- 'model': self.pool.get(stp.scenario_id.model_id.model),
2223+ 'model': self.pool.get(stp.scenario_id.model_id.model),
2224 'term': term,
2225 'context': context,
2226 'm': message,
2227 't': term.browse(cr, uid, term_id, context=context),
2228 'tracer': tracer,
2229 'wkf': netsvc.LocalService('workflow'),
2230+ 'scenario': self.pool.get('scanner.scenario').browse(cr, uid, scenario_id, context=context),
2231 }
2232 try:
2233 exec stp.python_code in ld
2234+ if stp.step_stop:
2235+ self._memorize(cr, uid, term_id, False, False, cur_obj, context)
2236 except osv.except_osv, e:
2237- logger.notifyChannel('wms_scanner', netsvc.LOG_WARNING, 'OSV Exception: %s' % str(e))
2238- return ('M', ['Please contact','your','administrator'], '')
2239+ logger.notifyChannel('wms_scanner', netsvc.LOG_WARNING, 'OSV Exception: %s' % str(e))
2240+ return ('M', ['Please contact', 'your', 'administrator'], '')
2241 except Exception, e:
2242- logger.notifyChannel('wms_scanner', netsvc.LOG_WARNING, 'OSV Exception: %s' % str(e))
2243- return ('M', ['Please contact','your','administrator'], '')
2244- return (ld.get('act', 'M'), ld.get('res',['nothing']), ld.get('val', '0'))
2245+ logger.notifyChannel('wms_scanner', netsvc.LOG_WARNING, 'OSV Exception: %s' % str(e))
2246+ return ('M', ['Please contact', 'your', 'administrator'], '')
2247+ return (ld.get('act', 'M'), ld.get('res', ['nothing']), ld.get('val', '0'))
2248
2249 def _scenario_list(self, cr, uid, warehouse_id):
2250 """
2251@@ -278,7 +347,7 @@
2252 # List scenario for this material
2253 context = self.pool.get('res.users').context_get(cr, uid)
2254 scenario = self.pool.get('scanner.scenario')
2255- scenario_ids = scenario.search(cr, uid, [('warehouse_ids','in', [warehouse_id])])
2256+ scenario_ids = scenario.search(cr, uid, [('warehouse_ids', 'in', [warehouse_id])])
2257 scene = scenario.read(cr, uid, scenario_ids, ['name'], context=context)
2258
2259 ret = []
2260@@ -288,6 +357,4 @@
2261
2262 ScannerHardware()
2263
2264-
2265-
2266 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
2267
2268=== modified file 'wms_scanner/report/__init__.py'
2269--- wms_scanner/report/__init__.py 2010-06-23 08:27:10 +0000
2270+++ wms_scanner/report/__init__.py 2011-07-29 14:55:33 +0000
2271@@ -2,7 +2,7 @@
2272 ##############################################################################
2273 #
2274 # wms_scanner module for OpenERP, Module for manage barcode reader
2275-# Copyright (C) 2010 SYLEAM (<http://syleam.fr/>)
2276+# Copyright (C) 2010 SYLEAM (<http://syleam.fr/>)
2277 # Christophe Chauvet <christophe.chauvet@syleam.fr>
2278 #
2279 # This file is a part of wms_scanner
2280@@ -22,6 +22,4 @@
2281 #
2282 ##############################################################################
2283
2284-
2285-
2286-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
2287\ No newline at end of file
2288+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
2289
2290=== added directory 'wms_scanner/scripts'
2291=== added file 'wms_scanner/scripts/export_scenario.py'
2292--- wms_scanner/scripts/export_scenario.py 1970-01-01 00:00:00 +0000
2293+++ wms_scanner/scripts/export_scenario.py 2011-07-29 14:55:33 +0000
2294@@ -0,0 +1,168 @@
2295+# -*- coding: utf-8 -*-
2296+##############################################################################
2297+#
2298+# wms_scanner module for OpenERP, Module for manage barcode reader
2299+# Copyright (C) 2011 SYLEAM (<http://www.syleam.fr/>)
2300+# Christophe CHAUVET <christophe.chauvet@syleam.fr>
2301+# Jean-SĂ©bastien SUZANNE <jean-sebastien.suzanne@syleam.fr>
2302+#
2303+# This file is a part of wms_scanner
2304+#
2305+# wms_scanner is free software: you can redistribute it and/or modify
2306+# it under the terms of the GNU General Public License as published by
2307+# the Free Software Foundation, either version 3 of the License, or
2308+# (at your option) any later version.
2309+#
2310+# wms_scanner is distributed in the hope that it will be useful,
2311+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2312+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2313+# GNU General Public License for more details.
2314+#
2315+# You should have received a copy of the GNU General Public License
2316+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2317+#
2318+##############################################################################
2319+
2320+from oobjlib.connection import Connection
2321+from oobjlib.component import Object
2322+from oobjlib.common import GetParser
2323+from optparse import OptionGroup
2324+from lxml.etree import Element, SubElement
2325+from lxml.etree import tostring
2326+import uuid
2327+
2328+import logging
2329+import sys
2330+
2331+parser = GetParser('Export scenario', '0.1')
2332+group = OptionGroup(parser, "Object arguments",
2333+ "Application Options")
2334+group.add_option('-v', '--verbose', dest='verbose',
2335+ action='store_true',
2336+ default=False,
2337+ help='Add verbose mode')
2338+group.add_option('', '--header', dest='header',
2339+ action='store_true',
2340+ default=False,
2341+ help='Add XML and OpenObkect Header')
2342+group.add_option('', '--indent', dest='indent',
2343+ action='store_true',
2344+ default=False,
2345+ help='Indent the XML output')
2346+group.add_option('', '--id', dest='scenario_id',
2347+ default=False,
2348+ help='id of the scenario to extract')
2349+parser.add_option_group(group)
2350+opts, args = parser.parse_args()
2351+
2352+logger = logging.getLogger("check_parent_store")
2353+ch = logging.StreamHandler()
2354+if opts.verbose:
2355+ logger.setLevel(logging.DEBUG)
2356+ ch.setLevel(logging.DEBUG)
2357+else:
2358+ logger.setLevel(logging.INFO)
2359+ ch.setLevel(logging.INFO)
2360+
2361+formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
2362+ch.setFormatter(formatter)
2363+logger.addHandler(ch)
2364+
2365+try:
2366+ logger.info('Open connection to "%s:%s" on "%s" with user "%s" ' % (opts.server, opts.port, opts.dbname, opts.user))
2367+ cnx = Connection(
2368+ server=opts.server,
2369+ dbname=opts.dbname,
2370+ login=opts.user,
2371+ password=opts.passwd,
2372+ port=opts.port)
2373+except Exception, e:
2374+ logger.error('Fail to connect to the server')
2375+ logger.error('%s' % str(e))
2376+ sys.exit(1)
2377+
2378+
2379+resid = {}
2380+
2381+# extract scenario
2382+scenario_obj = Object(cnx, 'scanner.scenario')
2383+model_obj = Object(cnx, 'ir.model')
2384+warehouse_obj = Object(cnx, 'stock.warehouse')
2385+scen_read = scenario_obj.read(int(opts.scenario_id), [], {'active_test': False})
2386+del scen_read['step_ids']
2387+del scen_read['id']
2388+# create node and attributs
2389+root = Element('scenario')
2390+for field in scen_read:
2391+ node = SubElement(root, field)
2392+ if field == 'model_id':
2393+ node.text = model_obj.read(scen_read.get('model_id', [0])[0], ['model']).get('model')
2394+ elif field in ['name', 'note', 'title']:
2395+ if scen_read[field]:
2396+ node.text = unicode(scen_read[field])
2397+ elif field == 'resid':
2398+ if scen_read[field]:
2399+ node.text = unicode(scen_read[field])
2400+ resid['scenario'] = unicode(scen_read[field])
2401+ else:
2402+ resid['scenario'] = unicode(uuid.uuid1())
2403+ node.text = resid['scenario']
2404+ scenario_obj.write([int(opts.scenario_id)], {'resid': resid['scenario']})
2405+ elif field == 'warehouse_ids':
2406+ root.remove(node)
2407+ for warehouse in warehouse_obj.read(scen_read[field], ['name']):
2408+ node = SubElement(root, 'warehouse_ids')
2409+ node.text = unicode(warehouse.get('name'))
2410+ else:
2411+ node.text = unicode(scen_read[field])
2412+# add step
2413+step_obj = Object(cnx, 'scanner.scenario.step')
2414+step_ids = step_obj.search([('scenario_id', '=', int(opts.scenario_id))])
2415+for step in step_obj.read(step_ids, []):
2416+ # delete unuse key
2417+ del step['in_trans_ids']
2418+ del step['out_trans_ids']
2419+ step_id = step['id']
2420+ del step['id']
2421+ del step['scenario_id']
2422+ # get res_id
2423+ if not step['resid']:
2424+ step['resid'] = unicode(uuid.uuid1())
2425+ step_obj.write([step_id], {'resid': step['resid']})
2426+ resid[step_id] = unicode(step['resid'])
2427+ # save code
2428+ src_file = open('%s.py' % step['resid'], 'w')
2429+ src_file.write(step['python_code'].encode('utf-8'))
2430+ src_file.close()
2431+ del step['python_code']
2432+ # use unicode
2433+ for key, item in step.items():
2434+ step[key] = unicode(item)
2435+ node = SubElement(root, 'Step', attrib=step)
2436+# add transition
2437+transition_obj = Object(cnx, 'scanner.scenario.transition')
2438+transition_ids = transition_obj.search([('from_id.scenario_id', '=', int(opts.scenario_id))])
2439+for transition in transition_obj.read(transition_ids, []):
2440+ transition_id = transition['id']
2441+ del transition['id']
2442+ # get res id
2443+ if not transition['resid']:
2444+ transition['resid'] = unicode(uuid.uuid1())
2445+ transition_obj.write([transition_id], {'resid': transition['resid']})
2446+ # not write False in attribute tracer
2447+ if not transition['tracer']:
2448+ transition['tracer'] = ''
2449+ # get res id for step
2450+ transition['to_id'] = resid[transition['to_id'][0]]
2451+ transition['from_id'] = resid[transition['from_id'][0]]
2452+ # use unicode
2453+ for key, item in transition.items():
2454+ transition[key] = unicode(item)
2455+ node = SubElement(root, 'Transition', attrib=transition)
2456+
2457+xml_file = open('scenario.xml', 'w')
2458+scenario_xml = tostring(root, encoding='UTF-8', xml_declaration=opts.header, pretty_print=opts.indent)
2459+xml_file.write(scenario_xml)
2460+xml_file.close()
2461+
2462+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
2463
2464=== added file 'wms_scanner/scripts/import_scenario.py'
2465--- wms_scanner/scripts/import_scenario.py 1970-01-01 00:00:00 +0000
2466+++ wms_scanner/scripts/import_scenario.py 2011-07-29 14:55:33 +0000
2467@@ -0,0 +1,154 @@
2468+# -*- coding: utf-8 -*-
2469+##############################################################################
2470+#
2471+# wms_scanner module for OpenERP, Module for manage barcode reader
2472+# Copyright (C) 2011 SYLEAM (<http://www.syleam.fr/>)
2473+# Christophe CHAUVET <christophe.chauvet@syleam.fr>
2474+# Jean-SĂ©bastien SUZANNE <jean-sebastien.suzanne@syleam.fr>
2475+#
2476+# This file is a part of wms_scanner
2477+#
2478+# wms_scanner is free software: you can redistribute it and/or modify
2479+# it under the terms of the GNU General Public License as published by
2480+# the Free Software Foundation, either version 3 of the License, or
2481+# (at your option) any later version.
2482+#
2483+# wms_scanner is distributed in the hope that it will be useful,
2484+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2485+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2486+# GNU General Public License for more details.
2487+#
2488+# You should have received a copy of the GNU General Public License
2489+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2490+#
2491+##############################################################################
2492+
2493+from oobjlib.connection import Connection
2494+from oobjlib.component import Object
2495+from oobjlib.common import GetParser
2496+from optparse import OptionGroup
2497+from lxml.etree import parse
2498+from StringIO import StringIO
2499+
2500+import logging
2501+import sys
2502+
2503+parser = GetParser('Export scenario', '0.1')
2504+group = OptionGroup(parser, "Object arguments",
2505+ "Application Options")
2506+group.add_option('-v', '--verbose', dest='verbose',
2507+ action='store_true',
2508+ default=False,
2509+ help='Add verbose mode')
2510+parser.add_option_group(group)
2511+opts, args = parser.parse_args()
2512+
2513+logger = logging.getLogger("check_parent_store")
2514+ch = logging.StreamHandler()
2515+if opts.verbose:
2516+ logger.setLevel(logging.DEBUG)
2517+ ch.setLevel(logging.DEBUG)
2518+else:
2519+ logger.setLevel(logging.INFO)
2520+ ch.setLevel(logging.INFO)
2521+
2522+formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
2523+ch.setFormatter(formatter)
2524+logger.addHandler(ch)
2525+
2526+try:
2527+ logger.info('Open connection to "%s:%s" on "%s" with user "%s" ' % (opts.server, opts.port, opts.dbname, opts.user))
2528+ cnx = Connection(
2529+ server=opts.server,
2530+ dbname=opts.dbname,
2531+ login=opts.user,
2532+ password=opts.passwd,
2533+ port=opts.port)
2534+except Exception, e:
2535+ logger.error('Fail to connect to the server')
2536+ logger.error('%s' % str(e))
2537+ sys.exit(1)
2538+
2539+
2540+resid = {}
2541+
2542+# extract scenario
2543+scenario_obj = Object(cnx, 'scanner.scenario')
2544+model_obj = Object(cnx, 'ir.model')
2545+warehouse_obj = Object(cnx, 'stock.warehouse')
2546+step_obj = Object(cnx, 'scanner.scenario.step')
2547+trans_obj = Object(cnx, 'scanner.scenario.transition')
2548+xml_file = open('scenario.xml', 'r')
2549+scenario_xml = xml_file.read()
2550+xml_file.close()
2551+xml_doc = StringIO(scenario_xml)
2552+root = parse(xml_doc).getroot()
2553+
2554+step = []
2555+transition = []
2556+scen_vals = {}
2557+# parse of the scenario
2558+for node in root.getchildren():
2559+ #the node of the Step and Transition are put in other list
2560+ if node.tag == 'Step':
2561+ step.append(node)
2562+ elif node.tag == 'Transition':
2563+ transition.append(node)
2564+ elif node.tag == 'warehouse_ids':
2565+ if not 'warehouse_ids' in scen_vals:
2566+ scen_vals['warehouse_ids'] = []
2567+ warehouse_ids = warehouse_obj.search([('name', '=', node.text)], 0, None, None, {'active_test': False})
2568+ if warehouse_ids:
2569+ scen_vals['warehouse_ids'].append((4, warehouse_ids[0]))
2570+ else:
2571+ scen_vals[node.tag] = node.text or False
2572+scen_vals['model_id'] = model_obj.search([('model', '=', scen_vals['model_id'])], 0, None, None, {'active_test': False}) or False
2573+if scen_vals['model_id']:
2574+ scen_vals['model_id'] = scen_vals['model_id'][0]
2575+# create or update
2576+scenario_ids = scenario_obj.search([('resid', '=', scen_vals['resid'])], 0, None, None, {'active_test': False})
2577+if scenario_ids:
2578+ del scen_vals['resid']
2579+ scenario_obj.write(scenario_ids, scen_vals)
2580+ scenario_id = scenario_ids[0]
2581+else:
2582+ scenario_id = scenario_obj.create(scen_vals)
2583+#parse step
2584+resid = {}
2585+for node in step:
2586+ step_vals = {}
2587+ for key, item in node.items():
2588+ if item == 'False':
2589+ item = False
2590+ step_vals[key] = item
2591+ # get scenario id
2592+ step_vals['scenario_id'] = scenario_id
2593+ # get python src
2594+ python_code = open('%s.py' % step_vals['resid'], 'r')
2595+ step_vals['python_code'] = python_code.read()
2596+ python_code.close()
2597+ # create or update
2598+ step_ids = step_obj.search([('resid', '=', step_vals['resid'])], 0, None, None, {'active_test': False})
2599+ if step_ids:
2600+ resid[step_vals['resid']] = step_ids[0]
2601+ del step_vals['resid']
2602+ step_obj.write(step_ids, step_vals)
2603+ else:
2604+ resid[step_vals['resid']] = step_obj.create(step_vals)
2605+#parse transition
2606+for node in transition:
2607+ trans_vals = {}
2608+ for key, item in node.items():
2609+ if key in ['to_id', 'from_id']:
2610+ item = resid[item]
2611+ trans_vals[key] = item
2612+ # create or update
2613+ trans_ids = trans_obj.search([('resid', '=', trans_vals['resid'])], 0, None, None, {'active_test': False})
2614+ if trans_ids:
2615+ del trans_vals['resid']
2616+ trans_obj.write(trans_ids, trans_vals)
2617+ else:
2618+ trans_obj.create(trans_vals)
2619+
2620+
2621+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
2622
2623=== modified file 'wms_scanner/view/scanner.xml'
2624--- wms_scanner/view/scanner.xml 2010-10-13 12:37:01 +0000
2625+++ wms_scanner/view/scanner.xml 2011-07-29 14:55:33 +0000
2626@@ -105,6 +105,7 @@
2627 <field name="sequence"/>
2628 <field name="name"/>
2629 <field name="model_id"/>
2630+ <field name="title"/>
2631 </tree>
2632 </field>
2633 </record>
2634@@ -120,6 +121,7 @@
2635 <field name="active" select="2"/>
2636 <field name="sequence"/>
2637 <field name="model_id"/>
2638+ <field name="title" colspan="4"/>
2639 <notebook colspan="4">
2640 <page string="Steps">
2641 <field name="step_ids" nolabel="1" mode="tree,form">
2642@@ -146,13 +148,21 @@
2643 <field name="python_code" colspan="4" nolabel="1"/>
2644 </page>
2645 </notebook>
2646+ <field name="resid"/>
2647+ <newline/>
2648 </form>
2649 </field>
2650 </page>
2651 <page string="Warehouses">
2652 <field name="warehouse_ids" nolabel="1" colspan="4"/>
2653 </page>
2654+ <page string="Note">
2655+ <separator string="Add note, date of modification, etc." colspan="4"/>
2656+ <field name="note" nolabel="1" colspan="4"/>
2657+ </page>
2658 </notebook>
2659+ <field name="resid"/>
2660+ <newline/>
2661 </form>
2662 </field>
2663 </record>
2664@@ -242,12 +252,16 @@
2665 <field name="condition" colspan="4" select="1"/>
2666 <field name="trans_type"/>
2667 <field name="tracer"/>
2668+ <field name="resid"/>
2669+ <newline/>
2670 </form>
2671 </field>
2672 <separator string="Incoming transitions" colspan="4"/>
2673 <field name="in_trans_ids" colspan="4" nolabel="1"/>
2674 </page>
2675 </notebook>
2676+ <field name="resid"/>
2677+ <newline/>
2678 </form>
2679 </field>
2680 </record>
2681@@ -313,6 +327,8 @@
2682 <field name="condition" colspan="4" select="1"/>
2683 <field name="trans_type"/>
2684 <field name="tracer"/>
2685+ <field name="resid"/>
2686+ <newline/>
2687 </form>
2688 </field>
2689 </record>
2690
2691=== modified file 'wms_scanner/wizard/__init__.py'
2692--- wms_scanner/wizard/__init__.py 2010-06-23 08:27:10 +0000
2693+++ wms_scanner/wizard/__init__.py 2011-07-29 14:55:33 +0000
2694@@ -2,7 +2,7 @@
2695 ##############################################################################
2696 #
2697 # wms_scanner module for OpenERP, Module for manage barcode reader
2698-# Copyright (C) 2010 SYLEAM (<http://syleam.fr/>)
2699+# Copyright (C) 2010 SYLEAM (<http://syleam.fr/>)
2700 # Christophe Chauvet <christophe.chauvet@syleam.fr>
2701 #
2702 # This file is a part of wms_scanner
2703@@ -22,6 +22,4 @@
2704 #
2705 ##############################################################################
2706
2707-
2708-
2709-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
2710\ No newline at end of file
2711+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
2712
2713=== added directory 'wms_wave'
2714=== added file 'wms_wave/.description'
2715--- wms_wave/.description 1970-01-01 00:00:00 +0000
2716+++ wms_wave/.description 2011-07-29 14:55:33 +0000
2717@@ -0,0 +1,1 @@
2718+To treat picking per group, also known as « wave »
2719\ No newline at end of file
2720
2721=== added file 'wms_wave/__init__.py'
2722--- wms_wave/__init__.py 1970-01-01 00:00:00 +0000
2723+++ wms_wave/__init__.py 2011-07-29 14:55:33 +0000
2724@@ -0,0 +1,29 @@
2725+# -*- coding: utf-8 -*-
2726+##############################################################################
2727+#
2728+# wms_wave module for OpenERP, To treat picking per group, also known as « wave »
2729+# Copyright (C) 2011 SYLEAM Info Services (<http://www.syleam.fr/>)
2730+# Jean-SĂ©bastien SUZANNE <jean-sebastien.suzanne@syleam.fr>
2731+#
2732+# This file is a part of wms_wave
2733+#
2734+# wms_wave is free software: you can redistribute it and/or modify
2735+# it under the terms of the GNU General Public License as published by
2736+# the Free Software Foundation, either version 3 of the License, or
2737+# (at your option) any later version.
2738+#
2739+# wms_wave is distributed in the hope that it will be useful,
2740+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2741+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2742+# GNU General Public License for more details.
2743+#
2744+# You should have received a copy of the GNU General Public License
2745+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2746+#
2747+##############################################################################
2748+
2749+import object
2750+import report
2751+import wizard
2752+
2753+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
2754
2755=== added file 'wms_wave/__terp__.py'
2756--- wms_wave/__terp__.py 1970-01-01 00:00:00 +0000
2757+++ wms_wave/__terp__.py 2011-07-29 14:55:33 +0000
2758@@ -0,0 +1,64 @@
2759+# -*- coding: utf-8 -*-
2760+##############################################################################
2761+#
2762+# wms_wave module for OpenERP, To treat picking per group, also known as « wave »
2763+# Copyright (C) 2011 SYLEAM Info Services (<http://www.syleam.fr/>)
2764+# Jean-SĂ©bastien SUZANNE <jean-sebastien.suzanne@syleam.fr>
2765+#
2766+# This file is a part of wms_wave
2767+#
2768+# wms_wave is free software: you can redistribute it and/or modify
2769+# it under the terms of the GNU General Public License as published by
2770+# the Free Software Foundation, either version 3 of the License, or
2771+# (at your option) any later version.
2772+#
2773+# wms_wave is distributed in the hope that it will be useful,
2774+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2775+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2776+# GNU General Public License for more details.
2777+#
2778+# You should have received a copy of the GNU General Public License
2779+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2780+#
2781+##############################################################################
2782+
2783+{
2784+ 'name': 'Wms Wave',
2785+ 'version': '0.1.0',
2786+ 'category': 'Custom',
2787+ 'description': """To treat picking per group, also known as « wave »""",
2788+ 'author': 'SYLEAM Info Services',
2789+ 'website': 'http://www.syleam.fr/',
2790+ 'depends': [
2791+ 'base',
2792+ 'wms',
2793+ 'stock',
2794+ ],
2795+ 'init_xml': [],
2796+ 'update_xml': [
2797+ 'security/groups.xml',
2798+ 'security/ir.model.access.csv',
2799+ 'data/sequence.xml',
2800+ 'data/ir.xml',
2801+ 'view/menu.xml',
2802+ 'view/stock.xml',
2803+ #'wizard/wizard.xml',
2804+ 'wizard/wave_affect_picking.xml',
2805+ 'workflow/workflow.xml',
2806+ #'report/report.xml',
2807+ ],
2808+ 'demo_xml': [
2809+ 'demo/sequence.xml',
2810+ 'demo/warehouse.xml',
2811+ 'demo/users.xml',
2812+ 'demo/product.xml',
2813+ 'demo/picking_in.xml',
2814+ 'demo/picking_out.xml',
2815+ ],
2816+ 'installable': True,
2817+ 'active': False,
2818+ 'license': 'GPL-3',
2819+}
2820+
2821+
2822+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
2823
2824=== added directory 'wms_wave/data'
2825=== added file 'wms_wave/data/ir.xml'
2826--- wms_wave/data/ir.xml 1970-01-01 00:00:00 +0000
2827+++ wms_wave/data/ir.xml 2011-07-29 14:55:33 +0000
2828@@ -0,0 +1,41 @@
2829+<?xml version="1.0" encoding="UTF-8"?>
2830+<openerp>
2831+ <data noupdate="1">
2832+ ##############################################################################
2833+ #
2834+ # wms_wave module for OpenERP, To treat picking per group, also known as « wave »
2835+ # Copyright (C) 2011 SYLEAM Info Services ([http://www.syleam.fr/])
2836+ # Jean-SĂ©bastien SUZANNE [jean-sebastien.suzanne@syleam.fr]
2837+ #
2838+ # This file is a part of wms_wave
2839+ #
2840+ # wms_wave is free software: you can redistribute it and/or modify
2841+ # it under the terms of the GNU General Public License as published by
2842+ # the Free Software Foundation, either version 3 of the License, or
2843+ # (at your option) any later version.
2844+ #
2845+ # wms_wave is distributed in the hope that it will be useful,
2846+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
2847+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2848+ # GNU General Public License for more details.
2849+ #
2850+ # You should have received a copy of the GNU General Public License
2851+ # along with this program. If not, see [http://www.gnu.org/licenses/].
2852+ #
2853+ ##############################################################################
2854+
2855+ ##############################################################################
2856+ # Define rule for the wave : User can only see wave on this warehouse
2857+ ##############################################################################
2858+ <record model="ir.rule.group" id="ir_rule_group_stock_wave_warehouse">
2859+ <field name="groups" eval="[(4,ref('wms.group_wms_warehouse_rules'))]"/>
2860+ <field name="model_id" ref="wms_wave.model_stock_wave"/>
2861+ <field name="name">Wave per Warehouse</field>
2862+ <field name="rules"/>
2863+ </record>
2864+ <record model="ir.rule" id="ir_rule_stock_wave_warehouse">
2865+ <field name="domain_force">['|', ('warehouse_id','=',False),('warehouse_id','=', user.context_warehouse_id.id)]</field>
2866+ <field name="rule_group" ref="ir_rule_group_stock_wave_warehouse"/>
2867+ </record>
2868+ </data>
2869+</openerp>
2870
2871=== added file 'wms_wave/data/sequence.xml'
2872--- wms_wave/data/sequence.xml 1970-01-01 00:00:00 +0000
2873+++ wms_wave/data/sequence.xml 2011-07-29 14:55:33 +0000
2874@@ -0,0 +1,37 @@
2875+<?xml version="1.0" encoding="UTF-8"?>
2876+<openerp>
2877+ <data noupdate="1">
2878+ ##############################################################################
2879+ #
2880+ # wms_wave module for OpenERP, To treat picking per group, also known as « wave »
2881+ # Copyright (C) 2011 SYLEAM Info Services ([http://www.syleam.fr/])
2882+ # Jean-SĂ©bastien SUZANNE [jean-sebastien.suzanne@syleam.fr]
2883+ #
2884+ # This file is a part of wms_wave
2885+ #
2886+ # wms_wave is free software: you can redistribute it and/or modify
2887+ # it under the terms of the GNU General Public License as published by
2888+ # the Free Software Foundation, either version 3 of the License, or
2889+ # (at your option) any later version.
2890+ #
2891+ # wms_wave is distributed in the hope that it will be useful,
2892+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
2893+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2894+ # GNU General Public License for more details.
2895+ #
2896+ # You should have received a copy of the GNU General Public License
2897+ # along with this program. If not, see [http://www.gnu.org/licenses/].
2898+ #
2899+ ##############################################################################
2900+
2901+ ##############################################################################
2902+ # ADD new sequence type for group wave sequence
2903+ ##############################################################################
2904+ <record model="ir.sequence.type" id="ir_sequence_type_stock_wave">
2905+ <field name="code">stock_wave</field>
2906+ <field name="name">Stock Wave</field>
2907+ </record>
2908+
2909+ </data>
2910+</openerp>
2911+
2912
2913=== added directory 'wms_wave/demo'
2914=== added file 'wms_wave/demo/picking_in.xml'
2915--- wms_wave/demo/picking_in.xml 1970-01-01 00:00:00 +0000
2916+++ wms_wave/demo/picking_in.xml 2011-07-29 14:55:33 +0000
2917@@ -0,0 +1,1240 @@
2918+<?xml version="1.0" encoding="UTF-8"?>
2919+<openerp>
2920+ <data>
2921+ ##############################################################################
2922+ #
2923+ # wms_wave module for OpenERP, To treat picking per group, also known as « wave »
2924+ # Copyright (C) 2011 SYLEAM Info Services ([http://www.syleam.fr/])
2925+ # Jean-SĂ©bastien SUZANNE [jean-sebastien.suzanne@syleam.fr]
2926+ #
2927+ # This file is a part of wms_wave
2928+ #
2929+ # wms_wave is free software: you can redistribute it and/or modify
2930+ # it under the terms of the GNU General Public License as published by
2931+ # the Free Software Foundation, either version 3 of the License, or
2932+ # (at your option) any later version.
2933+ #
2934+ # wms_wave is distributed in the hope that it will be useful,
2935+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
2936+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2937+ # GNU General Public License for more details.
2938+ #
2939+ # You should have received a copy of the GNU General Public License
2940+ # along with this program. If not, see [http://www.gnu.org/licenses/].
2941+ #
2942+ ##############################################################################
2943+
2944+ <record model="stock.picking" id="stock_picking_wave_in">
2945+ <field name="address_id" ref="base.res_partner_address_2"/>
2946+ <field name="move_type">direct</field>
2947+ <field name="name">/</field>
2948+ <field name="type">in</field>
2949+ <field name="warehouse_id" ref="warehousewave"/>
2950+ </record>
2951+
2952+ <record model="stock.move" id="stock_move_0">
2953+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
2954+ <field name="location_id" ref="stock.stock_location_suppliers"/>
2955+ <field name="name">product wave 0</field>
2956+ <field name="picking_id" ref="stock_picking_wave_in"/>
2957+ <field name="priority">1</field>
2958+ <field name="product_id" ref="product_0"/>
2959+ <field name="product_qty" eval="10.0"/>
2960+ <field name="product_uom" ref="product.product_uom_unit"/>
2961+ </record>
2962+
2963+
2964+ <record model="stock.move" id="stock_move_1">
2965+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
2966+ <field name="location_id" ref="stock.stock_location_suppliers"/>
2967+ <field name="name">product wave 1</field>
2968+ <field name="picking_id" ref="stock_picking_wave_in"/>
2969+ <field name="priority">1</field>
2970+ <field name="product_id" ref="product_1"/>
2971+ <field name="product_qty" eval="10.0"/>
2972+ <field name="product_uom" ref="product.product_uom_unit"/>
2973+ </record>
2974+
2975+
2976+ <record model="stock.move" id="stock_move_2">
2977+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
2978+ <field name="location_id" ref="stock.stock_location_suppliers"/>
2979+ <field name="name">product wave 2</field>
2980+ <field name="picking_id" ref="stock_picking_wave_in"/>
2981+ <field name="priority">1</field>
2982+ <field name="product_id" ref="product_2"/>
2983+ <field name="product_qty" eval="10.0"/>
2984+ <field name="product_uom" ref="product.product_uom_unit"/>
2985+ </record>
2986+
2987+
2988+ <record model="stock.move" id="stock_move_3">
2989+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
2990+ <field name="location_id" ref="stock.stock_location_suppliers"/>
2991+ <field name="name">product wave 3</field>
2992+ <field name="picking_id" ref="stock_picking_wave_in"/>
2993+ <field name="priority">1</field>
2994+ <field name="product_id" ref="product_3"/>
2995+ <field name="product_qty" eval="10.0"/>
2996+ <field name="product_uom" ref="product.product_uom_unit"/>
2997+ </record>
2998+
2999+
3000+ <record model="stock.move" id="stock_move_4">
3001+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3002+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3003+ <field name="name">product wave 4</field>
3004+ <field name="picking_id" ref="stock_picking_wave_in"/>
3005+ <field name="priority">1</field>
3006+ <field name="product_id" ref="product_4"/>
3007+ <field name="product_qty" eval="10.0"/>
3008+ <field name="product_uom" ref="product.product_uom_unit"/>
3009+ </record>
3010+
3011+
3012+ <record model="stock.move" id="stock_move_5">
3013+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3014+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3015+ <field name="name">product wave 5</field>
3016+ <field name="picking_id" ref="stock_picking_wave_in"/>
3017+ <field name="priority">1</field>
3018+ <field name="product_id" ref="product_5"/>
3019+ <field name="product_qty" eval="10.0"/>
3020+ <field name="product_uom" ref="product.product_uom_unit"/>
3021+ </record>
3022+
3023+
3024+ <record model="stock.move" id="stock_move_6">
3025+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3026+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3027+ <field name="name">product wave 6</field>
3028+ <field name="picking_id" ref="stock_picking_wave_in"/>
3029+ <field name="priority">1</field>
3030+ <field name="product_id" ref="product_6"/>
3031+ <field name="product_qty" eval="10.0"/>
3032+ <field name="product_uom" ref="product.product_uom_unit"/>
3033+ </record>
3034+
3035+
3036+ <record model="stock.move" id="stock_move_7">
3037+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3038+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3039+ <field name="name">product wave 7</field>
3040+ <field name="picking_id" ref="stock_picking_wave_in"/>
3041+ <field name="priority">1</field>
3042+ <field name="product_id" ref="product_7"/>
3043+ <field name="product_qty" eval="10.0"/>
3044+ <field name="product_uom" ref="product.product_uom_unit"/>
3045+ </record>
3046+
3047+
3048+ <record model="stock.move" id="stock_move_8">
3049+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3050+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3051+ <field name="name">product wave 8</field>
3052+ <field name="picking_id" ref="stock_picking_wave_in"/>
3053+ <field name="priority">1</field>
3054+ <field name="product_id" ref="product_8"/>
3055+ <field name="product_qty" eval="10.0"/>
3056+ <field name="product_uom" ref="product.product_uom_unit"/>
3057+ </record>
3058+
3059+
3060+ <record model="stock.move" id="stock_move_9">
3061+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3062+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3063+ <field name="name">product wave 9</field>
3064+ <field name="picking_id" ref="stock_picking_wave_in"/>
3065+ <field name="priority">1</field>
3066+ <field name="product_id" ref="product_9"/>
3067+ <field name="product_qty" eval="10.0"/>
3068+ <field name="product_uom" ref="product.product_uom_unit"/>
3069+ </record>
3070+
3071+
3072+ <record model="stock.move" id="stock_move_10">
3073+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3074+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3075+ <field name="name">product wave 10</field>
3076+ <field name="picking_id" ref="stock_picking_wave_in"/>
3077+ <field name="priority">1</field>
3078+ <field name="product_id" ref="product_10"/>
3079+ <field name="product_qty" eval="10.0"/>
3080+ <field name="product_uom" ref="product.product_uom_unit"/>
3081+ </record>
3082+
3083+
3084+ <record model="stock.move" id="stock_move_11">
3085+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3086+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3087+ <field name="name">product wave 11</field>
3088+ <field name="picking_id" ref="stock_picking_wave_in"/>
3089+ <field name="priority">1</field>
3090+ <field name="product_id" ref="product_11"/>
3091+ <field name="product_qty" eval="10.0"/>
3092+ <field name="product_uom" ref="product.product_uom_unit"/>
3093+ </record>
3094+
3095+
3096+ <record model="stock.move" id="stock_move_12">
3097+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3098+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3099+ <field name="name">product wave 12</field>
3100+ <field name="picking_id" ref="stock_picking_wave_in"/>
3101+ <field name="priority">1</field>
3102+ <field name="product_id" ref="product_12"/>
3103+ <field name="product_qty" eval="10.0"/>
3104+ <field name="product_uom" ref="product.product_uom_unit"/>
3105+ </record>
3106+
3107+
3108+ <record model="stock.move" id="stock_move_13">
3109+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3110+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3111+ <field name="name">product wave 13</field>
3112+ <field name="picking_id" ref="stock_picking_wave_in"/>
3113+ <field name="priority">1</field>
3114+ <field name="product_id" ref="product_13"/>
3115+ <field name="product_qty" eval="10.0"/>
3116+ <field name="product_uom" ref="product.product_uom_unit"/>
3117+ </record>
3118+
3119+
3120+ <record model="stock.move" id="stock_move_14">
3121+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3122+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3123+ <field name="name">product wave 14</field>
3124+ <field name="picking_id" ref="stock_picking_wave_in"/>
3125+ <field name="priority">1</field>
3126+ <field name="product_id" ref="product_14"/>
3127+ <field name="product_qty" eval="10.0"/>
3128+ <field name="product_uom" ref="product.product_uom_unit"/>
3129+ </record>
3130+
3131+
3132+ <record model="stock.move" id="stock_move_15">
3133+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3134+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3135+ <field name="name">product wave 15</field>
3136+ <field name="picking_id" ref="stock_picking_wave_in"/>
3137+ <field name="priority">1</field>
3138+ <field name="product_id" ref="product_15"/>
3139+ <field name="product_qty" eval="10.0"/>
3140+ <field name="product_uom" ref="product.product_uom_unit"/>
3141+ </record>
3142+
3143+
3144+ <record model="stock.move" id="stock_move_16">
3145+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3146+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3147+ <field name="name">product wave 16</field>
3148+ <field name="picking_id" ref="stock_picking_wave_in"/>
3149+ <field name="priority">1</field>
3150+ <field name="product_id" ref="product_16"/>
3151+ <field name="product_qty" eval="10.0"/>
3152+ <field name="product_uom" ref="product.product_uom_unit"/>
3153+ </record>
3154+
3155+
3156+ <record model="stock.move" id="stock_move_17">
3157+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3158+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3159+ <field name="name">product wave 17</field>
3160+ <field name="picking_id" ref="stock_picking_wave_in"/>
3161+ <field name="priority">1</field>
3162+ <field name="product_id" ref="product_17"/>
3163+ <field name="product_qty" eval="10.0"/>
3164+ <field name="product_uom" ref="product.product_uom_unit"/>
3165+ </record>
3166+
3167+
3168+ <record model="stock.move" id="stock_move_18">
3169+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3170+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3171+ <field name="name">product wave 18</field>
3172+ <field name="picking_id" ref="stock_picking_wave_in"/>
3173+ <field name="priority">1</field>
3174+ <field name="product_id" ref="product_18"/>
3175+ <field name="product_qty" eval="10.0"/>
3176+ <field name="product_uom" ref="product.product_uom_unit"/>
3177+ </record>
3178+
3179+
3180+ <record model="stock.move" id="stock_move_19">
3181+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3182+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3183+ <field name="name">product wave 19</field>
3184+ <field name="picking_id" ref="stock_picking_wave_in"/>
3185+ <field name="priority">1</field>
3186+ <field name="product_id" ref="product_19"/>
3187+ <field name="product_qty" eval="10.0"/>
3188+ <field name="product_uom" ref="product.product_uom_unit"/>
3189+ </record>
3190+
3191+
3192+ <record model="stock.move" id="stock_move_20">
3193+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3194+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3195+ <field name="name">product wave 20</field>
3196+ <field name="picking_id" ref="stock_picking_wave_in"/>
3197+ <field name="priority">1</field>
3198+ <field name="product_id" ref="product_20"/>
3199+ <field name="product_qty" eval="10.0"/>
3200+ <field name="product_uom" ref="product.product_uom_unit"/>
3201+ </record>
3202+
3203+
3204+ <record model="stock.move" id="stock_move_21">
3205+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3206+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3207+ <field name="name">product wave 21</field>
3208+ <field name="picking_id" ref="stock_picking_wave_in"/>
3209+ <field name="priority">1</field>
3210+ <field name="product_id" ref="product_21"/>
3211+ <field name="product_qty" eval="10.0"/>
3212+ <field name="product_uom" ref="product.product_uom_unit"/>
3213+ </record>
3214+
3215+
3216+ <record model="stock.move" id="stock_move_22">
3217+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3218+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3219+ <field name="name">product wave 22</field>
3220+ <field name="picking_id" ref="stock_picking_wave_in"/>
3221+ <field name="priority">1</field>
3222+ <field name="product_id" ref="product_22"/>
3223+ <field name="product_qty" eval="10.0"/>
3224+ <field name="product_uom" ref="product.product_uom_unit"/>
3225+ </record>
3226+
3227+
3228+ <record model="stock.move" id="stock_move_23">
3229+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3230+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3231+ <field name="name">product wave 23</field>
3232+ <field name="picking_id" ref="stock_picking_wave_in"/>
3233+ <field name="priority">1</field>
3234+ <field name="product_id" ref="product_23"/>
3235+ <field name="product_qty" eval="10.0"/>
3236+ <field name="product_uom" ref="product.product_uom_unit"/>
3237+ </record>
3238+
3239+
3240+ <record model="stock.move" id="stock_move_24">
3241+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3242+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3243+ <field name="name">product wave 24</field>
3244+ <field name="picking_id" ref="stock_picking_wave_in"/>
3245+ <field name="priority">1</field>
3246+ <field name="product_id" ref="product_24"/>
3247+ <field name="product_qty" eval="10.0"/>
3248+ <field name="product_uom" ref="product.product_uom_unit"/>
3249+ </record>
3250+
3251+
3252+ <record model="stock.move" id="stock_move_25">
3253+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3254+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3255+ <field name="name">product wave 25</field>
3256+ <field name="picking_id" ref="stock_picking_wave_in"/>
3257+ <field name="priority">1</field>
3258+ <field name="product_id" ref="product_25"/>
3259+ <field name="product_qty" eval="10.0"/>
3260+ <field name="product_uom" ref="product.product_uom_unit"/>
3261+ </record>
3262+
3263+
3264+ <record model="stock.move" id="stock_move_26">
3265+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3266+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3267+ <field name="name">product wave 26</field>
3268+ <field name="picking_id" ref="stock_picking_wave_in"/>
3269+ <field name="priority">1</field>
3270+ <field name="product_id" ref="product_26"/>
3271+ <field name="product_qty" eval="10.0"/>
3272+ <field name="product_uom" ref="product.product_uom_unit"/>
3273+ </record>
3274+
3275+
3276+ <record model="stock.move" id="stock_move_27">
3277+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3278+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3279+ <field name="name">product wave 27</field>
3280+ <field name="picking_id" ref="stock_picking_wave_in"/>
3281+ <field name="priority">1</field>
3282+ <field name="product_id" ref="product_27"/>
3283+ <field name="product_qty" eval="10.0"/>
3284+ <field name="product_uom" ref="product.product_uom_unit"/>
3285+ </record>
3286+
3287+
3288+ <record model="stock.move" id="stock_move_28">
3289+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3290+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3291+ <field name="name">product wave 28</field>
3292+ <field name="picking_id" ref="stock_picking_wave_in"/>
3293+ <field name="priority">1</field>
3294+ <field name="product_id" ref="product_28"/>
3295+ <field name="product_qty" eval="10.0"/>
3296+ <field name="product_uom" ref="product.product_uom_unit"/>
3297+ </record>
3298+
3299+
3300+ <record model="stock.move" id="stock_move_29">
3301+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3302+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3303+ <field name="name">product wave 29</field>
3304+ <field name="picking_id" ref="stock_picking_wave_in"/>
3305+ <field name="priority">1</field>
3306+ <field name="product_id" ref="product_29"/>
3307+ <field name="product_qty" eval="10.0"/>
3308+ <field name="product_uom" ref="product.product_uom_unit"/>
3309+ </record>
3310+
3311+
3312+ <record model="stock.move" id="stock_move_30">
3313+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3314+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3315+ <field name="name">product wave 30</field>
3316+ <field name="picking_id" ref="stock_picking_wave_in"/>
3317+ <field name="priority">1</field>
3318+ <field name="product_id" ref="product_30"/>
3319+ <field name="product_qty" eval="10.0"/>
3320+ <field name="product_uom" ref="product.product_uom_unit"/>
3321+ </record>
3322+
3323+
3324+ <record model="stock.move" id="stock_move_31">
3325+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3326+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3327+ <field name="name">product wave 31</field>
3328+ <field name="picking_id" ref="stock_picking_wave_in"/>
3329+ <field name="priority">1</field>
3330+ <field name="product_id" ref="product_31"/>
3331+ <field name="product_qty" eval="10.0"/>
3332+ <field name="product_uom" ref="product.product_uom_unit"/>
3333+ </record>
3334+
3335+
3336+ <record model="stock.move" id="stock_move_32">
3337+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3338+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3339+ <field name="name">product wave 32</field>
3340+ <field name="picking_id" ref="stock_picking_wave_in"/>
3341+ <field name="priority">1</field>
3342+ <field name="product_id" ref="product_32"/>
3343+ <field name="product_qty" eval="10.0"/>
3344+ <field name="product_uom" ref="product.product_uom_unit"/>
3345+ </record>
3346+
3347+
3348+ <record model="stock.move" id="stock_move_33">
3349+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3350+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3351+ <field name="name">product wave 33</field>
3352+ <field name="picking_id" ref="stock_picking_wave_in"/>
3353+ <field name="priority">1</field>
3354+ <field name="product_id" ref="product_33"/>
3355+ <field name="product_qty" eval="10.0"/>
3356+ <field name="product_uom" ref="product.product_uom_unit"/>
3357+ </record>
3358+
3359+
3360+ <record model="stock.move" id="stock_move_34">
3361+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3362+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3363+ <field name="name">product wave 34</field>
3364+ <field name="picking_id" ref="stock_picking_wave_in"/>
3365+ <field name="priority">1</field>
3366+ <field name="product_id" ref="product_34"/>
3367+ <field name="product_qty" eval="10.0"/>
3368+ <field name="product_uom" ref="product.product_uom_unit"/>
3369+ </record>
3370+
3371+
3372+ <record model="stock.move" id="stock_move_35">
3373+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3374+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3375+ <field name="name">product wave 35</field>
3376+ <field name="picking_id" ref="stock_picking_wave_in"/>
3377+ <field name="priority">1</field>
3378+ <field name="product_id" ref="product_35"/>
3379+ <field name="product_qty" eval="10.0"/>
3380+ <field name="product_uom" ref="product.product_uom_unit"/>
3381+ </record>
3382+
3383+
3384+ <record model="stock.move" id="stock_move_36">
3385+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3386+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3387+ <field name="name">product wave 36</field>
3388+ <field name="picking_id" ref="stock_picking_wave_in"/>
3389+ <field name="priority">1</field>
3390+ <field name="product_id" ref="product_36"/>
3391+ <field name="product_qty" eval="10.0"/>
3392+ <field name="product_uom" ref="product.product_uom_unit"/>
3393+ </record>
3394+
3395+
3396+ <record model="stock.move" id="stock_move_37">
3397+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3398+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3399+ <field name="name">product wave 37</field>
3400+ <field name="picking_id" ref="stock_picking_wave_in"/>
3401+ <field name="priority">1</field>
3402+ <field name="product_id" ref="product_37"/>
3403+ <field name="product_qty" eval="10.0"/>
3404+ <field name="product_uom" ref="product.product_uom_unit"/>
3405+ </record>
3406+
3407+
3408+ <record model="stock.move" id="stock_move_38">
3409+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3410+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3411+ <field name="name">product wave 38</field>
3412+ <field name="picking_id" ref="stock_picking_wave_in"/>
3413+ <field name="priority">1</field>
3414+ <field name="product_id" ref="product_38"/>
3415+ <field name="product_qty" eval="10.0"/>
3416+ <field name="product_uom" ref="product.product_uom_unit"/>
3417+ </record>
3418+
3419+
3420+ <record model="stock.move" id="stock_move_39">
3421+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3422+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3423+ <field name="name">product wave 39</field>
3424+ <field name="picking_id" ref="stock_picking_wave_in"/>
3425+ <field name="priority">1</field>
3426+ <field name="product_id" ref="product_39"/>
3427+ <field name="product_qty" eval="10.0"/>
3428+ <field name="product_uom" ref="product.product_uom_unit"/>
3429+ </record>
3430+
3431+
3432+ <record model="stock.move" id="stock_move_40">
3433+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3434+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3435+ <field name="name">product wave 40</field>
3436+ <field name="picking_id" ref="stock_picking_wave_in"/>
3437+ <field name="priority">1</field>
3438+ <field name="product_id" ref="product_40"/>
3439+ <field name="product_qty" eval="10.0"/>
3440+ <field name="product_uom" ref="product.product_uom_unit"/>
3441+ </record>
3442+
3443+
3444+ <record model="stock.move" id="stock_move_41">
3445+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3446+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3447+ <field name="name">product wave 41</field>
3448+ <field name="picking_id" ref="stock_picking_wave_in"/>
3449+ <field name="priority">1</field>
3450+ <field name="product_id" ref="product_41"/>
3451+ <field name="product_qty" eval="10.0"/>
3452+ <field name="product_uom" ref="product.product_uom_unit"/>
3453+ </record>
3454+
3455+
3456+ <record model="stock.move" id="stock_move_42">
3457+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3458+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3459+ <field name="name">product wave 42</field>
3460+ <field name="picking_id" ref="stock_picking_wave_in"/>
3461+ <field name="priority">1</field>
3462+ <field name="product_id" ref="product_42"/>
3463+ <field name="product_qty" eval="10.0"/>
3464+ <field name="product_uom" ref="product.product_uom_unit"/>
3465+ </record>
3466+
3467+
3468+ <record model="stock.move" id="stock_move_43">
3469+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3470+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3471+ <field name="name">product wave 43</field>
3472+ <field name="picking_id" ref="stock_picking_wave_in"/>
3473+ <field name="priority">1</field>
3474+ <field name="product_id" ref="product_43"/>
3475+ <field name="product_qty" eval="10.0"/>
3476+ <field name="product_uom" ref="product.product_uom_unit"/>
3477+ </record>
3478+
3479+
3480+ <record model="stock.move" id="stock_move_44">
3481+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3482+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3483+ <field name="name">product wave 44</field>
3484+ <field name="picking_id" ref="stock_picking_wave_in"/>
3485+ <field name="priority">1</field>
3486+ <field name="product_id" ref="product_44"/>
3487+ <field name="product_qty" eval="10.0"/>
3488+ <field name="product_uom" ref="product.product_uom_unit"/>
3489+ </record>
3490+
3491+
3492+ <record model="stock.move" id="stock_move_45">
3493+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3494+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3495+ <field name="name">product wave 45</field>
3496+ <field name="picking_id" ref="stock_picking_wave_in"/>
3497+ <field name="priority">1</field>
3498+ <field name="product_id" ref="product_45"/>
3499+ <field name="product_qty" eval="10.0"/>
3500+ <field name="product_uom" ref="product.product_uom_unit"/>
3501+ </record>
3502+
3503+
3504+ <record model="stock.move" id="stock_move_46">
3505+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3506+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3507+ <field name="name">product wave 46</field>
3508+ <field name="picking_id" ref="stock_picking_wave_in"/>
3509+ <field name="priority">1</field>
3510+ <field name="product_id" ref="product_46"/>
3511+ <field name="product_qty" eval="10.0"/>
3512+ <field name="product_uom" ref="product.product_uom_unit"/>
3513+ </record>
3514+
3515+
3516+ <record model="stock.move" id="stock_move_47">
3517+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3518+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3519+ <field name="name">product wave 47</field>
3520+ <field name="picking_id" ref="stock_picking_wave_in"/>
3521+ <field name="priority">1</field>
3522+ <field name="product_id" ref="product_47"/>
3523+ <field name="product_qty" eval="10.0"/>
3524+ <field name="product_uom" ref="product.product_uom_unit"/>
3525+ </record>
3526+
3527+
3528+ <record model="stock.move" id="stock_move_48">
3529+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3530+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3531+ <field name="name">product wave 48</field>
3532+ <field name="picking_id" ref="stock_picking_wave_in"/>
3533+ <field name="priority">1</field>
3534+ <field name="product_id" ref="product_48"/>
3535+ <field name="product_qty" eval="10.0"/>
3536+ <field name="product_uom" ref="product.product_uom_unit"/>
3537+ </record>
3538+
3539+
3540+ <record model="stock.move" id="stock_move_49">
3541+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3542+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3543+ <field name="name">product wave 49</field>
3544+ <field name="picking_id" ref="stock_picking_wave_in"/>
3545+ <field name="priority">1</field>
3546+ <field name="product_id" ref="product_49"/>
3547+ <field name="product_qty" eval="10.0"/>
3548+ <field name="product_uom" ref="product.product_uom_unit"/>
3549+ </record>
3550+
3551+
3552+ <record model="stock.move" id="stock_move_50">
3553+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3554+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3555+ <field name="name">product wave 50</field>
3556+ <field name="picking_id" ref="stock_picking_wave_in"/>
3557+ <field name="priority">1</field>
3558+ <field name="product_id" ref="product_50"/>
3559+ <field name="product_qty" eval="10.0"/>
3560+ <field name="product_uom" ref="product.product_uom_unit"/>
3561+ </record>
3562+
3563+
3564+ <record model="stock.move" id="stock_move_51">
3565+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3566+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3567+ <field name="name">product wave 51</field>
3568+ <field name="picking_id" ref="stock_picking_wave_in"/>
3569+ <field name="priority">1</field>
3570+ <field name="product_id" ref="product_51"/>
3571+ <field name="product_qty" eval="10.0"/>
3572+ <field name="product_uom" ref="product.product_uom_unit"/>
3573+ </record>
3574+
3575+
3576+ <record model="stock.move" id="stock_move_52">
3577+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3578+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3579+ <field name="name">product wave 52</field>
3580+ <field name="picking_id" ref="stock_picking_wave_in"/>
3581+ <field name="priority">1</field>
3582+ <field name="product_id" ref="product_52"/>
3583+ <field name="product_qty" eval="10.0"/>
3584+ <field name="product_uom" ref="product.product_uom_unit"/>
3585+ </record>
3586+
3587+
3588+ <record model="stock.move" id="stock_move_53">
3589+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3590+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3591+ <field name="name">product wave 53</field>
3592+ <field name="picking_id" ref="stock_picking_wave_in"/>
3593+ <field name="priority">1</field>
3594+ <field name="product_id" ref="product_53"/>
3595+ <field name="product_qty" eval="10.0"/>
3596+ <field name="product_uom" ref="product.product_uom_unit"/>
3597+ </record>
3598+
3599+
3600+ <record model="stock.move" id="stock_move_54">
3601+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3602+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3603+ <field name="name">product wave 54</field>
3604+ <field name="picking_id" ref="stock_picking_wave_in"/>
3605+ <field name="priority">1</field>
3606+ <field name="product_id" ref="product_54"/>
3607+ <field name="product_qty" eval="10.0"/>
3608+ <field name="product_uom" ref="product.product_uom_unit"/>
3609+ </record>
3610+
3611+
3612+ <record model="stock.move" id="stock_move_55">
3613+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3614+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3615+ <field name="name">product wave 55</field>
3616+ <field name="picking_id" ref="stock_picking_wave_in"/>
3617+ <field name="priority">1</field>
3618+ <field name="product_id" ref="product_55"/>
3619+ <field name="product_qty" eval="10.0"/>
3620+ <field name="product_uom" ref="product.product_uom_unit"/>
3621+ </record>
3622+
3623+
3624+ <record model="stock.move" id="stock_move_56">
3625+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3626+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3627+ <field name="name">product wave 56</field>
3628+ <field name="picking_id" ref="stock_picking_wave_in"/>
3629+ <field name="priority">1</field>
3630+ <field name="product_id" ref="product_56"/>
3631+ <field name="product_qty" eval="10.0"/>
3632+ <field name="product_uom" ref="product.product_uom_unit"/>
3633+ </record>
3634+
3635+
3636+ <record model="stock.move" id="stock_move_57">
3637+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3638+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3639+ <field name="name">product wave 57</field>
3640+ <field name="picking_id" ref="stock_picking_wave_in"/>
3641+ <field name="priority">1</field>
3642+ <field name="product_id" ref="product_57"/>
3643+ <field name="product_qty" eval="10.0"/>
3644+ <field name="product_uom" ref="product.product_uom_unit"/>
3645+ </record>
3646+
3647+
3648+ <record model="stock.move" id="stock_move_58">
3649+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3650+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3651+ <field name="name">product wave 58</field>
3652+ <field name="picking_id" ref="stock_picking_wave_in"/>
3653+ <field name="priority">1</field>
3654+ <field name="product_id" ref="product_58"/>
3655+ <field name="product_qty" eval="10.0"/>
3656+ <field name="product_uom" ref="product.product_uom_unit"/>
3657+ </record>
3658+
3659+
3660+ <record model="stock.move" id="stock_move_59">
3661+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3662+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3663+ <field name="name">product wave 59</field>
3664+ <field name="picking_id" ref="stock_picking_wave_in"/>
3665+ <field name="priority">1</field>
3666+ <field name="product_id" ref="product_59"/>
3667+ <field name="product_qty" eval="10.0"/>
3668+ <field name="product_uom" ref="product.product_uom_unit"/>
3669+ </record>
3670+
3671+
3672+ <record model="stock.move" id="stock_move_60">
3673+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3674+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3675+ <field name="name">product wave 60</field>
3676+ <field name="picking_id" ref="stock_picking_wave_in"/>
3677+ <field name="priority">1</field>
3678+ <field name="product_id" ref="product_60"/>
3679+ <field name="product_qty" eval="10.0"/>
3680+ <field name="product_uom" ref="product.product_uom_unit"/>
3681+ </record>
3682+
3683+
3684+ <record model="stock.move" id="stock_move_61">
3685+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3686+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3687+ <field name="name">product wave 61</field>
3688+ <field name="picking_id" ref="stock_picking_wave_in"/>
3689+ <field name="priority">1</field>
3690+ <field name="product_id" ref="product_61"/>
3691+ <field name="product_qty" eval="10.0"/>
3692+ <field name="product_uom" ref="product.product_uom_unit"/>
3693+ </record>
3694+
3695+
3696+ <record model="stock.move" id="stock_move_62">
3697+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3698+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3699+ <field name="name">product wave 62</field>
3700+ <field name="picking_id" ref="stock_picking_wave_in"/>
3701+ <field name="priority">1</field>
3702+ <field name="product_id" ref="product_62"/>
3703+ <field name="product_qty" eval="10.0"/>
3704+ <field name="product_uom" ref="product.product_uom_unit"/>
3705+ </record>
3706+
3707+
3708+ <record model="stock.move" id="stock_move_63">
3709+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3710+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3711+ <field name="name">product wave 63</field>
3712+ <field name="picking_id" ref="stock_picking_wave_in"/>
3713+ <field name="priority">1</field>
3714+ <field name="product_id" ref="product_63"/>
3715+ <field name="product_qty" eval="10.0"/>
3716+ <field name="product_uom" ref="product.product_uom_unit"/>
3717+ </record>
3718+
3719+
3720+ <record model="stock.move" id="stock_move_64">
3721+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3722+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3723+ <field name="name">product wave 64</field>
3724+ <field name="picking_id" ref="stock_picking_wave_in"/>
3725+ <field name="priority">1</field>
3726+ <field name="product_id" ref="product_64"/>
3727+ <field name="product_qty" eval="10.0"/>
3728+ <field name="product_uom" ref="product.product_uom_unit"/>
3729+ </record>
3730+
3731+
3732+ <record model="stock.move" id="stock_move_65">
3733+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3734+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3735+ <field name="name">product wave 65</field>
3736+ <field name="picking_id" ref="stock_picking_wave_in"/>
3737+ <field name="priority">1</field>
3738+ <field name="product_id" ref="product_65"/>
3739+ <field name="product_qty" eval="10.0"/>
3740+ <field name="product_uom" ref="product.product_uom_unit"/>
3741+ </record>
3742+
3743+
3744+ <record model="stock.move" id="stock_move_66">
3745+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3746+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3747+ <field name="name">product wave 66</field>
3748+ <field name="picking_id" ref="stock_picking_wave_in"/>
3749+ <field name="priority">1</field>
3750+ <field name="product_id" ref="product_66"/>
3751+ <field name="product_qty" eval="10.0"/>
3752+ <field name="product_uom" ref="product.product_uom_unit"/>
3753+ </record>
3754+
3755+
3756+ <record model="stock.move" id="stock_move_67">
3757+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3758+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3759+ <field name="name">product wave 67</field>
3760+ <field name="picking_id" ref="stock_picking_wave_in"/>
3761+ <field name="priority">1</field>
3762+ <field name="product_id" ref="product_67"/>
3763+ <field name="product_qty" eval="10.0"/>
3764+ <field name="product_uom" ref="product.product_uom_unit"/>
3765+ </record>
3766+
3767+
3768+ <record model="stock.move" id="stock_move_68">
3769+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3770+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3771+ <field name="name">product wave 68</field>
3772+ <field name="picking_id" ref="stock_picking_wave_in"/>
3773+ <field name="priority">1</field>
3774+ <field name="product_id" ref="product_68"/>
3775+ <field name="product_qty" eval="10.0"/>
3776+ <field name="product_uom" ref="product.product_uom_unit"/>
3777+ </record>
3778+
3779+
3780+ <record model="stock.move" id="stock_move_69">
3781+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3782+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3783+ <field name="name">product wave 69</field>
3784+ <field name="picking_id" ref="stock_picking_wave_in"/>
3785+ <field name="priority">1</field>
3786+ <field name="product_id" ref="product_69"/>
3787+ <field name="product_qty" eval="10.0"/>
3788+ <field name="product_uom" ref="product.product_uom_unit"/>
3789+ </record>
3790+
3791+
3792+ <record model="stock.move" id="stock_move_70">
3793+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3794+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3795+ <field name="name">product wave 70</field>
3796+ <field name="picking_id" ref="stock_picking_wave_in"/>
3797+ <field name="priority">1</field>
3798+ <field name="product_id" ref="product_70"/>
3799+ <field name="product_qty" eval="10.0"/>
3800+ <field name="product_uom" ref="product.product_uom_unit"/>
3801+ </record>
3802+
3803+
3804+ <record model="stock.move" id="stock_move_71">
3805+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3806+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3807+ <field name="name">product wave 71</field>
3808+ <field name="picking_id" ref="stock_picking_wave_in"/>
3809+ <field name="priority">1</field>
3810+ <field name="product_id" ref="product_71"/>
3811+ <field name="product_qty" eval="10.0"/>
3812+ <field name="product_uom" ref="product.product_uom_unit"/>
3813+ </record>
3814+
3815+
3816+ <record model="stock.move" id="stock_move_72">
3817+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3818+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3819+ <field name="name">product wave 72</field>
3820+ <field name="picking_id" ref="stock_picking_wave_in"/>
3821+ <field name="priority">1</field>
3822+ <field name="product_id" ref="product_72"/>
3823+ <field name="product_qty" eval="10.0"/>
3824+ <field name="product_uom" ref="product.product_uom_unit"/>
3825+ </record>
3826+
3827+
3828+ <record model="stock.move" id="stock_move_73">
3829+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3830+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3831+ <field name="name">product wave 73</field>
3832+ <field name="picking_id" ref="stock_picking_wave_in"/>
3833+ <field name="priority">1</field>
3834+ <field name="product_id" ref="product_73"/>
3835+ <field name="product_qty" eval="10.0"/>
3836+ <field name="product_uom" ref="product.product_uom_unit"/>
3837+ </record>
3838+
3839+
3840+ <record model="stock.move" id="stock_move_74">
3841+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3842+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3843+ <field name="name">product wave 74</field>
3844+ <field name="picking_id" ref="stock_picking_wave_in"/>
3845+ <field name="priority">1</field>
3846+ <field name="product_id" ref="product_74"/>
3847+ <field name="product_qty" eval="10.0"/>
3848+ <field name="product_uom" ref="product.product_uom_unit"/>
3849+ </record>
3850+
3851+
3852+ <record model="stock.move" id="stock_move_75">
3853+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3854+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3855+ <field name="name">product wave 75</field>
3856+ <field name="picking_id" ref="stock_picking_wave_in"/>
3857+ <field name="priority">1</field>
3858+ <field name="product_id" ref="product_75"/>
3859+ <field name="product_qty" eval="10.0"/>
3860+ <field name="product_uom" ref="product.product_uom_unit"/>
3861+ </record>
3862+
3863+
3864+ <record model="stock.move" id="stock_move_76">
3865+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3866+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3867+ <field name="name">product wave 76</field>
3868+ <field name="picking_id" ref="stock_picking_wave_in"/>
3869+ <field name="priority">1</field>
3870+ <field name="product_id" ref="product_76"/>
3871+ <field name="product_qty" eval="10.0"/>
3872+ <field name="product_uom" ref="product.product_uom_unit"/>
3873+ </record>
3874+
3875+
3876+ <record model="stock.move" id="stock_move_77">
3877+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3878+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3879+ <field name="name">product wave 77</field>
3880+ <field name="picking_id" ref="stock_picking_wave_in"/>
3881+ <field name="priority">1</field>
3882+ <field name="product_id" ref="product_77"/>
3883+ <field name="product_qty" eval="10.0"/>
3884+ <field name="product_uom" ref="product.product_uom_unit"/>
3885+ </record>
3886+
3887+
3888+ <record model="stock.move" id="stock_move_78">
3889+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3890+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3891+ <field name="name">product wave 78</field>
3892+ <field name="picking_id" ref="stock_picking_wave_in"/>
3893+ <field name="priority">1</field>
3894+ <field name="product_id" ref="product_78"/>
3895+ <field name="product_qty" eval="10.0"/>
3896+ <field name="product_uom" ref="product.product_uom_unit"/>
3897+ </record>
3898+
3899+
3900+ <record model="stock.move" id="stock_move_79">
3901+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3902+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3903+ <field name="name">product wave 79</field>
3904+ <field name="picking_id" ref="stock_picking_wave_in"/>
3905+ <field name="priority">1</field>
3906+ <field name="product_id" ref="product_79"/>
3907+ <field name="product_qty" eval="10.0"/>
3908+ <field name="product_uom" ref="product.product_uom_unit"/>
3909+ </record>
3910+
3911+
3912+ <record model="stock.move" id="stock_move_80">
3913+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3914+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3915+ <field name="name">product wave 80</field>
3916+ <field name="picking_id" ref="stock_picking_wave_in"/>
3917+ <field name="priority">1</field>
3918+ <field name="product_id" ref="product_80"/>
3919+ <field name="product_qty" eval="10.0"/>
3920+ <field name="product_uom" ref="product.product_uom_unit"/>
3921+ </record>
3922+
3923+
3924+ <record model="stock.move" id="stock_move_81">
3925+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3926+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3927+ <field name="name">product wave 81</field>
3928+ <field name="picking_id" ref="stock_picking_wave_in"/>
3929+ <field name="priority">1</field>
3930+ <field name="product_id" ref="product_81"/>
3931+ <field name="product_qty" eval="10.0"/>
3932+ <field name="product_uom" ref="product.product_uom_unit"/>
3933+ </record>
3934+
3935+
3936+ <record model="stock.move" id="stock_move_82">
3937+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3938+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3939+ <field name="name">product wave 82</field>
3940+ <field name="picking_id" ref="stock_picking_wave_in"/>
3941+ <field name="priority">1</field>
3942+ <field name="product_id" ref="product_82"/>
3943+ <field name="product_qty" eval="10.0"/>
3944+ <field name="product_uom" ref="product.product_uom_unit"/>
3945+ </record>
3946+
3947+
3948+ <record model="stock.move" id="stock_move_83">
3949+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3950+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3951+ <field name="name">product wave 83</field>
3952+ <field name="picking_id" ref="stock_picking_wave_in"/>
3953+ <field name="priority">1</field>
3954+ <field name="product_id" ref="product_83"/>
3955+ <field name="product_qty" eval="10.0"/>
3956+ <field name="product_uom" ref="product.product_uom_unit"/>
3957+ </record>
3958+
3959+
3960+ <record model="stock.move" id="stock_move_84">
3961+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3962+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3963+ <field name="name">product wave 84</field>
3964+ <field name="picking_id" ref="stock_picking_wave_in"/>
3965+ <field name="priority">1</field>
3966+ <field name="product_id" ref="product_84"/>
3967+ <field name="product_qty" eval="10.0"/>
3968+ <field name="product_uom" ref="product.product_uom_unit"/>
3969+ </record>
3970+
3971+
3972+ <record model="stock.move" id="stock_move_85">
3973+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3974+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3975+ <field name="name">product wave 85</field>
3976+ <field name="picking_id" ref="stock_picking_wave_in"/>
3977+ <field name="priority">1</field>
3978+ <field name="product_id" ref="product_85"/>
3979+ <field name="product_qty" eval="10.0"/>
3980+ <field name="product_uom" ref="product.product_uom_unit"/>
3981+ </record>
3982+
3983+
3984+ <record model="stock.move" id="stock_move_86">
3985+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3986+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3987+ <field name="name">product wave 86</field>
3988+ <field name="picking_id" ref="stock_picking_wave_in"/>
3989+ <field name="priority">1</field>
3990+ <field name="product_id" ref="product_86"/>
3991+ <field name="product_qty" eval="10.0"/>
3992+ <field name="product_uom" ref="product.product_uom_unit"/>
3993+ </record>
3994+
3995+
3996+ <record model="stock.move" id="stock_move_87">
3997+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
3998+ <field name="location_id" ref="stock.stock_location_suppliers"/>
3999+ <field name="name">product wave 87</field>
4000+ <field name="picking_id" ref="stock_picking_wave_in"/>
4001+ <field name="priority">1</field>
4002+ <field name="product_id" ref="product_87"/>
4003+ <field name="product_qty" eval="10.0"/>
4004+ <field name="product_uom" ref="product.product_uom_unit"/>
4005+ </record>
4006+
4007+
4008+ <record model="stock.move" id="stock_move_88">
4009+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4010+ <field name="location_id" ref="stock.stock_location_suppliers"/>
4011+ <field name="name">product wave 88</field>
4012+ <field name="picking_id" ref="stock_picking_wave_in"/>
4013+ <field name="priority">1</field>
4014+ <field name="product_id" ref="product_88"/>
4015+ <field name="product_qty" eval="10.0"/>
4016+ <field name="product_uom" ref="product.product_uom_unit"/>
4017+ </record>
4018+
4019+
4020+ <record model="stock.move" id="stock_move_89">
4021+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4022+ <field name="location_id" ref="stock.stock_location_suppliers"/>
4023+ <field name="name">product wave 89</field>
4024+ <field name="picking_id" ref="stock_picking_wave_in"/>
4025+ <field name="priority">1</field>
4026+ <field name="product_id" ref="product_89"/>
4027+ <field name="product_qty" eval="10.0"/>
4028+ <field name="product_uom" ref="product.product_uom_unit"/>
4029+ </record>
4030+
4031+
4032+ <record model="stock.move" id="stock_move_90">
4033+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4034+ <field name="location_id" ref="stock.stock_location_suppliers"/>
4035+ <field name="name">product wave 90</field>
4036+ <field name="picking_id" ref="stock_picking_wave_in"/>
4037+ <field name="priority">1</field>
4038+ <field name="product_id" ref="product_90"/>
4039+ <field name="product_qty" eval="10.0"/>
4040+ <field name="product_uom" ref="product.product_uom_unit"/>
4041+ </record>
4042+
4043+
4044+ <record model="stock.move" id="stock_move_91">
4045+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4046+ <field name="location_id" ref="stock.stock_location_suppliers"/>
4047+ <field name="name">product wave 91</field>
4048+ <field name="picking_id" ref="stock_picking_wave_in"/>
4049+ <field name="priority">1</field>
4050+ <field name="product_id" ref="product_91"/>
4051+ <field name="product_qty" eval="10.0"/>
4052+ <field name="product_uom" ref="product.product_uom_unit"/>
4053+ </record>
4054+
4055+
4056+ <record model="stock.move" id="stock_move_92">
4057+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4058+ <field name="location_id" ref="stock.stock_location_suppliers"/>
4059+ <field name="name">product wave 92</field>
4060+ <field name="picking_id" ref="stock_picking_wave_in"/>
4061+ <field name="priority">1</field>
4062+ <field name="product_id" ref="product_92"/>
4063+ <field name="product_qty" eval="10.0"/>
4064+ <field name="product_uom" ref="product.product_uom_unit"/>
4065+ </record>
4066+
4067+
4068+ <record model="stock.move" id="stock_move_93">
4069+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4070+ <field name="location_id" ref="stock.stock_location_suppliers"/>
4071+ <field name="name">product wave 93</field>
4072+ <field name="picking_id" ref="stock_picking_wave_in"/>
4073+ <field name="priority">1</field>
4074+ <field name="product_id" ref="product_93"/>
4075+ <field name="product_qty" eval="10.0"/>
4076+ <field name="product_uom" ref="product.product_uom_unit"/>
4077+ </record>
4078+
4079+
4080+ <record model="stock.move" id="stock_move_94">
4081+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4082+ <field name="location_id" ref="stock.stock_location_suppliers"/>
4083+ <field name="name">product wave 94</field>
4084+ <field name="picking_id" ref="stock_picking_wave_in"/>
4085+ <field name="priority">1</field>
4086+ <field name="product_id" ref="product_94"/>
4087+ <field name="product_qty" eval="10.0"/>
4088+ <field name="product_uom" ref="product.product_uom_unit"/>
4089+ </record>
4090+
4091+
4092+ <record model="stock.move" id="stock_move_95">
4093+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4094+ <field name="location_id" ref="stock.stock_location_suppliers"/>
4095+ <field name="name">product wave 95</field>
4096+ <field name="picking_id" ref="stock_picking_wave_in"/>
4097+ <field name="priority">1</field>
4098+ <field name="product_id" ref="product_95"/>
4099+ <field name="product_qty" eval="10.0"/>
4100+ <field name="product_uom" ref="product.product_uom_unit"/>
4101+ </record>
4102+
4103+
4104+ <record model="stock.move" id="stock_move_96">
4105+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4106+ <field name="location_id" ref="stock.stock_location_suppliers"/>
4107+ <field name="name">product wave 96</field>
4108+ <field name="picking_id" ref="stock_picking_wave_in"/>
4109+ <field name="priority">1</field>
4110+ <field name="product_id" ref="product_96"/>
4111+ <field name="product_qty" eval="10.0"/>
4112+ <field name="product_uom" ref="product.product_uom_unit"/>
4113+ </record>
4114+
4115+
4116+ <record model="stock.move" id="stock_move_97">
4117+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4118+ <field name="location_id" ref="stock.stock_location_suppliers"/>
4119+ <field name="name">product wave 97</field>
4120+ <field name="picking_id" ref="stock_picking_wave_in"/>
4121+ <field name="priority">1</field>
4122+ <field name="product_id" ref="product_97"/>
4123+ <field name="product_qty" eval="10.0"/>
4124+ <field name="product_uom" ref="product.product_uom_unit"/>
4125+ </record>
4126+
4127+
4128+ <record model="stock.move" id="stock_move_98">
4129+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4130+ <field name="location_id" ref="stock.stock_location_suppliers"/>
4131+ <field name="name">product wave 98</field>
4132+ <field name="picking_id" ref="stock_picking_wave_in"/>
4133+ <field name="priority">1</field>
4134+ <field name="product_id" ref="product_98"/>
4135+ <field name="product_qty" eval="10.0"/>
4136+ <field name="product_uom" ref="product.product_uom_unit"/>
4137+ </record>
4138+
4139+
4140+ <record model="stock.move" id="stock_move_99">
4141+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4142+ <field name="location_id" ref="stock.stock_location_suppliers"/>
4143+ <field name="name">product wave 99</field>
4144+ <field name="picking_id" ref="stock_picking_wave_in"/>
4145+ <field name="priority">1</field>
4146+ <field name="product_id" ref="product_99"/>
4147+ <field name="product_qty" eval="10.0"/>
4148+ <field name="product_uom" ref="product.product_uom_unit"/>
4149+ </record>
4150+
4151+ <!-- confirm picking -->
4152+ <function name="draft_validate" model="stock.picking">
4153+ <value eval="[obj(ref('stock_picking_wave_in')).id]" model="stock.picking"/>
4154+ </function>
4155+
4156+ </data>
4157+</openerp>
4158
4159=== added file 'wms_wave/demo/picking_out.xml'
4160--- wms_wave/demo/picking_out.xml 1970-01-01 00:00:00 +0000
4161+++ wms_wave/demo/picking_out.xml 2011-07-29 14:55:33 +0000
4162@@ -0,0 +1,2248 @@
4163+<?xml version="1.0" encoding="UTF-8"?>
4164+<openerp>
4165+ <data noupdate="0">
4166+ ##############################################################################
4167+ #
4168+ # wms_wave module for OpenERP, To treat picking per group, also known as « wave »
4169+ # Copyright (C) 2011 SYLEAM Info Services ([http://www.syleam.fr/])
4170+ # Jean-SĂ©bastien SUZANNE [jean-sebastien.suzanne@syleam.fr]
4171+ #
4172+ # This file is a part of wms_wave
4173+ #
4174+ # wms_wave is free software: you can redistribute it and/or modify
4175+ # it under the terms of the GNU General Public License as published by
4176+ # the Free Software Foundation, either version 3 of the License, or
4177+ # (at your option) any later version.
4178+ #
4179+ # wms_wave is distributed in the hope that it will be useful,
4180+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
4181+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4182+ # GNU General Public License for more details.
4183+ #
4184+ # You should have received a copy of the GNU General Public License
4185+ # along with this program. If not, see [http://www.gnu.org/licenses/].
4186+ #
4187+ ##############################################################################
4188+
4189+
4190+ <record model="stock.picking" id="stock_picking_wave_out_0">
4191+ <field name="address_id" ref="base.res_partner_address_2"/>
4192+ <field name="move_type">direct</field>
4193+ <field name="name">/</field>
4194+ <field name="type">out</field>
4195+ <field name="warehouse_id" ref="warehousewave"/>
4196+ </record>
4197+ <record model="stock.move" id="stock_move_wave_out_0">
4198+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4199+ <field name="location_id" ref="stock.stock_location_customers"/>
4200+ <field name="name">product wave 0</field>
4201+ <field name="picking_id" ref="stock_picking_wave_out_0"/>
4202+ <field name="priority">1</field>
4203+ <field name="product_id" ref="product_0"/>
4204+ <field name="product_qty" eval="1.0"/>
4205+ <field name="product_uom" ref="product.product_uom_unit"/>
4206+ </record>
4207+ <function name="draft_force_assign" model="stock.picking">
4208+ <value eval="[obj(ref('stock_picking_wave_out_0')).id]" model="stock.picking"/>
4209+ </function>
4210+
4211+ <record model="stock.picking" id="stock_picking_wave_out_0_error">
4212+ <field name="address_id" ref="base.res_partner_address_2"/>
4213+ <field name="move_type">direct</field>
4214+ <field name="name">/</field>
4215+ <field name="type">out</field>
4216+ <field name="warehouse_id" ref="warehousewave"/>
4217+ </record>
4218+ <record model="stock.move" id="stock_move_wave_out_0_error">
4219+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4220+ <field name="location_id" ref="stock.stock_location_customers"/>
4221+ <field name="name">product wave 0</field>
4222+ <field name="picking_id" ref="stock_picking_wave_out_0_error"/>
4223+ <field name="priority">1</field>
4224+ <field name="product_id" ref="product_0"/>
4225+ <field name="product_qty" eval="21.0"/>
4226+ <field name="product_uom" ref="product.product_uom_unit"/>
4227+ </record>
4228+ <function name="draft_force_assign" model="stock.picking">
4229+ <value eval="[obj(ref('stock_picking_wave_out_0_error')).id]" model="stock.picking"/>
4230+ </function>
4231+
4232+ <record model="stock.picking" id="stock_picking_wave_out_1">
4233+ <field name="address_id" ref="base.res_partner_address_2"/>
4234+ <field name="move_type">direct</field>
4235+ <field name="name">/</field>
4236+ <field name="type">out</field>
4237+ <field name="warehouse_id" ref="warehousewave"/>
4238+ </record>
4239+ <record model="stock.move" id="stock_move_wave_out_1">
4240+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4241+ <field name="location_id" ref="stock.stock_location_customers"/>
4242+ <field name="name">product wave 1</field>
4243+ <field name="picking_id" ref="stock_picking_wave_out_1"/>
4244+ <field name="priority">1</field>
4245+ <field name="product_id" ref="product_1"/>
4246+ <field name="product_qty" eval="1.0"/>
4247+ <field name="product_uom" ref="product.product_uom_unit"/>
4248+ </record>
4249+ <function name="draft_force_assign" model="stock.picking">
4250+ <value eval="[obj(ref('stock_picking_wave_out_1')).id]" model="stock.picking"/>
4251+ </function>
4252+
4253+
4254+ <record model="stock.picking" id="stock_picking_wave_out_2">
4255+ <field name="address_id" ref="base.res_partner_address_2"/>
4256+ <field name="move_type">direct</field>
4257+ <field name="name">/</field>
4258+ <field name="type">out</field>
4259+ <field name="warehouse_id" ref="warehousewave"/>
4260+ </record>
4261+ <record model="stock.move" id="stock_move_wave_out_2">
4262+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4263+ <field name="location_id" ref="stock.stock_location_customers"/>
4264+ <field name="name">product wave 2</field>
4265+ <field name="picking_id" ref="stock_picking_wave_out_2"/>
4266+ <field name="priority">1</field>
4267+ <field name="product_id" ref="product_2"/>
4268+ <field name="product_qty" eval="1.0"/>
4269+ <field name="product_uom" ref="product.product_uom_unit"/>
4270+ </record>
4271+ <function name="draft_force_assign" model="stock.picking">
4272+ <value eval="[obj(ref('stock_picking_wave_out_2')).id]" model="stock.picking"/>
4273+ </function>
4274+
4275+
4276+ <record model="stock.picking" id="stock_picking_wave_out_3">
4277+ <field name="address_id" ref="base.res_partner_address_2"/>
4278+ <field name="move_type">direct</field>
4279+ <field name="name">/</field>
4280+ <field name="type">out</field>
4281+ <field name="warehouse_id" ref="warehousewave"/>
4282+ </record>
4283+ <record model="stock.move" id="stock_move_wave_out_3">
4284+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4285+ <field name="location_id" ref="stock.stock_location_customers"/>
4286+ <field name="name">product wave 3</field>
4287+ <field name="picking_id" ref="stock_picking_wave_out_3"/>
4288+ <field name="priority">1</field>
4289+ <field name="product_id" ref="product_3"/>
4290+ <field name="product_qty" eval="1.0"/>
4291+ <field name="product_uom" ref="product.product_uom_unit"/>
4292+ </record>
4293+ <function name="draft_force_assign" model="stock.picking">
4294+ <value eval="[obj(ref('stock_picking_wave_out_3')).id]" model="stock.picking"/>
4295+ </function>
4296+
4297+
4298+ <record model="stock.picking" id="stock_picking_wave_out_4">
4299+ <field name="address_id" ref="base.res_partner_address_2"/>
4300+ <field name="move_type">direct</field>
4301+ <field name="name">/</field>
4302+ <field name="type">out</field>
4303+ <field name="warehouse_id" ref="warehousewave"/>
4304+ </record>
4305+ <record model="stock.move" id="stock_move_wave_out_4">
4306+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4307+ <field name="location_id" ref="stock.stock_location_customers"/>
4308+ <field name="name">product wave 4</field>
4309+ <field name="picking_id" ref="stock_picking_wave_out_4"/>
4310+ <field name="priority">1</field>
4311+ <field name="product_id" ref="product_4"/>
4312+ <field name="product_qty" eval="1.0"/>
4313+ <field name="product_uom" ref="product.product_uom_unit"/>
4314+ </record>
4315+ <function name="draft_force_assign" model="stock.picking">
4316+ <value eval="[obj(ref('stock_picking_wave_out_4')).id]" model="stock.picking"/>
4317+ </function>
4318+
4319+
4320+ <record model="stock.picking" id="stock_picking_wave_out_5">
4321+ <field name="address_id" ref="base.res_partner_address_2"/>
4322+ <field name="move_type">direct</field>
4323+ <field name="name">/</field>
4324+ <field name="type">out</field>
4325+ <field name="warehouse_id" ref="warehousewave"/>
4326+ </record>
4327+ <record model="stock.move" id="stock_move_wave_out_5">
4328+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4329+ <field name="location_id" ref="stock.stock_location_customers"/>
4330+ <field name="name">product wave 5</field>
4331+ <field name="picking_id" ref="stock_picking_wave_out_5"/>
4332+ <field name="priority">1</field>
4333+ <field name="product_id" ref="product_5"/>
4334+ <field name="product_qty" eval="1.0"/>
4335+ <field name="product_uom" ref="product.product_uom_unit"/>
4336+ </record>
4337+ <function name="draft_force_assign" model="stock.picking">
4338+ <value eval="[obj(ref('stock_picking_wave_out_5')).id]" model="stock.picking"/>
4339+ </function>
4340+
4341+
4342+ <record model="stock.picking" id="stock_picking_wave_out_6">
4343+ <field name="address_id" ref="base.res_partner_address_2"/>
4344+ <field name="move_type">direct</field>
4345+ <field name="name">/</field>
4346+ <field name="type">out</field>
4347+ <field name="warehouse_id" ref="warehousewave"/>
4348+ </record>
4349+ <record model="stock.move" id="stock_move_wave_out_6">
4350+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4351+ <field name="location_id" ref="stock.stock_location_customers"/>
4352+ <field name="name">product wave 6</field>
4353+ <field name="picking_id" ref="stock_picking_wave_out_6"/>
4354+ <field name="priority">1</field>
4355+ <field name="product_id" ref="product_6"/>
4356+ <field name="product_qty" eval="1.0"/>
4357+ <field name="product_uom" ref="product.product_uom_unit"/>
4358+ </record>
4359+ <function name="draft_force_assign" model="stock.picking">
4360+ <value eval="[obj(ref('stock_picking_wave_out_6')).id]" model="stock.picking"/>
4361+ </function>
4362+
4363+
4364+ <record model="stock.picking" id="stock_picking_wave_out_7">
4365+ <field name="address_id" ref="base.res_partner_address_2"/>
4366+ <field name="move_type">direct</field>
4367+ <field name="name">/</field>
4368+ <field name="type">out</field>
4369+ <field name="warehouse_id" ref="warehousewave"/>
4370+ </record>
4371+ <record model="stock.move" id="stock_move_wave_out_7">
4372+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4373+ <field name="location_id" ref="stock.stock_location_customers"/>
4374+ <field name="name">product wave 7</field>
4375+ <field name="picking_id" ref="stock_picking_wave_out_7"/>
4376+ <field name="priority">1</field>
4377+ <field name="product_id" ref="product_7"/>
4378+ <field name="product_qty" eval="1.0"/>
4379+ <field name="product_uom" ref="product.product_uom_unit"/>
4380+ </record>
4381+ <function name="draft_force_assign" model="stock.picking">
4382+ <value eval="[obj(ref('stock_picking_wave_out_7')).id]" model="stock.picking"/>
4383+ </function>
4384+
4385+
4386+ <record model="stock.picking" id="stock_picking_wave_out_8">
4387+ <field name="address_id" ref="base.res_partner_address_2"/>
4388+ <field name="move_type">direct</field>
4389+ <field name="name">/</field>
4390+ <field name="type">out</field>
4391+ <field name="warehouse_id" ref="warehousewave"/>
4392+ </record>
4393+ <record model="stock.move" id="stock_move_wave_out_8">
4394+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4395+ <field name="location_id" ref="stock.stock_location_customers"/>
4396+ <field name="name">product wave 8</field>
4397+ <field name="picking_id" ref="stock_picking_wave_out_8"/>
4398+ <field name="priority">1</field>
4399+ <field name="product_id" ref="product_8"/>
4400+ <field name="product_qty" eval="1.0"/>
4401+ <field name="product_uom" ref="product.product_uom_unit"/>
4402+ </record>
4403+ <function name="draft_force_assign" model="stock.picking">
4404+ <value eval="[obj(ref('stock_picking_wave_out_8')).id]" model="stock.picking"/>
4405+ </function>
4406+
4407+
4408+ <record model="stock.picking" id="stock_picking_wave_out_9">
4409+ <field name="address_id" ref="base.res_partner_address_2"/>
4410+ <field name="move_type">direct</field>
4411+ <field name="name">/</field>
4412+ <field name="type">out</field>
4413+ <field name="warehouse_id" ref="warehousewave"/>
4414+ </record>
4415+ <record model="stock.move" id="stock_move_wave_out_9">
4416+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4417+ <field name="location_id" ref="stock.stock_location_customers"/>
4418+ <field name="name">product wave 9</field>
4419+ <field name="picking_id" ref="stock_picking_wave_out_9"/>
4420+ <field name="priority">1</field>
4421+ <field name="product_id" ref="product_9"/>
4422+ <field name="product_qty" eval="1.0"/>
4423+ <field name="product_uom" ref="product.product_uom_unit"/>
4424+ </record>
4425+ <function name="draft_force_assign" model="stock.picking">
4426+ <value eval="[obj(ref('stock_picking_wave_out_9')).id]" model="stock.picking"/>
4427+ </function>
4428+
4429+
4430+ <record model="stock.picking" id="stock_picking_wave_out_10">
4431+ <field name="address_id" ref="base.res_partner_address_2"/>
4432+ <field name="move_type">direct</field>
4433+ <field name="name">/</field>
4434+ <field name="type">out</field>
4435+ <field name="warehouse_id" ref="warehousewave"/>
4436+ </record>
4437+ <record model="stock.move" id="stock_move_wave_out_10">
4438+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4439+ <field name="location_id" ref="stock.stock_location_customers"/>
4440+ <field name="name">product wave 10</field>
4441+ <field name="picking_id" ref="stock_picking_wave_out_10"/>
4442+ <field name="priority">1</field>
4443+ <field name="product_id" ref="product_10"/>
4444+ <field name="product_qty" eval="1.0"/>
4445+ <field name="product_uom" ref="product.product_uom_unit"/>
4446+ </record>
4447+ <function name="draft_force_assign" model="stock.picking">
4448+ <value eval="[obj(ref('stock_picking_wave_out_10')).id]" model="stock.picking"/>
4449+ </function>
4450+
4451+
4452+ <record model="stock.picking" id="stock_picking_wave_out_11">
4453+ <field name="address_id" ref="base.res_partner_address_2"/>
4454+ <field name="move_type">direct</field>
4455+ <field name="name">/</field>
4456+ <field name="type">out</field>
4457+ <field name="warehouse_id" ref="warehousewave"/>
4458+ </record>
4459+ <record model="stock.move" id="stock_move_wave_out_11">
4460+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4461+ <field name="location_id" ref="stock.stock_location_customers"/>
4462+ <field name="name">product wave 11</field>
4463+ <field name="picking_id" ref="stock_picking_wave_out_11"/>
4464+ <field name="priority">1</field>
4465+ <field name="product_id" ref="product_11"/>
4466+ <field name="product_qty" eval="1.0"/>
4467+ <field name="product_uom" ref="product.product_uom_unit"/>
4468+ </record>
4469+ <function name="draft_force_assign" model="stock.picking">
4470+ <value eval="[obj(ref('stock_picking_wave_out_11')).id]" model="stock.picking"/>
4471+ </function>
4472+
4473+
4474+ <record model="stock.picking" id="stock_picking_wave_out_12">
4475+ <field name="address_id" ref="base.res_partner_address_2"/>
4476+ <field name="move_type">direct</field>
4477+ <field name="name">/</field>
4478+ <field name="type">out</field>
4479+ <field name="warehouse_id" ref="warehousewave"/>
4480+ </record>
4481+ <record model="stock.move" id="stock_move_wave_out_12">
4482+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4483+ <field name="location_id" ref="stock.stock_location_customers"/>
4484+ <field name="name">product wave 12</field>
4485+ <field name="picking_id" ref="stock_picking_wave_out_12"/>
4486+ <field name="priority">1</field>
4487+ <field name="product_id" ref="product_12"/>
4488+ <field name="product_qty" eval="1.0"/>
4489+ <field name="product_uom" ref="product.product_uom_unit"/>
4490+ </record>
4491+ <function name="draft_force_assign" model="stock.picking">
4492+ <value eval="[obj(ref('stock_picking_wave_out_12')).id]" model="stock.picking"/>
4493+ </function>
4494+
4495+
4496+ <record model="stock.picking" id="stock_picking_wave_out_13">
4497+ <field name="address_id" ref="base.res_partner_address_2"/>
4498+ <field name="move_type">direct</field>
4499+ <field name="name">/</field>
4500+ <field name="type">out</field>
4501+ <field name="warehouse_id" ref="warehousewave"/>
4502+ </record>
4503+ <record model="stock.move" id="stock_move_wave_out_13">
4504+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4505+ <field name="location_id" ref="stock.stock_location_customers"/>
4506+ <field name="name">product wave 13</field>
4507+ <field name="picking_id" ref="stock_picking_wave_out_13"/>
4508+ <field name="priority">1</field>
4509+ <field name="product_id" ref="product_13"/>
4510+ <field name="product_qty" eval="1.0"/>
4511+ <field name="product_uom" ref="product.product_uom_unit"/>
4512+ </record>
4513+ <function name="draft_force_assign" model="stock.picking">
4514+ <value eval="[obj(ref('stock_picking_wave_out_13')).id]" model="stock.picking"/>
4515+ </function>
4516+
4517+
4518+ <record model="stock.picking" id="stock_picking_wave_out_14">
4519+ <field name="address_id" ref="base.res_partner_address_2"/>
4520+ <field name="move_type">direct</field>
4521+ <field name="name">/</field>
4522+ <field name="type">out</field>
4523+ <field name="warehouse_id" ref="warehousewave"/>
4524+ </record>
4525+ <record model="stock.move" id="stock_move_wave_out_14">
4526+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4527+ <field name="location_id" ref="stock.stock_location_customers"/>
4528+ <field name="name">product wave 14</field>
4529+ <field name="picking_id" ref="stock_picking_wave_out_14"/>
4530+ <field name="priority">1</field>
4531+ <field name="product_id" ref="product_14"/>
4532+ <field name="product_qty" eval="1.0"/>
4533+ <field name="product_uom" ref="product.product_uom_unit"/>
4534+ </record>
4535+ <function name="draft_force_assign" model="stock.picking">
4536+ <value eval="[obj(ref('stock_picking_wave_out_14')).id]" model="stock.picking"/>
4537+ </function>
4538+
4539+
4540+ <record model="stock.picking" id="stock_picking_wave_out_15">
4541+ <field name="address_id" ref="base.res_partner_address_2"/>
4542+ <field name="move_type">direct</field>
4543+ <field name="name">/</field>
4544+ <field name="type">out</field>
4545+ <field name="warehouse_id" ref="warehousewave"/>
4546+ </record>
4547+ <record model="stock.move" id="stock_move_wave_out_15">
4548+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4549+ <field name="location_id" ref="stock.stock_location_customers"/>
4550+ <field name="name">product wave 15</field>
4551+ <field name="picking_id" ref="stock_picking_wave_out_15"/>
4552+ <field name="priority">1</field>
4553+ <field name="product_id" ref="product_15"/>
4554+ <field name="product_qty" eval="1.0"/>
4555+ <field name="product_uom" ref="product.product_uom_unit"/>
4556+ </record>
4557+ <function name="draft_force_assign" model="stock.picking">
4558+ <value eval="[obj(ref('stock_picking_wave_out_15')).id]" model="stock.picking"/>
4559+ </function>
4560+
4561+
4562+ <record model="stock.picking" id="stock_picking_wave_out_16">
4563+ <field name="address_id" ref="base.res_partner_address_2"/>
4564+ <field name="move_type">direct</field>
4565+ <field name="name">/</field>
4566+ <field name="type">out</field>
4567+ <field name="warehouse_id" ref="warehousewave"/>
4568+ </record>
4569+ <record model="stock.move" id="stock_move_wave_out_16">
4570+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4571+ <field name="location_id" ref="stock.stock_location_customers"/>
4572+ <field name="name">product wave 16</field>
4573+ <field name="picking_id" ref="stock_picking_wave_out_16"/>
4574+ <field name="priority">1</field>
4575+ <field name="product_id" ref="product_16"/>
4576+ <field name="product_qty" eval="1.0"/>
4577+ <field name="product_uom" ref="product.product_uom_unit"/>
4578+ </record>
4579+ <function name="draft_force_assign" model="stock.picking">
4580+ <value eval="[obj(ref('stock_picking_wave_out_16')).id]" model="stock.picking"/>
4581+ </function>
4582+
4583+
4584+ <record model="stock.picking" id="stock_picking_wave_out_17">
4585+ <field name="address_id" ref="base.res_partner_address_2"/>
4586+ <field name="move_type">direct</field>
4587+ <field name="name">/</field>
4588+ <field name="type">out</field>
4589+ <field name="warehouse_id" ref="warehousewave"/>
4590+ </record>
4591+ <record model="stock.move" id="stock_move_wave_out_17">
4592+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4593+ <field name="location_id" ref="stock.stock_location_customers"/>
4594+ <field name="name">product wave 17</field>
4595+ <field name="picking_id" ref="stock_picking_wave_out_17"/>
4596+ <field name="priority">1</field>
4597+ <field name="product_id" ref="product_17"/>
4598+ <field name="product_qty" eval="1.0"/>
4599+ <field name="product_uom" ref="product.product_uom_unit"/>
4600+ </record>
4601+ <function name="draft_force_assign" model="stock.picking">
4602+ <value eval="[obj(ref('stock_picking_wave_out_17')).id]" model="stock.picking"/>
4603+ </function>
4604+
4605+
4606+ <record model="stock.picking" id="stock_picking_wave_out_18">
4607+ <field name="address_id" ref="base.res_partner_address_2"/>
4608+ <field name="move_type">direct</field>
4609+ <field name="name">/</field>
4610+ <field name="type">out</field>
4611+ <field name="warehouse_id" ref="warehousewave"/>
4612+ </record>
4613+ <record model="stock.move" id="stock_move_wave_out_18">
4614+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4615+ <field name="location_id" ref="stock.stock_location_customers"/>
4616+ <field name="name">product wave 18</field>
4617+ <field name="picking_id" ref="stock_picking_wave_out_18"/>
4618+ <field name="priority">1</field>
4619+ <field name="product_id" ref="product_18"/>
4620+ <field name="product_qty" eval="1.0"/>
4621+ <field name="product_uom" ref="product.product_uom_unit"/>
4622+ </record>
4623+ <function name="draft_force_assign" model="stock.picking">
4624+ <value eval="[obj(ref('stock_picking_wave_out_18')).id]" model="stock.picking"/>
4625+ </function>
4626+
4627+
4628+ <record model="stock.picking" id="stock_picking_wave_out_19">
4629+ <field name="address_id" ref="base.res_partner_address_2"/>
4630+ <field name="move_type">direct</field>
4631+ <field name="name">/</field>
4632+ <field name="type">out</field>
4633+ <field name="warehouse_id" ref="warehousewave"/>
4634+ </record>
4635+ <record model="stock.move" id="stock_move_wave_out_19">
4636+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4637+ <field name="location_id" ref="stock.stock_location_customers"/>
4638+ <field name="name">product wave 19</field>
4639+ <field name="picking_id" ref="stock_picking_wave_out_19"/>
4640+ <field name="priority">1</field>
4641+ <field name="product_id" ref="product_19"/>
4642+ <field name="product_qty" eval="1.0"/>
4643+ <field name="product_uom" ref="product.product_uom_unit"/>
4644+ </record>
4645+ <function name="draft_force_assign" model="stock.picking">
4646+ <value eval="[obj(ref('stock_picking_wave_out_19')).id]" model="stock.picking"/>
4647+ </function>
4648+
4649+
4650+ <record model="stock.picking" id="stock_picking_wave_out_20">
4651+ <field name="address_id" ref="base.res_partner_address_2"/>
4652+ <field name="move_type">direct</field>
4653+ <field name="name">/</field>
4654+ <field name="type">out</field>
4655+ <field name="warehouse_id" ref="warehousewave"/>
4656+ </record>
4657+ <record model="stock.move" id="stock_move_wave_out_20">
4658+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4659+ <field name="location_id" ref="stock.stock_location_customers"/>
4660+ <field name="name">product wave 20</field>
4661+ <field name="picking_id" ref="stock_picking_wave_out_20"/>
4662+ <field name="priority">1</field>
4663+ <field name="product_id" ref="product_20"/>
4664+ <field name="product_qty" eval="1.0"/>
4665+ <field name="product_uom" ref="product.product_uom_unit"/>
4666+ </record>
4667+ <function name="draft_force_assign" model="stock.picking">
4668+ <value eval="[obj(ref('stock_picking_wave_out_20')).id]" model="stock.picking"/>
4669+ </function>
4670+
4671+
4672+ <record model="stock.picking" id="stock_picking_wave_out_21">
4673+ <field name="address_id" ref="base.res_partner_address_2"/>
4674+ <field name="move_type">direct</field>
4675+ <field name="name">/</field>
4676+ <field name="type">out</field>
4677+ <field name="warehouse_id" ref="warehousewave"/>
4678+ </record>
4679+ <record model="stock.move" id="stock_move_wave_out_21">
4680+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4681+ <field name="location_id" ref="stock.stock_location_customers"/>
4682+ <field name="name">product wave 21</field>
4683+ <field name="picking_id" ref="stock_picking_wave_out_21"/>
4684+ <field name="priority">1</field>
4685+ <field name="product_id" ref="product_21"/>
4686+ <field name="product_qty" eval="1.0"/>
4687+ <field name="product_uom" ref="product.product_uom_unit"/>
4688+ </record>
4689+ <function name="draft_force_assign" model="stock.picking">
4690+ <value eval="[obj(ref('stock_picking_wave_out_21')).id]" model="stock.picking"/>
4691+ </function>
4692+
4693+
4694+ <record model="stock.picking" id="stock_picking_wave_out_22">
4695+ <field name="address_id" ref="base.res_partner_address_2"/>
4696+ <field name="move_type">direct</field>
4697+ <field name="name">/</field>
4698+ <field name="type">out</field>
4699+ <field name="warehouse_id" ref="warehousewave"/>
4700+ </record>
4701+ <record model="stock.move" id="stock_move_wave_out_22">
4702+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4703+ <field name="location_id" ref="stock.stock_location_customers"/>
4704+ <field name="name">product wave 22</field>
4705+ <field name="picking_id" ref="stock_picking_wave_out_22"/>
4706+ <field name="priority">1</field>
4707+ <field name="product_id" ref="product_22"/>
4708+ <field name="product_qty" eval="1.0"/>
4709+ <field name="product_uom" ref="product.product_uom_unit"/>
4710+ </record>
4711+ <function name="draft_force_assign" model="stock.picking">
4712+ <value eval="[obj(ref('stock_picking_wave_out_22')).id]" model="stock.picking"/>
4713+ </function>
4714+
4715+
4716+ <record model="stock.picking" id="stock_picking_wave_out_23">
4717+ <field name="address_id" ref="base.res_partner_address_2"/>
4718+ <field name="move_type">direct</field>
4719+ <field name="name">/</field>
4720+ <field name="type">out</field>
4721+ <field name="warehouse_id" ref="warehousewave"/>
4722+ </record>
4723+ <record model="stock.move" id="stock_move_wave_out_23">
4724+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4725+ <field name="location_id" ref="stock.stock_location_customers"/>
4726+ <field name="name">product wave 23</field>
4727+ <field name="picking_id" ref="stock_picking_wave_out_23"/>
4728+ <field name="priority">1</field>
4729+ <field name="product_id" ref="product_23"/>
4730+ <field name="product_qty" eval="1.0"/>
4731+ <field name="product_uom" ref="product.product_uom_unit"/>
4732+ </record>
4733+ <function name="draft_force_assign" model="stock.picking">
4734+ <value eval="[obj(ref('stock_picking_wave_out_23')).id]" model="stock.picking"/>
4735+ </function>
4736+
4737+
4738+ <record model="stock.picking" id="stock_picking_wave_out_24">
4739+ <field name="address_id" ref="base.res_partner_address_2"/>
4740+ <field name="move_type">direct</field>
4741+ <field name="name">/</field>
4742+ <field name="type">out</field>
4743+ <field name="warehouse_id" ref="warehousewave"/>
4744+ </record>
4745+ <record model="stock.move" id="stock_move_wave_out_24">
4746+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4747+ <field name="location_id" ref="stock.stock_location_customers"/>
4748+ <field name="name">product wave 24</field>
4749+ <field name="picking_id" ref="stock_picking_wave_out_24"/>
4750+ <field name="priority">1</field>
4751+ <field name="product_id" ref="product_24"/>
4752+ <field name="product_qty" eval="1.0"/>
4753+ <field name="product_uom" ref="product.product_uom_unit"/>
4754+ </record>
4755+ <function name="draft_force_assign" model="stock.picking">
4756+ <value eval="[obj(ref('stock_picking_wave_out_24')).id]" model="stock.picking"/>
4757+ </function>
4758+
4759+
4760+ <record model="stock.picking" id="stock_picking_wave_out_25">
4761+ <field name="address_id" ref="base.res_partner_address_2"/>
4762+ <field name="move_type">direct</field>
4763+ <field name="name">/</field>
4764+ <field name="type">out</field>
4765+ <field name="warehouse_id" ref="warehousewave"/>
4766+ </record>
4767+ <record model="stock.move" id="stock_move_wave_out_25">
4768+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4769+ <field name="location_id" ref="stock.stock_location_customers"/>
4770+ <field name="name">product wave 25</field>
4771+ <field name="picking_id" ref="stock_picking_wave_out_25"/>
4772+ <field name="priority">1</field>
4773+ <field name="product_id" ref="product_25"/>
4774+ <field name="product_qty" eval="1.0"/>
4775+ <field name="product_uom" ref="product.product_uom_unit"/>
4776+ </record>
4777+ <function name="draft_force_assign" model="stock.picking">
4778+ <value eval="[obj(ref('stock_picking_wave_out_25')).id]" model="stock.picking"/>
4779+ </function>
4780+
4781+
4782+ <record model="stock.picking" id="stock_picking_wave_out_26">
4783+ <field name="address_id" ref="base.res_partner_address_2"/>
4784+ <field name="move_type">direct</field>
4785+ <field name="name">/</field>
4786+ <field name="type">out</field>
4787+ <field name="warehouse_id" ref="warehousewave"/>
4788+ </record>
4789+ <record model="stock.move" id="stock_move_wave_out_26">
4790+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4791+ <field name="location_id" ref="stock.stock_location_customers"/>
4792+ <field name="name">product wave 26</field>
4793+ <field name="picking_id" ref="stock_picking_wave_out_26"/>
4794+ <field name="priority">1</field>
4795+ <field name="product_id" ref="product_26"/>
4796+ <field name="product_qty" eval="1.0"/>
4797+ <field name="product_uom" ref="product.product_uom_unit"/>
4798+ </record>
4799+ <function name="draft_force_assign" model="stock.picking">
4800+ <value eval="[obj(ref('stock_picking_wave_out_26')).id]" model="stock.picking"/>
4801+ </function>
4802+
4803+
4804+ <record model="stock.picking" id="stock_picking_wave_out_27">
4805+ <field name="address_id" ref="base.res_partner_address_2"/>
4806+ <field name="move_type">direct</field>
4807+ <field name="name">/</field>
4808+ <field name="type">out</field>
4809+ <field name="warehouse_id" ref="warehousewave"/>
4810+ </record>
4811+ <record model="stock.move" id="stock_move_wave_out_27">
4812+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4813+ <field name="location_id" ref="stock.stock_location_customers"/>
4814+ <field name="name">product wave 27</field>
4815+ <field name="picking_id" ref="stock_picking_wave_out_27"/>
4816+ <field name="priority">1</field>
4817+ <field name="product_id" ref="product_27"/>
4818+ <field name="product_qty" eval="1.0"/>
4819+ <field name="product_uom" ref="product.product_uom_unit"/>
4820+ </record>
4821+ <function name="draft_force_assign" model="stock.picking">
4822+ <value eval="[obj(ref('stock_picking_wave_out_27')).id]" model="stock.picking"/>
4823+ </function>
4824+
4825+
4826+ <record model="stock.picking" id="stock_picking_wave_out_28">
4827+ <field name="address_id" ref="base.res_partner_address_2"/>
4828+ <field name="move_type">direct</field>
4829+ <field name="name">/</field>
4830+ <field name="type">out</field>
4831+ <field name="warehouse_id" ref="warehousewave"/>
4832+ </record>
4833+ <record model="stock.move" id="stock_move_wave_out_28">
4834+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4835+ <field name="location_id" ref="stock.stock_location_customers"/>
4836+ <field name="name">product wave 28</field>
4837+ <field name="picking_id" ref="stock_picking_wave_out_28"/>
4838+ <field name="priority">1</field>
4839+ <field name="product_id" ref="product_28"/>
4840+ <field name="product_qty" eval="1.0"/>
4841+ <field name="product_uom" ref="product.product_uom_unit"/>
4842+ </record>
4843+ <function name="draft_force_assign" model="stock.picking">
4844+ <value eval="[obj(ref('stock_picking_wave_out_28')).id]" model="stock.picking"/>
4845+ </function>
4846+
4847+
4848+ <record model="stock.picking" id="stock_picking_wave_out_29">
4849+ <field name="address_id" ref="base.res_partner_address_2"/>
4850+ <field name="move_type">direct</field>
4851+ <field name="name">/</field>
4852+ <field name="type">out</field>
4853+ <field name="warehouse_id" ref="warehousewave"/>
4854+ </record>
4855+ <record model="stock.move" id="stock_move_wave_out_29">
4856+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4857+ <field name="location_id" ref="stock.stock_location_customers"/>
4858+ <field name="name">product wave 29</field>
4859+ <field name="picking_id" ref="stock_picking_wave_out_29"/>
4860+ <field name="priority">1</field>
4861+ <field name="product_id" ref="product_29"/>
4862+ <field name="product_qty" eval="1.0"/>
4863+ <field name="product_uom" ref="product.product_uom_unit"/>
4864+ </record>
4865+ <function name="draft_force_assign" model="stock.picking">
4866+ <value eval="[obj(ref('stock_picking_wave_out_29')).id]" model="stock.picking"/>
4867+ </function>
4868+
4869+
4870+ <record model="stock.picking" id="stock_picking_wave_out_30">
4871+ <field name="address_id" ref="base.res_partner_address_2"/>
4872+ <field name="move_type">direct</field>
4873+ <field name="name">/</field>
4874+ <field name="type">out</field>
4875+ <field name="warehouse_id" ref="warehousewave"/>
4876+ </record>
4877+ <record model="stock.move" id="stock_move_wave_out_30">
4878+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4879+ <field name="location_id" ref="stock.stock_location_customers"/>
4880+ <field name="name">product wave 30</field>
4881+ <field name="picking_id" ref="stock_picking_wave_out_30"/>
4882+ <field name="priority">1</field>
4883+ <field name="product_id" ref="product_30"/>
4884+ <field name="product_qty" eval="1.0"/>
4885+ <field name="product_uom" ref="product.product_uom_unit"/>
4886+ </record>
4887+ <function name="draft_force_assign" model="stock.picking">
4888+ <value eval="[obj(ref('stock_picking_wave_out_30')).id]" model="stock.picking"/>
4889+ </function>
4890+
4891+
4892+ <record model="stock.picking" id="stock_picking_wave_out_31">
4893+ <field name="address_id" ref="base.res_partner_address_2"/>
4894+ <field name="move_type">direct</field>
4895+ <field name="name">/</field>
4896+ <field name="type">out</field>
4897+ <field name="warehouse_id" ref="warehousewave"/>
4898+ </record>
4899+ <record model="stock.move" id="stock_move_wave_out_31">
4900+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4901+ <field name="location_id" ref="stock.stock_location_customers"/>
4902+ <field name="name">product wave 31</field>
4903+ <field name="picking_id" ref="stock_picking_wave_out_31"/>
4904+ <field name="priority">1</field>
4905+ <field name="product_id" ref="product_31"/>
4906+ <field name="product_qty" eval="1.0"/>
4907+ <field name="product_uom" ref="product.product_uom_unit"/>
4908+ </record>
4909+ <function name="draft_force_assign" model="stock.picking">
4910+ <value eval="[obj(ref('stock_picking_wave_out_31')).id]" model="stock.picking"/>
4911+ </function>
4912+
4913+
4914+ <record model="stock.picking" id="stock_picking_wave_out_32">
4915+ <field name="address_id" ref="base.res_partner_address_2"/>
4916+ <field name="move_type">direct</field>
4917+ <field name="name">/</field>
4918+ <field name="type">out</field>
4919+ <field name="warehouse_id" ref="warehousewave"/>
4920+ </record>
4921+ <record model="stock.move" id="stock_move_wave_out_32">
4922+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4923+ <field name="location_id" ref="stock.stock_location_customers"/>
4924+ <field name="name">product wave 32</field>
4925+ <field name="picking_id" ref="stock_picking_wave_out_32"/>
4926+ <field name="priority">1</field>
4927+ <field name="product_id" ref="product_32"/>
4928+ <field name="product_qty" eval="1.0"/>
4929+ <field name="product_uom" ref="product.product_uom_unit"/>
4930+ </record>
4931+ <function name="draft_force_assign" model="stock.picking">
4932+ <value eval="[obj(ref('stock_picking_wave_out_32')).id]" model="stock.picking"/>
4933+ </function>
4934+
4935+
4936+ <record model="stock.picking" id="stock_picking_wave_out_33">
4937+ <field name="address_id" ref="base.res_partner_address_2"/>
4938+ <field name="move_type">direct</field>
4939+ <field name="name">/</field>
4940+ <field name="type">out</field>
4941+ <field name="warehouse_id" ref="warehousewave"/>
4942+ </record>
4943+ <record model="stock.move" id="stock_move_wave_out_33">
4944+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4945+ <field name="location_id" ref="stock.stock_location_customers"/>
4946+ <field name="name">product wave 33</field>
4947+ <field name="picking_id" ref="stock_picking_wave_out_33"/>
4948+ <field name="priority">1</field>
4949+ <field name="product_id" ref="product_33"/>
4950+ <field name="product_qty" eval="1.0"/>
4951+ <field name="product_uom" ref="product.product_uom_unit"/>
4952+ </record>
4953+ <function name="draft_force_assign" model="stock.picking">
4954+ <value eval="[obj(ref('stock_picking_wave_out_33')).id]" model="stock.picking"/>
4955+ </function>
4956+
4957+
4958+ <record model="stock.picking" id="stock_picking_wave_out_34">
4959+ <field name="address_id" ref="base.res_partner_address_2"/>
4960+ <field name="move_type">direct</field>
4961+ <field name="name">/</field>
4962+ <field name="type">out</field>
4963+ <field name="warehouse_id" ref="warehousewave"/>
4964+ </record>
4965+ <record model="stock.move" id="stock_move_wave_out_34">
4966+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4967+ <field name="location_id" ref="stock.stock_location_customers"/>
4968+ <field name="name">product wave 34</field>
4969+ <field name="picking_id" ref="stock_picking_wave_out_34"/>
4970+ <field name="priority">1</field>
4971+ <field name="product_id" ref="product_34"/>
4972+ <field name="product_qty" eval="1.0"/>
4973+ <field name="product_uom" ref="product.product_uom_unit"/>
4974+ </record>
4975+ <function name="draft_force_assign" model="stock.picking">
4976+ <value eval="[obj(ref('stock_picking_wave_out_34')).id]" model="stock.picking"/>
4977+ </function>
4978+
4979+
4980+ <record model="stock.picking" id="stock_picking_wave_out_35">
4981+ <field name="address_id" ref="base.res_partner_address_2"/>
4982+ <field name="move_type">direct</field>
4983+ <field name="name">/</field>
4984+ <field name="type">out</field>
4985+ <field name="warehouse_id" ref="warehousewave"/>
4986+ </record>
4987+ <record model="stock.move" id="stock_move_wave_out_35">
4988+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
4989+ <field name="location_id" ref="stock.stock_location_customers"/>
4990+ <field name="name">product wave 35</field>
4991+ <field name="picking_id" ref="stock_picking_wave_out_35"/>
4992+ <field name="priority">1</field>
4993+ <field name="product_id" ref="product_35"/>
4994+ <field name="product_qty" eval="1.0"/>
4995+ <field name="product_uom" ref="product.product_uom_unit"/>
4996+ </record>
4997+ <function name="draft_force_assign" model="stock.picking">
4998+ <value eval="[obj(ref('stock_picking_wave_out_35')).id]" model="stock.picking"/>
4999+ </function>
5000+
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches