~unifield-team/unifield-wm/us-826

« back to all changes in this revision

Viewing changes to order_line_number/order_line_number.py

  • Committer: jf
  • Date: 2014-03-14 16:56:51 UTC
  • mfrom: (2004.1.38 unifield-wm)
  • Revision ID: jfb@tempo-consulting.fr-20140314165651-kxeadsxm2nw4srwf
REF-37 [IMP] Improve performance on sourcing 'from stock'
lp:~qt-tempo-consulting/unifield-wm/ref_wm_qt @2042

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
 
32
32
 
33
33
class sale_order(osv.osv):
34
 
    
 
34
 
35
35
    _inherit = 'sale.order'
36
36
    _description = 'Sales Order'
37
37
    _columns = {'sequence_id': fields.many2one('ir.sequence', 'Lines Sequence', help="This field contains the information related to the numbering of the lines of this order.", required=True, ondelete='cascade'),
38
38
                }
39
 
    
 
39
 
40
40
    def create_sequence(self, cr, uid, vals, context=None):
41
41
        """
42
42
        Create new entry sequence for every new order
65
65
            'padding': 0,
66
66
        }
67
67
        return seq_pool.create(cr, uid, seq)
68
 
    
 
68
 
69
69
    def create(self, cr, uid, vals, context=None):
70
70
        '''
71
71
        create from sale_order
76
76
 
77
77
        if not context.get('keepClientOrder') or not context.get('keepDateAndDistrib') or not vals.get('sequence_id'):
78
78
            vals.update({'sequence_id': self.create_sequence(cr, uid, vals, context)})
79
 
        
 
79
 
80
80
        return super(sale_order, self).create(cr, uid, vals, context)
81
 
    
 
81
 
82
82
    def reorder_line_numbering(self, cr, uid, ids, context=None):
83
83
        '''
84
84
        test function
87
87
        tools_obj = self.pool.get('sequence.tools')
88
88
        tools_obj.reorder_sequence_number(cr, uid, 'sale.order', 'sequence_id', 'sale.order.line', 'order_id', ids, 'line_number', context=context)
89
89
        return True
90
 
    
 
90
 
91
91
    def allow_resequencing(self, cr, uid, so_browse, context=None):
92
92
        '''
93
93
        allow resequencing criteria
95
95
        if so_browse.state == 'draft' and not so_browse.client_order_ref:
96
96
            return True
97
97
        return False
98
 
    
99
 
    def _hook_ship_create_stock_move(self, cr, uid, ids, context=None, *args, **kwargs):
100
 
        '''
101
 
        Please copy this to your module's method also.
102
 
        This hook belongs to the action_ship_create method from sale>sale.py
103
 
        
104
 
        - allow to modify the data for stock move creation
105
 
        - set the line number of the Out corresponding to the one from Sale order
106
 
        '''
107
 
        move_data = super(sale_order, self)._hook_ship_create_stock_move(cr, uid, ids, context=context, *args, **kwargs)
108
 
        line = kwargs['line']
109
 
        # copy original line number
110
 
        move_data['line_number'] = line.line_number
111
 
        return move_data
112
98
 
113
99
sale_order()
114
100
 
122
108
    _columns = {'line_number': fields.integer(string='Line', required=True),
123
109
                }
124
110
    _order = 'line_number, id'
125
 
    
 
111
 
126
112
    def create(self, cr, uid, vals, context=None):
127
113
        '''
128
114
        _inherit = 'sale.order.line'
144
130
        # create the new sale order line
145
131
        result = super(sale_order_line, self).create(cr, uid, vals, context=context)
146
132
        return result
147
 
    
 
133
 
148
134
    def copy_data(self, cr, uid, id, default=None, context=None):
149
135
        '''
150
136
        if the line_number is not in the default, we set it to False
153
139
            default = {}
154
140
        if context is None:
155
141
            context = {}
156
 
        
 
142
 
157
143
        # we set line_number, so it will not be copied in copy_data - keepLineNumber - the original Line Number will be kept
158
144
        if 'line_number' not in default and not context.get('keepLineNumber', False):
159
145
            default.update({'line_number': False})
160
146
        return super(sale_order_line, self).copy_data(cr, uid, id, default, context=context)
161
 
    
 
147
 
162
148
    def unlink(self, cr, uid, ids, context=None):
163
149
        '''
164
150
        check the numbering on deletion
168
154
            context = {}
169
155
        if isinstance(ids, (int, long)):
170
156
            ids = [ids]
171
 
            
 
157
 
172
158
        # objects
173
159
        tools_obj = self.pool.get('sequence.tools')
174
 
        
 
160
 
175
161
        if not context.get('skipResequencing', False):
176
 
            # re sequencing only happen if field order is draft and not synchronized (PUSH flow) (behavior 1) 
 
162
            # re sequencing only happen if field order is draft and not synchronized (PUSH flow) (behavior 1)
177
163
            draft_not_synchronized_ids = self.allow_resequencing(cr, uid, ids, context=context)
178
164
            tools_obj.reorder_sequence_number_from_unlink(cr, uid, draft_not_synchronized_ids, 'sale.order', 'sequence_id', 'sale.order.line', 'order_id', 'line_number', context=context)
179
 
        
 
165
 
180
166
        return super(sale_order_line, self).unlink(cr, uid, ids, context=context)
181
 
    
 
167
 
182
168
    def allow_resequencing(self, cr, uid, ids, context=None):
183
169
        '''
184
170
        define if a resequencing has to be performed or not
185
 
        
 
171
 
186
172
        return the list of ids for which resequencing will can be performed
187
 
        
 
173
 
188
174
        linked to Fo + Fo draft + Fo not sync
189
175
        '''
190
176
        # objects
191
177
        so_obj = self.pool.get('sale.order')
192
 
        
 
178
 
193
179
        resequencing_ids = [x.id for x in self.browse(cr, uid, ids, context=context) if x.order_id and so_obj.allow_resequencing(cr, uid, x.order_id, context=context)]
194
180
        return resequencing_ids
195
 
            
 
181
 
196
182
sale_order_line()
197
183
 
198
184
 
199
185
class purchase_order(osv.osv):
200
 
    
 
186
 
201
187
    _inherit = 'purchase.order'
202
188
    _description = 'Purchase Order'
203
189
    _columns = {'sequence_id': fields.many2one('ir.sequence', 'Lines Sequence', help="This field contains the information related to the numbering of the lines of this order.", required=True, ondelete='cascade'),
204
190
                }
205
 
    
 
191
 
206
192
    def create_sequence(self, cr, uid, vals, context=None):
207
193
        """
208
194
        Create new entry sequence for every new order
231
217
            'padding': 0,
232
218
        }
233
219
        return seq_pool.create(cr, uid, seq)
234
 
    
 
220
 
235
221
    def create(self, cr, uid, vals, context=None):
236
222
        '''
237
223
        create from purchase_order
238
224
        create the sequence for the numbering of the lines
239
225
        '''
240
226
        vals.update({'sequence_id': self.create_sequence(cr, uid, vals, context)})
241
 
        
 
227
 
242
228
        return super(purchase_order, self).create(cr, uid, vals, context)
243
 
    
 
229
 
244
230
    def reorder_line_numbering(self, cr, uid, ids, context=None):
245
231
        '''
246
232
        test function
249
235
        tools_obj = self.pool.get('sequence.tools')
250
236
        tools_obj.reorder_sequence_number(cr, uid, 'purchase.order', 'sequence_id', 'purchase.order.line', 'order_id', ids, 'line_number', context=context)
251
237
        return True
252
 
    
 
238
 
253
239
    def allow_resequencing(self, cr, uid, po_browse, context=None):
254
240
        '''
255
241
        allow resequencing criteria
279
265
        # objects
280
266
        po_obj = self.pool.get('purchase.order')
281
267
        seq_pool = self.pool.get('ir.sequence')
282
 
        
 
268
 
283
269
        # I leave this line from QT related to purchase.order.merged.line for compatibility and safety reasons
284
270
        # merged lines, set the line_number to 0 when calling create function
285
271
        # the following line should *logically* be removed safely
293
279
                    sequence_id = po_obj.read(cr, uid, [vals['order_id']], ['sequence_id'], context=context)[0]['sequence_id'][0]
294
280
                    line = seq_pool.get_id(cr, uid, sequence_id, code_or_id='id', context=context)
295
281
                    vals.update({'line_number': line})
296
 
        
 
282
 
297
283
        # create the new sale order line
298
284
        result = super(purchase_order_line, self).create(cr, uid, vals, context=context)
299
285
        return result
300
 
    
 
286
 
301
287
    def copy_data(self, cr, uid, id, default=None, context=None):
302
288
        '''
303
289
        if the line_number is not in the default, we set it to False
306
292
            default = {}
307
293
        if context is None:
308
294
            context = {}
309
 
        
 
295
 
310
296
        # we set line_number, so it will not be copied in copy_data - keepLineNumber - the original Line Number will be kept
311
297
        if 'line_number' not in default and not context.get('keepLineNumber', False):
312
298
            default.update({'line_number': False})
313
299
        return super(purchase_order_line, self).copy_data(cr, uid, id, default, context=context)
314
 
    
 
300
 
315
301
    def unlink(self, cr, uid, ids, context=None):
316
302
        '''
317
303
        check the numbering on deletion
321
307
            context = {}
322
308
        if isinstance(ids, (int, long)):
323
309
            ids = [ids]
324
 
            
 
310
 
325
311
        # objects
326
312
        tools_obj = self.pool.get('sequence.tools')
327
 
        
 
313
 
328
314
        if not context.get('skipResequencing', False):
329
 
            # re sequencing only happen if purchase order is draft (behavior 1) 
 
315
            # re sequencing only happen if purchase order is draft (behavior 1)
330
316
            # get ids with corresponding po at draft state
331
317
            draft_ids = self.allow_resequencing(cr, uid, ids, context=context)
332
318
            tools_obj.reorder_sequence_number_from_unlink(cr, uid, draft_ids, 'purchase.order', 'sequence_id', 'purchase.order.line', 'order_id', 'line_number', context=context)
333
 
        
 
319
 
334
320
        return super(purchase_order_line, self).unlink(cr, uid, ids, context=context)
335
 
    
 
321
 
336
322
    def allow_resequencing(self, cr, uid, ids, context=None):
337
323
        '''
338
324
        define if a resequencing has to be performed or not
339
 
        
 
325
 
340
326
        return the list of ids for which resequencing will can be performed
341
 
        
 
327
 
342
328
        linked to Po + Po allows resequencing
343
329
        '''
344
330
        # objects
345
331
        po_obj = self.pool.get('purchase.order')
346
 
        
 
332
 
347
333
        resequencing_ids = [x.id for x in self.browse(cr, uid, ids, context=context) if x.order_id and po_obj.allow_resequencing(cr, uid, x.order_id, context=context)]
348
334
        return resequencing_ids
349
 
            
 
335
 
350
336
purchase_order_line()
351
337
 
352
338
 
360
346
        '''
361
347
        Please copy this to your module's method also.
362
348
        This hook belongs to the make_po method from purchase>purchase.py>procurement_order
363
 
        
 
349
 
364
350
        - allow to modify the data for purchase order line creation
365
351
        '''
366
352
        if isinstance(ids, (int, long)):
367
353
            ids = [ids]
368
 
        
 
354
 
369
355
        # objects
370
356
        po_obj = self.pool.get('purchase.order')
371
357
        procurement = kwargs['procurement']
372
 
        
 
358
 
373
359
        line = super(procurement_order, self).po_line_values_hook(cr, uid, ids, context=context, *args, **kwargs)
374
360
        # if we are updating the sale order from the corresponding on order purchase order
375
361
        # the purchase order to merge the new line to is locked and provided in the procurement
379
365
            if not po_obj.allow_resequencing(cr, uid, procurement.so_back_update_dest_po_id_procurement_order, context=context):
380
366
                line.update({'line_number': procurement.so_back_update_dest_pol_id_procurement_order.line_number})
381
367
        return line
382
 
    
 
368
 
383
369
procurement_order()
384
370
 
385
371
 
386
372
class supplier_catalogue(osv.osv):
387
 
    
 
373
 
388
374
    _inherit = 'supplier.catalogue'
389
375
    _description = 'Supplier catalogue'
390
376
    _columns = {'sequence_id': fields.many2one('ir.sequence', 'Lines Sequence', help="This field contains the information related to the numbering of the lines of this order.", required=True, ondelete='cascade'),
391
377
                }
392
 
    
 
378
 
393
379
    def create_sequence(self, cr, uid, vals, context=None):
394
380
        """
395
381
        Create new entry sequence for every new order
418
404
            'padding': 0,
419
405
        }
420
406
        return seq_pool.create(cr, uid, seq)
421
 
    
 
407
 
422
408
    def create(self, cr, uid, vals, context=None):
423
409
        '''
424
410
        create from purchase_order
425
411
        create the sequence for the numbering of the lines
426
412
        '''
427
413
        vals.update({'sequence_id': self.create_sequence(cr, uid, vals, context)})
428
 
        
 
414
 
429
415
        return super(supplier_catalogue, self).create(cr, uid, vals, context)
430
416
 
431
417
supplier_catalogue()
445
431
    def create(self, cr, uid, vals, context=None):
446
432
        '''
447
433
        _inherit = 'supplier.catalogue.line'
448
 
        
 
434
 
449
435
        add the corresponding line number
450
436
        '''
451
437
        if self._name != 'supplier.catalogue.merged.line':
454
440
            sequence = order.sequence_id
455
441
            line = sequence.get_id(code_or_id='id', context=context)
456
442
            vals.update({'line_number': line})
457
 
        
 
443
 
458
444
        # create the new sale order line
459
445
        result = super(supplier_catalogue_line, self).create(cr, uid, vals, context=context)
460
 
        
 
446
 
461
447
        return result
462
448
 
463
449
supplier_catalogue_line()
519
505
        if s and '%(instance)s' in s:
520
506
            data['instance'] = self._get_instance(cr, uid)
521
507
        if s and '%(hqcode)s' in s:
522
 
            data['hqcode'] =  self._get_hqcode(cr, uid)
 
508
            data['hqcode'] = self._get_hqcode(cr, uid)
523
509
        if s and '%(instance_code)s' in s:
524
510
            data['instance_code'] = self._get_instance_code(cr, uid)
525
 
        
 
511
 
526
512
        return (s or '') % data
527
513
ir_sequence()
528
514