Merge lp:~mallorymarcot/unifield-server/us-449 into lp:unifield-server

Proposed by jftempo on 2017-08-25
Status: Merged
Merged at revision: 4490
Proposed branch: lp:~mallorymarcot/unifield-server/us-449
Merge into: lp:unifield-server
Diff against target: 2262 lines (+1654/-32) (has conflicts)
23 files modified
bin/addons/account_period_closing_level/account_period.py (+32/-0)
bin/addons/delivery_mechanism/delivery_mechanism.py (+4/-0)
bin/addons/msf_doc_import/wizard/wizard_delete_lines.py (+23/-0)
bin/addons/msf_outgoing/msf_outgoing.py (+102/-9)
bin/addons/msf_outgoing/wizard/create_picking_processor.py (+40/-0)
bin/addons/msf_outgoing/wizard/create_picking_processor_view.xml (+3/-1)
bin/addons/msf_outgoing/wizard/validate_picking_processor.py (+40/-1)
bin/addons/msf_outgoing/wizard/validate_picking_processor_view.xml (+3/-1)
bin/addons/msf_profile/data/patches.xml (+22/-0)
bin/addons/msf_profile/i18n/fr_MF.po (+648/-20)
bin/addons/msf_profile/msf_profile.py (+166/-0)
bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv (+51/-0)
bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv (+9/-0)
bin/addons/procurement_request/procurement_request_view.xml (+4/-0)
bin/addons/reason_types_moves/reason_type.py (+9/-0)
bin/addons/sales_followup/report/sale_follow_up_report_multi.py (+25/-0)
bin/addons/specific_rules/specific_rules.py (+46/-0)
bin/addons/stock/stock.py (+15/-0)
bin/addons/stock_override/wizard/stock_card_wizard.py (+4/-0)
bin/release.py (+4/-0)
bin/unifield-version.txt (+6/-0)
bin/updater.py (+372/-0)
setup.py (+26/-0)
Text conflict in bin/addons/account_period_closing_level/account_period.py
Text conflict in bin/addons/delivery_mechanism/delivery_mechanism.py
Text conflict in bin/addons/msf_doc_import/wizard/wizard_delete_lines.py
Text conflict in bin/addons/msf_profile/data/patches.xml
Text conflict in bin/addons/msf_profile/i18n/fr_MF.po
Text conflict in bin/addons/msf_profile/msf_profile.py
Text conflict in bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv
Text conflict in bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv
Text conflict in bin/addons/procurement_request/procurement_request_view.xml
Text conflict in bin/addons/reason_types_moves/reason_type.py
Text conflict in bin/addons/sales_followup/report/sale_follow_up_report_multi.py
Text conflict in bin/addons/specific_rules/specific_rules.py
Text conflict in bin/addons/stock/stock.py
Text conflict in bin/addons/stock_override/wizard/stock_card_wizard.py
Text conflict in bin/release.py
Text conflict in bin/unifield-version.txt
Text conflict in bin/updater.py
Text conflict in setup.py
To merge this branch: bzr merge lp:~mallorymarcot/unifield-server/us-449
Reviewer Review Type Date Requested Status
UniField Reviewer Team 2017-08-25 Pending
Review via email: mp+329612@code.launchpad.net
To post a comment you must log in.
4352. By Mallory MARCOT on 2017-08-28

Update "save as draft" lines with returned qty in case of cancel sub-pick and return from PPL

4353. By Mallory MARCOT on 2017-08-28

US-449 [IMP] return to stock update save as draft lines even if not saved as draft qty

4354. By Mallory MARCOT on 2017-09-01

US-449 [FIX] returned qty issue

4355. By Mallory MARCOT on 2017-09-01

US-449 [IMP] write concurrency warning

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bin/addons/account/account.py'
2=== modified file 'bin/addons/account/account_invoice_view.xml'
3=== modified file 'bin/addons/account/account_view.xml'
4=== modified file 'bin/addons/account/project/project_view.xml'
5=== modified file 'bin/addons/account_override/account_invoice_view.xml'
6=== modified file 'bin/addons/account_override/account_move_line.py'
7=== modified file 'bin/addons/account_period_closing_level/account_period.py'
8--- bin/addons/account_period_closing_level/account_period.py 2017-08-28 14:06:27 +0000
9+++ bin/addons/account_period_closing_level/account_period.py 2017-09-01 09:49:29 +0000
10@@ -193,11 +193,20 @@
11
12 # first verify that all existent registers for this period are closed
13 reg_ids = reg_obj.search(cr, uid, [('period_id', '=', period.id)], context=context)
14+<<<<<<< TREE
15 journal_ok = []
16+=======
17+ linked_prev_reg_ids = []
18+>>>>>>> MERGE-SOURCE
19 for register in reg_obj.browse(cr, uid, reg_ids, context=context):
20+<<<<<<< TREE
21 journal_ok.append(register.journal_id.id)
22+=======
23+ register.prev_reg_id and linked_prev_reg_ids.append(register.prev_reg_id.id)
24+>>>>>>> MERGE-SOURCE
25 if register.state not in ['confirm']:
26 raise osv.except_osv(_('Warning'), _("The register '%s' is not closed. Please close it before closing period") % (register.name,))
27+<<<<<<< TREE
28
29 # prevent period closing if one of the registers of the previous period
30 # has no corresponding register in the period to close AND has a non 0 balance. (except for period 13..16)
31@@ -218,6 +227,29 @@
32 "to close and have a balance which isn't equal to 0:\n"
33 "%s") % ", ".join([r.name for r in reg_ko]))
34
35+=======
36+
37+ # prevent period closing if one of the registers of the previous period
38+ # has no corresponding register in the period to close AND has a non 0 balance. (except for period 13..16)
39+ if not period.special:
40+ prev_period_id = register_tools.previous_period_id(self, cr, uid, period.id, context=context, raise_error=False)
41+ if prev_period_id:
42+ all_prev_reg_ids = reg_obj.search(cr, uid, [('period_id', '=', prev_period_id)], order='NO_ORDER', context=context)
43+ # get the registers of the previous period which are NOT linked to a register of the period to close
44+ orphan_prev_reg_ids = [reg_id for reg_id in all_prev_reg_ids if reg_id not in linked_prev_reg_ids]
45+ reg_ko = []
46+ for reg in reg_obj.browse(cr, uid, orphan_prev_reg_ids,
47+ fields_to_fetch=['balance_end', 'balance_end_real', 'balance_end_cash', 'name'],
48+ context=context):
49+ if abs(reg.balance_end) > 10**-3 or abs(reg.balance_end_real) > 10**-3 or abs(reg.balance_end_cash) > 10**-3:
50+ reg_ko.append(reg)
51+ if len(reg_ko) > 0:
52+ raise osv.except_osv(_('Warning'),
53+ _("One or several registers have not been generated for the period "
54+ "to close and have a balance which isn't equal to 0:\n"
55+ "%s") % ", ".join([r.name for r in reg_ko]))
56+
57+>>>>>>> MERGE-SOURCE
58 # check if subscriptions lines were not created for this period
59 sub_ids = sub_obj.search(cr, uid, [('date', '<', period.date_stop), ('move_id', '=', False)], context=context)
60 if len(sub_ids) > 0:
61
62=== modified file 'bin/addons/base/ir/ir.xml'
63=== modified file 'bin/addons/delivery_mechanism/delivery_mechanism.py'
64--- bin/addons/delivery_mechanism/delivery_mechanism.py 2017-08-28 12:05:59 +0000
65+++ bin/addons/delivery_mechanism/delivery_mechanism.py 2017-09-01 09:49:29 +0000
66@@ -334,8 +334,12 @@
67 for move in self.browse(cr, uid, move_ids, context=context):
68 pick = move.picking_id
69 cond1 = move.picking_id.subtype == 'standard'
70+<<<<<<< TREE
71 cond2 = move.product_qty != 0.00 and pick.subtype == 'picking' and (not pick.backorder_id or pick.backorder_id.subtype == 'standard') and pick.state == 'draft'
72+=======
73+>>>>>>> MERGE-SOURCE
74 # move from draft picking or standard picking
75+ cond2 = move.product_qty != 0.00 and pick.subtype == 'picking' and (not pick.backorder_id or pick.backorder_id.subtype == 'standard') and pick.state == 'draft'
76 if cond2 or cond1:
77 integrity_check.append(move)
78 # return the first one matching
79
80=== modified file 'bin/addons/financing_contract/financing_contract_view.xml'
81=== modified file 'bin/addons/msf_budget/msf_budget_view.xml'
82=== modified file 'bin/addons/msf_doc_import/wizard/__init__.py'
83=== modified file 'bin/addons/msf_doc_import/wizard/wizard_delete_lines.py'
84--- bin/addons/msf_doc_import/wizard/wizard_delete_lines.py 2017-08-11 13:56:44 +0000
85+++ bin/addons/msf_doc_import/wizard/wizard_delete_lines.py 2017-09-01 09:49:29 +0000
86@@ -573,6 +573,7 @@
87 if isinstance(ids, (int, long)):
88 ids = [ids]
89
90+<<<<<<< TREE
91 # only for FO
92 if context['active_model'] == 'sale.order' \
93 and (not context.get('procurement_request') or not context['procurement_request']):
94@@ -611,6 +612,28 @@
95 else:
96 line_obj.unlink(cr, uid, line_ids, context=context)
97 context['from_del_wizard'] = False
98+=======
99+ for wiz in self.browse(cr, uid, ids, context=context):
100+ line_obj = self.pool.get(wiz.to_remove_type)
101+ line_ids = []
102+ # Parse the content of 'line_ids' field (text field) to retrieve
103+ # the id of lines to remove.
104+ for line in wiz.line_ids:
105+ for l in line[2]:
106+ line_ids.append(l)
107+
108+ context['noraise'] = True
109+ context.update({
110+ 'noraise': True,
111+ 'from_del_wizard': True,
112+ })
113+ if wiz.to_remove_type in ('purchase.order.line', 'tender.line'):
114+ line_obj.fake_unlink(cr, uid, line_ids, context=context)
115+ else:
116+ line_obj.unlink(cr, uid, line_ids, context=context)
117+
118+ context['from_del_wizard'] = False
119+>>>>>>> MERGE-SOURCE
120
121 return {'type': 'ir.actions.act_window_close'}
122
123
124=== modified file 'bin/addons/msf_instance/msf_instance_installer.py'
125=== modified file 'bin/addons/msf_order_date/order_dates_view.xml'
126=== modified file 'bin/addons/msf_outgoing/msf_outgoing.py'
127--- bin/addons/msf_outgoing/msf_outgoing.py 2017-08-16 10:23:09 +0000
128+++ bin/addons/msf_outgoing/msf_outgoing.py 2017-09-01 09:49:29 +0000
129@@ -811,6 +811,15 @@
130 picking = family.draft_packing_id
131 draft_picking = family.ppl_id and family.ppl_id.previous_step_id and family.ppl_id.previous_step_id.backorder_id or False
132
133+ # get the linked "save as draft" wizard if has:
134+ picking_processor_wiz = []
135+ if draft_picking:
136+ picking_processor_wiz = self.pool.get('create.picking.processor').search(cr, uid, [
137+ ('picking_id', '=', draft_picking.id),
138+ ('draft', '=', True),
139+ ], context=context)
140+ if picking_processor_wiz:
141+ picking_processor_wiz = self.pool.get('create.picking.processor').browse(cr, uid, picking_processor_wiz[0], context=context)
142
143 # UF-2531: Store some important info for the return pack messages
144 return_info.setdefault(str(counter), {
145@@ -885,6 +894,24 @@
146 draft_initial_qty += return_qty
147 move_obj.write(cr, uid, [draft_move.id], {'product_qty': draft_initial_qty}, context=context)
148
149+ # Update or create "save as draft" lines with returned qty:
150+ if picking_processor_wiz:
151+ save_as_draft_move = self.pool.get('create.picking.move.processor').search(cr, uid, [
152+ ('wizard_id', '=', picking_processor_wiz.id),
153+ ('move_id', '=', draft_move.id),
154+ ], context=context)
155+ if not save_as_draft_move: # then create the SaD line:
156+ move_data = self.pool.get('create.picking.move.processor')._get_line_data(cr, uid, wizard=picking_processor_wiz, move=draft_move, context=context)
157+ move_data.update({'quantity': return_qty})
158+ save_as_draft_move = self.pool.get('create.picking.move.processor').create(cr, uid, move_data, context=context)
159+ save_as_draft_move = [save_as_draft_move]
160+ else: # update Sad line
161+ for sad_move in self.pool.get('create.picking.move.processor').browse(cr, uid, save_as_draft_move, context=context):
162+ self.pool.get('create.picking.move.processor').write(cr, uid, sad_move.id, {
163+ 'ordered_quantity': sad_move.ordered_quantity + return_qty,
164+ 'quantity': sad_move.quantity + return_qty,
165+ }, context=context)
166+
167 # log the increase action - display the picking ticket view form - log message for each draft packing because each corresponds to a different draft picking
168 if not log_flag:
169 draft_shipment_name = self.read(cr, uid, shipment.id, ['name'], context=context)['name']
170@@ -3506,9 +3533,16 @@
171
172 if isinstance(ids, (int, long)):
173 ids = [ids]
174+ if context is None:
175+ context = {}
176
177- processor_id = proc_obj.create(cr, uid, {'picking_id': ids[0]}, context=context)
178- proc_obj.create_lines(cr, uid, processor_id, context=context)
179+ # if wizard already exists, then open it (able save as draft/reset functionnality):
180+ wiz_ids = proc_obj.search(cr, uid, [('picking_id', 'in', ids), ('draft', '=', True)], context=context)
181+ if wiz_ids:
182+ processor_id = wiz_ids[0]
183+ else:
184+ processor_id = proc_obj.create(cr, uid, {'picking_id': ids[0]}, context=context)
185+ proc_obj.create_lines(cr, uid, processor_id, context=context)
186
187 return {
188 'type': 'ir.actions.act_window',
189@@ -3517,6 +3551,7 @@
190 'view_type': 'form',
191 'view_mode': 'form',
192 'target': 'new',
193+ 'context': context,
194 }
195
196 def do_create_picking(self, cr, uid, wizard_ids, context=None):
197@@ -3698,8 +3733,13 @@
198 _('The picking ticket is not in \'Available\' state. Please check this and re-try')
199 )
200
201- processor_id = proc_obj.create(cr, uid, {'picking_id': ids[0]}, context=context)
202- proc_obj.create_lines(cr, uid, processor_id, context=context)
203+ # if wizard already exists, then open it (able save as draft/reset functionnality):
204+ wiz_ids = proc_obj.search(cr, uid, [('picking_id', 'in', ids), ('draft', '=', True)], context=context)
205+ if wiz_ids:
206+ processor_id = wiz_ids[0]
207+ else:
208+ processor_id = proc_obj.create(cr, uid, {'picking_id': ids[0]}, context=context)
209+ proc_obj.create_lines(cr, uid, processor_id, context=context)
210
211 return {
212 'type': 'ir.actions.act_window',
213@@ -4314,6 +4354,16 @@
214 picking = wizard.picking_id
215 draft_picking_id = picking.previous_step_id.backorder_id.id
216
217+ # get the linked "save as draft" wizard if has:
218+ picking_processor_wiz = []
219+ if draft_picking_id:
220+ picking_processor_wiz = self.pool.get('create.picking.processor').search(cr, uid, [
221+ ('picking_id', '=', draft_picking_id),
222+ ('draft', '=', True),
223+ ], context=context)
224+ if picking_processor_wiz:
225+ picking_processor_wiz = self.pool.get('create.picking.processor').browse(cr, uid, picking_processor_wiz[0], context=context)
226+
227 for line in wizard.move_ids:
228 return_qty = line.quantity
229
230@@ -4363,11 +4413,27 @@
231
232 # Increase the draft move with the returned quantity
233 draft_move_id = line.move_id.backmove_id.id
234- draft_initial_qty = move_obj.read(cr, uid, [draft_move_id], ['product_qty'], context=context)[0]['product_qty']
235- draft_initial_qty += return_qty
236- move_obj.write(cr, uid, [draft_move_id], {'product_qty': draft_initial_qty}, context=context)
237-
238-
239+ draft_move_qty = move_obj.read(cr, uid, [draft_move_id], ['product_qty'], context=context)[0]['product_qty']
240+ draft_move_qty += return_qty
241+ move_obj.write(cr, uid, [draft_move_id], {'product_qty': draft_move_qty}, context=context)
242+
243+ # Update or create "save as draft" lines with returned qty:
244+ if picking_processor_wiz:
245+ save_as_draft_move = self.pool.get('create.picking.move.processor').search(cr, uid, [
246+ ('wizard_id', '=', picking_processor_wiz.id),
247+ ('move_id', '=', draft_move_id),
248+ ], context=context)
249+ if not save_as_draft_move: # then create the SaD line:
250+ move_data = self.pool.get('create.picking.move.processor')._get_line_data(cr, uid, wizard=picking_processor_wiz, move=line.move_id.backmove_id, context=context)
251+ move_data.update({'quantity': return_qty})
252+ save_as_draft_move = self.pool.get('create.picking.move.processor').create(cr, uid, move_data, context=context)
253+ save_as_draft_move = [save_as_draft_move]
254+ else: # update Sad line
255+ for sad_move in self.pool.get('create.picking.move.processor').browse(cr, uid, save_as_draft_move, context=context):
256+ self.pool.get('create.picking.move.processor').write(cr, uid, sad_move.id, {
257+ 'ordered_quantity': sad_move.ordered_quantity + return_qty,
258+ 'quantity': sad_move.quantity + return_qty,
259+ }, context=context)
260
261 # Log message for PPL
262 ppl_view = data_obj.get_object_reference(cr, uid, 'msf_outgoing', 'view_ppl_form')[1]
263@@ -4477,6 +4543,14 @@
264 # get the draft picking
265 draft_picking_id = picking.backorder_id.id
266
267+ # get the linked "save as draft" wizard if has:
268+ picking_processor_wiz = self.pool.get('create.picking.processor').search(cr, uid, [
269+ ('picking_id', '=', draft_picking_id),
270+ ('draft', '=', True),
271+ ], context=context)
272+ if picking_processor_wiz:
273+ picking_processor_wiz = self.pool.get('create.picking.processor').browse(cr, uid, picking_processor_wiz[0], context=context)
274+
275 # for each move from picking ticket - could be split moves
276 for move in picking.move_lines:
277 # find the corresponding move in draft
278@@ -4486,6 +4560,25 @@
279 initial_qty = move_obj.read(cr, uid, [draft_move.id], ['product_qty'], context=context)[0]['product_qty']
280 initial_qty += move.product_qty
281 move_obj.write(cr, uid, [draft_move.id], {'product_qty': initial_qty}, context=context)
282+
283+ # Update or create "save as draft" lines with returned qty:
284+ if picking_processor_wiz:
285+ save_as_draft_move = self.pool.get('create.picking.move.processor').search(cr, uid, [
286+ ('wizard_id', '=', picking_processor_wiz.id),
287+ ('move_id', '=', draft_move.id),
288+ ], context=context)
289+ if not save_as_draft_move: # then create the SaD line:
290+ move_data = self.pool.get('create.picking.move.processor')._get_line_data(cr, uid, wizard=picking_processor_wiz, move=move, context=context)
291+ move_data.update({'quantity': move.product_qty})
292+ save_as_draft_move = self.pool.get('create.picking.move.processor').create(cr, uid, move_data, context=context)
293+ save_as_draft_move = [save_as_draft_move]
294+ else: # update Sad line
295+ for sad_move in self.pool.get('create.picking.move.processor').browse(cr, uid, save_as_draft_move, context=context):
296+ self.pool.get('create.picking.move.processor').write(cr, uid, sad_move.id, {
297+ 'ordered_quantity': sad_move.ordered_quantity + move.product_qty,
298+ 'quantity': sad_move.quantity + move.product_qty,
299+ }, context=context)
300+
301 # log the increase action
302 # TODO refactoring needed
303 obj_data = self.pool.get('ir.model.data')
304
305=== modified file 'bin/addons/msf_outgoing/wizard/create_picking_processor.py'
306--- bin/addons/msf_outgoing/wizard/create_picking_processor.py 2016-11-09 09:07:38 +0000
307+++ bin/addons/msf_outgoing/wizard/create_picking_processor.py 2017-09-01 09:49:29 +0000
308@@ -40,6 +40,7 @@
309 'wizard_id',
310 string='Moves',
311 ),
312+ 'draft': fields.boolean('Draft'),
313 }
314
315 """
316@@ -54,11 +55,50 @@
317
318 wizard_brw_list = self.browse(cr, uid, ids, context=context)
319
320+ # disable "save as draft":
321+ self.write(cr, uid, ids, {'draft': False}, context=context)
322+
323 self.integrity_check_quantity(cr, uid, wizard_brw_list, context=context)
324 self.integrity_check_prodlot(cr, uid, wizard_brw_list, context=context)
325 # call stock_picking method which returns action call
326 return picking_obj.do_create_picking(cr, uid, ids, context=context)
327
328+
329+ def do_reset(self, cr, uid, ids, context=None):
330+ if context is None:
331+ context = {}
332+ if isinstance(ids, (int, long)):
333+ ids = [ids]
334+ if not ids:
335+ raise osv.except_osv(
336+ _('Processing Error'),
337+ _('No data to process !'),
338+ )
339+
340+ pick_id = []
341+ for proc in self.browse(cr, uid, ids, context=context):
342+ pick_id = proc['picking_id']['id']
343+
344+ self.write(cr, uid, ids, {'draft': False}, context=context)
345+
346+ return self.pool.get('stock.picking').create_picking(cr, uid, pick_id, context=context)
347+
348+
349+ def do_save_draft(self, cr, uid, ids, context=None):
350+ if context is None:
351+ context = {}
352+ if isinstance(ids, (int, long)):
353+ ids = [ids]
354+ if not ids:
355+ raise osv.except_osv(
356+ _('Processing Error'),
357+ _('No data to process !'),
358+ )
359+
360+ self.write(cr, uid, ids, {'draft': True}, context=context)
361+
362+ return {}
363+
364 create_picking_processor()
365
366
367
368=== modified file 'bin/addons/msf_outgoing/wizard/create_picking_processor_view.xml'
369--- bin/addons/msf_outgoing/wizard/create_picking_processor_view.xml 2016-10-28 12:36:50 +0000
370+++ bin/addons/msf_outgoing/wizard/create_picking_processor_view.xml 2017-09-01 09:49:29 +0000
371@@ -15,9 +15,11 @@
372 <separator colspan="4" string="Move lines" />
373 <field name="move_ids" mode="tree"
374 colspan="4" nolabel="1" />
375+ <field name="draft" invisible="1"/>
376 <group colspan="4" col="6" name="actions">
377 <separator string="Actions" colspan="6" />
378- <label colspan="4"> </label>
379+ <button name="do_reset" type="object" string="Reset" attrs="{'invisible':[('draft','!=',True)]}" icon="gtk-go-forward" />
380+ <button name="do_save_draft" type="object" string="Save as draft" icon="gtk-go-forward" />
381 <button special="cancel" string="Cancel" icon="gtk-cancel" />
382 <button name="do_create_picking" type="object" string="Create Picking" icon="gtk-go-forward" />
383 </group>
384
385=== modified file 'bin/addons/msf_outgoing/wizard/validate_picking_processor.py'
386--- bin/addons/msf_outgoing/wizard/validate_picking_processor.py 2016-11-09 09:07:38 +0000
387+++ bin/addons/msf_outgoing/wizard/validate_picking_processor.py 2017-09-01 09:49:29 +0000
388@@ -41,6 +41,7 @@
389 'wizard_id',
390 string='Moves to process',
391 ),
392+ 'draft': fields.boolean('Draft'),
393 }
394
395 """
396@@ -58,8 +59,10 @@
397 if context is None:
398 context = {}
399
400+ # disable "save as draft":
401+ self.write(cr, uid, ids, {'draft': False}, context=context)
402+
403 to_unlink = []
404-
405 for proc in self.browse(cr, uid, ids, context=context):
406 total_qty = 0.00
407
408@@ -154,6 +157,42 @@
409
410 return True
411
412+
413+ def do_reset(self, cr, uid, ids, context=None):
414+ if context is None:
415+ context = {}
416+ if isinstance(ids, (int, long)):
417+ ids = [ids]
418+ if not ids:
419+ raise osv.except_osv(
420+ _('Processing Error'),
421+ _('No data to process !'),
422+ )
423+
424+ pick_id = []
425+ for proc in self.browse(cr, uid, ids, context=context):
426+ pick_id = proc['picking_id']['id']
427+
428+ self.write(cr, uid, ids, {'draft': False}, context=context)
429+
430+ return self.pool.get('stock.picking').validate_picking(cr, uid, pick_id, context=context)
431+
432+
433+ def do_save_draft(self, cr, uid, ids, context=None):
434+ if context is None:
435+ context = {}
436+ if isinstance(ids, (int, long)):
437+ ids = [ids]
438+ if not ids:
439+ raise osv.except_osv(
440+ _('Processing Error'),
441+ _('No data to process !'),
442+ )
443+
444+ self.write(cr, uid, ids, {'draft': True}, context=context)
445+
446+ return {}
447+
448 validate_picking_processor()
449
450
451
452=== modified file 'bin/addons/msf_outgoing/wizard/validate_picking_processor_view.xml'
453--- bin/addons/msf_outgoing/wizard/validate_picking_processor_view.xml 2016-10-28 12:36:50 +0000
454+++ bin/addons/msf_outgoing/wizard/validate_picking_processor_view.xml 2017-09-01 09:49:29 +0000
455@@ -15,9 +15,11 @@
456 <separator colspan="4" string="Move lines" />
457 <field name="move_ids" mode="tree"
458 colspan="4" nolabel="1" />
459+ <field name="draft" invisible="1"/>
460 <group colspan="4" col="6" name="actions">
461 <separator string="Actions" colspan="6" />
462- <label colspan="4"> </label>
463+ <button name="do_reset" type="object" string="Reset" attrs="{'invisible':[('draft','!=',True)]}" icon="gtk-go-forward" />
464+ <button name="do_save_draft" type="object" string="Save as draft" icon="gtk-go-forward" />
465 <button special="cancel" string="Cancel" icon="gtk-cancel" />
466 <button name="do_validate_picking" type="object" string="Validate Picking" icon="gtk-go-forward" />
467 </group>
468
469=== modified file 'bin/addons/msf_profile/data.xml'
470=== modified file 'bin/addons/msf_profile/data/patches.xml'
471--- bin/addons/msf_profile/data/patches.xml 2017-08-25 15:40:47 +0000
472+++ bin/addons/msf_profile/data/patches.xml 2017-09-01 09:49:29 +0000
473@@ -1,6 +1,7 @@
474 <?xml version="1.0" encoding="utf-8" ?>
475 <openerp>
476 <data>
477+<<<<<<< TREE
478 <record id="us_2647_patch" model="patch.scripts">
479 <field name="method">us_2647</field>
480 </record>
481@@ -23,6 +24,27 @@
482 <field name="method">us_2806_add_ir_ui_view_constraint</field>
483 </record>
484
485+=======
486+ <record id="us_244_patch" model="patch.scripts">
487+ <field name="method">us_2444_touch_liquidity_journals</field>
488+ </record>
489+
490+ <record id="us_3098_patch" model="patch.scripts">
491+ <field name="method">us_3098_patch</field>
492+ </record>
493+
494+ <record id="us_2257_patch" model="patch.scripts">
495+ <field name="method">us_2257_patch</field>
496+ </record>
497+ <record id="us_2730_patch" model="patch.scripts">
498+ <field name="method">us_2730_patch</field>
499+ </record>
500+
501+ <record id="us_2806_add_ir_ui_view_constraint" model="patch.scripts">
502+ <field name="method">us_2806_add_ir_ui_view_constraint</field>
503+ </record>
504+
505+>>>>>>> MERGE-SOURCE
506 <record id="remove_not_synchronized_data" model="patch.scripts">
507 <field name="method">remove_not_synchronized_data</field>
508 </record>
509
510=== modified file 'bin/addons/msf_profile/i18n/fr_MF.po'
511--- bin/addons/msf_profile/i18n/fr_MF.po 2017-08-29 13:47:43 +0000
512+++ bin/addons/msf_profile/i18n/fr_MF.po 2017-09-01 09:49:29 +0000
513@@ -10842,7 +10842,7 @@
514 msgid "International status"
515 msgstr "International status"
516
517-#. modules: return_claim, msf_outgoing
518+#. modules: return_claim, delivery_mechanism, msf_outgoing, stock_override, stock
519 #: code:addons/msf_outgoing/msf_outgoing.py:536
520 #: code:addons/msf_outgoing/msf_outgoing.py:739
521 #: code:addons/msf_outgoing/msf_outgoing.py:778
522@@ -10897,7 +10897,7 @@
523 #: code:addons/return_claim/return_claim.py:1639
524 #, python-format
525 msgid "Processing Error"
526-msgstr "Erreur en cours "
527+msgstr "Erreur de traitement"
528
529 #. module: account_payment
530 #: field:payment.order,mode:0
531@@ -35824,6 +35824,44 @@
532 msgid "Only technically to filter currencies according to partner type"
533 msgstr "Seulement techniquement pour filtrer les devises d'après le type de partenaire"
534
535+<<<<<<< TREE
536+=======
537+#. modules: purchase, product, msf_outgoing, purchase_override, supplier_catalogue, sale, account, kit, purchase_allocation_report, order_types, tender_flow, register_accounting, stock, msf_doc_import
538+#: field:account.invoice.line,price_unit:0
539+#: report:account.invoice2:0
540+#: field:kit.selection.line,price_unit_kit_selection_line:0
541+#: field:kit.selection.sale.line,price_unit_kit_selection_sale_line:0
542+#: report:invoice:0
543+#: field:stock.certificate.valuation,unit_price:0
544+#: field:pricelist.partnerinfo,price:0
545+#: report:purchase.order:0
546+#: field:purchase.order.line,price_unit:0
547+#: report:po.line.allocation.report:0
548+#: report:purchase.order.allocation.report:0
549+#: field:purchase.order.line.allocation.report,unit_price:0
550+#: report:msf.purchase.order:0
551+#: report:purchase.order.merged:0
552+#: field:purchase.order.merged.line,price_unit:0
553+#: field:wizard.account.invoice.line,price_unit:0
554+#: report:msf.sale.order:0
555+#: report:sale.order.allocation.report:0
556+#: field:sale.order.line,price_unit:0
557+#: report:lot.stock.overview:0
558+#: report:lot.stock.overview_all:0
559+#: field:stock.move,price_unit:0
560+#: field:supplier.catalogue.line,unit_price:0
561+#: report:addons/tender_flow/report/tender_rfq_comparison_xls.mako:577
562+#: code:addons/msf_doc_import/wizard/__init__.py:112
563+#: code:addons/msf_doc_import/wizard/__init__.py:133
564+#: code:addons/msf_doc_import/wizard/wizard_import_invoice_line.py:195
565+#: field:wizard.simu.import.po.line,import_unit_price:0
566+#: field:wizard.simu.import.po.line,initial_unit_price:0
567+#: field:account.direct.invoice.wizard.line,price_unit:0
568+#, python-format
569+msgid "Unit Price"
570+msgstr "Prix unitaire"
571+
572+>>>>>>> MERGE-SOURCE
573 #. module: base
574 #: field:res.config.users,is_erp_manager:0
575 #: field:res.users,is_erp_manager:0
576@@ -37260,7 +37298,7 @@
577 #: code:addons/return_claim/return_claim.py:1640
578 #, python-format
579 msgid "No data to process !"
580-msgstr "No data to process !"
581+msgstr "Aucune donnée à traiter !"
582
583 #. module: stock_override
584 #: field:export.report.stock.move,exported_file:0
585@@ -63785,23 +63823,6 @@
586 msgid "Child Accounts"
587 msgstr "Comptes Enfant "
588
589-#. modules: delivery_mechanism, msf_outgoing, stock_override, stock
590-#: code:addons/delivery_mechanism/wizard/stock_partial_picking.py:149
591-#: code:addons/msf_outgoing/wizard/shipment.py:444
592-#: code:addons/stock/wizard/stock_move.py:265
593-#: code:addons/stock/wizard/stock_partial_picking.py:157
594-#: code:addons/stock/wizard/stock_partial_picking.py:165
595-#: code:addons/stock/wizard/stock_partial_picking.py:172
596-#: code:addons/stock_override/wizard/stock_partial_picking.py:113
597-#: code:addons/stock_override/wizard/stock_partial_picking.py:131
598-#: code:addons/stock_override/wizard/stock_partial_picking.py:138
599-#: code:addons/stock_override/wizard/stock_partial_picking.py:149
600-#: code:addons/stock_override/wizard/stock_partial_picking.py:187
601-#: code:addons/stock_override/wizard/stock_partial_picking.py:193
602-#, python-format
603-msgid "Processing Error"
604-msgstr "Erreur de traitement"
605-
606 #. module: specific_rules
607 #: help:product.uom,uom_by_product:0
608 msgid "Field used to filter the UoM for a specific product"
609@@ -98303,6 +98324,7 @@
610 msgid "Intermission Vouchers linked to a PO can be deleted only in Draft state."
611 msgstr "Les Bons Intermission liés à un BC ne peuvent être supprimés qu'à l'état Brouillon."
612
613+<<<<<<< TREE
614 #. module: account_override
615 #: code:addons/account_override/invoice.py:723
616 #, python-format
617@@ -99361,3 +99383,609 @@
618 msgid "Unable to generate updates, retrying %d/%d"
619 msgstr "Impossible de générer les data, nouvel essai %d/%d"
620
621+=======
622+#. module: account_override
623+#: code:addons/account_override/invoice.py:723
624+#, python-format
625+msgid "No Intermission journal found for the current instance."
626+msgstr "Pas de journal Intermission trouvé pour l'instance actuelle."
627+
628+#. module: purchase_override
629+#: field:purchase.order,fixed_order_type:0
630+msgid "Possible order types"
631+msgstr "Types de commande possibles"
632+
633+#. module: purchase_override
634+#: code:addons/purchase_override/purchase.py:669
635+#: code:addons/purchase_override/purchase.py:853
636+#, python-format
637+msgid "%s: This purchase order is a loan counterpart. You cannot change its order type"
638+msgstr "%s: Ce bon de commande est la contrepartie d'un prêt. Vous ne pouvez pas modifier son type"
639+
640+#. module: purchase_override
641+#: code:addons/purchase_override/purchase.py:672
642+#: code:addons/purchase_override/purchase.py:857
643+#, python-format
644+msgid "%s: Only %s order types are allowed for this purchase order"
645+msgstr "%s: Seuls les types %s sont autorisés pour cette commande"
646+
647+#. modules: sourcing, purchase_override, sync_so
648+#: constraint:purchase.order:0
649+#: constraint:purchase.order:0
650+#: constraint:purchase.order:0
651+msgid "The order type of the order is not consistent with the order type of the source"
652+msgstr "Le type de commande n'est pas compatible avec le type de la commande qui est sourcée"
653+
654+#. module: purchase_override
655+#: code:addons/purchase_override/purchase.py:888
656+#, python-format
657+msgid "You cannot select Direct Purchase order for a lines sourced to a normal PO"
658+msgstr "Vous ne pouvez pas sélectionner 'Bon de commande direct' pour des lignes sourcées sur un PO normal"
659+
660+#. module: sourcing
661+#: code:addons/sourcing/sale_order_line.py:929
662+#, python-format
663+msgid "loan"
664+msgstr "prêt"
665+
666+#. module: sourcing
667+#: code:addons/sourcing/sale_order_line.py:929
668+#, python-format
669+msgid "donation"
670+msgstr "don"
671+
672+#. module: sourcing
673+#: code:addons/sourcing/sale_order_line.py:1004
674+#, python-format
675+msgid "You can only source a Donation line from stock."
676+msgstr "Vous pouvez sourcé une ligne de don uniquement sur stock"
677+
678+#. module: sourcing
679+#: code:addons/sourcing/sale_order_line.py:1278
680+#, python-format
681+msgid "You can't source a donation 'on order'."
682+msgstr "Vous ne pouvez pas sourcer un don 'sur commande'."
683+
684+#. module: base
685+#: field:ir.model,default_order:0
686+#, python-format
687+msgid "Default Order"
688+msgstr "Ordre par défaut"
689+
690+#. module: mission_stock
691+#: view:mission.stock.wizard:0
692+msgid "Errors"
693+msgstr "Erreurs"
694+
695+#. module: mission_stock
696+#: field:stock.mission.report,export_state:0
697+msgid "Export state"
698+msgstr "Statut du rapport"
699+
700+#. module: mission_stock
701+#: selection:stock.mission.report,export_state:0
702+msgid "Draft"
703+msgstr "Brouillon"
704+
705+#. module: mission_stock
706+#: selection:stock.mission.report,export_state:0
707+msgid "Error"
708+msgstr "Erreur"
709+
710+#. module: mission_stock
711+#: field:mission.stock.wizard,export_error_msg:0
712+#: field:stock.mission.report,export_error_msg:0
713+msgid "Error message"
714+msgstr "Message d'erreur"
715+
716+#. modules: finance, msf_profile
717+#: model:ir.actions.act_window,name:finance.account_board_commitment_voucher
718+#: view:board.board:0
719+msgid "Commitment Vouchers to validate"
720+msgstr "Bons d'Engagement à valider"
721+
722+#. module: account_reconciliation
723+#: field:account.move.reconcile,nb_partial_legs:0
724+msgid "Nb legs in partial reconcile"
725+msgstr "Nb d'entrées du lettrage partiel"
726+
727+#. module: product_attributes
728+#: selection:product.product,state_ud:0
729+msgid "Forbidden"
730+msgstr "Interdit"
731+
732+#. module: msf_doc_import
733+#: code:addons/msf_doc_import/wizard/wizard_import_invoice_line.py:106
734+#, python-format
735+msgid "No data found in the spreadhseet."
736+msgstr "Aucune donnée trouvée dans le tableur."
737+
738+#. module: msf_doc_import
739+#: code:addons/msf_doc_import/wizard/wizard_import_invoice_line.py:143
740+#, python-format
741+msgid "Line %s. %s was not set. This field is mandatory."
742+msgstr "Ligne %s. %s n'est pas défini. Ce champ est requis."
743+
744+#. module: msf_doc_import
745+#: code:addons/msf_doc_import/wizard/wizard_import_invoice_line.py:156
746+#, python-format
747+msgid "Line %s. Account %s not found!"
748+msgstr "Ligne %s. Compte %s non trouvé !"
749+
750+#. module: msf_doc_import
751+#: code:addons/msf_doc_import/wizard/wizard_import_invoice_line.py:162
752+#, python-format
753+msgid "Line %s. Account %s is 'Donations' type which is forbidden."
754+msgstr "Ligne %s. Le compte %s est de type 'Donations' ce qui est interdit."
755+
756+#. module: msf_doc_import
757+#: code:addons/msf_doc_import/wizard/wizard_import_invoice_line.py:174
758+#, python-format
759+msgid "Line %s: Some restrictions prevent account %s to be used to import this line:\n"
760+"- the account cannot be of type 'View' or 'Liquidity'\n"
761+"- account can not be corrected on HQ entries\n"
762+"- 'Type for specific treatment' cannot be 'Donations'\n"
763+"- 'Internal Type' should be different from 'Regular' OR 'Account Type' should be different from 'Stock'\n"
764+"- 'Account Type' should be different from 'Expense' OR 'P&L / BS Category' not None."
765+msgstr "Ligne %s: Des restrictions empêchent le compte %s d'être utilisé pour importer cette ligne :\n"
766+"- le compte ne peut pas être de type 'Vue' ou 'Liquidités'\n"
767+"- compte impossible à corriger dans les entrées HQ\n"
768+"- 'Type pour traitement spécifique' ne peut pas être 'Donations'\n"
769+"- 'Type Interne' doit être différent de 'Normal' OU 'Type de Compte' doit être différent de 'Stock'\n"
770+"- 'Type de Compte' doit être différent de 'Expense' OU 'Catégorie Bilan/Cte de Résultat' ne doit pas être vide."
771+
772+#. module: msf_doc_import
773+#: code:addons/msf_doc_import/wizard/wizard_import_invoice_line.py:168
774+#, python-format
775+msgid "Line %s: Some restrictions prevent account %s to be used to import this line:\n"
776+"- the account cannot be of type 'View'\n"
777+"- account can not be corrected on HQ entries\n"
778+"- 'Account Type' should be in ('expense', 'income', 'receivables')\n"
779+"- 'P&L / BS Category' cannot be None."
780+msgstr "Ligne %s: Des restrictions empêchent le compte %s d'être utilisé pour importer cette ligne :\n"
781+"- le compte ne peut pas être de type 'Vue'\n"
782+"- compte impossible à corriger dans les entrées HQ\n"
783+"- 'Type de Compte' doit être de type 'expense', 'income' ou 'receivables'\n"
784+"- 'Catégorie Bilan/Cte de Résultat' ne doit pas être vide."
785+
786+#. module: msf_doc_import
787+#: code:addons/msf_doc_import/wizard/wizard_import_invoice_line.py:184
788+#, python-format
789+msgid "\n"
790+"- 'Account Type' should be in ('expense', 'income', 'receivables')."
791+msgstr "\n"
792+"- 'Type de Compte' doit être de type 'expense', 'income' ou 'receivables'."
793+
794+#. module: msf_doc_import
795+#: code:addons/msf_doc_import/wizard/wizard_import_invoice_line.py:275
796+#: code:addons/msf_doc_import/wizard/wizard_import_invoice_line.py:280
797+#: code:addons/msf_doc_import/wizard/wizard_import_po_line.py:370
798+#: code:addons/msf_doc_import/wizard/wizard_import_po_line.py:378
799+#, python-format
800+msgid "Line %s in the Excel file, uncaught error: %s\n"
801+""
802+msgstr "Ligne %s du fichier Excel, erreur non détectée: %s\n"
803+""
804+
805+#. module: msf_doc_import
806+#: code:addons/msf_doc_import/wizard/wizard_import_invoice_line.py:354
807+#, python-format
808+msgid "You can refresh the screen if you need to follow the upload progress by clicking on 'Update'."
809+msgstr "Vous pouvez rafraichir l'écran si vous avez besoin de suivre la progresion du téléchargement en cliquant sur le bouton 'Mettre à jour'."
810+
811+#. module: msf_doc_import
812+#: model:ir.model,name:msf_doc_import.model_wizard_import_invoice_line
813+msgid "Import Invoice Lines from Excel sheet"
814+msgstr "Importer des lignes depuis un fichier Excel"
815+
816+#. module: finance
817+#: code:addons/finance/invoice.py:57
818+#, python-format
819+msgid "%s_template.xls"
820+msgstr "modèle_%s.xls"
821+
822+#. module: stock_override
823+#: field:stock.location,filter_partner_id2:0
824+msgid "Filter location by partner"
825+msgstr "Filtrer l'emplacement de stock par partenaire"
826+
827+#. module: register_accounting
828+#: code:addons/register_accounting/wizard/import_cheque_on_bank_registers.py:166
829+#, python-format
830+msgid "Please add a Document Date on imported lines."
831+msgstr "Veuillez saisir la date du document sur les lignes importées."
832+
833+#. module: product_list
834+#: code:addons/product_list/product_list.py:306
835+#: code:addons/product_list/product_list.py:316
836+#, python-format
837+msgid "This product cannot be added as it already exists in this list."
838+msgstr "Ce produit ne peut pas être ajouter car il est déjà présent dans la liste"
839+
840+#. module: product_list
841+#: code:addons/product_list/wizard/add_products.py:103
842+#, python-format
843+msgid "product(s) %s already exist(s) in the product list and so cannot be added"
844+msgstr "Les produits %s ne peuvent pas être ajouter car ils sont déjà présent dans la liste de produits"
845+
846+#. module: account_mcdb
847+#: field:account.mcdb,top_prop_instance_ids:0
848+msgid "Top Proprietary instances"
849+msgstr "Instances propriétaires parentes"
850+
851+#. module: account_mcdb
852+#: field:account.mcdb,rev_top_prop_instance_ids:0
853+msgid "Exclude top prop instances selection"
854+msgstr "Exclure la selection d'instances prop. parentes"
855+
856+#. module: account_mcdb
857+#: field:account.mcdb,display_top_prop_instance:0
858+msgid "Display Top prop instances?"
859+msgstr "Afficher les instances propriétaires parentes"
860+
861+#. module: account_mcdb
862+#: code:addons/account_mcdb/account_mcdb.py:230
863+#, python-format
864+msgid "You cannot select 'Instances' because 'Top prop Instances' is already selected."
865+msgstr "Vous ne pouvez pas selectionner 'Instances' car 'Instance prop. parente' est déjà selectionné."
866+
867+#. module: account_mcdb
868+#: view:account.mcdb:0
869+msgid "Top prop Instances"
870+msgstr "Instance prop. parente"
871+
872+#. module: account_mcdb
873+#: code:addons/account_mcdb/account_mcdb.py:244
874+#, python-format
875+msgid "You cannot select 'Top prop Instances' because 'Instances' is already selected."
876+msgstr "Vous ne pouvez pas selectionner 'Instance prop. parente' car 'Instances' est déjà selectionné."
877+
878+#. module: account_mcdb
879+#: field:account.mcdb,rev_instance_ids:0
880+msgid "Exclude instances selection"
881+msgstr "Exclure la sélection d'instance"
882+
883+#. module: account_mcdb
884+#: view:account.mcdb:0
885+msgid "Remove all Instances"
886+msgstr "Supprimer toutes les instances"
887+
888+#. module: account_mcdb
889+#: view:account.mcdb:0
890+msgid "Add all Instances"
891+msgstr "Ajouter toutes les instances"
892+
893+#. module: account_mcdb
894+#: view:account.mcdb:0
895+msgid "Remove Prop Instances"
896+msgstr "Supprimer toutes les instances propriétaires"
897+
898+#. module: account_mcdb
899+#: view:account.mcdb:0
900+msgid "Add Prop Instances"
901+msgstr "Ajouter toutes les instances propriétaires"
902+
903+#. module: account
904+#: report:addons/account/report/account_liquidity_balance.mako:171
905+msgid "Calculated balance"
906+msgstr "Solde calculé (théorique)"
907+
908+#. module: account
909+#: code:addons/account/wizard/account_report_liquidity_balance.py:65
910+#: model:ir.actions.act_window,name:account.action_liquidity_balance_report
911+#: model:ir.ui.menu,name:account.menu_liquidity_balance_report
912+#: report:addons/account/report/account_liquidity_balance.mako:142
913+#, python-format
914+msgid "Liquidity Balances"
915+msgstr "Balances de trésorie"
916+
917+#. module: account
918+#: code:addons/account/wizard/account_report_common_partner.py:89
919+#, python-format
920+msgid "Only dates of the selected Fiscal Year can be chosen."
921+msgstr "Seules des dates de l'exercice comptable sélectionné peuvent être choisies."
922+
923+#. module: mission_stock
924+#: field:mission.stock.wizard,processed_state:0
925+msgid "Processing"
926+msgstr "En traitement..."
927+
928+#. module: mission_stock
929+#: view:mission.stock.wizard:0
930+msgid "Updating..."
931+msgstr "Mise à jour ..."
932+
933+#. module: mission_stock
934+#: field:mission.stock.wizard,processed_start_date:0
935+msgid "since"
936+msgstr "depuis"
937+
938+#. module: stock_override
939+#: code:addons/stock_override/stock.py:389
940+#, python-format
941+msgid "The source location of lines has been changed to the same as header value"
942+msgstr "La zone source des lignes a été changé avec la valeur présente en en-tête"
943+
944+#. module: stock_override
945+#: code:addons/stock_override/stock.py:393
946+#, python-format
947+msgid "Warning, you have removed header value source location! The lines will be re-set to have 'Other Supplier' as the source location. Please check this is correct!"
948+msgstr "Attention, vous avez supprimé la zone source d'en-tête! La zone source des lignes va être réinitialisée avec la valeur 'Autre Fournisseur'. Merci de vérifier leur cohérence!"
949+
950+#. module: account_override
951+#: code:addons/account_override/account.py:524
952+#, python-format
953+msgid "An account can't be both reconcilable and included in the yearly move to 0."
954+msgstr "Un compte ne peut pas être à la fois lettrable et inclus dans la mise à zéro annuelle."
955+
956+#. module: account_period_closing_level
957+#: code:addons/account_period_closing_level/account_year_end_closing.py:423
958+#, python-format
959+msgid "The yearly closure can't be processed due to one or several reconciled entries that are included in the move to 0."
960+msgstr "La fermeture de l'année fiscale ne peut pas être effectuée car une ou plusieurs écritures incluses dans la mise à zéro sont déjà lettrées."
961+
962+#. module: account_reconciliation
963+#: code:addons/account_reconciliation/account_move_line.py:269
964+#, python-format
965+msgid "The entries included in the yearly move to zero can't be reconciled together because they are unbalanced."
966+msgstr "Les écritures incluses dans la mise à zéro annuelle ne peuvent pas être lettrées ensemble car elles ne sont pas équilibrées."
967+
968+#. modules: account_override, account_mcdb, account
969+#: field:account.move.line,open_items:0
970+#: field:account.mcdb,open_items:0
971+#: field:account.report.general.ledger,open_items:0
972+msgid "Open Items at"
973+msgstr "Écritures ouvertes à"
974+
975+#. module: account
976+#: model:ir.actions.server,name:account.action_aml_related_entries
977+msgid "Related Entries"
978+msgstr "Ecritures associées"
979+
980+#. module: account
981+#: code:addons/account/account_move_line.py:1369
982+#, python-format
983+msgid "Related entries: Entry Sequence %s"
984+msgstr "Ecritures associées : Entrée Comptable %s"
985+
986+#. module: account
987+#: code:addons/account/account_move_line.py:1330
988+#, python-format
989+msgid "The related entries feature can only be used with one Journal Item."
990+msgstr "La fonctionnalité des écritures associées ne peut être utilisée qu'avec une seule ligne d'écriture comptable."
991+
992+#. module: account_period_closing_level
993+#: code:addons/account_period_closing_level/account_period.py:217
994+#, python-format
995+msgid "One or several registers have not been generated for the period to close and have a balance which isn't equal to 0:\n"
996+"%s"
997+msgstr "Un ou plusieurs registres n'ont pas été générés pour la période à fermer et ont un solde qui n'est pas égal à 0 :\n"
998+"%s"
999+
1000+#. module: res_currency_tables
1001+#: code:addons/res_currency_tables/res_currency.py:0
1002+#, python-format
1003+msgid "delete"
1004+msgstr "supprimer"
1005+
1006+#. module: res_currency_tables
1007+#: code:addons/res_currency_tables/res_currency.py:0
1008+#, python-format
1009+msgid "de-activate"
1010+msgstr "désactiver"
1011+
1012+#. module: res_currency_tables
1013+#: code:addons/res_currency_tables/res_currency.py:225
1014+#, python-format
1015+msgid "The currency you want to %s is used in at least one active partner form."
1016+msgstr "La devise que vous désirez %s est utilisée dans au moins un formulaire d'un partenaire actif."
1017+
1018+#. module: res_currency_tables
1019+#: code:addons/res_currency_tables/res_currency.py:216
1020+#, python-format
1021+msgid "The currency you want to %s is used in at least one Field Order which isn't Closed."
1022+msgstr "La devise que vous désirez %s est utilisée dans au moins une Commande de Terrain qui n'est pas Clôturée."
1023+
1024+#. module: res_currency_tables
1025+#: code:addons/res_currency_tables/res_currency.py:216
1026+#, python-format
1027+msgid "The currency you want to %s is used in at least one Purchase Order which isn't Closed."
1028+msgstr "La devise que vous désirez %s est utilisée dans au moins un Bon de Commande qui n'est pas Clôturé."
1029+
1030+#. module: res_currency_tables
1031+#: code:addons/res_currency_tables/res_currency.py:230
1032+#, python-format
1033+msgid "The currency you want to %s is used in at least one document in Draft or Open state."
1034+msgstr "La devise que vous désirez %s est utilisée dans au moins un document à l'état Brouillon ou Ouvert."
1035+
1036+#. module: res_currency_tables
1037+#: code:addons/res_currency_tables/res_currency.py:256
1038+#, python-format
1039+msgid "The currency you want to %s is used in at least one Register in Draft or Open state."
1040+msgstr "La devise que vous désirez %s est utilisée dans au moins un Registre à l'état Brouillon ou Ouvert."
1041+
1042+#. module: res_currency_tables
1043+#: code:addons/res_currency_tables/res_currency.py:236
1044+#, python-format
1045+msgid "The currency you want to %s is used in at least one Journal Item in Unposted state."
1046+msgstr "La devise que vous désirez %s est utilisée dans au moins une Ligne d'écriture comptable non comptabilisée."
1047+
1048+#. module: res_currency_tables
1049+#: code:addons/res_currency_tables/res_currency.py:263
1050+#, python-format
1051+msgid "The currency you want to %s is used in at least one Recurring Entry having a state not Done."
1052+msgstr "La devise que vous désirez %s est utilisée dans au moins une Ecriture Périodique avec un statut non Terminé."
1053+
1054+#. module: res_currency_tables
1055+#: code:addons/res_currency_tables/res_currency.py:240
1056+#, python-format
1057+msgid "The currency you want to %s is used in at least one Commitment Voucher which isn't Done."
1058+msgstr "La devise que vous désirez %s est utilisée dans un moins un Bon d'Engagement non Terminé."
1059+
1060+#. module: res_currency_tables
1061+#: code:addons/res_currency_tables/res_currency.py:244
1062+#, python-format
1063+msgid "The currency you want to %s is used in at least one HQ Entry which isn't validated."
1064+msgstr "La devise que vous désirez %s est utilisée dans au moins une Ecriture HQ non validée."
1065+
1066+#. module: res_currency_tables
1067+#: code:addons/res_currency_tables/res_currency.py:272
1068+#, python-format
1069+msgid "The currency you want to %s is used in at least one Draft or Partially Posted Accrual Line."
1070+msgstr "La devise que vous désirez %s est utilisée dans au moins une Ligne de Régularisation à l'état Brouillon ou Partiellement Comptabilisée."
1071+
1072+#. module: res_currency_tables
1073+#: code:addons/res_currency_tables/res_currency.py:249
1074+#, python-format
1075+msgid "The currency you want to %s is used in at least one Payroll Entry which isn't validated."
1076+msgstr "La devise que vous désirez %s est utilisée dans au moins une Ecriture de Paie non validée."
1077+
1078+#. module: account_override
1079+#: report:addons/account_override/report/open_invoices_xls.mako:315
1080+msgid "Payment Sequence Number"
1081+msgstr "Numéro de séquence du paiement"
1082+
1083+#. module: account_override
1084+#: report:addons/account_override/report/open_invoices_xls.mako:316
1085+msgid "Down Payment Sequence Number"
1086+msgstr "Numéro de séquence de l'acompte"
1087+
1088+#. module: account_override
1089+#: model:ir.actions.act_window,name:account_override.action_paid_invoices_menu
1090+#: model:ir.actions.report.xml,name:account_override.paid_invoices
1091+#: report:addons/account_override/report/open_invoices_xls.mako:238
1092+msgid "Paid Invoices"
1093+msgstr "Factures Payées"
1094+
1095+#. module: account_override
1096+#: report:addons/account_override/report/open_invoices_xls.mako:264
1097+msgid "PAID INVOICES"
1098+msgstr "FACTURES PAYÉES"
1099+
1100+#. module: account_override
1101+#: model:ir.model,name:account_override.model_wizard_report_paid_invoice
1102+msgid "Wizard of the Paid Invoices Report"
1103+msgstr "Assistant du Rapport des Factures Payées"
1104+
1105+#. module: account_override
1106+#: field:wizard.report.paid.invoice,beginning_date:0
1107+msgid "Beginning date"
1108+msgstr "Date de début"
1109+
1110+#. module: account_override
1111+#: field:wizard.report.paid.invoice,ending_date:0
1112+msgid "Ending date"
1113+msgstr "Date de fin"
1114+
1115+#. module: account_override
1116+#: report:addons/account_override/report/open_invoices_xls.mako:290
1117+msgid "Beginning date:"
1118+msgstr "Date de début :"
1119+
1120+#. module: account_override
1121+#: report:addons/account_override/report/open_invoices_xls.mako:296
1122+msgid "Ending date:"
1123+msgstr "Date de fin :"
1124+
1125+#. module: account_override
1126+#: report:addons/account_override/report/open_invoices_xls.mako:306
1127+msgid "Intermission Vouchers IN"
1128+msgstr "Bons Intermission IN"
1129+
1130+#. module: account_override
1131+#: report:addons/account_override/report/open_invoices_xls.mako:307
1132+msgid "Intermission Vouchers OUT"
1133+msgstr "Bons Intermission OUT"
1134+
1135+#. module: account_override
1136+#: report:addons/account_override/report/open_invoices_xls.mako:305
1137+msgid "Donations"
1138+msgstr "Donations"
1139+
1140+#. module: account_override
1141+#: report:addons/account_override/report/open_invoices_xls.mako:307
1142+msgid "Debit Notes"
1143+msgstr "Notes de débit"
1144+
1145+#. module: msf_homere_interface
1146+#: code:addons/msf_homere_interface/wizard/hr_payroll_import.py:188
1147+#, python-format
1148+msgid "This account is a Donation account: %s"
1149+msgstr "Ce compte est un compte de Donation : %s"
1150+
1151+#. module: account_override
1152+#: code:addons/account_override/account.py:597
1153+#, python-format
1154+msgid "Please check the Type for specific treatment of the accounts used."
1155+msgstr "Veuillez vérifier le Type pour traitement spécifique des comptes utilisés."
1156+
1157+#. module: msf_homere_interface
1158+#: field:hr.payroll.msf,has_third_party:0
1159+msgid "Has a Third Party"
1160+msgstr "A un Tiers"
1161+
1162+#. module: msf_homere_interface
1163+#: view:hr.payroll.msf:0
1164+msgid "Empty Third Party"
1165+msgstr "Pas de Tiers"
1166+
1167+#. module: msf_homere_interface
1168+#: model:ir.actions.server,name:msf_homere_interface.action_move_to_payroll_bs_lines
1169+msgid "Validate Payroll Expenses and move to Payroll B/S lines"
1170+msgstr "Valider les Lignes de dépenses et aller aux Lignes du bilan"
1171+
1172+#. module: msf_homere_interface
1173+#: code:addons/msf_homere_interface/hr_payroll.py:367
1174+#, python-format
1175+msgid "Payroll B/S lines"
1176+msgstr "Lignes de paye du bilan"
1177+
1178+#. module: msf_homere_interface
1179+#: code:addons/msf_homere_interface/wizard/hr_payroll_validation.py:324
1180+#, python-format
1181+msgid "An error occurred%s"
1182+msgstr "Une erreur est survenue%s"
1183+
1184+#. module: msf_homere_interface
1185+#: code:addons/msf_homere_interface/wizard/hr_payroll_validation.py:161
1186+#, python-format
1187+msgid "Checking account/partner compatibility..."
1188+msgstr "Vérification de la compatibilité compte/partenaire..."
1189+
1190+#. module: msf_homere_interface
1191+#: code:addons/msf_homere_interface/wizard/hr_payroll_validation.py:303
1192+#, python-format
1193+msgid "Posting of the Journal Entry. This may take a while..."
1194+msgstr "Comptabilisation de l'Ecriture Comptable. Cela peut prendre un certain temps..."
1195+
1196+#. module: msf_homere_interface
1197+#: code:addons/msf_homere_interface/wizard/hr_payroll_validation.py:308
1198+#, python-format
1199+msgid "Updating the status of the Journal Items..."
1200+msgstr "Mise à jour du statut des Lignes d'Ecritures Comptables..."
1201+
1202+#. module: msf_homere_interface
1203+#: code:addons/msf_homere_interface/wizard/hr_payroll_validation.py:213
1204+#, python-format
1205+msgid "Creation of the Journal Items..."
1206+msgstr "Création des Lignes d'Ecritures Comptables..."
1207+
1208+#. module: msf_currency_revaluation
1209+#: code:addons/msf_currency_revaluation/wizard/wizard_currency_revaluation.py:723
1210+#, python-format
1211+msgid "The following projects are not field-closed:\n"
1212+"%s"
1213+msgstr "Les projets suivants ne sont pas fermés sur le terrain :\n"
1214+"%s"
1215+
1216+#. module: register_accounting
1217+#: code:addons/register_accounting/account_bank_statement.py:120
1218+#, python-format
1219+msgid "Writing on liquidity journals %s is not allowed"
1220+msgstr "Vous ne pouvez pas modifier le journal de liquidité %s"
1221+
1222+#. module: sync_client
1223+#: field:sync.version.instance.monitor,instance_state:0
1224+msgid "Instance State"
1225+msgstr "État de l'instance"
1226+>>>>>>> MERGE-SOURCE
1227
1228=== modified file 'bin/addons/msf_profile/msf_profile.py'
1229--- bin/addons/msf_profile/msf_profile.py 2017-08-25 15:40:47 +0000
1230+++ bin/addons/msf_profile/msf_profile.py 2017-09-01 09:49:29 +0000
1231@@ -47,6 +47,7 @@
1232 'model': lambda *a: 'patch.scripts',
1233 }
1234
1235+<<<<<<< TREE
1236 def us_2647(self, cr, uid, *a, **b):
1237 cr.execute('''update stock_inventory_line set dont_move='t' where id not in (
1238 select l.id from stock_inventory_line l
1239@@ -220,6 +221,171 @@
1240 else:
1241 self._logger.warn('The constraint \'ir_ui_view_model_type_priority\' have not been created because there is some duplicated values.')
1242
1243+=======
1244+ def us_2444_touch_liquidity_journals(self, cr, uid, *a, **b):
1245+ if _get_instance_level(self, cr, uid) == 'project':
1246+ cr.execute('''
1247+ update ir_model_data set last_modification=NOW(), touched='[''type'']'
1248+ where module='sd' and model='account.journal' and res_id in (
1249+ select id from account_journal where type in ('bank', 'cash', 'cheque') and is_current_instance='t'
1250+ )
1251+ ''')
1252+
1253+ def us_3098_patch(self, cr, uid, *a, **b):
1254+ cr.execute("""
1255+ SELECT id, name
1256+ FROM res_partner
1257+ WHERE name IN (select name from res_partner where partner_type = 'internal')
1258+ AND name IN (select name from res_partner where partner_type = 'intermission')
1259+ AND partner_type = 'intermission';
1260+ """)
1261+ wrong_partners = cr.fetchall()
1262+
1263+ updated_doc = []
1264+ for partner in wrong_partners:
1265+ intermission_partner_id = partner[0]
1266+ partner_name = partner[1]
1267+ internal_partner_id = self.pool.get('res.partner').search(cr, uid, [
1268+ ('name', '=', partner_name),
1269+ ('partner_type', '=', 'internal'),
1270+ ])[0]
1271+ address_id = self.pool.get('res.partner.address').search(cr, uid, [
1272+ ('partner_id', '=', internal_partner_id),
1273+ ('type', '=', 'default'),
1274+ ])
1275+ if not address_id:
1276+ address_id = self.pool.get('res.partner.address').search(cr, uid, [
1277+ ('partner_id', '=', internal_partner_id),
1278+ ])
1279+
1280+ address_id = address_id[0]
1281+
1282+ cr.execute("SELECT name FROM stock_picking WHERE partner_id = %s AND state not in ('done', 'cancel');", (intermission_partner_id,))
1283+ updated_doc += [x[0] for x in cr.fetchall()]
1284+ cr.execute("""
1285+ UPDATE stock_picking
1286+ SET partner_id = %s, partner_id2 = %s, address_id = %s, partner_type_stock_picking = 'internal', invoice_state = 'none'
1287+ WHERE partner_id = %s
1288+ AND state not in ('done', 'cancel');
1289+ """, (internal_partner_id, internal_partner_id, address_id, intermission_partner_id) )
1290+ cr.execute("""
1291+ UPDATE stock_move
1292+ SET partner_id = %s, partner_id2 = %s, address_id = %s
1293+ WHERE (partner_id = %s OR partner_id2 = %s) AND state not in ('done', 'cancel');
1294+ """, (internal_partner_id, internal_partner_id, address_id, intermission_partner_id, intermission_partner_id) )
1295+
1296+ cr.execute("SELECT name FROM purchase_order WHERE partner_id = %s AND state not in ('done', 'cancel');", (intermission_partner_id,))
1297+ updated_doc += [x[0] for x in cr.fetchall()]
1298+ cr.execute("""
1299+ UPDATE purchase_order
1300+ SET partner_id = %s, partner_address_id = %s, partner_type = 'internal'
1301+ WHERE partner_id = %s
1302+ AND state not in ('done', 'cancel');
1303+ """, (internal_partner_id, address_id, intermission_partner_id) )
1304+ cr.execute("""
1305+ UPDATE purchase_order_line pol
1306+ SET partner_id = %s
1307+ FROM purchase_order po
1308+ WHERE pol.order_id = po.id
1309+ AND pol.partner_id = %s
1310+ AND po.state not in ('done', 'cancel');
1311+ """, (internal_partner_id, intermission_partner_id) )
1312+
1313+ cr.execute("SELECT name FROM sale_order WHERE partner_id = %s AND state not in ('done', 'cancel');", (intermission_partner_id,))
1314+ updated_doc += [x[0] for x in cr.fetchall()]
1315+ cr.execute("""
1316+ UPDATE sale_order
1317+ SET partner_id = %s, partner_invoice_id = %s, partner_order_id = %s, partner_shipping_id = %s, partner_type = 'internal'
1318+ WHERE partner_id = %s
1319+ AND state not in ('done', 'cancel');
1320+ """, (internal_partner_id, address_id, address_id, address_id, intermission_partner_id) )
1321+ cr.execute("""
1322+ UPDATE sale_order_line sol
1323+ SET order_partner_id = %s
1324+ FROM sale_order so
1325+ WHERE sol.order_id = so.id
1326+ AND sol.order_partner_id = %s
1327+ AND so.state not in ('done', 'cancel');
1328+ """, (internal_partner_id, intermission_partner_id) )
1329+
1330+ cr.execute("SELECT name FROM shipment WHERE partner_id = %s AND state not in ('done', 'cancel', 'delivered');", (intermission_partner_id,))
1331+ updated_doc += [x[0] for x in cr.fetchall()]
1332+ cr.execute("""
1333+ UPDATE shipment
1334+ SET partner_id = %s, partner_id2 = %s, address_id = %s
1335+ WHERE partner_id = %s
1336+ AND state not in ('done', 'cancel', 'delivered');
1337+ """, (internal_partner_id, internal_partner_id, address_id, intermission_partner_id) )
1338+
1339+ self._logger.warn("Following documents have been updated with internal partner: %s" % ", ".join(updated_doc))
1340+
1341+ return True
1342+
1343+ def us_2257_patch(self, cr, uid, *a, **b):
1344+ context = {}
1345+ user_obj = self.pool.get('res.users')
1346+ partner_obj = self.pool.get('res.partner')
1347+ usr = user_obj.browse(cr, uid, [uid], context=context)[0]
1348+ level_current = False
1349+
1350+ if usr and usr.company_id and usr.company_id.instance_id:
1351+ level_current = usr.company_id.instance_id.level
1352+
1353+ if level_current == 'section':
1354+ intermission_ids = partner_obj.search(cr, uid, [('active', 'in', ['t', 'f']), ('partner_type', '=', 'intermission')])
1355+ address_ids = []
1356+ if intermission_ids:
1357+ address_ids = self.pool.get('res.partner.address').search(cr, uid, [('partner_id', 'in', intermission_ids)])
1358+ self._logger.warn('touch %d partners, %d addresses' % (len(intermission_ids), len(address_ids)))
1359+ cr.execute("update ir_model_data set touched='[''name'']', last_modification=now() where model='res.partner' and module='sd' and res_id in %s" , (tuple(intermission_ids), ))
1360+ if address_ids:
1361+ cr.execute("update ir_model_data set touched='[''name'']', last_modification=now() where model='res.partner.address' and module='sd' and res_id in %s" , (tuple(address_ids), ))
1362+
1363+ return True
1364+
1365+ def us_2730_patch(self, cr, uid, *a, **b):
1366+ '''
1367+ remove all translations, and then re-import them
1368+ so that the {*}_MF.po files are authoratative
1369+ '''
1370+ cr.execute("""delete from ir_model_data where model='ir.translation' and res_id in (
1371+ select id from ir_translation where lang = 'fr_MF' and type != 'model'
1372+ )
1373+ """)
1374+ cr.execute("delete from ir_translation where lang = 'fr_MF' and type != 'model'")
1375+ irmm = self.pool.get('ir.module.module')
1376+ msf_profile_id = irmm.search(cr, uid, [('name', '=', 'msf_profile')])
1377+ irmm.update_translations(cr, uid, msf_profile_id)
1378+
1379+ def us_2632_patch(self, cr, uid, *a, **b):
1380+ '''fix ir.model.data entries on sync_server instances
1381+ '''
1382+ update_module = self.pool.get('sync.server.update')
1383+ if update_module:
1384+ cr.execute("""
1385+ UPDATE ir_model_data SET module='msf_sync_data_server' WHERE
1386+ model='sync_server.message_rule' AND module='';
1387+ """)
1388+
1389+ def us_2806_add_ir_ui_view_constraint(self, cr, uid, *a, **b):
1390+ '''
1391+ The constraint may have not been added during the update because it is
1392+ needeed to update all the modules before to add this constraint.
1393+ Having it in this patch script will add it at the end of the update.
1394+ '''
1395+ cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'ir_ui_view_model_type_priority\'')
1396+ if not cr.fetchone():
1397+ cr.execute("""SELECT model, type, priority, count(*)
1398+ FROM ir_ui_view
1399+ WHERE inherit_id IS NULL
1400+ GROUP BY model, type, priority
1401+ HAVING count(*) > 1""")
1402+ if not cr.fetchone():
1403+ cr.execute('CREATE UNIQUE INDEX ir_ui_view_model_type_priority ON ir_ui_view (priority, type, model) WHERE inherit_id IS NULL')
1404+ else:
1405+ self._logger.warn('The constraint \'ir_ui_view_model_type_priority\' have not been created because there is some duplicated values.')
1406+
1407+>>>>>>> MERGE-SOURCE
1408 def remove_not_synchronized_data(self, cr, uid, *a, **b):
1409 '''
1410 The list of models to synchronize was wrong. It is now build
1411
1412=== modified file 'bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv'
1413--- bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv 2017-08-03 15:16:40 +0000
1414+++ bin/addons/msf_sync_data_server/data/sync_server.message_rule.csv 2017-09-01 09:49:29 +0000
1415@@ -1,4 +1,5 @@
1416 id,active,applies_to_type,arguments,domain,destination_name,type_id,remote_call,model_id,name,sequence_number,status
1417+<<<<<<< TREE
1418 msf_sync_data_server.resourcing_lines,TRUE,TRUE,"['sync_order_line_db_id', 'partner_id', 'resource_ok', 'resource_sync_line_db_id', 'partner_type']","[('partner_type','!=','external'), ('partner_id', '!=', False)]",partner_id,MISSION,sale.order.line.cancel.create_line,sale.order.line.cancel,Resourcing lines,1,Valid
1419 msf_sync_data_server.po_creates_fo,TRUE,TRUE,"['name', 'analytic_distribution_id/id', 'delivery_requested_date','details','notes', 'origin', 'categ', 'order_type', 'priority', 'loan_duration', 'is_a_counterpart', 'sourced_references', 'stock_take_date', 'order_line/product_id/id', 'order_line/product_id/name','order_line/id', 'order_line/name', 'order_line/product_qty', 'order_line/product_uom', 'order_line/price_unit', 'order_line/analytic_distribution_id/id','order_line/comment','order_line/have_analytic_distribution_from_header','order_line/line_number', 'order_line/nomen_manda_0/id','order_line/nomen_manda_1/id','order_line/nomen_manda_2/id','order_line/nomen_manda_3/id', 'order_line/sync_order_line_db_id', 'order_line/nomenclature_description','order_line/notes','order_line/default_name','order_line/default_code','order_line/is_line_split','order_line/date_planned', 'order_line/stock_take_date']","['&','&','&',('partner_type','!=','external'),('state','in',['confirmed']), ('split_po','!=','True'),('push_fo','!=','True')]",partner_id,MISSION,sale.order.create_so,purchase.order,PO creates FO,2,Valid
1420 msf_sync_data_server.split_po_lines_from_splitted_fo_lines,TRUE,TRUE,"['partner_id','old_sync_order_line_db_id','new_sync_order_line_db_id','new_line_qty','old_line_qty']","[]",partner_id,MISSION,purchase.order.line.to.split.create_from_sync_message,sync.sale.order.line.split,Split PO lines from splitted FO lines,3,Valid
1421@@ -47,3 +48,53 @@
1422 msf_sync_data_server.USB_Validate_Shipment,TRUE,TRUE,['name'],"[('state', 'in', ['done']), ('already_rw_validated', '=', False),('parent_id', '!=', False)]",partner_id,USB,shipment.usb_set_validated_shipment,shipment,USB_Validate_Shipment,2055,Valid
1423 msf_sync_data_server.USB_Set_Delivered_Shipment,TRUE,TRUE,['name'],"[('state', 'in', ['delivered']), ('already_rw_delivered', '=', False), ('parent_id', '!=', False)]",partner_id,USB,shipment.usb_set_delivered_shipment,shipment,USB_Set_Delivered_Shipment,2056,Valid
1424 msf_sync_data_server.USB_Cancel_Int,TRUE,TRUE,['name'],"[('type', '=', 'internal'), ('state', '=', 'cancel')]",partner_id,USB,stock.picking.usb_cancel_int,stock.picking,USB_Cancel_Int,2057,Valid
1425+=======
1426+msf_sync_data_server.resourcing_lines,TRUE,TRUE,"['sync_order_line_db_id', 'partner_id', 'resource_ok', 'resource_sync_line_db_id', 'partner_type']","[('partner_type','!=','external'), ('partner_id', '!=', False)]",partner_id,MISSION,sale.order.line.cancel.create_line,sale.order.line.cancel,Resourcing lines,1,Valid
1427+msf_sync_data_server.po_creates_fo,TRUE,TRUE,"['name', 'analytic_distribution_id/id', 'delivery_requested_date','details','notes', 'origin', 'categ', 'order_type', 'priority', 'loan_duration', 'is_a_counterpart', 'sourced_references', 'order_line/product_id/id', 'order_line/product_id/name','order_line/id', 'order_line/name', 'order_line/product_qty', 'order_line/product_uom', 'order_line/price_unit', 'order_line/analytic_distribution_id/id','order_line/comment','order_line/have_analytic_distribution_from_header','order_line/line_number', 'order_line/nomen_manda_0/id','order_line/nomen_manda_1/id','order_line/nomen_manda_2/id','order_line/nomen_manda_3/id', 'order_line/sync_order_line_db_id', 'order_line/nomenclature_description','order_line/notes','order_line/default_name','order_line/default_code','order_line/is_line_split','order_line/date_planned']","['&','&','&',('partner_type','!=','external'),('state','in',['confirmed']), ('split_po','!=','True'),('push_fo','!=','True')]",partner_id,MISSION,sale.order.create_so,purchase.order,PO creates FO,2,Valid
1428+msf_sync_data_server.split_po_lines_from_splitted_fo_lines,TRUE,TRUE,"['partner_id','old_sync_order_line_db_id','new_sync_order_line_db_id','new_line_qty','old_line_qty']","[]",partner_id,MISSION,purchase.order.line.to.split.create_from_sync_message,sync.sale.order.line.split,Split PO lines from splitted FO lines,3,Valid
1429+msf_sync_data_server.validated_fo_updates_po,TRUE,TRUE,"['name','state','analytic_distribution_id/id', 'original_so_id_sale_order','categ', 'order_type', 'priority', 'loan_duration','delivery_confirmed_date','est_transport_lead_time', 'transport_type', 'ready_to_ship_date', 'details', 'note','client_order_ref', 'order_line/product_id/id', 'order_line/product_id/name','order_line/id', 'order_line/name', 'order_line/product_uom_qty', 'order_line/product_uom', 'order_line/price_unit', 'order_line/analytic_distribution_id/id','order_line/comment','order_line/have_analytic_distribution_from_header','order_line/line_number', 'order_line/nomen_manda_0/id','order_line/nomen_manda_1/id','order_line/nomen_manda_2/id','order_line/nomen_manda_3/id', 'order_line/sync_order_line_db_id', 'order_line/nomenclature_description','order_line/notes','order_line/default_name','order_line/default_code','order_line/date_planned','order_line/is_line_split', 'order_line/confirmed_delivery_date', 'order_line/cancel_split_ok']","['&','&','&',('partner_type','!=','external'),('state','in',['validated', 'done']),('original_so_id_sale_order','=',''), ('client_order_ref','!=',False)]",partner_id,MISSION,purchase.order.validated_fo_update_original_po,sale.order,Validated FO updates PO,4,Valid
1430+msf_sync_data_server.normal_fo_creates_po,TRUE,TRUE,"['name','state','analytic_distribution_id/id','parent_order_name','delivery_confirmed_date','est_transport_lead_time', 'categ', 'order_type', 'priority', 'loan_duration','transport_type', 'ready_to_ship_date', 'details', 'note','client_order_ref', 'order_line/product_id/id', 'order_line/product_id/name','order_line/id', 'order_line/name', 'order_line/product_uom_qty', 'order_line/product_uom', 'order_line/price_unit', 'order_line/analytic_distribution_id/id','order_line/comment','order_line/have_analytic_distribution_from_header','order_line/line_number', 'order_line/nomen_manda_0/id','order_line/nomen_manda_1/id','order_line/nomen_manda_2/id','order_line/nomen_manda_3/id', 'order_line/sync_order_line_db_id', 'order_line/nomenclature_description','order_line/notes','order_line/default_name','order_line/default_code','order_line/date_planned', 'order_line/confirmed_delivery_date']","['&','&','&',('partner_type','!=','external'),('state','in',['validated','done']),('client_order_ref','=',False),('split_type_sale_order','=','original_sale_order')]",partner_id,MISSION,purchase.order.normal_fo_create_po,sale.order,Normal FO creates PO,5,Valid
1431+msf_sync_data_server.split_fo_creates_split_po,TRUE,TRUE,"['name','state','analytic_distribution_id/id', 'delivery_confirmed_date','categ', 'order_type', 'priority', 'loan_duration','est_transport_lead_time', 'transport_type', 'ready_to_ship_date', 'details', 'note','client_order_ref', 'order_line/product_id/id', 'order_line/product_id/name','order_line/id', 'order_line/is_line_split','order_line/name', 'order_line/product_uom_qty', 'order_line/product_uom', 'order_line/price_unit', 'order_line/analytic_distribution_id/id','order_line/comment','order_line/have_analytic_distribution_from_header','order_line/line_number', 'order_line/nomen_manda_0/id','order_line/nomen_manda_1/id','order_line/nomen_manda_2/id','order_line/nomen_manda_3/id', 'order_line/sync_order_line_db_id', 'order_line/nomenclature_description','order_line/notes','order_line/default_name','order_line/default_code','order_line/date_planned', 'order_line/confirmed_delivery_date', 'order_line/source_sync_line_id']","['&',('partner_type','!=','external'),('original_so_id_sale_order','!=','False')]",partner_id,MISSION,purchase.order.create_split_po,sale.order,Split FO creates Split PO,6,Valid
1432+msf_sync_data_server.split_fo_updates_split_po,TRUE,TRUE,"['name', 'state', 'client_order_ref','sync_date','analytic_distribution_id/id','categ', 'order_type', 'priority', 'loan_duration', 'delivery_confirmed_date','est_transport_lead_time', 'transport_type', 'note','original_so_id_sale_order', 'ready_to_ship_date', 'order_line/product_id/id', 'order_line/product_id/name','order_line/id', 'order_line/name', 'order_line/is_line_split','order_line/product_uom_qty', 'order_line/product_uom', 'order_line/price_unit', 'order_line/analytic_distribution_id/id','order_line/comment','order_line/have_analytic_distribution_from_header','order_line/line_number', 'order_line/nomen_manda_0/id','order_line/nomen_manda_1/id','order_line/nomen_manda_2/id','order_line/nomen_manda_3/id', 'order_line/sync_order_line_db_id', 'order_line/nomenclature_description','order_line/notes','order_line/default_name','order_line/default_code', 'order_line/confirmed_delivery_date', 'order_line/source_sync_line_id', 'order_line/sync_sourced_origin']","['&','&',('partner_type','!=','external'),('state','in',['manual','progress','shipping_except','invoice_except','done']),('original_so_id_sale_order','!=','False')]",partner_id,MISSION,purchase.order.update_split_po,sale.order,Split FO updates split PO,7,Valid
1433+msf_sync_data_server.po_updates_so_ref,TRUE,TRUE,"['name','state','partner_ref']","['&','&','&',('partner_type','!=','external'),('state','in',['confirmed','sourced','split', 'approved']),('partner_ref','!=',False),'!',('partner_ref', 'like', 'invalid_by_recovery')]",partner_id,MISSION,sale.order.update_sub_so_ref,purchase.order,PO updates SO ref,8,Valid
1434+msf_sync_data_server.fo_updates_po_ref,TRUE,TRUE,"['name','state','client_order_ref']","['&','&','&',('partner_type','!=','external'),('client_order_ref','!=',False),('split_type_sale_order','=','original_sale_order'),'!',('client_order_ref', 'like', 'invalid_by_recovery')]",partner_id,MISSION,purchase.order.update_fo_ref,sale.order,FO updates PO ref,9,Valid
1435+msf_sync_data_server.update_in_ref,TRUE,TRUE,"['name','shipment_ref']","['&',('shipment_ref','!=',False),'!',('shipment_ref', 'like', 'invalid_by_recovery')]",partner_id,MISSION,stock.picking.update_in_ref,stock.picking,IN updates ref to OUT SHIP,10,Valid
1436+msf_sync_data_server.canceled_fo_cancels_po,TRUE,TRUE,"['name','state', 'client_order_ref']","[('state', '=', 'cancel'), ('client_order_ref', '!=', '')]",partner_id,MISSION,purchase.order.canceled_fo_cancel_po,sale.order,Canceled FO cancels PO,18,Valid
1437+msf_sync_data_server.partial_shipped_coordo_updates_in_at_project,TRUE,TRUE,"['name', 'state', 'origin', 'partner_type_stock_picking', 'shipment_id/name', 'min_date', 'note', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/prodlot_id/id','move_lines/prodlot_id/name','move_lines/prodlot_id/life_date', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/usage', 'move_lines/comment']","['&','&','&','&','&','&',('partner_type_stock_picking', '!=', 'external'), ('type', '=', 'out'), ('subtype', 'in', ['standard', 'packing']), ('state', '=', 'done'), ('already_shipped', '=', True), ('do_not_sync', '=', False), ('claim', '=', False)]",partner_id,MISSION,stock.picking.partial_shipped_fo_updates_in_po,stock.picking,Partial shipped at Coordo updates IN at Project,19,Valid
1438+msf_sync_data_server.moves_from_dpo_closed_coordo_updates_in_at_project,TRUE,TRUE,"['name', 'state', 'origin', 'subtype', 'partner_type_stock_picking', 'shipment_id/name', 'min_date', 'note', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/prodlot_id/id','move_lines/prodlot_id/name','move_lines/prodlot_id/life_date', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/dpo_line_id', 'move_lines/comment']","['&', '&', '&', ('partner_type_stock_picking', '!=', 'external'), ('type', '=', 'out'), ('subtype', 'in', ['picking', 'standard']), ('dpo_out', '=', True)]",partner_id,MISSION,stock.picking.partial_shippped_dpo_updates_in_po,stock.picking,Moves from DPO closed at Coordo updates IN at Project,20,Valid
1439+msf_sync_data_server.dpo_service_lines_update_in_at_project,FALSE,TRUE,"['order_id/name', 'order_id/delivery_confirmed_date', 'fake_id', 'origin', 'confirmed_delivery_date', 'name', 'product_uom/id', 'product_uom/name', 'link_sol_id/line_number', 'notes', 'product_qty', 'product_id/name', 'product_id/id', 'comment']","[('dest_partner_id.partner_type', '=', 'internal'), ('order_id.order_type', '=', 'direct'), ('order_id.state', 'in', ['approved', 'done']), ('product_id.type', 'in', ['service', 'service_recep'])]",dest_partner_id,MISSION,purchase.order.line.confirmed_dpo_service_lines_update_in_po,purchase.order.line,DPO service lines update IN at Project,21,Valid
1440+msf_sync_data_server.cancel_out_at_coordo_cancels_in_at_project,TRUE,TRUE,"['name', 'state', 'origin']","['&','&','&','&',('partner_type_stock_picking', '!=', 'external'), ('type', '=', 'out'),('state', '=', 'cancel'),('subtype', '=', 'standard'),('do_not_sync', '=', False)]",partner_id,MISSION,stock.picking.cancel_out_pick_cancel_in,stock.picking,Canceled OUT at Coordo cancels IN at Project,22,Valid
1441+msf_sync_data_server.cancel_pick_at_coordo_cancels_in_at_project,TRUE,TRUE,"['name', 'state', 'origin']","['&','&','&','&','&',('partner_type_stock_picking', '!=', 'external'), ('type', '=', 'out'),('state', '=', 'cancel'),('subtype', '=', 'picking'),('backorder_id', '=', False),('do_not_sync', '=', False)]",partner_id,MISSION,stock.picking.cancel_out_pick_cancel_in,stock.picking,Canceled PICK at Coordo cancels IN at Project,23,Valid
1442+msf_sync_data_server.cancel_stock_move_at_coordo_cancels_in_at_project,TRUE,TRUE,"['name', 'state', 'origin', 'date_cancel']","['&','&','&','&','&','&',('picking_id.partner_type_stock_picking', '!=', 'external'), ('type', '=', 'out'),('state', '=', 'cancel'),('picking_id.state', '=', 'done'),('picking_id.do_not_sync', '=', False),('to_be_sent', '=', True), '&', '|', ('picking_id.subtype', '=', 'picking'), ('picking_id.subtype', '=', 'standard'), ('picking_id.already_shipped', '=', False)]",partner_id,MISSION,stock.picking.cancel_stock_move_of_pick_cancel_in,stock.move,Canceled stock move cancels IN,24,Valid
1443+msf_sync_data_server.closed_in_validates_delivery_out_ship,TRUE,TRUE,"['name', 'state', 'shipment_ref']","['&','&','&','&','&',('partner_type_stock_picking', '!=', 'external'), ('type', '=', 'in'),('subtype', 'in', ['standard']), ('state', '=', 'done'), ('shipment_ref', '!=', False), ('dpo_incoming', '=', False)]",partner_id,MISSION,stock.picking.closed_in_validates_delivery_out_ship,stock.picking,Closed IN validates delivery of OUT-SHIP,26,Valid
1444+msf_sync_data_server.closed_in_confirms_dpo_reception,TRUE,TRUE,"['name', 'state', 'dpo_line_id']","['&','&','&','&',('picking_id.partner_type_stock_picking', '!=', 'external'), ('picking_id.type', '=', 'in'), ('picking_id.subtype', 'in', ['standard']), ('state', '=', 'done'), ('dpo_line_id', '!=', 0)]",partner_id,MISSION,stock.picking.closed_in_confirms_dpo_reception,stock.move,Closed IN confirms DPO reception,27,Valid
1445+msf_sync_data_server.create_batch_object,FALSE,TRUE,"['name', 'xmlid_name', 'prefix', 'product_id/id', 'partner_id/id', 'date', 'ref','life_date','sequence_id','type']","[('name', '=', False)]",partner_id,MISSION,stock.picking.create_batch_number,stock.production.lot,Create Batch Object,1001,Valid
1446+msf_sync_data_server.create_asset_object,TRUE,TRUE,"['name', 'xmlid_name', 'arrival_date', 'asset_type_id/id', 'partner_id/id', 'brand', 'comment', 'description', 'hq_ref', 'international_po', 'invo_certif_depreciation', 'invo_currency/id', 'invo_date', 'invo_donator_code', 'invo_num', 'invo_supplier', 'invo_value', 'local_ref', 'model', 'orig_mission_code', 'product_id/id', 'project_po', 'receipt_place', 'serial_nb', 'type', 'year']","[('name', '=', False)]",partner_id,MISSION,stock.picking.create_asset,product.asset,Create Asset Object,1002,Valid
1447+msf_sync_data_server.reset_ref_by_recovery_mode,TRUE,TRUE,['name'],"[('name', '=', False)]",partner_id,MISSION,sale.order.reset_ref_by_recovery_mode,sale.order,Reset Due to Recovery,1003,Valid
1448+msf_sync_data_server.USB_replicate_po,TRUE,TRUE,"['name', 'analytic_distribution_id/id', 'partner_id/id','pricelist_id/id','delivery_requested_date','details','notes', 'origin', 'categ', 'order_type', 'priority', 'loan_duration', 'is_a_counterpart', 'cross_docking_ok', 'order_line/product_id/id', 'order_line/product_id/name','order_line/id', 'order_line/name', 'order_line/product_qty', 'order_line/product_uom', 'order_line/price_unit', 'order_line/analytic_distribution_id/id','order_line/comment','order_line/have_analytic_distribution_from_header','order_line/line_number', 'order_line/nomen_manda_0/id','order_line/nomen_manda_1/id','order_line/nomen_manda_2/id','order_line/nomen_manda_3/id', 'order_line/sync_order_line_db_id', 'order_line/nomenclature_description','order_line/notes','order_line/default_name','order_line/default_code','order_line/is_line_split','order_line/date_planned','order_line/procurement_id/id']","[('state','in',['approved', 'done'])]",partner_id,USB,purchase.order.usb_replicate_po,purchase.order,USB_replicate_po,2000,Valid
1449+msf_sync_data_server.USB_replicate_fo,TRUE,TRUE,"['name', 'location_requestor_id/id', 'analytic_distribution_id/id', 'partner_id/id','pricelist_id/id','delivery_requested_date','details','notes', 'origin', 'categ', 'order_type', 'priority', 'loan_duration', 'is_a_counterpart', 'order_line/product_id/id', 'order_line/product_id/name','order_line/id', 'order_line/name', 'order_line/product_uom_qty', 'order_line/product_uom', 'order_line/price_unit', 'order_line/analytic_distribution_id/id','order_line/comment','order_line/have_analytic_distribution_from_header','order_line/line_number', 'order_line/nomen_manda_0/id','order_line/nomen_manda_1/id','order_line/nomen_manda_2/id','order_line/nomen_manda_3/id', 'order_line/sync_order_line_db_id', 'order_line/nomenclature_description','order_line/notes','order_line/default_name','order_line/default_code','order_line/is_line_split','order_line/date_planned','order_line/procurement_id/id']","[('state','in',['manual','done','progress'])]",partner_id,USB,sale.order.usb_replicate_fo,sale.order,USB_replicate_fo,2001,Valid
1450+msf_sync_data_server.USB_replicate_ir,TRUE,TRUE,"['name', 'location_requestor_id/id', 'analytic_distribution_id/id', 'partner_id/id','pricelist_id/id','delivery_requested_date','details','notes', 'origin', 'categ', 'order_type', 'priority', 'loan_duration', 'is_a_counterpart', 'order_line/product_id/id', 'order_line/product_id/name','order_line/id', 'order_line/name', 'order_line/product_uom_qty', 'order_line/product_uom', 'order_line/price_unit','order_line/cost_price', 'order_line/analytic_distribution_id/id','order_line/comment','order_line/have_analytic_distribution_from_header','order_line/line_number', 'order_line/nomen_manda_0/id','order_line/nomen_manda_1/id','order_line/nomen_manda_2/id','order_line/nomen_manda_3/id', 'order_line/sync_order_line_db_id', 'order_line/nomenclature_description','order_line/notes','order_line/default_name','order_line/default_code','order_line/is_line_split','order_line/date_planned','order_line/procurement_id/id']","[('procurement_request', '=', True), ('state', 'in', ['progress','done'])]",partner_id,USB,sale.order.usb_replicate_fo,sale.order,USB_replicate_ir,2003,Valid
1451+msf_sync_data_server.USB_replicate_in,TRUE,TRUE,"['name','subtype','rw_force_seq','from_wkf','state','stock_journal_id/id','origin','purchase_id/id', 'sale_id/id', 'shipment_id/name','shipment_id/num_of_packs','previous_step_id/name','location_id/id','backorder_ids/id', 'backorder_ids/rw_sdref_counterpart', 'backorder_id/id','backorder_id/name','warehouse_id/id','order_category','overall_qty','change_reason','cross_docking_ok','location_dest_id/id','address_id', 'partner_type_stock_picking', 'delivered','reason_type_id/id','min_date', 'note', 'partner_id', 'move_type', 'type', 'dpo_out', 'flow_type', 'transport_order_id/id', 'direct_incoming','shipment_id/name', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/reason_type_id/id','move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/product_uos_qty', 'move_lines/prodlot_id/id', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/id','move_lines/location_requestor_rw/id','move_lines/location_id/id','move_lines/from_pack','move_lines/to_pack','move_lines/width','move_lines/height','move_lines/weight','move_lines/length','move_lines/pack_type','move_lines/purchase_line_id/id','move_lines/sale_line_id/id','move_lines/price_unit','move_lines/price_currency_id/id']","[('type', '=', 'in'),('subtype', '=', 'standard'),('state', 'in', ['assigned']),('already_replicated', '=', False),('partner_id', '!=', False)]",partner_id,USB,stock.picking.usb_replicate_in,stock.picking,USB_replicate_in,2010,Valid
1452+msf_sync_data_server.USB_update_in_shipped_available,TRUE,TRUE,"['name','from_wkf','subtype','rw_force_seq','state','stock_journal_id/id','origin','purchase_id/id', 'sale_id/id', 'shipment_id/name','shipment_id/num_of_packs','previous_step_id/name','location_id/id','backorder_ids/id', 'backorder_ids/rw_sdref_counterpart', 'backorder_id/id','backorder_id/name','warehouse_id/id','order_category','overall_qty','change_reason','cross_docking_ok','location_dest_id/id','address_id', 'partner_type_stock_picking', 'delivered','reason_type_id/id','min_date', 'note', 'partner_id', 'move_type', 'type', 'dpo_out', 'flow_type', 'transport_order_id/id', 'direct_incoming','shipment_id/name', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/reason_type_id/id','move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/product_uos_qty', 'move_lines/prodlot_id/id', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/id','move_lines/location_requestor_rw/id','move_lines/location_id/id','move_lines/from_pack','move_lines/to_pack','move_lines/width','move_lines/height','move_lines/weight','move_lines/length','move_lines/pack_type','move_lines/purchase_line_id/id','move_lines/sale_line_id/id','move_lines/price_unit','move_lines/price_currency_id/id']","[('type', '=', 'in'),('subtype', '=', 'standard'),('state', 'in', ['shipped']),('partner_id', '!=', False),('already_replicated', '=', False)]",partner_id,USB,stock.picking.usb_update_in_shipped_available,stock.picking,USB_update_in_shipped_available,2011,Valid
1453+msf_sync_data_server.USB_cancel_in,TRUE,TRUE,"['name','subtype','origin']","[('type', '=', 'in'),('subtype', '=', 'standard'),('state', 'in', ['cancel']),('partner_id', '!=', False)]",partner_id,USB,stock.picking.usb_cancel_in,stock.picking,USB_cancel_in,2012,Valid
1454+msf_sync_data_server.USB_cancel_pick_out,TRUE,TRUE,"['name','subtype','origin']","[('type', '=', 'out'),('state', 'in', ['cancel']),('partner_id', '!=', False), ('already_replicated', '=', False)]",partner_id,USB,stock.picking.usb_cancel_pick_out,stock.picking,USB_cancel_pick_out,2013,Valid
1455+msf_sync_data_server.USB_create_partial_in,TRUE,TRUE,"['name','from_wkf','subtype','date_done','associate_pick_name','rw_force_seq','state','stock_journal_id/id','purchase_id/id', 'sale_id/id','origin','shipment_id/name','shipment_id/num_of_packs','previous_step_id/name','location_id/id','backorder_ids/id','backorder_ids/rw_sdref_counterpart', 'backorder_id/id','backorder_id/name','warehouse_id/id','order_category','overall_qty','change_reason','cross_docking_ok','location_dest_id/id','address_id', 'partner_type_stock_picking', 'delivered','reason_type_id/id','min_date', 'note', 'partner_id', 'move_type', 'type', 'dpo_out', 'flow_type', 'transport_order_id/id', 'direct_incoming','shipment_id/name', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/reason_type_id/id','move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/product_uos_qty', 'move_lines/prodlot_id/id', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/id','move_lines/location_id/id','move_lines/location_requestor_rw/id','move_lines/from_pack','move_lines/to_pack','move_lines/width','move_lines/height','move_lines/weight','move_lines/length','move_lines/pack_type','move_lines/purchase_line_id/id','move_lines/sale_line_id/id','move_lines/price_unit','move_lines/price_currency_id/id']","[('type', '=', 'in'),('subtype', '=', 'standard'),('state', 'in', ['done']),('already_replicated', '=',False),('partner_id', '!=', False)]",partner_id,USB,stock.picking.usb_create_partial_in,stock.picking,USB_create_partial_in,2015,Valid
1456+msf_sync_data_server.USB_replicate_int,TRUE,TRUE,"['name','from_wkf','subtype','date_done','rw_force_seq','state','stock_journal_id/id','purchase_id/id', 'sale_id/id','origin','shipment_id/name','shipment_id/num_of_packs','previous_step_id/name','location_id/id','backorder_ids/id', 'backorder_ids/rw_sdref_counterpart', 'backorder_id/id','backorder_id/name','warehouse_id/id','order_category','overall_qty','change_reason','cross_docking_ok','location_dest_id/id','address_id', 'partner_type_stock_picking', 'delivered','reason_type_id/id','min_date', 'note', 'partner_id', 'move_type', 'type', 'dpo_out', 'flow_type', 'transport_order_id/id', 'direct_incoming','shipment_id/name', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/reason_type_id/id','move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/product_uos_qty', 'move_lines/prodlot_id/id', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/id','move_lines/location_id/id','move_lines/from_pack','move_lines/to_pack','move_lines/width','move_lines/height','move_lines/weight','move_lines/length','move_lines/pack_type','move_lines/purchase_line_id/id','move_lines/sale_line_id/id','move_lines/price_unit','move_lines/price_currency_id/id']","[('type', '=', 'internal'),('subtype', '=', 'standard'),('state', 'in', ['assigned','done','confirmed']),('already_replicated', '=', False)]",partner_id,USB,stock.picking.usb_replicate_int,stock.picking,USB_replicate_int,2020,Valid
1457+msf_sync_data_server.USB_create_partial_int_moves,TRUE,TRUE,"['name','from_wkf','date_done','subtype','associate_pick_name','rw_force_seq','state','stock_journal_id/id','purchase_id/id', 'sale_id/id','origin','shipment_id/name','shipment_id/num_of_packs','previous_step_id/name','location_id/id','backorder_ids/id', 'backorder_ids/rw_sdref_counterpart', 'backorder_id/id','backorder_id/name','warehouse_id/id','order_category','overall_qty','change_reason','cross_docking_ok','location_dest_id/id','address_id', 'partner_type_stock_picking', 'delivered','reason_type_id/id','min_date', 'note', 'partner_id', 'move_type', 'type', 'dpo_out', 'flow_type', 'transport_order_id/id', 'direct_incoming','shipment_id/name', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/reason_type_id/id','move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/product_uos_qty', 'move_lines/prodlot_id/id', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/id','move_lines/location_id/id','move_lines/location_requestor_rw/id','move_lines/from_pack','move_lines/to_pack','move_lines/width','move_lines/height','move_lines/weight','move_lines/length','move_lines/pack_type','move_lines/purchase_line_id/id','move_lines/sale_line_id/id','move_lines/price_unit','move_lines/price_currency_id/id']","[('type', '=', 'internal'),('subtype', '=', 'standard'),('state', 'in', ['done'])]",partner_id,USB,stock.picking.usb_create_partial_int_moves,stock.picking,USB_create_partial_int_moves,2021,Valid
1458+msf_sync_data_server.USB_replicate_out,TRUE,TRUE,"['name','subtype','from_wkf','state','stock_journal_id/id','purchase_id/id', 'sale_id/id','origin','shipment_id/name','shipment_id/num_of_packs','previous_step_id/name','location_id/id', 'backorder_id/id','backorder_id/name','backorder_ids/id','backorder_ids/rw_sdref_counterpart', 'warehouse_id/id','order_category','overall_qty','change_reason','cross_docking_ok','location_dest_id/id','address_id', 'partner_type_stock_picking', 'delivered','reason_type_id/id','min_date', 'note', 'partner_id', 'move_type', 'type', 'dpo_out', 'flow_type', 'transport_order_id/id', 'direct_incoming','shipment_id/name', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/reason_type_id/id','move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/product_uos_qty', 'move_lines/prodlot_id/id', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/id','move_lines/location_id/id','move_lines/from_pack','move_lines/to_pack','move_lines/width','move_lines/height','move_lines/weight','move_lines/length','move_lines/pack_type','move_lines/purchase_line_id/id','move_lines/sale_line_id/id','move_lines/price_unit','move_lines/price_currency_id/id']","[('type', '=', 'out'),('subtype', '=', 'standard'),('state', 'in', ['confirmed', 'assigned']),('already_replicated', '=', False),('partner_id', '!=', False)]",partner_id,USB,stock.picking.usb_replicate_picking,stock.picking,USB_replicate_out,2030,Valid
1459+msf_sync_data_server.USB_replicate_pick,TRUE,TRUE,"['name','subtype','from_wkf','state','stock_journal_id/id','purchase_id/id', 'sale_id/id','origin','shipment_id/name','shipment_id/num_of_packs','previous_step_id/name','location_id/id', 'backorder_id/id','backorder_id/name','backorder_ids/id','backorder_ids/rw_sdref_counterpart', 'warehouse_id/id','order_category','overall_qty','change_reason','cross_docking_ok','location_dest_id/id','address_id', 'partner_type_stock_picking', 'delivered','reason_type_id/id','min_date', 'note', 'partner_id', 'move_type', 'type', 'dpo_out', 'flow_type', 'transport_order_id/id', 'direct_incoming','shipment_id/name', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/reason_type_id/id','move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/product_uos_qty', 'move_lines/prodlot_id/id', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/id','move_lines/location_id/id','move_lines/from_pack','move_lines/to_pack','move_lines/width','move_lines/height','move_lines/weight','move_lines/length','move_lines/pack_type','move_lines/purchase_line_id/id','move_lines/sale_line_id/id','move_lines/price_unit','move_lines/price_currency_id/id']","[('type', '=', 'out'),('subtype', '=', 'picking'),('state', 'in', ['draft']),('already_replicated', '=', False),('partner_id', '!=', False)]",partner_id,USB,stock.picking.usb_replicate_picking,stock.picking,USB_replicate_pick,2031,Valid
1460+msf_sync_data_server.USB_replicate_out_conso,TRUE,TRUE,"['name','subtype','from_wkf','date_done','state','stock_journal_id/id','purchase_id/id', 'sale_id/id','origin','shipment_id/name','shipment_id/num_of_packs','previous_step_id/name','location_id/id','backorder_ids/id','backorder_ids/rw_sdref_counterpart', 'backorder_id/id','backorder_id/name','warehouse_id/id','order_category','overall_qty','change_reason','cross_docking_ok','location_dest_id/id','address_id', 'partner_type_stock_picking', 'delivered','reason_type_id/id','min_date', 'note', 'partner_id', 'move_type', 'type', 'dpo_out', 'flow_type', 'transport_order_id/id', 'direct_incoming','shipment_id/name', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/reason_type_id/id','move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/product_uos_qty', 'move_lines/prodlot_id/id', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/id','move_lines/location_id/id','move_lines/from_pack','move_lines/to_pack','move_lines/width','move_lines/height','move_lines/weight','move_lines/length','move_lines/pack_type','move_lines/purchase_line_id/id','move_lines/sale_line_id/id','move_lines/price_unit','move_lines/price_currency_id/id']","[('type', '=', 'out'),('subtype', '=', 'standard'),('name', 'like', 'OUT-CONSO'),('state', '=', 'done'),('already_replicated', '=', False),('partner_id', '!=', False)]",partner_id,USB,stock.picking.usb_replicate_picking,stock.picking,USB_replicate_out_conso,2032,Valid
1461+msf_sync_data_server.USB_convert_PICK_to_OUT,TRUE,TRUE,"['name','subtype','from_wkf','associate_pick_name','date_done','state','stock_journal_id/id','purchase_id/id', 'sale_id/id','origin','shipment_id/name','shipment_id/num_of_packs','previous_step_id/name','location_id/id','backorder_ids/id', 'backorder_ids/rw_sdref_counterpart', 'backorder_id/id','backorder_id/name','warehouse_id/id','order_category','overall_qty','change_reason','cross_docking_ok','location_dest_id/id','address_id', 'partner_type_stock_picking', 'delivered','reason_type_id/id','min_date', 'note', 'partner_id', 'move_type', 'type', 'dpo_out', 'flow_type', 'transport_order_id/id', 'direct_incoming','shipment_id/name', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/reason_type_id/id','move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/product_uos_qty', 'move_lines/prodlot_id/id', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/id','move_lines/location_id/id','move_lines/from_pack','move_lines/to_pack','move_lines/width','move_lines/height','move_lines/weight','move_lines/length','move_lines/pack_type','move_lines/purchase_line_id/id','move_lines/sale_line_id/id','move_lines/price_unit','move_lines/price_currency_id/id']","[('name', '=', False),('partner_id', '!=', False)]",partner_id,USB,stock.picking.usb_convert_pick_to_out,stock.picking,USB_convert_PICK_to_OUT,2035,Valid
1462+msf_sync_data_server.USB_convert_OUT_to_PICK,TRUE,TRUE,"['name','subtype','from_wkf','associate_pick_name','date_done','state','stock_journal_id/id','purchase_id/id', 'sale_id/id','origin','shipment_id/name','shipment_id/num_of_packs','previous_step_id/name','location_id/id','backorder_ids/id', 'backorder_ids/rw_sdref_counterpart', 'backorder_id/id','backorder_id/name','warehouse_id/id','order_category','overall_qty','change_reason','cross_docking_ok','location_dest_id/id','address_id', 'partner_type_stock_picking', 'delivered','reason_type_id/id','min_date', 'note', 'partner_id', 'move_type', 'type', 'dpo_out', 'flow_type', 'transport_order_id/id', 'direct_incoming','shipment_id/name', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/reason_type_id/id','move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/product_uos_qty', 'move_lines/prodlot_id/id', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/id','move_lines/location_id/id','move_lines/from_pack','move_lines/to_pack','move_lines/width','move_lines/height','move_lines/weight','move_lines/length','move_lines/pack_type','move_lines/purchase_line_id/id','move_lines/sale_line_id/id','move_lines/price_unit','move_lines/price_currency_id/id']","[('name', '=', False),('partner_id', '!=', False)]",partner_id,USB,stock.picking.usb_convert_out_to_pick,stock.picking,USB_convert_OUT_to_PICK,2036,Valid
1463+msf_sync_data_server.USB_closed_OUT_closes_OUT,TRUE,TRUE,"['name','subtype','from_wkf','date_done','state','stock_journal_id/id','purchase_id/id', 'sale_id/id','origin','shipment_id/name','shipment_id/num_of_packs','previous_step_id/name','location_id/id','backorder_ids/id', 'backorder_ids/rw_sdref_counterpart', 'backorder_id/id','backorder_id/name','warehouse_id/id','order_category','overall_qty','change_reason','cross_docking_ok','location_dest_id/id','address_id', 'partner_type_stock_picking', 'delivered','reason_type_id/id','min_date', 'note', 'partner_id', 'move_type', 'type', 'dpo_out', 'flow_type', 'transport_order_id/id', 'direct_incoming','shipment_id/name', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/reason_type_id/id','move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/product_uos_qty', 'move_lines/prodlot_id/id', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/id','move_lines/location_id/id','move_lines/from_pack','move_lines/to_pack','move_lines/width','move_lines/height','move_lines/weight','move_lines/length','move_lines/pack_type','move_lines/purchase_line_id/id','move_lines/sale_line_id/id','move_lines/price_unit','move_lines/price_currency_id/id']","[('type', '=', 'out'),('subtype', '=', 'standard'),('state', '=', 'done'),('already_replicated', '=', False),('partner_id', '!=', False)]",partner_id,USB,stock.picking.usb_closed_out_closes_out,stock.picking,USB_closed_OUT_closes_OUT,2040,Valid
1464+msf_sync_data_server.USB_closed_new_PICK_closes_PICK,TRUE,TRUE,"['name','subtype','date_done','state','from_wkf','stock_journal_id/id','purchase_id/id', 'sale_id/id','origin','shipment_id/name','shipment_id/num_of_packs','previous_step_id/name','location_id/id','backorder_ids/id', 'backorder_ids/rw_sdref_counterpart', 'backorder_id/id','backorder_id/name','warehouse_id/id','order_category','overall_qty','change_reason','cross_docking_ok','location_dest_id/id','address_id', 'partner_type_stock_picking', 'delivered','reason_type_id/id','min_date', 'note', 'partner_id', 'move_type', 'type', 'dpo_out', 'flow_type', 'transport_order_id/id', 'direct_incoming','shipment_id/name', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/reason_type_id/id','move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/product_uos_qty', 'move_lines/prodlot_id/id', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/id','move_lines/location_id/id','move_lines/from_pack','move_lines/to_pack','move_lines/width','move_lines/height','move_lines/weight','move_lines/length','move_lines/pack_type','move_lines/purchase_line_id/id','move_lines/sale_line_id/id','move_lines/price_unit','move_lines/price_currency_id/id']","[('type', '=', 'out'),('subtype', '=', 'picking'),('state', 'in', ['done', 'assigned']),('already_replicated', '=', False),('partner_id', '!=', False)]",partner_id,USB,stock.picking.usb_create_picking,stock.picking,USB_closed_new_PICK_closes_PICK,2041,Valid
1465+msf_sync_data_server.USB_replicate_PPL,TRUE,TRUE,"['name','subtype','from_wkf','state','stock_journal_id/id','purchase_id/id', 'sale_id/id','origin','shipment_id/name','shipment_id/num_of_packs','previous_step_id/name','location_id/id','backorder_ids/id','backorder_ids/rw_sdref_counterpart', 'backorder_id/id','backorder_id/name','warehouse_id/id','order_category','overall_qty','change_reason','cross_docking_ok','location_dest_id/id','address_id', 'partner_type_stock_picking', 'delivered','reason_type_id/id','min_date', 'note', 'partner_id', 'move_type', 'type', 'dpo_out', 'flow_type', 'transport_order_id/id', 'direct_incoming','shipment_id/name', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/reason_type_id/id','move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/product_uos_qty', 'move_lines/prodlot_id/id', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/id','move_lines/location_id/id','move_lines/from_pack','move_lines/to_pack','move_lines/width','move_lines/height','move_lines/weight','move_lines/length','move_lines/pack_type','move_lines/purchase_line_id/id','move_lines/sale_line_id/id','move_lines/price_unit','move_lines/price_currency_id/id']","[('type', '=', 'out'),('subtype', '=', 'ppl'),('state', 'in', ['done','assigned']),('already_replicated', '=', False),('partner_id', '!=', False)]",partner_id,USB,stock.picking.usb_replicate_ppl,stock.picking,USB_replicate_PPL,2044,Valid
1466+msf_sync_data_server.USB_picking_return_products,TRUE,TRUE,['name'],"[('state', 'in',['fake'])]",partner_id,USB,stock.picking.usb_picking_return_products,stock.picking,usb_picking_return_products,2045,Valid
1467+msf_sync_data_server.USB_Create_Packing_List,TRUE,TRUE,"['name','from_wkf','subtype','state','stock_journal_id/id','purchase_id/id', 'sale_id/id','origin','shipment_id/name','shipment_id/num_of_packs','previous_step_id/name','location_id/id','backorder_ids/id','backorder_ids/rw_sdref_counterpart', 'backorder_id/id','backorder_id/name','warehouse_id/id','order_category','overall_qty','change_reason','cross_docking_ok','location_dest_id/id','address_id', 'partner_type_stock_picking', 'delivered','reason_type_id/id','min_date', 'note', 'partner_id', 'move_type', 'type', 'dpo_out', 'flow_type', 'transport_order_id/id', 'direct_incoming','shipment_id/name', 'move_lines/processed_stock_move', 'move_lines/id', 'move_lines/state','move_lines/original_qty_partial', 'move_lines/line_number', 'move_lines/name', 'move_lines/change_reason', 'move_lines/reason_type_id/id','move_lines/product_id/id', 'move_lines/product_id/name', 'move_lines/product_qty', 'move_lines/product_uos_qty', 'move_lines/prodlot_id/id', 'move_lines/expired_date', 'move_lines/asset_id/id','move_lines/product_uom/id', 'move_lines/product_uom/name', 'move_lines/date', 'move_lines/date_expected', 'move_lines/note', 'move_lines/location_dest_id/id','move_lines/location_id/id','move_lines/from_pack','move_lines/to_pack','move_lines/width','move_lines/height','move_lines/weight','move_lines/length','move_lines/pack_type','move_lines/purchase_line_id/id','move_lines/sale_line_id/id','move_lines/price_unit','move_lines/price_currency_id/id']","[('type', '=', 'out'),('subtype', '=', 'packing'),('state', 'in', ['draft','done','assigned']),('shipment_id', '!=', False),('backorder_id', '=', False),('already_replicated', '=', False),('partner_id', '!=', False)]",partner_id,USB,stock.picking.usb_create_packing,stock.picking,USB_Create_Packing_List,2046,Valid
1468+msf_sync_data_server.USB_shipment_return_packs_shipment_draft,TRUE,TRUE,['name'],"[('state', 'in',['fake'])]",partner_id,USB,shipment.usb_shipment_return_packs_shipment_draft,shipment,usb_shipment_return_packs_shipment_draft,2047,Valid
1469+msf_sync_data_server.USB_Create_Shipment,TRUE,TRUE,"['shipper_address','address_id/id','date_of_departure','shipment_expected_date','invoice_id/id', 'consignee_date', 'shipper_name', 'carrier_address', 'registration', 'planned_date_of_arrival', 'partner_id', 'carrier_name', 'carrier_other', 'consignee_email', 'shipment_actual_date', 'shipper_date', 'parent_id/name', 'state', 'driver_name' , 'cargo_manifest_reference', 'carrier_signature', 'shipper_phone' , 'carrier_phone' , 'consignee_signature' , 'sequence_id' , 'carrier_email' , 'date', 'shipper_signature', 'carrier_date', 'name' , 'consignee_other', 'consignee_phone' , 'consignee_address', 'in_ref', 'transit_via', 'transport_type', 'shipper_email', 'partner_id2/id' , 'shipper_other' , 'consignee_name' , 'transport_order_id/id','pack_family_memory_ids/ppl_id/name','pack_family_memory_ids/from_pack','pack_family_memory_ids/to_pack','pack_family_memory_ids/description_ppl']","[('state', 'not in', ['draft']),('already_replicated', '=', False)]",partner_id,USB,shipment.usb_create_shipment,shipment,USB_Create_Shipment,2050,Valid
1470+msf_sync_data_server.Usb_Shipment_Return_Packs,TRUE,TRUE,['name'],"[('state','in',['fake'])]",partner_id,USB,shipment.usb_shipment_return_packs,shipment,USB_Shipment_Return_Packs,2051,Valid
1471+msf_sync_data_server.USB_Validate_Shipment,TRUE,TRUE,['name'],"[('state', 'in', ['done']), ('already_rw_validated', '=', False),('parent_id', '!=', False)]",partner_id,USB,shipment.usb_set_validated_shipment,shipment,USB_Validate_Shipment,2055,Valid
1472+msf_sync_data_server.USB_Set_Delivered_Shipment,TRUE,TRUE,['name'],"[('state', 'in', ['delivered']), ('already_rw_delivered', '=', False), ('parent_id', '!=', False)]",partner_id,USB,shipment.usb_set_delivered_shipment,shipment,USB_Set_Delivered_Shipment,2056,Valid
1473+msf_sync_data_server.USB_Cancel_Int,TRUE,TRUE,['name'],"[('type', '=', 'internal'), ('state', '=', 'cancel')]",partner_id,USB,stock.picking.usb_cancel_int,stock.picking,USB_Cancel_Int,2057,Valid
1474+>>>>>>> MERGE-SOURCE
1475
1476=== modified file 'bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv'
1477--- bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv 2017-08-23 18:38:09 +0000
1478+++ bin/addons/msf_sync_data_server/data/sync_server.sync_rule.csv 2017-09-01 09:49:29 +0000
1479@@ -123,12 +123,21 @@
1480 msf_sync_data_server.account_tax_tree,TRUE,TRUE,FALSE,TRUE,bidirectional,Down,"[('parent_id','!=','')]",['parent_id/id'],OC,account.tax,,Account Tax Tree,Valid,,613
1481 msf_sync_data_server.composition_kit,TRUE,TRUE,FALSE,TRUE,bidirectional,Down,"[('state','=','completed'),('composition_type','=','theoretical')]","['active', 'composition_creation_date', 'composition_description', 'composition_product_id/id', 'composition_type', 'composition_version', 'composition_version_txt', 'name', 'state']",OC,composition.kit,,Theoretical Kit Composition List,Valid,,620
1482 msf_sync_data_server.composition_item,TRUE,TRUE,FALSE,TRUE,bidirectional,Down,"[('item_kit_id' , 'in' , ('composition.kit' , 'id' , [('state','=','completed'),('composition_type','=','theoretical')]))]","['item_asset_id/id', 'item_kit_id/id', 'item_module', 'item_product_id/id', 'item_qty', 'item_uom_id/id']",OC,composition.item,,Theoretical Kit Composition List Line,Valid,,621
1483+<<<<<<< TREE
1484 msf_sync_data_server.internal_catalogue,TRUE,TRUE,TRUE,TRUE,bidirectional,Down,"[('state','=','confirmed'),('active', 'in', ['t', 'f']),('partner_id' , 'in' , ('res.partner' , 'id' , [('partner_type','=','external')]))]","[ 'comment', 'currency_id/id', 'current', 'esc_update_ts', 'active', 'name', 'partner_id/id', 'period_from', 'period_to']",OC,supplier.catalogue,,External Supplier Catalogue,Valid,"{'state': 'confirmed'}",650
1485 msf_sync_data_server.internal_catalogue_line,TRUE,TRUE,TRUE,TRUE,bidirectional,Down,"[('catalogue_id.state','=','confirmed'),('catalogue_id.partner_id' , 'in' , ('res.partner' , 'id' , [('partner_type','=','external')]))]","['catalogue_id/id', 'comment', 'line_number', 'line_uom_id/id', 'min_order_qty', 'min_qty', 'product_id/id', 'rounding', 'unit_price', 'product_code']",OC,supplier.catalogue.line,,External Supplier Catalogue Line,Valid,,651
1486 msf_sync_data_server.esc_catalogue,TRUE,TRUE,FALSE,TRUE,bidirectional,Down,"[('state','=','confirmed'),('active', 'in', ['t', 'f']),('partner_id' , 'in' , ('res.partner' , 'id' , [('partner_type','=','esc')]))]","[ 'comment', 'currency_id/id', 'current', 'esc_update_ts', 'active', 'name', 'partner_id/id', 'period_from', 'period_to']",COORDINATIONS,supplier.catalogue,,ESC Supplier Catalogue,Valid,"{'state': 'confirmed'}",655
1487 msf_sync_data_server.esc_catalogue_line,TRUE,TRUE,FALSE,TRUE,bidirectional,Down,"[('catalogue_id.state','=','confirmed'),('catalogue_id.partner_id' , 'in' , ('res.partner' , 'id' , [('partner_type','=','esc')]))]","['catalogue_id/id', 'comment', 'line_number', 'line_uom_id/id', 'min_order_qty', 'min_qty', 'product_id/id', 'rounding', 'unit_price', 'product_code']",COORDINATIONS,supplier.catalogue.line,,ESC Supplier Catalogue Lines,Valid,,656
1488 msf_sync_data_server.coordo_catalogue,TRUE,TRUE,FALSE,TRUE,bidirectional,Down,"[('state','=','confirmed'),('active', 'in', ['t', 'f']),('partner_id' , 'in' , ('res.partner' , 'id' , [('is_coordo','=',True)]))]","[ 'comment', 'currency_id/id', 'current', 'esc_update_ts', 'active', 'name', 'partner_id/id', 'period_from', 'period_to']",MISSION,supplier.catalogue,,Coordo Supplier Catalogue,Valid,"{'state': 'confirmed'}",660
1489 msf_sync_data_server.coordo_catalogue_line,TRUE,TRUE,FALSE,TRUE,bidirectional,Down,"[('catalogue_id.state','=','confirmed'),('catalogue_id.partner_id' , 'in' , ('res.partner' , 'id' , [('is_coordo','=',True)]))]","['catalogue_id/id', 'comment', 'line_number', 'line_uom_id/id', 'min_order_qty', 'min_qty', 'product_id/id', 'rounding', 'unit_price', 'product_code']",MISSION,supplier.catalogue.line,,Coordo Supplier Catalogue Lines,Valid,,661
1490+=======
1491+msf_sync_data_server.internal_catalogue,TRUE,TRUE,TRUE,TRUE,bidirectional,Down,"[('state','=','confirmed'),('active', 'in', ['t', 'f']),('partner_id' , 'in' , ('res.partner' , 'id' , [('partner_type','=','external')]))]","[ 'comment', 'currency_id/id', 'current', 'esc_update_ts', 'active', 'name', 'partner_id/id', 'period_from', 'period_to']",OC,supplier.catalogue,,External Supplier Catalogue,Valid,"{'state': 'confirmed'}",650
1492+msf_sync_data_server.internal_catalogue_line,TRUE,TRUE,TRUE,TRUE,bidirectional,Down,"[('catalogue_id.state','=','confirmed'),('catalogue_id.partner_id' , 'in' , ('res.partner' , 'id' , [('partner_type','=','external')]))]","['catalogue_id/id', 'comment', 'line_number', 'line_uom_id/id', 'min_order_qty', 'min_qty', 'product_id/id', 'rounding', 'unit_price']",OC,supplier.catalogue.line,,External Supplier Catalogue Line,Valid,,651
1493+msf_sync_data_server.esc_catalogue,TRUE,TRUE,FALSE,TRUE,bidirectional,Down,"[('state','=','confirmed'),('active', 'in', ['t', 'f']),('partner_id' , 'in' , ('res.partner' , 'id' , [('partner_type','=','esc')]))]","[ 'comment', 'currency_id/id', 'current', 'esc_update_ts', 'active', 'name', 'partner_id/id', 'period_from', 'period_to']",COORDINATIONS,supplier.catalogue,,ESC Supplier Catalogue,Valid,"{'state': 'confirmed'}",655
1494+msf_sync_data_server.esc_catalogue_line,TRUE,TRUE,FALSE,TRUE,bidirectional,Down,"[('catalogue_id.state','=','confirmed'),('catalogue_id.partner_id' , 'in' , ('res.partner' , 'id' , [('partner_type','=','esc')]))]","['catalogue_id/id', 'comment', 'line_number', 'line_uom_id/id', 'min_order_qty', 'min_qty', 'product_id/id', 'rounding', 'unit_price']",COORDINATIONS,supplier.catalogue.line,,ESC Supplier Catalogue Lines,Valid,,656
1495+msf_sync_data_server.coordo_catalogue,TRUE,TRUE,FALSE,TRUE,bidirectional,Down,"[('state','=','confirmed'),('active', 'in', ['t', 'f']),('partner_id' , 'in' , ('res.partner' , 'id' , [('is_coordo','=',True)]))]","[ 'comment', 'currency_id/id', 'current', 'esc_update_ts', 'active', 'name', 'partner_id/id', 'period_from', 'period_to']",MISSION,supplier.catalogue,,Coordo Supplier Catalogue,Valid,"{'state': 'confirmed'}",660
1496+msf_sync_data_server.coordo_catalogue_line,TRUE,TRUE,FALSE,TRUE,bidirectional,Down,"[('catalogue_id.state','=','confirmed'),('catalogue_id.partner_id' , 'in' , ('res.partner' , 'id' , [('is_coordo','=',True)]))]","['catalogue_id/id', 'comment', 'line_number', 'line_uom_id/id', 'min_order_qty', 'min_qty', 'product_id/id', 'rounding', 'unit_price']",MISSION,supplier.catalogue.line,,Coordo Supplier Catalogue Lines,Valid,,661
1497+>>>>>>> MERGE-SOURCE
1498 msf_sync_data_server.user_groups,TRUE,TRUE,TRUE,TRUE,bidirectional,Down,[],"['comment', 'menu_access/id', 'name', 'visible_res_groups', 'is_an_admin_profile', 'level']",OC,res.groups,,User Groups,Valid,,700
1499 msf_sync_data_server.ACL,TRUE,TRUE,TRUE,TRUE,bidirectional,Down,[],"['group_id/id', 'model_id/id', 'name', 'perm_create', 'perm_read', 'perm_unlink', 'perm_write']",OC,ir.model.access,,Access Control Lists,Valid,,701
1500 msf_sync_data_server.record_rules,TRUE,TRUE,TRUE,TRUE,bidirectional,Down,[],"['domain_force', 'global', 'groups/id', 'model_id/id', 'name', 'perm_create', 'perm_read', 'perm_unlink', 'perm_write']",OC,ir.rule,,Record Rules,Valid,,702
1501
1502=== modified file 'bin/addons/procurement_request/procurement_request.py'
1503=== modified file 'bin/addons/procurement_request/procurement_request_view.xml'
1504--- bin/addons/procurement_request/procurement_request_view.xml 2017-08-01 15:45:31 +0000
1505+++ bin/addons/procurement_request/procurement_request_view.xml 2017-09-01 09:49:29 +0000
1506@@ -54,12 +54,16 @@
1507 <field name="delivery_requested_date" required="1" string="Requested date" attrs="{'readonly': [('state', 'not in', ['draft', 'validated'])]}" />
1508 <field name="origin" attrs="{'readonly': [('state', 'not in', ['draft', 'validated'])]}" />
1509 <field name="functional_currency_id" />
1510+<<<<<<< TREE
1511 <field name="categ" on_change="onchange_categ(categ)" />
1512 <group colspan="2" col="3">
1513 <field name="stock_take_date" attrs="{'readonly': [('state', 'not in', ['draft'])]}" />
1514 <button colspan="1" name="update_date" string="Update Lines" type="object" context="{'field_name': 'stock_take', 'type': 'sale.order'}" icon="gtk-indent"
1515 attrs="{'invisible': [('state', 'not in', ('draft', 'confirmed'))]}" />
1516 </group>
1517+=======
1518+ <field name="categ" on_change="onchange_categ(categ)" />
1519+>>>>>>> MERGE-SOURCE
1520 <field name="fo_to_resource" invisible="1" />
1521 <field name="parent_order_name" attrs="{'invisible': [('fo_to_resource', '=', False)]}" />
1522 </group>
1523
1524=== modified file 'bin/addons/product_attributes/product_attributes_view.xml'
1525=== modified file 'bin/addons/purchase_override/purchase.py'
1526=== modified file 'bin/addons/purchase_override/purchase_view.xml'
1527=== modified file 'bin/addons/reason_types_moves/reason_type.py'
1528--- bin/addons/reason_types_moves/reason_type.py 2017-08-25 16:02:26 +0000
1529+++ bin/addons/reason_types_moves/reason_type.py 2017-09-01 09:49:29 +0000
1530@@ -177,12 +177,21 @@
1531 @return:
1532 """
1533 # Copy the comment
1534+<<<<<<< TREE
1535 if inventory_line:
1536 move_vals.update({
1537 'comment': inventory_line.comment,
1538 'reason_type_id': inventory_line.reason_type_id.id,
1539 })
1540 move_vals.update({'not_chained': True})
1541+=======
1542+ if inventory_line:
1543+ move_vals.update({
1544+ 'comment': inventory_line.comment,
1545+ 'reason_type_id': inventory_line.reason_type_id.id,
1546+ })
1547+ move_vals.update({'not_chained': True})
1548+>>>>>>> MERGE-SOURCE
1549
1550 return super(stock_inventory, self)._inventory_line_hook(cr, uid, inventory_line, move_vals)
1551 # @@@end
1552
1553=== modified file 'bin/addons/report_webkit/webkit_report.py'
1554=== modified file 'bin/addons/sale/sale_view.xml'
1555=== modified file 'bin/addons/sale_override/sale.py'
1556=== modified file 'bin/addons/sale_override/sale_view.xml'
1557=== modified file 'bin/addons/sales_followup/report/sale_follow_up_report_multi.py'
1558--- bin/addons/sales_followup/report/sale_follow_up_report_multi.py 2017-07-25 09:04:51 +0000
1559+++ bin/addons/sales_followup/report/sale_follow_up_report_multi.py 2017-09-01 09:49:29 +0000
1560@@ -147,11 +147,18 @@
1561 data = {
1562 'po_name': po_name,
1563 'cdd': cdd,
1564+<<<<<<< TREE
1565 'line_number': line.line_number,
1566 'product_name': line.product_id.name,
1567 'product_code': line.product_id.code,
1568 'is_delivered': False,
1569 'backordered_qty': 0.00,
1570+=======
1571+ 'line_number': line.line_number,
1572+ 'product_name': line.product_id.name,
1573+ 'product_code': line.product_id.code,
1574+ 'is_delivered': False,
1575+>>>>>>> MERGE-SOURCE
1576 }
1577 if first_line:
1578 data.update({
1579@@ -162,6 +169,7 @@
1580 })
1581 first_line = False
1582
1583+<<<<<<< TREE
1584 if ppl or ppl_not_shipped:
1585 eta = ''
1586 is_delivered = False
1587@@ -177,6 +185,23 @@
1588 packing = move.picking_id.name or ''
1589 shipment = ''
1590
1591+=======
1592+ if ppl or ppl_not_shipped:
1593+ eta = ''
1594+ is_delivered = False
1595+ is_shipment_done = False
1596+ if ppl:
1597+ packing = move.picking_id.previous_step_id.name or ''
1598+ shipment = move.picking_id.shipment_id and move.picking_id.shipment_id.name or ''
1599+ eta = datetime.strptime(move.picking_id.shipment_id.shipment_actual_date[0:10], '%Y-%m-%d')
1600+ eta += timedelta(days=line.order_id.partner_id.supplier_lt or 0.00)
1601+ is_delivered = move.picking_id.shipment_id.state == 'delivered' or False
1602+ is_shipment_done = move.picking_id.shipment_id.state == 'done' or False
1603+ else:
1604+ packing = move.picking_id.name or ''
1605+ shipment = ''
1606+
1607+>>>>>>> MERGE-SOURCE
1608 if not grouped:
1609 key = (packing, shipment, move.product_uom.name)
1610 else:
1611
1612=== modified file 'bin/addons/sourcing/procurement_order.py'
1613=== modified file 'bin/addons/specific_rules/specific_rules.py'
1614--- bin/addons/specific_rules/specific_rules.py 2017-08-23 14:10:02 +0000
1615+++ bin/addons/specific_rules/specific_rules.py 2017-09-01 09:49:29 +0000
1616@@ -75,9 +75,15 @@
1617 prod_obj = self.pool.get('product.product')
1618 if prod_obj.browse(cr, uid, product).is_ssl:
1619 warning = {
1620+<<<<<<< TREE
1621 'title': 'Short Shelf Life product',
1622 'message': _(SHORT_SHELF_LIFE_MESS)
1623 }
1624+=======
1625+ 'title': 'Short Shelf Life product',
1626+ 'message': _(SHORT_SHELF_LIFE_MESS)
1627+ }
1628+>>>>>>> MERGE-SOURCE
1629 result.update(warning=warning)
1630
1631 return result
1632@@ -168,9 +174,15 @@
1633 prod_obj = self.pool.get('product.product')
1634 if prod_obj.browse(cr, uid, product).is_ssl:
1635 warning = {
1636+<<<<<<< TREE
1637 'title': 'Short Shelf Life product',
1638 'message': _(SHORT_SHELF_LIFE_MESS)
1639 }
1640+=======
1641+ 'title': 'Short Shelf Life product',
1642+ 'message': _(SHORT_SHELF_LIFE_MESS)
1643+ }
1644+>>>>>>> MERGE-SOURCE
1645 result.update(warning=warning)
1646
1647 return result
1648@@ -704,12 +716,21 @@
1649 raise osv.except_osv(_('Error!'), _('The selected product is Expiry Date Mandatory while the selected Batch number corresponds to Batch Number Mandatory.'))
1650 if not move.prodlot_id and move.product_qty and \
1651 (move.state == 'done' and \
1652+<<<<<<< TREE
1653 ( \
1654 (move.product_id.track_production and move.location_id.usage == 'production') or \
1655 (move.product_id.track_production and move.location_dest_id.usage == 'production') or \
1656 (move.product_id.track_incoming and move.location_id.usage == 'supplier') or \
1657 (move.product_id.track_outgoing and move.location_dest_id.usage == 'customer') \
1658 )):
1659+=======
1660+ ( \
1661+ (move.product_id.track_production and move.location_id.usage == 'production') or \
1662+ (move.product_id.track_production and move.location_dest_id.usage == 'production') or \
1663+ (move.product_id.track_incoming and move.location_id.usage == 'supplier') or \
1664+ (move.product_id.track_outgoing and move.location_dest_id.usage == 'customer') \
1665+ )):
1666+>>>>>>> MERGE-SOURCE
1667 raise osv.except_osv(_('Error!'), _('You must assign a batch number for this product.'))
1668
1669 return True
1670@@ -783,6 +804,7 @@
1671 product_ids.add(read_dict['product_id'][0])
1672
1673 product_list_dict = self.pool.get('product.product').read(cr, uid,
1674+<<<<<<< TREE
1675 list(product_ids),
1676 ['kc_txt',
1677 'ssl_txt',
1678@@ -793,6 +815,18 @@
1679 'type',
1680 'subtype',],
1681 context=context)
1682+=======
1683+ list(product_ids),
1684+ ['kc_txt',
1685+ 'ssl_txt',
1686+ 'dg_txt',
1687+ 'cs_txt',
1688+ 'batch_management',
1689+ 'perishable',
1690+ 'type',
1691+ 'subtype',],
1692+ context=context)
1693+>>>>>>> MERGE-SOURCE
1694 product_dict = dict([(x['id'], x) for x in product_list_dict])
1695
1696 for stock_move_dict in read_result:
1697@@ -1362,9 +1396,15 @@
1698 'You can\'t create a standard batch number for a product which is not batch mandatory. If the product is perishable, the system will create automatically an internal batch number on reception/inventory.',
1699 ['Type', 'Product']),
1700 (_check_perishable_type_integrity,
1701+<<<<<<< TREE
1702 'You can\'t create an internal Batch Number for a product which is batch managed or which is not perishable. If the product is batch managed, please create a standard batch number.',
1703 ['Type', 'Product']),
1704 ]
1705+=======
1706+ 'You can\'t create an internal Batch Number for a product which is batch managed or which is not perishable. If the product is batch managed, please create a standard batch number.',
1707+ ['Type', 'Product']),
1708+ ]
1709+>>>>>>> MERGE-SOURCE
1710
1711 def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False):
1712 '''
1713@@ -1601,9 +1641,15 @@
1714 GROUP BY l.product_id, l.location_id, l.%s, l.expiry_date
1715 HAVING count(l.id) > 1
1716 ORDER BY count(l.id) DESC""" % (
1717+<<<<<<< TREE
1718 self._name.replace('.', '_'),
1719 self._name == 'stock.inventory' and 'prod_lot_id' or 'prodlot_name',
1720 )
1721+=======
1722+ self._name.replace('.', '_'),
1723+ self._name == 'stock.inventory' and 'prod_lot_id' or 'prodlot_name',
1724+ )
1725+>>>>>>> MERGE-SOURCE
1726 cr.execute(sql_req, (tuple(ids),))
1727 check_res = cr.dictfetchall()
1728 if check_res:
1729
1730=== modified file 'bin/addons/stock/stock.py'
1731--- bin/addons/stock/stock.py 2017-08-23 14:10:02 +0000
1732+++ bin/addons/stock/stock.py 2017-09-01 09:49:29 +0000
1733@@ -3057,6 +3057,7 @@
1734 'location_id': line['location_id'][0],
1735 'location_dest_id': location_id,
1736 })
1737+<<<<<<< TREE
1738 value.update({
1739 'comment': line['comment'],
1740 'reason_type_id': line['reason_type_id'][0],
1741@@ -3071,6 +3072,20 @@
1742 message = _('Inventory') + " '" + inv['name'] + "' "+ _("is validated.")
1743 self.log(cr, uid, inv['id'], message)
1744 self.write(cr, uid, [inv['id']], {'state': 'confirm', 'move_ids': [(6, 0, move_ids)]})
1745+=======
1746+ value.update({
1747+ 'comment': line['comment'],
1748+ 'reason_type_id': line['reason_type_id'][0],
1749+ })
1750+
1751+ if self._name == 'initial.stock.inventory':
1752+ value.update({'price_unit': line['average_cost']})
1753+ move_ids.append(self._inventory_line_hook(cr, uid, None, value))
1754+ # Changed the text of the following line to "is confirmed" instead of "is done" due to the state value
1755+ message = _('Inventory') + " '" + inv['name'] + "' "+ _("is confirmed.")
1756+ self.log(cr, uid, inv['id'], message)
1757+ self.write(cr, uid, [inv['id']], {'state': 'confirm', 'move_ids': [(6, 0, move_ids)]})
1758+>>>>>>> MERGE-SOURCE
1759 return True
1760
1761 def action_cancel_draft(self, cr, uid, ids, context=None):
1762
1763=== modified file 'bin/addons/stock_override/wizard/stock_card_wizard.py'
1764--- bin/addons/stock_override/wizard/stock_card_wizard.py 2017-08-23 14:10:02 +0000
1765+++ bin/addons/stock_override/wizard/stock_card_wizard.py 2017-09-01 09:49:29 +0000
1766@@ -245,12 +245,16 @@
1767 'notes': move.picking_id and move.picking_id.note or '',
1768 }
1769
1770+<<<<<<< TREE
1771 line_obj.create(cr, uid, line_values, context=context)
1772
1773 for inv_date in inv_line_dates:
1774 for new_line in inv_line_to_add[inv_date]:
1775 new_line['balance'] = initial_stock
1776 line_obj.create(cr, uid, new_line, context=context)
1777+=======
1778+ line_obj.create(cr, uid, line_values, context=context)
1779+>>>>>>> MERGE-SOURCE
1780
1781 self.write(cr, uid, [ids[0]], {'available_stock': initial_stock},
1782 context=context)
1783
1784=== modified file 'bin/addons/sync_client/sync_client.py'
1785=== modified file 'bin/addons/sync_so/so_po_common.py'
1786=== modified file 'bin/release.py'
1787--- bin/release.py 2017-08-29 14:56:45 +0000
1788+++ bin/release.py 2017-09-01 09:49:29 +0000
1789@@ -20,7 +20,11 @@
1790 ##############################################################################
1791
1792 name = 'openerp-server'
1793+<<<<<<< TREE
1794 version = 'UF6.0rc1'
1795+=======
1796+version = 'UF6.0dev'
1797+>>>>>>> MERGE-SOURCE
1798 major_version = '6.0'
1799 description = 'OpenERP Server'
1800 long_desc = '''OpenERP is a complete ERP and CRM. The main features are accounting (analytic
1801
1802=== modified file 'bin/tools/misc.py'
1803=== modified file 'bin/unifield-version.txt'
1804--- bin/unifield-version.txt 2017-08-29 14:56:45 +0000
1805+++ bin/unifield-version.txt 2017-09-01 09:49:29 +0000
1806@@ -48,7 +48,13 @@
1807 364232a949995b3e46324fa93b5a06c3 2016-12-14 10:00:00 UF3.0
1808 b2bc3aa15d627714868e8bac1c44b821 2017-01-26 14:00:00 UF3.1
1809 f37e6ab5138ec1768214805ec03b77ec 2017-03-20 16:00:00 UF4.0
1810+<<<<<<< TREE
1811 0b4c9c7c2367ce89a4258c7e97016f68 2017-05-05 12:00:00 UF4.1
1812 7777607e902de5a698ab370152ca6302 2017-06-16 09:23:00 UF5.0
1813 6e67c8793129be46edc2237c80f13846 2017-07-20 15:00:00 UF5.1
1814 07a26b10a43329d42ecbfeb1fe5a26e1 2017-08-29 17:00:00 UF6.0rc1
1815+=======
1816+0b4c9c7c2367ce89a4258c7e97016f68 2017-05-05 12:00:00 UF4.1
1817+7777607e902de5a698ab370152ca6302 2017-06-16 09:23:00 UF5.0
1818+6e67c8793129be46edc2237c80f13846 2017-07-20 15:00:00 UF5.1
1819+>>>>>>> MERGE-SOURCE
1820
1821=== modified file 'bin/updater.py'
1822--- bin/updater.py 2017-08-25 12:42:18 +0000
1823+++ bin/updater.py 2017-09-01 09:49:29 +0000
1824@@ -554,6 +554,7 @@
1825 logger.warning('ExpandedColumnCount is present in file %s line %s.' % (full_path, line_number))
1826 logger.info("Check mako and xml files finished.")
1827
1828+<<<<<<< TREE
1829 #
1830 # Functions related to upgrading PostgreSQL.
1831 #
1832@@ -979,3 +980,374 @@
1833 if sys.platform != 'win32':
1834 root = '/'
1835 assert get_free_space_mb(root) != None
1836+=======
1837+#
1838+# Functions related to upgrading PostgreSQL.
1839+#
1840+
1841+def _find_pg_patch():
1842+ """
1843+ Looks in the cwd for a file matching pgsql-*-*-patch.
1844+ Returns the filename of the patch, the oldVer and the newVer.
1845+ """
1846+ import glob
1847+ pfiles = glob.glob('pgsql-*-*-patch')
1848+ if len(pfiles) == 0:
1849+ return None, None, None
1850+ if len(pfiles) != 1:
1851+ warn("Too many PostgreSQL patch files: %s" % pfiles)
1852+ warn("PostgreSQL will not be updated.")
1853+ return None, None, None
1854+
1855+ (oldVer, newVer) = pfiles[0].split('-')[1:3]
1856+
1857+ # Check version format: 8.4.14 or 10.1
1858+ if not re.match('\d+\.\d+(\.\d+)?', oldVer) or \
1859+ not re.match('\d+\.\d+(\.\d+)?', newVer):
1860+ return None, None, None
1861+
1862+ return pfiles[0], oldVer, newVer
1863+
1864+def _is_major(oldVer, newVer):
1865+ oldVer = oldVer.split('.')
1866+ newVer = newVer.split('.')
1867+ if oldVer[0] != newVer[0]:
1868+ return True
1869+ if oldVer[0] >= 10:
1870+ # for 10.x and onward, second position indicates minor
1871+ # version: https://www.postgresql.org/support/versioning/
1872+ return False
1873+ if oldVer[1] != newVer[1]:
1874+ return True
1875+ return False
1876+
1877+def _no_log(*x):
1878+ pass
1879+
1880+def _archive_patch(pf):
1881+ """
1882+ Put away the patch file in order to indicate that it has
1883+ already been applied and PG update should not be attempted
1884+ again.
1885+ """
1886+ warn('Archiving patch file %s' % pf)
1887+ if not os.path.exists('backup'):
1888+ os.mkdir('backup')
1889+ bf = os.path.join('backup', pf)
1890+ if os.path.exists(bf):
1891+ os.remove(bf)
1892+ os.rename(pf, bf)
1893+
1894+def do_pg_update():
1895+ """
1896+ This function is run on every server start (see openerp-server.py).
1897+ If the conditions are not right for a PostgreSQL update, it
1898+ immeditately returns, so that the server can start up (the common case).
1899+ If an update is required, then it attempts the update. If the
1900+ update fails, it must leave the server in the same condition it
1901+ started, i.e. with the original Postgres up and running.
1902+ """
1903+
1904+ # Postgres updates are only done on Windows.
1905+ if os.name != "nt":
1906+ return
1907+
1908+ # We need to open this here because do_update only
1909+ # opens it once it starts to work, not if there is no
1910+ # update to apply.
1911+ global log
1912+ try:
1913+ log = open(log_file, 'a')
1914+ except Exception as e:
1915+ log = os.stderr
1916+ warn("Could not open %s correctly: %s" % (log_file, e))
1917+
1918+ # If there is no patch file available, then there's no
1919+ # update to do.
1920+ pf, oldVer, newVer = _find_pg_patch()
1921+ if pf is None:
1922+ return
1923+
1924+ try:
1925+ with open(pf, 'rb') as f:
1926+ pdata = f.read()
1927+ except Exception as e:
1928+ warn("Could not read patch file %s: %s" % (pf, e))
1929+ _archive_patch(pf)
1930+ return
1931+
1932+ for root in ('c:\\', 'd:\\'):
1933+ if os.path.exists(root):
1934+ free = get_free_space_mb(root)
1935+ if free < 1000:
1936+ warn("Less than 1 gb free on %s. Not attempting PostgreSQL upgrade." % root)
1937+ return
1938+
1939+ # Minor update:
1940+ # 1. check that the patch will apply
1941+ # 2. stop server
1942+ # 3. patch the binaries in place, nuke patch to show it is done
1943+ # 4. start server
1944+ #
1945+ # Minor updates will only happen after the 8.4->9.6.x transition,
1946+ # so things are much easier, with more fixed items (PG inst location,
1947+ # service name).
1948+ if not _is_major(oldVer, newVer):
1949+ if oldVer.startswith("8.4."):
1950+ warn("Minor patch from 8.4.x not supported.")
1951+ return
1952+ warn("Postgres minor update from %s to %s" % (oldVer, newVer))
1953+
1954+ try:
1955+ bsdifftree.applyPatch(pdata, r'..\pgsql', doIt=False, log=_no_log)
1956+ subprocess.call('net stop Postgres', stdout=log, stderr=log)
1957+ bsdifftree.applyPatch(pdata, r'..\pgsql', log=warn)
1958+ _archive_patch(pf)
1959+ except Exception as e:
1960+ s = str(e) or type(e)
1961+ warn("Could not apply patch:", s)
1962+ finally:
1963+ subprocess.call('net start Postgres', stdout=log, stderr=log)
1964+ warn("Minor update done.")
1965+ return
1966+
1967+ # Major upgrade
1968+ #
1969+ # 0. find out if tablespaces are in use, if so abort
1970+ # 1. figure out where the old PG is and copy it to pgsql-next
1971+ # 2. patch pgsql-next, nuke patch file
1972+ # 3. prepare new db dir using new initdb, old user/pass.
1973+ # 4. stop server
1974+ # 5. pg_upgrade -> if fail, clean db dir, goto 8
1975+ # 6. commit to new bin dir, put it in '..\pgsql'
1976+ # 7. if old was 8.4, change service entry
1977+ # 8. start server
1978+
1979+ warn("Postgres major update from %s to %s" % (oldVer, newVer))
1980+ import tools
1981+
1982+ stopped = False
1983+ pg_new_db = None
1984+ try:
1985+ env = os.environ
1986+ if tools.config.get('db_user'):
1987+ env['PGUSER'] = tools.config['db_user']
1988+ if tools.config.get('db_password'):
1989+ env['PGPASSWORD'] = tools.config['db_password']
1990+
1991+ pg_new = r'..\pgsql-next'
1992+ if oldVer == '8.4.14':
1993+ svc = 'PostgreSQL_For_OpenERP'
1994+ pg_old = r'D:\MSF data\Unifield\PostgreSQL'
1995+ else:
1996+ svc = 'Postgres'
1997+ pg_old = r'..\pgsql'
1998+ if not os.path.exists(pg_old):
1999+ raise RuntimeError('PostgreSQL install directory %s not found.' % pg_old)
2000+
2001+ # 0: check for tablespaces (pg_upgrade seems to unify them
2002+ # into pg_default, which is not ok)
2003+ cmd = [ os.path.join(pg_old, 'bin', 'psql'), '-t', '-c',
2004+ 'select count(*) > 2 from pg_tablespace;', 'postgres' ]
2005+ out = None
2006+ try:
2007+ out = subprocess.check_output(cmd, stderr=log, env=env)
2008+ except subprocess.CalledProcessError as e:
2009+ warn(e)
2010+ warn("out is", out)
2011+ if out is None or 'f' not in out:
2012+ raise RuntimeError("User-defined tablespaces might be in use. Upgrade needs human intervention.")
2013+
2014+ # 1: use old PG install to make a new one to patch
2015+ if os.path.exists(pg_new):
2016+ warn("Removing previous %s directory" % pg_new)
2017+ shutil.rmtree(pg_new)
2018+
2019+ if oldVer == '8.4.14':
2020+ warn("Creating %s by selective copy from %s" % (pg_new, pg_old))
2021+ os.mkdir(pg_new)
2022+ for d in ('bin', 'lib', 'share'):
2023+ shutil.copytree(os.path.join(pg_old, d),
2024+ os.path.join(pg_new, d))
2025+ else:
2026+ shutil.copytree(pg_old, pg_new)
2027+
2028+ # 2: patch the pg exes -- no trial run here, because if applyPatch
2029+ # fails, we have only left pg_new unusable, and we will revert
2030+ # to pg_old. Compare to minor (in-place) upgrade, above.
2031+ warn('Patching %s' % pg_new)
2032+ bsdifftree.applyPatch(pdata, pg_new, log=warn)
2033+ _archive_patch(pf)
2034+
2035+ # 3: prepare the new db
2036+ pg_old_db = r'D:\MSF data\Unifield\PostgreSQL\data'
2037+ if not os.path.exists(pg_old_db):
2038+ raise RuntimeError('Could not find existing PostgreSQL data in %s' % pg_old_db)
2039+ pg_new_db = pg_old_db + '-new'
2040+ if os.path.exists(pg_new_db):
2041+ raise RuntimeError('New data directory %s already exists.' % pg_new_db)
2042+ pwf = tempfile.NamedTemporaryFile(delete=False)
2043+ pwf.write(tools.config.get('db_password'))
2044+ # TODO: apply same fix here for trust as in the AIO
2045+ cmd = [ os.path.join(pg_new, 'bin', 'initdb'),
2046+ '--pwfile', pwf.name,
2047+ '--data-checksums', '-A', 'md5',
2048+ '-U', tools.config.get('db_user'),
2049+ '--locale', 'English_United States',
2050+ '-E', 'UTF8', pg_new_db
2051+ ]
2052+ rc = subprocess.call(cmd, stdout=log, stderr=log)
2053+ pwf.close()
2054+ os.remove(pwf.name)
2055+ if rc != 0:
2056+ raise RuntimeError("initdb returned %d" % rc)
2057+
2058+ # modify the postgresql.conf file for best
2059+ # defaults
2060+ pgconf = os.path.join(pg_new_db, "postgresql.conf")
2061+ with open(pgconf, "a") as f:
2062+ f.write("listen_addresses = 'localhost'\n")
2063+ f.write("shared_buffers = 1024MB\n")
2064+
2065+ # 4: stop old service
2066+ subprocess.call('net stop %s' % svc, stdout=log, stderr=log)
2067+ stopped = True
2068+
2069+ # 5: pg_upgrade
2070+ run_analyze = False
2071+ cmd = [ os.path.join(pg_new, 'bin', 'pg_upgrade'),
2072+ '-b', os.path.join(pg_old, 'bin'),
2073+ '-B', os.path.join(pg_new, 'bin'),
2074+ '-d', pg_old_db, '-D', pg_new_db, '-k', '-v',
2075+ ]
2076+ rc = subprocess.call(cmd, stdout=log, stderr=log, env=env)
2077+ if rc != 0:
2078+ raise RuntimeError("pg_upgrade returned %d" % rc)
2079+
2080+ # The pg_upgrade went ok, so we are committed now. Nuke the
2081+ # old db directory and move the upgraded one into place.
2082+ warn("pg_upgrade returned %d, commiting to new version" % rc)
2083+ run_analyze = True
2084+
2085+ warn("Rename %s to %s." % (pg_new_db, pg_old_db))
2086+ # we do this with two renames since rmtree/rename sometimes
2087+ # failed (why? due to antivirus still holding files open?)
2088+ pg_old_db2 = pg_old_db + "-trash"
2089+ os.rename(pg_old_db, pg_old_db2)
2090+ os.rename(pg_new_db, pg_old_db)
2091+ shutil.rmtree(pg_old_db2)
2092+
2093+ # 6: commit to new bin dir
2094+ if oldVer == '8.4.14':
2095+ # Move pg_new to it's final name.
2096+ os.rename(pg_new, r'..\pgsql')
2097+ # For 8.4->9.9.x transition, nuke 8.4 install
2098+ warn("Removing stand-alone PostgreSQL 8.4 installation.")
2099+ cmd = [ os.path.join(pg_old, 'uninstall-postgresql.exe'),
2100+ '--mode', 'unattended',
2101+ ]
2102+ rc = subprocess.call(cmd, stdout=log, stderr=log)
2103+ if rc != 0:
2104+ warn("PostgreSQL 8.4 uninstall returned %d" % rc)
2105+ pg_old = r'..\pgsql'
2106+ else:
2107+ warn("Remove %s." % pg_old)
2108+ shutil.rmtree(pg_old)
2109+
2110+ warn("Rename %s to %s." % (pg_new, pg_old))
2111+ os.rename(pg_new, pg_old)
2112+
2113+ pgp = os.path.normpath(os.path.join(pg_old, 'bin'))
2114+ if tools.config['pg_path'] != pgp:
2115+ warn("Setting pg_path to %s." % pgp)
2116+ tools.config['pg_path'] = pgp
2117+ tools.config.save()
2118+
2119+ # 7: change service entry to the correct install location
2120+ if oldVer == '8.4.14':
2121+ cmd = [
2122+ os.path.join(pg_old, 'bin', 'pg_ctl'),
2123+ 'register', '-N', 'Postgres',
2124+ '-U', 'openpgsvc',
2125+ '-P', '0p3npgsvcPWD',
2126+ '-D', pg_old_db,
2127+ ]
2128+ rc = subprocess.call(cmd, stdout=log, stderr=log)
2129+ if rc != 0:
2130+ raise RuntimeError("pg_ctl returned %d" % rc)
2131+ svc = 'Postgres'
2132+
2133+ except Exception as e:
2134+ s = str(e) or type(e)
2135+ warn('Failed to update Postgres:', s)
2136+ finally:
2137+ try:
2138+ if pg_new_db is not None and os.path.exists(pg_new_db):
2139+ warn("Removing failed DB upgrade directory %s" % pg_new_db)
2140+ shutil.rmtree(pg_new_db)
2141+ except Exception:
2142+ # don't know what went wrong, but we must not crash here
2143+ # or else OpenERP-Server will not start.
2144+ pass
2145+ # 8. start service (either the old one or the new one)
2146+ if stopped:
2147+ warn('Starting service %s' % svc)
2148+ subprocess.call('net start %s' % svc, stdout=log, stderr=log)
2149+ if run_analyze:
2150+ cmd = [ os.path.join(r'..\pgsql', 'bin', 'vacuumdb'),
2151+ '--all', '--analyze-only' ]
2152+ subprocess.call(cmd, stdout=log, stderr=log, env=env)
2153+ return
2154+
2155+# https://stackoverflow.com/questions/51658/cross-platform-space-remaining-on-volume-using-python
2156+def get_free_space_mb(dirname):
2157+ """Return folder/drive free space (in megabytes)."""
2158+ if platform.system() == 'Windows':
2159+ free_bytes = ctypes.c_ulonglong(0)
2160+ ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(dirname), None, None, ctypes.pointer(free_bytes))
2161+ return free_bytes.value / 1024 / 1024
2162+ else:
2163+ st = os.statvfs(dirname)
2164+ return st.f_bavail * st.f_frsize / 1024 / 1024
2165+
2166+#
2167+# Unit tests follow
2168+#
2169+if __name__ == '__main__':
2170+ d = tempfile.mkdtemp()
2171+ os.chdir(d)
2172+
2173+ # no file
2174+ pf, oldVer, newVer = _find_pg_patch()
2175+ assert pf == None
2176+
2177+ # one good file
2178+ with open('pgsql-8.4.14-9.6.3-patch', 'wb') as f:
2179+ f.write('Fake patch for testing.')
2180+ pf, oldVer, newVer = _find_pg_patch()
2181+ assert oldVer == '8.4.14'
2182+ assert newVer == '9.6.3'
2183+ assert pf == 'pgsql-8.4.14-9.6.3-patch'
2184+
2185+ # two files: oops
2186+ warn("Expect 2 messages on stderr after this:")
2187+ with open('pgsql-wat-huh-patch', 'wb') as f:
2188+ f.write('Second fake patch for testing.')
2189+ pf, oldVer, newVer = _find_pg_patch()
2190+ assert pf == None
2191+
2192+ # one file with wrong version format
2193+ os.remove('pgsql-8.4.14-9.6.3-patch')
2194+ pf, oldVer, newVer = _find_pg_patch()
2195+ assert pf == None
2196+
2197+ assert _is_major('8.4.14', '9.6.3')
2198+ assert not _is_major('8.4.14', '8.4.15')
2199+ assert _is_major('9.6.9', '10.1')
2200+ assert not _is_major('10.1', '10.2')
2201+ assert _is_major('21.9', '22.1')
2202+
2203+ os.chdir('..')
2204+ shutil.rmtree(d)
2205+ assert get_free_space_mb("D:\\") != None
2206+>>>>>>> MERGE-SOURCE
2207
2208=== modified file 'setup.py'
2209--- setup.py 2017-08-04 14:42:21 +0000
2210+++ setup.py 2017-09-01 09:49:29 +0000
2211@@ -60,6 +60,7 @@
2212 "imaplib", "smtplib", "email", "yaml",
2213 "uuid", "commands", "mx.DateTime", "json",
2214 "pylzma", "xlwt", "passlib", "bcrypt", "six", "cffi",
2215+<<<<<<< TREE
2216 "psutil",
2217 ],
2218 'dist_dir': 'dist',
2219@@ -77,6 +78,24 @@
2220 'api-ms-win-core-sysinfo-l1-2-1.dll',
2221 'api-ms-win-security-activedirectoryclient-l1-1-0.dll',
2222 ],
2223+=======
2224+ ],
2225+ 'dist_dir': 'dist',
2226+ 'excludes' : ["Tkconstants","Tkinter","tcl"],
2227+ 'dll_excludes': [
2228+ 'w9xpopen.exe', 'PSAPI.dll', 'CRYPT32.dll', 'MPR.dll',
2229+ 'Secur32.dll', 'SHFOLDER.dll',
2230+ 'api-ms-win-core-delayload-l1-1-1.dll',
2231+ 'api-ms-win-core-errorhandling-l1-1-1.dll',
2232+ 'api-ms-win-core-heap-obsolete-l1-1-0.dll',
2233+ 'api-ms-win-core-libraryloader-l1-2-0.dll',
2234+ 'api-ms-win-core-processthreads-l1-1-2.dll',
2235+ 'api-ms-win-core-profile-l1-1-0.dll',
2236+ 'api-ms-win-core-string-obsolete-l1-1-0.dll',
2237+ 'api-ms-win-core-sysinfo-l1-2-1.dll',
2238+ 'api-ms-win-security-activedirectoryclient-l1-1-0.dll',
2239+ ],
2240+>>>>>>> MERGE-SOURCE
2241 }
2242 }
2243
2244@@ -226,11 +245,18 @@
2245 'reportlab==2.5',
2246 'pyyaml==3.12',
2247 'egenix-mx-base==3.2.9',
2248+<<<<<<< TREE
2249 'passlib==1.7.1',
2250 'bcrypt==3.1.3',
2251 'xlwt==1.2.0',
2252 'psutil==5.2.2',
2253 'bsdiff4==1.1.4',
2254+=======
2255+ 'passlib==1.7.1',
2256+ 'bcrypt==3.1.3',
2257+ 'xlwt==1.2.0',
2258+ 'bsdiff4==1.1.4',
2259+>>>>>>> MERGE-SOURCE
2260 ],
2261 **py2exe_keywords
2262 )

Subscribers

People subscribed via source and target branches