#encoding:utf-8 from django.db import models from django.core.exceptions import ValidationError from django.core.urlresolvers import reverse from datetime import date # Create your models here. class Adscripcion(models.Model): """ Estructura Orgánica del Gobierno del Estado. """ padre = models.ForeignKey('self', blank=True, null=True, verbose_name='adscrito a') nombre = models.CharField(max_length=250, unique=True, verbose_name='nombre de la Dependencia') siglas = models.CharField(max_length=50, null=True, blank=True) imagen_institucional = models.ImageField(upload_to='adscripcion', blank=True, null=True) ubicacion = models.TextField('ubicación', blank=True, null=True) activo = models.BooleanField(default=True, help_text='Indica si la dependencia está vigente o no. Desactive éste campo en lugar de eliminar dependencias.') fecha_baja = models.DateField(blank=True, null=True) usuario = models.OneToOneField('auth.User', help_text='Usuario de sistema asignado a la dependencia') def get_absolute_url(self): return reverse('adscripcion-detail', kwargs={'pk': self.pk}) def __unicode__(self): return u'%s' % self.nombre def clean(self): if not self.activo: if self.fecha_baja == None: raise ValidationError('Debe indicar la fecha de baja de la dependencia.') else: if self.fecha_baja: raise ValidationError('Si indica una fecha de baja, deberá desmarcar la casilla "Activo"') class Meta: verbose_name_plural = 'Adscripciones' ordering = ['nombre'] class Categoria(models.Model): """ Categorias de los servidores públicos. """ nombre = models.CharField(max_length=150, unique=True) def __unicode__(self): return u'%s' % self.nombre class Meta: ordering = ['nombre'] class Empresa(models.Model): """ Empresa externa al Gobierno del Estado de Tabasco """ nombre = models.CharField(max_length=250) rfc = models.CharField('RFC', max_length=13, unique=True, null=True, blank=True) ubicacion = models.TextField('ubicación', null=True, blank=True) usuario = models.OneToOneField('auth.User', help_text='Usuario de sistema asignado a la Empresa.') def __unicode__(self): return u'%s' % self.nombre def get_absolute_url(self): return reverse('empresa-detail', kwargs={'pk' : self.pk}) class Meta: ordering = ['nombre'] class Puesto(models.Model): """ Puesto para personas no funcionarios. """ nombre = models.CharField(max_length=150, unique=True) def __unicode__(self): return u'%s' % self.nombre class Meta: ordering = ['nombre'] class Titulo(models.Model): """ Titulo para referirse a una persona """ monograma = models.CharField(max_length = 50, help_text = 'Ingrese siglas de identificacion del titulo', unique=True) nombre = models.CharField(max_length = 50) def __unicode__(self): return self.monograma class Meta: ordering = ['nombre'] class Persona(models.Model): """ Clase abstracta que representa una Persona """ titulo = models.ForeignKey(Titulo) nombre = models.CharField(max_length = 50) apellido_paterno = models.CharField( max_length = 50) apellido_materno = models.CharField(max_length = 50, null=True, blank=True) domicilio = models.TextField(null=True, blank=True) usuario = models.OneToOneField('auth.User', help_text='usuario de sistema asignado a la persona.') def __unicode__(self): return u'%s %s %s' % (self.apellido_paterno, self.apellido_materno, self.nombre) class Meta: ordering = ('apellido_paterno', 'apellido_materno', 'nombre') abstract = True class Funcionario(Persona): """ docstring for Funcionario """ adscripcion = models.ForeignKey(Adscripcion, verbose_name='adscripción') categoria = models.ForeignKey(Categoria) activo = models.BooleanField(default=True) fecha_baja = models.DateField(null=True, blank=True) def get_absolute_url(self): return reverse('funcionario-detail', kwargs = {'pk' : self.pk}) def clean(self): if not self.activo: if self.fecha_baja == None: raise ValidationError('Debe inidcar la fecha de baja del funcionario.') else: if self.fecha_baja: raise ValidationError('Si indica una fecha de baja, deberá desmarcar la casilla "Activo"') class PersonaFisica(Persona): """docstring for PersonaFisica""" empresa = models.ForeignKey(Empresa, null=True, blank=True) puesto = models.ForeignKey(Puesto, null=True, blank=True) def get_absolute_url(self): return reverse('persona-detail', kwargs = {'pk' : self.pk}) class Meta: verbose_name_plural = 'Personas físicas'