odoo_instance.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. # -*- coding: utf-8 -*-
  2. from openerp import models, fields, api
  3. from openerp.exceptions import Warning
  4. import unicodedata
  5. import stringcase
  6. class OdooInstance(models.Model):
  7. _name = 'odoo.instance'
  8. CONTAINER_STATUS = [
  9. ('draft', 'Por activar'),
  10. ('activated', 'Activado'),
  11. ('disapproved', 'No aprobado'),
  12. ('suspended', 'Suspendido'),
  13. ('destroyed', 'Eliminado')
  14. ]
  15. name = fields.Char(string='Nombre', size=50)
  16. normalized_name = fields.Char(string='Nombre normalizado', compute='_normalize_name', size=50)
  17. logo = fields.Binary(string='Logo')
  18. internal_ip = fields.Char(string='IP interno', size=15)
  19. internal_port = fields.Integer(string='Puerto interno')
  20. external_ip = fields.Char(string='IP externo', size=15)
  21. external_port = fields.Integer(string='Puerto externo')
  22. expose_ip = fields.Boolean(string='Exponer IP', default=True)
  23. state = fields.Selection(string='Estado', selection=CONTAINER_STATUS, default='draft')
  24. demo = fields.Boolean(string='Es un demo?', default=False)
  25. domain = fields.Char(string='Dominio', size=100)
  26. running = fields.Boolean(string='Está online?', default=False)
  27. payment_plan_id = fields.Many2one(string='Plan de pago', comodel_name='payment.plan', required=True)
  28. @api.one
  29. @api.onchange('name')
  30. def _onchange_name(self):
  31. if self.name:
  32. self.name = self.name.title()
  33. @api.one
  34. @api.depends('name')
  35. def _normalize_name(self):
  36. name = None
  37. try:
  38. name = unicodedata.normalize('NFKD', self.name)
  39. name = name.encode('ASCII', 'ignore')
  40. except TypeError:
  41. pass
  42. if not name:
  43. return
  44. name = stringcase.trimcase(name)
  45. name = stringcase.lowercase(name)
  46. self.normalized_name = stringcase.snakecase(name)
  47. @api.one
  48. def action_activate(self):
  49. if self.state not in ('draft', 'suspended'):
  50. raise Warning('No se puede activar un sistema ya activo')
  51. self.state = 'activated'
  52. @api.one
  53. def action_disapprove(self):
  54. if self.state != 'draft':
  55. raise Warning('No se puede desaprobar un sistema ya activo')
  56. self.state = 'disapproved'
  57. @api.one
  58. def action_suspend(self):
  59. if self.state != 'activated':
  60. raise Warning('No se puede suspender un sistema no activo')
  61. self.state = 'suspended'
  62. self.running = False
  63. @api.one
  64. def copy(self):
  65. raise Warning('Atención', 'No se puede duplicar una instancia. Por favor, cree uno nuevo')
  66. @api.one
  67. def action_destroy(self):
  68. if self.state == 'destroyed':
  69. raise Warning('No se puede eliminar un sistema ya eliminado')
  70. self.state = 'destroyed'
  71. self.running = False
  72. @api.one
  73. def action_start(self):
  74. if self.running:
  75. raise Warning('Atención', 'No se puede arrancar una instancia que ya está arrancada')
  76. self.running = True
  77. @api.one
  78. def action_restart(self):
  79. if not self.running:
  80. raise Warning('Atención', 'No se puede parar y arrancar una instancia que ya está parada')
  81. self.running = True
  82. @api.model
  83. def check_status(self):
  84. print('croned')