# -*- coding: utf-8 -*- from openerp import models, fields, api from openerp.exceptions import Warning import unicodedata import stringcase class OdooInstance(models.Model): _name = 'odoo.instance' CONTAINER_STATUS = [ ('draft', 'Por activar'), ('activated', 'Activado'), ('disapproved', 'No aprobado'), ('suspended', 'Suspendido'), ('destroyed', 'Eliminado') ] name = fields.Char(string='Nombre', size=50) normalized_name = fields.Char(string='Nombre normalizado', compute='_normalize_name', size=50) logo = fields.Binary(string='Logo') internal_ip = fields.Char(string='IP interno', size=15) internal_port = fields.Integer(string='Puerto interno') external_ip = fields.Char(string='IP externo', size=15) external_port = fields.Integer(string='Puerto externo') expose_ip = fields.Boolean(string='Exponer IP', default=True) state = fields.Selection(string='Estado', selection=CONTAINER_STATUS, default='draft') demo = fields.Boolean(string='Es un demo?', default=False) domain = fields.Char(string='Dominio', size=100) running = fields.Boolean(string='Está online?', default=False) payment_plan_id = fields.Many2one(string='Plan de pago', comodel_name='payment.plan', required=True) @api.one @api.onchange('name') def _onchange_name(self): if self.name: self.name = self.name.title() @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) @api.one def action_activate(self): if self.state not in ('draft', 'suspended'): raise Warning('No se puede activar un sistema ya activo') self.state = 'activated' @api.one def action_disapprove(self): if self.state != 'draft': raise Warning('No se puede desaprobar un sistema ya activo') self.state = 'disapproved' @api.one def action_suspend(self): if self.state != 'activated': raise Warning('No se puede suspender un sistema no activo') self.state = 'suspended' self.running = False @api.one def copy(self): raise Warning('Atención', 'No se puede duplicar una instancia. Por favor, cree uno nuevo') @api.one def action_destroy(self): if self.state == 'destroyed': raise Warning('No se puede eliminar un sistema ya eliminado') self.state = 'destroyed' self.running = False @api.one def action_start(self): if self.running: raise Warning('Atención', 'No se puede arrancar una instancia que ya está arrancada') self.running = True @api.one def action_restart(self): if not self.running: raise Warning('Atención', 'No se puede parar y arrancar una instancia que ya está parada') self.running = True @api.model def check_status(self): print('croned')