Example #1
0
    def response(self, request, queryset):
        if request.GET.get("export") == "pdf":
            if not queryset.exists():
                messages.warning(request, _("No invoices found."))
                return HttpResponseRedirect("?error=1")

            count = queryset.count()
            if count > settings.BATCH_MAX_ITEMS:
                messages.error(
                    request,
                    _("%s invoices in selection, that's too many.") % count)
                return HttpResponseRedirect("?error=1")

            pdf, response = pdf_response(
                "invoices",
                as_attachment=request.GET.get("disposition") == "attachment",
            )
            for invoice in queryset:
                pdf.init_letter()
                pdf.process_invoice(invoice)
                pdf.restart()
            pdf.generate()
            return response

        if request.GET.get("export") == "xlsx":
            xlsx = WorkbenchXLSXDocument()
            xlsx.table_from_queryset(queryset)
            return xlsx.to_response("invoices.xlsx")
Example #2
0
    def get(self, request, *args, **kwargs):
        self.object = self.get_object()

        data = [
            [
                gettext("service"),
                gettext("description"),
                gettext("rendered on"),
                gettext("effort type"),
                gettext("hourly rate"),
                gettext("hours"),
                gettext("cost"),
            ],
            [],
        ]

        hours = defaultdict(list)
        cost = defaultdict(list)

        for entry in LoggedHours.objects.filter(
                invoice_service__invoice=self.object):
            hours[entry.invoice_service_id].append(entry)
        for entry in LoggedCost.objects.filter(
                invoice_service__invoice=self.object):
            cost[entry.invoice_service_id].append(entry)

        for service in self.object.services.all():
            data.append([
                service.title,
                service.description,
                "",
                service.effort_type,
                service.effort_rate,
                "",
                "",
            ])
            for entry in hours[service.id]:
                data.append([
                    "",
                    entry.description,
                    entry.rendered_on,
                    "",
                    "",
                    entry.hours,
                    entry.hours *
                    service.effort_rate if service.effort_rate else "",
                ])
            for entry in cost[service.id]:
                data.append([
                    "", entry.description, entry.rendered_on, "", "", "",
                    entry.cost
                ])
            data.append([])

        xlsx = WorkbenchXLSXDocument()
        xlsx.add_sheet(gettext("logbook"))
        xlsx.table(None, data)
        return xlsx.to_response("%s.xlsx" % self.object.code)
Example #3
0
    def response(self, request, queryset):
        if request.GET.get("export") == "xlsx":
            xlsx = WorkbenchXLSXDocument()
            xlsx.people(queryset)
            return xlsx.to_response("people.xlsx")

        elif request.GET.get("export") == "vcard":
            return render_vcard_response(
                request,
                "\n".join(
                    person_to_vcard(person).serialize()
                    for person in queryset.prefetch_related(
                        "phonenumbers", "emailaddresses", "postaladdresses")
                    [:settings.BATCH_MAX_ITEMS]),
            )
Example #4
0
def open_items_list(request, form):
    if request.GET.get("export") == "xlsx":
        xlsx = WorkbenchXLSXDocument()
        xlsx.table_from_queryset(form.open_items_list()["list"].select_related(
            "customer", "contact__organization", "owned_by",
            "project__owned_by"))
        return xlsx.to_response("open-items-list-{}.xlsx".format(
            form.cleaned_data["cutoff_date"].isoformat()))

    return render(
        request,
        "reporting/open_items_list.html",
        {
            "form": form,
            "open_items_list": form.open_items_list()
        },
    )
Example #5
0
def project_budget_statistics_view(request, form):
    statistics = project_budget_statistics.project_budget_statistics(
        form.queryset(), cutoff_date=form.cleaned_data.get("cutoff_date")
    )

    if form.cleaned_data.get("closed_during_the_last_year"):
        statistics["statistics"] = sorted(
            statistics["statistics"], key=lambda s: s["project"].closed_on, reverse=True
        )

    if request.GET.get("export") == "xlsx" and statistics["statistics"]:
        xlsx = WorkbenchXLSXDocument()
        xlsx.project_budget_statistics(statistics)
        return xlsx.to_response("project-budget-statistics.xlsx")

    return render(
        request,
        "reporting/project_budget_statistics.html",
        {"form": form, "statistics": statistics},
    )
Example #6
0
    def response(self, request, queryset):
        if request.GET.get("export") == "xlsx":
            xlsx = WorkbenchXLSXDocument()
            additional = []
            values = {(v.deal_id, v.type_id): v.value
                      for v in Value.objects.filter(deal__in=queryset)}
            attributes = {(a.deal_id, a.attribute.group_id): a.attribute
                          for a in DealAttribute.objects.filter(
                              deal__in=queryset).select_related("attribute")}

            for vt in ValueType.objects.all():
                additional.append((
                    "{}: {}".format(Value._meta.verbose_name, vt),
                    (lambda id: lambda deal: values.get((deal.id, id)))(vt.id),
                ))
            for ag in AttributeGroup.objects.all():
                additional.append((
                    "{}: {}".format(Attribute._meta.verbose_name, ag),
                    (lambda id: lambda deal: attributes.get(
                        (deal.id, id)))(ag.id),
                ))
            xlsx.table_from_queryset(queryset, additional=additional)
            return xlsx.to_response("deals.xlsx")
Example #7
0
 def response(self, request, queryset):
     if (request.GET.get("export") == "xlsx"
             and request.user.features[FEATURES.CONTROLLING]):
         xlsx = WorkbenchXLSXDocument()
         xlsx.table_from_queryset(queryset)
         return xlsx.to_response("absences.xlsx")
Example #8
0
 def response(self, request, queryset):
     if (request.GET.get("export") == "xlsx"
             and request.user.features[FEATURES.CONTROLLING]):
         xlsx = WorkbenchXLSXDocument()
         xlsx.logged_costs(queryset)
         return xlsx.to_response("costs.xlsx")