karrio-server-manager 2025.5.5__py3-none-any.whl → 2025.5.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- karrio/server/manager/migrations/0068_shipment_extra_documents.py +20 -0
- karrio/server/manager/migrations/0069_alter_tracking_status.py +36 -0
- karrio/server/manager/models.py +3 -0
- karrio/server/manager/serializers/shipment.py +13 -0
- karrio/server/manager/serializers/tracking.py +6 -1
- karrio/server/manager/tests/test_shipments.py +1 -0
- karrio/server/manager/tests/test_trackers.py +4 -0
- karrio/server/manager/views/manifests.py +2 -1
- karrio/server/manager/views/shipments.py +2 -1
- {karrio_server_manager-2025.5.5.dist-info → karrio_server_manager-2025.5.7.dist-info}/METADATA +1 -1
- {karrio_server_manager-2025.5.5.dist-info → karrio_server_manager-2025.5.7.dist-info}/RECORD +13 -11
- {karrio_server_manager-2025.5.5.dist-info → karrio_server_manager-2025.5.7.dist-info}/WHEEL +0 -0
- {karrio_server_manager-2025.5.5.dist-info → karrio_server_manager-2025.5.7.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Generated by Django 6.0 on 2025-12-12 20:16
|
|
2
|
+
|
|
3
|
+
import functools
|
|
4
|
+
import karrio.server.core.utils
|
|
5
|
+
from django.db import migrations, models
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Migration(migrations.Migration):
|
|
9
|
+
|
|
10
|
+
dependencies = [
|
|
11
|
+
('manager', '0067_rename_customs_commodities_table'),
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
operations = [
|
|
15
|
+
migrations.AddField(
|
|
16
|
+
model_name='shipment',
|
|
17
|
+
name='extra_documents',
|
|
18
|
+
field=models.JSONField(blank=True, default=functools.partial(karrio.server.core.utils.identity, value=[]), null=True),
|
|
19
|
+
),
|
|
20
|
+
]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Generated by Django 5.2.9 on 2025-12-19 03:49
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
("manager", "0068_shipment_extra_documents"),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AlterField(
|
|
14
|
+
model_name="tracking",
|
|
15
|
+
name="status",
|
|
16
|
+
field=models.CharField(
|
|
17
|
+
choices=[
|
|
18
|
+
("pending", "pending"),
|
|
19
|
+
("picked_up", "picked_up"),
|
|
20
|
+
("unknown", "unknown"),
|
|
21
|
+
("on_hold", "on_hold"),
|
|
22
|
+
("cancelled", "cancelled"),
|
|
23
|
+
("delivered", "delivered"),
|
|
24
|
+
("in_transit", "in_transit"),
|
|
25
|
+
("delivery_delayed", "delivery_delayed"),
|
|
26
|
+
("out_for_delivery", "out_for_delivery"),
|
|
27
|
+
("ready_for_pickup", "ready_for_pickup"),
|
|
28
|
+
("delivery_failed", "delivery_failed"),
|
|
29
|
+
("return_to_sender", "return_to_sender"),
|
|
30
|
+
],
|
|
31
|
+
db_index=True,
|
|
32
|
+
default="pending",
|
|
33
|
+
max_length=25,
|
|
34
|
+
),
|
|
35
|
+
),
|
|
36
|
+
]
|
karrio/server/manager/models.py
CHANGED
|
@@ -823,6 +823,9 @@ class Shipment(core.OwnedEntity):
|
|
|
823
823
|
metadata = models.JSONField(
|
|
824
824
|
blank=True, null=True, default=functools.partial(utils.identity, value={})
|
|
825
825
|
)
|
|
826
|
+
extra_documents = models.JSONField(
|
|
827
|
+
blank=True, null=True, default=functools.partial(utils.identity, value=[])
|
|
828
|
+
)
|
|
826
829
|
|
|
827
830
|
# System Reference fields
|
|
828
831
|
|
|
@@ -285,8 +285,14 @@ class ShipmentSerializer(ShipmentData):
|
|
|
285
285
|
if "docs" in validated_data:
|
|
286
286
|
changes.append("label")
|
|
287
287
|
changes.append("invoice")
|
|
288
|
+
changes.append("extra_documents")
|
|
288
289
|
instance.label = validated_data["docs"].get("label") or instance.label
|
|
289
290
|
instance.invoice = validated_data["docs"].get("invoice") or instance.invoice
|
|
291
|
+
instance.extra_documents = (
|
|
292
|
+
validated_data["docs"].get("extra_documents")
|
|
293
|
+
or instance.extra_documents
|
|
294
|
+
or []
|
|
295
|
+
)
|
|
290
296
|
|
|
291
297
|
if "selected_rate" in validated_data:
|
|
292
298
|
selected_rate = validated_data.get("selected_rate", {})
|
|
@@ -387,6 +393,7 @@ class ShipmentUpdateData(validators.OptionDefaultSerializer):
|
|
|
387
393
|
"shipment_note": "This is a shipment note",
|
|
388
394
|
"signature_confirmation": true,
|
|
389
395
|
"saturday_delivery": true,
|
|
396
|
+
"shipping_charges": 10.00,
|
|
390
397
|
"is_return": true,
|
|
391
398
|
"doc_files": [
|
|
392
399
|
{
|
|
@@ -443,6 +450,7 @@ class ShipmentRateData(validators.OptionDefaultSerializer):
|
|
|
443
450
|
{
|
|
444
451
|
"currency": "USD",
|
|
445
452
|
"insurance": 100.00,
|
|
453
|
+
"insured_by": "carrier",
|
|
446
454
|
"cash_on_delivery": 30.00,
|
|
447
455
|
"dangerous_good": true,
|
|
448
456
|
"declared_value": 150.00,
|
|
@@ -450,6 +458,7 @@ class ShipmentRateData(validators.OptionDefaultSerializer):
|
|
|
450
458
|
"email_notification": true,
|
|
451
459
|
"email_notification_to": "shipper@mail.com",
|
|
452
460
|
"hold_at_location": true,
|
|
461
|
+
"locker_id": "123456789",
|
|
453
462
|
"paperless_trade": true,
|
|
454
463
|
"preferred_service": "fedex_express_saver",
|
|
455
464
|
"shipment_date": "2020-01-01", # TODO: deprecate
|
|
@@ -457,6 +466,7 @@ class ShipmentRateData(validators.OptionDefaultSerializer):
|
|
|
457
466
|
"shipment_note": "This is a shipment note",
|
|
458
467
|
"signature_confirmation": true,
|
|
459
468
|
"saturday_delivery": true,
|
|
469
|
+
"shipping_charges": 10.00,
|
|
460
470
|
"is_return": true,
|
|
461
471
|
"doc_files": [
|
|
462
472
|
{
|
|
@@ -500,6 +510,7 @@ class ShipmentPurchaseSerializer(Shipment):
|
|
|
500
510
|
{
|
|
501
511
|
"currency": "USD",
|
|
502
512
|
"insurance": 100.00,
|
|
513
|
+
"insured_by": "carrier",
|
|
503
514
|
"cash_on_delivery": 30.00,
|
|
504
515
|
"dangerous_good": true,
|
|
505
516
|
"declared_value": 150.00,
|
|
@@ -507,6 +518,7 @@ class ShipmentPurchaseSerializer(Shipment):
|
|
|
507
518
|
"email_notification": true,
|
|
508
519
|
"email_notification_to": "shipper@mail.com",
|
|
509
520
|
"hold_at_location": true,
|
|
521
|
+
"locker_id": "123456789",
|
|
510
522
|
"paperless_trade": true,
|
|
511
523
|
"preferred_service": "fedex_express_saver",
|
|
512
524
|
"shipment_date": "2020-01-01", # TODO: deprecate
|
|
@@ -514,6 +526,7 @@ class ShipmentPurchaseSerializer(Shipment):
|
|
|
514
526
|
"shipment_note": "This is a shipment note",
|
|
515
527
|
"signature_confirmation": true,
|
|
516
528
|
"saturday_delivery": true,
|
|
529
|
+
"shipping_charges": 10.00,
|
|
517
530
|
"is_return": true,
|
|
518
531
|
"doc_files": [
|
|
519
532
|
{
|
|
@@ -67,11 +67,14 @@ class TrackingSerializer(TrackingDetails):
|
|
|
67
67
|
raise_on_error=(pending_pickup is not True),
|
|
68
68
|
)
|
|
69
69
|
|
|
70
|
+
# Apply picked_up transformation for initial events
|
|
71
|
+
events = utils._ensure_picked_up_status(lib.to_dict(response.tracking.events))
|
|
72
|
+
|
|
70
73
|
return models.Tracking.objects.create(
|
|
71
74
|
created_by=context.user,
|
|
72
75
|
tracking_number=tracking_number,
|
|
73
76
|
account_number=account_number,
|
|
74
|
-
events=
|
|
77
|
+
events=events,
|
|
75
78
|
test_mode=response.tracking.test_mode,
|
|
76
79
|
delivered=response.tracking.delivered,
|
|
77
80
|
status=response.tracking.status,
|
|
@@ -191,6 +194,8 @@ def update_shipment_tracker(tracker: models.Tracking):
|
|
|
191
194
|
status = ShipmentStatus.delivered.value
|
|
192
195
|
elif tracker.status == TrackerStatus.pending.value:
|
|
193
196
|
status = tracker.shipment.status
|
|
197
|
+
elif tracker.status == TrackerStatus.picked_up.value:
|
|
198
|
+
status = ShipmentStatus.shipped.value
|
|
194
199
|
elif tracker.status == TrackerStatus.out_for_delivery.value:
|
|
195
200
|
status = ShipmentStatus.out_for_delivery.value
|
|
196
201
|
elif tracker.status == TrackerStatus.delivery_failed.value:
|
|
@@ -130,6 +130,8 @@ TRACKING_RESPONSE = {
|
|
|
130
130
|
"latitude": None,
|
|
131
131
|
"longitude": None,
|
|
132
132
|
"reason": None,
|
|
133
|
+
"status": None,
|
|
134
|
+
"timestamp": None,
|
|
133
135
|
}
|
|
134
136
|
],
|
|
135
137
|
"messages": [],
|
|
@@ -182,6 +184,8 @@ UPDATE_TRACKING_RESPONSE = {
|
|
|
182
184
|
"longitude": None,
|
|
183
185
|
"time": "20:34",
|
|
184
186
|
"reason": None,
|
|
187
|
+
"status": None,
|
|
188
|
+
"timestamp": None,
|
|
185
189
|
}
|
|
186
190
|
],
|
|
187
191
|
"delivered": False,
|
|
@@ -11,6 +11,7 @@ import rest_framework.throttling as throttling
|
|
|
11
11
|
import django_filters.rest_framework as django_filters
|
|
12
12
|
|
|
13
13
|
from karrio.server.core.utils import validate_resource_token
|
|
14
|
+
from karrio.server.core.authentication import AccessMixin
|
|
14
15
|
import karrio.server.openapi as openapi
|
|
15
16
|
import karrio.server.core.views.api as api
|
|
16
17
|
import karrio.server.core.filters as filters
|
|
@@ -106,7 +107,7 @@ class ManifestDetails(api.APIView):
|
|
|
106
107
|
return response.Response(serializers.Manifest(manifest).data)
|
|
107
108
|
|
|
108
109
|
|
|
109
|
-
class ManifestDoc(django_downloadview.VirtualDownloadView):
|
|
110
|
+
class ManifestDoc(AccessMixin, django_downloadview.VirtualDownloadView):
|
|
110
111
|
@openapi.extend_schema(exclude=True)
|
|
111
112
|
def get(self, req: request.Request, pk: str, doc: str = "manifest", format: str = "pdf", **kwargs):
|
|
112
113
|
"""Retrieve a manifest file."""
|
|
@@ -15,6 +15,7 @@ import karrio.server.openapi as openapi
|
|
|
15
15
|
import karrio.server.core.filters as filters
|
|
16
16
|
import karrio.server.manager.models as models
|
|
17
17
|
from karrio.server.core.views.api import GenericAPIView, APIView
|
|
18
|
+
from karrio.server.core.authentication import AccessMixin
|
|
18
19
|
from karrio.server.core.filters import ShipmentFilters
|
|
19
20
|
from karrio.server.manager.router import router
|
|
20
21
|
from karrio.server.manager.serializers import (
|
|
@@ -267,7 +268,7 @@ class ShipmentPurchase(APIView):
|
|
|
267
268
|
return Response(PurchasedShipment(update).data)
|
|
268
269
|
|
|
269
270
|
|
|
270
|
-
class ShipmentDocs(VirtualDownloadView):
|
|
271
|
+
class ShipmentDocs(AccessMixin, VirtualDownloadView):
|
|
271
272
|
@openapi.extend_schema(exclude=True)
|
|
272
273
|
def get(
|
|
273
274
|
self,
|
{karrio_server_manager-2025.5.5.dist-info → karrio_server_manager-2025.5.7.dist-info}/RECORD
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
karrio/server/manager/__init__.py,sha256=lDTMs_O6mQl0DEI2_TniT24TDJbjnkla-5QpnwfYlxs,64
|
|
2
2
|
karrio/server/manager/admin.py,sha256=QOl5e2m3ekU5aj0yj9Uq4nRQrNMB_FfqNae6RyIxkC0,35
|
|
3
3
|
karrio/server/manager/apps.py,sha256=WHTQ1t79uDZTbinRzvNg1NjtFwnwEvg0tP_ChrtTRwI,364
|
|
4
|
-
karrio/server/manager/models.py,sha256=
|
|
4
|
+
karrio/server/manager/models.py,sha256=eMBARl00oZVE_L1YMXV79bNBp5n36mVQO-MlSexBA3M,34458
|
|
5
5
|
karrio/server/manager/router.py,sha256=IBUR7rfBkdEHQzWxYOPcVSM8NBp3fte9G6Q5BVTUNNw,95
|
|
6
6
|
karrio/server/manager/signals.py,sha256=3ZApZY4Ne8Gb0AT5rjC3Xneb7dnbSQyXp1OiBXt7eIA,1908
|
|
7
7
|
karrio/server/manager/urls.py,sha256=oXJlvhHNKxFkc_CmpFoyTSAMJcLp4Wt9dHbViQDkqw4,220
|
|
@@ -73,6 +73,8 @@ karrio/server/manager/migrations/0064_shipment_shipment_created_at_idx_and_more.
|
|
|
73
73
|
karrio/server/manager/migrations/0065_alter_address_city_alter_address_company_name_and_more.py,sha256=m0KQSz8cnJzaXUlaAKdqU0duZ8wSQeTYQCIeam3Wivw,6279
|
|
74
74
|
karrio/server/manager/migrations/0066_commodity_image_url_commodity_product_id_and_more.py,sha256=Jw7bEBmqzDSp6zw0xcAiKc9aDCsa3Wrw-oTM8r9Pqfc,997
|
|
75
75
|
karrio/server/manager/migrations/0067_rename_customs_commodities_table.py,sha256=WPACK9Ab5QUdcX9yxBkV6_MXTAkB9F8vETDOlVqOrT4,1933
|
|
76
|
+
karrio/server/manager/migrations/0068_shipment_extra_documents.py,sha256=DL4FqB5bf5Rq3YuWVJsBMStkwMDmHIp_WN1BA6hKSTI,536
|
|
77
|
+
karrio/server/manager/migrations/0069_alter_tracking_status.py,sha256=p7rra3Iva_FT6eBmfKcpvC-E5Zll4bH69kMX9Us3Q-w,1170
|
|
76
78
|
karrio/server/manager/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
79
|
karrio/server/manager/serializers/__init__.py,sha256=FyL9pqzoV7umSJut5P2KzqPFxn1ZWu07Qx7I58H2AQc,1454
|
|
78
80
|
karrio/server/manager/serializers/address.py,sha256=yGKvZiNukeI15LEDdbo1ycqqK8QW77ak_vyLMIKyglI,2779
|
|
@@ -83,8 +85,8 @@ karrio/server/manager/serializers/manifest.py,sha256=mSneCk_7HMXpi64_7hggWvkR7Ma
|
|
|
83
85
|
karrio/server/manager/serializers/parcel.py,sha256=733Bg26lVbEkoWtAVM5Qt2IRBS2QDuVxhG40Hiqh3bw,2621
|
|
84
86
|
karrio/server/manager/serializers/pickup.py,sha256=sX0VmcQxGkXn3IEosMuFwdXh4HhdkPcuBOp79O8PoDQ,9233
|
|
85
87
|
karrio/server/manager/serializers/rate.py,sha256=7vYK_v8iWEDnswqYHG2Lir16_UhHTOxW5rdC6lw3lzA,652
|
|
86
|
-
karrio/server/manager/serializers/shipment.py,sha256=
|
|
87
|
-
karrio/server/manager/serializers/tracking.py,sha256=
|
|
88
|
+
karrio/server/manager/serializers/shipment.py,sha256=XuqCsB8TBYtn270JNKyvmYglDZttEfLED69NYN-uVyA,37500
|
|
89
|
+
karrio/server/manager/serializers/tracking.py,sha256=BViFnLlojwbRuy3U1rP2Vp_UqWRjwTd_4OVrhNAfkEA,12712
|
|
88
90
|
karrio/server/manager/tests/__init__.py,sha256=Y1UNteEE60vWdUAkjbldu_r_-h4u0He8-UoiBgTjKcU,391
|
|
89
91
|
karrio/server/manager/tests/test_addresses.py,sha256=pNkZC_yJyb29ZlEOtOAs4blcEYiOarw0zhZIZC5uj1w,3111
|
|
90
92
|
karrio/server/manager/tests/test_custom_infos.py,sha256=iv2cLdZVoVWFZK_mDUEnrZssncAnQcn87Rn2sAk8UQI,2731
|
|
@@ -92,18 +94,18 @@ karrio/server/manager/tests/test_errors.py,sha256=x2-mSsXknHkE4V7TajEu8d3rpqV38T
|
|
|
92
94
|
karrio/server/manager/tests/test_manifests.py,sha256=X35ZTXTFEM4Gxdjz598yiNNkOOKZGpILjHWRC0oM5U4,2764
|
|
93
95
|
karrio/server/manager/tests/test_parcels.py,sha256=lVLBOsHzXgXQvYjHIUy5oiPvrMfxYpueVvvhtuhstWk,2559
|
|
94
96
|
karrio/server/manager/tests/test_pickups.py,sha256=8jxddwTnBvBM9FOyWxW9TtZ-GOVYUje7HQ2EZjsbtD8,10681
|
|
95
|
-
karrio/server/manager/tests/test_shipments.py,sha256=
|
|
96
|
-
karrio/server/manager/tests/test_trackers.py,sha256=
|
|
97
|
+
karrio/server/manager/tests/test_shipments.py,sha256=S_mDZtCFd1R5S40AA83LfmQsGJGrJ52gwDzh2SY4YIM,39751
|
|
98
|
+
karrio/server/manager/tests/test_trackers.py,sha256=DNeGR-MQ6E_HIARuDUod7bIfhRgem3by-_rMLJR5JfM,7325
|
|
97
99
|
karrio/server/manager/views/__init__.py,sha256=kDFUaORRQ3Xh0ZPm-Jk88Ss8dgGYM57iUFXb9TPMzh0,401
|
|
98
100
|
karrio/server/manager/views/addresses.py,sha256=7YCAs2ZYgd1icYwMcGGWfX7A7vZEL4BEAbU4eIxhiMY,4620
|
|
99
101
|
karrio/server/manager/views/customs.py,sha256=-ZreiKyJ1xeLeNVG53nMfRQFeURduWr1QkDItdLPnE8,4875
|
|
100
102
|
karrio/server/manager/views/documents.py,sha256=znW54qJ_k7WInIut5FBZFDT93CioozXTOYFKRSUTBhA,4005
|
|
101
|
-
karrio/server/manager/views/manifests.py,sha256=
|
|
103
|
+
karrio/server/manager/views/manifests.py,sha256=KwDoV7GSdRv7YDAzl0SLaNoAx4R-gBguO_WiW_qwfBM,7083
|
|
102
104
|
karrio/server/manager/views/parcels.py,sha256=hZY45rg6SrTWfQqyJ38MGKSor1yqgPUEVHtu16aG37g,4594
|
|
103
105
|
karrio/server/manager/views/pickups.py,sha256=gmpxz9ot1OR-BP1qh-0MXU3kUJi1ht_74hfaLJzJ42w,5503
|
|
104
|
-
karrio/server/manager/views/shipments.py,sha256=
|
|
106
|
+
karrio/server/manager/views/shipments.py,sha256=vdJFgIKnSHEb2FVGtqJbiMoHuMqzWtDpINMH4UaEtQQ,13154
|
|
105
107
|
karrio/server/manager/views/trackers.py,sha256=3oGn2qDpHgk8GZvuz-Cb93Fc0j_h_HbXQR692Zhfiok,12363
|
|
106
|
-
karrio_server_manager-2025.5.
|
|
107
|
-
karrio_server_manager-2025.5.
|
|
108
|
-
karrio_server_manager-2025.5.
|
|
109
|
-
karrio_server_manager-2025.5.
|
|
108
|
+
karrio_server_manager-2025.5.7.dist-info/METADATA,sha256=XazOdL7uDHjIEM2eIv1ZOJcLQjqXo92DMzGTsivtK2k,730
|
|
109
|
+
karrio_server_manager-2025.5.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
110
|
+
karrio_server_manager-2025.5.7.dist-info/top_level.txt,sha256=D1D7x8R3cTfjF_15mfiO7wCQ5QMtuM4x8GaPr7z5i78,12
|
|
111
|
+
karrio_server_manager-2025.5.7.dist-info/RECORD,,
|
|
File without changes
|
{karrio_server_manager-2025.5.5.dist-info → karrio_server_manager-2025.5.7.dist-info}/top_level.txt
RENAMED
|
File without changes
|