def lagMedlem(alder, utmeldt=False, har_betalt=False, name=""): year = datetime.date.today().year 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") if (utmeldt): medlem.utmeldt_dato = datetime.date.today() medlem.save() if (har_betalt): g = Giro(medlem=medlem, belop=80, innbetalt_belop=80, innbetalt=datetime.datetime.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_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 lag_giroar(modeladmin, request, queryset): from medlem.models import Giro year = datetime.date.today().year if not request.POST.get('post'): opts = modeladmin.model._meta app_label = opts.app_label n_utmelde = queryset.filter(utmeldt_dato__isnull=False).count() n_allereie_giro = queryset.filter(giroar__gjeldande_aar=year).count() title = _("Lag giroar") context = { "title": title, "queryset": queryset, "opts": opts, "app_label": app_label, "action_checkbox_name": helpers.ACTION_CHECKBOX_NAME, "n_utmelde": n_utmelde, "n_allereie_giro": n_allereie_giro, } return TemplateResponse(request, "admin/lag_giroar.html", context, current_app=modeladmin.admin_site.name) if not request.POST.get("ink-utmeld"): queryset = queryset.filter(utmeldt_dato__isnull=True) queryset = queryset.exclude(giroar__gjeldande_aar=year) with reversion.create_revision(): reversion.set_comment("Opprett giroar admin action") reversion.set_user(request.user) for m in queryset: g = Giro(belop=request.POST.get('belop'), medlem=m) g.save()
def import_bet(self, force_update): liste = csv.reader(open(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: transaction.commit() 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 = parse(rad[4]) g.innbetalt_belop = g.belop else: logger.warning(u"Ikkje innbetalt! {0}, {1}".format(g.medlem, rad)) try: g.oppretta = 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)