django-bom 1.243__py3-none-any.whl → 1.257__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.
- bom/admin.py +60 -14
- bom/auth_backends.py +3 -1
- bom/constants.py +7 -0
- bom/csv_headers.py +22 -44
- bom/forms.py +971 -1043
- bom/helpers.py +79 -4
- bom/migrations/0051_alter_manufacturer_organization_and_more.py +41 -0
- bom/migrations/0052_remove_partrevision_attribute_and_more.py +576 -0
- bom/models.py +253 -99
- bom/settings.py +2 -0
- bom/static/bom/css/style.css +19 -0
- bom/static/bom/js/formset-handler.js +65 -0
- bom/templates/bom/edit-part-class.html +98 -11
- bom/templates/bom/edit-quantity-of-measure.html +119 -0
- bom/templates/bom/edit-user-meta.html +58 -26
- bom/templates/bom/organization-create.html +6 -3
- bom/templates/bom/part-info.html +10 -1
- bom/templates/bom/part-revision-display.html +22 -159
- bom/templates/bom/settings.html +142 -15
- bom/tests.py +117 -31
- bom/urls.py +6 -0
- bom/views/json_views.py +2 -2
- bom/views/views.py +194 -46
- {django_bom-1.243.dist-info → django_bom-1.257.dist-info}/METADATA +1 -1
- {django_bom-1.243.dist-info → django_bom-1.257.dist-info}/RECORD +28 -24
- {django_bom-1.243.dist-info → django_bom-1.257.dist-info}/WHEEL +0 -0
- {django_bom-1.243.dist-info → django_bom-1.257.dist-info}/licenses/LICENSE +0 -0
- {django_bom-1.243.dist-info → django_bom-1.257.dist-info}/top_level.txt +0 -0
bom/helpers.py
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
from bom import constants
|
|
2
2
|
from bom.models import (
|
|
3
3
|
Assembly,
|
|
4
|
-
AssemblySubparts,
|
|
5
4
|
Manufacturer,
|
|
6
5
|
ManufacturerPart,
|
|
7
6
|
Organization,
|
|
8
7
|
Part,
|
|
9
8
|
PartClass,
|
|
10
9
|
PartRevision,
|
|
10
|
+
QuantityOfMeasure,
|
|
11
|
+
UnitDefinition,
|
|
12
|
+
PartRevisionProperty,
|
|
13
|
+
PartRevisionPropertyDefinition,
|
|
11
14
|
Seller,
|
|
12
15
|
SellerPart,
|
|
13
16
|
Subpart,
|
|
@@ -64,14 +67,86 @@ def create_a_fake_assembly_with_subpart(part_revision, reference="D4", count=4):
|
|
|
64
67
|
return assy
|
|
65
68
|
|
|
66
69
|
|
|
67
|
-
def
|
|
70
|
+
def create_some_fake_quantities_of_measure(organization=None):
|
|
71
|
+
qom_each, _ = QuantityOfMeasure.objects.get_or_create(name='Each')
|
|
72
|
+
qom_volt, _ = QuantityOfMeasure.objects.get_or_create(name='Voltage')
|
|
73
|
+
qom_custom = None
|
|
74
|
+
if organization is not None:
|
|
75
|
+
qom_custom, _ = QuantityOfMeasure.objects.get_or_create(name='Custom', organization=organization)
|
|
76
|
+
return qom_each, qom_volt, qom_custom
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def create_some_fake_unit_definitions(organization=None):
|
|
80
|
+
qom_each, qom_volt, qom_custom = create_some_fake_quantities_of_measure(organization)
|
|
81
|
+
v, _ = UnitDefinition.objects.get_or_create(name='Volts', symbol='V', quantity_of_measure=qom_volt,
|
|
82
|
+
base_multiplier=1.0)
|
|
83
|
+
mv, _ = UnitDefinition.objects.get_or_create(name='Millivolts', symbol='mV', quantity_of_measure=qom_volt,
|
|
84
|
+
base_multiplier=0.001)
|
|
85
|
+
uv, _ = UnitDefinition.objects.get_or_create(name='Microvolts', symbol='uV', quantity_of_measure=qom_volt,
|
|
86
|
+
base_multiplier=0.000001)
|
|
87
|
+
kv, _ = UnitDefinition.objects.get_or_create(name='Kilovolts', symbol='kV', quantity_of_measure=qom_volt,
|
|
88
|
+
base_multiplier=1000)
|
|
89
|
+
sv = None
|
|
90
|
+
if organization is not None:
|
|
91
|
+
sv, _ = UnitDefinition.objects.get_or_create(name='Supervolts', symbol='SV', quantity_of_measure=qom_custom,
|
|
92
|
+
base_multiplier=1000000)
|
|
93
|
+
return v, mv, uv, kv, sv
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def create_some_fake_part_revision_property_definitions(organization=None, some_required=True, part_class=None):
|
|
97
|
+
qom_each, qom_volt, qom_custom = create_some_fake_quantities_of_measure(organization)
|
|
98
|
+
sheen, _ = PartRevisionPropertyDefinition.objects.get_or_create(name='Sheen', code='sheen',
|
|
99
|
+
type=constants.PART_REVISION_PROPERTY_TYPE_STRING,
|
|
100
|
+
quantity_of_measure=None,
|
|
101
|
+
defaults={'required': some_required})
|
|
102
|
+
voltage, _ = PartRevisionPropertyDefinition.objects.get_or_create(name='Voltage', code='voltage',
|
|
103
|
+
type=constants.PART_REVISION_PROPERTY_TYPE_DECIMAL,
|
|
104
|
+
quantity_of_measure=qom_volt,
|
|
105
|
+
defaults={'required': some_required})
|
|
106
|
+
max_voltage, _ = PartRevisionPropertyDefinition.objects.get_or_create(name='Max Voltage', code='max_voltage',
|
|
107
|
+
type=constants.PART_REVISION_PROPERTY_TYPE_DECIMAL,
|
|
108
|
+
required=False, quantity_of_measure=qom_volt)
|
|
109
|
+
count, _ = PartRevisionPropertyDefinition.objects.get_or_create(name='Count', code='count',
|
|
110
|
+
type=constants.PART_REVISION_PROPERTY_TYPE_DECIMAL,
|
|
111
|
+
required=False, quantity_of_measure=qom_each)
|
|
112
|
+
|
|
113
|
+
defs = [sheen, voltage, max_voltage, count]
|
|
114
|
+
|
|
115
|
+
custom = None
|
|
116
|
+
if organization is not None:
|
|
117
|
+
custom, _ = PartRevisionPropertyDefinition.objects.get_or_create(name='Custom', code='custom',
|
|
118
|
+
type=constants.PART_REVISION_PROPERTY_TYPE_BOOLEAN,
|
|
119
|
+
required=False, quantity_of_measure=qom_custom)
|
|
120
|
+
defs.append(custom)
|
|
121
|
+
|
|
122
|
+
if part_class is not None:
|
|
123
|
+
part_class.property_definitions.add(*defs)
|
|
124
|
+
|
|
125
|
+
return sheen, voltage, max_voltage, count, custom
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def create_a_fake_part_revision(part, assembly, description="Brown dog", revision="1", some_required_definitions=True):
|
|
68
129
|
pch, created = PartRevision.objects.get_or_create(part=part, revision=revision, defaults={
|
|
69
130
|
'description': description,
|
|
70
131
|
'revision': revision,
|
|
71
|
-
'attribute': "Voltage",
|
|
72
|
-
'value': "3.3",
|
|
73
132
|
'assembly': assembly,
|
|
74
133
|
})
|
|
134
|
+
|
|
135
|
+
organization = part.organization
|
|
136
|
+
part_class = part.number_class if part else None
|
|
137
|
+
_, voltage, max_voltage, count, custom = create_some_fake_part_revision_property_definitions(organization,
|
|
138
|
+
some_required_definitions,
|
|
139
|
+
part_class=part_class)
|
|
140
|
+
v, mv, _, _, sv = create_some_fake_unit_definitions(organization)
|
|
141
|
+
|
|
142
|
+
PartRevisionProperty.objects.get_or_create(part_revision=pch, property_definition=voltage, unit_definition=v,
|
|
143
|
+
value_raw=".01")
|
|
144
|
+
PartRevisionProperty.objects.get_or_create(part_revision=pch, property_definition=max_voltage, unit_definition=v,
|
|
145
|
+
value_raw="3.5")
|
|
146
|
+
PartRevisionProperty.objects.get_or_create(part_revision=pch, property_definition=count, value_raw="5.2")
|
|
147
|
+
PartRevisionProperty.objects.get_or_create(part_revision=pch, property_definition=custom, unit_definition=sv,
|
|
148
|
+
value_raw="True")
|
|
149
|
+
|
|
75
150
|
return pch
|
|
76
151
|
|
|
77
152
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Generated by Django 5.2.8 on 2026-01-04 00:59
|
|
2
|
+
|
|
3
|
+
import django.db.models.deletion
|
|
4
|
+
from django.conf import settings
|
|
5
|
+
from django.db import migrations, models
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Migration(migrations.Migration):
|
|
9
|
+
|
|
10
|
+
dependencies = [
|
|
11
|
+
('bom', '0050_alter_organization_options'),
|
|
12
|
+
migrations.swappable_dependency(settings.BOM_ORGANIZATION_MODEL),
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
operations = [
|
|
16
|
+
migrations.AlterField(
|
|
17
|
+
model_name='manufacturer',
|
|
18
|
+
name='organization',
|
|
19
|
+
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.BOM_ORGANIZATION_MODEL),
|
|
20
|
+
),
|
|
21
|
+
migrations.AlterField(
|
|
22
|
+
model_name='part',
|
|
23
|
+
name='organization',
|
|
24
|
+
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.BOM_ORGANIZATION_MODEL),
|
|
25
|
+
),
|
|
26
|
+
migrations.AlterField(
|
|
27
|
+
model_name='partclass',
|
|
28
|
+
name='organization',
|
|
29
|
+
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.BOM_ORGANIZATION_MODEL),
|
|
30
|
+
),
|
|
31
|
+
migrations.AlterField(
|
|
32
|
+
model_name='seller',
|
|
33
|
+
name='organization',
|
|
34
|
+
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.BOM_ORGANIZATION_MODEL),
|
|
35
|
+
),
|
|
36
|
+
migrations.AlterField(
|
|
37
|
+
model_name='usermeta',
|
|
38
|
+
name='organization',
|
|
39
|
+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.BOM_ORGANIZATION_MODEL),
|
|
40
|
+
),
|
|
41
|
+
]
|