From 72574647d1a760a5827f1d615ae96aecd22158d4 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Fri, 10 May 2024 13:40:00 +0000 Subject: [PATCH 1/4] Run checks against new python lib branch (temporary, will be reverted) --- .github/workflows/qc_checks.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index 5ca705eefafd..46b94d1e515a 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -247,7 +247,7 @@ jobs: update: true npm: true - name: Download Python Code For `${{ env.wrapper_name }}` - run: git clone --depth 1 https://github.com/inventree/${{ env.wrapper_name }} ./${{ env.wrapper_name }} + run: git clone --depth 1 https://github.com/inventree/${{ env.wrapper_name }} ./${{ env.wrapper_name }} -b new-printing-api - name: Start InvenTree Server run: | invoke delete-data -f From 7032ab30ca68eea31b1c8a518d4cea43e4ea5d3c Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sat, 11 May 2024 02:21:55 +0000 Subject: [PATCH 2/4] Revert custom target branch --- .github/workflows/qc_checks.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index 46b94d1e515a..5ca705eefafd 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -247,7 +247,7 @@ jobs: update: true npm: true - name: Download Python Code For `${{ env.wrapper_name }}` - run: git clone --depth 1 https://github.com/inventree/${{ env.wrapper_name }} ./${{ env.wrapper_name }} -b new-printing-api + run: git clone --depth 1 https://github.com/inventree/${{ env.wrapper_name }} ./${{ env.wrapper_name }} - name: Start InvenTree Server run: | invoke delete-data -f From fbe3be4c8f678c6efb71eed03ce758524fb198b9 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sat, 11 May 2024 05:36:56 +0000 Subject: [PATCH 3/4] Expose label and report output objects to API --- src/backend/InvenTree/report/api.py | 28 ++++++++++----------- src/backend/InvenTree/report/serializers.py | 4 +++ src/frontend/src/enums/ApiEndpoints.tsx | 2 ++ 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/backend/InvenTree/report/api.py b/src/backend/InvenTree/report/api.py index d6aa159372e8..9bde7d779727 100644 --- a/src/backend/InvenTree/report/api.py +++ b/src/backend/InvenTree/report/api.py @@ -2,7 +2,6 @@ from django.core.exceptions import ValidationError from django.core.files.base import ContentFile -from django.http import HttpResponse from django.template.exceptions import TemplateDoesNotExist from django.urls import include, path from django.utils.decorators import method_decorator @@ -11,8 +10,7 @@ from django_filters import rest_framework as rest_filters from django_filters.rest_framework import DjangoFilterBackend -from rest_framework import permissions, serializers -from rest_framework.exceptions import NotFound +from rest_framework import permissions from rest_framework.generics import GenericAPIView from rest_framework.request import clone_request from rest_framework.response import Response @@ -23,7 +21,7 @@ import report.helpers import report.models import report.serializers -from InvenTree.api import MetadataView +from InvenTree.api import BulkDeleteMixin, MetadataView from InvenTree.exceptions import log_error from InvenTree.filters import InvenTreeSearchFilter from InvenTree.mixins import ( @@ -472,18 +470,18 @@ class ReportAssetDetail(RetrieveUpdateDestroyAPI): serializer_class = report.serializers.ReportAssetSerializer -class LabelOutputList(ListAPI): +class LabelOutputList(BulkDeleteMixin, ListAPI): """List endpoint for LabelOutput objects.""" queryset = report.models.LabelOutput.objects.all() serializer_class = report.serializers.LabelOutputSerializer -class LabelOutputDetail(RetrieveAPI): - """Detail endpoint for a single LabelOutput object.""" +class ReportOutputList(BulkDeleteMixin, ListAPI): + """List endpoint for ReportOutput objects.""" - queryset = report.models.LabelOutput.objects.all() - serializer_class = report.serializers.LabelOutputSerializer + queryset = report.models.ReportOutput.objects.all() + serializer_class = report.serializers.ReportOutputSerializer label_api_urls = [ @@ -515,12 +513,7 @@ class LabelOutputDetail(RetrieveAPI): # Label outputs path( 'output/', - include([ - path( - '/', LabelOutputDetail.as_view(), name='api-label-output-detail' - ), - path('', LabelOutputList.as_view(), name='api-label-output-list'), - ]), + include([path('', LabelOutputList.as_view(), name='api-label-output-list')]), ), ] @@ -550,6 +543,11 @@ class LabelOutputDetail(RetrieveAPI): path('', ReportTemplateList.as_view(), name='api-report-template-list'), ]), ), + # Generated report outputs + path( + 'output/', + include([path('', ReportOutputList.as_view(), name='api-report-output-list')]), + ), # Report assets path( 'asset/', diff --git a/src/backend/InvenTree/report/serializers.py b/src/backend/InvenTree/report/serializers.py index b96ea14ddbdb..6928aeff8934 100644 --- a/src/backend/InvenTree/report/serializers.py +++ b/src/backend/InvenTree/report/serializers.py @@ -10,6 +10,7 @@ from InvenTree.serializers import ( InvenTreeAttachmentSerializerField, InvenTreeModelSerializer, + UserSerializer, ) @@ -152,6 +153,7 @@ def base_fields(): 'pk', 'created', 'user', + 'user_detail', 'model_type', 'items', 'complete', @@ -163,6 +165,8 @@ def base_fields(): output = InvenTreeAttachmentSerializerField() model_type = serializers.CharField(source='template.model_type', read_only=True) + user_detail = UserSerializer(source='user', read_only=True, many=False) + class LabelOutputSerializer(BaseOutputSerializer): """Serializer class for the LabelOutput model.""" diff --git a/src/frontend/src/enums/ApiEndpoints.tsx b/src/frontend/src/enums/ApiEndpoints.tsx index 10cd37272f83..c01f35c3d3ab 100644 --- a/src/frontend/src/enums/ApiEndpoints.tsx +++ b/src/frontend/src/enums/ApiEndpoints.tsx @@ -124,8 +124,10 @@ export enum ApiEndpoints { // Template API endpoints label_list = 'label/template/', label_print = 'label/print/', + label_output = 'label/output/', report_list = 'report/template/', report_print = 'report/print/', + report_output = 'report/output/', report_snippet = 'report/snippet/', report_asset = 'report/asset/', From 93497819d3def054a3da1fa9bc5266bf5ce972db Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 12 May 2024 10:18:06 +0000 Subject: [PATCH 4/4] refactor --- src/frontend/src/tables/ColumnRenderers.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/tables/ColumnRenderers.tsx b/src/frontend/src/tables/ColumnRenderers.tsx index 55108cf4ebcd..f8b26660c97a 100644 --- a/src/frontend/src/tables/ColumnRenderers.tsx +++ b/src/frontend/src/tables/ColumnRenderers.tsx @@ -265,8 +265,8 @@ export function CurrencyColumn({ sortable: sortable ?? true, render: (record: any) => { let currency_key = currency_accessor ?? `${accessor}_currency`; - return formatCurrency(record[accessor], { - currency: currency ?? record[currency_key] + return formatCurrency(resolveItem(record, accessor), { + currency: currency ?? resolveItem(record, currency_key) }); } };