<commit_before># -*- coding: utf-8 -*-
# vim: ts=4 sts=4 expandtab ai
from datetime import date, datetime
from django.db import models, transaction
from django.db.models import Q
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
#from emencia.django.newsletter.mailer import mailing_started

from django.contrib.auth.models import User
from django.template.defaultfilters import slugify
from medlemssys import mod10


class Val(models.Model):
    tittel = models.CharField(_("kort forklaring"), max_length=100, unique=True)
    forklaring = models.TextField(_("lang forklaring"), blank=True)

    class Meta:
        verbose_name_plural = "val"

    def __unicode__(self):
        return self.tittel

class Lokallag(models.Model):
    namn = models.CharField(_("namn"), max_length=255, unique=True)
    slug = models.SlugField(_("nettnamn"), max_length=255, unique=True, blank=True)
    fylkeslag = models.CharField(_("fylkeslag"), max_length=255)
    distrikt = models.CharField(_("distrikt"), max_length=255)
    andsvar = models.CharField(_("andsvar"), max_length=255)
    lokalsats = models.IntegerField(_("lokalsats"), default=0)

    aktivt = models.BooleanField(_("aktivt"), default=True)

    class Meta:
        verbose_name_plural = "lokallag"
        ordering = ['-aktivt', 'namn']

    def num_medlem(self):
        return self.medlem_set.betalande().count()
    num_medlem.short_description = "medlemstal"

    def save(self, *args, **kwargs):
        if not self.slug or self.slug == "":
            self.slug = slugify(self.namn)
        super(Lokallag, self).save(*args, **kwargs)

    def __unicode__(self):
        return self.namn

class Innmeldingstype(models.Model):
    namn = models.CharField(_("namn"), max_length=255, unique=True)

    class Meta:
        verbose_name_plural = "innmeldingstypar"

    def __unicode__(self):
        return self.namn

class Nemnd(models.Model):
    namn = models.CharField(_("namn"), max_length=64)
    start = models.DateField(_("start"), default=date.today)
    stopp = models.DateField(_("stopp"))

    class Meta:
        verbose_name_plural = "nemnder"

    def __unicode__(self):
        return u"%s (%s–%s)" % (self.namn, self.start.strftime("%y"),
                                self.stopp.strftime("%y"))

class Tilskiping(models.Model):
    namn = models.CharField(_("namn"), max_length=64)
    slug = models.SlugField(_("kortnamn"), max_length=64)
    start = models.DateField(_("start"), default=date.today)
    stopp = models.DateField(_("stopp"))

    class Meta:
        verbose_name_plural = "tilskipingar"

    def num_deltakarar(self):
        return self.medlem_set.count()
    num_deltakarar.short_description = _("deltakarar")

    def __unicode__(self):
        return u"%s (%s)" % (self.namn, self.start.strftime("%Y"))
    __unicode__.admin_order_field = 'namn'

STATUSAR = (
    ("M", "Vanleg medlem"),
    ("I", "Infoperson"),
    ("L", "Livstidsmedlem"),
)

INNMELDINGSTYPAR = (
    ("H", "Heimesida"),
    ("M", "Målferd"),
    ("V", "Vervekampanje"),
    ("F", "Flygeblad"),
    ("L", "Lagsskiping/årsmøte"),
    ("D", "Direkteverva"),
    ("S", "SMS"),
    ("O", "Vitjing"),
    ("A", "Anna"),
    ("U", "--"),
)

class MedlemManager(models.Manager):
    def alle(self):
        if getattr(self, 'core_filters', None):
            qs = super(MedlemManager, self).get_query_set().filter(**self.core_filters)
        else:
            qs = super(MedlemManager, self).get_query_set()

        return qs

    def ikkje_utmelde(self, year=date.today().year):
        return self.alle().filter(
            Q(utmeldt_dato__isnull=True) | Q(utmeldt_dato__gt=date(year+1, 1, 1))
        )

    def betalande(self, year=date.today().year):
        return self.ikkje_utmelde(year) \
            .filter(
                giroar__oppretta__gte=date(year, 1, 1),
                giroar__oppretta__lt=date(year+1, 1, 1),
                giroar__innbetalt__isnull=False
            ).distinct()

    def teljande(self, year=date.today().year):
        return self.betalande(year) \
            .filter(
                fodt__gte = year - 25
            )

    def interessante(self, year=date.today().year):
        """Viser berre 'interessante' medlem, dei som har betalt i år eller i fjor."""
        return self.ikkje_utmelde(year) \
            .filter(
                giroar__oppretta__gte=date(year-1, 1, 1),
                giroar__oppretta__lt=date(year+1, 1, 1),
                giroar__innbetalt__isnull=False
            ).distinct()

    def get_query_set(self):
        return self.alle()


class Medlem(models.Model):
    fornamn = models.CharField(_("fornamn"), max_length=255)
    mellomnamn = models.CharField(_("mellomnamn"), max_length=255,
            blank=True, null=True)
    etternamn = models.CharField(_("etternamn"), max_length=255)
    fodt = models.IntegerField(_(u"født"), max_length=4,
            blank=True, null=True)
    # Hadde denne før, men importering gjorde folk so gamle då: default=date.today().year - 17,

    # Kontakt
    postnr = models.CharField(_("postnr"), max_length=4)
    epost = models.CharField(_("epost"), max_length=255,
            blank=True, null=True)
    postadr = models.CharField(_("postadresse"), max_length=255,
            blank=True, null=True)
    ekstraadr = models.CharField(_("ekstraadresse"), max_length=255,
            blank=True, null=True)
    mobnr = models.CharField(_("mobiltelefon"), max_length=50,
            blank=True, null=True)
    heimenr = models.CharField(_("heimetelefon"), max_length=50,
            blank=True, null=True)

    # Om medlemen
    gjer = models.CharField(_("gjer"), max_length=255,
        blank=True, null=True)
    kjon = models.CharField(_("kjønn"), max_length=1, choices=(("M", "Mann"),
        ("K", "Kvinne"), ("U", "Udefinert")), default="U")
    merknad = models.TextField(_("merknad"), blank=True, default="")

    # Spesialfelt, denormalisert felt frå Giro
    _siste_medlemspengar = models.DateField(blank=True, null=True,
            editable=False, default=None)

    # Medlemsskapet
    innmeldt_dato = models.DateField(_("innmeldt"), default=date.today)
    utmeldt_dato = models.DateField(_("utmeldt"), blank=True, null=True,
            default=None)
    status = models.CharField(_("medlstatus"), max_length=1,
            choices=STATUSAR, default="M")
    innmeldingstype = models.CharField(_("innmtype"), max_length=1,
            choices=INNMELDINGSTYPAR, default='U')
    innmeldingsdetalj = models.CharField(_("detalj om innmelding"), max_length=255,
        blank=True, null=True, help_text=_("Skriv inn vervemedlem i hakeparantesar ([1234])"))
    verva_av = models.ForeignKey('Medlem', blank=True, null=True)

    # Tilkopla felt
    lokallag = models.ForeignKey(Lokallag, blank=True, null=True)
    val = models.ManyToManyField(Val, blank=True, null=True)
    nemnd = models.ManyToManyField(Nemnd, blank=True, null=True)
    tilskiping = models.ManyToManyField(Tilskiping, blank=True, null=True)
    lokallagsrolle = models.ManyToManyField(Lokallag,
        through='Rolle', related_name="rollemedlem", blank=True, null=True)

    user = models.OneToOneField(User, verbose_name=_("innloggingsbrukar"),
                                blank=True, null=True)
    oppretta = models.DateTimeField(_("oppretta"), auto_now_add=True)
    oppdatert = models.DateTimeField(_("oppdatert"), auto_now=True)

    # Managers
    objects = MedlemManager()

    class Meta:
        verbose_name_plural = "medlem"
        ordering = ['-id']

    def __unicode__(self):
        return " ".join([ x for x in [self.fornamn, self.mellomnamn, self.etternamn] if x ])
    __unicode__.admin_order_field = 'etternamn'

    def er_innmeldt(self):
        if (self.utmeldt_dato):
            return self.utmeldt_dato > date.today()
        return True
    er_innmeldt.short_description = _("Innmeld")
    er_innmeldt.boolean = True<commit_msg>Kvart medlem har eit felt: har_verva med folki dei har verva<commit_after># -*- coding: utf-8 -*-
# vim: ts=4 sts=4 expandtab ai
from datetime import date, datetime
from django.db import models, transaction
from django.db.models import Q
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
#from emencia.django.newsletter.mailer import mailing_started

from django.contrib.auth.models import User
from django.template.defaultfilters import slugify
from medlemssys import mod10


class Val(models.Model):
    tittel = models.CharField(_("kort forklaring"), max_length=100, unique=True)
    forklaring = models.TextField(_("lang forklaring"), blank=True)

    class Meta:
        verbose_name_plural = "val"

    def __unicode__(self):
        return self.tittel

class Lokallag(models.Model):
    namn = models.CharField(_("namn"), max_length=255, unique=True)
    slug = models.SlugField(_("nettnamn"), max_length=255, unique=True, blank=True)
    fylkeslag = models.CharField(_("fylkeslag"), max_length=255)
    distrikt = models.CharField(_("distrikt"), max_length=255)
    andsvar = models.CharField(_("andsvar"), max_length=255)
    lokalsats = models.IntegerField(_("lokalsats"), default=0)

    aktivt = models.BooleanField(_("aktivt"), default=True)

    class Meta:
        verbose_name_plural = "lokallag"
        ordering = ['-aktivt', 'namn']

    def num_medlem(self):
        return self.medlem_set.betalande().count()
    num_medlem.short_description = "medlemstal"

    def save(self, *args, **kwargs):
        if not self.slug or self.slug == "":
            self.slug = slugify(self.namn)
        super(Lokallag, self).save(*args, **kwargs)

    def __unicode__(self):
        return self.namn

class Innmeldingstype(models.Model):
    namn = models.CharField(_("namn"), max_length=255, unique=True)

    class Meta:
        verbose_name_plural = "innmeldingstypar"

    def __unicode__(self):
        return self.namn

class Nemnd(models.Model):
    namn = models.CharField(_("namn"), max_length=64)
    start = models.DateField(_("start"), default=date.today)
    stopp = models.DateField(_("stopp"))

    class Meta:
        verbose_name_plural = "nemnder"

    def __unicode__(self):
        return u"%s (%s–%s)" % (self.namn, self.start.strftime("%y"),
                                self.stopp.strftime("%y"))

class Tilskiping(models.Model):
    namn = models.CharField(_("namn"), max_length=64)
    slug = models.SlugField(_("kortnamn"), max_length=64)
    start = models.DateField(_("start"), default=date.today)
    stopp = models.DateField(_("stopp"))

    class Meta:
        verbose_name_plural = "tilskipingar"

    def num_deltakarar(self):
        return self.medlem_set.count()
    num_deltakarar.short_description = _("deltakarar")

    def __unicode__(self):
        return u"%s (%s)" % (self.namn, self.start.strftime("%Y"))
    __unicode__.admin_order_field = 'namn'

STATUSAR = (
    ("M", "Vanleg medlem"),
    ("I", "Infoperson"),
    ("L", "Livstidsmedlem"),
)

INNMELDINGSTYPAR = (
    ("H", "Heimesida"),
    ("M", "Målferd"),
    ("V", "Vervekampanje"),
    ("F", "Flygeblad"),
    ("L", "Lagsskiping/årsmøte"),
    ("D", "Direkteverva"),
    ("S", "SMS"),
    ("O", "Vitjing"),
    ("A", "Anna"),
    ("U", "--"),
)

class MedlemManager(models.Manager):
    def alle(self):
        if getattr(self, 'core_filters', None):
            qs = super(MedlemManager, self).get_query_set().filter(**self.core_filters)
        else:
            qs = super(MedlemManager, self).get_query_set()

        return qs

    def ikkje_utmelde(self, year=date.today().year):
        return self.alle().filter(
            Q(utmeldt_dato__isnull=True) | Q(utmeldt_dato__gt=date(year+1, 1, 1))
        )

    def betalande(self, year=date.today().year):
        return self.ikkje_utmelde(year) \
            .filter(
                giroar__oppretta__gte=date(year, 1, 1),
                giroar__oppretta__lt=date(year+1, 1, 1),
                giroar__innbetalt__isnull=False
            ).distinct()

    def teljande(self, year=date.today().year):
        return self.betalande(year) \
            .filter(
                fodt__gte = year - 25
            )

    def interessante(self, year=date.today().year):
        """Viser berre 'interessante' medlem, dei som har betalt i år eller i fjor."""
        return self.ikkje_utmelde(year) \
            .filter(
                giroar__oppretta__gte=date(year-1, 1, 1),
                giroar__oppretta__lt=date(year+1, 1, 1),
                giroar__innbetalt__isnull=False
            ).distinct()

    def get_query_set(self):
        return self.alle()


class Medlem(models.Model):
    fornamn = models.CharField(_("fornamn"), max_length=255)
    mellomnamn = models.CharField(_("mellomnamn"), max_length=255,
            blank=True, null=True)
    etternamn = models.CharField(_("etternamn"), max_length=255)
    fodt = models.IntegerField(_(u"født"), max_length=4,
            blank=True, null=True)
    # Hadde denne før, men importering gjorde folk so gamle då: default=date.today().year - 17,

    # Kontakt
    postnr = models.CharField(_("postnr"), max_length=4)
    epost = models.CharField(_("epost"), max_length=255,
            blank=True, null=True)
    postadr = models.CharField(_("postadresse"), max_length=255,
            blank=True, null=True)
    ekstraadr = models.CharField(_("ekstraadresse"), max_length=255,
            blank=True, null=True)
    mobnr = models.CharField(_("mobiltelefon"), max_length=50,
            blank=True, null=True)
    heimenr = models.CharField(_("heimetelefon"), max_length=50,
            blank=True, null=True)

    # Om medlemen
    gjer = models.CharField(_("gjer"), max_length=255,
        blank=True, null=True)
    kjon = models.CharField(_("kjønn"), max_length=1, choices=(("M", "Mann"),
        ("K", "Kvinne"), ("U", "Udefinert")), default="U")
    merknad = models.TextField(_("merknad"), blank=True, default="")

    # Spesialfelt, denormalisert felt frå Giro
    _siste_medlemspengar = models.DateField(blank=True, null=True,
            editable=False, default=None)

    # Medlemsskapet
    innmeldt_dato = models.DateField(_("innmeldt"), default=date.today)
    utmeldt_dato = models.DateField(_("utmeldt"), blank=True, null=True,
            default=None)
    status = models.CharField(_("medlstatus"), max_length=1,
            choices=STATUSAR, default="M")
    innmeldingstype = models.CharField(_("innmtype"), max_length=1,
            choices=INNMELDINGSTYPAR, default='U')
    innmeldingsdetalj = models.CharField(_("detalj om innmelding"), max_length=255,
        blank=True, null=True, help_text=_("Skriv inn vervemedlem i hakeparantesar ([1234])"))
    verva_av = models.ForeignKey('Medlem', related_name='har_verva', blank=True, null=True)

    # Tilkopla felt
    lokallag = models.ForeignKey(Lokallag, blank=True, null=True)
    val = models.ManyToManyField(Val, blank=True, null=True)
    nemnd = models.ManyToManyField(Nemnd, blank=True, null=True)
    tilskiping = models.ManyToManyField(Tilskiping, blank=True, null=True)
    lokallagsrolle = models.ManyToManyField(Lokallag,
        through='Rolle', related_name="rollemedlem", blank=True, null=True)

    user = models.OneToOneField(User, verbose_name=_("innloggingsbrukar"),
                                blank=True, null=True)
    oppretta = models.DateTimeField(_("oppretta"), auto_now_add=True)
    oppdatert = models.DateTimeField(_("oppdatert"), auto_now=True)

    # Managers
    objects = MedlemManager()

    class Meta:
        verbose_name_plural = "medlem"
        ordering = ['-id']

    def __unicode__(self):
        return " ".join([ x for x in [self.fornamn, self.mellomnamn, self.etternamn] if x ])
    __unicode__.admin_order_field = 'etternamn'

    def er_innmeldt(self):
        if (self.utmeldt_dato):
            return self.utmeldt_dato > date.today()
        return True
    er_innmeldt.short_description = _("Innmeld")
    er_innmeldt.boolean = True
{'fraction_non_alphanumeric': 0.13989378319275225, 'fraction_numerical': 0.010996563573883162, 'mean_word_length': 3.2705442902881536, 'pattern_counts': {'":': 2, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6092064', 'n_tokens_mistral': 5731, 'n_tokens_neox': 5456, 'n_words': 1004}