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
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])
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])
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])
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])
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)
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)
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)
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)
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