def test_export_invoice(client): responses.add(responses.GET, DAILY_ECB_URL, body=EXAMPLE_ECB_DAILY_XML) Email.objects.create(code='purchase-complete') fare = FareFactory() user = make_user(is_staff=True) client.login(email=user.email, password='******') with freeze_time('2018-05-05'): invoice1 = create_order_and_invoice(user.assopy_user, fare, keep_as_placeholder=True) query_dict = QueryDict(mutable=True) query_dict['start_date'] = date(2018, 1, 1) query_dict['end_date'] = date.today() query_string = query_dict.urlencode() response = client.get( reverse('debug_panel_invoice_export_for_tax_report_2018') + '?' + query_string) assert response.status_code == 200 assert response['content-type'].startswith('text/html') assert '<tr id="invoice_{0}">'.format(invoice1.id) in response.content
def test_export_invoice_accounting_json(client): responses.add(responses.GET, DAILY_ECB_URL, body=EXAMPLE_ECB_DAILY_XML) Email.objects.create(code='purchase-complete') fare = FareFactory() user = make_user(is_staff=True) client.login(email=user.email, password='******') with freeze_time('2018-05-05'): invoice1 = create_order_and_invoice(user.assopy_user, fare, keep_as_placeholder=True) query_dict = QueryDict(mutable=True) query_dict['start_date'] = date(2018, 1, 1) query_dict['end_date'] = date.today() query_string = query_dict.urlencode() response = client.get( reverse('debug_panel_invoice_export_for_payment_reconciliation_json') + '?' + query_string) assert response.status_code == 200 assert response['content-type'].startswith('application/json') data = json.loads(response.content)['invoices'] assert len(data) == 1 assert data[0]['ID'] == invoice1.code assert decimal.Decimal(data[0]['net']) == invoice1.net_price() assert decimal.Decimal(data[0]['vat']) == invoice1.vat_value() assert decimal.Decimal(data[0]['gross']) == invoice1.price assert data[0]['order'] == invoice1.order.code assert data[0]['stripe'] == invoice1.order.stripe_charge_id
def test_export_invoice_csv_before_period(client): responses.add(responses.GET, DAILY_ECB_URL, body=EXAMPLE_ECB_DAILY_XML) Email.objects.create(code='purchase-complete') fare = FareFactory() user = make_user(is_staff=True) client.login(email=user.email, password='******') with freeze_time("2018-04-05"): create_order_and_invoice(user.assopy_user, fare, keep_as_placeholder=True) query_dict = QueryDict(mutable=True) query_dict['start_date'] = date(2018, 5, 1) query_dict['end_date'] = date.today() query_string = query_dict.urlencode() response = client.get( reverse('debug_panel_invoice_export_for_tax_report_2018_csv') + '?' + query_string) assert response.status_code == 200 assert response['content-type'] == 'text/csv' invoice_reader = csv.reader(response.content.splitlines()) header = next(invoice_reader) assert header == CSV_2018_REPORT_COLUMNS assert next(invoice_reader, None) is None
def test_upgrade_invoices_for_2018_command(client): """ """ responses.add(responses.GET, DAILY_ECB_URL, body=EXAMPLE_ECB_DAILY_XML) Email.objects.create(code='purchase-complete') fare = FareFactory() user = make_user() with freeze_time("2018-05-05"): client.login(email='*****@*****.**', password='******') invoice1 = create_order_and_invoice(user.assopy_user, fare, keep_as_placeholder=True) assert invoice1.html == VAT_NOT_AVAILABLE_PLACEHOLDER invoice2 = create_order_and_invoice(user.assopy_user, fare, keep_as_placeholder=True) assert invoice2.html == VAT_NOT_AVAILABLE_PLACEHOLDER assert invoice1.code != invoice2.code placeholders = Invoice.objects.filter(html=VAT_NOT_AVAILABLE_PLACEHOLDER) all_invoices = Invoice.objects.all() assert all_invoices.count() == 2 assert placeholders.count() == 2 call_command('upgrade_placeholder_invoices_for_2018') placeholders = Invoice.objects.filter(html=VAT_NOT_AVAILABLE_PLACEHOLDER) all_invoices = Invoice.objects.all() assert all_invoices.count() == 2 assert placeholders.count() == 0
def test_vat_in_GBP_for_2018(client): """ https://github.com/EuroPython/epcon/issues/617 """ responses.add(responses.GET, DAILY_ECB_URL, body=EXAMPLE_ECB_DAILY_XML) Email.objects.create(code='purchase-complete') fare = FareFactory() user = make_user() with freeze_time("2018-05-05"): client.login(email='*****@*****.**', password='******') invoice = create_order_and_invoice(user.assopy_user, fare) assert invoice.html.startswith('<!DOCTYPE') assert invoice.vat_value() == Decimal("1.67") assert invoice.vat_in_local_currency == Decimal("1.49") assert invoice.local_currency == "GBP" assert invoice.exchange_rate == Decimal('0.89165') assert invoice.exchange_rate_date == EXAMPLE_ECB_DATE response = client.get(invoice.get_html_url()) content = response.content.decode('utf-8') # The wording used to be different, so we had both checks in one line, # but beacuse of template change we had to separate them assert 'local-currency="GBP"' in content assert 'total-vat-in-local-currency="1.49"' in content # we're going to use whatever the date was received/cached from ECB XML # doesnt matter what emit date is assert "ECB rate used for VAT is 0.89165 GBP/EUR from 2018-03-06"\ in content response = client.get(invoice.get_absolute_url()) assert response['Content-Type'] == 'application/pdf' with freeze_time("2017-05-05"): client.login(email='*****@*****.**', password='******') invoice = create_order_and_invoice(user.assopy_user, fare) assert invoice.html.startswith('<!DOCTYPE') assert invoice.vat_value() == Decimal("1.67") assert invoice.vat_in_local_currency == Decimal("1.67") assert invoice.local_currency == "EUR" assert invoice.exchange_rate == Decimal('1.0') assert invoice.exchange_rate_date == date(2017, 5, 5) response = client.get(invoice.get_html_url()) content = response.content.decode('utf-8') # not showing any VAT conversion because in 2017 we had just EUR assert "EUR" in content assert "Total VAT is" not in content assert "ECB rate" not in content response = client.get(invoice.get_absolute_url()) assert response['Content-Type'] == 'application/pdf'
def test_if_invoice_stores_information_about_the_seller(client): """ Testing #591 https://github.com/EuroPython/epcon/issues/591 """ # need this email to generate invoices/orders Email.objects.create(code='purchase-complete') fare = FareFactory() user = make_user() def invoice_url(invoice): return reverse("assopy-invoice-html", kwargs={ 'code': invoice.code, 'order_code': invoice.order.code, }) with freeze_time("2016-01-01"): # We need to log in again after every time travel, just in case. client.login(email='*****@*****.**', password='******') invoice = create_order_and_invoice(user.assopy_user, fare) assert invoice.code == "I/16.0001" assert invoice.emit_date == date(2016, 1, 1) assert invoice.issuer == ACPYSS_16 assert invoice.html.startswith('<!DOCTYPE') response = client.get(invoice_url(invoice)) assert ACPYSS_16 in response.content.decode('utf-8') with freeze_time("2017-01-01"): # We need to log in again after every time travel, just in case. client.login(email='*****@*****.**', password='******') invoice = create_order_and_invoice(user.assopy_user, fare) assert invoice.code == "I/17.0001" assert invoice.emit_date == date(2017, 1, 1) assert invoice.issuer == PYTHON_ITALIA_17 assert invoice.html.startswith('<!DOCTYPE') response = client.get(invoice_url(invoice)) assert PYTHON_ITALIA_17 in response.content.decode('utf-8') with freeze_time("2018-01-01"): # We need to log in again after every time travel, just in case. client.login(email='*****@*****.**', password='******') invoice = create_order_and_invoice(user.assopy_user, fare) assert invoice.code == "I/18.0001" assert invoice.emit_date == date(2018, 1, 1) assert invoice.issuer == EPS_18 assert invoice.html.startswith('<!DOCTYPE') response = client.get(invoice_url(invoice)) assert EPS_18 in response.content.decode('utf-8')
def test_export_invoice_csv(client): responses.add(responses.GET, DAILY_ECB_URL, body=EXAMPLE_ECB_DAILY_XML) Email.objects.create(code='purchase-complete') fare = FareFactory() user = make_user(is_staff=True) client.login(email=user.email, password='******') with freeze_time("2018-05-05"): invoice1 = create_order_and_invoice(user.assopy_user, fare, keep_as_placeholder=True) query_dict = QueryDict(mutable=True) query_dict['start_date'] = date(2018, 1, 1) query_dict['end_date'] = date.today() query_string = query_dict.urlencode() response = client.get( reverse('debug_panel_invoice_export_for_tax_report_2018_csv') + '?' + query_string) assert response.status_code == 200 assert response['content-type'] == 'text/csv' invoice_reader = csv.reader(response.content.splitlines()) next(invoice_reader) # skip header invoice = next(invoice_reader) iter_column = iter(invoice) assert next(iter_column) == invoice1.code assert next(iter_column) == '2018-05-05' assert next(iter_column) == invoice1.order.user.user.get_full_name() assert next(iter_column) == invoice1.order.card_name next(iter_column) # ignore the address assert next(iter_column) == invoice1.order.country.name assert next(iter_column) == invoice1.order.vat_number assert decimal.Decimal(next(iter_column)) ==\ invoice1.net_price_in_local_currency assert decimal.Decimal(next(iter_column)) == invoice1.vat_in_local_currency assert decimal.Decimal(next(iter_column)) ==\ invoice1.price_in_local_currency