Skip to content

1.11.9

βš™οΈ Patch 1.11.9 β€” Otto % monitor MOIN reuse; Plenty base import + sync eval

πŸš€ Summary

  • Otto monitor β€” For SKUs with % (e.g. OrdinaryAha30%Bha2%PeelingSolution30ml): reuse MOIN from DB; treat availability HTTP 400 as non-fatal.
  • Plenty base import β€” No longer drop variations on soft bundleType / weightG quirks; newly imported SKUs always land in sync_eval_*.json (and Discord).
  • Shopify/channel details β€” Fix SQLModel naive-datetime flush on create/update (shopify_details.updated_at, etc.) so new imports like RitualsAlchemyDuschschaum50ml2er can get Shopify prices.

✨ Details

Otto monitor (% SKUs)

Area Before After
MOIN Always re-fetched via products API Skip re-fetch when product.moin is already set (from otto_details)
Quantity Availability path …/quantities/{sku} β†’ HTTP 400 aborted the whole monitor Soft-fail: continue without quantity
OOS skip Relies on live qty Unchanged when qty is known; % SKUs with unknown qty proceed (force monitor already allows qty 0)

Plenty base import + sync eval

Area Before After
bundleType Defaulted to "none" β†’ Pydantic ValidationError skipped the variation Coerce null / none / empty β†’ None; only bundle / bundle_item kept
weightG Fractional floats / empty strings failed parse Round to int / treat empty as None
Article name Only variation.name (often empty) Fall back to item texts[].name
Sync eval Only β€œperfect” SKUs (all sync steps OK + stock > 0) Also every SKU in sync_base.created, even without buy price / stock 0
Discord No import count Newly imported: N line

Channel detail datetimes

Area Before After
shopify_details / FBM / FBA / Kaufland / base updated_at SQLModel UTCDateTime rejected Berlin-naive get_berlin_time() β†’ insert failed, session poisoned sa_type=NAIVE_DATETIME; CRUD writes naive Berlin
Sync cascade One Shopify insert error rolled back the whole Session β†’ FBM/Otto/Kaufland sync also failed Per-variant db.rollback() in sync_details_prices

πŸ“Œ Notes

  • Redeploy service-multi-repricer.
  • Otto example: quantity HTTP 400 while MOIN M0034101IS was already on the article.
  • After deploy, run base sync (or wait for cron) β€” RitualsAlchemyDuschschaum50ml2er should appear if present in PlentyONE.
  • Eval meta gains newly_imported_count; per-SKU flag newly_imported: true.
  • Re-sync SKU after deploy to create missing shopify_details rows.

πŸ“ Files

  • backend/service_multi-repricer/app/services/otto/otto_service.py
  • backend/service_multi-repricer/app/tests/test_otto_monitor_moin_reuse.py
  • backend/service_multi-repricer/app/models/repricer_articles.py
  • backend/service_multi-repricer/app/services/plenty/plenty_manager.py
  • backend/service_multi-repricer/app/api/v1/endpoints/repricer_articles.py
  • backend/service_multi-repricer/app/schemas/repricer_articles.py
  • backend/service_multi-repricer/app/crud/repricer_article.py
  • backend/service_multi-repricer/app/tests/test_plenty_base_import.py
  • backend/service_multi-repricer/app/tests/test_cron_sync_flow.py
  • backend/service_multi-repricer/app/tests/test_shopify_details_naive_datetime.py
  • docs/docs/services/service_multi_repricer/user_guide.md
  • docs/docs/patchnotes/1.11/1.11.9.md β€” this file