Example #1
0
    def setUp(self):
        super(Test_Invoice_Manager, self).setUp()
        
        self._test_user = helpers.create_dummy_user(1)
        self._test_currency = helpers.create_dummy_currency(1)
        self._test_language = helpers.create_dummy_language(77)
        self._test_client = helpers.create_dummy_client(1, self._test_user, currency = self._test_currency)
        self._invoice_manager = InvoiceManager(self._test_user)

        self._sub_total = 0
        self._total = 0
Example #2
0
class Test_Invoice_Manager(BaseAppengineDatastoreTester):
    """ Test invoice creation """
    def setUp(self):
        super(Test_Invoice_Manager, self).setUp()
        
        self._test_user = helpers.create_dummy_user(1)
        self._test_currency = helpers.create_dummy_currency(1)
        self._test_language = helpers.create_dummy_language(77)
        self._test_client = helpers.create_dummy_client(1, self._test_user, currency = self._test_currency)
        self._invoice_manager = InvoiceManager(self._test_user)

        self._sub_total = 0
        self._total = 0

    def test_create_invoice(self):
        ''' Create a new invoice, add 2 invoice items and save '''
        self._invoice_manager.create(
                                     client_id = self._test_client.key().id(),
                                     invoice_no = '01/2011',
                                     invoice_date = date.today(),
                                     sale_date = date.today()
                                )
        self._add_invoice_item(description = 'sample item1', quantity = 1.0, unit_price = 10.0)
        self._add_invoice_item(description = 'sample item2', quantity = 2.0, unit_price = 15.0)
        
        # Save the invoice
        self._invoice_manager.save()
        
        # Verify the instance is an invoice
        invoice = self._invoice_manager.invoice
        self.verify_entity_instance(invoice, InvoiceEntity)
        self.assertEqual(len(invoice.invoice_items.fetch(1000)), 2)
        
        # Verify invoice detail instances
        invoice_items = self._invoice_manager.invoice_items
        
        for item in invoice_items:
            self.verify_entity_instance(item, InvoiceItemEntity)
            self.assertEqual(item.invoice.key(), invoice.key())
            self.assertEqual(item.parent.key(), invoice.key())
        
        # Check totals
        self.assertEqual(invoice_items[0].total, 10.0)
        self.assertEqual(invoice_items[1].total, 30.0)

        self.assertEqual(invoice.subtotal, self._sub_total)
        self.assertEqual(invoice.total, self._total)

    def test_use_default_language_and_currency(self):
        """ Create an invoice using default currency and language """
        self._invoice_manager.create(
                                     client_id = self._test_client.key().id(), 
                                     invoice_no = '2011/44', 
                                     invoice_date = date.today(), 
                                     sale_date = date.today(),
                                )
        
        self._add_invoice_item(description = 'sample item1', quantity = 1.0, unit_price = 10.0)
        self._add_invoice_item(description = 'sample item2', quantity = 2.0, unit_price = 15.0)
        
        # Save the invoice
        self._invoice_manager.save()

        invoice = self._invoice_manager.find_invoice_by_id(self._invoice_manager._invoice.key().id())
        self.assertEqual(self._test_client.default_language.key(), invoice.language.key(), 'Language does not match')
        self.assertEqual(self._test_client.default_currency.key(), invoice.currency.key(), 'Currency does not match')

    def test_set_custom_language(self):
        """ Create an invoice specifying a different language than customer default """
        
        self._invoice_manager.create(
                                     client_id = self._test_client.key().id(), 
                                     invoice_no = '2011/26', 
                                     invoice_date = date.today(), 
                                     sale_date = date.today(),
                                     language_id = self._test_language.key().id()
                                )
        
        self._add_invoice_item(description = 'sample item1', quantity = 1.0, unit_price = 10.0)
        self._add_invoice_item(description = 'sample item2', quantity = 2.0, unit_price = 15.0)
        
        # Save the invoice
        self._invoice_manager.save()
        
        invoice = self._invoice_manager.find_invoice_by_id(self._invoice_manager._invoice.key().id())
        self.assertEqual(self._test_language.key(), invoice.language.key(), 'Language does not match')

    def test_set_custom_currency(self):
        """ Create an invoice specifying a different currency than customer default """
        
        self._invoice_manager.create(
                                     client_id = self._test_client.key().id(), 
                                     currency_id = self._test_currency.key().id(), 
                                     invoice_no = '2011/26', 
                                     invoice_date = date.today(), 
                                     sale_date = date.today()
                                )
        
        self._add_invoice_item(description = 'sample item1', quantity = 1.0, unit_price = 10.0)
        self._add_invoice_item(description = 'sample item2', quantity = 2.0, unit_price = 15.0)
        
        # Save the invoice
        self._invoice_manager.save()
        
        invoice = self._invoice_manager.find_invoice_by_id(self._invoice_manager._invoice.key().id())
        self.assertEqual(self._test_currency.key(), invoice.currency.key(), 'Currency does not match')

    def _add_invoice_item(self, description, quantity, unit_price):
        """ Add an invoice item to the current invoice and update totals """
        self._invoice_manager.add_invoice_item(description, quantity, unit_price)
        self._sub_total += quantity * unit_price
        self._total += quantity * unit_price
Example #3
0
class CreateInvoiceHandler(BaseProtectedHandler):
    """ Create a new invoice """

    def initialize(self, request, response):
        """ Override to inizialize the session """
        super(CreateInvoiceHandler, self).initialize(request, response)

        self._client_manager = ClientManager(self._user)
        self._invoice_manager = InvoiceManager(self._user)

    def get(self, invoice_form=None, invoice_item_forms=[InvoiceItemForm(index=1)]):
        if invoice_form == None:
            # Initialize the Invoice form

            clients = self._client_manager.listify_clients()
            currencies = CurrencyManager.listify_currencies()
            languages = LanguageManager.listify_languages()

            invoice_form = InvoiceForm(clients, currencies, languages)

        return render_template(
            self, "invoice_create.html", {"invoice_form": invoice_form, "invoice_item_forms": invoice_item_forms}
        )

    def post(self):
        commit = False

        clients = self._client_manager.listify_clients()
        currencies = CurrencyManager.listify_currencies()
        languages = LanguageManager.listify_languages()
        invoice_form = InvoiceForm(data=self.request.POST, clients=clients, currencies=currencies, languages=languages)

        items = invoice_form.fields["items"].to_python(self.request.POST["invoice-items"]) or 0
        max_item_index = int(self.request.POST["h-last-invoice-item-index"]) or 0

        invoice_item_forms = [
            InvoiceItemForm(index + 1, self.request.POST)
            for index in range(0, max_item_index)
            if self.request.POST.has_key("%i_invoice_item-description" % (index + 1))
        ]

        if items > max_item_index:
            commit = False
        elif items == 0:
            commit = False
        elif invoice_form.is_valid():
            # Validates the invoice items
            commit = True
            for form in invoice_item_forms:
                if not form.is_valid():
                    commit = False
                    break

        if commit:
            self._invoice_manager.create(
                client_id=invoice_form.cleaned_data["client"],
                currency_id=invoice_form.cleaned_data["currency"],
                invoice_no=invoice_form.cleaned_data["invoice_no"],
                invoice_date=invoice_form.cleaned_data["invoice_date"],
                sale_date=invoice_form.cleaned_data["sale_date"],
            )
            for invoice_item in invoice_item_forms:
                self._invoice_manager.add_invoice_item(
                    description=invoice_item.cleaned_data["description"],
                    quantity=invoice_item.cleaned_data["quantity"],
                    unit_price=invoice_item.cleaned_data["unit_price"],
                )

            self._invoice_manager.save()
        else:
            self.get(invoice_form, invoice_item_forms)
Example #4
0
    def initialize(self, request, response):
        """ Override to inizialize the session """
        super(CreateInvoiceHandler, self).initialize(request, response)

        self._client_manager = ClientManager(self._user)
        self._invoice_manager = InvoiceManager(self._user)
Example #5
0
 def _execute(self):
     invoice_manager = InvoiceManager(self._user_session.get_user())
     invoices = invoice_manager.list_invoices()
     json = self.jsonize_jqgrid(invoices)
     return self.render_content(json)