|
@@ -1,8 +1,7 @@
|
|
|
# -*- coding: utf-8 -*-
|
|
|
from openerp import models, fields, api
|
|
|
from openerp.exceptions import Warning
|
|
|
-import unicodedata
|
|
|
-import stringcase
|
|
|
+from ..utils import odoo_api
|
|
|
|
|
|
|
|
|
class OdooInstance(models.Model):
|
|
@@ -39,27 +38,78 @@ class OdooInstance(models.Model):
|
|
|
@api.one
|
|
|
@api.depends('name')
|
|
|
def _normalize_name(self):
|
|
|
- name = None
|
|
|
-
|
|
|
- try:
|
|
|
- name = unicodedata.normalize('NFKD', self.name)
|
|
|
- name = name.encode('ASCII', 'ignore')
|
|
|
- except TypeError:
|
|
|
- pass
|
|
|
-
|
|
|
- if not name:
|
|
|
- return
|
|
|
-
|
|
|
- name = stringcase.trimcase(name)
|
|
|
- name = stringcase.lowercase(name)
|
|
|
-
|
|
|
- self.normalized_name = stringcase.snakecase(name)
|
|
|
+ self.normalized_name = odoo_api.snakeize_name(self.name)
|
|
|
|
|
|
@api.one
|
|
|
def action_activate(self):
|
|
|
if self.state not in ('draft', 'suspended'):
|
|
|
raise Warning('No se puede activar un sistema ya activo')
|
|
|
|
|
|
+ # 1. Check name
|
|
|
+ name_is_available = odoo_api.check_name_availability(self.normalized_name)
|
|
|
+
|
|
|
+ if not name_is_available:
|
|
|
+ raise Warning('El nombre ya está siendo usado por otro sistema')
|
|
|
+
|
|
|
+ # 2. Get a port
|
|
|
+ port_to_use = odoo_api.randomize_port()
|
|
|
+
|
|
|
+ # 3. Create dirs
|
|
|
+ make_ok = odoo_api.make_default_dirs(self.normalized_name)
|
|
|
+
|
|
|
+ if not make_ok:
|
|
|
+ raise Warning('No se pudo crear la estructura de directorios')
|
|
|
+
|
|
|
+ # 4. Create configuration file
|
|
|
+ config_ok = odoo_api.make_config_file(self.normalized_name)
|
|
|
+
|
|
|
+ if not config_ok:
|
|
|
+ raise Warning('No se pudo crear el archivo de configuración')
|
|
|
+
|
|
|
+ # 5. Create database
|
|
|
+ db_ok = odoo_api.create_database(self.normalized_name)
|
|
|
+
|
|
|
+ if not db_ok:
|
|
|
+ raise Warning('No se pudo crear la base de datos')
|
|
|
+
|
|
|
+ # 6. Copy database seed
|
|
|
+ seed_copied = odoo_api.copy_database_seed()
|
|
|
+
|
|
|
+ if not seed_copied:
|
|
|
+ raise Warning('No se pudo copiar la estructura inicial de la base de datos')
|
|
|
+
|
|
|
+ # 7. Restore database schema
|
|
|
+ restored = odoo_api.restore_database(self.normalized_name)
|
|
|
+
|
|
|
+ if not restored:
|
|
|
+ raise Warning('No se pudo reestablecer la copia de base de datos')
|
|
|
+
|
|
|
+ # 8. Remove database seed
|
|
|
+ seed_removed = odoo_api.remove_database_seed()
|
|
|
+
|
|
|
+ if not seed_removed:
|
|
|
+ raise Warning('No se pudo remover la copia de base de datos')
|
|
|
+
|
|
|
+ # 9. Create odoo container
|
|
|
+ odoo_created = odoo_api.create_container(self.normalized_name, [port_to_use])
|
|
|
+
|
|
|
+ if not odoo_created:
|
|
|
+ raise Warning('No se pudo crear el contenedor')
|
|
|
+
|
|
|
+ # 10. Apply permissions
|
|
|
+ permissions_applied = odoo_api.apply_permissions(self.normalized_name)
|
|
|
+
|
|
|
+ if not permissions_applied:
|
|
|
+ raise Warning('No se pudo aplicar los permisos correspondientes')
|
|
|
+
|
|
|
+ # 11. Get internal ip
|
|
|
+ internal_ip = odoo_api.get_internal_ip(self.normalized_name)
|
|
|
+
|
|
|
+ # 12. Send email
|
|
|
+ # TODO
|
|
|
+
|
|
|
+ print(internal_ip)
|
|
|
+
|
|
|
self.state = 'activated'
|
|
|
|
|
|
@api.one
|