def test_get_next_line_number_fill_gap():
    """get the number for the next invoice line"""
    invoice = InvoiceFactory()
    InvoiceLineFactory(invoice=invoice, line_number=1)
    InvoiceLineFactory(invoice=invoice, line_number=2)
    InvoiceLineFactory(invoice=invoice, line_number=4)
    assert 3 == invoice.get_next_line_number()
 def test_invoice_create_pdf_not_draft(self):
     """Cannot create a PDF if the invoice has already been printed"""
     InvoiceSettingsFactory()
     VatSettingsFactory()
     invoice = InvoiceFactory()
     InvoiceLineFactory(invoice=invoice)
     InvoicePrint().create_pdf(invoice, None)
     self.assertRaises(InvoiceError,
                       InvoicePrint().create_pdf, invoice, None)
Пример #3
0
def test_report_total_by_user():
    contact = ContactFactory()
    invoice = InvoiceFactory(contact=contact)
    InvoiceSettingsFactory()
    # no time records
    InvoiceLineFactory(invoice=invoice)
    # u1's time records
    invoice_line = InvoiceLineFactory(invoice=invoice)
    t1 = TicketFactory(contact=contact)
    TimeRecordFactory(
        ticket=t1,
        user=UserFactory(username='******'),
        invoice_line=invoice_line
    )
    # u2's time records
    invoice_line = InvoiceLineFactory(invoice=invoice)
    u2 = UserFactory(username='******')
    t2 = TicketFactory(contact=contact)
    TimeRecordFactory(ticket=t2, user=u2, invoice_line=invoice_line)
    invoice_line = InvoiceLineFactory(invoice=invoice)
    t3 = TicketFactory(contact=contact)
    TimeRecordFactory(ticket=t3, user=u2, invoice_line=invoice_line)
    result = invoice.time_analysis()
    # invoice has a line with no time records
    assert '' in result
    # fred recorded time on one ticket
    assert 'u1' in result
    u1 = result['u1']
    assert 1 == len(u1)
    assert t1.pk in u1
    # sara recorded time on two tickets
    assert 'u2' in result
    u2 = result['u2']
    assert 2 == len(u2)
    assert t2.pk in u2
    assert t3.pk in u2
    # web user added an invoice line, but didn't record time
    assert 'web' not in result
    # check net total matches invoice
    net = Decimal()
    for user, tickets in result.items():
        for ticket_pk, totals in tickets.items():
            net = net + totals['net']
    assert invoice.net == net
def test_has_lines():
    """does the invoice have any lines"""
    invoice = InvoiceFactory()
    InvoiceLineFactory(
        invoice=invoice,
        quantity=Decimal('1.3'),
        units='hours',
        price=Decimal('300.00'),
    )
    assert invoice.has_lines is True
def test_user_can_edit_invoice():
    InvoiceSettingsFactory()
    VatSettingsFactory()
    invoice = InvoiceFactory()
    line = InvoiceLineFactory(invoice=invoice)
    TimeRecordFactory(invoice_line=line)
    InvoicePrint().create_pdf(invoice, None)
    # refresh
    line = InvoiceLine.objects.get(pk=line.pk)
    assert line.user_can_edit is False
def test_report_total_by_user():
    contact = ContactFactory()
    invoice = InvoiceFactory(contact=contact)
    InvoiceSettingsFactory()
    # no time records
    InvoiceLineFactory(invoice=invoice)
    # u1's time records
    invoice_line = InvoiceLineFactory(invoice=invoice)
    t1 = TicketFactory(contact=contact)
    TimeRecordFactory(ticket=t1,
                      user=UserFactory(username='******'),
                      invoice_line=invoice_line)
    # u2's time records
    invoice_line = InvoiceLineFactory(invoice=invoice)
    u2 = UserFactory(username='******')
    t2 = TicketFactory(contact=contact)
    TimeRecordFactory(ticket=t2, user=u2, invoice_line=invoice_line)
    invoice_line = InvoiceLineFactory(invoice=invoice)
    t3 = TicketFactory(contact=contact)
    TimeRecordFactory(ticket=t3, user=u2, invoice_line=invoice_line)
    result = invoice.time_analysis()
    # invoice has a line with no time records
    assert '' in result
    # fred recorded time on one ticket
    assert 'u1' in result
    u1 = result['u1']
    assert 1 == len(u1)
    assert t1.pk in u1
    # sara recorded time on two tickets
    assert 'u2' in result
    u2 = result['u2']
    assert 2 == len(u2)
    assert t2.pk in u2
    assert t3.pk in u2
    # web user added an invoice line, but didn't record time
    assert 'web' not in result
    # check net total matches invoice
    net = Decimal()
    for user, tickets in result.items():
        for ticket_pk, totals in tickets.items():
            net = net + totals['net']
    assert invoice.net == net
def test_create():
    """ Create a simple invoice """
    invoice = InvoiceFactory()
    invoice.full_clean()
    invoice.save()
    assert invoice.pk > 0
    assert invoice.number > 0
def test_get_next_line_number_two_invoices():
    """get the number for the next invoice line"""
    invoice_1 = InvoiceFactory()
    InvoiceLineFactory(invoice=invoice_1, line_number=1)
    InvoiceLineFactory(invoice=invoice_1, line_number=2)
    invoice_2 = InvoiceFactory()
    InvoiceLineFactory(invoice=invoice_2, line_number=1)
    assert 3 == invoice_1.get_next_line_number()
    assert 2 == invoice_2.get_next_line_number()
def test_create_with_lines():
    """ Create a simple invoice with lines """
    VatSettingsFactory()
    invoice = InvoiceFactory()
    line = InvoiceLineFactory(
        invoice=invoice,
        quantity=Decimal('1.3'),
        units='hours',
        price=Decimal('300.00'),
    )
    line = InvoiceLineFactory(
        invoice=invoice,
        quantity=Decimal('2.4'),
        units='hours',
        price=Decimal('200.23'),
    )
    assert invoice.pk > 0
    assert Decimal('870.55') == invoice.net
    assert Decimal('1044.66') == invoice.gross
    assert line.is_credit is False
Пример #10
0
def test_invoice_detail(perm_check):
    invoice = InvoiceFactory()
    url = reverse('invoice.detail', kwargs={'pk': invoice.pk})
    perm_check.staff(url)
 def test_invoice_create_pdf_no_lines(self):
     """Cannot create a PDF if the invoice has no lines"""
     invoice = InvoiceFactory()
     self.assertRaises(InvoiceError,
                       InvoicePrint().create_pdf, invoice, None)
Пример #12
0
def test_invoice_update(perm_check):
    invoice = InvoiceFactory()
    url = reverse('invoice.update', kwargs={'pk': invoice.pk})
    perm_check.staff(url)
def test_has_lines_not():
    invoice = InvoiceFactory()
    assert invoice.has_lines is False
def test_get_first_line_number():
    """get the number for the first invoice line"""
    invoice = InvoiceFactory()
    assert 1 == invoice.get_next_line_number()
def test_description():
    invoice = InvoiceFactory()
    assert 'Invoice' == invoice.description
Пример #16
0
def test_invoice_create_pdf(perm_check):
    invoice = InvoiceFactory()
    url = reverse('invoice.create.pdf', kwargs={'pk': invoice.pk})
    perm_check.staff(url)
def test_next_number():
    InvoiceFactory(number=99)
    assert 100 == Invoice.objects.next_number()
def test_next_number_2():
    InvoiceFactory(number=99, deleted=True)
    InvoiceFactory(number=98, deleted_version=1)
    assert 1 == Invoice.objects.next_number()