1 # -*- coding: utf-8 -*-
2 ##############################################################################
4 # OpenERP, Open Source Management Solution
5 # Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
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.
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.
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/>.
20 ##############################################################################
21 from osv import fields, osv
25 class base_setup_installer(osv.osv_memory):
26 _name = 'base.setup.installer'
27 _inherit = 'res.config.installer'
30 ('sale','crm'): ['sale_crm'],
31 ('sale','project'): ['project_mrp'],
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"
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."),
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 "
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."),
89 def _if_knowledge(self, cr, uid, ids, context=None):
90 if self.pool.get('res.users').browse(cr, uid, uid, context=context)\
92 return ['document_ftp']
95 def _if_misc_tools(self, cr, uid, ids, context=None):
96 return ['profile_tools']
98 def onchange_moduleselection(self, cr, uid, ids, *args, **kargs):
101 closed, total = self.get_current_progress(cr, uid)
102 progress = round(100. * closed / (total + len(filter(None, args))))
103 value.update({'progress':progress})
107 return {'value':value}
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)
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)
120 def execute(self, cr, uid, ids, context=None):
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'):
130 modules_selected.append(mod)
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)
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, ))
145 base_setup_installer()
147 #Migrate data from another application Conf wiz
149 class migrade_application_installer_modules(osv.osv_memory):
150 _name = 'migrade.application.installer.modules'
151 _inherit = 'res.config.installer'
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"),
163 migrade_application_installer_modules()
165 class product_installer(osv.osv_memory):
166 _name = 'product.installer'
167 _inherit = 'res.config'
169 'customers': fields.selection([('create','Create'), ('import','Import')], 'Customers', size=32, required=True, help="Import or create customers"),
173 'customers': 'create',
176 def execute(self, cr, uid, ids, context=None):
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')
184 id2 = data_obj.browse(cr, uid, id2, context=context).res_id
188 'res_model': 'res.partner',
189 'views': [(id2, 'form')],
190 'type': 'ir.actions.act_window',
194 if val.customers == 'import':
195 return {'type': 'ir.actions.act_window'}
200 # Define default users preferences config wiz
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]
209 def _tz_get(self,cr,uid, context=None):
210 return [(x, x) for x in pytz.all_timezones]
212 class user_preferences_config(osv.osv_memory):
213 _name = 'user.preferences.config'
214 _inherit = 'res.config'
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"),
229 'view' : lambda self,cr,uid,*args: self.pool.get('res.users').browse(cr, uid, uid).view or 'simple',
230 'context_lang' : 'en_US',
234 def default_get(self, cr, uid, fields, context=None):
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]})
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)
252 user_preferences_config()
254 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: