Merge remote-tracking branch 'inventree/master'

This commit is contained in:
Oliver Walters 2020-05-12 00:29:33 +10:00
commit a86513e15d
36 changed files with 412 additions and 73 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 198 KiB

View File

@ -9,7 +9,7 @@ from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import generics, permissions from rest_framework import generics, permissions
from rest_framework import filters from rest_framework import filters
from django.conf.urls import url from django.conf.urls import url, include
from InvenTree.helpers import str2bool from InvenTree.helpers import str2bool
@ -17,10 +17,12 @@ from part.models import Part
from company.models import SupplierPart from company.models import SupplierPart
from .models import PurchaseOrder, PurchaseOrderLineItem from .models import PurchaseOrder, PurchaseOrderLineItem
from .serializers import POSerializer, POLineItemSerializer from .models import PurchaseOrderAttachment
from .serializers import POSerializer, POLineItemSerializer, POAttachmentSerializer
from .models import SalesOrder, SalesOrderLineItem from .models import SalesOrder, SalesOrderLineItem
from .serializers import SalesOrderSerializer, SOLineItemSerializer from .models import SalesOrderAttachment
from .serializers import SalesOrderSerializer, SOLineItemSerializer, SOAttachmentSerializer
class POList(generics.ListCreateAPIView): class POList(generics.ListCreateAPIView):
@ -198,6 +200,25 @@ class POLineItemDetail(generics.RetrieveUpdateAPIView):
] ]
class SOAttachmentList(generics.ListCreateAPIView):
"""
API endpoint for listing (and creating) a SalesOrderAttachment (file upload)
"""
queryset = SalesOrderAttachment.objects.all()
serializer_class = SOAttachmentSerializer
filter_backends = [
DjangoFilterBackend,
filters.OrderingFilter,
filters.SearchFilter,
]
filter_fields = [
'order',
]
class SOList(generics.ListCreateAPIView): class SOList(generics.ListCreateAPIView):
""" """
API endpoint for accessing a list of SalesOrder objects. API endpoint for accessing a list of SalesOrder objects.
@ -378,10 +399,32 @@ class SOLineItemDetail(generics.RetrieveUpdateAPIView):
permission_classes = [permissions.IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
class POAttachmentList(generics.ListCreateAPIView):
"""
API endpoint for listing (and creating) a PurchaseOrderAttachment (file upload)
"""
queryset = PurchaseOrderAttachment.objects.all()
serializer_class = POAttachmentSerializer
filter_backends = [
DjangoFilterBackend,
filters.OrderingFilter,
filters.SearchFilter,
]
filter_fields = [
'order',
]
order_api_urls = [ order_api_urls = [
# API endpoints for purchase orders # API endpoints for purchase orders
url(r'^po/(?P<pk>\d+)/$', PODetail.as_view(), name='api-po-detail'), url(r'^po/(?P<pk>\d+)/$', PODetail.as_view(), name='api-po-detail'),
url(r'^po/$', POList.as_view(), name='api-po-list'), url(r'po/attachment/', include([
url(r'^.*$', POAttachmentList.as_view(), name='api-po-attachment-list'),
])),
url(r'^po/.*$', POList.as_view(), name='api-po-list'),
# API endpoints for purchase order line items # API endpoints for purchase order line items
url(r'^po-line/(?P<pk>\d+)/$', POLineItemDetail.as_view(), name='api-po-line-detail'), url(r'^po-line/(?P<pk>\d+)/$', POLineItemDetail.as_view(), name='api-po-line-detail'),
@ -389,7 +432,11 @@ order_api_urls = [
# API endpoints for sales ordesr # API endpoints for sales ordesr
url(r'^so/(?P<pk>\d+)/$', SODetail.as_view(), name='api-so-detail'), url(r'^so/(?P<pk>\d+)/$', SODetail.as_view(), name='api-so-detail'),
url(r'^so/$', SOList.as_view(), name='api-so-list'), url(r'so/attachment/', include([
url(r'^.*$', SOAttachmentList.as_view(), name='api-so-attachment-list'),
])),
url(r'^so/.*$', SOList.as_view(), name='api-so-list'),
# API endpoints for sales order line items # API endpoints for sales order line items
url(r'^so-line/(?P<pk>\d+)/$', SOLineItemDetail.as_view(), name='api-so-line-detail'), url(r'^so-line/(?P<pk>\d+)/$', SOLineItemDetail.as_view(), name='api-so-line-detail'),

View File

@ -14,6 +14,7 @@ from company.serializers import CompanyBriefSerializer, SupplierPartSerializer
from part.serializers import PartBriefSerializer from part.serializers import PartBriefSerializer
from .models import PurchaseOrder, PurchaseOrderLineItem from .models import PurchaseOrder, PurchaseOrderLineItem
from .models import PurchaseOrderAttachment, SalesOrderAttachment
from .models import SalesOrder, SalesOrderLineItem from .models import SalesOrder, SalesOrderLineItem
from .models import SalesOrderAllocation from .models import SalesOrderAllocation
@ -106,6 +107,22 @@ class POLineItemSerializer(InvenTreeModelSerializer):
] ]
class POAttachmentSerializer(InvenTreeModelSerializer):
"""
Serializers for the PurchaseOrderAttachment model
"""
class Meta:
model = PurchaseOrderAttachment
fields = [
'pk',
'order',
'attachment',
'comment',
]
class SalesOrderSerializer(InvenTreeModelSerializer): class SalesOrderSerializer(InvenTreeModelSerializer):
""" """
Serializers for the SalesOrder object Serializers for the SalesOrder object
@ -231,3 +248,19 @@ class SOLineItemSerializer(InvenTreeModelSerializer):
'part', 'part',
'part_detail', 'part_detail',
] ]
class SOAttachmentSerializer(InvenTreeModelSerializer):
"""
Serializers for the SalesOrderAttachment model
"""
class Meta:
model = SalesOrderAttachment
fields = [
'pk',
'order',
'attachment',
'comment',
]

View File

@ -31,7 +31,7 @@ class OrderTest(APITestCase):
return self.client.get(url + "?" + options, format='json') return self.client.get(url + "?" + options, format='json')
def test_po_list(self,): def test_po_list(self):
url = reverse('api-po-list') url = reverse('api-po-list')
@ -42,3 +42,19 @@ class OrderTest(APITestCase):
# Filter by stuff # Filter by stuff
response = self.doGet(url, 'status=10&part=1&supplier_part=1') response = self.doGet(url, 'status=10&part=1&supplier_part=1')
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_po_attachments(self):
url = reverse('api-po-attachment-list')
response = self.doGet(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_so_attachments(self):
url = reverse('api-so-attachment-list')
response = self.doGet(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)

View File

@ -19,6 +19,7 @@ from django.urls import reverse
from .models import Part, PartCategory, BomItem, PartStar from .models import Part, PartCategory, BomItem, PartStar
from .models import PartParameter, PartParameterTemplate from .models import PartParameter, PartParameterTemplate
from .models import PartAttachment
from . import serializers as part_serializers from . import serializers as part_serializers
@ -105,6 +106,27 @@ class CategoryDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = PartCategory.objects.all() queryset = PartCategory.objects.all()
class PartAttachmentList(generics.ListCreateAPIView):
"""
API endpoint for listing (and creating) a PartAttachment (file upload).
"""
queryset = PartAttachment.objects.all()
serializer_class = part_serializers.PartAttachmentSerializer
permission_classes = [permissions.IsAuthenticated]
filter_backends = [
DjangoFilterBackend,
filters.OrderingFilter,
filters.SearchFilter,
]
filter_fields = [
'part',
]
class PartThumbs(generics.ListAPIView): class PartThumbs(generics.ListAPIView):
""" API endpoint for retrieving information on available Part thumbnails """ """ API endpoint for retrieving information on available Part thumbnails """
@ -618,33 +640,31 @@ class BomItemValidate(generics.UpdateAPIView):
return Response(serializer.data) return Response(serializer.data)
cat_api_urls = [
url(r'^(?P<pk>\d+)/?', CategoryDetail.as_view(), name='api-part-category-detail'),
url(r'^$', CategoryList.as_view(), name='api-part-category-list'),
]
part_star_api_urls = [
url(r'^(?P<pk>\d+)/?', PartStarDetail.as_view(), name='api-part-star-detail'),
# Catchall
url(r'^.*$', PartStarList.as_view(), name='api-part-star-list'),
]
part_param_api_urls = [
url(r'^template/$', PartParameterTemplateList.as_view(), name='api-part-param-template-list'),
url(r'^.*$', PartParameterList.as_view(), name='api-part-param-list'),
]
part_api_urls = [ part_api_urls = [
url(r'^tree/?', PartCategoryTree.as_view(), name='api-part-tree'), url(r'^tree/?', PartCategoryTree.as_view(), name='api-part-tree'),
url(r'^category/', include(cat_api_urls)), # Base URL for PartCategory API endpoints
url(r'^star/', include(part_star_api_urls)), url(r'^category/', include([
url(r'^parameter/', include(part_param_api_urls)), url(r'^(?P<pk>\d+)/?', CategoryDetail.as_view(), name='api-part-category-detail'),
url(r'^$', CategoryList.as_view(), name='api-part-category-list'),
])),
# Base URL for PartAttachment API endpoints
url(r'attachment/', include([
url(r'^$', PartAttachmentList.as_view(), name='api-part-attachment-list'),
])),
# Base URL for PartStar API endpoints
url(r'^star/', include([
url(r'^(?P<pk>\d+)/?', PartStarDetail.as_view(), name='api-part-star-detail'),
url(r'^$', PartStarList.as_view(), name='api-part-star-list'),
])),
# Base URL for PartParameter API endpoints
url(r'^parameter/', include([
url(r'^template/$', PartParameterTemplateList.as_view(), name='api-part-param-template-list'),
url(r'^.*$', PartParameterList.as_view(), name='api-part-param-list'),
])),
url(r'^thumbs/', PartThumbs.as_view(), name='api-part-thumbs'), url(r'^thumbs/', PartThumbs.as_view(), name='api-part-thumbs'),
@ -653,16 +673,12 @@ part_api_urls = [
url(r'^.*$', PartList.as_view(), name='api-part-list'), url(r'^.*$', PartList.as_view(), name='api-part-list'),
] ]
bom_item_urls = [
url(r'^validate/?', BomItemValidate.as_view(), name='api-bom-item-validate'),
url(r'^.*$', BomDetail.as_view(), name='api-bom-item-detail'),
]
bom_api_urls = [ bom_api_urls = [
# BOM Item Detail # BOM Item Detail
url(r'^(?P<pk>\d+)/', include(bom_item_urls)), url(r'^(?P<pk>\d+)/', include([
url(r'^validate/?', BomItemValidate.as_view(), name='api-bom-item-validate'),
url(r'^.*$', BomDetail.as_view(), name='api-bom-item-detail'),
])),
# Catch-all # Catch-all
url(r'^.*$', BomList.as_view(), name='api-bom-list'), url(r'^.*$', BomList.as_view(), name='api-bom-list'),

View File

@ -9,6 +9,7 @@ from .models import Part, PartStar
from .models import PartCategory from .models import PartCategory
from .models import BomItem from .models import BomItem
from .models import PartParameter, PartParameterTemplate from .models import PartParameter, PartParameterTemplate
from .models import PartAttachment
from decimal import Decimal from decimal import Decimal
@ -39,6 +40,22 @@ class CategorySerializer(InvenTreeModelSerializer):
] ]
class PartAttachmentSerializer(InvenTreeModelSerializer):
"""
Serializer for the PartAttachment class
"""
class Meta:
model = PartAttachment
fields = [
'pk',
'part',
'attachment',
'comment'
]
class PartThumbSerializer(serializers.Serializer): class PartThumbSerializer(serializers.Serializer):
""" """
Serializer for the 'image' field of the Part model. Serializer for the 'image' field of the Part model.

View File

@ -12,6 +12,7 @@ from django.db.models import Q
from .models import StockLocation, StockItem from .models import StockLocation, StockItem
from .models import StockItemTracking from .models import StockItemTracking
from .models import StockItemAttachment
from part.models import Part, PartCategory from part.models import Part, PartCategory
from part.serializers import PartBriefSerializer from part.serializers import PartBriefSerializer
@ -22,6 +23,7 @@ from company.serializers import SupplierPartSerializer
from .serializers import StockItemSerializer from .serializers import StockItemSerializer
from .serializers import LocationSerializer, LocationBriefSerializer from .serializers import LocationSerializer, LocationBriefSerializer
from .serializers import StockTrackingSerializer from .serializers import StockTrackingSerializer
from .serializers import StockItemAttachmentSerializer
from InvenTree.views import TreeSerializer from InvenTree.views import TreeSerializer
from InvenTree.helpers import str2bool, isNull from InvenTree.helpers import str2bool, isNull
@ -624,6 +626,25 @@ class StockList(generics.ListCreateAPIView):
] ]
class StockAttachmentList(generics.ListCreateAPIView):
"""
API endpoint for listing (and creating) a StockItemAttachment (file upload)
"""
queryset = StockItemAttachment.objects.all()
serializer_class = StockItemAttachmentSerializer
filter_backends = [
DjangoFilterBackend,
filters.OrderingFilter,
filters.SearchFilter,
]
filter_fields = [
'stock_item',
]
class StockTrackingList(generics.ListCreateAPIView): class StockTrackingList(generics.ListCreateAPIView):
""" API endpoint for list view of StockItemTracking objects. """ API endpoint for list view of StockItemTracking objects.
@ -692,6 +713,11 @@ stock_api_urls = [
url(r'remove/?', StockRemove.as_view(), name='api-stock-remove'), url(r'remove/?', StockRemove.as_view(), name='api-stock-remove'),
url(r'transfer/?', StockTransfer.as_view(), name='api-stock-transfer'), url(r'transfer/?', StockTransfer.as_view(), name='api-stock-transfer'),
# Base URL for StockItemAttachment API endpoints
url(r'^attachment/', include([
url(r'^$', StockAttachmentList.as_view(), name='api-stock-attachment-list'),
])),
url(r'track/?', StockTrackingList.as_view(), name='api-stock-track'), url(r'track/?', StockTrackingList.as_view(), name='api-stock-track'),
url(r'^tree/?', StockCategoryTree.as_view(), name='api-stock-tree'), url(r'^tree/?', StockCategoryTree.as_view(), name='api-stock-tree'),

View File

@ -6,6 +6,7 @@ from rest_framework import serializers
from .models import StockItem, StockLocation from .models import StockItem, StockLocation
from .models import StockItemTracking from .models import StockItemTracking
from .models import StockItemAttachment
from django.db.models import Sum, Count from django.db.models import Sum, Count
from django.db.models.functions import Coalesce from django.db.models.functions import Coalesce
@ -189,6 +190,20 @@ class LocationSerializer(InvenTreeModelSerializer):
] ]
class StockItemAttachmentSerializer(InvenTreeModelSerializer):
""" Serializer for StockItemAttachment model """
class Meta:
model = StockItemAttachment
fields = [
'pk',
'stock_item',
'attachment',
'comment'
]
class StockTrackingSerializer(InvenTreeModelSerializer): class StockTrackingSerializer(InvenTreeModelSerializer):
""" Serializer for StockItemTracking model """ """ Serializer for StockItemTracking model """

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 198 KiB

View File

@ -28,9 +28,9 @@
showgrid="false" showgrid="false"
inkscape:current-layer="g2907" inkscape:current-layer="g2907"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:cy="-58.405079" inkscape:cy="426.62472"
inkscape:cx="353.97119" inkscape:cx="-960.58794"
inkscape:zoom="0.63286057" inkscape:zoom="0.31819805"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
borderopacity="1.0" borderopacity="1.0"
@ -64,7 +64,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title> <dc:title />
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@ -76,47 +76,216 @@
<g <g
id="g2907" id="g2907"
transform="matrix(1.7132796,0,0,1.7132796,460.05136,236.12365)"> transform="matrix(1.7132796,0,0,1.7132796,460.05136,236.12365)">
<path <g
style="opacity:1;vector-effect:none;fill:#d1d9de;fill-opacity:1;stroke:#28170b;stroke-width:2.08303189;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="g5713">
d="M -151.78571,473.69238 V 344.99077 l 35.12976,-15.60968 v 31.63051 l 49.460798,-21.93317 V 307.6535 l 26.213684,-12.45447 v 127.1615 l -26.213684,11.92625 v -83.81393 l -49.460798,20.95926 v 86.11213 z" <path
id="path913" sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccc" /> id="path4896"
d="m -151.78571,359.62883 v 112.76373 l 97.068507,-56.04253 V 303.14815 Z"
style="fill:#ddbc91;fill-opacity:1;stroke:#000000;stroke-width:1.5622561;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:#d9b383;fill-opacity:1;stroke:#000000;stroke-width:1.5622561;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -151.78571,359.62883 v 112.76373 l -97.0685,-56.04253 V 303.14815 Z"
id="path4898"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path4900"
d="m -54.717203,303.14815 -97.068507,56.48068 -97.0685,-56.48068 97.0685,-56.17354 z"
style="fill:#ddbc91;fill-opacity:1;stroke:#000000;stroke-width:1.5622561;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
id="g4916"
transform="matrix(1.4761476,0,0,1.4761476,-218.87903,128.54472)"
style="opacity:1;vector-effect:none;fill:#f3f4e4;fill-opacity:1;stroke:#000000;stroke-width:1.05833328;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1">
<path
id="path4910"
transform="matrix(0.40703466,0,0,0.40703466,-35.955294,75.175547)"
d="M 78.833984,129.19141 V 270.49609 L 200,340.45117 321.16602,270.49609 V 129.19141 L 200,199.69336 Z"
style="vector-effect:none;fill:#f3f4e4;fill-opacity:1;stroke:#000000;stroke-width:2.600106;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="vector-effect:none;fill:#f3f4e4;fill-opacity:1;stroke:#000000;stroke-width:1.05833328;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 94.770135,127.76116 45.451638,156.45782 -3.8668589,127.76116 45.451638,99.220548 Z"
id="path4914"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
</g>
<path
style="opacity:1;vector-effect:none;fill:#d9dbbc;fill-opacity:1;stroke:#000000;stroke-width:1.56225622;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m -151.7857,275.0089 v 84.49065 l -72.80137,42.54091 v -84.90142 z"
id="path4918"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path4920"
d="m -151.7857,275.0089 v 84.49065 l 72.801373,42.54091 v -84.90142 z"
style="opacity:1;vector-effect:none;fill:#eaeccf;fill-opacity:1;stroke:#000000;stroke-width:1.56225622;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<g
style="opacity:1;vector-effect:none;fill:#90a8d8;fill-opacity:1;stroke:#000000;stroke-width:1.58749998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
transform="matrix(0.9840984,0,0,0.9840984,-196.5146,205.65597)"
id="g4928">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path4922"
d="m 45.451638,156.45782 v 57.29292 l 49.318497,-28.47405 v -57.51553 z"
style="vector-effect:none;fill:#90a8d8;fill-opacity:1;stroke:#000000;stroke-width:1.58749998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
style="vector-effect:none;fill:#90a8d8;fill-opacity:1;stroke:#000000;stroke-width:1.58749998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 45.451638,156.45782 v 57.29292 L -3.866859,185.27669 v -57.51553 z"
id="path4924"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path4926"
d="M 94.770135,127.76116 45.451638,156.45782 -3.8668589,127.76116 45.451638,99.220548 Z"
style="vector-effect:none;fill:#90a8d8;fill-opacity:1;stroke:#000000;stroke-width:1.58749998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
</g>
<g
transform="translate(0,102.8232)"
id="g5856"
inkscape:export-xdpi="499.92001"
inkscape:export-ydpi="499.92001">
<path
style="opacity:1;vector-effect:none;fill:#90a8d8;fill-opacity:1;stroke:#000000;stroke-width:1.7510277;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m -587.59709,399.25327 v 126.38928 l 108.79755,-62.8143 V 335.94789 Z"
id="path5850"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5852"
d="m -587.59709,399.25327 v 126.38928 l -108.79754,-62.8143 V 335.94789 Z"
style="opacity:1;vector-effect:none;fill:#90a8d8;fill-opacity:1;stroke:#000000;stroke-width:1.7510277;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
style="opacity:1;vector-effect:none;fill:#90a8d8;fill-opacity:1;stroke:#000000;stroke-width:1.7510277;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m -478.79954,335.94789 -108.79755,63.30538 -108.79754,-63.30538 108.79754,-62.96113 z"
id="path5854"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
</g>
<g
id="g5848"
transform="translate(0,-23.56608)"
inkscape:export-xdpi="499.92001"
inkscape:export-ydpi="499.92001">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5803"
d="m -587.59709,399.25327 v 126.38928 l 108.79755,-62.8143 V 335.94789 Z"
style="opacity:1;vector-effect:none;fill:#90a8d8;fill-opacity:1;stroke:#000000;stroke-width:1.7510277;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
style="opacity:1;vector-effect:none;fill:#90a8d8;fill-opacity:1;stroke:#000000;stroke-width:1.7510277;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m -587.59709,399.25327 v 126.38928 l -108.79754,-62.8143 V 335.94789 Z"
id="path5805"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path5807"
d="m -478.79954,335.94789 -108.79755,63.30538 -108.79754,-63.30538 108.79754,-62.96113 z"
style="opacity:1;vector-effect:none;fill:#90a8d8;fill-opacity:1;stroke:#000000;stroke-width:1.7510277;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
<path <path
sodipodi:nodetypes="ccccc" sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
id="path915" id="path4649"
d="M -151.78571,473.69238 V 344.99077 l -110.80424,-49.79174 v 127.1615 z" d="m -587.59709,249.29791 v 126.38928 l 108.79755,-62.8143 V 185.99253 Z"
style="opacity:1;vector-effect:none;fill:#cec391;fill-opacity:1;stroke:#28170b;stroke-width:2.91837955;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-variant-east_asian:normal" /> style="fill:#ddbc91;fill-opacity:1;stroke:#000000;stroke-width:1.75102758;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-xdpi="499.92001"
inkscape:export-ydpi="499.92001" />
<path
style="opacity:1;vector-effect:none;fill:#d9b383;fill-opacity:1;stroke:#000000;stroke-width:1.5622561;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m -587.59709,249.29791 v 126.38928 l -108.79754,-62.8143 V 185.99253 Z"
id="path4651"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
inkscape:export-xdpi="499.92001"
inkscape:export-ydpi="499.92001" />
<path <path
sodipodi:nodetypes="ccccc" sodipodi:nodetypes="ccccc"
style="opacity:1;vector-effect:none;fill:#cec391;fill-opacity:1;stroke:#28170b;stroke-width:2.91837955;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-variant-east_asian:normal"
d="m -262.58995,295.19903 112.10613,-49.52424 109.502352,49.52424 c -88.312322,39.27262 -35.08964,16.14845 -110.804242,49.79174 z"
id="path917"
inkscape:connector-curvature="0" />
<path
style="opacity:1;vector-effect:none;fill:#cec391;fill-opacity:1;stroke:#28170b;stroke-width:2.91837955;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m -118.93959,307.94982 -85.80387,-38.34551"
id="path919"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" /> id="path4653"
d="m -478.79954,185.99253 -108.79755,63.30538 -108.79754,-63.30538 108.79754,-62.96113 z"
style="fill:#ddbc91;fill-opacity:1;stroke:#000000;stroke-width:1.75102758;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-xdpi="499.92001"
inkscape:export-ydpi="499.92001" />
<g
id="g4703"
transform="matrix(1.6545144,0,0,1.6545144,-662.79747,-9.7087)"
style="opacity:1;vector-effect:none;fill:#f3f4e4;fill-opacity:1;stroke:#000000;stroke-width:1.05833328;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-xdpi="499.92001"
inkscape:export-ydpi="499.92001">
<path
inkscape:connector-curvature="0"
style="vector-effect:none;fill:#f3f4e4;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m -713.3418,130.54492 v 163.03516 l 139.79883,80.71484 139.80078,-80.71484 V 130.54492 l -139.80078,81.3457 z"
transform="matrix(0.35277777,0,0,0.35277777,247.78456,81.707826)"
id="path4697" />
<path
style="vector-effect:none;fill:#f3f4e4;fill-opacity:1;stroke:#000000;stroke-width:1.05833328;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 94.770135,127.76116 45.451638,156.45782 -3.8668589,127.76116 45.451638,99.220548 Z"
id="path4701"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
</g>
<path <path
style="opacity:1;vector-effect:none;fill:#cec391;fill-opacity:1;stroke:#28170b;stroke-width:2.91837955;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-variant-east_asian:normal" style="opacity:1;vector-effect:none;fill:#d9dbbc;fill-opacity:1;stroke:#000000;stroke-width:1.7510277;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M -151.78571,473.69238 V 344.99077 l 110.804242,-49.79174 v 127.1615 z" d="m -587.59709,154.45314 v 94.69988 l -81.59816,47.68125 v -95.1603 z"
id="path2976" id="path4788"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" /> inkscape:export-xdpi="499.92001"
inkscape:export-ydpi="499.92001" />
<path <path
style="opacity:1;vector-effect:none;fill:#4581cf;fill-opacity:1;stroke:#28170b;stroke-width:4.66940737;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m -73.77322,436.55913 0,-77.51647 -35.3752,15.6134 v 78.16692 z"
id="path921"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" /> id="path4830"
<path d="m -587.59709,154.45314 v 94.69988 l 81.59817,47.68125 v -95.1603 z"
style="opacity:1;vector-effect:none;fill:#4581cf;fill-opacity:1;stroke:#28170b;stroke-width:8.00000043;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-variant-east_asian:normal" style="opacity:1;vector-effect:none;fill:#eaeccf;fill-opacity:1;stroke:#000000;stroke-width:1.7510277;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 290.59375 95.947266 L 232.01953 123.67578 L 273.04883 141.67188 L 273.04883 184.96094 L 333.65625 158.70508 L 333.65625 115.98242 L 290.59375 95.947266 z " inkscape:export-xdpi="499.92001"
transform="matrix(0.58367589,0,0,0.58367589,-268.52089,242.94838)" inkscape:export-ydpi="499.92001" />
id="path923" /> <g
style="opacity:1;vector-effect:none;fill:#90a8d8;fill-opacity:1;stroke:#000000;stroke-width:1.58749998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
transform="matrix(1.1030096,0,0,1.1030096,-637.73068,76.7201)"
id="g4695"
inkscape:export-xdpi="499.92001"
inkscape:export-ydpi="499.92001">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path4689"
d="m 45.451638,156.45782 v 57.29292 l 49.318497,-28.47405 v -57.51553 z"
style="vector-effect:none;fill:#90a8d8;fill-opacity:1;stroke:#000000;stroke-width:1.58749998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
style="vector-effect:none;fill:#90a8d8;fill-opacity:1;stroke:#000000;stroke-width:1.58749998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 45.451638,156.45782 v 57.29292 L -3.866859,185.27669 v -57.51553 z"
id="path4691"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path4693"
d="M 94.770135,127.76116 45.451638,156.45782 -3.8668589,127.76116 45.451638,99.220548 Z"
style="vector-effect:none;fill:#90a8d8;fill-opacity:1;stroke:#000000;stroke-width:1.58749998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
<rect
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:none;stroke-width:1.41293824;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect5777"
width="281.65912"
height="552.58508"
x="-728.42657"
y="95.064545"
inkscape:export-xdpi="499.92001"
inkscape:export-ydpi="499.92001" />
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 KiB