wbmailing 2.2.1__py2.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.

Potentially problematic release.


This version of wbmailing might be problematic. Click here for more details.

Files changed (57) hide show
  1. wbmailing/__init__.py +1 -0
  2. wbmailing/admin.py +74 -0
  3. wbmailing/apps.py +14 -0
  4. wbmailing/backend.py +131 -0
  5. wbmailing/celery.py +0 -0
  6. wbmailing/dynamic_preferences_registry.py +35 -0
  7. wbmailing/factories.py +211 -0
  8. wbmailing/filters/__init__.py +8 -0
  9. wbmailing/filters/mailing_lists.py +84 -0
  10. wbmailing/filters/mails.py +74 -0
  11. wbmailing/management/__init__.py +22 -0
  12. wbmailing/migrations/0001_initial_squashed_squashed_0008_alter_mail_bcc_email_alter_mail_cc_email_and_more.py +649 -0
  13. wbmailing/migrations/0002_delete_mailingsettings.py +16 -0
  14. wbmailing/migrations/0003_alter_mailinglistsubscriberchangerequest_options.py +25 -0
  15. wbmailing/migrations/__init__.py +0 -0
  16. wbmailing/models/__init__.py +6 -0
  17. wbmailing/models/mailing_lists.py +386 -0
  18. wbmailing/models/mails.py +895 -0
  19. wbmailing/serializers/__init__.py +19 -0
  20. wbmailing/serializers/mailing_lists.py +209 -0
  21. wbmailing/serializers/mails.py +251 -0
  22. wbmailing/tasks.py +37 -0
  23. wbmailing/templatetags/__init__.py +0 -0
  24. wbmailing/templatetags/mailing_tags.py +22 -0
  25. wbmailing/tests/__init__.py +0 -0
  26. wbmailing/tests/conftest.py +30 -0
  27. wbmailing/tests/models/__init__.py +0 -0
  28. wbmailing/tests/models/test_mailing_lists.py +297 -0
  29. wbmailing/tests/models/test_mails.py +205 -0
  30. wbmailing/tests/signals.py +124 -0
  31. wbmailing/tests/test_serializers.py +28 -0
  32. wbmailing/tests/test_tasks.py +49 -0
  33. wbmailing/tests/test_viewsets.py +216 -0
  34. wbmailing/tests/tests.py +142 -0
  35. wbmailing/urls.py +90 -0
  36. wbmailing/viewsets/__init__.py +32 -0
  37. wbmailing/viewsets/analytics.py +110 -0
  38. wbmailing/viewsets/buttons/__init__.py +10 -0
  39. wbmailing/viewsets/buttons/mailing_lists.py +91 -0
  40. wbmailing/viewsets/buttons/mails.py +98 -0
  41. wbmailing/viewsets/display/__init__.py +16 -0
  42. wbmailing/viewsets/display/mailing_lists.py +175 -0
  43. wbmailing/viewsets/display/mails.py +318 -0
  44. wbmailing/viewsets/endpoints/__init__.py +8 -0
  45. wbmailing/viewsets/endpoints/mailing_lists.py +86 -0
  46. wbmailing/viewsets/endpoints/mails.py +51 -0
  47. wbmailing/viewsets/mailing_lists.py +320 -0
  48. wbmailing/viewsets/mails.py +425 -0
  49. wbmailing/viewsets/menu/__init__.py +5 -0
  50. wbmailing/viewsets/menu/mailing_lists.py +37 -0
  51. wbmailing/viewsets/menu/mails.py +25 -0
  52. wbmailing/viewsets/titles/__init__.py +17 -0
  53. wbmailing/viewsets/titles/mailing_lists.py +63 -0
  54. wbmailing/viewsets/titles/mails.py +55 -0
  55. wbmailing-2.2.1.dist-info/METADATA +5 -0
  56. wbmailing-2.2.1.dist-info/RECORD +57 -0
  57. wbmailing-2.2.1.dist-info/WHEEL +5 -0
@@ -0,0 +1,649 @@
1
+ # Generated by Django 4.1.8 on 2023-04-19 05:32
2
+
3
+ import datetime
4
+
5
+ import django.contrib.postgres.fields
6
+ import django.db.models.deletion
7
+ import django.utils.timezone
8
+ import django_fsm
9
+ from django.db import migrations, models
10
+
11
+
12
+ class Migration(migrations.Migration):
13
+ initial = True
14
+
15
+ dependencies = [
16
+ ("directory", "0001_initial"),
17
+ ]
18
+
19
+ operations = [
20
+ migrations.CreateModel(
21
+ name="MailingList",
22
+ fields=[
23
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
24
+ ("title", models.CharField(max_length=255, verbose_name="Title")),
25
+ ],
26
+ options={
27
+ "verbose_name": "Mailing List",
28
+ "verbose_name_plural": "Mailing Lists",
29
+ },
30
+ ),
31
+ migrations.CreateModel(
32
+ name="MailingSettings",
33
+ fields=[
34
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
35
+ ("salutation", models.CharField(max_length=255, verbose_name="Salutation")),
36
+ ],
37
+ options={
38
+ "verbose_name": "Mailing Settings",
39
+ "verbose_name_plural": "Mailing Settings",
40
+ },
41
+ ),
42
+ migrations.CreateModel(
43
+ name="MailTemplate",
44
+ fields=[
45
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
46
+ ("title", models.CharField(max_length=255)),
47
+ ("template", models.TextField()),
48
+ ],
49
+ options={
50
+ "verbose_name": "Mail Template",
51
+ "verbose_name_plural": "Mail Templates",
52
+ },
53
+ ),
54
+ migrations.CreateModel(
55
+ name="MassMail",
56
+ fields=[
57
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
58
+ ("subject", models.CharField(blank=True, max_length=255, null=True, verbose_name="Subject")),
59
+ ("body", models.TextField(blank=True, null=True, verbose_name="Body")),
60
+ (
61
+ "attachments_1",
62
+ models.FileField(blank=True, null=True, upload_to="mailing", verbose_name="Attachment (unique)"),
63
+ ),
64
+ ("created", models.DateTimeField(auto_now_add=True, verbose_name="Created")),
65
+ (
66
+ "template",
67
+ models.ForeignKey(
68
+ blank=True,
69
+ null=True,
70
+ on_delete=django.db.models.deletion.SET_NULL,
71
+ related_name="mass_mails",
72
+ to="wbmailing.mailtemplate",
73
+ verbose_name="Template",
74
+ ),
75
+ ),
76
+ ("from_email", models.EmailField(blank=True, max_length=254, null=True, verbose_name="From")),
77
+ (
78
+ "mailing_lists",
79
+ models.ManyToManyField(
80
+ related_name="mails", to="wbmailing.mailinglist", verbose_name="Mailing Lists"
81
+ ),
82
+ ),
83
+ (
84
+ "status",
85
+ django_fsm.FSMField(
86
+ choices=[("DRAFT", "Draft"), ("PENDING", "Pending"), ("SENT", "Sent"), ("DENIED", "Denied")],
87
+ default="DRAFT",
88
+ max_length=50,
89
+ verbose_name="Status",
90
+ ),
91
+ ),
92
+ ("body_json", models.JSONField(blank=True, default=dict, null=True)),
93
+ ],
94
+ options={
95
+ "verbose_name": "Mass Mail",
96
+ "verbose_name_plural": "Mass Mails",
97
+ "permissions": (("can_administrate_mail", "Can administrate mail"),),
98
+ },
99
+ ),
100
+ migrations.CreateModel(
101
+ name="Mail",
102
+ fields=[
103
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
104
+ ("from_email", models.EmailField(max_length=254, verbose_name="From")),
105
+ ("subject", models.CharField(blank=True, max_length=255, null=True, verbose_name="Subject")),
106
+ ("body", models.TextField(blank=True, null=True, verbose_name="body")),
107
+ (
108
+ "mass_mail",
109
+ models.ForeignKey(
110
+ blank=True,
111
+ null=True,
112
+ on_delete=django.db.models.deletion.SET_NULL,
113
+ related_name="mails",
114
+ to="wbmailing.massmail",
115
+ verbose_name="Mass Mail",
116
+ ),
117
+ ),
118
+ ("created", models.DateTimeField(auto_now_add=True, verbose_name="Created")),
119
+ (
120
+ "template",
121
+ models.ForeignKey(
122
+ blank=True,
123
+ null=True,
124
+ on_delete=django.db.models.deletion.SET_NULL,
125
+ related_name="mails",
126
+ to="wbmailing.mailtemplate",
127
+ verbose_name="Template",
128
+ ),
129
+ ),
130
+ ("body_json", models.JSONField(blank=True, default=dict, null=True)),
131
+ ("last_send", models.DateTimeField(default=django.utils.timezone.now, verbose_name="Last sent")),
132
+ (
133
+ "message_ids",
134
+ django.contrib.postgres.fields.ArrayField(
135
+ base_field=models.CharField(blank=True, max_length=255, null=True), default=list, size=None
136
+ ),
137
+ ),
138
+ ],
139
+ options={
140
+ "verbose_name": "Mail",
141
+ "verbose_name_plural": "Mails",
142
+ },
143
+ ),
144
+ migrations.CreateModel(
145
+ name="MailingListSubscriberChangeRequest",
146
+ fields=[
147
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
148
+ (
149
+ "type",
150
+ models.CharField(
151
+ choices=[("remove", "Remove"), ("add", "Add")],
152
+ default="add",
153
+ max_length=10,
154
+ verbose_name="Type",
155
+ ),
156
+ ),
157
+ (
158
+ "mailing_list",
159
+ models.ForeignKey(
160
+ on_delete=django.db.models.deletion.CASCADE,
161
+ related_name="change_requests",
162
+ to="wbmailing.mailinglist",
163
+ verbose_name="Mailing List",
164
+ ),
165
+ ),
166
+ ("created", models.DateTimeField(auto_now_add=True, null=True, verbose_name="Created")),
167
+ (
168
+ "status",
169
+ django_fsm.FSMField(
170
+ choices=[("PENDING", "Pending"), ("APPROVED", "Approved"), ("DENIED", "Denied")],
171
+ default="PENDING",
172
+ max_length=50,
173
+ verbose_name="Status",
174
+ ),
175
+ ),
176
+ (
177
+ "expiration_date",
178
+ models.DateField(
179
+ blank=True,
180
+ help_text="If set, this email will be removed automatically from the mailing list after the set expiration time",
181
+ null=True,
182
+ verbose_name="Expiration Date",
183
+ ),
184
+ ),
185
+ ],
186
+ options={
187
+ "verbose_name": "Mailing List Subscriber Change Request",
188
+ "verbose_name_plural": "Mailing List Subscriber Change Requests",
189
+ "permissions": (
190
+ (
191
+ "can_approve_mailing_list_subscriber_change_request",
192
+ "Can approve Mailing List Subscriber Change Requests",
193
+ ),
194
+ ),
195
+ },
196
+ ),
197
+ migrations.CreateModel(
198
+ name="MailEvent",
199
+ fields=[
200
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
201
+ ("timestamp", models.DateTimeField(default=django.utils.timezone.now, verbose_name="Datetime")),
202
+ ("description", models.CharField(blank=True, max_length=255, null=True, verbose_name="Description")),
203
+ ("recipient", models.EmailField(blank=True, max_length=254, null=True, verbose_name="Recipient")),
204
+ ("raw_data", models.JSONField(blank=True, default=dict, null=True, verbose_name="Raw Data")),
205
+ (
206
+ "mail",
207
+ models.ForeignKey(
208
+ on_delete=django.db.models.deletion.CASCADE,
209
+ related_name="events",
210
+ to="wbmailing.mail",
211
+ verbose_name="Mail",
212
+ ),
213
+ ),
214
+ ("click_url", models.CharField(blank=True, max_length=255, null=True, verbose_name="Clicked URL")),
215
+ (
216
+ "event_type",
217
+ models.CharField(
218
+ choices=[
219
+ ("CREATED", "Created"),
220
+ ("QUEUED", "Queued"),
221
+ ("SENT", "Sent"),
222
+ ("RESENT", "Resent"),
223
+ ("REJECTED", "Rejected"),
224
+ ("FAILED", "Failed"),
225
+ ("BOUNCED", "Bounced"),
226
+ ("DEFERRED", "Deferred"),
227
+ ("DELIVERED", "Delivered"),
228
+ ("AUTORESPONDED", "Autoresponded"),
229
+ ("OPENED", "Opened"),
230
+ ("CLICKED", "Clicked"),
231
+ ("COMPLAINED", "Complained"),
232
+ ("UNSUBSCRIBED", "Unsubscribed"),
233
+ ("SUBSCRIBED", "Subscribed"),
234
+ ("INBOUND", "Inbound"),
235
+ ("INBOUND_FAILED", "Inbound Failed"),
236
+ ("UNKNOWN", "Unknown"),
237
+ ],
238
+ default="CREATED",
239
+ max_length=64,
240
+ verbose_name="Type",
241
+ ),
242
+ ),
243
+ (
244
+ "reject_reason",
245
+ models.CharField(
246
+ blank=True,
247
+ choices=[
248
+ ("INVALID", "invalid"),
249
+ ("BOUNCED", "bounced"),
250
+ ("TIMED_OUT", "timed_out"),
251
+ ("BLOCKED", "blocked"),
252
+ ("SPAM", "spam"),
253
+ ("UNSUBSCRIBED", "unsubscribed"),
254
+ ("OTHER", "other"),
255
+ ],
256
+ max_length=64,
257
+ null=True,
258
+ verbose_name="Reject Reason",
259
+ ),
260
+ ),
261
+ (
262
+ "ip",
263
+ models.CharField(blank=True, max_length=126, null=True, verbose_name="IP used to send the mail"),
264
+ ),
265
+ ("user_agent", models.CharField(blank=True, max_length=512, null=True)),
266
+ ],
267
+ options={
268
+ "verbose_name": "Mail Event",
269
+ "verbose_name_plural": "Mail Events",
270
+ },
271
+ ),
272
+ migrations.AlterModelTable(
273
+ name="mail",
274
+ table="mailing_mail",
275
+ ),
276
+ migrations.AlterModelTable(
277
+ name="mailevent",
278
+ table="mailing_mailevent",
279
+ ),
280
+ migrations.AlterModelTable(
281
+ name="mailinglist",
282
+ table="mailing_mailinglist",
283
+ ),
284
+ migrations.AlterModelTable(
285
+ name="mailinglistsubscriberchangerequest",
286
+ table="mailing_mailinglistsubscriberchangerequest",
287
+ ),
288
+ migrations.AlterModelTable(
289
+ name="massmail",
290
+ table="mailing_massmail",
291
+ ),
292
+ migrations.AddField(
293
+ model_name="mailevent",
294
+ name="metadata",
295
+ field=models.JSONField(blank=True, default=dict, null=True, verbose_name="Metadata"),
296
+ ),
297
+ migrations.AddField(
298
+ model_name="mailevent",
299
+ name="tags",
300
+ field=django.contrib.postgres.fields.ArrayField(
301
+ base_field=models.CharField(blank=True, max_length=64, null=True), default=list, size=None
302
+ ),
303
+ ),
304
+ migrations.AlterField(
305
+ model_name="mailevent",
306
+ name="description",
307
+ field=models.TextField(blank=True, null=True, verbose_name="Description"),
308
+ ),
309
+ migrations.AlterField(
310
+ model_name="mailevent",
311
+ name="user_agent",
312
+ field=models.TextField(blank=True, null=True),
313
+ ),
314
+ migrations.AddField(
315
+ model_name="mailinglist",
316
+ name="is_public",
317
+ field=models.BooleanField(
318
+ default=False, help_text="If true, the factsheet is automatically subscribable", verbose_name="Public"
319
+ ),
320
+ ),
321
+ migrations.AlterField(
322
+ model_name="massmail",
323
+ name="mailing_lists",
324
+ field=models.ManyToManyField(
325
+ help_text="The mailing lists to extract emails from. If duplicated is present, it will send only once.",
326
+ related_name="mails",
327
+ to="wbmailing.mailinglist",
328
+ verbose_name="Mailing Lists",
329
+ ),
330
+ ),
331
+ migrations.AlterField(
332
+ model_name="massmail",
333
+ name="status",
334
+ field=django_fsm.FSMField(
335
+ choices=[
336
+ ("DRAFT", "Draft"),
337
+ ("PENDING", "Pending"),
338
+ ("SENT", "Sent"),
339
+ ("SEND LATER", "Send later"),
340
+ ("DENIED", "Denied"),
341
+ ],
342
+ default="DRAFT",
343
+ max_length=50,
344
+ verbose_name="Status",
345
+ ),
346
+ ),
347
+ migrations.AddField(
348
+ model_name="massmail",
349
+ name="attachment_url",
350
+ field=models.URLField(blank=True, null=True, verbose_name="Attachment (URL)"),
351
+ ),
352
+ migrations.AlterField(
353
+ model_name="mailevent",
354
+ name="click_url",
355
+ field=models.URLField(blank=True, max_length=2048, null=True, verbose_name="Clicked URL"),
356
+ ),
357
+ migrations.AlterField(
358
+ model_name="massmail",
359
+ name="body",
360
+ field=models.TextField(default="", verbose_name="Body"),
361
+ ),
362
+ migrations.RemoveField(
363
+ model_name="massmail",
364
+ name="attachments_1",
365
+ ),
366
+ migrations.AlterField(
367
+ model_name="mail",
368
+ name="last_send",
369
+ field=models.DateTimeField(default=django.utils.timezone.now, verbose_name="Last Sent"),
370
+ ),
371
+ migrations.AlterField(
372
+ model_name="mailevent",
373
+ name="ip",
374
+ field=models.CharField(blank=True, max_length=126, null=True, verbose_name="IP Used To Send Mail"),
375
+ ),
376
+ migrations.AlterField(
377
+ model_name="mailevent",
378
+ name="reject_reason",
379
+ field=models.CharField(
380
+ blank=True,
381
+ choices=[
382
+ ("INVALID", "invalid"),
383
+ ("BOUNCED", "bounced"),
384
+ ("TIMED_OUT", "timed_out"),
385
+ ("BLOCKED", "blocked"),
386
+ ("SPAM", "spam"),
387
+ ("UNSUBSCRIBED", "unsubscribed"),
388
+ ("OTHER", "other"),
389
+ ],
390
+ max_length=64,
391
+ null=True,
392
+ verbose_name="Rejection Reason",
393
+ ),
394
+ ),
395
+ migrations.CreateModel(
396
+ name="MailingListEmailContactThroughModel",
397
+ fields=[
398
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
399
+ (
400
+ "status",
401
+ models.CharField(
402
+ choices=[("SUBSCRIBED", "Subscribed"), ("UNSUBSCRIBED", "Unsubscribed")],
403
+ default="UNSUBSCRIBED",
404
+ max_length=32,
405
+ verbose_name="Status",
406
+ ),
407
+ ),
408
+ (
409
+ "mailing_list",
410
+ models.ForeignKey(
411
+ on_delete=django.db.models.deletion.CASCADE,
412
+ related_name="through_mailinglists",
413
+ to="wbmailing.mailinglist",
414
+ ),
415
+ ),
416
+ (
417
+ "email_contact",
418
+ models.ForeignKey(
419
+ on_delete=django.db.models.deletion.CASCADE,
420
+ related_name="through_mailinglists",
421
+ to="directory.emailcontact",
422
+ ),
423
+ ),
424
+ ],
425
+ options={
426
+ "unique_together": {("mailing_list", "email_contact")},
427
+ },
428
+ ),
429
+ migrations.AddField(
430
+ model_name="mailinglistsubscriberchangerequest",
431
+ name="reason",
432
+ field=models.TextField(blank=True, null=True, verbose_name="Reason"),
433
+ ),
434
+ migrations.AddField(
435
+ model_name="massmail",
436
+ name="excluded_mailing_lists",
437
+ field=models.ManyToManyField(
438
+ blank=True,
439
+ help_text="The mailing lists to exlude emails from. The resulting list of emails is equals to Mailing Lists - Excluded Mailing Lists ",
440
+ related_name="excluded_mails",
441
+ to="wbmailing.mailinglist",
442
+ verbose_name="Excluded Mailing Lists",
443
+ ),
444
+ ),
445
+ migrations.AlterField(
446
+ model_name="massmail",
447
+ name="mailing_lists",
448
+ field=models.ManyToManyField(
449
+ help_text="The mailing lists to extract emails from. Duplicates will be skipped.",
450
+ related_name="mails",
451
+ to="wbmailing.mailinglist",
452
+ verbose_name="Mailing Lists",
453
+ ),
454
+ ),
455
+ migrations.AddField(
456
+ model_name="massmail",
457
+ name="send_at",
458
+ field=models.DateTimeField(blank=True, null=True, verbose_name="Send At"),
459
+ ),
460
+ migrations.RemoveField(
461
+ model_name="mailinglistsubscriberchangerequest",
462
+ name="type",
463
+ ),
464
+ migrations.AddField(
465
+ model_name="mailinglistsubscriberchangerequest",
466
+ name="relationship",
467
+ field=models.ForeignKey(
468
+ blank=True,
469
+ null=True,
470
+ on_delete=django.db.models.deletion.CASCADE,
471
+ related_name="requests",
472
+ to="wbmailing.mailinglistemailcontactthroughmodel",
473
+ ),
474
+ preserve_default=False,
475
+ ),
476
+ migrations.AlterField(
477
+ model_name="mailinglistsubscriberchangerequest",
478
+ name="created",
479
+ field=models.DateTimeField(
480
+ auto_now_add=True,
481
+ default=datetime.datetime(2023, 4, 19, 5, 32, 0, 392613, tzinfo=datetime.timezone.utc),
482
+ verbose_name="Created",
483
+ ),
484
+ preserve_default=False,
485
+ ),
486
+ migrations.AddField(
487
+ model_name="mailinglistsubscriberchangerequest",
488
+ name="updated",
489
+ field=models.DateTimeField(
490
+ auto_now=True,
491
+ default=datetime.datetime(2023, 4, 19, 5, 32, 0, 392625, tzinfo=datetime.timezone.utc),
492
+ verbose_name="Updated",
493
+ ),
494
+ ),
495
+ migrations.AlterModelTable(
496
+ name="mail",
497
+ table=None,
498
+ ),
499
+ migrations.AlterModelTable(
500
+ name="mailevent",
501
+ table=None,
502
+ ),
503
+ migrations.AlterModelTable(
504
+ name="mailinglist",
505
+ table=None,
506
+ ),
507
+ migrations.AlterModelTable(
508
+ name="mailinglistsubscriberchangerequest",
509
+ table=None,
510
+ ),
511
+ migrations.AlterModelTable(
512
+ name="mailingsettings",
513
+ table=None,
514
+ ),
515
+ migrations.AlterModelTable(
516
+ name="mailtemplate",
517
+ table=None,
518
+ ),
519
+ migrations.AlterModelTable(
520
+ name="massmail",
521
+ table=None,
522
+ ),
523
+ migrations.AlterField(
524
+ model_name="mailinglistsubscriberchangerequest",
525
+ name="relationship",
526
+ field=models.ForeignKey(
527
+ default=None,
528
+ on_delete=django.db.models.deletion.CASCADE,
529
+ to="wbmailing.mailinglistemailcontactthroughmodel",
530
+ ),
531
+ preserve_default=False,
532
+ ),
533
+ migrations.AlterField(
534
+ model_name="mailinglistsubscriberchangerequest",
535
+ name="relationship",
536
+ field=models.ForeignKey(
537
+ on_delete=django.db.models.deletion.CASCADE,
538
+ related_name="requests",
539
+ to="wbmailing.mailinglistemailcontactthroughmodel",
540
+ ),
541
+ ),
542
+ migrations.AddField(
543
+ model_name="mailinglistsubscriberchangerequest",
544
+ name="type",
545
+ field=models.CharField(
546
+ choices=[("SUBSCRIBING", "Subscribing"), ("UNSUBSCRIBING", "Unsubscribing")],
547
+ max_length=32,
548
+ verbose_name="Type",
549
+ ),
550
+ ),
551
+ migrations.AddField(
552
+ model_name="mail",
553
+ name="bcc_email",
554
+ field=models.ManyToManyField(
555
+ blank=True, related_name="mail_bcc", to="directory.emailcontact", verbose_name="BCC"
556
+ ),
557
+ ),
558
+ migrations.AddField(
559
+ model_name="mail",
560
+ name="cc_email",
561
+ field=models.ManyToManyField(
562
+ blank=True, related_name="mail_cc", to="directory.emailcontact", verbose_name="CC"
563
+ ),
564
+ ),
565
+ migrations.AddField(
566
+ model_name="mail",
567
+ name="to_email",
568
+ field=models.ManyToManyField(related_name="mail_to", to="directory.emailcontact", verbose_name="To"),
569
+ ),
570
+ migrations.AddField(
571
+ model_name="mailinglist",
572
+ name="email_contacts",
573
+ field=models.ManyToManyField(
574
+ blank=True,
575
+ related_name="mailing_lists",
576
+ through="wbmailing.MailingListEmailContactThroughModel",
577
+ to="directory.emailcontact",
578
+ verbose_name="Subcribers",
579
+ ),
580
+ ),
581
+ migrations.AddField(
582
+ model_name="mailinglistsubscriberchangerequest",
583
+ name="approver",
584
+ field=models.ForeignKey(
585
+ blank=True,
586
+ null=True,
587
+ on_delete=django.db.models.deletion.SET_NULL,
588
+ related_name="approved_requests",
589
+ to="directory.person",
590
+ verbose_name="Approver",
591
+ ),
592
+ ),
593
+ migrations.AddField(
594
+ model_name="mailinglistsubscriberchangerequest",
595
+ name="email_contact",
596
+ field=models.ForeignKey(
597
+ on_delete=django.db.models.deletion.CASCADE,
598
+ related_name="change_requests",
599
+ to="directory.emailcontact",
600
+ verbose_name="Subscriber",
601
+ ),
602
+ ),
603
+ migrations.AddField(
604
+ model_name="mailinglistsubscriberchangerequest",
605
+ name="requester",
606
+ field=models.ForeignKey(
607
+ blank=True,
608
+ null=True,
609
+ on_delete=django.db.models.deletion.SET_NULL,
610
+ to="directory.person",
611
+ verbose_name="Requester",
612
+ ),
613
+ ),
614
+ migrations.AddField(
615
+ model_name="mailingsettings",
616
+ name="entry",
617
+ field=models.OneToOneField(
618
+ on_delete=django.db.models.deletion.CASCADE,
619
+ related_name="mail_settings",
620
+ to="directory.entry",
621
+ verbose_name="Entry",
622
+ ),
623
+ ),
624
+ migrations.AddField(
625
+ model_name="massmail",
626
+ name="creator",
627
+ field=models.ForeignKey(
628
+ blank=True,
629
+ null=True,
630
+ on_delete=django.db.models.deletion.CASCADE,
631
+ related_name="created_mails",
632
+ to="directory.person",
633
+ verbose_name="Creator",
634
+ ),
635
+ ),
636
+ migrations.AddConstraint(
637
+ model_name="mailinglistsubscriberchangerequest",
638
+ constraint=models.UniqueConstraint(
639
+ condition=models.Q(("status", "PENDING")),
640
+ fields=("mailing_list", "email_contact"),
641
+ name="unique_pending_request",
642
+ ),
643
+ ),
644
+ migrations.AlterField(
645
+ model_name="mailinglistsubscriberchangerequest",
646
+ name="updated",
647
+ field=models.DateTimeField(auto_now=True, verbose_name="Updated"),
648
+ ),
649
+ ]
@@ -0,0 +1,16 @@
1
+ # Generated by Django 4.2.6 on 2023-10-24 15:57
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+ dependencies = [
8
+ ("wbmailing", "0001_initial_squashed_squashed_0008_alter_mail_bcc_email_alter_mail_cc_email_and_more"),
9
+ ("directory", "0005_entry_salutation"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.DeleteModel(
14
+ name="MailingSettings",
15
+ ),
16
+ ]
@@ -0,0 +1,25 @@
1
+ # Generated by Django 4.2.9 on 2024-02-20 10:08
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+ dependencies = [
8
+ ("wbmailing", "0002_delete_mailingsettings"),
9
+ ]
10
+
11
+ operations = [
12
+ migrations.AlterModelOptions(
13
+ name="mailinglistsubscriberchangerequest",
14
+ options={
15
+ "permissions": (
16
+ (
17
+ "administrate_mailinglistsubscriberchangerequest",
18
+ "Can Administrate Mailing List Subscriber Change Requests",
19
+ ),
20
+ ),
21
+ "verbose_name": "Mailing List Subscriber Change Request",
22
+ "verbose_name_plural": "Mailing List Subscriber Change Requests",
23
+ },
24
+ ),
25
+ ]
File without changes