[IMP]Base_setup:Pervious values set as Default -Define default users preferences
[odoo/odoo.git] / addons / base_setup / installer.py
1 # -*- coding: utf-8 -*-
2 ##############################################################################
3 #
4 #    OpenERP, Open Source Management Solution
5 #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
6 #
7 #    This program is free software: you can redistribute it and/or modify
8 #    it under the terms of the GNU Affero General Public License as
9 #    published by the Free Software Foundation, either version 3 of the
10 #    License, or (at your option) any later version.
11 #
12 #    This program is distributed in the hope that it will be useful,
13 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 #    GNU Affero General Public License for more details.
16 #
17 #    You should have received a copy of the GNU Affero General Public License
18 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 #
20 ##############################################################################
21 from osv import fields, osv
22 import pooler
23 import pytz
24
25 class base_setup_installer(osv.osv_memory):
26     _name = 'base.setup.installer'
27     _inherit = 'res.config.installer'
28
29     _install_if = {
30         ('sale','crm'): ['sale_crm'],
31         ('sale','project'): ['project_mrp'],
32     }
33     _columns = {
34         # Generic modules
35         'crm':fields.boolean('Customer Relationship Management',
36             help="Helps you track and manage relations with customers such as"
37                  " leads, requests or issues. Can automatically send "
38                  "reminders, escalate requests or trigger business-specific "
39                  "actions based on standard events."),
40         'sale':fields.boolean('Sales Management',
41             help="Helps you handle your quotations, sale orders and invoicing"
42                  "."),
43         'project':fields.boolean('Project Management',
44             help="Helps you manage your projects and tasks by tracking them, "
45                  "generating plannings, etc..."),
46         'knowledge':fields.boolean('Knowledge Management',
47             help="Lets you install addons geared towards sharing knowledge "
48                  "with and between your employees."),
49         'stock':fields.boolean('Warehouse Management',
50             help="Helps you manage your inventory and main stock operations: delivery orders, receptions, etc."),
51         'mrp':fields.boolean('Manufacturing',
52             help="Helps you manage your manufacturing processes and generate "
53                  "reports on those processes."),
54         'account_voucher':fields.boolean('Invoicing',
55             help="Allows you to create your invoices and track the payments. It is an easier version of the accounting module for managers who are not accountants."),
56         'account_accountant':fields.boolean('Accounting & Finance',
57             help="Helps you handle your accounting needs, if you are not an accountant, we suggest you to install only the Invoicing "),
58         'purchase':fields.boolean('Purchase Management',
59             help="Helps you manage your purchase-related processes such as "
60                  "requests for quotations, supplier invoices, etc..."),
61         'hr':fields.boolean('Human Resources',
62             help="Helps you manage your human resources by encoding your employees structure, generating work sheets, tracking attendance and more."),
63         'point_of_sale':fields.boolean('Point of Sales',
64             help="Helps you get the most out of your points of sales with "
65                  "fast sale encoding, simplified payment mode encoding, "
66                  "automatic picking lists generation and more."),
67         'marketing':fields.boolean('Marketing',
68             help="Helps you manage your marketing campaigns step by step."),
69         'profile_tools':fields.boolean('Extra Tools',
70             help="Lets you install various interesting but non-essential tools "
71                 "like Survey, Lunch and Ideas box."),
72         'report_designer':fields.boolean('Advanced Reporting',
73             help="Lets you install various tools to simplify and enhance "
74                  "OpenERP's report creation."),
75         # Vertical modules
76         'product_expiry':fields.boolean('Food Industry',
77             help="Installs a preselected set of OpenERP applications "
78                 "which will help you manage your industry."),
79         'association':fields.boolean('Associations',
80             help="Installs a preselected set of OpenERP "
81                  "applications which will help you manage your association "
82                  "more efficiently."),
83         'auction':fields.boolean('Auction Houses',
84             help="Installs a preselected set of OpenERP "
85                  "applications selected to help you manage your auctions "
86                  "as well as the business processes around them."),
87         }
88
89     def _if_knowledge(self, cr, uid, ids, context=None):
90         if self.pool.get('res.users').browse(cr, uid, uid, context=context)\
91                .view == 'simple':
92             return ['document_ftp']
93         return None
94
95     def _if_misc_tools(self, cr, uid, ids, context=None):
96         return ['profile_tools']
97
98     def onchange_moduleselection(self, cr, uid, ids, *args, **kargs):
99         value = {}
100         # Calculate progress
101         closed, total = self.get_current_progress(cr, uid)
102         progress = round(100. * closed / (total + len(filter(None, args))))
103         value.update({'progress':progress})
104         if progress < 10.:
105             progress = 10.
106         
107         return {'value':value}
108     
109
110     def default_get(self, cr, uid, fields_list, context=None):
111         #Skipping default value as checked for main application, if already installed
112         return super(osv.osv_memory, self).default_get(
113             cr, uid, fields_list, context=context)
114
115     def fields_get(self, cr, uid, fields=None, context=None, write_access=True):
116         #Skipping readonly value for main application, if already installed
117         return super(osv.osv_memory, self).fields_get(
118             cr, uid, fields, context, write_access)
119
120     def execute(self, cr, uid, ids, context=None):
121         if context is None:
122              context = {}
123         module_pool = self.pool.get('ir.module.module')
124         modules_selected = []
125         datas = self.read(cr, uid, ids, context=context)[0]
126         for mod in datas.keys():
127             if mod in ('id', 'progress'):
128                 continue
129             if datas[mod] == 1:
130                 modules_selected.append(mod)
131
132         module_ids = module_pool.search(cr, uid, [('name', 'in', modules_selected)], context=context)
133         for module in module_pool.browse(cr, uid, module_ids, context=context):
134             if module.state == 'uninstalled':
135                 module_pool.state_update(cr, uid, [module.id], 'to install', ['uninstalled'], context)
136                 cr.commit()
137                 new_db, self.pool = pooler.restart_pool(cr.dbname, update_module=True)
138             elif module.state == 'installed':
139                 cr.execute("update ir_actions_todo set state='open' \
140                                     from ir_model_data as data where data.res_id = ir_actions_todo.id \
141                                     and ir_actions_todo.type='special'\
142                                     and data.model = 'ir.actions.todo' and data.module=%s", (module.name, ))
143         return
144     
145 base_setup_installer()
146
147 #Migrate data from another application Conf wiz
148
149 class migrade_application_installer_modules(osv.osv_memory):
150     _name = 'migrade.application.installer.modules'
151     _inherit = 'res.config.installer'
152     _columns = {
153         'import_saleforce': fields.boolean('Import Saleforce',
154             help="For Import Saleforce"),
155         'import_sugarcrm': fields.boolean('Import Sugarcrm',
156             help="For Import Sugarcrm"),
157         'sync_google_contact': fields.boolean('Sync Google Contact',
158             help="For Sync Google Contact"),
159         'quickbooks_ippids': fields.boolean('Quickbooks Ippids',
160             help="For Quickbooks Ippids"),
161     }
162     
163 migrade_application_installer_modules()
164
165 class product_installer(osv.osv_memory):
166     _name = 'product.installer'
167     _inherit = 'res.config'
168     _columns = {
169                 'customers': fields.selection([('create','Create'), ('import','Import')], 'Customers', size=32, required=True, help="Import or create customers"),
170
171     }
172     _defaults = {
173                  'customers': 'create',
174     }
175     
176     def execute(self, cr, uid, ids, context=None):
177         if context is None:
178              context = {}
179         data_obj = self.pool.get('ir.model.data')
180         val = self.browse(cr, uid, ids, context=context)[0]
181         if val.customers == 'create':
182             id2 = data_obj._get_id(cr, uid, 'base', 'view_partner_form')
183             if id2:
184                 id2 = data_obj.browse(cr, uid, id2, context=context).res_id
185             return {
186                     'view_type': 'form',
187                     'view_mode': 'form',
188                     'res_model': 'res.partner',
189                     'views': [(id2, 'form')],
190                     'type': 'ir.actions.act_window',
191                     'target': 'current',
192                     'nodestroy':False,
193                 }
194         if val.customers == 'import':
195             return {'type': 'ir.actions.act_window'}
196
197 product_installer()
198
199
200 #       Define default users preferences config wiz
201
202 def _lang_get(self, cr, uid, context=None):
203     obj = self.pool.get('res.lang')
204     ids = obj.search(cr, uid, [('translatable','=',True)])
205     res = obj.read(cr, uid, ids, ['code', 'name'], context=context)
206     res = [(r['code'], r['name']) for r in res]
207     return res
208
209 def _tz_get(self,cr,uid, context=None):
210     return [(x, x) for x in pytz.all_timezones]
211
212 class user_preferences_config(osv.osv_memory):
213     _name = 'user.preferences.config'
214     _inherit = 'res.config'
215     _columns = {
216         'context_tz': fields.selection(_tz_get,  'Timezone', size=64,
217             help="Set default for new user's timezone, used to perform timezone conversions "
218                  "between the server and the client."),
219         'context_lang': fields.selection(_lang_get, 'Language', required=True,
220             help="Sets default language for the  new user's user interface, when UI "
221                  "translations are available"),
222         'view': fields.selection([('simple','Simplified'),
223                                   ('extended','Extended')],
224                                  'Interface', required=True, help= "If you use OpenERP for the first time we strongly advise you to select the simplified interface, which has less features but is easier. You can always switch later from the user preferences." ),
225         'menu_tips': fields.boolean('Display Tips', help="Check out this box if you want to always display tips on each menu action"),
226                                  
227     }
228     _defaults={
229                'view' : lambda self,cr,uid,*args: self.pool.get('res.users').browse(cr, uid, uid).view or 'simple',
230                'context_lang' : 'en_US',
231                'menu_tips' : True
232     }
233     
234     def default_get(self, cr, uid, fields, context=None):
235         if context is None:
236             context = {}
237         res = super(user_preferences_config, self).default_get(cr, uid, fields, context=context)
238         res_default = self.pool.get('ir.values').get(cr, uid, 'default', False, ['res.users'])
239         for val in range(len(res_default)):
240             res.update({res_default[val][1]:res_default[val][2]})
241         return res    
242
243     def execute(self, cr, uid, ids, context=None):
244         for o in self.browse(cr, uid, ids, context=context):
245             ir_values_obj = self.pool.get('ir.values')
246             ir_values_obj.set(cr, uid, 'default', False, 'context_tz', ['res.users'], o.context_tz)
247             ir_values_obj.set(cr, uid, 'default', False, 'context_lang', ['res.users'], o.context_lang)
248             ir_values_obj.set(cr, uid, 'default', False, 'view', ['res.users'], o.view)
249             ir_values_obj.set(cr, uid, 'default', False, 'menu_tips', ['res.users'], o.menu_tips)
250         return {}
251
252 user_preferences_config()
253
254 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: