# encoding:utf-8
from django.db import models
from dependencias.models import *
from datetime import datetime
# Create your models here.
# categoria = (
# ('Computo','Computo: Laptops - Computadoras de Escritorio - Tabletas - Notebook'),
# ('Almacenamiento','Almacenamiento: SAN - NAS - Discos Duros - Usb - CD - DVD'),
# ('Procesamiento','Procesamiento: Servidores - Blades - Workstation'),
# ('Comunicaciones','Comunicaciones: Switch - Routers - DBX - Teléfonos - Acces Point - UTM'),
# ('Cableado','Cableado: UTP - Fibra.Óptica - Jumpers - Jack - Patch Panel - Racks'),
# ('Energia','Energía: UPS - Plantas de Energía - Supresores de Transición - Tierra Física'),
# ('H-Back','H-Back: Mini Split - Aires de Presión - Aires Industriales'),
# ('Impresión','Impresión: Scaners - Impresoras - Multifuncionales - Copiadoras'),)
class categoria(models.Model):
clave = models.CharField(max_length=100)
descripcion = models.CharField(max_length=500)
class Meta:
ordering = ['clave']
verbose_name = 'Categorias'
verbose_name_plural = 'Estatus'
def __unicode__(self):
return u'%s :: %s' % (self.clave, self.descripcion)
class bitacora(models.Model):
fecha_registro = models.DateField('fecha registro', help_text='fecha de registro del elemento',
auto_now_add=False, )
fecha_ultimo_cambio = models.DateTimeField('fecha del ultimo cambio',
help_text='fecha de la ultima modificación registrada', auto_now=False, )
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 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
else:
r = 'TXT'
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.EX icol-doc-text-image'
return r
class catalogoDependencias(models.Model):
clave = models.CharField(max_length=150)
nombre = models.CharField(max_length=150)
ejercicio = models.IntegerField()
def __unicode__(self):
return u'%s - %s' % (self.clave, self.nombre)
class usuario_dependencia(models.Model):
usuario = models.ForeignKey(User)
dependencia = models.ForeignKey(catalogoDependencias)
def __unicode__(self):
return u'%s--%s' % (self.usuario.first_name, self.dependencia.nombre)
class anuencia_datos(bitacora):
fecha_solicitud = models.DateField('Fecha de solicitud', blank=False, null=False)
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', blank=False,
null=False)
no_oficio = models.CharField('Número de Oficio', max_length=120,
help_text='Ingrese la clave de dependencia/departamento/consecutivo/año', blank=False,
null=False)
contacto_tecnico = models.CharField('Contacto Técnico', help_text='Nombre de la persona Responsable',
max_length=150, blank=False, null=False)
telefono_fax = models.CharField('Teléfono / fax', max_length=15, help_text='Teléfono o fax', blank=False,
null=False)
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=150, help_text='Correo electrónico',
blank=False, null=True)
no_requisicion = models.CharField('Número de requisición', max_length=25,
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', blank=False,
null=True)
puesto_responsable = models.CharField('Puesto del Responsable', max_length=150, null=True, blank=False)
oficio_dgtic = models.CharField('NO de Oficio de SA', max_length=25,
help_text='Ingrese El Folio de la Secretaria de Administracion', null=True,
blank=True)
rstatus = models.CharField(max_length=12, null=True, blank=True)
fecha_calificacion = models.DateField(null=True,blank=True)
fecha_validacion = models.DateField(null=True,blank=True)
fecha_validacion_precio = models.DateField(null=True,blank=True)
fecha_autorizacion = models.DateField(null=True,blank=True)
documentacion = models.BooleanField(default = False)
lineamientos = models.BooleanField(default = False)
precio_mercado = models.BooleanField(default=None)
analisis_factibilidad = models.BooleanField(default=False)
requisicion = models.FileField(upload_to='cargas', help_text='Digitalización de la Requisicion', null=True, blank=True)
no_revision = models.IntegerField(default=0)
observacion_data = models.TextField('observacion', max_length=300, help_text='Observacion', blank=False,null=True)
fecha_modificacion_dependencia = models.DateTimeField()
se_imprimio = models.BooleanField(default=True)
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.nombre)
def clave(self):
d = Perfil.objects.get(usuario_id=self.usuario)
return u'%s' % (d.direccion.clave)
def autorizacion_presupuesto_tipo(self):
r = None
if self.autorizacion_presupuesto != '':
r = u'%s' % (self.autorizacion_presupuesto)
if '.' in r:
r = r.split('.')[1].upper()
r = asigna_icono(r)
else:
r = asigna_icono(None)
return u'%s' % (r)
def autorizacion_tecnica_tipo(self):
r = None
if self.autorizacion_tecnica != '':
r = u'%s' % (self.autorizacion_tecnica)
if '.' in r:
r = r.split('.')[1].upper()
r = asigna_icono(r)
else:
r = asigna_icono(None)
return u'%s' % (r)
def cotizaciones_tipo(self):
r = None
if self.cotizaciones != '':
r = u'%s' % (self.cotizaciones)
if '.' in r:
r = r.split('.')[1].upper()
r = asigna_icono(r)
else:
r = asigna_icono(None)
return u'%s' % (r)
def requisision(self):
r = None
if self.requisision != '':
r = u'%s' % (self.requisision)
if '.' in r:
r = r.split('.')[1].upper()
r = asigna_icono(r)
else:
r = asigna_icono(None)
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):
dependencia = models.ForeignKey(catalogoDependencias)
clave = models.CharField(max_length=100)
nombre = models.CharField(max_length=800)
ejercicio = models.IntegerField()
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)
ejercicio = models.IntegerField()
proyectos = models.ManyToManyField(addProyectos, blank=True, null=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.ForeignKey(categoria, 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=4, max_digits=20, help_text='Precio unitario')
iva = models.IntegerField(max_length=3)
total = models.DecimalField(decimal_places=2, max_digits=20, help_text='Precio con Iva')
sin_iva = models.BooleanField(default=False)
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.total * self.cantidad)
return u'%s' % (r)
class Meta:
verbose_name = 'detalle'
verbose_name_plural = 'detalles'
# def save(self, *args, **kwargs):
# for field_name in ['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 revision(bitacora):
anuencia = models.ForeignKey(anuencia_datos)
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 tipo_usuario(models.Model):
clave = models.CharField('clave', max_length=10, help_text='Clave de identificación', blank=True, )
nombre = models.CharField('nombre', max_length=50, help_text='nombre del elemento', )
def __unicode__(self):
return u'%s - %s' % (self.clave, self.nombre)
class Perfil(models.Model):
tipo = models.ForeignKey(tipo_usuario)
usuario = models.ForeignKey(User)
direccion = models.ForeignKey(catalogoDependencias)
# direccion = models.ForeignKey( adscripcion, verbose_name = 'Adscripcion', null = True, blank = True )
def __unicode__(self):
return u'%s - %s' % (self.usuario.id, self.usuario.username)
class Meta:
ordering = ['-id']
verbose_name_plural = 'Perfiles'
unique_together = ['usuario']
##MAPEADO DE LA VISTA DE PROVEEDORES##
class ProveedorView(models.Model):
id = models.IntegerField(primary_key=True)
numero_finanzas = models.IntegerField()
razon_social = models.CharField(max_length=100)
razon_comercial = models.CharField(max_length=100)
rfc = models.CharField(max_length=15)
fecha_inicio = models.DateField()
representante_legal = models.CharField(max_length=80)
tipo_representante = models.IntegerField()
numero_protocolo = models.CharField(max_length=200)
status_id = models.IntegerField()
descripcion = models.CharField(max_length=50)
prioridad = models.IntegerField()
class Meta:
verbose_name = 'Proveedor'
verbose_name_plural = 'Proveedores'
db_table = 'proveedores_vw'
managed = False
def __unicode__(self):
return '%s' % (self.razon_social)
class anuencia_proveedor(models.Model):
anuencia = models.ForeignKey(anuencia_datos)
proveedor_id=models.IntegerField(max_length=10)
def __unicode__(self):
return u'%s - %s' % (self.anuencia, self.proveedor_id)
class proveedor_proveedorview(models.Model):
id = models.IntegerField(primary_key=True)
anuencia_id = models.IntegerField()
proveedor_id = models.IntegerField()
razon_social = models.CharField(max_length=200)
class Meta:
verbose_name = 'proveedor_proveedorview'
verbose_name_plural = 'proveedores_proveedorviews'
db_table = 'proveedor_proveedorview'
managed = False
def __unicode__(self):
return '%s, %s' % (self.anuencia_id,self.razon_social)
class observaciones(models.Model):
observacion = models.TextField('Observacion', max_length=300, help_text='Observaciones', blank=False,null=True)
lote = models.IntegerField(blank=True, null=True)
fecha = models.DateField()
anuencia = models.ForeignKey(anuencia_datos)
usuario = models.ForeignKey(User)
estatus = models.ForeignKey(estatus)
def __unicode__(self):
return '%s, %s' % self.anuencia_id