django-ledger 0.5.5.5__py3-none-any.whl → 0.5.6.0__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 django-ledger might be problematic. Click here for more details.

Files changed (45) hide show
  1. django_ledger/__init__.py +1 -1
  2. django_ledger/admin/entity.py +16 -2
  3. django_ledger/admin/ledger.py +2 -1
  4. django_ledger/forms/entity.py +4 -12
  5. django_ledger/forms/ledger.py +19 -0
  6. django_ledger/forms/transactions.py +1 -1
  7. django_ledger/io/__init__.py +4 -1
  8. django_ledger/io/{io_mixin.py → io_core.py} +49 -28
  9. django_ledger/io/io_digest.py +7 -0
  10. django_ledger/io/{data_generator.py → io_generator.py} +51 -8
  11. django_ledger/io/io_library.py +317 -0
  12. django_ledger/io/{io_context.py → io_middleware.py} +16 -9
  13. django_ledger/migrations/0001_initial.py +413 -132
  14. django_ledger/migrations/0014_ledgermodel_ledger_xid_and_more.py +22 -0
  15. django_ledger/models/accounts.py +8 -7
  16. django_ledger/models/bank_account.py +12 -11
  17. django_ledger/models/bill.py +5 -9
  18. django_ledger/models/closing_entry.py +14 -14
  19. django_ledger/models/coa.py +1 -1
  20. django_ledger/models/customer.py +5 -11
  21. django_ledger/models/data_import.py +12 -6
  22. django_ledger/models/entity.py +88 -10
  23. django_ledger/models/estimate.py +12 -9
  24. django_ledger/models/invoice.py +10 -4
  25. django_ledger/models/items.py +11 -6
  26. django_ledger/models/journal_entry.py +6 -13
  27. django_ledger/models/ledger.py +65 -15
  28. django_ledger/models/mixins.py +2 -3
  29. django_ledger/models/purchase_order.py +11 -7
  30. django_ledger/models/transactions.py +3 -1
  31. django_ledger/models/unit.py +13 -14
  32. django_ledger/models/vendor.py +12 -11
  33. django_ledger/templates/django_ledger/journal_entry/je_list.html +3 -0
  34. django_ledger/templatetags/django_ledger.py +1 -1
  35. django_ledger/tests/base.py +1 -1
  36. django_ledger/urls/ledger.py +3 -0
  37. django_ledger/views/entity.py +9 -3
  38. django_ledger/views/ledger.py +14 -7
  39. django_ledger/views/mixins.py +9 -1
  40. {django_ledger-0.5.5.5.dist-info → django_ledger-0.5.6.0.dist-info}/METADATA +8 -8
  41. {django_ledger-0.5.5.5.dist-info → django_ledger-0.5.6.0.dist-info}/RECORD +45 -43
  42. {django_ledger-0.5.5.5.dist-info → django_ledger-0.5.6.0.dist-info}/AUTHORS.md +0 -0
  43. {django_ledger-0.5.5.5.dist-info → django_ledger-0.5.6.0.dist-info}/LICENSE +0 -0
  44. {django_ledger-0.5.5.5.dist-info → django_ledger-0.5.6.0.dist-info}/WHEEL +0 -0
  45. {django_ledger-0.5.5.5.dist-info → django_ledger-0.5.6.0.dist-info}/top_level.txt +0 -0
@@ -9,13 +9,12 @@ import django.db.models.manager
9
9
  from django.conf import settings
10
10
  from django.db import migrations, models
11
11
 
12
- import django_ledger.io.io_mixin
12
+ import django_ledger.io.io_core
13
13
  import django_ledger.models.entity
14
14
  import django_ledger.models.mixins
15
15
 
16
16
 
17
17
  class Migration(migrations.Migration):
18
-
19
18
  initial = True
20
19
 
21
20
  dependencies = [
@@ -34,8 +33,33 @@ class Migration(migrations.Migration):
34
33
  ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
35
34
  ('code', models.CharField(max_length=10, verbose_name='Account Code')),
36
35
  ('name', models.CharField(max_length=100, verbose_name='Account Name')),
37
- ('role', models.CharField(choices=[('Assets', (('asset_ca_cash', 'Current Asset'), ('asset_ca_mkt_sec', 'Marketable Securities'), ('asset_ca_recv', 'Receivables'), ('asset_ca_inv', 'Inventory'), ('asset_ca_uncoll', 'Uncollectibles'), ('asset_ca_prepaid', 'Prepaid'), ('asset_ca_other', 'Other Liquid Assets'), ('asset_lti_notes', 'Notes Receivable'), ('asset_lti_land', 'Land'), ('asset_lti_sec', 'Securities'), ('asset_ppe_build', 'Buildings'), ('asset_ppe_build_accum_depr', 'Buildings - Accum. Depreciation'), ('asset_ppe_plant', 'Plant'), ('asset_ppe_plant_depr', 'Plant - Accum. Depreciation'), ('asset_ppe_equip', 'Equipment'), ('asset_ppe_equip_accum_depr', 'Equipment - Accum. Depreciation'), ('asset_ia', 'Intangible Assets'), ('asset_ia_accum_amort', 'Intangible Assets - Accum. Amortization'), ('asset_adjustment', 'Other Assets'))), ('Liabilities', (('lia_cl_acc_payable', 'Accounts Payable'), ('lia_cl_wages_payable', 'Wages Payable'), ('lia_cl_int_payable', 'Interest Payable'), ('lia_cl_taxes_payable', 'Taxes Payable'), ('lia_cl_st_notes_payable', 'Notes Payable'), ('lia_cl_ltd_mat', 'Current Maturities of Long Tern Debt'), ('lia_cl_def_rev', 'Deferred Revenue'), ('lia_cl_other', 'Other Liabilities'), ('lia_ltl_notes', 'Notes Payable'), ('lia_ltl_bonds', 'Bonds Payable'), ('lia_ltl_mortgage', 'Mortgage Payable'))), ('Equity', (('eq_capital', 'Capital'), ('eq_stock_common', 'Common Stock'), ('eq_stock_preferred', 'Preferred Stock'), ('eq_adjustment', 'Other Equity Adjustments'), ('eq_dividends', 'Dividends & Distributions to Shareholders'), ('in_operational', 'Operational Income'), ('in_passive', 'Investing/Passive Income'), ('in_interest', 'Interest Income'), ('in_gain_loss', 'Capital Gain/Loss Income'), ('in_other', 'Other Income'), ('ex_cogs', 'Cost of Goods Sold'), ('ex_regular', 'Regular Expense'), ('ex_interest', 'Interest Expense'), ('ex_taxes', 'Tax Expense'), ('ex_capital', 'Capital Expense'), ('ex_depreciation', 'Depreciation Expense'), ('ex_amortization', 'Amortization Expense'), ('ex_other', 'Other Expense')))], max_length=30, verbose_name='Account Role')),
38
- ('balance_type', models.CharField(choices=[('credit', 'Credit'), ('debit', 'Debit')], max_length=6, verbose_name='Account Balance Type')),
36
+ ('role', models.CharField(choices=[('Assets', (
37
+ ('asset_ca_cash', 'Current Asset'), ('asset_ca_mkt_sec', 'Marketable Securities'),
38
+ ('asset_ca_recv', 'Receivables'), ('asset_ca_inv', 'Inventory'), ('asset_ca_uncoll', 'Uncollectibles'),
39
+ ('asset_ca_prepaid', 'Prepaid'), ('asset_ca_other', 'Other Liquid Assets'),
40
+ ('asset_lti_notes', 'Notes Receivable'), ('asset_lti_land', 'Land'), ('asset_lti_sec', 'Securities'),
41
+ ('asset_ppe_build', 'Buildings'), ('asset_ppe_build_accum_depr', 'Buildings - Accum. Depreciation'),
42
+ ('asset_ppe_plant', 'Plant'), ('asset_ppe_plant_depr', 'Plant - Accum. Depreciation'),
43
+ ('asset_ppe_equip', 'Equipment'), ('asset_ppe_equip_accum_depr', 'Equipment - Accum. Depreciation'),
44
+ ('asset_ia', 'Intangible Assets'), ('asset_ia_accum_amort', 'Intangible Assets - Accum. Amortization'),
45
+ ('asset_adjustment', 'Other Assets'))), ('Liabilities', (
46
+ ('lia_cl_acc_payable', 'Accounts Payable'), ('lia_cl_wages_payable', 'Wages Payable'),
47
+ ('lia_cl_int_payable', 'Interest Payable'), ('lia_cl_taxes_payable', 'Taxes Payable'),
48
+ ('lia_cl_st_notes_payable', 'Notes Payable'),
49
+ ('lia_cl_ltd_mat', 'Current Maturities of Long Tern Debt'), ('lia_cl_def_rev', 'Deferred Revenue'),
50
+ ('lia_cl_other', 'Other Liabilities'), ('lia_ltl_notes', 'Notes Payable'),
51
+ ('lia_ltl_bonds', 'Bonds Payable'), ('lia_ltl_mortgage', 'Mortgage Payable'))), ('Equity', (
52
+ ('eq_capital', 'Capital'), ('eq_stock_common', 'Common Stock'),
53
+ ('eq_stock_preferred', 'Preferred Stock'), ('eq_adjustment', 'Other Equity Adjustments'),
54
+ ('eq_dividends', 'Dividends & Distributions to Shareholders'), ('in_operational', 'Operational Income'),
55
+ ('in_passive', 'Investing/Passive Income'), ('in_interest', 'Interest Income'),
56
+ ('in_gain_loss', 'Capital Gain/Loss Income'), ('in_other', 'Other Income'),
57
+ ('ex_cogs', 'Cost of Goods Sold'), ('ex_regular', 'Regular Expense'),
58
+ ('ex_interest', 'Interest Expense'), ('ex_taxes', 'Tax Expense'), ('ex_capital', 'Capital Expense'),
59
+ ('ex_depreciation', 'Depreciation Expense'), ('ex_amortization', 'Amortization Expense'),
60
+ ('ex_other', 'Other Expense')))], max_length=30, verbose_name='Account Role')),
61
+ ('balance_type', models.CharField(choices=[('credit', 'Credit'), ('debit', 'Debit')], max_length=6,
62
+ verbose_name='Account Balance Type')),
39
63
  ('locked', models.BooleanField(default=False, verbose_name='Locked')),
40
64
  ('active', models.BooleanField(default=False, verbose_name='Active')),
41
65
  ],
@@ -51,21 +75,35 @@ class Migration(migrations.Migration):
51
75
  fields=[
52
76
  ('created', models.DateTimeField(auto_now_add=True)),
53
77
  ('updated', models.DateTimeField(auto_now=True, null=True)),
54
- ('amount_due', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Amount Due')),
55
- ('amount_paid', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Paid')),
56
- ('amount_receivable', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Receivable')),
57
- ('amount_unearned', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Unearned')),
58
- ('amount_earned', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Earned')),
78
+ ('amount_due',
79
+ models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Amount Due')),
80
+ ('amount_paid', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[
81
+ django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Paid')),
82
+ ('amount_receivable', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[
83
+ django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Receivable')),
84
+ ('amount_unearned', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[
85
+ django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Unearned')),
86
+ ('amount_earned', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[
87
+ django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Earned')),
59
88
  ('accrue', models.BooleanField(default=False, verbose_name='Accrue')),
60
- ('progress', models.DecimalField(decimal_places=2, default=0, max_digits=3, validators=[django.core.validators.MinValueValidator(limit_value=0), django.core.validators.MaxValueValidator(limit_value=1)], verbose_name='Progress Amount')),
61
- ('terms', models.CharField(choices=[('on_receipt', 'Due On Receipt'), ('net_30', 'Net 30 Days'), ('net_60', 'Net 60 Days'), ('net_90', 'Net 90 Days')], default='on_receipt', max_length=10, verbose_name='Terms')),
89
+ ('progress', models.DecimalField(decimal_places=2, default=0, max_digits=3,
90
+ validators=[django.core.validators.MinValueValidator(limit_value=0),
91
+ django.core.validators.MaxValueValidator(limit_value=1)],
92
+ verbose_name='Progress Amount')),
93
+ ('terms', models.CharField(
94
+ choices=[('on_receipt', 'Due On Receipt'), ('net_30', 'Net 30 Days'), ('net_60', 'Net 60 Days'),
95
+ ('net_90', 'Net 90 Days')], default='on_receipt', max_length=10, verbose_name='Terms')),
62
96
  ('date_due', models.DateField(blank=True, null=True, verbose_name='Due Date')),
63
97
  ('markdown_notes', models.TextField(blank=True, null=True, verbose_name='Markdown Notes')),
64
98
  ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
65
99
  ('bill_number', models.SlugField(editable=False, max_length=20, verbose_name='Bill Number')),
66
- ('bill_status', models.CharField(choices=[('draft', 'Draft'), ('in_review', 'In Review'), ('approved', 'Approved'), ('paid', 'Paid'), ('canceled', 'Canceled'), ('void', 'Void')], default='draft', max_length=10, verbose_name='Bill Status')),
100
+ ('bill_status', models.CharField(
101
+ choices=[('draft', 'Draft'), ('in_review', 'In Review'), ('approved', 'Approved'), ('paid', 'Paid'),
102
+ ('canceled', 'Canceled'), ('void', 'Void')], default='draft', max_length=10,
103
+ verbose_name='Bill Status')),
67
104
  ('xref', models.SlugField(blank=True, null=True, verbose_name='External Reference Number')),
68
- ('additional_info', models.JSONField(blank=True, default=dict, null=True, verbose_name='Bill Additional Info')),
105
+ ('additional_info',
106
+ models.JSONField(blank=True, default=dict, null=True, verbose_name='Bill Additional Info')),
69
107
  ('date_draft', models.DateField(blank=True, null=True, verbose_name='Draft Date')),
70
108
  ('date_in_review', models.DateField(blank=True, null=True, verbose_name='In Review Date')),
71
109
  ('date_approved', models.DateField(blank=True, null=True, verbose_name='Approved Date')),
@@ -83,7 +121,9 @@ class Migration(migrations.Migration):
83
121
  migrations.CreateModel(
84
122
  name='ChartOfAccountModel',
85
123
  fields=[
86
- ('slug', models.SlugField(editable=False, unique=True, validators=[django.core.validators.MinLengthValidator(limit_value=10, message='Slug field must contain at least 10 characters.')])),
124
+ ('slug', models.SlugField(editable=False, unique=True, validators=[
125
+ django.core.validators.MinLengthValidator(limit_value=10,
126
+ message='Slug field must contain at least 10 characters.')])),
87
127
  ('name', models.CharField(blank=True, max_length=150, null=True)),
88
128
  ('created', models.DateTimeField(auto_now_add=True)),
89
129
  ('updated', models.DateTimeField(auto_now=True, null=True)),
@@ -112,7 +152,9 @@ class Migration(migrations.Migration):
112
152
  ('email', models.EmailField(blank=True, max_length=254, null=True, verbose_name='Email')),
113
153
  ('website', models.URLField(blank=True, null=True, verbose_name='Website')),
114
154
  ('phone', models.CharField(blank=True, max_length=30, null=True, verbose_name='Phone Number')),
115
- ('sales_tax_rate', models.FloatField(blank=True, default=0.0, null=True, validators=[django.core.validators.MinValueValidator(limit_value=0.0), django.core.validators.MaxValueValidator(limit_value=1.0)], verbose_name='Sales Tax Rate')),
155
+ ('sales_tax_rate', models.FloatField(blank=True, default=0.0, null=True, validators=[
156
+ django.core.validators.MinValueValidator(limit_value=0.0),
157
+ django.core.validators.MaxValueValidator(limit_value=1.0)], verbose_name='Sales Tax Rate')),
116
158
  ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
117
159
  ('customer_name', models.CharField(max_length=100)),
118
160
  ('customer_number', models.CharField(editable=False, max_length=30, verbose_name='Customer Number')),
@@ -132,7 +174,10 @@ class Migration(migrations.Migration):
132
174
  ('created', models.DateTimeField(auto_now_add=True)),
133
175
  ('updated', models.DateTimeField(auto_now=True, null=True)),
134
176
  ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
135
- ('permission_level', models.CharField(choices=[('read', 'Read Permissions'), ('write', 'Read/Write Permissions'), ('suspended', 'No Permissions')], default='read', max_length=10, verbose_name='Permission Level')),
177
+ ('permission_level', models.CharField(
178
+ choices=[('read', 'Read Permissions'), ('write', 'Read/Write Permissions'),
179
+ ('suspended', 'No Permissions')], default='read', max_length=10,
180
+ verbose_name='Permission Level')),
136
181
  ],
137
182
  options={
138
183
  'abstract': False,
@@ -141,7 +186,9 @@ class Migration(migrations.Migration):
141
186
  migrations.CreateModel(
142
187
  name='EntityModel',
143
188
  fields=[
144
- ('slug', models.SlugField(editable=False, unique=True, validators=[django.core.validators.MinLengthValidator(limit_value=10, message='Slug field must contain at least 10 characters.')])),
189
+ ('slug', models.SlugField(editable=False, unique=True, validators=[
190
+ django.core.validators.MinLengthValidator(limit_value=10,
191
+ message='Slug field must contain at least 10 characters.')])),
145
192
  ('created', models.DateTimeField(auto_now_add=True)),
146
193
  ('updated', models.DateTimeField(auto_now=True, null=True)),
147
194
  ('address_1', models.CharField(max_length=70, verbose_name='Address Line 1')),
@@ -160,11 +207,19 @@ class Migration(migrations.Migration):
160
207
  ('name', models.CharField(max_length=150, verbose_name='Entity Name')),
161
208
  ('hidden', models.BooleanField(default=False)),
162
209
  ('accrual_method', models.BooleanField(default=False, verbose_name='Use Accrual Method')),
163
- ('fy_start_month', models.IntegerField(choices=[(1, 'January'), (2, 'February'), (3, 'March'), (4, 'April'), (5, 'May'), (6, 'June'), (7, 'July'), (8, 'August'), (9, 'September'), (10, 'October'), (11, 'November'), (12, 'December')], default=1, verbose_name='Fiscal Year Start')),
210
+ ('fy_start_month', models.IntegerField(
211
+ choices=[(1, 'January'), (2, 'February'), (3, 'March'), (4, 'April'), (5, 'May'), (6, 'June'),
212
+ (7, 'July'), (8, 'August'), (9, 'September'), (10, 'October'), (11, 'November'),
213
+ (12, 'December')], default=1, verbose_name='Fiscal Year Start')),
164
214
  ('picture', models.ImageField(blank=True, null=True, upload_to='')),
165
- ('admin', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='admin_of', to=settings.AUTH_USER_MODEL, verbose_name='Admin')),
166
- ('default_coa', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='django_ledger.chartofaccountmodel', verbose_name='Default Chart of Accounts')),
167
- ('managers', models.ManyToManyField(related_name='managed_by', through='django_ledger.EntityManagementModel', to=settings.AUTH_USER_MODEL, verbose_name='Managers')),
215
+ ('admin', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='admin_of',
216
+ to=settings.AUTH_USER_MODEL, verbose_name='Admin')),
217
+ ('default_coa', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT,
218
+ to='django_ledger.chartofaccountmodel',
219
+ verbose_name='Default Chart of Accounts')),
220
+ ('managers',
221
+ models.ManyToManyField(related_name='managed_by', through='django_ledger.EntityManagementModel',
222
+ to=settings.AUTH_USER_MODEL, verbose_name='Managers')),
168
223
  ],
169
224
  options={
170
225
  'verbose_name': 'Entity',
@@ -172,7 +227,8 @@ class Migration(migrations.Migration):
172
227
  'ordering': ['-created'],
173
228
  'abstract': False,
174
229
  },
175
- bases=(models.Model, django_ledger.io.io_mixin.IOMixIn, django_ledger.models.mixins.LoggingMixIn, django_ledger.models.entity.EntityModelFiscalPeriodMixIn),
230
+ bases=(models.Model, django_ledger.io.io_core.IOMixIn, django_ledger.models.mixins.LoggingMixIn,
231
+ django_ledger.models.entity.EntityModelFiscalPeriodMixIn),
176
232
  ),
177
233
  migrations.CreateModel(
178
234
  name='EntityUnitModel',
@@ -188,14 +244,15 @@ class Migration(migrations.Migration):
188
244
  ('document_prefix', models.CharField(max_length=3)),
189
245
  ('active', models.BooleanField(default=True, verbose_name='Is Active')),
190
246
  ('hidden', models.BooleanField(default=False, verbose_name='Is Hidden')),
191
- ('entity', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel', verbose_name='Unit Entity')),
247
+ ('entity', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE,
248
+ to='django_ledger.entitymodel', verbose_name='Unit Entity')),
192
249
  ],
193
250
  options={
194
251
  'verbose_name': 'Entity Unit Model',
195
252
  'ordering': ['-created'],
196
253
  'abstract': False,
197
254
  },
198
- bases=(django_ledger.io.io_mixin.IOMixIn, models.Model),
255
+ bases=(django_ledger.io.io_core.IOMixIn, models.Model),
199
256
  ),
200
257
  migrations.CreateModel(
201
258
  name='EstimateModel',
@@ -205,22 +262,53 @@ class Migration(migrations.Migration):
205
262
  ('markdown_notes', models.TextField(blank=True, null=True, verbose_name='Markdown Notes')),
206
263
  ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
207
264
  ('estimate_number', models.SlugField(editable=False, max_length=20, verbose_name='Estimate Number')),
208
- ('terms', models.CharField(choices=[('fixed', 'Fixed Price'), ('target', 'Target Price'), ('t&m', 'Time & Materials'), ('other', 'Other')], max_length=10, verbose_name='Contract Terms')),
209
- ('title', models.CharField(max_length=250, validators=[django.core.validators.MinLengthValidator(limit_value=5, message='PO Title length must be greater than 5')], verbose_name='Customer Estimate Title')),
210
- ('status', models.CharField(choices=[('draft', 'Draft'), ('in_review', 'In Review'), ('approved', 'Approved'), ('completed', 'Completed'), ('void', 'Void'), ('canceled', 'Canceled')], default='draft', max_length=10, verbose_name='Customer Estimate Status')),
265
+ ('terms', models.CharField(
266
+ choices=[('fixed', 'Fixed Price'), ('target', 'Target Price'), ('t&m', 'Time & Materials'),
267
+ ('other', 'Other')], max_length=10, verbose_name='Contract Terms')),
268
+ ('title', models.CharField(max_length=250, validators=[
269
+ django.core.validators.MinLengthValidator(limit_value=5,
270
+ message='PO Title length must be greater than 5')],
271
+ verbose_name='Customer Estimate Title')),
272
+ ('status', models.CharField(
273
+ choices=[('draft', 'Draft'), ('in_review', 'In Review'), ('approved', 'Approved'),
274
+ ('completed', 'Completed'), ('void', 'Void'), ('canceled', 'Canceled')], default='draft',
275
+ max_length=10, verbose_name='Customer Estimate Status')),
211
276
  ('date_draft', models.DateField(blank=True, null=True, verbose_name='Date Draft')),
212
277
  ('date_in_review', models.DateField(blank=True, null=True, verbose_name='Date In Review')),
213
278
  ('date_approved', models.DateField(blank=True, null=True, verbose_name='Date Approved')),
214
279
  ('date_completed', models.DateField(blank=True, null=True, verbose_name='Date Completed')),
215
280
  ('date_canceled', models.DateField(blank=True, null=True, verbose_name='Date Canceled')),
216
281
  ('date_void', models.DateField(blank=True, null=True, verbose_name='Date Void')),
217
- ('revenue_estimate', models.DecimalField(decimal_places=2, default=Decimal('0.00'), help_text='Estimated cost to complete the quoted work.', max_digits=20, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Total revenue estimate')),
218
- ('labor_estimate', models.DecimalField(decimal_places=2, default=Decimal('0.00'), help_text='Estimated labor cost to complete the quoted work.', max_digits=20, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Labor Cost of labor estimate')),
219
- ('material_estimate', models.DecimalField(decimal_places=2, default=0.0, help_text='Estimated material cost to complete the quoted work.', max_digits=20, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Material Cost Estimate')),
220
- ('equipment_estimate', models.DecimalField(decimal_places=2, default=Decimal('0.00'), help_text='Estimated equipment cost to complete the quoted work.', max_digits=20, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Equipment Cost Estimate')),
221
- ('other_estimate', models.DecimalField(decimal_places=2, default=Decimal('0.00'), help_text='Estimated equipment cost to complete the quoted work.', max_digits=20, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Other Cost Estimate')),
222
- ('customer', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.customermodel', verbose_name='Customer')),
223
- ('entity', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel', verbose_name='Entity Model')),
282
+ ('revenue_estimate', models.DecimalField(decimal_places=2, default=Decimal('0.00'),
283
+ help_text='Estimated cost to complete the quoted work.',
284
+ max_digits=20,
285
+ validators=[django.core.validators.MinValueValidator(0)],
286
+ verbose_name='Total revenue estimate')),
287
+ ('labor_estimate', models.DecimalField(decimal_places=2, default=Decimal('0.00'),
288
+ help_text='Estimated labor cost to complete the quoted work.',
289
+ max_digits=20,
290
+ validators=[django.core.validators.MinValueValidator(0)],
291
+ verbose_name='Labor Cost of labor estimate')),
292
+ ('material_estimate', models.DecimalField(decimal_places=2, default=0.0,
293
+ help_text='Estimated material cost to complete the quoted work.',
294
+ max_digits=20,
295
+ validators=[django.core.validators.MinValueValidator(0)],
296
+ verbose_name='Material Cost Estimate')),
297
+ ('equipment_estimate', models.DecimalField(decimal_places=2, default=Decimal('0.00'),
298
+ help_text='Estimated equipment cost to complete the quoted work.',
299
+ max_digits=20,
300
+ validators=[django.core.validators.MinValueValidator(0)],
301
+ verbose_name='Equipment Cost Estimate')),
302
+ ('other_estimate', models.DecimalField(decimal_places=2, default=Decimal('0.00'),
303
+ help_text='Estimated equipment cost to complete the quoted work.',
304
+ max_digits=20,
305
+ validators=[django.core.validators.MinValueValidator(0)],
306
+ verbose_name='Other Cost Estimate')),
307
+ ('customer',
308
+ models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.customermodel',
309
+ verbose_name='Customer')),
310
+ ('entity', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE,
311
+ to='django_ledger.entitymodel', verbose_name='Entity Model')),
224
312
  ],
225
313
  options={
226
314
  'verbose_name': 'Customer Job',
@@ -248,29 +336,49 @@ class Migration(migrations.Migration):
248
336
  fields=[
249
337
  ('created', models.DateTimeField(auto_now_add=True)),
250
338
  ('updated', models.DateTimeField(auto_now=True, null=True)),
251
- ('amount_due', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Amount Due')),
252
- ('amount_paid', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Paid')),
253
- ('amount_receivable', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Receivable')),
254
- ('amount_unearned', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Unearned')),
255
- ('amount_earned', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Earned')),
339
+ ('amount_due',
340
+ models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Amount Due')),
341
+ ('amount_paid', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[
342
+ django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Paid')),
343
+ ('amount_receivable', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[
344
+ django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Receivable')),
345
+ ('amount_unearned', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[
346
+ django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Unearned')),
347
+ ('amount_earned', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[
348
+ django.core.validators.MinValueValidator(limit_value=0)], verbose_name='Amount Earned')),
256
349
  ('accrue', models.BooleanField(default=False, verbose_name='Accrue')),
257
- ('progress', models.DecimalField(decimal_places=2, default=0, max_digits=3, validators=[django.core.validators.MinValueValidator(limit_value=0), django.core.validators.MaxValueValidator(limit_value=1)], verbose_name='Progress Amount')),
258
- ('terms', models.CharField(choices=[('on_receipt', 'Due On Receipt'), ('net_30', 'Net 30 Days'), ('net_60', 'Net 60 Days'), ('net_90', 'Net 90 Days')], default='on_receipt', max_length=10, verbose_name='Terms')),
350
+ ('progress', models.DecimalField(decimal_places=2, default=0, max_digits=3,
351
+ validators=[django.core.validators.MinValueValidator(limit_value=0),
352
+ django.core.validators.MaxValueValidator(limit_value=1)],
353
+ verbose_name='Progress Amount')),
354
+ ('terms', models.CharField(
355
+ choices=[('on_receipt', 'Due On Receipt'), ('net_30', 'Net 30 Days'), ('net_60', 'Net 60 Days'),
356
+ ('net_90', 'Net 90 Days')], default='on_receipt', max_length=10, verbose_name='Terms')),
259
357
  ('date_due', models.DateField(blank=True, null=True, verbose_name='Due Date')),
260
358
  ('markdown_notes', models.TextField(blank=True, null=True, verbose_name='Markdown Notes')),
261
359
  ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
262
360
  ('invoice_number', models.SlugField(editable=False, max_length=20, verbose_name='Invoice Number')),
263
- ('invoice_status', models.CharField(choices=[('draft', 'Draft'), ('in_review', 'In Review'), ('approved', 'Approved'), ('paid', 'Paid'), ('void', 'Void'), ('canceled', 'Canceled')], default='draft', max_length=10, verbose_name='Invoice Status')),
264
- ('additional_info', models.JSONField(blank=True, default=dict, null=True, verbose_name='Invoice Additional Info')),
361
+ ('invoice_status', models.CharField(
362
+ choices=[('draft', 'Draft'), ('in_review', 'In Review'), ('approved', 'Approved'), ('paid', 'Paid'),
363
+ ('void', 'Void'), ('canceled', 'Canceled')], default='draft', max_length=10,
364
+ verbose_name='Invoice Status')),
365
+ ('additional_info',
366
+ models.JSONField(blank=True, default=dict, null=True, verbose_name='Invoice Additional Info')),
265
367
  ('date_draft', models.DateField(blank=True, null=True, verbose_name='Draft Date')),
266
368
  ('date_in_review', models.DateField(blank=True, null=True, verbose_name='In Review Date')),
267
369
  ('date_approved', models.DateField(blank=True, null=True, verbose_name='Approved Date')),
268
370
  ('date_paid', models.DateField(blank=True, null=True, verbose_name='Paid Date')),
269
371
  ('date_void', models.DateField(blank=True, null=True, verbose_name='Void Date')),
270
372
  ('date_canceled', models.DateField(blank=True, null=True, verbose_name='Canceled Date')),
271
- ('cash_account', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, related_name='invoice_cash_account', to='django_ledger.accountmodel', verbose_name='Cash Account')),
272
- ('ce_model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.estimatemodel', verbose_name='Associated Customer Job/Estimate')),
273
- ('customer', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.customermodel', verbose_name='Customer')),
373
+ ('cash_account',
374
+ models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, related_name='invoice_cash_account',
375
+ to='django_ledger.accountmodel', verbose_name='Cash Account')),
376
+ ('ce_model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT,
377
+ to='django_ledger.estimatemodel',
378
+ verbose_name='Associated Customer Job/Estimate')),
379
+ ('customer',
380
+ models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.customermodel',
381
+ verbose_name='Customer')),
274
382
  ],
275
383
  options={
276
384
  'verbose_name': 'Invoice',
@@ -289,24 +397,51 @@ class Migration(migrations.Migration):
289
397
  ('numchild', models.PositiveIntegerField(default=0)),
290
398
  ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
291
399
  ('name', models.CharField(max_length=100, verbose_name='Item Name')),
292
- ('item_type', models.CharField(blank=True, choices=[('L', 'Labor'), ('M', 'Material'), ('E', 'Equipment'), ('S', 'Lump Sum'), ('O', 'Other')], max_length=1, null=True)),
400
+ ('item_type', models.CharField(blank=True,
401
+ choices=[('L', 'Labor'), ('M', 'Material'), ('E', 'Equipment'),
402
+ ('S', 'Lump Sum'), ('O', 'Other')], max_length=1, null=True)),
293
403
  ('sku', models.CharField(blank=True, max_length=50, null=True, verbose_name='SKU Code')),
294
404
  ('upc', models.CharField(blank=True, max_length=50, null=True, verbose_name='UPC Code')),
295
405
  ('item_id', models.CharField(blank=True, max_length=50, null=True, verbose_name='Internal ID')),
296
406
  ('item_number', models.CharField(editable=False, max_length=30, verbose_name='Item Number')),
297
407
  ('is_active', models.BooleanField(default=True, verbose_name='Is Active')),
298
- ('default_amount', models.DecimalField(decimal_places=2, default=0, max_digits=20, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Default monetary value per unit of measure')),
299
- ('for_inventory', models.BooleanField(help_text='It is an item you require for your inventory.', verbose_name='Is an item for inventory')),
300
- ('is_product_or_service', models.BooleanField(help_text='Is a product or service you sell or provide to customers.', verbose_name='Is a product or service.')),
408
+ ('default_amount', models.DecimalField(decimal_places=2, default=0, max_digits=20,
409
+ validators=[django.core.validators.MinValueValidator(0)],
410
+ verbose_name='Default monetary value per unit of measure')),
411
+ ('for_inventory', models.BooleanField(help_text='It is an item you require for your inventory.',
412
+ verbose_name='Is an item for inventory')),
413
+ ('is_product_or_service',
414
+ models.BooleanField(help_text='Is a product or service you sell or provide to customers.',
415
+ verbose_name='Is a product or service.')),
301
416
  ('sold_as_unit', models.BooleanField(default=False)),
302
- ('inventory_received', models.DecimalField(blank=True, decimal_places=3, max_digits=20, null=True, verbose_name='Total inventory received.')),
303
- ('inventory_received_value', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True, verbose_name='Total value of inventory received.')),
304
- ('additional_info', models.JSONField(blank=True, default=dict, null=True, verbose_name='Item Additional Info')),
305
- ('cogs_account', models.ForeignKey(blank=True, help_text='COGS account where cost will be recognized on Income Statement.', null=True, on_delete=django.db.models.deletion.RESTRICT, related_name='item_cogs_account', to='django_ledger.accountmodel', verbose_name='COGS Account')),
306
- ('earnings_account', models.ForeignKey(blank=True, help_text='Earnings account where revenue will be recognized on Income Statement.', null=True, on_delete=django.db.models.deletion.RESTRICT, related_name='item_earnings_account', to='django_ledger.accountmodel', verbose_name='Earnings Account')),
307
- ('entity', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel', verbose_name='Item Entity')),
308
- ('expense_account', models.ForeignKey(blank=True, help_text='Expense account where cost will be recognized on Income Statement.', null=True, on_delete=django.db.models.deletion.RESTRICT, related_name='item_expense_account', to='django_ledger.accountmodel', verbose_name='Expense Account')),
309
- ('inventory_account', models.ForeignKey(blank=True, help_text='Inventory account where cost will be capitalized.', null=True, on_delete=django.db.models.deletion.RESTRICT, related_name='item_inventory_account', to='django_ledger.accountmodel', verbose_name='Inventory Account')),
417
+ ('inventory_received', models.DecimalField(blank=True, decimal_places=3, max_digits=20, null=True,
418
+ verbose_name='Total inventory received.')),
419
+ ('inventory_received_value', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True,
420
+ verbose_name='Total value of inventory received.')),
421
+ ('additional_info',
422
+ models.JSONField(blank=True, default=dict, null=True, verbose_name='Item Additional Info')),
423
+ ('cogs_account', models.ForeignKey(blank=True,
424
+ help_text='COGS account where cost will be recognized on Income Statement.',
425
+ null=True, on_delete=django.db.models.deletion.RESTRICT,
426
+ related_name='item_cogs_account', to='django_ledger.accountmodel',
427
+ verbose_name='COGS Account')),
428
+ ('earnings_account', models.ForeignKey(blank=True,
429
+ help_text='Earnings account where revenue will be recognized on Income Statement.',
430
+ null=True, on_delete=django.db.models.deletion.RESTRICT,
431
+ related_name='item_earnings_account',
432
+ to='django_ledger.accountmodel',
433
+ verbose_name='Earnings Account')),
434
+ ('entity', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE,
435
+ to='django_ledger.entitymodel', verbose_name='Item Entity')),
436
+ ('expense_account', models.ForeignKey(blank=True,
437
+ help_text='Expense account where cost will be recognized on Income Statement.',
438
+ null=True, on_delete=django.db.models.deletion.RESTRICT,
439
+ related_name='item_expense_account',
440
+ to='django_ledger.accountmodel', verbose_name='Expense Account')),
441
+ ('inventory_account',
442
+ models.ForeignKey(blank=True, help_text='Inventory account where cost will be capitalized.', null=True,
443
+ on_delete=django.db.models.deletion.RESTRICT, related_name='item_inventory_account',
444
+ to='django_ledger.accountmodel', verbose_name='Inventory Account')),
310
445
  ],
311
446
  options={
312
447
  'abstract': False,
@@ -318,24 +453,64 @@ class Migration(migrations.Migration):
318
453
  ('created', models.DateTimeField(auto_now_add=True)),
319
454
  ('updated', models.DateTimeField(auto_now=True, null=True)),
320
455
  ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
321
- ('quantity', models.FloatField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(limit_value=0.0)], verbose_name='Quantity')),
322
- ('unit_cost', models.FloatField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(limit_value=0.0)], verbose_name='Cost Per Unit')),
323
- ('total_amount', models.DecimalField(blank=True, decimal_places=2, editable=False, max_digits=20, null=True, validators=[django.core.validators.MinValueValidator(limit_value=0.0)], verbose_name='Total Amount QTY x UnitCost')),
324
- ('po_quantity', models.FloatField(blank=True, help_text='Authorized item quantity for purchasing.', null=True, validators=[django.core.validators.MinValueValidator(limit_value=0.0)], verbose_name='PO Quantity')),
325
- ('po_unit_cost', models.FloatField(blank=True, help_text='Purchase Order unit cost.', null=True, validators=[django.core.validators.MinValueValidator(limit_value=0.0)], verbose_name='PO Unit Cost')),
326
- ('po_total_amount', models.DecimalField(blank=True, decimal_places=2, editable=False, help_text='Maximum authorized cost per Purchase Order.', max_digits=20, null=True, validators=[django.core.validators.MinValueValidator(limit_value=0.0)], verbose_name='Authorized maximum item cost per Purchase Order')),
327
- ('po_item_status', models.CharField(blank=True, choices=[('not_ordered', 'Not Ordered'), ('ordered', 'Ordered'), ('in_transit', 'In Transit'), ('received', 'Received'), ('cancelled', 'Canceled')], max_length=15, null=True, verbose_name='PO Item Status')),
328
- ('ce_quantity', models.FloatField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(limit_value=0.0)], verbose_name='Estimated/Contract Quantity')),
329
- ('ce_unit_cost_estimate', models.FloatField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(limit_value=0.0)], verbose_name='Estimate/Contract Cost per Unit.')),
330
- ('ce_cost_estimate', models.DecimalField(blank=True, decimal_places=2, editable=False, max_digits=20, null=True, validators=[django.core.validators.MinValueValidator(limit_value=0.0)], verbose_name='Total Estimate/Contract Cost.')),
331
- ('ce_unit_revenue_estimate', models.FloatField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(limit_value=0.0)], verbose_name='Estimate/Contract Revenue per Unit.')),
332
- ('ce_revenue_estimate', models.DecimalField(blank=True, decimal_places=2, editable=False, max_digits=20, null=True, validators=[django.core.validators.MinValueValidator(limit_value=0.0)], verbose_name='Total Estimate/Contract Revenue.')),
456
+ ('quantity', models.FloatField(blank=True, null=True,
457
+ validators=[django.core.validators.MinValueValidator(limit_value=0.0)],
458
+ verbose_name='Quantity')),
459
+ ('unit_cost', models.FloatField(blank=True, null=True,
460
+ validators=[django.core.validators.MinValueValidator(limit_value=0.0)],
461
+ verbose_name='Cost Per Unit')),
462
+ ('total_amount',
463
+ models.DecimalField(blank=True, decimal_places=2, editable=False, max_digits=20, null=True,
464
+ validators=[django.core.validators.MinValueValidator(limit_value=0.0)],
465
+ verbose_name='Total Amount QTY x UnitCost')),
466
+ ('po_quantity',
467
+ models.FloatField(blank=True, help_text='Authorized item quantity for purchasing.', null=True,
468
+ validators=[django.core.validators.MinValueValidator(limit_value=0.0)],
469
+ verbose_name='PO Quantity')),
470
+ ('po_unit_cost', models.FloatField(blank=True, help_text='Purchase Order unit cost.', null=True,
471
+ validators=[
472
+ django.core.validators.MinValueValidator(limit_value=0.0)],
473
+ verbose_name='PO Unit Cost')),
474
+ ('po_total_amount', models.DecimalField(blank=True, decimal_places=2, editable=False,
475
+ help_text='Maximum authorized cost per Purchase Order.',
476
+ max_digits=20, null=True, validators=[
477
+ django.core.validators.MinValueValidator(limit_value=0.0)],
478
+ verbose_name='Authorized maximum item cost per Purchase Order')),
479
+ ('po_item_status', models.CharField(blank=True,
480
+ choices=[('not_ordered', 'Not Ordered'), ('ordered', 'Ordered'),
481
+ ('in_transit', 'In Transit'), ('received', 'Received'),
482
+ ('cancelled', 'Canceled')], max_length=15, null=True,
483
+ verbose_name='PO Item Status')),
484
+ ('ce_quantity', models.FloatField(blank=True, null=True, validators=[
485
+ django.core.validators.MinValueValidator(limit_value=0.0)],
486
+ verbose_name='Estimated/Contract Quantity')),
487
+ ('ce_unit_cost_estimate', models.FloatField(blank=True, null=True, validators=[
488
+ django.core.validators.MinValueValidator(limit_value=0.0)],
489
+ verbose_name='Estimate/Contract Cost per Unit.')),
490
+ ('ce_cost_estimate',
491
+ models.DecimalField(blank=True, decimal_places=2, editable=False, max_digits=20, null=True,
492
+ validators=[django.core.validators.MinValueValidator(limit_value=0.0)],
493
+ verbose_name='Total Estimate/Contract Cost.')),
494
+ ('ce_unit_revenue_estimate', models.FloatField(blank=True, null=True, validators=[
495
+ django.core.validators.MinValueValidator(limit_value=0.0)],
496
+ verbose_name='Estimate/Contract Revenue per Unit.')),
497
+ ('ce_revenue_estimate',
498
+ models.DecimalField(blank=True, decimal_places=2, editable=False, max_digits=20, null=True,
499
+ validators=[django.core.validators.MinValueValidator(limit_value=0.0)],
500
+ verbose_name='Total Estimate/Contract Revenue.')),
333
501
  ('item_notes', models.CharField(blank=True, max_length=400, null=True, verbose_name='Description')),
334
- ('bill_model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.billmodel', verbose_name='Bill Model')),
335
- ('ce_model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.estimatemodel', verbose_name='Customer Estimate')),
336
- ('entity_unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.entityunitmodel', verbose_name='Associated Entity Unit')),
337
- ('invoice_model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.invoicemodel', verbose_name='Invoice Model')),
338
- ('item_model', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.itemmodel', verbose_name='Item Model')),
502
+ ('bill_model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT,
503
+ to='django_ledger.billmodel', verbose_name='Bill Model')),
504
+ ('ce_model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT,
505
+ to='django_ledger.estimatemodel', verbose_name='Customer Estimate')),
506
+ ('entity_unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT,
507
+ to='django_ledger.entityunitmodel',
508
+ verbose_name='Associated Entity Unit')),
509
+ ('invoice_model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT,
510
+ to='django_ledger.invoicemodel', verbose_name='Invoice Model')),
511
+ ('item_model',
512
+ models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.itemmodel',
513
+ verbose_name='Item Model')),
339
514
  ],
340
515
  options={
341
516
  'abstract': False,
@@ -350,11 +525,29 @@ class Migration(migrations.Migration):
350
525
  ('je_number', models.SlugField(editable=False, max_length=20, verbose_name='Journal Entry Number')),
351
526
  ('timestamp', models.DateTimeField(verbose_name='Date')),
352
527
  ('description', models.CharField(blank=True, max_length=70, null=True, verbose_name='Description')),
353
- ('activity', models.CharField(blank=True, choices=[('Operating', (('op', 'Operating'),)), ('Investing', (('inv_ppe', 'Purchase/Disposition of PPE'), ('inv_securities', 'Purchase/Disposition of Securities'), ('inv', 'Investing Activity Other'))), ('Financing', (('fin_std', 'Payoff of Short Term Debt'), ('fin_ltd', 'Payoff of Long Term Debt'), ('fin_equity', 'Issuance of Common Stock, Preferred Stock or Capital Contribution'), ('fin_dividends', 'Dividends or Distributions to Shareholders'), ('fin', 'Financing Activity Other')))], editable=False, max_length=20, null=True, verbose_name='Activity')),
528
+ ('activity', models.CharField(blank=True, choices=[('Operating', (('op', 'Operating'),)), ('Investing',
529
+ (('inv_ppe',
530
+ 'Purchase/Disposition of PPE'),
531
+ (
532
+ 'inv_securities',
533
+ 'Purchase/Disposition of Securities'),
534
+ ('inv',
535
+ 'Investing Activity Other'))),
536
+ ('Financing', (
537
+ ('fin_std', 'Payoff of Short Term Debt'),
538
+ ('fin_ltd', 'Payoff of Long Term Debt'), (
539
+ 'fin_equity',
540
+ 'Issuance of Common Stock, Preferred Stock or Capital Contribution'),
541
+ ('fin_dividends',
542
+ 'Dividends or Distributions to Shareholders'),
543
+ ('fin', 'Financing Activity Other')))],
544
+ editable=False, max_length=20, null=True, verbose_name='Activity')),
354
545
  ('origin', models.CharField(blank=True, max_length=30, null=True, verbose_name='Origin')),
355
546
  ('posted', models.BooleanField(default=False, verbose_name='Posted')),
356
547
  ('locked', models.BooleanField(default=False, verbose_name='Locked')),
357
- ('entity_unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.entityunitmodel', verbose_name='Associated Entity Unit')),
548
+ ('entity_unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT,
549
+ to='django_ledger.entityunitmodel',
550
+ verbose_name='Associated Entity Unit')),
358
551
  ],
359
552
  options={
360
553
  'verbose_name': 'Journal Entry',
@@ -380,12 +573,21 @@ class Migration(migrations.Migration):
380
573
  ('email', models.EmailField(blank=True, max_length=254, null=True, verbose_name='Email')),
381
574
  ('website', models.URLField(blank=True, null=True, verbose_name='Website')),
382
575
  ('phone', models.CharField(blank=True, max_length=30, null=True, verbose_name='Phone Number')),
383
- ('account_number', models.CharField(blank=True, max_length=30, null=True, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:\\d+)*\\Z'), code='invalid', message='Only digits allowed')], verbose_name='Account Number')),
384
- ('routing_number', models.CharField(blank=True, max_length=30, null=True, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:\\d+)*\\Z'), code='invalid', message='Only digits allowed')], verbose_name='Routing Number')),
576
+ ('account_number', models.CharField(blank=True, max_length=30, null=True, validators=[
577
+ django.core.validators.RegexValidator(re.compile('^\\d+(?:\\d+)*\\Z'), code='invalid',
578
+ message='Only digits allowed')],
579
+ verbose_name='Account Number')),
580
+ ('routing_number', models.CharField(blank=True, max_length=30, null=True, validators=[
581
+ django.core.validators.RegexValidator(re.compile('^\\d+(?:\\d+)*\\Z'), code='invalid',
582
+ message='Only digits allowed')],
583
+ verbose_name='Routing Number')),
385
584
  ('aba_number', models.CharField(blank=True, max_length=30, null=True, verbose_name='ABA Number')),
386
585
  ('swift_number', models.CharField(blank=True, max_length=30, null=True, verbose_name='SWIFT Number')),
387
- ('account_type', models.CharField(choices=[('checking', 'Checking'), ('savings', 'Savings')], default='checking', max_length=10, verbose_name='Account Type')),
388
- ('tax_id_number', models.CharField(blank=True, max_length=30, null=True, verbose_name='Tax Registration Number')),
586
+ ('account_type',
587
+ models.CharField(choices=[('checking', 'Checking'), ('savings', 'Savings')], default='checking',
588
+ max_length=10, verbose_name='Account Type')),
589
+ ('tax_id_number',
590
+ models.CharField(blank=True, max_length=30, null=True, verbose_name='Tax Registration Number')),
389
591
  ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
390
592
  ('vendor_number', models.CharField(blank=True, max_length=30, null=True)),
391
593
  ('vendor_name', models.CharField(max_length=100)),
@@ -393,7 +595,9 @@ class Migration(migrations.Migration):
393
595
  ('active', models.BooleanField(default=True)),
394
596
  ('hidden', models.BooleanField(default=False)),
395
597
  ('additional_info', models.JSONField(blank=True, default=dict, null=True)),
396
- ('entity_model', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel', verbose_name='Vendor Entity')),
598
+ ('entity_model',
599
+ models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel',
600
+ verbose_name='Vendor Entity')),
397
601
  ],
398
602
  options={
399
603
  'verbose_name': 'Vendor',
@@ -409,7 +613,8 @@ class Migration(migrations.Migration):
409
613
  ('name', models.CharField(max_length=50, verbose_name='Unit of Measure Name')),
410
614
  ('unit_abbr', models.SlugField(max_length=10, verbose_name='UoM Abbreviation')),
411
615
  ('is_active', models.BooleanField(default=True, verbose_name='Is Active')),
412
- ('entity', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel', verbose_name='UoM Entity')),
616
+ ('entity', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE,
617
+ to='django_ledger.entitymodel', verbose_name='UoM Entity')),
413
618
  ],
414
619
  options={
415
620
  'abstract': False,
@@ -421,11 +626,23 @@ class Migration(migrations.Migration):
421
626
  ('created', models.DateTimeField(auto_now_add=True)),
422
627
  ('updated', models.DateTimeField(auto_now=True, null=True)),
423
628
  ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
424
- ('tx_type', models.CharField(choices=[('credit', 'Credit'), ('debit', 'Debit')], max_length=10, verbose_name='Tx Type')),
425
- ('amount', models.DecimalField(blank=True, decimal_places=2, help_text='Account of the transaction.', max_digits=20, null=True, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Amount')),
426
- ('description', models.CharField(blank=True, help_text='A description to be included with this individual transaction', max_length=100, null=True, verbose_name='Tx Description')),
427
- ('account', models.ForeignKey(help_text='Account from Chart of Accounts to be associated with this transaction.', on_delete=django.db.models.deletion.PROTECT, to='django_ledger.accountmodel', verbose_name='Account')),
428
- ('journal_entry', models.ForeignKey(editable=False, help_text='Journal Entry to be associated with this transaction.', on_delete=django.db.models.deletion.PROTECT, to='django_ledger.journalentrymodel', verbose_name='Journal Entry')),
629
+ ('tx_type', models.CharField(choices=[('credit', 'Credit'), ('debit', 'Debit')], max_length=10,
630
+ verbose_name='Tx Type')),
631
+ ('amount', models.DecimalField(blank=True, decimal_places=2, help_text='Account of the transaction.',
632
+ max_digits=20, null=True,
633
+ validators=[django.core.validators.MinValueValidator(0)],
634
+ verbose_name='Amount')),
635
+ ('description',
636
+ models.CharField(blank=True, help_text='A description to be included with this individual transaction',
637
+ max_length=100, null=True, verbose_name='Tx Description')),
638
+ ('account',
639
+ models.ForeignKey(help_text='Account from Chart of Accounts to be associated with this transaction.',
640
+ on_delete=django.db.models.deletion.PROTECT, to='django_ledger.accountmodel',
641
+ verbose_name='Account')),
642
+ ('journal_entry',
643
+ models.ForeignKey(editable=False, help_text='Journal Entry to be associated with this transaction.',
644
+ on_delete=django.db.models.deletion.PROTECT, to='django_ledger.journalentrymodel',
645
+ verbose_name='Journal Entry')),
429
646
  ],
430
647
  options={
431
648
  'verbose_name': 'Transaction',
@@ -445,9 +662,13 @@ class Migration(migrations.Migration):
445
662
  ('date_posted', models.DateField()),
446
663
  ('name', models.CharField(blank=True, max_length=200, null=True)),
447
664
  ('memo', models.CharField(blank=True, max_length=200, null=True)),
448
- ('earnings_account', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='django_ledger.accountmodel')),
449
- ('import_job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_ledger.importjobmodel')),
450
- ('tx', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='django_ledger.transactionmodel')),
665
+ ('earnings_account',
666
+ models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE,
667
+ to='django_ledger.accountmodel')),
668
+ ('import_job',
669
+ models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_ledger.importjobmodel')),
670
+ ('tx', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL,
671
+ to='django_ledger.transactionmodel')),
451
672
  ],
452
673
  options={
453
674
  'verbose_name': 'Staged Transaction Model',
@@ -462,19 +683,33 @@ class Migration(migrations.Migration):
462
683
  ('markdown_notes', models.TextField(blank=True, null=True, verbose_name='Markdown Notes')),
463
684
  ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
464
685
  ('po_number', models.SlugField(editable=False, max_length=20, verbose_name='Purchase Order Number')),
465
- ('po_title', models.CharField(max_length=250, validators=[django.core.validators.MinLengthValidator(limit_value=5, message='PO Title must be greater than 5')], verbose_name='Purchase Order Title')),
466
- ('po_status', models.CharField(choices=[('draft', 'Draft'), ('in_review', 'In Review'), ('approved', 'Approved'), ('fulfilled', 'Fulfilled'), ('canceled', 'Canceled'), ('void', 'Void')], default='draft', max_length=10)),
467
- ('po_amount', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Purchase Order Amount')),
468
- ('po_amount_received', models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Received Amount')),
686
+ ('po_title', models.CharField(max_length=250, validators=[
687
+ django.core.validators.MinLengthValidator(limit_value=5,
688
+ message='PO Title must be greater than 5')],
689
+ verbose_name='Purchase Order Title')),
690
+ ('po_status', models.CharField(
691
+ choices=[('draft', 'Draft'), ('in_review', 'In Review'), ('approved', 'Approved'),
692
+ ('fulfilled', 'Fulfilled'), ('canceled', 'Canceled'), ('void', 'Void')], default='draft',
693
+ max_length=10)),
694
+ ('po_amount',
695
+ models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Purchase Order Amount')),
696
+ ('po_amount_received',
697
+ models.DecimalField(decimal_places=2, default=0, max_digits=20, verbose_name='Received Amount')),
469
698
  ('date_draft', models.DateField(blank=True, null=True, verbose_name='Draft Date')),
470
699
  ('date_in_review', models.DateField(blank=True, null=True, verbose_name='In Review Date')),
471
700
  ('date_approved', models.DateField(blank=True, null=True, verbose_name='Approved Date')),
472
701
  ('date_void', models.DateField(blank=True, null=True, verbose_name='Void Date')),
473
702
  ('date_fulfilled', models.DateField(blank=True, null=True, verbose_name='Fulfillment Date')),
474
703
  ('date_canceled', models.DateField(blank=True, null=True, verbose_name='Canceled Date')),
475
- ('ce_model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.estimatemodel', verbose_name='Associated Customer Job/Estimate')),
476
- ('entity', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel', verbose_name='Entity')),
477
- ('po_items', models.ManyToManyField(through='django_ledger.ItemTransactionModel', to='django_ledger.itemmodel', verbose_name='Purchase Order Items')),
704
+ ('ce_model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT,
705
+ to='django_ledger.estimatemodel',
706
+ verbose_name='Associated Customer Job/Estimate')),
707
+ ('entity',
708
+ models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel',
709
+ verbose_name='Entity')),
710
+ ('po_items',
711
+ models.ManyToManyField(through='django_ledger.ItemTransactionModel', to='django_ledger.itemmodel',
712
+ verbose_name='Purchase Order Items')),
478
713
  ],
479
714
  options={
480
715
  'abstract': False,
@@ -490,7 +725,8 @@ class Migration(migrations.Migration):
490
725
  ('posted', models.BooleanField(default=False, verbose_name='Posted Ledger')),
491
726
  ('locked', models.BooleanField(default=False, verbose_name='Locked Ledger')),
492
727
  ('hidden', models.BooleanField(default=False, verbose_name='Hidden Ledger')),
493
- ('entity', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel', verbose_name='Ledger Entity')),
728
+ ('entity', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE,
729
+ to='django_ledger.entitymodel', verbose_name='Ledger Entity')),
494
730
  ],
495
731
  options={
496
732
  'verbose_name': 'Ledger',
@@ -498,57 +734,73 @@ class Migration(migrations.Migration):
498
734
  'ordering': ['-created'],
499
735
  'abstract': False,
500
736
  },
501
- bases=(models.Model, django_ledger.io.io_mixin.IOMixIn),
737
+ bases=(models.Model, django_ledger.io.io_core.IOMixIn),
502
738
  ),
503
739
  migrations.AddField(
504
740
  model_name='journalentrymodel',
505
741
  name='ledger',
506
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='journal_entries', to='django_ledger.ledgermodel', verbose_name='Ledger'),
742
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='journal_entries',
743
+ to='django_ledger.ledgermodel', verbose_name='Ledger'),
507
744
  ),
508
745
  migrations.AddField(
509
746
  model_name='itemtransactionmodel',
510
747
  name='po_model',
511
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.purchaseordermodel', verbose_name='Purchase Order Model'),
748
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT,
749
+ to='django_ledger.purchaseordermodel', verbose_name='Purchase Order Model'),
512
750
  ),
513
751
  migrations.AddField(
514
752
  model_name='itemmodel',
515
753
  name='uom',
516
- field=models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.unitofmeasuremodel', verbose_name='Unit of Measure'),
754
+ field=models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.unitofmeasuremodel',
755
+ verbose_name='Unit of Measure'),
517
756
  ),
518
757
  migrations.AddField(
519
758
  model_name='invoicemodel',
520
759
  name='invoice_items',
521
- field=models.ManyToManyField(through='django_ledger.ItemTransactionModel', to='django_ledger.itemmodel', verbose_name='Invoice Items'),
760
+ field=models.ManyToManyField(through='django_ledger.ItemTransactionModel', to='django_ledger.itemmodel',
761
+ verbose_name='Invoice Items'),
522
762
  ),
523
763
  migrations.AddField(
524
764
  model_name='invoicemodel',
525
765
  name='ledger',
526
- field=models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='django_ledger.ledgermodel', verbose_name='Ledger'),
766
+ field=models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE,
767
+ to='django_ledger.ledgermodel', verbose_name='Ledger'),
527
768
  ),
528
769
  migrations.AddField(
529
770
  model_name='invoicemodel',
530
771
  name='prepaid_account',
531
- field=models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, related_name='invoice_prepaid_account', to='django_ledger.accountmodel', verbose_name='Prepaid Account'),
772
+ field=models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT,
773
+ related_name='invoice_prepaid_account', to='django_ledger.accountmodel',
774
+ verbose_name='Prepaid Account'),
532
775
  ),
533
776
  migrations.AddField(
534
777
  model_name='invoicemodel',
535
778
  name='unearned_account',
536
- field=models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, related_name='invoice_unearned_account', to='django_ledger.accountmodel', verbose_name='Unearned Account'),
779
+ field=models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT,
780
+ related_name='invoice_unearned_account', to='django_ledger.accountmodel',
781
+ verbose_name='Unearned Account'),
537
782
  ),
538
783
  migrations.AddField(
539
784
  model_name='importjobmodel',
540
785
  name='ledger',
541
- field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='django_ledger.ledgermodel', verbose_name='Ledger'),
786
+ field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE,
787
+ to='django_ledger.ledgermodel', verbose_name='Ledger'),
542
788
  ),
543
789
  migrations.CreateModel(
544
790
  name='EntityStateModel',
545
791
  fields=[
546
792
  ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
547
- ('fiscal_year', models.SmallIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(limit_value=1900)], verbose_name='Fiscal Year')),
548
- ('key', models.CharField(choices=[('je', 'Journal Entry'), ('po', 'Purchase Order'), ('bill', 'Bill'), ('invoice', 'Invoice'), ('estimate', 'Estimate')], max_length=10)),
549
- ('sequence', models.BigIntegerField(default=0, validators=[django.core.validators.MinValueValidator(limit_value=0)])),
550
- ('entity_model', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel', verbose_name='Entity Model')),
551
- ('entity_unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.entityunitmodel', verbose_name='Entity Unit')),
793
+ ('fiscal_year', models.SmallIntegerField(blank=True, null=True, validators=[
794
+ django.core.validators.MinValueValidator(limit_value=1900)], verbose_name='Fiscal Year')),
795
+ ('key', models.CharField(choices=[('je', 'Journal Entry'), ('po', 'Purchase Order'), ('bill', 'Bill'),
796
+ ('invoice', 'Invoice'), ('estimate', 'Estimate')], max_length=10)),
797
+ ('sequence', models.BigIntegerField(default=0, validators=[
798
+ django.core.validators.MinValueValidator(limit_value=0)])),
799
+ ('entity_model',
800
+ models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel',
801
+ verbose_name='Entity Model')),
802
+ ('entity_unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT,
803
+ to='django_ledger.entityunitmodel', verbose_name='Entity Unit')),
552
804
  ],
553
805
  options={
554
806
  'abstract': False,
@@ -557,74 +809,100 @@ class Migration(migrations.Migration):
557
809
  migrations.AddField(
558
810
  model_name='entitymanagementmodel',
559
811
  name='entity',
560
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='entity_permissions', to='django_ledger.entitymodel', verbose_name='Entity'),
812
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='entity_permissions',
813
+ to='django_ledger.entitymodel', verbose_name='Entity'),
561
814
  ),
562
815
  migrations.AddField(
563
816
  model_name='entitymanagementmodel',
564
817
  name='user',
565
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='entity_permissions', to=settings.AUTH_USER_MODEL, verbose_name='Manager'),
818
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='entity_permissions',
819
+ to=settings.AUTH_USER_MODEL, verbose_name='Manager'),
566
820
  ),
567
821
  migrations.AddField(
568
822
  model_name='customermodel',
569
823
  name='entity_model',
570
- field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel', verbose_name='Customer Entity'),
824
+ field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE,
825
+ to='django_ledger.entitymodel', verbose_name='Customer Entity'),
571
826
  ),
572
827
  migrations.AddField(
573
828
  model_name='chartofaccountmodel',
574
829
  name='entity',
575
- field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel', verbose_name='Entity'),
830
+ field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE,
831
+ to='django_ledger.entitymodel', verbose_name='Entity'),
576
832
  ),
577
833
  migrations.AddField(
578
834
  model_name='billmodel',
579
835
  name='bill_items',
580
- field=models.ManyToManyField(through='django_ledger.ItemTransactionModel', to='django_ledger.itemmodel', verbose_name='Bill Items'),
836
+ field=models.ManyToManyField(through='django_ledger.ItemTransactionModel', to='django_ledger.itemmodel',
837
+ verbose_name='Bill Items'),
581
838
  ),
582
839
  migrations.AddField(
583
840
  model_name='billmodel',
584
841
  name='cash_account',
585
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, related_name='None_cash_account', to='django_ledger.accountmodel', verbose_name='Cash Account'),
842
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT,
843
+ related_name='None_cash_account', to='django_ledger.accountmodel',
844
+ verbose_name='Cash Account'),
586
845
  ),
587
846
  migrations.AddField(
588
847
  model_name='billmodel',
589
848
  name='ce_model',
590
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, to='django_ledger.estimatemodel', verbose_name='Associated Customer Job/Estimate'),
849
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT,
850
+ to='django_ledger.estimatemodel', verbose_name='Associated Customer Job/Estimate'),
591
851
  ),
592
852
  migrations.AddField(
593
853
  model_name='billmodel',
594
854
  name='ledger',
595
- field=models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='django_ledger.ledgermodel', verbose_name='Ledger'),
855
+ field=models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE,
856
+ to='django_ledger.ledgermodel', verbose_name='Ledger'),
596
857
  ),
597
858
  migrations.AddField(
598
859
  model_name='billmodel',
599
860
  name='prepaid_account',
600
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, related_name='None_prepaid_account', to='django_ledger.accountmodel', verbose_name='Prepaid Account'),
861
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT,
862
+ related_name='None_prepaid_account', to='django_ledger.accountmodel',
863
+ verbose_name='Prepaid Account'),
601
864
  ),
602
865
  migrations.AddField(
603
866
  model_name='billmodel',
604
867
  name='unearned_account',
605
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, related_name='None_unearned_account', to='django_ledger.accountmodel', verbose_name='Unearned Account'),
868
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT,
869
+ related_name='None_unearned_account', to='django_ledger.accountmodel',
870
+ verbose_name='Unearned Account'),
606
871
  ),
607
872
  migrations.AddField(
608
873
  model_name='billmodel',
609
874
  name='vendor',
610
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_ledger.vendormodel', verbose_name='Vendor'),
875
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_ledger.vendormodel',
876
+ verbose_name='Vendor'),
611
877
  ),
612
878
  migrations.CreateModel(
613
879
  name='BankAccountModel',
614
880
  fields=[
615
881
  ('created', models.DateTimeField(auto_now_add=True)),
616
882
  ('updated', models.DateTimeField(auto_now=True, null=True)),
617
- ('account_number', models.CharField(blank=True, max_length=30, null=True, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:\\d+)*\\Z'), code='invalid', message='Only digits allowed')], verbose_name='Account Number')),
618
- ('routing_number', models.CharField(blank=True, max_length=30, null=True, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:\\d+)*\\Z'), code='invalid', message='Only digits allowed')], verbose_name='Routing Number')),
883
+ ('account_number', models.CharField(blank=True, max_length=30, null=True, validators=[
884
+ django.core.validators.RegexValidator(re.compile('^\\d+(?:\\d+)*\\Z'), code='invalid',
885
+ message='Only digits allowed')],
886
+ verbose_name='Account Number')),
887
+ ('routing_number', models.CharField(blank=True, max_length=30, null=True, validators=[
888
+ django.core.validators.RegexValidator(re.compile('^\\d+(?:\\d+)*\\Z'), code='invalid',
889
+ message='Only digits allowed')],
890
+ verbose_name='Routing Number')),
619
891
  ('aba_number', models.CharField(blank=True, max_length=30, null=True, verbose_name='ABA Number')),
620
892
  ('swift_number', models.CharField(blank=True, max_length=30, null=True, verbose_name='SWIFT Number')),
621
- ('account_type', models.CharField(choices=[('checking', 'Checking'), ('savings', 'Savings')], default='checking', max_length=10, verbose_name='Account Type')),
893
+ ('account_type',
894
+ models.CharField(choices=[('checking', 'Checking'), ('savings', 'Savings')], default='checking',
895
+ max_length=10, verbose_name='Account Type')),
622
896
  ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
623
897
  ('name', models.CharField(blank=True, max_length=150, null=True)),
624
898
  ('active', models.BooleanField(default=False)),
625
899
  ('hidden', models.BooleanField(default=False)),
626
- ('cash_account', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, related_name='bank_cash_account', to='django_ledger.accountmodel', verbose_name='Cash Account')),
627
- ('entity_model', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel', verbose_name='Entity Model')),
900
+ ('cash_account',
901
+ models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, related_name='bank_cash_account',
902
+ to='django_ledger.accountmodel', verbose_name='Cash Account')),
903
+ ('entity_model',
904
+ models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_ledger.entitymodel',
905
+ verbose_name='Entity Model')),
628
906
  ],
629
907
  options={
630
908
  'verbose_name': 'Bank Account',
@@ -634,7 +912,8 @@ class Migration(migrations.Migration):
634
912
  migrations.AddField(
635
913
  model_name='accountmodel',
636
914
  name='coa_model',
637
- field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='django_ledger.chartofaccountmodel', verbose_name='Chart of Accounts'),
915
+ field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE,
916
+ to='django_ledger.chartofaccountmodel', verbose_name='Chart of Accounts'),
638
917
  ),
639
918
  migrations.AddIndex(
640
919
  model_name='vendormodel',
@@ -970,7 +1249,8 @@ class Migration(migrations.Migration):
970
1249
  ),
971
1250
  migrations.AddIndex(
972
1251
  model_name='entitystatemodel',
973
- index=models.Index(fields=['entity_model', 'fiscal_year', 'entity_unit', 'key'], name='django_ledg_entity__eeae49_idx'),
1252
+ index=models.Index(fields=['entity_model', 'fiscal_year', 'entity_unit', 'key'],
1253
+ name='django_ledg_entity__eeae49_idx'),
974
1254
  ),
975
1255
  migrations.AlterUniqueTogether(
976
1256
  name='entitystatemodel',
@@ -1082,7 +1362,8 @@ class Migration(migrations.Migration):
1082
1362
  ),
1083
1363
  migrations.AlterUniqueTogether(
1084
1364
  name='bankaccountmodel',
1085
- unique_together={('entity_model', 'account_number'), ('entity_model', 'cash_account', 'account_number', 'routing_number')},
1365
+ unique_together={('entity_model', 'account_number'),
1366
+ ('entity_model', 'cash_account', 'account_number', 'routing_number')},
1086
1367
  ),
1087
1368
  migrations.AddIndex(
1088
1369
  model_name='accountmodel',