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

« back to all changes in this revision

Viewing changes to specific_locations/specific_locations.py

  • Committer: jf
  • Date: 2011-03-25 10:24:33 UTC
  • Revision ID: jf@tempo4-20110325102433-6sffw5hsj00pom90
[IMP] Added msf module list

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# -*- coding: utf-8 -*-
2
 
##############################################################################
3
 
#
4
 
#    Copyright (C) 2011 MSF, TeMPO Consulting
5
 
#
6
 
#    This program is free software: you can redistribute it and/or modify
7
 
#    it under the terms of the GNU Affero General Public License as
8
 
#    published by the Free Software Foundation, either version 3 of the
9
 
#    License, or (at your option) any later version.
10
 
#
11
 
#    This program is distributed in the hope that it will be useful,
12
 
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 
#    GNU Affero General Public License for more details.
15
 
#
16
 
#    You should have received a copy of the GNU Affero General Public License
17
 
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
 
#
19
 
##############################################################################
20
 
 
21
 
from osv import osv, fields
22
 
from tools.translate import _
23
 
 
24
 
class stock_location(osv.osv):
25
 
    '''
26
 
    override stock location to add:
27
 
    - quarantine location (checkbox - boolean)
28
 
    - destruction location (checkbox - boolean)
29
 
    - location category (selection)
30
 
    '''
31
 
    _inherit = 'stock.location'
32
 
    
33
 
    def remove_flag(self, flag, list):
34
 
        '''
35
 
        if we do not remove the flag, we fall into an infinite loop
36
 
        '''
37
 
        i = 0
38
 
        to_del = []
39
 
        for arg in list:
40
 
            if arg[0] == flag:
41
 
                to_del.append(i)
42
 
            i+=1
43
 
        for i in to_del:
44
 
            list.pop(i)
45
 
        
46
 
        return True
47
 
    
48
 
    def search_check_quarantine(self, cr, uid, obj, name, args, context=None):
49
 
        '''
50
 
        modify the query to take the type of stock move into account
51
 
        
52
 
        if type is 'out', quarantine_location must be False
53
 
        '''
54
 
        move_obj = self.pool.get('stock.move')
55
 
        move_id = context.get('move_id', False)
56
 
        
57
 
        # remove flag avoid infinite loop
58
 
        self.remove_flag('check_quarantine', args)
59
 
            
60
 
        if not move_id:
61
 
            return args
62
 
        
63
 
        # check the move
64
 
        move = move_obj.browse(cr, uid, move_id, context=context)
65
 
 
66
 
        if move.type == 'out':
67
 
            # out -> not from quarantine
68
 
            args.append(('quarantine_location', '=', False))
69
 
            
70
 
        return args
71
 
    
72
 
    def _get_false(self, cr, uid, ids, field_name, arg, context=None):
73
 
        '''
74
 
        return false for each id
75
 
        '''
76
 
        if isinstance(ids,(long, int)):
77
 
           ids = [ids]
78
 
        
79
 
        result = {}
80
 
        for id in ids:
81
 
          result[id] = False
82
 
        return result
83
 
    
84
 
    _columns = {'quarantine_location': fields.boolean(string='Quarantine Location'),
85
 
                'destruction_location': fields.boolean(string='Destruction Loction'),
86
 
                'location_category': fields.selection([('stock', 'Stock'),
87
 
                                                       ('consumption_unit', 'Consumption Unit'),
88
 
                                                       ('transition', 'Transition'),
89
 
                                                       ('other', 'Other'),], string='Location Category', required=True),
90
 
                # could be used after discussion with Magali
91
 
                #'check_quarantine': fields.function(_get_false, fnct_search=search_check_quarantine, string='Check Quarantine', type="boolean", readonly=True, method=True),
92
 
                }
93
 
    _defaults = { 
94
 
       'location_category': 'stock',
95
 
    }
96
 
 
97
 
stock_location()
98
 
 
99
 
 
100
 
class procurement_order(osv.osv):
101
 
    _inherit = 'procurement.order'
102
 
 
103
 
    def _do_create_proc_hook(self, cr, uid, ids, context=None, *args, **kwargs):
104
 
        '''
105
 
        hook to update defaults data
106
 
        '''
107
 
        # call super
108
 
        values = super(procurement_order, self)._do_create_proc_hook(cr, uid, ids, context=context, *args, **kwargs)
109
 
        # as location, we take the input of the warehouse
110
 
        op = kwargs.get('op', False)
111
 
        assert op, 'missing op'
112
 
        # update location value
113
 
        values.update(location_id=op.warehouse_id.lot_input_id.id)
114
 
        
115
 
        return values
116
 
 
117
 
procurement_order()