Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
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'
Esempio n. 6
0
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')
Esempio n. 7
0
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