コード例 #1
0
ファイル: models.py プロジェクト: mariobp/Nomina
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)
コード例 #2
0
ファイル: models.py プロジェクト: mariobp/Nomina
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)
コード例 #3
0
ファイル: models.py プロジェクト: mariobp/Nomina
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)
コード例 #4
0
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='')
コード例 #5
0
ファイル: models.py プロジェクト: mariobp/Nomina
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)
コード例 #6
0
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'
コード例 #7
0
ファイル: models.py プロジェクト: hbvj99/market-api
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
コード例 #8
0
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"
    )
コード例 #9
0
ファイル: models.py プロジェクト: exildev/restaurante
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)
コード例 #10
0
ファイル: models.py プロジェクト: exildev/restaurante
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)
コード例 #11
0
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)
コード例 #12
0
ファイル: models.py プロジェクト: mariobp/Nomina
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)
コード例 #13
0
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
コード例 #14
0
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 = 'Події'
コード例 #15
0
ファイル: models.py プロジェクト: mariobp/Nomina
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))
コード例 #16
0
ファイル: models.py プロジェクト: mariobp/Nomina
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)
コード例 #17
0
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'
コード例 #18
0
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'
コード例 #19
0
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 = 'Коменти'
コード例 #20
0
ファイル: models.py プロジェクト: exildev/restaurante
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
コード例 #21
0
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'
コード例 #22
0
ファイル: models.py プロジェクト: infroid/NGO-Hub-API
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.
コード例 #23
0
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
コード例 #24
0
ファイル: models.py プロジェクト: exildev/restaurante
class RequisicionDeCompra(models.Model):
    codigo = models.CharField(max_length=45)
    usuario = CurrentUserField(add_only=True)
    fecha = models.DateTimeField(auto_now_add=True)
コード例 #25
0
ファイル: models.py プロジェクト: infroid/NGO-Hub-API
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.
コード例 #26
0
ファイル: models.py プロジェクト: mariobp/Nomina
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'))
コード例 #27
0
ファイル: models.py プロジェクト: exildev/restaurante
class Almacen(models.Model):
    usuario = CurrentUserField(add_only=True)
    nombre = models.CharField(max_length=45)
    fecha_agregado = models.DateTimeField(auto_now_add=True)
コード例 #28
0
ファイル: models.py プロジェクト: exildev/restaurante
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)
コード例 #29
0
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)
コード例 #30
0
ファイル: tests.py プロジェクト: aptivate/django-cuser
 def test_current_user_field_can_have_other_user_class(self):
     field = CurrentUserField(to=OtherUser)
     self.assertIsInstance(field.rel.to(), OtherUser)