Exemplo n.º 1
0
    def get_context_data(self, *, object_list=None, **kwargs):
        context = super().get_context_data(object_list=object_list, **kwargs)
        invoice = self.object.bill_number
        title = f'Bill {invoice}'
        context['page_title'] = title
        context['header_title'] = title

        ledger_model = self.object.ledger

        if ledger_model.locked:
            messages.add_message(self.request,
                                 messages.ERROR,
                                 f'Warning! This Invoice is Locked. Must unlock before making any changes.',
                                 extra_tags='is-danger')

        if not ledger_model.posted:
            messages.add_message(self.request,
                                 messages.INFO,
                                 f'This Invoice has not been posted. Must post to see ledger changes.',
                                 extra_tags='is-info')

        bill_model: BillModel = self.object
        bill_item_queryset, item_data = bill_model.get_bill_item_data(
            queryset=bill_model.billmodelitemsthroughmodel_set.all()
        )
        context['item_formset'] = BillItemFormset(
            entity_slug=self.kwargs['entity_slug'],
            user_model=self.request.user,
            bill_pk=self.object.uuid,
            queryset=bill_item_queryset
        )
        context['total_amount_due'] = item_data['amount_due']
        return context
Exemplo n.º 2
0
    def post(self, request, entity_slug, bill_pk, **kwargs):
        bill_item_formset: BillItemFormset = BillItemFormset(
            request.POST,
            user_model=self.request.user,
            bill_pk=bill_pk,
            entity_slug=entity_slug)

        if bill_item_formset.is_valid():
            invoice_items = bill_item_formset.save(commit=False)

            if bill_item_formset.has_changed():
                bill_qs = BillModel.objects.for_entity(
                    user_model=self.request.user, entity_slug=entity_slug)
                bill_model: BillModel = get_object_or_404(bill_qs,
                                                          uuid__exact=bill_pk)

                entity_qs = EntityModel.objects.for_user(
                    user_model=self.request.user)
                entity_model: EntityModel = get_object_or_404(
                    entity_qs, slug__exact=entity_slug)

                for item in invoice_items:
                    item.entity = entity_model
                    item.bill_model = bill_model

                bill_item_list = bill_item_formset.save()
                # todo: pass item list to update_amount_due...?
                bill_model.update_amount_due()
                bill_model.new_state(commit=True)
                bill_model.clean()
                bill_model.save(update_fields=[
                    'amount_due', 'amount_receivable', 'amount_unearned',
                    'amount_earned', 'updated'
                ])

                bill_model.migrate_state(
                    entity_slug=entity_slug,
                    user_model=self.request.user,
                    # itemthrough_models=bill_item_list,
                    force_migrate=True)

        return HttpResponseRedirect(
            reverse('django_ledger:bill-update',
                    kwargs={
                        'entity_slug': entity_slug,
                        'bill_pk': bill_pk
                    }))
Exemplo n.º 3
0
    def get_context_data(self, *, object_list=None, **kwargs):
        context = super().get_context_data(object_list=object_list, **kwargs)
        bill_model = self.object
        title = f'Bill {bill_model.bill_number}'
        context['page_title'] = title
        context['header_title'] = title

        if not bill_model.is_configured():
            messages.add_message(
                request=self.request,
                message=
                f'Bill {bill_model.bill_number} must have all accounts configured.',
                level=messages.ERROR,
                extra_tags='is-danger')

        ledger_model = self.object.ledger
        if ledger_model.locked:
            messages.add_message(
                self.request,
                messages.ERROR,
                f'Warning! This bill is locked. Must unlock before making any changes.',
                extra_tags='is-danger')

        if not ledger_model.posted:
            messages.add_message(
                self.request,
                messages.INFO,
                f'This bill has not been posted. Must post to see ledger changes.',
                extra_tags='is-info')

        bill_model: BillModel = self.object
        bill_item_queryset, item_data = bill_model.get_bill_item_data(
            queryset=bill_model.itemthroughmodel_set.select_related(
                'item_model', 'po_model', 'bill_model').all())
        context['item_formset'] = BillItemFormset(
            entity_slug=self.kwargs['entity_slug'],
            user_model=self.request.user,
            bill_pk=bill_model.uuid,
            queryset=bill_item_queryset)
        context['total_amount_due'] = item_data['amount_due']
        return context