示例#1
0
def lagMedlem(alder, utmeldt=False, har_betalt=False, name="", **kwargs):
    if not name:
        name = str(alder)
        if (har_betalt):
            name += "-betalt"
        if (utmeldt):
            name += "-utmeld"

    medlem = Medlem(fornamn=name,
                    etternamn="E",
                    fodt=year - alder,
                    postnr="5000",
                    **kwargs)

    if (utmeldt):
        medlem.utmeldt_dato = datetime.date.today()

    medlem.save()

    if (har_betalt):
        g = Giro(medlem=medlem,
                 belop=80,
                 innbetalt_belop=80,
                 innbetalt=timezone.now())
        g.save()

    return medlem
示例#2
0
 def test_utmeldt_add_unpaid_giro(self):
     # Adding new (unpaid) giro to utmeldt member doesn't
     # actually get saved
     m = lagMedlem(29, har_betalt=True, utmeldt=True)
     g = Giro(medlem=m, belop=10)
     g.save()
     self.assertEqual([g.belop for g in m.giroar.all()], [80])
示例#3
0
 def test_utmeldt_add_unpaid_giro(self):
     # Adding new (unpaid) giro to utmeldt member doesn't
     # actually get saved
     m = lagMedlem(29, har_betalt=True, utmeldt=True)
     g = Giro(medlem=m, belop=10)
     g.save()
     self.assertEqual(
         [g.belop for g in m.giroar.all()], [80])
示例#4
0
 def test_utmeldt_delete_unpaid_giro_on_denormalized(self):
     # Unpaid giros are deleted after member is utmeldt and
     # update_denormalized_fields has run
     m = lagMedlem(29, har_betalt=True)
     g = Giro(medlem=m, belop=10)
     g.save()
     self.assertEqual([g.belop for g in m.giroar.all()], [10, 80])
     m.utmeldt_dato = datetime.date.today()
     m.save()
     models.update_denormalized_fields()
     self.assertEqual([g.belop for g in m.giroar.all()], [80])
示例#5
0
 def test_utmeldt_delete_unpaid_giro_on_denormalized(self):
     # Unpaid giros are deleted after member is utmeldt and
     # update_denormalized_fields has run
     m = lagMedlem(29, har_betalt=True)
     g = Giro(medlem=m, belop=10)
     g.save()
     self.assertEqual(
         [g.belop for g in m.giroar.all()], [10, 80])
     m.utmeldt_dato = datetime.date.today()
     m.save()
     models.update_denormalized_fields()
     self.assertEqual(
         [g.belop for g in m.giroar.all()], [80])
示例#6
0
def lagMedlem(alder, utmeldt=False, har_betalt=False, name="", **kwargs):
    if not name:
        name = str(alder)
        if (har_betalt):
             name += "-betalt"
        if (utmeldt):
             name += "-utmeld"

    medlem = Medlem(fornamn=name, etternamn="E", fodt=year - alder,
                    postnr="5000", **kwargs)

    if (utmeldt):
        medlem.utmeldt_dato = datetime.date.today()

    medlem.save()

    if (har_betalt):
        g = Giro(medlem=medlem,
                 belop=80,
                 innbetalt_belop=80,
                 innbetalt=timezone.now())
        g.save()

    return medlem
示例#7
0
文件: nmu.py 项目: odinho/medlemssys
    def import_bet(self, bet_fn=None, force_update=False):
        liste = csv.reader(open(bet_fn or self.bet_fil))
        liste.next()
        try:
            highest_pk = Giro.objects.all().order_by("-pk")[0].pk
        except:
            highest_pk = -1

        for num, rad in enumerate(liste):
            if num % 1000 == 0 and num != 0:
                yield unicode(num)
            for i, r in enumerate(rad):
                rad[i] = r.decode('utf-8')

            # Hopp over ferdig-importerte betalingar
            if not force_update and int(rad[0]) < highest_pk:
                continue

            if not force_update and Giro.objects.filter(pk=rad[0]).exists():
                continue

            g = Giro(pk=rad[0], hensikt='P', status='F')

            # Finn andsvarleg medlem
            try:
                g.medlem = Medlem.objects.alle().get(pk=rad[1])
            except (Medlem.DoesNotExist, ValueError):
                logger.warning(u"Fann ikkje medlem %s. %s " % (rad[1], rad))
                continue

            # Kor mykje pengar inn?
            try:
                g.belop = float(re.sub(r'[\xa0\s]+', '',
                                       rad[3].replace(',', '.')))
            except ValueError:
                g.belop = 0
                logger.warning(u"Beløp = 0: {0}, {1}".format(g.medlem, rad))

            if len(rad[2]) > 3:
                g.innbetalt = dt(rad[2])
                g.innbetalt_belop = g.belop
            else:
                logger.warning(u"Ikkje innbetalt! {0}, {1}".format(g.medlem, rad))

            g.oppretta = g.innbetalt
            if not g.oppretta:
                logger.warning(u"Ingen oppretta %s %s %s" % (g, g.medlem, rad))
            g.gjeldande_aar = g.oppretta and g.oppretta.year or datetime.datetime.now().year
            g.desc = rad[4]

            g.save()

            if num < 99:
                yield unicode(g)
示例#8
0
文件: nmu.py 项目: odinho/medlemssys
    def import_bet(self, bet_fn=None, force_update=False):
        liste = csv.reader(open(bet_fn or self.bet_fil))
        liste.next()
        try:
            highest_pk = Giro.objects.all().order_by("-pk")[0].pk
        except:
            highest_pk = -1

        for num, rad in enumerate(liste):
            if num % 1000 == 0 and num != 0:
                yield unicode(num)

            # Hopp over ferdig-importerte betalingar
            if not force_update and int(rad[7]) < highest_pk:
                continue

            if not force_update and Giro.objects.filter(pk=rad[7]).exists():
                continue

            g = Giro(pk=rad[7], hensikt='P', status='F')

            # Finn andsvarleg medlem
            try:
                g.medlem = Medlem.objects.alle().get(pk=rad[0])
            except Medlem.DoesNotExist:
                logger.warning(u"Fann ikkje medlem %s. %s " % (rad[0], rad))
                continue

            # Kva konto
            if rad[2].upper() in [ k[0] for k in KONTI ]:
                g.konto = rad[2].upper()
            elif rad[1].upper() == 'L':
                # Livstidsmedlem
                if not g.medlem.status == 'L':
                    g.medlem.status = 'L'
                    g.medlem.save()
                    logger.warning(u"Oppdaterte %s til L. %s " % (g.medlem, rad))
                logger.warning(u"Hopper over %s (L). %s " % (g.medlem, rad))
                continue
            elif rad[6].isdigit():
                # Viss det er pengar gjeng me ut i frå at det er snakk om kasse
                g.konto = 'K'
                logger.warning(u"Gjettar at pengar (%s) er til KASSE %s -- %s" % (rad[6], g.medlem, rad))
            else:
                logger.warning(u"Kjenner ikkje att konto: {0}, {1}".format(g.medlem, rad))
                continue

            # Kor mykje pengar inn?
            try:
                g.belop = float(rad[6])
            except ValueError:
                g.belop = 0
                logger.warning(u"Beløp = 0: {0}, {1}".format(g.medlem, rad))

            if len(rad[4]) > 3:
                g.innbetalt = dt(rad[4])
                g.innbetalt_belop = g.belop
            else:
                logger.warning(u"Ikkje innbetalt! {0}, {1}".format(g.medlem, rad))

            try:
                g.oppretta = aware(datetime.datetime(int(rad[5]), 1, 1, 0, 0))
            except ValueError:
                logger.warning(u"Gjettar oppretta==innbetalt: {0}, {1}".format(g.medlem, rad))
                g.oppretta = g.innbetalt

            g.gjeldande_aar = g.oppretta.year

            if rad[3] != "MEDLEMSKONTO":
                g.desc = rad[3]

            g.save()

            if num < 99:
                yield unicode(g)
示例#9
0
    def import_bet(self, bet_fn=None, force_update=False):
        liste = csv.reader(open(bet_fn or self.bet_fil))
        liste.next()
        try:
            highest_pk = Giro.objects.all().order_by("-pk")[0].pk
        except:
            highest_pk = -1

        for num, rad in enumerate(liste):
            if num % 1000 == 0 and num != 0:
                yield unicode(num)
            for i, r in enumerate(rad):
                rad[i] = r.decode('utf-8')

            # Hopp over ferdig-importerte betalingar
            if not force_update and int(rad[0]) < highest_pk:
                continue

            if not force_update and Giro.objects.filter(pk=rad[0]).exists():
                continue

            g = Giro(pk=rad[0], hensikt='P', status='F')

            # Finn andsvarleg medlem
            try:
                g.medlem = Medlem.objects.alle().get(pk=rad[1])
            except (Medlem.DoesNotExist, ValueError):
                logger.warning(u"Fann ikkje medlem %s. %s " % (rad[1], rad))
                continue

            # Kor mykje pengar inn?
            try:
                g.belop = float(
                    re.sub(r'[\xa0\s]+', '', rad[3].replace(',', '.')))
            except ValueError:
                g.belop = 0
                logger.warning(u"Beløp = 0: {0}, {1}".format(g.medlem, rad))

            if len(rad[2]) > 3:
                g.innbetalt = dt(rad[2])
                g.innbetalt_belop = g.belop
            else:
                logger.warning(u"Ikkje innbetalt! {0}, {1}".format(
                    g.medlem, rad))

            g.oppretta = g.innbetalt
            if not g.oppretta:
                logger.warning(u"Ingen oppretta %s %s %s" % (g, g.medlem, rad))
            g.gjeldande_aar = g.oppretta and g.oppretta.year or datetime.datetime.now(
            ).year
            g.desc = rad[4]

            g.save()

            if num < 99:
                yield unicode(g)
示例#10
0
    def import_bet(self, bet_fn=None, force_update=False):
        liste = csv.reader(open(bet_fn or self.bet_fil))
        liste.next()
        try:
            highest_pk = Giro.objects.all().order_by("-pk")[0].pk
        except:
            highest_pk = -1

        for num, rad in enumerate(liste):
            if num % 1000 == 0 and num != 0:
                yield unicode(num)

            # Hopp over ferdig-importerte betalingar
            if not force_update and int(rad[7]) < highest_pk:
                continue

            if not force_update and Giro.objects.filter(pk=rad[7]).exists():
                continue

            g = Giro(pk=rad[7], hensikt='P', status='F')

            # Finn andsvarleg medlem
            try:
                g.medlem = Medlem.objects.alle().get(pk=rad[0])
            except Medlem.DoesNotExist:
                logger.warning(u"Fann ikkje medlem %s. %s " % (rad[0], rad))
                continue

            # Kva konto
            if rad[2].upper() in [k[0] for k in KONTI]:
                g.konto = rad[2].upper()
            elif rad[1].upper() == 'L':
                # Livstidsmedlem
                if not g.medlem.status == 'L':
                    g.medlem.status = 'L'
                    g.medlem.save()
                    logger.warning(u"Oppdaterte %s til L. %s " %
                                   (g.medlem, rad))
                logger.warning(u"Hopper over %s (L). %s " % (g.medlem, rad))
                continue
            elif rad[6].isdigit():
                # Viss det er pengar gjeng me ut i frå at det er snakk om kasse
                g.konto = 'K'
                logger.warning(
                    u"Gjettar at pengar (%s) er til KASSE %s -- %s" %
                    (rad[6], g.medlem, rad))
            else:
                logger.warning(u"Kjenner ikkje att konto: {0}, {1}".format(
                    g.medlem, rad))
                continue

            # Kor mykje pengar inn?
            try:
                g.belop = float(rad[6])
            except ValueError:
                g.belop = 0
                logger.warning(u"Beløp = 0: {0}, {1}".format(g.medlem, rad))

            if len(rad[4]) > 3:
                g.innbetalt = dt(rad[4])
                g.innbetalt_belop = g.belop
            else:
                logger.warning(u"Ikkje innbetalt! {0}, {1}".format(
                    g.medlem, rad))

            try:
                g.oppretta = aware(datetime.datetime(int(rad[5]), 1, 1, 0, 0))
            except ValueError:
                logger.warning(u"Gjettar oppretta==innbetalt: {0}, {1}".format(
                    g.medlem, rad))
                g.oppretta = g.innbetalt

            g.gjeldande_aar = g.oppretta.year

            if rad[3] != "MEDLEMSKONTO":
                g.desc = rad[3]

            g.save()

            if num < 99:
                yield unicode(g)
示例#11
0
def lagTestMedlemar(**extra_kwargs):
    medlemar = {}

    def opprett_og_lagra_medlem(*args, **kwargs):
        kwargs.update(extra_kwargs)
        medlem = lagMedlem(*args, **kwargs)
        medlemar[medlem.fornamn] = medlem
        return medlem

    opprett_og_lagra_medlem(25, utmeldt=False, har_betalt=False)
    opprett_og_lagra_medlem(25, utmeldt=True, har_betalt=False)
    opprett_og_lagra_medlem(25, utmeldt=False, har_betalt=True)
    opprett_og_lagra_medlem(25, utmeldt=True, har_betalt=True)

    opprett_og_lagra_medlem(12, utmeldt=False, har_betalt=False)
    opprett_og_lagra_medlem(12, utmeldt=True, har_betalt=False)
    opprett_og_lagra_medlem(12, utmeldt=False, har_betalt=True)
    opprett_og_lagra_medlem(12, utmeldt=True, har_betalt=True)

    opprett_og_lagra_medlem(26, utmeldt=False, har_betalt=False)
    opprett_og_lagra_medlem(26, utmeldt=True, har_betalt=False)
    opprett_og_lagra_medlem(26, utmeldt=False, har_betalt=True)
    opprett_og_lagra_medlem(26, utmeldt=True, har_betalt=True)

    m = opprett_og_lagra_medlem(23, name="23-betaltifjor")
    m.innmeldt_dato = datetime.date(year - 2, 1, 1)
    Giro(medlem=m,
         belop=80,
         innbetalt_belop=80,
         gjeldande_aar=year - 1,
         oppretta=datetime.date(year - 1, 1, 1),
         innbetalt=datetime.date(year - 1, 1, 1)).save()
    m.save()

    m = opprett_og_lagra_medlem(23, name="23-betaltiforfjor")
    m.innmeldt_dato = datetime.date(year - 2, 1, 1)
    Giro(medlem=m,
         belop=80,
         innbetalt_belop=80,
         gjeldande_aar=year - 2,
         oppretta=datetime.date(year - 2, 1, 1),
         innbetalt=datetime.date(year - 2, 1, 1)).save()
    m.save()

    m = opprett_og_lagra_medlem(23, name="23-innmeldtifjor")
    m.innmeldt_dato = datetime.date(year - 1, 1, 1)
    Giro(medlem=m,
         belop=80,
         innbetalt_belop=0,
         gjeldande_aar=year - 1,
         oppretta=datetime.date(year - 1, 1, 1)).save()
    m.save()

    m = opprett_og_lagra_medlem(23, name="23-innmeldtifjor-utmeldtiaar")
    m.innmeldt_dato = datetime.date(year - 1, 1, 1)
    m.utmeldt_dato = datetime.date(year, 1, 1)
    Giro(medlem=m,
         belop=80,
         innbetalt_belop=0,
         gjeldande_aar=year - 1,
         oppretta=datetime.date(year - 1, 1, 1)).save()
    m.save()

    m = opprett_og_lagra_medlem(23, name="23-innmeldtiforfjor-utmeldtnesteaar")
    m.innmeldt_dato = datetime.date(year - 2, 1, 1)
    m.utmeldt_dato = datetime.date(year + 1, 1, 1)
    m.save()

    m = opprett_og_lagra_medlem(23, name="23-betaltifjor-utmeldtnesteaar")
    m.innmeldt_dato = datetime.date(year - 2, 1, 1)
    m.utmeldt_dato = datetime.date(year + 1, 1, 1)
    Giro(medlem=m,
         belop=80,
         innbetalt_belop=80,
         gjeldande_aar=year - 1,
         oppretta=datetime.date(year - 1, 1, 1),
         innbetalt=datetime.date(year - 1, 1, 1)).save()
    m.save()

    m = opprett_og_lagra_medlem(23,
                                har_betalt=True,
                                name="23-betalt-utmeldtnesteaar")
    m.utmeldt_dato = datetime.date(year + 1, 1, 2)
    m.save()

    # innmeldt og utmeldt i fjor
    # innmeldt i fjor, men utmeldt no
    # utmeldt til neste år

    return medlemar