wbaccounting 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.
Files changed (102) hide show
  1. wbaccounting/__init__.py +1 -0
  2. wbaccounting/admin/__init__.py +5 -0
  3. wbaccounting/admin/booking_entry.py +53 -0
  4. wbaccounting/admin/entry_accounting_information.py +10 -0
  5. wbaccounting/admin/invoice.py +26 -0
  6. wbaccounting/admin/invoice_type.py +8 -0
  7. wbaccounting/admin/transactions.py +16 -0
  8. wbaccounting/apps.py +5 -0
  9. wbaccounting/dynamic_preferences_registry.py +107 -0
  10. wbaccounting/factories/__init__.py +10 -0
  11. wbaccounting/factories/booking_entry.py +21 -0
  12. wbaccounting/factories/entry_accounting_information.py +46 -0
  13. wbaccounting/factories/invoice.py +43 -0
  14. wbaccounting/factories/transactions.py +32 -0
  15. wbaccounting/files/__init__.py +0 -0
  16. wbaccounting/files/invoice_document_file.py +134 -0
  17. wbaccounting/files/utils.py +331 -0
  18. wbaccounting/generators/__init__.py +6 -0
  19. wbaccounting/generators/base.py +120 -0
  20. wbaccounting/io/handlers/__init__.py +0 -0
  21. wbaccounting/io/handlers/transactions.py +32 -0
  22. wbaccounting/io/parsers/__init__.py +0 -0
  23. wbaccounting/io/parsers/societe_generale_lux.py +49 -0
  24. wbaccounting/io/parsers/societe_generale_lux_prenotification.py +60 -0
  25. wbaccounting/migrations/0001_initial_squashed_squashed_0005_alter_bookingentry_counterparty_and_more.py +284 -0
  26. wbaccounting/migrations/0006_alter_invoice_status.py +30 -0
  27. wbaccounting/migrations/0007_alter_invoice_options.py +23 -0
  28. wbaccounting/migrations/0008_alter_invoice_options.py +20 -0
  29. wbaccounting/migrations/0009_invoicetype_alter_bookingentry_options_and_more.py +366 -0
  30. wbaccounting/migrations/0010_alter_bookingentry_options.py +20 -0
  31. wbaccounting/migrations/0011_transaction.py +103 -0
  32. wbaccounting/migrations/0012_entryaccountinginformation_external_invoice_users.py +25 -0
  33. wbaccounting/migrations/__init__.py +0 -0
  34. wbaccounting/models/__init__.py +6 -0
  35. wbaccounting/models/booking_entry.py +167 -0
  36. wbaccounting/models/entry_accounting_information.py +157 -0
  37. wbaccounting/models/invoice.py +467 -0
  38. wbaccounting/models/invoice_type.py +30 -0
  39. wbaccounting/models/model_tasks.py +71 -0
  40. wbaccounting/models/transactions.py +112 -0
  41. wbaccounting/permissions.py +6 -0
  42. wbaccounting/processors/__init__.py +0 -0
  43. wbaccounting/processors/dummy_processor.py +5 -0
  44. wbaccounting/serializers/__init__.py +12 -0
  45. wbaccounting/serializers/booking_entry.py +78 -0
  46. wbaccounting/serializers/consolidated_invoice.py +109 -0
  47. wbaccounting/serializers/entry_accounting_information.py +149 -0
  48. wbaccounting/serializers/invoice.py +95 -0
  49. wbaccounting/serializers/invoice_type.py +16 -0
  50. wbaccounting/serializers/transactions.py +50 -0
  51. wbaccounting/tests/__init__.py +0 -0
  52. wbaccounting/tests/conftest.py +65 -0
  53. wbaccounting/tests/test_displays/__init__.py +0 -0
  54. wbaccounting/tests/test_displays/test_booking_entries.py +1 -0
  55. wbaccounting/tests/test_models/__init__.py +0 -0
  56. wbaccounting/tests/test_models/test_booking_entries.py +119 -0
  57. wbaccounting/tests/test_models/test_entry_accounting_information.py +81 -0
  58. wbaccounting/tests/test_models/test_invoice_types.py +21 -0
  59. wbaccounting/tests/test_models/test_invoices.py +73 -0
  60. wbaccounting/tests/test_models/test_transactions.py +40 -0
  61. wbaccounting/tests/test_processors.py +28 -0
  62. wbaccounting/tests/test_serializers/__init__.py +0 -0
  63. wbaccounting/tests/test_serializers/test_booking_entries.py +69 -0
  64. wbaccounting/tests/test_serializers/test_entry_accounting_information.py +64 -0
  65. wbaccounting/tests/test_serializers/test_invoice_types.py +35 -0
  66. wbaccounting/tests/test_serializers/test_transactions.py +72 -0
  67. wbaccounting/urls.py +68 -0
  68. wbaccounting/viewsets/__init__.py +12 -0
  69. wbaccounting/viewsets/booking_entry.py +61 -0
  70. wbaccounting/viewsets/buttons/__init__.py +3 -0
  71. wbaccounting/viewsets/buttons/booking_entry.py +15 -0
  72. wbaccounting/viewsets/buttons/entry_accounting_information.py +100 -0
  73. wbaccounting/viewsets/buttons/invoice.py +65 -0
  74. wbaccounting/viewsets/cashflows.py +124 -0
  75. wbaccounting/viewsets/display/__init__.py +8 -0
  76. wbaccounting/viewsets/display/booking_entry.py +58 -0
  77. wbaccounting/viewsets/display/cashflows.py +58 -0
  78. wbaccounting/viewsets/display/entry_accounting_information.py +91 -0
  79. wbaccounting/viewsets/display/invoice.py +218 -0
  80. wbaccounting/viewsets/display/invoice_type.py +19 -0
  81. wbaccounting/viewsets/display/transactions.py +35 -0
  82. wbaccounting/viewsets/endpoints/__init__.py +1 -0
  83. wbaccounting/viewsets/endpoints/invoice.py +6 -0
  84. wbaccounting/viewsets/entry_accounting_information.py +143 -0
  85. wbaccounting/viewsets/invoice.py +277 -0
  86. wbaccounting/viewsets/invoice_type.py +25 -0
  87. wbaccounting/viewsets/menu/__init__.py +6 -0
  88. wbaccounting/viewsets/menu/booking_entry.py +15 -0
  89. wbaccounting/viewsets/menu/cashflows.py +10 -0
  90. wbaccounting/viewsets/menu/entry_accounting_information.py +11 -0
  91. wbaccounting/viewsets/menu/invoice.py +15 -0
  92. wbaccounting/viewsets/menu/invoice_type.py +15 -0
  93. wbaccounting/viewsets/menu/transactions.py +15 -0
  94. wbaccounting/viewsets/titles/__init__.py +4 -0
  95. wbaccounting/viewsets/titles/booking_entry.py +12 -0
  96. wbaccounting/viewsets/titles/entry_accounting_information.py +12 -0
  97. wbaccounting/viewsets/titles/invoice.py +23 -0
  98. wbaccounting/viewsets/titles/invoice_type.py +12 -0
  99. wbaccounting/viewsets/transactions.py +34 -0
  100. wbaccounting-2.2.1.dist-info/METADATA +8 -0
  101. wbaccounting-2.2.1.dist-info/RECORD +102 -0
  102. wbaccounting-2.2.1.dist-info/WHEEL +5 -0
@@ -0,0 +1,284 @@
1
+ # Generated by Django 4.1.7 on 2023-04-19 05:38
2
+
3
+ import django.db.models.deletion
4
+ import django_fsm
5
+ import wbaccounting.models
6
+ from django.db import migrations, models
7
+
8
+
9
+ class Migration(migrations.Migration):
10
+ initial = True
11
+
12
+ dependencies = [
13
+ ("dynamic_preferences", "0006_auto_20191001_2236"),
14
+ ("directory", "0001_initial"),
15
+ ("currency", "0001_initial"),
16
+ ]
17
+
18
+ operations = [
19
+ migrations.CreateModel(
20
+ name="Invoice",
21
+ fields=[
22
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
23
+ (
24
+ "status",
25
+ django_fsm.FSMField(
26
+ choices=[
27
+ ("DRAFT", "Draft"),
28
+ ("PENDING", "Pending"),
29
+ ("EXTERNAL", "External"),
30
+ ("SENT", "Sent"),
31
+ ("PAID", "Paid"),
32
+ ],
33
+ default="DRAFT",
34
+ max_length=50,
35
+ verbose_name="Status",
36
+ ),
37
+ ),
38
+ ("resolved", models.BooleanField(default=False, verbose_name="Resolved")),
39
+ ("title", models.CharField(max_length=255, verbose_name="Title")),
40
+ ("invoice_date", models.DateField(verbose_name="Date")),
41
+ ("text_above", models.TextField(blank=True, null=True)),
42
+ ("text_below", models.TextField(blank=True, null=True)),
43
+ ("is_counterparty_invoice", models.BooleanField(default=False)),
44
+ (
45
+ "invoice_currency",
46
+ models.ForeignKey(
47
+ on_delete=django.db.models.deletion.PROTECT,
48
+ related_name="invoices",
49
+ to="currency.currency",
50
+ verbose_name="Curency",
51
+ ),
52
+ ),
53
+ ],
54
+ options={
55
+ "verbose_name": "Invoice",
56
+ "verbose_name_plural": "Invoices",
57
+ "permissions": (("can_generate_invoice", "Can Generate Invoice"),),
58
+ },
59
+ ),
60
+ migrations.CreateModel(
61
+ name="BookingEntry",
62
+ fields=[
63
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
64
+ ("resolved", models.BooleanField(default=False, verbose_name="Resolved")),
65
+ ("title", models.CharField(max_length=255, verbose_name="Title")),
66
+ ("booking_date", models.DateField(verbose_name="Booking Date")),
67
+ ("accrual_date", models.DateField(blank=True, null=True, verbose_name="Real Date")),
68
+ ("from_date", models.DateField(blank=True, null=True, verbose_name="From")),
69
+ ("to_date", models.DateField(blank=True, null=True, verbose_name="To")),
70
+ (
71
+ "gross_value",
72
+ models.DecimalField(
73
+ blank=True, decimal_places=4, max_digits=16, null=True, verbose_name="Gross Value"
74
+ ),
75
+ ),
76
+ ("vat", models.DecimalField(decimal_places=4, default=0.0, max_digits=4, verbose_name="VAT")),
77
+ (
78
+ "net_value",
79
+ models.DecimalField(
80
+ blank=True, decimal_places=4, max_digits=16, null=True, verbose_name="Net Value"
81
+ ),
82
+ ),
83
+ ("resolved_date", models.DateField(blank=True, null=True, verbose_name="Resolved Date")),
84
+ (
85
+ "invoice",
86
+ models.ForeignKey(
87
+ blank=True,
88
+ null=True,
89
+ on_delete=django.db.models.deletion.SET_NULL,
90
+ related_name="booking_entries",
91
+ to="wbaccounting.invoice",
92
+ verbose_name="Invoice",
93
+ ),
94
+ ),
95
+ ("related_data", models.JSONField(default=dict, verbose_name="Related Data")),
96
+ (
97
+ "calculated_value",
98
+ models.DecimalField(
99
+ blank=True, decimal_places=4, max_digits=16, null=True, verbose_name="Final Value"
100
+ ),
101
+ ),
102
+ (
103
+ "main_booking_entry",
104
+ models.ForeignKey(
105
+ blank=True,
106
+ null=True,
107
+ on_delete=django.db.models.deletion.CASCADE,
108
+ related_name="appended_booking_entries",
109
+ to="wbaccounting.bookingentry",
110
+ verbose_name="Main Booking Entry",
111
+ ),
112
+ ),
113
+ (
114
+ "currency",
115
+ models.ForeignKey(
116
+ on_delete=django.db.models.deletion.PROTECT,
117
+ related_name="booking_entries",
118
+ to="currency.currency",
119
+ verbose_name="Currency",
120
+ ),
121
+ ),
122
+ ],
123
+ options={
124
+ "verbose_name": "Booking Entry",
125
+ "verbose_name_plural": "Booking Entries",
126
+ },
127
+ ),
128
+ migrations.CreateModel(
129
+ name="EntryAccountingInformation",
130
+ fields=[
131
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
132
+ ("tax_id", models.CharField(blank=True, max_length=512, null=True, verbose_name="Tax ID")),
133
+ ("vat", models.FloatField(blank=True, null=True, verbose_name="VAT")),
134
+ ("social_charges", models.FloatField(blank=True, null=True, verbose_name="Social Charges")),
135
+ (
136
+ "label_mapping",
137
+ models.JSONField(default=dict, verbose_name="Label Mapping"),
138
+ ),
139
+ ("email_subject", models.TextField(default="{{invoice.title}}", verbose_name="Subject")),
140
+ ("email_body", models.TextField(default="", verbose_name="Body")),
141
+ (
142
+ "default_currency",
143
+ models.ForeignKey(
144
+ blank=True,
145
+ null=True,
146
+ on_delete=django.db.models.deletion.PROTECT,
147
+ related_name="entry_accounting_informations",
148
+ to="currency.currency",
149
+ verbose_name="Default Currency",
150
+ ),
151
+ ),
152
+ ],
153
+ options={
154
+ "verbose_name": "Entry Accounting Information",
155
+ "verbose_name_plural": "Entry Accounting Information",
156
+ },
157
+ ),
158
+ migrations.AddField(
159
+ model_name="bookingentry",
160
+ name="counterparty",
161
+ field=models.ForeignKey(
162
+ default=None,
163
+ on_delete=django.db.models.deletion.PROTECT,
164
+ related_name="booking_entries",
165
+ to="directory.entry",
166
+ verbose_name="Counterparty",
167
+ ),
168
+ preserve_default=False,
169
+ ),
170
+ migrations.AddField(
171
+ model_name="entryaccountinginformation",
172
+ name="email_bcc",
173
+ field=models.ManyToManyField(
174
+ blank=True,
175
+ related_name="entry_accounting_informations_bcc",
176
+ to="directory.emailcontact",
177
+ verbose_name="BCC",
178
+ ),
179
+ ),
180
+ migrations.AddField(
181
+ model_name="entryaccountinginformation",
182
+ name="email_cc",
183
+ field=models.ManyToManyField(
184
+ blank=True,
185
+ related_name="entry_accounting_informations_cc",
186
+ to="directory.emailcontact",
187
+ verbose_name="CC",
188
+ ),
189
+ ),
190
+ migrations.AddField(
191
+ model_name="entryaccountinginformation",
192
+ name="email_to",
193
+ field=models.ManyToManyField(
194
+ blank=True,
195
+ related_name="entry_accounting_informations_to",
196
+ to="directory.emailcontact",
197
+ verbose_name="To",
198
+ ),
199
+ ),
200
+ migrations.AddField(
201
+ model_name="entryaccountinginformation",
202
+ name="entry",
203
+ field=models.OneToOneField(
204
+ default=None,
205
+ on_delete=django.db.models.deletion.CASCADE,
206
+ related_name="entry_accounting_information",
207
+ to="directory.entry",
208
+ verbose_name="Entry",
209
+ ),
210
+ preserve_default=False,
211
+ ),
212
+ migrations.AddField(
213
+ model_name="invoice",
214
+ name="counterparty",
215
+ field=models.ForeignKey(
216
+ default=None,
217
+ on_delete=django.db.models.deletion.PROTECT,
218
+ related_name="accounting_invoices",
219
+ to="directory.entry",
220
+ verbose_name="Counterparty",
221
+ ),
222
+ preserve_default=False,
223
+ ),
224
+ migrations.AlterField(
225
+ model_name="bookingentry",
226
+ name="counterparty",
227
+ field=models.ForeignKey(
228
+ on_delete=django.db.models.deletion.PROTECT,
229
+ related_name="booking_entries",
230
+ to="directory.entry",
231
+ verbose_name="Counterparty",
232
+ ),
233
+ ),
234
+ migrations.AlterField(
235
+ model_name="entryaccountinginformation",
236
+ name="email_bcc",
237
+ field=models.ManyToManyField(
238
+ blank=True,
239
+ related_name="entry_accounting_informations_bcc",
240
+ to="directory.emailcontact",
241
+ verbose_name="BCC",
242
+ ),
243
+ ),
244
+ migrations.AlterField(
245
+ model_name="entryaccountinginformation",
246
+ name="email_cc",
247
+ field=models.ManyToManyField(
248
+ blank=True,
249
+ related_name="entry_accounting_informations_cc",
250
+ to="directory.emailcontact",
251
+ verbose_name="CC",
252
+ ),
253
+ ),
254
+ migrations.AlterField(
255
+ model_name="entryaccountinginformation",
256
+ name="email_to",
257
+ field=models.ManyToManyField(
258
+ blank=True,
259
+ related_name="entry_accounting_informations_to",
260
+ to="directory.emailcontact",
261
+ verbose_name="To",
262
+ ),
263
+ ),
264
+ migrations.AlterField(
265
+ model_name="entryaccountinginformation",
266
+ name="entry",
267
+ field=models.OneToOneField(
268
+ on_delete=django.db.models.deletion.CASCADE,
269
+ related_name="entry_accounting_information",
270
+ to="directory.entry",
271
+ verbose_name="Entry",
272
+ ),
273
+ ),
274
+ migrations.AlterField(
275
+ model_name="invoice",
276
+ name="counterparty",
277
+ field=models.ForeignKey(
278
+ on_delete=django.db.models.deletion.PROTECT,
279
+ related_name="accounting_invoices",
280
+ to="directory.entry",
281
+ verbose_name="Counterparty",
282
+ ),
283
+ ),
284
+ ]
@@ -0,0 +1,30 @@
1
+ # Generated by Django 4.1.9 on 2023-05-16 14:46
2
+
3
+ import django_fsm
4
+ from django.db import migrations
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+ dependencies = [
9
+ ("wbaccounting", "0001_initial_squashed_squashed_0005_alter_bookingentry_counterparty_and_more"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name="invoice",
15
+ name="status",
16
+ field=django_fsm.FSMField(
17
+ choices=[
18
+ ("DRAFT", "Draft"),
19
+ ("PENDING", "Pending"),
20
+ ("EXTERNAL", "External"),
21
+ ("SENT", "Sent"),
22
+ ("PAID", "Paid"),
23
+ ("CANCELLED", "Cancelled"),
24
+ ],
25
+ default="DRAFT",
26
+ max_length=50,
27
+ verbose_name="Status",
28
+ ),
29
+ ),
30
+ ]
@@ -0,0 +1,23 @@
1
+ # Generated by Django 4.1.10 on 2023-08-30 11:20
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+ dependencies = [
8
+ ("wbaccounting", "0006_alter_invoice_status"),
9
+ ]
10
+
11
+ operations = [
12
+ migrations.AlterModelOptions(
13
+ name="invoice",
14
+ options={
15
+ "permissions": (
16
+ ("can_generate_invoice", "Can Generate Invoice"),
17
+ ("administrate_invoice", "Can administer Invoice"),
18
+ ),
19
+ "verbose_name": "Invoice",
20
+ "verbose_name_plural": "Invoices",
21
+ },
22
+ ),
23
+ ]
@@ -0,0 +1,20 @@
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
+ ("wbaccounting", "0007_alter_invoice_options"),
9
+ ]
10
+
11
+ operations = [
12
+ migrations.AlterModelOptions(
13
+ name="invoice",
14
+ options={
15
+ "permissions": (("administrate_invoice", "Can Administrate Invoice"),),
16
+ "verbose_name": "Invoice",
17
+ "verbose_name_plural": "Invoices",
18
+ },
19
+ ),
20
+ ]