Merge lp:~syleam/wms/crossdock into lp:wms

Proposed by Christophe CHAUVET
Status: Merged
Merged at revision: 132
Proposed branch: lp:~syleam/wms/crossdock
Merge into: lp:wms
Diff against target: 2123 lines (+1561/-66) (has conflicts)
25 files modified
wms/__terp__.py (+10/-0)
wms/demo/picking_crossdock_one.xml (+126/-0)
wms/demo/picking_fixed_location.xml (+136/-0)
wms/demo/picking_move_product_other_location.xml (+111/-0)
wms/demo/product.xml (+66/-0)
wms/demo/split_line_available.xml (+103/-0)
wms/object/move.py (+44/-6)
wms/object/picking.py (+175/-0)
wms/object/report_stock.py (+1/-1)
wms/security/groups.xml (+4/-0)
wms/view/move.xml (+3/-0)
wms/view/picking.xml (+61/-2)
wms/view/warehouse.xml (+1/-1)
wms_board/view/picking.xml (+65/-0)
wms_location/__terp__.py (+9/-6)
wms_location/data/location.xml (+77/-0)
wms_location/demo/location.xml (+113/-29)
wms_location/demo/partner.xml (+32/-0)
wms_location/i18n/fr_FR.po (+112/-11)
wms_location/i18n/wms_location.pot (+102/-9)
wms_location/object/__init__.py (+1/-0)
wms_location/object/location.py (+16/-1)
wms_location/object/product.py (+86/-0)
wms_location/security/ir.model.access.csv (+1/-0)
wms_location/view/product.xml (+106/-0)
Text conflict in wms/object/picking.py
Text conflict in wms/view/picking.xml
To merge this branch: bzr merge lp:~syleam/wms/crossdock
Reviewer Review Type Date Requested Status
Christophe CHAUVET Needs Fixing
Review via email: mp+46990@code.launchpad.net

Commit message

merge

Description of the change

Add crossdock scenario

To post a comment you must log in.
Revision history for this message
Christophe CHAUVET (christophe-chauvet) :
review: Approve
Revision history for this message
Christophe CHAUVET (christophe-chauvet) :
review: Needs Fixing
lp:~syleam/wms/crossdock updated
132. By Christophe CHAUVET

merge

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'wms/__terp__.py'
2--- wms/__terp__.py 2011-01-13 09:28:07 +0000
3+++ wms/__terp__.py 2011-01-20 22:41:56 +0000
4@@ -38,6 +38,11 @@
5 - dimension and weight can be store on UL
6
7 Works only in >= 5.0.12, or install user_preferences before
8+
9+ *************************************************************
10+ ** THIS MODULE IS IN CONFLICT WITH stock_location MODULE ****
11+ *************************************************************
12+
13 """,
14 'author': 'SYLEAM',
15 'website': 'http://www.syleam.fr/',
16@@ -75,6 +80,11 @@
17 'demo_xml': [
18 'demo/warehouse.xml',
19 'demo/users.xml',
20+ 'demo/product.xml',
21+ 'demo/picking_fixed_location.xml',
22+ 'demo/picking_move_product_other_location.xml',
23+ 'demo/split_line_available.xml',
24+ 'demo/picking_crossdock_one.xml',
25 ],
26 'installable': True,
27 'active': False,
28
29=== added file 'wms/demo/picking_crossdock_one.xml'
30--- wms/demo/picking_crossdock_one.xml 1970-01-01 00:00:00 +0000
31+++ wms/demo/picking_crossdock_one.xml 2011-01-20 22:41:56 +0000
32@@ -0,0 +1,126 @@
33+<?xml version="1.0" encoding="UTF-8"?>
34+<openerp>
35+ <data>
36+ ##############################################################################
37+ #
38+ # wms module for OpenERP, WMS Extended for Open ERP
39+ # Copyright (C) 2011 SYLEAM ([http://www.syleam.fr/])
40+ # Christophe CHAUVET [christophe.chauvet@syleam.fr]
41+ #
42+ # This file is a part of wms
43+ #
44+ # wms is free software: you can redistribute it and/or modify
45+ # it under the terms of the GNU General Public License as published by
46+ # the Free Software Foundation, either version 3 of the License, or
47+ # (at your option) any later version.
48+ #
49+ # wms is distributed in the hope that it will be useful,
50+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
51+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
52+ # GNU General Public License for more details.
53+ #
54+ # You should have received a copy of the GNU General Public License
55+ # along with this program. If not, see [http://www.gnu.org/licenses/].
56+ #
57+ ##############################################################################
58+
59+ <!-- ************************************************************** -->
60+ <!-- ** Change the type of location on product HDD2 *************** -->
61+ <!-- ************************************************************** -->
62+ <record id="product.product_product_hdd2" model="product.product">
63+ <field name="location_type">crossdock</field>
64+ </record>
65+
66+ <assert id="product.product_product_hdd2" model="product.product" severity="error"
67+ string="Product HDD2 must be in crossdoc locaiton type">
68+ <test expr="location_type">crossdock</test>
69+ </assert>
70+
71+ <record model="product.location" id="product_location_2">
72+ <field name="auto">transparent</field>
73+ <field name="delay" eval="1"/>
74+ <field name="location_dest_id" ref="wms_location.location_stock_b02"/>
75+ <field name="location_from_id" ref="stock.stock_location_stock"/>
76+ <field name="name">put in location</field>
77+ <field name="product_id" ref="product.product_product_hdd2"/>
78+ </record>
79+
80+ <!-- ************************************************************** -->
81+ <!-- ** Add new receipt order with HDD2 product ******************* -->
82+ <!-- ************************************************************** -->
83+ <record model="stock.picking" id="stock_picking_new_hdd2">
84+ <field name="address_id" ref="base.res_partner_address_wong"/>
85+ <field name="move_type">direct</field>
86+ <field name="origin">MAXHDD2</field>
87+ <field name="type">in</field>
88+ <field name="warehouse_id" ref="stock.warehouse0"/>
89+ </record>
90+ <record model="stock.move" id="stock_move_hdd2_1">
91+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
92+ <field name="location_id" ref="stock.stock_location_suppliers"/>
93+ <field name="name">[HDD2] HDD Seagate 7200.8 120GB</field>
94+ <field name="picking_id" ref="stock_picking_new_hdd2"/>
95+ <field name="product_id" ref="product.product_product_hdd2"/>
96+ <field name="product_qty" eval="50.0"/>
97+ <field name="product_uom" ref="product.product_uom_unit"/>
98+ </record>
99+
100+ <function name="draft_force_assign" model="stock.picking">
101+ <value eval="[obj(ref('stock_picking_new_hdd2')).id]" model="stock.picking"/>
102+ </function>
103+
104+ <assert id="stock_picking_new_hdd2" model="stock.picking"
105+ string="This picking must be in confirmed!">
106+ <test expr="state">confirmed</test>
107+ <test expr="len(move_lines) == 1"/>
108+ </assert>
109+
110+ <assert id="stock_move_hdd2_1" model="stock.move" severity="error"
111+ string="The product HDD2 have B02 location affected and confirmed">
112+ <test expr="location_dest_id.code">B02</test>
113+ <test expr="state">confirmed</test>
114+ </assert>
115+
116+ <function name="force_assign" model="stock.picking">
117+ <value eval="[obj(ref('stock_picking_new_hdd2')).id]" model="stock.picking"/>
118+ </function>
119+
120+ <workflow action="button_done" model="stock.picking" ref="stock_picking_new_hdd2"/>
121+
122+ <assert id="stock_picking_new_hdd2" model="stock.picking"
123+ string="This picking must be in done and have 2 lines!">
124+ <test expr="state">done</test>
125+ <test expr="len(move_lines) == 2"/>
126+ </assert>
127+
128+ <assert id="stock_move_hdd2_1" model="stock.move"
129+ string="This line must have crossdock location type!">
130+ <test expr="location_dest_id.usage">crossdock</test>
131+ <test expr="product_qty == 12.0"/>
132+ </assert>
133+
134+ <!-- Check the related picking, and verify the 2 lines is assigned -->
135+ <assert id="picking_out_split_1" model="stock.picking"
136+ string="This picking must be available">
137+ <test expr="state">assigned</test>
138+ <test expr="len(move_lines) == 2"/>
139+ </assert>
140+
141+ <assert id="picking_out_split_1" model="stock.picking"
142+ string="This 2 lines must have been assigned">
143+ <test expr="move_lines[0].state == 'assigned'"/>
144+ <test expr="move_lines[0].product_qty == 10.0"/>
145+ <test expr="move_lines[1].state == 'assigned'"/>
146+ <test expr="move_lines[1].product_qty == 12.0"/>
147+ </assert>
148+
149+ <workflow action="button_done" model="stock.picking" ref="picking_out_split_1"/>
150+
151+ <assert id="picking_out_split_1" model="stock.picking"
152+ string="This picking must be done!">
153+ <test expr="state">done</test>
154+ </assert>
155+
156+
157+ </data>
158+</openerp>
159
160=== added file 'wms/demo/picking_fixed_location.xml'
161--- wms/demo/picking_fixed_location.xml 1970-01-01 00:00:00 +0000
162+++ wms/demo/picking_fixed_location.xml 2011-01-20 22:41:56 +0000
163@@ -0,0 +1,136 @@
164+<?xml version="1.0" encoding="UTF-8"?>
165+<openerp>
166+ <data>
167+ ##############################################################################
168+ #
169+ # wms module for OpenERP, WMS Extended for Open ERP
170+ # Copyright (C) 2011 SYLEAM ([http://www.syleam.fr/])
171+ # Christophe CHAUVET [christophe.chauvet@syleam.fr]
172+ #
173+ # This file is a part of wms
174+ #
175+ # wms is free software: you can redistribute it and/or modify
176+ # it under the terms of the GNU General Public License as published by
177+ # the Free Software Foundation, either version 3 of the License, or
178+ # (at your option) any later version.
179+ #
180+ # wms is distributed in the hope that it will be useful,
181+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
182+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
183+ # GNU General Public License for more details.
184+ #
185+ # You should have received a copy of the GNU General Public License
186+ # along with this program. If not, see [http://www.gnu.org/licenses/].
187+ #
188+ ##############################################################################
189+
190+ <!-- ************************************************************** -->
191+ <!-- ** Add receipt order ***************************************** -->
192+ <!-- ************************************************************** -->
193+
194+ <record model="stock.picking" id="stock_picking_9">
195+ <field name="address_id" ref="base.res_partner_address_2"/>
196+ <field name="move_type">direct</field>
197+ <field name="name">/</field>
198+ <field name="origin">CART1234</field>
199+ <field name="type">in</field>
200+ <field name="warehouse_id" ref="stock.warehouse0"/>
201+ </record>
202+ <record model="stock.move" id="stock_move_23">
203+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
204+ <field name="location_id" ref="stock.stock_location_suppliers"/>
205+ <field name="name">[TRACKP] Trackpad</field>
206+ <field name="picking_id" ref="stock_picking_9"/>
207+ <field name="priority">1</field>
208+ <field name="product_id" ref="wms.product_trackpad"/>
209+ <field name="product_qty" eval="2.0"/>
210+ <field name="product_uom" ref="product.product_uom_unit"/>
211+ </record>
212+ <record model="stock.move" id="stock_move_24">
213+ <field name="comment">Preventive stock</field>
214+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
215+ <field name="location_id" ref="stock.stock_location_suppliers"/>
216+ <field name="name">[HDD3] HDD Seagate 7200.8 160GB</field>
217+ <field name="picking_id" ref="stock_picking_9"/>
218+ <field name="priority">1</field>
219+ <field name="product_id" ref="product.product_product_hdd3"/>
220+ <field name="product_qty" eval="5.0"/>
221+ <field name="product_uom" ref="product.product_uom_unit"/>
222+ </record>
223+
224+ <!-- ************************************************************** -->
225+ <!-- ** Add picking order ***************************************** -->
226+ <!-- ************************************************************** -->
227+ <record model="stock.picking" id="stock_picking_11">
228+ <field name="address_id" ref="base.res_partner_address_11"/>
229+ <field name="move_type">direct</field>
230+ <field name="name">/</field>
231+ <field name="product_id" ref="wms.product_trackpad"/>
232+ <field name="type">out</field>
233+ <field name="warehouse_id" ref="stock.warehouse0"/>
234+ </record>
235+ <record model="stock.move" id="stock_move_27">
236+ <field name="location_dest_id" ref="stock.stock_location_customers"/>
237+ <field name="location_id" ref="stock.stock_location_stock"/>
238+ <field name="name">[TRACKP] Trackpad</field>
239+ <field name="picking_id" ref="stock_picking_11"/>
240+ <field name="priority">1</field>
241+ <field name="product_id" ref="wms.product_trackpad"/>
242+ <field name="product_qty" eval="1.0"/>
243+ <field name="product_uom" ref="product.product_uom_unit"/>
244+ </record>
245+ <record model="stock.move" id="stock_move_28">
246+ <field name="location_dest_id" ref="stock.stock_location_customers"/>
247+ <field name="location_id" ref="stock.stock_location_stock"/>
248+ <field name="name">[RAM512] DDR 512MB PC400</field>
249+ <field name="picking_id" ref="stock_picking_11"/>
250+ <field name="priority">1</field>
251+ <field name="product_id" ref="product.product_product_ram512"/>
252+ <field name="product_qty" eval="5.0"/>
253+ <field name="product_uom" ref="product.product_uom_unit"/>
254+ </record>
255+
256+
257+ <!-- Confirm the receipt order -->
258+ <function name="draft_force_assign" model="stock.picking">
259+ <value eval="[obj(ref('stock_picking_9')).id]" model="stock.picking"/>
260+ </function>
261+
262+ <!-- The product Trackpad have a fixed location and confirmed ! -->
263+ <assert id="stock_move_23" model="stock.move" severity="warn" string="The product Trackpad have A01 location affected and confirmed">
264+ <test expr="location_dest_id.code">A01</test>
265+ <test expr="state">confirmed</test>
266+ </assert>
267+
268+ <!-- Force the availability or the recipt order -->
269+ <function name="force_assign" model="stock.picking">
270+ <value eval="[obj(ref('stock_picking_9')).id]" model="stock.picking"/>
271+ </function>
272+
273+ <assert id="stock_picking_9" model="stock.picking" severity="error" string="Picking must be in available state!">
274+ <test expr="state">assigned</test>
275+ </assert>
276+
277+ <!-- We confirm all move -->
278+ <workflow action="button_done" model="stock.picking" ref="stock_picking_9"/>
279+
280+ <!-- The receipt order must be done -->
281+ <assert id="stock_picking_9" model="stock.picking" severity="error" string="Picking must be in available state!">
282+ <test expr="state">done</test>
283+ </assert>
284+
285+ <assert id="wms.product_trackpad" model="product.product" severity="error" string="The virtual stock of Trackpad must be to 2.0">
286+ <test expr="virtual_available == 2.0"/>
287+ </assert>
288+
289+ <!-- Confirm the picking out -->
290+ <function name="draft_force_assign" model="stock.picking">
291+ <value eval="[obj(ref('stock_picking_11')).id]" model="stock.picking"/>
292+ </function>
293+
294+ <assert id="wms.product_trackpad" model="product.product" severity="error" string="The virtual stock of Trackpad must be to 2.0">
295+ <test expr="virtual_available == 1.0"/>
296+ </assert>
297+
298+ </data>
299+</openerp>
300
301=== added file 'wms/demo/picking_move_product_other_location.xml'
302--- wms/demo/picking_move_product_other_location.xml 1970-01-01 00:00:00 +0000
303+++ wms/demo/picking_move_product_other_location.xml 2011-01-20 22:41:56 +0000
304@@ -0,0 +1,111 @@
305+<?xml version="1.0" encoding="UTF-8"?>
306+<openerp>
307+ <data>
308+ ##############################################################################
309+ #
310+ # wms module for OpenERP, WMS Extended for Open ERP
311+ # Copyright (C) 2011 SYLEAM ([http://www.syleam.fr/])
312+ # Christophe CHAUVET [christophe.chauvet@syleam.fr]
313+ #
314+ # This file is a part of wms
315+ #
316+ # wms is free software: you can redistribute it and/or modify
317+ # it under the terms of the GNU General Public License as published by
318+ # the Free Software Foundation, either version 3 of the License, or
319+ # (at your option) any later version.
320+ #
321+ # wms is distributed in the hope that it will be useful,
322+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
323+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
324+ # GNU General Public License for more details.
325+ #
326+ # You should have received a copy of the GNU General Public License
327+ # along with this program. If not, see [http://www.gnu.org/licenses/].
328+ #
329+ ##############################################################################
330+
331+ <record model="product.product" id="product_magic_mouse">
332+ <field name="categ_id" ref="product.product_category_accessories"/>
333+ <field name="default_code">MAGICMO</field>
334+ <field name="list_price" eval="50.0"/>
335+ <field name="location_type">fixed</field>
336+ <field name="mes_type">fixed</field>
337+ <field name="name">Magic Mouse</field>
338+ <field name="property_stock_inventory" ref="stock.location_inventory"/>
339+ <field name="property_stock_procurement" ref="stock.location_procurement"/>
340+ <field name="property_stock_production" ref="stock.location_production"/>
341+ <field name="purchase_ok" eval="True"/>
342+ <field name="sale_delay" eval="10.0"/>
343+ <field name="sale_ok" eval="True"/>
344+ <field name="standard_price" eval="11.0"/>
345+ <field name="uom_id" ref="product.product_uom_unit"/>
346+ <field name="uom_po_id" ref="product.product_uom_unit"/>
347+ </record>
348+ <record model="product.location" id="product_location_2">
349+ <field name="auto">transparent</field>
350+ <field name="delay" eval="1"/>
351+ <field name="location_dest_id" ref="wms_location.location_stock_b01"/>
352+ <field name="location_from_id" ref="stock.stock_location_stock"/>
353+ <field name="name">put in location</field>
354+ <field name="product_id" ref="product_magic_mouse"/>
355+ </record>
356+
357+ <record model="stock.picking" id="picking_in_fixed_b01">
358+ <field name="address_id" ref="base.res_partner_address_7"/>
359+ <field name="invoice_state">none</field>
360+ <field name="move_type">direct</field>
361+ <field name="name">PACK3</field>
362+ <field name="state">draft</field>
363+ <field name="type">in</field>
364+ <field name="warehouse_id" ref="stock.warehouse0"/>
365+ </record>
366+ <record model="stock.move" id="stock_move_21">
367+ <field name="location_dest_id" ref="stock.stock_location_stock"/>
368+ <field name="location_id" ref="stock.stock_location_suppliers"/>
369+ <field name="name">[MAGICMO] Magic Mouse</field>
370+ <field name="picking_id" ref="picking_in_fixed_b01"/>
371+ <field name="priority">1</field>
372+ <field name="product_id" ref="product_magic_mouse"/>
373+ <field name="product_qty" eval="20.0"/>
374+ <field name="product_uom" ref="product.product_uom_unit"/>
375+ </record>
376+
377+ <assert id="wms.product_magic_mouse" model="product.product" severity="error" string="The virtual stock of Magic Mouse must be empty (qty=0.0)">
378+ <test expr="virtual_available == 0.0"/>
379+ </assert>
380+
381+ <!-- Confirm the receipt order -->
382+ <function name="draft_force_assign" model="stock.picking">
383+ <value eval="[obj(ref('picking_in_fixed_b01')).id]" model="stock.picking"/>
384+ </function>
385+
386+ <assert id="wms.product_magic_mouse" model="product.product" severity="error" string="The virtual stock of Magic Mouse must be equal to 2.0">
387+ <test expr="virtual_available == 20.0"/>
388+ </assert>
389+
390+ <assert id="wms.product_magic_mouse" model="product.product" severity="error" string="The available stock of Magic Mouse must be equal to 0.0">
391+ <test expr="qty_available == 0.0"/>
392+ </assert>
393+
394+ <function name="force_assign" model="stock.picking">
395+ <value eval="[obj(ref('picking_in_fixed_b01')).id]" model="stock.picking"/>
396+ </function>
397+
398+ <assert id="picking_in_fixed_b01" model="stock.picking" severity="error" string="Picking must be in available state!">
399+ <test expr="state">assigned</test>
400+ </assert>
401+
402+ <!-- We confirm all move -->
403+ <workflow action="button_done" model="stock.picking" ref="picking_in_fixed_b01"/>
404+
405+ <!-- The receipt order must be done -->
406+ <assert id="picking_in_fixed_b01" model="stock.picking" severity="error" string="Picking must be in available state!">
407+ <test expr="state">done</test>
408+ </assert>
409+
410+ <assert id="wms.product_magic_mouse" model="product.product" severity="error" string="The available stock of Magic Mouse must be equal to 0.0">
411+ <test expr="qty_available == 20.0"/>
412+ </assert>
413+
414+ </data>
415+</openerp>
416
417=== added file 'wms/demo/product.xml'
418--- wms/demo/product.xml 1970-01-01 00:00:00 +0000
419+++ wms/demo/product.xml 2011-01-20 22:41:56 +0000
420@@ -0,0 +1,66 @@
421+<?xml version="1.0" encoding="UTF-8"?>
422+<openerp>
423+ <data>
424+ ##############################################################################
425+ #
426+ # wms module for OpenERP, WMS Extended for Open ERP
427+ # Copyright (C) 2011 SYLEAM ([http://www.syleam.fr/])
428+ # Christophe CHAUVET [christophe.chauvet@syleam.fr]
429+ #
430+ # This file is a part of wms
431+ #
432+ # wms is free software: you can redistribute it and/or modify
433+ # it under the terms of the GNU General Public License as published by
434+ # the Free Software Foundation, either version 3 of the License, or
435+ # (at your option) any later version.
436+ #
437+ # wms is distributed in the hope that it will be useful,
438+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
439+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
440+ # GNU General Public License for more details.
441+ #
442+ # You should have received a copy of the GNU General Public License
443+ # along with this program. If not, see [http://www.gnu.org/licenses/].
444+ #
445+ ##############################################################################
446+
447+ <record model="product.product" id="product_trackpad">
448+ <field name="name">Trackpad</field>
449+ <field name="code">TRACKP</field>
450+ <field name="default_code">TRACKP</field>
451+ <field name="property_stock_procurement" ref="stock.location_procurement"/>
452+ <field name="supply_method">buy</field>
453+ <field name="list_price" eval="25.0"/>
454+ <field name="sale_ok" eval="True"/>
455+ <field name="ean13">3603360011852</field>
456+ <field name="standard_price" eval="12.0"/>
457+ <field name="uom_id" ref="product.product_uom_unit"/>
458+ <field name="uom_po_id" ref="product.product_uom_unit"/>
459+ <field name="cost_method">standard</field>
460+ <field name="uos_coeff" eval="1.0"/>
461+ <field name="procure_method">make_to_stock</field>
462+ <field name="seller_delay" eval="1"/>
463+ <field name="purchase_ok" eval="True"/>
464+ <field name="produce_delay" eval="1.0"/>
465+ <field name="type">product</field>
466+ <field name="property_stock_production" ref="stock.location_production"/>
467+ <field name="active" eval="True"/>
468+ <field name="property_stock_inventory" ref="stock.location_inventory"/>
469+ <field name="location_type">crossdock</field>
470+ <field name="sale_delay" eval="7.0"/>
471+ <field name="categ_id" ref="product.product_category_3"/>
472+ <field name="warehouse_ids" eval="[(6,0,[ref('stock.warehouse0')])]"/>
473+ <field name="price_margin" eval="1.0"/>
474+ </record>
475+
476+ <record model="product.location" id="product_location_2">
477+ <field name="auto">transparent</field>
478+ <field name="delay" eval="1"/>
479+ <field name="location_dest_id" ref="wms_location.location_stock_a01"/>
480+ <field name="location_from_id" ref="stock.stock_location_stock"/>
481+ <field name="name">put in stock</field>
482+ <field name="product_id" ref="wms.product_trackpad"/>
483+ </record>
484+
485+ </data>
486+</openerp>
487
488=== added file 'wms/demo/split_line_available.xml'
489--- wms/demo/split_line_available.xml 1970-01-01 00:00:00 +0000
490+++ wms/demo/split_line_available.xml 2011-01-20 22:41:56 +0000
491@@ -0,0 +1,103 @@
492+<?xml version="1.0" encoding="UTF-8"?>
493+<openerp>
494+ <data>
495+ ##############################################################################
496+ #
497+ # wms module for OpenERP, WMS Extended for Open ERP
498+ # Copyright (C) 2011 SYLEAM ([http://www.syleam.fr/])
499+ # Christophe CHAUVET [christophe.chauvet@syleam.fr]
500+ #
501+ # This file is a part of wms
502+ #
503+ # wms is free software: you can redistribute it and/or modify
504+ # it under the terms of the GNU General Public License as published by
505+ # the Free Software Foundation, either version 3 of the License, or
506+ # (at your option) any later version.
507+ #
508+ # wms is distributed in the hope that it will be useful,
509+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
510+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
511+ # GNU General Public License for more details.
512+ #
513+ # You should have received a copy of the GNU General Public License
514+ # along with this program. If not, see [http://www.gnu.org/licenses/].
515+ #
516+ ##############################################################################
517+
518+ <!-- ************************************************************** -->
519+ <!-- ** Add picking out ******************************************* -->
520+ <!-- ************************************************************** -->
521+ <record model="stock.picking" id="picking_out_split_1">
522+ <field name="address_id" ref="base.res_partner_address_tang"/>
523+ <field name="move_type">one</field>
524+ <field name="name">/</field>
525+ <field name="product_id" ref="product.product_product_hdd2"/>
526+ <field name="type">out</field>
527+ <field name="warehouse_id" ref="stock.warehouse0"/>
528+ </record>
529+ <record model="stock.move" id="stock_move_split_1_1">
530+ <field name="location_dest_id" ref="stock.stock_location_customers"/>
531+ <field name="location_id" ref="stock.stock_location_stock"/>
532+ <field name="name">[HDD2] HDD Seagate 7200.8 120GB</field>
533+ <field name="picking_id" ref="picking_out_split_1"/>
534+ <field name="product_id" ref="product.product_product_hdd2"/>
535+ <field name="product_qty" eval="22.0"/>
536+ <field name="product_uom" ref="product.product_uom_unit"/>
537+ </record>
538+
539+ <function name="draft_force_assign" model="stock.picking">
540+ <value eval="[obj(ref('picking_out_split_1')).id]" model="stock.picking"/>
541+ </function>
542+
543+ <assert id="picking_out_split_1" model="stock.picking"
544+ string="This picking must be confirmed">
545+ <test expr="state">confirmed</test>
546+ <test expr="len(move_lines) == 1"/>
547+ </assert>
548+
549+ <!-- ************************************************************** -->
550+ <!-- ** In All in One mode, no lines must be split **************** -->
551+ <!-- ** we must check the availability **************************** -->
552+ <!-- ************************************************************** -->
553+ <function name="action_assign" model="stock.picking">
554+ <value eval="[obj(ref('picking_out_split_1')).id]" model="stock.picking"/>
555+ </function>
556+
557+ <assert id="picking_out_split_1" model="stock.picking"
558+ string="This picking in All in One mode, don't split">
559+ <test expr="state">confirmed</test>
560+ <test expr="len(move_lines) == 1"/>
561+ </assert>
562+
563+ <!-- ************************************************************** -->
564+ <!-- ** Change the type to direct, the movement must be split in 2* -->
565+ <!-- ** With 1 line in assigned and 1 line in confirm ************* -->
566+ <!-- ************************************************************** -->
567+ <record model="stock.picking" id="picking_out_split_1">
568+ <field name="move_type">direct</field>
569+ </record>
570+
571+ <function name="action_assign" model="stock.picking">
572+ <value eval="[obj(ref('picking_out_split_1')).id]" model="stock.picking"/>
573+ </function>
574+
575+ <assert id="picking_out_split_1" model="stock.picking"
576+ string="This picking must be split in 2 lines">
577+ <test expr="state">assigned</test>
578+ <test expr="len(move_lines) == 2"/>
579+ </assert>
580+
581+ <assert id="picking_out_split_1" model="stock.picking"
582+ string="The first move must have a quantity 10">
583+ <test expr="move_lines[0].product_qty == 10.0"/>
584+ <test expr="move_lines[0].state">assigned</test>
585+ </assert>
586+
587+ <assert id="picking_out_split_1" model="stock.picking"
588+ string="The second move must have a quantity 12">
589+ <test expr="move_lines[1].product_qty == 12.0"/>
590+ <test expr="move_lines[1].state">confirmed</test>
591+ </assert>
592+
593+ </data>
594+</openerp>
595
596=== modified file 'wms/object/move.py'
597--- wms/object/move.py 2010-11-13 14:42:10 +0000
598+++ wms/object/move.py 2011-01-20 22:41:56 +0000
599@@ -26,6 +26,7 @@
600 from osv import fields
601 import netsvc
602
603+
604 class StockMoveRemark(osv.osv):
605 _name = 'stock.move.remark'
606 _description = 'Remark for the stock move'
607@@ -33,11 +34,13 @@
608 _columns = {
609 'name': fields.char('Name', size=128, translate=True, required=True),
610 'code': fields.char('Code', size=16),
611+ 'redirect': fields.boolean('Redirect', help='Use to made a different treatment, when this remark is selected!'),
612 }
613
614 _defaults = {
615 'name': lambda *a: False,
616 'code': lambda *a: False,
617+ 'redirect': lambda *a: False,
618 }
619
620 StockMoveRemark()
621@@ -53,6 +56,8 @@
622 'average_price': fields.float('Average price', help='Store the weighted average price unit for this product'),
623 'invoice_price': fields.float('Invoice price', help='Store the invoice price, check the invoice UOM as well'),
624 'invoice_uom_id': fields.many2one('product.uom', 'Invoice UOM', help='Store the invoice UOM'),
625+ 'crossdock_ok': fields.boolean('Crossdock_ok', help='If check, the crossdoc process have been made'),
626+ 'order_qty': fields.float('Order Qty.', help='Usefull when sale module not installed'),
627 }
628
629 _defaults = {
630@@ -61,8 +66,29 @@
631 'purchase_price': lambda *a: 0.0,
632 'average_price': lambda *a: 0.0,
633 'invoice_price': lambda *a: 0.0,
634+ 'crossdock_ok': lambda *a: False,
635+ 'order_qty': lambda *a: 0.0,
636 }
637
638+ def create(self, cr, uid, values, context=None):
639+ """
640+ We must verify if there is a picking_id associate to the move
641+ and put correctly the warehouse
642+ """
643+ if context is None:
644+ context = {}
645+
646+ if values.get('picking_id'):
647+ pick_obj = self.pool.get('stock.picking')
648+ pick = pick_obj.read(cr, uid, values.get('picking_id'), ['warehouse_id'], context=context)
649+ if not pick.get('warehouse_id', False) and values.get('location_id'):
650+ loc = self.pool.get('stock.location').read(cr, uid, values.get('location_id'), ['warehouse_id'], context=context)
651+ if loc and loc['warehouse_id']:
652+ pick_obj.write(cr, uid, [values.get('picking_id')], {'warehouse_id': loc['warehouse_id'][0]}, context=context)
653+
654+ return super(StockMove, self).create(cr, uid, values, context=context)
655+
656+
657 def action_done(self, cr, uid, ids, context=None):
658 """
659 This function store average price form product in stock move if configure in comapny
660@@ -81,7 +107,7 @@
661 def check_assign(self, cr, uid, ids, context=None):
662 """
663 The assignement must be keep the production_lot and tracking
664- and purpose
665+ and purpose
666 """
667 done = []
668 count = 0
669@@ -92,27 +118,39 @@
670 done.append(move.id)
671 pickings[move.picking_id.id] = 1
672 continue
673+
674+ if move.picking_id.move_type == 'one' and move.product_id.virtual_available < move.product_qty:
675+ continue
676+
677 if move.state in ('confirmed', 'waiting'):
678 prodlot = move.prodlot_id and move.prodlot_id.id or False
679 tracking = move.tracking_id and move.tracking_id.id or False
680- res = self.pool.get('stock.location')._product_reserve(cr, uid, [move.location_id.id], move.product_id.id, move.product_qty,
681+ res = self.pool.get('stock.location')._product_reserve(cr, uid, [move.location_id.id], move.product_id.id, move.product_qty,
682 {'uom': move.product_uom.id, 'prodlot': prodlot, 'tracking': tracking})
683+
684+ total_qty = move.product_qty
685+ original_location_id = move.location_id.id
686+
687 if res:
688 #_product_available_test depends on the next status for correct functioning
689 #the test does not work correctly if the same product occurs multiple times
690 #in the same order. This is e.g. the case when using the button 'split in two' of
691 #the stock outgoing form
692- self.write(cr, uid, move.id, {'state':'assigned'})
693+ r = res.pop(0)
694+ self.write(cr, uid, move.id, {'location_id': r[1], 'product_qty': r[0], 'state': 'assigned'})
695 done.append(move.id)
696 pickings[move.picking_id.id] = 1
697- r = res.pop(0)
698- cr.execute('UPDATE stock_move SET location_id=%s, product_qty=%s WHERE id=%s', (r[1], r[0], move.id))
699+ total_qty -= r[0]
700
701 while res:
702 r = res.pop(0)
703 move_id = self.copy(cr, uid, move.id, {'product_qty': r[0], 'location_id': r[1]})
704 done.append(move_id)
705- #cr.execute('insert into stock_move_history_ids values (%s,%s)', (move.id,move_id))
706+ total_qty -= r[0]
707+
708+ if total_qty > 0:
709+ move_id = self.copy(cr, uid, move.id, {'product_qty': total_qty, 'location_id': original_location_id, 'state': 'confirmed'}, context=context)
710+
711 if done:
712 count += len(done)
713 self.write(cr, uid, done, {'state': 'assigned'})
714
715=== modified file 'wms/object/picking.py'
716--- wms/object/picking.py 2011-01-13 09:29:46 +0000
717+++ wms/object/picking.py 2011-01-20 22:41:56 +0000
718@@ -24,8 +24,13 @@
719
720 from osv import osv
721 from osv import fields
722+from tools.translate import _
723+
724
725 class StockPicking(osv.osv):
726+ """
727+ Add crossdock process
728+ """
729 _inherit = 'stock.picking'
730
731 def _action_type(self, cr, uid, context=None):
732@@ -45,6 +50,7 @@
733 'picking_time': fields.float('Time', help='Time to made this picking'),
734 'transporter_id': fields.many2one('res.partner', 'Transporter'),
735 'transporter_number': fields.char('Tracking number', size=128),
736+ 'product_id': fields.related('move_lines', 'product_id', type='many2one', relation='product.product', string='Product'),
737 }
738
739 _defaults = {
740@@ -54,6 +60,7 @@
741 'transporter_number': lambda *a: False
742 }
743
744+<<<<<<< TREE
745 def default_get(self, cr, uid, fields_list, context=None):
746 if context is None:
747 context = {}
748@@ -63,6 +70,174 @@
749
750 return values
751
752+=======
753+ def crossdock_location_available(self, cr, uid, warehouse_ids, context=None):
754+ """
755+ Return the list ids of empty crossdock location for these warehouse
756+ You can specify only_one in context to retrieve 1 location at the time
757+
758+ :param warehouse_ids: list of the warehouse
759+ :type warehouse_ids: list
760+ :return: dict with the list of empty crossdock location
761+ :rtype: dict
762+ """
763+ if context is None:
764+ context = {}
765+
766+ st_av_obj = self.pool.get('wms.report.stock.available')
767+ res = {}
768+ for w in warehouse_ids:
769+ tmp_ids = []
770+ l_ids = self.pool.get('stock.location').search(cr, uid,
771+ [('warehouse_id', '=', w), ('usage', '=', 'crossdock')], context=context)
772+ for a in l_ids:
773+ if not st_av_obj.search(cr, uid, [('location_id', '=', a)]):
774+ tmp_ids.append(a)
775+ if tmp_ids and context.get('only_one'):
776+ break
777+
778+ if not tmp_ids:
779+ default_crossdock = self.pool.get('stock.warehouse').read(cr, uid, w, ['crossdock_location_id'], context=context)['crossdock_location_id']
780+ if default_crossdock:
781+ tmp_ids = [default_crossdock[0]]
782+ res[str(w)] = tmp_ids
783+ return res
784+
785+ def create_crossdock_move(self, cr, uid, move, crossdock_id=None, context=None):
786+ """
787+ Check if the product on this stock.move have been reserved,
788+ and affecte the location on the picking_order
789+
790+ :param move_id: movement to check
791+ :type move_id: int
792+ :return: True if the movement is correct
793+ :rtype: boolean
794+ """
795+ if context is None:
796+ context = {}
797+
798+ move_obj = self.pool.get('stock.move')
799+
800+ if crossdock_id is None:
801+ default_crossdock = self.pool.get('stock.warehouse').read(cr, uid, move.location_dest_id.warehouse_id.id,
802+ ['crossdock_location_id'], context=context)['crossdock_location_id']
803+ if not default_crossdock:
804+ raise osv.except_osv(_('Error'), _('No default crossdock location defined on the warehouse!'))
805+ crossdock_id = isinstance(default_crossdock, list) and default_crossdock[0] or default_crossdock
806+
807+ ###
808+ ## If we have an outgoing quantity, and location type is crossdock, we split in two line
809+ ##
810+ new_id = False
811+ if abs(move.product_id.outgoing_qty) > 0:
812+
813+ # Search how many quantity must be put in crossdock
814+ picking_ids = self.search(cr, uid, [('type', '=', 'out'), ('state', 'in', ['confirmed','assigned'])],
815+ context=context)
816+ args = [
817+ ('picking_id', 'in', picking_ids),
818+ ('product_id', '=', move.product_id.id),
819+ ('state', 'in', ['confirmed', 'waiting']),
820+ ]
821+ reserve_ids = move_obj.search(cr, uid, args,
822+ limit=abs(move.product_qty), order='date_planned', context=context)
823+
824+ reserves = move_obj.browse(cr, uid, reserve_ids, context=context)
825+ total_crossdock = 0.0
826+ for r in reserves:
827+ total_crossdock += r.product_qty
828+
829+ # Check if we must split the line in two if there is enougth quantity available
830+ if move.product_qty > total_crossdock:
831+ args = {
832+ 'product_qty': (move.product_qty - total_crossdock),
833+ 'state': 'done',
834+ 'crossdock_ok': True,
835+ }
836+ new_id = move_obj.copy(cr, uid, move.id, args, context=context)
837+ args = {
838+ 'product_qty': total_crossdock,
839+ 'location_dest_id': crossdock_id,
840+ 'state': 'done',
841+ 'crossdock_ok': True,
842+ }
843+ move_obj.write(cr, uid, [move.id], args, context=context)
844+ else:
845+ # We don't have enougth quantity, how many moves can be assigned with quantity
846+ args = {
847+ 'location_dest_id': crossdock_id,
848+ 'state': 'done',
849+ 'crossdock_ok': True,
850+ }
851+ move_obj.write(cr, uid, [move.id], args, context=context)
852+
853+ reserve_ids = []
854+ tmp_qty = 0.0
855+ for r in reserves:
856+ tmp_qty += r.product_qty
857+ if tmp_qty <= move.product_qty:
858+ reserve_ids.append(r.id)
859+ else:
860+ break
861+
862+ args = {
863+ 'location_id': crossdock_id,
864+ 'state': 'assigned',
865+ }
866+ move_obj.write(cr, uid, reserve_ids, args, context=context)
867+
868+ return new_id or move.id
869+
870+ def test_finnished(self, cr, uid, ids):
871+ """
872+ On receipt order, check if there is picking, and generate crossdock
873+ 1) check if all move are finnished
874+ 2) if not return False
875+ """
876+ in_ids = []
877+ other_ids = []
878+ for p in self.browse(cr, uid, ids):
879+ if p.type == 'in':
880+ in_ids.append(p.id)
881+ else:
882+ other_ids.append(p.id)
883+
884+ # check if there is a receipt order, if not call directly the super method
885+ if len(in_ids) == 0:
886+ return super(StockPicking, self).test_finnished(cr, uid, ids)
887+
888+ # if we have a receipt we must check
889+ elif len(in_ids) >= 1:
890+ lines_ok = True
891+ move_ids = self.pool.get('stock.move').search(cr, uid, [('picking_id', 'in', in_ids)])
892+ cds_ids = []
893+ new_move_ids = []
894+ moves = self.pool.get('stock.move').browse(cr, uid, move_ids)
895+ for move in moves:
896+ if not cds_ids:
897+ cd_ids = self.crossdock_location_available(cr, uid, [move.location_dest_id.warehouse_id.id])
898+ if isinstance(cd_ids, dict):
899+ cd_ids = cd_ids[str(move.location_dest_id.warehouse_id.id)]
900+
901+ if move.state not in ('done', 'cancel'):
902+ if move.product_qty != 0.0:
903+ lines_ok = False
904+
905+ if not lines_ok:
906+ return False
907+
908+ for move in moves:
909+ # check if product is in crossdock mode and if out picking is available
910+ if not move.crossdock_ok and move.product_id.location_type == 'crossdock' and move.product_qty > 0:
911+
912+ tmp_crossdock = cd_ids and cd_ids.pop() or None
913+ m_id = self.create_crossdock_move(cr, uid, move, crossdock_id=tmp_crossdock)
914+ new_move_ids.append(m_id)
915+
916+
917+ return super(StockPicking, self).test_finnished(cr, uid, ids)
918+
919+>>>>>>> MERGE-SOURCE
920 StockPicking()
921
922 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
923
924=== modified file 'wms/object/report_stock.py'
925--- wms/object/report_stock.py 2010-08-25 13:33:33 +0000
926+++ wms/object/report_stock.py 2011-01-20 22:41:56 +0000
927@@ -84,7 +84,7 @@
928 WHERE m0.state='done'
929 AND location_dest_id in (SELECT id
930 FROM stock_location
931- WHERE usage='internal')
932+ WHERE usage in ('internal','crossdock'))
933 GROUP by
934 location_dest_id,
935 m0.state,
936
937=== modified file 'wms/security/groups.xml'
938--- wms/security/groups.xml 2010-11-13 11:25:08 +0000
939+++ wms/security/groups.xml 2011-01-20 22:41:56 +0000
940@@ -40,6 +40,10 @@
941 <field name="name">WMS - Purchase Price</field>
942 </record>
943
944+ <record id="group_wms_order_qty" model="res.groups">
945+ <field name="name">WMS - View order qty</field>
946+ </record>
947+
948 <!-- *************************************************************** -->
949 <!-- ** Group to restrict visibility on the warehouse's user ******* -->
950 <!-- ** in preference ********************************************** -->
951
952=== modified file 'wms/view/move.xml'
953--- wms/view/move.xml 2010-07-15 09:59:18 +0000
954+++ wms/view/move.xml 2011-01-20 22:41:56 +0000
955@@ -34,6 +34,7 @@
956 <field name="priority" eval="8"/>
957 <field name="arch" type="xml">
958 <tree string="Remark">
959+ <field name="redirect"/>
960 <field name="code"/>
961 <field name="name"/>
962 </tree>
963@@ -49,6 +50,7 @@
964 <form string="Remark">
965 <field name="name" colspan="4" select="1"/>
966 <field name="code" select="1"/>
967+ <field name="redirect" select="1"/>
968 </form>
969 </field>
970 </record>
971@@ -113,6 +115,7 @@
972 <field name="invoice_price"/>
973 <field name="invoice_uom_id"/>
974 </group>
975+ <field name="order_qty" groups="wms.group_wms_order_qty"/>
976 </xpath>
977 </data>
978
979
980=== modified file 'wms/view/picking.xml'
981--- wms/view/picking.xml 2011-01-13 13:26:59 +0000
982+++ wms/view/picking.xml 2011-01-20 22:41:56 +0000
983@@ -50,7 +50,7 @@
984 <field name="location_id" select="1" domain="[('usage','=','supplier'),('warehouse_id','=',parent.warehouse_id)]"/>
985 </xpath>
986 <xpath expr="/form/notebook/page/field/form/field[@name='location_dest_id']" position="replace">
987- <field domain="[('usage','=','internal'),('warehouse_id','=',parent.warehouse_id)]" name="location_dest_id" select="1"/>
988+ <field domain="[('usage','in',('internal','crossdock')),('warehouse_id','=',parent.warehouse_id)]" name="location_dest_id" select="1"/>
989 </xpath>
990 <xpath expr="/form/notebook/page/field/form/field[@name='tracking_id']" position="replace">
991 <field groups="wms.group_wms_tracking" name="tracking_id" domain="[('product_id','=',product_id)]" select="1"/>
992@@ -152,7 +152,7 @@
993 <field name="remark_id"/>
994 </xpath>
995 <xpath expr="/form/notebook/page/field/form/field[@name='location_id']" position="replace">
996- <field name="location_id" select="1" domain="[('usage','=','internal'),('warehouse_id','=',parent.warehouse_id)]"/>
997+ <field name="location_id" select="1" domain="[('usage','in',('internal','crossdock')),('warehouse_id','=',parent.warehouse_id)]"/>
998 </xpath>
999 <xpath expr="/form/notebook/page/field/form/field[@name='location_dest_id']" position="replace">
1000 <field domain="[('usage','in',['internal','production']),('warehouse_id','=',parent.warehouse_id)]" name="location_dest_id" select="1"/>
1001@@ -174,6 +174,7 @@
1002 <field name="invoice_uom_id"/>
1003 -->
1004 </group>
1005+ <field name="order_qty" groups="wms.group_wms_order_qty"/>
1006 </xpath>
1007 </data>
1008
1009@@ -227,6 +228,10 @@
1010 <field name="invoice_uom_id"/>
1011 -->
1012 </group>
1013+ <group colspan="4" name="order">
1014+ <field name="order_qty" groups="wms.group_wms_order_qty"/>
1015+ <newline/>
1016+ </group>
1017 </xpath>
1018 </data>
1019
1020@@ -329,6 +334,7 @@
1021 <field name="act_window_id" ref="action_picking_wms_in_board"/>
1022 </record>
1023
1024+<<<<<<< TREE
1025
1026 <!-- ********************************************************************** -->
1027 <!-- ** Picking transfer ************************************************** -->
1028@@ -410,5 +416,58 @@
1029 sequence="100"
1030 action="act_open_stock_picking_transfer_view"/>
1031
1032+=======
1033+ <!-- *************************************************************** -->
1034+ <!-- ** Add search on product in picking *************************** -->
1035+ <!-- *************************************************************** -->
1036+ <record id="picking_product_in_tree" model="ir.ui.view">
1037+ <field name="name">stock.picking.in.tree - product </field>
1038+ <field name="model">stock.picking</field>
1039+ <field name="inherit_id" ref="stock.view_picking_in_tree"/>
1040+ <field name="type">tree</field>
1041+ <field name="arch" type="xml">
1042+ <xpath expr="//field[@name='state']" position="after">
1043+ <field name="product_id" select="1" invisible="1"/>
1044+ </xpath>
1045+ </field>
1046+ </record>
1047+
1048+ <record id="picking_product_internal_tree" model="ir.ui.view">
1049+ <field name="name">stock.picking.tree - product </field>
1050+ <field name="model">stock.picking</field>
1051+ <field name="inherit_id" ref="stock.vpicktree"/>
1052+ <field name="type">tree</field>
1053+ <field name="arch" type="xml">
1054+ <xpath expr="//field[@name='state']" position="after">
1055+ <field name="product_id" select="1" invisible="1"/>
1056+ </xpath>
1057+ </field>
1058+ </record>
1059+
1060+ <record id="picking_product_out_tree" model="ir.ui.view">
1061+ <field name="name">stock.picking.out.tree - product </field>
1062+ <field name="model">stock.picking</field>
1063+ <field name="inherit_id" ref="stock.view_picking_out_tree"/>
1064+ <field name="type">tree</field>
1065+ <field name="arch" type="xml">
1066+ <xpath expr="//field[@name='state']" position="after">
1067+ <field name="product_id" select="1" invisible="1"/>
1068+ </xpath>
1069+ </field>
1070+ </record>
1071+
1072+ <record id="picking_product_delivery_tree" model="ir.ui.view">
1073+ <field name="name">stock.picking.delivery.tree - product </field>
1074+ <field name="model">stock.picking</field>
1075+ <field name="inherit_id" ref="stock.view_picking_delivery_tree"/>
1076+ <field name="type">tree</field>
1077+ <field name="arch" type="xml">
1078+ <xpath expr="//field[@name='state']" position="after">
1079+ <field name="product_id" select="1" invisible="1"/>
1080+ </xpath>
1081+ </field>
1082+ </record>
1083+
1084+>>>>>>> MERGE-SOURCE
1085 </data>
1086 </openerp>
1087
1088=== modified file 'wms/view/warehouse.xml'
1089--- wms/view/warehouse.xml 2011-01-13 15:45:24 +0000
1090+++ wms/view/warehouse.xml 2011-01-20 22:41:56 +0000
1091@@ -47,7 +47,7 @@
1092 <field name="company_id"/>
1093 </xpath>
1094 <xpath expr="/form/field[@name='lot_output_id']" position="after">
1095- <field name="crossdock_location_id" domain="[('usage','=', 'internal')]"/>
1096+ <field name="crossdock_location_id" domain="[('usage','=', 'crossdock')]"/>
1097 </xpath>
1098 </data>
1099
1100
1101=== added file 'wms_board/view/picking.xml'
1102--- wms_board/view/picking.xml 1970-01-01 00:00:00 +0000
1103+++ wms_board/view/picking.xml 2011-01-20 22:41:56 +0000
1104@@ -0,0 +1,65 @@
1105+<?xml version="1.0" encoding="UTF-8"?>
1106+<openerp>
1107+ <data>
1108+ ##############################################################################
1109+ #
1110+ # wms_board module for OpenERP, Dashboard for WMS module
1111+ # Copyright (C) 2010 SYLEAM ([http://www.syleam.fr/])
1112+ # Christophe CHAUVET [christophe.chauvet@syleam.fr]
1113+ #
1114+ # This file is a part of wms_board
1115+ #
1116+ # wms_board is free software: you can redistribute it and/or modify
1117+ # it under the terms of the GNU General Public License as published by
1118+ # the Free Software Foundation, either version 3 of the License, or
1119+ # (at your option) any later version.
1120+ #
1121+ # wms_board is distributed in the hope that it will be useful,
1122+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
1123+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1124+ # GNU General Public License for more details.
1125+ #
1126+ # You should have received a copy of the GNU General Public License
1127+ # along with this program. If not, see [http://www.gnu.org/licenses/].
1128+ #
1129+ ##############################################################################
1130+
1131+ <record id="note_logistics_type" model="board.note.type">
1132+ <field name="name">Logistics</field>
1133+ </record>
1134+
1135+ <record id="board_logistics_user_form" model="ir.ui.view">
1136+ <field name="name">board.sales.user.form</field>
1137+ <field name="model">board.board</field>
1138+ <field name="type">form</field>
1139+ <field name="arch" type="xml">
1140+ <form string="Logistics board">
1141+ <hpaned position="100">
1142+ <child1>
1143+ <action colspan="4" height="200" name="%(wms.action_picking_wms_delivery_board)d" string="Delivery" width="510"/>
1144+ </child1>
1145+ </hpaned>
1146+ </form>
1147+ </field>
1148+ </record>
1149+
1150+ <record id="open_board_logictics_user" model="ir.actions.act_window">
1151+ <field name="name">Logistics Dashboard</field>
1152+ <field name="res_model">board.board</field>
1153+ <field name="view_type">form</field>
1154+ <field name="view_mode">form</field>
1155+ <field name="view_id" ref="board_logistics_user_form"/>
1156+ </record>
1157+
1158+ <menuitem id="menu_logistics_user_board"
1159+ name="Logistics"
1160+ parent="board.dashboard_menu"/>
1161+
1162+ <menuitem action="open_board_logistics_user"
1163+ icon="terp-graph"
1164+ id="menu_board_logstics_user"
1165+ parent="menu_logistics_user_board"
1166+ sequence="1"/>
1167+
1168+ </data>
1169+</openerp>
1170
1171=== modified file 'wms_location/__terp__.py'
1172--- wms_location/__terp__.py 2010-06-22 07:04:20 +0000
1173+++ wms_location/__terp__.py 2011-01-20 22:41:56 +0000
1174@@ -34,18 +34,21 @@
1175 'product',
1176 'stock',
1177 ],
1178- 'init_xml': [
1179- 'data/location.xml',
1180- ],
1181+ 'init_xml': [],
1182 'update_xml': [
1183 #'security/groups.xml',
1184- #'security/ir.model.access.csv',
1185+ 'security/ir.model.access.csv',
1186 #'view/menu.xml',
1187 'view/location.xml',
1188+ 'view/product.xml',
1189 #'wizard/wizard.xml',
1190 #'report/report.xml',
1191- ],
1192- 'demo_xml': [],
1193+ 'data/location.xml',
1194+ ],
1195+ 'demo_xml': [
1196+ 'demo/location.xml',
1197+ 'demo/partner.xml',
1198+ ],
1199 'installable': True,
1200 'active': False,
1201 'license': 'GPL-3',
1202
1203=== added file 'wms_location/data/location.xml'
1204--- wms_location/data/location.xml 1970-01-01 00:00:00 +0000
1205+++ wms_location/data/location.xml 2011-01-20 22:41:56 +0000
1206@@ -0,0 +1,77 @@
1207+<?xml version="1.0" encoding="UTF-8"?>
1208+<openerp>
1209+ <data>
1210+ ##############################################################################
1211+ #
1212+ # wms_location module for OpenERP, Location management
1213+ # Copyright (C) 2011 SYLEAM ([http://www.syleam.fr/])
1214+ # Christophe CHAUVET [christophe.chauvet@syleam.fr]
1215+ #
1216+ # This file is a part of wms_location
1217+ #
1218+ # wms_location is free software: you can redistribute it and/or modify
1219+ # it under the terms of the GNU General Public License as published by
1220+ # the Free Software Foundation, either version 3 of the License, or
1221+ # (at your option) any later version.
1222+ #
1223+ # wms_location is distributed in the hope that it will be useful,
1224+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
1225+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1226+ # GNU General Public License for more details.
1227+ #
1228+ # You should have received a copy of the GNU General Public License
1229+ # along with this program. If not, see [http://www.gnu.org/licenses/].
1230+ #
1231+ ##############################################################################
1232+
1233+ <record model="stock.location" id="stock.stock_location_output">
1234+ <field name="warehouse_id" ref="stock.warehouse0"/>
1235+ </record>
1236+ <record model="stock.location" id="stock.stock_location_stock">
1237+ <field name="warehouse_id" ref="stock.warehouse0"/>
1238+ </record>
1239+ <record model="stock.location" id="stock.stock_location_company">
1240+ <field name="warehouse_id" ref="stock.warehouse0"/>
1241+ </record>
1242+ <record model="stock.location" id="stock.stock_location_locations">
1243+ <field name="warehouse_id" ref="stock.warehouse0"/>
1244+ </record>
1245+ <record model="stock.location" id="stock.stock_location_locations_partner">
1246+ <field name="warehouse_id" ref="stock.warehouse0"/>
1247+ </record>
1248+ <record model="stock.location" id="stock.location_inventory">
1249+ <field name="warehouse_id" ref="stock.warehouse0"/>
1250+ </record>
1251+ <record model="stock.location" id="stock.location_procurement">
1252+ <field name="warehouse_id" ref="stock.warehouse0"/>
1253+ </record>
1254+ <record model="stock.location" id="stock.location_production">
1255+ <field name="warehouse_id" ref="stock.warehouse0"/>
1256+ </record>
1257+ <record model="stock.location" id="stock.stock_location_locations_virtual">
1258+ <field name="warehouse_id" ref="stock.warehouse0"/>
1259+ </record>
1260+
1261+
1262+ <record model="stock.location" id="stock.stock_location_13">
1263+ <field name="warehouse_id" ref="stock.warehouse0"/>
1264+ </record>
1265+
1266+ <record model="stock.location" id="stock.stock_location_14">
1267+ <field name="warehouse_id" ref="stock.warehouse0"/>
1268+ </record>
1269+
1270+ <record model="stock.location" id="stock.stock_location_15">
1271+ <field name="warehouse_id" ref="stock.warehouse0"/>
1272+ </record>
1273+
1274+ <record model="stock.location" id="stock.stock_location_workshop">
1275+ <field name="warehouse_id" ref="stock.warehouse0"/>
1276+ </record>
1277+
1278+ <record model="stock.location" id="stock.stock_location_components">
1279+ <field name="warehouse_id" ref="stock.warehouse0"/>
1280+ </record>
1281+
1282+ </data>
1283+</openerp>
1284
1285=== renamed file 'wms_location/data/location.xml' => 'wms_location/demo/location.xml'
1286--- wms_location/data/location.xml 2010-12-06 16:07:37 +0000
1287+++ wms_location/demo/location.xml 2011-01-20 22:41:56 +0000
1288@@ -1,6 +1,6 @@
1289 <?xml version="1.0" encoding="UTF-8"?>
1290 <openerp>
1291- <data noupdate="1">
1292+ <data>
1293 ##############################################################################
1294 #
1295 # wms_location module for OpenERP, Location management
1296@@ -24,34 +24,118 @@
1297 #
1298 ##############################################################################
1299
1300- <record model="stock.location" id="stock.stock_location_output">
1301- <field name="warehouse_id" ref="stock.warehouse0"/>
1302- </record>
1303- <record model="stock.location" id="stock.stock_location_stock">
1304- <field name="warehouse_id" ref="stock.warehouse0"/>
1305- </record>
1306- <record model="stock.location" id="stock.stock_location_company">
1307- <field name="warehouse_id" ref="stock.warehouse0"/>
1308- </record>
1309- <record model="stock.location" id="stock.stock_location_locations">
1310- <field name="warehouse_id" ref="stock.warehouse0"/>
1311- </record>
1312- <record model="stock.location" id="stock.stock_location_locations_partner">
1313- <field name="warehouse_id" ref="stock.warehouse0"/>
1314- </record>
1315- <record model="stock.location" id="stock.location_inventory">
1316- <field name="warehouse_id" ref="stock.warehouse0"/>
1317- </record>
1318- <record model="stock.location" id="stock.location_procurement">
1319- <field name="warehouse_id" ref="stock.warehouse0"/>
1320- </record>
1321- <record model="stock.location" id="stock.location_production">
1322- <field name="warehouse_id" ref="stock.warehouse0"/>
1323- </record>
1324- <record model="stock.location" id="stock.stock_location_locations_virtual">
1325- <field name="warehouse_id" ref="stock.warehouse0"/>
1326- </record>
1327-
1328+ <!-- ************************************************************** -->
1329+ <!-- ** Add crossdock location ************************************ -->
1330+ <!-- ************************************************************** -->
1331+ <record id="location_crossdock_view" model="stock.location">
1332+ <field name="name">Crossdock</field>
1333+ <field name="code">CRD</field>
1334+ <field name="location_id" ref="stock.stock_location_company"/>
1335+ <field name="warehouse_id" ref="stock.warehouse0"/>
1336+ <field name="usage">view</field>
1337+ </record>
1338+
1339+ <record id="location_crossdock_0" model="stock.location">
1340+ <field name="name">Crossdock Default</field>
1341+ <field name="code">K00</field>
1342+ <field name="location_id" ref="location_crossdock_view"/>
1343+ <field name="warehouse_id" ref="stock.warehouse0"/>
1344+ <field name="usage">crossdock</field>
1345+ </record>
1346+
1347+ <record id="location_crossdock_1" model="stock.location">
1348+ <field name="name">Crossdock 1</field>
1349+ <field name="code">K01</field>
1350+ <field name="location_id" ref="location_crossdock_view"/>
1351+ <field name="warehouse_id" ref="stock.warehouse0"/>
1352+ <field name="usage">crossdock</field>
1353+ </record>
1354+
1355+ <record id="location_crossdock_2" model="stock.location">
1356+ <field name="name">Crossdock 2</field>
1357+ <field name="code">K02</field>
1358+ <field name="location_id" ref="location_crossdock_view"/>
1359+ <field name="warehouse_id" ref="stock.warehouse0"/>
1360+ <field name="usage">crossdock</field>
1361+ </record>
1362+
1363+ <record id="location_crossdock_3" model="stock.location">
1364+ <field name="name">Crossdock 3</field>
1365+ <field name="code">K03</field>
1366+ <field name="location_id" ref="location_crossdock_view"/>
1367+ <field name="warehouse_id" ref="stock.warehouse0"/>
1368+ <field name="usage">crossdock</field>
1369+ </record>
1370+
1371+ <record id="stock.warehouse0" model="stock.warehouse">
1372+ <field name="crossdock_location_id" ref="location_crossdock_0"/>
1373+ <field name="code">TINY</field>
1374+ </record>
1375+
1376+ <!-- ************************************************************** -->
1377+ <!-- ** Add new customer location ********************************* -->
1378+ <!-- ************************************************************** -->
1379+ <record id="location_customer_view" model="stock.location">
1380+ <field name="name">Clients</field>
1381+ <field name="code">CLIENTS</field>
1382+ <field name="location_id" ref="stock.stock_location_company"/>
1383+ <field name="warehouse_id" ref="stock.warehouse0"/>
1384+ <field name="usage">view</field>
1385+ </record>
1386+
1387+ <record id="location_customer_agrolait" model="stock.location">
1388+ <field name="name">Agrolait</field>
1389+ <field name="code">AGROLAIT</field>
1390+ <field name="location_id" ref="location_customer_view"/>
1391+ <field name="warehouse_id" ref="stock.warehouse0"/>
1392+ <field name="usage">customer</field>
1393+ </record>
1394+
1395+ <!-- ************************************************************** -->
1396+ <!-- ************************************************************** -->
1397+ <!-- ************************************************************** -->
1398+ <record id="location_inventory_casse" model="stock.location">
1399+ <field name="name">Damage</field>
1400+ <field name="code">CASSE</field>
1401+ <field name="location_id" ref="stock.stock_location_company"/>
1402+ <field name="warehouse_id" ref="stock.warehouse0"/>
1403+ <field name="usage">inventory</field>
1404+ </record>
1405+
1406+ <!-- ************************************************************** -->
1407+ <!-- ************************************************************** -->
1408+ <!-- ************************************************************** -->
1409+ <record id="location_stock_a01" model="stock.location">
1410+ <field name="name">A01</field>
1411+ <field name="code">A01</field>
1412+ <field name="location_id" ref="stock.stock_location_stock"/>
1413+ <field name="warehouse_id" ref="stock.warehouse0"/>
1414+ <field name="usage">internal</field>
1415+ </record>
1416+
1417+ <record id="location_stock_a02" model="stock.location">
1418+ <field name="name">A02</field>
1419+ <field name="code">A02</field>
1420+ <field name="location_id" ref="stock.stock_location_stock"/>
1421+ <field name="warehouse_id" ref="stock.warehouse0"/>
1422+ <field name="usage">internal</field>
1423+ </record>
1424+
1425+ <record id="location_stock_b01" model="stock.location">
1426+ <field name="name">B01</field>
1427+ <field name="code">B01</field>
1428+ <field name="location_id" ref="stock.stock_location_stock"/>
1429+ <field name="warehouse_id" ref="stock.warehouse0"/>
1430+ <field name="usage">internal</field>
1431+ </record>
1432+
1433+ <record id="location_stock_b02" model="stock.location">
1434+ <field name="name">B02</field>
1435+ <field name="code">B02</field>
1436+ <field name="location_id" ref="stock.stock_location_stock"/>
1437+ <field name="warehouse_id" ref="stock.warehouse0"/>
1438+ <field name="usage">internal</field>
1439+ </record>
1440
1441 </data>
1442 </openerp>
1443
1444=== added file 'wms_location/demo/partner.xml'
1445--- wms_location/demo/partner.xml 1970-01-01 00:00:00 +0000
1446+++ wms_location/demo/partner.xml 2011-01-20 22:41:56 +0000
1447@@ -0,0 +1,32 @@
1448+<?xml version="1.0" encoding="UTF-8"?>
1449+<openerp>
1450+ <data>
1451+ ##############################################################################
1452+ #
1453+ # wms_location module for OpenERP, Location management
1454+ # Copyright (C) 2011 SYLEAM ([http://www.syleam.fr/])
1455+ # Christophe CHAUVET [christophe.chauvet@syleam.fr]
1456+ #
1457+ # This file is a part of wms_location
1458+ #
1459+ # wms_location is free software: you can redistribute it and/or modify
1460+ # it under the terms of the GNU General Public License as published by
1461+ # the Free Software Foundation, either version 3 of the License, or
1462+ # (at your option) any later version.
1463+ #
1464+ # wms_location is distributed in the hope that it will be useful,
1465+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
1466+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1467+ # GNU General Public License for more details.
1468+ #
1469+ # You should have received a copy of the GNU General Public License
1470+ # along with this program. If not, see [http://www.gnu.org/licenses/].
1471+ #
1472+ ##############################################################################
1473+
1474+ <record id="base.res_partner_agrolait" model="res.partner">
1475+ <field name="property_stock_customer" ref="location_customer_agrolait"/>
1476+ </record>
1477+
1478+ </data>
1479+</openerp>
1480
1481=== modified file 'wms_location/i18n/fr_FR.po'
1482--- wms_location/i18n/fr_FR.po 2010-06-18 20:21:43 +0000
1483+++ wms_location/i18n/fr_FR.po 2011-01-20 22:41:56 +0000
1484@@ -5,8 +5,8 @@
1485 msgstr ""
1486 "Project-Id-Version: PACKAGE VERSION\n"
1487 "Report-Msgid-Bugs-To: support@openerp.com\n"
1488-"POT-Creation-Date: 2010-06-18 20:18:23+0000\n"
1489-"PO-Revision-Date: 2010-06-02 09:43+0100\n"
1490+"POT-Creation-Date: 2010-12-09 09:46:26+0000\n"
1491+"PO-Revision-Date: 2010-12-09 11:12+0100\n"
1492 "Last-Translator: Christophe Chauvet <christophe.chauvet@syleam.fr>\n"
1493 "Language-Team: LANGUAGE <LL@li.org>\n"
1494 "MIME-Version: 1.0\n"
1495@@ -15,9 +15,24 @@
1496 "X-Generator: Translate Toolkit 1.5.3\n"
1497
1498 #. module: wms_location
1499-#: model:ir.module.module,description:wms_location.module_meta_information
1500-msgid "Location management"
1501-msgstr "Gestion des emplacements"
1502+#: model:ir.module.module,shortdesc:wms_location.module_meta_information
1503+msgid "Wms Location"
1504+msgstr "WMS Gestion des emplacements"
1505+
1506+#. module: wms_location
1507+#: constraint:ir.model:0
1508+msgid "The Object name must start with x_ and not contain any special character !"
1509+msgstr ""
1510+
1511+#. module: wms_location
1512+#: selection:product.location,auto:0
1513+msgid "Automatic No Step Added"
1514+msgstr "Mouvement automatique, sans pas ajouter"
1515+
1516+#. module: wms_location
1517+#: field:stock.location,transcend_height:0
1518+msgid "Transcend Height"
1519+msgstr "DĂ©passer la hauteur"
1520
1521 #. module: wms_location
1522 #: view:stock.location:0
1523@@ -40,11 +55,28 @@
1524 msgstr "EntrepĂ´t"
1525
1526 #. module: wms_location
1527+#: help:product.location,auto:0
1528+msgid "This is used to define paths the product has to follow within the location tree.\n"
1529+"The 'Automatic Move' value will create a stock move after the current one that will be validated automatically. With 'Manual Operation', the stock move has to be validated by a worker. With 'Automatic No Step Added', the location is replaced in the original move."
1530+msgstr ""
1531+"Ceci est utilisé pour définir le chemin que le produit doit suivre dans "
1532+"l'arborescence des emplacements.\n"
1533+"le 'Mouvement automatique' créer un mouvement de stock de la position "
1534+"courante qui sera valider automatiquement. Avec 'Opération manuelle' sera "
1535+"valider par le logisticien. Avec 'Mouvement automatique, sans pas ajouter' "
1536+"l'emplacement sera remplacer dans le mouvement original."
1537+
1538+#. module: wms_location
1539 #: view:stock.location:0
1540 msgid "General"
1541 msgstr "Générale"
1542
1543 #. module: wms_location
1544+#: field:product.product,location_type:0
1545+msgid "Location type"
1546+msgstr "Type d'emplacement"
1547+
1548+#. module: wms_location
1549 #: help:stock.location,code:0
1550 msgid "Enter the complete code for this location, usefull for search"
1551 msgstr "Entrer le code pour cette emplacement, utile pour la recherche"
1552@@ -55,6 +87,11 @@
1553 msgstr "Entrer la largeur en cm"
1554
1555 #. module: wms_location
1556+#: field:product.location,delay:0
1557+msgid "Delay (days)"
1558+msgstr "DĂ©lai (jour)"
1559+
1560+#. module: wms_location
1561 #: view:stock.location:0
1562 msgid "Localisation"
1563 msgstr "Emplacement"
1564@@ -70,14 +107,14 @@
1565 msgstr "Entrer la hauteur en cm"
1566
1567 #. module: wms_location
1568-#: model:ir.module.module,shortdesc:wms_location.module_meta_information
1569-msgid "Wms Location"
1570-msgstr "WMS Gestion des emplacements"
1571+#: help:product.location,delay:0
1572+msgid "Number of days to do this transition"
1573+msgstr "Nombre de jour pour effectuer cette transition"
1574
1575 #. module: wms_location
1576-#: field:stock.location,transcend_height:0
1577-msgid "Transcend Height"
1578-msgstr "DĂ©passer la hauteur"
1579+#: model:ir.module.module,description:wms_location.module_meta_information
1580+msgid "Location management"
1581+msgstr "Gestion des emplacements"
1582
1583 #. module: wms_location
1584 #: constraint:ir.ui.view:0
1585@@ -85,6 +122,18 @@
1586 msgstr "XML non valide pour cette vue!"
1587
1588 #. module: wms_location
1589+#: selection:product.product,location_type:0
1590+msgid "Compute"
1591+msgstr "Calculé"
1592+
1593+#. module: wms_location
1594+#: help:product.product,location_ids:0
1595+msgid "These rules set the right path of the product in the whole location tree."
1596+msgstr ""
1597+"Cette règle définit la localisation des produit dans l'arborescence des "
1598+"emplacements."
1599+
1600+#. module: wms_location
1601 #: help:stock.location,transcend_width:0
1602 msgid "Autorize the width to be transcend"
1603 msgstr "Autoriser le dépassement de largeur"
1604@@ -95,11 +144,36 @@
1605 msgstr "Notes"
1606
1607 #. module: wms_location
1608+#: selection:product.location,auto:0
1609+msgid "Manual Operation"
1610+msgstr "Opération manuelle"
1611+
1612+#. module: wms_location
1613 #: help:stock.location,depth:0
1614 msgid "Enter the depth in cm"
1615 msgstr "Entrer la profondeur en cm"
1616
1617 #. module: wms_location
1618+#: field:product.product,location_ids:0
1619+msgid "Location Paths"
1620+msgstr "Chemin des emplacements"
1621+
1622+#. module: wms_location
1623+#: field:product.location,product_id:0
1624+msgid "Products"
1625+msgstr "Produits"
1626+
1627+#. module: wms_location
1628+#: model:ir.model,name:wms_location.model_product_location
1629+msgid "Product per location"
1630+msgstr "Produit par emplacement"
1631+
1632+#. module: wms_location
1633+#: selection:product.product,location_type:0
1634+msgid "Fixed"
1635+msgstr "DĂ©fini"
1636+
1637+#. module: wms_location
1638 #: view:stock.location:0
1639 msgid "Dimension"
1640 msgstr "Dimension"
1641@@ -120,6 +194,28 @@
1642 msgstr "Code"
1643
1644 #. module: wms_location
1645+#: field:product.location,location_from_id:0
1646+msgid "Source Location"
1647+msgstr "Emplacement source"
1648+
1649+#. module: wms_location
1650+#: field:product.location,location_dest_id:0
1651+msgid "Destination Location"
1652+msgstr "Emplacement de destination"
1653+
1654+#. module: wms_location
1655+#: field:product.location,auto:0
1656+#: selection:product.location,auto:0
1657+msgid "Automatic Move"
1658+msgstr "Mouvement automatique"
1659+
1660+#. module: wms_location
1661+#: view:product.location:0
1662+#: view:product.product:0
1663+msgid "Locations"
1664+msgstr "Emplacements"
1665+
1666+#. module: wms_location
1667 #: field:stock.location,height:0
1668 msgid "Height"
1669 msgstr "Hauteur"
1670@@ -135,6 +231,11 @@
1671 msgstr "DĂ©passer par largeur"
1672
1673 #. module: wms_location
1674+#: field:product.location,name:0
1675+msgid "Operation"
1676+msgstr "Opération"
1677+
1678+#. module: wms_location
1679 #: help:stock.location,transcend_depth:0
1680 msgid "Autorize the depth to be transcend"
1681 msgstr "Autoriser le dépassement de profondeur"
1682
1683=== modified file 'wms_location/i18n/wms_location.pot'
1684--- wms_location/i18n/wms_location.pot 2010-06-18 20:21:43 +0000
1685+++ wms_location/i18n/wms_location.pot 2011-01-20 22:41:56 +0000
1686@@ -4,10 +4,10 @@
1687 #
1688 msgid ""
1689 msgstr ""
1690-"Project-Id-Version: OpenERP Server 5.0.10\n"
1691+"Project-Id-Version: OpenERP Server 5.0.12\n"
1692 "Report-Msgid-Bugs-To: support@openerp.com\n"
1693-"POT-Creation-Date: 2010-06-18 20:18:23+0000\n"
1694-"PO-Revision-Date: 2010-06-18 20:18:23+0000\n"
1695+"POT-Creation-Date: 2010-12-09 09:46:26+0000\n"
1696+"PO-Revision-Date: 2010-12-09 09:46:26+0000\n"
1697 "Last-Translator: <>\n"
1698 "Language-Team: \n"
1699 "MIME-Version: 1.0\n"
1700@@ -16,8 +16,23 @@
1701 "Plural-Forms: \n"
1702
1703 #. module: wms_location
1704-#: model:ir.module.module,description:wms_location.module_meta_information
1705-msgid "Location management"
1706+#: model:ir.module.module,shortdesc:wms_location.module_meta_information
1707+msgid "Wms Location"
1708+msgstr ""
1709+
1710+#. module: wms_location
1711+#: constraint:ir.model:0
1712+msgid "The Object name must start with x_ and not contain any special character !"
1713+msgstr ""
1714+
1715+#. module: wms_location
1716+#: selection:product.location,auto:0
1717+msgid "Automatic No Step Added"
1718+msgstr ""
1719+
1720+#. module: wms_location
1721+#: field:stock.location,transcend_height:0
1722+msgid "Transcend Height"
1723 msgstr ""
1724
1725 #. module: wms_location
1726@@ -41,11 +56,22 @@
1727 msgstr ""
1728
1729 #. module: wms_location
1730+#: help:product.location,auto:0
1731+msgid "This is used to define paths the product has to follow within the location tree.\n"
1732+"The 'Automatic Move' value will create a stock move after the current one that will be validated automatically. With 'Manual Operation', the stock move has to be validated by a worker. With 'Automatic No Step Added', the location is replaced in the original move."
1733+msgstr ""
1734+
1735+#. module: wms_location
1736 #: view:stock.location:0
1737 msgid "General"
1738 msgstr ""
1739
1740 #. module: wms_location
1741+#: field:product.product,location_type:0
1742+msgid "Location type"
1743+msgstr ""
1744+
1745+#. module: wms_location
1746 #: help:stock.location,code:0
1747 msgid "Enter the complete code for this location, usefull for search"
1748 msgstr ""
1749@@ -56,6 +82,11 @@
1750 msgstr ""
1751
1752 #. module: wms_location
1753+#: field:product.location,delay:0
1754+msgid "Delay (days)"
1755+msgstr ""
1756+
1757+#. module: wms_location
1758 #: view:stock.location:0
1759 msgid "Localisation"
1760 msgstr ""
1761@@ -71,13 +102,13 @@
1762 msgstr ""
1763
1764 #. module: wms_location
1765-#: model:ir.module.module,shortdesc:wms_location.module_meta_information
1766-msgid "Wms Location"
1767+#: help:product.location,delay:0
1768+msgid "Number of days to do this transition"
1769 msgstr ""
1770
1771 #. module: wms_location
1772-#: field:stock.location,transcend_height:0
1773-msgid "Transcend Height"
1774+#: model:ir.module.module,description:wms_location.module_meta_information
1775+msgid "Location management"
1776 msgstr ""
1777
1778 #. module: wms_location
1779@@ -86,6 +117,16 @@
1780 msgstr ""
1781
1782 #. module: wms_location
1783+#: selection:product.product,location_type:0
1784+msgid "Compute"
1785+msgstr ""
1786+
1787+#. module: wms_location
1788+#: help:product.product,location_ids:0
1789+msgid "These rules set the right path of the product in the whole location tree."
1790+msgstr ""
1791+
1792+#. module: wms_location
1793 #: help:stock.location,transcend_width:0
1794 msgid "Autorize the width to be transcend"
1795 msgstr ""
1796@@ -96,11 +137,36 @@
1797 msgstr ""
1798
1799 #. module: wms_location
1800+#: selection:product.location,auto:0
1801+msgid "Manual Operation"
1802+msgstr ""
1803+
1804+#. module: wms_location
1805 #: help:stock.location,depth:0
1806 msgid "Enter the depth in cm"
1807 msgstr ""
1808
1809 #. module: wms_location
1810+#: field:product.product,location_ids:0
1811+msgid "Location Paths"
1812+msgstr ""
1813+
1814+#. module: wms_location
1815+#: field:product.location,product_id:0
1816+msgid "Products"
1817+msgstr ""
1818+
1819+#. module: wms_location
1820+#: model:ir.model,name:wms_location.model_product_location
1821+msgid "Product per location"
1822+msgstr ""
1823+
1824+#. module: wms_location
1825+#: selection:product.product,location_type:0
1826+msgid "Fixed"
1827+msgstr ""
1828+
1829+#. module: wms_location
1830 #: view:stock.location:0
1831 msgid "Dimension"
1832 msgstr ""
1833@@ -121,6 +187,28 @@
1834 msgstr ""
1835
1836 #. module: wms_location
1837+#: field:product.location,location_from_id:0
1838+msgid "Source Location"
1839+msgstr ""
1840+
1841+#. module: wms_location
1842+#: field:product.location,location_dest_id:0
1843+msgid "Destination Location"
1844+msgstr ""
1845+
1846+#. module: wms_location
1847+#: field:product.location,auto:0
1848+#: selection:product.location,auto:0
1849+msgid "Automatic Move"
1850+msgstr ""
1851+
1852+#. module: wms_location
1853+#: view:product.location:0
1854+#: view:product.product:0
1855+msgid "Locations"
1856+msgstr ""
1857+
1858+#. module: wms_location
1859 #: field:stock.location,height:0
1860 msgid "Height"
1861 msgstr ""
1862@@ -136,6 +224,11 @@
1863 msgstr ""
1864
1865 #. module: wms_location
1866+#: field:product.location,name:0
1867+msgid "Operation"
1868+msgstr ""
1869+
1870+#. module: wms_location
1871 #: help:stock.location,transcend_depth:0
1872 msgid "Autorize the depth to be transcend"
1873 msgstr ""
1874
1875=== modified file 'wms_location/object/__init__.py'
1876--- wms_location/object/__init__.py 2010-06-06 15:32:35 +0000
1877+++ wms_location/object/__init__.py 2011-01-20 22:41:56 +0000
1878@@ -23,5 +23,6 @@
1879 ##############################################################################
1880
1881 import location
1882+import product
1883
1884 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
1885
1886=== modified file 'wms_location/object/location.py'
1887--- wms_location/object/location.py 2010-12-06 16:11:29 +0000
1888+++ wms_location/object/location.py 2011-01-20 22:41:56 +0000
1889@@ -62,9 +62,24 @@
1890 'transcend_depth': lambda *a: False,
1891 }
1892
1893+ def chained_location_get(self, cr, uid, location, partner=None, product=None, context=None):
1894+ """
1895+ Check if there is a chained location for this product at this location, and include with crossdock process
1896+ This function is similar to stock_location (conflict if stock_location is installed)
1897+ """
1898+ if context is None:
1899+ context = {}
1900+
1901+ if product and product.location_type in ('fixed','crossdock'):
1902+ for path in product.location_ids:
1903+ if path.location_from_id.id == location.id:
1904+ return path.location_dest_id, path.auto, path.delay
1905+
1906+ return super(StockLocation, self).chained_location_get(cr, uid, location, partner, product, context=context)
1907+
1908 def _stock_get(self, cr, uid, location_id, product_id, context=None):
1909 """
1910- We must retrieve the stop at this location and for this production_lot or tracking ID
1911+ We must retrieve the stock at this location and for this production_lot or tracking ID
1912 """
1913 if context is None:
1914 context = {}
1915
1916=== added file 'wms_location/object/product.py'
1917--- wms_location/object/product.py 1970-01-01 00:00:00 +0000
1918+++ wms_location/object/product.py 2011-01-20 22:41:56 +0000
1919@@ -0,0 +1,86 @@
1920+# -*- coding: utf-8 -*-
1921+##############################################################################
1922+#
1923+# wms_location module for OpenERP, Location management
1924+# Copyright (C) 2010 SYLEAM (<http://www.syleam.fr/>)
1925+# Christophe CHAUVET <christophe.chauvet@syleam.fr>
1926+#
1927+# This file is a part of wms_location
1928+#
1929+# wms_location is free software: you can redistribute it and/or modify
1930+# it under the terms of the GNU General Public License as published by
1931+# the Free Software Foundation, either version 3 of the License, or
1932+# (at your option) any later version.
1933+#
1934+# wms_location is distributed in the hope that it will be useful,
1935+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1936+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1937+# GNU General Public License for more details.
1938+#
1939+# You should have received a copy of the GNU General Public License
1940+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1941+#
1942+##############################################################################
1943+
1944+from osv import osv
1945+from osv import fields
1946+
1947+
1948+_auto_move = [
1949+ ('auto', 'Automatic Move'),
1950+ ('manual', 'Manual Operation'),
1951+ ('transparent', 'Automatic No Step Added')
1952+]
1953+
1954+
1955+class product_location(osv.osv):
1956+ _name = 'product.location'
1957+ _description = 'Product per location'
1958+
1959+ _columns = {
1960+ 'name': fields.char('Operation', size=64, required=True),
1961+ 'product_id': fields.many2one('product.product', 'Products', ondelete='cascade'),
1962+ 'location_from_id': fields.many2one('stock.location', 'Source Location', ondelete='cascade', required=True),
1963+ 'location_dest_id': fields.many2one('stock.location', 'Destination Location', ondelete='cascade', required=True),
1964+ 'delay': fields.integer('Delay (days)', help="Number of days to do this transition"),
1965+ 'auto': fields.selection(_auto_move, 'Automatic Move', required=True,
1966+ help="This is used to define paths the product has to follow within the location tree.\n" \
1967+ "The 'Automatic Move' value will create a stock move after the current one that will be "\
1968+ "validated automatically. With 'Manual Operation', the stock move has to be validated "\
1969+ "by a worker. With 'Automatic No Step Added', the location is replaced in the original move."
1970+ ),
1971+ }
1972+
1973+ _defaults = {
1974+ 'auto': lambda *arg: 'auto',
1975+ 'delay': lambda *arg: 1
1976+ }
1977+
1978+product_location()
1979+
1980+_loc_type = [
1981+ ('fixed', 'Fixed'),
1982+ ('compute', 'Compute'),
1983+ ('crossdock', 'Cross Docking'),
1984+]
1985+
1986+
1987+class product_product(osv.osv):
1988+ _inherit = 'product.product'
1989+
1990+ _columns = {
1991+ 'location_type': fields.selection(_loc_type,
1992+ 'Location type'),
1993+ 'location_ids': fields.one2many('product.location', 'product_id',
1994+ 'Location Paths',
1995+ help="These rules set the right path of the product in the "\
1996+ "whole location tree.")
1997+ }
1998+
1999+ _defaults = {
2000+ 'location_type': lambda *a: 'compute',
2001+ }
2002+
2003+product_product()
2004+
2005+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
2006
2007=== modified file 'wms_location/security/ir.model.access.csv'
2008--- wms_location/security/ir.model.access.csv 2010-06-06 15:32:35 +0000
2009+++ wms_location/security/ir.model.access.csv 2011-01-20 22:41:56 +0000
2010@@ -1,1 +1,2 @@
2011 "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
2012+"access_product_location_user","product_location User","model_product_location","",1,0,0,0
2013
2014=== added file 'wms_location/view/product.xml'
2015--- wms_location/view/product.xml 1970-01-01 00:00:00 +0000
2016+++ wms_location/view/product.xml 2011-01-20 22:41:56 +0000
2017@@ -0,0 +1,106 @@
2018+<?xml version="1.0" encoding="UTF-8"?>
2019+<openerp>
2020+ <data>
2021+ ##############################################################################
2022+ #
2023+ # wms_location module for OpenERP, Location management
2024+ # Copyright (C) 2010 SYLEAM ([http://www.syleam.fr/])
2025+ # Christophe CHAUVET [christophe.chauvet@syleam.fr]
2026+ #
2027+ # This file is a part of wms_location
2028+ #
2029+ # wms_location is free software: you can redistribute it and/or modify
2030+ # it under the terms of the GNU General Public License as published by
2031+ # the Free Software Foundation, either version 3 of the License, or
2032+ # (at your option) any later version.
2033+ #
2034+ # wms_location is distributed in the hope that it will be useful,
2035+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
2036+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2037+ # GNU General Public License for more details.
2038+ #
2039+ # You should have received a copy of the GNU General Public License
2040+ # along with this program. If not, see [http://www.gnu.org/licenses/].
2041+ #
2042+ ##############################################################################
2043+
2044+ <!-- ************************************************************** -->
2045+ <!-- ** Product Location ****************************************** -->
2046+ <!-- ************************************************************** -->
2047+
2048+ <record id="view_product_location_tree" model="ir.ui.view">
2049+ <field name="name">product.location.tree</field>
2050+ <field name="model">product.location</field>
2051+ <field name="type">tree</field>
2052+ <field name="priority" eval="8"/>
2053+ <field name="arch" type="xml">
2054+ <tree string="Locations">
2055+ <field name="name"/>
2056+ <field name="location_from_id"/>
2057+ <field name="location_dest_id"/>
2058+ <field name="delay"/>
2059+ <field name="auto"/>
2060+ </tree>
2061+ </field>
2062+ </record>
2063+
2064+ <record id="view_product_location_form" model="ir.ui.view">
2065+ <field name="name">product.location.form</field>
2066+ <field name="model">product.location</field>
2067+ <field name="type">form</field>
2068+ <field name="priority" eval="8"/>
2069+ <field name="arch" type="xml">
2070+ <form string="Locations">
2071+ <field name="name" select="1"/>
2072+ <field name="location_from_id" select="1"/>
2073+ <field name="location_dest_id" select="1"/>
2074+ <field name="delay" select="2"/>
2075+ <field name="auto" select="2"/>
2076+ </form>
2077+ </field>
2078+ </record>
2079+
2080+ <!-- ************************************************************** -->
2081+ <!-- ** Product Product ******************************************* -->
2082+ <!-- ************************************************************** -->
2083+
2084+ <record id="view_product_normal_location_form" model="ir.ui.view">
2085+ <field name="name">product.normal.form - WMS location</field>
2086+ <field name="model">product.product</field>
2087+ <field name="type">form</field>
2088+ <field name="priority" eval="20"/>
2089+ <field name="inherit_id" ref="product.product_normal_form_view"/>
2090+ <field name="arch" type="xml">
2091+
2092+ <data>
2093+ <xpath expr="/form/notebook/page/group/field[@name='virtual_available']" position="after">
2094+ <field name="location_type" required="1"/>
2095+ </xpath>
2096+ <xpath expr="/form/notebook" position="inside">
2097+ <page string="Locations" attrs="{'invisible': [('location_type','not in', ['fixed','crossdock'])]}">
2098+ <field name="location_ids" nolabel="1" colspan="4">
2099+ <tree string="Locations" editable="bottom">
2100+ <field name="name"/>
2101+ <field name="location_from_id"/>
2102+ <field name="location_dest_id"/>
2103+ <field name="delay"/>
2104+ <field name="auto"/>
2105+ </tree>
2106+ <form string="Locations">
2107+ <field name="name" select="1"/>
2108+ <field name="location_from_id" select="1"/>
2109+ <field name="location_dest_id" select="1"/>
2110+ <field name="delay" select="2"/>
2111+ <field name="auto" select="2"/>
2112+ </form>
2113+ </field>
2114+ </page>
2115+ </xpath>
2116+ </data>
2117+
2118+ </field>
2119+ </record>
2120+
2121+
2122+ </data>
2123+</openerp>

Subscribers

People subscribed via source and target branches