#encoding:utf-8
from django.db import models
from dependencias.models import *
from datetime import datetime
# Create your models here.
class bitacora(models.Model):
fecha_registro = models.DateTimeField('fecha registro', help_text = 'fecha de registro del elemento', auto_now_add = True, )
fecha_ultimo_cambio = models.DateTimeField('fecha del ultimo cambio', help_text = 'fecha de la ultima modificación registrada', auto_now = True, )
activo = models.BooleanField('activo', help_text = 'estado del registro', default = True, )
usuario = models.ForeignKey( User )
class Meta:
abstract = True
class catalogo(bitacora):
clave = models.CharField('clave', max_length=10, help_text = 'Clave de identificación', blank = True, )
nombre = models.CharField('nombre', max_length=150, help_text = 'nombre del elemento', )
descripcion = models.CharField('descripción', max_length=100, help_text = 'descripción breve del elemento', blank = True, )
class Meta:
abstract = True
ordering = ['clave', 'nombre']
def __unicode__(self):
return u'%s - %s' % (self.clave, self.nombre, )
class proyectos(catalogo):
class Meta:
verbose_name = 'Proyectos'
verbose_name_plural = 'Proyectos'
unique_together = ['clave', 'nombre']
class partidas(catalogo):
#proyectos=models.ForeignKey(proyectos)
partidas=models.ManyToManyField('proyectos')
class Meta:
verbose_name = 'Partida'
verbose_name_plural = 'Partidas'
def __unicode__(self):
return u'%s' % (self.clave)
class estatus(catalogo):
color = models.CharField('color', max_length = 17, help_text = 'color de identificacion')
secuencia = models.IntegerField()
class Meta:
ordering = ['secuencia']
verbose_name = 'Estatus'
verbose_name_plural = 'Estatus'
def color_(self):
return '%s' % (self.color, self.nombre)
color_.allow_tags = True
def asigna_icono(extension):
r = None
if extension != '':
r = extension
if r == 'BMP' or r == 'GIF':
r = '%s icol-image-1' % (extension)
elif r == 'JPG' or r == 'JPEG' :
r = '%s icol-images' % (extension)
elif r == 'PDF':
r = '%s icol-doc-pdf' % (extension)
elif r == 'XLS' or r == 'DOC' or r == 'XLSX' or r == 'DOCX' :
r = '%s icol-doc-offlice' % (extension)
elif r == 'ZIP' or r == 'RAR' :
r = '%s icol-compress' % (extension)
elif r == 'TXT':
r = '%s icol-doc-text-image' % (extension)
else:
r = '%s icol-stop' % (extension)
return r
class catalogoDependencias(models.Model):
clave = models.CharField(max_length = 150)
nombre = models.CharField(max_length = 150)
def __unicode__(self):
return u'%s - %s' % (self.clave, self.nombre)
class anuencia_datos(bitacora):
fecha_solicitud = models.DateTimeField('Fecha de solicitud', blank = True, null = True )
fecha_recepcion = models.DateTimeField('Fecha de recepción', blank = True, null = True, )
dependencias = models.ForeignKey(catalogoDependencias, help_text = 'Selecione el proyecto y la partida a la que pertenece')
no_oficio = models.CharField('Número de Oficio', max_length=150, help_text = 'Ingrese el número de oficio, dependencia/consecutivo/año', )
contacto_tecnico = models.CharField('Contacto Técnico', help_text = 'Nombre de la persona de contacto', max_length = 150)
telefono_fax = models.CharField('Teléfono / fax', max_length=15, help_text = 'Teléfono o fax', )
extension = models.CharField('Extensión', max_length=6, help_text = 'Extensión',blank= True, null= True,)
correo_electronico = models.EmailField('Correo electrónico', max_length=100, help_text = 'Correo electrónico', blank = True, null = True, )
no_requisicion = models.CharField('Número de requisición', max_length=15, help_text = 'Número de requisición, si ya cuenta con ella', blank=True, null=True)
estatus = models.ForeignKey(estatus, default = 1, help_text = 'Estatus de la anuencia')
autorizacion_presupuesto = models.FileField('Autorización Presupuesto',upload_to = 'cargas', help_text = 'Digitalización de autorización presupuestal', blank = True, null = True)
autorizacion_tecnica = models.FileField(upload_to = 'cargas', help_text = 'Digitalización de autorización técnica', blank = True, null = True)
cotizaciones = models.FileField(upload_to = 'cargas', help_text = 'Digitalización de cotizaciones; ZIP o RAR de ser varias', blank = True, null = True)
justificacion = models.TextField( 'Justificación', max_length = 300, help_text = 'Justificación técnica' )
def __unicode__(self):
return u'%s' % ( self.id )
def estatus_(self):
return '
%s' % (self.estatus.color,self.estatus.color, self.estatus.nombre)
estatus_.allow_tags = True
def dependencia_(self):
d = Perfil.objects.get(usuario_id = self.usuario)
return u'%s' % (d.direccion.siglas)
def autorizacion_presupuesto_tipo(self):
r = None
if self.autorizacion_presupuesto != '':
r = u'%s' % (self.autorizacion_presupuesto)
r = r.split('.')[1].upper()
r = asigna_icono(r)
return u'%s' % (r)
def autorizacion_tecnica_tipo(self):
r = None
if self.autorizacion_tecnica != '':
r = u'%s' % (self.autorizacion_tecnica)
r = r.split('.')[1].upper()
r = asigna_icono(r)
return u'%s' % (r)
def cotizaciones_tipo(self):
r = None
if self.cotizaciones != '':
r = u'%s' % (self.cotizaciones)
r = r.split('.')[1].upper()
r = asigna_icono(r)
return u'%s' % (r)
def total_articulos(self):
d = anuencia_detalle.objects.filter(anuencia_id = self.id)
return u'%s' % ( d.count() )
class Meta:
verbose_name = 'anuencia'
verbose_name_plural = 'anuencias'
class addProyectos(models.Model):
clave=models.CharField(max_length=100)
nombre=models.CharField(max_length=200)
def __unicode__(self):
return u'%s - %s' % (self.clave, self.nombre)
class addPartidas(models.Model):
clave=models.CharField(max_length=100)
nombre=models.CharField(max_length=200)
proyectos=models.ManyToManyField(addProyectos,blank=True,null=True)
#proyecto=models.ForeignKey(addProyectos, null=True,blank=True)
def __unicode__(self):
return u'%s - %s' % (self.clave, self.nombre)
class anuencia_detalle(bitacora):
anuencia = models.ForeignKey( anuencia_datos )
proyecto = models.ForeignKey(addProyectos, help_text = 'Selecione el proyecto y la partida a la que pertenece')
#proyecto = models.ForeignKey(addProyectos, help_text = 'Selecione el proyecto y la partida a la que pertenece')
partida = models.ForeignKey(addPartidas, help_text = 'Selecione el proyecto y la partida a la que pertenece')
no_lote = models.CharField(max_length=3, blank=True, null= True, help_text = 'Número de lote al que pertenece el artículo')
articulo = models.CharField(max_length = 300, help_text = 'Nombre del artículo')
categoria = models.CharField (max_length = 100, help_text = 'Categoria a la que pertenece el articulo')
descripcion = models.TextField(max_length = 500, help_text = 'Descripción breve')
cantidad = models.IntegerField(help_text = 'Número de piezas')
precio = models.DecimalField(decimal_places = 2, max_digits = 20, help_text = 'Precio unitario')
url = models.URLField(help_text = 'Página web del artículo', blank=True, null=True,)
autorizado = models.BooleanField(default=False)
observaciones = models.TextField('Observaciones', max_length = 300, blank = True, null = True, help_text = 'Escriba aquí si desea agregar alguna Observacion')
def __unicode__(self):
return u'%s - %s' % ( self.anuencia.id, self.id )
def subtotal(self):
r = None
if self.precio != '' and self.cantidad != '':
r = u'%s' % (self.precio * self.cantidad)
return u'%s' % (r)
class Meta:
verbose_name = 'detalle'
verbose_name_plural = 'detalles'
unique_together = ['proyecto', 'partida', 'articulo','anuencia']
def save(self, *args, **kwargs):
for field_name in ['categoria', 'articulo', 'descripcion']:
val = getattr(self, field_name, False)
if val:
setattr(self, field_name, val.upper())
for field_name in ['nombre']:
val = getattr(self, field_name, False)
if val:
setattr(self, field_name, val.capitalize())
super(anuencia_detalle, self).save(*args, **kwargs)
# class articulos(bitacora):
# anuencia = models.ForeignKey( anuencia_detalle )
# # no_lote = models.CharField('Número de lote', max_length=15, )
# articulo = models.CharField(max_length = 300, help_text = 'Nombre del artículo')
# categoria = models.CharField (max_length = 100, help_text = 'Categoria a la que pertenece el articulo')
# descripcion = models.CharField(max_length = 300, help_text = 'Descripción breve')
# cantidad = models.IntegerField(help_text = 'Número de piezas')
# precio = models.DecimalField(decimal_places = 2, max_digits = 7, help_text = 'Precio unitario')
# url = models.URLField(help_text = 'Página web del artículo')
# autorizado = models.BooleanField(default=False)
# observaciones = models.CharField('Observaciones', max_length = 300, blank = True, null = True, help_text = 'Escriba aquí si desea agregar alguna Observacion')
# def __unicode__(self):
# return u'%s' % ( self.id )
# class Meta:
# verbose_name = 'articulo'
# verbose_name_plural = 'articulos'
class revision(bitacora):
anuencia = models.ForeignKey( anuencia_datos )
# usuario = quien revisa la anuencia
# fecha_registro = fecha en que se inicia la revision
# fecha_ultimo_cambio = fecha en que se termina la revision
def __unicode__(self):
return u'%s' % ( self.anuencia )
class Meta:
verbose_name = 'revision'
verbose_name_plural = 'revisiones'
class autorizacion(bitacora):
anuencia = models.ForeignKey( anuencia_datos )
# usuario = quien autoriza la anuencia
# fecha_registro = fecha en que se registra la autorizacion
def __unicode__(self):
return u'%s' % ( self.anuencia )
class Meta:
verbose_name = 'autorizacion'
verbose_name_plural = 'autorizaciones'
#class addPartidas(models.Model):
# clave=models.CharField(max_length=100)
# nombre=models.CharField(max_length=200)
# proyecto=models.ForeignKey(addProyectos)
# def __unicode__(self):
# return self.nombre