Add PCM carrier-route postcard pick-and-send #12

Merged
westfarn merged 1 commits from feat/11-pcm-carrier-route-campaigns into master 2026-09-21 13:29:53 -07:00
Owner

Summary

Closes #11.
Mirrors ai_ml_operations/monica_site#15.

  • Direct-mail compose can target the postcard mailing list or find and select one or two USPS carrier routes by ZIP (optional radius).
  • Estimated cost is shown per route and for the selection (PCM design pricing, else PCM_POSTCARD_PRICE_* fallback).
  • Selected routes order through PCM POST /order/postcard/with-list-count — occupant addresses are not imported into Contacts.
  • Not official EDDM postage; PCM FirstClass/Standard purchased occupant lists on carrier routes.

Test plan

  • Campaign compose: mailing-list audience still quotes list size × per-piece cost.
  • Switch to USPS carrier routes, search a ZIP, pick 1–2 routes, confirm household count + estimated cost.
  • Saving without a selection is rejected; saving with a quote creates one contact-less Message and shows the route panel on the report.
  • Send places /order/postcard/with-list-count (not per-recipient /order/postcard).
  • uv run python manage.py test directmail.tests.CarrierRoutePostcardTests directmail.tests.PostcardDesignPickTests
## Summary Closes #11. Mirrors ai_ml_operations/monica_site#15. - Direct-mail compose can target the postcard mailing list **or** find and select one or two USPS carrier routes by ZIP (optional radius). - Estimated cost is shown per route and for the selection (PCM design pricing, else `PCM_POSTCARD_PRICE_*` fallback). - Selected routes order through PCM `POST /order/postcard/with-list-count` — occupant addresses are not imported into Contacts. - Not official EDDM postage; PCM FirstClass/Standard purchased occupant lists on carrier routes. ## Test plan - [ ] Campaign compose: mailing-list audience still quotes list size × per-piece cost. - [ ] Switch to USPS carrier routes, search a ZIP, pick 1–2 routes, confirm household count + estimated cost. - [ ] Saving without a selection is rejected; saving with a quote creates one contact-less Message and shows the route panel on the report. - [ ] Send places `/order/postcard/with-list-count` (not per-recipient `/order/postcard`). - [ ] `uv run python manage.py test directmail.tests.CarrierRoutePostcardTests directmail.tests.PostcardDesignPickTests`
westfarn added 1 commit 2026-09-21 13:29:43 -07:00
## Summary
Closes #11.
- Mirror Monica: compose can use the postcard mailing list or 1–2 USPS carrier routes, with estimated cost shown.
- Place selected routes through PCM list-count orders instead of importing occupant addresses.
westfarn force-pushed feat/11-pcm-carrier-route-campaigns from 59bc0c3151 to 3a1ef797b8 2026-09-21 13:29:43 -07:00 Compare
westfarn merged commit f2eb4b7152 into master 2026-09-21 13:29:53 -07:00
westfarn deleted branch feat/11-pcm-carrier-route-campaigns 2026-09-21 13:29:53 -07:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: westfarn/web_django_template#12