200 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Python
		
	
	
| # -*- coding: utf-8 -*-
 | |
| # License AGPL-3
 | |
| from odoo import api, fields, models
 | |
| 
 | |
| GMAPS_LANG_LOCALIZATION = [
 | |
|     ('ar', 'Arabic'),
 | |
|     ('bg', 'Bulgarian'),
 | |
|     ('bn', 'Bengali'),
 | |
|     ('ca', 'Catalan'),
 | |
|     ('cs', 'Czech'),
 | |
|     ('da', 'Danish'),
 | |
|     ('de', 'German'),
 | |
|     ('el', 'Greek'),
 | |
|     ('en', 'English'),
 | |
|     ('en-AU', 'English (Australian)'),
 | |
|     ('en-GB', 'English (Great Britain)'),
 | |
|     ('es', 'Spanish'),
 | |
|     ('eu', 'Basque'),
 | |
|     ('eu', 'Basque'),
 | |
|     ('fa', 'Farsi'),
 | |
|     ('fi', 'Finnish'),
 | |
|     ('fil', 'Filipino'),
 | |
|     ('fr', 'French'),
 | |
|     ('gl', 'Galician'),
 | |
|     ('gu', 'Gujarati'),
 | |
|     ('hi', 'Hindi'),
 | |
|     ('hr', 'Croatian'),
 | |
|     ('hu', 'Hungarian'),
 | |
|     ('id', 'Indonesian'),
 | |
|     ('it', 'Italian'),
 | |
|     ('iw', 'Hebrew'),
 | |
|     ('ja', 'Japanese'),
 | |
|     ('kn', 'Kannada'),
 | |
|     ('ko', 'Korean'),
 | |
|     ('lt', 'Lithuanian'),
 | |
|     ('lv', 'Latvian'),
 | |
|     ('ml', 'Malayalam'),
 | |
|     ('mr', 'Marathi'),
 | |
|     ('nl', 'Dutch'),
 | |
|     ('no', 'Norwegian'),
 | |
|     ('pl', 'Polish'),
 | |
|     ('pt', 'Portuguese'),
 | |
|     ('pt-BR', 'Portuguese (Brazil)'),
 | |
|     ('pt-PT', 'Portuguese (Portugal)'),
 | |
|     ('ro', 'Romanian'),
 | |
|     ('ru', 'Russian'),
 | |
|     ('sk', 'Slovak'),
 | |
|     ('sl', 'Slovenian'),
 | |
|     ('sr', 'Serbian'),
 | |
|     ('sv', 'Swedish'),
 | |
|     ('ta', 'Tamil'),
 | |
|     ('te', 'Telugu'),
 | |
|     ('th', 'Thai'),
 | |
|     ('tl', 'Tagalog'),
 | |
|     ('tr', 'Turkish'),
 | |
|     ('uk', 'Ukrainian'),
 | |
|     ('vi', 'Vietnamese'),
 | |
|     ('zh-CN', 'Chinese (Simplified)'),
 | |
|     ('zh-TW', 'Chinese (Traditional)'),
 | |
| ]
 | |
| 
 | |
| 
 | |
| class ResConfigSettings(models.TransientModel):
 | |
|     _inherit = 'res.config.settings'
 | |
| 
 | |
|     @api.model
 | |
|     def get_region_selection(self):
 | |
|         country_ids = self.env['res.country'].search([])
 | |
|         values = [(country.code, country.name) for country in country_ids]
 | |
|         return values
 | |
| 
 | |
|     google_maps_view_api_key = fields.Char(string='Google Maps View Api Key')
 | |
|     google_maps_lang_localization = fields.Selection(
 | |
|         selection=GMAPS_LANG_LOCALIZATION,
 | |
|         string='Google Maps Language Localization')
 | |
|     google_maps_region_localization = fields.Selection(
 | |
|         selection=get_region_selection,
 | |
|         string='Google Maps Region Localization')
 | |
|     google_maps_theme = fields.Selection(
 | |
|         selection=[('default', 'Default'),
 | |
|                    ('aubergine', 'Aubergine'),
 | |
|                    ('night', 'Night'),
 | |
|                    ('dark', 'Dark'),
 | |
|                    ('retro', 'Retro'),
 | |
|                    ('silver', 'Silver')],
 | |
|         string='Map theme')
 | |
|     google_maps_places = fields.Boolean(string='Places', default=True)
 | |
|     google_maps_geometry = fields.Boolean(string='Geometry', default=True)
 | |
| 
 | |
|     @api.onchange('google_maps_lang_localization')
 | |
|     def onchange_lang_localization(self):
 | |
|         if not self.google_maps_lang_localization:
 | |
|             self.google_maps_region_localization = ''
 | |
| 
 | |
|     @api.multi
 | |
|     def set_values(self):
 | |
|         super(ResConfigSettings, self).set_values()
 | |
|         ICPSudo = self.env['ir.config_parameter'].sudo()
 | |
|         lang_localization = self._set_google_maps_lang_localization()
 | |
|         region_localization = self._set_google_maps_region_localization()
 | |
| 
 | |
|         lib_places = self._set_google_maps_places()
 | |
|         lib_geometry = self._set_google_maps_geometry()
 | |
| 
 | |
|         active_libraries = '%s,%s' % (lib_geometry, lib_places)
 | |
| 
 | |
|         ICPSudo.set_param('google.api_key_geocode',
 | |
|                           self.google_maps_view_api_key)
 | |
|         ICPSudo.set_param('google.lang_localization',
 | |
|                           lang_localization)
 | |
|         ICPSudo.set_param('google.region_localization',
 | |
|                           region_localization)
 | |
|         ICPSudo.set_param('google.maps_theme', self.google_maps_theme)
 | |
|         ICPSudo.set_param('google.maps_libraries', active_libraries)
 | |
| 
 | |
|     @api.model
 | |
|     def get_values(self):
 | |
|         res = super(ResConfigSettings, self).get_values()
 | |
|         ICPSudo = self.env['ir.config_parameter'].sudo()
 | |
| 
 | |
|         lang_localization = self._get_google_maps_lang_localization()
 | |
|         region_localization = self._get_google_maps_region_localization()
 | |
|         
 | |
|         lib_places = self._get_google_maps_places()
 | |
|         lib_geometry = self._get_google_maps_geometry()
 | |
| 
 | |
|         res.update({
 | |
|             'google_maps_view_api_key': ICPSudo.get_param(
 | |
|                 'google.api_key_geocode', default=''),
 | |
|             'google_maps_lang_localization': lang_localization,
 | |
|             'google_maps_region_localization': region_localization,
 | |
|             'google_maps_theme': ICPSudo.get_param(
 | |
|                 'google.maps_theme', default='default'),
 | |
|             'google_maps_places': lib_places,
 | |
|             'google_maps_geometry': lib_geometry
 | |
|         })
 | |
|         return res
 | |
| 
 | |
|     @api.multi
 | |
|     def _set_google_maps_lang_localization(self):
 | |
|         if self.google_maps_lang_localization:
 | |
|             lang_localization = '&language=%s' % \
 | |
|                                 self.google_maps_lang_localization
 | |
|         else:
 | |
|             lang_localization = ''
 | |
| 
 | |
|         return lang_localization
 | |
| 
 | |
|     @api.model
 | |
|     def _get_google_maps_lang_localization(self):
 | |
|         ICPSudo = self.env['ir.config_parameter'].sudo()
 | |
|         google_maps_lang = ICPSudo.get_param(
 | |
|             'google.lang_localization', default='')
 | |
|         val = google_maps_lang.split('=')
 | |
|         lang = val and val[-1] or ''
 | |
|         return lang
 | |
| 
 | |
|     @api.multi
 | |
|     def _set_google_maps_region_localization(self):
 | |
|         if self.google_maps_region_localization:
 | |
|             region_localization = '®ion=%s' % \
 | |
|                                   self.google_maps_region_localization
 | |
|         else:
 | |
|             region_localization = ''
 | |
| 
 | |
|         return region_localization
 | |
| 
 | |
|     @api.model
 | |
|     def _get_google_maps_region_localization(self):
 | |
|         ICPSudo = self.env['ir.config_parameter'].sudo()
 | |
|         google_maps_region = ICPSudo.get_param(
 | |
|             'google.region_localization', default='')
 | |
|         val = google_maps_region.split('=')
 | |
|         region = val and val[-1] or ''
 | |
|         return region
 | |
| 
 | |
|     @api.model
 | |
|     def _get_google_maps_geometry(self):
 | |
|         ICPSudo = self.env['ir.config_parameter'].sudo()
 | |
|         google_maps_libraries = ICPSudo.get_param(
 | |
|             'google.maps_libraries', default='')
 | |
|         libraries = google_maps_libraries.split(',')
 | |
|         return 'geometry' in libraries
 | |
| 
 | |
|     @api.multi
 | |
|     def _set_google_maps_geometry(self):
 | |
|         return 'geometry' if self.google_maps_geometry else ''
 | |
| 
 | |
|     @api.model
 | |
|     def _get_google_maps_places(self):
 | |
|         ICPSudo = self.env['ir.config_parameter'].sudo()
 | |
|         google_maps_libraries = ICPSudo.get_param(
 | |
|             'google.maps_libraries', default='')
 | |
|         libraries = google_maps_libraries.split(',')
 | |
|         return 'places' in libraries
 | |
| 
 | |
|     @api.multi
 | |
|     def _set_google_maps_places(self):
 | |
|         return 'places' if self.google_maps_places else ''
 |