1.11.6
βοΈ Patch 1.11.6 β Otto special SKUs, Analysis all-time, SQLModel naive datetimes
π Summary
- Otto sync / product fetch β SKUs containing
% (and DE decimals like 0,5%) no longer break Otto Market product lookups.
- Analysis β Period selector gains All time (no date window on sales/returns/ads queries).
- Otto monitor β OAuth token refresh works again after SQLModelβs timezone-aware
datetime default.
β¨ Details
Otto SKUs with % / ,
| Area |
Behavior |
| Problem |
Path GET /v5/products/{sku} returns HTTP 400 when the SKU contains % (percent-encoding clash). |
| Fix |
Use GET /v5/products?sku=β¦ with the SKU percent-encoded (% β %25, , β %2C). |
| Comma trap |
Do not append an empty &sku= for comma SKUs β that produced a trailing comma in Ottoβs self-link and empty productVariations. |
| Fallback |
If still not found and the SKU contains ,, retry once with , β . (e.g. 0,5% β 0.5%). |
| Quantity |
Path quantity calls encode % the same way; other SKUs (e.g. SonyPlaystation5Pro(2)) keep the original path endpoints. |
Analysis β All time
| Area |
Behavior |
| UI |
Period β All time on Analysis articles and the sales-stats dialog. |
| API |
days=0 means no from/to filter on order/retour/ad queries. |
| Custom |
Custom from/to still capped at 365 days. |
| Otto ads |
SPA ad rollups remain ~90 days; warning shown for All time / long windows. |
SQLModel naive datetimes
| Area |
Behavior |
| Failure |
UPDATE otto_credentials β¦ Datetime values must have timezone information |
| Cause |
Naive Berlin get_berlin_time() vs SQLModel 0.0.45+ UTCDateTime default |
| Fix |
sa_type=DateTime(timezone=False) / shared naive type on Otto credentials, related detail timestamps, Plenty credentials |
No Postgres migration β columns were already timestamp without time zone.
π Notes
- Redeploy service-multi-repricer and refresh the frontend.
- If a
% SKU still reports βProduct not found on Ottoβ, confirm the exact seller SKU in Otto Seller Hub.
π Files
backend/service_multi-repricer/app/services/otto/otto_service.py
backend/service_multi-repricer/app/services/article_stats.py
backend/service_multi-repricer/app/api/v1/endpoints/article_stats.py
backend/service_multi-repricer/app/services/otto/otto_ads_daily.py
backend/service_multi-repricer/app/core/datetime_types.py
backend/service_multi-repricer/app/schemas/otto.py
backend/service_multi-repricer/app/schemas/repricer_articles.py
backend/service_multi-repricer/app/schemas/otto_pricing_history.py
backend/service_multi-repricer/app/schemas/plenty.py
backend/service_multi-repricer/app/tests/test_otto_naive_datetime.py
frontend/src/pages/Analysis/AnalysisArticles.jsx
frontend/src/pages/MultiRepricer/components/ArticleSalesStatsDialog.jsx
frontend/src/pages/MultiRepricer/hooks/useArticleSalesStats.js
docs/docs/patchnotes/1.11/1.11.6.md β this file