Ejemplo n.º 1
0
def test_SEPASammlerExportView_2(browser):
    """Testing SEPASammler Energieabrechnung Sammelüberweisung XML export."""
    from sw.allotmentclub import SEPASammler, SEPASammlerEntry, BookingKind
    from sw.allotmentclub import Member
    import datetime
    import lxml.etree
    kind = BookingKind.find_or_create(
        title='Energieabrechnung', shorttitle='ENAB')
    sammler = SEPASammler.create(
        booking_day='2018-03-31', accounting_year=2018, kind=kind,
        is_ueberweisung=True)
    for iban, value in (('DE12500105170648489890', 2540500),
                        ('EE342200221034126658', 8213400)):
        SEPASammlerEntry.find_or_create(
            sepasammler=sammler, value=value,
            member=Member.create(
                lastname='Müller', direct_debit=True, iban=iban,
                bic='NOLADE21HAL',
                direct_debit_date=datetime.date(2017, 1, 1)))
    setUp()
    browser.login()
    browser.open(
        'http://localhost/accounts/sepa_sammler/{}/export'.format(sammler.id))
    doc = lxml.etree.fromstring(browser.contents.encode('utf-8'))
    assert '1075.39' == doc.find('.//CtrlSum', namespaces=doc.nsmap).text
    assert '2' == doc.find('.//NbOfTxs', namespaces=doc.nsmap).text
    assert ['254.05', '821.34'] == [
        d.text for d in doc.findall('.//InstdAmt', namespaces=doc.nsmap)
    ]
Ejemplo n.º 2
0
def test_SEPASammlerExportView_1(browser):
    """Testing SEPASammler Energieabschlag 1 XML export."""
    from sw.allotmentclub import SEPASammler, SEPASammlerEntry, BookingKind
    from sw.allotmentclub import Member
    import datetime
    import lxml.etree
    kind = BookingKind.find_or_create(
        title='Energieabschlag I', shorttitle='ENA1')
    sammler = SEPASammler.create(
        booking_day='2018-03-31', accounting_year=2018, kind=kind)
    for iban, value in (('DE12500105170648489890', 2540500),
                        ('EE342200221034126658', 8213400)):
        SEPASammlerEntry.find_or_create(
            sepasammler=sammler, value=value,
            member=Member.create(
                lastname='Müller', direct_debit=True, iban=iban,
                bic='NOLADE21HAL',
                direct_debit_date=datetime.date(2017, 1, 1)))
    setUp()
    browser.login()
    browser.open(
        'http://localhost/accounts/sepa_sammler/{}/export'.format(sammler.id))
    doc = lxml.etree.fromstring(browser.contents.encode('utf-8'))
    assert '1075.39' == doc.find('.//CtrlSum', namespaces=doc.nsmap).text
    assert 'Mueller, ' == doc.findall('.//Nm', namespaces=doc.nsmap)[-1].text
    assert 'MUELLER' == doc.find('.//MndtId', namespaces=doc.nsmap).text
Ejemplo n.º 3
0
def test_SEPASammlerUpdateView_2(browser):
    """Testing SEPASammler Energieabschlag 2."""
    from sw.allotmentclub import SEPASammlerEntry
    sammler = setUpSEPASammlerUpdate('ENA1')
    assert len(SEPASammlerEntry.query().all()) == 0
    browser.login()
    browser.open(
        'http://localhost/accounts/sepa_sammler/{}/update'.format(sammler.id))
    assert len(SEPASammlerEntry.query().all()) == 2
    SEPASammlerEntry.query().filter(SEPASammlerEntry.value == 821300).one()
Ejemplo n.º 4
0
 def update(self):
     if not self.context.kind:
         self.result = {
             'status': 'error',
             'message': 'Art muss gesetzt sein.'
         }
         return
     for entry in (SEPASammlerEntry.query().filter(
             SEPASammlerEntry.sepasammler == self.context).all()):
         entry.delete()
     if self.context.kind.shorttitle in ('ENA1', 'ENA2'):
         self.advancepay()
     elif self.context.kind.shorttitle == 'ENAB':
         self.energieabrechnung()
     elif self.context.kind.shorttitle == 'GRUB':
         self.grundsteuerb()
     elif self.context.kind.shorttitle == 'ABWA':
         self.abwasser()
     elif self.context.kind.shorttitle == 'NARB':
         self.arbeitsstunden()
     elif self.context.kind.shorttitle == 'BEIT':
         self.mitgliedsbeitrag()
     else:
         self.result = {
             'status': 'error',
             'message':
             '{} nicht unterstützt'.format(self.context.kind.title)
         }
         return
     self.result = {
         'status': 'success',
         'message':
         'SEPASammler {} berechnet.'.format(self.context.kind.title)
     }
Ejemplo n.º 5
0
 def mitgliedsbeitrag(self):
     for booking in (Booking.query().filter(
             Booking.accounting_year == self.context.accounting_year).
                     filter(Booking.kind == self.context.kind)):
         SEPASammlerEntry().find_or_create(sepasammler=self.context,
                                           value=0 - booking.value,
                                           member=booking.member)
Ejemplo n.º 6
0
 def abwasser(self):
     values = Abwasser.query().all()
     for value in values:
         member = value.parcel.allotment.member
         if member.direct_debit:
             SEPASammlerEntry().find_or_create(sepasammler=self.context,
                                               value=value.value,
                                               member=member)
Ejemplo n.º 7
0
 def grundsteuerb(self):
     values = GrundsteuerB.query().all()
     for value in values:
         member = value.parcel.allotment.member
         if member.direct_debit:
             SEPASammlerEntry().find_or_create(
                 sepasammler=self.context,
                 value=value.value,
                 member=value.parcel.allotment.member)
Ejemplo n.º 8
0
 def advancepay(self):
     values = (Booking.query().filter(
         Booking.accounting_year == self.context.accounting_year).filter(
             Booking.kind == self.context.kind).all())
     for value in values:
         if value.value < 0:
             if value.member and value.member.direct_debit:
                 SEPASammlerEntry().find_or_create(sepasammler=self.context,
                                                   value=0 - value.value,
                                                   member=value.member)
Ejemplo n.º 9
0
 def arbeitsstunden(self):
     for member in self.active_members.all():
         bookings = (Booking.query().filter(
             Booking.accounting_year == self.context.accounting_year).
                     filter(Booking.kind == self.context.kind).filter(
                         Booking.member == member).all())
         value = 0
         for booking in bookings:
             value -= booking.value
         if value:
             SEPASammlerEntry().find_or_create(sepasammler=self.context,
                                               value=value,
                                               member=member)
Ejemplo n.º 10
0
 def energieabrechnung(self):
     values = (Booking.query().filter(
         Booking.accounting_year == self.context.accounting_year).filter(
             Booking.kind == self.context.kind)).all()
     if self.context.is_ueberweisung:
         values = [v for v in values if v.value > 0]
     else:
         values = [v for v in values if v.value <= 0]
     for value in values:
         if value.member.direct_debit:
             SEPASammlerEntry().find_or_create(
                 sepasammler=self.context,
                 value=(value.value if self.context.is_ueberweisung else 0 -
                        value.value),
                 member=value.member)
Ejemplo n.º 11
0
def get_incoming_raw(value, request=None, year=None):
    from sqlalchemy.sql.expression import false
    year = year if year else get_selected_year()
    kind = BookingKind.get(value)
    query = (Booking.query().join(Member).filter(Booking.kind == kind).filter(
        Booking.accounting_year == year).filter(
            Booking.ignore_in_reporting == false()).filter(
                Booking.is_splitted == false()).filter(
                    Booking.banking_account_id == 1).filter(
                        Booking.booking_text != 'SAMMEL-LS-EINZUG').filter(
                            ~Booking.purpose.like('%ANZAHL 00000%')))
    sammler = (SEPASammlerEntry.query().join(SEPASammler).join(Member).filter(
        SEPASammler.kind == kind).filter(
            SEPASammlerEntry.ignore_in_reporting == false()).filter(
                SEPASammler.accounting_year == year))
    result = query.all() + sammler.all()
    if kind.shorttitle == 'ENAB':
        result += (get_incoming_raw(
            BookingKind.query().filter_by(shorttitle='ENA1').one().id, request,
            year) + get_incoming_raw(
                BookingKind.query().filter_by(shorttitle='ENA2').one().id,
                request, year))
    return result