예제 #1
0
class RelacaoAbono(models.Model):

    objects = models.Manager()
    abonos = models.ManyToManyField(Abono, blank=True)
    data_inicio = models.DateTimeField()
    data_termino = models.DateTimeField()

    class Meta:
        verbose_name = 'Relação de abonos'
        verbose_name_plural = "Relações de abonos"
        ordering = ['-data_inicio']
        

    @staticmethod
    def factory(data_inicio, data_termino):
        abonos = Abono.objects.filter(
            Q(deferido=True)
            & Q(criado_em__gte=data_inicio)
            & Q(criado_em__lte=data_termino)
        )      
        relacao = RelacaoAbono.objects.create(
            data_inicio=data_inicio,
            data_termino=data_termino
        )
        for abono in abonos:
            relacao.abonos.add(abono)

        relacao.save()
        return relacao
예제 #2
0
class LinhaRelatorio(models.Model):
    objects = models.Manager()
    trabalhador = models.ForeignKey(Trabalhador, on_delete=models.SET_NULL, null=True)
    horas_extras = models.FloatField(default=0, validators=[MinValueValidator(0)])
    adicional_noturno = models.FloatField(default=0, validators=[MinValueValidator(0)])
    faltas = models.IntegerField(default=0, validators=[MinValueValidator(0)])
    dias_faltas = []
    criado_em = models.DateTimeField(auto_now_add=True)
    modificado_em = models.DateTimeField(auto_now=True)

    def __str__(self):
        return "%s(%.1f, %.1f, %d)" % (self.trabalhador.nome, self.horas_extras, self.adicional_noturno, self.faltas)

    class Meta:
        ordering = ['trabalhador__nome']
        verbose_name = "Linha de Relatório"
        verbose_name_plural = 'Linhas de Relatório'

    @staticmethod
    def transferencia(relatorio_fonte, relatorio_alvo, linha):
        if relatorio_fonte and relatorio_alvo and linha:
            if linha in relatorio_fonte.linhas.all():
                try:
                    relatorio_fonte.linhas.remove(linha)
                    relatorio_alvo.linhas.add(linha)
                    relatorio_fonte.save()
                    relatorio_alvo.save()
                except Exception as e:
                    print("Erro: %s", e)
예제 #3
0
class Ferias(models.Model):
    OPCOES = (
        (15, "Quinze dias"),
        (30, "Trinta dias"),
    )

    objects = models.Manager()

    class FeriasFruidas(models.Manager):
        def all(self):
            return super().get_queryset().filter(
                Q(tipo='f') & Q(data_termino__lt=timezone.now().date()) & Q(deferida=True))

    class FeriasIndeferidas(models.Manager):
        def all(self):
            return super().get_queryset().filter(Q(tipo='f') & Q(deferida=False))

    class FeriasEmAndamento(models.Manager):
        def all(self):
            return super().get_queryset().filter(Q(tipo='f') & Q(data_inicio__lte=timezone.now().date()) & Q(
                data_termino__gte=timezone.now().date()) & Q(deferida=True))

    fruidas = FeriasFruidas()
    indeferidas = FeriasIndeferidas()
    em_andamento = FeriasEmAndamento()

    trabalhador = models.ForeignKey(Trabalhador, on_delete=models.CASCADE)
    qtd_dias = models.IntegerField(choices=OPCOES)
    data_inicio = models.DateField()
    data_termino = models.DateField(editable=False)
    criado_em = models.DateTimeField(auto_now_add=True)
    modificado_em = models.DateTimeField(auto_now=True)
    deferida = models.BooleanField(editable=False, default=False)
    observacoes = models.TextField(blank=True, editable=False)
    tipo = models.CharField(max_length=2, default='f', editable=False)
    fruida = models.BooleanField(editable=False, default=False)
    criado_por = models.ForeignKey(User, on_delete=models.SET_NULL, editable=False, null=True, blank=True)

    def save(self, validacao=True, *args, **kwargs):

        self.data_termino = self.data_inicio + timedelta(days=self.qtd_dias - 1)

        if not validacao:
            self.deferida = False
        else:
            self.deferida = valida_ferias(self)

        super(Ferias, self).save(*args, **kwargs)

    def __str__(self):
        return '%d dias - %s -saindo %s' % (self.qtd_dias, self.trabalhador.nome, self.data_inicio.strftime("%d/%m/%Y"))

    def get_absolute_url(self):
        return reverse('ferias')

    class Meta:
        verbose_name_plural = "Férias"
        verbose_name = "Férias"
        ordering = ['data_inicio']
예제 #4
0
class Abono(models.Model):

    expedientes_opt = [
        ('matutino', 'Matutino'),
        ('vespertino', 'Vespertino'),
        ('integral', 'Integral'),
    ]
    objects = models.Manager()

    class AbonosFruidos(models.Manager):
        def all(self):
            return super().get_queryset().filter(Q(data__lt=timezone.now().date()) & Q(deferido=True))

    class AbonosIndeferidos(models.Manager):
        def all(self):
            return super().get_queryset().filter(Q(deferido=False))

    class AbonoEmAndamento(models.Manager):
        def all(self):
            return super().get_queryset().filter(Q(data=timezone.now().date()) & Q(deferido=True))

    fruidos = AbonosFruidos()
    indeferidos = AbonosIndeferidos()
    em_andamento = AbonoEmAndamento()

    trabalhador = models.ForeignKey(Trabalhador, on_delete=models.CASCADE)
    expediente = models.CharField(choices=expedientes_opt, max_length=20)
    data = models.DateField()
    criado_em = models.DateTimeField(auto_now_add=True)
    modificado_em = models.DateTimeField(auto_now=True)
    deferido = models.BooleanField(editable=False, default=False)
    observacoes = models.TextField(blank=True, editable=False)
    fruido = models.BooleanField(editable=False, default=False)
    criado_por = models.ForeignKey(User, on_delete=models.SET_NULL, editable=False, null=True, blank=True)

    def is_this_month(self):
        data = timezone.now().date()
        if self.data:
            return ((data.month == self.data.month) and (data.year == self.data.year))
        return False

    def save(self, validacao=True, *args, **kwargs):

        if not validacao:
            self.deferido = False
        else:
            self.deferido = True
        super(Abono, self).save(*args, **kwargs)

    def __str__(self):
        return '%s - %s' % (self.trabalhador.nome, self.data.strftime("%d/%m/%Y"))

    def get_absolute_url(self):
        return reverse('abono')

    class Meta:
        ordering = ['data']
예제 #5
0
class Content(models.Model):
    """Content to be created, displayed, updated, delete"""
    x = models.IntegerField()
    y = models.IntegerField()
    z = models.IntegerField(blank=True, null=True)
    objects = models.Manager()

    def __str__(self):
        return str(self.id)
예제 #6
0
class ChefeDeSetor(models.Model):
    objects = models.Manager()
    nome = models.CharField(max_length=200)
    legenda = models.CharField(max_length=100)
    criado_em = models.DateTimeField(auto_now_add=True)
    modificado = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name_plural = "Chefes de Setor"
        ordering = ['nome']
예제 #7
0
class Banner(models.Model):

    objects = models.Manager()
    titulo = models.CharField(max_length=200, blank=True)
    descricao = models.TextField(blank=True)
    link_img = models.URLField(unique=True)
    link = models.URLField()
    criado_em = models.DateTimeField(auto_now_add=True)
    modificado_em = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['-criado_em']
예제 #8
0
class LicencaPremio(Ferias):
    OPCOES = (
        (15, "Quinze dias"),
        (30, "Trinta dias"),
        (45, "Quarenta e cinco dias"),
        (60, "Sessenta dias"),
        (75, "Setenta e cinco dias"),
        (90, "Noventa dias")
    )

    objects = models.Manager()

    class LicencasFruidas(models.Manager):
        def all(self):
            return super().get_queryset().filter(Q(data_termino__lt=timezone.now().date()) & Q(deferida=True))

    class LicencasIndeferidas(models.Manager):
        def all(self):
            return super().get_queryset().filter(Q(deferida=False))

    class LicencaEmAndamento(models.Manager):
        def all(self):
            return super().get_queryset().filter(Q(data_inicio__lte=timezone.now().date()) & Q(deferida=True) & Q(
                data_termino__gte=timezone.now().date()))

    fruidas = LicencasFruidas()
    indeferidas = LicencasIndeferidas()
    em_andamento = LicencaEmAndamento()

    def __str__(self):
        return '%d dias - %s -saindo %s' % (self.qtd_dias, self.trabalhador.nome, self.data_inicio.strftime("%d/%m/%Y"))

    def save(self, validacao=True, *args, **kwargs):

        self.data_termino = self.data_inicio + timedelta(days=self.qtd_dias - 1)
        self.tipo = 'l'

        if not validacao:
            self.deferida = False
        else:
            self.deferida = valida_ferias(self)

        super(LicencaPremio, self).save(validacao, *args, **kwargs)


    def get_absolute_url(self):
        return reverse('licenca_premio')

    class Meta:
        verbose_name_plural = "Licença Prêmio"
        verbose_name = "Licenças Prêmio"
        ordering = ['data_inicio']
예제 #9
0
class Setor(models.Model):
    objects = models.Manager()
    nome = models.CharField(max_length=100, unique=True)
    criado_em = models.DateTimeField(auto_now_add=True)
    modificado_em = models.DateTimeField(auto_now=True)
    criado_por = models.ForeignKey(User, on_delete=models.SET_NULL, editable=False, null=True, blank=True)

    def __str__(self):
        return '%s - desde %s' % (self.nome, self.criado_em.strftime("%d/%m/%Y"))

    def get_absolute_url(self):
        return reverse('setor')

    class Meta:
        verbose_name_plural = 'Setores'
        ordering = ['nome']
예제 #10
0
class IndeedJobs(models.Model):
    title = models.CharField(max_length=200, null=True, blank=True)
    slug = models.SlugField(max_length=100, unique=True, blank=True, null=True)
    company = models.CharField(max_length=200, null=True, blank=True)
    city = models.CharField(max_length=200, null=True, blank=True)
    salary = models.CharField(max_length=200, null=True, blank=True)
    # experience = models.CharField(max_length=100, null=True, blank=True)
    job_description = HTMLField(null=True, blank=True)
    employment_type = models.CharField(max_length=100, null=True, blank=True)
    date_posted = models.CharField(max_length=200, null=True, blank=True)
    job_url = models.URLField(max_length=1000,
                              unique=True,
                              null=True,
                              blank=True)
    pub_date = models.DateTimeField(null=True,
                                    auto_created=True,
                                    auto_now_add=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_created=True)

    objects = models.Manager()
    job_objects = IndeedJobsManager()
    categories_objects = IndeedCategoriesManager()

    class Meta:
        ordering = ["-id"]

    def __str__(self):
        return str(self.title)

    def _get_unique_slug(self):
        slug = slugify(self.title)
        unique_slug = slug
        num = 1
        while IndeedJobs.objects.filter(slug=unique_slug).exists():
            unique_slug = '{}-{}'.format(slug, num)
            num += 1
        return unique_slug

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = self._get_unique_slug()
        super().save(*args, **kwargs)

    def get_absolute_url(self):
        from django.urls import reverse
        return reverse('detail', args=[str(self.slug, )])
예제 #11
0
class User(models.Model):

    objects = models.Manager()
    username = models.CharField(max_length=32,
                                verbose_name="사용자명",
                                unique=True)
    password = models.CharField(max_length=32, verbose_name="비밀번호")
    registered_dttm = models.DateTimeField(auto_now_add=True,
                                           verbose_name="등록시간")

    def __str__(self):
        return self.username

    class Meta:
        db_table = "Users"
        verbose_name = "user"
        verbose_name_plural = "Users"
예제 #12
0
class ChannelRaw(models.Model):
    objects = models.Manager()
    _id = models.CharField(primary_key=True, max_length=100)
    url = models.URLField(validators=[URLValidator], blank=False)
    lang_code = models.CharField(max_length=10, blank=False)
    main_html = models.TextField(blank=False)
    uploads_html = models.TextField(blank=False)

    def __str__(self) -> str:
        return str(self.id)

    def save(self, **kwargs):
        # note: always do model.clean_fields() before model.save()
        # https://stackoverflow.com/questions/17816229/django-model-blank-false-does-not-work
        super(ChannelRaw, self).save()

    @property
    def id(self) -> str:
        return self._id
예제 #13
0
class Result(models.Model):

    objects = models.Manager()
    # 기본 항목
    strategy_result = models.OneToOneField('Strategy',
                                           to_field="strategyNumber",
                                           on_delete=models.CASCADE,
                                           verbose_name="전략 고유번호당 결과")
    writer_name = models.ForeignKey('User',
                                    to_field="username",
                                    on_delete=models.CASCADE,
                                    verbose_name="전략 작성자명")

    # 결과 항목
    profit_all = models.IntegerField(verbose_name="총 손익")
    currentAsset = models.IntegerField(verbose_name="현재자산")
    Final_yield = models.IntegerField(verbose_name="최종수익률")
    #m_cagr = models.IntegerField(verbose_name="월간수익률")

    # 선택된 종목들 리스트
    selected_companys = models.CharField(max_length=1024,
                                         verbose_name="선택된 종목 리스트")
    # 추가된 항목들
    Current_assets_by_date = models.TextField(verbose_name="날짜별 현재 자산 정보",
                                              blank=True)
    Winning_rate = models.TextField(verbose_name="승률 (익절한 횟수와 손절한 횟수 정보)",
                                    blank=True)
    Reavalanced_code_name_list = models.TextField(
        verbose_name="리벨런싱한 종목 ( n번째 리벨런싱에 따른 종목 )", blank=True)

    def set_selected_companys(self, x):
        self.selected_companys = json.dumps(x)

    def get_selected_companys(self):
        return json.loads(self.selected_companys)

    def __str__(self):
        return str(self.strategy_result)

    class Meta:
        db_table = "Results"
        verbose_name = "result"
        verbose_name_plural = "Results"
예제 #14
0
class Trabalhador(models.Model):
    objects = models.Manager()
    OPCOES = (
        ('ferias', "Férias"),
        ('licenca', "Licença-prêmio"),
        ('abono', "Abono"),
        ('ativo', "Ativo"),
        ('atestado', "Atestado Médico"),
    )

    nome = models.CharField(max_length=100, unique=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='usuario',
                             editable=False)
    matricula = models.CharField(unique=True, max_length=15)
    registro = models.CharField(unique=True, max_length=15)
    funcao = models.CharField(max_length=50)
    setor = models.ForeignKey(Setor, on_delete=models.SET_NULL, null=True)
    data_admissao = models.DateTimeField()
    criado_em = models.DateTimeField(auto_now_add=True)
    modificado_em = models.DateTimeField(auto_now=True)
    situacao = models.CharField(max_length=100, choices=OPCOES)
    rg = models.CharField(max_length=20, blank=True, null=True)
    ctps = models.CharField(max_length=20, blank=True, null=True)
    cpf = models.CharField(max_length=20, blank=True, null=True)
    ctps_serie = models.CharField(max_length=20, blank=True, null=True)
    criado_por = models.ForeignKey(User, on_delete=models.SET_NULL, editable=False, null=True, blank=True)

    def __str__(self):
        return '%s : %s - %s - desde %s' % (
            self.nome, self.funcao, self.setor.nome, self.data_admissao.strftime("%d/%m/%Y"))

    def save(self, *args, **kwargs):
        if not self.user:
            self.user = User.objects.create_user(self.matricula, password=self.matricula)
        super(Trabalhador, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('trabalhadores')

    class Meta:
        verbose_name_plural = 'Trabalhadores'
        ordering = ['nome']
예제 #15
0
class VideoRaw(models.Model):
    objects = models.Manager()
    _id = models.CharField(primary_key=True, max_length=100)
    # on looking up channel_id, djongo will create a pymongo query for that
    url = models.URLField(validators=[URLValidator], blank=False)
    video_info = models.JSONField(blank=False, default=None)  # should be serialised with json.dumps
    main_html = models.TextField(blank=False)
    channel_id = models.CharField(max_length=100, blank=False)

    def __str__(self) -> str:
        return str(self.id)

    def save(self, **kwargs):
        # note: always do model.clean_fields() before model.save()
        # https://stackoverflow.com/questions/17816229/django-model-blank-false-does-not-work
        super(VideoRaw, self).save()

    @property
    def id(self) -> str:
        return self._id
예제 #16
0
class TracksRaw(models.Model):
    objects = models.Manager()
    _id = models.CharField(primary_key=True, max_length=100)
    # caption id must be unique
    caption_id = models.CharField(max_length=100, blank=False, unique=True)
    # can be null
    raw_xml = models.TextField(blank=True, default=None)

    # don't need a relation to video, as we'll look this up by caption id.

    def __str__(self) -> str:
        return str(self.id)

    def save(self, **kwargs):
        # note: always do model.clean_fields() before model.save()
        # https://stackoverflow.com/questions/17816229/django-model-blank-false-does-not-work
        super(TracksRaw, self).save()

    @property
    def id(self) -> str:
        return self._id
예제 #17
0
class Lembrete(models.Model):
    options = [
        ('d', 'Diário'),
        ('s', 'Semanal'),
        ('m', 'Mensal'),
    ]

    objects = models.Manager()
    titulo = models.CharField(max_length=200)
    mensagem = models.TextField()
    url_name = models.CharField(max_length=100)
    periodicidade = models.CharField(max_length=2, choices=options)
    dia = models.IntegerField(
        validators=[MinValueValidator(1), MaxValueValidator(31)],
        help_text="Semanal: indique o dia da semana(0=domingo, 1=segunda,...). Mensal: caso não haja tal dia em algum mês(30, 31), o lembrete será exibido no último dia do mês"
    )
    mostrado_esse_mes = models.BooleanField(default=False)
    criado_em = models.DateTimeField(auto_now_add=True)
    modificado_em = models.DateTimeField(auto_now=True)

    @property
    def is_valid(self):
        is_valid = False
        hoje = timezone.now()
        weekday = hoje.weekday()
        if not self.mostrado_esse_mes:
            # aqui a lógica muda dependendo da periodicidade
            if self.periodicidade == 'm':
                if weekday >= self.dia:
                    is_valid = True
            elif self.periodicidade == 's':
                if self.dia <= weekday < 6:
                    is_valid = True
            elif self.periodicidade == 'd':
                if hoje.hour == self.day:
                    is_valid = True
        return is_valid

    class Meta:
        ordering = ['dia']
예제 #18
0
class Conf(models.Model):
    ADC_CONST = 1.143
    objects = models.Manager()

    proximas_folgas = models.BooleanField(
        default=True,
        help_text='Mostra uma tabela na página principal, representando os trabalhadores que tem as folgas próximas'
    )
    em_andamento = models.BooleanField(
        default=True,
        help_text='Mostra uma tabela na página principal, representando os trabalhadores que estão de folga no momento'
    )
    proximos_retornos = models.BooleanField(
        default=True,
        help_text='Mostra uma tabela na página principal, representando os trabalhadores que estão no final de sua '
                  'folga '
    )
    calculo_de_adicional = models.BooleanField(
        default=False,
        verbose_name="Cálculo de Adicional Noturno",
        help_text='Multiplica o total de horas por 1,143, caso marcado'
    )
예제 #19
0
class IdiomRaw(models.Model):
    objects = models.Manager()
    _id = models.CharField(primary_key=True, max_length=100)
    text = models.CharField(max_length=100, blank=False)
    wiktionary_url = models.CharField(max_length=100, blank=False)
    # could be null
    parser_info = models.JSONField(blank=True, default=None)  # get this from wiktionary parser (python)
    # could be null (if request was erroneous)
    main_html = models.TextField(blank=True, default=None)

    def __str__(self) -> str:
        return self.text

    def save(self, **kwargs):
        # note: always do model.clean_fields() before model.save()
        # https://stackoverflow.com/questions/17816229/django-model-blank-false-does-not-work
        self.clean_fields()
        # self.validate_unique()  # must do this before saving
        super(IdiomRaw, self).save()

    @property
    def id(self) -> str:
        return self._id
예제 #20
0
class Strategy(models.Model):
    objects = models.Manager()
    # 기본 항목
    strategyName = models.CharField(max_length=128, verbose_name="전략명")
    strategyNumber = models.IntegerField(verbose_name="전략고유번호", unique=True)
    writerName = models.ForeignKey('User',
                                   on_delete=models.CASCADE,
                                   verbose_name="전략작성자명")
    strategyDescription = models.TextField(verbose_name="전략설명")
    strategyStar = models.IntegerField(verbose_name="별점")

    # Tab1 기본 항목
    investment = models.IntegerField(verbose_name="투자원금")
    investment_Start = models.IntegerField(verbose_name="투자 시작일")
    investment_End = models.IntegerField(verbose_name="투자 마감일")
    maxStockNumber = models.IntegerField(verbose_name="최대 보유 종목수")
    userMarketCap = models.IntegerField(verbose_name="대상기업 최소시가총액")

    # Tab2 퀄리티 지표
    userROE = models.IntegerField(verbose_name="최저 ROE", blank=True)
    userROA = models.IntegerField(verbose_name="최저 ROA", blank=True)
    userSalesPerProfit = models.IntegerField(verbose_name="매출액대비 순이익률",
                                             blank=True)
    userSalesPerMargin = models.IntegerField(verbose_name="매출액 대비 영업이익률",
                                             blank=True)
    userSalesIncrese = models.IntegerField(verbose_name="매출액 증가율", blank=True)
    userMarginIncrease = models.IntegerField(verbose_name="영업이익 증가율",
                                             blank=True)
    userProfitIncrease = models.IntegerField(verbose_name="순이익 증가율",
                                             blank=True)
    userDebtRatio = models.IntegerField(verbose_name="부채비율", blank=True)
    userCurrentRatio = models.IntegerField(verbose_name="유동비율", blank=True)
    userOperatingActivityCashFlow = models.BooleanField(
        verbose_name="영업활동현금흐름", blank=True)
    userInvestmentActivityCashFlow = models.BooleanField(
        verbose_name="투자활동현금흐름", blank=True)
    userFinancialActivityCashFlow = models.BooleanField(
        verbose_name="재무활동현금흐름", blank=True)
    # Tab3 벨류 지표

    # 주당 가치평가 지표
    userEPS_Start = models.IntegerField(verbose_name="주당순이익(min)", blank=True)
    userEPS_End = models.IntegerField(verbose_name="주당순이익(max)", blank=True)
    userBPS_Start = models.IntegerField(verbose_name="주당순자산(min)", blank=True)
    userBPS_End = models.IntegerField(verbose_name="주당순자산(max)", blank=True)
    userCFPS_Start = models.IntegerField(verbose_name="주당현금흐름(min)",
                                         blank=True)
    userCFPS_End = models.IntegerField(verbose_name="주당현금흐름(max)", blank=True)
    userSPS_Start = models.IntegerField(verbose_name="주당매출액(min)", blank=True)
    userSPS_End = models.IntegerField(verbose_name="주당매출액(max)", blank=True)
    userDPS_Start = models.IntegerField(verbose_name="주당배당금(min)", blank=True)
    userDPS_End = models.IntegerField(verbose_name="주당배당금(max)", blank=True)

    # 주가 가치평가 지표
    userPER_Start = models.IntegerField(verbose_name="주가수익배수(min)", blank=True)
    userPER_End = models.IntegerField(verbose_name="주가수익배수(max)", blank=True)
    userPBR_Start = models.IntegerField(verbose_name="주가순자산배수(min)",
                                        blank=True)
    userPBR_End = models.IntegerField(verbose_name="주가순자산배수(max)", blank=True)
    userPCR_Start = models.IntegerField(verbose_name="주가현금흐름배수(min)",
                                        blank=True)
    userPCR_End = models.IntegerField(verbose_name="주가현금흐름배수(max)", blank=True)
    userPSR_Start = models.IntegerField(verbose_name="주가매출액배수(min)",
                                        blank=True)
    userPSR_End = models.IntegerField(verbose_name="주가매출액배수(max)", blank=True)
    userMarketDiviend_Start = models.IntegerField(verbose_name="시가 배당률(min)",
                                                  blank=True)
    userMarketDiviend_End = models.IntegerField(verbose_name="시가 배당률(max)",
                                                blank=True)

    # Tab4 매수 & 매도 조건
    purchaseCondition = models.IntegerField(verbose_name="매수조건(%)")
    targetPrice = models.IntegerField(verbose_name="목표가격")
    sellPrice = models.IntegerField(verbose_name="손절가격")
    revalancingPeriod = models.IntegerField(
        verbose_name="리벨런싱 주기 ( 0:분기별 | 1:연간 | 2:선택안함 )")

    # 추가 데이터들 ( 전략들의 현재상태 )
    strategyOpenedInPlatform = models.BooleanField(verbose_name="플랫폼에 오픈하기",
                                                   blank=True)

    def __str__(self):
        return self.strategyName

    class Meta:
        db_table = "Strategy"
        verbose_name = "Strategy"
        verbose_name_plural = "Strategy"
예제 #21
0
class Relatorio(models.Model):
    objects = models.Manager()

    class Vigente(models.Manager):
        def all(self):
            data = datetime.now()
            return super().get_queryset().filter(
                Q(mes=data.month - 1 if data.month != 1 else 12)
                & Q(ano=data.year if data.month != 1 else data.year - 1)
                & (Q(estado='terminado') | Q(estado='oficial'))
            )

        def em_aberto(self):
            data = datetime.now()
            return super().get_queryset().filter(
                Q(mes=data.month - 1 if data.month != 1 else 12)
                & Q(ano=data.year if data.month != 1 else data.year - 1)
                & (Q(estado='terminado') | Q(estado="justificativas"))
            )

        def finalizados(self):
            data = datetime.now()
            return super().get_queryset().filter(
                Q(mes=data.month - 1 if data.month != 1 else 12)
                & Q(ano=data.year if data.month != 1 else data.year - 1)
                & Q(estado='oficial')
            )

    setor = models.ForeignKey(Setor, on_delete=models.SET_NULL, null=True)
    linhas = models.ManyToManyField(LinhaRelatorio, blank=True)
    estado = models.CharField(max_length=100, default="vazio")
    num_oficio = models.CharField(max_length=10)
    mes = models.IntegerField(
        default=mes_anterior(),
        validators=[
            MinValueValidator(1),
            MaxValueValidator(12),
        ]
    )
    ano = models.IntegerField(default=ano_padrao(), validators=[MaxValueValidator(datetime.now().year)])
    data_fechamento = models.DateField(blank=True, null=True)
    criado_em = models.DateTimeField(auto_now_add=True)
    modificado_em = models.DateTimeField(auto_now=True)
    vigentes = Vigente()

    def is_valid(self):
        return bool([linha for linha in self.linhas.all() if
                     linha.horas_extras > 0 or linha.adicional_noturno > 0 or linha.faltas > 0])

    @property
    def referencia(self):
        return str(self.mes) + "-" + str(self.ano)
    

    def __str__(self):
        return "%s - %d/%d" % (self.setor.nome, self.mes, self.ano)

    class Meta:
        verbose_name = "Relatório"
        verbose_name_plural = "Relatórios"
        ordering = ['-criado_em', 'setor__nome']