class Produccion(models.Model): fecha = models.DateTimeField() unidad = models.ForeignKey(recursos.UnidadProduccion) cantidad = models.IntegerField() empleados = models.ManyToManyField(recursos.Empleado) concepto = models.ForeignKey(Concepto, null=True, blank=True) creator = CurrentUserField(add_only=True, related_name="created_produccion") last_editor = CurrentUserField(related_name="last_edited_produccion") eliminado = models.BooleanField(default=False) eliminado_por = models.ForeignKey(User, related_name="eliminado_por_produccion", blank=True, null=True) def cargo(self): empleado = self.empleados.all().first() if empleado: return empleado.cargo #end if return None #end def def __unicode__(self): return u"%s %s x%d" % (str(self.empleados), self.fecha, self.cantidad)
class TipoContrato(models.Model): POR_HORA = 1 SALARIO_FIJO = 2 PRODUCCION = 3 opciones = ((POR_HORA, 'Por hora'), (SALARIO_FIJO, 'Salario fijo'), (PRODUCCION, 'Producción')) nombre = models.CharField(max_length=100) modalidad = models.IntegerField(choices=opciones) creator = CurrentUserField(add_only=True, related_name="created_tipo_contrato") last_editor = CurrentUserField(related_name="last_edited_tipo_contrato") eliminado = models.BooleanField(default=False) eliminado_por = models.ForeignKey( User, related_name="eliminado_por_tipo_contrato", blank=True, null=True) class Meta: verbose_name = "Tipo de contrato" verbose_name_plural = "Tipos de contrato" # end class def __unicode__(self): return u"%s" % (self.nombre)
class Contrato(models.Model): empleado = models.ForeignKey(Empleado) tipo_contrato = models.ForeignKey(TipoContrato) salario_base = models.DecimalField( "Salario base legal", max_digits=10, decimal_places=2, ) subsidio_transporte = models.DecimalField("Subsidio de transporte", max_digits=10, decimal_places=2, default=0) fecha_inicio = models.DateField() fecha_finalizacion = models.DateField(blank=True, null=True) descanso_turno = models.BooleanField("Descanso entre turnos") inicio_descanso = models.IntegerField("Hora de inicio de descanso", blank=True, null=True) duracion_descanso = models.IntegerField("Duración de descanso en minutos", blank=True, null=True) horas_trabajo = models.IntegerField("Horas de trabajo diarias", default=8) horas_trabajo_semanal = models.IntegerField("Horas de trabajo semanal", default=40) horas_trabajo_corte = models.IntegerField("Horas de trabajo mes", default=160) creator = CurrentUserField(add_only=True, related_name="created_contrato") last_editor = CurrentUserField(related_name="last_edited_contrato") eliminado = models.BooleanField(default=False) eliminado_por = models.ForeignKey(User, related_name="eliminado_por_contrato", blank=True, null=True) @classmethod def get_instance(cls, empleado, corte): contratos = Contrato.objects.filter(empleado=empleado) return cls.filter_by_corte(contratos, corte).order_by('fecha_inicio').last() # end def @classmethod def filter_by_corte(cls, queryset, corte): queryset = queryset.exclude(fecha_finalizacion__isnull=False, fecha_finalizacion__lte=corte.fecha_inicio) if corte.fecha_fin: queryset = queryset.exclude(fecha_inicio__gt=corte.fecha_fin) # end if return queryset # end def def __unicode__(self): return u"Contrato de %s %s" % (self.empleado.nombre, self.empleado.apellidos)
class DPAbstractSignable(models.Model): class Meta: abstract = True created_by = CurrentUserField(add_only=True, related_name="%(class)s_created_by", default='') updated_by = CurrentUserField(related_name="%(class)s_updated_by", default='')
class UnidadProduccion(models.Model): nombre = models.CharField(max_length=100) creator = CurrentUserField(add_only=True, related_name="created_unidad") last_editor = CurrentUserField(related_name="last_edited_unidad") eliminado = models.BooleanField(default=False) eliminado_por = models.ForeignKey(User, related_name="eliminado_por_unidad", blank=True, null=True) def __unicode__(self): return u"%s" % (self.nombre)
class Herramienta(ChangesMixin, models.Model): nombre= models.CharField(max_length=100, default='', null=True, blank=True) descripcion= models.CharField(max_length=1000,default='', null=True, blank=True) licencia = models.CharField(max_length=1000, default='',null=True, blank=True) # add #Tipo de licencia usos = models.CharField(max_length=1000, default='',null=True, blank=True) # Restricciones de uso enlaces = models.CharField(max_length=1000, default='',null=True, blank=True) # url del siito de la herramienta descarga_url = models.CharField(max_length=1000, default='',null=True, blank=True) # add #url para descargar sistema_operativo = models.CharField(max_length=1000, default='',null=True, blank=True)#add version= models.CharField(max_length=1000, default='',null=True, blank=True)#add integracion_lms= models.CharField(max_length=1000, default='',null=True, blank=True)#add informacion= models.CharField(max_length=1000, default='',null=True, blank=True)#descripcion funcional documentacion = models.CharField(max_length=1000, default='',null=True, blank=True) estado=models.IntegerField(choices=((0, 'Borrador'), (1, 'Revisión'), (2, 'Publica')), default=0) creacion =models.DateField(auto_now_add=True)#add tipo= models.ForeignKey(Categoria, null=True, blank=True)#add owner= CurrentUserField(add_only=True, related_name="created_mymodels") def __unicode__(self): return '%s'%self.nombre def __str__(self): return '%s' % self.nombre class Meta: verbose_name = 'Herramienta' verbose_name_plural = 'Herramientas'
class CuserModel(models.Model): created_by = CurrentUserField( add_only=True, related_name="%(app_label)s_%(class)s_created", on_delete=models.SET_NULL, null=True ) updated_by = CurrentUserField( related_name="%(app_label)s_%(class)s_modified", on_delete=models.SET_NULL, null=True ) class Meta: abstract = True
class TestModel(models.Model): name = models.CharField(max_length=100, unique=True) creator = CurrentUserField( add_only=True, blank=True, null=True, related_name="tests_created" )
class Presentacion(models.Model): usuario = CurrentUserField(add_only=True) producto = models.ForeignKey(Producto) unidades = models.DecimalField( max_digits=6, decimal_places=2, validators=[validators.MinValueValidator(0)]) fecha_agregado = models.DateTimeField(auto_now_add=True)
class Salida(models.Model): usuario = CurrentUserField(add_only=True) entrada = models.ForeignKey(Entrada) cantidad = models.DecimalField( max_digits=6, decimal_places=2, validators=[validators.MinValueValidator(0)]) fecha = models.DateTimeField(auto_now_add=True)
class Administrador(User): identificacion = models.CharField(max_length=120, verbose_name="Identificación", unique=True) fecha_nacimiento = models.DateField(verbose_name="Fecha de nacimiento") direccion = models.CharField(max_length=120, blank=True, null=True) telefono = models.CharField(max_length=15, verbose_name="Teléfono", blank=True, null=True) fijo = models.CharField(max_length=15, verbose_name="Fijo", blank=True, null=True) imagen = models.ImageField(upload_to="avatar", null=True, blank=True) creator = CurrentUserField(add_only=True, related_name="created_administrador") last_editor = CurrentUserField(related_name="last_edited_administrador") eliminado = models.BooleanField(default=False) eliminado_por = models.ForeignKey( User, related_name="eliminado_por_administrador", blank=True, null=True) class Meta: verbose_name = "Asistente" verbose_name_plural = "Asistentes" # end class def avatar(self): if self.imagen: imagen = self.imagen else: imagen = 'account.svg' # end if return '<img class="image-cicle" src="/media/%s" />' % (imagen) # end def avatar.allow_tags = True def __unicode__(self): return u'%s %s' % (self.first_name, self.last_name)
class Pension(models.Model): nombre = models.CharField(max_length=100) codigo = models.CharField(max_length=100, blank=True, null=True) creator = CurrentUserField(add_only=True, related_name="created_pension") last_editor = CurrentUserField(related_name="last_edited_pension") eliminado = models.BooleanField(default=False) eliminado_por = models.ForeignKey(User, related_name="eliminado_por_pension", blank=True, null=True) class Meta: verbose_name = "Pensión" verbose_name_plural = "Pensiones" # end class def __unicode__(self): return u"%s" % (self.nombre)
class CuserModel(models.Model): created_by = CurrentUserField( add_only=True, related_name="%(app_label)s_%(class)s_created", on_delete=models.SET_NULL, null=True) updated_by = CurrentUserField( related_name="%(app_label)s_%(class)s_modified", on_delete=models.SET_NULL, null=True) class Meta: abstract = True @classmethod def _check_fields(cls, **kwargs): errors = super()._check_fields() try: created_by = cls._meta.get_field('created_by') except FieldDoesNotExist: created_by = None if not (isinstance(created_by, CurrentUserField) or created_by is None): errors.append( checks.Error( "created_by should be either CurrentUserField or None, currently is %s" % type(created_by), id='DjangoRest1', obj=cls)) try: updated_by = cls._meta.get_field('updated_by') except FieldDoesNotExist: updated_by = None # means created_by has been removed, so just ignore it if not (isinstance(updated_by, CurrentUserField) or updated_by is None): errors.append( checks.Error( "updated_by should be either CurrentUserField or None, currently is %s" % type(updated_by), id='DjangoRest1', obj=cls)) return errors
class Event(models.Model): name = models.CharField(max_length=100, verbose_name='Назва') description = models.TextField('Опис', blank=True, null=True) image = models.ImageField( upload_to='images/events_calendar', blank=True, default='images/events_calendar/default_300x200.png') creator_user = CurrentUserField(add_only=True, related_name='Юзер') creator = models.ForeignKey(Organization, verbose_name='Організація', null=True) start_date = models.DateTimeField('Дата початку') end_date = models.DateTimeField(verbose_name='Дата закінчення', blank=True, null=True) category = models.ForeignKey(Category, verbose_name='Категорія') place_of_event = models.CharField(max_length=100, verbose_name='Місце події', blank=True, null=True) fb_link = models.CharField(max_length=200, verbose_name='Посилання в fb', blank=True, null=True) web_site = models.CharField(max_length=200, verbose_name='Посилання на сайт події', blank=True, null=True) published = models.BooleanField(default=True, verbose_name='Опублікований') def __str__(self): return self.name def save(self, force_insert=False, force_update=False, using=None, update_fields=None): super().save(force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields) from events_calendar.utils import add_index add_index(self.pk) def get_absolute_url(self): return "/event/%s" % self.pk class Meta: ordering = [ '-start_date', ] verbose_name = 'Подія' verbose_name_plural = 'Події'
class Tarifario(models.Model): unidad = models.ForeignKey(UnidadProduccion) cargo = models.ForeignKey(Cargo) precio = models.DecimalField( max_digits=10, decimal_places=2, ) remplazado_por = models.ForeignKey('Tarifario', blank=True, null=True) creator = CurrentUserField(add_only=True, related_name="created_tarifario") last_editor = CurrentUserField(related_name="last_edited_tarifario") eliminado = models.BooleanField(default=False) eliminado_por = models.ForeignKey(User, related_name="eliminado_por_tarifario", blank=True, null=True) def __unicode__(self): return u"para el %s el(la) %s es a: $%s" % (str( self.cargo), str(self.unidad), str(self.precio))
class Empleado(models.Model): nombre = models.CharField(max_length=100) apellidos = models.CharField(max_length=150) cedula = models.CharField(max_length=100, unique=True) fecha_nacimiento = models.DateField() cargo = models.ForeignKey(Cargo) pension = models.ForeignKey(Pension) eps = models.ForeignKey(Eps) cesantia = models.ForeignKey(Cesantia) cajacompensacion = models.ForeignKey(CajaCompensacion) email = models.CharField(max_length=200) creator = CurrentUserField(add_only=True, related_name="created_empleado") last_editor = CurrentUserField(related_name="last_edited_empleado") #cuenta de empleado numero = models.CharField("Numero de cuenta", max_length=100) banco = models.ForeignKey(Banco) def __unicode__(self): return u"%s %s" % (self.nombre, self.apellidos)
class HerramientaPorAprobar(ChangesMixin, models.Model): herramienta = models.ForeignKey(Herramienta, null=False, blank=False) owner = CurrentUserField(add_only=True, related_name="herramienta_owner") def __unicode__(self): return '%s' % self.herramienta.nombre def __str__(self): return '%s' % self.herramienta.nombre class Meta: verbose_name = 'Herramienta por Aprobar' verbose_name_plural = 'Herramientas por Aprobar'
class FileUser(models.Model): owner = CurrentUserField(add_only=True, related_name="upload_file") file = models.FileField(upload_to='herramienta/upload/') def __unicode__(self): return '%s'%self.owner.username if self.owner else '--- ---' def __str__(self): return '%s'%self.owner.username if self.owner else '--- ---' class Meta: verbose_name = 'Archivo a cargar' verbose_name_plural = 'Archivos cargados'
class Comment(models.Model): creator = CurrentUserField(add_only=True, related_name='Comment_creator') text = models.TextField('Коментар') event = models.ForeignKey(Event, verbose_name='Подія', null=True) time = models.DateTimeField(auto_now=True, verbose_name='Дата залишеного коментаря') def __str__(self): return self.creator.username class Meta: verbose_name = 'Коментар' verbose_name_plural = 'Коменти'
class Entrada(models.Model): usuario = CurrentUserField(add_only=True) codigo = models.CharField(max_length=45) producto = models.ForeignKey(Producto) presentacion = models.ForeignKey(Presentacion) cantidad = models.PositiveIntegerField() proveedor = models.ForeignKey(Proveedor) valor_unitario = models.DecimalField( max_digits=6, decimal_places=2, validators=[validators.MinValueValidator(0)]) ubicacion = models.CharField(max_length=100) fecha = models.DateTimeField(auto_now_add=True) def importe(self): return self.valor_unitario * self.cantidad
class HerramientaEdicion(ChangesMixin, models.Model): nombre = models.CharField(max_length=100, default='', null=True, blank=True) descripcion = models.CharField(max_length=1000,default='', null=True, blank=True) licencia = models.CharField(max_length=1000, default='',null=True, blank=True) # add #Tipo de licencia usos = models.CharField(max_length=1000, default='',null=True, blank=True) # Restricciones de uso enlaces = models.CharField(max_length=1000, default='',null=True, blank=True) # url del siito de la herramienta descarga_url = models.CharField(max_length=1000, default='',null=True, blank=True) # add #url para descargar sistema_operativo = models.CharField(max_length=1000, default='',null=True, blank=True) # add version = models.CharField(max_length=1000, default='',null=True, blank=True) # add integracion_lms = models.CharField(max_length=1000, default='',null=True, blank=True) # add informacion = models.CharField(max_length=1000, default='',null=True, blank=True) # descripcion funcional documentacion = models.CharField(max_length=1000, default='',null=True, blank=True) creacion = models.DateField(auto_now_add=True) # add tipo = models.ForeignKey(Categoria, null=True, blank=True) # add usuarioHerramienta= CurrentUserField(add_only=True, related_name='created_edit_model', on_delete=models.CASCADE) herramienta=models.ForeignKey(Herramienta) revision = models.ForeignKey(Revision, blank=True, null=True, verbose_name='Estado de revision') observacion = models.CharField(max_length=1000, blank=True, default='',null=True, verbose_name='Observacion') def __unicode__(self): return '%s' % self.nombre def __str__(self): return '%s' % self.nombre class Meta: verbose_name = 'Edicion de herramienta' verbose_name_plural = 'Ediciones de herramienta' def editor(self): if self.usuarioHerramienta: if self.usuarioHerramienta.usuario: return '%s %s' % (self.usuarioHerramienta.usuario.first_name, self.usuarioHerramienta.usuario.last_name) return '----- -----' editor.short_description = 'Editor'
class Ngo_Verification(models.Model): """ The class is responsible to perform Ngo Verification. Class attributes to be updated upon second interaction: + primary phone number verification status + secondary phone number verification status + email verification status + website verification status """ # The Ngo # Use <Ngo>.verification.all() to see the Ngo's verification status ngo = models.OneToOneField(Ngo, on_delete=models.CASCADE, related_name="Verification", blank=False, null=False) # This Ngo was verified by <User> # Use User.verified_Ngos.all() to see all Ngos they verified modified_by = CurrentUserField(related_name="VerifiedNgo", blank=False, null=False, on_delete=models.DO_NOTHING) # Verification Status of Primary Phone Number verified_phone_primary = models.BooleanField(default=False) # Verification Status of Secondary Phone Number verified_phone_secondary = models.BooleanField(default=False) # Verification Status of Email v_email = models.BooleanField(default=False) # Verification Status of Website v_website = models.BooleanField(default=False) def save(self, *args, **kwargs): """ Overrides save method to check if verification finished. """ if self.verified_phone_primary and self.verified_phone_secondary and self.v_email and self.v_website: Ngo_Detail(Ngo=self.Ngo).save() super().save(*args, **kwargs) # Call the "real" save() method.
class Post(models.Model): author = CurrentUserField(related_name='%(app_label)s_%(class)s_author', on_delete=models.CASCADE) title = models.CharField(max_length=50) text = models.CharField(max_length=140) create_date = models.DateTimeField(auto_now_add=True) published_date = models.DateTimeField(auto_now=True) attachment = models.FileField(upload_to='documents/', blank=True, null=True) class Meta: ordering = ['-published_date'] def get_absolute_url(self): return reverse('post_detail', kwargs={'pk': self.pk}) def publish(self): self.published_date = arrow.now() self.save() def was_published_recently(self): return self.published_date >= arrow.now().shift(days=-1).datetime def __unicode__(self): return self.title
class RequisicionDeCompra(models.Model): codigo = models.CharField(max_length=45) usuario = CurrentUserField(add_only=True) fecha = models.DateTimeField(auto_now_add=True)
class Ngo(models.Model): """ The class is responsible to hold an Ngo. Class attributes to be taken from Ngo upon first interaction: + name + purpose + description + location_city + location_state + location_country + phone_primary + phone_secondary + email + website """ # Date and Time of creation of record for this Ngo created_at = models.DateTimeField(auto_now_add=True) # This Ngo record was created by <User> # Use User.created_Ngos.all() to see all Ngos they created created_by = CurrentUserField(add_only=True, related_name="CreatedNgo", blank=False, null=False, on_delete=models.DO_NOTHING) # This Ngo record was modified by <User> # Use User.modified_Ngos.all() to see all Ngos they modified modified_by = CurrentUserField(related_name="ModifiedNgo", blank=False, null=False, on_delete=models.DO_NOTHING) name = models.TextField( help_text='Name of the Ngo | 2,000 characters max | 2 characters min', max_length=2000, blank=False, null=False) purpose = models.TextField( help_text= 'Purpose of the Ngo | 5,000 characters max | 50 characters min', max_length=5000, blank=False, null=False) description = models.TextField( help_text= 'Description of the Ngo | 10,000 characters max | 300 characters min', max_length=10000, blank=False, null=False) location_city = models.CharField( help_text='Location of the Ngo | 255 characters max | City', max_length=255, blank=False, null=False) location_state = models.CharField( help_text='Location of the Ngo | 255 characters max | State', max_length=255, blank=False, null=False) location_country = models.CharField( help_text='Location of the Ngo | 255 characters max | Country', max_length=255, blank=False, null=False) phone_primary = models.CharField( help_text= 'Phone Number of the Ngo | 50 characters max | Primary Phone Number', max_length=50, blank=False, null=False) phone_secondary = models.CharField( help_text= 'Phone Number of the Ngo | 50 characters max | Secondary Phone Number', max_length=50, blank=False, null=False) email = models.EmailField( help_text='Email of the Ngo | 254 characters max (RFC 2821)', max_length=254, blank=False, null=False) website = models.URLField( help_text='Website of the Ngo | 200 characters max', max_length=200, blank=False, null=False) def save(self, *args, **kwargs): """ Overrides save method to perform validations and standardizations. """ validate_minlength(self.name, 2) validate_minlength(self.purpose, 50) validate_minlength(self.description, 300) self.location_city = self.location_city.upper() self.location_state = self.location_state.upper() self.location_country = self.location_country.upper() validate_isalphaspace(self.name) validate_isalphaspace(self.location_city) validate_isalphaspace(self.location_state) validate_isalphaspace(self.location_country) validate_isnumeric(self.phone_p) validate_isnumeric(self.phone_s) # Initiate Ngo Verification Ngo_Verification(Ngo=self).save() super().save(*args, **kwargs) # Call the "real" save() method.
class Turno(models.Model): empleado = models.ForeignKey(recursos.Empleado) entrada = models.DateTimeField() salida = models.DateTimeField(null=True, blank=True) extras = models.ManyToManyField(RangoFecha, related_name='extras', blank=True) nocturna = models.ManyToManyField(RangoFecha, related_name='nocturna', blank=True) diurna = models.ManyToManyField(RangoFecha, related_name='diurna', blank=True) dominical = models.ManyToManyField(RangoFecha, related_name='dominical', blank=True) descontar_almuerzo = models.BooleanField(default=True) aprobado = models.BooleanField(default=False) aprobado_user = models.ForeignKey( User, verbose_name="Usuario que aprobo el turno", blank=True, null=True) creator = CurrentUserField(add_only=True, related_name="created_turno") last_editor = CurrentUserField(related_name="last_edited_turno") eliminado = models.BooleanField(default=False) eliminado_por = models.ForeignKey(User, related_name="eliminado_por_turno", blank=True, null=True) @staticmethod def month(empleado, year, month): return Turno.objects.filter(empleado=empleado, entrada__year=year, salida__month=month) # end def """ metodos para retornar en el listview """ def show_nocturnas(self): delta_dominical = self.get_delta_dominical() delta_nocturna = self.get_delta_nocturna() delta_extras = self.get_delta_extras() delta_dominical_nocturna = delta_dominical.intersect(delta_nocturna) delta_extra_nocturna = delta_nocturna.difference( delta_dominical_nocturna).intersect(delta_extras) return delta_nocturna.difference(delta_dominical_nocturna).difference( delta_extra_nocturna).horas() #end def def show_extra_nocturnas(self): delta_dominical = self.get_delta_dominical() delta_nocturna = self.get_delta_nocturna() delta_extras = self.get_delta_extras() delta_dominical_nocturna = delta_dominical.intersect(delta_nocturna) delta_extra_nocturna = delta_nocturna.difference( delta_dominical_nocturna).intersect(delta_extras) return delta_extra_nocturna.horas() #end def def show_dominicales_nocturnas(self): delta_dominical = self.get_delta_dominical() delta_nocturna = self.get_delta_nocturna() return delta_dominical.intersect( delta_nocturna).horas() - self.show_dominicales_nocturnas_extra() #end def def show_dominicales_nocturnas_extra(self): delta_dominical = self.get_delta_dominical() delta_nocturna = self.get_delta_nocturna() delta_extras = self.get_delta_extras() return delta_dominical.intersect(delta_nocturna).intersect( delta_extras).horas() # end def def show_diurnas(self): delta_dominical = self.get_delta_dominical() delta_diurna = self.get_delta_diurna() delta_extras = self.get_delta_extras() delta_dominical_diurna = delta_dominical.intersect(delta_diurna) delta_extra_diurna = delta_diurna.difference( delta_dominical_diurna).intersect(delta_extras) return delta_diurna.difference(delta_dominical_diurna).difference( delta_extra_diurna).horas() #end def def show_extra_duirna(self): delta_dominical = self.get_delta_dominical() delta_diurna = self.get_delta_diurna() delta_extras = self.get_delta_extras() delta_dominical_diurna = delta_dominical.intersect(delta_diurna) return delta_diurna.difference(delta_dominical_diurna).intersect( delta_extras).horas() #end def def show_dominicales_diurnas(self): delta_dominical = self.get_delta_dominical() delta_diurna = self.get_delta_diurna() return delta_dominical.intersect( delta_diurna).horas() - self.show_dominicales_diurnas_extra() #end def def show_dominicales_diurnas_extra(self): delta_dominical = self.get_delta_dominical() delta_diurna = self.get_delta_diurna() delta_extras = self.get_delta_extras() return delta_dominical.intersect(delta_diurna).intersect( delta_extras).horas() # end def """ fin metodos para retornar en el listview """ def get_extras_nocturnas(self): delta_extras = self.get_delta_extras() delta_nocturna = self.get_delta_nocturna() return delta_extras.intersect(delta_nocturna).horas() # end def def get_extras_diurnas(self): delta_extras = self.get_delta_extras() delta_diurna = self.get_delta_diurna() return delta_extras.intersect(delta_diurna).horas() # end def def get_dominicales_nocturnas(self): delta_dominical = self.get_delta_dominical() delta_nocturna = self.get_delta_nocturna() return delta_dominical.intersect(delta_nocturna).horas() # end def def get_dominicales_diurnas(self): delta_dominical = self.get_delta_dominical() delta_diurna = self.get_delta_diurna() return delta_dominical.intersect(delta_diurna).horas() # end def def get_dominicales_nocturnas_extra(self): delta_dominical = self.get_delta_dominical() delta_nocturna = self.get_delta_nocturna() delta_extras = self.get_delta_extras() return delta_dominical.intersect(delta_nocturna).intersect( delta_extras).horas() # end def def get_dominicales_diurnas_extra(self): delta_dominical = self.get_delta_dominical() delta_diurna = self.get_delta_diurna() delta_extras = self.get_delta_extras() return delta_dominical.intersect(delta_diurna).intersect( delta_extras).horas() # end def def get_delta_extras(self): delta = multi_datedelta() for rango in self.extras.all(): delta = delta + rango.datedelta() # end for return delta # end def def get_delta_nocturna(self): delta = multi_datedelta() for rango in self.nocturna.all(): delta = delta + rango.datedelta() # end for return delta # end def def get_delta_diurna(self): delta = multi_datedelta() for rango in self.diurna.all(): delta = delta + rango.datedelta() # end for return delta # end def def get_delta_dominical(self): delta = multi_datedelta() for rango in self.dominical.all(): delta = delta + rango.datedelta() # end for return delta # end def def horas_extras(self): horas = 0 for rango in self.extras.all(): horas = horas + rango.horas() # end for return horas if horas > 0 else 0 # end def def horas_nocturna(self): horas = 0 for rango in self.nocturna.all(): horas = horas + rango.horas() # end for return horas # end def def horas_diurna(self): horas = 0 for rango in self.diurna.all(): horas = horas + rango.horas() # end for return horas # end def def total_horas(self): return self.horas_diurna() + self.horas_nocturna() # end def def horas_dominical(self): horas = 0 for rango in self.dominical.all(): horas = horas + rango.horas() # end for return horas # end def def __unicode__(self): return u"Turno: %s %s - %s" % (self.empleado.nombre, self.empleado.apellidos, self.entrada.strftime('%Y-%m-%d'))
class Almacen(models.Model): usuario = CurrentUserField(add_only=True) nombre = models.CharField(max_length=45) fecha_agregado = models.DateTimeField(auto_now_add=True)
class Producto(models.Model): almacen = models.ForeignKey(Almacen) usuario = CurrentUserField(add_only=True) nombre = models.CharField(max_length=45) fecha_agregado = models.DateTimeField(auto_now_add=True)
class Configuracion(models.Model): opciones = ((0, "Quincenal"), (1, "Mensual")) tipo_cuenta_choices = (('S', "Ahorros"), ('D', 'Corriente')) tipo_corte = models.IntegerField(choices=opciones) primer_dia = models.PositiveIntegerField( "Primer dia de corte", validators=[MaxValueValidator(31)]) segundo_dia = models.PositiveIntegerField( "Segundo dia de corte", validators=[MaxValueValidator(31)], blank=True, null=True) nit = models.CharField(max_length=100) numero_cuenta = models.CharField(max_length=100) tipo_cuenta = models.CharField(max_length=2, choices=tipo_cuenta_choices) h_recargo_nocturno_inicio = models.TimeField( "Hora de inicio de recargo nocturno") h_recargo_nocturno_fin = models.TimeField( "Hora de finalización de recargo nocturno") h_almuerzo_inicio = models.TimeField("Hora de inicio de almuerzo") h_almuerzo_fin = models.TimeField("Hora de fin de almuerzo") tarifario = models.ManyToManyField(recursos.Tarifario) salario_minimo_dia = models.IntegerField( "salario minimo legal vigente diario") descuento_salud = models.IntegerField( "Descuento de salud y pensión para empleado %") nocturna = models.IntegerField("Valor de recargo nocturno %") dominical = models.IntegerField("Valor de recargo dominical o festivo %") nocturna_dominical = models.IntegerField( "Valor de recargo nocturno dominical o festivo %") extra_diurna = models.IntegerField( "Valor de recargo de hora extra diurna %") extra_nocturna = models.IntegerField( "Valor de recargo de hora extra nocturna %") extra_dominical_diurna = models.IntegerField( "Valor de recargo de hora extra dominical %") extra_dominical_nocturna = models.IntegerField( "Valor de recargo de hora extra dominical nocturna %") creator = CurrentUserField(add_only=True, related_name="created_configuracion") last_editor = CurrentUserField(related_name="last_edited_configuracion") @staticmethod def get_instance(): return Configuracion.objects.last() # end def class Meta: verbose_name = "Configucarión" verbose_name_plural = "Configuraciones" # end class def __unicode__(self): if self.tipo_corte == 1: tipo = "Quincenal" else: tipo = "Mensual" # end if if self.segundo_dia: segundo = str(self.segundo_dia) else: segundo = "Ninguno" # end if return u"Configuración %s Primer Dia %d Segundo dia %s" % ( tipo, self.primer_dia, segundo)
def test_current_user_field_can_have_other_user_class(self): field = CurrentUserField(to=OtherUser) self.assertIsInstance(field.rel.to(), OtherUser)