Metadata-Version: 2.4
Name: pretix-mailchimp
Version: 0.1.2
Summary: Mailchimp newsletter subscription with booking (opt-in)
Author-email: Julian Hammer <julian.hammer@betreiberverein.de>
Maintainer-email: Julian Hammer <julian.hammer@betreiberverein.de>
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/zam-haus/pretix-mailchimp
Project-URL: Repository, https://github.com/zam-haus/pretix-mailchimp
Project-URL: Issues, https://github.com/zam-haus/pretix-mailchimp/issues
Keywords: pretix
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Plugins
Classifier: Framework :: Django
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Communications :: Email
Requires-Python: >=3.11
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: pretix>=2025.7
Requires-Dist: requests
Dynamic: license-file

pretix Mailchimp Newsletter
===========================

This is a plugin for `pretix`_.

Mailchimp newsletter subscription with booking (opt-in).

Behavior
--------

* Activated on organizer level.
* Applies to all events of the organizer by default.
* Can only be disabled per event.
* Shows an optional checkbox in the booking contact form.
* Also shows an optional checkbox in the attendee/question form for every personalized order position, but only if the
  event asks for email addresses per ticket.
* If no checkbox is selected, nothing is sent to Mailchimp.
* If selected, the contact is created or updated in the configured Mailchimp audience.
* The contact is tagged with the main pretix event, not the subevent/date.
* Existing contacts are not overwritten unnecessarily; the event tag is added.
* If booking contact and attendee use the same email address in one order, the plugin avoids duplicate Mailchimp calls.

Default public text::

    ZAMgefasst, der Newsletter 1x pro Monat aus dem ZAM

Installation
------------

Inside your pretix virtualenv::

    pip install -e .

Then restart pretix and enable the plugin on organizer level.

Configuration
-------------

Go to the plugin settings on organizer level and configure:

* Mailchimp API key
* Mailchimp Audience/List ID
* status for new contacts (``pending`` recommended for double opt-in)
* tag template
* public checkbox label, with translations
* public help text, with translations

Per event, go to event settings and use **Newsletter opt-in deaktivieren** if the opt-in should not be shown for that
event.

Opt-in behavior
---------------

The plugin stores and evaluates two independent opt-ins:

* booking contact opt-in: saved in ``order.meta_info["contact_form_data"]``
* attendee/position opt-in: saved in ``position.meta_info["question_form_data"]``

This matters for events with non-personalized products: If pretix does not ask for attendee name/email per position, the
booking contact can still explicitly subscribe.

Mailchimp tag template placeholders
-----------------------------------

The tag template can use:

* ``{organizer}`` - organizer slug
* ``{event_slug}`` - event slug
* ``{event}`` - event name
* ``{event_id}`` - internal event id

Example::

    ZAM Veranstaltung: {event}

or more stable::

    pretix:{organizer}:{event_slug}

Privacy note
------------

This plugin only transfers a contact after explicit opt-in. For new Mailchimp contacts, ``pending`` is the recommended
default so Mailchimp sends a confirmation email. Existing unsubscribed contacts are not forcefully resubscribed by
default; they only receive the event tag.

Development setup
-----------------

1. Make sure that you have a working `pretix development setup`_.

2. Clone this repository.

3. Activate the virtual environment you use for pretix development.

4. Execute ``python setup.py develop`` within this directory to register this application with pretix's plugin registry.

5. Execute ``make`` within this directory to compile translations.

6. Restart your local pretix server. You can now use the plugin from this repository for your events by enabling it in
   the 'plugins' tab in the settings.

This plugin has CI set up to enforce a few code style rules. To check locally, you need these packages installed::

    pip install flake8 isort black

To check your plugin for rule violations, run::

    black --check .
    isort -c .
    flake8 .

You can auto-fix some of these issues by running::

    isort .
    black .

To automatically check for these issues before you commit, you can run ``.install-hooks``.


License
-------


Copyright 2026 Julian Hammer

Released under the terms of the Apache License 2.0



.. _pretix: https://github.com/pretix/pretix
.. _pretix development setup: https://docs.pretix.eu/en/latest/development/setup.html
