import collections
import decimal
import functools
import re
import bs4
from .. import strparse
@@ -10,11 +11,8 @@ STATUS_PAID = 'Payment'
STATUS_REFUNDED = 'Refund'
class Invoice2017:
STANDARD_TICKET_RBI = decimal.Decimal('42.50')
DISCOUNT_TICKET_RBI = STANDARD_TICKET_RBI / 2
STANDARD_SHIRT_RBI = decimal.Decimal('25.50')
DISCOUNT_SHIRT_RBI = STANDARD_SHIRT_RBI
CURRENCY = 'USD'
ITEM_RE = re.compile(r'(?:^|\()(Ticket|T-Shirt) - ')
@classmethod
def _elem_stripped_string(cls, elem):
@@ -54,8 +52,10 @@ class Invoice2017:
'invoice_date': self.invoice_date,
'invoice_id': self.invoice_id,
'payee': self.payee,
'shirt_price': self.shirt_price,
'shirt_rate': self.shirt_rate,
'shirts_sold': self.shirts_sold,
'ticket_price': self.ticket_price,
'ticket_rate': self.ticket_rate,
'tickets_sold': self.tickets_sold,
}
@@ -78,23 +78,36 @@ class Invoice2017:
def _read_invoice_items(self, table, first_row_text, rows_text):
self.amount = decimal.Decimal(0)
self.tickets_sold = decimal.Decimal(0)
self.ticket_rate = self.STANDARD_TICKET_RBI
self.ticket_price = decimal.Decimal(0)
self.ticket_rate = ''
self.shirts_sold = decimal.Decimal(0)
self.shirt_rate = self.STANDARD_SHIRT_RBI
self.shirt_price = decimal.Decimal(0)
self.shirt_rate = ''
for description, qty, unit_price, total in rows_text:
if qty is None:
continue
total = strparse.currency_decimal(total)
self.amount += total
if description.startswith('Ticket - '):
match = self.ITEM_RE.search(description)
try:
item_type = match.group(1)
except AttributeError:
qty = int(qty)
unit_price = strparse.currency_decimal(unit_price)
if item_type == 'Ticket':
if total > 0:
self.tickets_sold += int(qty)
elif description.startswith('Early Bird ('):
self.ticket_rate = self.DISCOUNT_TICKET_RBI
elif description.startswith('T-Shirt - '):
self.shirts_sold += int(qty)
elif description.startswith('T-shirts complimentary '):
self.shirts_sold -= int(qty)
self.tickets_sold += qty
self.ticket_price += unit_price
self.ticket_rate = description
elif item_type == 'T-Shirt':
if description.startswith('T-shirts complimentary '):
self.shirts_sold -= qty
else:
self.shirts_sold += qty
self.shirt_price += unit_price
self.shirt_rate = description
def _read_invoice_activity(self, table, first_row_text, rows_text):
self.actions = [{